diff --git a/.gitignore b/.gitignore index dd4c143cd..7336c6641 100644 --- a/.gitignore +++ b/.gitignore @@ -4,8 +4,11 @@ **/out **/Payload/ **/PrebidMobileDemo.app/ -#**/Products +**/Products +**/example/Swift/PrebidDemo/Pods/ +**/example/ObjectiveC/PrebidDemo/Pods/ **/screenshot* +PrebidMobile.framework ######################################################################################## # macOS.gitignore diff --git a/.travis.yml b/.travis.yml index 665068052..d13a67fdd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,9 +1,7 @@ -language: objective-c +language: swift osx_image: xcode8 -env: -- XAMARIN_DEVICES_ID_PR=92132fb4 XAMARIN_DEVICES_ID_CRON=a3dab23a before_script: "./scripts/add-keys.sh" after_script: "./scripts/remove-key.sh" script: - "./scripts/buildPrebidMobile.sh" -- "./scripts/testPrebidMobile.sh" +- "./scripts/testPrebidMobile.sh" \ No newline at end of file diff --git a/PrebidMobile.podspec b/PrebidMobile.podspec index e8fa23d12..41bbac7e0 100644 --- a/PrebidMobile.podspec +++ b/PrebidMobile.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "PrebidMobile" - s.version = "0.5.3" + s.version = "1.0" s.summary = "PrebidMobile is a lightweight framework that integrates directly with Prebid Server." s.description = <<-DESC @@ -11,7 +11,7 @@ Pod::Spec.new do |s| s.license = { :type => "Apache License, Version 2.0", :text => <<-LICENSE - Copyright 2017 Prebid.org, Inc. + Copyright 2018-2019 Prebid.org, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -28,12 +28,10 @@ Pod::Spec.new do |s| } s.author = { "Prebid.org, Inc." => "info@prebid.org" } - s.platform = :ios, "8.0" + s.platform = :ios, "11.0" + s.swift_version = '3.2' s.source = { :git => "https://github.com/prebid/prebid-mobile-ios.git", :tag => "#{s.version}" } - s.source_files = "sdk/PrebidMobile", "sdk/PrebidMobile/**/*.{h,m}", "sdk/PrebidServerAdapter/**/*.{h,m}" - s.public_header_files = "sdk/PrebidServerAdapter/PBServerAdapter.h", "sdk/PrebidMobile/*.h", "sdk/PrebidMobile/Logging/*.h" - s.exclude_files = "sdk/PrebidMobile/**/PrebidMobile-umbrella.h" - s.requires_arc = true + s.source_files = "src/PrebidMobile/PrebidMobile","src/PrebidMobile/PrebidMobile/*.{h,swift}","src/PrebidMobile/PrebidMobile/**/*.swift" s.xcconfig = { :LIBRARY_SEARCH_PATHS => '$(inherited)', :OTHER_CFLAGS => '$(inherited)', diff --git a/README.md b/README.md index e0a23aecd..8545f9301 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ Get started with Prebid Mobile by creating a Prebid Server account [here](http:/ Easily include the Prebid Mobile SDK for your priamy ad server in your Podfile/ ``` -platform :ios, '8.0' +platform :ios, '11.0' target 'MyAmazingApp' do pod 'PrebidMobile' diff --git a/example/ObjectiveC/PrebidDemo/Podfile b/example/ObjectiveC/PrebidDemo/Podfile new file mode 100644 index 000000000..6bd4d46a6 --- /dev/null +++ b/example/ObjectiveC/PrebidDemo/Podfile @@ -0,0 +1,13 @@ +# Uncomment the next line to define a global platform for your project +# platform :ios, '9.0' + +target 'PrebidDemo' do + + + # Pods for PrebidDemo + + pod 'Google-Mobile-Ads-SDK' + + pod 'mopub-ios-sdk' + +end diff --git a/example/ObjectiveC/PrebidDemo/Podfile.lock b/example/ObjectiveC/PrebidDemo/Podfile.lock new file mode 100644 index 000000000..081d72f4a --- /dev/null +++ b/example/ObjectiveC/PrebidDemo/Podfile.lock @@ -0,0 +1,30 @@ +PODS: + - Google-Mobile-Ads-SDK (7.39.0) + - mopub-ios-sdk (5.5.0): + - mopub-ios-sdk/MoPubSDK (= 5.5.0) + - mopub-ios-sdk/Avid (5.5.0): + - mopub-ios-sdk/Core + - mopub-ios-sdk/Core (5.5.0) + - mopub-ios-sdk/Moat (5.5.0): + - mopub-ios-sdk/Core + - mopub-ios-sdk/MoPubSDK (5.5.0): + - mopub-ios-sdk/Avid + - mopub-ios-sdk/Core + - mopub-ios-sdk/Moat + +DEPENDENCIES: + - Google-Mobile-Ads-SDK + - mopub-ios-sdk + +SPEC REPOS: + https://github.com/cocoapods/specs.git: + - Google-Mobile-Ads-SDK + - mopub-ios-sdk + +SPEC CHECKSUMS: + Google-Mobile-Ads-SDK: d0f10a7c4d7015db23075ff316602350d12049db + mopub-ios-sdk: 937b82dd76d8a396ba6a22ae005a1e24c61bf28b + +PODFILE CHECKSUM: 046766c8e4e0e44a0c7bac93f52bd49e0cb7fac3 + +COCOAPODS: 1.5.3 diff --git a/example/ObjectiveC/PrebidDemo/PrebidDemo-Bridging-Header.h b/example/ObjectiveC/PrebidDemo/PrebidDemo-Bridging-Header.h new file mode 100644 index 000000000..1b2cb5d6d --- /dev/null +++ b/example/ObjectiveC/PrebidDemo/PrebidDemo-Bridging-Header.h @@ -0,0 +1,4 @@ +// +// Use this file to import your target's public headers that you would like to expose to Swift. +// + diff --git a/example/ObjectiveC/PrebidDemo/PrebidDemo.xcodeproj/project.pbxproj b/example/ObjectiveC/PrebidDemo/PrebidDemo.xcodeproj/project.pbxproj new file mode 100644 index 000000000..998f6de40 --- /dev/null +++ b/example/ObjectiveC/PrebidDemo/PrebidDemo.xcodeproj/project.pbxproj @@ -0,0 +1,536 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 60EE7AE421F11861000B12A8 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 60EE7AE321F11861000B12A8 /* AppDelegate.m */; }; + 60EE7AE721F11861000B12A8 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 60EE7AE621F11861000B12A8 /* ViewController.m */; }; + 60EE7AEA21F11861000B12A8 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 60EE7AE821F11861000B12A8 /* Main.storyboard */; }; + 60EE7AEC21F11864000B12A8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 60EE7AEB21F11864000B12A8 /* Assets.xcassets */; }; + 60EE7AEF21F11864000B12A8 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 60EE7AED21F11864000B12A8 /* LaunchScreen.storyboard */; }; + 60EE7AF221F11864000B12A8 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 60EE7AF121F11864000B12A8 /* main.m */; }; + 60EE7B1121F7B900000B12A8 /* PrebidNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 60EE7B1021F7B900000B12A8 /* PrebidNavigationController.m */; }; + 7483E1479FF730821B0CD46E /* libPods-PrebidDemo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F518154EA6D714E60F9C28A9 /* libPods-PrebidDemo.a */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 60EE7B1821F7CBBF000B12A8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 60EE7B1321F7CBBF000B12A8 /* PrebidMobile.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 60D792F2217E229A0080F428; + remoteInfo = PrebidMobile; + }; + 60EE7B1A21F7CBBF000B12A8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 60EE7B1321F7CBBF000B12A8 /* PrebidMobile.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 60D792FB217E229B0080F428; + remoteInfo = PrebidMobileTests; + }; + 60EE7B1C21F7CBC9000B12A8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 60EE7B1321F7CBBF000B12A8 /* PrebidMobile.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = 60D792F1217E229A0080F428; + remoteInfo = PrebidMobile; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 60EE7ADF21F11861000B12A8 /* PrebidDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PrebidDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 60EE7AE221F11861000B12A8 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + 60EE7AE321F11861000B12A8 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + 60EE7AE521F11861000B12A8 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + 60EE7AE621F11861000B12A8 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + 60EE7AE921F11861000B12A8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 60EE7AEB21F11864000B12A8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 60EE7AEE21F11864000B12A8 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 60EE7AF021F11864000B12A8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 60EE7AF121F11864000B12A8 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + 60EE7B0F21F7B900000B12A8 /* PrebidNavigationController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PrebidNavigationController.h; sourceTree = ""; }; + 60EE7B1021F7B900000B12A8 /* PrebidNavigationController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PrebidNavigationController.m; sourceTree = ""; }; + 60EE7B1321F7CBBF000B12A8 /* PrebidMobile.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PrebidMobile.xcodeproj; path = ../../../src/PrebidMobile/PrebidMobile.xcodeproj; sourceTree = ""; }; + 60EE7B2021F7D002000B12A8 /* PrebidDemo-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "PrebidDemo-Bridging-Header.h"; sourceTree = ""; }; + 8D9685DF5DC5A56162EAC304 /* Pods-PrebidDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PrebidDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-PrebidDemo/Pods-PrebidDemo.release.xcconfig"; sourceTree = ""; }; + F518154EA6D714E60F9C28A9 /* libPods-PrebidDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-PrebidDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + FAADFB7FEAEB9A813D375229 /* Pods-PrebidDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PrebidDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-PrebidDemo/Pods-PrebidDemo.debug.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 60EE7ADC21F11861000B12A8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7483E1479FF730821B0CD46E /* libPods-PrebidDemo.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 570A8DB05CBDE7E60C8C0478 /* Pods */ = { + isa = PBXGroup; + children = ( + FAADFB7FEAEB9A813D375229 /* Pods-PrebidDemo.debug.xcconfig */, + 8D9685DF5DC5A56162EAC304 /* Pods-PrebidDemo.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; + 60EE7AD621F11861000B12A8 = { + isa = PBXGroup; + children = ( + 60EE7B2021F7D002000B12A8 /* PrebidDemo-Bridging-Header.h */, + 60EE7B1321F7CBBF000B12A8 /* PrebidMobile.xcodeproj */, + 60EE7AE121F11861000B12A8 /* PrebidDemo */, + 60EE7AE021F11861000B12A8 /* Products */, + 570A8DB05CBDE7E60C8C0478 /* Pods */, + 643F76532DC75BFCCF4139A3 /* Frameworks */, + ); + sourceTree = ""; + }; + 60EE7AE021F11861000B12A8 /* Products */ = { + isa = PBXGroup; + children = ( + 60EE7ADF21F11861000B12A8 /* PrebidDemo.app */, + ); + name = Products; + sourceTree = ""; + }; + 60EE7AE121F11861000B12A8 /* PrebidDemo */ = { + isa = PBXGroup; + children = ( + 60EE7AE221F11861000B12A8 /* AppDelegate.h */, + 60EE7AE321F11861000B12A8 /* AppDelegate.m */, + 60EE7AE521F11861000B12A8 /* ViewController.h */, + 60EE7AE621F11861000B12A8 /* ViewController.m */, + 60EE7AE821F11861000B12A8 /* Main.storyboard */, + 60EE7AEB21F11864000B12A8 /* Assets.xcassets */, + 60EE7AED21F11864000B12A8 /* LaunchScreen.storyboard */, + 60EE7AF021F11864000B12A8 /* Info.plist */, + 60EE7AF121F11864000B12A8 /* main.m */, + 60EE7B0F21F7B900000B12A8 /* PrebidNavigationController.h */, + 60EE7B1021F7B900000B12A8 /* PrebidNavigationController.m */, + ); + path = PrebidDemo; + sourceTree = ""; + }; + 60EE7B1421F7CBBF000B12A8 /* Products */ = { + isa = PBXGroup; + children = ( + 60EE7B1921F7CBBF000B12A8 /* PrebidMobile.framework */, + 60EE7B1B21F7CBBF000B12A8 /* PrebidMobileTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 643F76532DC75BFCCF4139A3 /* Frameworks */ = { + isa = PBXGroup; + children = ( + F518154EA6D714E60F9C28A9 /* libPods-PrebidDemo.a */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 60EE7ADE21F11861000B12A8 /* PrebidDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 60EE7AF521F11864000B12A8 /* Build configuration list for PBXNativeTarget "PrebidDemo" */; + buildPhases = ( + 14F01326A2E8D468D07FC158 /* [CP] Check Pods Manifest.lock */, + 60EE7ADB21F11861000B12A8 /* Sources */, + 60EE7ADC21F11861000B12A8 /* Frameworks */, + 60EE7ADD21F11861000B12A8 /* Resources */, + C9958D70620122E25B8B4A4B /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + 60EE7B1D21F7CBC9000B12A8 /* PBXTargetDependency */, + ); + name = PrebidDemo; + productName = PrebidDemo; + productReference = 60EE7ADF21F11861000B12A8 /* PrebidDemo.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 60EE7AD721F11861000B12A8 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1010; + ORGANIZATIONNAME = Prebid; + TargetAttributes = { + 60EE7ADE21F11861000B12A8 = { + CreatedOnToolsVersion = 10.1; + LastSwiftMigration = 1010; + }; + }; + }; + buildConfigurationList = 60EE7ADA21F11861000B12A8 /* Build configuration list for PBXProject "PrebidDemo" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 60EE7AD621F11861000B12A8; + productRefGroup = 60EE7AE021F11861000B12A8 /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 60EE7B1421F7CBBF000B12A8 /* Products */; + ProjectRef = 60EE7B1321F7CBBF000B12A8 /* PrebidMobile.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + 60EE7ADE21F11861000B12A8 /* PrebidDemo */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + 60EE7B1921F7CBBF000B12A8 /* PrebidMobile.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = PrebidMobile.framework; + remoteRef = 60EE7B1821F7CBBF000B12A8 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 60EE7B1B21F7CBBF000B12A8 /* PrebidMobileTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = PrebidMobileTests.xctest; + remoteRef = 60EE7B1A21F7CBBF000B12A8 /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + 60EE7ADD21F11861000B12A8 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 60EE7AEF21F11864000B12A8 /* LaunchScreen.storyboard in Resources */, + 60EE7AEC21F11864000B12A8 /* Assets.xcassets in Resources */, + 60EE7AEA21F11861000B12A8 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 14F01326A2E8D468D07FC158 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-PrebidDemo-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + C9958D70620122E25B8B4A4B /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${SRCROOT}/Pods/Target Support Files/Pods-PrebidDemo/Pods-PrebidDemo-resources.sh", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdBrowserController.xib", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn.png", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@2x.png", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@3x.png", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX.png", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@2x.png", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@3x.png", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCountdownTimer.html", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon.png", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@2x.png", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@3x.png", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn.png", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@2x.png", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@3x.png", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn.png", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@2x.png", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@3x.png", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn.png", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@2x.png", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@3x.png", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MRAID.bundle", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPAdapters.plist", + ); + name = "[CP] Copy Pods Resources"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPAdBrowserController.nib", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseBtn.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseBtn@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseBtn@3x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButtonX.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButtonX@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButtonX@3x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCountdownTimer.html", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDAAIcon.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDAAIcon@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDAAIcon@3x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPMutedBtn.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPMutedBtn@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPMutedBtn@3x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPPlayBtn.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPPlayBtn@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPPlayBtn@3x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPUnmutedBtn.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPUnmutedBtn@2x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPUnmutedBtn@3x.png", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MRAID.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPAdapters.plist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-PrebidDemo/Pods-PrebidDemo-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 60EE7ADB21F11861000B12A8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 60EE7AE721F11861000B12A8 /* ViewController.m in Sources */, + 60EE7B1121F7B900000B12A8 /* PrebidNavigationController.m in Sources */, + 60EE7AF221F11864000B12A8 /* main.m in Sources */, + 60EE7AE421F11861000B12A8 /* AppDelegate.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 60EE7B1D21F7CBC9000B12A8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = PrebidMobile; + targetProxy = 60EE7B1C21F7CBC9000B12A8 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 60EE7AE821F11861000B12A8 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 60EE7AE921F11861000B12A8 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 60EE7AED21F11864000B12A8 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 60EE7AEE21F11864000B12A8 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 60EE7AF321F11864000B12A8 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.1; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + 60EE7AF421F11864000B12A8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 12.1; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 60EE7AF621F11864000B12A8 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FAADFB7FEAEB9A813D375229 /* Pods-PrebidDemo.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_STYLE = Automatic; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = HR94J6TSB3; + INFOPLIST_FILE = PrebidDemo/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.Prebid.PrebidDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "PrebidDemo/PrebidDemo-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 60EE7AF721F11864000B12A8 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 8D9685DF5DC5A56162EAC304 /* Pods-PrebidDemo.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_STYLE = Automatic; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = HR94J6TSB3; + INFOPLIST_FILE = PrebidDemo/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.Prebid.PrebidDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "PrebidDemo/PrebidDemo-Bridging-Header.h"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 60EE7ADA21F11861000B12A8 /* Build configuration list for PBXProject "PrebidDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 60EE7AF321F11864000B12A8 /* Debug */, + 60EE7AF421F11864000B12A8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 60EE7AF521F11864000B12A8 /* Build configuration list for PBXNativeTarget "PrebidDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 60EE7AF621F11864000B12A8 /* Debug */, + 60EE7AF721F11864000B12A8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 60EE7AD721F11861000B12A8 /* Project object */; +} diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/example/ObjectiveC/PrebidDemo/PrebidDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 67% rename from examples/PrebidMobileDemo/PrebidMobileDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to example/ObjectiveC/PrebidDemo/PrebidDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 9bab51df2..42be5709c 100644 --- a/examples/PrebidMobileDemo/PrebidMobileDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/example/ObjectiveC/PrebidDemo/PrebidDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:PrebidDemo.xcodeproj"> diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/ObjectiveC/PrebidDemo/PrebidDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from examples/PrebidMobileDemo/PrebidMobileDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to example/ObjectiveC/PrebidDemo/PrebidDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo.xcworkspace/contents.xcworkspacedata b/example/ObjectiveC/PrebidDemo/PrebidDemo.xcworkspace/contents.xcworkspacedata similarity index 77% rename from examples/PrebidMobileDemo/PrebidMobileDemo.xcworkspace/contents.xcworkspacedata rename to example/ObjectiveC/PrebidDemo/PrebidDemo.xcworkspace/contents.xcworkspacedata index 1457477bc..003c57414 100644 --- a/examples/PrebidMobileDemo/PrebidMobileDemo.xcworkspace/contents.xcworkspacedata +++ b/example/ObjectiveC/PrebidDemo/PrebidDemo.xcworkspace/contents.xcworkspacedata @@ -2,7 +2,7 @@ + location = "group:PrebidDemo.xcodeproj"> diff --git a/sdk/PrebidMobile.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/ObjectiveC/PrebidDemo/PrebidDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from sdk/PrebidMobile.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to example/ObjectiveC/PrebidDemo/PrebidDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/SettingsViewController.h b/example/ObjectiveC/PrebidDemo/PrebidDemo/AppDelegate.h similarity index 78% rename from examples/PrebidMobileDemo/PrebidMobileDemo/SettingsViewController.h rename to example/ObjectiveC/PrebidDemo/PrebidDemo/AppDelegate.h index 739f37c82..19ce41063 100644 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/SettingsViewController.h +++ b/example/ObjectiveC/PrebidDemo/PrebidDemo/AppDelegate.h @@ -1,4 +1,4 @@ -/* Copyright 2017 Prebid.org, Inc. +/* Copyright 2018-2019 Prebid.org, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -15,6 +15,10 @@ #import -@interface SettingsViewController : UIViewController +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + @end + diff --git a/example/ObjectiveC/PrebidDemo/PrebidDemo/AppDelegate.m b/example/ObjectiveC/PrebidDemo/PrebidDemo/AppDelegate.m new file mode 100644 index 000000000..e874d0b2c --- /dev/null +++ b/example/ObjectiveC/PrebidDemo/PrebidDemo/AppDelegate.m @@ -0,0 +1,61 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "AppDelegate.h" +@import PrebidMobile; + +@interface AppDelegate () + +@end + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + Targeting.shared.gender = GenderMale; + + // Override point for customization after application launch. + return YES; +} + + +- (void)applicationWillResignActive:(UIApplication *)application { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. +} + + +- (void)applicationDidEnterBackground:(UIApplication *)application { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. +} + + +- (void)applicationWillEnterForeground:(UIApplication *)application { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. +} + + +- (void)applicationDidBecomeActive:(UIApplication *)application { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. +} + + +- (void)applicationWillTerminate:(UIApplication *)application { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. +} + + +@end diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/ObjectiveC/PrebidDemo/PrebidDemo/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 77% rename from examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/Contents.json rename to example/ObjectiveC/PrebidDemo/PrebidDemo/Assets.xcassets/AppIcon.appiconset/Contents.json index 74ddf05f7..d8db8d65f 100644 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/example/ObjectiveC/PrebidDemo/PrebidDemo/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,51 +1,43 @@ { "images" : [ { - "size" : "20x20", "idiom" : "iphone", - "filename" : "AppNexus-Prebid-20pt-@2x.png", + "size" : "20x20", "scale" : "2x" }, { - "size" : "20x20", "idiom" : "iphone", - "filename" : "AppNexus-Prebid-20pt-@3x.png", + "size" : "20x20", "scale" : "3x" }, { - "size" : "29x29", "idiom" : "iphone", - "filename" : "AppNexus-Prebid-29pt-@2x.png", + "size" : "29x29", "scale" : "2x" }, { - "size" : "29x29", "idiom" : "iphone", - "filename" : "AppNexus-Prebid-29pt-@3x.png", + "size" : "29x29", "scale" : "3x" }, { - "size" : "40x40", "idiom" : "iphone", - "filename" : "AppNexus-Prebid-40pt-@2x.png", + "size" : "40x40", "scale" : "2x" }, { - "size" : "40x40", "idiom" : "iphone", - "filename" : "AppNexus-Prebid-40pt-@3x.png", + "size" : "40x40", "scale" : "3x" }, { - "size" : "60x60", "idiom" : "iphone", - "filename" : "AppNexus-Prebid-60pt-@2x.png", + "size" : "60x60", "scale" : "2x" }, { - "size" : "60x60", "idiom" : "iphone", - "filename" : "AppNexus-Prebid-60pt-@3x.png", + "size" : "60x60", "scale" : "3x" }, { @@ -94,9 +86,8 @@ "scale" : "2x" }, { - "size" : "1024x1024", "idiom" : "ios-marketing", - "filename" : "AppNexus-Prebid-1024pt-@1x.png", + "size" : "1024x1024", "scale" : "1x" } ], diff --git a/example/ObjectiveC/PrebidDemo/PrebidDemo/Assets.xcassets/Contents.json b/example/ObjectiveC/PrebidDemo/PrebidDemo/Assets.xcassets/Contents.json new file mode 100644 index 000000000..da4a164c9 --- /dev/null +++ b/example/ObjectiveC/PrebidDemo/PrebidDemo/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/Base.lproj/LaunchScreen.storyboard b/example/ObjectiveC/PrebidDemo/PrebidDemo/Base.lproj/LaunchScreen.storyboard similarity index 73% rename from examples/PrebidMobileDemo/PrebidMobileDemo/Base.lproj/LaunchScreen.storyboard rename to example/ObjectiveC/PrebidDemo/PrebidDemo/Base.lproj/LaunchScreen.storyboard index fdf3f97d1..bfa361294 100644 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/Base.lproj/LaunchScreen.storyboard +++ b/example/ObjectiveC/PrebidDemo/PrebidDemo/Base.lproj/LaunchScreen.storyboard @@ -1,7 +1,8 @@ - + - + + @@ -9,14 +10,11 @@ - - - - + diff --git a/example/ObjectiveC/PrebidDemo/PrebidDemo/Base.lproj/Main.storyboard b/example/ObjectiveC/PrebidDemo/PrebidDemo/Base.lproj/Main.storyboard new file mode 100644 index 000000000..43178ff0a --- /dev/null +++ b/example/ObjectiveC/PrebidDemo/PrebidDemo/Base.lproj/Main.storyboard @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/Info.plist b/example/ObjectiveC/PrebidDemo/PrebidDemo/Info.plist similarity index 93% rename from examples/PrebidMobileDemo/PrebidMobileDemo/Info.plist rename to example/ObjectiveC/PrebidDemo/PrebidDemo/Info.plist index a558903f6..97de735e6 100644 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/Info.plist +++ b/example/ObjectiveC/PrebidDemo/PrebidDemo/Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -24,6 +24,8 @@ NSAllowsArbitraryLoads + NSAllowsArbitraryLoadsInWebContent + UILaunchStoryboardName LaunchScreen @@ -46,7 +48,5 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight - gad_preferred_webview - wkwebview diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/BannerViewControllers/BannerTestsViewController.h b/example/ObjectiveC/PrebidDemo/PrebidDemo/PrebidNavigationController.h similarity index 78% rename from examples/PrebidMobileDemo/PrebidMobileDemo/BannerViewControllers/BannerTestsViewController.h rename to example/ObjectiveC/PrebidDemo/PrebidDemo/PrebidNavigationController.h index e23218095..3ec6ab833 100644 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/BannerViewControllers/BannerTestsViewController.h +++ b/example/ObjectiveC/PrebidDemo/PrebidDemo/PrebidNavigationController.h @@ -1,4 +1,4 @@ -/* Copyright 2017 Prebid.org, Inc. +/* Copyright 2018-2019 Prebid.org, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -15,8 +15,10 @@ #import -@interface BannerTestsViewController : UIViewController +NS_ASSUME_NONNULL_BEGIN -- (instancetype)initWithSettings:(NSDictionary *)settings; +@interface PrebidNavigationController : UITableViewController @end + +NS_ASSUME_NONNULL_END diff --git a/example/ObjectiveC/PrebidDemo/PrebidDemo/PrebidNavigationController.m b/example/ObjectiveC/PrebidDemo/PrebidDemo/PrebidNavigationController.m new file mode 100644 index 000000000..045421800 --- /dev/null +++ b/example/ObjectiveC/PrebidDemo/PrebidDemo/PrebidNavigationController.m @@ -0,0 +1,72 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "PrebidNavigationController.h" +#import "ViewController.h" + +@interface PrebidNavigationController () + +@property (nonatomic, strong) NSArray *adServerList; +@property (nonatomic, strong) NSArray *adUnitList; + +@end + +@implementation PrebidNavigationController + +- (void)viewDidLoad { + [super viewDidLoad]; + + self.navigationItem.title = @"Prebid Demo"; + + self.title = @"Prebid Demo"; + + self.adServerList = @[@"DFP", @"MoPub"]; + self.adUnitList = @[@"Banner", @"Interstitial"]; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return self.adServerList.count; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.adUnitList.count; +} + +- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section +{ + return [self.adServerList objectAtIndex:section]; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath +{ + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; + + NSString *adUnit = [self.adUnitList objectAtIndex:indexPath.row]; + cell.textLabel.text = adUnit; + + return cell; +} + +-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + NSString * storyboardName = @"Main"; + UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle: nil]; + ViewController * viewController = [storyboard instantiateViewControllerWithIdentifier:@"viewController"]; + viewController.adServer = [self.adServerList objectAtIndex:indexPath.section]; + viewController.adUnit = [self.adUnitList objectAtIndex:indexPath.row]; + [self.navigationController pushViewController:viewController animated:YES]; +} +@end diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/IntersitialViewControllers/InterstitialTestsViewController.h b/example/ObjectiveC/PrebidDemo/PrebidDemo/ViewController.h similarity index 75% rename from examples/PrebidMobileDemo/PrebidMobileDemo/IntersitialViewControllers/InterstitialTestsViewController.h rename to example/ObjectiveC/PrebidDemo/PrebidDemo/ViewController.h index 868149517..bb70d168e 100644 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/IntersitialViewControllers/InterstitialTestsViewController.h +++ b/example/ObjectiveC/PrebidDemo/PrebidDemo/ViewController.h @@ -1,4 +1,4 @@ -/* Copyright 2017 Prebid.org, Inc. +/* Copyright 2018-2019 Prebid.org, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -15,8 +15,12 @@ #import -@interface InterstitialTestsViewController : UIViewController +@interface ViewController : UIViewController + +@property (nonatomic, strong) NSString *adServer; + +@property (nonatomic, strong) NSString *adUnit; -- (instancetype)initWithSettings:(NSDictionary *)settings; @end + diff --git a/example/ObjectiveC/PrebidDemo/PrebidDemo/ViewController.m b/example/ObjectiveC/PrebidDemo/PrebidDemo/ViewController.m new file mode 100644 index 000000000..b69d08737 --- /dev/null +++ b/example/ObjectiveC/PrebidDemo/PrebidDemo/ViewController.m @@ -0,0 +1,191 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +@import GoogleMobileAds; +@import PrebidMobile; + +#import "ViewController.h" +#import "MoPub.h" + +@interface ViewController () + @property (weak, nonatomic) IBOutlet UIView *bannerView; + @property (nonatomic, strong) DFPBannerView *dfpView; + @property (nonatomic, strong) DFPInterstitial *dfpInterstitial; + @property (nonatomic, strong) DFPRequest *request; + @property (nonatomic, strong) MPAdView *mopubAdView; + @property (nonatomic, strong) MPInterstitialAdController *mopubInterstitial; + @property (nonatomic, strong) BannerAdUnit *bannerUnit; + @property (nonatomic, strong) InterstitialAdUnit *interstitialUnit; + + @end + +@implementation ViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + + Prebid.shared.prebidServerAccountId = @"bfa84af2-bd16-4d35-96ad-31c6bb888df0"; + Prebid.shared.prebidServerHost = PrebidHostAppnexus; + Prebid.shared.shareGeoLocation = true; + // NSError* err=nil; + // [[Prebid shared] setCustomPrebidServerWithUrl:@"" error:&err]; + // if(err == nil) + + if([self.adServer isEqualToString:@"DFP"] && [self.adUnit isEqualToString:@"Banner"]) + [self loadDFPBanner]; + if([self.adServer isEqualToString:@"DFP"] && [self.adUnit isEqualToString:@"Interstitial"]) + [self loadDFPInterstitial]; + if([self.adServer isEqualToString:@"MoPub"] && [self.adUnit isEqualToString:@"Banner"]) + [self loadMoPubBanner]; + if([self.adServer isEqualToString:@"MoPub"] && [self.adUnit isEqualToString:@"Interstitial"]) + [self loadMoPubInterstitial]; + + + // Do any additional setup after loading the view, typically from a nib. +} + +-(void) viewDidDisappear:(BOOL)animated{ + [super viewDidDisappear:animated]; + [self.bannerUnit stopAutoRefresh]; +} + + + +-(void) loadDFPBanner { + + self.bannerUnit = [[BannerAdUnit alloc] initWithConfigId:@"6ace8c7d-88c0-4623-8117-75bc3f0a2e45" size:CGSizeMake(300, 250)]; + [self.bannerUnit setAutoRefreshMillisWithTime:35000]; + self.dfpView = [[DFPBannerView alloc] initWithAdSize:kGADAdSizeMediumRectangle]; + self.dfpView.rootViewController = self; + self.dfpView.adUnitID = @"/19968336/PrebidMobileValidator_Banner_All_Sizes"; + self.dfpView.delegate = self; + [self.bannerView addSubview:self.dfpView]; + self.dfpView.backgroundColor = [UIColor redColor]; + self.request = [[DFPRequest alloc] init]; + self.request.testDevices = @[kDFPSimulatorID]; + + [self.bannerUnit fetchDemandWithAdObject:self.request completion:^(enum ResultCode result) { + NSLog(@"Prebid demand result %ld", (long)result); + dispatch_async(dispatch_get_main_queue(), ^{ + [self.dfpView loadRequest:self.request]; + }); + }]; +} + +-(void) loadDFPInterstitial { + + self.interstitialUnit = [[InterstitialAdUnit alloc] initWithConfigId:@"625c6125-f19e-4d5b-95c5-55501526b2a4"]; + self.dfpInterstitial = [[DFPInterstitial alloc] initWithAdUnitID:@"/19968336/PrebidMobileValidator_Interstitial"]; + self.dfpInterstitial.delegate = self; + self.request = [[DFPRequest alloc] init]; + self.request.testDevices = @[kDFPSimulatorID]; + [self.interstitialUnit fetchDemandWithAdObject:self.request completion:^(enum ResultCode result) { + NSLog(@"Prebid demand result %ld", (long)result); + [self.dfpInterstitial loadRequest:self.request]; + }]; +} + +-(void) loadMoPubBanner { + + MPMoPubConfiguration *configuration = [[MPMoPubConfiguration alloc] initWithAdUnitIdForAppInitialization:@"a935eac11acd416f92640411234fbba6"]; + + [[MoPub sharedInstance] initializeSdkWithConfiguration:configuration completion:^{ + + }]; + self.mopubAdView = [[MPAdView alloc] initWithAdUnitId:@"a935eac11acd416f92640411234fbba6" size:CGSizeMake(300, 250)]; + self.mopubAdView.delegate = self; + + [self.bannerView addSubview:self.mopubAdView]; + + self.bannerUnit = [[BannerAdUnit alloc] initWithConfigId:@"6ace8c7d-88c0-4623-8117-75bc3f0a2e45" size:CGSizeMake(300, 250)]; + // Do any additional setup after loading the view, typically from a nib. + [self.bannerUnit fetchDemandWithAdObject:self.mopubAdView completion:^(enum ResultCode result) { + NSLog(@"Prebid demand result %ld", (long)result); + [self.mopubAdView loadAd]; + }]; +} + +-(void) loadMoPubInterstitial { + + self.interstitialUnit = [[InterstitialAdUnit alloc] initWithConfigId:@"625c6125-f19e-4d5b-95c5-55501526b2a4"]; + MPMoPubConfiguration *configuration = [[MPMoPubConfiguration alloc] initWithAdUnitIdForAppInitialization:@"2829868d308643edbec0795977f17437"]; + [[MoPub sharedInstance] initializeSdkWithConfiguration:configuration completion:nil]; + self.mopubInterstitial = [MPInterstitialAdController interstitialAdControllerForAdUnitId:@"2829868d308643edbec0795977f17437"]; + self.mopubInterstitial.delegate = self; + [self.interstitialUnit fetchDemandWithAdObject:self.mopubInterstitial completion:^(enum ResultCode result) { + NSLog(@"Prebid demand result %ld", (long)result); + [self.mopubInterstitial loadAd]; + }]; + + +} + +#pragma mark :- DFP delegates +-(void) adViewDidReceiveAd:(GADBannerView *)bannerView { + NSLog(@"Ad received"); +} + +- (void)adView:(GADBannerView *)bannerView didFailToReceiveAdWithError:(GADRequestError *)error +{ + NSLog(@"adView:didFailToReceiveAdWithError: %@", error.localizedDescription); +} + +- (void)interstitialDidReceiveAd:(GADInterstitial *)ad +{ + if (self.dfpInterstitial.isReady) + { + NSLog(@"Ad ready"); + [self.dfpInterstitial presentFromRootViewController:self]; + } + else + { + NSLog(@"Ad not ready"); + } +} + +- (void)interstitialDidDismissScreen:(GADInterstitial *)ad +{ + NSLog(@"Ad dismissed"); +} + +- (void)interstitialWillPresentScreen:(GADInterstitial *)ad +{ + NSLog(@"Ad presented"); +} + + +#pragma mark :- Mopub delegates +-(void) adViewDidLoadAd:(MPAdView *)view { + NSLog(@"Ad received"); +} + +- (UIViewController *)viewControllerForPresentingModalView { + return self; +} + +- (void)interstitialDidLoadAd:(MPInterstitialAdController *)interstitial +{ + NSLog(@"Ad ready"); + if (self.mopubInterstitial.ready) { + [self.mopubInterstitial showFromViewController:self]; + } +} +- (void)interstitialDidFailToLoadAd:(MPInterstitialAdController *)interstitial +{ + NSLog(@"Ad not ready"); +} + + +@end diff --git a/example/ObjectiveC/PrebidDemo/PrebidDemo/main.m b/example/ObjectiveC/PrebidDemo/PrebidDemo/main.m new file mode 100644 index 000000000..7dc49b7f1 --- /dev/null +++ b/example/ObjectiveC/PrebidDemo/PrebidDemo/main.m @@ -0,0 +1,23 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/example/Swift/PrebidDemo/Podfile b/example/Swift/PrebidDemo/Podfile new file mode 100644 index 000000000..95980f0ef --- /dev/null +++ b/example/Swift/PrebidDemo/Podfile @@ -0,0 +1,15 @@ +# Uncomment the next line to define a global platform for your project +# platform :ios, '9.0' + +target 'PrebidDemo' do + # Comment the next line if you're not using Swift and don't want to use dynamic frameworks + use_frameworks! + + # Pods for PrebidDemo + pod 'Google-Mobile-Ads-SDK' + pod 'mopub-ios-sdk' + + target 'PrebidDemoTests' do + inherit! :search_paths + end +end diff --git a/example/Swift/PrebidDemo/Podfile.lock b/example/Swift/PrebidDemo/Podfile.lock new file mode 100644 index 000000000..0fc8246e5 --- /dev/null +++ b/example/Swift/PrebidDemo/Podfile.lock @@ -0,0 +1,30 @@ +PODS: + - Google-Mobile-Ads-SDK (7.39.0) + - mopub-ios-sdk (5.5.0): + - mopub-ios-sdk/MoPubSDK (= 5.5.0) + - mopub-ios-sdk/Avid (5.5.0): + - mopub-ios-sdk/Core + - mopub-ios-sdk/Core (5.5.0) + - mopub-ios-sdk/Moat (5.5.0): + - mopub-ios-sdk/Core + - mopub-ios-sdk/MoPubSDK (5.5.0): + - mopub-ios-sdk/Avid + - mopub-ios-sdk/Core + - mopub-ios-sdk/Moat + +DEPENDENCIES: + - Google-Mobile-Ads-SDK + - mopub-ios-sdk + +SPEC REPOS: + https://github.com/cocoapods/specs.git: + - Google-Mobile-Ads-SDK + - mopub-ios-sdk + +SPEC CHECKSUMS: + Google-Mobile-Ads-SDK: d0f10a7c4d7015db23075ff316602350d12049db + mopub-ios-sdk: 937b82dd76d8a396ba6a22ae005a1e24c61bf28b + +PODFILE CHECKSUM: a6cb731f1cf41f95a86f0113cec53bd282459ef5 + +COCOAPODS: 1.5.3 diff --git a/example/Swift/PrebidDemo/PrebidDemo.xcodeproj/project.pbxproj b/example/Swift/PrebidDemo/PrebidDemo.xcodeproj/project.pbxproj new file mode 100644 index 000000000..a2114dddc --- /dev/null +++ b/example/Swift/PrebidDemo/PrebidDemo.xcodeproj/project.pbxproj @@ -0,0 +1,683 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 382AF88022120D7000CD4B26 /* PBViewTool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38F5157B2211EBDD009F067B /* PBViewTool.swift */; }; + 5F3DD02DD82FF744050F3A42 /* Pods_PrebidDemoTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 82EEADA1C36E1EAB53062714 /* Pods_PrebidDemoTests.framework */; }; + 600CF06622088CD400C95176 /* PrebidDemoTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 600CF06522088CD400C95176 /* PrebidDemoTests.swift */; }; + 607B047D21963820000C0879 /* IndexController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607B047C21963820000C0879 /* IndexController.swift */; }; + 60D7932B2180E2730080F428 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60D7932A2180E2730080F428 /* AppDelegate.swift */; }; + 60D793302180E2730080F428 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 60D7932E2180E2730080F428 /* Main.storyboard */; }; + 60D793322180E2750080F428 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 60D793312180E2750080F428 /* Assets.xcassets */; }; + 60D793352180E2750080F428 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 60D793332180E2750080F428 /* LaunchScreen.storyboard */; }; + 60EE7AFC21F12477000B12A8 /* PrebidMobile.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60A6109E2180F3020095746C /* PrebidMobile.framework */; }; + 60EE7B0221F12A2F000B12A8 /* PrebidMobile.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 60A6109E2180F3020095746C /* PrebidMobile.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 60EE7B0921F770A4000B12A8 /* InterstitialViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60EE7B0821F770A4000B12A8 /* InterstitialViewController.swift */; }; + 97AACE45220C67FC0070EC46 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97AACE44220C67FC0070EC46 /* Constants.swift */; }; + 97AACE4A220C70210070EC46 /* BannerController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60D7932C2180E2730080F428 /* BannerController.swift */; }; + B8247B83B2A4DAD259E550EB /* Pods_PrebidDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D00DA8F1BC6437DE7C642F4 /* Pods_PrebidDemo.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 600CF06822088CD400C95176 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 60D7931F2180E2730080F428 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 60D793262180E2730080F428; + remoteInfo = PrebidDemo; + }; + 60A6109D2180F3020095746C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 60A610972180F3010095746C /* PrebidMobile.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 60D792F2217E229A0080F428; + remoteInfo = PrebidMobile; + }; + 60A6109F2180F3020095746C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 60A610972180F3010095746C /* PrebidMobile.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 60D792FB217E229B0080F428; + remoteInfo = PrebidMobileTests; + }; + 60EE7AFA21F123A9000B12A8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 60A610972180F3010095746C /* PrebidMobile.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = 60D792F1217E229A0080F428; + remoteInfo = PrebidMobile; + }; + 60EE7B0321F12A2F000B12A8 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 60A610972180F3010095746C /* PrebidMobile.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = 60D792F1217E229A0080F428; + remoteInfo = PrebidMobile; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 60D7935C2180E40D0080F428 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 60EE7B0221F12A2F000B12A8 /* PrebidMobile.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 30B706CBEF8058018B2105DE /* Pods-PrebidDemoTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PrebidDemoTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-PrebidDemoTests/Pods-PrebidDemoTests.debug.xcconfig"; sourceTree = ""; }; + 38F5157B2211EBDD009F067B /* PBViewTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PBViewTool.swift; sourceTree = ""; }; + 44B6D3CB327A65E86E5192CF /* Pods-PrebidDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PrebidDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-PrebidDemo/Pods-PrebidDemo.release.xcconfig"; sourceTree = ""; }; + 5C7B6E2ACBB2F04F820EA11A /* Pods-PrebidDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PrebidDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-PrebidDemo/Pods-PrebidDemo.debug.xcconfig"; sourceTree = ""; }; + 5D00DA8F1BC6437DE7C642F4 /* Pods_PrebidDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PrebidDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 600CF06322088CD400C95176 /* PrebidDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PrebidDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 600CF06522088CD400C95176 /* PrebidDemoTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrebidDemoTests.swift; sourceTree = ""; }; + 600CF06722088CD400C95176 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 6062B196218243C200CE1BA3 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; + 607B047C21963820000C0879 /* IndexController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IndexController.swift; sourceTree = ""; }; + 60A610972180F3010095746C /* PrebidMobile.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PrebidMobile.xcodeproj; path = ../../../src/PrebidMobile/PrebidMobile.xcodeproj; sourceTree = ""; }; + 60D793272180E2730080F428 /* PrebidDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PrebidDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 60D7932A2180E2730080F428 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 60D7932C2180E2730080F428 /* BannerController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BannerController.swift; sourceTree = ""; }; + 60D7932F2180E2730080F428 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 60D793312180E2750080F428 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 60D793342180E2750080F428 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 60D793362180E2750080F428 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 60EE7B0821F770A4000B12A8 /* InterstitialViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterstitialViewController.swift; sourceTree = ""; }; + 82EEADA1C36E1EAB53062714 /* Pods_PrebidDemoTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PrebidDemoTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 97AACE44220C67FC0070EC46 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; + B2E125C6A6F36CD376458748 /* Pods-PrebidDemoTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PrebidDemoTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-PrebidDemoTests/Pods-PrebidDemoTests.release.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 600CF06022088CD400C95176 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5F3DD02DD82FF744050F3A42 /* Pods_PrebidDemoTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 60D793242180E2730080F428 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 60EE7AFC21F12477000B12A8 /* PrebidMobile.framework in Frameworks */, + B8247B83B2A4DAD259E550EB /* Pods_PrebidDemo.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 2949C97550D64CBD36532A38 /* Pods */ = { + isa = PBXGroup; + children = ( + 5C7B6E2ACBB2F04F820EA11A /* Pods-PrebidDemo.debug.xcconfig */, + 44B6D3CB327A65E86E5192CF /* Pods-PrebidDemo.release.xcconfig */, + 30B706CBEF8058018B2105DE /* Pods-PrebidDemoTests.debug.xcconfig */, + B2E125C6A6F36CD376458748 /* Pods-PrebidDemoTests.release.xcconfig */, + ); + name = Pods; + sourceTree = ""; + }; + 600CF06422088CD400C95176 /* PrebidDemoTests */ = { + isa = PBXGroup; + children = ( + 600CF06522088CD400C95176 /* PrebidDemoTests.swift */, + 97AACE44220C67FC0070EC46 /* Constants.swift */, + 600CF06722088CD400C95176 /* Info.plist */, + 38F5157B2211EBDD009F067B /* PBViewTool.swift */, + ); + path = PrebidDemoTests; + sourceTree = ""; + }; + 60A610982180F3010095746C /* Products */ = { + isa = PBXGroup; + children = ( + 60A6109E2180F3020095746C /* PrebidMobile.framework */, + 60A610A02180F3020095746C /* PrebidMobileTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 60D7931E2180E2730080F428 = { + isa = PBXGroup; + children = ( + 60A610972180F3010095746C /* PrebidMobile.xcodeproj */, + 60D793292180E2730080F428 /* PrebidDemo */, + 600CF06422088CD400C95176 /* PrebidDemoTests */, + 60D793282180E2730080F428 /* Products */, + 60D793562180E3770080F428 /* Frameworks */, + 2949C97550D64CBD36532A38 /* Pods */, + ); + sourceTree = ""; + }; + 60D793282180E2730080F428 /* Products */ = { + isa = PBXGroup; + children = ( + 60D793272180E2730080F428 /* PrebidDemo.app */, + 600CF06322088CD400C95176 /* PrebidDemoTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 60D793292180E2730080F428 /* PrebidDemo */ = { + isa = PBXGroup; + children = ( + 60D7932A2180E2730080F428 /* AppDelegate.swift */, + 60D7932C2180E2730080F428 /* BannerController.swift */, + 60D7932E2180E2730080F428 /* Main.storyboard */, + 60D793312180E2750080F428 /* Assets.xcassets */, + 60D793332180E2750080F428 /* LaunchScreen.storyboard */, + 60D793362180E2750080F428 /* Info.plist */, + 607B047C21963820000C0879 /* IndexController.swift */, + 60EE7B0821F770A4000B12A8 /* InterstitialViewController.swift */, + ); + path = PrebidDemo; + sourceTree = ""; + }; + 60D793562180E3770080F428 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 6062B196218243C200CE1BA3 /* CoreLocation.framework */, + 5D00DA8F1BC6437DE7C642F4 /* Pods_PrebidDemo.framework */, + 82EEADA1C36E1EAB53062714 /* Pods_PrebidDemoTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 600CF06222088CD400C95176 /* PrebidDemoTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 600CF06D22088CD400C95176 /* Build configuration list for PBXNativeTarget "PrebidDemoTests" */; + buildPhases = ( + 38460DBCCC6C7DA9F9C9037D /* [CP] Check Pods Manifest.lock */, + 600CF05F22088CD400C95176 /* Sources */, + 600CF06022088CD400C95176 /* Frameworks */, + 600CF06122088CD400C95176 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 600CF06922088CD400C95176 /* PBXTargetDependency */, + ); + name = PrebidDemoTests; + productName = PrebidDemoTests; + productReference = 600CF06322088CD400C95176 /* PrebidDemoTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 60D793262180E2730080F428 /* PrebidDemo */ = { + isa = PBXNativeTarget; + buildConfigurationList = 60D793392180E2750080F428 /* Build configuration list for PBXNativeTarget "PrebidDemo" */; + buildPhases = ( + CECAE1B09BD5EF94E75FFE8B /* [CP] Check Pods Manifest.lock */, + 60D793232180E2730080F428 /* Sources */, + 60D793242180E2730080F428 /* Frameworks */, + 60D793252180E2730080F428 /* Resources */, + 60D7935C2180E40D0080F428 /* Embed Frameworks */, + 72ACD9274A9AE48AD4381B53 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 60EE7AFB21F123A9000B12A8 /* PBXTargetDependency */, + 60EE7B0421F12A2F000B12A8 /* PBXTargetDependency */, + ); + name = PrebidDemo; + productName = PrebidDemo; + productReference = 60D793272180E2730080F428 /* PrebidDemo.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 60D7931F2180E2730080F428 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1010; + LastUpgradeCheck = 0940; + ORGANIZATIONNAME = Prebid; + TargetAttributes = { + 600CF06222088CD400C95176 = { + CreatedOnToolsVersion = 10.1; + TestTargetID = 60D793262180E2730080F428; + }; + 60D793262180E2730080F428 = { + CreatedOnToolsVersion = 9.4; + }; + }; + }; + buildConfigurationList = 60D793222180E2730080F428 /* Build configuration list for PBXProject "PrebidDemo" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 60D7931E2180E2730080F428; + productRefGroup = 60D793282180E2730080F428 /* Products */; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 60A610982180F3010095746C /* Products */; + ProjectRef = 60A610972180F3010095746C /* PrebidMobile.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + 60D793262180E2730080F428 /* PrebidDemo */, + 600CF06222088CD400C95176 /* PrebidDemoTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + 60A6109E2180F3020095746C /* PrebidMobile.framework */ = { + isa = PBXReferenceProxy; + fileType = wrapper.framework; + path = PrebidMobile.framework; + remoteRef = 60A6109D2180F3020095746C /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; + 60A610A02180F3020095746C /* PrebidMobileTests.xctest */ = { + isa = PBXReferenceProxy; + fileType = wrapper.cfbundle; + path = PrebidMobileTests.xctest; + remoteRef = 60A6109F2180F3020095746C /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXResourcesBuildPhase section */ + 600CF06122088CD400C95176 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 60D793252180E2730080F428 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 60D793352180E2750080F428 /* LaunchScreen.storyboard in Resources */, + 60D793322180E2750080F428 /* Assets.xcassets in Resources */, + 60D793302180E2730080F428 /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 38460DBCCC6C7DA9F9C9037D /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-PrebidDemoTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 72ACD9274A9AE48AD4381B53 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${SRCROOT}/Pods/Target Support Files/Pods-PrebidDemo/Pods-PrebidDemo-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/mopub-ios-sdk/MoPub.framework", + ); + name = "[CP] Embed Pods Frameworks"; + outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MoPub.framework", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-PrebidDemo/Pods-PrebidDemo-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + CECAE1B09BD5EF94E75FFE8B /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-PrebidDemo-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 600CF05F22088CD400C95176 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 600CF06622088CD400C95176 /* PrebidDemoTests.swift in Sources */, + 382AF88022120D7000CD4B26 /* PBViewTool.swift in Sources */, + 97AACE45220C67FC0070EC46 /* Constants.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 60D793232180E2730080F428 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 60EE7B0921F770A4000B12A8 /* InterstitialViewController.swift in Sources */, + 607B047D21963820000C0879 /* IndexController.swift in Sources */, + 60D7932B2180E2730080F428 /* AppDelegate.swift in Sources */, + 97AACE4A220C70210070EC46 /* BannerController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 600CF06922088CD400C95176 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 60D793262180E2730080F428 /* PrebidDemo */; + targetProxy = 600CF06822088CD400C95176 /* PBXContainerItemProxy */; + }; + 60EE7AFB21F123A9000B12A8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = PrebidMobile; + targetProxy = 60EE7AFA21F123A9000B12A8 /* PBXContainerItemProxy */; + }; + 60EE7B0421F12A2F000B12A8 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = PrebidMobile; + targetProxy = 60EE7B0321F12A2F000B12A8 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 60D7932E2180E2730080F428 /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 60D7932F2180E2730080F428 /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 60D793332180E2750080F428 /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 60D793342180E2750080F428 /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 600CF06A22088CD400C95176 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 30B706CBEF8058018B2105DE /* Pods-PrebidDemoTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 9XY9F634UL; + INFOPLIST_FILE = PrebidDemoTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 12.1; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.Prebid.PrebidDemoTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/PrebidDemo.app/PrebidDemo"; + }; + name = Debug; + }; + 600CF06B22088CD400C95176 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = B2E125C6A6F36CD376458748 /* Pods-PrebidDemoTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = 9XY9F634UL; + INFOPLIST_FILE = PrebidDemoTests/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 12.1; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = com.Prebid.PrebidDemoTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 4.2; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/PrebidDemo.app/PrebidDemo"; + }; + name = Release; + }; + 60D793372180E2750080F428 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.4; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 60D793382180E2750080F428 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.4; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 60D7933A2180E2750080F428 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 5C7B6E2ACBB2F04F820EA11A /* Pods-PrebidDemo.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = HR94J6TSB3; + INFOPLIST_FILE = PrebidDemo/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.Prebid.PrebidDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = ""; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 60D7933B2180E2750080F428 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 44B6D3CB327A65E86E5192CF /* Pods-PrebidDemo.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = HR94J6TSB3; + INFOPLIST_FILE = PrebidDemo/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.Prebid.PrebidDemo; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = ""; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 600CF06D22088CD400C95176 /* Build configuration list for PBXNativeTarget "PrebidDemoTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 600CF06A22088CD400C95176 /* Debug */, + 600CF06B22088CD400C95176 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 60D793222180E2730080F428 /* Build configuration list for PBXProject "PrebidDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 60D793372180E2750080F428 /* Debug */, + 60D793382180E2750080F428 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 60D793392180E2750080F428 /* Build configuration list for PBXNativeTarget "PrebidDemo" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 60D7933A2180E2750080F428 /* Debug */, + 60D7933B2180E2750080F428 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 60D7931F2180E2730080F428 /* Project object */; +} diff --git a/example/Swift/PrebidDemo/PrebidDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/example/Swift/PrebidDemo/PrebidDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..42be5709c --- /dev/null +++ b/example/Swift/PrebidDemo/PrebidDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/example/Swift/PrebidDemo/PrebidDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/Swift/PrebidDemo/PrebidDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/example/Swift/PrebidDemo/PrebidDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/Swift/PrebidDemo/PrebidDemo.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/example/Swift/PrebidDemo/PrebidDemo.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..3ddf867a1 --- /dev/null +++ b/example/Swift/PrebidDemo/PrebidDemo.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + BuildSystemType + Latest + + diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo.xcodeproj/xcshareddata/xcschemes/PrebidMobileDemo.xcscheme b/example/Swift/PrebidDemo/PrebidDemo.xcodeproj/xcshareddata/xcschemes/PrebidDemo.xcscheme similarity index 64% rename from examples/PrebidMobileDemo/PrebidMobileDemo.xcodeproj/xcshareddata/xcschemes/PrebidMobileDemo.xcscheme rename to example/Swift/PrebidDemo/PrebidDemo.xcodeproj/xcshareddata/xcschemes/PrebidDemo.xcscheme index acf179b8a..66c6eccad 100644 --- a/examples/PrebidMobileDemo/PrebidMobileDemo.xcodeproj/xcshareddata/xcschemes/PrebidMobileDemo.xcscheme +++ b/example/Swift/PrebidDemo/PrebidDemo.xcodeproj/xcshareddata/xcschemes/PrebidDemo.xcscheme @@ -1,6 +1,6 @@ + BlueprintIdentifier = "60D793262180E2730080F428" + BuildableName = "PrebidDemo.app" + BlueprintName = "PrebidDemo" + ReferencedContainer = "container:PrebidDemo.xcodeproj"> @@ -32,20 +32,20 @@ skipped = "NO"> + BlueprintIdentifier = "600CF06222088CD400C95176" + BuildableName = "PrebidDemoTests.xctest" + BlueprintName = "PrebidDemoTests" + ReferencedContainer = "container:PrebidDemo.xcodeproj"> + BlueprintIdentifier = "60D793262180E2730080F428" + BuildableName = "PrebidDemo.app" + BlueprintName = "PrebidDemo" + ReferencedContainer = "container:PrebidDemo.xcodeproj"> @@ -65,19 +65,12 @@ runnableDebuggingMode = "0"> + BlueprintIdentifier = "60D793262180E2730080F428" + BuildableName = "PrebidDemo.app" + BlueprintName = "PrebidDemo" + ReferencedContainer = "container:PrebidDemo.xcodeproj"> - - - - @@ -91,10 +84,10 @@ runnableDebuggingMode = "0"> + BlueprintIdentifier = "60D793262180E2730080F428" + BuildableName = "PrebidDemo.app" + BlueprintName = "PrebidDemo" + ReferencedContainer = "container:PrebidDemo.xcodeproj"> diff --git a/example/Swift/PrebidDemo/PrebidDemo.xcodeproj/xcshareddata/xcschemes/PrebidDemoTests.xcscheme b/example/Swift/PrebidDemo/PrebidDemo.xcodeproj/xcshareddata/xcschemes/PrebidDemoTests.xcscheme new file mode 100644 index 000000000..ca37f0efd --- /dev/null +++ b/example/Swift/PrebidDemo/PrebidDemo.xcodeproj/xcshareddata/xcschemes/PrebidDemoTests.xcscheme @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/Swift/PrebidDemo/PrebidDemo.xcworkspace/contents.xcworkspacedata b/example/Swift/PrebidDemo/PrebidDemo.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..003c57414 --- /dev/null +++ b/example/Swift/PrebidDemo/PrebidDemo.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/example/Swift/PrebidDemo/PrebidDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/example/Swift/PrebidDemo/PrebidDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/example/Swift/PrebidDemo/PrebidDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/example/Swift/PrebidDemo/PrebidDemo/AppDelegate.swift b/example/Swift/PrebidDemo/PrebidDemo/AppDelegate.swift new file mode 100644 index 000000000..70bfac1f9 --- /dev/null +++ b/example/Swift/PrebidDemo/PrebidDemo/AppDelegate.swift @@ -0,0 +1,59 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import UIKit +import PrebidMobile +import CoreLocation + +@UIApplicationMain +class AppDelegate: UIResponder, UIApplicationDelegate { + + var window: UIWindow? + + var coreLocation:CLLocationManager? + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. + + coreLocation = CLLocationManager() + coreLocation?.requestWhenInUseAuthorization() + + return true + } + + func applicationWillResignActive(_ application: UIApplication) { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. + } + + func applicationDidEnterBackground(_ application: UIApplication) { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. + // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. + } + + func applicationWillEnterForeground(_ application: UIApplication) { + // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + } + + func applicationDidBecomeActive(_ application: UIApplication) { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillTerminate(_ application: UIApplication) { + // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + } + + +} + diff --git a/example/Swift/PrebidDemo/PrebidDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/Swift/PrebidDemo/PrebidDemo/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..d8db8d65f --- /dev/null +++ b/example/Swift/PrebidDemo/PrebidDemo/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "20x20", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "2x" + }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "20x20", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "29x29", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "40x40", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "1x" + }, + { + "idiom" : "ipad", + "size" : "76x76", + "scale" : "2x" + }, + { + "idiom" : "ipad", + "size" : "83.5x83.5", + "scale" : "2x" + }, + { + "idiom" : "ios-marketing", + "size" : "1024x1024", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/example/Swift/PrebidDemo/PrebidDemo/Assets.xcassets/Contents.json b/example/Swift/PrebidDemo/PrebidDemo/Assets.xcassets/Contents.json new file mode 100644 index 000000000..da4a164c9 --- /dev/null +++ b/example/Swift/PrebidDemo/PrebidDemo/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/example/Swift/PrebidDemo/PrebidDemo/BannerController.swift b/example/Swift/PrebidDemo/PrebidDemo/BannerController.swift new file mode 100644 index 000000000..1f2ca4718 --- /dev/null +++ b/example/Swift/PrebidDemo/PrebidDemo/BannerController.swift @@ -0,0 +1,133 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import UIKit + +import PrebidMobile + +import GoogleMobileAds + +import MoPub + +class BannerController: UIViewController, GADBannerViewDelegate, MPAdViewDelegate { + + @IBOutlet var appBannerView: UIView! + + @IBOutlet var adServerLabel: UILabel! + + var adServerName:String = "" + + let request = DFPRequest() + + var dfpBanner: DFPBannerView! + + var mopubBanner: MPAdView? + + override func viewDidLoad() { + super.viewDidLoad() + + adServerLabel.text = adServerName + + Prebid.shared.prebidServerAccountId = "bfa84af2-bd16-4d35-96ad-31c6bb888df0" + //Prebid.shared.prebidServerAccountId = "12345" + Prebid.shared.shareGeoLocation = true + + + let bannerUnit = BannerAdUnit(configId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45", size: CGSize(width: 300, height: 250)) + bannerUnit.setAutoRefreshMillis(time: 35000) + + if(adServerName == "DFP"){ + print("entered \(adServerName) loop" ) + loadDFPBanner(bannerUnit: bannerUnit) + + } else if (adServerName == "MoPub"){ + print("entered \(adServerName) loop" ) + loadMoPubBanner(bannerUnit: bannerUnit) + + } + } + + func loadDFPBanner(bannerUnit : AdUnit){ + print("Google Mobile Ads SDK version: \(DFPRequest.sdkVersion())") + dfpBanner = DFPBannerView(adSize: kGADAdSizeMediumRectangle) + dfpBanner.adUnitID = "/19968336/PrebidMobileValidator_Banner_All_Sizes" + dfpBanner.rootViewController = self + dfpBanner.delegate = self + dfpBanner.backgroundColor = .red + appBannerView.addSubview(dfpBanner) + request.testDevices = [ kGADSimulatorID,"cc7ca766f86b43ab6cdc92bed424069b"] + + bannerUnit.fetchDemand(adObject:self.request) { (ResultCode) in + print("Prebid demand fetch for DFP \(ResultCode.name())") + self.dfpBanner!.load(self.request) + } + } + + func loadMoPubBanner(bannerUnit: AdUnit){ + + let sdkConfig = MPMoPubConfiguration(adUnitIdForAppInitialization: "a935eac11acd416f92640411234fbba6") + sdkConfig.globalMediationSettings = [] + + MoPub.sharedInstance().initializeSdk(with: sdkConfig) { + + } + + mopubBanner = MPAdView(adUnitId: "a935eac11acd416f92640411234fbba6", size: CGSize(width: 300, height: 250)) + mopubBanner!.delegate = self + + appBannerView.addSubview(mopubBanner!) + + // Do any additional setup after loading the view, typically from a nib. + bannerUnit.fetchDemand(adObject: mopubBanner!){ (ResultCode) in + print("Prebid demand fetch for mopub \(ResultCode)") + + self.mopubBanner!.loadAd() + } + + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func adViewDidReceiveAd(_ bannerView: GADBannerView) { + print("adViewDidReceiveAd") + } + + func adView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: GADRequestError) { + print("adView:didFailToReceiveAdWithError: \(error.localizedDescription)") + } + + func adViewDidReceiveAd(_ bannerView: DFPBannerView) { + print("adViewDidReceiveAd") + } + + /// Tells the delegate an ad request failed. + func adView(_ bannerView: DFPBannerView, + didFailToReceiveAdWithError error: GADRequestError) { + print("adView:didFailToReceiveAdWithError: \(error.localizedDescription)") + } + + func viewControllerForPresentingModalView() -> UIViewController! { + return self + } + + + + + +} + diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/Base.lproj/Main.storyboard b/example/Swift/PrebidDemo/PrebidDemo/Base.lproj/LaunchScreen.storyboard similarity index 56% rename from examples/PrebidMobileDemo/PrebidMobileDemo/Base.lproj/Main.storyboard rename to example/Swift/PrebidDemo/PrebidDemo/Base.lproj/LaunchScreen.storyboard index 4529698c4..f83f6fd58 100644 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/Base.lproj/Main.storyboard +++ b/example/Swift/PrebidDemo/PrebidDemo/Base.lproj/LaunchScreen.storyboard @@ -1,26 +1,25 @@ - + - + + - + - - - - - - + + + - + + diff --git a/example/Swift/PrebidDemo/PrebidDemo/Base.lproj/Main.storyboard b/example/Swift/PrebidDemo/PrebidDemo/Base.lproj/Main.storyboard new file mode 100644 index 000000000..123b537bf --- /dev/null +++ b/example/Swift/PrebidDemo/PrebidDemo/Base.lproj/Main.storyboard @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/example/Swift/PrebidDemo/PrebidDemo/IndexController.swift b/example/Swift/PrebidDemo/PrebidDemo/IndexController.swift new file mode 100644 index 000000000..3ff41919a --- /dev/null +++ b/example/Swift/PrebidDemo/PrebidDemo/IndexController.swift @@ -0,0 +1,44 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation + +import UIKit + +class IndexController: UIViewController { + @IBOutlet var adServerSegment: UISegmentedControl! + override func viewDidLoad() { + super.viewDidLoad() + + self.title = "Prebid Demo" + } + + override func prepare(for segue: UIStoryboardSegue, sender: Any?) + { + if segue.destination is BannerController + { + let vc = segue.destination as? BannerController + vc?.adServerName = adServerSegment.titleForSegment(at: adServerSegment.selectedSegmentIndex)! + } + + if segue.destination is InterstitialViewController + { + let vc = segue.destination as? InterstitialViewController + vc?.adServerName = adServerSegment.titleForSegment(at: adServerSegment.selectedSegmentIndex)! + } + } + + +} diff --git a/example/Swift/PrebidDemo/PrebidDemo/Info.plist b/example/Swift/PrebidDemo/PrebidDemo/Info.plist new file mode 100644 index 000000000..e7e06fa02 --- /dev/null +++ b/example/Swift/PrebidDemo/PrebidDemo/Info.plist @@ -0,0 +1,60 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 0.1 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + NSAppTransportSecurity + + NSAllowsArbitraryLoads + + NSAllowsArbitraryLoadsInWebContent + + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + NSLocationAlwaysAndWhenInUseUsageDescription + Need to use location for better ad targeting + NSLocationAlwaysUsageDescription + Need to use location for better ad targeting + NSLocationUsageDescription + Need to use location for better ad targeting + NSLocationWhenInUseUsageDescription + Need to use location for better ad targeting + + diff --git a/example/Swift/PrebidDemo/PrebidDemo/InterstitialViewController.swift b/example/Swift/PrebidDemo/PrebidDemo/InterstitialViewController.swift new file mode 100644 index 000000000..5340107c6 --- /dev/null +++ b/example/Swift/PrebidDemo/PrebidDemo/InterstitialViewController.swift @@ -0,0 +1,126 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import UIKit + +import PrebidMobile + +import GoogleMobileAds + +import MoPub + +class InterstitialViewController: UIViewController, GADInterstitialDelegate, MPInterstitialAdControllerDelegate { + + @IBOutlet var adServerLabel: UILabel! + + var adServerName:String = "" + + let request = GADRequest() + + var dfpInterstitial: DFPInterstitial! + + var mopubInterstitial: MPInterstitialAdController! + + + override func viewDidLoad() { + super.viewDidLoad() + + adServerLabel.text = adServerName + + Prebid.shared.prebidServerAccountId = "bfa84af2-bd16-4d35-96ad-31c6bb888df0" + let interstitialUnit = InterstitialAdUnit(configId: "625c6125-f19e-4d5b-95c5-55501526b2a4") + + if(adServerName == "DFP"){ + print("entered \(adServerName) loop" ) + loadDFPInterstitial(adUnit: interstitialUnit) + + } else if (adServerName == "MoPub"){ + print("entered \(adServerName) loop" ) + loadMoPubInterstitial(adUnit: interstitialUnit) + + } + } + + func loadDFPInterstitial(adUnit : AdUnit){ + print("Google Mobile Ads SDK version: \(DFPRequest.sdkVersion())") + + dfpInterstitial = DFPInterstitial(adUnitID: "/19968336/PrebidMobileValidator_Interstitial") + dfpInterstitial.delegate = self + request.testDevices = [ kGADSimulatorID] + adUnit.fetchDemand(adObject:self.request) { (ResultCode) in + print("Prebid demand fetch for DFP \(ResultCode)") + self.dfpInterstitial!.load(self.request) + } + } + + func loadMoPubInterstitial(adUnit: AdUnit){ + + let sdkConfig = MPMoPubConfiguration(adUnitIdForAppInitialization: "2829868d308643edbec0795977f17437") + sdkConfig.globalMediationSettings = [] + + MoPub.sharedInstance().initializeSdk(with: sdkConfig) { + + } + + self.mopubInterstitial = MPInterstitialAdController(forAdUnitId: "2829868d308643edbec0795977f17437") + self.mopubInterstitial.delegate = self + + // Do any additional setup after loading the view, typically from a nib. + adUnit.fetchDemand(adObject: mopubInterstitial!){ (ResultCode) in + print("Prebid demand fetch for mopub \(ResultCode)") + + self.mopubInterstitial.loadAd() + } + + } + + override func didReceiveMemoryWarning() { + super.didReceiveMemoryWarning() + // Dispose of any resources that can be recreated. + } + + func interstitialWillPresentScreen(_ ad: GADInterstitial) { + print("Ad presented") + } + + func interstitialDidDismissScreen(_ ad: GADInterstitial) { + // Send another GADRequest here + print("Ad dismissed") + } + + func interstitialDidReceiveAd(_ ad: GADInterstitial) { + + if(self.dfpInterstitial?.isReady ?? true) + { + print("Ad ready") + self.dfpInterstitial?.present(fromRootViewController: self) + }else { + print("Ad not ready"); + } + } + + func interstitialDidLoadAd(_ interstitial: MPInterstitialAdController!) { + print("Ad ready") + if(self.mopubInterstitial.ready ){ + self.mopubInterstitial.show(from: self) + } + } + + func interstitialDidFail(toLoadAd interstitial: MPInterstitialAdController!) { + print("Ad not ready"); + } + +} + diff --git a/example/Swift/PrebidDemo/PrebidDemoTests/Constants.swift b/example/Swift/PrebidDemo/PrebidDemoTests/Constants.swift new file mode 100644 index 000000000..e83fc6025 --- /dev/null +++ b/example/Swift/PrebidDemo/PrebidDemoTests/Constants.swift @@ -0,0 +1,30 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +struct Constants { + + static let PBS_ACCOUNT_ID = "bfa84af2-bd16-4d35-96ad-31c6bb888df0" + static let PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND = "6ace8c7d-88c0-4623-8117-75bc3f0a2e45" + static let PBS_CONFIG_ID_INTERSTITIAL_APPNEXUS_DEMAND = "625c6125-f19e-4d5b-95c5-55501526b2a4" + static let MOPUB_BANNER_ADUNIT_ID_300x250 = "bd0a2cd5dd2241aaac18d7823d8e3a6f" + static let MOPUB_INTERSTITIAL_ADUNIT_ID = "2829868d308643edbec0795977f17437" + static let DFP_BANNER_ADUNIT_ID_300x250 = "/19968336/PrebidMobileValidator_Banner_All_Sizes" + static let DFP_INTERSTITIAL_ADUNIT_ID = "/19968336/PrebidMobileValidator_Interstitial" + static let PBS_INVALID_ACCOUNT_ID = "bfa84af2-bd16-4d35-96ad-ffffffffffff" + static let PBS_EMPTY_ACCOUNT_ID = "" + static let PBS_INVALID_CONFIG_ID = "6ace8c7d-88c0-4623-8117-ffffffffffff" + static let PBS_EMPTY_CONFIG_ID = "" + static let PBS_RUBICON_ACCOUNT_ID = "1001" +} diff --git a/examples/PrebidMobileDemo/PrebidMobileDemoTests/Info.plist b/example/Swift/PrebidDemo/PrebidDemoTests/Info.plist similarity index 94% rename from examples/PrebidMobileDemo/PrebidMobileDemoTests/Info.plist rename to example/Swift/PrebidDemo/PrebidDemoTests/Info.plist index 6c6c23c43..6c40a6cd0 100644 --- a/examples/PrebidMobileDemo/PrebidMobileDemoTests/Info.plist +++ b/example/Swift/PrebidDemo/PrebidDemoTests/Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier diff --git a/example/Swift/PrebidDemo/PrebidDemoTests/PBViewTool.swift b/example/Swift/PrebidDemo/PrebidDemoTests/PBViewTool.swift new file mode 100644 index 000000000..938c96a80 --- /dev/null +++ b/example/Swift/PrebidDemo/PrebidDemoTests/PBViewTool.swift @@ -0,0 +1,153 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import UIKit +import GoogleMobileAds +import MoPub + +class PBViewTool: NSObject { + + class func checkMPAdViewContainsPBMAd(_ view: MPAdView?, withCompletionHandler completionHandler: @escaping (_ result: Bool) -> Void) { + var checked = false + for view in view!.subviews { + if (view is MPClosableView) { + if(view.isKind(of: MPClosableView.self)){ + let wv = view as! MPClosableView + + for innerView in (wv.subviews) { + if (innerView != nil) { + if(innerView.isKind(of: MPWebView.self)){ + let wv = innerView as! MPWebView + + wv.evaluateJavaScript("document.body.innerHTML", completionHandler: { result, error in + let content = result as? String + if content?.contains("prebid/pbm.js") ?? false || content?.contains("creative.js") ?? false { + completionHandler(true) + } else { + completionHandler(false) + } + }) + checked = true + break + } + + } + } + } + + } + } + if !checked { + completionHandler(false) + } + } + + class func checkMPInterstitialContainsPBMAd(_ viewController: UIViewController, withCompletionHandler completionHandler: @escaping (_ result: Bool) -> Void) { + var checked = false + let mainView = viewController.view + for view in mainView!.subviews { + if (view is MPClosableView) { + if(view.isKind(of: MPClosableView.self)){ + let wv = view as! MPClosableView + + for innerView in (wv.subviews) { + if (innerView != nil) { + if(innerView.isKind(of: MPWebView.self)){ + let wv = innerView as! MPWebView + + wv.evaluateJavaScript("document.body.innerHTML", completionHandler: { result, error in + let content = result as? String + if content?.contains("prebid/pbm.js") ?? false || content?.contains("creative.js") ?? false { + completionHandler(true) + } else { + completionHandler(false) + } + }) + checked = true + break + } + + } + } + } + + } + } + if !checked { + completionHandler(false) + } + } + + class func checkDFPInterstitialAdViewContainsPBMAd(_ viewController: UIViewController) -> Bool { + let view:UIView = viewController.view + let subviews = view.subviews + + for view in subviews { + let name:String = String(describing: type(of: view)) + if(name == "GADNWebAdView" || name == "GADOAdView"){ + let views = view.subviews + for innerView in views{ + let nameInner:String = String(describing: type(of: innerView)) + if(innerView.isKind(of: UIWebView.self)){ + return PBViewTool.checkJSExistInWebView(webView: innerView as! UIWebView) + } + else if(nameInner == "GADOUIKitWebView"){ + let deepInnerView = innerView.subviews + for innerView2 in deepInnerView{ + if(innerView2.isKind(of: UIWebView.self)){ + return PBViewTool.checkJSExistInWebView(webView: innerView2 as! UIWebView) + } + } + } + } + } + } + return false + } + + class func checkDFPAdViewContainsPBMAd(_ view: GADBannerView?) -> Bool { + for level1: UIView? in (view?.subviews)! { + let level2s = level1?.subviews + for level2: UIView? in level2s ?? [] { + for level3: UIView? in level2?.subviews ?? [] { + for level4: UIView? in level3?.subviews ?? [] { + for level5: UIView? in level4?.subviews ?? [] { + for level6: UIView? in level5?.subviews ?? [] { + if (level6 is UIWebView) { + return PBViewTool.checkJSExistInWebView(webView: level6 as! UIWebView) + } + else if level5 == nil + { + return false + } + } + } + } + } + } + } + return false + } + + class func checkJSExistInWebView(webView:UIWebView)->Bool + { + let content:String = webView.stringByEvaluatingJavaScript(from: "document.body.innerHTML")! + if content.contains("prebid/pbm.js") || content.contains("creative.js") { + return true + } else { + return false + } + } +} diff --git a/example/Swift/PrebidDemo/PrebidDemoTests/PrebidDemoTests.swift b/example/Swift/PrebidDemo/PrebidDemoTests/PrebidDemoTests.swift new file mode 100644 index 000000000..4e2d341a3 --- /dev/null +++ b/example/Swift/PrebidDemo/PrebidDemoTests/PrebidDemoTests.swift @@ -0,0 +1,1050 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import XCTest +import MoPub +import GoogleMobileAds +import WebKit +@testable import PrebidMobile +@testable import PrebidDemo + +class PrebidDemoTests: XCTestCase, GADBannerViewDelegate, GADInterstitialDelegate, MPAdViewDelegate, MPInterstitialAdControllerDelegate { + + + var viewController: IndexController? + var loadSuccesfulException: XCTestExpectation? + var timeoutForRequest: TimeInterval = 0.0 + var mopubInterstitial: MPInterstitialAdController? + var dfpInterstitial: DFPInterstitial? + + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + // Prebid.shared.prebidServerHost = PrebidHost.Appnexus + Prebid.shared.prebidServerAccountId = Constants.PBS_ACCOUNT_ID + // Prebid.shared.shareGeoLocation = true + timeoutForRequest = 35.0 + + let storyboard = UIStoryboard(name: "Main", + bundle: Bundle.main) + viewController = storyboard.instantiateViewController(withIdentifier: "index") as? IndexController + let appDelegate = (UIApplication.shared.delegate as! AppDelegate) + appDelegate.window?.rootViewController = viewController + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + loadSuccesfulException = nil + mopubInterstitial = nil + dfpInterstitial = nil + } + + func testDFPBannerSanityAppCheckTest() + { + timeoutForRequest = 30.0 + let bannerUnit = BannerAdUnit(configId: Constants.PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND, size: CGSize(width: 300, height: 250)) + let dfpBanner = DFPBannerView(adSize: kGADAdSizeMediumRectangle) + dfpBanner.adUnitID = Constants.DFP_BANNER_ADUNIT_ID_300x250 + dfpBanner.rootViewController = viewController + dfpBanner.delegate = self + dfpBanner.backgroundColor = .red + viewController?.view.addSubview(dfpBanner) + let request:DFPRequest = DFPRequest() + request.testDevices = [ kGADSimulatorID,"cc7ca766f86b43ab6cdc92bed424069b"] + bannerUnit.fetchDemand(adObject:request) { (ResultCode) in + //DispatchQueue.main.async { + if 0 == ResultCode.rawValue + { + DispatchQueue.main.async { + XCTAssertEqual(0, ResultCode.rawValue) + XCTAssertNotNil(request.customTargeting) + XCTAssertNotNil(request.customTargeting!["hb_pb"]) + dfpBanner.load(request) + } + } + else + { + XCTFail("Unexpected response") + self.loadSuccesfulException?.fulfill() + } + //} + } + loadSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForRequest, handler: nil) + + } + + func testDFPBannerWithoutAutoRefresh() + { + var fetchDemandCount = 0 + let bannerUnit = BannerAdUnit(configId: Constants.PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND, size: CGSize(width: 300, height: 250)) + let dfpBanner = DFPBannerView(adSize: kGADAdSizeMediumRectangle) + dfpBanner.adUnitID = Constants.DFP_BANNER_ADUNIT_ID_300x250 + dfpBanner.rootViewController = viewController + dfpBanner.backgroundColor = .red + viewController?.view.addSubview(dfpBanner) + let request:DFPRequest = DFPRequest() + request.testDevices = [ kGADSimulatorID,"cc7ca766f86b43ab6cdc92bed424069b"] + bannerUnit.fetchDemand(adObject:request) { (ResultCode) in + DispatchQueue.main.async { + fetchDemandCount = fetchDemandCount + 1 + } + } + wait(31) + XCTAssertEqual(1, fetchDemandCount) + } + + func testDFPBannerWithInvalidAutoRefresh() + { + var fetchDemandCount = 0 + let bannerUnit = BannerAdUnit(configId: Constants.PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND, size: CGSize(width: 300, height: 250)) + bannerUnit.setAutoRefreshMillis(time: 20000) + let dfpBanner = DFPBannerView(adSize: kGADAdSizeMediumRectangle) + dfpBanner.adUnitID = Constants.DFP_BANNER_ADUNIT_ID_300x250 + dfpBanner.rootViewController = viewController + dfpBanner.backgroundColor = .red + viewController?.view.addSubview(dfpBanner) + let request:DFPRequest = DFPRequest() + request.testDevices = [ kGADSimulatorID,"cc7ca766f86b43ab6cdc92bed424069b"] + bannerUnit.fetchDemand(adObject:request) { (ResultCode) in + DispatchQueue.main.async { + fetchDemandCount = fetchDemandCount + 1 + } + } + wait(31) + XCTAssertEqual(1, fetchDemandCount) + } + + func testDFPBannerWithValidAutoRefresh() + { + var fetchDemandCount = 0 + let bannerUnit = BannerAdUnit(configId: Constants.PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND, size: CGSize(width: 300, height: 250)) + bannerUnit.setAutoRefreshMillis(time: 30000) + let dfpBanner = DFPBannerView(adSize: kGADAdSizeMediumRectangle) + dfpBanner.adUnitID = Constants.DFP_BANNER_ADUNIT_ID_300x250 + dfpBanner.rootViewController = viewController + dfpBanner.backgroundColor = .red + viewController?.view.addSubview(dfpBanner) + let request:DFPRequest = DFPRequest() + request.testDevices = [ kGADSimulatorID,"cc7ca766f86b43ab6cdc92bed424069b"] + bannerUnit.fetchDemand(adObject:request) { (ResultCode) in + DispatchQueue.main.async { + fetchDemandCount = fetchDemandCount + 1 + } + } + wait(31) + XCTAssertEqual(2, fetchDemandCount) + } + + func testDFPInterstitialSanityAppCheckTest() + { + timeoutForRequest = 30.0 + let interstitialUnit = InterstitialAdUnit(configId: Constants.PBS_CONFIG_ID_INTERSTITIAL_APPNEXUS_DEMAND) + dfpInterstitial = DFPInterstitial(adUnitID: Constants.DFP_INTERSTITIAL_ADUNIT_ID) + let request:DFPRequest = DFPRequest() + dfpInterstitial?.delegate = self + request.testDevices = [ kGADSimulatorID] + interstitialUnit.fetchDemand(adObject:request) { (ResultCode) in + DispatchQueue.main.async { + if 0 == ResultCode.rawValue + { + XCTAssertEqual(0, ResultCode.rawValue) + XCTAssertNotNil(request.customTargeting) + XCTAssertNotNil(request.customTargeting!["hb_pb"]) + self.dfpInterstitial?.load(request) + + } + else + { + XCTFail("Unexpected response") + self.loadSuccesfulException?.fulfill() + } + } + } + loadSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForRequest, handler: nil) + } + + func testDFPInterstitialWithoutAutoRefresh() + { + var fetchDemandCount = 0 + let interstitialUnit = InterstitialAdUnit(configId: Constants.PBS_CONFIG_ID_INTERSTITIAL_APPNEXUS_DEMAND) + dfpInterstitial = DFPInterstitial(adUnitID: Constants.DFP_INTERSTITIAL_ADUNIT_ID) + let request:DFPRequest = DFPRequest() + request.testDevices = [ kGADSimulatorID] + interstitialUnit.fetchDemand(adObject:request) { (ResultCode) in + DispatchQueue.main.async { + fetchDemandCount = fetchDemandCount + 1 + } + } + wait(31) + XCTAssertEqual(1, fetchDemandCount) + } + + func testDFPInterstitialWithInvalidAutoRefresh() + { + var fetchDemandCount = 0 + let interstitialUnit = InterstitialAdUnit(configId: Constants.PBS_CONFIG_ID_INTERSTITIAL_APPNEXUS_DEMAND) + interstitialUnit.setAutoRefreshMillis(time: 20000) + dfpInterstitial = DFPInterstitial(adUnitID: Constants.DFP_INTERSTITIAL_ADUNIT_ID) + let request:DFPRequest = DFPRequest() + request.testDevices = [ kGADSimulatorID] + interstitialUnit.fetchDemand(adObject:request) { (ResultCode) in + DispatchQueue.main.async { + fetchDemandCount = fetchDemandCount + 1 + } + } + wait(31) + XCTAssertEqual(1, fetchDemandCount) + } + + func testDFPInterstitialWithValidAutoRefresh() + { + var fetchDemandCount = 0 + let interstitialUnit = InterstitialAdUnit(configId: Constants.PBS_CONFIG_ID_INTERSTITIAL_APPNEXUS_DEMAND) + interstitialUnit.setAutoRefreshMillis(time: 30000) + dfpInterstitial = DFPInterstitial(adUnitID: Constants.DFP_INTERSTITIAL_ADUNIT_ID) + let request:DFPRequest = DFPRequest() + request.testDevices = [ kGADSimulatorID] + interstitialUnit.fetchDemand(adObject:request) { (ResultCode) in + DispatchQueue.main.async { + fetchDemandCount = fetchDemandCount + 1 + } + } + wait(31) + XCTAssertEqual(2, fetchDemandCount) + } + + func testMoPubBannerSanityAppCheckTest() + { + timeoutForRequest = 20.0 + let bannerUnit = BannerAdUnit(configId: Constants.PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND, size: CGSize(width: 300, height: 250)) + let sdkConfig = MPMoPubConfiguration(adUnitIdForAppInitialization:Constants.MOPUB_BANNER_ADUNIT_ID_300x250) + sdkConfig.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig){} + let mopubBanner = MPAdView(adUnitId: Constants.MOPUB_BANNER_ADUNIT_ID_300x250, size: CGSize(width: 300, height: 250)) + mopubBanner?.delegate = self + viewController?.view.addSubview(mopubBanner!) + bannerUnit.fetchDemand(adObject: mopubBanner!){ (ResultCode) in + DispatchQueue.main.async { + if 0 == ResultCode.rawValue + { + XCTAssertEqual(0, ResultCode.rawValue) + XCTAssertNotNil(mopubBanner!.keywords) + XCTAssertNotNil(mopubBanner!.keywords.contains("hb_pb")) + mopubBanner!.loadAd() + } + else + { + XCTFail("Unexpected response") + self.loadSuccesfulException?.fulfill() + } + } + } + loadSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForRequest, handler: nil) + } + + func testMopubBannerWithoutAutoRefresh() + { + var fetchDemandCount = 0 + let bannerUnit = BannerAdUnit(configId: Constants.PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND, size: CGSize(width: 300, height: 250)) + let sdkConfig = MPMoPubConfiguration(adUnitIdForAppInitialization:Constants.MOPUB_BANNER_ADUNIT_ID_300x250) + sdkConfig.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig){} + let mopubBanner = MPAdView(adUnitId: Constants.MOPUB_BANNER_ADUNIT_ID_300x250, size: CGSize(width: 300, height: 250)) + bannerUnit.fetchDemand(adObject: mopubBanner!){ (ResultCode) in + DispatchQueue.main.async { + fetchDemandCount = fetchDemandCount + 1 + } + } + wait(31) + XCTAssertEqual(1, fetchDemandCount) + } + + func testMopubBannerWithInvalidAutoRefresh() + { + var fetchDemandCount = 0 + let bannerUnit = BannerAdUnit(configId: Constants.PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND, size: CGSize(width: 300, height: 250)) + bannerUnit.setAutoRefreshMillis(time: 20000) + let sdkConfig = MPMoPubConfiguration(adUnitIdForAppInitialization:Constants.MOPUB_BANNER_ADUNIT_ID_300x250) + sdkConfig.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig){} + let mopubBanner = MPAdView(adUnitId: Constants.MOPUB_BANNER_ADUNIT_ID_300x250, size: CGSize(width: 300, height: 250)) + bannerUnit.fetchDemand(adObject: mopubBanner!){ (ResultCode) in + DispatchQueue.main.async { + fetchDemandCount = fetchDemandCount + 1 + } + } + wait(31) + XCTAssertEqual(1, fetchDemandCount) + } + + func testMopubBannerWithValidAutoRefresh() + { + var fetchDemandCount = 0 + let bannerUnit = BannerAdUnit(configId: Constants.PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND, size: CGSize(width: 300, height: 250)) + bannerUnit.setAutoRefreshMillis(time: 30000) + let sdkConfig = MPMoPubConfiguration(adUnitIdForAppInitialization:Constants.MOPUB_BANNER_ADUNIT_ID_300x250) + sdkConfig.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig){} + let mopubBanner = MPAdView(adUnitId: Constants.MOPUB_BANNER_ADUNIT_ID_300x250, size: CGSize(width: 300, height: 250)) + bannerUnit.fetchDemand(adObject: mopubBanner!){ (ResultCode) in + DispatchQueue.main.async { + fetchDemandCount = fetchDemandCount + 1 + } + } + wait(31) + XCTAssertEqual(2, fetchDemandCount) + } + + func testMoPubInterstitialSanityAppCheckTest() + { + timeoutForRequest = 20.0 + let interstitialUnit = InterstitialAdUnit(configId: Constants.PBS_CONFIG_ID_INTERSTITIAL_APPNEXUS_DEMAND) + let sdkConfig = MPMoPubConfiguration(adUnitIdForAppInitialization:Constants.MOPUB_INTERSTITIAL_ADUNIT_ID) + sdkConfig.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig){} + mopubInterstitial = MPInterstitialAdController(forAdUnitId: Constants.MOPUB_INTERSTITIAL_ADUNIT_ID) + mopubInterstitial?.delegate = self + interstitialUnit.fetchDemand(adObject: mopubInterstitial!){ (ResultCode) in + DispatchQueue.main.async { + if 0 == ResultCode.rawValue + { + XCTAssertEqual(0, ResultCode.rawValue) + XCTAssertNotNil(self.mopubInterstitial!.keywords) + XCTAssertNotNil(self.mopubInterstitial!.keywords.contains("hb_pb")) + self.mopubInterstitial?.loadAd() + + } + else + { + XCTFail("Unexpected response") + self.loadSuccesfulException?.fulfill() + } + } + } + loadSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForRequest, handler: nil) + } + + func testMopubInterstitialWithoutAutoRefresh() + { + var fetchDemandCount = 0 + let interstitialUnit = InterstitialAdUnit(configId: Constants.PBS_CONFIG_ID_INTERSTITIAL_APPNEXUS_DEMAND) + let sdkConfig = MPMoPubConfiguration(adUnitIdForAppInitialization:Constants.MOPUB_INTERSTITIAL_ADUNIT_ID) + sdkConfig.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig){} + mopubInterstitial = MPInterstitialAdController(forAdUnitId: Constants.MOPUB_INTERSTITIAL_ADUNIT_ID) + interstitialUnit.fetchDemand(adObject: mopubInterstitial!){ (ResultCode) in + DispatchQueue.main.async { + fetchDemandCount = fetchDemandCount + 1 + } + } + wait(31) + XCTAssertEqual(1, fetchDemandCount) + } + + func testMopubInterstitialWithInvalidAutoRefresh() + { + var fetchDemandCount = 0 + let interstitialUnit = InterstitialAdUnit(configId: Constants.PBS_CONFIG_ID_INTERSTITIAL_APPNEXUS_DEMAND) + interstitialUnit.setAutoRefreshMillis(time: 20000) + let sdkConfig = MPMoPubConfiguration(adUnitIdForAppInitialization:Constants.MOPUB_INTERSTITIAL_ADUNIT_ID) + sdkConfig.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig){} + mopubInterstitial = MPInterstitialAdController(forAdUnitId: Constants.MOPUB_INTERSTITIAL_ADUNIT_ID) + interstitialUnit.fetchDemand(adObject: mopubInterstitial!){ (ResultCode) in + DispatchQueue.main.async { + fetchDemandCount = fetchDemandCount + 1 + } + } + wait(31) + XCTAssertEqual(1, fetchDemandCount) + } + + func testMopubInterstitialWithValidAutoRefresh() + { + var fetchDemandCount = 0 + let interstitialUnit = InterstitialAdUnit(configId: Constants.PBS_CONFIG_ID_INTERSTITIAL_APPNEXUS_DEMAND) + interstitialUnit.setAutoRefreshMillis(time: 30000) + let sdkConfig = MPMoPubConfiguration(adUnitIdForAppInitialization:Constants.MOPUB_INTERSTITIAL_ADUNIT_ID) + sdkConfig.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig){} + mopubInterstitial = MPInterstitialAdController(forAdUnitId: Constants.MOPUB_INTERSTITIAL_ADUNIT_ID) + interstitialUnit.fetchDemand(adObject: mopubInterstitial!){ (ResultCode) in + DispatchQueue.main.async { + fetchDemandCount = fetchDemandCount + 1 + } + } + wait(31) + XCTAssertEqual(2, fetchDemandCount) + } + + func testAutoRefreshWith2MinThenDisable() + { + var fetchDemandCount = 0 + let bannerUnit = BannerAdUnit(configId: Constants.PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND, size: CGSize(width: 300, height: 250)) + bannerUnit.setAutoRefreshMillis(time: 30000) + let dfpBanner = DFPBannerView(adSize: kGADAdSizeMediumRectangle) + dfpBanner.adUnitID = Constants.DFP_BANNER_ADUNIT_ID_300x250 + dfpBanner.rootViewController = viewController + dfpBanner.backgroundColor = .red + viewController?.view.addSubview(dfpBanner) + let request:DFPRequest = DFPRequest() + request.testDevices = [ kGADSimulatorID,"cc7ca766f86b43ab6cdc92bed424069b"] + bannerUnit.fetchDemand(adObject:request) { (ResultCode) in + DispatchQueue.main.async { + fetchDemandCount = fetchDemandCount + 1 + } + } + wait(124) + XCTAssertEqual(5, fetchDemandCount) + fetchDemandCount = 0 + bannerUnit.stopAutoRefresh() + wait(35) + XCTAssertEqual(0, fetchDemandCount) + } + + func testAutoRefreshWith5MinThenDisable() + { + var fetchDemandCount = 0 + let bannerUnit = BannerAdUnit(configId: Constants.PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND, size: CGSize(width: 300, height: 250)) + bannerUnit.setAutoRefreshMillis(time: 120000) + let dfpBanner = DFPBannerView(adSize: kGADAdSizeMediumRectangle) + dfpBanner.adUnitID = Constants.DFP_BANNER_ADUNIT_ID_300x250 + dfpBanner.rootViewController = viewController + dfpBanner.backgroundColor = .red + viewController?.view.addSubview(dfpBanner) + let request:DFPRequest = DFPRequest() + request.testDevices = [ kGADSimulatorID,"cc7ca766f86b43ab6cdc92bed424069b"] + bannerUnit.fetchDemand(adObject:request) { (ResultCode) in + DispatchQueue.main.async { + fetchDemandCount = fetchDemandCount + 1 + } + } + wait(300) + XCTAssertEqual(3, fetchDemandCount) + fetchDemandCount = 0 + bannerUnit.stopAutoRefresh() + wait(35) + XCTAssertEqual(0, fetchDemandCount) + } + + func testInvalidPrebidServerAccountId() + { + Prebid.shared.prebidServerAccountId = Constants.PBS_INVALID_ACCOUNT_ID + timeoutForRequest = 10.0 + let bannerUnit = BannerAdUnit(configId: Constants.PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND, size: CGSize(width: 300, height: 250)) + let dfpBanner = DFPBannerView(adSize: kGADAdSizeMediumRectangle) + dfpBanner.adUnitID = Constants.DFP_BANNER_ADUNIT_ID_300x250 + let request:DFPRequest = DFPRequest() + request.testDevices = [ kGADSimulatorID] + bannerUnit.fetchDemand(adObject:request) { (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(2, ResultCode.rawValue) + self.loadSuccesfulException?.fulfill() + } + } + loadSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForRequest, handler: nil) + + } + + func testEmptyPrebidServerAccountId() + { + Prebid.shared.prebidServerAccountId = Constants.PBS_EMPTY_ACCOUNT_ID + timeoutForRequest = 10.0 + let bannerUnit = BannerAdUnit(configId: Constants.PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND, size: CGSize(width: 300, height: 250)) + let dfpBanner = DFPBannerView(adSize: kGADAdSizeMediumRectangle) + dfpBanner.adUnitID = Constants.DFP_BANNER_ADUNIT_ID_300x250 + let request:DFPRequest = DFPRequest() + request.testDevices = [ kGADSimulatorID] + bannerUnit.fetchDemand(adObject:request) { (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(2, ResultCode.rawValue) + self.loadSuccesfulException?.fulfill() + } + } + loadSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForRequest, handler: nil) + + } + + func testInvalidConfigId() + { + timeoutForRequest = 10.0 + let bannerUnit = BannerAdUnit(configId: Constants.PBS_INVALID_CONFIG_ID, size: CGSize(width: 300, height: 250)) + let dfpBanner = DFPBannerView(adSize: kGADAdSizeMediumRectangle) + dfpBanner.adUnitID = Constants.DFP_BANNER_ADUNIT_ID_300x250 + let request:DFPRequest = DFPRequest() + request.testDevices = [ kGADSimulatorID] + bannerUnit.fetchDemand(adObject:request) { (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(3, ResultCode.rawValue) + self.loadSuccesfulException?.fulfill() + } + } + loadSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForRequest, handler: nil) + + } + + func testEmptyConfigId() + { + timeoutForRequest = 10.0 + let bannerUnit = BannerAdUnit(configId: Constants.PBS_EMPTY_CONFIG_ID, size: CGSize(width: 300, height: 250)) + let dfpBanner = DFPBannerView(adSize: kGADAdSizeMediumRectangle) + dfpBanner.adUnitID = Constants.DFP_BANNER_ADUNIT_ID_300x250 + let request:DFPRequest = DFPRequest() + request.testDevices = [ kGADSimulatorID] + bannerUnit.fetchDemand(adObject:request) { (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(3, ResultCode.rawValue) + self.loadSuccesfulException?.fulfill() + } + + } + loadSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForRequest, handler: nil) + + } + + func testRubiconDemandForDFP() + { + timeoutForRequest = 10.0 + Prebid.shared.prebidServerHost = PrebidHost.Rubicon + Prebid.shared.prebidServerAccountId = Constants.PBS_RUBICON_ACCOUNT_ID + let bannerUnit = BannerAdUnit(configId: "1001-2", size: CGSize(width: 300, height: 250)) + let dfpBanner = DFPBannerView(adSize: kGADAdSizeMediumRectangle) + dfpBanner.adUnitID = "/112115922/PB_test_2" + let request:DFPRequest = DFPRequest() + request.testDevices = [ kGADSimulatorID] + bannerUnit.fetchDemand(adObject:request) { (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(0, ResultCode.rawValue) + self.loadSuccesfulException?.fulfill() + } + } + loadSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForRequest, handler: nil) + } + + func testYOBWith2018() + { + let targeting = Targeting.shared + XCTAssertNoThrow(try targeting.setYearOfBirth(yob: 2018)) + let value = Targeting.shared.yearOfBirth + XCTAssertTrue((value == 2018)) + + let adUnit = BannerAdUnit(configId: "47706260-ee91-4cd7-b656-2185aca89f59", size: CGSize(width: 300, height: 250)) + + let sdkConfig = MPMoPubConfiguration(adUnitIdForAppInitialization:"a935eac11acd416f92640411234fbba6") + sdkConfig.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig){} + let mopubBanner = MPAdView(adUnitId: "a935eac11acd416f92640411234fbba6", size: CGSize(width: 300, height: 250)) + adUnit.fetchDemand(adObject: mopubBanner!){ (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(8, ResultCode.rawValue) + self.loadSuccesfulException?.fulfill() + } + } + loadSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForRequest, handler: nil) + } + + func testYOBWith1989() + { + let targeting = Targeting.shared + XCTAssertNoThrow(try targeting.setYearOfBirth(yob: 1989)) + let value = Targeting.shared.yearOfBirth + XCTAssertTrue((value == 1989)) + + let adUnit = BannerAdUnit(configId: "47706260-ee91-4cd7-b656-2185aca89f59", size: CGSize(width: 300, height: 250)) + + let sdkConfig = MPMoPubConfiguration(adUnitIdForAppInitialization:"a935eac11acd416f92640411234fbba6") + sdkConfig.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig){} + let mopubBanner = MPAdView(adUnitId: "a935eac11acd416f92640411234fbba6", size: CGSize(width: 300, height: 250)) + adUnit.fetchDemand(adObject: mopubBanner!){ (ResultCode) in + //DispatchQueue.main.async { + XCTAssertEqual(0, ResultCode.rawValue) + self.loadSuccesfulException?.fulfill() + //} + } + loadSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForRequest, handler: nil) + } + + func testAppNexusKeyValueTargeting() + { + Prebid.shared.prebidServerHost = PrebidHost.Appnexus + Prebid.shared.prebidServerAccountId = "bfa84af2-bd16-4d35-96ad-31c6bb888df0" + + timeoutForRequest = 20.0 + let adUnit = BannerAdUnit(configId: "67bac530-9832-4f78-8c94-fbf88ac7bd14", size: CGSize(width: 300, height: 250)) + adUnit.removeUserKeyword(forKey: "pbm_key") + adUnit.addUserKeyword(key: "pbm_key", value: "pbm_value1") + + let sdkConfig = MPMoPubConfiguration(adUnitIdForAppInitialization:"a935eac11acd416f92640411234fbba6") + sdkConfig.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig){} + let mopubBanner = MPAdView(adUnitId: "a935eac11acd416f92640411234fbba6", size: CGSize(width: 300, height: 250)) + adUnit.fetchDemand(adObject: mopubBanner!){ (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(0, ResultCode.rawValue) + self.loadSuccesfulException?.fulfill() + } + } + loadSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForRequest, handler: nil) + + } + + func testAppNexusKeyValueTargeting2() + { + Prebid.shared.prebidServerHost = PrebidHost.Appnexus + Prebid.shared.prebidServerAccountId = "bfa84af2-bd16-4d35-96ad-31c6bb888df0" + + timeoutForRequest = 20.0 + let adUnit = BannerAdUnit(configId: "67bac530-9832-4f78-8c94-fbf88ac7bd14", size: CGSize(width: 300, height: 250)) + adUnit.removeUserKeyword(forKey: "pbm_key") + adUnit.addUserKeyword(key: "pbm_key", value: "pbm_value2") + + let sdkConfig = MPMoPubConfiguration(adUnitIdForAppInitialization:"a935eac11acd416f92640411234fbba6") + sdkConfig.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig){} + let mopubBanner = MPAdView(adUnitId: "a935eac11acd416f92640411234fbba6", size: CGSize(width: 300, height: 250)) + adUnit.fetchDemand(adObject: mopubBanner!){ (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(8, ResultCode.rawValue) + self.loadSuccesfulException?.fulfill() + } + } + loadSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForRequest, handler: nil) + + } + + func testDFPCustomKeywords() + { + var fetchCount = 0 + timeoutForRequest = 60.0 + let bannerUnit = BannerAdUnit(configId: Constants.PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND, size: CGSize(width: 300, height: 250)) + bannerUnit.setAutoRefreshMillis(time: 30000) + let dfpBanner = DFPBannerView(adSize: kGADAdSizeMediumRectangle) + dfpBanner.adUnitID = Constants.DFP_BANNER_ADUNIT_ID_300x250 + dfpBanner.rootViewController = viewController + dfpBanner.backgroundColor = .red + viewController?.view.addSubview(dfpBanner) + let request:DFPRequest = DFPRequest() + request.customTargeting = ["key1":"value1", "key2":"value2"] as [String : AnyObject] + request.testDevices = [ kGADSimulatorID,"cc7ca766f86b43ab6cdc92bed424069b"] + bannerUnit.fetchDemand(adObject:request) { (ResultCode) in + DispatchQueue.main.async { + fetchCount = fetchCount + 1 + XCTAssertNotNil(request.customTargeting) + if fetchCount == 1 + { + XCTAssertEqual(request.customTargeting!["key1"] as! String, "value1") + XCTAssertEqual(request.customTargeting!["key2"] as! String, "value2") + } + else + { + XCTAssertNotEqual(request.customTargeting!["key1"] as! String, "value1") + XCTAssertNotEqual(request.customTargeting!["key2"] as! String, "value2") + XCTAssertEqual(request.customTargeting!["key2"] as! String, "value1") + XCTAssertEqual(request.customTargeting!["key3"] as! String, "value3") + XCTAssertEqual(request.customTargeting!["key1"] as! String, "") + self.loadSuccesfulException?.fulfill() + } + request.customTargeting = ["key1":"", "key2":"value1", "key3":"value3"] as [String : AnyObject] + } + } + loadSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForRequest, handler: nil) + } + + func testMoPubCustomKeywords() + { + var fetchCount = 0 + timeoutForRequest = 60.0 + let bannerUnit = BannerAdUnit(configId: Constants.PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND, size: CGSize(width: 300, height: 250)) + bannerUnit.setAutoRefreshMillis(time: 30000) + let sdkConfig = MPMoPubConfiguration(adUnitIdForAppInitialization:Constants.MOPUB_BANNER_ADUNIT_ID_300x250) + sdkConfig.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig){} + let mopubBanner = MPAdView(adUnitId: Constants.MOPUB_BANNER_ADUNIT_ID_300x250, size: CGSize(width: 300, height: 250)) + mopubBanner?.keywords = "key1:value1,key2:value2" + bannerUnit.fetchDemand(adObject: mopubBanner!){ (ResultCode) in + DispatchQueue.main.async { + fetchCount = fetchCount + 1 + XCTAssertNotNil(mopubBanner?.keywords) + let keywords = mopubBanner?.keywords + let keywordsArray = keywords!.components(separatedBy: ",") + if fetchCount == 1 + { + XCTAssertTrue(keywordsArray.contains("key1:value1")) + XCTAssertTrue(keywordsArray.contains("key2:value2")) + } + else + { + XCTAssertFalse(keywordsArray.contains("key1:value1")) + XCTAssertFalse(keywordsArray.contains("key2:value2")) + XCTAssertTrue(keywordsArray.contains("key1:value2")) + XCTAssertTrue(keywordsArray.contains("key2:value1")) + self.loadSuccesfulException?.fulfill() + } + mopubBanner?.keywords = "key1:value2,key2:value1" + } + } + loadSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForRequest, handler: nil) + } + + func testBannerWith5ValidAnd1InvalidSizes() + { + timeoutForRequest = 30.0 + let bannerUnit = BannerAdUnit(configId: Constants.PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND, size: CGSize(width: 300, height: 250)) + let arraySizes = [CGSize(width: 320, height: 50), CGSize(width: 300, height: 250), CGSize(width: 300, height: 600) , CGSize(width: 320, height: 100), CGSize(width: 320, height: 480), CGSize(width: 0, height: 0)] + bannerUnit.addAdditionalSize(sizes:arraySizes) + let dfpBanner = DFPBannerView(adSize: kGADAdSizeMediumRectangle) + dfpBanner.adUnitID = Constants.DFP_BANNER_ADUNIT_ID_300x250 + dfpBanner.rootViewController = viewController + dfpBanner.backgroundColor = .red + viewController?.view.addSubview(dfpBanner) + let request:DFPRequest = DFPRequest() + request.testDevices = [ kGADSimulatorID,"cc7ca766f86b43ab6cdc92bed424069b"] + bannerUnit.fetchDemand(adObject:request) { (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(4, ResultCode.rawValue) + self.loadSuccesfulException?.fulfill() + } + } + loadSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForRequest, handler: nil) + } + + func testBannerWithInvalidSize() + { + timeoutForRequest = 30.0 + let bannerUnit = BannerAdUnit(configId: Constants.PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND, size: CGSize(width: 320, height: 50)) + let arraySizes = [CGSize(width: 0, height: 0)] + bannerUnit.addAdditionalSize(sizes:arraySizes) + let dfpBanner = DFPBannerView(adSize: kGADAdSizeMediumRectangle) + dfpBanner.adUnitID = Constants.DFP_BANNER_ADUNIT_ID_300x250 + dfpBanner.rootViewController = viewController + dfpBanner.backgroundColor = .red + viewController?.view.addSubview(dfpBanner) + let request:DFPRequest = DFPRequest() + request.testDevices = [ kGADSimulatorID,"cc7ca766f86b43ab6cdc92bed424069b"] + bannerUnit.fetchDemand(adObject:request) { (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(4, ResultCode.rawValue) + self.loadSuccesfulException?.fulfill() + } + } + loadSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForRequest, handler: nil) + } + + func testMultipleAdUnitsAllDemandFetched() + { + var fetchDemandCount = 0 + let bannerUnit1 = BannerAdUnit(configId: "7cd2c7c8-cebe-4206-b5a4-97b9e840729e", size: CGSize(width: 320, height: 50)) + let sdkConfig1 = MPMoPubConfiguration(adUnitIdForAppInitialization: "9a8c2ccd3dae405bb925397d35eed8f9") + sdkConfig1.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig1){} + let mopubBanner1 = MPAdView(adUnitId: "9a8c2ccd3dae405bb925397d35eed8f9", size: CGSize(width: 320, height: 50)) + mopubBanner1?.delegate = self + viewController?.view.addSubview(mopubBanner1!) + bannerUnit1.fetchDemand(adObject: mopubBanner1!){ (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(0, ResultCode.rawValue) + fetchDemandCount = fetchDemandCount + 1 + } + } + + let bannerUnit2 = BannerAdUnit(configId: "525a5fee-ffbb-4f16-935d-3717c56e7aeb", size: CGSize(width: 320, height: 50)) + let sdkConfig2 = MPMoPubConfiguration(adUnitIdForAppInitialization: "50564379db734ebbb347849221a1081e") + sdkConfig2.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig2){} + let mopubBanner2 = MPAdView(adUnitId: "50564379db734ebbb347849221a1081e", size: CGSize(width: 320, height: 50)) + mopubBanner2?.delegate = self + viewController?.view.addSubview(mopubBanner2!) + bannerUnit2.fetchDemand(adObject: mopubBanner2!){ (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(0, ResultCode.rawValue) + fetchDemandCount = fetchDemandCount + 1 + } + } + + let bannerUnit3 = BannerAdUnit(configId: "511c39f2-b527-41af-811a-adac6911bdfc", size: CGSize(width: 300, height: 250)) + let sdkConfig3 = MPMoPubConfiguration(adUnitIdForAppInitialization: "5ff9556b05964e65b684ec54013df59d") + sdkConfig3.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig3){} + let mopubBanner3 = MPAdView(adUnitId: "5ff9556b05964e65b684ec54013df59d", size: CGSize(width: 300, height: 250)) + mopubBanner3?.delegate = self + viewController?.view.addSubview(mopubBanner3!) + bannerUnit3.fetchDemand(adObject: mopubBanner3!){ (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(0, ResultCode.rawValue) + fetchDemandCount = fetchDemandCount + 1 + } + } + + let bannerUnit4 = BannerAdUnit(configId: "42ad4418-9b36-4e39-ae54-2f7a13ad8616", size: CGSize(width: 300, height: 250)) + let sdkConfig4 = MPMoPubConfiguration(adUnitIdForAppInitialization: "c5c9267bcf6247cb91a116d1ef6c7487") + sdkConfig4.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig4){} + let mopubBanner4 = MPAdView(adUnitId: "c5c9267bcf6247cb91a116d1ef6c7487", size: CGSize(width: 300, height: 250)) + mopubBanner4?.delegate = self + viewController?.view.addSubview(mopubBanner4!) + bannerUnit4.fetchDemand(adObject: mopubBanner4!){ (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(0, ResultCode.rawValue) + fetchDemandCount = fetchDemandCount + 1 + } + } + + let bannerUnit5 = BannerAdUnit(configId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45", size: CGSize(width: 300, height: 250)) + let sdkConfig5 = MPMoPubConfiguration(adUnitIdForAppInitialization: "a935eac11acd416f92640411234fbba6") + sdkConfig5.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig5){} + let mopubBanner5 = MPAdView(adUnitId: "a935eac11acd416f92640411234fbba6", size: CGSize(width: 300, height: 250)) + mopubBanner5?.delegate = self + viewController?.view.addSubview(mopubBanner5!) + bannerUnit5.fetchDemand(adObject: mopubBanner5!){ (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(0, ResultCode.rawValue) + fetchDemandCount = fetchDemandCount + 1 + } + } + + let interstitialUnit6 = InterstitialAdUnit(configId: "625c6125-f19e-4d5b-95c5-55501526b2a4") + let sdkConfig6 = MPMoPubConfiguration(adUnitIdForAppInitialization:"2829868d308643edbec0795977f17437") + sdkConfig6.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig6){} + let mopubInterstitial6 = MPInterstitialAdController(forAdUnitId: "2829868d308643edbec0795977f17437") + interstitialUnit6.fetchDemand(adObject: mopubInterstitial6!){ (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(0, ResultCode.rawValue) + fetchDemandCount = fetchDemandCount + 1 + } + } + + let interstitialUnit7 = InterstitialAdUnit(configId: "bde00f49-0a1b-483a-9716-e2dd427b794c") + let sdkConfig7 = MPMoPubConfiguration(adUnitIdForAppInitialization:"c3fca03154a540bfa7f0971fb984e3e8") + sdkConfig7.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig7){} + let mopubInterstitial7 = MPInterstitialAdController(forAdUnitId: "c3fca03154a540bfa7f0971fb984e3e8") + interstitialUnit7.fetchDemand(adObject: mopubInterstitial7!){ (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(0, ResultCode.rawValue) + fetchDemandCount = fetchDemandCount + 1 + } + } + + let interstitialUnit8 = InterstitialAdUnit(configId: "6ceca3d4-f5b8-4717-b4d9-178843f873f8") + let sdkConfig8 = MPMoPubConfiguration(adUnitIdForAppInitialization: "12ecf78eb8314f8bb36192a6286adc56") + sdkConfig8.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig8){} + let mopubInterstitial8 = MPInterstitialAdController(forAdUnitId: "12ecf78eb8314f8bb36192a6286adc56") + interstitialUnit8.fetchDemand(adObject: mopubInterstitial8!){ (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(0, ResultCode.rawValue) + fetchDemandCount = fetchDemandCount + 1 + } + } + + let interstitialUnit9 = InterstitialAdUnit(configId: Constants.PBS_CONFIG_ID_INTERSTITIAL_APPNEXUS_DEMAND) + let sdkConfig9 = MPMoPubConfiguration(adUnitIdForAppInitialization:Constants.MOPUB_INTERSTITIAL_ADUNIT_ID) + sdkConfig9.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig9){} + let mopubInterstitial9 = MPInterstitialAdController(forAdUnitId: Constants.MOPUB_INTERSTITIAL_ADUNIT_ID) + interstitialUnit9.fetchDemand(adObject: mopubInterstitial9!){ (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(0, ResultCode.rawValue) + fetchDemandCount = fetchDemandCount + 1 + } + } + + let interstitialUnit = InterstitialAdUnit(configId: Constants.PBS_CONFIG_ID_INTERSTITIAL_APPNEXUS_DEMAND) + let dfpInterstitial = DFPInterstitial(adUnitID: Constants.DFP_INTERSTITIAL_ADUNIT_ID) + let request:DFPRequest = DFPRequest() + dfpInterstitial.delegate = self + request.testDevices = [ kGADSimulatorID] + interstitialUnit.fetchDemand(adObject:request) { (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(0, ResultCode.rawValue) + fetchDemandCount = fetchDemandCount + 1 + } + } + + wait(5) + XCTAssertEqual(10, fetchDemandCount) + } + + func testSameConfigIdOnDifferentAdObjects() + { + var fetchDemandCount = 0 + let bannerUnit1 = BannerAdUnit(configId: Constants.PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND, size: CGSize(width: 300, height: 250)) + let sdkConfig1 = MPMoPubConfiguration(adUnitIdForAppInitialization: Constants.MOPUB_BANNER_ADUNIT_ID_300x250) + sdkConfig1.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig1){} + let mopubBanner1 = MPAdView(adUnitId: Constants.MOPUB_BANNER_ADUNIT_ID_300x250, size: CGSize(width: 300, height: 250)) + mopubBanner1?.delegate = self + viewController?.view.addSubview(mopubBanner1!) + bannerUnit1.fetchDemand(adObject: mopubBanner1!){ (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(0, ResultCode.rawValue) + XCTAssertNotNil(mopubBanner1!.keywords) + let keywords = mopubBanner1!.keywords + if let keywordsArray = keywords?.components(separatedBy: ",") + { + XCTAssertEqual(10, keywordsArray.count) + XCTAssertTrue (keywordsArray.contains("hb_pb:0.50")) + XCTAssertTrue (keywords!.contains("hb_cache_id:")) + fetchDemandCount = fetchDemandCount + 1 + } + } + } + + let bannerUnit2 = BannerAdUnit(configId: Constants.PBS_CONFIG_ID_300x250_APPNEXUS_DEMAND, size: CGSize(width: 300, height: 250)) + let sdkConfig2 = MPMoPubConfiguration(adUnitIdForAppInitialization: Constants.MOPUB_BANNER_ADUNIT_ID_300x250) + sdkConfig2.globalMediationSettings = [] + MoPub.sharedInstance().initializeSdk(with: sdkConfig2){} + let mopubBanner2 = MPAdView(adUnitId: Constants.MOPUB_BANNER_ADUNIT_ID_300x250, size: CGSize(width: 300, height: 250)) + mopubBanner2?.delegate = self + viewController?.view.addSubview(mopubBanner2!) + bannerUnit2.fetchDemand(adObject: mopubBanner2!){ (ResultCode) in + DispatchQueue.main.async { + XCTAssertEqual(0, ResultCode.rawValue) + XCTAssertNotNil(mopubBanner2?.keywords) + let keywords = mopubBanner2?.keywords + if let keywordsArray = keywords?.components(separatedBy: ",") + { + XCTAssertEqual(10, keywordsArray.count) + XCTAssertTrue (keywordsArray.contains("hb_pb:0.50")) + XCTAssertTrue (keywords!.contains("hb_cache_id:")) + fetchDemandCount = fetchDemandCount + 1 + } + } + } + + wait(5) + XCTAssertEqual(2, fetchDemandCount) + } + + //MARK:- DFP delegate + func adViewDidReceiveAd(_ bannerView: GADBannerView) { + print("adViewDidReceiveAd") + DispatchQueue.main.asyncAfter(deadline: .now() + 10.0, execute: { + let result = PBViewTool.checkDFPAdViewContainsPBMAd(bannerView) + XCTAssertTrue(result) + self.loadSuccesfulException?.fulfill() + }) + } + + func adView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: GADRequestError) { + print("adView:didFailToReceiveAdWithError: \(error.localizedDescription)") + loadSuccesfulException = nil + } + + func interstitialWillPresentScreen(_ ad: GADInterstitial) { + print("Ad presented") + } + + func interstitialDidDismissScreen(_ ad: GADInterstitial) { + // Send another GADRequest here + print("Ad dismissed") + } + + func interstitialDidReceiveAd(_ ad: GADInterstitial) { + + if(self.dfpInterstitial?.isReady ?? true) + { + print("Ad ready") + self.dfpInterstitial?.present(fromRootViewController: viewController!) + DispatchQueue.main.asyncAfter(deadline: .now() + 5.0, execute: { + let result = PBViewTool.checkDFPInterstitialAdViewContainsPBMAd(self.viewController!.presentedViewController!) + XCTAssertTrue(result) + self.loadSuccesfulException?.fulfill() + }) + }else { + print("Ad not ready"); + } + } + + //MARK:- Mopub delegate + func viewControllerForPresentingModalView() -> UIViewController! { + return viewController + } + + func adViewDidLoadAd(_ view: MPAdView!) { + print("adViewDidReceiveAd") + PBViewTool.checkMPAdViewContainsPBMAd(view) { (result) in + XCTAssertTrue(result) + self.loadSuccesfulException?.fulfill() + } + } + + func adViewDidFail(toLoadAd view: MPAdView!) { + print("adViewDidFail") + loadSuccesfulException = nil + } + + func interstitialDidLoadAd(_ interstitial: MPInterstitialAdController!) { + print("Ad ready") + if(self.mopubInterstitial?.ready ?? true){ + self.mopubInterstitial?.show(from: viewController) + } + } + + func interstitialDidFail(toLoadAd interstitial: MPInterstitialAdController!) { + print("Ad not ready"); + loadSuccesfulException = nil + } + + func interstitialDidAppear(_ interstitial: MPInterstitialAdController!) { + print("ad appeared") + PBViewTool.checkMPInterstitialContainsPBMAd(self.viewController!.presentedViewController!, withCompletionHandler: { (result) in + XCTAssertTrue(result) + self.loadSuccesfulException?.fulfill() + }) + + } + + func interstitialWillAppear(_ interstitial: MPInterstitialAdController!) { + print("ad appeared") + } + + +} + + +extension XCTestCase { + func wait(for element: XCUIElement, timeout: TimeInterval) { + let p = NSPredicate(format: "exists == true") // Checks for exists true + let e = expectation(for: p, evaluatedWith: element, handler: nil) + wait(for: [e], timeout: timeout) + } + func wait(_ interval: Int) { + let expectation: XCTestExpectation = self.expectation(description: "wait") + DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(interval * Int(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: { + expectation.fulfill() + }) + waitForExpectations(timeout: TimeInterval(interval), handler: nil) + } +} diff --git a/examples/PrebidMobileDemo/Gemfile b/examples/PrebidMobileDemo/Gemfile deleted file mode 100644 index f3f8ce97b..000000000 --- a/examples/PrebidMobileDemo/Gemfile +++ /dev/null @@ -1,5 +0,0 @@ -source "https://rubygems.org" - -gem "calabash-cucumber", ">= 0.20.4", "< 2.0" -gem 'rspec' - diff --git a/examples/PrebidMobileDemo/Gemfile.lock b/examples/PrebidMobileDemo/Gemfile.lock deleted file mode 100644 index b1b9fe935..000000000 --- a/examples/PrebidMobileDemo/Gemfile.lock +++ /dev/null @@ -1,73 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - CFPropertyList (2.3.5) - awesome_print (1.8.0) - builder (3.2.3) - calabash-cucumber (0.20.5) - awesome_print - bundler (~> 1.3) - clipboard (~> 1.0) - cucumber - edn (>= 1.0.6, < 2.0) - geocoder (>= 1.1.8, < 2.0) - httpclient (>= 2.7.1, < 3.0) - json - run_loop (>= 2.4.1, < 3.0) - slowhandcuke (~> 0.0.3) - clipboard (1.1.1) - command_runner_ng (0.1.3) - cucumber (2.4.0) - builder (>= 2.1.2) - cucumber-core (~> 1.5.0) - cucumber-wire (~> 0.0.1) - diff-lcs (>= 1.1.3) - gherkin (~> 4.0) - multi_json (>= 1.7.5, < 2.0) - multi_test (>= 0.1.2) - cucumber-core (1.5.0) - gherkin (~> 4.0) - cucumber-wire (0.0.1) - diff-lcs (1.3) - edn (1.1.1) - geocoder (1.4.4) - gherkin (4.1.3) - httpclient (2.8.3) - i18n (0.8.6) - json (1.8.6) - multi_json (1.12.1) - multi_test (0.1.2) - rspec (3.6.0) - rspec-core (~> 3.6.0) - rspec-expectations (~> 3.6.0) - rspec-mocks (~> 3.6.0) - rspec-core (3.6.0) - rspec-support (~> 3.6.0) - rspec-expectations (3.6.0) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.6.0) - rspec-mocks (3.6.0) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.6.0) - rspec-support (3.6.0) - run_loop (2.5.0) - CFPropertyList (~> 2.2) - awesome_print (~> 1.2) - command_runner_ng (>= 0.0.2) - httpclient (>= 2.7.1, < 3.0) - i18n (>= 0.7.0, < 1.0) - json (~> 1.8) - thor (>= 0.18.1, < 1.0) - slowhandcuke (0.0.3) - cucumber - thor (0.20.0) - -PLATFORMS - ruby - -DEPENDENCIES - calabash-cucumber (>= 0.20.4, < 2.0) - rspec - -BUNDLED WITH - 1.14.6 diff --git a/examples/PrebidMobileDemo/Makefile b/examples/PrebidMobileDemo/Makefile deleted file mode 100644 index f47c97863..000000000 --- a/examples/PrebidMobileDemo/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -all: - $(MAKE) ipa - -clean: - rm -rf build - rm -rf Products - - # Legacy - #rm -rf CalSmoke*.ipa - #rm -rf CalSmoke*.app.dSYM - #rm -rf CalSmoke*.app - #rm -rf xtc-staging - -# Builds an ipa with no Calabash server. -ipa: - bin/make/ipa.sh - -# Builds an app with no Calabash server. -#app: - #bin/make/app.sh - -# Run the XCTest (unit) tests -#xct: - #bundle exec bin/make/xctest.rb \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Podfile b/examples/PrebidMobileDemo/Podfile deleted file mode 100644 index f8c90c8fa..000000000 --- a/examples/PrebidMobileDemo/Podfile +++ /dev/null @@ -1,8 +0,0 @@ -# Uncomment the next line to define a global platform for your project -# platform :ios, '9.0' - -target 'PrebidMobileDemo' do - pod 'Google-Mobile-Ads-SDK', '7.30.0' - pod 'mopub-ios-sdk', '4.20.1' - -end diff --git a/examples/PrebidMobileDemo/Podfile.lock b/examples/PrebidMobileDemo/Podfile.lock deleted file mode 100644 index 7cba2dc1f..000000000 --- a/examples/PrebidMobileDemo/Podfile.lock +++ /dev/null @@ -1,30 +0,0 @@ -PODS: - - Google-Mobile-Ads-SDK (7.34.0) - - mopub-ios-sdk (5.4.0): - - mopub-ios-sdk/MoPubSDK (= 5.4.0) - - mopub-ios-sdk/Avid (5.4.0): - - mopub-ios-sdk/Core - - mopub-ios-sdk/Core (5.4.0) - - mopub-ios-sdk/Moat (5.4.0): - - mopub-ios-sdk/Core - - mopub-ios-sdk/MoPubSDK (5.4.0): - - mopub-ios-sdk/Avid - - mopub-ios-sdk/Core - - mopub-ios-sdk/Moat - -DEPENDENCIES: - - Google-Mobile-Ads-SDK - - mopub-ios-sdk - -SPEC REPOS: - https://github.com/cocoapods/specs.git: - - Google-Mobile-Ads-SDK - - mopub-ios-sdk - -SPEC CHECKSUMS: - Google-Mobile-Ads-SDK: a1cbce28c0c78ca1fb0b6c4f213485f55527c99f - mopub-ios-sdk: 6e331c6cf6052426a750568578f55dd3de0a67f1 - -PODFILE CHECKSUM: 0368217e88031deb32211dd21720e510a3c78793 - -COCOAPODS: 1.5.3 diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/GoogleMobileAds b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/GoogleMobileAds deleted file mode 100755 index 40f2f38de..000000000 Binary files a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/GoogleMobileAds and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPBannerView.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPBannerView.h deleted file mode 100755 index 62286af58..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPBannerView.h +++ /dev/null @@ -1,112 +0,0 @@ -// -// DFPBannerView.h -// Google Mobile Ads SDK -// -// Copyright 2012 Google Inc. All rights reserved. -// - -#import -#import -#import -#import -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// The delegate of a GADAdLoader object must conform to this protocol to receive DFPBannerViews. -@protocol DFPBannerAdLoaderDelegate - -/// Asks the delegate which banner ad sizes should be requested. -- (NSArray *)validBannerSizesForAdLoader:(GADAdLoader *)adLoader; - -/// Tells the delegate that a Google Ad Manager banner ad was received. -- (void)adLoader:(GADAdLoader *)adLoader didReceiveDFPBannerView:(DFPBannerView *)bannerView; - -@end - -/// The view that displays Ad Manager banner ads. -/// -/// To request this ad type using GADAdLoader, you need to pass kGADAdLoaderAdTypeDFPBanner (see -/// GADAdLoaderAdTypes.h) to the |adTypes| parameter in GADAdLoader's initializer method. If you -/// request this ad type, your delegate must conform to the DFPBannerAdLoaderDelegate protocol. -GAD_SUBCLASSING_RESTRICTED -@interface DFPBannerView : GADBannerView - -/// Required value created on the Ad Manager website. Create a new ad unit for every unique -/// placement of an ad in your application. Set this to the ID assigned for this placement. Ad units -/// are important for targeting and statistics. -/// -/// Example Ad Manager ad unit ID: @"/6499/example/banner" -@property(nonatomic, copy, nullable) NSString *adUnitID; - -/// Optional delegate that is notified when creatives send app events. -@property(nonatomic, weak, nullable) IBOutlet id appEventDelegate; - -/// Optional delegate that is notified when creatives cause the banner to change size. -@property(nonatomic, weak, nullable) IBOutlet id adSizeDelegate; - -/// Optional array of NSValue encoded GADAdSize structs, specifying all valid sizes that are -/// appropriate for this slot. Never create your own GADAdSize directly. Use one of the predefined -/// standard ad sizes (such as kGADAdSizeBanner), or create one using the GADAdSizeFromCGSize -/// method. -/// -/// Example: -/// -///
-///   NSArray *validSizes = @[
-///     NSValueFromGADAdSize(kGADAdSizeBanner),
-///     NSValueFromGADAdSize(kGADAdSizeLargeBanner)
-///   ];
-///
-///   bannerView.validAdSizes = validSizes;
-///   
-@property(nonatomic, copy, nullable) NSArray *validAdSizes; - -/// Correlator object for correlating this object to other ad objects. -@property(nonatomic, strong, nullable) GADCorrelator *correlator; - -/// Indicates that the publisher will record impressions manually when the ad becomes visible to the -/// user. -@property(nonatomic, assign) BOOL enableManualImpressions; - -/// Optional delegate object for custom rendered ads. -@property(nonatomic, weak, nullable) - IBOutlet id customRenderedBannerViewDelegate; - -/// Video controller for controlling video rendered by this ad view. -@property(nonatomic, strong, readonly) GADVideoController *videoController; - -/// If you've set enableManualImpressions to YES, call this method when the ad is visible. -- (void)recordImpression; - -/// Use this function to resize the banner view without launching a new ad request. -- (void)resize:(GADAdSize)size; - -/// Sets options that configure ad loading. -/// -/// @param adOptions An array of GADAdLoaderOptions objects. The array is deep copied and option -/// objects cannot be modified after calling this method. -- (void)setAdOptions:(NSArray *)adOptions; - -#pragma mark Deprecated - -/// Deprecated. Use the validAdSizes property. -/// Sets the receiver's valid ad sizes to the values pointed to by the provided NULL terminated list -/// of GADAdSize pointers. -/// -/// Example: -/// -///
-///   GADAdSize size1 = kGADAdSizeBanner;
-///   GADAdSize size2 = kGADAdSizeLargeBanner;
-///   [bannerView setValidAdSizesWithSizes:&size1, &size2, NULL];
-///   
-- (void)setValidAdSizesWithSizes:(GADAdSize *)firstSize, ... NS_REQUIRES_NIL_TERMINATION - GAD_DEPRECATED_MSG_ATTRIBUTE("Use validAdSizes property."); - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPBannerViewOptions.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPBannerViewOptions.h deleted file mode 100755 index 90c1b9faf..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPBannerViewOptions.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// DFPBannerViewOptions.h -// Google Mobile Ads SDK -// -// Copyright © 2016 Google Inc. All rights reserved. -// - -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Ad loader options for banner ads. -GAD_SUBCLASSING_RESTRICTED -@interface DFPBannerViewOptions : GADAdLoaderOptions - -/// Optional delegate that is notified if the loaded banner sends app events. -@property(nonatomic, weak, nullable) id appEventDelegate; - -/// Optional delegate that is notified if the loaded banner changes size. -@property(nonatomic, weak, nullable) id adSizeDelegate; - -/// Whether the publisher will record impressions manually when the ad becomes visible to the user. -@property(nonatomic, assign) BOOL enableManualImpressions; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPCustomRenderedAd.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPCustomRenderedAd.h deleted file mode 100755 index 99d74f0d1..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPCustomRenderedAd.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// DFPCustomRenderedAd.h -// Google Mobile Ads SDK -// -// Copyright 2014 Google Inc. All rights reserved. -// - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Custom rendered ad. Your application renders the ad. -GAD_SUBCLASSING_RESTRICTED -@interface DFPCustomRenderedAd : NSObject - -/// The ad's HTML. -@property(nonatomic, readonly, copy) NSString *adHTML; - -/// The base URL of the ad's HTML. -@property(nonatomic, readonly, copy) NSURL *adBaseURL; - -/// Call this method when the user clicks the ad. -- (void)recordClick; - -/// Call this method when the ad is visible to the user. -- (void)recordImpression; - -/// Call this method after the ad has been rendered in a UIView object. -- (void)finishedRenderingAdView:(UIView *)view; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPCustomRenderedBannerViewDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPCustomRenderedBannerViewDelegate.h deleted file mode 100755 index ec647cdb8..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPCustomRenderedBannerViewDelegate.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// DFPCustomRenderedBannerViewDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2014 Google Inc. All rights reserved. -// - -#import - -#import - -@class DFPBannerView; -@class DFPCustomRenderedAd; - -NS_ASSUME_NONNULL_BEGIN - -/// The DFPCustomRenderedAd banner view delegate protocol for notifying the delegate of changes to -/// custom rendered banners. -@protocol DFPCustomRenderedBannerViewDelegate - -/// Called after ad data has been received. You must construct a banner from |customRenderedAd| and -/// call the |customRenderedAd| object's finishedRenderingAdView: when the ad has been rendered. -- (void)bannerView:(DFPBannerView *)bannerView - didReceiveCustomRenderedAd:(DFPCustomRenderedAd *)customRenderedAd; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPCustomRenderedInterstitialDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPCustomRenderedInterstitialDelegate.h deleted file mode 100755 index 3443a4eb1..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPCustomRenderedInterstitialDelegate.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// DFPCustomRenderedInterstitialDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2014 Google Inc. All rights reserved. -// - -#import - -#import - -@class DFPCustomRenderedAd; -@class DFPInterstitial; - -NS_ASSUME_NONNULL_BEGIN - -/// The DFPCustomRenderedAd interstitial delegate protocol for notifying the delegate of changes to -/// custom rendered interstitials. -@protocol DFPCustomRenderedInterstitialDelegate - -/// Called after ad data has been received. You must construct an interstitial from -/// |customRenderedAd| and call the |customRenderedAd| object's finishedRenderingAdView: method when -/// the ad has been rendered. -- (void)interstitial:(DFPInterstitial *)interstitial - didReceiveCustomRenderedAd:(DFPCustomRenderedAd *)customRenderedAd; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPInterstitial.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPInterstitial.h deleted file mode 100755 index b2b5473f7..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPInterstitial.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// DFPInterstitial.h -// Google Mobile Ads SDK -// -// Copyright 2012 Google Inc. All rights reserved. -// - -#import -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Google Ad Manager interstitial ad, a full-screen advertisement shown at natural -/// transition points in your application such as between game levels or news stories. -GAD_SUBCLASSING_RESTRICTED -@interface DFPInterstitial : GADInterstitial - -/// Required value created on the Ad Manager website. Create a new ad unit for every unique -/// placement of an -/// ad in your application. Set this to the ID assigned for this placement. Ad units are important -/// for targeting and stats. -/// -/// Example Ad Manager ad unit ID: @"/6499/example/interstitial" -@property(nonatomic, readonly, copy) NSString *adUnitID; - -/// Correlator object for correlating this object to other ad objects. -@property(nonatomic, strong, nullable) GADCorrelator *correlator; - -/// Optional delegate that is notified when creatives send app events. -@property(nonatomic, weak, nullable) id appEventDelegate; - -/// Optional delegate object for custom rendered ads. -@property(nonatomic, weak, nullable) - id customRenderedInterstitialDelegate; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPRequest.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPRequest.h deleted file mode 100755 index 860c29cfb..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPRequest.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// DFPRequest.h -// Google Mobile Ads SDK -// -// Copyright 2014 Google Inc. All rights reserved. -// - -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Add this constant to the testDevices property's array to receive test ads on the simulator. -GAD_EXTERN const id kDFPSimulatorID; - -/// Specifies optional parameters for ad requests. -GAD_SUBCLASSING_RESTRICTED -@interface DFPRequest : GADRequest - -/// Publisher provided user ID. -@property(nonatomic, copy, nullable) NSString *publisherProvidedID; - -/// Array of strings used to exclude specified categories in ad results. -@property(nonatomic, copy, nullable) NSArray *categoryExclusions; - -/// Key-value pairs used for custom targeting. -@property(nonatomic, copy, nullable) NSDictionary *customTargeting; - -/// This API is deprecated and a no-op, use an instance of GADCorrelator set on DFPInterstitial or -/// DFPBannerView objects to correlate requests. -+ (void)updateCorrelator GAD_DEPRECATED_MSG_ATTRIBUTE( - "Set GADCorrelator objects on your ads instead. This method no longer affects ad correlation."); - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdChoicesView.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdChoicesView.h deleted file mode 100755 index 80c34ea88..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdChoicesView.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// GADAdChoicesView.h -// Google Mobile Ads SDK -// -// Copyright 2016 Google Inc. All rights reserved. -// - -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Displays AdChoices content. -/// -/// If a GADAdChoicesView is set on GADNativeAppInstallAdView or GADNativeContentAdView prior to -/// calling -setNativeAppInstallAd: or -setNativeContentAd:, AdChoices content will render inside -/// the GADAdChoicesView. By default, AdChoices is placed in the top right corner of -/// GADNativeAppInstallAdView and GADNativeContentAdView. -GAD_SUBCLASSING_RESTRICTED -@interface GADAdChoicesView : UIView - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdLoader.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdLoader.h deleted file mode 100755 index 9bde11847..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdLoader.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// GADAdLoader.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import -#import - -#import -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Ad loader options base class. See each ad type's header for available GADAdLoaderOptions -/// subclasses. -@interface GADAdLoaderOptions : NSObject -@end - -/// Loads ads. See GADAdLoaderAdTypes.h for available ad types. -GAD_SUBCLASSING_RESTRICTED -@interface GADAdLoader : NSObject - -/// Object notified when an ad request succeeds or fails. Must conform to requested ad types' -/// delegate protocols. -@property(nonatomic, weak, nullable) id delegate; - -/// The ad loader's ad unit ID. -@property(nonatomic, readonly) NSString *adUnitID; - -/// Indicates whether the ad loader is loading. -@property(nonatomic, getter=isLoading, readonly) BOOL loading; - -/// Returns an initialized ad loader configured to load the specified ad types. -/// -/// @param rootViewController The root view controller is used to present ad click actions. -/// @param adTypes An array of ad types. See GADAdLoaderAdTypes.h for available ad types. -/// @param options An array of GADAdLoaderOptions objects to configure how ads are loaded, or nil to -/// use default options. See each ad type's header for available GADAdLoaderOptions subclasses. -- (instancetype)initWithAdUnitID:(NSString *)adUnitID - rootViewController:(nullable UIViewController *)rootViewController - adTypes:(NSArray *)adTypes - options:(nullable NSArray *)options; - -/// Loads the ad and informs the delegate of the outcome. -- (void)loadRequest:(nullable GADRequest *)request; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdLoaderAdTypes.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdLoaderAdTypes.h deleted file mode 100755 index 9e1137602..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdLoaderAdTypes.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// GADAdLoaderAdTypes.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NSString *GADAdLoaderAdType GAD_STRING_ENUM; - -/// Use with GADAdLoader to request native app install ads. To receive ads, the ad loader's delegate -/// must conform to the GADNativeAppInstallAdLoaderDelegate protocol. See GADNativeAppInstallAd.h. -/// -/// See GADNativeAdImageAdLoaderOptions.h for ad loader image options. -GAD_EXTERN GADAdLoaderAdType const kGADAdLoaderAdTypeNativeAppInstall; - -/// Use with GADAdLoader to request native content ads. To receive ads, the ad loader's delegate -/// must conform to the GADNativeContentAdLoaderDelegate protocol. See GADNativeContentAd.h. -/// -/// See GADNativeAdImageAdLoaderOptions.h for ad loader image options. -GAD_EXTERN GADAdLoaderAdType const kGADAdLoaderAdTypeNativeContent; - -/// Use with GADAdLoader to request native custom template ads. To receive ads, the ad loader's -/// delegate must conform to the GADNativeCustomTemplateAdLoaderDelegate protocol. See -/// GADNativeCustomTemplateAd.h. -GAD_EXTERN GADAdLoaderAdType const kGADAdLoaderAdTypeNativeCustomTemplate; - -/// Use with GADAdLoader to request Google Ad Manager banner ads. To receive ads, the ad loader's -/// delegate must conform to the DFPBannerAdLoaderDelegate protocol. See DFPBannerView.h. -GAD_EXTERN GADAdLoaderAdType const kGADAdLoaderAdTypeDFPBanner; - -/// Use with GADAdLoader to request native ads. To receive ads, the ad loader's delegate must -/// conform to the GADUnifiedNativeAdLoaderDelegate protocol. See GADUnifiedNativeAd.h. -GAD_EXTERN GADAdLoaderAdType const kGADAdLoaderAdTypeUnifiedNative; - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdLoaderDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdLoaderDelegate.h deleted file mode 100755 index 4ff94dc97..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdLoaderDelegate.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// GADAdLoaderDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import - -#import -#import - -@class GADAdLoader; - -NS_ASSUME_NONNULL_BEGIN - -/// Base ad loader delegate protocol. Ad types provide extended protocols that declare methods to -/// handle successful ad loads. -@protocol GADAdLoaderDelegate - -/// Called when adLoader fails to load an ad. -- (void)adLoader:(GADAdLoader *)adLoader didFailToReceiveAdWithError:(GADRequestError *)error; - -@optional - -/// Called after adLoader has finished loading. -- (void)adLoaderDidFinishLoading:(GADAdLoader *)adLoader; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdNetworkExtras.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdNetworkExtras.h deleted file mode 100755 index a25b8b3db..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdNetworkExtras.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// GADAdNetworkExtras.h -// Google Mobile Ads SDK -// -// Copyright 2012 Google Inc. All rights reserved. -// - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/// An object implementing this protocol contains information set by the publisher on the client -/// device for a particular ad network. -/// -/// Ad networks should create an 'extras' object implementing this protocol for their publishers to -/// use. -@protocol GADAdNetworkExtras -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdReward.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdReward.h deleted file mode 100755 index ca5be84ce..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdReward.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// GADAdReward.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Reward information for GADRewardBasedVideoAd ads. -GAD_SUBCLASSING_RESTRICTED -@interface GADAdReward : NSObject - -/// Type of the reward. -@property(nonatomic, readonly, copy) NSString *type; - -/// Amount rewarded to the user. -@property(nonatomic, readonly, copy) NSDecimalNumber *amount; - -/// Returns an initialized GADAdReward with the provided reward type and reward amount. rewardType -/// and rewardAmount must not be nil. -- (instancetype)initWithRewardType:(NSString *)rewardType - rewardAmount:(NSDecimalNumber *)rewardAmount NS_DESIGNATED_INITIALIZER; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdSize.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdSize.h deleted file mode 100755 index c5704f747..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdSize.h +++ /dev/null @@ -1,117 +0,0 @@ -// -// GADAdSize.h -// Google Mobile Ads SDK -// -// Copyright 2012 Google Inc. All rights reserved. -// - -#import -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/// A valid GADAdSize is considered to be one of the predefined GADAdSize constants or a GADAdSize -/// constructed by GADAdSizeFromCGSize, GADAdSizeFullWidthPortraitWithHeight, -/// GADAdSizeFullWidthLandscapeWithHeight. -/// -/// Do not create a GADAdSize manually. Use one of the kGADAdSize constants. Treat GADAdSize as an -/// opaque type. Do not access any fields directly. To obtain a concrete CGSize, use the function -/// CGSizeFromGADAdSize(). -typedef struct GAD_BOXABLE GADAdSize GADAdSize; - -/// Ad size. -/// -/// @see typedef GADAdSize -struct GAD_BOXABLE GADAdSize { - CGSize size; ///< The ad size. Don't modify this value directly. - NSUInteger flags; ///< Reserved. -}; - -#pragma mark Standard Sizes - -/// iPhone and iPod Touch ad size. Typically 320x50. -GAD_EXTERN GADAdSize const kGADAdSizeBanner; - -/// Taller version of kGADAdSizeBanner. Typically 320x100. -GAD_EXTERN GADAdSize const kGADAdSizeLargeBanner; - -/// Medium Rectangle size for the iPad (especially in a UISplitView's left pane). Typically 300x250. -GAD_EXTERN GADAdSize const kGADAdSizeMediumRectangle; - -/// Full Banner size for the iPad (especially in a UIPopoverController or in -/// UIModalPresentationFormSheet). Typically 468x60. -GAD_EXTERN GADAdSize const kGADAdSizeFullBanner; - -/// Leaderboard size for the iPad. Typically 728x90. -GAD_EXTERN GADAdSize const kGADAdSizeLeaderboard; - -/// Skyscraper size for the iPad. Mediation only. AdMob/Google does not offer this size. Typically -/// 120x600. -GAD_EXTERN GADAdSize const kGADAdSizeSkyscraper; - -/// An ad size that spans the full width of the application in portrait orientation. The height is -/// typically 50 pixels on an iPhone/iPod UI, and 90 pixels tall on an iPad UI. -GAD_EXTERN GADAdSize const kGADAdSizeSmartBannerPortrait; - -/// An ad size that spans the full width of the application in landscape orientation. The height is -/// typically 32 pixels on an iPhone/iPod UI, and 90 pixels tall on an iPad UI. -GAD_EXTERN GADAdSize const kGADAdSizeSmartBannerLandscape; - -/// An ad size that spans the full width of its container, with a height dynamically determined by -/// the ad. -GAD_EXTERN GADAdSize const kGADAdSizeFluid; - -/// Invalid ad size marker. -GAD_EXTERN GADAdSize const kGADAdSizeInvalid; - -#pragma mark Custom Sizes - -/// Returns a custom GADAdSize for the provided CGSize. Use this only if you require a non-standard -/// size. Otherwise, use one of the standard size constants above. -GAD_EXTERN GADAdSize GADAdSizeFromCGSize(CGSize size); - -/// Returns a custom GADAdSize that spans the full width of the application in portrait orientation -/// with the height provided. -GAD_EXTERN GADAdSize GADAdSizeFullWidthPortraitWithHeight(CGFloat height); - -/// Returns a custom GADAdSize that spans the full width of the application in landscape orientation -/// with the height provided. -GAD_EXTERN GADAdSize GADAdSizeFullWidthLandscapeWithHeight(CGFloat height); - -#pragma mark Convenience Functions - -/// Returns YES if the two GADAdSizes are equal, otherwise returns NO. -GAD_EXTERN BOOL GADAdSizeEqualToSize(GADAdSize size1, GADAdSize size2); - -/// Returns a CGSize for the provided a GADAdSize constant. If the GADAdSize is unknown, returns -/// CGSizeZero. -GAD_EXTERN CGSize CGSizeFromGADAdSize(GADAdSize size); - -/// Returns YES if |size| is one of the predefined constants or is a custom GADAdSize generated by -/// GADAdSizeFromCGSize. -GAD_EXTERN BOOL IsGADAdSizeValid(GADAdSize size); - -/// Returns YES if |size| is a fluid ad size. -GAD_EXTERN BOOL GADAdSizeIsFluid(GADAdSize size); - -/// Returns a NSString describing the provided GADAdSize. -GAD_EXTERN NSString *NSStringFromGADAdSize(GADAdSize size); - -/// Returns an NSValue representing the GADAdSize. -GAD_EXTERN NSValue *NSValueFromGADAdSize(GADAdSize size); - -/// Returns a GADAdSize from an NSValue. Returns kGADAdSizeInvalid if the value is not a GADAdSize. -GAD_EXTERN GADAdSize GADAdSizeFromNSValue(NSValue *value); - -#pragma mark Deprecated Macros - -#define GAD_SIZE_320x50 CGSizeFromGADAdSize(kGADAdSizeBanner) -#define GAD_SIZE_320x100 CGSizeFromGADAdSize(kGADAdSizeLargeBanner) -#define GAD_SIZE_300x250 CGSizeFromGADAdSize(kGADAdSizeMediumRectangle) -#define GAD_SIZE_468x60 CGSizeFromGADAdSize(kGADAdSizeFullBanner) -#define GAD_SIZE_728x90 CGSizeFromGADAdSize(kGADAdSizeLeaderboard) -#define GAD_SIZE_120x600 CGSizeFromGADAdSize(kGADAdSizeSkyscraper) - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdSizeDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdSizeDelegate.h deleted file mode 100755 index 34765a024..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdSizeDelegate.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// GADAdSizeDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2012 Google Inc. All rights reserved. -// - -#import - -#import -#import - -@class GADBannerView; - -NS_ASSUME_NONNULL_BEGIN - -/// The class implementing this protocol will be notified when the DFPBannerView changes ad size. -/// Any views that may be affected by the banner size change will have time to adjust. -@protocol GADAdSizeDelegate - -/// Called before the ad view changes to the new size. -- (void)adView:(GADBannerView *)bannerView willChangeAdSizeTo:(GADAdSize)size; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAppEventDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAppEventDelegate.h deleted file mode 100755 index 566ec86f8..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAppEventDelegate.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// GADAppEventDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2012 Google Inc. All rights reserved. -// - -#import - -#import - -@class GADBannerView; -@class GADInterstitial; - -NS_ASSUME_NONNULL_BEGIN - -/// Implement your app event within these methods. The delegate will be notified when the SDK -/// receives an app event message from the ad. -@protocol GADAppEventDelegate - -@optional - -/// Called when the banner receives an app event. -- (void)adView:(GADBannerView *)banner - didReceiveAppEvent:(NSString *)name - withInfo:(nullable NSString *)info; - -/// Called when the interstitial receives an app event. -- (void)interstitial:(GADInterstitial *)interstitial - didReceiveAppEvent:(NSString *)name - withInfo:(nullable NSString *)info; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAudioVideoManager.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAudioVideoManager.h deleted file mode 100755 index 861a03279..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAudioVideoManager.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// GADAudioVideoManager.h -// Google Mobile Ads SDK -// -// Copyright 2016 Google Inc. All rights reserved. -// - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Provides audio and video notifications and configurations management. Available only on iOS 7 -/// and above. -/// -/// Don't create an instance of this class and use the one available from GADMobileAds -/// sharedInstace's audioVideoManager. -GAD_SUBCLASSING_RESTRICTED -@interface GADAudioVideoManager : NSObject - -/// Delegate for receiving video and audio updates. -@property(nonatomic, weak, nullable) id delegate; - -/// Indicates whether the application wishes to manage audio session. If set as YES, the Google -/// Mobile Ads SDK will stop managing AVAudioSession during the video playback lifecycle. If set as -/// NO, the Google Mobile Ads SDK will control AVAudioSession. That may include: setting -/// AVAudioSession's category to AVAudioSessionCategoryAmbient when all videos are muted, setting -/// AVAudioSession's category to AVAudioSessionCategorySoloAmbient when any playing video becomes -/// unmuted, and allowing background apps to continue playing sound when all videos rendered by -/// Google Mobile Ads SDK are muted or have stopped playing. -@property(nonatomic, assign) BOOL audioSessionIsApplicationManaged; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAudioVideoManagerDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAudioVideoManagerDelegate.h deleted file mode 100755 index cbb9407f3..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAudioVideoManagerDelegate.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// GADAudioVideoManagerDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2016 Google Inc. All rights reserved. -// - -#import - -@class GADAudioVideoManager; - -NS_ASSUME_NONNULL_BEGIN - -@protocol GADAudioVideoManagerDelegate - -@optional - -/// Tells the delegate that the Google Mobile Ads SDK will start playing a video. This method isn't -/// called if another video rendered by Google Mobile Ads SDK is already playing. -- (void)audioVideoManagerWillPlayVideo:(GADAudioVideoManager *)audioVideoManager; - -/// Tells the delegate that the Google Mobile Ads SDK has paused/stopped all video playback. -- (void)audioVideoManagerDidPauseAllVideo:(GADAudioVideoManager *)audioVideoManager; - -/// Tells the delegate that at least one video rendered by the Google Mobile Ads SDK will play -/// sound. Your app should stop playing sound when this method is called. -- (void)audioVideoManagerWillPlayAudio:(GADAudioVideoManager *)audioVideoManager; - -/// Tells the delegate that all the video rendered by the Google Mobile Ads SDK has stopped playing -/// sound. Your app can now resume any music playback or produce any kind of sound. Note that this -/// message doesn't mean that all the video has stopped playing, just audio, so you shouldn't -/// deactivate AVAudioSession's instance. Doing so can lead to unexpected video playback behavior. -/// You may deactivate AVAudioSession only when all rendered video ads are paused or have finished -/// playing, and 'audioVideoDidPauseAllVideo:' is called. -- (void)audioVideoManagerDidStopPlayingAudio:(GADAudioVideoManager *)audioVideoManager; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADBannerView.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADBannerView.h deleted file mode 100755 index 158a34237..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADBannerView.h +++ /dev/null @@ -1,108 +0,0 @@ -// -// GADBannerView.h -// Google Mobile Ads SDK -// -// Copyright 2011 Google Inc. All rights reserved. -// - -#import - -#import -#import -#import -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// The view that displays banner ads. A minimum implementation to get an ad from within a -/// UIViewController class is: -/// -///
-///   // Create and setup the ad view, specifying the size and origin at {0, 0}.
-///   GADBannerView *adView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];
-///   adView.rootViewController = self;
-///   adView.adUnitID = @"ID created when registering your app";
-///   // Place the ad view onto the screen.
-///   [self.view addSubview:adView];
-///   // Request an ad without any additional targeting information.
-///   [adView loadRequest:[GADRequest request]];
-///   
-GAD_SUBCLASSING_RESTRICTED -@interface GADBannerView : UIView - -#pragma mark Initialization - -/// Initializes and returns a banner view with the specified ad size and origin relative to the -/// banner's superview. -- (instancetype)initWithAdSize:(GADAdSize)adSize origin:(CGPoint)origin; - -/// Initializes and returns a banner view with the specified ad size placed at its superview's -/// origin. -- (instancetype)initWithAdSize:(GADAdSize)adSize; - -#pragma mark Pre-Request - -/// Required value created on the AdMob website. Create a new ad unit for every unique placement of -/// an ad in your application. Set this to the ID assigned for this placement. Ad units are -/// important for targeting and statistics. -/// -/// Example AdMob ad unit ID: @"ca-app-pub-0123456789012345/0123456789" -@property(nonatomic, copy, nullable) IBInspectable NSString *adUnitID; - -/// Required reference to the current root view controller. For example the root view controller in -/// tab-based application would be the UITabViewController. -@property(nonatomic, weak, nullable) IBOutlet UIViewController *rootViewController; - -/// Required to set this banner view to a proper size. Never create your own GADAdSize directly. Use -/// one of the predefined standard ad sizes (such as kGADAdSizeBanner), or create one using the -/// GADAdSizeFromCGSize method. If not using mediation, then changing the adSize after an ad has -/// been shown will cause a new request (for an ad of the new size) to be sent. If using mediation, -/// then a new request may not be sent. -@property(nonatomic, assign) GADAdSize adSize; - -/// Optional delegate object that receives state change notifications from this GADBannerView. -/// Typically this is a UIViewController. -@property(nonatomic, weak, nullable) IBOutlet id delegate; - -/// Optional delegate that is notified when creatives cause the banner to change size. -@property(nonatomic, weak, nullable) IBOutlet id adSizeDelegate; - -#pragma mark Making an Ad Request - -/// Makes an ad request. The request object supplies targeting information. -- (void)loadRequest:(nullable GADRequest *)request; - -/// A Boolean value that determines whether autoloading of ads in the receiver is enabled. If -/// enabled, you do not need to call the loadRequest: method to load ads. -@property(nonatomic, assign, getter=isAutoloadEnabled) IBInspectable BOOL autoloadEnabled; - -#pragma mark Mediation - -/// The ad network class name that fetched the current ad. Returns nil while the latest ad request -/// is in progress or if the latest ad request failed. For both standard and mediated Google AdMob -/// ads, this property returns @"GADMAdapterGoogleAdMobAds". For ads fetched via mediation custom -/// events, this property returns @"GADMAdapterCustomEvents". -@property(nonatomic, readonly, copy, nullable) NSString *adNetworkClassName; - -#pragma mark Deprecated - -/// Indicates if the currently displayed ad (or most recent failure) was a result of auto refreshing -/// as specified on server. This property is set to NO after each loadRequest: method. -@property(nonatomic, readonly, assign) BOOL hasAutoRefreshed GAD_DEPRECATED_ATTRIBUTE; - -/// Deprecated delegate. GADInAppPurchase has been deprecated. -@property(nonatomic, weak, nullable) - IBOutlet id inAppPurchaseDelegate GAD_DEPRECATED_ATTRIBUTE; - -/// The mediated ad network's underlying ad view. You may use this property to read the ad's actual -/// size and adjust this banner view's frame origin. However, modifying the banner view's frame size -/// triggers the Mobile Ads SDK to request a new ad. Only update the banner view's frame origin. -@property(nonatomic, readonly, weak, nullable) - UIView *mediatedAdView GAD_DEPRECATED_MSG_ATTRIBUTE("Use adNetworkClassName."); - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADBannerViewDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADBannerViewDelegate.h deleted file mode 100755 index c8bb244bd..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADBannerViewDelegate.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// GADBannerViewDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2011 Google Inc. All rights reserved. -// - -#import - -#import -#import - -@class GADBannerView; - -NS_ASSUME_NONNULL_BEGIN - -/// Delegate methods for receiving GADBannerView state change messages such as ad request status -/// and ad click lifecycle. -@protocol GADBannerViewDelegate - -@optional - -#pragma mark Ad Request Lifecycle Notifications - -/// Tells the delegate that an ad request successfully received an ad. The delegate may want to add -/// the banner view to the view hierarchy if it hasn't been added yet. -- (void)adViewDidReceiveAd:(GADBannerView *)bannerView; - -/// Tells the delegate that an ad request failed. The failure is normally due to network -/// connectivity or ad availablility (i.e., no fill). -- (void)adView:(GADBannerView *)bannerView didFailToReceiveAdWithError:(GADRequestError *)error; - -#pragma mark Click-Time Lifecycle Notifications - -/// Tells the delegate that a full screen view will be presented in response to the user clicking on -/// an ad. The delegate may want to pause animations and time sensitive interactions. -- (void)adViewWillPresentScreen:(GADBannerView *)bannerView; - -/// Tells the delegate that the full screen view will be dismissed. -- (void)adViewWillDismissScreen:(GADBannerView *)bannerView; - -/// Tells the delegate that the full screen view has been dismissed. The delegate should restart -/// anything paused while handling adViewWillPresentScreen:. -- (void)adViewDidDismissScreen:(GADBannerView *)bannerView; - -/// Tells the delegate that the user click will open another app, backgrounding the current -/// application. The standard UIApplicationDelegate methods, like applicationDidEnterBackground:, -/// are called immediately before this method is called. -- (void)adViewWillLeaveApplication:(GADBannerView *)bannerView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCorrelator.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCorrelator.h deleted file mode 100755 index 1c7503182..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCorrelator.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// GADCorrelator.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Represents a correlation between multiple ads. Set an instance of this object on multiple ads to -/// indicate they are being used in a common context. -GAD_SUBCLASSING_RESTRICTED -@interface GADCorrelator : NSObject - -/// Resets the correlator to force a new set of correlated ads. -- (void)reset; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCorrelatorAdLoaderOptions.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCorrelatorAdLoaderOptions.h deleted file mode 100755 index 39ed3013a..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCorrelatorAdLoaderOptions.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// GADCorrelatorAdLoaderOptions.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Ad loader options for adding a correlator to a native ad request. -GAD_SUBCLASSING_RESTRICTED -@interface GADCorrelatorAdLoaderOptions : GADAdLoaderOptions - -/// Correlator object for correlating ads loaded by an ad loader to other ad objects. -@property(nonatomic, strong, nullable) GADCorrelator *correlator; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventBanner.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventBanner.h deleted file mode 100755 index a0aa40080..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventBanner.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// GADCustomEventBanner.h -// Google Mobile Ads SDK -// -// Copyright 2012 Google Inc. All rights reserved. -// - -#import - -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// The banner custom event protocol. Your banner custom event handler must implement this protocol. -@protocol GADCustomEventBanner - -/// Inform |delegate| with the custom event execution results to ensure mediation behaves correctly. -/// -/// In your class, define the -delegate and -setDelegate: methods or use "@synthesize delegate". The -/// Google Mobile Ads SDK sets this property on instances of your class. -@property(nonatomic, weak, nullable) id delegate; - -/// Called by mediation when your custom event is scheduled to be executed. Report execution results -/// to the delegate. -/// -/// @param adSize The size of the ad as configured in the mediation UI for the mediation placement. -/// @param serverParameter Parameter configured in the mediation UI. -/// @param serverLabel Label configured in the mediation UI. -/// @param request Contains ad request information. -- (void)requestBannerAd:(GADAdSize)adSize - parameter:(nullable NSString *)serverParameter - label:(nullable NSString *)serverLabel - request:(GADCustomEventRequest *)request; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventBannerDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventBannerDelegate.h deleted file mode 100755 index 995e01d4f..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventBannerDelegate.h +++ /dev/null @@ -1,67 +0,0 @@ -// -// GADCustomEventBannerDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2012 Google Inc. All rights reserved. -// - -#import -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol GADCustomEventBanner; - -/// Call back to this delegate in your custom event. You must call customEventBanner:didReceiveAd: -/// when there is an ad to show, or customEventBanner:didFailAd: when there is no ad to show. -/// Otherwise, if enough time passed (several seconds) after the SDK called the requestBannerAd: -/// method of your custom event, the mediation SDK will consider the request timed out, and move on -/// to the next ad network. -@protocol GADCustomEventBannerDelegate - -/// Your Custom Event object must call this when it receives or creates an ad view. -- (void)customEventBanner:(id)customEvent didReceiveAd:(UIView *)view; - -/// Your Custom Event object must call this when it fails to receive or create the ad view. Pass -/// along any error object sent from the ad network's SDK, or an NSError describing the error. Pass -/// nil if not available. -- (void)customEventBanner:(id)customEvent didFailAd:(nullable NSError *)error; - -/// Your Custom Event object should call this when the user touches or "clicks" the ad to initiate -/// an action. When the SDK receives this callback, it reports the click back to the mediation -/// server. -- (void)customEventBannerWasClicked:(id)customEvent; - -/// The rootViewController that you set in GADBannerView. Use this UIViewController to show a modal -/// view when a user taps on the ad. -@property(nonatomic, readonly) UIViewController *viewControllerForPresentingModalView; - -/// When you call the following methods, the call will be propagated back to the -/// GADBannerViewDelegate that you implemented and passed to GADBannerView. - -/// Your Custom Event should call this when the user taps an ad and a modal view appears. -- (void)customEventBannerWillPresentModal:(id)customEvent; - -/// Your Custom Event should call this when the user dismisses the modal view and the modal view is -/// about to go away. -- (void)customEventBannerWillDismissModal:(id)customEvent; - -/// Your Custom Event should call this when the user dismisses the modal view and the modal view has -/// gone away. -- (void)customEventBannerDidDismissModal:(id)customEvent; - -/// Your Custom Event should call this method when a user action will result in App switching. -- (void)customEventBannerWillLeaveApplication:(id)customEvent; - -#pragma mark Deprecated - -/// Deprecated. Use customEventBannerWasClicked:. -- (void)customEventBanner:(id)customEvent - clickDidOccurInAd:(UIView *)view - GAD_DEPRECATED_MSG_ATTRIBUTE("Use customEventBannerWasClicked:."); - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventExtras.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventExtras.h deleted file mode 100755 index 317ab1ad7..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventExtras.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// GADCustomEventExtras.h -// Google Mobile Ads SDK -// -// Copyright 2012 Google Inc. All rights reserved. -// - -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Create an instance of this class to set additional parameters for each custom event object. The -/// additional parameters for a custom event are keyed by the custom event label. These extras are -/// passed to your implementation of GADCustomEventBanner or GADCustomEventInterstitial. -GAD_SUBCLASSING_RESTRICTED -@interface GADCustomEventExtras : NSObject - -/// Set additional parameters for the custom event with label |label|. To remove additional -/// parameters associated with |label|, pass in nil for |extras|. -- (void)setExtras:(nullable NSDictionary *)extras forLabel:(NSString *)label; - -/// Retrieve the extras for |label|. -- (nullable NSDictionary *)extrasForLabel:(NSString *)label; - -/// Removes all the extras set on this instance. -- (void)removeAllExtras; - -/// Returns all the extras set on this instance. -- (NSDictionary *)allExtras; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventInterstitial.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventInterstitial.h deleted file mode 100755 index 274f0b2eb..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventInterstitial.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// GADCustomEventInterstitial.h -// Google Mobile Ads SDK -// -// Copyright 2012 Google Inc. All rights reserved. -// - -#import - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// The interstitial custom event protocol. Your interstitial custom event handler must implement -/// this protocol. -@protocol GADCustomEventInterstitial - -/// Inform |delegate| with the custom event execution results to ensure mediation behaves correctly. -/// -/// In your class, define the -delegate and -setDelegate: methods or use "@synthesize delegate". The -/// Google Mobile Ads SDK sets this property on instances of your class. -@property(nonatomic, weak, nullable) id delegate; - -/// Called by mediation when your custom event is scheduled to be executed. Your implementation -/// should start retrieving the interstitial ad. Report execution results to the delegate. You must -/// wait until -presentFromRootViewController is called before displaying the interstitial ad. -/// -/// @param serverParameter Parameter configured in the mediation UI. -/// @param serverLabel Label configured in the mediation UI. -/// @param request Contains ad request information. -- (void)requestInterstitialAdWithParameter:(nullable NSString *)serverParameter - label:(nullable NSString *)serverLabel - request:(GADCustomEventRequest *)request; - -/// Present the interstitial ad as a modal view using the provided view controller. Called only -/// after your class calls -customEventInterstitialDidReceiveAd: on its custom event delegate. -- (void)presentFromRootViewController:(UIViewController *)rootViewController; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventInterstitialDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventInterstitialDelegate.h deleted file mode 100755 index 9e4ddbed3..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventInterstitialDelegate.h +++ /dev/null @@ -1,62 +0,0 @@ -// -// GADCustomEventInterstitialDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2012 Google Inc. All rights reserved. -// - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol GADCustomEventInterstitial; - -/// Call back to this delegate in your custom event. You must call -/// customEventInterstitialDidReceiveAd: when there is an ad to show, or -/// customEventInterstitial:didFailAd: when there is no ad to show. Otherwise, if enough time passed -/// (several seconds) after the SDK called the requestInterstitialAdWithParameter: method of your -/// custom event, the mediation SDK will consider the request timed out, and move on to the next ad -/// network. -@protocol GADCustomEventInterstitialDelegate - -/// Your Custom Event object must call this when it receives or creates an interstitial ad. -- (void)customEventInterstitialDidReceiveAd:(id)customEvent; - -/// Your Custom Event object must call this when it fails to receive or create the ad. Pass along -/// any error object sent from the ad network's SDK, or an NSError describing the error. Pass nil if -/// not available. -- (void)customEventInterstitial:(id)customEvent - didFailAd:(nullable NSError *)error; - -/// Your Custom Event object should call this when the user touches or "clicks" the ad to initiate -/// an action. When the SDK receives this callback, it reports the click back to the mediation -/// server. -- (void)customEventInterstitialWasClicked:(id)customEvent; - -// When you call any of the following methods, the call will be propagated back to the -// GADInterstitialDelegate that you implemented and passed to GADInterstitial. - -/// Your Custom Event should call this when the interstitial is being displayed. -- (void)customEventInterstitialWillPresent:(id)customEvent; - -/// Your Custom Event should call this when the interstitial is about to be dismissed. -- (void)customEventInterstitialWillDismiss:(id)customEvent; - -/// Your Custom Event should call this when the interstitial has been dismissed. -- (void)customEventInterstitialDidDismiss:(id)customEvent; - -/// Your Custom Event should call this method when a user action will result in app switching. -- (void)customEventInterstitialWillLeaveApplication:(id)customEvent; - -#pragma mark Deprecated - -/// Deprecated. Use customEventInterstitialDidReceiveAd:. -- (void)customEventInterstitial:(id)customEvent - didReceiveAd:(NSObject *)ad - GAD_DEPRECATED_MSG_ATTRIBUTE("Use customEventInterstitialDidReceiveAd:."); - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventNativeAd.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventNativeAd.h deleted file mode 100755 index c9ff01c19..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventNativeAd.h +++ /dev/null @@ -1,58 +0,0 @@ -// -// GADCustomEventNativeAd.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol GADCustomEventNativeAdDelegate; - -/// Native ad custom event protocol. Your native ad custom event handler class must conform to this -/// protocol. -@protocol GADCustomEventNativeAd - -/// Called when the custom event is scheduled to be executed. -/// -/// @param serverParameter A value configured in the mediation UI for the custom event. -/// @param request Ad targeting information. -/// @param adTypes List of requested native ad types. See GADAdLoaderAdTypes.h for available ad -/// types. -/// @param options Additional options configured by the publisher for requesting a native ad. See -/// GADNativeAdImageAdLoaderOptions.h for available image options. -/// @param rootViewController Publisher-provided view controller. -- (void)requestNativeAdWithParameter:(NSString *)serverParameter - request:(GADCustomEventRequest *)request - adTypes:(NSArray *)adTypes - options:(NSArray *)options - rootViewController:(UIViewController *)rootViewController; - -/// Indicates if the custom event handles user clicks. Return YES if the custom event should handle -/// user clicks. In this case, the Google Mobile Ads SDK doesn't track user clicks and the custom -/// event must notify the Google Mobile Ads SDK of clicks using -/// +[GADMediatedNativeAdNotificationSource mediatedNativeAdDidRecordClick:]. Return NO if the -/// custom event doesn't handles user clicks. In this case, the Google Mobile Ads SDK tracks user -/// clicks itself and the custom event is notified of user clicks via -[GADMediatedNativeAdDelegate -/// mediatedNativeAd:didRecordClickOnAssetWithName:view:viewController:]. -- (BOOL)handlesUserClicks; - -/// Indicates if the custom event handles user impressions tracking. If this method returns YES, the -/// Google Mobile Ads SDK will not track user impressions and the custom event must notify the -/// Google Mobile Ads SDK of impressions using +[GADMediatedNativeAdNotificationSource -/// mediatedNativeAdDidRecordImpression:]. If this method returns NO, -/// the Google Mobile Ads SDK tracks user impressions and notifies the custom event of impressions -/// using -[GADMediatedNativeAdDelegate mediatedNativeAdDidRecordImpression:]. -- (BOOL)handlesUserImpressions; - -/// Delegate object used for receiving custom native ad load request progress. -@property(nonatomic, weak, nullable) id delegate; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventNativeAdDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventNativeAdDelegate.h deleted file mode 100755 index fabd3e08f..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventNativeAdDelegate.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// GADCustomEventNativeAdDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import - -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// The delegate of the GADCustomEventNativeAd object must adopt the GADCustomEventNativeAdDelegate -/// protocol. Methods in this protocol are used for native ad's custom event communication with the -/// Google Mobile Ads SDK. -@protocol GADCustomEventNativeAdDelegate - -/// Tells the delegate that the custom event ad request succeeded and loaded a native ad. -- (void)customEventNativeAd:(id)customEventNativeAd - didReceiveMediatedNativeAd:(id)mediatedNativeAd; - -/// Tells the delegate that the custom event ad request failed. -- (void)customEventNativeAd:(id)customEventNativeAd - didFailToLoadWithError:(NSError *)error; - -/// Tells the delegate that the custom event ad request succeeded and loaded a unified native ad. -- (void)customEventNativeAd:(id)customEventNativeAd - didReceiveMediatedUnifiedNativeAd:(id)mediatedUnifiedNativeAd; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventParameters.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventParameters.h deleted file mode 100755 index 5d9a1afee..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventParameters.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// GADCustomEventParameters.h -// Google Mobile Ads SDK -// -// Copyright 2016 Google Inc. All rights reserved. -// - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Key for getting the server parameter configured in AdMob when mediating to a custom event -/// adapter. -/// Example: NSString *serverParameter = connector.credentials[GADCustomEventParametersServer]. -GAD_EXTERN NSString *const GADCustomEventParametersServer; - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventRequest.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventRequest.h deleted file mode 100755 index ce1d1f7f1..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventRequest.h +++ /dev/null @@ -1,62 +0,0 @@ -// -// GADCustomEventRequest.h -// Google Mobile Ads SDK -// -// Copyright 2012 Google Inc. All rights reserved. -// - -#import - -#import -#import - -@class GADCustomEventExtras; - -NS_ASSUME_NONNULL_BEGIN - -/// Specifies optional ad request targeting parameters that are provided by the publisher and are -/// forwarded to custom events for purposes of populating an ad request to a 3rd party ad network. -GAD_SUBCLASSING_RESTRICTED -@interface GADCustomEventRequest : NSObject - -/// If the user's latitude, longitude, and accuracy are not specified, userHasLocation returns NO, -/// and userLatitude, userLongitude, and userLocationAccuracyInMeters return 0. -@property(nonatomic, readonly, assign) BOOL userHasLocation; - -/// User's latitude set in GADRequest. -@property(nonatomic, readonly, assign) CGFloat userLatitude; - -/// User's longitude set in GADRequest. -@property(nonatomic, readonly, assign) CGFloat userLongitude; - -/// The accuracy, in meters, of the user's location data. -@property(nonatomic, readonly, assign) CGFloat userLocationAccuracyInMeters; - -/// Description of the user's location, in free form text, set in GADRequest. If not available, -/// returns nil. This may be set even if userHasLocation is NO. -@property(nonatomic, readonly, copy, nullable) NSString *userLocationDescription; - -/// Keywords set in GADRequest. Returns nil if no keywords are set. -@property(nonatomic, readonly, copy, nullable) NSArray *userKeywords; - -/// The additional parameters set by the application. This property allows you to pass additional -/// information from your application to your Custom Event object. To do so, create an instance of -/// GADCustomEventExtras to pass to GADRequest -registerAdNetworkExtras:. The instance should have -/// an NSDictionary set for a particular custom event label. That NSDictionary becomes the -/// additionalParameters here. -@property(nonatomic, readonly, copy, nullable) NSDictionary *additionalParameters; - -/// Indicates if the testing property has been set in GADRequest. -@property(nonatomic, readonly, assign) BOOL isTesting; - -#pragma mark Deprecated methods - -/// Deprecated. User's gender set in GADRequest. If not specified, returns kGADGenderUnknown. -@property(nonatomic, readonly, assign) GADGender userGender GAD_DEPRECATED_ATTRIBUTE; - -/// Deprecated. User's birthday set in GADRequest. If not specified, returns nil. -@property(nonatomic, readonly, copy, nullable) NSDate *userBirthday GAD_DEPRECATED_ATTRIBUTE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADDebugOptionsViewController.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADDebugOptionsViewController.h deleted file mode 100755 index 4ea6f818c..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADDebugOptionsViewController.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// GADDebugOptionsViewController.h -// Google Mobile Ads SDK -// -// Copyright 2016 Google Inc. All rights reserved. -// - -#import -#import - -#import - -@class GADDebugOptionsViewController; - -NS_ASSUME_NONNULL_BEGIN - -/// Delegate for the GADDebugOptionsViewController. -@protocol GADDebugOptionsViewControllerDelegate - -/// Called when the debug options flow is finished. -- (void)debugOptionsViewControllerDidDismiss:(GADDebugOptionsViewController *)controller; - -@end - -/// Displays debug options to the user. -GAD_SUBCLASSING_RESTRICTED -@interface GADDebugOptionsViewController : UIViewController - -/// Creates and returns a GADDebugOptionsViewController object initialized with the ad unit ID. -/// @param adUnitID An ad unit ID for the Google Ad Manager account that is being configured with -/// debug options. -+ (instancetype)debugOptionsViewControllerWithAdUnitID:(NSString *)adUnitID; - -/// Delegate for the debug options view controller. -@property(nonatomic, weak, nullable) IBOutlet id delegate; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADDynamicHeightSearchRequest.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADDynamicHeightSearchRequest.h deleted file mode 100755 index b21fd198c..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADDynamicHeightSearchRequest.h +++ /dev/null @@ -1,166 +0,0 @@ -// -// GADDynamicHeightSearchRequest.h -// GoogleMobileAds -// -// Copyright © 2016 Google Inc. All rights reserved. -// - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Use to configure Custom Search Ad (CSA) ad requests. A dynamic height search banner can contain -/// multiple ads and the height is set dynamically based on the ad contents. Please cross-reference -/// the property sections and properties with the official reference document: -/// https://developers.google.com/custom-search-ads/docs/reference -GAD_SUBCLASSING_RESTRICTED -@interface GADDynamicHeightSearchRequest : GADRequest - -#pragma mark - Page Level Parameters - -#pragma mark Required - -/// The CSA "query" parameter. -@property(nonatomic, copy, nullable) NSString *query; - -/// The CSA "adPage" parameter. -@property(nonatomic, assign) NSInteger adPage; - -#pragma mark Configuration Settings - -/// Indicates if the CSA "adTest" parameter is enabled. -@property(nonatomic, assign) BOOL adTestEnabled; - -/// The CSA "channel" parameter. -@property(nonatomic, copy, nullable) NSString *channel; - -/// The CSA "hl" parameter. -@property(nonatomic, copy, nullable) NSString *hostLanguage; - -#pragma mark Layout and Styling - -/// The CSA "colorLocation" parameter. -@property(nonatomic, copy, nullable) NSString *locationExtensionTextColor; - -/// The CSA "fontSizeLocation" parameter. -@property(nonatomic, assign) CGFloat locationExtensionFontSize; - -#pragma mark Ad Extensions - -/// Indicates if the CSA "clickToCall" parameter is enabled. -@property(nonatomic, assign) BOOL clickToCallExtensionEnabled; - -/// Indicates if the CSA "location" parameter is enabled. -@property(nonatomic, assign) BOOL locationExtensionEnabled; - -/// Indicates if the CSA "plusOnes" parameter is enabled. -@property(nonatomic, assign) BOOL plusOnesExtensionEnabled; - -/// Indicates if the CSA "sellerRatings" parameter is enabled. -@property(nonatomic, assign) BOOL sellerRatingsExtensionEnabled; - -/// Indicates if the CSA "siteLinks" parameter is enabled. -@property(nonatomic, assign) BOOL siteLinksExtensionEnabled; - -#pragma mark - Unit Level Parameters - -#pragma mark Required - -/// The CSA "width" parameter. -@property(nonatomic, copy, nullable) NSString *CSSWidth; - -/// Configuration Settings - -/// The CSA "number" parameter. -@property(nonatomic, assign) NSInteger numberOfAds; - -#pragma mark Font - -/// The CSA "fontFamily" parameter. -@property(nonatomic, copy, nullable) NSString *fontFamily; - -/// The CSA "fontFamilyAttribution" parameter. -@property(nonatomic, copy, nullable) NSString *attributionFontFamily; - -/// The CSA "fontSizeAnnotation" parameter. -@property(nonatomic, assign) CGFloat annotationFontSize; - -/// The CSA "fontSizeAttribution" parameter. -@property(nonatomic, assign) CGFloat attributionFontSize; - -/// The CSA "fontSizeDescription" parameter. -@property(nonatomic, assign) CGFloat descriptionFontSize; - -/// The CSA "fontSizeDomainLink" parameter. -@property(nonatomic, assign) CGFloat domainLinkFontSize; - -/// The CSA "fontSizeTitle" parameter. -@property(nonatomic, assign) CGFloat titleFontSize; - -#pragma mark Color - -/// The CSA "colorAdBorder" parameter. -@property(nonatomic, copy, nullable) NSString *adBorderColor; - -/// The CSA "colorAdSeparator" parameter. -@property(nonatomic, copy, nullable) NSString *adSeparatorColor; - -/// The CSA "colorAnnotation" parameter. -@property(nonatomic, copy, nullable) NSString *annotationTextColor; - -/// The CSA "colorAttribution" parameter. -@property(nonatomic, copy, nullable) NSString *attributionTextColor; - -/// The CSA "colorBackground" parameter. -@property(nonatomic, copy, nullable) NSString *backgroundColor; - -/// The CSA "colorBorder" parameter. -@property(nonatomic, copy, nullable) NSString *borderColor; - -/// The CSA "colorDomainLink" parameter. -@property(nonatomic, copy, nullable) NSString *domainLinkColor; - -/// The CSA "colorText" parameter. -@property(nonatomic, copy, nullable) NSString *textColor; - -/// The CSA "colorTitleLink" parameter. -@property(nonatomic, copy, nullable) NSString *titleLinkColor; - -#pragma mark General Formatting - -/// The CSA "adBorderSelections" parameter. -@property(nonatomic, copy, nullable) NSString *adBorderCSSSelections; - -/// The CSA "adjustableLineHeight" parameter. -@property(nonatomic, assign) CGFloat adjustableLineHeight; - -/// The CSA "attributionSpacingBelow" parameter. -@property(nonatomic, assign) CGFloat attributionBottomSpacing; - -/// The CSA "borderSelections" parameter. -@property(nonatomic, copy, nullable) NSString *borderCSSSelections; - -/// Indicates if the CSA "noTitleUnderline" parameter is enabled. -@property(nonatomic, assign) BOOL titleUnderlineHidden; - -/// Indicates if the CSA "titleBold" parameter is enabled. -@property(nonatomic, assign) BOOL boldTitleEnabled; - -/// The CSA "verticalSpacing" parameter. -@property(nonatomic, assign) CGFloat verticalSpacing; - -#pragma mark Ad Extensions - -/// Indicates if the CSA "detailedAttribution" parameter is enabled. -@property(nonatomic, assign) BOOL detailedAttributionExtensionEnabled; - -/// Indicates if the CSA "longerHeadlines" parameter is enabled. -@property(nonatomic, assign) BOOL longerHeadlinesExtensionEnabled; - -/// Sets an advanced option value for a specified key. The value must be an NSString or NSNumber. -- (void)setAdvancedOptionValue:(id)value forKey:(NSString *)key; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADExtras.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADExtras.h deleted file mode 100755 index b734f110b..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADExtras.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// GADExtras.h -// Google Mobile Ads SDK -// -// Copyright 2012 Google Inc. All rights reserved. -// - -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Ad network extras sent to Google networks. -GAD_SUBCLASSING_RESTRICTED -@interface GADExtras : NSObject - -/// Additional parameters to be sent to Google networks. -@property(nonatomic, copy, nullable) NSDictionary *additionalParameters; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADInAppPurchase.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADInAppPurchase.h deleted file mode 100755 index f7938e460..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADInAppPurchase.h +++ /dev/null @@ -1,92 +0,0 @@ -// -// GADInAppPurchase.h -// Google Mobile Ads SDK -// -// Copyright 2013 Google Inc. All rights reserved. -// - -#import -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol GADDefaultInAppPurchaseDelegate; - -#pragma mark - Default Purchase Flow - -/// The consumable in-app purchase item that has been purchased by the user. The purchase flow is -/// handled by the Google Mobile Ads SDK. -/// Instances of this class are created and passed to your in-app purchase delegate after the user -/// has successfully paid for a product. Your code must correctly deliver the product to the user -/// and then call the didCompletePurchase method to finish the transaction. - -GAD_DEPRECATED_ATTRIBUTE -GAD_SUBCLASSING_RESTRICTED -@interface GADDefaultInAppPurchase : NSObject - -/// Enables the default consumable product in-app purchase flow handled by the Google Mobile Ads -/// SDK. The GADDefaultInAppPurchaseDelegate object is retained while the default purchase flow is -/// enabled. This method adds a SKPaymentTransactionObserver to the default SKPaymentQueue. -/// -/// Call this method early in your application to handle unfinished transactions from previous -/// application sessions. For example, call this method in your application delegate's -/// application:didFinishLaunchingWithOptions: method. -+ (void)enableDefaultPurchaseFlowWithDelegate:(id)delegate; - -/// Disables the default in-app purchase flow handled by the Google Mobile Ads SDK and releases the -/// associated GADDefaultInAppPurchaseDelegate object. -+ (void)disableDefaultPurchaseFlow; - -/// The in-app purchase product ID. -@property(nonatomic, readonly, copy) NSString *productID; - -/// The product quantity. -@property(nonatomic, readonly, assign) NSInteger quantity; - -/// The purchased item's completed payment transaction. Your application can use this property's -/// data to save a permanent record of the completed payment. The default purchase flow will finish -/// the transaction on your behalf. Do not finish the transaction yourself. -@property(nonatomic, readonly, strong) SKPaymentTransaction *paymentTransaction; - -/// The in-app purchase delegate object must first deliver the user's item and then call this -/// method. Failure to call this method will result in duplicate purchase notifications. -- (void)finishTransaction; - -@end - -#pragma mark - Custom Purchase Flow - -/// Enum of the different statuses resulting from processing a purchase. -GAD_DEPRECATED_ATTRIBUTE -typedef NS_ENUM(NSInteger, GADInAppPurchaseStatus) { - kGADInAppPurchaseStatusError = 0, ///< Error occured while processing the purchase. - kGADInAppPurchaseStatusSuccessful = 1, ///< Purchase was completed successfully. - kGADInAppPurchaseStatusCancel = 2, ///< Purchase was cancelled by the user. - kGADInAppPurchaseStatusInvalidProduct = 3 ///< Error occured while looking up the product. -}; - -/// The in-app purchase item to be purchased with the purchase flow handled by you, the -/// application developer. -/// Instances of this class are created and passed to your GADInAppPurchaseDelegate object when -/// users click a buy button. It is important to report the result of the purchase back to the SDK -/// in order to track metrics about the transaction. -GAD_DEPRECATED_ATTRIBUTE -GAD_SUBCLASSING_RESTRICTED -@interface GADInAppPurchase : NSObject - -/// The in-app purchase product ID. -@property(nonatomic, readonly, copy) NSString *productID; - -/// The product quantity. -@property(nonatomic, readonly, assign) NSInteger quantity; - -/// The GADInAppPurchaseDelegate object must call this method after handling the in-app purchase for -/// both successful and unsuccessful purchase attempts. This method reports ad conversion and -/// purchase status information to Google. -- (void)reportPurchaseStatus:(GADInAppPurchaseStatus)purchaseStatus; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADInAppPurchaseDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADInAppPurchaseDelegate.h deleted file mode 100755 index 18537835c..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADInAppPurchaseDelegate.h +++ /dev/null @@ -1,50 +0,0 @@ -// -// GADInAppPurchaseDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2013 Google Inc. All rights reserved. -// - -#import - -#import - -@class GADDefaultInAppPurchase; -@class GADInAppPurchase; - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - Default Purchase Flow - -/// In-app purchase delegate protocol for default purchase handling. The delegate must deliver -/// the purchased item then call the GADDefaultInAppPurchase object's finishTransaction method. -GAD_DEPRECATED_ATTRIBUTE -@protocol GADDefaultInAppPurchaseDelegate - -/// Called when the user successfully paid for a purchase. You must first deliver the purchased -/// item to the user, then call defaultInAppPurchase's finishTransaction method. -- (void)userDidPayForPurchase:(GADDefaultInAppPurchase *)defaultInAppPurchase; - -@optional - -/// Called when the user clicks on the buy button of an in-app purchase ad. Return YES if the -/// default purchase flow should be started to purchase the item, otherwise return NO. If not -/// implemented, defaults to YES. -- (BOOL)shouldStartPurchaseForProductID:(NSString *)productID quantity:(NSInteger)quantity; - -@end - -#pragma mark - Custom Purchase Flow - -/// In-app purchase delegate protocol for custom purchase handling. The delegate must handle the -/// product purchase flow then call the GADInAppPurchase object's reportPurchaseStatus: method. -GAD_DEPRECATED_ATTRIBUTE -@protocol GADInAppPurchaseDelegate - -/// Called when the user clicks on the buy button of an in-app purchase ad. After the receiver -/// handles the purchase, it must call the GADInAppPurchase object's reportPurchaseStatus: method. -- (void)didReceiveInAppPurchase:(GADInAppPurchase *)purchase; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADInterstitial.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADInterstitial.h deleted file mode 100755 index cf3ffb9ef..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADInterstitial.h +++ /dev/null @@ -1,89 +0,0 @@ -// -// GADInterstitial.h -// Google Mobile Ads SDK -// -// Copyright 2011 Google Inc. All rights reserved. -// - -#import - -#import -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// An interstitial ad. This is a full-screen advertisement shown at natural transition points in -/// your application such as between game levels or news stories. -GAD_SUBCLASSING_RESTRICTED -@interface GADInterstitial : NSObject - -/// Initializes an interstitial with an ad unit created on the AdMob website. Create a new ad unit -/// for every unique placement of an ad in your application. Set this to the ID assigned for this -/// placement. Ad units are important for targeting and statistics. -/// -/// Example AdMob ad unit ID: @"ca-app-pub-0123456789012345/0123456789" -- (instancetype)initWithAdUnitID:(NSString *)adUnitID NS_DESIGNATED_INITIALIZER; - -#pragma mark Pre-Request - -/// Required value passed in with initWithAdUnitID:. -@property(nonatomic, readonly, copy, nullable) NSString *adUnitID; - -/// Optional delegate object that receives state change notifications from this GADInterstitalAd. -@property(nonatomic, weak, nullable) id delegate; - -#pragma mark Making an Ad Request - -/// Makes an interstitial ad request. Additional targeting options can be supplied with a request -/// object. Only one interstitial request is allowed at a time. -/// -/// This is best to do several seconds before the interstitial is needed to preload its content. -/// Then when transitioning between view controllers show the interstital with -/// presentFromViewController. -- (void)loadRequest:(nullable GADRequest *)request; - -#pragma mark Post-Request - -/// Returns YES if the interstitial is ready to be displayed. The delegate's -/// interstitialAdDidReceiveAd: will be called after this property switches from NO to YES. -@property(nonatomic, readonly, assign) BOOL isReady; - -/// Returns YES if this object has already been presented. Interstitial objects can only be used -/// once even with different requests. -@property(nonatomic, readonly, assign) BOOL hasBeenUsed; - -/// Returns the ad network class name that fetched the current ad. Returns nil while the latest ad -/// request is in progress or if the latest ad request failed. For both standard and mediated Google -/// AdMob ads, this property returns @"GADMAdapterGoogleAdMobAds". For ads fetched via mediation -/// custom events, this property returns @"GADMAdapterCustomEvents". -@property(nonatomic, readonly, copy, nullable) NSString *adNetworkClassName; - -/// Presents the interstitial ad which takes over the entire screen until the user dismisses it. -/// This has no effect unless isReady returns YES and/or the delegate's interstitialDidReceiveAd: -/// has been received. -/// -/// Set rootViewController to the current view controller at the time this method is called. If your -/// application does not use view controllers pass in nil and your views will be removed from the -/// window to show the interstitial and restored when done. After the interstitial has been removed, -/// the delegate's interstitialDidDismissScreen: will be called. -- (void)presentFromRootViewController:(UIViewController *)rootViewController; - -#pragma mark Deprecated - -/// Deprecated delegate. GADInAppPurchase has been deprecated. -@property(nonatomic, weak, nullable) - id inAppPurchaseDelegate GAD_DEPRECATED_ATTRIBUTE; - -/// Deprecated intializer. Use initWithAdUnitID: instead. -- (instancetype)init GAD_DEPRECATED_MSG_ATTRIBUTE("Use initWithAdUnitID:."); - -/// Deprecated setter, use initWithAdUnitID: instead. -- (void)setAdUnitID:(nullable NSString *)adUnitID - GAD_DEPRECATED_MSG_ATTRIBUTE("Use initWithAdUnitID: instead of setting the ad unit ID."); - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADInterstitialDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADInterstitialDelegate.h deleted file mode 100755 index ad2db3df2..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADInterstitialDelegate.h +++ /dev/null @@ -1,58 +0,0 @@ -// -// GADInterstitialDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2011 Google Inc. All rights reserved. -// - -#import - -#import -#import - -@class GADInterstitial; - -NS_ASSUME_NONNULL_BEGIN - -/// Delegate for receiving state change messages from a GADInterstitial such as interstitial ad -/// requests succeeding/failing. -@protocol GADInterstitialDelegate - -@optional - -#pragma mark Ad Request Lifecycle Notifications - -/// Called when an interstitial ad request succeeded. Show it at the next transition point in your -/// application such as when transitioning between view controllers. -- (void)interstitialDidReceiveAd:(GADInterstitial *)ad; - -/// Called when an interstitial ad request completed without an interstitial to -/// show. This is common since interstitials are shown sparingly to users. -- (void)interstitial:(GADInterstitial *)ad didFailToReceiveAdWithError:(GADRequestError *)error; - -#pragma mark Display-Time Lifecycle Notifications - -/// Called just before presenting an interstitial. After this method finishes the interstitial will -/// animate onto the screen. Use this opportunity to stop animations and save the state of your -/// application in case the user leaves while the interstitial is on screen (e.g. to visit the App -/// Store from a link on the interstitial). -- (void)interstitialWillPresentScreen:(GADInterstitial *)ad; - -/// Called when |ad| fails to present. -- (void)interstitialDidFailToPresentScreen:(GADInterstitial *)ad; - -/// Called before the interstitial is to be animated off the screen. -- (void)interstitialWillDismissScreen:(GADInterstitial *)ad; - -/// Called just after dismissing an interstitial and it has animated off the screen. -- (void)interstitialDidDismissScreen:(GADInterstitial *)ad; - -/// Called just before the application will background or terminate because the user clicked on an -/// ad that will launch another application (such as the App Store). The normal -/// UIApplicationDelegate methods, like applicationDidEnterBackground:, will be called immediately -/// before this. -- (void)interstitialWillLeaveApplication:(GADInterstitial *)ad; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADMediaView.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADMediaView.h deleted file mode 100755 index 9990c7c3e..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADMediaView.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// GADMediaView.h -// Google Mobile Ads SDK -// -// Copyright 2016 Google Inc. All rights reserved. -// - -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Displays native ad media assets. -/// -/// To display media assets in GADNativeAppInstallAdView instances, add a GADMediaView subview and -/// assign the native ad view's mediaView property. -/// -/// If the native ad doesn't contain a video and image loading is enabled, the GADMediaView displays -/// the native ad's |images| asset's first image. -/// -/// If the native ad doesn't contain a video and image loading is disabled, the GADMediaView object -/// is empty. -GAD_SUBCLASSING_RESTRICTED -@interface GADMediaView : UIView - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADMobileAds.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADMobileAds.h deleted file mode 100755 index f1d8fcc1e..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADMobileAds.h +++ /dev/null @@ -1,64 +0,0 @@ -// -// GADMobileAds.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Google Mobile Ads SDK settings. -GAD_SUBCLASSING_RESTRICTED -@interface GADMobileAds : NSObject - -/// Returns the shared GADMobileAds instance. -+ (GADMobileAds *)sharedInstance; - -/// Configures the SDK using the settings associated with the given application ID. -+ (void)configureWithApplicationID:(NSString *)applicationID; - -/// Disables automated in app purchase (IAP) reporting. Must be called before any IAP transaction is -/// initiated. IAP reporting is used to track IAP ad conversions. Do not disable reporting if you -/// use IAP ads. -+ (void)disableAutomatedInAppPurchaseReporting; - -/// Disables automated SDK crash reporting. If not called, the SDK records the original exception -/// handler if available and registers a new exception handler. The new exception handler only -/// reports SDK related exceptions and calls the recorded original exception handler. -+ (void)disableSDKCrashReporting; - -/// The application's audio volume. Affects audio volumes of all ads relative to other audio output. -/// Valid ad volume values range from 0.0 (silent) to 1.0 (current device volume). Use this method -/// only if your application has its own volume controls (e.g., custom music or sound effect -/// volumes). Defaults to 1.0. -@property(nonatomic, assign) float applicationVolume; - -/// Indicates if the application's audio is muted. Affects initial mute state for all ads. Use this -/// method only if your application has its own volume controls (e.g., custom music or sound effect -/// muting). Defaults to NO. -@property(nonatomic, assign) BOOL applicationMuted; - -/// Manages the Google Mobile Ads SDK's audio and video settings. -@property(nonatomic, readonly, strong) GADAudioVideoManager *audioVideoManager; - -/// Request configuration common to all ad requests. -@property(nonatomic, readonly, strong) GADRequestConfiguration *requestConfiguration; - -/// Returns YES if the current SDK version is at least |major|.|minor|.|patch|. This method can be -/// used by libraries that depend on a specific minimum version of the Google Mobile Ads SDK to warn -/// developers if they have an incompatible version. -/// -/// Available in Google Mobile Ads SDK 7.10 and onwards. Before calling this method check if the -/// GADMobileAds's shared instance responds to this method. Calling this method on a Google Mobile -/// Ads SDK lower than 7.10 can crash the app. -- (BOOL)isSDKVersionAtLeastMajor:(NSInteger)major minor:(NSInteger)minor patch:(NSInteger)patch; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADMultipleAdsAdLoaderOptions.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADMultipleAdsAdLoaderOptions.h deleted file mode 100755 index a7fc0f226..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADMultipleAdsAdLoaderOptions.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// GADMultipleAdsAdLoaderOptions.h -// Google Mobile Ads SDK -// -// Copyright 2017 Google Inc. All rights reserved. -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Ad loader options for requesting multiple ads. Requesting multiple ads in a single request is -/// currently only available for native app install ads and native content ads. -GAD_SUBCLASSING_RESTRICTED -@interface GADMultipleAdsAdLoaderOptions : GADAdLoaderOptions - -/// Number of ads the GADAdLoader should attempt to return for the request. By default, numberOfAds -/// is one. Requests are invalid and will fail if numberOfAds is less than one. If numberOfAds -/// exceeds the maximum limit (5), only the maximum number of ads are requested. -/// -/// The ad loader makes at least one and up to numberOfAds calls to the "ad received" and -/// -didFailToReceiveAdWithError: methods found in GADAdLoaderDelegate and its extensions, followed -/// by a single call to -adLoaderDidFinishLoading: once loading is finished. -@property(nonatomic) NSInteger numberOfAds; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADMuteThisAdReason.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADMuteThisAdReason.h deleted file mode 100755 index 1b195feb6..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADMuteThisAdReason.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// GADMuteThisAdReason.h -// Google Mobile Ads SDK -// -// Copyright 2018 Google Inc. All rights reserved. -// - -#import - -GAD_SUBCLASSING_RESTRICTED -@interface GADMuteThisAdReason : NSObject - -/// Text that describes the reason for muting this ad. For example "Ad Covered Content". -@property(nonatomic, readonly, nonnull) NSString *reasonDescription; - -@end diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAd.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAd.h deleted file mode 100755 index 77132271d..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAd.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// GADNativeAd.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol GADNativeAdDelegate; - -/// Native ad base class. All native ad types are subclasses of this class. -@interface GADNativeAd : NSObject - -/// Optional delegate to receive state change notifications. -@property(nonatomic, weak, nullable) id delegate; - -/// Root view controller for handling ad actions. -@property(nonatomic, weak, nullable) UIViewController *rootViewController; - -/// Dictionary of assets which aren't processed by the receiver. -@property(nonatomic, readonly, copy, nullable) NSDictionary *extraAssets; - -/// The ad network class name that fetched the current ad. For both standard and mediated Google -/// AdMob ads, this method returns @"GADMAdapterGoogleAdMobAds". For ads fetched via mediation -/// custom events, this method returns @"GADMAdapterCustomEvents". -@property(nonatomic, readonly, copy, nullable) NSString *adNetworkClassName; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdDelegate.h deleted file mode 100755 index ce4f7481e..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdDelegate.h +++ /dev/null @@ -1,57 +0,0 @@ -// -// GADNativeAdDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import - -#import - -@class GADNativeAd; - -NS_ASSUME_NONNULL_BEGIN - -/// Identifies native ad assets. -@protocol GADNativeAdDelegate - -@optional - -#pragma mark Ad Lifecycle Events - -/// Called when an impression is recorded for an ad. Only called for Google ads and is not supported -/// for mediation ads. -- (void)nativeAdDidRecordImpression:(GADNativeAd *)nativeAd; - -/// Called when a click is recorded for an ad. Only called for Google ads and is not supported for -/// mediation ads. -- (void)nativeAdDidRecordClick:(GADNativeAd *)nativeAd; - -#pragma mark Click-Time Lifecycle Notifications - -/// Called just before presenting the user a full screen view, such as a browser, in response to -/// clicking on an ad. Use this opportunity to stop animations, time sensitive interactions, etc. -/// -/// Normally the user looks at the ad, dismisses it, and control returns to your application with -/// the nativeAdDidDismissScreen: message. However, if the user hits the Home button or clicks on an -/// App Store link, your application will end. The next method called will be the -/// applicationWillResignActive: of your UIApplicationDelegate object.Immediately after that, -/// nativeAdWillLeaveApplication: is called. -- (void)nativeAdWillPresentScreen:(GADNativeAd *)nativeAd; - -/// Called just before dismissing a full screen view. -- (void)nativeAdWillDismissScreen:(GADNativeAd *)nativeAd; - -/// Called just after dismissing a full screen view. Use this opportunity to restart anything you -/// may have stopped as part of nativeAdWillPresentScreen:. -- (void)nativeAdDidDismissScreen:(GADNativeAd *)nativeAd; - -/// Called just before the application will go to the background or terminate due to an ad action -/// that will launch another application (such as the App Store). The normal UIApplicationDelegate -/// methods, like applicationDidEnterBackground:, will be called immediately before this. -- (void)nativeAdWillLeaveApplication:(GADNativeAd *)nativeAd; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdImage+Mediation.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdImage+Mediation.h deleted file mode 100755 index 469f72cdd..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdImage+Mediation.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// GADNativeAdImage+Mediation.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google. All rights reserved. -// - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Provides additional GADNativeAdImage initializers. -@interface GADNativeAdImage (MediationAdditions) - -/// Initializes and returns a native ad image object with the provided image. -- (instancetype)initWithImage:(UIImage *)image; - -/// Initializes and returns a native ad image object with the provided image URL and image scale. -- (instancetype)initWithURL:(NSURL *)URL scale:(CGFloat)scale; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdImage.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdImage.h deleted file mode 100755 index 998ec0e69..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdImage.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// GADNativeAdImage.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Native ad image. -GAD_SUBCLASSING_RESTRICTED -@interface GADNativeAdImage : NSObject - -/// The image. If image autoloading is disabled, this property will be nil. -@property(nonatomic, readonly, strong, nullable) UIImage *image; - -/// The image's URL. -@property(nonatomic, readonly, copy) NSURL *imageURL; - -/// The image's scale. -@property(nonatomic, readonly, assign) CGFloat scale; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdImageAdLoaderOptions.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdImageAdLoaderOptions.h deleted file mode 100755 index 398e56fda..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdImageAdLoaderOptions.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// GADNativeAdImageAdLoaderOptions.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Native ad image orientation preference. -typedef NS_ENUM(NSInteger, GADNativeAdImageAdLoaderOptionsOrientation) { - GADNativeAdImageAdLoaderOptionsOrientationAny = 1, ///< No orientation preference. - GADNativeAdImageAdLoaderOptionsOrientationPortrait = 2, ///< Prefer portrait images. - GADNativeAdImageAdLoaderOptionsOrientationLandscape = 3 ///< Prefer landscape images. -}; - -/// Ad loader options for native ad image settings. -GAD_SUBCLASSING_RESTRICTED -@interface GADNativeAdImageAdLoaderOptions : GADAdLoaderOptions - -/// Indicates if image asset content should be loaded by the SDK. If set to YES, the SDK will not -/// load image asset content and native ad image URLs can be used to fetch content. Defaults to NO, -/// image assets are loaded by the SDK. -@property(nonatomic, assign) BOOL disableImageLoading; - -/// Indicates if multiple images should be loaded for each asset. Defaults to NO. -@property(nonatomic, assign) BOOL shouldRequestMultipleImages; - -/// Indicates preferred image orientation. Defaults to -/// GADNativeAdImageAdLoaderOptionsOrientationAny. -@property(nonatomic, assign) GADNativeAdImageAdLoaderOptionsOrientation preferredImageOrientation; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdViewAdOptions.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdViewAdOptions.h deleted file mode 100755 index 8d5114282..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdViewAdOptions.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// GADNativeAdViewAdOptions.h -// Google Mobile Ads SDK -// -// Copyright 2016 Google Inc. All rights reserved. -// - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Position of the AdChoices icon in the containing ad. -typedef NS_ENUM(NSInteger, GADAdChoicesPosition) { - GADAdChoicesPositionTopRightCorner, ///< Top right corner. - GADAdChoicesPositionTopLeftCorner, ///< Top left corner. - GADAdChoicesPositionBottomRightCorner, ///< Bottom right corner. - GADAdChoicesPositionBottomLeftCorner ///< Bottom Left Corner. -}; - -/// Ad loader options for configuring the view of native ads. -GAD_SUBCLASSING_RESTRICTED -@interface GADNativeAdViewAdOptions : GADAdLoaderOptions - -/// Indicates preferred location of AdChoices icon. Default is GADAdChoicesPositionTopRightCorner. -@property(nonatomic, assign) GADAdChoicesPosition preferredAdChoicesPosition; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAppInstallAd.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAppInstallAd.h deleted file mode 100755 index e49819595..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAppInstallAd.h +++ /dev/null @@ -1,121 +0,0 @@ -// -// GADNativeAppInstallAd.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import -#import - -#import -#import -#import -#import -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Native app install ad. To request this ad type, you need to pass -/// kGADAdLoaderAdTypeNativeAppInstall (see GADAdLoaderAdTypes.h) to the |adTypes| parameter in -/// GADAdLoader's initializer method. If you request this ad type, your delegate must conform to the -/// GADNativeAppInstallAdLoaderDelegate protocol. -GAD_DEPRECATED_MSG_ATTRIBUTE("Use GADUnifiedNativeAd instead.") -GAD_SUBCLASSING_RESTRICTED -@interface GADNativeAppInstallAd : GADNativeAd - -#pragma mark - Must be displayed - -/// App title. -@property(nonatomic, readonly, copy, nullable) NSString *headline; -/// Text that encourages user to take some action with the ad. For example "Install". -@property(nonatomic, readonly, copy, nullable) NSString *callToAction; -/// Application icon. -@property(nonatomic, readonly, strong, nullable) GADNativeAdImage *icon; - -#pragma mark - Recommended to display - -/// App description. -@property(nonatomic, readonly, copy, nullable) NSString *body; -/// The app store name. For example, "App Store". -@property(nonatomic, readonly, copy, nullable) NSString *store; -/// String representation of the app's price. -@property(nonatomic, readonly, copy, nullable) NSString *price; -/// Array of GADNativeAdImage objects related to the advertised application. -@property(nonatomic, readonly, strong, nullable) NSArray *images; -/// App store rating (0 to 5). -@property(nonatomic, readonly, copy, nullable) NSDecimalNumber *starRating; -/// Video controller for controlling video playback in GADNativeAppInstallAdView's mediaView. -@property(nonatomic, strong, readonly) GADVideoController *videoController; - -/// Registers ad view and asset views with this native ad. -/// @param assetViews Dictionary of asset views keyed by asset IDs. -- (void)registerAdView:(UIView *)adView - assetViews:(NSDictionary *)assetViews - GAD_DEPRECATED_MSG_ATTRIBUTE("Use -registerAdView:clickableAssetViews:nonclickableAssetViews:"); - -/// Registers ad view, clickable asset views, and nonclickable asset views with this native ad. -/// Media view shouldn't be registered as clickable. -/// @param clickableAssetViews Dictionary of asset views that are clickable, keyed by asset IDs. -/// @param nonclickableAssetViews Dictionary of asset views that are not clickable, keyed by asset -/// IDs. -- (void)registerAdView:(UIView *)adView - clickableAssetViews:(NSDictionary *)clickableAssetViews - nonclickableAssetViews: - (NSDictionary *)nonclickableAssetViews; - -/// Unregisters ad view from this native ad. The corresponding asset views will also be -/// unregistered. -- (void)unregisterAdView; - -@end - -#pragma mark - Protocol and constants - -/// The delegate of a GADAdLoader object implements this protocol to receive GADNativeAppInstallAd -/// ads. -GAD_DEPRECATED_MSG_ATTRIBUTE("Use GADUnifiedNativeAdLoaderDelegate instead.") -@protocol GADNativeAppInstallAdLoaderDelegate -/// Called when a native app install ad is received. -- (void)adLoader:(GADAdLoader *)adLoader - didReceiveNativeAppInstallAd:(GADNativeAppInstallAd *)nativeAppInstallAd; -@end - -#pragma mark - Native App Install Ad View - -/// Base class for app install ad views. Your app install ad view must be a subclass of this class -/// and must call superclass methods for all overriden methods. -GAD_DEPRECATED_MSG_ATTRIBUTE("Use GADUnifiedNativeAdView instead.") -@interface GADNativeAppInstallAdView : UIView - -/// This property must point to the native app install ad object rendered by this ad view. -@property(nonatomic, strong, nullable) GADNativeAppInstallAd *nativeAppInstallAd; -/// Weak reference to your ad view's headline asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *headlineView; -/// Weak reference to your ad view's call to action asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *callToActionView; -/// Weak reference to your ad view's icon asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *iconView; -/// Weak reference to your ad view's body asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *bodyView; -/// Weak reference to your ad view's store asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *storeView; -/// Weak reference to your ad view's price asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *priceView; -/// Weak reference to your ad view's image asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *imageView; -/// Weak reference to your ad view's star rating asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *starRatingView; -/// Weak reference to your ad view's media asset view. -@property(nonatomic, weak, nullable) IBOutlet GADMediaView *mediaView; -/// Weak reference to your ad view's AdChoices view. Must set adChoicesView before setting -/// nativeAppInstallAd, otherwise AdChoices will be rendered in the publisher's -/// preferredAdChoicesPosition as defined in GADNativeAdViewAdOptions. -@property(nonatomic, weak, nullable) IBOutlet GADAdChoicesView *adChoicesView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAppInstallAdAssetIDs.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAppInstallAdAssetIDs.h deleted file mode 100755 index 8e8ce411a..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAppInstallAdAssetIDs.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// GADNativeAppInstallAdAssetIDs.h -// Google Mobile Ads SDK -// -// Copyright 2017 Google Inc. All rights reserved. -// - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NSString *GADNativeAppInstallAssetID GAD_STRING_ENUM; - -GAD_EXTERN GADNativeAppInstallAssetID const GADNativeAppInstallHeadlineAsset - GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeAppInstallAssetID const GADNativeAppInstallCallToActionAsset - GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeAppInstallAssetID const GADNativeAppInstallIconAsset GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeAppInstallAssetID const GADNativeAppInstallBodyAsset GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeAppInstallAssetID const GADNativeAppInstallStoreAsset GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeAppInstallAssetID const GADNativeAppInstallPriceAsset GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeAppInstallAssetID const GADNativeAppInstallImageAsset GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeAppInstallAssetID const GADNativeAppInstallStarRatingAsset - GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeAppInstallAssetID const GADNativeAppInstallAttributionIconAsset - GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeAppInstallAssetID const GADNativeAppInstallAttributionTextAsset - GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeAppInstallAssetID const GADNativeAppInstallMediaViewAsset - GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeAppInstallAssetID const GADNativeAppInstallAdChoicesViewAsset - GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeAppInstallAssetID const GADNativeAppInstallBackgroundAsset - GAD_DEPRECATED_ATTRIBUTE; - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeContentAd.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeContentAd.h deleted file mode 100755 index 2187d3a0c..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeContentAd.h +++ /dev/null @@ -1,114 +0,0 @@ -// -// GADNativeContentAd.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import -#import - -#import -#import -#import -#import -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -#pragma mark - Native Content Ad Assets - -/// Native content ad. To request this ad type, you need to pass kGADAdLoaderAdTypeNativeContent -/// (see GADAdLoaderAdTypes.h) to the |adTypes| parameter in GADAdLoader's initializer method. If -/// you request this ad type, your delegate must conform to the GADNativeContentAdLoaderDelegate -/// protocol. -GAD_DEPRECATED_MSG_ATTRIBUTE("Use GADUnifiedNativeAd instead.") -GAD_SUBCLASSING_RESTRICTED -@interface GADNativeContentAd : GADNativeAd - -#pragma mark - Must be displayed - -/// Primary text headline. -@property(nonatomic, readonly, copy, nullable) NSString *headline; -/// Secondary text. -@property(nonatomic, readonly, copy, nullable) NSString *body; - -#pragma mark - Recommended to display - -/// Large images. -@property(nonatomic, readonly, copy, nullable) NSArray *images; -/// Small logo image. -@property(nonatomic, readonly, strong, nullable) GADNativeAdImage *logo; -/// Text that encourages user to take some action with the ad. -@property(nonatomic, readonly, copy, nullable) NSString *callToAction; -/// Identifies the advertiser. For example, the advertiser’s name or visible URL. -@property(nonatomic, readonly, copy, nullable) NSString *advertiser; -/// Video controller for controlling video playback in GADNativeContentAdView's mediaView. -@property(nonatomic, strong, readonly) GADVideoController *videoController; - -/// Registers ad view and asset views created with this native ad. -/// @param assetViews Dictionary of asset views keyed by asset IDs. -- (void)registerAdView:(UIView *)adView - assetViews:(NSDictionary *)assetViews - GAD_DEPRECATED_MSG_ATTRIBUTE("Use -registerAdView:clickableAssetViews:nonclickableAssetViews:"); - -/// Registers ad view, clickable asset views, and nonclickable asset views with this native ad. -/// Media view shouldn't be registered as clickable. -/// @param clickableAssetViews Dictionary of asset views that are clickable, keyed by asset IDs. -/// @param nonclickableAssetViews Dictionary of asset views that are not clickable, keyed by asset -/// IDs. -- (void)registerAdView:(UIView *)adView - clickableAssetViews:(NSDictionary *)clickableAssetViews - nonclickableAssetViews: - (NSDictionary *)nonclickableAssetViews; - -/// Unregisters ad view from this native ad. The corresponding asset views will also be -/// unregistered. -- (void)unregisterAdView; - -@end - -#pragma mark - Protocol and constants - -/// The delegate of a GADAdLoader object implements this protocol to receive GADNativeContentAd ads. -GAD_DEPRECATED_MSG_ATTRIBUTE("Use GADUnifiedNativeAdLoaderDelegate instead.") -@protocol GADNativeContentAdLoaderDelegate -/// Called when native content is received. -- (void)adLoader:(GADAdLoader *)adLoader - didReceiveNativeContentAd:(GADNativeContentAd *)nativeContentAd; -@end - -#pragma mark - Native Content Ad View - -/// Base class for content ad views. Your content ad view must be a subclass of this class and must -/// call superclass methods for all overriden methods. -GAD_DEPRECATED_MSG_ATTRIBUTE("Use GADUnifiedNativeAdView instead.") -@interface GADNativeContentAdView : UIView - -/// This property must point to the native content ad object rendered by this ad view. -@property(nonatomic, strong, nullable) GADNativeContentAd *nativeContentAd; -/// Weak reference to your ad view's headline asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *headlineView; -/// Weak reference to your ad view's body asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *bodyView; -/// Weak reference to your ad view's image asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *imageView; -/// Weak reference to your ad view's logo asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *logoView; -/// Weak reference to your ad view's call to action asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *callToActionView; -/// Weak reference to your ad view's advertiser asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *advertiserView; -/// Weak reference to your ad view's media asset view. -@property(nonatomic, weak, nullable) IBOutlet GADMediaView *mediaView; -/// Weak reference to your ad view's AdChoices view. Must set adChoicesView before setting -/// nativeContentAd, otherwise AdChoices will be rendered in the publisher's -/// preferredAdChoicesPosition as defined in GADNativeAdViewAdOptions. -@property(nonatomic, weak, nullable) IBOutlet GADAdChoicesView *adChoicesView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeContentAdAssetIDs.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeContentAdAssetIDs.h deleted file mode 100755 index a67586d7d..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeContentAdAssetIDs.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// GADNativeContentAdAssetIDs.h -// Google Mobile Ads SDK -// -// Copyright 2017 Google Inc. All rights reserved. -// - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NSString *GADNativeContentAdAssetID GAD_STRING_ENUM; - -GAD_EXTERN GADNativeContentAdAssetID const GADNativeContentHeadlineAsset GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeContentAdAssetID const GADNativeContentBodyAsset GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeContentAdAssetID const GADNativeContentCallToActionAsset - GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeContentAdAssetID const GADNativeContentAdvertiserAsset GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeContentAdAssetID const GADNativeContentImageAsset GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeContentAdAssetID const GADNativeContentLogoAsset GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeContentAdAssetID const GADNativeContentAttributionIconAsset - GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeContentAdAssetID const GADNativeContentAttributionTextAsset - GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeContentAdAssetID const GADNativeContentMediaViewAsset GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeContentAdAssetID const GADNativeContentAdChoicesViewAsset - GAD_DEPRECATED_ATTRIBUTE; -GAD_EXTERN GADNativeContentAdAssetID const GADNativeContentBackgroundAsset GAD_DEPRECATED_ATTRIBUTE; - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeCustomTemplateAd.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeCustomTemplateAd.h deleted file mode 100755 index 6c1b2be5f..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeCustomTemplateAd.h +++ /dev/null @@ -1,95 +0,0 @@ -// -// GADNativeCustomTemplateAd.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import -#import - -#import -#import -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Native ad custom click handler block. |assetID| is the ID of asset that has received a click. -typedef void (^GADNativeAdCustomClickHandler)(NSString *assetID); - -/// Asset key for the GADMediaView asset view. -GAD_EXTERN NSString *const GADNativeCustomTemplateAdMediaViewKey; - -/// Native custom template ad. To request this ad type, you need to pass -/// kGADAdLoaderAdTypeNativeCustomTemplate (see GADAdLoaderAdTypes.h) to the |adTypes| parameter in -/// GADAdLoader's initializer method. If you request this ad type, your delegate must conform to the -/// GADNativeCustomTemplateAdLoaderDelegate protocol. -GAD_SUBCLASSING_RESTRICTED -@interface GADNativeCustomTemplateAd : GADNativeAd - -/// The ad's custom template ID. -@property(nonatomic, readonly) NSString *templateID; - -/// Array of available asset keys. -@property(nonatomic, readonly) NSArray *availableAssetKeys; - -/// Returns video controller for controlling receiver's video. -@property(nonatomic, readonly, strong) GADVideoController *videoController; - -/// Returns media view for rendering video loaded by the receiver. Returns nil if receiver doesn't -/// has a video. -@property(nonatomic, readonly, strong, nullable) GADMediaView *mediaView; - -/// Custom click handler. Set this property only if this template ad is configured with a custom -/// click action, otherwise set it to nil. If this property is set to a non-nil value, the ad's -/// built-in click actions are ignored and |customClickHandler| is executed when a click on the -/// asset is received. -@property(atomic, copy, nullable) GADNativeAdCustomClickHandler customClickHandler; - -/// Returns the native ad image corresponding to the specified key or nil if the image is not -/// available. -- (nullable GADNativeAdImage *)imageForKey:(NSString *)key; - -/// Returns the string corresponding to the specified key or nil if the string is not available. -- (nullable NSString *)stringForKey:(NSString *)key; - -/// Call when the user clicks on the ad. Provide the asset key that best matches the asset the user -/// interacted with. If this ad is configured with a custom click action, ensure the receiver's -/// customClickHandler property is set before calling this method. -- (void)performClickOnAssetWithKey:(NSString *)assetKey; - -/// Call when the ad is displayed on screen to the user. Can be called multiple times. Only the -/// first impression is recorded. -- (void)recordImpression; - -/// Call when the user clicks on the ad. Provide the asset key that best matches the asset the user -/// interacted with. Provide |customClickHandler| only if this template is configured with a custom -/// click action, otherwise pass in nil. If a block is provided, the ad's built-in click actions are -/// ignored and |customClickHandler| is executed after recording the click. -/// -/// This method is deprecated. See performClickOnAssetWithKey: API. -- (void)performClickOnAssetWithKey:(NSString *)assetKey - customClickHandler:(nullable dispatch_block_t)customClickHandler - GAD_DEPRECATED_MSG_ATTRIBUTE("Use performClickOnAssetWithKey:."); - -@end - -#pragma mark - Loading Protocol - -/// The delegate of a GADAdLoader object implements this protocol to receive -/// GADNativeCustomTemplateAd ads. -@protocol GADNativeCustomTemplateAdLoaderDelegate - -/// Called when requesting an ad. Asks the delegate for an array of custom template ID strings. -- (NSArray *)nativeCustomTemplateIDsForAdLoader:(GADAdLoader *)adLoader; - -/// Tells the delegate that a native custom template ad was received. -- (void)adLoader:(GADAdLoader *)adLoader - didReceiveNativeCustomTemplateAd:(GADNativeCustomTemplateAd *)nativeCustomTemplateAd; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeExpressAdView.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeExpressAdView.h deleted file mode 100755 index f41ee13db..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeExpressAdView.h +++ /dev/null @@ -1,98 +0,0 @@ -// -// GADNativeExpressAdView.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import - -#import -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// The view that displays native ads. A minimum implementation to get an ad from within a -/// UIViewController class is: -/// -///
-///   // Create and setup the ad view, specifying the size and origin at {0, 0}.
-///   GADNativeExpressAdView *adView =
-///       [[GADNativeExpressAdView alloc] initWithAdSize:kGADAdSizeBanner];
-///   adView.rootViewController = self;
-///   adView.adUnitID = @"ID created when registering your app";
-///   // Place the ad view onto the screen.
-///   [self.view addSubview:adView];
-///   // Request an ad without any additional targeting information.
-///   [adView loadRequest:[GADRequest request]];
-///   
-GAD_DEPRECATED_ATTRIBUTE -GAD_SUBCLASSING_RESTRICTED -@interface GADNativeExpressAdView : UIView - -#pragma mark - Initialization - -/// Returns an initialized GADNativeExpressAdView instance set to |adSize| and positioned at -/// |origin| relative to its superview bounds. Returns nil if |adSize| is an invalid ad size. -- (nullable instancetype)initWithAdSize:(GADAdSize)adSize origin:(CGPoint)origin; - -/// Returns an initialized GADNativeExpressAdView instance set to |adSize| and positioned at the top -/// left of its superview. Returns nil if |adSize| is an invalid ad size. -- (nullable instancetype)initWithAdSize:(GADAdSize)adSize; - -/// Video controller for controlling video rendered by this native express ad view. -@property(nonatomic, strong, readonly) GADVideoController *videoController; - -#pragma mark - Pre-Request - -/// Required value created on the AdMob website. Create a new ad unit for every unique placement of -/// an ad in your application. Set this to the ID assigned for this placement. Ad units are -/// important for targeting and statistics. -/// -/// Example AdMob ad unit ID: @"ca-app-pub-0123456789012345/0123456789" -@property(nonatomic, copy, nullable) IBInspectable NSString *adUnitID; - -/// Required reference to the current root view controller. For example, the root view controller in -/// a tab-based application would be the UITabViewController. -@property(nonatomic, weak, nullable) IBOutlet UIViewController *rootViewController; - -/// Required to set this native ad view to a proper size. Never create your own GADAdSize directly. -/// Use one of the predefined standard ad sizes (such as kGADAdSizeBanner), or create one using the -/// GADAdSizeFromCGSize method. If you are not using mediation, changing the adSize after an ad has -/// been shown will cause a new request (for an ad of the new size) to be sent. If you are using -/// mediation, then a new request may not be sent. -@property(nonatomic, assign) GADAdSize adSize; - -/// Optional delegate object that receives state change notifications from this -/// GADNativeExpressAdView. Typically this is a UIViewController. -@property(nonatomic, weak, nullable) IBOutlet id delegate; - -/// A Boolean value that determines whether autoloading of ads in the receiver is enabled. If -/// enabled, you do not need to call the loadRequest: method to load ads. -@property(nonatomic, assign, getter=isAutoloadEnabled) IBInspectable BOOL autoloadEnabled; - -/// Sets options that configure ad loading. -/// -/// @param adOptions An array of GADAdLoaderOptions objects. The array is deep copied and option -/// objects cannot be modified after calling this method. -- (void)setAdOptions:(NSArray *)adOptions; - -#pragma mark - Making an Ad Request - -/// Makes an ad request. The request object supplies targeting information. -- (void)loadRequest:(nullable GADRequest *)request; - -#pragma mark - Mediation - -/// The name of the ad network adapter class that fetched the current ad. Returns nil while the -/// latest ad request is in progress or if the latest ad request failed. For both standard and -/// mediated Google AdMob ads, this method returns @"GADMAdapterGoogleAdMobAds". For ads fetched via -/// mediation custom events, this method returns @"GADMAdapterCustomEvents". -@property(nonatomic, readonly, weak, nullable) NSString *adNetworkClassName; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeExpressAdViewDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeExpressAdViewDelegate.h deleted file mode 100755 index 988fefefd..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeExpressAdViewDelegate.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// GADNativeExpressAdViewDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import - -#import -#import - -@class GADNativeExpressAdView; - -NS_ASSUME_NONNULL_BEGIN - -/// Delegate methods for receiving GADNativeExpressAdView state change messages such as ad request -/// status and ad click lifecycle. -@protocol GADNativeExpressAdViewDelegate - -@optional - -#pragma mark Ad Request Lifecycle Notifications - -/// Tells the delegate that the native express ad view successfully received an ad. The delegate may -/// want to add the native express ad view to the view hierarchy if it hasn't been added yet. -- (void)nativeExpressAdViewDidReceiveAd:(GADNativeExpressAdView *)nativeExpressAdView; - -/// Tells the delegate that an ad request failed. The failure is normally due to network -/// connectivity or ad availablility (i.e., no fill). -- (void)nativeExpressAdView:(GADNativeExpressAdView *)nativeExpressAdView - didFailToReceiveAdWithError:(GADRequestError *)error; - -#pragma mark Click-Time Lifecycle Notifications - -/// Tells the delegate that a full screen view will be presented in response to the user clicking on -/// an ad. The delegate may want to pause animations and time sensitive interactions. -- (void)nativeExpressAdViewWillPresentScreen:(GADNativeExpressAdView *)nativeExpressAdView; - -/// Tells the delegate that the full screen view will be dismissed. -- (void)nativeExpressAdViewWillDismissScreen:(GADNativeExpressAdView *)nativeExpressAdView; - -/// Tells the delegate that the full screen view has been dismissed. The delegate should restart -/// anything paused while handling adViewWillPresentScreen:. -- (void)nativeExpressAdViewDidDismissScreen:(GADNativeExpressAdView *)nativeExpressAdView; - -/// Tells the delegate that the user click will open another app, backgrounding the current -/// application. The standard UIApplicationDelegate methods, like applicationDidEnterBackground:, -/// are called immediately before this method is called. -- (void)nativeExpressAdViewWillLeaveApplication:(GADNativeExpressAdView *)nativeExpressAdView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeMuteThisAdLoaderOptions.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeMuteThisAdLoaderOptions.h deleted file mode 100755 index e7df94767..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeMuteThisAdLoaderOptions.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// GADNativeMuteThisAdLoaderOptions.h -// Google Mobile Ads SDK -// -// Copyright 2018 Google Inc. All rights reserved. -// - -#import - -GAD_SUBCLASSING_RESTRICTED -@interface GADNativeMuteThisAdLoaderOptions : GADAdLoaderOptions - -/// Set to YES to request the custom Mute This Ad feature. By default, this property's value is YES. -@property(nonatomic) BOOL customMuteThisAdRequested; - -@end diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRequest.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRequest.h deleted file mode 100755 index 290480f6e..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRequest.h +++ /dev/null @@ -1,125 +0,0 @@ -// -// GADRequest.h -// Google Mobile Ads SDK -// -// Copyright 2011 Google Inc. All rights reserved. -// - -#import -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Add this constant to the testDevices property's array to receive test ads on the simulator. -GAD_EXTERN const id kGADSimulatorID; - -/// Deprecated gender constants. -typedef NS_ENUM(NSInteger, GADGender) { - kGADGenderUnknown, ///< Deprecated. - kGADGenderMale, ///< Deprecated. - kGADGenderFemale ///< Deprecated. -}; - -/// Specifies optional parameters for ad requests. -GAD_SUBCLASSING_RESTRICTED -@interface GADRequest : NSObject - -/// Returns a default request. -+ (instancetype)request; - -#pragma mark Additional Parameters For Ad Networks - -/// Ad networks may have additional parameters they accept. To pass these parameters to them, create -/// the ad network extras object for that network, fill in the parameters, and register it here. The -/// ad network should have a header defining the interface for the 'extras' object to create. All -/// networks will have access to the basic settings you've set in this GADRequest. If you register -/// an extras object that is the same class as one you have registered before, the previous extras -/// will be overwritten. -- (void)registerAdNetworkExtras:(id)extras; - -/// Returns the network extras defined for an ad network. -- (nullable id)adNetworkExtrasFor:(Class)aClass; - -/// Removes the extras for an ad network. |aClass| is the class which represents that network's -/// extras type. -- (void)removeAdNetworkExtrasFor:(Class)aClass; - -#pragma mark Collecting SDK Information - -/// Returns the version of the SDK. -+ (NSString *)sdkVersion; - -#pragma mark Testing - -/// Test ads will be returned for devices with device IDs specified in this array. -@property(nonatomic, copy, nullable) NSArray *testDevices; - -#pragma mark User Information - -/// The user's current location may be used to deliver more relevant ads. However do not use Core -/// Location just for advertising, make sure it is used for more beneficial reasons as well. It is -/// both a good idea and part of Apple's guidelines. -- (void)setLocationWithLatitude:(CGFloat)latitude - longitude:(CGFloat)longitude - accuracy:(CGFloat)accuracyInMeters; - -/// [Optional] This method allows you to specify whether you would like your app to be treated as -/// child-directed for purposes of the Children’s Online Privacy Protection Act (COPPA), -/// http:///business.ftc.gov/privacy-and-security/childrens-privacy. -/// -/// If you call this method with YES, you are indicating that your app should be treated as -/// child-directed for purposes of the Children’s Online Privacy Protection Act (COPPA). If you call -/// this method with NO, you are indicating that your app should not be treated as child-directed -/// for purposes of the Children’s Online Privacy Protection Act (COPPA). If you do not call this -/// method, ad requests will include no indication of how you would like your app treated with -/// respect to COPPA. -/// -/// By setting this method, you certify that this notification is accurate and you are authorized to -/// act on behalf of the owner of the app. You understand that abuse of this setting may result in -/// termination of your Google account. -/// -/// It may take some time for this designation to be fully implemented in applicable Google -/// services. This designation will only apply to ad requests for which you have set this method. -- (void)tagForChildDirectedTreatment:(BOOL)childDirectedTreatment; - -#pragma mark Contextual Information - -/// Array of keyword strings. Keywords are words or phrases describing the current user activity -/// such as @"Sports Scores" or @"Football". Set this property to nil to clear the keywords. -@property(nonatomic, copy, nullable) NSArray *keywords; - -/// URL string for a webpage whose content matches the app content. This webpage content is used for -/// targeting purposes. -@property(nonatomic, copy, nullable) NSString *contentURL; - -#pragma mark Request Agent Information - -/// String that identifies the ad request's origin. Third party libraries that reference the Mobile -/// Ads SDK should set this property to denote the platform from which the ad request originated. -/// For example, a third party ad network called "CoolAds network" that is mediating requests to the -/// Mobile Ads SDK should set this property as "CoolAds". -@property(nonatomic, copy, nullable) NSString *requestAgent; - -#pragma mark Deprecated Methods - -/// Deprecated property. The user's gender. -@property(nonatomic, assign) GADGender gender GAD_DEPRECATED_ATTRIBUTE; - -/// Deprecated property. The user's birthday. -@property(nonatomic, copy, nullable) NSDate *birthday GAD_DEPRECATED_ATTRIBUTE; - -/// Deprecated. -- (void)setBirthdayWithMonth:(NSInteger)month - day:(NSInteger)day - year:(NSInteger)year GAD_DEPRECATED_ATTRIBUTE; - -/// Deprecated. -- (void)setLocationWithDescription:(nullable NSString *)locationDescription - GAD_DEPRECATED_MSG_ATTRIBUTE(" use setLocationWithLatitude:longitude:accuracy:."); - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRequestConfiguration.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRequestConfiguration.h deleted file mode 100755 index 2d510de09..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRequestConfiguration.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// GADRequestConfiguration.h -// Google Mobile Ads SDK -// -// Copyright 2018 Google Inc. All rights reserved. -// - -#import - -#import - -/// Maximum ad content rating. -typedef NSString *GADMaxAdContentRating GAD_STRING_ENUM; - -/// Rating for content suitable for general audiences, including families. -GAD_EXTERN GADMaxAdContentRating _Nonnull const GADMaxAdContentRatingGeneral; -/// Rating for content suitable for most audiences with parental guidance. -GAD_EXTERN GADMaxAdContentRating _Nonnull const GADMaxAdContentRatingParentalGuidance; -/// Rating for content suitable for teen and older audiences. -GAD_EXTERN GADMaxAdContentRating _Nonnull const GADMaxAdContentRatingTeen; -/// Rating for content suitable only for mature audiences. -GAD_EXTERN GADMaxAdContentRating _Nonnull const GADMaxAdContentRatingMatureAudience; - -/// Request configuration. The settings in this class will apply to all ad requests. -GAD_SUBCLASSING_RESTRICTED -@interface GADRequestConfiguration : NSObject - -/// The maximum ad content rating. All Google ads will have this content rating or lower. -@property(nonatomic, strong, nullable) GADMaxAdContentRating maxAdContentRating; - -/// This method allows you to specify whether the user is under the age of consent. If you call this -/// method with YES, a TFUA parameter will be included in all ad requests. This parameter disables -/// personalized advertising, including remarketing, for all ad requests. It also disables requests -/// to third-party ad vendors, such as ad measurement pixels and third-party ad servers. -- (void)tagForUnderAgeOfConsent:(BOOL)underAgeOfConsent; - -@end diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRequestError.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRequestError.h deleted file mode 100755 index 26c1fc5a1..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRequestError.h +++ /dev/null @@ -1,71 +0,0 @@ -// -// GADRequestError.h -// Google Mobile Ads SDK -// -// Copyright 2011 Google Inc. All rights reserved. -// - -#import - -#import - -@class GADRequest; - -NS_ASSUME_NONNULL_BEGIN - -/// Google AdMob Ads error domain. -GAD_EXTERN NSString *const kGADErrorDomain; - -/// NSError codes for GAD error domain. -typedef NS_ENUM(NSInteger, GADErrorCode) { - /// The ad request is invalid. The localizedFailureReason error description will have more - /// details. Typically this is because the ad did not have the ad unit ID or root view - /// controller set. - kGADErrorInvalidRequest, - - /// The ad request was successful, but no ad was returned. - kGADErrorNoFill, - - /// There was an error loading data from the network. - kGADErrorNetworkError, - - /// The ad server experienced a failure processing the request. - kGADErrorServerError, - - /// The current device's OS is below the minimum required version. - kGADErrorOSVersionTooLow, - - /// The request was unable to be loaded before being timed out. - kGADErrorTimeout, - - /// Will not send request because the interstitial object has already been used. - kGADErrorInterstitialAlreadyUsed, - - /// The mediation response was invalid. - kGADErrorMediationDataError, - - /// Error finding or creating a mediation ad network adapter. - kGADErrorMediationAdapterError, - - /// The mediation request was successful, but no ad was returned from any ad networks. - kGADErrorMediationNoFill, - - /// Attempting to pass an invalid ad size to an adapter. - kGADErrorMediationInvalidAdSize, - - /// Internal error. - kGADErrorInternalError, - - /// Invalid argument error. - kGADErrorInvalidArgument, - - /// Received invalid response. - kGADErrorReceivedInvalidResponse -}; - -/// Represents the error generated due to invalid request parameters. -GAD_SUBCLASSING_RESTRICTED -@interface GADRequestError : NSError -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRewardBasedVideoAd.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRewardBasedVideoAd.h deleted file mode 100755 index dbd5e7f35..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRewardBasedVideoAd.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// GADRewardBasedVideoAd.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// The GADRewardBasedVideoAd class is used for requesting and presenting a reward based video ad. -/// This class isn't thread safe. -GAD_SUBCLASSING_RESTRICTED -@interface GADRewardBasedVideoAd : NSObject - -/// Delegate for receiving video notifications. -@property(nonatomic, weak, nullable) id delegate; - -/// Indicates if the receiver is ready to be presented full screen. -@property(nonatomic, readonly, getter=isReady) BOOL ready; - -/// The ad network class name that fetched the current ad. Returns nil while the latest ad request -/// is in progress or if the latest ad request failed. For both standard and mediated Google AdMob -/// ads, this property returns @"GADMAdapterGoogleAdMobAds". For ads fetched via mediation custom -/// events, this property returns the mediated custom event adapter. -@property(nonatomic, readonly, copy, nullable) NSString *adNetworkClassName; - -/// A unique identifier used to identify the user when making server-to-server reward callbacks. -/// This value is used at both request time and during ad display. New values must only be set -/// before ad requests. -@property(nonatomic, copy, nullable) NSString *userIdentifier; - -/// Optional custom reward string to include in the server-to-server callback. -@property(nonatomic, copy, nullable) NSString *customRewardString; - -/// Returns the shared GADRewardBasedVideoAd instance. -+ (GADRewardBasedVideoAd *)sharedInstance; - -/// Initiates the request to fetch the reward based video ad. The |request| object supplies ad -/// targeting information and must not be nil. The adUnitID is the ad unit id used for fetching an -/// ad and must not be nil. -- (void)loadRequest:(GADRequest *)request withAdUnitID:(NSString *)adUnitID; - -/// Presents the reward based video ad with the provided view controller. -- (void)presentFromRootViewController:(UIViewController *)viewController; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRewardBasedVideoAdDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRewardBasedVideoAdDelegate.h deleted file mode 100755 index 729aefdcd..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRewardBasedVideoAdDelegate.h +++ /dev/null @@ -1,53 +0,0 @@ -// -// GADRewardBasedVideoAdDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@class GADRewardBasedVideoAd; - -/// Delegate for receiving state change messages from a GADRewardBasedVideoAd such as ad requests -/// succeeding/failing. -@protocol GADRewardBasedVideoAdDelegate - -@required - -/// Tells the delegate that the reward based video ad has rewarded the user. -- (void)rewardBasedVideoAd:(GADRewardBasedVideoAd *)rewardBasedVideoAd - didRewardUserWithReward:(GADAdReward *)reward; - -@optional - -/// Tells the delegate that the reward based video ad failed to load. -- (void)rewardBasedVideoAd:(GADRewardBasedVideoAd *)rewardBasedVideoAd - didFailToLoadWithError:(NSError *)error; - -/// Tells the delegate that a reward based video ad was received. -- (void)rewardBasedVideoAdDidReceiveAd:(GADRewardBasedVideoAd *)rewardBasedVideoAd; - -/// Tells the delegate that the reward based video ad opened. -- (void)rewardBasedVideoAdDidOpen:(GADRewardBasedVideoAd *)rewardBasedVideoAd; - -/// Tells the delegate that the reward based video ad started playing. -- (void)rewardBasedVideoAdDidStartPlaying:(GADRewardBasedVideoAd *)rewardBasedVideoAd; - -/// Tells the delegate that the reward based video ad completed playing. -- (void)rewardBasedVideoAdDidCompletePlaying:(GADRewardBasedVideoAd *)rewardBasedVideoAd; - -/// Tells the delegate that the reward based video ad closed. -- (void)rewardBasedVideoAdDidClose:(GADRewardBasedVideoAd *)rewardBasedVideoAd; - -/// Tells the delegate that the reward based video ad will leave the application. -- (void)rewardBasedVideoAdWillLeaveApplication:(GADRewardBasedVideoAd *)rewardBasedVideoAd; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADSearchBannerView.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADSearchBannerView.h deleted file mode 100755 index 7eddf8bf2..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADSearchBannerView.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// GADSearchBannerView.h -// Google Mobile Ads SDK -// -// Copyright 2011 Google Inc. All rights reserved. -// - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// A view that displays search ads. -/// To show search ads: -/// 1) Create a GADSearchBannerView and add it to your view controller's view hierarchy. -/// 2) Create a GADSearchRequest ad request object to hold the search query and other search data. -/// 3) Call GADSearchBannerView's -loadRequest: method with the GADSearchRequest object. -GAD_SUBCLASSING_RESTRICTED -@interface GADSearchBannerView : GADBannerView - -/// If the banner view is initialized with kGADAdSizeFluid and the corresponding request is created -/// with dynamic height parameters, this delegate will be called when the ad size changes. -@property(nonatomic, weak, nullable) IBOutlet id adSizeDelegate; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADSearchRequest.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADSearchRequest.h deleted file mode 100755 index f0be426f2..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADSearchRequest.h +++ /dev/null @@ -1,78 +0,0 @@ -// -// GADSearchRequest.h -// Google Mobile Ads SDK -// -// Copyright 2011 Google Inc. All rights reserved. -// - -#import -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Search ad border types. -typedef NS_ENUM(NSUInteger, GADSearchBorderType) { - kGADSearchBorderTypeNone, ///< No border. - kGADSearchBorderTypeDashed, ///< Dashed line border. - kGADSearchBorderTypeDotted, ///< Dotted line border. - kGADSearchBorderTypeSolid ///< Solid line border. -}; - -/// Search ad call button color types. -typedef NS_ENUM(NSUInteger, GADSearchCallButtonColor) { - kGADSearchCallButtonLight, ///< Light button color. - kGADSearchCallButtonMedium, ///< Medium button color. - kGADSearchCallButtonDark ///< Dark button color. -}; - -/// Specifies parameters for search ads. -GAD_SUBCLASSING_RESTRICTED -@interface GADSearchRequest : GADRequest - -/// The search ad query. -@property(nonatomic, copy, nullable) NSString *query; -/// The search ad background color. -@property(nonatomic, readonly, copy, nullable) UIColor *backgroundColor; -/// The search ad gradient "from" color. -@property(nonatomic, readonly, copy, nullable) UIColor *gradientFrom; -/// The search ad gradient "to" color. -@property(nonatomic, readonly, copy, nullable) UIColor *gradientTo; -/// The search ad header color. -@property(nonatomic, copy, nullable) UIColor *headerColor; -/// The search ad description text color. -@property(nonatomic, copy, nullable) UIColor *descriptionTextColor; -/// The search ad anchor text color. -@property(nonatomic, copy, nullable) UIColor *anchorTextColor; -/// The search ad text font family. -@property(nonatomic, copy, nullable) NSString *fontFamily; -/// The search ad header text size. -@property(nonatomic, assign) NSUInteger headerTextSize; -/// The search ad border color. -@property(nonatomic, copy, nullable) UIColor *borderColor; -/// The search ad border type. -@property(nonatomic, assign) GADSearchBorderType borderType; -/// The search ad border thickness. -@property(nonatomic, assign) NSUInteger borderThickness; -/// The search ad custom channels. -@property(nonatomic, copy, nullable) NSString *customChannels; -/// The search ad call button color. -@property(nonatomic, assign) GADSearchCallButtonColor callButtonColor; - -/// A solid background color for rendering the ad. The background of the ad -/// can either be a solid color, or a gradient, which can be specified through -/// setBackgroundGradientFrom:toColor: method. If both solid and gradient -/// background is requested, only the latter is considered. -- (void)setBackgroundSolid:(UIColor *)color; - -/// A linear gradient background color for rendering the ad. The background of -/// the ad can either be a linear gradient, or a solid color, which can be -/// specified through setBackgroundSolid method. If both solid and gradient -/// background is requested, only the latter is considered. -- (void)setBackgroundGradientFrom:(UIColor *)from toColor:(UIColor *)toColor; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAd+ConfirmationClick.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAd+ConfirmationClick.h deleted file mode 100755 index 6e0b0a724..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAd+ConfirmationClick.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// GADUnifiedNativeAd+ConfirmationClick.h -// Google Mobile Ads SDK -// -// Copyright 2017 Google Inc. All rights reserved. -// - -#import -#import - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface GADUnifiedNativeAd (ConfirmationClick) - -/// Unconfirmed click delegate. -@property(nonatomic, weak, nullable) - id unconfirmedClickDelegate; - -/// Registers a view that will confirm the click. -- (void)registerClickConfirmingView:(nullable UIView *)view; - -/// Cancels the unconfirmed click. Called when user fails to confirm the click. When this method is -/// called, SDK stops tracking click on the registered click confirming view and invokes the -/// -nativeAdDidCancelUnconfirmedClick: delegate method. If there's no ongoing unconfirmed click, -/// this method is no-op. -- (void)cancelUnconfirmedClick; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAd+CustomClickGesture.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAd+CustomClickGesture.h deleted file mode 100755 index ada730993..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAd+CustomClickGesture.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// GADUnifiedNativeAd+CustomClickGesture.h -// Google Mobile Ads SDK -// -// Copyright 2018 Google Inc. All rights reserved. -// - -#import - -@interface GADUnifiedNativeAd (CustomClickGesture) - -/// Enables custom click gestures. Must be called before the ad is associated with an ad view. -/// Available for whitelisted accounts only. -- (void)enableCustomClickGestures; - -/// Records a click triggered by a custom click gesture. -- (void)recordCustomClickGesture; - -@end diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAd.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAd.h deleted file mode 100755 index 8a3f288bf..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAd.h +++ /dev/null @@ -1,142 +0,0 @@ -// -// GADUnifiedNativeAd.h -// Google Mobile Ads SDK -// -// Copyright 2017 Google Inc. All rights reserved. -// - -#import -#import - -#import -#import -#import -#import -#import -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Unified native ad. To request this ad type, pass kGADAdLoaderAdTypeUnifiedNative -/// (see GADAdLoaderAdTypes.h) to the |adTypes| parameter in GADAdLoader's initializer method. If -/// you request this ad type, your delegate must conform to the GADUnifiedNativeAdLoaderDelegate -/// protocol. -GAD_SUBCLASSING_RESTRICTED -@interface GADUnifiedNativeAd : NSObject - -#pragma mark - Must be displayed if available - -/// Headline -@property(nonatomic, readonly, copy, nullable) NSString *headline; - -#pragma mark - Recommended to display - -/// Text that encourages user to take some action with the ad. For example "Install". -@property(nonatomic, readonly, copy, nullable) NSString *callToAction; -/// Icon image. -@property(nonatomic, readonly, strong, nullable) GADNativeAdImage *icon; -/// Description. -@property(nonatomic, readonly, copy, nullable) NSString *body; -/// Array of GADNativeAdImage objects. -@property(nonatomic, readonly, strong, nullable) NSArray *images; -/// App store rating (0 to 5). -@property(nonatomic, readonly, copy, nullable) NSDecimalNumber *starRating; -/// The app store name. For example, "App Store". -@property(nonatomic, readonly, copy, nullable) NSString *store; -/// String representation of the app's price. -@property(nonatomic, readonly, copy, nullable) NSString *price; -/// Identifies the advertiser. For example, the advertiser’s name or visible URL. -@property(nonatomic, readonly, copy, nullable) NSString *advertiser; -/// Video controller for controlling video playback in GADUnifiedNativeAdView's mediaView. -@property(nonatomic, strong, readonly, nullable) GADVideoController *videoController; - -/// Optional delegate to receive state change notifications. -@property(nonatomic, weak, nullable) id delegate; - -/// Root view controller for handling ad actions. -@property(nonatomic, weak, nullable) UIViewController *rootViewController; - -/// Dictionary of assets which aren't processed by the receiver. -@property(nonatomic, readonly, copy, nullable) NSDictionary *extraAssets; - -/// The ad network class name that fetched the current ad. For both standard and mediated Google -/// AdMob ads, this method returns @"GADMAdapterGoogleAdMobAds". For ads fetched via mediation -/// custom events, this method returns @"GADMAdapterCustomEvents". -@property(nonatomic, readonly, copy, nullable) NSString *adNetworkClassName; - -/// Indicates whether custom Mute This Ad is available for the native ad. -@property(nonatomic, readonly, getter=isCustomMuteThisAdAvailable) BOOL customMuteThisAdAvailable; - -/// An array of Mute This Ad reasons used to render customized mute ad survey. Use this array to -/// implement your own Mute This Ad feature only when customMuteThisAdAvailable is YES. -@property(nonatomic, readonly, nullable) NSArray *muteThisAdReasons; - -/// Registers ad view, clickable asset views, and nonclickable asset views with this native ad. -/// Media view shouldn't be registered as clickable. -/// @param clickableAssetViews Dictionary of asset views that are clickable, keyed by asset IDs. -/// @param nonclickableAssetViews Dictionary of asset views that are not clickable, keyed by asset -/// IDs. -- (void)registerAdView:(UIView *)adView - clickableAssetViews: - (NSDictionary *)clickableAssetViews - nonclickableAssetViews: - (NSDictionary *)nonclickableAssetViews; - -/// Unregisters ad view from this native ad. The corresponding asset views will also be -/// unregistered. -- (void)unregisterAdView; - -/// Reports the mute event with the mute reason selected by user. Use nil if no reason was selected. -/// Call this method only if customMuteThisAdAvailable is YES. -- (void)muteThisAdWithReason:(nullable GADMuteThisAdReason *)reason; - -@end - -#pragma mark - Protocol and constants - -/// The delegate of a GADAdLoader object implements this protocol to receive GADUnifiedNativeAd ads. -@protocol GADUnifiedNativeAdLoaderDelegate -/// Called when a unified native ad is received. -- (void)adLoader:(GADAdLoader *)adLoader didReceiveUnifiedNativeAd:(GADUnifiedNativeAd *)nativeAd; -@end - -#pragma mark - Unified Native Ad View - -/// Base class for native ad views. Your native ad view must be a subclass of this class and must -/// call superclass methods for all overridden methods. -@interface GADUnifiedNativeAdView : UIView - -/// This property must point to the unified native ad object rendered by this ad view. -@property(nonatomic, strong, nullable) GADUnifiedNativeAd *nativeAd; - -/// Weak reference to your ad view's headline asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *headlineView; -/// Weak reference to your ad view's call to action asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *callToActionView; -/// Weak reference to your ad view's icon asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *iconView; -/// Weak reference to your ad view's body asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *bodyView; -/// Weak reference to your ad view's store asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *storeView; -/// Weak reference to your ad view's price asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *priceView; -/// Weak reference to your ad view's image asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *imageView; -/// Weak reference to your ad view's star rating asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *starRatingView; -/// Weak reference to your ad view's advertiser asset view. -@property(nonatomic, weak, nullable) IBOutlet UIView *advertiserView; -/// Weak reference to your ad view's media asset view. -@property(nonatomic, weak, nullable) IBOutlet GADMediaView *mediaView; -/// Weak reference to your ad view's AdChoices view. Must set adChoicesView before setting -/// nativeAd, otherwise AdChoices will be rendered according to the preferredAdChoicesPosition -/// defined in GADNativeAdViewAdOptions. -@property(nonatomic, weak, nullable) IBOutlet GADAdChoicesView *adChoicesView; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAdAssetIdentifiers.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAdAssetIdentifiers.h deleted file mode 100755 index f15fcab5d..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAdAssetIdentifiers.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// GADUnifiedNativeAdAssetIdentifiers.h -// Google Mobile Ads SDK -// -// Copyright 2017 Google Inc. All rights reserved. -// - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NSString *GADUnifiedNativeAssetIdentifier GAD_STRING_ENUM; - -GAD_EXTERN GADUnifiedNativeAssetIdentifier const GADUnifiedNativeHeadlineAsset; -GAD_EXTERN GADUnifiedNativeAssetIdentifier const GADUnifiedNativeCallToActionAsset; -GAD_EXTERN GADUnifiedNativeAssetIdentifier const GADUnifiedNativeIconAsset; -GAD_EXTERN GADUnifiedNativeAssetIdentifier const GADUnifiedNativeBodyAsset; -GAD_EXTERN GADUnifiedNativeAssetIdentifier const GADUnifiedNativeStoreAsset; -GAD_EXTERN GADUnifiedNativeAssetIdentifier const GADUnifiedNativePriceAsset; -GAD_EXTERN GADUnifiedNativeAssetIdentifier const GADUnifiedNativeImageAsset; -GAD_EXTERN GADUnifiedNativeAssetIdentifier const GADUnifiedNativeStarRatingAsset; -GAD_EXTERN GADUnifiedNativeAssetIdentifier const GADUnifiedNativeAdvertiserAsset; -GAD_EXTERN GADUnifiedNativeAssetIdentifier const GADUnifiedNativeMediaViewAsset; -GAD_EXTERN GADUnifiedNativeAssetIdentifier const GADUnifiedNativeAdChoicesViewAsset; - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAdDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAdDelegate.h deleted file mode 100755 index e9b931d00..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAdDelegate.h +++ /dev/null @@ -1,63 +0,0 @@ -// -// GADUnifiedNativeAdDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2017 Google Inc. All rights reserved. -// - -#import - -#import - -@class GADUnifiedNativeAd; - -NS_ASSUME_NONNULL_BEGIN - -/// Identifies native ad assets. -@protocol GADUnifiedNativeAdDelegate - -@optional - -#pragma mark - Ad Lifecycle Events - -/// Called when an impression is recorded for an ad. Only called for Google ads and is not supported -/// for mediated ads. -- (void)nativeAdDidRecordImpression:(GADUnifiedNativeAd *)nativeAd; - -/// Called when a click is recorded for an ad. Only called for Google ads and is not supported for -/// mediated ads. -- (void)nativeAdDidRecordClick:(GADUnifiedNativeAd *)nativeAd; - -#pragma mark - Click-Time Lifecycle Notifications - -/// Called before presenting the user a full screen view in response to an ad action. Use this -/// opportunity to stop animations, time sensitive interactions, etc. -/// -/// Normally the user looks at the ad, dismisses it, and control returns to your application with -/// the nativeAdDidDismissScreen: message. However, if the user hits the Home button or clicks on an -/// App Store link, your application will be backgrounded. The next method called will be the -/// applicationWillResignActive: of your UIApplicationDelegate object. Immediately after that, -/// nativeAdWillLeaveApplication: is called. -- (void)nativeAdWillPresentScreen:(GADUnifiedNativeAd *)nativeAd; - -/// Called before dismissing a full screen view. -- (void)nativeAdWillDismissScreen:(GADUnifiedNativeAd *)nativeAd; - -/// Called after dismissing a full screen view. Use this opportunity to restart anything you may -/// have stopped as part of nativeAdWillPresentScreen:. -- (void)nativeAdDidDismissScreen:(GADUnifiedNativeAd *)nativeAd; - -/// Called before the application will go to the background or terminate due to an ad action that -/// will launch another application (such as the App Store). The normal UIApplicationDelegate -/// methods, like applicationDidEnterBackground:, will be called immediately before this. -- (void)nativeAdWillLeaveApplication:(GADUnifiedNativeAd *)nativeAd; - -#pragma mark - Mute This Ad - -/// Used for Mute This Ad feature. Called after the native ad is muted. Only called for Google ads -/// and is not supported for mediated ads. -- (void)nativeAdIsMuted:(GADUnifiedNativeAd *)nativeAd; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAdUnconfirmedClickDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAdUnconfirmedClickDelegate.h deleted file mode 100755 index 998b350a9..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAdUnconfirmedClickDelegate.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// GADUnifiedNativeAdUnconfirmedClickDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2017 Google Inc. All rights reserved. -// - -#import - -#import -#import - -@class GADUnifiedNativeAd; - -NS_ASSUME_NONNULL_BEGIN - -@protocol GADUnifiedNativeAdUnconfirmedClickDelegate - -/// Tells the delegate that native ad receives an unconfirmed click on view with asset ID. You -/// should update user interface and ask user to confirm the click once this message is received. -/// Use the -registerClickConfirmingView: method in GADNUnifiedNativeAd+ConfirmationClick.h to -/// register a view that will confirm the click. Only called for Google ads and is not supported for -/// mediated ads. -- (void)nativeAd:(GADUnifiedNativeAd *)nativeAd - didReceiveUnconfirmedClickOnAssetID:(GADUnifiedNativeAssetIdentifier)assetID; - -/// Tells the delegate that the unconfirmed click is cancelled. You should revert the user interface -/// change once this message is received. Only called for Google ads and is not supported for -/// mediated ads. -- (void)nativeAdDidCancelUnconfirmedClick:(GADUnifiedNativeAd *)nativeAd; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADVideoController.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADVideoController.h deleted file mode 100755 index 9fb57d466..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADVideoController.h +++ /dev/null @@ -1,49 +0,0 @@ -// -// GADVideoController.h -// Google Mobile Ads SDK -// -// Copyright (c) 2016 Google Inc. All rights reserved. -// - -#import -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol GADVideoControllerDelegate; - -/// The video controller class provides a way to get the video metadata and also manages video -/// content of the ad rendered by the Google Mobile Ads SDK. You don't need to create an instance of -/// this class. When the ad rendered by the Google Mobile Ads SDK loads video content, you may be -/// able to get an instance of this class from the rendered ad object. -GAD_SUBCLASSING_RESTRICTED -@interface GADVideoController : NSObject - -/// Delegate for receiving video notifications. -@property(nonatomic, weak, nullable) id delegate; - -/// Mute or unmute video. Set to YES to mute the video. Set to NO to allow the video to play sound. -- (void)setMute:(BOOL)mute; - -/// Play the video. Doesn't do anything if the video is already playing. -- (void)play; - -/// Pause the video. Doesn't do anything if the video is already paused. -- (void)pause; - -/// Returns a Boolean indicating if the receiver has video content. -- (BOOL)hasVideoContent; - -/// Returns the video's aspect ratio (width/height) or 0 if no video is present. -- (double)aspectRatio; - -/// Indicates if video custom controls (i.e. play/pause/mute/unmute) are enabled. -- (BOOL)customControlsEnabled; - -/// Indicates if video click to expand behavior is enabled. -- (BOOL)clickToExpandEnabled; -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADVideoControllerDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADVideoControllerDelegate.h deleted file mode 100755 index e824634bb..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADVideoControllerDelegate.h +++ /dev/null @@ -1,37 +0,0 @@ -// -// GADVideoControllerDelegate.h -// Google Mobile Ads SDK -// -// Copyright (c) 2016 Google Inc. All rights reserved. -// - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// The GADVideoControllerDelegate protocol defines methods that are called by the video controller -/// object in response to the video events that occured throught the lifetime of the video rendered -/// by an ad. -@protocol GADVideoControllerDelegate - -@optional - -/// Tells the delegate that the video controller has began or resumed playing a video. -- (void)videoControllerDidPlayVideo:(GADVideoController *)videoController; - -/// Tells the delegate that the video controller has paused video. -- (void)videoControllerDidPauseVideo:(GADVideoController *)videoController; - -/// Tells the delegate that the video controller's video playback has ended. -- (void)videoControllerDidEndVideoPlayback:(GADVideoController *)videoController; - -/// Tells the delegate that the video controller has muted video. -- (void)videoControllerDidMuteVideo:(GADVideoController *)videoController; - -/// Tells the delegate that the video controller has unmuted video. -- (void)videoControllerDidUnmuteVideo:(GADVideoController *)videoController; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADVideoOptions.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADVideoOptions.h deleted file mode 100755 index e06633ea8..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADVideoOptions.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// GADVideoOptions.h -// Google Mobile Ads SDK -// -// Copyright 2016 Google Inc. All rights reserved. -// - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Video ad options. -GAD_SUBCLASSING_RESTRICTED -@interface GADVideoOptions : GADAdLoaderOptions - -/// Indicates if videos should start muted. By default this property value is YES. -@property(nonatomic, assign) BOOL startMuted; - -/// Indicates if the requested video should have custom controls enabled for play/pause/mute/unmute. -@property(nonatomic, assign) BOOL customControlsRequested; - -/// Indicates whether the requested video should have the click to expand behavior. -@property(nonatomic, assign) BOOL clickToExpandRequested; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GoogleMobileAds.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GoogleMobileAds.h deleted file mode 100755 index d2f759aca..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GoogleMobileAds.h +++ /dev/null @@ -1,117 +0,0 @@ -// -// GoogleMobileAds.h -// Google Mobile Ads SDK -// -// Copyright 2014 Google Inc. All rights reserved. - -#import -#import - -#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_6_0 -#error The Google Mobile Ads SDK requires a deployment target of iOS 6.0 or later. -#endif - -#if defined(__ARM_ARCH_7S__) && __ARM_ARCH_7S__ -#error The Google Mobile Ads SDK doesn't support linking with armv7s. Remove armv7s from "ARCHS" (Architectures) in your Build Settings. -#endif - -/// Project version string for GoogleMobileAds. -FOUNDATION_EXPORT const unsigned char GoogleMobileAdsVersionString[]; - -// Header files. -#import - -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import - -#import -#import -#import -#import -#import -#import -#import -#import -#import - -#import -#import -#import - -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import - -#import -#import -#import -#import -#import - -#import -#import -#import -#import -#import -#import -#import -#import -#import - -#import -#import -#import - -#import -#import -#import - -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import - diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GoogleMobileAdsDefines.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GoogleMobileAdsDefines.h deleted file mode 100755 index 5958e176f..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GoogleMobileAdsDefines.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// GoogleMobileAdsDefines.h -// Google Mobile Ads SDK -// -// Copyright (c) 2015 Google Inc. All rights reserved. -// - -#import - -#if defined(__cplusplus) -#define GAD_EXTERN extern "C" __attribute__((visibility("default"))) -#else -#define GAD_EXTERN extern __attribute__((visibility("default"))) -#endif // defined(__cplusplus) - -#if defined(__has_feature) && defined(__has_attribute) -#if __has_feature(attribute_deprecated_with_message) -#define GAD_DEPRECATED_MSG_ATTRIBUTE(s) __attribute__((deprecated(s))) -#elif __has_attribute(deprecated) -#define GAD_DEPRECATED_MSG_ATTRIBUTE(s) __attribute__((deprecated)) -#else -#define GAD_DEPRECATED_MSG_ATTRIBUTE(s) -#endif // __has_feature(attribute_deprecated_with_message) -#if __has_attribute(deprecated) -#define GAD_DEPRECATED_ATTRIBUTE __attribute__((deprecated)) -#else -#define GAD_DEPRECATED_ATTRIBUTE -#endif // __has_attribute(deprecated) -#else -#define GAD_DEPRECATED_ATTRIBUTE -#define GAD_DEPRECATED_MSG_ATTRIBUTE(s) -#endif // defined(__has_feature) && defined(__has_attribute) - -#if __has_attribute(objc_subclassing_restricted) -#define GAD_SUBCLASSING_RESTRICTED __attribute__((objc_subclassing_restricted)) -#else -#define GAD_SUBCLASSING_RESTRICTED -#endif // __has_attribute(objc_subclassing_restricted) - -#if __has_feature(nullability) // Available starting in Xcode 6.3. -#define GAD_NULLABLE_TYPE __nullable -#define GAD_NONNULL_TYPE __nonnull -#define GAD_NULLABLE nullable -#else -#define GAD_NULLABLE_TYPE -#define GAD_NONNULL_TYPE -#define GAD_NULLABLE -#endif // __has_feature(nullability) - -#if __has_attribute(objc_boxable) // Available starting in Xcode 7.3. -#define GAD_BOXABLE __attribute__((objc_boxable)) -#else -#define GAD_BOXABLE -#endif // __has_attribute(objc_boxable) - -#if defined(NS_STRING_ENUM) // Available starting in Xcode 8.0. -#define GAD_STRING_ENUM NS_STRING_ENUM -#else -#define GAD_STRING_ENUM -#endif diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMAdNetworkAdapterProtocol.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMAdNetworkAdapterProtocol.h deleted file mode 100755 index 3ba6e3321..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMAdNetworkAdapterProtocol.h +++ /dev/null @@ -1,101 +0,0 @@ -// -// GADMAdNetworkAdapterProtocol.h -// Google Mobile Ads SDK -// -// Copyright 2011 Google. All rights reserved. -// - -#import - -#import "GADMAdNetworkConnectorProtocol.h" -#import "GADMEnums.h" - -/// Subclasses should prefix their name with "GADMAdapter" example: GADMAdapterGoogleAdMobAds -#define kGADMAdapterClassNamePrefix @"GADMAdapter" - -@protocol GADMAdNetworkConnector; - -/// Ad network adapter protocol. -@protocol GADMAdNetworkAdapter - -/// Returns a version string for the adapter. It can be any string that uniquely identifies the -/// version of your adapter. For example, "1.0", or simply a date such as "20110915". -+ (NSString *)adapterVersion; - -/// The extras class that is used to specify additional parameters for a request to this ad network. -/// Returns Nil if the network does not have extra settings for publishers to send. -+ (Class)networkExtrasClass; - -/// Designated initializer. Implementing classes can and should keep the connector in an instance -/// variable. However you must never retain the connector, as doing so will create a circular -/// reference and cause memory leaks. -- (instancetype)initWithGADMAdNetworkConnector:(id)connector; - -/// Asks the adapter to initiate a banner ad request. The adapter does not need to return anything. -/// The assumption is that the adapter will start an asynchronous ad fetch over the network. Your -/// adapter may act as a delegate to your SDK to listen to callbacks. If your SDK does not support -/// the given ad size, or does not support banner ads, call back to the adapter:didFailAd: method of -/// the connector. -- (void)getBannerWithSize:(GADAdSize)adSize; - -/// Asks the adapter to initiate an interstitial ad request. The adapter does not need to return -/// anything. The assumption is that the adapter will start an asynchronous ad fetch over the -/// network. Your adapter may act as a delegate to your SDK to listen to callbacks. If your SDK does -/// not support interstitials, call back to the adapter:didFailInterstitial: method of the -/// connector. -- (void)getInterstitial; - -/// When called, the adapter must remove itself as a delegate or notification observer from the -/// underlying ad network SDK. You should also call this method in your adapter dealloc, so when -/// your adapter goes away, your SDK will not call a freed object. This function should be -/// idempotent and should not crash regardless of when or how many times the method is called. -- (void)stopBeingDelegate; - -/// Present an interstitial using the supplied UIViewController, by calling -/// presentViewController:animated:completion:. -/// -/// Your interstitial should not immediately present itself when it is received. Instead, you should -/// wait until this method is called on your adapter to present the interstitial. -/// -/// Make sure to call adapterWillPresentInterstitial: on the connector when the interstitial is -/// about to be presented, and adapterWillDismissInterstitial: and adapterDidDismissInterstitial: -/// when the interstitial is being dismissed. -- (void)presentInterstitialFromRootViewController:(UIViewController *)rootViewController; - -@optional - -/// Starts request for a native ad. |adTypes| contains the list of native ad types requested. See -/// GADAdLoaderAdTypes.h for available ad types. |options| are any additional options configured by -/// the publisher for requesting a native ad. See GADNativeAdImageAdLoaderOptions.h for available -/// image options. When this method is called the receiver may start native ad request -/// asynchronously. On completion the receiver should notify the Google Mobile Ads SDK with a native -/// ad object using the receiver's connector method -/// adapter:didReceiveNativeAdDataSource:mediationDelegate or adapter:didFailAd: if the ad request -/// encountered an error. -- (void)getNativeAdWithAdTypes:(NSArray *)adTypes - options:(NSArray *)options; - -/// Indicates if the adapter handles user clicks. If this method returns YES, the adapter must -/// handle user clicks and notify the Google Mobile Ads SDK of clicks using -/// +[GADMediatedNativeAdNotificationSource mediatedNativeAdDidRecordClick:]. If this method returns -/// NO, the Google Mobile Ads SDK handles user clicks and notifies the adapter of clicks using -/// -[GADMediatedNativeAdDelegate -/// mediatedNativeAd:didRecordClickOnAssetWithName:view:viewController:]. -- (BOOL)handlesUserClicks; - -/// Indicates if the adapter handles user impressions tracking. If this method returns YES, the -/// Google Mobile Ads SDK will not track user impressions and the adapter must notify the -/// Google Mobile Ads SDK of impressions using +[GADMediatedNativeAdNotificationSource -/// mediatedNativeAdDidRecordImpression:]. If this method returns NO, -/// the Google Mobile Ads SDK tracks user impressions and notifies the adapter of impressions -/// using -[GADMediatedNativeAdDelegate mediatedNativeAdDidRecordImpression:]. -- (BOOL)handlesUserImpressions; - -/// If your ad network handles multiple ad sizes for the same banner ad, implement this method to -/// know when the user changes the banner size. This is typically changing from -/// kGADAdSizeSmartBannerPortrait to kGADAdSizeSmartBannerLandscape, or vice versa. If this method -/// is not implemented, every time the user changes the ad size, a new ad will be requested with the -/// new size by calling your getBannerWithSize: method. -- (void)changeAdSizeTo:(GADAdSize)adSize; - -@end diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMAdNetworkConnectorProtocol.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMAdNetworkConnectorProtocol.h deleted file mode 100755 index a020edf3d..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMAdNetworkConnectorProtocol.h +++ /dev/null @@ -1,99 +0,0 @@ -// -// GADMAdNetworkConnectorProtocol.h -// Google Mobile Ads SDK -// -// Copyright 2011 Google. All rights reserved. -// - -#import -#import - -#import "GADMediationAdRequest.h" - -@protocol GADMAdNetworkAdapter; - -/// Ad network adapters interact with the mediation SDK using an object that implements the -/// GADMAdNetworkConnector protocol. The connector object can be used to obtain necessary -/// information for ad requests, and to call back to the mediation SDK on ad request returns and -/// user interactions. -@protocol GADMAdNetworkConnector - -/// When you need to show a landing page or any other modal view, such as when a user clicks or when -/// your Ads SDK needs to show an interstitial, use this method to obtain a UIViewController that -/// you can use to show your modal view. Call the -presentViewController:animated:completion: method -/// of the returned UIViewController . -- (UIViewController *)viewControllerForPresentingModalView; - -/// Returns the preferred ad volume as a fraction of system volume (0.0 to 1.0). -- (float)adVolume; - -/// Returns whether the ad should be muted. -- (BOOL)adMuted; - -#pragma mark - Adapter Callbacks - -/// Tells the connector that the adapter failed to receive an ad. -- (void)adapter:(id)adapter didFailAd:(NSError *)error; - -/// Tells the connector that the adapter received a banner ad. -- (void)adapter:(id)adapter didReceiveAdView:(UIView *)view; - -/// Tells the connector that the adapter received an interstitial. -- (void)adapterDidReceiveInterstitial:(id)adapter; - -/// Tells the connector that the adapter has received a mediated native ad. |mediatedNativeAd| is -/// used by the Google Mobile Ads SDK to construct a native ad object. -- (void)adapter:(id)adapter - didReceiveMediatedNativeAd:(id)mediatedNativeAd; - -/// Tells the connector that the adapter has received a unified mediated native ad. -/// mediatedUnifiedNativeAd is used by the Google Mobile Ads SDK to construct a unified native ad -/// object. -- (void)adapter:(id)adapter - didReceiveMediatedUnifiedNativeAd:(id)mediatedUnifiedNativeAd; - -#pragma mark Ad events - -// Adapter should call as many of these as possible, during the lifecycle of the loaded banner or -// interstitial ad. - -/// Tells the connector that the adapter recorded a user click. -- (void)adapterDidGetAdClick:(id)adapter; -/// Tells the connector that the adapter will leave the application because of a user action. -- (void)adapterWillLeaveApplication:(id)adapter; - -// Adapter should call as many of these as possible, during the lifecycle of the loaded banner ad. - -/// Tells the connector that the adapter will present a full screen modal. -- (void)adapterWillPresentFullScreenModal:(id)adapter; -/// Tells the connector that the adapter will dismiss a full screen modal. -- (void)adapterWillDismissFullScreenModal:(id)adapter; -/// Tells the connector that the adapter dismissed a full screen modal. -- (void)adapterDidDismissFullScreenModal:(id)adapter; - -// Adapter should call these methods during the lifecycle of the loaded interstitial ad. - -/// Tells the connector that the adapter will present an interstitial. -- (void)adapterWillPresentInterstitial:(id)adapter; -/// Tells the connector that the adapter will dismiss an interstitial. -- (void)adapterWillDismissInterstitial:(id)adapter; -/// Tells the connector that the adapter did dismiss an interstitial. -- (void)adapterDidDismissInterstitial:(id)adapter; - -#pragma mark Deprecated - -/// Deprecated. Use -adapterDidReceiveInterstitial:. -- (void)adapter:(id)adapter - didReceiveInterstitial:(NSObject *)interstitial - GAD_DEPRECATED_MSG_ATTRIBUTE("Use -adapterDidReceiveInterstitial:."); - -/// Deprecated. Use -adapterDidGetAdClick:. -- (void)adapter:(id)adapter - clickDidOccurInBanner:(UIView *)view - GAD_DEPRECATED_MSG_ATTRIBUTE("Use -adapterDidGetAdClick:."); - -/// Deprecated. Use -adapter:didFailAd:. -- (void)adapter:(id)adapter - didFailInterstitial:(NSError *)error GAD_DEPRECATED_MSG_ATTRIBUTE("Use -adapter:didFailAd:"); - -@end diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMEnums.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMEnums.h deleted file mode 100755 index 1802598c2..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMEnums.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// GADMEnums.h -// Google Mobile Ads SDK -// -// Copyright 2011 Google. All rights reserved. -// - -#import - -/// These are the types of animation we employ for transitions between two mediated ads. -typedef NS_ENUM(NSInteger, GADMBannerAnimationType) { - kGADMBannerAnimationTypeNone = 0, ///< No animation. - kGADMBannerAnimationTypeFlipFromLeft = 1, ///< Flip from left. - kGADMBannerAnimationTypeFlipFromRight = 2, ///< Flip from right. - kGADMBannerAnimationTypeCurlUp = 3, ///< Curl up. - kGADMBannerAnimationTypeCurlDown = 4, ///< Curl down. - kGADMBannerAnimationTypeSlideFromLeft = 5, ///< Slide from left. - kGADMBannerAnimationTypeSlideFromRight = 6, ///< Slide from right. - kGADMBannerAnimationTypeFadeIn = 7, ///< Fade in. - kGADMBannerAnimationTypeRandom = 8, ///< Random animation. -}; diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMRewardBasedVideoAdNetworkAdapterProtocol.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMRewardBasedVideoAdNetworkAdapterProtocol.h deleted file mode 100755 index 6eb05f1c3..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMRewardBasedVideoAdNetworkAdapterProtocol.h +++ /dev/null @@ -1,67 +0,0 @@ -// -// GADMRewardBasedVideoAdNetworkAdapter.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google. All rights reserved. -// - -#import - -@protocol GADMRewardBasedVideoAdNetworkConnector; - -/// Your adapter must conform to this protocol to provide reward based video ads. -@protocol GADMRewardBasedVideoAdNetworkAdapter - -/// Returns a version string for the adapter. It can be any string that uniquely identifies the -/// version of your adapter. For example, "1.0", or simply a date such as "20110915". -+ (NSString *)adapterVersion; - -/// The extras class that is used to specify additional parameters for a request to this ad network. -/// Returns Nil if the network does not have extra settings for publishers to send. -+ (Class)networkExtrasClass; - -/// Returns an initialized instance of the adapter when mediation ad requests come in. The adapter -/// must only maintain a weak reference to the provided connector. -- (instancetype)initWithRewardBasedVideoAdNetworkConnector: - (id)connector; - -/// Tells the adapter to set up reward based video ads. The adapter should notify the Google Mobile -/// Ads SDK whether set up has succeeded or failed using callbacks provided in the connector. When -/// set up fails, the Google Mobile Ads SDK may try to set up the adapter again. -- (void)setUp; - -/// Tells the adapter to request a reward based video ad. This method is called after the adapter -/// has been set up. The adapter should notify the Google Mobile Ads SDK if the request succeeds or -/// fails using callbacks provided in the connector. -- (void)requestRewardBasedVideoAd; - -/// Tells the adapter to present the reward based video ad with the provided view controller. This -/// method is only called after the adapter successfully requested an ad. -- (void)presentRewardBasedVideoAdWithRootViewController:(UIViewController *)viewController; - -/// Tells the adapter to remove itself as a delegate or notification observer from the underlying ad -/// network SDK. -- (void)stopBeingDelegate; - -@optional - -/// Adapters that want to be initialized as early as possible should implement this method to -/// opt-into initialization when the publisher initializes the Google Mobile Ads SDK. If not -/// implemented, initWithRewardBasedVideoAdNetworkConnector: gets called the first time the -/// publisher loads a rewarded video ad. -- (instancetype)initWithRewardBasedVideoAdNetworkConnector: - (id)connector - credentials:(NSArray *)credentials; - -/// Returns an initialized instance of the adapter. The adapter must only maintain a weak reference -/// to the provided connector. -- (instancetype)initWithGADMAdNetworkConnector:(id)connector - GAD_DEPRECATED_MSG_ATTRIBUTE("Use initWithRewardBasedVideoAdNetworkConnector:."); - -/// Tells the adapter to set up reward based video ads with the provided user ID. The adapter should -/// notify the Google Mobile Ads SDK whether set up has succeeded or failed using callbacks provided -/// in the connector. When set up fails, the Google Mobile Ads SDK may try to set up the adapter -/// again. -- (void)setUpWithUserID:(NSString *)userID GAD_DEPRECATED_MSG_ATTRIBUTE("Use setUp."); - -@end diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMRewardBasedVideoAdNetworkConnectorProtocol.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMRewardBasedVideoAdNetworkConnectorProtocol.h deleted file mode 100755 index d23ec4e06..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMRewardBasedVideoAdNetworkConnectorProtocol.h +++ /dev/null @@ -1,62 +0,0 @@ -// -// GADMRewardBasedVideoAdNetworkConnector.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google. All rights reserved. -// - -#import - -@protocol GADMediationAdRequest; -@protocol GADMRewardBasedVideoAdNetworkAdapter; - -/// Reward based video ad network adapters interact with the mediation SDK using an object that -/// conforms to the GADMRewardBasedVideoAdNetworkConnector protocol. The connector object can be -/// used to obtain information for ad requests and to call back to the mediation SDK on ad responses -/// and user interactions. -@protocol GADMRewardBasedVideoAdNetworkConnector - -/// Tells the delegate that the adapter successfully set up a reward based video ad. -- (void)adapterDidSetUpRewardBasedVideoAd: - (id)rewardBasedVideoAdAdapter; - -/// Tells the delegate that the adapter failed to set up a reward based video ad. -- (void)adapter:(id)rewardBasedVideoAdAdapter - didFailToSetUpRewardBasedVideoAdWithError:(NSError *)error; - -/// Tells the delegate that a reward based video ad was clicked. -- (void)adapterDidGetAdClick:(id)adapter; - -/// Tells the delegate that a reward based video ad has loaded. -- (void)adapterDidReceiveRewardBasedVideoAd: - (id)rewardBasedVideoAdAdapter; - -/// Tells the delegate that a reward based video ad has opened. -- (void)adapterDidOpenRewardBasedVideoAd: - (id)rewardBasedVideoAdAdapter; - -/// Tells the delegate that a reward based video ad has started playing. -- (void)adapterDidStartPlayingRewardBasedVideoAd: - (id)rewardBasedVideoAdAdapter; - -/// Tells the delegate that a reward based video ad has completed playing. -- (void)adapterDidCompletePlayingRewardBasedVideoAd: - (id)rewardBasedVideoAdAdapter; - -/// Tells the delegate that a reward based video ad has closed. -- (void)adapterDidCloseRewardBasedVideoAd: - (id)rewardBasedVideoAdAdapter; - -/// Tells the delegate that the adapter has rewarded the user. -- (void)adapter:(id)rewardBasedVideoAd - didRewardUserWithReward:(GADAdReward *)reward; - -/// Tells the delegate that a reward based video ad's action will leave the application. -- (void)adapterWillLeaveApplication: - (id)rewardBasedVideoAdAdapter; - -/// Tells the delegate that a reward based video ad failed to load. -- (void)adapter:(id)rewardBasedVideoAdAdapter - didFailToLoadRewardBasedVideoAdwithError:(NSError *)error; - -@end diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeAd.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeAd.h deleted file mode 100755 index 60507a47d..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeAd.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// GADMediatedNativeAd.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Base protocol for mediated native ads. -@protocol GADMediatedNativeAd - -/// Returns a delegate object that receives state change notifications. -- (nullable id)mediatedNativeAdDelegate; - -/// Returns a dictionary of asset names and object pairs for assets that are not handled by -/// properties of the GADMediatedNativeAd subclass. -- (nullable NSDictionary *)extraAssets; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeAdDelegate.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeAdDelegate.h deleted file mode 100755 index 94deed57a..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeAdDelegate.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// GADMediatedNativeAdDelegate.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -@protocol GADMediatedNativeAd; - -/// GADMediatedNativeAdDelegate objects handle mediated native ad events. -@protocol GADMediatedNativeAdDelegate - -@optional - -/// Tells the delegate that the mediated native ad has rendered in |view| with clickable asset views -/// and nonclickable asset views. viewController should be used to present modal views for the ad. -- (void)mediatedNativeAd:(id)mediatedNativeAd - didRenderInView:(UIView *)view - clickableAssetViews:(NSDictionary *)clickableAssetViews - nonclickableAssetViews:(NSDictionary *)nonclickableAssetViews - viewController:(UIViewController *)viewController; - -/// Tells the delegate that the mediated native ad has recorded an impression. This method is called -/// only once per mediated native ad. -- (void)mediatedNativeAdDidRecordImpression:(id)mediatedNativeAd; - -/// Tells the delegate that the mediated native ad has recorded a user click on the asset named -/// |assetName|. Full screen actions should be presented from |viewController|. This method is -/// called only if -[GADMAdNetworkAdapter handlesUserClicks] returns NO. -- (void)mediatedNativeAd:(id)mediatedNativeAd - didRecordClickOnAssetWithName:(NSString *)assetName - view:(UIView *)view - viewController:(UIViewController *)viewController; - -/// Tells the delegate that the mediated native ad has untracked |view|. This method is called -/// when the mediatedNativeAd is no longer rendered in the provided view and the delegate should -/// stop tracking the view's impressions and clicks. The method may also be called with a nil view -/// when the view in which the mediated native ad has rendered is deallocated. -- (void)mediatedNativeAd:(id)mediatedNativeAd - didUntrackView:(nullable UIView *)view; - -/// Tells the delegate that the mediated native ad has rendered in |view|. viewController should be -/// used to present modal views for the ad. -- (void)mediatedNativeAd:(id)mediatedNativeAd - didRenderInView:(UIView *)view - viewController:(UIViewController *)viewController GAD_DEPRECATED_MSG_ATTRIBUTE( - "Use " - "-mediatedNativeAd:didRenderInView:clickableAssetViews:" - "nonclickableAssetViews:viewController instead."); - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeAdNotificationSource.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeAdNotificationSource.h deleted file mode 100755 index 3e34d66ed..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeAdNotificationSource.h +++ /dev/null @@ -1,56 +0,0 @@ -// -// GADMediatedNativeAdNotificationSource.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Used by mediation adapters to notify the Google Mobile Ads SDK about events occurring in the -/// lifecycle of a GADMediatedNativeAd. -GAD_SUBCLASSING_RESTRICTED -@interface GADMediatedNativeAdNotificationSource : NSObject - -/// Called by the adapter when it has registered an impression on the tracked view. Adapter should -/// only call this method if -[GADMAdNetworkAdapter handlesUserImpressions] returns YES. -+ (void)mediatedNativeAdDidRecordImpression:(id)mediatedNativeAd; - -/// Called by the adapter when it has registered a user click on the tracked view. Adapter should -/// only call this method if -[GADMAdNetworkAdapter handlesUserClicks] returns YES. -+ (void)mediatedNativeAdDidRecordClick:(id)mediatedNativeAd; - -/// Must be called by the adapter just before mediatedNativeAd has opened an in-app modal screen. -+ (void)mediatedNativeAdWillPresentScreen:(id)mediatedNativeAd; - -/// Must be called by the adapter just before the in app modal screen opened by mediatedNativeAd is -/// dismissed. -+ (void)mediatedNativeAdWillDismissScreen:(id)mediatedNativeAd; - -/// Must be called by the adapter after the in app modal screen opened by mediatedNativeAd is -/// dismissed. -+ (void)mediatedNativeAdDidDismissScreen:(id)mediatedNativeAd; - -/// Must be called by the adapter just before mediatedNativeAd causes another app (such as a browser -/// or the App Store) to take input focus. -+ (void)mediatedNativeAdWillLeaveApplication:(id)mediatedNativeAd; - -#pragma mark - Mediated Native Video Ad Notifications - -/// Called by the adapter when native video playback has begun or resumed. -+ (void)mediatedNativeAdDidPlayVideo:(id)mediatedNativeAd; - -/// Called by the adapter when native video playback has paused. -+ (void)mediatedNativeAdDidPauseVideo:(id)mediatedNativeAd; - -/// Called by the adapter when native video playback has ended. -+ (void)mediatedNativeAdDidEndVideoPlayback:(id)mediatedNativeAd; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeAppInstallAd.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeAppInstallAd.h deleted file mode 100755 index 5526167f2..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeAppInstallAd.h +++ /dev/null @@ -1,58 +0,0 @@ -// -// GADMediatedNativeAppInstallAd.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Provides methods used for constructing native app install ads. The adapter must return an object -/// conforming to this protocol for native app install requests. -GAD_DEPRECATED_MSG_ATTRIBUTE("Use GADMediatedUnifiedNativeAd instead.") -@protocol GADMediatedNativeAppInstallAd - -/// App title. -- (nullable NSString *)headline; - -/// Array of GADNativeAdImage objects related to the advertised application. -- (nullable NSArray *)images; - -/// App description. -- (nullable NSString *)body; - -/// Application icon. -- (nullable GADNativeAdImage *)icon; - -/// Text that encourages user to take some action with the ad. For example "Install". -- (nullable NSString *)callToAction; - -/// App store rating (0 to 5). -- (nullable NSDecimalNumber *)starRating; - -/// The app store name. For example, "App Store". -- (nullable NSString *)store; - -/// String representation of the app's price. -- (nullable NSString *)price; - -@optional - -/// AdChoices view. -- (nullable UIView *)adChoicesView; - -/// Media view. -- (nullable UIView *)mediaView; - -/// Returns YES if the ad has video content. -- (BOOL)hasVideoContent; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeContentAd.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeContentAd.h deleted file mode 100755 index 336fa786a..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeContentAd.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// GADMediatedNativeContentAd.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google Inc. All rights reserved. -// - -#import - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Provides methods used for constructing native content ads. -GAD_DEPRECATED_MSG_ATTRIBUTE("Use GADMediatedUnifiedNativeAd instead.") -@protocol GADMediatedNativeContentAd - -/// Primary text headline. -- (nullable NSString *)headline; - -/// Secondary text. -- (nullable NSString *)body; - -/// List of large images. Each object is an instance of GADNativeAdImage. -- (nullable NSArray *)images; - -/// Small logo image. -- (nullable GADNativeAdImage *)logo; - -/// Text that encourages user to take some action with the ad. -- (nullable NSString *)callToAction; - -/// Identifies the advertiser. For example, the advertiser’s name or visible URL. -- (nullable NSString *)advertiser; - -@optional - -/// AdChoices view. -- (nullable UIView *)adChoicesView; - -/// Media view. -- (nullable UIView *)mediaView; - -/// Returns YES if the ad has video content. -- (BOOL)hasVideoContent; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedUnifiedNativeAd.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedUnifiedNativeAd.h deleted file mode 100755 index 0d66a8d84..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedUnifiedNativeAd.h +++ /dev/null @@ -1,90 +0,0 @@ -// -// GADMediatedUnifiedNativeAd.h -// Google Mobile Ads SDK -// -// Copyright 2017 Google Inc. All rights reserved. -// - -#import - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Provides methods used for constructing native ads. The adapter must return an object conforming -/// to this protocol for native ad requests. -@protocol GADMediatedUnifiedNativeAd - -/// Headline. -@property(nonatomic, readonly, copy, nullable) NSString *headline; - -/// Array of GADNativeAdImage objects. -@property(nonatomic, readonly, nullable) NSArray *images; - -/// Description. -@property(nonatomic, readonly, copy, nullable) NSString *body; - -/// Icon image. -@property(nonatomic, readonly, nullable) GADNativeAdImage *icon; - -/// Text that encourages user to take some action with the ad. For example "Install". -@property(nonatomic, readonly, copy, nullable) NSString *callToAction; - -/// App store rating (0 to 5). -@property(nonatomic, readonly, copy, nullable) NSDecimalNumber *starRating; - -/// The app store name. For example, "App Store". -@property(nonatomic, readonly, copy, nullable) NSString *store; - -/// String representation of the app's price. -@property(nonatomic, readonly, copy, nullable) NSString *price; - -/// Identifies the advertiser. For example, the advertiser’s name or visible URL. -@property(nonatomic, readonly, copy, nullable) NSString *advertiser; - -/// Returns a dictionary of asset names and object pairs for assets that are not handled by -/// properties of the GADMediatedUnifiedNativeAd. -@property(nonatomic, readonly, copy, nullable) NSDictionary *extraAssets; - -@optional - -/// AdChoices view. -@property(nonatomic, readonly, nullable) UIView *adChoicesView; - -/// Media view. -@property(nonatomic, readonly, nullable) UIView *mediaView; - -/// Indicates whether the ad has video content. -@property(nonatomic, assign, readonly) BOOL hasVideoContent; - -/// Tells the receiver that it has been rendered in |view| with clickable asset views and -/// nonclickable asset views. viewController should be used to present modal views for the ad. -- (void)didRenderInView:(UIView *)view - clickableAssetViews: - (NSDictionary *)clickableAssetViews - nonclickableAssetViews: - (NSDictionary *)nonclickableAssetViews - viewController:(UIViewController *)viewController; - -/// Tells the receiver that an impression is recorded. This method is called only once per mediated -/// native ad. -- (void)didRecordImpression; - -/// Tells the receiver that a user click is recorded on the asset named |assetName|. Full screen -/// actions should be presented from viewController. This method is called only if -/// -[GADMAdNetworkAdapter handlesUserClicks] returns NO. -- (void)didRecordClickOnAssetWithName:(GADUnifiedNativeAssetIdentifier)assetName - view:(UIView *)view - viewController:(UIViewController *)viewController; - -/// Tells the receiver that it has untracked |view|. This method is called when the mediatedNativeAd -/// is no longer rendered in the provided view and the delegate should stop tracking the view's -/// impressions and clicks. The method may also be called with a nil view when the view in which the -/// mediated native ad has rendered is deallocated. -- (void)didUntrackView:(nullable UIView *)view; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedUnifiedNativeAdNotificationSource.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedUnifiedNativeAdNotificationSource.h deleted file mode 100755 index bfc740e6f..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedUnifiedNativeAdNotificationSource.h +++ /dev/null @@ -1,56 +0,0 @@ -// -// GADMediatedUnifiedNativeAdNotificationSource.h -// Google Mobile Ads SDK -// -// Copyright 2017 Google Inc. All rights reserved. -// - -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/// Used by mediation adapters to notify the Google Mobile Ads SDK about events occurring in the -/// lifecycle of a GADMediatedUnifiedNativeAd. -GAD_SUBCLASSING_RESTRICTED -@interface GADMediatedUnifiedNativeAdNotificationSource : NSObject - -/// Called by the adapter when it has registered an impression on the tracked view. Adapter should -/// only call this method if -[GADMAdNetworkAdapter handlesUserImpressions] returns YES. -+ (void)mediatedNativeAdDidRecordImpression:(id)mediatedNativeAd; - -/// Called by the adapter when it has registered a user click on the tracked view. Adapter should -/// only call this method if -[GADMAdNetworkAdapter handlesUserClicks] returns YES. -+ (void)mediatedNativeAdDidRecordClick:(id)mediatedNativeAd; - -/// Must be called by the adapter just before mediatedNativeAd has opened an in-app modal screen. -+ (void)mediatedNativeAdWillPresentScreen:(id)mediatedNativeAd; - -/// Must be called by the adapter just before the in app modal screen opened by mediatedNativeAd is -/// dismissed. -+ (void)mediatedNativeAdWillDismissScreen:(id)mediatedNativeAd; - -/// Must be called by the adapter after the in app modal screen opened by mediatedNativeAd is -/// dismissed. -+ (void)mediatedNativeAdDidDismissScreen:(id)mediatedNativeAd; - -/// Must be called by the adapter just before mediatedNativeAd causes another app (such as a browser -/// or the App Store) to take input focus. -+ (void)mediatedNativeAdWillLeaveApplication:(id)mediatedNativeAd; - -#pragma mark - Mediated Native Video Ad Notifications - -/// Called by the adapter when native video playback has begun or resumed. -+ (void)mediatedNativeAdDidPlayVideo:(id)mediatedNativeAd; - -/// Called by the adapter when native video playback has paused. -+ (void)mediatedNativeAdDidPauseVideo:(id)mediatedNativeAd; - -/// Called by the adapter when native video playback has ended. -+ (void)mediatedNativeAdDidEndVideoPlayback:(id)mediatedNativeAd; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediationAdRequest.h b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediationAdRequest.h deleted file mode 100755 index f994265e9..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediationAdRequest.h +++ /dev/null @@ -1,68 +0,0 @@ -// -// GADMediationAdRequest.h -// Google Mobile Ads SDK -// -// Copyright 2015 Google. All rights reserved. -// - -#import -#import - -/// Provides information which can be used for making ad requests during mediation. -@protocol GADMediationAdRequest - -/// Publisher ID set by the publisher on the AdMob frontend. -- (NSString *)publisherId; - -/// Mediation configurations set by the publisher on the AdMob frontend. -- (NSDictionary *)credentials; - -/// Returns YES if the publisher is requesting test ads. -- (BOOL)testMode; - -/// The adapter's ad network extras specified in GADRequest. -- (id)networkExtras; - -/// Returns the value of childDirectedTreatment supplied by the publisher. Returns nil if the -/// publisher hasn't specified child directed treatment. Returns @YES if child directed treatment is -/// enabled. -- (NSNumber *)childDirectedTreatment; - -/// Returns the maximum ad content rating supplied by the publisher. Returns nil if the publisher -/// hasn't specified a max ad content rating. -- (GADMaxAdContentRating)maxAdContentRating; - -/// Returns the value of underAgeOfConsent supplied by the publisher. Returns nil if the publisher -/// hasn't specified the user is under the age of consent. Returns @YES if the user is under the age -/// of consent. -- (NSNumber *)underAgeOfConsent; - -/// Returns YES if the publisher has specified latitude and longitude location. -- (BOOL)userHasLocation; - -/// Returns the user's latitude or 0 if location isn't specified. -- (CGFloat)userLatitude; - -/// Returns the user's longitude or 0 if location isn't specified. -- (CGFloat)userLongitude; - -/// Returns the user's location accuracy or 0 if location isn't specified. -- (CGFloat)userLocationAccuracyInMeters; - -/// Returns user's location description. May return a value even if userHasLocation is NO. -- (NSString *)userLocationDescription; - -/// Keywords describing the user's current activity. Example: @"Sport Scores". -- (NSArray *)userKeywords; - -#pragma mark Deprecated - -/// Deprecated. The end user's gender set by the publisher in GADRequest. Returns kGADGenderUnknown -/// if it has not been specified. -- (GADGender)userGender GAD_DEPRECATED_ATTRIBUTE; - -/// Deprecated. The end user's birthday set by the publisher. Returns nil if it has not been -/// specified. -- (NSDate *)userBirthday GAD_DEPRECATED_ATTRIBUTE; - -@end diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Modules/module.modulemap b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Modules/module.modulemap deleted file mode 100755 index 846db21a2..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Modules/module.modulemap +++ /dev/null @@ -1,130 +0,0 @@ -framework module GoogleMobileAds { - umbrella header "GoogleMobileAds.h" - - export * - module * { export * } - - link "sqlite3" - link "z" - - link framework "AdSupport" - link framework "AudioToolbox" - link framework "AVFoundation" - link framework "CFNetwork" - link framework "CoreGraphics" - link framework "CoreMedia" - link framework "CoreMotion" - link framework "CoreTelephony" - link framework "CoreVideo" - link framework "Foundation" - link framework "GLKit" - link framework "JavaScriptCore" - link framework "MediaPlayer" - link framework "MessageUI" - link framework "MobileCoreServices" - link framework "OpenGLES" - link framework "QuartzCore" - link framework "SafariServices" - link framework "Security" - link framework "StoreKit" - link framework "SystemConfiguration" - link framework "UIKit" - link framework "WebKit" - - header "GoogleMobileAdsDefines.h" - - header "GADAdNetworkExtras.h" - header "GADAdSize.h" - header "GADAudioVideoManager.h" - header "GADAudioVideoManagerDelegate.h" - header "GADBannerView.h" - header "GADBannerViewDelegate.h" - header "GADCorrelator.h" - header "GADCorrelatorAdLoaderOptions.h" - header "GADDebugOptionsViewController.h" - header "GADExtras.h" - header "GADInAppPurchase.h" - header "GADInAppPurchaseDelegate.h" - header "GADInterstitial.h" - header "GADInterstitialDelegate.h" - header "GADMediaView.h" - header "GADMobileAds.h" - header "GADNativeExpressAdView.h" - header "GADNativeExpressAdViewDelegate.h" - header "GADRequest.h" - header "GADRequestConfiguration.h" - header "GADRequestError.h" - header "GADVideoController.h" - header "GADVideoControllerDelegate.h" - header "GADVideoOptions.h" - - header "DFPBannerView.h" - header "DFPBannerViewOptions.h" - header "DFPCustomRenderedAd.h" - header "DFPCustomRenderedBannerViewDelegate.h" - header "DFPCustomRenderedInterstitialDelegate.h" - header "DFPInterstitial.h" - header "DFPRequest.h" - header "GADAdSizeDelegate.h" - header "GADAppEventDelegate.h" - - header "GADAdLoader.h" - header "GADAdLoaderAdTypes.h" - header "GADAdLoaderDelegate.h" - - header "GADAdChoicesView.h" - header "GADNativeAd.h" - header "GADNativeAdDelegate.h" - header "GADNativeAdImage.h" - header "GADNativeAdImage+Mediation.h" - header "GADNativeAppInstallAd.h" - header "GADNativeAppInstallAdAssetIDs.h" - header "GADNativeContentAd.h" - header "GADNativeContentAdAssetIDs.h" - header "GADNativeCustomTemplateAd.h" - header "GADUnifiedNativeAd.h" - header "GADUnifiedNativeAd+ConfirmationClick.h" - header "GADUnifiedNativeAd+CustomClickGesture.h" - header "GADUnifiedNativeAdAssetIdentifiers.h" - header "GADUnifiedNativeAdDelegate.h" - header "GADUnifiedNativeAdUnconfirmedClickDelegate.h" - - header "GADMultipleAdsAdLoaderOptions.h" - header "GADMuteThisAdReason.h" - header "GADNativeAdImageAdLoaderOptions.h" - header "GADNativeAdViewAdOptions.h" - header "GADNativeMuteThisAdLoaderOptions.h" - - header "GADCustomEventBanner.h" - header "GADCustomEventBannerDelegate.h" - header "GADCustomEventExtras.h" - header "GADCustomEventInterstitial.h" - header "GADCustomEventInterstitialDelegate.h" - header "GADCustomEventNativeAd.h" - header "GADCustomEventNativeAdDelegate.h" - header "GADCustomEventParameters.h" - header "GADCustomEventRequest.h" - - header "GADDynamicHeightSearchRequest.h" - header "GADSearchBannerView.h" - header "GADSearchRequest.h" - - header "GADAdReward.h" - header "GADRewardBasedVideoAd.h" - header "GADRewardBasedVideoAdDelegate.h" - - header "Mediation/GADMAdNetworkAdapterProtocol.h" - header "Mediation/GADMAdNetworkConnectorProtocol.h" - header "Mediation/GADMediatedNativeAd.h" - header "Mediation/GADMediatedNativeAdDelegate.h" - header "Mediation/GADMediatedNativeAdNotificationSource.h" - header "Mediation/GADMediatedNativeAppInstallAd.h" - header "Mediation/GADMediatedNativeContentAd.h" - header "Mediation/GADMediatedUnifiedNativeAd.h" - header "Mediation/GADMediatedUnifiedNativeAdNotificationSource.h" - header "Mediation/GADMediationAdRequest.h" - header "Mediation/GADMEnums.h" - header "Mediation/GADMRewardBasedVideoAdNetworkAdapterProtocol.h" - header "Mediation/GADMRewardBasedVideoAdNetworkConnectorProtocol.h" - -} diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Libraries/libGoogleMobileAds.a b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Libraries/libGoogleMobileAds.a deleted file mode 100755 index ed313e905..000000000 Binary files a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/Libraries/libGoogleMobileAds.a and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/README.txt b/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/README.txt deleted file mode 100755 index 4a3f0bd9d..000000000 --- a/examples/PrebidMobileDemo/Pods/Google-Mobile-Ads-SDK/README.txt +++ /dev/null @@ -1,12 +0,0 @@ -============================= -Google Mobile Ads SDK for iOS -============================= - -This is the Google Mobile Ads SDK for iOS. - -Requirements: -- Xcode 8.0 or later. -- iOS deployment target of iOS 6.0 or later. - -The latest documentation and code samples are available at: -https://firebase.google.com/docs/admob/ios/quick-start diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBAVPlayer.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBAVPlayer.h deleted file mode 120000 index 0b71b08b8..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBAVPlayer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBAVPlayerView.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBAVPlayerView.h deleted file mode 120000 index 5fdd522d6..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBAVPlayerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBActivityIndicatorView.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBActivityIndicatorView.h deleted file mode 120000 index d4ff42b8a..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBActivityIndicatorView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBDisplayAgentType.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBDisplayAgentType.h deleted file mode 120000 index 7ba52c060..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBDisplayAgentType.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MOPUBDisplayAgentType.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBExperimentProvider.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBExperimentProvider.h deleted file mode 120000 index 0bc50681e..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBExperimentProvider.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBFullscreenPlayerViewController.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBFullscreenPlayerViewController.h deleted file mode 120000 index 0d6f51546..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBFullscreenPlayerViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBNativeVideoAdAdapter.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBNativeVideoAdAdapter.h deleted file mode 120000 index 086cc11df..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBNativeVideoAdAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBNativeVideoAdConfigValues.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBNativeVideoAdConfigValues.h deleted file mode 120000 index fb32a614b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBNativeVideoAdConfigValues.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBNativeVideoAdRenderer.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBNativeVideoAdRenderer.h deleted file mode 120000 index ad99350a8..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBNativeVideoAdRenderer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBNativeVideoAdRendererSettings.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBNativeVideoAdRendererSettings.h deleted file mode 120000 index 05124380e..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBNativeVideoAdRendererSettings.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBNativeVideoCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBNativeVideoCustomEvent.h deleted file mode 120000 index e79edfdb6..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBNativeVideoCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBNativeVideoImpressionAgent.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBNativeVideoImpressionAgent.h deleted file mode 120000 index 8b9dfd795..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBNativeVideoImpressionAgent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoImpressionAgent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBPlayerManager.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBPlayerManager.h deleted file mode 120000 index be64d2eb3..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBPlayerManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBPlayerView.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBPlayerView.h deleted file mode 120000 index d3c340e61..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBPlayerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBPlayerViewController.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBPlayerViewController.h deleted file mode 120000 index 56fa56f23..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBPlayerViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBReplayView.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBReplayView.h deleted file mode 120000 index de9a4f7c4..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MOPUBReplayView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBReplayView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAPIEndpoints.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAPIEndpoints.h deleted file mode 120000 index 53eee46eb..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAPIEndpoints.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPAPIEndpoints.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPActivityViewControllerHelper+TweetShare.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPActivityViewControllerHelper+TweetShare.h deleted file mode 120000 index 6801fdcbe..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPActivityViewControllerHelper+TweetShare.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPActivityViewControllerHelper.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPActivityViewControllerHelper.h deleted file mode 120000 index d9b30c566..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPActivityViewControllerHelper.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdAlertGestureRecognizer.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdAlertGestureRecognizer.h deleted file mode 120000 index 561df92b3..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdAlertGestureRecognizer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdAlertManager.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdAlertManager.h deleted file mode 120000 index 9ecddde64..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdAlertManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdBrowserController.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdBrowserController.h deleted file mode 120000 index 705e4c387..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdBrowserController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdBrowserController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdConfiguration.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdConfiguration.h deleted file mode 120000 index 4436807bf..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdConfiguration.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdConfiguration.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdConversionTracker.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdConversionTracker.h deleted file mode 120000 index 78ef644e8..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdConversionTracker.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPAdConversionTracker.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdDestinationDisplayAgent.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdDestinationDisplayAgent.h deleted file mode 120000 index 18ed9414b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdDestinationDisplayAgent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdImpressionTimer.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdImpressionTimer.h deleted file mode 120000 index d8ac87531..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdImpressionTimer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdPlacerInvocation.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdPlacerInvocation.h deleted file mode 120000 index 7c7b8f9f8..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdPlacerInvocation.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdPositioning.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdPositioning.h deleted file mode 120000 index ab0e3732b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdPositioning.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPAdPositioning.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdServerCommunicator.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdServerCommunicator.h deleted file mode 120000 index b8c75270f..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdServerCommunicator.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerCommunicator.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdServerKeys.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdServerKeys.h deleted file mode 120000 index 9e6929327..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdServerKeys.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPAdServerKeys.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdServerURLBuilder.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdServerURLBuilder.h deleted file mode 120000 index 26e384543..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdServerURLBuilder.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerURLBuilder.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdTargeting.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdTargeting.h deleted file mode 120000 index 7f1347e02..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdTargeting.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPAdTargeting.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdView.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdView.h deleted file mode 120000 index 1c080476c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPAdView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdWebViewAgent.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdWebViewAgent.h deleted file mode 120000 index 920feb131..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdWebViewAgent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdvancedBidder.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdvancedBidder.h deleted file mode 120000 index 5f3a8efde..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdvancedBidder.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPAdvancedBidder.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdvancedBiddingManager.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdvancedBiddingManager.h deleted file mode 120000 index de9ad2777..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAdvancedBiddingManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPAdvancedBiddingManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAnalyticsTracker.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAnalyticsTracker.h deleted file mode 120000 index 5590e2d95..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPAnalyticsTracker.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPAnalyticsTracker.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBannerAdManager.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBannerAdManager.h deleted file mode 120000 index 8a1044e07..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBannerAdManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBannerAdManagerDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBannerAdManagerDelegate.h deleted file mode 120000 index 0f43c8ccc..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBannerAdManagerDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManagerDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBannerCustomEvent+Internal.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBannerCustomEvent+Internal.h deleted file mode 120000 index 412186645..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBannerCustomEvent+Internal.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBannerCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBannerCustomEvent.h deleted file mode 120000 index ab58b4251..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBannerCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPBannerCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBannerCustomEventAdapter.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBannerCustomEventAdapter.h deleted file mode 120000 index 426f7b4fa..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBannerCustomEventAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBannerCustomEventDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBannerCustomEventDelegate.h deleted file mode 120000 index 660948951..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBannerCustomEventDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPBannerCustomEventDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBaseBannerAdapter.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBaseBannerAdapter.h deleted file mode 120000 index 8b81ec176..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBaseBannerAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBaseInterstitialAdapter.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBaseInterstitialAdapter.h deleted file mode 120000 index 96e9f4646..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBaseInterstitialAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBool.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBool.h deleted file mode 120000 index 943e7e84c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPBool.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPBool.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPClientAdPositioning.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPClientAdPositioning.h deleted file mode 120000 index cd55a0488..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPClientAdPositioning.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPClientAdPositioning.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPClosableView.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPClosableView.h deleted file mode 120000 index ae9c69c4e..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPClosableView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPCollectionViewAdPlacer.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPCollectionViewAdPlacer.h deleted file mode 120000 index e4fda86d4..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPCollectionViewAdPlacer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPCollectionViewAdPlacer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPCollectionViewAdPlacerCell.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPCollectionViewAdPlacerCell.h deleted file mode 120000 index bf787d9c7..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPCollectionViewAdPlacerCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConsentChangedNotification.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConsentChangedNotification.h deleted file mode 120000 index e1640e61f..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConsentChangedNotification.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPConsentChangedNotification.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConsentChangedReason.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConsentChangedReason.h deleted file mode 120000 index 2224e3232..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConsentChangedReason.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPConsentChangedReason.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConsentDialogViewController.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConsentDialogViewController.h deleted file mode 120000 index b63fe6c02..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConsentDialogViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConsentError.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConsentError.h deleted file mode 120000 index 55d45f259..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConsentError.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPConsentError.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConsentManager.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConsentManager.h deleted file mode 120000 index 269ac504b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConsentManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConsentStatus.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConsentStatus.h deleted file mode 120000 index c2feef2d2..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConsentStatus.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPConsentStatus.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConstants.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConstants.h deleted file mode 120000 index 45618473a..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPConstants.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPCoreInstanceProvider+MRAID.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPCoreInstanceProvider+MRAID.h deleted file mode 120000 index fdffd8f3c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPCoreInstanceProvider+MRAID.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPCoreInstanceProvider.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPCoreInstanceProvider.h deleted file mode 120000 index fe2451475..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPCoreInstanceProvider.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPCountdownTimerView.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPCountdownTimerView.h deleted file mode 120000 index dd498efbf..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPCountdownTimerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPCountdownTimerView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPDiskLRUCache.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPDiskLRUCache.h deleted file mode 120000 index 5a63fb103..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPDiskLRUCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPDiskLRUCache.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPEnhancedDeeplinkRequest.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPEnhancedDeeplinkRequest.h deleted file mode 120000 index 47763a70d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPEnhancedDeeplinkRequest.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPError.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPError.h deleted file mode 120000 index bf13ee3e7..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPError.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPError.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPForceableOrientationProtocol.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPForceableOrientationProtocol.h deleted file mode 120000 index 0897c3352..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPForceableOrientationProtocol.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPForceableOrientationProtocol.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPGeolocationProvider.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPGeolocationProvider.h deleted file mode 120000 index c99579608..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPGeolocationProvider.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPGlobal.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPGlobal.h deleted file mode 120000 index 2683ac19d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPGlobal.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPHTMLBannerCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPHTMLBannerCustomEvent.h deleted file mode 120000 index 702829d27..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPHTMLBannerCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPHTMLInterstitialCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPHTMLInterstitialCustomEvent.h deleted file mode 120000 index 52663cfe5..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPHTMLInterstitialCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPHTMLInterstitialViewController.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPHTMLInterstitialViewController.h deleted file mode 120000 index bfe62b9e7..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPHTMLInterstitialViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPHTTPNetworkSession.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPHTTPNetworkSession.h deleted file mode 120000 index b4c01947d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPHTTPNetworkSession.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPHTTPNetworkTaskData.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPHTTPNetworkTaskData.h deleted file mode 120000 index ad8ed8dc3..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPHTTPNetworkTaskData.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPIdentityProvider.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPIdentityProvider.h deleted file mode 120000 index c55c85004..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPIdentityProvider.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPImageDownloadQueue.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPImageDownloadQueue.h deleted file mode 120000 index 9aedc87dc..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPImageDownloadQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPImageDownloadQueue.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInternalUtils.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInternalUtils.h deleted file mode 120000 index f1bdeef11..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInternalUtils.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPInternalUtils.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialAdController.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialAdController.h deleted file mode 120000 index 17bd0aa14..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialAdController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPInterstitialAdController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialAdManager.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialAdManager.h deleted file mode 120000 index 29d80a735..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialAdManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialAdManagerDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialAdManagerDelegate.h deleted file mode 120000 index 508797cb1..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialAdManagerDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManagerDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialCustomEvent.h deleted file mode 120000 index ab2aabe38..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialCustomEventAdapter.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialCustomEventAdapter.h deleted file mode 120000 index 7e7c78cc9..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialCustomEventAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialCustomEventDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialCustomEventDelegate.h deleted file mode 120000 index 81a8ba951..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialCustomEventDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEventDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialViewController.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialViewController.h deleted file mode 120000 index fd9cca359..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPInterstitialViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPLastResortDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPLastResortDelegate.h deleted file mode 120000 index fd0d6fcb8..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPLastResortDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPLogLevel.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPLogLevel.h deleted file mode 120000 index 38ea73650..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPLogLevel.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPLogLevel.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPLogProvider.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPLogProvider.h deleted file mode 120000 index 51dcf6d7d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPLogProvider.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPLogProvider.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPLogging.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPLogging.h deleted file mode 120000 index 0e9608a54..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPLogging.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPLogging.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMRAIDBannerCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMRAIDBannerCustomEvent.h deleted file mode 120000 index b8a18457c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMRAIDBannerCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMRAIDInterstitialCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMRAIDInterstitialCustomEvent.h deleted file mode 120000 index 2c19035db..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMRAIDInterstitialCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMRAIDInterstitialViewController.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMRAIDInterstitialViewController.h deleted file mode 120000 index c63f77f6c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMRAIDInterstitialViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMediationManager.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMediationManager.h deleted file mode 120000 index 6e1339f9f..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMediationManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPMediationManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMediationSdkInitializable.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMediationSdkInitializable.h deleted file mode 120000 index c980e9bcc..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMediationSdkInitializable.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPMediationSdkInitializable.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMediationSettingsProtocol.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMediationSettingsProtocol.h deleted file mode 120000 index a22f39d1a..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMediationSettingsProtocol.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPMediationSettingsProtocol.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMemoryCache.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMemoryCache.h deleted file mode 120000 index 1c80c66f6..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMemoryCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPMemoryCache.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMoPubConfiguration.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMoPubConfiguration.h deleted file mode 120000 index 49bbcfb49..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMoPubConfiguration.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPMoPubConfiguration.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMoPubNativeAdAdapter.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMoPubNativeAdAdapter.h deleted file mode 120000 index 13712b624..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMoPubNativeAdAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMoPubNativeCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMoPubNativeCustomEvent.h deleted file mode 120000 index f61b314c7..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMoPubNativeCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMoPubRewardedPlayableCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMoPubRewardedPlayableCustomEvent.h deleted file mode 120000 index 55499fd1b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMoPubRewardedPlayableCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMoPubRewardedVideoCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMoPubRewardedVideoCustomEvent.h deleted file mode 120000 index de36b1d46..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPMoPubRewardedVideoCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAd+Internal.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAd+Internal.h deleted file mode 120000 index 8a3e51e36..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAd+Internal.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAd.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAd.h deleted file mode 120000 index 4de4e8260..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdAdapter.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdAdapter.h deleted file mode 120000 index e3f55c7e4..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdAdapter.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdConfigValues+Internal.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdConfigValues+Internal.h deleted file mode 120000 index acd647390..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdConfigValues+Internal.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdConfigValues.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdConfigValues.h deleted file mode 120000 index e244ace9e..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdConfigValues.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdConstants.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdConstants.h deleted file mode 120000 index edc5043b0..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdConstants.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdData.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdData.h deleted file mode 120000 index f57db0e01..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdData.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdData.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdDelegate.h deleted file mode 120000 index 93b48b4da..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdError.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdError.h deleted file mode 120000 index c866f3bf6..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdError.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdError.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRenderer.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRenderer.h deleted file mode 120000 index 8813c8533..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRenderer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRendererConfiguration.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRendererConfiguration.h deleted file mode 120000 index e16dd903f..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRendererConfiguration.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRendererConstants.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRendererConstants.h deleted file mode 120000 index 3c900472b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRendererConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererConstants.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRendererImageHandler.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRendererImageHandler.h deleted file mode 120000 index 90f0869a4..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRendererImageHandler.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRendererSettings.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRendererSettings.h deleted file mode 120000 index 95f531cd3..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRendererSettings.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererSettings.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRendering.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRendering.h deleted file mode 120000 index 4d98f994c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRendering.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendering.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRenderingImageLoader.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRenderingImageLoader.h deleted file mode 120000 index 97b16dc5b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRenderingImageLoader.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRequest+MPNativeAdSource.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRequest+MPNativeAdSource.h deleted file mode 120000 index 36d2608d4..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRequest+MPNativeAdSource.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/Categories/MPNativeAdRequest+MPNativeAdSource.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRequest.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRequest.h deleted file mode 120000 index 8b34d935c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRequest.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequest.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRequestTargeting.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRequestTargeting.h deleted file mode 120000 index 8b0dac341..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdRequestTargeting.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequestTargeting.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdSource.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdSource.h deleted file mode 120000 index c36e638da..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdSource.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSource.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdSourceDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdSourceDelegate.h deleted file mode 120000 index 910619dbd..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdSourceDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSourceDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdSourceQueue.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdSourceQueue.h deleted file mode 120000 index e0a346cc5..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdSourceQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdUtils.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdUtils.h deleted file mode 120000 index 1c784028c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeAdUtils.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdUtils.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeCache.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeCache.h deleted file mode 120000 index 000f001ff..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeCache.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeCustomEvent.h deleted file mode 120000 index 78a9cc731..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeCustomEventDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeCustomEventDelegate.h deleted file mode 120000 index 6b94a1b98..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeCustomEventDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEventDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativePositionResponseDeserializer.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativePositionResponseDeserializer.h deleted file mode 120000 index dabde2963..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativePositionResponseDeserializer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativePositionSource.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativePositionSource.h deleted file mode 120000 index b8cb9bfe3..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativePositionSource.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionSource.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeView.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeView.h deleted file mode 120000 index f3a823018..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPNativeView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPPrivateBannerCustomEventDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPPrivateBannerCustomEventDelegate.h deleted file mode 120000 index 893f3e198..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPPrivateBannerCustomEventDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Banners/MPPrivateBannerCustomEventDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPPrivateInterstitialCustomEventDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPPrivateInterstitialCustomEventDelegate.h deleted file mode 120000 index 9629fec71..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPPrivateInterstitialCustomEventDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPPrivateInterstitialCustomEventDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPPrivateRewardedVideoCustomEventDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPPrivateRewardedVideoCustomEventDelegate.h deleted file mode 120000 index 4227b4a90..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPPrivateRewardedVideoCustomEventDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPPrivateRewardedVideoCustomEventDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPProgressOverlayView.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPProgressOverlayView.h deleted file mode 120000 index 57e8125d8..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPProgressOverlayView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPProgressOverlayView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPReachability.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPReachability.h deleted file mode 120000 index 51b202989..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPReachability.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPReachability.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPReachabilityManager.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPReachabilityManager.h deleted file mode 120000 index 24e84d53d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPReachabilityManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPReachabilityManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRealTimeTimer.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRealTimeTimer.h deleted file mode 120000 index 0c12956fd..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRealTimeTimer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideo+Internal.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideo+Internal.h deleted file mode 120000 index 92705794c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideo+Internal.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideo+Internal.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideo.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideo.h deleted file mode 120000 index ab38a0e30..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideo.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideo.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoAdManager.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoAdManager.h deleted file mode 120000 index ff7fce018..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoAdManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoAdapter.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoAdapter.h deleted file mode 120000 index 1d8851cc9..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoConnection.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoConnection.h deleted file mode 120000 index b16b92128..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoConnection.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoCustomEvent+Caching.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoCustomEvent+Caching.h deleted file mode 120000 index b43924445..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoCustomEvent+Caching.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent+Caching.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoCustomEvent.h deleted file mode 120000 index edda68812..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoError.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoError.h deleted file mode 120000 index 6c669ce6e..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoError.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoError.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoReward.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoReward.h deleted file mode 120000 index f1b4dfe8d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPRewardedVideoReward.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoReward.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPServerAdPositioning.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPServerAdPositioning.h deleted file mode 120000 index e90a003dc..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPServerAdPositioning.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPServerAdPositioning.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPSessionTracker.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPSessionTracker.h deleted file mode 120000 index a34351f7c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPSessionTracker.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPSessionTracker.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPStaticNativeAdRenderer.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPStaticNativeAdRenderer.h deleted file mode 120000 index 4c65838a2..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPStaticNativeAdRenderer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRenderer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPStaticNativeAdRendererSettings.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPStaticNativeAdRendererSettings.h deleted file mode 120000 index c9039746d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPStaticNativeAdRendererSettings.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPStoreKitProvider.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPStoreKitProvider.h deleted file mode 120000 index f76cf5781..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPStoreKitProvider.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPStoreKitProvider.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPStreamAdPlacementData.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPStreamAdPlacementData.h deleted file mode 120000 index 470f49b89..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPStreamAdPlacementData.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacementData.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPStreamAdPlacer.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPStreamAdPlacer.h deleted file mode 120000 index 6f5eadb38..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPStreamAdPlacer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPTableViewAdPlacer.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPTableViewAdPlacer.h deleted file mode 120000 index 1e557bcd5..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPTableViewAdPlacer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPTableViewAdPlacer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPTableViewAdPlacerCell.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPTableViewAdPlacerCell.h deleted file mode 120000 index 26cd681ab..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPTableViewAdPlacerCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPTableViewCellImpressionTracker.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPTableViewCellImpressionTracker.h deleted file mode 120000 index 57c4dd16a..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPTableViewCellImpressionTracker.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewCellImpressionTracker.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPTimer.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPTimer.h deleted file mode 120000 index 6f240c831..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPTimer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPTimer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPURL.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPURL.h deleted file mode 120000 index 54ebfa2e8..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPURL.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPURL.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPURLActionInfo.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPURLActionInfo.h deleted file mode 120000 index 1bcf3a863..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPURLActionInfo.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPURLRequest.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPURLRequest.h deleted file mode 120000 index 83ec2fd94..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPURLRequest.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPURLResolver.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPURLResolver.h deleted file mode 120000 index 20ec19a30..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPURLResolver.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPUserInteractionGestureRecognizer.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPUserInteractionGestureRecognizer.h deleted file mode 120000 index 36733cf80..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPUserInteractionGestureRecognizer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTAd.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTAd.h deleted file mode 120000 index cb969a2b0..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTCompanionAd.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTCompanionAd.h deleted file mode 120000 index acff2e9d2..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTCompanionAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCompanionAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTCreative.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTCreative.h deleted file mode 120000 index 8de5ef830..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTCreative.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCreative.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTDurationOffset.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTDurationOffset.h deleted file mode 120000 index d6635bf80..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTDurationOffset.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTDurationOffset.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTIndustryIcon.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTIndustryIcon.h deleted file mode 120000 index bbc5b3c68..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTIndustryIcon.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTIndustryIcon.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTInline.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTInline.h deleted file mode 120000 index d07568ad2..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTInline.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTInline.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTLinearAd.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTLinearAd.h deleted file mode 120000 index 3e0de64a1..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTLinearAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTLinearAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTMacroProcessor.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTMacroProcessor.h deleted file mode 120000 index 131df78bf..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTMacroProcessor.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTMacroProcessor.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTManager.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTManager.h deleted file mode 120000 index ffe2a8707..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTMediaFile.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTMediaFile.h deleted file mode 120000 index 208959376..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTMediaFile.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTMediaFile.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTModel.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTModel.h deleted file mode 120000 index 92de048c3..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTModel.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTResource.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTResource.h deleted file mode 120000 index a561625c5..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTResource.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResource.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTResponse.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTResponse.h deleted file mode 120000 index e6f5247f2..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTResponse.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResponse.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTStringUtilities.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTStringUtilities.h deleted file mode 120000 index 14cf0d87a..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTStringUtilities.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTStringUtilities.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTTracking.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTTracking.h deleted file mode 120000 index 7160aedd9..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTTracking.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPVASTTracking.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTTrackingEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTTrackingEvent.h deleted file mode 120000 index 421a7f075..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTTrackingEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTWrapper.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTWrapper.h deleted file mode 120000 index 849e8ebf5..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVASTWrapper.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTWrapper.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVideoConfig.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVideoConfig.h deleted file mode 120000 index 31e372643..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPVideoConfig.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPVideoConfig.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPViewabilityAdapter.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPViewabilityAdapter.h deleted file mode 120000 index e8cb75b26..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPViewabilityAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityAdapter.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPViewabilityAdapterAvid.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPViewabilityAdapterAvid.h deleted file mode 120000 index 5f09c4a88..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPViewabilityAdapterAvid.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPViewabilityAdapterMoat.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPViewabilityAdapterMoat.h deleted file mode 120000 index a44fe1395..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPViewabilityAdapterMoat.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPViewabilityOption.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPViewabilityOption.h deleted file mode 120000 index 9c380dcb9..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPViewabilityOption.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityOption.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPViewabilityTracker.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPViewabilityTracker.h deleted file mode 120000 index af573e87b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPViewabilityTracker.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityTracker.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPWebView+Viewability.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPWebView+Viewability.h deleted file mode 120000 index c5669b5be..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPWebView+Viewability.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/MPWebView+Viewability.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPWebView.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPWebView.h deleted file mode 120000 index 7918d3346..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPWebView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/HTML/MPWebView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPXMLParser.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPXMLParser.h deleted file mode 120000 index b786648bb..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MPXMLParser.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRBridge.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRBridge.h deleted file mode 120000 index 0d9216d07..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRBridge.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRBundleManager.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRBundleManager.h deleted file mode 120000 index e9361dce1..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRBundleManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRCommand.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRCommand.h deleted file mode 120000 index 0024be7fd..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRCommand.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRConstants.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRConstants.h deleted file mode 120000 index 4ba4f4a44..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRController.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRController.h deleted file mode 120000 index a29c7e547..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRError.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRError.h deleted file mode 120000 index c5719300c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRError.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRError.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRExpandModalViewController.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRExpandModalViewController.h deleted file mode 120000 index a7a09a7f0..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRExpandModalViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRExpandModalViewController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRNativeCommandHandler.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRNativeCommandHandler.h deleted file mode 120000 index 297c80e51..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRNativeCommandHandler.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRProperty.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRProperty.h deleted file mode 120000 index bf20d7317..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRProperty.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRVideoPlayerManager.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRVideoPlayerManager.h deleted file mode 120000 index e1da5d247..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MRVideoPlayerManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub-Bridging-Header.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub-Bridging-Header.h deleted file mode 120000 index e88403b81..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MoPub-Bridging-Header.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub.h deleted file mode 120000 index 92f0215a9..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MoPub.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AbstractAvidAdSession.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AbstractAvidAdSession.h deleted file mode 120000 index 88bea50de..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AbstractAvidAdSession.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AbstractAvidAdSession.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AbstractAvidManagedAdSession.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AbstractAvidManagedAdSession.h deleted file mode 120000 index 3d758ff01..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AbstractAvidManagedAdSession.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AbstractAvidManagedAdSession.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_Avid.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_Avid.h deleted file mode 120000 index ba3efef98..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_Avid.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_Avid.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidAdSessionManager.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidAdSessionManager.h deleted file mode 120000 index ae0f19832..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidAdSessionManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidAdSessionManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidDeferredAdSessionListener.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidDeferredAdSessionListener.h deleted file mode 120000 index c24fae481..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidDeferredAdSessionListener.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidDeferredAdSessionListener.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidDisplayAdSession.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidDisplayAdSession.h deleted file mode 120000 index 3d7756f8e..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidDisplayAdSession.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidDisplayAdSession.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidManagedDisplayAdSession.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidManagedDisplayAdSession.h deleted file mode 120000 index b9c727b6b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidManagedDisplayAdSession.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidManagedDisplayAdSession.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidManagedVideoAdSession.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidManagedVideoAdSession.h deleted file mode 120000 index bc85bdabb..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidManagedVideoAdSession.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidManagedVideoAdSession.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidVideoAdSession.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidVideoAdSession.h deleted file mode 120000 index 9b7510e2e..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidVideoAdSession.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidVideoAdSession.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidVideoPlaybackListener.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidVideoPlaybackListener.h deleted file mode 120000 index fe6bf2e2d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_AvidVideoPlaybackListener.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidVideoPlaybackListener.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_ExternalAvidAdSessionContext.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_ExternalAvidAdSessionContext.h deleted file mode 120000 index 38691e82b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/MoPub_ExternalAvidAdSessionContext.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_ExternalAvidAdSessionContext.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSBundle+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSBundle+MPAdditions.h deleted file mode 120000 index 244ff5463..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSBundle+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSDate+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSDate+MPAdditions.h deleted file mode 120000 index a5af2c5d2..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSDate+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSDictionary+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSDictionary+MPAdditions.h deleted file mode 120000 index 4befc6959..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSDictionary+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSError+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSError+MPAdditions.h deleted file mode 120000 index b5b20e9ba..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSError+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSHTTPURLResponse+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSHTTPURLResponse+MPAdditions.h deleted file mode 120000 index 130bf9f94..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSHTTPURLResponse+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSJSONSerialization+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSJSONSerialization+MPAdditions.h deleted file mode 120000 index 0ab43aef0..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSJSONSerialization+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSMutableArray+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSMutableArray+MPAdditions.h deleted file mode 120000 index d60f0b4c0..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSMutableArray+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSString+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSString+MPAdditions.h deleted file mode 120000 index 72fb52dec..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSString+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSString+MPConsentStatus.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSString+MPConsentStatus.h deleted file mode 120000 index d4e3f4796..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSString+MPConsentStatus.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSURL+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSURL+MPAdditions.h deleted file mode 120000 index 024a7a7e6..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/NSURL+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/UIButton+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/UIButton+MPAdditions.h deleted file mode 120000 index a0bc53854..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/UIButton+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/UIColor+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/UIColor+MPAdditions.h deleted file mode 120000 index 58a8477cf..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/UIColor+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/UIView+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/UIView+MPAdditions.h deleted file mode 120000 index f1e8d49df..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/UIView+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/UIWebView+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/UIWebView+MPAdditions.h deleted file mode 120000 index e14b2640d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Private/mopub-ios-sdk/UIWebView+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIWebView+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPBannerView.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPBannerView.h deleted file mode 120000 index 3ea390e59..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPBannerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPBannerView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPBannerViewOptions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPBannerViewOptions.h deleted file mode 120000 index 6806bcd34..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPBannerViewOptions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPBannerViewOptions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPCustomRenderedAd.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPCustomRenderedAd.h deleted file mode 120000 index 4c09172f7..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPCustomRenderedAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPCustomRenderedAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPCustomRenderedBannerViewDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPCustomRenderedBannerViewDelegate.h deleted file mode 120000 index 677511abd..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPCustomRenderedBannerViewDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPCustomRenderedBannerViewDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPCustomRenderedInterstitialDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPCustomRenderedInterstitialDelegate.h deleted file mode 120000 index b3ee336eb..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPCustomRenderedInterstitialDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPCustomRenderedInterstitialDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPInterstitial.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPInterstitial.h deleted file mode 120000 index e228c6d8a..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPInterstitial.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPInterstitial.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPRequest.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPRequest.h deleted file mode 120000 index c037914f0..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/DFPRequest.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/DFPRequest.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdChoicesView.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdChoicesView.h deleted file mode 120000 index f4c07ea8c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdChoicesView.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdChoicesView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdLoader.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdLoader.h deleted file mode 120000 index 9d94e21ee..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdLoader.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdLoader.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdLoaderAdTypes.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdLoaderAdTypes.h deleted file mode 120000 index 98990edd8..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdLoaderAdTypes.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdLoaderAdTypes.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdLoaderDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdLoaderDelegate.h deleted file mode 120000 index 171f01e83..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdLoaderDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdLoaderDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdNetworkExtras.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdNetworkExtras.h deleted file mode 120000 index 232ae7ccc..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdNetworkExtras.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdNetworkExtras.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdReward.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdReward.h deleted file mode 120000 index 566ff1fa4..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdReward.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdReward.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdSize.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdSize.h deleted file mode 120000 index 924ec4bd3..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdSize.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdSize.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdSizeDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdSizeDelegate.h deleted file mode 120000 index d18a182a7..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAdSizeDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAdSizeDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAppEventDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAppEventDelegate.h deleted file mode 120000 index a50a40796..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAppEventDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAppEventDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAudioVideoManager.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAudioVideoManager.h deleted file mode 120000 index 0de2adb2d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAudioVideoManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAudioVideoManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAudioVideoManagerDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAudioVideoManagerDelegate.h deleted file mode 120000 index 82c18ab2c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADAudioVideoManagerDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADAudioVideoManagerDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADBannerView.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADBannerView.h deleted file mode 120000 index 945d39972..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADBannerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADBannerView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADBannerViewDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADBannerViewDelegate.h deleted file mode 120000 index e44409358..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADBannerViewDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADBannerViewDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCorrelator.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCorrelator.h deleted file mode 120000 index 3787019fb..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCorrelator.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCorrelator.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCorrelatorAdLoaderOptions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCorrelatorAdLoaderOptions.h deleted file mode 120000 index 18ef44a61..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCorrelatorAdLoaderOptions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCorrelatorAdLoaderOptions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventBanner.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventBanner.h deleted file mode 120000 index 294c8fe2b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventBanner.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventBanner.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventBannerDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventBannerDelegate.h deleted file mode 120000 index c073ddb3c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventBannerDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventBannerDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventExtras.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventExtras.h deleted file mode 120000 index d679d204b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventExtras.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventExtras.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventInterstitial.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventInterstitial.h deleted file mode 120000 index 46c4a01d3..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventInterstitial.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventInterstitial.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventInterstitialDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventInterstitialDelegate.h deleted file mode 120000 index 3065a851f..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventInterstitialDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventInterstitialDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventNativeAd.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventNativeAd.h deleted file mode 120000 index 55bfe336a..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventNativeAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventNativeAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventNativeAdDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventNativeAdDelegate.h deleted file mode 120000 index 6f700bac7..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventNativeAdDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventNativeAdDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventParameters.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventParameters.h deleted file mode 120000 index 137edd7e5..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventParameters.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventParameters.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventRequest.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventRequest.h deleted file mode 120000 index 849e96144..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADCustomEventRequest.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADCustomEventRequest.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADDebugOptionsViewController.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADDebugOptionsViewController.h deleted file mode 120000 index b334208bc..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADDebugOptionsViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADDebugOptionsViewController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADDynamicHeightSearchRequest.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADDynamicHeightSearchRequest.h deleted file mode 120000 index a6b5a64cd..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADDynamicHeightSearchRequest.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADDynamicHeightSearchRequest.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADExtras.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADExtras.h deleted file mode 120000 index 453dbc188..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADExtras.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADExtras.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADInAppPurchase.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADInAppPurchase.h deleted file mode 120000 index 01c4eccd1..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADInAppPurchase.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADInAppPurchase.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADInAppPurchaseDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADInAppPurchaseDelegate.h deleted file mode 120000 index 7c7080bde..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADInAppPurchaseDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADInAppPurchaseDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADInterstitial.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADInterstitial.h deleted file mode 120000 index e423275c8..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADInterstitial.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADInterstitial.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADInterstitialDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADInterstitialDelegate.h deleted file mode 120000 index f7019026f..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADInterstitialDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADInterstitialDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADMediaView.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADMediaView.h deleted file mode 120000 index b61c09803..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADMediaView.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADMediaView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADMobileAds.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADMobileAds.h deleted file mode 120000 index 6535c6176..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADMobileAds.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADMobileAds.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADMultipleAdsAdLoaderOptions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADMultipleAdsAdLoaderOptions.h deleted file mode 120000 index de315c8ab..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADMultipleAdsAdLoaderOptions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADMultipleAdsAdLoaderOptions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADMuteThisAdReason.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADMuteThisAdReason.h deleted file mode 120000 index 43767b6d5..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADMuteThisAdReason.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADMuteThisAdReason.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAd.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAd.h deleted file mode 120000 index 8cbd1bc45..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAdDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAdDelegate.h deleted file mode 120000 index 000297186..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAdDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAdImage+Mediation.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAdImage+Mediation.h deleted file mode 120000 index f7316801e..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAdImage+Mediation.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdImage+Mediation.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAdImage.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAdImage.h deleted file mode 120000 index 530c22b31..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAdImage.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdImage.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAdImageAdLoaderOptions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAdImageAdLoaderOptions.h deleted file mode 120000 index cf26ea667..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAdImageAdLoaderOptions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdImageAdLoaderOptions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAdViewAdOptions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAdViewAdOptions.h deleted file mode 120000 index e64c85a4c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAdViewAdOptions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAdViewAdOptions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAppInstallAd.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAppInstallAd.h deleted file mode 120000 index 13e15d0ac..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAppInstallAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAppInstallAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAppInstallAdAssetIDs.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAppInstallAdAssetIDs.h deleted file mode 120000 index 4d8d4d6c1..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeAppInstallAdAssetIDs.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeAppInstallAdAssetIDs.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeContentAd.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeContentAd.h deleted file mode 120000 index 58d7e0ebf..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeContentAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeContentAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeContentAdAssetIDs.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeContentAdAssetIDs.h deleted file mode 120000 index 0d17b5450..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeContentAdAssetIDs.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeContentAdAssetIDs.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeCustomTemplateAd.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeCustomTemplateAd.h deleted file mode 120000 index bc6733404..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeCustomTemplateAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeCustomTemplateAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeExpressAdView.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeExpressAdView.h deleted file mode 120000 index 7e4515313..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeExpressAdView.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeExpressAdView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeExpressAdViewDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeExpressAdViewDelegate.h deleted file mode 120000 index b52dacba5..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeExpressAdViewDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeExpressAdViewDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeMuteThisAdLoaderOptions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeMuteThisAdLoaderOptions.h deleted file mode 120000 index bc643fcd2..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADNativeMuteThisAdLoaderOptions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADNativeMuteThisAdLoaderOptions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADRequest.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADRequest.h deleted file mode 120000 index 127b2e379..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADRequest.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRequest.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADRequestConfiguration.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADRequestConfiguration.h deleted file mode 120000 index 02acbba77..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADRequestConfiguration.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRequestConfiguration.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADRequestError.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADRequestError.h deleted file mode 120000 index 0c6502d57..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADRequestError.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRequestError.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADRewardBasedVideoAd.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADRewardBasedVideoAd.h deleted file mode 120000 index e8650b205..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADRewardBasedVideoAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRewardBasedVideoAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADRewardBasedVideoAdDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADRewardBasedVideoAdDelegate.h deleted file mode 120000 index 7a47a146f..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADRewardBasedVideoAdDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADRewardBasedVideoAdDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADSearchBannerView.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADSearchBannerView.h deleted file mode 120000 index 27a73ef57..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADSearchBannerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADSearchBannerView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADSearchRequest.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADSearchRequest.h deleted file mode 120000 index f182e3fbd..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADSearchRequest.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADSearchRequest.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADUnifiedNativeAd+ConfirmationClick.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADUnifiedNativeAd+ConfirmationClick.h deleted file mode 120000 index dc0f86edd..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADUnifiedNativeAd+ConfirmationClick.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAd+ConfirmationClick.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADUnifiedNativeAd+CustomClickGesture.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADUnifiedNativeAd+CustomClickGesture.h deleted file mode 120000 index d3fc0670a..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADUnifiedNativeAd+CustomClickGesture.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAd+CustomClickGesture.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADUnifiedNativeAd.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADUnifiedNativeAd.h deleted file mode 120000 index b9f1fd46f..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADUnifiedNativeAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADUnifiedNativeAdAssetIdentifiers.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADUnifiedNativeAdAssetIdentifiers.h deleted file mode 120000 index a6c9e5d6c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADUnifiedNativeAdAssetIdentifiers.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAdAssetIdentifiers.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADUnifiedNativeAdDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADUnifiedNativeAdDelegate.h deleted file mode 120000 index 4bc88d55e..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADUnifiedNativeAdDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAdDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADUnifiedNativeAdUnconfirmedClickDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADUnifiedNativeAdUnconfirmedClickDelegate.h deleted file mode 120000 index 58190791e..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADUnifiedNativeAdUnconfirmedClickDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADUnifiedNativeAdUnconfirmedClickDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADVideoController.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADVideoController.h deleted file mode 120000 index 0c7125063..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADVideoController.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADVideoController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADVideoControllerDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADVideoControllerDelegate.h deleted file mode 120000 index 42c58d3c8..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADVideoControllerDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADVideoControllerDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADVideoOptions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADVideoOptions.h deleted file mode 120000 index 7b23aad2d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GADVideoOptions.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GADVideoOptions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GoogleMobileAds.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GoogleMobileAds.h deleted file mode 120000 index 992a83328..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GoogleMobileAds.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GoogleMobileAds.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GoogleMobileAdsDefines.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GoogleMobileAdsDefines.h deleted file mode 120000 index 1ab42403b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/GoogleMobileAdsDefines.h +++ /dev/null @@ -1 +0,0 @@ -../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/GoogleMobileAdsDefines.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMAdNetworkAdapterProtocol.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMAdNetworkAdapterProtocol.h deleted file mode 120000 index 77589d441..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMAdNetworkAdapterProtocol.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMAdNetworkAdapterProtocol.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMAdNetworkConnectorProtocol.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMAdNetworkConnectorProtocol.h deleted file mode 120000 index 78a731c25..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMAdNetworkConnectorProtocol.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMAdNetworkConnectorProtocol.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMEnums.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMEnums.h deleted file mode 120000 index 31ce89bde..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMEnums.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMEnums.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMRewardBasedVideoAdNetworkAdapterProtocol.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMRewardBasedVideoAdNetworkAdapterProtocol.h deleted file mode 120000 index 460cb93e2..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMRewardBasedVideoAdNetworkAdapterProtocol.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMRewardBasedVideoAdNetworkAdapterProtocol.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMRewardBasedVideoAdNetworkConnectorProtocol.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMRewardBasedVideoAdNetworkConnectorProtocol.h deleted file mode 120000 index 583892c9a..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMRewardBasedVideoAdNetworkConnectorProtocol.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMRewardBasedVideoAdNetworkConnectorProtocol.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedNativeAd.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedNativeAd.h deleted file mode 120000 index 908a11450..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedNativeAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedNativeAdDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedNativeAdDelegate.h deleted file mode 120000 index 71d3b0cb5..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedNativeAdDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeAdDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedNativeAdNotificationSource.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedNativeAdNotificationSource.h deleted file mode 120000 index eade078d6..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedNativeAdNotificationSource.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeAdNotificationSource.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedNativeAppInstallAd.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedNativeAppInstallAd.h deleted file mode 120000 index d9729a876..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedNativeAppInstallAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeAppInstallAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedNativeContentAd.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedNativeContentAd.h deleted file mode 120000 index 96cab8fa7..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedNativeContentAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedNativeContentAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedUnifiedNativeAd.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedUnifiedNativeAd.h deleted file mode 120000 index 9076b45f9..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedUnifiedNativeAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedUnifiedNativeAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedUnifiedNativeAdNotificationSource.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedUnifiedNativeAdNotificationSource.h deleted file mode 120000 index 8e2a8ac0e..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediatedUnifiedNativeAdNotificationSource.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediatedUnifiedNativeAdNotificationSource.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediationAdRequest.h b/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediationAdRequest.h deleted file mode 120000 index fab584f45..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/Google-Mobile-Ads-SDK/GoogleMobileAds/Mediation/GADMediationAdRequest.h +++ /dev/null @@ -1 +0,0 @@ -../../../../../Google-Mobile-Ads-SDK/Frameworks/frameworks/GoogleMobileAds.framework/Headers/Mediation/GADMediationAdRequest.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBAVPlayer.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBAVPlayer.h deleted file mode 120000 index 0b71b08b8..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBAVPlayer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBAVPlayerView.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBAVPlayerView.h deleted file mode 120000 index 5fdd522d6..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBAVPlayerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBActivityIndicatorView.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBActivityIndicatorView.h deleted file mode 120000 index d4ff42b8a..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBActivityIndicatorView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBDisplayAgentType.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBDisplayAgentType.h deleted file mode 120000 index 7ba52c060..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBDisplayAgentType.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MOPUBDisplayAgentType.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBExperimentProvider.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBExperimentProvider.h deleted file mode 120000 index 0bc50681e..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBExperimentProvider.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBFullscreenPlayerViewController.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBFullscreenPlayerViewController.h deleted file mode 120000 index 0d6f51546..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBFullscreenPlayerViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBNativeVideoAdAdapter.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBNativeVideoAdAdapter.h deleted file mode 120000 index 086cc11df..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBNativeVideoAdAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBNativeVideoAdConfigValues.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBNativeVideoAdConfigValues.h deleted file mode 120000 index fb32a614b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBNativeVideoAdConfigValues.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBNativeVideoAdRenderer.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBNativeVideoAdRenderer.h deleted file mode 120000 index ad99350a8..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBNativeVideoAdRenderer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBNativeVideoAdRendererSettings.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBNativeVideoAdRendererSettings.h deleted file mode 120000 index 05124380e..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBNativeVideoAdRendererSettings.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBNativeVideoCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBNativeVideoCustomEvent.h deleted file mode 120000 index e79edfdb6..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBNativeVideoCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBNativeVideoImpressionAgent.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBNativeVideoImpressionAgent.h deleted file mode 120000 index 8b9dfd795..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBNativeVideoImpressionAgent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoImpressionAgent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBPlayerManager.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBPlayerManager.h deleted file mode 120000 index be64d2eb3..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBPlayerManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBPlayerView.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBPlayerView.h deleted file mode 120000 index d3c340e61..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBPlayerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBPlayerViewController.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBPlayerViewController.h deleted file mode 120000 index 56fa56f23..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBPlayerViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBReplayView.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBReplayView.h deleted file mode 120000 index de9a4f7c4..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MOPUBReplayView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBReplayView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAPIEndpoints.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAPIEndpoints.h deleted file mode 120000 index 53eee46eb..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAPIEndpoints.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPAPIEndpoints.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPActivityViewControllerHelper+TweetShare.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPActivityViewControllerHelper+TweetShare.h deleted file mode 120000 index 6801fdcbe..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPActivityViewControllerHelper+TweetShare.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPActivityViewControllerHelper.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPActivityViewControllerHelper.h deleted file mode 120000 index d9b30c566..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPActivityViewControllerHelper.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdAlertGestureRecognizer.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdAlertGestureRecognizer.h deleted file mode 120000 index 561df92b3..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdAlertGestureRecognizer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdAlertManager.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdAlertManager.h deleted file mode 120000 index 9ecddde64..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdAlertManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdBrowserController.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdBrowserController.h deleted file mode 120000 index 705e4c387..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdBrowserController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdBrowserController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdConfiguration.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdConfiguration.h deleted file mode 120000 index 4436807bf..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdConfiguration.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdConfiguration.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdConversionTracker.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdConversionTracker.h deleted file mode 120000 index 78ef644e8..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdConversionTracker.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPAdConversionTracker.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdDestinationDisplayAgent.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdDestinationDisplayAgent.h deleted file mode 120000 index 18ed9414b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdDestinationDisplayAgent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdImpressionTimer.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdImpressionTimer.h deleted file mode 120000 index d8ac87531..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdImpressionTimer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdPlacerInvocation.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdPlacerInvocation.h deleted file mode 120000 index 7c7b8f9f8..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdPlacerInvocation.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdPositioning.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdPositioning.h deleted file mode 120000 index ab0e3732b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdPositioning.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPAdPositioning.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdServerCommunicator.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdServerCommunicator.h deleted file mode 120000 index b8c75270f..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdServerCommunicator.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerCommunicator.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdServerKeys.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdServerKeys.h deleted file mode 120000 index 9e6929327..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdServerKeys.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPAdServerKeys.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdServerURLBuilder.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdServerURLBuilder.h deleted file mode 120000 index 26e384543..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdServerURLBuilder.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerURLBuilder.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdTargeting.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdTargeting.h deleted file mode 120000 index 7f1347e02..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdTargeting.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPAdTargeting.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdView.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdView.h deleted file mode 120000 index 1c080476c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPAdView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdWebViewAgent.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdWebViewAgent.h deleted file mode 120000 index 920feb131..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdWebViewAgent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdvancedBidder.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdvancedBidder.h deleted file mode 120000 index 5f3a8efde..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdvancedBidder.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPAdvancedBidder.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdvancedBiddingManager.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdvancedBiddingManager.h deleted file mode 120000 index de9ad2777..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAdvancedBiddingManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPAdvancedBiddingManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAnalyticsTracker.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAnalyticsTracker.h deleted file mode 120000 index 5590e2d95..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPAnalyticsTracker.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPAnalyticsTracker.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBannerAdManager.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBannerAdManager.h deleted file mode 120000 index 8a1044e07..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBannerAdManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBannerAdManagerDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBannerAdManagerDelegate.h deleted file mode 120000 index 0f43c8ccc..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBannerAdManagerDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManagerDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBannerCustomEvent+Internal.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBannerCustomEvent+Internal.h deleted file mode 120000 index 412186645..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBannerCustomEvent+Internal.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBannerCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBannerCustomEvent.h deleted file mode 120000 index ab58b4251..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBannerCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPBannerCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBannerCustomEventAdapter.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBannerCustomEventAdapter.h deleted file mode 120000 index 426f7b4fa..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBannerCustomEventAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBannerCustomEventDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBannerCustomEventDelegate.h deleted file mode 120000 index 660948951..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBannerCustomEventDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPBannerCustomEventDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBaseBannerAdapter.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBaseBannerAdapter.h deleted file mode 120000 index 8b81ec176..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBaseBannerAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBaseInterstitialAdapter.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBaseInterstitialAdapter.h deleted file mode 120000 index 96e9f4646..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBaseInterstitialAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBool.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBool.h deleted file mode 120000 index 943e7e84c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPBool.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPBool.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPClientAdPositioning.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPClientAdPositioning.h deleted file mode 120000 index cd55a0488..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPClientAdPositioning.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPClientAdPositioning.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPClosableView.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPClosableView.h deleted file mode 120000 index ae9c69c4e..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPClosableView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPCollectionViewAdPlacer.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPCollectionViewAdPlacer.h deleted file mode 120000 index e4fda86d4..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPCollectionViewAdPlacer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPCollectionViewAdPlacer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPCollectionViewAdPlacerCell.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPCollectionViewAdPlacerCell.h deleted file mode 120000 index bf787d9c7..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPCollectionViewAdPlacerCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConsentChangedNotification.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConsentChangedNotification.h deleted file mode 120000 index e1640e61f..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConsentChangedNotification.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPConsentChangedNotification.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConsentChangedReason.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConsentChangedReason.h deleted file mode 120000 index 2224e3232..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConsentChangedReason.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPConsentChangedReason.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConsentDialogViewController.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConsentDialogViewController.h deleted file mode 120000 index b63fe6c02..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConsentDialogViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConsentError.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConsentError.h deleted file mode 120000 index 55d45f259..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConsentError.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPConsentError.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConsentManager.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConsentManager.h deleted file mode 120000 index 269ac504b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConsentManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConsentStatus.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConsentStatus.h deleted file mode 120000 index c2feef2d2..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConsentStatus.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPConsentStatus.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConstants.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConstants.h deleted file mode 120000 index 45618473a..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPConstants.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPCoreInstanceProvider+MRAID.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPCoreInstanceProvider+MRAID.h deleted file mode 120000 index fdffd8f3c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPCoreInstanceProvider+MRAID.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPCoreInstanceProvider.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPCoreInstanceProvider.h deleted file mode 120000 index fe2451475..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPCoreInstanceProvider.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPCountdownTimerView.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPCountdownTimerView.h deleted file mode 120000 index dd498efbf..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPCountdownTimerView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPCountdownTimerView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPDiskLRUCache.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPDiskLRUCache.h deleted file mode 120000 index 5a63fb103..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPDiskLRUCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPDiskLRUCache.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPEnhancedDeeplinkRequest.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPEnhancedDeeplinkRequest.h deleted file mode 120000 index 47763a70d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPEnhancedDeeplinkRequest.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPError.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPError.h deleted file mode 120000 index bf13ee3e7..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPError.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPError.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPForceableOrientationProtocol.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPForceableOrientationProtocol.h deleted file mode 120000 index 0897c3352..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPForceableOrientationProtocol.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPForceableOrientationProtocol.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPGeolocationProvider.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPGeolocationProvider.h deleted file mode 120000 index c99579608..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPGeolocationProvider.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPGlobal.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPGlobal.h deleted file mode 120000 index 2683ac19d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPGlobal.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPHTMLBannerCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPHTMLBannerCustomEvent.h deleted file mode 120000 index 702829d27..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPHTMLBannerCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPHTMLInterstitialCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPHTMLInterstitialCustomEvent.h deleted file mode 120000 index 52663cfe5..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPHTMLInterstitialCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPHTMLInterstitialViewController.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPHTMLInterstitialViewController.h deleted file mode 120000 index bfe62b9e7..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPHTMLInterstitialViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPHTTPNetworkSession.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPHTTPNetworkSession.h deleted file mode 120000 index b4c01947d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPHTTPNetworkSession.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPHTTPNetworkTaskData.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPHTTPNetworkTaskData.h deleted file mode 120000 index ad8ed8dc3..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPHTTPNetworkTaskData.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPIdentityProvider.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPIdentityProvider.h deleted file mode 120000 index c55c85004..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPIdentityProvider.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPImageDownloadQueue.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPImageDownloadQueue.h deleted file mode 120000 index 9aedc87dc..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPImageDownloadQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPImageDownloadQueue.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInternalUtils.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInternalUtils.h deleted file mode 120000 index f1bdeef11..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInternalUtils.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPInternalUtils.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialAdController.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialAdController.h deleted file mode 120000 index 17bd0aa14..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialAdController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPInterstitialAdController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialAdManager.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialAdManager.h deleted file mode 120000 index 29d80a735..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialAdManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialAdManagerDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialAdManagerDelegate.h deleted file mode 120000 index 508797cb1..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialAdManagerDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManagerDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialCustomEvent.h deleted file mode 120000 index ab2aabe38..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialCustomEventAdapter.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialCustomEventAdapter.h deleted file mode 120000 index 7e7c78cc9..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialCustomEventAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialCustomEventDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialCustomEventDelegate.h deleted file mode 120000 index 81a8ba951..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialCustomEventDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEventDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialViewController.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialViewController.h deleted file mode 120000 index fd9cca359..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPInterstitialViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPLastResortDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPLastResortDelegate.h deleted file mode 120000 index fd0d6fcb8..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPLastResortDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPLogLevel.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPLogLevel.h deleted file mode 120000 index 38ea73650..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPLogLevel.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPLogLevel.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPLogProvider.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPLogProvider.h deleted file mode 120000 index 51dcf6d7d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPLogProvider.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPLogProvider.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPLogging.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPLogging.h deleted file mode 120000 index 0e9608a54..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPLogging.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPLogging.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMRAIDBannerCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMRAIDBannerCustomEvent.h deleted file mode 120000 index b8a18457c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMRAIDBannerCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMRAIDInterstitialCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMRAIDInterstitialCustomEvent.h deleted file mode 120000 index 2c19035db..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMRAIDInterstitialCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMRAIDInterstitialViewController.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMRAIDInterstitialViewController.h deleted file mode 120000 index c63f77f6c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMRAIDInterstitialViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMediationManager.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMediationManager.h deleted file mode 120000 index 6e1339f9f..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMediationManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPMediationManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMediationSdkInitializable.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMediationSdkInitializable.h deleted file mode 120000 index c980e9bcc..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMediationSdkInitializable.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPMediationSdkInitializable.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMediationSettingsProtocol.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMediationSettingsProtocol.h deleted file mode 120000 index a22f39d1a..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMediationSettingsProtocol.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPMediationSettingsProtocol.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMemoryCache.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMemoryCache.h deleted file mode 120000 index 1c80c66f6..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMemoryCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPMemoryCache.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMoPubConfiguration.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMoPubConfiguration.h deleted file mode 120000 index 49bbcfb49..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMoPubConfiguration.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MPMoPubConfiguration.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMoPubNativeAdAdapter.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMoPubNativeAdAdapter.h deleted file mode 120000 index 13712b624..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMoPubNativeAdAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMoPubNativeCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMoPubNativeCustomEvent.h deleted file mode 120000 index f61b314c7..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMoPubNativeCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMoPubRewardedPlayableCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMoPubRewardedPlayableCustomEvent.h deleted file mode 120000 index 55499fd1b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMoPubRewardedPlayableCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMoPubRewardedVideoCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMoPubRewardedVideoCustomEvent.h deleted file mode 120000 index de36b1d46..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPMoPubRewardedVideoCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAd+Internal.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAd+Internal.h deleted file mode 120000 index 8a3e51e36..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAd+Internal.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAd.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAd.h deleted file mode 120000 index 4de4e8260..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdAdapter.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdAdapter.h deleted file mode 120000 index e3f55c7e4..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdAdapter.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdConfigValues+Internal.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdConfigValues+Internal.h deleted file mode 120000 index acd647390..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdConfigValues+Internal.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdConfigValues.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdConfigValues.h deleted file mode 120000 index e244ace9e..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdConfigValues.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdConstants.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdConstants.h deleted file mode 120000 index edc5043b0..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdConstants.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdData.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdData.h deleted file mode 120000 index f57db0e01..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdData.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdData.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdDelegate.h deleted file mode 120000 index 93b48b4da..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdError.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdError.h deleted file mode 120000 index c866f3bf6..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdError.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdError.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRenderer.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRenderer.h deleted file mode 120000 index 8813c8533..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRenderer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRendererConfiguration.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRendererConfiguration.h deleted file mode 120000 index e16dd903f..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRendererConfiguration.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRendererConstants.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRendererConstants.h deleted file mode 120000 index 3c900472b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRendererConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererConstants.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRendererImageHandler.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRendererImageHandler.h deleted file mode 120000 index 90f0869a4..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRendererImageHandler.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRendererSettings.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRendererSettings.h deleted file mode 120000 index 95f531cd3..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRendererSettings.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererSettings.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRendering.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRendering.h deleted file mode 120000 index 4d98f994c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRendering.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendering.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRenderingImageLoader.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRenderingImageLoader.h deleted file mode 120000 index 97b16dc5b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRenderingImageLoader.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRequest+MPNativeAdSource.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRequest+MPNativeAdSource.h deleted file mode 120000 index 36d2608d4..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRequest+MPNativeAdSource.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/Categories/MPNativeAdRequest+MPNativeAdSource.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRequest.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRequest.h deleted file mode 120000 index 8b34d935c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRequest.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequest.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRequestTargeting.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRequestTargeting.h deleted file mode 120000 index 8b0dac341..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdRequestTargeting.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequestTargeting.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdSource.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdSource.h deleted file mode 120000 index c36e638da..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdSource.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSource.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdSourceDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdSourceDelegate.h deleted file mode 120000 index 910619dbd..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdSourceDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSourceDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdSourceQueue.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdSourceQueue.h deleted file mode 120000 index e0a346cc5..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdSourceQueue.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdUtils.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdUtils.h deleted file mode 120000 index 1c784028c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeAdUtils.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdUtils.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeCache.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeCache.h deleted file mode 120000 index 000f001ff..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeCache.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeCache.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeCustomEvent.h deleted file mode 120000 index 78a9cc731..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeCustomEventDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeCustomEventDelegate.h deleted file mode 120000 index 6b94a1b98..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeCustomEventDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEventDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativePositionResponseDeserializer.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativePositionResponseDeserializer.h deleted file mode 120000 index dabde2963..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativePositionResponseDeserializer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativePositionSource.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativePositionSource.h deleted file mode 120000 index b8cb9bfe3..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativePositionSource.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionSource.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeView.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeView.h deleted file mode 120000 index f3a823018..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPNativeView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPPrivateBannerCustomEventDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPPrivateBannerCustomEventDelegate.h deleted file mode 120000 index 893f3e198..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPPrivateBannerCustomEventDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Banners/MPPrivateBannerCustomEventDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPPrivateInterstitialCustomEventDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPPrivateInterstitialCustomEventDelegate.h deleted file mode 120000 index 9629fec71..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPPrivateInterstitialCustomEventDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPPrivateInterstitialCustomEventDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPPrivateRewardedVideoCustomEventDelegate.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPPrivateRewardedVideoCustomEventDelegate.h deleted file mode 120000 index 4227b4a90..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPPrivateRewardedVideoCustomEventDelegate.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPPrivateRewardedVideoCustomEventDelegate.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPProgressOverlayView.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPProgressOverlayView.h deleted file mode 120000 index 57e8125d8..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPProgressOverlayView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPProgressOverlayView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPReachability.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPReachability.h deleted file mode 120000 index 51b202989..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPReachability.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPReachability.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPReachabilityManager.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPReachabilityManager.h deleted file mode 120000 index 24e84d53d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPReachabilityManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPReachabilityManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRealTimeTimer.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRealTimeTimer.h deleted file mode 120000 index 0c12956fd..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRealTimeTimer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideo+Internal.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideo+Internal.h deleted file mode 120000 index 92705794c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideo+Internal.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideo+Internal.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideo.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideo.h deleted file mode 120000 index ab38a0e30..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideo.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideo.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoAdManager.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoAdManager.h deleted file mode 120000 index ff7fce018..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoAdManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoAdapter.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoAdapter.h deleted file mode 120000 index 1d8851cc9..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoConnection.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoConnection.h deleted file mode 120000 index b16b92128..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoConnection.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoCustomEvent+Caching.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoCustomEvent+Caching.h deleted file mode 120000 index b43924445..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoCustomEvent+Caching.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent+Caching.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoCustomEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoCustomEvent.h deleted file mode 120000 index edda68812..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoCustomEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoError.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoError.h deleted file mode 120000 index 6c669ce6e..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoError.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoError.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoReward.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoReward.h deleted file mode 120000 index f1b4dfe8d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPRewardedVideoReward.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoReward.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPServerAdPositioning.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPServerAdPositioning.h deleted file mode 120000 index e90a003dc..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPServerAdPositioning.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPServerAdPositioning.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPSessionTracker.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPSessionTracker.h deleted file mode 120000 index a34351f7c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPSessionTracker.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPSessionTracker.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPStaticNativeAdRenderer.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPStaticNativeAdRenderer.h deleted file mode 120000 index 4c65838a2..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPStaticNativeAdRenderer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRenderer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPStaticNativeAdRendererSettings.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPStaticNativeAdRendererSettings.h deleted file mode 120000 index c9039746d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPStaticNativeAdRendererSettings.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPStoreKitProvider.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPStoreKitProvider.h deleted file mode 120000 index f76cf5781..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPStoreKitProvider.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPStoreKitProvider.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPStreamAdPlacementData.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPStreamAdPlacementData.h deleted file mode 120000 index 470f49b89..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPStreamAdPlacementData.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacementData.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPStreamAdPlacer.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPStreamAdPlacer.h deleted file mode 120000 index 6f5eadb38..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPStreamAdPlacer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPTableViewAdPlacer.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPTableViewAdPlacer.h deleted file mode 120000 index 1e557bcd5..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPTableViewAdPlacer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/MPTableViewAdPlacer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPTableViewAdPlacerCell.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPTableViewAdPlacerCell.h deleted file mode 120000 index 26cd681ab..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPTableViewAdPlacerCell.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPTableViewCellImpressionTracker.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPTableViewCellImpressionTracker.h deleted file mode 120000 index 57c4dd16a..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPTableViewCellImpressionTracker.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewCellImpressionTracker.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPTimer.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPTimer.h deleted file mode 120000 index 6f240c831..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPTimer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPTimer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUBMoatMobileAppKit/MPUBMoatAnalytics.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUBMoatMobileAppKit/MPUBMoatAnalytics.h deleted file mode 120000 index 8bfee4317..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUBMoatMobileAppKit/MPUBMoatAnalytics.h +++ /dev/null @@ -1 +0,0 @@ -../../../../mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatAnalytics.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUBMoatMobileAppKit/MPUBMoatBaseTracker.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUBMoatMobileAppKit/MPUBMoatBaseTracker.h deleted file mode 120000 index 58529f3c0..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUBMoatMobileAppKit/MPUBMoatBaseTracker.h +++ /dev/null @@ -1 +0,0 @@ -../../../../mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatBaseTracker.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUBMoatMobileAppKit/MPUBMoatMobileAppKit.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUBMoatMobileAppKit/MPUBMoatMobileAppKit.h deleted file mode 120000 index 31f23873f..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUBMoatMobileAppKit/MPUBMoatMobileAppKit.h +++ /dev/null @@ -1 +0,0 @@ -../../../../mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatMobileAppKit.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUBMoatMobileAppKit/MPUBMoatNativeDisplayTracker.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUBMoatMobileAppKit/MPUBMoatNativeDisplayTracker.h deleted file mode 120000 index 98fa16045..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUBMoatMobileAppKit/MPUBMoatNativeDisplayTracker.h +++ /dev/null @@ -1 +0,0 @@ -../../../../mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatNativeDisplayTracker.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUBMoatMobileAppKit/MPUBMoatVideoTracker.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUBMoatMobileAppKit/MPUBMoatVideoTracker.h deleted file mode 120000 index 899b37018..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUBMoatMobileAppKit/MPUBMoatVideoTracker.h +++ /dev/null @@ -1 +0,0 @@ -../../../../mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatVideoTracker.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUBMoatMobileAppKit/MPUBMoatWebTracker.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUBMoatMobileAppKit/MPUBMoatWebTracker.h deleted file mode 120000 index af107047b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUBMoatMobileAppKit/MPUBMoatWebTracker.h +++ /dev/null @@ -1 +0,0 @@ -../../../../mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatWebTracker.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPURL.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPURL.h deleted file mode 120000 index 54ebfa2e8..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPURL.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPURL.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPURLActionInfo.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPURLActionInfo.h deleted file mode 120000 index 1bcf3a863..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPURLActionInfo.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPURLRequest.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPURLRequest.h deleted file mode 120000 index 83ec2fd94..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPURLRequest.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPURLResolver.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPURLResolver.h deleted file mode 120000 index 20ec19a30..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPURLResolver.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUserInteractionGestureRecognizer.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUserInteractionGestureRecognizer.h deleted file mode 120000 index 36733cf80..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPUserInteractionGestureRecognizer.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTAd.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTAd.h deleted file mode 120000 index cb969a2b0..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTCompanionAd.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTCompanionAd.h deleted file mode 120000 index acff2e9d2..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTCompanionAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCompanionAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTCreative.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTCreative.h deleted file mode 120000 index 8de5ef830..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTCreative.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCreative.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTDurationOffset.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTDurationOffset.h deleted file mode 120000 index d6635bf80..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTDurationOffset.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTDurationOffset.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTIndustryIcon.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTIndustryIcon.h deleted file mode 120000 index bbc5b3c68..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTIndustryIcon.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTIndustryIcon.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTInline.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTInline.h deleted file mode 120000 index d07568ad2..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTInline.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTInline.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTLinearAd.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTLinearAd.h deleted file mode 120000 index 3e0de64a1..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTLinearAd.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTLinearAd.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTMacroProcessor.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTMacroProcessor.h deleted file mode 120000 index 131df78bf..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTMacroProcessor.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTMacroProcessor.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTManager.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTManager.h deleted file mode 120000 index ffe2a8707..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTMediaFile.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTMediaFile.h deleted file mode 120000 index 208959376..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTMediaFile.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTMediaFile.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTModel.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTModel.h deleted file mode 120000 index 92de048c3..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTModel.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTModel.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTResource.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTResource.h deleted file mode 120000 index a561625c5..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTResource.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResource.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTResponse.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTResponse.h deleted file mode 120000 index e6f5247f2..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTResponse.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResponse.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTStringUtilities.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTStringUtilities.h deleted file mode 120000 index 14cf0d87a..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTStringUtilities.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTStringUtilities.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTTracking.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTTracking.h deleted file mode 120000 index 7160aedd9..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTTracking.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MPVASTTracking.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTTrackingEvent.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTTrackingEvent.h deleted file mode 120000 index 421a7f075..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTTrackingEvent.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTWrapper.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTWrapper.h deleted file mode 120000 index 849e8ebf5..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVASTWrapper.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTWrapper.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVideoConfig.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVideoConfig.h deleted file mode 120000 index 31e372643..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPVideoConfig.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPVideoConfig.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPViewabilityAdapter.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPViewabilityAdapter.h deleted file mode 120000 index e8cb75b26..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPViewabilityAdapter.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityAdapter.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPViewabilityAdapterAvid.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPViewabilityAdapterAvid.h deleted file mode 120000 index 5f09c4a88..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPViewabilityAdapterAvid.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPViewabilityAdapterMoat.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPViewabilityAdapterMoat.h deleted file mode 120000 index a44fe1395..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPViewabilityAdapterMoat.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPViewabilityOption.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPViewabilityOption.h deleted file mode 120000 index 9c380dcb9..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPViewabilityOption.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityOption.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPViewabilityTracker.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPViewabilityTracker.h deleted file mode 120000 index af573e87b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPViewabilityTracker.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityTracker.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPWebView+Viewability.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPWebView+Viewability.h deleted file mode 120000 index c5669b5be..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPWebView+Viewability.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/MPWebView+Viewability.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPWebView.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPWebView.h deleted file mode 120000 index 7918d3346..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPWebView.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/HTML/MPWebView.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPXMLParser.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPXMLParser.h deleted file mode 120000 index b786648bb..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MPXMLParser.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRBridge.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRBridge.h deleted file mode 120000 index 0d9216d07..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRBridge.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRBundleManager.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRBundleManager.h deleted file mode 120000 index e9361dce1..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRBundleManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRCommand.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRCommand.h deleted file mode 120000 index 0024be7fd..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRCommand.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRConstants.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRConstants.h deleted file mode 120000 index 4ba4f4a44..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRConstants.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRController.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRController.h deleted file mode 120000 index a29c7e547..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRError.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRError.h deleted file mode 120000 index c5719300c..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRError.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRError.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRExpandModalViewController.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRExpandModalViewController.h deleted file mode 120000 index a7a09a7f0..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRExpandModalViewController.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRExpandModalViewController.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRNativeCommandHandler.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRNativeCommandHandler.h deleted file mode 120000 index 297c80e51..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRNativeCommandHandler.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRProperty.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRProperty.h deleted file mode 120000 index bf20d7317..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRProperty.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRVideoPlayerManager.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRVideoPlayerManager.h deleted file mode 120000 index e1da5d247..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MRVideoPlayerManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub-Bridging-Header.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub-Bridging-Header.h deleted file mode 120000 index e88403b81..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub-Bridging-Header.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MoPub-Bridging-Header.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub.h deleted file mode 120000 index 92f0215a9..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/MoPub.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AbstractAvidAdSession.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AbstractAvidAdSession.h deleted file mode 120000 index 88bea50de..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AbstractAvidAdSession.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AbstractAvidAdSession.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AbstractAvidManagedAdSession.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AbstractAvidManagedAdSession.h deleted file mode 120000 index 3d758ff01..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AbstractAvidManagedAdSession.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AbstractAvidManagedAdSession.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_Avid.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_Avid.h deleted file mode 120000 index ba3efef98..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_Avid.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_Avid.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidAdSessionManager.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidAdSessionManager.h deleted file mode 120000 index ae0f19832..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidAdSessionManager.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidAdSessionManager.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidDeferredAdSessionListener.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidDeferredAdSessionListener.h deleted file mode 120000 index c24fae481..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidDeferredAdSessionListener.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidDeferredAdSessionListener.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidDisplayAdSession.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidDisplayAdSession.h deleted file mode 120000 index 3d7756f8e..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidDisplayAdSession.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidDisplayAdSession.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidManagedDisplayAdSession.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidManagedDisplayAdSession.h deleted file mode 120000 index b9c727b6b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidManagedDisplayAdSession.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidManagedDisplayAdSession.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidManagedVideoAdSession.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidManagedVideoAdSession.h deleted file mode 120000 index bc85bdabb..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidManagedVideoAdSession.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidManagedVideoAdSession.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidVideoAdSession.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidVideoAdSession.h deleted file mode 120000 index 9b7510e2e..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidVideoAdSession.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidVideoAdSession.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidVideoPlaybackListener.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidVideoPlaybackListener.h deleted file mode 120000 index fe6bf2e2d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_AvidVideoPlaybackListener.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidVideoPlaybackListener.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_ExternalAvidAdSessionContext.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_ExternalAvidAdSessionContext.h deleted file mode 120000 index 38691e82b..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/MoPub_ExternalAvidAdSessionContext.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_ExternalAvidAdSessionContext.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSBundle+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSBundle+MPAdditions.h deleted file mode 120000 index 244ff5463..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSBundle+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSDate+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSDate+MPAdditions.h deleted file mode 120000 index a5af2c5d2..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSDate+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSDictionary+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSDictionary+MPAdditions.h deleted file mode 120000 index 4befc6959..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSDictionary+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSError+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSError+MPAdditions.h deleted file mode 120000 index b5b20e9ba..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSError+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSHTTPURLResponse+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSHTTPURLResponse+MPAdditions.h deleted file mode 120000 index 130bf9f94..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSHTTPURLResponse+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSJSONSerialization+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSJSONSerialization+MPAdditions.h deleted file mode 120000 index 0ab43aef0..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSJSONSerialization+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSMutableArray+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSMutableArray+MPAdditions.h deleted file mode 120000 index d60f0b4c0..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSMutableArray+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSString+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSString+MPAdditions.h deleted file mode 120000 index 72fb52dec..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSString+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSString+MPConsentStatus.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSString+MPConsentStatus.h deleted file mode 120000 index d4e3f4796..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSString+MPConsentStatus.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSURL+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSURL+MPAdditions.h deleted file mode 120000 index 024a7a7e6..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/NSURL+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/UIButton+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/UIButton+MPAdditions.h deleted file mode 120000 index a0bc53854..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/UIButton+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/UIColor+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/UIColor+MPAdditions.h deleted file mode 120000 index 58a8477cf..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/UIColor+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/UIView+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/UIView+MPAdditions.h deleted file mode 120000 index f1e8d49df..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/UIView+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/UIWebView+MPAdditions.h b/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/UIWebView+MPAdditions.h deleted file mode 120000 index e14b2640d..000000000 --- a/examples/PrebidMobileDemo/Pods/Headers/Public/mopub-ios-sdk/UIWebView+MPAdditions.h +++ /dev/null @@ -1 +0,0 @@ -../../../mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIWebView+MPAdditions.h \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/Manifest.lock b/examples/PrebidMobileDemo/Pods/Manifest.lock deleted file mode 100644 index 7cba2dc1f..000000000 --- a/examples/PrebidMobileDemo/Pods/Manifest.lock +++ /dev/null @@ -1,30 +0,0 @@ -PODS: - - Google-Mobile-Ads-SDK (7.34.0) - - mopub-ios-sdk (5.4.0): - - mopub-ios-sdk/MoPubSDK (= 5.4.0) - - mopub-ios-sdk/Avid (5.4.0): - - mopub-ios-sdk/Core - - mopub-ios-sdk/Core (5.4.0) - - mopub-ios-sdk/Moat (5.4.0): - - mopub-ios-sdk/Core - - mopub-ios-sdk/MoPubSDK (5.4.0): - - mopub-ios-sdk/Avid - - mopub-ios-sdk/Core - - mopub-ios-sdk/Moat - -DEPENDENCIES: - - Google-Mobile-Ads-SDK - - mopub-ios-sdk - -SPEC REPOS: - https://github.com/cocoapods/specs.git: - - Google-Mobile-Ads-SDK - - mopub-ios-sdk - -SPEC CHECKSUMS: - Google-Mobile-Ads-SDK: a1cbce28c0c78ca1fb0b6c4f213485f55527c99f - mopub-ios-sdk: 6e331c6cf6052426a750568578f55dd3de0a67f1 - -PODFILE CHECKSUM: 0368217e88031deb32211dd21720e510a3c78793 - -COCOAPODS: 1.5.3 diff --git a/examples/PrebidMobileDemo/Pods/Pods.xcodeproj/project.pbxproj b/examples/PrebidMobileDemo/Pods/Pods.xcodeproj/project.pbxproj deleted file mode 100644 index 1be7015fc..000000000 --- a/examples/PrebidMobileDemo/Pods/Pods.xcodeproj/project.pbxproj +++ /dev/null @@ -1,2258 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 0001103EAE765FD5E709587C81330A29 /* MPAdPositioning.h in Headers */ = {isa = PBXBuildFile; fileRef = 25FA7B57F19C1CADE50570737280C7A9 /* MPAdPositioning.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 01619D97278E976951F0DAE4D6AE1012 /* MPHTMLInterstitialCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D367AC0A87A73265E9060E3D5DFEC4AF /* MPHTMLInterstitialCustomEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 01D18131D831A0747B70FFDFB63A5542 /* MPURLRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E87C06C23517FB8F3FA160737E76F5EF /* MPURLRequest.m */; }; - 0233FE9CDF44B5EA4386E00C7E81F6C3 /* MPURL.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DA5AB9CF58E357F8318208442A322A7 /* MPURL.m */; }; - 023F9DDF832B48B210EE3118676B4127 /* MPRewardedVideoAdManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A2BD0639176EB88C4B27B7D8B02538E8 /* MPRewardedVideoAdManager.m */; }; - 026478637B0A56A106C23411001A53FE /* MPHTTPNetworkTaskData.h in Headers */ = {isa = PBXBuildFile; fileRef = 915E7F244EFB35467C35BC758D92F726 /* MPHTTPNetworkTaskData.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 048F44A454A3B04B270CF9E681478C4F /* MPVASTCreative.h in Headers */ = {isa = PBXBuildFile; fileRef = FC23AB19F90B304323C19E6FA1DB548C /* MPVASTCreative.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 04B19DEA4D29AC15BDC220A7FC3BE019 /* MRVideoPlayerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B52F222BC81C51B3427962CC6F50D0E /* MRVideoPlayerManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0600AAE7847F95372A974E6B129FFB9F /* NSMutableArray+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = CF43E5A781200F60D26BBD9042B02DE4 /* NSMutableArray+MPAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 06490E9762547C0041B176C401190177 /* MPInterstitialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1AF1B5103F3C45A2C768CA00200E4199 /* MPInterstitialViewController.m */; }; - 06BC7766CF658F6B0D91F69EDF7062A9 /* MPNativeAdAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 049208C17446EBD4ABD6649BE7FEE343 /* MPNativeAdAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 06C531D8730BB7810BE8A266A8F2A2B7 /* NSDate+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 61080907C1E63C9751878CF0A8AC84D2 /* NSDate+MPAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 073F2B60EA485A2669B79F23BF6EC57D /* MOPUBNativeVideoCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 599B172794EF95D483850BB2E3CC7F91 /* MOPUBNativeVideoCustomEvent.m */; }; - 077479EF1A45042A0CD1A9C89F80DCD7 /* MPVASTInline.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B1EF203CC51009F542D3C31D8D3211F /* MPVASTInline.m */; }; - 07B3E477BD2B05C17B9F6FF586039A73 /* MOPUBReplayView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A16BAED736507105BE0B983FE367212 /* MOPUBReplayView.m */; }; - 081932AFAE31BC7C22424303B4A7C5EC /* NSURL+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 97DC531AACD03871278DEC02FE8FA967 /* NSURL+MPAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0A178A4AC05BEC289A155B4FEBB6C5FD /* MPAdWebViewAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = C4CE4B478FA703D69999F9119A748144 /* MPAdWebViewAgent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0AD8FD1721DDCEA7316FE73E5468F227 /* UIWebView+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 518AFD8BC393FAC9F43A59FA036016B7 /* UIWebView+MPAdditions.m */; }; - 0B09144F888207E933B53575C8C6A45A /* MOPUBActivityIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = C84DDEA7B8CCAF7AC83F79CBFC37125B /* MOPUBActivityIndicatorView.m */; }; - 0C2FAC2E98A37038043473FBB6D68B6E /* MPGlobal.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CFD2C134EF50BE34F95102E12F40645 /* MPGlobal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0C61B213AC14037C8B9D744600508508 /* MPLogLevel.h in Headers */ = {isa = PBXBuildFile; fileRef = 958B5CF82D096456A6EA481387F57794 /* MPLogLevel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0CBAFCD0C91854A6CD24972C698B02C5 /* MPConsentDialogViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CE34D4B93211D562A3207D2FB0379B3 /* MPConsentDialogViewController.m */; }; - 0CCB49E919FB0E541CF1E539D2E4D7E8 /* MPAdWebViewAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = 3713FDF71B677F463F8F41A16B859214 /* MPAdWebViewAgent.m */; }; - 0D3AF3AF21BC0B49E7A8539F4290A06C /* MPVASTIndustryIcon.m in Sources */ = {isa = PBXBuildFile; fileRef = ED1AEE17CAE75B62E8022EE2C9816384 /* MPVASTIndustryIcon.m */; }; - 0D58DD092C315F9AEEA4794ACFF06D64 /* MPMoPubConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CCADDB0A233453353AB6B5FF11EBB23 /* MPMoPubConfiguration.m */; }; - 0DC92E001319039E15A20561C1618F6C /* MPNativeAd+Internal.m in Sources */ = {isa = PBXBuildFile; fileRef = 095EE5E477C87894BEFC72F6AD66418E /* MPNativeAd+Internal.m */; }; - 0E83EB3C1CB10DBF5DF53EF37C212CFE /* MPImageDownloadQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BFB909FF79D4AC98E30A345A73B4586 /* MPImageDownloadQueue.m */; }; - 0F29A46DEB3787967F746D848E12B644 /* MPAdServerKeys.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BFDB39F7E892906BDEFFAF4DE6FE49C /* MPAdServerKeys.m */; }; - 10C58206897CBD24F389D4CC445E91A2 /* MPInterstitialViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C811630C3F309D9CB3E78AB657F40B9 /* MPInterstitialViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1145943D3911785B994892589CC7A514 /* MPMoPubNativeCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BC882692B5D0B8BC7979B5D77EB9488 /* MPMoPubNativeCustomEvent.m */; }; - 1230BF086D5FFD39CF0E968B3374FF0C /* MPMRAIDInterstitialViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B4E3A7228A0B3494C4DE9B1C5530932 /* MPMRAIDInterstitialViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 12DA71595903FE38658575A2B7F3F08D /* UIWebView+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = C2C9B322A6F892DD8F351E301E802058 /* UIWebView+MPAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 146E60D797246932BAE0593DAB40610D /* MPNativePositionResponseDeserializer.m in Sources */ = {isa = PBXBuildFile; fileRef = B496534AB8F391AA91AC7E798673D367 /* MPNativePositionResponseDeserializer.m */; }; - 1519EFD8A60984F50AFF0AA779CFE496 /* MPAdConversionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = B920C4B1CB5B6D5B178F32273114ECF0 /* MPAdConversionTracker.m */; }; - 16297C15FCF8D48A4B21CD2CB1D0BF2D /* MPPrivateBannerCustomEventDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A085370B12F7CAA34F7884A96E37636 /* MPPrivateBannerCustomEventDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 16AE3CD2AC2B0A890F2E976F616F0233 /* MPClosableView.m in Sources */ = {isa = PBXBuildFile; fileRef = C4F74198ADD48CA8DD78A9DEAFBF90A6 /* MPClosableView.m */; }; - 16B30443602196FD482DD8304FB95D7B /* MPClientAdPositioning.h in Headers */ = {isa = PBXBuildFile; fileRef = 35A795C9E6E3211C1B264872A69CDD0F /* MPClientAdPositioning.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 17689B6FACC3DB006E37056D65787446 /* MPInterstitialCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 590C88E8B5E91304A01BF256DA016ED1 /* MPInterstitialCustomEvent.m */; }; - 18DB77AFE814D32F1DF0074FD8D962AC /* MPMRAIDInterstitialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EFF40F642089C473D639B7D50CDD5CF2 /* MPMRAIDInterstitialViewController.m */; }; - 18E5D20D6DC62B659EEF025D131583E8 /* mopub-ios-sdk-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A0BBCA2D281944E27735364ADA515AA1 /* mopub-ios-sdk-dummy.m */; }; - 18EABA336576906C414ECB32CAFC94AB /* MRConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 0C71474E43D96357AAB9A318BCC86E8A /* MRConstants.m */; }; - 19488443BECD8D29AC4CE872C5C17A21 /* MPMoPubConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = B69853533FF6ADA2AB033BCA3BFF28E0 /* MPMoPubConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1964180B530F0B90F7CFC6B7AFEBE80A /* MPError.h in Headers */ = {isa = PBXBuildFile; fileRef = 27529ADB723A835DB65958D015AC0C53 /* MPError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 19A5A0982B6BA6AA4BEABBDA2A183885 /* MPConsentDialogViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = DC48023361C05090FF625D03839F1A35 /* MPConsentDialogViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 19A83039B218B7CEC95306A722C43843 /* MOPUBNativeVideoAdRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 00510BB51BD33FF99CD1055142C9C97E /* MOPUBNativeVideoAdRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1ACDFEAB2154ECF64621AA45C50F49AB /* MPAPIEndpoints.h in Headers */ = {isa = PBXBuildFile; fileRef = BC6AE705AC230A384ACBC077ABDBB501 /* MPAPIEndpoints.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1B517202F17E6AE2AB49644E4716DFA0 /* MPNativeAdRendererImageHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 48AE4A78CD649B90A677C60C08E137E8 /* MPNativeAdRendererImageHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1D0FF864A9669794FE8BCD808B5C42A4 /* MPMRAIDInterstitialCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DE1B245ABF0AEC68D6AAC738D912BC2 /* MPMRAIDInterstitialCustomEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1D744D614090939E224F57D0EA31D903 /* MPNativeAdUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = A365FD4F33BE6509CE0FDE67BF58B14B /* MPNativeAdUtils.m */; }; - 1E969A00177FA32F43916E644C357102 /* MPNativeCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E76457F75BC7612C1DF0E4CDAB92C16 /* MPNativeCustomEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1F2F666C1D5A16D838A744C009D46D82 /* MPServerAdPositioning.m in Sources */ = {isa = PBXBuildFile; fileRef = C5FD0283D4D3656EFCCEFDF6BEC1247A /* MPServerAdPositioning.m */; }; - 1F7FC4A940284D3E3C12D8233EF7465A /* MOPUBNativeVideoAdConfigValues.m in Sources */ = {isa = PBXBuildFile; fileRef = F80E1633CD5C379956A587D4796C40E8 /* MOPUBNativeVideoAdConfigValues.m */; }; - 1F9AD166F0461810615076A4C78BD805 /* MPXMLParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 78773C03BEB994293DD90515B21EACDC /* MPXMLParser.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 204AA44C8D64A028074FD1BBB932E58B /* MPAdServerURLBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = C7F4608B9C77D6411DD870F77D43AF81 /* MPAdServerURLBuilder.m */; }; - 2154EEBAD8379B1564967CDBB06D20C5 /* MPVASTModel.h in Headers */ = {isa = PBXBuildFile; fileRef = EAABB1511906AA86FEB7ABC736F203C6 /* MPVASTModel.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 21CB5C6C59F5C7710CFBA2D22D93C3E6 /* MRCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 062E14CFB6987F43AE00F9BE5E0D8489 /* MRCommand.m */; }; - 223B10AC6CC2EE0C6458DD41505DCE9E /* MPGeolocationProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B62C31D8A3829226AF4540EA5256514 /* MPGeolocationProvider.m */; }; - 2440EFA82FECDA67AAC6AB63732951D1 /* MoPub_AvidDisplayAdSession.h in Headers */ = {isa = PBXBuildFile; fileRef = F1A20BD4BAC44D3674A2D59EB3DFD892 /* MoPub_AvidDisplayAdSession.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 245DB158204A0F3E9DFAA385C2E874DC /* MPAdAlertGestureRecognizer.h in Headers */ = {isa = PBXBuildFile; fileRef = DFC8BB2E4D59CA11ABBFD13057C298E1 /* MPAdAlertGestureRecognizer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 24EF18B38F40181E0CE532D8709498F3 /* MOPUBNativeVideoAdRendererSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 483B843D0249C54796D3618548AD6D3B /* MOPUBNativeVideoAdRendererSettings.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 251965FFD7889741FE277F80C7A99293 /* MPWebView.h in Headers */ = {isa = PBXBuildFile; fileRef = 505EC7EBE0E56C9DB19FBE2AAD1CF008 /* MPWebView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 252BC7C44F66EFA3DF7629BECDCA3B65 /* MPWebView+Viewability.h in Headers */ = {isa = PBXBuildFile; fileRef = B96809DB8BB31B53976A0958B754B0AA /* MPWebView+Viewability.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 254CC8224C401030FAA2F5018FF23FC8 /* MPLastResortDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A7EAD1692F1841BC2C0841761F0CCE9 /* MPLastResortDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 25A256602614778B7BD99DFBEAD48429 /* MPCountdownTimerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 48C26C12A1774A0F103892F407BB070E /* MPCountdownTimerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 25B1E562686BED290D88B3C80DDCC717 /* MPAdAlertGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9E37AB0A24C3777F396ADAEFC3EB05AB /* MPAdAlertGestureRecognizer.m */; }; - 27F37D84E271ED0CBC6D55411D85B416 /* MPUserInteractionGestureRecognizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C3B58CA6A4BCF53AFD885B994AB2466 /* MPUserInteractionGestureRecognizer.m */; }; - 28DF0A6854767CCA0031732C150E406F /* NSMutableArray+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = F07CAFDBEABF657E4554CCAFECB266D0 /* NSMutableArray+MPAdditions.m */; }; - 29F084BB5383903A9A547ECD669CB395 /* MPVASTMediaFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CAA0263AB473E89C5A0F88D6F6A64C5 /* MPVASTMediaFile.m */; }; - 2B0332187880355A3277A1CB8917916A /* MPMoPubRewardedVideoCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = E39202E7DFB41C1C1AA14161C4350D90 /* MPMoPubRewardedVideoCustomEvent.m */; }; - 2B23F1C1FDB2B9C26838A28D8560C1F3 /* MRNativeCommandHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = B655561C64B526ADFF65F6FDC7E993CD /* MRNativeCommandHandler.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2B8640FD39AA159CA615B7BD751E8423 /* MOPUBNativeVideoImpressionAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = C706B6B8013E04843FAC4AB2ED5BB710 /* MOPUBNativeVideoImpressionAgent.m */; }; - 2B8A62F8FC2E6FACAE0939FE601BC681 /* MPVASTLinearAd.m in Sources */ = {isa = PBXBuildFile; fileRef = BB0C48FDC24D1E89A89272F5490538DC /* MPVASTLinearAd.m */; }; - 2C2B2B49AE29F78C58F97022248C3C64 /* NSString+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = C76825C5F64783A60863BAFC9FFEF6ED /* NSString+MPAdditions.m */; }; - 2C4F327883E113E134B00E7947BDFAD7 /* MPRewardedVideoConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = 682738E757DC07C82AC542F70D04CB05 /* MPRewardedVideoConnection.m */; }; - 2D062AA87FF53B7E30F82EAFE18EA8A3 /* MPConsentManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AA2E344DA66B86B2BD84C7F1713A116A /* MPConsentManager.m */; }; - 2D434F325DE7461EA0D225A66B5FB805 /* MPCountdownTimerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C524F71FF05DC37DFED25E854B11C0D /* MPCountdownTimerView.m */; }; - 2E0C7402A09458DF80CA735854D62D19 /* MPMoPubRewardedVideoCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 20F29D05DD0079D86070E238CFAE9CF9 /* MPMoPubRewardedVideoCustomEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2EFEFDA571301A504CDD364C45DB4963 /* MPCoreInstanceProvider+MRAID.h in Headers */ = {isa = PBXBuildFile; fileRef = AB34BCEDAE85C706212B251051298DEF /* MPCoreInstanceProvider+MRAID.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2FB64E1A237A51CCE7C21D0F4AE2EAFE /* MPHTMLBannerCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8225B6EF6AA94FD20D61B06417776A0B /* MPHTMLBannerCustomEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 308A2A43E2FA00EE53BD35A960D053D6 /* MPNativeCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D16902D9559C992CD359880D50F4B3A4 /* MPNativeCustomEvent.m */; }; - 31600E97AF319EC95761518A0FCD2B99 /* MPMediationSdkInitializable.h in Headers */ = {isa = PBXBuildFile; fileRef = F66F0AEA8C6058E46277098D9D2562D8 /* MPMediationSdkInitializable.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 32AF38A3D3CC651E49AAEBA5B97CEBDF /* NSString+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = FBADFA21D6CF4FDF92F510EAF0FF4319 /* NSString+MPAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 337F437390C796F603CA5BA0D085A937 /* MPRewardedVideoAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 38A81E78B978F40894F855A32BEBDB27 /* MPRewardedVideoAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 338B16AD753154D15666799D96CF55A6 /* MPVASTResource.h in Headers */ = {isa = PBXBuildFile; fileRef = 68ABBE6978A829A88D2FD2F9F27E73E1 /* MPVASTResource.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 341A605B282A90AC871A46A3B17F1C1B /* MPVASTCreative.m in Sources */ = {isa = PBXBuildFile; fileRef = 66AF777E59370ABF37704D150EF681FB /* MPVASTCreative.m */; }; - 35B32CDFC8C1B3E5762C424827813B10 /* MPNativeAdRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = 52A668C203B25E48B42E24E9F32F108B /* MPNativeAdRequest.m */; }; - 35E079D7E7EE1F6EE7AFBA365D023BC8 /* MPNativeAdError.h in Headers */ = {isa = PBXBuildFile; fileRef = A6BCC8E83197454544A109D00F396634 /* MPNativeAdError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 35F800A2761286F4DF79682D27637C27 /* MPRewardedVideoAdManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 847189F08D89DF3C9E9519F038A0DA06 /* MPRewardedVideoAdManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 367F95236A6C7935B947480DE220E2E2 /* MPAdConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 86D07EC4C8A6B393A60BB1E4F2C195AD /* MPAdConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 36A75DAD9BD599FBF80FB7DD47F1C0CE /* MPRewardedVideoConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 93394A2CCDC05379C87BF2BA5652A6C4 /* MPRewardedVideoConnection.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 36ED820965504179F7A7C721B091302A /* UIView+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B16186616192AA09429941B6EBF67E8 /* UIView+MPAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 36ED9977AA9C183DB823D783777EB78F /* NSError+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 81DF74E143B47C067A78725571FC4CAA /* NSError+MPAdditions.m */; }; - 3718A4540AC5320B9D28B1FD383EFCC2 /* MOPUBActivityIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 667665900D624D45D60FE889436B32B1 /* MOPUBActivityIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3764D0A897FE864A9799E9108E3FAAFD /* MPInterstitialAdController.h in Headers */ = {isa = PBXBuildFile; fileRef = 56B0E03F53B70FC9DF26CB21F4102090 /* MPInterstitialAdController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3829153B7B4E3473771F9B9285249B89 /* MOPUBNativeVideoAdConfigValues.h in Headers */ = {isa = PBXBuildFile; fileRef = 8828542402C4098C7BA4C65B237B939A /* MOPUBNativeVideoAdConfigValues.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 39F9E9103C38DB65544745AED40E5954 /* MPActivityViewControllerHelper+TweetShare.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A4D86A8AA5459460ED9035FEA892EB9 /* MPActivityViewControllerHelper+TweetShare.m */; }; - 3A20059A6BCA5A709777A4476A7E6F40 /* Pods-PrebidMobileDemo-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E8EC67306067AA573EF033FD77A4804E /* Pods-PrebidMobileDemo-dummy.m */; }; - 3A46DC1788EBF18B0F768A6819A39BC9 /* MPAdConversionTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 16E5C35246AF149A59F5199D799F00A9 /* MPAdConversionTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3A4A4839C786C4A940317B994F376ECC /* MPCoreInstanceProvider+MRAID.m in Sources */ = {isa = PBXBuildFile; fileRef = E055D659DE5597E7962C48F11135A071 /* MPCoreInstanceProvider+MRAID.m */; }; - 3B1156F833DB69E05D0AC87D8089867E /* MPNativePositionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = E5E988BBBD96F48920F894E48756D1D8 /* MPNativePositionSource.m */; }; - 3BC5E70A5A72B37311FCC20C90F4F1DA /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1B9AC692EAAF0B1D08BD42F9F1400E8B /* Foundation.framework */; }; - 3C77A8D7999D3437E10CA61C13E638A2 /* MPIdentityProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 36D45A766EE83B3F7832B961CB1FA271 /* MPIdentityProvider.m */; }; - 3ED04A91D5C7D6FA2B9AB331E0F97344 /* MRBundleManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1090064C185F36AC53092C1CE3F0281A /* MRBundleManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3F78054FD9415800D5EE8907BDABCCB8 /* MPVASTResource.m in Sources */ = {isa = PBXBuildFile; fileRef = DDE9BF49FB6F8C3830F19F8AD6936F39 /* MPVASTResource.m */; }; - 409F24EAD2B073E1BAD9AAF77622B3A2 /* NSHTTPURLResponse+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 35421D6B15CB07433EBA7B5136D9534B /* NSHTTPURLResponse+MPAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 40C14148438FA648C5C2D14E368AF879 /* MPConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = B32BB6337C801379FDB3608644E89F53 /* MPConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 40E3684E698C5EE6AE940F4610437E9C /* MPNativeAdConfigValues+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = E367F741057598308711F5C50D2006C9 /* MPNativeAdConfigValues+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 415E6EEFFA75A8425E979ED23D19E807 /* MPNativeAdDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 82D2B19E999C4B208D6F0CE070DC587B /* MPNativeAdDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4181367F0CB2F2CA1890F8991392E1E3 /* MPIdentityProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = E9A097FFCFD84CE7F869717A3854780D /* MPIdentityProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 41964CB18EBEBAF59A00666EEACE39E8 /* MPVASTStringUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = BB2B2004F21AF6D90670C785AC555084 /* MPVASTStringUtilities.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 421352ADA312623237389AA8942D4AA7 /* MoPub_AvidDeferredAdSessionListener.h in Headers */ = {isa = PBXBuildFile; fileRef = E58E60D6B757C1654053DAFAFFFC889D /* MoPub_AvidDeferredAdSessionListener.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4274191F2BB2B5F5F66DC478AB3FF3AD /* MoPub-Bridging-Header.h in Headers */ = {isa = PBXBuildFile; fileRef = 47308A81F8A044CE57C9B84F3E5A34F4 /* MoPub-Bridging-Header.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 42A0CBD4E933F1E0E63B48178F2B6786 /* MRNativeCommandHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D4F4735034A493C4E3BCCBF7AFC0D97 /* MRNativeCommandHandler.m */; }; - 4326BB56EC90C81D8D0BC025DAD54300 /* MoPub_AvidManagedVideoAdSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 00539895FAE6DA670982831760780175 /* MoPub_AvidManagedVideoAdSession.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 44EF1E8DFFF890F1019334FC6FA9C797 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3A1713070838317389B0A4D3B1279F1 /* CoreLocation.framework */; }; - 45B078CB3CA94FABDA8CEB5F36257427 /* MPVASTMacroProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = C0C0DC1AB0A419009B2207C4BF671B3B /* MPVASTMacroProcessor.m */; }; - 460D0C63DF194767E57E00D22B804A21 /* MPVASTInline.h in Headers */ = {isa = PBXBuildFile; fileRef = 01F82CA7EAEDB56F37870657E46EB70B /* MPVASTInline.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 482297CF9E5553AD13C0C3BEBA6722D6 /* MPNativeCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B146BDA5C495B465729F7F2B9716556 /* MPNativeCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 483BCCD9F398000E345EEE16CC3BEFA9 /* MoPub.h in Headers */ = {isa = PBXBuildFile; fileRef = 7068A59AD88E4DA00A75E93C0F18AE9E /* MoPub.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 48FCCFCC3E946B332CB8294E632EBC32 /* MPURLActionInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = A3768F1014BBC90B64E89A8663D640C6 /* MPURLActionInfo.m */; }; - 498F63A932727E765F6AB814D261D94E /* MPInterstitialAdController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7013B712A5DCD8F54FDD1ABEFC8387AE /* MPInterstitialAdController.m */; }; - 49E5B8FF40E3E16412B0CEEC6291174B /* MPAdPositioning.m in Sources */ = {isa = PBXBuildFile; fileRef = A79B27383EFC56FA4314B0CAB65BA7EE /* MPAdPositioning.m */; }; - 4AB9AAA54B061A5785C6B68C40A92E63 /* MPDiskLRUCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B7A7D35A3604AEDE456E5EFC09EE3E3 /* MPDiskLRUCache.m */; }; - 4ACFEE6F6A1B442666DBE233890CBC18 /* NSBundle+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = E248ABD4E7E6D6D39819253C76AAC8CD /* NSBundle+MPAdditions.m */; }; - 4AE79E32047F9E9C19A659902B8ED10E /* MPAdBrowserController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EE84A7D2E74CCFC10CE81ACDE82D5F3 /* MPAdBrowserController.m */; }; - 4AFDE250EA32415D7B1801B78231A4B9 /* MPInterstitialAdManagerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = A67C6436492D3DF15586592ED2A668CA /* MPInterstitialAdManagerDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4B649160240E4883D41EA7F3C826FDAE /* MPReachabilityManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E6D23CCE3BD6B5D2DA0E4D60A5DFCF8D /* MPReachabilityManager.m */; }; - 4B74A434B01448D3E6ACAD96DAF29D16 /* MPLastResortDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E0308FC02008663971ADE4E7FA0F5989 /* MPLastResortDelegate.m */; }; - 4CD6D9F6FA48C97AEFC56B9130A359B9 /* MPRewardedVideoCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 140F1A237A03BF5B0D0A43D01C270139 /* MPRewardedVideoCustomEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4EAFAC21A02BF3E6CC1B7935976C2485 /* UIColor+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = D37D1C8C8C390E715A512EE98F4561EF /* UIColor+MPAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4FCA94F7C67DE89C83169E9E0F61B380 /* MPStreamAdPlacementData.h in Headers */ = {isa = PBXBuildFile; fileRef = EFD0108DF2CA8176BFBC5754B8156FC4 /* MPStreamAdPlacementData.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5030884A4A2EC260173D580B12CA50C9 /* MPMediationManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 314E9DB01B1FA2088DAA4F0B75882A7C /* MPMediationManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 50BA1D3EC24FF1F18FB4B84BF2128456 /* MPVASTMacroProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = DADC9A09C4E2A86991367A4CDB048CDA /* MPVASTMacroProcessor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 50CFD9CBA971EA7A7C6F6B7C18459EE2 /* MPRewardedVideoCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C343D13D77918349EF073B4AC04B2D8 /* MPRewardedVideoCustomEvent.m */; }; - 50D5384F39D3CA071A5CC1A7C9E5E65C /* MPVASTManager.h in Headers */ = {isa = PBXBuildFile; fileRef = EB1AF4ACB89A2DCEBA1292A739B3C75D /* MPVASTManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 51164C3CDE864A39A47507CB1F859738 /* MPNativeAdConfigValues.h in Headers */ = {isa = PBXBuildFile; fileRef = ECAB7D41B3E8A3534C08A1056A1D81ED /* MPNativeAdConfigValues.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5262535F9C076AC71CFF49EB50FAFC84 /* MRBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = 5E26C9C74F15AFF32D69AA767F27E917 /* MRBridge.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 536E9DE1B7C98536809069DBB629554B /* MPAdImpressionTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 79DD63E9905486C80F2E45430F16D929 /* MPAdImpressionTimer.m */; }; - 53BBC71D800E8692CE4D53A3426AB951 /* MoPub_AvidManagedDisplayAdSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 42D09FFE96519AA60024109D8B83A47B /* MoPub_AvidManagedDisplayAdSession.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 54F17F2EEEA575094AB4741E3B2824A7 /* MPBaseInterstitialAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 84516CD403D0951B751613814E1605ED /* MPBaseInterstitialAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5609575AA61E8489185BB2AA5FB30D6A /* MRController.m in Sources */ = {isa = PBXBuildFile; fileRef = 03FDC86A31EA1E9CEA24AC01A7025070 /* MRController.m */; }; - 56CDAF977E02029355C316F7DC69B081 /* MPHTTPNetworkSession.m in Sources */ = {isa = PBXBuildFile; fileRef = DC4307E06FEA92E23304685729875648 /* MPHTTPNetworkSession.m */; }; - 57846C6FACE82A0DF8E8CD68D92123F4 /* MPNativeAd.m in Sources */ = {isa = PBXBuildFile; fileRef = C0AB984CE6608311EC2263DEF4B1966A /* MPNativeAd.m */; }; - 5791BC2328ED77FC95E0468BBCA6D8D3 /* MPViewabilityAdapterAvid.h in Headers */ = {isa = PBXBuildFile; fileRef = 87F5C1AC5DF28B45EFE179281B0F1BC7 /* MPViewabilityAdapterAvid.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5882CC20C392EEBCB9615A80D068DC85 /* MPNativeAdSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 485F91F85FB6D47AC5E3C65465846497 /* MPNativeAdSource.m */; }; - 58C716FD9B46A95B6AEA7344B53177BE /* MPNativeCache.m in Sources */ = {isa = PBXBuildFile; fileRef = F7F57684F4FE561221F3505432109DC6 /* MPNativeCache.m */; }; - 58F6684FD3C062F6CD6C98D8ECFA60E7 /* MPNativeAd+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 99ACAE9CF760FD3F08AB770BD258E533 /* MPNativeAd+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 59741C98BAF2DB6F227E627EF93FD44A /* MPWebView+Viewability.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E8DD426734513D42B3C5DBB786115FE /* MPWebView+Viewability.m */; }; - 5A61AE57DFBD6DD980BD122FE0942DB6 /* MPBaseInterstitialAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D29A5B2A882A6AA1B4B7DC386C7CF35 /* MPBaseInterstitialAdapter.m */; }; - 5AF0AB85E3A7106E05A7659A02A8C8F3 /* MPHTTPNetworkSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C20E0CA320F53383F5E48B4864060DE /* MPHTTPNetworkSession.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5AF1D2A4FE2267F0AC56F704E20ABAEF /* MPInterstitialCustomEventAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 308B607410978A5D03DCE54AD3234725 /* MPInterstitialCustomEventAdapter.m */; }; - 5B37556E4B5BABB1AA4072E44347DD60 /* MPNativeView.m in Sources */ = {isa = PBXBuildFile; fileRef = D93CA6FEF5B6F23D70904853C408261A /* MPNativeView.m */; }; - 5D6D4DCFE3FADA3F3C8983919095F111 /* MPCollectionViewAdPlacer.m in Sources */ = {isa = PBXBuildFile; fileRef = 69699BF902A03C059F8A1D0B98B6A3B7 /* MPCollectionViewAdPlacer.m */; }; - 5D8E6FF91B6DE7F61C324FFB04EB69DF /* MPMRAIDBannerCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A28F595EF4BCA658355EEEC2588418A /* MPMRAIDBannerCustomEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5DA59A0AC71384DC320D3632920AB75C /* MPAdServerURLBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = DDE37E16BD43FBF2042010DBD6D79865 /* MPAdServerURLBuilder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5E22A17EF5B119ACCFC0B95077C36152 /* MPRewardedVideo+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = E1F3E9521FF9B6F018088FE1D31E4B03 /* MPRewardedVideo+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 60067305E8550B4AC25E81C19E7DDFA3 /* MPTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = F7604B70F2C26002AE4774F2BB331B0F /* MPTimer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 601D4980DADE035AAE08C543ABABACB9 /* MPRewardedVideo.h in Headers */ = {isa = PBXBuildFile; fileRef = 59D854CC11E7DC7D1B42E4E1B8D6A4A0 /* MPRewardedVideo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 609F58C179813A5A354A944F96CC01A3 /* MPNativeAdData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E6EC6680CDCEA808C71043C01EEB176 /* MPNativeAdData.m */; }; - 61DB588F4E237EBCED2611596EE503E1 /* MPLogProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C62C69DC7285E88D81E3121D8C9072B /* MPLogProvider.m */; }; - 62E55A81DCEEC7087C0FC0D582B21CDE /* MoPub_AvidVideoAdSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C393DA988663DF5C4EC5DACBB1E3E7F /* MoPub_AvidVideoAdSession.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 62E7B4E22D61C2E08F2F7CB536B4338A /* MOPUBAVPlayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 12D32771515DC2E9CBD463C9A1FCB491 /* MOPUBAVPlayer.m */; }; - 647D3F7B17A17DD9E6FF944068340CF9 /* MPBannerAdManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EA84708F95322E1D56C3549668B1431 /* MPBannerAdManager.m */; }; - 64A299E0682E1ADECF15F51214E14AEA /* MPCollectionViewAdPlacerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = FE662384961B58D2069B68B3C6CB655F /* MPCollectionViewAdPlacerCell.m */; }; - 65ADD15093F45490060CEA30E69D08EA /* MOPUBAVPlayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 02516B36C5D86CA77A11122A04458DBB /* MOPUBAVPlayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6633E87CA07901DFBEE6AADA47A5E422 /* MPStaticNativeAdRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 74A77272B3F23FFFD47DEEFD29CCA0C4 /* MPStaticNativeAdRenderer.m */; }; - 6696E7ADA7B808FDEE5F0EF1AB324CE2 /* MPAdServerKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 82F3A432473EEC52E22EAC56EC183708 /* MPAdServerKeys.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 66E3370D730AD3BCBE0CDF15C2BB0E4B /* NSError+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 44C7B20AC5ACCA5B62127A0B9291657E /* NSError+MPAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 67544B447B196C75B658CE1A05EFDE62 /* MPBannerCustomEventDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = D8E6FFF780B2D955038B49AF32ACE91D /* MPBannerCustomEventDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 67F0E3D6416E11ADA19735CD6C0192BB /* MPRewardedVideoError.m in Sources */ = {isa = PBXBuildFile; fileRef = 21F3A33787480241B32572807612E5AA /* MPRewardedVideoError.m */; }; - 681614198C93B8BF5EEA6321C9CEEAE1 /* MRBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 554F4CE235F8732E0634E4F1ED2B0536 /* MRBridge.m */; }; - 6822A870104D37E51F8EB5366B915186 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C56BDCBFCC45B6F5AF3F9F47A9CA0CB /* CoreGraphics.framework */; }; - 686681A5C532044F40BE218624787DD6 /* MPNativeAdConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = AAA1655BD1F88AF54233D0B437B0E3E4 /* MPNativeAdConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 689624796256C6BCA8B51FCC25FDC981 /* MPURLResolver.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D50CE5E2C2E44DD12E38D08E423AF89 /* MPURLResolver.m */; }; - 68ED4B9B3660DD0AB17753B330B84832 /* MOPUBNativeVideoAdRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 78C7B75DA16C66F8A9B89C1866D3DA5C /* MOPUBNativeVideoAdRenderer.m */; }; - 6A1315FBC9C283A7E008A3BCA9977F37 /* MPNativeAdSourceQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 44A7B9143871670562C3799075CC01F5 /* MPNativeAdSourceQueue.m */; }; - 6A49BA338F36B0E6571829FABB8972C9 /* MPBannerAdManagerDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F7CA0B04E09B7481603830448A37A8C /* MPBannerAdManagerDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6A6BFCCA1235DB291360CAF3138A82A1 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8AD95340DB0BB4590FB5B3275EA907E7 /* CoreTelephony.framework */; }; - 6AC8F120A9041D5553DA3619BB6AD300 /* MPAdTargeting.m in Sources */ = {isa = PBXBuildFile; fileRef = C3F3D7D4B00FDB6A27EA55D429C4804A /* MPAdTargeting.m */; }; - 6AD42E228BD38B6FC610109119169D4D /* MPClosableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 23B4693F22C40632E9FBFBE3467FB42A /* MPClosableView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6B071A607D2A98A3BCFCD02486980DB8 /* MPNativeAdUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 99F6AB32342C7D87412854A10E00E442 /* MPNativeAdUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6B122C258F2C5B9652D2277FF4A48C62 /* MPStreamAdPlacementData.m in Sources */ = {isa = PBXBuildFile; fileRef = BAD109338E52785C26618DF1F0950BEA /* MPStreamAdPlacementData.m */; }; - 6B9A9DADD356290E1D038DC197559850 /* MPCollectionViewAdPlacer.h in Headers */ = {isa = PBXBuildFile; fileRef = 32F7C811B35C265FA43941648B43F807 /* MPCollectionViewAdPlacer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6B9DE811A2F73B08CC966A43821AD005 /* MPURLResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 50014E2A3FFBD320D3BC5FB88A4E85A5 /* MPURLResolver.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6BDE9F9AB0AB66735F52A5C6C758D3F6 /* MPVASTLinearAd.h in Headers */ = {isa = PBXBuildFile; fileRef = 513545EE94647C1D63BBCA115C5233A6 /* MPVASTLinearAd.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6D1C30E66BAE116664BCB9DA95608616 /* MPBool.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B81ABD1AC30268341FE91D2A66B8E64 /* MPBool.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6D585D832C7883006F28C509154D05C1 /* MPMoPubRewardedPlayableCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D779BEE3E2F14CBEF5938CAD55B6886 /* MPMoPubRewardedPlayableCustomEvent.m */; }; - 6DC3FC3D62C8D890F07F56E833F1CB29 /* MPVASTTrackingEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = FBE55A84F9AB32C1CA36FC437BE1DAC6 /* MPVASTTrackingEvent.m */; }; - 6E51DBE69649436E44607BDC9D97C327 /* MPInterstitialCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4399B7E9D240C7692EBB998A209376BD /* MPInterstitialCustomEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6E52A52816E781DEA0486D68E5A64A20 /* MPConsentChangedReason.h in Headers */ = {isa = PBXBuildFile; fileRef = E5D63FC08A46BB57EFF8B56A8B065EBD /* MPConsentChangedReason.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6E54657454D40B7C8DBB2E4DB87D16DF /* MRCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = D5DBB70A8E3EE44969F4F7DF9C7B0476 /* MRCommand.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6EBCF4AA517B1ACA7D8D5F41AC96B970 /* MPVASTTracking.m in Sources */ = {isa = PBXBuildFile; fileRef = 84748373A6CDDC34BFE69CA0D8933EC1 /* MPVASTTracking.m */; }; - 703E6B8C21D9529B09116E96DD2EDFD7 /* MPRewardedVideoReward.m in Sources */ = {isa = PBXBuildFile; fileRef = D4E2E57F02D333828355BB27CB5999D2 /* MPRewardedVideoReward.m */; }; - 72A1F43AFE4BACD3039DAFD26C25E771 /* MPViewabilityAdapterMoat.h in Headers */ = {isa = PBXBuildFile; fileRef = 6A2AB8A956D4B69FDE1FBA3C8FA6968E /* MPViewabilityAdapterMoat.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 72D9A8461F26908409E8649E6D468A4F /* MPViewabilityAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FA902772F39E38C6BF80FC6F3793E5C /* MPViewabilityAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7387C2CA13F2B4DE906394A172EC2E2A /* MPAPIEndpoints.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C24DB19F9E63FFD8F38E4EB14DFA6D0 /* MPAPIEndpoints.m */; }; - 73F828421DF7CCA6DFE9D88A4B72B729 /* MPAdPlacerInvocation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EE8D1EA3932CE9781A46327C0163DF2 /* MPAdPlacerInvocation.m */; }; - 7407578F2D72F03FB859610FBF7BD442 /* MOPUBPlayerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C2CE5BD664909CA9A49904262D7F55C8 /* MOPUBPlayerViewController.m */; }; - 74100C066D44437846A90032C7D73AAC /* MPConsentManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E826893DB087DB56EE80FBBB7B2637C4 /* MPConsentManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 742AD4675D7E8F71E1BA28B3E84F3620 /* UIColor+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 935D1D629139E22E52AE88EAF3E711A7 /* UIColor+MPAdditions.m */; }; - 74C1D5B841A3DDF7865B57D2AB13061B /* MOPUBExperimentProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = A12FD53C607F36FEC9DDDDDAEAD8E40B /* MOPUBExperimentProvider.m */; }; - 757E17AE4E81A745E6F34B4F3F556921 /* MPRewardedVideoReward.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B61789D97354FBAB4799A9C17706A82 /* MPRewardedVideoReward.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 75D19A14B1854EEE3124D1E8881EEFA3 /* MPMediationManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E97BC1C89D9E6B55DFFA26FD9F44428D /* MPMediationManager.m */; }; - 76AEE63A9C43EF91C21678663A4510B2 /* MPAdAlertManager.h in Headers */ = {isa = PBXBuildFile; fileRef = D82BF26409EB41698EC273DDF9225205 /* MPAdAlertManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 76B5DDDEC4F25B158396C06A6E51F557 /* MPHTMLInterstitialViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = A63F8F1F701C5BCCDFF60300343EE181 /* MPHTMLInterstitialViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 774F0BDDFECA667BB08773F076C81382 /* MPVASTTracking.h in Headers */ = {isa = PBXBuildFile; fileRef = A395EBB5F6DF387A602BAD06758A17F2 /* MPVASTTracking.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 778381C35243C06EAB9005B822B37F48 /* MPForceableOrientationProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 205F9C14EC4704DBE04439ADD32A5B5D /* MPForceableOrientationProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 78807540C3A407DC5C60369A5BFEEB80 /* MPMoPubNativeAdAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = B037F002C0260B61F3CF806422FE6FAB /* MPMoPubNativeAdAdapter.m */; }; - 78810BA0161B683BF3CA153384F55157 /* MPVASTCompanionAd.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C8A646D3E09B26646C27235807DEC09 /* MPVASTCompanionAd.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 794AF7790C86BA1ED82118ADEDF66961 /* MRProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 9027AAFCCEF76C0892DDC93A6D3F4C15 /* MRProperty.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7A8C4E1BABF0459F2B30506370606F90 /* MPNativeAdSourceQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 00C98CE31FD40A57423C565D61BB4C42 /* MPNativeAdSourceQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7AE6BB63E1185090EB4FBF3DDAFDEE44 /* MOPUBFullscreenPlayerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E9B710C00ED83BA43710FDE68EDD12CA /* MOPUBFullscreenPlayerViewController.m */; }; - 7B5365211225531AC01D228F87B6DAD0 /* MPInterstitialAdManager.h in Headers */ = {isa = PBXBuildFile; fileRef = BE296C612588CFE0E16F9B86CF492A20 /* MPInterstitialAdManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7B56DD6FBDFEF66A804F65FB5DBEEFBF /* MOPUBPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 89F92D155AC1F80ECD72F37367C8E564 /* MOPUBPlayerView.m */; }; - 7BB5ECBAEF8A0598258093A83C3945C2 /* MPAdServerCommunicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD322E60CCDB047A4D2FEAC523A821A /* MPAdServerCommunicator.m */; }; - 7E435E31CE34D2DD08C78F473BB28BB2 /* MPStaticNativeAdRendererSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = CC9A3BBC595418ED2B144220635A49D7 /* MPStaticNativeAdRendererSettings.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7E5218BBE08D5E0EC184B9E0AFBA49A9 /* MPVASTCompanionAd.m in Sources */ = {isa = PBXBuildFile; fileRef = 004991EBE1C5BAEB9342DE1C32667D18 /* MPVASTCompanionAd.m */; }; - 7EDB282B655C1E76E7F8CFA67657FDDA /* MPLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DD574D37D116D749B5D9336AF3A3B6F /* MPLogging.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7F32C1CF2395A8D82D2B2387851EDFB5 /* MPLogProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 4CA5BC2A3956F0240098899894675F3F /* MPLogProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 818015D85B62018092324C109CC80474 /* MPMoPubRewardedPlayableCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E841DB5AFC0898D5203DF42E138B1CB4 /* MPMoPubRewardedPlayableCustomEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 81D43E97EA84D0595A57345AE244BF66 /* MPRewardedVideoCustomEvent+Caching.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F055A8AEE0C70B9109ADD89B8E2F978 /* MPRewardedVideoCustomEvent+Caching.m */; }; - 829F0C2257D529B6F13A0C0D1CF28683 /* MPCoreInstanceProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 827A0F32A21C4FB889B109CF30FFE368 /* MPCoreInstanceProvider.m */; }; - 8371B6602D00843B1D3101D29A8FC5E0 /* MPHTMLInterstitialViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F8824EF05A053E42572A2A2DF0268645 /* MPHTMLInterstitialViewController.m */; }; - 8390282C4EC14637F1F5003A57962466 /* UIButton+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = FCD43EB0D49AD4E105A090EE5AB0F261 /* UIButton+MPAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 83A76A4E00E0F35BECDEAE14081224ED /* MoPub_AvidVideoPlaybackListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 49088FAC20BF8E1A37751792A82CF071 /* MoPub_AvidVideoPlaybackListener.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 841193D25B58FB469F86FBF87B3329E2 /* MPNativeAdSourceDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 914CEE2F43A1361B7DAD97E5FD95F3E7 /* MPNativeAdSourceDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 846BD8D2F719E1631AA4A95778E2F4E0 /* MPAdTargeting.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EC09D3242325127EBCE2D7EE7D97D81 /* MPAdTargeting.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8535B4E5FEAA1952B72A3B11F770AC58 /* MPNativeAdRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 2057B643647618168BAE756DDDF6ADD3 /* MPNativeAdRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8576CD5A870CB06C24A42DF30A6D93BC /* MPBannerCustomEvent+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 22986C0CB52459241E21F9216AA80A97 /* MPBannerCustomEvent+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 866F01A2C8B109A4FE16EDD74401B46C /* MPMemoryCache.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FA6E6C9BF934930AFCCD8D6CBE34CA7 /* MPMemoryCache.m */; }; - 8676477F22818AF98D1ACBF81744E54A /* NSString+MPConsentStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = DA08C790EC506E6891F6202527714A28 /* NSString+MPConsentStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8736DFBFD30732B4C3C38E7F60EE8156 /* MPTableViewAdPlacerCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 783AE5701397975CDEFCA1A906D27BC2 /* MPTableViewAdPlacerCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 87622CA940589FDD7AAFB6E0398ACE85 /* MPMRAIDInterstitialCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = AFD84F26EAA72F51A04B1E9B04EE79A2 /* MPMRAIDInterstitialCustomEvent.m */; }; - 87A8B6960744BD51CF064B5F1E9E82E6 /* MRController.h in Headers */ = {isa = PBXBuildFile; fileRef = 223CCC5CBC5E5F25AD719B02C2AEB7B2 /* MRController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 87E91AE62FDB8CF407FAF794A67CF2E5 /* UIView+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = B8A47C7B1DFBD8EB571A30F1D7DC2E88 /* UIView+MPAdditions.m */; }; - 88B913963FA97D6C84D7E885D4711084 /* MPVASTModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 6901D93648A46CB8DA8FD80AFC141617 /* MPVASTModel.m */; }; - 88E7DA3339D91C8FA54910E35DD18B58 /* MPHTMLInterstitialCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 12D60DAC4BF304D0054210F47BAE5CE0 /* MPHTMLInterstitialCustomEvent.m */; }; - 89483F16A5BDE5FC6666B32B6F03E873 /* MPAdConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = EF6628239AD97DB1F795C679888F186B /* MPAdConfiguration.m */; }; - 8A7C4DFE1242FEC3B17B7E0098EBB806 /* MPAdPlacerInvocation.h in Headers */ = {isa = PBXBuildFile; fileRef = A03904F7F2A4E8A6403BA5D6A2E88CBD /* MPAdPlacerInvocation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8BABF2A9B68993ED8968B18ACB30197C /* MPMediationSettingsProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D2526228E9B4832684A3CFE425176CC /* MPMediationSettingsProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8E3ECC8DDA894775E84A86CAC1EADF65 /* MRExpandModalViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B2A7EDBE5CCB3C2642F9F4782896808 /* MRExpandModalViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8FA661C2102AFA1D69C936E39BA3FDD9 /* MPViewabilityTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C19C8FBF570CB13BC5E14BE869340EE /* MPViewabilityTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8FD8EC5C063E4A4FDDBF82B44DFC0122 /* MPNativeCustomEventDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = E16518061869F158F253B866F592CF05 /* MPNativeCustomEventDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 91A7BBD622CE352A0B4F218F3DDDC4B7 /* MPBannerCustomEventAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = E650F8E2FBDA460CA7DE52F67F6AC77E /* MPBannerCustomEventAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 93B67945D4CDA0DDCB6CBA77AC10A3AC /* MoPub_AbstractAvidManagedAdSession.h in Headers */ = {isa = PBXBuildFile; fileRef = A78ED58D98A2CCEF876A92E37DE35AC5 /* MoPub_AbstractAvidManagedAdSession.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 94E6C288939FC00B0D5129702F550BA0 /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 12751C45EB941E72579D46DA2679E75B /* SafariServices.framework */; }; - 950144E6722A026888A85311387F86EF /* MPVASTManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BFFFC9C231B099FB35A274BF18921F5B /* MPVASTManager.m */; }; - 96745E2DBF728EC88AC5B174961C36F8 /* MPVASTTrackingEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 83494C485B66D17930A1A1B97FF78C2C /* MPVASTTrackingEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9718CFEFF27DADD86E75E95676A1A3A2 /* MPAdvancedBiddingManager.h in Headers */ = {isa = PBXBuildFile; fileRef = B1D63722124F51E6F9C62309214EEAE8 /* MPAdvancedBiddingManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9737284CC33DBB0A5C7086FBDA87F3FD /* MPNativeAdRendererImageHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = AEE0D42E3DC5EB0DF303AAD55B387263 /* MPNativeAdRendererImageHandler.m */; }; - 982A627847966B812877C27AFF40399F /* MPNativeAdRequestTargeting.m in Sources */ = {isa = PBXBuildFile; fileRef = B0D3F4681069F1CBDF5E343B6593E23C /* MPNativeAdRequestTargeting.m */; }; - 994650142AA42A7E5A1D157E273BF554 /* MPStoreKitProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 543C647CBCDFAF1EEB0D4A83DC7C6541 /* MPStoreKitProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 99CC863EC94E03AD785FB4C5C571BD3B /* NSDate+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 1BB6547EDACFFAD56F7879CA5A0BDD98 /* NSDate+MPAdditions.m */; }; - 9A174E247300DE6E9C120EAA2AC1006D /* MPTableViewAdPlacer.m in Sources */ = {isa = PBXBuildFile; fileRef = DC1459032BCB5DD89601DED15F93B07D /* MPTableViewAdPlacer.m */; }; - 9A5E95E1273C0079F7B351590BC0EFCE /* MPAnalyticsTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 10549D2B29F2C0AF1CDBED1C018FBDD7 /* MPAnalyticsTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9AD71A003200F75223F2E7EAA19327D1 /* MPStaticNativeAdRendererSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = FBA0A75D96BF25F4D634FD7A5686865E /* MPStaticNativeAdRendererSettings.m */; }; - 9CFEC4E135B667AB624518568734D09B /* MPURLActionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 846FE6B8942A40F56906064476AF673B /* MPURLActionInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9D6B392280D57064B4DD1B122F9D89DD /* MOPUBExperimentProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = F3484A5ED8C66041C17AB1AE135C23F9 /* MOPUBExperimentProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9E12BBEA983DF15E1EB643682AF1B3F2 /* MPVASTMediaFile.h in Headers */ = {isa = PBXBuildFile; fileRef = E3D6949FF8E5178E896283520CC9ADB6 /* MPVASTMediaFile.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A00FC2009F2ADAB8F33079A82332145C /* MoPub.m in Sources */ = {isa = PBXBuildFile; fileRef = 40F84D2DC11BB47E682D3188B2E4B22A /* MoPub.m */; }; - A0964D347B5BC922CF4B6A6EACD5E0D9 /* MPAdServerCommunicator.h in Headers */ = {isa = PBXBuildFile; fileRef = E36EA59C82678B3163DDFAE489FBF0B5 /* MPAdServerCommunicator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A14D6AB6B37E8D2FD79A96ADD6080F06 /* NSBundle+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = EE38A6937309F953788475C89C1DF493 /* NSBundle+MPAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A14EE15DB82609C8CA0D42C8023C4B27 /* MPBannerCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = CA2124E2143FE6EF80BD975D9E5F7B23 /* MPBannerCustomEvent.m */; }; - A153CF016B5B34C43E47841DF433B3CE /* MPActivityViewControllerHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7451D8041981DA9F29C7AA82B91D677D /* MPActivityViewControllerHelper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A27C8E6D0A619BC655AB60DCF36662F1 /* MPMRAIDBannerCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D2235C08C0A504894FA38B57E85ECF7 /* MPMRAIDBannerCustomEvent.m */; }; - A3C02CC35DB8051F36257650348ACA1C /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D439917CB30AC8E78B9B6C023FA05E9 /* CoreMedia.framework */; }; - A459F3ECF573263F66749C83D4DB2A98 /* MPAdImpressionTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = C3EF86822D9A255A4008E353F5153F05 /* MPAdImpressionTimer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A45BB55921F94841BEEE8088592AA5C3 /* MPEnhancedDeeplinkRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C469DD3D43610B0749E266F29884029 /* MPEnhancedDeeplinkRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A57B52F39410EC557DC22C55F930A9B3 /* MPClientAdPositioning.m in Sources */ = {isa = PBXBuildFile; fileRef = B7C895B1F1E8754C1242D99A9F1A9F06 /* MPClientAdPositioning.m */; }; - A5947D45D84CCA55D79C5B81E18F9188 /* MoPub_ExternalAvidAdSessionContext.h in Headers */ = {isa = PBXBuildFile; fileRef = B510B9FFCC7534B8CC44BAB33CCDB739 /* MoPub_ExternalAvidAdSessionContext.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A641C9C745D8BB618D1C050683B7E300 /* MPURLRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = 112AA901C10C457F114489C501850F98 /* MPURLRequest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A6967A4B96D356950F883681B038520B /* MPInterstitialCustomEventAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 9157BB32C0062F33A3B962D652FECA58 /* MPInterstitialCustomEventAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A69DB7C9CD08CB59BA84109FCF137F4F /* MPRewardedVideoAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = B3A7469A5B6EFD276528B5CF41DCFF64 /* MPRewardedVideoAdapter.m */; }; - A6E419E767B935348FA6C7D308D725C3 /* MPNativeAdSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 360AAD80F3279123B604933F03140BD1 /* MPNativeAdSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A7D43E12A7169B166C2D2DD7E1761C9C /* MPAdvancedBidder.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E4C848EE50D633965E17392AEE7F344 /* MPAdvancedBidder.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A864B7AA1347117D479DAAC9EBC20A67 /* MPBannerCustomEvent+Internal.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A7A98D8E9921CC9A8BC6C6EFFD3BFC3 /* MPBannerCustomEvent+Internal.m */; }; - A8B82B06E04613C659C35E1A2C55D8A2 /* MRBundleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E011A173FB75710FA7327C8C3CAA6BA7 /* MRBundleManager.m */; }; - A8FFF96AA5560DC5F76917E709D82BE8 /* MPBaseBannerAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4175125929206986B072B17DA217B64B /* MPBaseBannerAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AC09546ED0043AFA43B7552DBEB26299 /* MPViewabilityTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 22B4751EF454827A3BE69330D0931112 /* MPViewabilityTracker.m */; }; - AC39CBE6A6D331E54D96B05F60669549 /* MPCollectionViewAdPlacerCell.h in Headers */ = {isa = PBXBuildFile; fileRef = EDE0467F8731AF1EEC541D67D03C7E91 /* MPCollectionViewAdPlacerCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AD4C614493C13B684FFF6E969F14122D /* MPVASTWrapper.m in Sources */ = {isa = PBXBuildFile; fileRef = 9522F2A7FAD0B2631DA9CBEC8F80D902 /* MPVASTWrapper.m */; }; - AE48270E55EEEA25FC905D54F1451750 /* MPSessionTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 066428C1265FA58EBACB54C65F70DB04 /* MPSessionTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AE68B475933FBE1F331B0D661507379D /* MPProgressOverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = D986592CA4D5F3537C1A0F0B8701DC00 /* MPProgressOverlayView.m */; }; - AF0EFB9609D4389E47F138A9FA2C6FAA /* MPConsentChangedReason.m in Sources */ = {isa = PBXBuildFile; fileRef = EC3FC5853B4F4EF6D1EC228CF43C3A33 /* MPConsentChangedReason.m */; }; - B1427A16D018F023A46CA3BA1240A957 /* MPSessionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 6355A0B01E1688B504820C95EB129A71 /* MPSessionTracker.m */; }; - B153068CFD871F5865009B81AD2F3AB1 /* MPVASTAd.m in Sources */ = {isa = PBXBuildFile; fileRef = D1486C78EBCFC6578F7A7D5ABDDE32DD /* MPVASTAd.m */; }; - B213AC93C97BE1F76E7B400C58A5D04B /* MPViewabilityOption.h in Headers */ = {isa = PBXBuildFile; fileRef = D94D0894B453B199C1B41D0E0C476CA6 /* MPViewabilityOption.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B2177BF5C7A73EE2658CA321C2F8D384 /* MOPUBNativeVideoImpressionAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D77ED119AFEF4ADD5809581D6CDFFAA /* MOPUBNativeVideoImpressionAgent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B21E9AB7F64871F29E2D2EC79F4FF60A /* MPBannerAdManager.h in Headers */ = {isa = PBXBuildFile; fileRef = E7B2AEE4BC831993D7D6AFF0363DA089 /* MPBannerAdManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B23D485FBC5E6A6BFED9BB95AA718D04 /* MPNativeAdRenderingImageLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CF4A35F15F39B68E677D43B87759933 /* MPNativeAdRenderingImageLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B383F50B697474B6536BCD530A2C1667 /* MPTableViewCellImpressionTracker.h in Headers */ = {isa = PBXBuildFile; fileRef = 794673407B07F33C370E653971C7F8D4 /* MPTableViewCellImpressionTracker.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B3C9C4786B8EF2F96C6A38DD15F6D35C /* MPAdDestinationDisplayAgent.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC3AAC813EA435D3DDD461B06193DEE /* MPAdDestinationDisplayAgent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B3EB76F45A135F212769FEFF827657AF /* MPNativeAdRendererConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = A4EBDF20C9468A3D7BB1063C3ADB22EA /* MPNativeAdRendererConfiguration.m */; }; - B556A8196B8CF5300C0A54B56E2A0422 /* MPActivityViewControllerHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B7C713F1D1AA973DFF2DB2BEDBFF48B /* MPActivityViewControllerHelper.m */; }; - B6010777D94A9DCE523AFBCB0A69C2EB /* MPNativeAdRequest+MPNativeAdSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 12C13F9015DEFAF2DB7756319F63F4BD /* MPNativeAdRequest+MPNativeAdSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B69A579CF5C580EC99AB4B167F2D3E94 /* MPNativeAdConfigValues+Internal.m in Sources */ = {isa = PBXBuildFile; fileRef = 178A83AA9D8E006D73545734D307A878 /* MPNativeAdConfigValues+Internal.m */; }; - B6BEFD9A892AE6316DF6E73FBAF01B74 /* MPConsentChangedNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = 936E795BDFB4D23070F73292D6A5F124 /* MPConsentChangedNotification.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B9E25F21246E0810B20FCF036902F09B /* MoPub_AvidAdSessionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 8579D1A7850ED27BFEB7DA5CFF00070D /* MoPub_AvidAdSessionManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BA14370A83A8B3E482B479D65EEA5556 /* MPGlobal.m in Sources */ = {isa = PBXBuildFile; fileRef = E3D5E36F3910B5A2C2BE02C2375DFDFE /* MPGlobal.m */; }; - BA3495E1E75EB0181B51A6D3F035AA64 /* UIButton+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 27450C1F837E94076EBE0E340A1858A3 /* UIButton+MPAdditions.m */; }; - BB50C53C0B0E9006C2082BF603906A1D /* MoPub_Avid.h in Headers */ = {isa = PBXBuildFile; fileRef = BA2B9C8A051AA991DDFCEC5C2CFBDAB7 /* MoPub_Avid.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BBA2AF9CFFBB3DCE44540EDB30CF502B /* MPNativeAdRendererConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 726927FA862B3E4299CB6C0386CAF5BE /* MPNativeAdRendererConfiguration.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BD03858E32E2AF73EFC0FD8E9D7F2E99 /* MOPUBPlayerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A4A8BF41E85DA879459B3EE854977613 /* MOPUBPlayerManager.m */; }; - BF1BD82C792C37F89676D5A4336429D6 /* NSJSONSerialization+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A4833879691DCCC4883AACCA87351B8 /* NSJSONSerialization+MPAdditions.m */; }; - C0129BF1F28166E0B442C808E9FCB747 /* MOPUBPlayerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = BB14B57D3C13475FA0E3A8B89E003439 /* MOPUBPlayerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C0623FBC7EE341B164F44A9AA5C9C105 /* MPTableViewAdPlacerCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B9CCABD037F16AC6F04E6185FAB42547 /* MPTableViewAdPlacerCell.m */; }; - C0CAA6101F6717EE75D82C7D430B9F0E /* MPNativeAdError.m in Sources */ = {isa = PBXBuildFile; fileRef = AB9A65A7A1F19F74431E69CB7A6BCB24 /* MPNativeAdError.m */; }; - C152E7DBE80E37531A1D8281E53F9EB8 /* MRExpandModalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 02EEDBCF8BFB1E3ABED3ECFC6C641CEC /* MRExpandModalViewController.m */; }; - C15768986544AFBF41EB370C7B5DF9AD /* MPNativeView.h in Headers */ = {isa = PBXBuildFile; fileRef = 73131D60F9306E08E720B65F7B64517D /* MPNativeView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C17E1DFE67C2A483C0ED3E3A8C592BBD /* MPInternalUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FAF35DECE451F26C4A96335B44EE292 /* MPInternalUtils.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C41E114B8943BD49992070AC6F160A76 /* MPNativeAdRendering.h in Headers */ = {isa = PBXBuildFile; fileRef = 83FF048F7C17E8207C0D4CDD586BF44F /* MPNativeAdRendering.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C433A48286B5F0CDDA568F05E9B88EE6 /* MPGeolocationProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 17FB9B730A0B802696C4D59C3E0B7D91 /* MPGeolocationProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C4A0A55B2A1E3B6FF5A82826CD4A103C /* MPInternalUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = ABFB49F29330E2AEAD8E94BEBCA05705 /* MPInternalUtils.m */; }; - C4A7EC1A0238363EEC89B854EDFD3C43 /* MPReachabilityManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 2720EFD72F44381AA50818531167F91C /* MPReachabilityManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C4D38C5C500ADD846140AF9EA9C604EB /* NSDictionary+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 7B256972AE899B6CEDE8067C8112FD41 /* NSDictionary+MPAdditions.m */; }; - C50B3509DB3A30C64F649EE85DE45089 /* MPServerAdPositioning.h in Headers */ = {isa = PBXBuildFile; fileRef = 5AFD09E2DA3916859DE6EDC68E95B910 /* MPServerAdPositioning.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C5864C4C87289D693F2E8F94C943C25B /* MPURL.h in Headers */ = {isa = PBXBuildFile; fileRef = CA1432AC146FD6E74F9C450A54FF5692 /* MPURL.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C615F5121A60A9F4E1A9AA4C03DFB3BB /* MOPUBReplayView.h in Headers */ = {isa = PBXBuildFile; fileRef = 70004A66605A4F0412E86B25F0BA81EF /* MOPUBReplayView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C7100B0753AB42A8A40BFC9D930EADDB /* MPConsentStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 836CCC1DB253E0C2C30D59F935337731 /* MPConsentStatus.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C7747394DDA8975E6A9F36E1E9EB951B /* MPVASTIndustryIcon.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EE4A1149FA7A1DF1C75ACC937518B82 /* MPVASTIndustryIcon.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C82E1D87724F5A023A90F70201B4DD8B /* NSString+MPConsentStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 925F64CBB5132F8893261CF723C98AC3 /* NSString+MPConsentStatus.m */; }; - C89CD3D22A45AECF5FBAE754222D21AD /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC83F06503AFBE19CB5B3ECA02BB6D32 /* AVFoundation.framework */; }; - CA130C6B9E9B59143B8EA73F7DB52492 /* MPConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = FD29579B368D83639CFA35577181CFD0 /* MPConstants.m */; }; - CC460EB39240C58FE4419CD65C5830B1 /* MPRealTimeTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 61B30DEBC4A37ADCB609A36FD4466FDC /* MPRealTimeTimer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CC90CB967CAA93E3FC5F6828B60A378A /* MPStreamAdPlacer.m in Sources */ = {isa = PBXBuildFile; fileRef = CFCCBD2200429AC5121B7CAB80A30483 /* MPStreamAdPlacer.m */; }; - CD983E693D61D9BC3C6B414AF72C32F2 /* MPError.m in Sources */ = {isa = PBXBuildFile; fileRef = 18050E293806782C3FDEDEC2F379A4A1 /* MPError.m */; }; - CDA91A222E23AF05939E97569C59CA8D /* MPBannerCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D856C966F403477126CBCCF4E6B7D3B4 /* MPBannerCustomEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CE2694C78D53D24CED980FDB1909D47B /* MPBannerCustomEventAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = E5E74A12A9154860F9856B2FA6FA7A1E /* MPBannerCustomEventAdapter.m */; }; - CE8F3773A735EDE958B7BC3BCC5409EB /* MPVASTStringUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = 87063590200EDA240FEB8E39B186C08B /* MPVASTStringUtilities.m */; }; - CFF7F3FC9AA8BBF117B0092330DAC661 /* MPConsentChangedNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 900026FE3489825329BED09334092F73 /* MPConsentChangedNotification.m */; }; - D146D55B9D427EC1C8716837BF678AD5 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 957F9F2B3B10161DF0A3EF830681FF51 /* QuartzCore.framework */; }; - D16EFAC036021344E68C02FDE3F0DC41 /* MPHTTPNetworkTaskData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2CDBD2E46CFB241FBFAECD4B71E1CD5E /* MPHTTPNetworkTaskData.m */; }; - D174127F6F59AF5A3F9F7FF0A14DF1C0 /* MPActivityViewControllerHelper+TweetShare.h in Headers */ = {isa = PBXBuildFile; fileRef = 0031D0D10ECD85BBF823D215BE8C3411 /* MPActivityViewControllerHelper+TweetShare.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D1AC9F164F8228B3835D5ED0A06D2AEE /* MPNativePositionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = FAA7C0122C6A12142CACE8D01333BB7F /* MPNativePositionSource.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D1D636B0044D9B141CE82E62F7FA30A1 /* MOPUBPlayerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ED59FA8139285E625887FF124D642B65 /* MOPUBPlayerManager.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D21E18ADBB6C4FFC8C8FB524269EED40 /* MPStreamAdPlacer.h in Headers */ = {isa = PBXBuildFile; fileRef = 402AE196F4E8D739385C3E25D6334580 /* MPStreamAdPlacer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D2779EAD11974B072A8511D6D7AAAC02 /* MPTableViewAdPlacer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4756995F1B3A3BBF756F9CFCA8174E69 /* MPTableViewAdPlacer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D2AEFDAA1CE63EB0CB185F6F1F820873 /* MOPUBFullscreenPlayerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = D9323DB716F905DC5D5DED1E448AEC5E /* MOPUBFullscreenPlayerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D309D21D4051863B82FD39BA3B6FABCA /* MPVideoConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AF06F21267D3E6362C2EF2F0C6748CC /* MPVideoConfig.m */; }; - D34B065CC0DD932A9EB4F03CB352420A /* MPViewabilityAdapterMoat.m in Sources */ = {isa = PBXBuildFile; fileRef = A565E1599FA4124F65CE79FCC0BE7395 /* MPViewabilityAdapterMoat.m */; }; - D3BC758AF73D13542D5BA251D3933468 /* MPVASTDurationOffset.h in Headers */ = {isa = PBXBuildFile; fileRef = 343357935FEAC6E4274F800A26F7DE2E /* MPVASTDurationOffset.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D3C3A998FEC820FCFA711D3AB8589FA4 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4778A939F8C02F9D0EC6AB31D5EB9785 /* MediaPlayer.framework */; }; - D4BFD00F1C9A9E1EB3DA4E297694977D /* MPMemoryCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 459D29BA04B74F21A2A23B6AD8AD931B /* MPMemoryCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D5732162E75503B2633A4305C191E543 /* MPEnhancedDeeplinkRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = D86C8EF10CA0E6F2199DAFC598133D47 /* MPEnhancedDeeplinkRequest.m */; }; - D6470A6914F4B1C63A373885DA51D000 /* MPVASTDurationOffset.m in Sources */ = {isa = PBXBuildFile; fileRef = 74ED3BEAA4E789373952FCA0857BA292 /* MPVASTDurationOffset.m */; }; - D667CC2A3D786C778BA0548A6F804464 /* MOPUBAVPlayerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 0841A2E878284BEFB810A9DA7BB1BE10 /* MOPUBAVPlayerView.m */; }; - D6AA985AA1118C7AB6ABFCCF532E1EE6 /* MPNativePositionResponseDeserializer.h in Headers */ = {isa = PBXBuildFile; fileRef = C7DD29215D6EFB608E8D0FA1CE6B7FA7 /* MPNativePositionResponseDeserializer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D712B14DE58134F53C970B0504D7D1F8 /* MPVASTResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 67BA315210E40B93EEACEB7B0B058FC6 /* MPVASTResponse.m */; }; - D7D3FDB7CA9AC1C48908168B04E8A860 /* NSHTTPURLResponse+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 82936453879A953B5A6C87A83F6845F9 /* NSHTTPURLResponse+MPAdditions.m */; }; - D7E1232119D5156B86C54DAFA2C41FD8 /* MRProperty.m in Sources */ = {isa = PBXBuildFile; fileRef = 970A167C3DC88DCA2F8BA1CB70C62225 /* MRProperty.m */; }; - D7FBFAC0BBA0D0CE9C6A668950130CA6 /* MPMoPubNativeAdAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = C509F6606FBC892C534B3C8477165727 /* MPMoPubNativeAdAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D855375D8033E609B1A34A5F04A5CB24 /* MPWebView.m in Sources */ = {isa = PBXBuildFile; fileRef = B67352CBE63150A994F2F2C0025BF2D6 /* MPWebView.m */; }; - D85E9D4F530DC422051580CAD3108EAE /* MPAdBrowserController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AA1FCCFDD8E61B79FF8B760F1CC9C5A /* MPAdBrowserController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D880480BB7FA234A93C7BE2CE4FFD69D /* MOPUBNativeVideoCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D1E9613E610B869461C6B2A824E79622 /* MOPUBNativeVideoCustomEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D8B0DB8B7A4652073224C423B13BE392 /* MPNativeAdRenderingImageLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = A2214387A3C53F379DB2118AB8070563 /* MPNativeAdRenderingImageLoader.m */; }; - DA2F9BB49930E86D432A5CB8A22CB8EC /* MPDiskLRUCache.h in Headers */ = {isa = PBXBuildFile; fileRef = D1EDE4638CC4B81B3FA05593899FC766 /* MPDiskLRUCache.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DC9DABBE3878896956124004D24C553F /* MPRewardedVideo.m in Sources */ = {isa = PBXBuildFile; fileRef = 6CBB03BB65A2171361808755D53D01AE /* MPRewardedVideo.m */; }; - DD6270A19FDA6C89190DA8E003EC8FA5 /* MPNativeAdRendererConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C64A3C2AADF964E5918192286D27B82 /* MPNativeAdRendererConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DE11F70C78713ABA7176C788AF3D1E21 /* MPMoPubNativeCustomEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A04B3D8AE6324B447CB8A6A804130304 /* MPMoPubNativeCustomEvent.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DEE198002E971CABB7FF5B6A9FCFE3FD /* MPTableViewCellImpressionTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 51D7B75A9AB40920FD6A6CC2623F0CBE /* MPTableViewCellImpressionTracker.m */; }; - DF60D1B27884E19F1BC79EC1138F22B9 /* MPViewabilityAdapterAvid.m in Sources */ = {isa = PBXBuildFile; fileRef = F6E2C99A4DAE41C12FB70B10205FE2B6 /* MPViewabilityAdapterAvid.m */; }; - E01DFE6B429CC61C17C1DA2C34CC4F9C /* MPUserInteractionGestureRecognizer.h in Headers */ = {isa = PBXBuildFile; fileRef = B70708AC9988EC7E4E95FA8CE0C82CBF /* MPUserInteractionGestureRecognizer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E09E380E03D5037A3A4E6E7A1D0FB00D /* MRConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 14FD9EDE564C657CB79CD398BB2B2944 /* MRConstants.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E0B0870A02DA0DBA7089D4A232A43DAF /* MPNativeAdConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = B4A4CEC5582EED7E9F66A5EDC0D0B4B6 /* MPNativeAdConstants.m */; }; - E1F706C213BB59C9A9B5D122758C2726 /* MPStaticNativeAdRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 933AEA94C7E4DEF2E4BA460FC5BC5247 /* MPStaticNativeAdRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E2B59107E0E728CA218C94C674D74526 /* MPReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = 06F28ACAD7E7BD1489A366D45032FC0B /* MPReachability.m */; }; - E2E422B879ADAFFA772E6325D67EC1C4 /* MOPUBNativeVideoAdAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 276408697DE239A2354C772FC21645A9 /* MOPUBNativeVideoAdAdapter.m */; }; - E393ADA6255C4BCBBDDBED6065A1E1A7 /* MPVASTWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3BCA19265FC15F958CF95E2F8E2C99C0 /* MPVASTWrapper.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E425F2417F20A984BE8855E75E363436 /* MPRewardedVideoCustomEvent+Caching.h in Headers */ = {isa = PBXBuildFile; fileRef = 04CAAE79F8E583E8701290D864BC94C7 /* MPRewardedVideoCustomEvent+Caching.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E46B6B58BAA202DFFEAB3DD790D56C59 /* MPConsentError.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E2A6A503AD1D0D68ABC11CE549F052E /* MPConsentError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E509A3D293326446EF51977A1C9D3C9D /* MPRealTimeTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = EDE629A956B73878D814285B18749C1C /* MPRealTimeTimer.m */; }; - E53FE6F384818635F9122EDE163EF116 /* MPNativeAdData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED24F4D24C27E6EB924D8829A83B8C1 /* MPNativeAdData.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E5CE183AA8322C3FD98A48187B31BCFB /* MPVideoConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 43FD1AF64622E7BF07D04804E2C1E538 /* MPVideoConfig.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E625A6129F8206A383704832B7715B66 /* MPNativeAdRequestTargeting.h in Headers */ = {isa = PBXBuildFile; fileRef = 94451BB6CC9ABD226734B48D31ACD1E5 /* MPNativeAdRequestTargeting.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E6629EC6BBAED954262E864D456CCDB2 /* MPPrivateRewardedVideoCustomEventDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = D809012A5D65DE2D2E3D98F21249E4FF /* MPPrivateRewardedVideoCustomEventDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E68CBCD4940185766C3FA5AFA4DFAF63 /* MOPUBNativeVideoAdAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D7B5CAC10611B0692A9430850FBA45C /* MOPUBNativeVideoAdAdapter.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E6D7660EF9164C6ADF2E6D5875E28ACA /* MPVASTAd.h in Headers */ = {isa = PBXBuildFile; fileRef = E30A70D4C5F5F778472CCC2F0685D3FC /* MPVASTAd.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E790462DBC58139363358896A7C767A1 /* MPInterstitialAdManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8AF0E9CE8D632CC73B5D066B9E675C51 /* MPInterstitialAdManager.m */; }; - E7BA7A295327624720972B1F030A9ED3 /* MRError.h in Headers */ = {isa = PBXBuildFile; fileRef = AA448D1ACFE765C3292DC430237439C1 /* MRError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E8223A1F032832D2695079D38672787F /* MPVASTResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 183009C1FB48F6D134E1FD34CFFEA971 /* MPVASTResponse.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E884FD9234491C197203A51CC9F18CD3 /* MOPUBNativeVideoAdRendererSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = DE0CA2983E337B4015C1669C545AF0E4 /* MOPUBNativeVideoAdRendererSettings.m */; }; - E95E3DAD53615756037E6B2C2D71E5A1 /* MPAdDestinationDisplayAgent.m in Sources */ = {isa = PBXBuildFile; fileRef = EAADC548F05B307D039FF319E45B17F2 /* MPAdDestinationDisplayAgent.m */; }; - E9C1990D0F0745F9605F95D0F8F49501 /* MPRewardedVideoError.h in Headers */ = {isa = PBXBuildFile; fileRef = DC0D6ADFFC4E9376050517360B97853C /* MPRewardedVideoError.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EA758FFA3449EEACDA2407CB68A64440 /* MPNativeAdRendererSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AD6E46B2E2E957B8F3724784E0C1569 /* MPNativeAdRendererSettings.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EA84C91037DC197237312E5993B60FE9 /* MPReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = 58313BCBB9BC191A852E180BA047146E /* MPReachability.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EAC4122B5825875FF11DAEF1E5B7BD86 /* MPNativeAdRenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 470EA67CA72FE7C7A03C8FC33ABE193F /* MPNativeAdRenderer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EC5B8F36CFE1D28F5E9E635C0529D791 /* MoPub_AbstractAvidAdSession.h in Headers */ = {isa = PBXBuildFile; fileRef = B841AEE0855C262992EE65CB8124C89E /* MoPub_AbstractAvidAdSession.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ECA57967B4238D31CCE48E05B4D91EE1 /* MOPUBDisplayAgentType.h in Headers */ = {isa = PBXBuildFile; fileRef = EAEFD36A3E3B983FE4E8252C9814FE91 /* MOPUBDisplayAgentType.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ECD180F3218C915778D986F8D56E1A69 /* MPHTMLBannerCustomEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 6505452289EEF454E3E4DD2F07EAF5E7 /* MPHTMLBannerCustomEvent.m */; }; - ED282F39553A930B6CB186788298C492 /* MPTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = 05300B60DE7C79DCC1EF3BF467752287 /* MPTimer.m */; }; - ED5F0317461E9F725AB9F3C2BA82453B /* NSDictionary+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 475EE79C53F7B91803098999B87C3FCD /* NSDictionary+MPAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED92D3AD275DFEB4D2F27D0BA5D32C99 /* MOPUBAVPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = B8921FFBAFE64AE671EB119DB1AC3830 /* MOPUBAVPlayer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EDCE36514CB76DB8EEF0CCECA04F9E0D /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1028E9B4E4E201928AEEC53BEF078045 /* UIKit.framework */; }; - EE25689289AE0256DB473D1B628B66B5 /* MPProgressOverlayView.h in Headers */ = {isa = PBXBuildFile; fileRef = A109DF3081139CE8CBDF7B61AB6D1B03 /* MPProgressOverlayView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EE9B9BB61601C2F6B4872C8E04276B09 /* NSURL+MPAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = F1A06B0D0F45170A803A078BD4730C5C /* NSURL+MPAdditions.m */; }; - EED4C7A1072A3446CBF91A378679E149 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7913720A451516D7AE0A148037775187 /* SystemConfiguration.framework */; }; - EFD8E187C411838A69BC3A1CBA20D30A /* MRVideoPlayerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EB84CF40E6DBC928D0A207E34095A16 /* MRVideoPlayerManager.m */; }; - F0642C2EFAB9F326A766EB103DCF5020 /* MPAnalyticsTracker.m in Sources */ = {isa = PBXBuildFile; fileRef = 1F63BD1CC33F6EED23C85CF7FB25F430 /* MPAnalyticsTracker.m */; }; - F0A5F363EF85182A236D7F6475C660C4 /* MPXMLParser.m in Sources */ = {isa = PBXBuildFile; fileRef = C6A700D84D0510754869DFB3593CD08F /* MPXMLParser.m */; }; - F0FFC5F868B7B70CCA7E32AE6418DACB /* MOPUBPlayerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D6CEC5808926843A10415BC7AFDCFDB /* MOPUBPlayerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F22FACC9DD08FC36E615438F4CE82609 /* MPCoreInstanceProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 515B35D6ECDEA484BA8D21437C14C153 /* MPCoreInstanceProvider.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F53AE73980747FAA4EB2135DA24C3CA6 /* MPPrivateInterstitialCustomEventDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = AF025C5A57999D48096A139CC66BDAE8 /* MPPrivateInterstitialCustomEventDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F559D92720FC5F8A97934DEEA71B6927 /* MPLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F0BB756AA632F84A46CE4A3C4A2BD08 /* MPLogging.m */; }; - F5DFBA3871CB26B1A595AAC28D130FF4 /* MPImageDownloadQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = DB5F85FC14F0C2408A1557D39D4CEDD3 /* MPImageDownloadQueue.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F64941F61B71E1C1FA626DBD21C660FE /* MPStoreKitProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = B00D59BBBF8A757E6EED5A47E7AB1B56 /* MPStoreKitProvider.m */; }; - F6745A0D56CD93443234ADD84F22669D /* MRError.m in Sources */ = {isa = PBXBuildFile; fileRef = 092BECC23D335BF3F74CE30A85BBF3D1 /* MRError.m */; }; - F6E6BEC8D09C40676896154F557E2DF1 /* MPInterstitialCustomEventDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 66D5190FF3B6B3E191FB833C7374F412 /* MPInterstitialCustomEventDelegate.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F84D687B45A37F4D500631AF95B0FFDE /* NSJSONSerialization+MPAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C9DBD11EF54623AA1552F11641DADF8 /* NSJSONSerialization+MPAdditions.h */; settings = {ATTRIBUTES = (Project, ); }; }; - F8DBFA90D8A65F7DB31D9573AB8C4372 /* MPNativeAdConfigValues.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A659C7FEA2B8F8241073FC3DED624C3 /* MPNativeAdConfigValues.m */; }; - FBDAB891D32BE0B1C79E5480D2A5D6CB /* MPNativeAd.h in Headers */ = {isa = PBXBuildFile; fileRef = 093F1F9B79D0ACF347C667AD3756067B /* MPNativeAd.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FDC335A6182F2E27BC80A8F94711B2C2 /* MPBaseBannerAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = C489B331E897E952F334DFF31F03D107 /* MPBaseBannerAdapter.m */; }; - FDC6BF90EEECD74BCC8F5DA089D2D1BC /* MPAdAlertManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 25F9D09859139CE379E0851CDE130FDF /* MPAdAlertManager.m */; }; - FE332E5FBA095781EB879530A0478E9C /* MPAdvancedBiddingManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D5CD45031B3DD09AF141B816448040C /* MPAdvancedBiddingManager.m */; }; - FE674C9A5E00A69BF714AF8C07B84260 /* MPAdView.h in Headers */ = {isa = PBXBuildFile; fileRef = AC62218FF89DCAFBAA2EC6D82DABFCF4 /* MPAdView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FEAC880B8D446C8B31559836E2E32883 /* MPAdView.m in Sources */ = {isa = PBXBuildFile; fileRef = 59976B533B1662B946D018C98B4E6D47 /* MPAdView.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 57FCCB09E425AF13D07BEF24A0DCC5DC /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 20B16B6AE1879253D8E116DA8D1A2E8F; - remoteInfo = "mopub-ios-sdk"; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 001069427242FC1717A972CF60C6EF49 /* MPCloseButtonX@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPCloseButtonX@2x.png"; path = "MoPubSDK/Resources/MPCloseButtonX@2x.png"; sourceTree = ""; }; - 0031D0D10ECD85BBF823D215BE8C3411 /* MPActivityViewControllerHelper+TweetShare.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPActivityViewControllerHelper+TweetShare.h"; path = "MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.h"; sourceTree = ""; }; - 004991EBE1C5BAEB9342DE1C32667D18 /* MPVASTCompanionAd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTCompanionAd.m; path = MoPubSDK/Internal/VAST/MPVASTCompanionAd.m; sourceTree = ""; }; - 00510BB51BD33FF99CD1055142C9C97E /* MOPUBNativeVideoAdRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBNativeVideoAdRenderer.h; path = MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.h; sourceTree = ""; }; - 00539895FAE6DA670982831760780175 /* MoPub_AvidManagedVideoAdSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidManagedVideoAdSession.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidManagedVideoAdSession.h; sourceTree = ""; }; - 00C98CE31FD40A57423C565D61BB4C42 /* MPNativeAdSourceQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdSourceQueue.h; path = MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.h; sourceTree = ""; }; - 0110BE949B69EFCD55E3C6A6A77E58E8 /* MPPlayBtn@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPPlayBtn@3x.png"; path = "MoPubSDK/Resources/MPPlayBtn@3x.png"; sourceTree = ""; }; - 01830142D297EB01A36EC48C23155170 /* MPCountdownTimer.html */ = {isa = PBXFileReference; includeInIndex = 1; name = MPCountdownTimer.html; path = MoPubSDK/Resources/MPCountdownTimer.html; sourceTree = ""; }; - 01F82CA7EAEDB56F37870657E46EB70B /* MPVASTInline.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTInline.h; path = MoPubSDK/Internal/VAST/MPVASTInline.h; sourceTree = ""; }; - 02516B36C5D86CA77A11122A04458DBB /* MOPUBAVPlayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBAVPlayerView.h; path = MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.h; sourceTree = ""; }; - 02EEDBCF8BFB1E3ABED3ECFC6C641CEC /* MRExpandModalViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRExpandModalViewController.m; path = MoPubSDK/Internal/MRAID/MRExpandModalViewController.m; sourceTree = ""; }; - 03FDC86A31EA1E9CEA24AC01A7025070 /* MRController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRController.m; path = MoPubSDK/Internal/MRAID/MRController.m; sourceTree = ""; }; - 0472B1FC9ABE2B636E4DCAACFD9DDBAE /* MPAdBrowserController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; name = MPAdBrowserController.xib; path = MoPubSDK/Internal/Common/MPAdBrowserController.xib; sourceTree = ""; }; - 049208C17446EBD4ABD6649BE7FEE343 /* MPNativeAdAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdAdapter.h; path = MoPubSDK/NativeAds/MPNativeAdAdapter.h; sourceTree = ""; }; - 04CAAE79F8E583E8701290D864BC94C7 /* MPRewardedVideoCustomEvent+Caching.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPRewardedVideoCustomEvent+Caching.h"; path = "MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent+Caching.h"; sourceTree = ""; }; - 04D9988E8E6BBFB5CBDD9B14C479C02E /* MPDAAIcon@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPDAAIcon@3x.png"; path = "MoPubSDK/Resources/MPDAAIcon@3x.png"; sourceTree = ""; }; - 05300B60DE7C79DCC1EF3BF467752287 /* MPTimer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPTimer.m; path = MoPubSDK/Internal/Utility/MPTimer.m; sourceTree = ""; }; - 05CE15B0ADAB7C4D9E82862C8E05B09B /* MPPlayBtn.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MPPlayBtn.png; path = MoPubSDK/Resources/MPPlayBtn.png; sourceTree = ""; }; - 062E14CFB6987F43AE00F9BE5E0D8489 /* MRCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRCommand.m; path = MoPubSDK/Internal/MRAID/MRCommand.m; sourceTree = ""; }; - 066428C1265FA58EBACB54C65F70DB04 /* MPSessionTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPSessionTracker.h; path = MoPubSDK/Internal/Utility/MPSessionTracker.h; sourceTree = ""; }; - 06F28ACAD7E7BD1489A366D45032FC0B /* MPReachability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPReachability.m; path = MoPubSDK/Internal/Utility/MPReachability.m; sourceTree = ""; }; - 0841A2E878284BEFB810A9DA7BB1BE10 /* MOPUBAVPlayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBAVPlayerView.m; path = MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.m; sourceTree = ""; }; - 092BECC23D335BF3F74CE30A85BBF3D1 /* MRError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRError.m; path = MoPubSDK/Internal/MRAID/MRError.m; sourceTree = ""; }; - 093F1F9B79D0ACF347C667AD3756067B /* MPNativeAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAd.h; path = MoPubSDK/NativeAds/MPNativeAd.h; sourceTree = ""; }; - 095EE5E477C87894BEFC72F6AD66418E /* MPNativeAd+Internal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPNativeAd+Internal.m"; path = "MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.m"; sourceTree = ""; }; - 0B61789D97354FBAB4799A9C17706A82 /* MPRewardedVideoReward.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideoReward.h; path = MoPubSDK/RewardedVideo/MPRewardedVideoReward.h; sourceTree = ""; }; - 0C71474E43D96357AAB9A318BCC86E8A /* MRConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRConstants.m; path = MoPubSDK/Internal/MRAID/MRConstants.m; sourceTree = ""; }; - 0D779BEE3E2F14CBEF5938CAD55B6886 /* MPMoPubRewardedPlayableCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMoPubRewardedPlayableCustomEvent.m; path = MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.m; sourceTree = ""; }; - 0DBE326B33C8DBF354443CDE78482D26 /* Pods-PrebidMobileDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PrebidMobileDemo.debug.xcconfig"; sourceTree = ""; }; - 0DE1B245ABF0AEC68D6AAC738D912BC2 /* MPMRAIDInterstitialCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMRAIDInterstitialCustomEvent.h; path = MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.h; sourceTree = ""; }; - 1028E9B4E4E201928AEEC53BEF078045 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; - 10549D2B29F2C0AF1CDBED1C018FBDD7 /* MPAnalyticsTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAnalyticsTracker.h; path = MoPubSDK/Internal/Utility/MPAnalyticsTracker.h; sourceTree = ""; }; - 1090064C185F36AC53092C1CE3F0281A /* MRBundleManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRBundleManager.h; path = MoPubSDK/Internal/MRAID/MRBundleManager.h; sourceTree = ""; }; - 112AA901C10C457F114489C501850F98 /* MPURLRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPURLRequest.h; path = MoPubSDK/Internal/MPURLRequest.h; sourceTree = ""; }; - 12751C45EB941E72579D46DA2679E75B /* SafariServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SafariServices.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/SafariServices.framework; sourceTree = DEVELOPER_DIR; }; - 12C13F9015DEFAF2DB7756319F63F4BD /* MPNativeAdRequest+MPNativeAdSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPNativeAdRequest+MPNativeAdSource.h"; path = "MoPubSDK/NativeAds/Internal/Categories/MPNativeAdRequest+MPNativeAdSource.h"; sourceTree = ""; }; - 12D32771515DC2E9CBD463C9A1FCB491 /* MOPUBAVPlayer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBAVPlayer.m; path = MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.m; sourceTree = ""; }; - 12D60DAC4BF304D0054210F47BAE5CE0 /* MPHTMLInterstitialCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPHTMLInterstitialCustomEvent.m; path = MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.m; sourceTree = ""; }; - 140F1A237A03BF5B0D0A43D01C270139 /* MPRewardedVideoCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideoCustomEvent.h; path = MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.h; sourceTree = ""; }; - 14FD9EDE564C657CB79CD398BB2B2944 /* MRConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRConstants.h; path = MoPubSDK/Internal/MRAID/MRConstants.h; sourceTree = ""; }; - 16E5C35246AF149A59F5199D799F00A9 /* MPAdConversionTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdConversionTracker.h; path = MoPubSDK/MPAdConversionTracker.h; sourceTree = ""; }; - 178A83AA9D8E006D73545734D307A878 /* MPNativeAdConfigValues+Internal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPNativeAdConfigValues+Internal.m"; path = "MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.m"; sourceTree = ""; }; - 17FB9B730A0B802696C4D59C3E0B7D91 /* MPGeolocationProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPGeolocationProvider.h; path = MoPubSDK/Internal/Utility/MPGeolocationProvider.h; sourceTree = ""; }; - 18050E293806782C3FDEDEC2F379A4A1 /* MPError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPError.m; path = MoPubSDK/Internal/Utility/MPError.m; sourceTree = ""; }; - 183009C1FB48F6D134E1FD34CFFEA971 /* MPVASTResponse.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTResponse.h; path = MoPubSDK/Internal/VAST/MPVASTResponse.h; sourceTree = ""; }; - 1A16BAED736507105BE0B983FE367212 /* MOPUBReplayView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBReplayView.m; path = MoPubSDK/NativeVideo/Internal/MOPUBReplayView.m; sourceTree = ""; }; - 1AF1B5103F3C45A2C768CA00200E4199 /* MPInterstitialViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPInterstitialViewController.m; path = MoPubSDK/Internal/Interstitials/MPInterstitialViewController.m; sourceTree = ""; }; - 1B1EF203CC51009F542D3C31D8D3211F /* MPVASTInline.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTInline.m; path = MoPubSDK/Internal/VAST/MPVASTInline.m; sourceTree = ""; }; - 1B52F222BC81C51B3427962CC6F50D0E /* MRVideoPlayerManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRVideoPlayerManager.h; path = MoPubSDK/Internal/MRAID/MRVideoPlayerManager.h; sourceTree = ""; }; - 1B81ABD1AC30268341FE91D2A66B8E64 /* MPBool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBool.h; path = MoPubSDK/MPBool.h; sourceTree = ""; }; - 1B9AC692EAAF0B1D08BD42F9F1400E8B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 1BB6547EDACFFAD56F7879CA5A0BDD98 /* NSDate+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDate+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.m"; sourceTree = ""; }; - 1C64A3C2AADF964E5918192286D27B82 /* MPNativeAdRendererConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRendererConstants.h; path = MoPubSDK/NativeAds/Internal/MPNativeAdRendererConstants.h; sourceTree = ""; }; - 1C8A646D3E09B26646C27235807DEC09 /* MPVASTCompanionAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTCompanionAd.h; path = MoPubSDK/Internal/VAST/MPVASTCompanionAd.h; sourceTree = ""; }; - 1D7B5CAC10611B0692A9430850FBA45C /* MOPUBNativeVideoAdAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBNativeVideoAdAdapter.h; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.h; sourceTree = ""; }; - 1ED24F4D24C27E6EB924D8829A83B8C1 /* MPNativeAdData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdData.h; path = MoPubSDK/NativeAds/MPNativeAdData.h; sourceTree = ""; }; - 1F055A8AEE0C70B9109ADD89B8E2F978 /* MPRewardedVideoCustomEvent+Caching.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPRewardedVideoCustomEvent+Caching.m"; path = "MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent+Caching.m"; sourceTree = ""; }; - 1F63BD1CC33F6EED23C85CF7FB25F430 /* MPAnalyticsTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAnalyticsTracker.m; path = MoPubSDK/Internal/Utility/MPAnalyticsTracker.m; sourceTree = ""; }; - 2057B643647618168BAE756DDDF6ADD3 /* MPNativeAdRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRequest.h; path = MoPubSDK/NativeAds/MPNativeAdRequest.h; sourceTree = ""; }; - 205F9C14EC4704DBE04439ADD32A5B5D /* MPForceableOrientationProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPForceableOrientationProtocol.h; path = MoPubSDK/Internal/MRAID/MPForceableOrientationProtocol.h; sourceTree = ""; }; - 20F29D05DD0079D86070E238CFAE9CF9 /* MPMoPubRewardedVideoCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubRewardedVideoCustomEvent.h; path = MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.h; sourceTree = ""; }; - 21F3A33787480241B32572807612E5AA /* MPRewardedVideoError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideoError.m; path = MoPubSDK/RewardedVideo/MPRewardedVideoError.m; sourceTree = ""; }; - 223CCC5CBC5E5F25AD719B02C2AEB7B2 /* MRController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRController.h; path = MoPubSDK/Internal/MRAID/MRController.h; sourceTree = ""; }; - 22986C0CB52459241E21F9216AA80A97 /* MPBannerCustomEvent+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPBannerCustomEvent+Internal.h"; path = "MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.h"; sourceTree = ""; }; - 22B4751EF454827A3BE69330D0931112 /* MPViewabilityTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPViewabilityTracker.m; path = MoPubSDK/Viewability/MPViewabilityTracker.m; sourceTree = ""; }; - 23B4693F22C40632E9FBFBE3467FB42A /* MPClosableView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPClosableView.h; path = MoPubSDK/Internal/Common/MPClosableView.h; sourceTree = ""; }; - 25F9D09859139CE379E0851CDE130FDF /* MPAdAlertManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdAlertManager.m; path = MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.m; sourceTree = ""; }; - 25FA7B57F19C1CADE50570737280C7A9 /* MPAdPositioning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdPositioning.h; path = MoPubSDK/NativeAds/MPAdPositioning.h; sourceTree = ""; }; - 2720EFD72F44381AA50818531167F91C /* MPReachabilityManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPReachabilityManager.h; path = MoPubSDK/Internal/MPReachabilityManager.h; sourceTree = ""; }; - 27450C1F837E94076EBE0E340A1858A3 /* UIButton+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIButton+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.m"; sourceTree = ""; }; - 27529ADB723A835DB65958D015AC0C53 /* MPError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPError.h; path = MoPubSDK/Internal/Utility/MPError.h; sourceTree = ""; }; - 276408697DE239A2354C772FC21645A9 /* MOPUBNativeVideoAdAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBNativeVideoAdAdapter.m; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.m; sourceTree = ""; }; - 2B2A7EDBE5CCB3C2642F9F4782896808 /* MRExpandModalViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRExpandModalViewController.h; path = MoPubSDK/Internal/MRAID/MRExpandModalViewController.h; sourceTree = ""; }; - 2B7C713F1D1AA973DFF2DB2BEDBFF48B /* MPActivityViewControllerHelper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPActivityViewControllerHelper.m; path = MoPubSDK/Internal/Common/MPActivityViewControllerHelper.m; sourceTree = ""; }; - 2BFB909FF79D4AC98E30A345A73B4586 /* MPImageDownloadQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPImageDownloadQueue.m; path = MoPubSDK/NativeAds/Internal/MPImageDownloadQueue.m; sourceTree = ""; }; - 2C393DA988663DF5C4EC5DACBB1E3E7F /* MoPub_AvidVideoAdSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidVideoAdSession.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidVideoAdSession.h; sourceTree = ""; }; - 2C469DD3D43610B0749E266F29884029 /* MPEnhancedDeeplinkRequest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPEnhancedDeeplinkRequest.h; path = MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.h; sourceTree = ""; }; - 2C9DBD11EF54623AA1552F11641DADF8 /* NSJSONSerialization+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSJSONSerialization+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.h"; sourceTree = ""; }; - 2CDBD2E46CFB241FBFAECD4B71E1CD5E /* MPHTTPNetworkTaskData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPHTTPNetworkTaskData.m; path = MoPubSDK/Internal/MPHTTPNetworkTaskData.m; sourceTree = ""; }; - 2D2526228E9B4832684A3CFE425176CC /* MPMediationSettingsProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMediationSettingsProtocol.h; path = MoPubSDK/MPMediationSettingsProtocol.h; sourceTree = ""; }; - 2E6EC6680CDCEA808C71043C01EEB176 /* MPNativeAdData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdData.m; path = MoPubSDK/NativeAds/MPNativeAdData.m; sourceTree = ""; }; - 2EBF74BBD4D0643E11CD802CEA2D8737 /* libmopub-ios-sdk.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libmopub-ios-sdk.a"; path = "libmopub-ios-sdk.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 2F7CA0B04E09B7481603830448A37A8C /* MPBannerAdManagerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBannerAdManagerDelegate.h; path = MoPubSDK/Internal/Banners/MPBannerAdManagerDelegate.h; sourceTree = ""; }; - 2FA902772F39E38C6BF80FC6F3793E5C /* MPViewabilityAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPViewabilityAdapter.h; path = MoPubSDK/Viewability/MPViewabilityAdapter.h; sourceTree = ""; }; - 308B607410978A5D03DCE54AD3234725 /* MPInterstitialCustomEventAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPInterstitialCustomEventAdapter.m; path = MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.m; sourceTree = ""; }; - 314E9DB01B1FA2088DAA4F0B75882A7C /* MPMediationManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMediationManager.h; path = MoPubSDK/Internal/MPMediationManager.h; sourceTree = ""; }; - 320BC5ECFC4092620826EF35F276D822 /* MPCloseButtonX@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPCloseButtonX@3x.png"; path = "MoPubSDK/Resources/MPCloseButtonX@3x.png"; sourceTree = ""; }; - 32D2CCB7AEF3571A6AF5971EA87241C0 /* Pods-PrebidMobileDemo-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-PrebidMobileDemo-acknowledgements.plist"; sourceTree = ""; }; - 32F7C811B35C265FA43941648B43F807 /* MPCollectionViewAdPlacer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPCollectionViewAdPlacer.h; path = MoPubSDK/NativeAds/MPCollectionViewAdPlacer.h; sourceTree = ""; }; - 343357935FEAC6E4274F800A26F7DE2E /* MPVASTDurationOffset.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTDurationOffset.h; path = MoPubSDK/Internal/VAST/MPVASTDurationOffset.h; sourceTree = ""; }; - 3472B8E6979257A19CD19EDBE06CAE05 /* MPDAAIcon@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPDAAIcon@2x.png"; path = "MoPubSDK/Resources/MPDAAIcon@2x.png"; sourceTree = ""; }; - 35421D6B15CB07433EBA7B5136D9534B /* NSHTTPURLResponse+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSHTTPURLResponse+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.h"; sourceTree = ""; }; - 35A795C9E6E3211C1B264872A69CDD0F /* MPClientAdPositioning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPClientAdPositioning.h; path = MoPubSDK/NativeAds/MPClientAdPositioning.h; sourceTree = ""; }; - 360AAD80F3279123B604933F03140BD1 /* MPNativeAdSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdSource.h; path = MoPubSDK/NativeAds/MPNativeAdSource.h; sourceTree = ""; }; - 36D45A766EE83B3F7832B961CB1FA271 /* MPIdentityProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPIdentityProvider.m; path = MoPubSDK/Internal/Utility/MPIdentityProvider.m; sourceTree = ""; }; - 3713FDF71B677F463F8F41A16B859214 /* MPAdWebViewAgent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdWebViewAgent.m; path = MoPubSDK/Internal/HTML/MPAdWebViewAgent.m; sourceTree = ""; }; - 38A81E78B978F40894F855A32BEBDB27 /* MPRewardedVideoAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideoAdapter.h; path = MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.h; sourceTree = ""; }; - 3A7A98D8E9921CC9A8BC6C6EFFD3BFC3 /* MPBannerCustomEvent+Internal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPBannerCustomEvent+Internal.m"; path = "MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.m"; sourceTree = ""; }; - 3AD6E46B2E2E957B8F3724784E0C1569 /* MPNativeAdRendererSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRendererSettings.h; path = MoPubSDK/NativeAds/MPNativeAdRendererSettings.h; sourceTree = ""; }; - 3B7A7D35A3604AEDE456E5EFC09EE3E3 /* MPDiskLRUCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPDiskLRUCache.m; path = MoPubSDK/NativeAds/Internal/MPDiskLRUCache.m; sourceTree = ""; }; - 3BCA19265FC15F958CF95E2F8E2C99C0 /* MPVASTWrapper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTWrapper.h; path = MoPubSDK/Internal/VAST/MPVASTWrapper.h; sourceTree = ""; }; - 3D50CE5E2C2E44DD12E38D08E423AF89 /* MPURLResolver.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPURLResolver.m; path = MoPubSDK/Internal/Common/MPURLResolver.m; sourceTree = ""; }; - 3E2A6A503AD1D0D68ABC11CE549F052E /* MPConsentError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsentError.h; path = MoPubSDK/MPConsentError.h; sourceTree = ""; }; - 3EE84A7D2E74CCFC10CE81ACDE82D5F3 /* MPAdBrowserController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdBrowserController.m; path = MoPubSDK/Internal/Common/MPAdBrowserController.m; sourceTree = ""; }; - 3EE8D1EA3932CE9781A46327C0163DF2 /* MPAdPlacerInvocation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdPlacerInvocation.m; path = MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.m; sourceTree = ""; }; - 402AE196F4E8D739385C3E25D6334580 /* MPStreamAdPlacer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPStreamAdPlacer.h; path = MoPubSDK/NativeAds/MPStreamAdPlacer.h; sourceTree = ""; }; - 40EDDC72FB6D089CE0CD3B512F3CAE3B /* libGoogleMobileAds.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = libGoogleMobileAds.a; path = Libraries/libGoogleMobileAds.a; sourceTree = ""; }; - 40F84D2DC11BB47E682D3188B2E4B22A /* MoPub.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MoPub.m; path = MoPubSDK/MoPub.m; sourceTree = ""; }; - 4175125929206986B072B17DA217B64B /* MPBaseBannerAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBaseBannerAdapter.h; path = MoPubSDK/Internal/Banners/MPBaseBannerAdapter.h; sourceTree = ""; }; - 42D09FFE96519AA60024109D8B83A47B /* MoPub_AvidManagedDisplayAdSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidManagedDisplayAdSession.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidManagedDisplayAdSession.h; sourceTree = ""; }; - 4399B7E9D240C7692EBB998A209376BD /* MPInterstitialCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialCustomEvent.h; path = MoPubSDK/MPInterstitialCustomEvent.h; sourceTree = ""; }; - 43FD1AF64622E7BF07D04804E2C1E538 /* MPVideoConfig.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVideoConfig.h; path = MoPubSDK/Internal/Common/MPVideoConfig.h; sourceTree = ""; }; - 44A7B9143871670562C3799075CC01F5 /* MPNativeAdSourceQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdSourceQueue.m; path = MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.m; sourceTree = ""; }; - 44C7B20AC5ACCA5B62127A0B9291657E /* NSError+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSError+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.h"; sourceTree = ""; }; - 459D29BA04B74F21A2A23B6AD8AD931B /* MPMemoryCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMemoryCache.h; path = MoPubSDK/Internal/MPMemoryCache.h; sourceTree = ""; }; - 470EA67CA72FE7C7A03C8FC33ABE193F /* MPNativeAdRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRenderer.h; path = MoPubSDK/NativeAds/MPNativeAdRenderer.h; sourceTree = ""; }; - 47308A81F8A044CE57C9B84F3E5A34F4 /* MoPub-Bridging-Header.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MoPub-Bridging-Header.h"; path = "MoPubSDK/MoPub-Bridging-Header.h"; sourceTree = ""; }; - 4756995F1B3A3BBF756F9CFCA8174E69 /* MPTableViewAdPlacer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPTableViewAdPlacer.h; path = MoPubSDK/NativeAds/MPTableViewAdPlacer.h; sourceTree = ""; }; - 475EE79C53F7B91803098999B87C3FCD /* NSDictionary+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDictionary+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.h"; sourceTree = ""; }; - 4778A939F8C02F9D0EC6AB31D5EB9785 /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/MediaPlayer.framework; sourceTree = DEVELOPER_DIR; }; - 483B843D0249C54796D3618548AD6D3B /* MOPUBNativeVideoAdRendererSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBNativeVideoAdRendererSettings.h; path = MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.h; sourceTree = ""; }; - 485F91F85FB6D47AC5E3C65465846497 /* MPNativeAdSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdSource.m; path = MoPubSDK/NativeAds/MPNativeAdSource.m; sourceTree = ""; }; - 48AE4A78CD649B90A677C60C08E137E8 /* MPNativeAdRendererImageHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRendererImageHandler.h; path = MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.h; sourceTree = ""; }; - 48C26C12A1774A0F103892F407BB070E /* MPCountdownTimerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPCountdownTimerView.h; path = MoPubSDK/Internal/Common/MPCountdownTimerView.h; sourceTree = ""; }; - 49088FAC20BF8E1A37751792A82CF071 /* MoPub_AvidVideoPlaybackListener.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidVideoPlaybackListener.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidVideoPlaybackListener.h; sourceTree = ""; }; - 4A085370B12F7CAA34F7884A96E37636 /* MPPrivateBannerCustomEventDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPPrivateBannerCustomEventDelegate.h; path = MoPubSDK/Internal/Banners/MPPrivateBannerCustomEventDelegate.h; sourceTree = ""; }; - 4A659C7FEA2B8F8241073FC3DED624C3 /* MPNativeAdConfigValues.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdConfigValues.m; path = MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.m; sourceTree = ""; }; - 4AF06F21267D3E6362C2EF2F0C6748CC /* MPVideoConfig.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVideoConfig.m; path = MoPubSDK/Internal/Common/MPVideoConfig.m; sourceTree = ""; }; - 4C343D13D77918349EF073B4AC04B2D8 /* MPRewardedVideoCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideoCustomEvent.m; path = MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.m; sourceTree = ""; }; - 4C524F71FF05DC37DFED25E854B11C0D /* MPCountdownTimerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPCountdownTimerView.m; path = MoPubSDK/Internal/Common/MPCountdownTimerView.m; sourceTree = ""; }; - 4C811630C3F309D9CB3E78AB657F40B9 /* MPInterstitialViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialViewController.h; path = MoPubSDK/Internal/Interstitials/MPInterstitialViewController.h; sourceTree = ""; }; - 4CA5BC2A3956F0240098899894675F3F /* MPLogProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPLogProvider.h; path = MoPubSDK/Internal/Utility/MPLogProvider.h; sourceTree = ""; }; - 4CFD2C134EF50BE34F95102E12F40645 /* MPGlobal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPGlobal.h; path = MoPubSDK/Internal/Utility/MPGlobal.h; sourceTree = ""; }; - 4D29A5B2A882A6AA1B4B7DC386C7CF35 /* MPBaseInterstitialAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPBaseInterstitialAdapter.m; path = MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.m; sourceTree = ""; }; - 4DD574D37D116D749B5D9336AF3A3B6F /* MPLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPLogging.h; path = MoPubSDK/Internal/Utility/MPLogging.h; sourceTree = ""; }; - 50014E2A3FFBD320D3BC5FB88A4E85A5 /* MPURLResolver.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPURLResolver.h; path = MoPubSDK/Internal/Common/MPURLResolver.h; sourceTree = ""; }; - 505EC7EBE0E56C9DB19FBE2AAD1CF008 /* MPWebView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPWebView.h; path = MoPubSDK/Internal/HTML/MPWebView.h; sourceTree = ""; }; - 513545EE94647C1D63BBCA115C5233A6 /* MPVASTLinearAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTLinearAd.h; path = MoPubSDK/Internal/VAST/MPVASTLinearAd.h; sourceTree = ""; }; - 515B35D6ECDEA484BA8D21437C14C153 /* MPCoreInstanceProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPCoreInstanceProvider.h; path = MoPubSDK/Internal/MPCoreInstanceProvider.h; sourceTree = ""; }; - 518AFD8BC393FAC9F43A59FA036016B7 /* UIWebView+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIWebView+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/UIWebView+MPAdditions.m"; sourceTree = ""; }; - 51D7B75A9AB40920FD6A6CC2623F0CBE /* MPTableViewCellImpressionTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPTableViewCellImpressionTracker.m; path = MoPubSDK/NativeAds/Internal/MPTableViewCellImpressionTracker.m; sourceTree = ""; }; - 52A668C203B25E48B42E24E9F32F108B /* MPNativeAdRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdRequest.m; path = MoPubSDK/NativeAds/MPNativeAdRequest.m; sourceTree = ""; }; - 543C647CBCDFAF1EEB0D4A83DC7C6541 /* MPStoreKitProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPStoreKitProvider.h; path = MoPubSDK/Internal/Utility/MPStoreKitProvider.h; sourceTree = ""; }; - 554F4CE235F8732E0634E4F1ED2B0536 /* MRBridge.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRBridge.m; path = MoPubSDK/Internal/MRAID/MRBridge.m; sourceTree = ""; }; - 56B0E03F53B70FC9DF26CB21F4102090 /* MPInterstitialAdController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialAdController.h; path = MoPubSDK/MPInterstitialAdController.h; sourceTree = ""; }; - 58313BCBB9BC191A852E180BA047146E /* MPReachability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPReachability.h; path = MoPubSDK/Internal/Utility/MPReachability.h; sourceTree = ""; }; - 590C88E8B5E91304A01BF256DA016ED1 /* MPInterstitialCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPInterstitialCustomEvent.m; path = MoPubSDK/MPInterstitialCustomEvent.m; sourceTree = ""; }; - 59976B533B1662B946D018C98B4E6D47 /* MPAdView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdView.m; path = MoPubSDK/MPAdView.m; sourceTree = ""; }; - 599B172794EF95D483850BB2E3CC7F91 /* MOPUBNativeVideoCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBNativeVideoCustomEvent.m; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.m; sourceTree = ""; }; - 59D854CC11E7DC7D1B42E4E1B8D6A4A0 /* MPRewardedVideo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideo.h; path = MoPubSDK/RewardedVideo/MPRewardedVideo.h; sourceTree = ""; }; - 5AFD09E2DA3916859DE6EDC68E95B910 /* MPServerAdPositioning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPServerAdPositioning.h; path = MoPubSDK/NativeAds/MPServerAdPositioning.h; sourceTree = ""; }; - 5B16186616192AA09429941B6EBF67E8 /* UIView+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.h"; sourceTree = ""; }; - 5B4E3A7228A0B3494C4DE9B1C5530932 /* MPMRAIDInterstitialViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMRAIDInterstitialViewController.h; path = MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.h; sourceTree = ""; }; - 5BC882692B5D0B8BC7979B5D77EB9488 /* MPMoPubNativeCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMoPubNativeCustomEvent.m; path = MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.m; sourceTree = ""; }; - 5BFDB39F7E892906BDEFFAF4DE6FE49C /* MPAdServerKeys.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdServerKeys.m; path = MoPubSDK/Internal/MPAdServerKeys.m; sourceTree = ""; }; - 5C19C8FBF570CB13BC5E14BE869340EE /* MPViewabilityTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPViewabilityTracker.h; path = MoPubSDK/Viewability/MPViewabilityTracker.h; sourceTree = ""; }; - 5C56BDCBFCC45B6F5AF3F9F47A9CA0CB /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - 5CCADDB0A233453353AB6B5FF11EBB23 /* MPMoPubConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMoPubConfiguration.m; path = MoPubSDK/MPMoPubConfiguration.m; sourceTree = ""; }; - 5D29A0F81624856BA22E2854FE617F8E /* MPUnmutedBtn.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MPUnmutedBtn.png; path = MoPubSDK/Resources/MPUnmutedBtn.png; sourceTree = ""; }; - 5DA5AB9CF58E357F8318208442A322A7 /* MPURL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPURL.m; path = MoPubSDK/Internal/MPURL.m; sourceTree = ""; }; - 5E26C9C74F15AFF32D69AA767F27E917 /* MRBridge.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRBridge.h; path = MoPubSDK/Internal/MRAID/MRBridge.h; sourceTree = ""; }; - 5E8DD426734513D42B3C5DBB786115FE /* MPWebView+Viewability.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPWebView+Viewability.m"; path = "MoPubSDK/Viewability/MPWebView+Viewability.m"; sourceTree = ""; }; - 6100AA5D599C105B69615E0F0042F786 /* MPPlayBtn@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPPlayBtn@2x.png"; path = "MoPubSDK/Resources/MPPlayBtn@2x.png"; sourceTree = ""; }; - 61080907C1E63C9751878CF0A8AC84D2 /* NSDate+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSDate+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.h"; sourceTree = ""; }; - 61B30DEBC4A37ADCB609A36FD4466FDC /* MPRealTimeTimer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRealTimeTimer.h; path = MoPubSDK/Internal/Common/MPRealTimeTimer.h; sourceTree = ""; }; - 61C48E51A7E9057C3392D4CBB920E600 /* libAvid-mopub-3.6.1.a */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = archive.ar; name = "libAvid-mopub-3.6.1.a"; path = "MoPubSDK/Viewability/Avid/libAvid-mopub-3.6.1.a"; sourceTree = ""; }; - 6355A0B01E1688B504820C95EB129A71 /* MPSessionTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPSessionTracker.m; path = MoPubSDK/Internal/Utility/MPSessionTracker.m; sourceTree = ""; }; - 649390A61583C34071E59F370075D9D3 /* Pods-PrebidMobileDemo-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-PrebidMobileDemo-frameworks.sh"; sourceTree = ""; }; - 6505452289EEF454E3E4DD2F07EAF5E7 /* MPHTMLBannerCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPHTMLBannerCustomEvent.m; path = MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.m; sourceTree = ""; }; - 667665900D624D45D60FE889436B32B1 /* MOPUBActivityIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBActivityIndicatorView.h; path = MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.h; sourceTree = ""; }; - 66AF777E59370ABF37704D150EF681FB /* MPVASTCreative.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTCreative.m; path = MoPubSDK/Internal/VAST/MPVASTCreative.m; sourceTree = ""; }; - 66D5190FF3B6B3E191FB833C7374F412 /* MPInterstitialCustomEventDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialCustomEventDelegate.h; path = MoPubSDK/MPInterstitialCustomEventDelegate.h; sourceTree = ""; }; - 67BA315210E40B93EEACEB7B0B058FC6 /* MPVASTResponse.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTResponse.m; path = MoPubSDK/Internal/VAST/MPVASTResponse.m; sourceTree = ""; }; - 682738E757DC07C82AC542F70D04CB05 /* MPRewardedVideoConnection.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideoConnection.m; path = MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.m; sourceTree = ""; }; - 68ABBE6978A829A88D2FD2F9F27E73E1 /* MPVASTResource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTResource.h; path = MoPubSDK/Internal/VAST/MPVASTResource.h; sourceTree = ""; }; - 6901D93648A46CB8DA8FD80AFC141617 /* MPVASTModel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTModel.m; path = MoPubSDK/Internal/VAST/MPVASTModel.m; sourceTree = ""; }; - 69699BF902A03C059F8A1D0B98B6A3B7 /* MPCollectionViewAdPlacer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPCollectionViewAdPlacer.m; path = MoPubSDK/NativeAds/MPCollectionViewAdPlacer.m; sourceTree = ""; }; - 6A2AB8A956D4B69FDE1FBA3C8FA6968E /* MPViewabilityAdapterMoat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPViewabilityAdapterMoat.h; path = MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.h; sourceTree = ""; }; - 6A4833879691DCCC4883AACCA87351B8 /* NSJSONSerialization+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSJSONSerialization+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.m"; sourceTree = ""; }; - 6A4D86A8AA5459460ED9035FEA892EB9 /* MPActivityViewControllerHelper+TweetShare.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPActivityViewControllerHelper+TweetShare.m"; path = "MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.m"; sourceTree = ""; }; - 6B146BDA5C495B465729F7F2B9716556 /* MPNativeCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeCache.h; path = MoPubSDK/NativeAds/Internal/MPNativeCache.h; sourceTree = ""; }; - 6C3B58CA6A4BCF53AFD885B994AB2466 /* MPUserInteractionGestureRecognizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPUserInteractionGestureRecognizer.m; path = MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.m; sourceTree = ""; }; - 6CBB03BB65A2171361808755D53D01AE /* MPRewardedVideo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideo.m; path = MoPubSDK/RewardedVideo/MPRewardedVideo.m; sourceTree = ""; }; - 6D4F4735034A493C4E3BCCBF7AFC0D97 /* MRNativeCommandHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRNativeCommandHandler.m; path = MoPubSDK/Internal/MRAID/MRNativeCommandHandler.m; sourceTree = ""; }; - 6D6CEC5808926843A10415BC7AFDCFDB /* MOPUBPlayerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBPlayerView.h; path = MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.h; sourceTree = ""; }; - 6EA84708F95322E1D56C3549668B1431 /* MPBannerAdManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPBannerAdManager.m; path = MoPubSDK/Internal/Banners/MPBannerAdManager.m; sourceTree = ""; }; - 6EC09D3242325127EBCE2D7EE7D97D81 /* MPAdTargeting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdTargeting.h; path = MoPubSDK/MPAdTargeting.h; sourceTree = ""; }; - 70004A66605A4F0412E86B25F0BA81EF /* MOPUBReplayView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBReplayView.h; path = MoPubSDK/NativeVideo/Internal/MOPUBReplayView.h; sourceTree = ""; }; - 7013B712A5DCD8F54FDD1ABEFC8387AE /* MPInterstitialAdController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPInterstitialAdController.m; path = MoPubSDK/MPInterstitialAdController.m; sourceTree = ""; }; - 7068A59AD88E4DA00A75E93C0F18AE9E /* MoPub.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub.h; path = MoPubSDK/MoPub.h; sourceTree = ""; }; - 706B3F8E3C0EBC335614C69C1F00BAA8 /* MPCloseButtonX.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MPCloseButtonX.png; path = MoPubSDK/Resources/MPCloseButtonX.png; sourceTree = ""; }; - 70E02A69A7C9B83F37ECF70C768B4440 /* MRAID.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = MRAID.bundle; path = MoPubSDK/Resources/MRAID.bundle; sourceTree = ""; }; - 726927FA862B3E4299CB6C0386CAF5BE /* MPNativeAdRendererConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRendererConfiguration.h; path = MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.h; sourceTree = ""; }; - 73131D60F9306E08E720B65F7B64517D /* MPNativeView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeView.h; path = MoPubSDK/NativeAds/Internal/MPNativeView.h; sourceTree = ""; }; - 7451D8041981DA9F29C7AA82B91D677D /* MPActivityViewControllerHelper.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPActivityViewControllerHelper.h; path = MoPubSDK/Internal/Common/MPActivityViewControllerHelper.h; sourceTree = ""; }; - 74A77272B3F23FFFD47DEEFD29CCA0C4 /* MPStaticNativeAdRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPStaticNativeAdRenderer.m; path = MoPubSDK/NativeAds/MPStaticNativeAdRenderer.m; sourceTree = ""; }; - 74ED3BEAA4E789373952FCA0857BA292 /* MPVASTDurationOffset.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTDurationOffset.m; path = MoPubSDK/Internal/VAST/MPVASTDurationOffset.m; sourceTree = ""; }; - 783AE5701397975CDEFCA1A906D27BC2 /* MPTableViewAdPlacerCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPTableViewAdPlacerCell.h; path = MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.h; sourceTree = ""; }; - 78773C03BEB994293DD90515B21EACDC /* MPXMLParser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPXMLParser.h; path = MoPubSDK/Internal/Common/MPXMLParser.h; sourceTree = ""; }; - 78C7B75DA16C66F8A9B89C1866D3DA5C /* MOPUBNativeVideoAdRenderer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBNativeVideoAdRenderer.m; path = MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.m; sourceTree = ""; }; - 7913720A451516D7AE0A148037775187 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 794673407B07F33C370E653971C7F8D4 /* MPTableViewCellImpressionTracker.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPTableViewCellImpressionTracker.h; path = MoPubSDK/NativeAds/Internal/MPTableViewCellImpressionTracker.h; sourceTree = ""; }; - 79C22829A56CCDBBE45775E7531A1C96 /* mopub-ios-sdk.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "mopub-ios-sdk.xcconfig"; sourceTree = ""; }; - 79DD63E9905486C80F2E45430F16D929 /* MPAdImpressionTimer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdImpressionTimer.m; path = MoPubSDK/Internal/Common/MPAdImpressionTimer.m; sourceTree = ""; }; - 7A43535A18382DD2714FFE28782259D0 /* libPods-PrebidMobileDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-PrebidMobileDemo.a"; path = "libPods-PrebidMobileDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 7AA1FCCFDD8E61B79FF8B760F1CC9C5A /* MPAdBrowserController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdBrowserController.h; path = MoPubSDK/Internal/Common/MPAdBrowserController.h; sourceTree = ""; }; - 7B256972AE899B6CEDE8067C8112FD41 /* NSDictionary+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSDictionary+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.m"; sourceTree = ""; }; - 7B62C31D8A3829226AF4540EA5256514 /* MPGeolocationProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPGeolocationProvider.m; path = MoPubSDK/Internal/Utility/MPGeolocationProvider.m; sourceTree = ""; }; - 7CAA0263AB473E89C5A0F88D6F6A64C5 /* MPVASTMediaFile.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTMediaFile.m; path = MoPubSDK/Internal/VAST/MPVASTMediaFile.m; sourceTree = ""; }; - 7CE34D4B93211D562A3207D2FB0379B3 /* MPConsentDialogViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPConsentDialogViewController.m; path = MoPubSDK/Internal/MPConsentDialogViewController.m; sourceTree = ""; }; - 7D5CD45031B3DD09AF141B816448040C /* MPAdvancedBiddingManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdvancedBiddingManager.m; path = MoPubSDK/Internal/MPAdvancedBiddingManager.m; sourceTree = ""; }; - 7E76457F75BC7612C1DF0E4CDAB92C16 /* MPNativeCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeCustomEvent.h; path = MoPubSDK/NativeAds/MPNativeCustomEvent.h; sourceTree = ""; }; - 7EE4A1149FA7A1DF1C75ACC937518B82 /* MPVASTIndustryIcon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTIndustryIcon.h; path = MoPubSDK/Internal/VAST/MPVASTIndustryIcon.h; sourceTree = ""; }; - 7F0BB756AA632F84A46CE4A3C4A2BD08 /* MPLogging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPLogging.m; path = MoPubSDK/Internal/Utility/MPLogging.m; sourceTree = ""; }; - 81DF74E143B47C067A78725571FC4CAA /* NSError+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSError+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.m"; sourceTree = ""; }; - 8225B6EF6AA94FD20D61B06417776A0B /* MPHTMLBannerCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPHTMLBannerCustomEvent.h; path = MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.h; sourceTree = ""; }; - 827A0F32A21C4FB889B109CF30FFE368 /* MPCoreInstanceProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPCoreInstanceProvider.m; path = MoPubSDK/Internal/MPCoreInstanceProvider.m; sourceTree = ""; }; - 82936453879A953B5A6C87A83F6845F9 /* NSHTTPURLResponse+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSHTTPURLResponse+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.m"; sourceTree = ""; }; - 82D2B19E999C4B208D6F0CE070DC587B /* MPNativeAdDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdDelegate.h; path = MoPubSDK/NativeAds/MPNativeAdDelegate.h; sourceTree = ""; }; - 82F3A432473EEC52E22EAC56EC183708 /* MPAdServerKeys.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdServerKeys.h; path = MoPubSDK/Internal/MPAdServerKeys.h; sourceTree = ""; }; - 83494C485B66D17930A1A1B97FF78C2C /* MPVASTTrackingEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTTrackingEvent.h; path = MoPubSDK/Internal/VAST/MPVASTTrackingEvent.h; sourceTree = ""; }; - 836CCC1DB253E0C2C30D59F935337731 /* MPConsentStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsentStatus.h; path = MoPubSDK/MPConsentStatus.h; sourceTree = ""; }; - 83FF048F7C17E8207C0D4CDD586BF44F /* MPNativeAdRendering.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRendering.h; path = MoPubSDK/NativeAds/MPNativeAdRendering.h; sourceTree = ""; }; - 84516CD403D0951B751613814E1605ED /* MPBaseInterstitialAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBaseInterstitialAdapter.h; path = MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.h; sourceTree = ""; }; - 846FE6B8942A40F56906064476AF673B /* MPURLActionInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPURLActionInfo.h; path = MoPubSDK/Internal/Common/MPURLActionInfo.h; sourceTree = ""; }; - 847189F08D89DF3C9E9519F038A0DA06 /* MPRewardedVideoAdManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideoAdManager.h; path = MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.h; sourceTree = ""; }; - 84748373A6CDDC34BFE69CA0D8933EC1 /* MPVASTTracking.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTTracking.m; path = MoPubSDK/Internal/MPVASTTracking.m; sourceTree = ""; }; - 8579D1A7850ED27BFEB7DA5CFF00070D /* MoPub_AvidAdSessionManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidAdSessionManager.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidAdSessionManager.h; sourceTree = ""; }; - 86D07EC4C8A6B393A60BB1E4F2C195AD /* MPAdConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdConfiguration.h; path = MoPubSDK/Internal/Common/MPAdConfiguration.h; sourceTree = ""; }; - 87063590200EDA240FEB8E39B186C08B /* MPVASTStringUtilities.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTStringUtilities.m; path = MoPubSDK/Internal/VAST/MPVASTStringUtilities.m; sourceTree = ""; }; - 87F5C1AC5DF28B45EFE179281B0F1BC7 /* MPViewabilityAdapterAvid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPViewabilityAdapterAvid.h; path = MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.h; sourceTree = ""; }; - 8828542402C4098C7BA4C65B237B939A /* MOPUBNativeVideoAdConfigValues.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBNativeVideoAdConfigValues.h; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.h; sourceTree = ""; }; - 89F92D155AC1F80ECD72F37367C8E564 /* MOPUBPlayerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBPlayerView.m; path = MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.m; sourceTree = ""; }; - 8A28F595EF4BCA658355EEEC2588418A /* MPMRAIDBannerCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMRAIDBannerCustomEvent.h; path = MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.h; sourceTree = ""; }; - 8A8682EFCD46800FF674529F8FCC2569 /* MPUnmutedBtn@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPUnmutedBtn@2x.png"; path = "MoPubSDK/Resources/MPUnmutedBtn@2x.png"; sourceTree = ""; }; - 8AD95340DB0BB4590FB5B3275EA907E7 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/CoreTelephony.framework; sourceTree = DEVELOPER_DIR; }; - 8AF0E9CE8D632CC73B5D066B9E675C51 /* MPInterstitialAdManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPInterstitialAdManager.m; path = MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.m; sourceTree = ""; }; - 8BD322E60CCDB047A4D2FEAC523A821A /* MPAdServerCommunicator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdServerCommunicator.m; path = MoPubSDK/Internal/Common/MPAdServerCommunicator.m; sourceTree = ""; }; - 8C24DB19F9E63FFD8F38E4EB14DFA6D0 /* MPAPIEndpoints.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAPIEndpoints.m; path = MoPubSDK/Internal/Common/MPAPIEndpoints.m; sourceTree = ""; }; - 8D439917CB30AC8E78B9B6C023FA05E9 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/CoreMedia.framework; sourceTree = DEVELOPER_DIR; }; - 8FA6E6C9BF934930AFCCD8D6CBE34CA7 /* MPMemoryCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMemoryCache.m; path = MoPubSDK/Internal/MPMemoryCache.m; sourceTree = ""; }; - 8FAF35DECE451F26C4A96335B44EE292 /* MPInternalUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInternalUtils.h; path = MoPubSDK/Internal/Utility/MPInternalUtils.h; sourceTree = ""; }; - 900026FE3489825329BED09334092F73 /* MPConsentChangedNotification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPConsentChangedNotification.m; path = MoPubSDK/MPConsentChangedNotification.m; sourceTree = ""; }; - 9027AAFCCEF76C0892DDC93A6D3F4C15 /* MRProperty.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRProperty.h; path = MoPubSDK/Internal/MRAID/MRProperty.h; sourceTree = ""; }; - 914CEE2F43A1361B7DAD97E5FD95F3E7 /* MPNativeAdSourceDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdSourceDelegate.h; path = MoPubSDK/NativeAds/MPNativeAdSourceDelegate.h; sourceTree = ""; }; - 9157BB32C0062F33A3B962D652FECA58 /* MPInterstitialCustomEventAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialCustomEventAdapter.h; path = MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.h; sourceTree = ""; }; - 915E7F244EFB35467C35BC758D92F726 /* MPHTTPNetworkTaskData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPHTTPNetworkTaskData.h; path = MoPubSDK/Internal/MPHTTPNetworkTaskData.h; sourceTree = ""; }; - 925F64CBB5132F8893261CF723C98AC3 /* NSString+MPConsentStatus.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+MPConsentStatus.m"; path = "MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.m"; sourceTree = ""; }; - 93394A2CCDC05379C87BF2BA5652A6C4 /* MPRewardedVideoConnection.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideoConnection.h; path = MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.h; sourceTree = ""; }; - 933AEA94C7E4DEF2E4BA460FC5BC5247 /* MPStaticNativeAdRenderer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPStaticNativeAdRenderer.h; path = MoPubSDK/NativeAds/MPStaticNativeAdRenderer.h; sourceTree = ""; }; - 935D1D629139E22E52AE88EAF3E711A7 /* UIColor+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIColor+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.m"; sourceTree = ""; }; - 936E795BDFB4D23070F73292D6A5F124 /* MPConsentChangedNotification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsentChangedNotification.h; path = MoPubSDK/MPConsentChangedNotification.h; sourceTree = ""; }; - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9411199523C3152DBCB7EE0641176575 /* GoogleMobileAds.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleMobileAds.framework; path = Frameworks/frameworks/GoogleMobileAds.framework; sourceTree = ""; }; - 94451BB6CC9ABD226734B48D31ACD1E5 /* MPNativeAdRequestTargeting.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRequestTargeting.h; path = MoPubSDK/NativeAds/MPNativeAdRequestTargeting.h; sourceTree = ""; }; - 9522F2A7FAD0B2631DA9CBEC8F80D902 /* MPVASTWrapper.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTWrapper.m; path = MoPubSDK/Internal/VAST/MPVASTWrapper.m; sourceTree = ""; }; - 957F9F2B3B10161DF0A3EF830681FF51 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 958B5CF82D096456A6EA481387F57794 /* MPLogLevel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPLogLevel.h; path = MoPubSDK/MPLogLevel.h; sourceTree = ""; }; - 970A167C3DC88DCA2F8BA1CB70C62225 /* MRProperty.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRProperty.m; path = MoPubSDK/Internal/MRAID/MRProperty.m; sourceTree = ""; }; - 97DC531AACD03871278DEC02FE8FA967 /* NSURL+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSURL+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.h"; sourceTree = ""; }; - 99ACAE9CF760FD3F08AB770BD258E533 /* MPNativeAd+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPNativeAd+Internal.h"; path = "MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.h"; sourceTree = ""; }; - 99F6AB32342C7D87412854A10E00E442 /* MPNativeAdUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdUtils.h; path = MoPubSDK/NativeAds/Internal/MPNativeAdUtils.h; sourceTree = ""; }; - 9A7EAD1692F1841BC2C0841761F0CCE9 /* MPLastResortDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPLastResortDelegate.h; path = MoPubSDK/Internal/Common/MPLastResortDelegate.h; sourceTree = ""; }; - 9C20E0CA320F53383F5E48B4864060DE /* MPHTTPNetworkSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPHTTPNetworkSession.h; path = MoPubSDK/Internal/MPHTTPNetworkSession.h; sourceTree = ""; }; - 9C62C69DC7285E88D81E3121D8C9072B /* MPLogProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPLogProvider.m; path = MoPubSDK/Internal/Utility/MPLogProvider.m; sourceTree = ""; }; - 9CF4A35F15F39B68E677D43B87759933 /* MPNativeAdRenderingImageLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdRenderingImageLoader.h; path = MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.h; sourceTree = ""; }; - 9D2235C08C0A504894FA38B57E85ECF7 /* MPMRAIDBannerCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMRAIDBannerCustomEvent.m; path = MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.m; sourceTree = ""; }; - 9D77ED119AFEF4ADD5809581D6CDFFAA /* MOPUBNativeVideoImpressionAgent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBNativeVideoImpressionAgent.h; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoImpressionAgent.h; sourceTree = ""; }; - 9E37AB0A24C3777F396ADAEFC3EB05AB /* MPAdAlertGestureRecognizer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdAlertGestureRecognizer.m; path = MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.m; sourceTree = ""; }; - 9E4C848EE50D633965E17392AEE7F344 /* MPAdvancedBidder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdvancedBidder.h; path = MoPubSDK/MPAdvancedBidder.h; sourceTree = ""; }; - 9EB84CF40E6DBC928D0A207E34095A16 /* MRVideoPlayerManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRVideoPlayerManager.m; path = MoPubSDK/Internal/MRAID/MRVideoPlayerManager.m; sourceTree = ""; }; - A03904F7F2A4E8A6403BA5D6A2E88CBD /* MPAdPlacerInvocation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdPlacerInvocation.h; path = MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.h; sourceTree = ""; }; - A04B3D8AE6324B447CB8A6A804130304 /* MPMoPubNativeCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubNativeCustomEvent.h; path = MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.h; sourceTree = ""; }; - A0BBCA2D281944E27735364ADA515AA1 /* mopub-ios-sdk-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "mopub-ios-sdk-dummy.m"; sourceTree = ""; }; - A0D519E9555E427A18B5E60B7728CD50 /* mopub-ios-sdk-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "mopub-ios-sdk-prefix.pch"; sourceTree = ""; }; - A109DF3081139CE8CBDF7B61AB6D1B03 /* MPProgressOverlayView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPProgressOverlayView.h; path = MoPubSDK/Internal/Common/MPProgressOverlayView.h; sourceTree = ""; }; - A12FD53C607F36FEC9DDDDDAEAD8E40B /* MOPUBExperimentProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBExperimentProvider.m; path = MoPubSDK/Internal/Utility/MOPUBExperimentProvider.m; sourceTree = ""; }; - A2214387A3C53F379DB2118AB8070563 /* MPNativeAdRenderingImageLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdRenderingImageLoader.m; path = MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.m; sourceTree = ""; }; - A2BD0639176EB88C4B27B7D8B02538E8 /* MPRewardedVideoAdManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideoAdManager.m; path = MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.m; sourceTree = ""; }; - A365FD4F33BE6509CE0FDE67BF58B14B /* MPNativeAdUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdUtils.m; path = MoPubSDK/NativeAds/Internal/MPNativeAdUtils.m; sourceTree = ""; }; - A3768F1014BBC90B64E89A8663D640C6 /* MPURLActionInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPURLActionInfo.m; path = MoPubSDK/Internal/Common/MPURLActionInfo.m; sourceTree = ""; }; - A395EBB5F6DF387A602BAD06758A17F2 /* MPVASTTracking.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTTracking.h; path = MoPubSDK/Internal/MPVASTTracking.h; sourceTree = ""; }; - A4A8BF41E85DA879459B3EE854977613 /* MOPUBPlayerManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBPlayerManager.m; path = MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.m; sourceTree = ""; }; - A4EBDF20C9468A3D7BB1063C3ADB22EA /* MPNativeAdRendererConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdRendererConfiguration.m; path = MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.m; sourceTree = ""; }; - A565E1599FA4124F65CE79FCC0BE7395 /* MPViewabilityAdapterMoat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPViewabilityAdapterMoat.m; path = MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.m; sourceTree = ""; }; - A63F8F1F701C5BCCDFF60300343EE181 /* MPHTMLInterstitialViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPHTMLInterstitialViewController.h; path = MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.h; sourceTree = ""; }; - A67C6436492D3DF15586592ED2A668CA /* MPInterstitialAdManagerDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialAdManagerDelegate.h; path = MoPubSDK/Internal/Interstitials/MPInterstitialAdManagerDelegate.h; sourceTree = ""; }; - A6BCC8E83197454544A109D00F396634 /* MPNativeAdError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdError.h; path = MoPubSDK/NativeAds/MPNativeAdError.h; sourceTree = ""; }; - A78ED58D98A2CCEF876A92E37DE35AC5 /* MoPub_AbstractAvidManagedAdSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AbstractAvidManagedAdSession.h; path = MoPubSDK/Viewability/Avid/MoPub_AbstractAvidManagedAdSession.h; sourceTree = ""; }; - A79B27383EFC56FA4314B0CAB65BA7EE /* MPAdPositioning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdPositioning.m; path = MoPubSDK/NativeAds/MPAdPositioning.m; sourceTree = ""; }; - A7A7B44110552A4D27B828AC02D26C90 /* MPCloseBtn@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPCloseBtn@3x.png"; path = "MoPubSDK/Resources/MPCloseBtn@3x.png"; sourceTree = ""; }; - AA2E344DA66B86B2BD84C7F1713A116A /* MPConsentManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPConsentManager.m; path = MoPubSDK/Internal/MPConsentManager.m; sourceTree = ""; }; - AA448D1ACFE765C3292DC430237439C1 /* MRError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRError.h; path = MoPubSDK/Internal/MRAID/MRError.h; sourceTree = ""; }; - AAA1655BD1F88AF54233D0B437B0E3E4 /* MPNativeAdConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdConstants.h; path = MoPubSDK/NativeAds/MPNativeAdConstants.h; sourceTree = ""; }; - AAC3AAC813EA435D3DDD461B06193DEE /* MPAdDestinationDisplayAgent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdDestinationDisplayAgent.h; path = MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.h; sourceTree = ""; }; - AB34BCEDAE85C706212B251051298DEF /* MPCoreInstanceProvider+MRAID.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPCoreInstanceProvider+MRAID.h"; path = "MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.h"; sourceTree = ""; }; - AB9A65A7A1F19F74431E69CB7A6BCB24 /* MPNativeAdError.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdError.m; path = MoPubSDK/NativeAds/MPNativeAdError.m; sourceTree = ""; }; - ABFB49F29330E2AEAD8E94BEBCA05705 /* MPInternalUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPInternalUtils.m; path = MoPubSDK/Internal/Utility/MPInternalUtils.m; sourceTree = ""; }; - AC62218FF89DCAFBAA2EC6D82DABFCF4 /* MPAdView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdView.h; path = MoPubSDK/MPAdView.h; sourceTree = ""; }; - AE22EEFDB06184330100E4995F315299 /* MPCloseBtn@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPCloseBtn@2x.png"; path = "MoPubSDK/Resources/MPCloseBtn@2x.png"; sourceTree = ""; }; - AEE0D42E3DC5EB0DF303AAD55B387263 /* MPNativeAdRendererImageHandler.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdRendererImageHandler.m; path = MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.m; sourceTree = ""; }; - AF025C5A57999D48096A139CC66BDAE8 /* MPPrivateInterstitialCustomEventDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPPrivateInterstitialCustomEventDelegate.h; path = MoPubSDK/Internal/Interstitials/MPPrivateInterstitialCustomEventDelegate.h; sourceTree = ""; }; - AFC2C6D2DFFFC73D2FC6B84EA9E4CDC7 /* MPUBMoatMobileAppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MPUBMoatMobileAppKit.framework; path = MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework; sourceTree = ""; }; - AFD84F26EAA72F51A04B1E9B04EE79A2 /* MPMRAIDInterstitialCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMRAIDInterstitialCustomEvent.m; path = MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.m; sourceTree = ""; }; - B00D59BBBF8A757E6EED5A47E7AB1B56 /* MPStoreKitProvider.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPStoreKitProvider.m; path = MoPubSDK/Internal/Utility/MPStoreKitProvider.m; sourceTree = ""; }; - B037F002C0260B61F3CF806422FE6FAB /* MPMoPubNativeAdAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMoPubNativeAdAdapter.m; path = MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.m; sourceTree = ""; }; - B0D3F4681069F1CBDF5E343B6593E23C /* MPNativeAdRequestTargeting.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdRequestTargeting.m; path = MoPubSDK/NativeAds/MPNativeAdRequestTargeting.m; sourceTree = ""; }; - B1642905BB1F8E35FE47CA5C37258EF7 /* MPMutedBtn.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MPMutedBtn.png; path = MoPubSDK/Resources/MPMutedBtn.png; sourceTree = ""; }; - B1D63722124F51E6F9C62309214EEAE8 /* MPAdvancedBiddingManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdvancedBiddingManager.h; path = MoPubSDK/Internal/MPAdvancedBiddingManager.h; sourceTree = ""; }; - B32BB6337C801379FDB3608644E89F53 /* MPConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConstants.h; path = MoPubSDK/MPConstants.h; sourceTree = ""; }; - B3A7469A5B6EFD276528B5CF41DCFF64 /* MPRewardedVideoAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideoAdapter.m; path = MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.m; sourceTree = ""; }; - B496534AB8F391AA91AC7E798673D367 /* MPNativePositionResponseDeserializer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativePositionResponseDeserializer.m; path = MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.m; sourceTree = ""; }; - B4A4CEC5582EED7E9F66A5EDC0D0B4B6 /* MPNativeAdConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAdConstants.m; path = MoPubSDK/NativeAds/MPNativeAdConstants.m; sourceTree = ""; }; - B510B9FFCC7534B8CC44BAB33CCDB739 /* MoPub_ExternalAvidAdSessionContext.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_ExternalAvidAdSessionContext.h; path = MoPubSDK/Viewability/Avid/MoPub_ExternalAvidAdSessionContext.h; sourceTree = ""; }; - B655561C64B526ADFF65F6FDC7E993CD /* MRNativeCommandHandler.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRNativeCommandHandler.h; path = MoPubSDK/Internal/MRAID/MRNativeCommandHandler.h; sourceTree = ""; }; - B67352CBE63150A994F2F2C0025BF2D6 /* MPWebView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPWebView.m; path = MoPubSDK/Internal/HTML/MPWebView.m; sourceTree = ""; }; - B69853533FF6ADA2AB033BCA3BFF28E0 /* MPMoPubConfiguration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubConfiguration.h; path = MoPubSDK/MPMoPubConfiguration.h; sourceTree = ""; }; - B70708AC9988EC7E4E95FA8CE0C82CBF /* MPUserInteractionGestureRecognizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPUserInteractionGestureRecognizer.h; path = MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.h; sourceTree = ""; }; - B7C895B1F1E8754C1242D99A9F1A9F06 /* MPClientAdPositioning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPClientAdPositioning.m; path = MoPubSDK/NativeAds/MPClientAdPositioning.m; sourceTree = ""; }; - B841AEE0855C262992EE65CB8124C89E /* MoPub_AbstractAvidAdSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AbstractAvidAdSession.h; path = MoPubSDK/Viewability/Avid/MoPub_AbstractAvidAdSession.h; sourceTree = ""; }; - B8921FFBAFE64AE671EB119DB1AC3830 /* MOPUBAVPlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBAVPlayer.h; path = MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.h; sourceTree = ""; }; - B8A47C7B1DFBD8EB571A30F1D7DC2E88 /* UIView+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.m"; sourceTree = ""; }; - B920C4B1CB5B6D5B178F32273114ECF0 /* MPAdConversionTracker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdConversionTracker.m; path = MoPubSDK/MPAdConversionTracker.m; sourceTree = ""; }; - B96809DB8BB31B53976A0958B754B0AA /* MPWebView+Viewability.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPWebView+Viewability.h"; path = "MoPubSDK/Viewability/MPWebView+Viewability.h"; sourceTree = ""; }; - B9CCABD037F16AC6F04E6185FAB42547 /* MPTableViewAdPlacerCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPTableViewAdPlacerCell.m; path = MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.m; sourceTree = ""; }; - BA2B9C8A051AA991DDFCEC5C2CFBDAB7 /* MoPub_Avid.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_Avid.h; path = MoPubSDK/Viewability/Avid/MoPub_Avid.h; sourceTree = ""; }; - BAAF9FCCB0E5C8042E8FEA6A05CBD1AE /* MPMutedBtn@2x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPMutedBtn@2x.png"; path = "MoPubSDK/Resources/MPMutedBtn@2x.png"; sourceTree = ""; }; - BAD109338E52785C26618DF1F0950BEA /* MPStreamAdPlacementData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPStreamAdPlacementData.m; path = MoPubSDK/NativeAds/MPStreamAdPlacementData.m; sourceTree = ""; }; - BB0C48FDC24D1E89A89272F5490538DC /* MPVASTLinearAd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTLinearAd.m; path = MoPubSDK/Internal/VAST/MPVASTLinearAd.m; sourceTree = ""; }; - BB14B57D3C13475FA0E3A8B89E003439 /* MOPUBPlayerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBPlayerViewController.h; path = MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.h; sourceTree = ""; }; - BB2B2004F21AF6D90670C785AC555084 /* MPVASTStringUtilities.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTStringUtilities.h; path = MoPubSDK/Internal/VAST/MPVASTStringUtilities.h; sourceTree = ""; }; - BC6AE705AC230A384ACBC077ABDBB501 /* MPAPIEndpoints.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAPIEndpoints.h; path = MoPubSDK/Internal/Common/MPAPIEndpoints.h; sourceTree = ""; }; - BE296C612588CFE0E16F9B86CF492A20 /* MPInterstitialAdManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPInterstitialAdManager.h; path = MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.h; sourceTree = ""; }; - BFFFC9C231B099FB35A274BF18921F5B /* MPVASTManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTManager.m; path = MoPubSDK/Internal/VAST/MPVASTManager.m; sourceTree = ""; }; - C0AB984CE6608311EC2263DEF4B1966A /* MPNativeAd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeAd.m; path = MoPubSDK/NativeAds/MPNativeAd.m; sourceTree = ""; }; - C0C0DC1AB0A419009B2207C4BF671B3B /* MPVASTMacroProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTMacroProcessor.m; path = MoPubSDK/Internal/VAST/MPVASTMacroProcessor.m; sourceTree = ""; }; - C2C9B322A6F892DD8F351E301E802058 /* UIWebView+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIWebView+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/UIWebView+MPAdditions.h"; sourceTree = ""; }; - C2CE5BD664909CA9A49904262D7F55C8 /* MOPUBPlayerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBPlayerViewController.m; path = MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.m; sourceTree = ""; }; - C3EF86822D9A255A4008E353F5153F05 /* MPAdImpressionTimer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdImpressionTimer.h; path = MoPubSDK/Internal/Common/MPAdImpressionTimer.h; sourceTree = ""; }; - C3F3D7D4B00FDB6A27EA55D429C4804A /* MPAdTargeting.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdTargeting.m; path = MoPubSDK/MPAdTargeting.m; sourceTree = ""; }; - C489B331E897E952F334DFF31F03D107 /* MPBaseBannerAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPBaseBannerAdapter.m; path = MoPubSDK/Internal/Banners/MPBaseBannerAdapter.m; sourceTree = ""; }; - C4CE4B478FA703D69999F9119A748144 /* MPAdWebViewAgent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdWebViewAgent.h; path = MoPubSDK/Internal/HTML/MPAdWebViewAgent.h; sourceTree = ""; }; - C4F74198ADD48CA8DD78A9DEAFBF90A6 /* MPClosableView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPClosableView.m; path = MoPubSDK/Internal/Common/MPClosableView.m; sourceTree = ""; }; - C509F6606FBC892C534B3C8477165727 /* MPMoPubNativeAdAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubNativeAdAdapter.h; path = MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.h; sourceTree = ""; }; - C5FD0283D4D3656EFCCEFDF6BEC1247A /* MPServerAdPositioning.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPServerAdPositioning.m; path = MoPubSDK/NativeAds/MPServerAdPositioning.m; sourceTree = ""; }; - C6A700D84D0510754869DFB3593CD08F /* MPXMLParser.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPXMLParser.m; path = MoPubSDK/Internal/Common/MPXMLParser.m; sourceTree = ""; }; - C706B6B8013E04843FAC4AB2ED5BB710 /* MOPUBNativeVideoImpressionAgent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBNativeVideoImpressionAgent.m; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoImpressionAgent.m; sourceTree = ""; }; - C74DE126098AE5E9F6DC0BFE7BF2C47F /* MPUnmutedBtn@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPUnmutedBtn@3x.png"; path = "MoPubSDK/Resources/MPUnmutedBtn@3x.png"; sourceTree = ""; }; - C76825C5F64783A60863BAFC9FFEF6ED /* NSString+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSString+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.m"; sourceTree = ""; }; - C7DD29215D6EFB608E8D0FA1CE6B7FA7 /* MPNativePositionResponseDeserializer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativePositionResponseDeserializer.h; path = MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.h; sourceTree = ""; }; - C7F4608B9C77D6411DD870F77D43AF81 /* MPAdServerURLBuilder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdServerURLBuilder.m; path = MoPubSDK/Internal/Common/MPAdServerURLBuilder.m; sourceTree = ""; }; - C84DDEA7B8CCAF7AC83F79CBFC37125B /* MOPUBActivityIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBActivityIndicatorView.m; path = MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.m; sourceTree = ""; }; - CA1432AC146FD6E74F9C450A54FF5692 /* MPURL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPURL.h; path = MoPubSDK/Internal/MPURL.h; sourceTree = ""; }; - CA2124E2143FE6EF80BD975D9E5F7B23 /* MPBannerCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPBannerCustomEvent.m; path = MoPubSDK/MPBannerCustomEvent.m; sourceTree = ""; }; - CC9A3BBC595418ED2B144220635A49D7 /* MPStaticNativeAdRendererSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPStaticNativeAdRendererSettings.h; path = MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.h; sourceTree = ""; }; - CEB3EA6C71061EDD532059D27ADF715A /* Pods-PrebidMobileDemo-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-PrebidMobileDemo-resources.sh"; sourceTree = ""; }; - CF43E5A781200F60D26BBD9042B02DE4 /* NSMutableArray+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSMutableArray+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.h"; sourceTree = ""; }; - CFCCBD2200429AC5121B7CAB80A30483 /* MPStreamAdPlacer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPStreamAdPlacer.m; path = MoPubSDK/NativeAds/MPStreamAdPlacer.m; sourceTree = ""; }; - D1486C78EBCFC6578F7A7D5ABDDE32DD /* MPVASTAd.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTAd.m; path = MoPubSDK/Internal/VAST/MPVASTAd.m; sourceTree = ""; }; - D16902D9559C992CD359880D50F4B3A4 /* MPNativeCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeCustomEvent.m; path = MoPubSDK/NativeAds/MPNativeCustomEvent.m; sourceTree = ""; }; - D1E9613E610B869461C6B2A824E79622 /* MOPUBNativeVideoCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBNativeVideoCustomEvent.h; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.h; sourceTree = ""; }; - D1EDE4638CC4B81B3FA05593899FC766 /* MPDiskLRUCache.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPDiskLRUCache.h; path = MoPubSDK/NativeAds/Internal/MPDiskLRUCache.h; sourceTree = ""; }; - D367AC0A87A73265E9060E3D5DFEC4AF /* MPHTMLInterstitialCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPHTMLInterstitialCustomEvent.h; path = MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.h; sourceTree = ""; }; - D37D1C8C8C390E715A512EE98F4561EF /* UIColor+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIColor+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.h"; sourceTree = ""; }; - D3A1713070838317389B0A4D3B1279F1 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/CoreLocation.framework; sourceTree = DEVELOPER_DIR; }; - D4E2E57F02D333828355BB27CB5999D2 /* MPRewardedVideoReward.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRewardedVideoReward.m; path = MoPubSDK/RewardedVideo/MPRewardedVideoReward.m; sourceTree = ""; }; - D5DBB70A8E3EE44969F4F7DF9C7B0476 /* MRCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MRCommand.h; path = MoPubSDK/Internal/MRAID/MRCommand.h; sourceTree = ""; }; - D6061A8C6452F3B5C87FCBD9E0252D58 /* MPCloseBtn.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MPCloseBtn.png; path = MoPubSDK/Resources/MPCloseBtn.png; sourceTree = ""; }; - D6B9309AF4B666ADBA1D90D7FE936E59 /* Pods-PrebidMobileDemo-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-PrebidMobileDemo-acknowledgements.markdown"; sourceTree = ""; }; - D809012A5D65DE2D2E3D98F21249E4FF /* MPPrivateRewardedVideoCustomEventDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPPrivateRewardedVideoCustomEventDelegate.h; path = MoPubSDK/RewardedVideo/Internal/MPPrivateRewardedVideoCustomEventDelegate.h; sourceTree = ""; }; - D82BF26409EB41698EC273DDF9225205 /* MPAdAlertManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdAlertManager.h; path = MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.h; sourceTree = ""; }; - D856C966F403477126CBCCF4E6B7D3B4 /* MPBannerCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBannerCustomEvent.h; path = MoPubSDK/MPBannerCustomEvent.h; sourceTree = ""; }; - D86C8EF10CA0E6F2199DAFC598133D47 /* MPEnhancedDeeplinkRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPEnhancedDeeplinkRequest.m; path = MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.m; sourceTree = ""; }; - D8E6FFF780B2D955038B49AF32ACE91D /* MPBannerCustomEventDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBannerCustomEventDelegate.h; path = MoPubSDK/MPBannerCustomEventDelegate.h; sourceTree = ""; }; - D9323DB716F905DC5D5DED1E448AEC5E /* MOPUBFullscreenPlayerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBFullscreenPlayerViewController.h; path = MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.h; sourceTree = ""; }; - D93CA6FEF5B6F23D70904853C408261A /* MPNativeView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeView.m; path = MoPubSDK/NativeAds/Internal/MPNativeView.m; sourceTree = ""; }; - D94D0894B453B199C1B41D0E0C476CA6 /* MPViewabilityOption.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPViewabilityOption.h; path = MoPubSDK/Viewability/MPViewabilityOption.h; sourceTree = ""; }; - D986592CA4D5F3537C1A0F0B8701DC00 /* MPProgressOverlayView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPProgressOverlayView.m; path = MoPubSDK/Internal/Common/MPProgressOverlayView.m; sourceTree = ""; }; - DA08C790EC506E6891F6202527714A28 /* NSString+MPConsentStatus.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+MPConsentStatus.h"; path = "MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.h"; sourceTree = ""; }; - DADC9A09C4E2A86991367A4CDB048CDA /* MPVASTMacroProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTMacroProcessor.h; path = MoPubSDK/Internal/VAST/MPVASTMacroProcessor.h; sourceTree = ""; }; - DB5F85FC14F0C2408A1557D39D4CEDD3 /* MPImageDownloadQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPImageDownloadQueue.h; path = MoPubSDK/NativeAds/Internal/MPImageDownloadQueue.h; sourceTree = ""; }; - DC0D6ADFFC4E9376050517360B97853C /* MPRewardedVideoError.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPRewardedVideoError.h; path = MoPubSDK/RewardedVideo/MPRewardedVideoError.h; sourceTree = ""; }; - DC1459032BCB5DD89601DED15F93B07D /* MPTableViewAdPlacer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPTableViewAdPlacer.m; path = MoPubSDK/NativeAds/MPTableViewAdPlacer.m; sourceTree = ""; }; - DC4307E06FEA92E23304685729875648 /* MPHTTPNetworkSession.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPHTTPNetworkSession.m; path = MoPubSDK/Internal/MPHTTPNetworkSession.m; sourceTree = ""; }; - DC48023361C05090FF625D03839F1A35 /* MPConsentDialogViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsentDialogViewController.h; path = MoPubSDK/Internal/MPConsentDialogViewController.h; sourceTree = ""; }; - DDE37E16BD43FBF2042010DBD6D79865 /* MPAdServerURLBuilder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdServerURLBuilder.h; path = MoPubSDK/Internal/Common/MPAdServerURLBuilder.h; sourceTree = ""; }; - DDE9BF49FB6F8C3830F19F8AD6936F39 /* MPVASTResource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTResource.m; path = MoPubSDK/Internal/VAST/MPVASTResource.m; sourceTree = ""; }; - DE0CA2983E337B4015C1669C545AF0E4 /* MOPUBNativeVideoAdRendererSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBNativeVideoAdRendererSettings.m; path = MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.m; sourceTree = ""; }; - DFC8BB2E4D59CA11ABBFD13057C298E1 /* MPAdAlertGestureRecognizer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdAlertGestureRecognizer.h; path = MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.h; sourceTree = ""; }; - DFE2DD01A4E3426FCAFAD1862CF38CEB /* Pods-PrebidMobileDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PrebidMobileDemo.release.xcconfig"; sourceTree = ""; }; - E011A173FB75710FA7327C8C3CAA6BA7 /* MRBundleManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MRBundleManager.m; path = MoPubSDK/Internal/MRAID/MRBundleManager.m; sourceTree = ""; }; - E0308FC02008663971ADE4E7FA0F5989 /* MPLastResortDelegate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPLastResortDelegate.m; path = MoPubSDK/Internal/Common/MPLastResortDelegate.m; sourceTree = ""; }; - E055D659DE5597E7962C48F11135A071 /* MPCoreInstanceProvider+MRAID.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MPCoreInstanceProvider+MRAID.m"; path = "MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.m"; sourceTree = ""; }; - E16518061869F158F253B866F592CF05 /* MPNativeCustomEventDelegate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeCustomEventDelegate.h; path = MoPubSDK/NativeAds/MPNativeCustomEventDelegate.h; sourceTree = ""; }; - E1F3E9521FF9B6F018088FE1D31E4B03 /* MPRewardedVideo+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPRewardedVideo+Internal.h"; path = "MoPubSDK/RewardedVideo/Internal/MPRewardedVideo+Internal.h"; sourceTree = ""; }; - E248ABD4E7E6D6D39819253C76AAC8CD /* NSBundle+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSBundle+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.m"; sourceTree = ""; }; - E30A70D4C5F5F778472CCC2F0685D3FC /* MPVASTAd.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTAd.h; path = MoPubSDK/Internal/VAST/MPVASTAd.h; sourceTree = ""; }; - E367F741057598308711F5C50D2006C9 /* MPNativeAdConfigValues+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MPNativeAdConfigValues+Internal.h"; path = "MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.h"; sourceTree = ""; }; - E36EA59C82678B3163DDFAE489FBF0B5 /* MPAdServerCommunicator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPAdServerCommunicator.h; path = MoPubSDK/Internal/Common/MPAdServerCommunicator.h; sourceTree = ""; }; - E39202E7DFB41C1C1AA14161C4350D90 /* MPMoPubRewardedVideoCustomEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMoPubRewardedVideoCustomEvent.m; path = MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.m; sourceTree = ""; }; - E3D5E36F3910B5A2C2BE02C2375DFDFE /* MPGlobal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPGlobal.m; path = MoPubSDK/Internal/Utility/MPGlobal.m; sourceTree = ""; }; - E3D6949FF8E5178E896283520CC9ADB6 /* MPVASTMediaFile.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTMediaFile.h; path = MoPubSDK/Internal/VAST/MPVASTMediaFile.h; sourceTree = ""; }; - E58E60D6B757C1654053DAFAFFFC889D /* MoPub_AvidDeferredAdSessionListener.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidDeferredAdSessionListener.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidDeferredAdSessionListener.h; sourceTree = ""; }; - E5D63FC08A46BB57EFF8B56A8B065EBD /* MPConsentChangedReason.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsentChangedReason.h; path = MoPubSDK/MPConsentChangedReason.h; sourceTree = ""; }; - E5E74A12A9154860F9856B2FA6FA7A1E /* MPBannerCustomEventAdapter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPBannerCustomEventAdapter.m; path = MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.m; sourceTree = ""; }; - E5E988BBBD96F48920F894E48756D1D8 /* MPNativePositionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativePositionSource.m; path = MoPubSDK/NativeAds/Internal/MPNativePositionSource.m; sourceTree = ""; }; - E650F8E2FBDA460CA7DE52F67F6AC77E /* MPBannerCustomEventAdapter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBannerCustomEventAdapter.h; path = MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.h; sourceTree = ""; }; - E6D23CCE3BD6B5D2DA0E4D60A5DFCF8D /* MPReachabilityManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPReachabilityManager.m; path = MoPubSDK/Internal/MPReachabilityManager.m; sourceTree = ""; }; - E7B2AEE4BC831993D7D6AFF0363DA089 /* MPBannerAdManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPBannerAdManager.h; path = MoPubSDK/Internal/Banners/MPBannerAdManager.h; sourceTree = ""; }; - E826893DB087DB56EE80FBBB7B2637C4 /* MPConsentManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPConsentManager.h; path = MoPubSDK/Internal/MPConsentManager.h; sourceTree = ""; }; - E841DB5AFC0898D5203DF42E138B1CB4 /* MPMoPubRewardedPlayableCustomEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMoPubRewardedPlayableCustomEvent.h; path = MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.h; sourceTree = ""; }; - E87C06C23517FB8F3FA160737E76F5EF /* MPURLRequest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPURLRequest.m; path = MoPubSDK/Internal/MPURLRequest.m; sourceTree = ""; }; - E8EC67306067AA573EF033FD77A4804E /* Pods-PrebidMobileDemo-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-PrebidMobileDemo-dummy.m"; sourceTree = ""; }; - E97BC1C89D9E6B55DFFA26FD9F44428D /* MPMediationManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMediationManager.m; path = MoPubSDK/Internal/MPMediationManager.m; sourceTree = ""; }; - E9A097FFCFD84CE7F869717A3854780D /* MPIdentityProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPIdentityProvider.h; path = MoPubSDK/Internal/Utility/MPIdentityProvider.h; sourceTree = ""; }; - E9B710C00ED83BA43710FDE68EDD12CA /* MOPUBFullscreenPlayerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBFullscreenPlayerViewController.m; path = MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.m; sourceTree = ""; }; - EAABB1511906AA86FEB7ABC736F203C6 /* MPVASTModel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTModel.h; path = MoPubSDK/Internal/VAST/MPVASTModel.h; sourceTree = ""; }; - EAADC548F05B307D039FF319E45B17F2 /* MPAdDestinationDisplayAgent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdDestinationDisplayAgent.m; path = MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.m; sourceTree = ""; }; - EAEFD36A3E3B983FE4E8252C9814FE91 /* MOPUBDisplayAgentType.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBDisplayAgentType.h; path = MoPubSDK/MOPUBDisplayAgentType.h; sourceTree = ""; }; - EB1AF4ACB89A2DCEBA1292A739B3C75D /* MPVASTManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTManager.h; path = MoPubSDK/Internal/VAST/MPVASTManager.h; sourceTree = ""; }; - EC3FC5853B4F4EF6D1EC228CF43C3A33 /* MPConsentChangedReason.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPConsentChangedReason.m; path = MoPubSDK/MPConsentChangedReason.m; sourceTree = ""; }; - EC83F06503AFBE19CB5B3ECA02BB6D32 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/Frameworks/AVFoundation.framework; sourceTree = DEVELOPER_DIR; }; - ECAB7D41B3E8A3534C08A1056A1D81ED /* MPNativeAdConfigValues.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativeAdConfigValues.h; path = MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.h; sourceTree = ""; }; - ED1AEE17CAE75B62E8022EE2C9816384 /* MPVASTIndustryIcon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTIndustryIcon.m; path = MoPubSDK/Internal/VAST/MPVASTIndustryIcon.m; sourceTree = ""; }; - ED59FA8139285E625887FF124D642B65 /* MOPUBPlayerManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBPlayerManager.h; path = MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.h; sourceTree = ""; }; - EDE0467F8731AF1EEC541D67D03C7E91 /* MPCollectionViewAdPlacerCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPCollectionViewAdPlacerCell.h; path = MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.h; sourceTree = ""; }; - EDE629A956B73878D814285B18749C1C /* MPRealTimeTimer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPRealTimeTimer.m; path = MoPubSDK/Internal/Common/MPRealTimeTimer.m; sourceTree = ""; }; - EE38A6937309F953788475C89C1DF493 /* NSBundle+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSBundle+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.h"; sourceTree = ""; }; - EF6628239AD97DB1F795C679888F186B /* MPAdConfiguration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPAdConfiguration.m; path = MoPubSDK/Internal/Common/MPAdConfiguration.m; sourceTree = ""; }; - EFD0108DF2CA8176BFBC5754B8156FC4 /* MPStreamAdPlacementData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPStreamAdPlacementData.h; path = MoPubSDK/NativeAds/MPStreamAdPlacementData.h; sourceTree = ""; }; - EFF40F642089C473D639B7D50CDD5CF2 /* MPMRAIDInterstitialViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPMRAIDInterstitialViewController.m; path = MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.m; sourceTree = ""; }; - F07CAFDBEABF657E4554CCAFECB266D0 /* NSMutableArray+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSMutableArray+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.m"; sourceTree = ""; }; - F1A06B0D0F45170A803A078BD4730C5C /* NSURL+MPAdditions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSURL+MPAdditions.m"; path = "MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.m"; sourceTree = ""; }; - F1A20BD4BAC44D3674A2D59EB3DFD892 /* MoPub_AvidDisplayAdSession.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MoPub_AvidDisplayAdSession.h; path = MoPubSDK/Viewability/Avid/MoPub_AvidDisplayAdSession.h; sourceTree = ""; }; - F3484A5ED8C66041C17AB1AE135C23F9 /* MOPUBExperimentProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MOPUBExperimentProvider.h; path = MoPubSDK/Internal/Utility/MOPUBExperimentProvider.h; sourceTree = ""; }; - F66F0AEA8C6058E46277098D9D2562D8 /* MPMediationSdkInitializable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPMediationSdkInitializable.h; path = MoPubSDK/MPMediationSdkInitializable.h; sourceTree = ""; }; - F6E2C99A4DAE41C12FB70B10205FE2B6 /* MPViewabilityAdapterAvid.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPViewabilityAdapterAvid.m; path = MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.m; sourceTree = ""; }; - F7604B70F2C26002AE4774F2BB331B0F /* MPTimer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPTimer.h; path = MoPubSDK/Internal/Utility/MPTimer.h; sourceTree = ""; }; - F7F57684F4FE561221F3505432109DC6 /* MPNativeCache.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPNativeCache.m; path = MoPubSDK/NativeAds/Internal/MPNativeCache.m; sourceTree = ""; }; - F80E1633CD5C379956A587D4796C40E8 /* MOPUBNativeVideoAdConfigValues.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MOPUBNativeVideoAdConfigValues.m; path = MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.m; sourceTree = ""; }; - F857D93B5B7B30BD91AFEDE6B3BA6DCB /* MPMutedBtn@3x.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "MPMutedBtn@3x.png"; path = "MoPubSDK/Resources/MPMutedBtn@3x.png"; sourceTree = ""; }; - F8824EF05A053E42572A2A2DF0268645 /* MPHTMLInterstitialViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPHTMLInterstitialViewController.m; path = MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.m; sourceTree = ""; }; - FAA7C0122C6A12142CACE8D01333BB7F /* MPNativePositionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPNativePositionSource.h; path = MoPubSDK/NativeAds/Internal/MPNativePositionSource.h; sourceTree = ""; }; - FBA0A75D96BF25F4D634FD7A5686865E /* MPStaticNativeAdRendererSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPStaticNativeAdRendererSettings.m; path = MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.m; sourceTree = ""; }; - FBADFA21D6CF4FDF92F510EAF0FF4319 /* NSString+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSString+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.h"; sourceTree = ""; }; - FBE55A84F9AB32C1CA36FC437BE1DAC6 /* MPVASTTrackingEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPVASTTrackingEvent.m; path = MoPubSDK/Internal/VAST/MPVASTTrackingEvent.m; sourceTree = ""; }; - FC23AB19F90B304323C19E6FA1DB548C /* MPVASTCreative.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MPVASTCreative.h; path = MoPubSDK/Internal/VAST/MPVASTCreative.h; sourceTree = ""; }; - FCD43EB0D49AD4E105A090EE5AB0F261 /* UIButton+MPAdditions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIButton+MPAdditions.h"; path = "MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.h"; sourceTree = ""; }; - FD29579B368D83639CFA35577181CFD0 /* MPConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPConstants.m; path = MoPubSDK/MPConstants.m; sourceTree = ""; }; - FE662384961B58D2069B68B3C6CB655F /* MPCollectionViewAdPlacerCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = MPCollectionViewAdPlacerCell.m; path = MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.m; sourceTree = ""; }; - FF8DE485BABB93591E66681A176EBF02 /* MPDAAIcon.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = MPDAAIcon.png; path = MoPubSDK/Resources/MPDAAIcon.png; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 41831932CFB5A346E9274D0608858BE9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E82FB5DD775A63302DCCD0D7B7C7158F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C89CD3D22A45AECF5FBAE754222D21AD /* AVFoundation.framework in Frameworks */, - 6822A870104D37E51F8EB5366B915186 /* CoreGraphics.framework in Frameworks */, - 44EF1E8DFFF890F1019334FC6FA9C797 /* CoreLocation.framework in Frameworks */, - A3C02CC35DB8051F36257650348ACA1C /* CoreMedia.framework in Frameworks */, - 6A6BFCCA1235DB291360CAF3138A82A1 /* CoreTelephony.framework in Frameworks */, - 3BC5E70A5A72B37311FCC20C90F4F1DA /* Foundation.framework in Frameworks */, - D3C3A998FEC820FCFA711D3AB8589FA4 /* MediaPlayer.framework in Frameworks */, - D146D55B9D427EC1C8716837BF678AD5 /* QuartzCore.framework in Frameworks */, - 94E6C288939FC00B0D5129702F550BA0 /* SafariServices.framework in Frameworks */, - EED4C7A1072A3446CBF91A378679E149 /* SystemConfiguration.framework in Frameworks */, - EDCE36514CB76DB8EEF0CCECA04F9E0D /* UIKit.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 0196862B3D2F33BB34FE9425E565FC1E /* iOS */ = { - isa = PBXGroup; - children = ( - EC83F06503AFBE19CB5B3ECA02BB6D32 /* AVFoundation.framework */, - 5C56BDCBFCC45B6F5AF3F9F47A9CA0CB /* CoreGraphics.framework */, - D3A1713070838317389B0A4D3B1279F1 /* CoreLocation.framework */, - 8D439917CB30AC8E78B9B6C023FA05E9 /* CoreMedia.framework */, - 8AD95340DB0BB4590FB5B3275EA907E7 /* CoreTelephony.framework */, - 1B9AC692EAAF0B1D08BD42F9F1400E8B /* Foundation.framework */, - 4778A939F8C02F9D0EC6AB31D5EB9785 /* MediaPlayer.framework */, - 957F9F2B3B10161DF0A3EF830681FF51 /* QuartzCore.framework */, - 12751C45EB941E72579D46DA2679E75B /* SafariServices.framework */, - 7913720A451516D7AE0A148037775187 /* SystemConfiguration.framework */, - 1028E9B4E4E201928AEEC53BEF078045 /* UIKit.framework */, - ); - name = iOS; - sourceTree = ""; - }; - 1430B86D5CAFD47BEDB47740FBF3D0F0 /* Moat */ = { - isa = PBXGroup; - children = ( - 6A2AB8A956D4B69FDE1FBA3C8FA6968E /* MPViewabilityAdapterMoat.h */, - A565E1599FA4124F65CE79FCC0BE7395 /* MPViewabilityAdapterMoat.m */, - 2EE5818D543668D581FB78B1221CDC50 /* Frameworks */, - ); - name = Moat; - sourceTree = ""; - }; - 1E0A3836F22E8EC56D6AC1688F54FD23 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 61C48E51A7E9057C3392D4CBB920E600 /* libAvid-mopub-3.6.1.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - 1EB9BFBD1C124C8E31F69286A41D9F34 /* Resources */ = { - isa = PBXGroup; - children = ( - 0472B1FC9ABE2B636E4DCAACFD9DDBAE /* MPAdBrowserController.xib */, - D6061A8C6452F3B5C87FCBD9E0252D58 /* MPCloseBtn.png */, - AE22EEFDB06184330100E4995F315299 /* MPCloseBtn@2x.png */, - A7A7B44110552A4D27B828AC02D26C90 /* MPCloseBtn@3x.png */, - 706B3F8E3C0EBC335614C69C1F00BAA8 /* MPCloseButtonX.png */, - 001069427242FC1717A972CF60C6EF49 /* MPCloseButtonX@2x.png */, - 320BC5ECFC4092620826EF35F276D822 /* MPCloseButtonX@3x.png */, - 01830142D297EB01A36EC48C23155170 /* MPCountdownTimer.html */, - FF8DE485BABB93591E66681A176EBF02 /* MPDAAIcon.png */, - 3472B8E6979257A19CD19EDBE06CAE05 /* MPDAAIcon@2x.png */, - 04D9988E8E6BBFB5CBDD9B14C479C02E /* MPDAAIcon@3x.png */, - B1642905BB1F8E35FE47CA5C37258EF7 /* MPMutedBtn.png */, - BAAF9FCCB0E5C8042E8FEA6A05CBD1AE /* MPMutedBtn@2x.png */, - F857D93B5B7B30BD91AFEDE6B3BA6DCB /* MPMutedBtn@3x.png */, - 05CE15B0ADAB7C4D9E82862C8E05B09B /* MPPlayBtn.png */, - 6100AA5D599C105B69615E0F0042F786 /* MPPlayBtn@2x.png */, - 0110BE949B69EFCD55E3C6A6A77E58E8 /* MPPlayBtn@3x.png */, - 5D29A0F81624856BA22E2854FE617F8E /* MPUnmutedBtn.png */, - 8A8682EFCD46800FF674529F8FCC2569 /* MPUnmutedBtn@2x.png */, - C74DE126098AE5E9F6DC0BFE7BF2C47F /* MPUnmutedBtn@3x.png */, - 70E02A69A7C9B83F37ECF70C768B4440 /* MRAID.bundle */, - ); - name = Resources; - sourceTree = ""; - }; - 23FAF1EB5450A412CB39C439D303A47D /* Avid */ = { - isa = PBXGroup; - children = ( - B841AEE0855C262992EE65CB8124C89E /* MoPub_AbstractAvidAdSession.h */, - A78ED58D98A2CCEF876A92E37DE35AC5 /* MoPub_AbstractAvidManagedAdSession.h */, - BA2B9C8A051AA991DDFCEC5C2CFBDAB7 /* MoPub_Avid.h */, - 8579D1A7850ED27BFEB7DA5CFF00070D /* MoPub_AvidAdSessionManager.h */, - E58E60D6B757C1654053DAFAFFFC889D /* MoPub_AvidDeferredAdSessionListener.h */, - F1A20BD4BAC44D3674A2D59EB3DFD892 /* MoPub_AvidDisplayAdSession.h */, - 42D09FFE96519AA60024109D8B83A47B /* MoPub_AvidManagedDisplayAdSession.h */, - 00539895FAE6DA670982831760780175 /* MoPub_AvidManagedVideoAdSession.h */, - 2C393DA988663DF5C4EC5DACBB1E3E7F /* MoPub_AvidVideoAdSession.h */, - 49088FAC20BF8E1A37751792A82CF071 /* MoPub_AvidVideoPlaybackListener.h */, - B510B9FFCC7534B8CC44BAB33CCDB739 /* MoPub_ExternalAvidAdSessionContext.h */, - 87F5C1AC5DF28B45EFE179281B0F1BC7 /* MPViewabilityAdapterAvid.h */, - F6E2C99A4DAE41C12FB70B10205FE2B6 /* MPViewabilityAdapterAvid.m */, - 1E0A3836F22E8EC56D6AC1688F54FD23 /* Frameworks */, - ); - name = Avid; - sourceTree = ""; - }; - 2EE5818D543668D581FB78B1221CDC50 /* Frameworks */ = { - isa = PBXGroup; - children = ( - AFC2C6D2DFFFC73D2FC6B84EA9E4CDC7 /* MPUBMoatMobileAppKit.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 3C7EE6AB1CFE2AA4D10483E63F1A1697 /* Pods */ = { - isa = PBXGroup; - children = ( - DA0F565414E1DE9CBFE89699EE501112 /* Google-Mobile-Ads-SDK */, - 77E03636CEC45E130BD966C930E2A948 /* mopub-ios-sdk */, - ); - name = Pods; - sourceTree = ""; - }; - 47EB2D6B12BC94EE8DF96C1B84930D44 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 9411199523C3152DBCB7EE0641176575 /* GoogleMobileAds.framework */, - 40EDDC72FB6D089CE0CD3B512F3CAE3B /* libGoogleMobileAds.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - 526DC260EDC4EA2F92D54EF018C908E1 /* Products */ = { - isa = PBXGroup; - children = ( - 2EBF74BBD4D0643E11CD802CEA2D8737 /* libmopub-ios-sdk.a */, - 7A43535A18382DD2714FFE28782259D0 /* libPods-PrebidMobileDemo.a */, - ); - name = Products; - sourceTree = ""; - }; - 6B8444DB646C91DE6E153288CF9C0312 /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - EC5939FBD4F2AE86F37B0C11641FA6DF /* Pods-PrebidMobileDemo */, - ); - name = "Targets Support Files"; - sourceTree = ""; - }; - 77E03636CEC45E130BD966C930E2A948 /* mopub-ios-sdk */ = { - isa = PBXGroup; - children = ( - 23FAF1EB5450A412CB39C439D303A47D /* Avid */, - D2ED93FD6EAC7643C60C518F714C8A25 /* Core */, - 1430B86D5CAFD47BEDB47740FBF3D0F0 /* Moat */, - FB0B3A4E4072076C4EDDE67F5076FB86 /* Support Files */, - ); - name = "mopub-ios-sdk"; - path = "mopub-ios-sdk"; - sourceTree = ""; - }; - 7DB346D0F39D3F0E887471402A8071AB = { - isa = PBXGroup; - children = ( - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, - EB57DDB3388FBC701046A1E93218737F /* Frameworks */, - 3C7EE6AB1CFE2AA4D10483E63F1A1697 /* Pods */, - 526DC260EDC4EA2F92D54EF018C908E1 /* Products */, - 6B8444DB646C91DE6E153288CF9C0312 /* Targets Support Files */, - ); - sourceTree = ""; - }; - D2ED93FD6EAC7643C60C518F714C8A25 /* Core */ = { - isa = PBXGroup; - children = ( - 7068A59AD88E4DA00A75E93C0F18AE9E /* MoPub.h */, - 40F84D2DC11BB47E682D3188B2E4B22A /* MoPub.m */, - 47308A81F8A044CE57C9B84F3E5A34F4 /* MoPub-Bridging-Header.h */, - 667665900D624D45D60FE889436B32B1 /* MOPUBActivityIndicatorView.h */, - C84DDEA7B8CCAF7AC83F79CBFC37125B /* MOPUBActivityIndicatorView.m */, - B8921FFBAFE64AE671EB119DB1AC3830 /* MOPUBAVPlayer.h */, - 12D32771515DC2E9CBD463C9A1FCB491 /* MOPUBAVPlayer.m */, - 02516B36C5D86CA77A11122A04458DBB /* MOPUBAVPlayerView.h */, - 0841A2E878284BEFB810A9DA7BB1BE10 /* MOPUBAVPlayerView.m */, - EAEFD36A3E3B983FE4E8252C9814FE91 /* MOPUBDisplayAgentType.h */, - F3484A5ED8C66041C17AB1AE135C23F9 /* MOPUBExperimentProvider.h */, - A12FD53C607F36FEC9DDDDDAEAD8E40B /* MOPUBExperimentProvider.m */, - D9323DB716F905DC5D5DED1E448AEC5E /* MOPUBFullscreenPlayerViewController.h */, - E9B710C00ED83BA43710FDE68EDD12CA /* MOPUBFullscreenPlayerViewController.m */, - 1D7B5CAC10611B0692A9430850FBA45C /* MOPUBNativeVideoAdAdapter.h */, - 276408697DE239A2354C772FC21645A9 /* MOPUBNativeVideoAdAdapter.m */, - 8828542402C4098C7BA4C65B237B939A /* MOPUBNativeVideoAdConfigValues.h */, - F80E1633CD5C379956A587D4796C40E8 /* MOPUBNativeVideoAdConfigValues.m */, - 00510BB51BD33FF99CD1055142C9C97E /* MOPUBNativeVideoAdRenderer.h */, - 78C7B75DA16C66F8A9B89C1866D3DA5C /* MOPUBNativeVideoAdRenderer.m */, - 483B843D0249C54796D3618548AD6D3B /* MOPUBNativeVideoAdRendererSettings.h */, - DE0CA2983E337B4015C1669C545AF0E4 /* MOPUBNativeVideoAdRendererSettings.m */, - D1E9613E610B869461C6B2A824E79622 /* MOPUBNativeVideoCustomEvent.h */, - 599B172794EF95D483850BB2E3CC7F91 /* MOPUBNativeVideoCustomEvent.m */, - 9D77ED119AFEF4ADD5809581D6CDFFAA /* MOPUBNativeVideoImpressionAgent.h */, - C706B6B8013E04843FAC4AB2ED5BB710 /* MOPUBNativeVideoImpressionAgent.m */, - ED59FA8139285E625887FF124D642B65 /* MOPUBPlayerManager.h */, - A4A8BF41E85DA879459B3EE854977613 /* MOPUBPlayerManager.m */, - 6D6CEC5808926843A10415BC7AFDCFDB /* MOPUBPlayerView.h */, - 89F92D155AC1F80ECD72F37367C8E564 /* MOPUBPlayerView.m */, - BB14B57D3C13475FA0E3A8B89E003439 /* MOPUBPlayerViewController.h */, - C2CE5BD664909CA9A49904262D7F55C8 /* MOPUBPlayerViewController.m */, - 70004A66605A4F0412E86B25F0BA81EF /* MOPUBReplayView.h */, - 1A16BAED736507105BE0B983FE367212 /* MOPUBReplayView.m */, - 7451D8041981DA9F29C7AA82B91D677D /* MPActivityViewControllerHelper.h */, - 2B7C713F1D1AA973DFF2DB2BEDBFF48B /* MPActivityViewControllerHelper.m */, - 0031D0D10ECD85BBF823D215BE8C3411 /* MPActivityViewControllerHelper+TweetShare.h */, - 6A4D86A8AA5459460ED9035FEA892EB9 /* MPActivityViewControllerHelper+TweetShare.m */, - DFC8BB2E4D59CA11ABBFD13057C298E1 /* MPAdAlertGestureRecognizer.h */, - 9E37AB0A24C3777F396ADAEFC3EB05AB /* MPAdAlertGestureRecognizer.m */, - D82BF26409EB41698EC273DDF9225205 /* MPAdAlertManager.h */, - 25F9D09859139CE379E0851CDE130FDF /* MPAdAlertManager.m */, - 7AA1FCCFDD8E61B79FF8B760F1CC9C5A /* MPAdBrowserController.h */, - 3EE84A7D2E74CCFC10CE81ACDE82D5F3 /* MPAdBrowserController.m */, - 86D07EC4C8A6B393A60BB1E4F2C195AD /* MPAdConfiguration.h */, - EF6628239AD97DB1F795C679888F186B /* MPAdConfiguration.m */, - 16E5C35246AF149A59F5199D799F00A9 /* MPAdConversionTracker.h */, - B920C4B1CB5B6D5B178F32273114ECF0 /* MPAdConversionTracker.m */, - AAC3AAC813EA435D3DDD461B06193DEE /* MPAdDestinationDisplayAgent.h */, - EAADC548F05B307D039FF319E45B17F2 /* MPAdDestinationDisplayAgent.m */, - C3EF86822D9A255A4008E353F5153F05 /* MPAdImpressionTimer.h */, - 79DD63E9905486C80F2E45430F16D929 /* MPAdImpressionTimer.m */, - A03904F7F2A4E8A6403BA5D6A2E88CBD /* MPAdPlacerInvocation.h */, - 3EE8D1EA3932CE9781A46327C0163DF2 /* MPAdPlacerInvocation.m */, - 25FA7B57F19C1CADE50570737280C7A9 /* MPAdPositioning.h */, - A79B27383EFC56FA4314B0CAB65BA7EE /* MPAdPositioning.m */, - E36EA59C82678B3163DDFAE489FBF0B5 /* MPAdServerCommunicator.h */, - 8BD322E60CCDB047A4D2FEAC523A821A /* MPAdServerCommunicator.m */, - 82F3A432473EEC52E22EAC56EC183708 /* MPAdServerKeys.h */, - 5BFDB39F7E892906BDEFFAF4DE6FE49C /* MPAdServerKeys.m */, - DDE37E16BD43FBF2042010DBD6D79865 /* MPAdServerURLBuilder.h */, - C7F4608B9C77D6411DD870F77D43AF81 /* MPAdServerURLBuilder.m */, - 6EC09D3242325127EBCE2D7EE7D97D81 /* MPAdTargeting.h */, - C3F3D7D4B00FDB6A27EA55D429C4804A /* MPAdTargeting.m */, - 9E4C848EE50D633965E17392AEE7F344 /* MPAdvancedBidder.h */, - B1D63722124F51E6F9C62309214EEAE8 /* MPAdvancedBiddingManager.h */, - 7D5CD45031B3DD09AF141B816448040C /* MPAdvancedBiddingManager.m */, - AC62218FF89DCAFBAA2EC6D82DABFCF4 /* MPAdView.h */, - 59976B533B1662B946D018C98B4E6D47 /* MPAdView.m */, - C4CE4B478FA703D69999F9119A748144 /* MPAdWebViewAgent.h */, - 3713FDF71B677F463F8F41A16B859214 /* MPAdWebViewAgent.m */, - 10549D2B29F2C0AF1CDBED1C018FBDD7 /* MPAnalyticsTracker.h */, - 1F63BD1CC33F6EED23C85CF7FB25F430 /* MPAnalyticsTracker.m */, - BC6AE705AC230A384ACBC077ABDBB501 /* MPAPIEndpoints.h */, - 8C24DB19F9E63FFD8F38E4EB14DFA6D0 /* MPAPIEndpoints.m */, - E7B2AEE4BC831993D7D6AFF0363DA089 /* MPBannerAdManager.h */, - 6EA84708F95322E1D56C3549668B1431 /* MPBannerAdManager.m */, - 2F7CA0B04E09B7481603830448A37A8C /* MPBannerAdManagerDelegate.h */, - D856C966F403477126CBCCF4E6B7D3B4 /* MPBannerCustomEvent.h */, - CA2124E2143FE6EF80BD975D9E5F7B23 /* MPBannerCustomEvent.m */, - 22986C0CB52459241E21F9216AA80A97 /* MPBannerCustomEvent+Internal.h */, - 3A7A98D8E9921CC9A8BC6C6EFFD3BFC3 /* MPBannerCustomEvent+Internal.m */, - E650F8E2FBDA460CA7DE52F67F6AC77E /* MPBannerCustomEventAdapter.h */, - E5E74A12A9154860F9856B2FA6FA7A1E /* MPBannerCustomEventAdapter.m */, - D8E6FFF780B2D955038B49AF32ACE91D /* MPBannerCustomEventDelegate.h */, - 4175125929206986B072B17DA217B64B /* MPBaseBannerAdapter.h */, - C489B331E897E952F334DFF31F03D107 /* MPBaseBannerAdapter.m */, - 84516CD403D0951B751613814E1605ED /* MPBaseInterstitialAdapter.h */, - 4D29A5B2A882A6AA1B4B7DC386C7CF35 /* MPBaseInterstitialAdapter.m */, - 1B81ABD1AC30268341FE91D2A66B8E64 /* MPBool.h */, - 35A795C9E6E3211C1B264872A69CDD0F /* MPClientAdPositioning.h */, - B7C895B1F1E8754C1242D99A9F1A9F06 /* MPClientAdPositioning.m */, - 23B4693F22C40632E9FBFBE3467FB42A /* MPClosableView.h */, - C4F74198ADD48CA8DD78A9DEAFBF90A6 /* MPClosableView.m */, - 32F7C811B35C265FA43941648B43F807 /* MPCollectionViewAdPlacer.h */, - 69699BF902A03C059F8A1D0B98B6A3B7 /* MPCollectionViewAdPlacer.m */, - EDE0467F8731AF1EEC541D67D03C7E91 /* MPCollectionViewAdPlacerCell.h */, - FE662384961B58D2069B68B3C6CB655F /* MPCollectionViewAdPlacerCell.m */, - 936E795BDFB4D23070F73292D6A5F124 /* MPConsentChangedNotification.h */, - 900026FE3489825329BED09334092F73 /* MPConsentChangedNotification.m */, - E5D63FC08A46BB57EFF8B56A8B065EBD /* MPConsentChangedReason.h */, - EC3FC5853B4F4EF6D1EC228CF43C3A33 /* MPConsentChangedReason.m */, - DC48023361C05090FF625D03839F1A35 /* MPConsentDialogViewController.h */, - 7CE34D4B93211D562A3207D2FB0379B3 /* MPConsentDialogViewController.m */, - 3E2A6A503AD1D0D68ABC11CE549F052E /* MPConsentError.h */, - E826893DB087DB56EE80FBBB7B2637C4 /* MPConsentManager.h */, - AA2E344DA66B86B2BD84C7F1713A116A /* MPConsentManager.m */, - 836CCC1DB253E0C2C30D59F935337731 /* MPConsentStatus.h */, - B32BB6337C801379FDB3608644E89F53 /* MPConstants.h */, - FD29579B368D83639CFA35577181CFD0 /* MPConstants.m */, - 515B35D6ECDEA484BA8D21437C14C153 /* MPCoreInstanceProvider.h */, - 827A0F32A21C4FB889B109CF30FFE368 /* MPCoreInstanceProvider.m */, - AB34BCEDAE85C706212B251051298DEF /* MPCoreInstanceProvider+MRAID.h */, - E055D659DE5597E7962C48F11135A071 /* MPCoreInstanceProvider+MRAID.m */, - 48C26C12A1774A0F103892F407BB070E /* MPCountdownTimerView.h */, - 4C524F71FF05DC37DFED25E854B11C0D /* MPCountdownTimerView.m */, - D1EDE4638CC4B81B3FA05593899FC766 /* MPDiskLRUCache.h */, - 3B7A7D35A3604AEDE456E5EFC09EE3E3 /* MPDiskLRUCache.m */, - 2C469DD3D43610B0749E266F29884029 /* MPEnhancedDeeplinkRequest.h */, - D86C8EF10CA0E6F2199DAFC598133D47 /* MPEnhancedDeeplinkRequest.m */, - 27529ADB723A835DB65958D015AC0C53 /* MPError.h */, - 18050E293806782C3FDEDEC2F379A4A1 /* MPError.m */, - 205F9C14EC4704DBE04439ADD32A5B5D /* MPForceableOrientationProtocol.h */, - 17FB9B730A0B802696C4D59C3E0B7D91 /* MPGeolocationProvider.h */, - 7B62C31D8A3829226AF4540EA5256514 /* MPGeolocationProvider.m */, - 4CFD2C134EF50BE34F95102E12F40645 /* MPGlobal.h */, - E3D5E36F3910B5A2C2BE02C2375DFDFE /* MPGlobal.m */, - 8225B6EF6AA94FD20D61B06417776A0B /* MPHTMLBannerCustomEvent.h */, - 6505452289EEF454E3E4DD2F07EAF5E7 /* MPHTMLBannerCustomEvent.m */, - D367AC0A87A73265E9060E3D5DFEC4AF /* MPHTMLInterstitialCustomEvent.h */, - 12D60DAC4BF304D0054210F47BAE5CE0 /* MPHTMLInterstitialCustomEvent.m */, - A63F8F1F701C5BCCDFF60300343EE181 /* MPHTMLInterstitialViewController.h */, - F8824EF05A053E42572A2A2DF0268645 /* MPHTMLInterstitialViewController.m */, - 9C20E0CA320F53383F5E48B4864060DE /* MPHTTPNetworkSession.h */, - DC4307E06FEA92E23304685729875648 /* MPHTTPNetworkSession.m */, - 915E7F244EFB35467C35BC758D92F726 /* MPHTTPNetworkTaskData.h */, - 2CDBD2E46CFB241FBFAECD4B71E1CD5E /* MPHTTPNetworkTaskData.m */, - E9A097FFCFD84CE7F869717A3854780D /* MPIdentityProvider.h */, - 36D45A766EE83B3F7832B961CB1FA271 /* MPIdentityProvider.m */, - DB5F85FC14F0C2408A1557D39D4CEDD3 /* MPImageDownloadQueue.h */, - 2BFB909FF79D4AC98E30A345A73B4586 /* MPImageDownloadQueue.m */, - 8FAF35DECE451F26C4A96335B44EE292 /* MPInternalUtils.h */, - ABFB49F29330E2AEAD8E94BEBCA05705 /* MPInternalUtils.m */, - 56B0E03F53B70FC9DF26CB21F4102090 /* MPInterstitialAdController.h */, - 7013B712A5DCD8F54FDD1ABEFC8387AE /* MPInterstitialAdController.m */, - BE296C612588CFE0E16F9B86CF492A20 /* MPInterstitialAdManager.h */, - 8AF0E9CE8D632CC73B5D066B9E675C51 /* MPInterstitialAdManager.m */, - A67C6436492D3DF15586592ED2A668CA /* MPInterstitialAdManagerDelegate.h */, - 4399B7E9D240C7692EBB998A209376BD /* MPInterstitialCustomEvent.h */, - 590C88E8B5E91304A01BF256DA016ED1 /* MPInterstitialCustomEvent.m */, - 9157BB32C0062F33A3B962D652FECA58 /* MPInterstitialCustomEventAdapter.h */, - 308B607410978A5D03DCE54AD3234725 /* MPInterstitialCustomEventAdapter.m */, - 66D5190FF3B6B3E191FB833C7374F412 /* MPInterstitialCustomEventDelegate.h */, - 4C811630C3F309D9CB3E78AB657F40B9 /* MPInterstitialViewController.h */, - 1AF1B5103F3C45A2C768CA00200E4199 /* MPInterstitialViewController.m */, - 9A7EAD1692F1841BC2C0841761F0CCE9 /* MPLastResortDelegate.h */, - E0308FC02008663971ADE4E7FA0F5989 /* MPLastResortDelegate.m */, - 4DD574D37D116D749B5D9336AF3A3B6F /* MPLogging.h */, - 7F0BB756AA632F84A46CE4A3C4A2BD08 /* MPLogging.m */, - 958B5CF82D096456A6EA481387F57794 /* MPLogLevel.h */, - 4CA5BC2A3956F0240098899894675F3F /* MPLogProvider.h */, - 9C62C69DC7285E88D81E3121D8C9072B /* MPLogProvider.m */, - 314E9DB01B1FA2088DAA4F0B75882A7C /* MPMediationManager.h */, - E97BC1C89D9E6B55DFFA26FD9F44428D /* MPMediationManager.m */, - F66F0AEA8C6058E46277098D9D2562D8 /* MPMediationSdkInitializable.h */, - 2D2526228E9B4832684A3CFE425176CC /* MPMediationSettingsProtocol.h */, - 459D29BA04B74F21A2A23B6AD8AD931B /* MPMemoryCache.h */, - 8FA6E6C9BF934930AFCCD8D6CBE34CA7 /* MPMemoryCache.m */, - B69853533FF6ADA2AB033BCA3BFF28E0 /* MPMoPubConfiguration.h */, - 5CCADDB0A233453353AB6B5FF11EBB23 /* MPMoPubConfiguration.m */, - C509F6606FBC892C534B3C8477165727 /* MPMoPubNativeAdAdapter.h */, - B037F002C0260B61F3CF806422FE6FAB /* MPMoPubNativeAdAdapter.m */, - A04B3D8AE6324B447CB8A6A804130304 /* MPMoPubNativeCustomEvent.h */, - 5BC882692B5D0B8BC7979B5D77EB9488 /* MPMoPubNativeCustomEvent.m */, - E841DB5AFC0898D5203DF42E138B1CB4 /* MPMoPubRewardedPlayableCustomEvent.h */, - 0D779BEE3E2F14CBEF5938CAD55B6886 /* MPMoPubRewardedPlayableCustomEvent.m */, - 20F29D05DD0079D86070E238CFAE9CF9 /* MPMoPubRewardedVideoCustomEvent.h */, - E39202E7DFB41C1C1AA14161C4350D90 /* MPMoPubRewardedVideoCustomEvent.m */, - 8A28F595EF4BCA658355EEEC2588418A /* MPMRAIDBannerCustomEvent.h */, - 9D2235C08C0A504894FA38B57E85ECF7 /* MPMRAIDBannerCustomEvent.m */, - 0DE1B245ABF0AEC68D6AAC738D912BC2 /* MPMRAIDInterstitialCustomEvent.h */, - AFD84F26EAA72F51A04B1E9B04EE79A2 /* MPMRAIDInterstitialCustomEvent.m */, - 5B4E3A7228A0B3494C4DE9B1C5530932 /* MPMRAIDInterstitialViewController.h */, - EFF40F642089C473D639B7D50CDD5CF2 /* MPMRAIDInterstitialViewController.m */, - 093F1F9B79D0ACF347C667AD3756067B /* MPNativeAd.h */, - C0AB984CE6608311EC2263DEF4B1966A /* MPNativeAd.m */, - 99ACAE9CF760FD3F08AB770BD258E533 /* MPNativeAd+Internal.h */, - 095EE5E477C87894BEFC72F6AD66418E /* MPNativeAd+Internal.m */, - 049208C17446EBD4ABD6649BE7FEE343 /* MPNativeAdAdapter.h */, - ECAB7D41B3E8A3534C08A1056A1D81ED /* MPNativeAdConfigValues.h */, - 4A659C7FEA2B8F8241073FC3DED624C3 /* MPNativeAdConfigValues.m */, - E367F741057598308711F5C50D2006C9 /* MPNativeAdConfigValues+Internal.h */, - 178A83AA9D8E006D73545734D307A878 /* MPNativeAdConfigValues+Internal.m */, - AAA1655BD1F88AF54233D0B437B0E3E4 /* MPNativeAdConstants.h */, - B4A4CEC5582EED7E9F66A5EDC0D0B4B6 /* MPNativeAdConstants.m */, - 1ED24F4D24C27E6EB924D8829A83B8C1 /* MPNativeAdData.h */, - 2E6EC6680CDCEA808C71043C01EEB176 /* MPNativeAdData.m */, - 82D2B19E999C4B208D6F0CE070DC587B /* MPNativeAdDelegate.h */, - A6BCC8E83197454544A109D00F396634 /* MPNativeAdError.h */, - AB9A65A7A1F19F74431E69CB7A6BCB24 /* MPNativeAdError.m */, - 470EA67CA72FE7C7A03C8FC33ABE193F /* MPNativeAdRenderer.h */, - 726927FA862B3E4299CB6C0386CAF5BE /* MPNativeAdRendererConfiguration.h */, - A4EBDF20C9468A3D7BB1063C3ADB22EA /* MPNativeAdRendererConfiguration.m */, - 1C64A3C2AADF964E5918192286D27B82 /* MPNativeAdRendererConstants.h */, - 48AE4A78CD649B90A677C60C08E137E8 /* MPNativeAdRendererImageHandler.h */, - AEE0D42E3DC5EB0DF303AAD55B387263 /* MPNativeAdRendererImageHandler.m */, - 3AD6E46B2E2E957B8F3724784E0C1569 /* MPNativeAdRendererSettings.h */, - 83FF048F7C17E8207C0D4CDD586BF44F /* MPNativeAdRendering.h */, - 9CF4A35F15F39B68E677D43B87759933 /* MPNativeAdRenderingImageLoader.h */, - A2214387A3C53F379DB2118AB8070563 /* MPNativeAdRenderingImageLoader.m */, - 2057B643647618168BAE756DDDF6ADD3 /* MPNativeAdRequest.h */, - 52A668C203B25E48B42E24E9F32F108B /* MPNativeAdRequest.m */, - 12C13F9015DEFAF2DB7756319F63F4BD /* MPNativeAdRequest+MPNativeAdSource.h */, - 94451BB6CC9ABD226734B48D31ACD1E5 /* MPNativeAdRequestTargeting.h */, - B0D3F4681069F1CBDF5E343B6593E23C /* MPNativeAdRequestTargeting.m */, - 360AAD80F3279123B604933F03140BD1 /* MPNativeAdSource.h */, - 485F91F85FB6D47AC5E3C65465846497 /* MPNativeAdSource.m */, - 914CEE2F43A1361B7DAD97E5FD95F3E7 /* MPNativeAdSourceDelegate.h */, - 00C98CE31FD40A57423C565D61BB4C42 /* MPNativeAdSourceQueue.h */, - 44A7B9143871670562C3799075CC01F5 /* MPNativeAdSourceQueue.m */, - 99F6AB32342C7D87412854A10E00E442 /* MPNativeAdUtils.h */, - A365FD4F33BE6509CE0FDE67BF58B14B /* MPNativeAdUtils.m */, - 6B146BDA5C495B465729F7F2B9716556 /* MPNativeCache.h */, - F7F57684F4FE561221F3505432109DC6 /* MPNativeCache.m */, - 7E76457F75BC7612C1DF0E4CDAB92C16 /* MPNativeCustomEvent.h */, - D16902D9559C992CD359880D50F4B3A4 /* MPNativeCustomEvent.m */, - E16518061869F158F253B866F592CF05 /* MPNativeCustomEventDelegate.h */, - C7DD29215D6EFB608E8D0FA1CE6B7FA7 /* MPNativePositionResponseDeserializer.h */, - B496534AB8F391AA91AC7E798673D367 /* MPNativePositionResponseDeserializer.m */, - FAA7C0122C6A12142CACE8D01333BB7F /* MPNativePositionSource.h */, - E5E988BBBD96F48920F894E48756D1D8 /* MPNativePositionSource.m */, - 73131D60F9306E08E720B65F7B64517D /* MPNativeView.h */, - D93CA6FEF5B6F23D70904853C408261A /* MPNativeView.m */, - 4A085370B12F7CAA34F7884A96E37636 /* MPPrivateBannerCustomEventDelegate.h */, - AF025C5A57999D48096A139CC66BDAE8 /* MPPrivateInterstitialCustomEventDelegate.h */, - D809012A5D65DE2D2E3D98F21249E4FF /* MPPrivateRewardedVideoCustomEventDelegate.h */, - A109DF3081139CE8CBDF7B61AB6D1B03 /* MPProgressOverlayView.h */, - D986592CA4D5F3537C1A0F0B8701DC00 /* MPProgressOverlayView.m */, - 58313BCBB9BC191A852E180BA047146E /* MPReachability.h */, - 06F28ACAD7E7BD1489A366D45032FC0B /* MPReachability.m */, - 2720EFD72F44381AA50818531167F91C /* MPReachabilityManager.h */, - E6D23CCE3BD6B5D2DA0E4D60A5DFCF8D /* MPReachabilityManager.m */, - 61B30DEBC4A37ADCB609A36FD4466FDC /* MPRealTimeTimer.h */, - EDE629A956B73878D814285B18749C1C /* MPRealTimeTimer.m */, - 59D854CC11E7DC7D1B42E4E1B8D6A4A0 /* MPRewardedVideo.h */, - 6CBB03BB65A2171361808755D53D01AE /* MPRewardedVideo.m */, - E1F3E9521FF9B6F018088FE1D31E4B03 /* MPRewardedVideo+Internal.h */, - 38A81E78B978F40894F855A32BEBDB27 /* MPRewardedVideoAdapter.h */, - B3A7469A5B6EFD276528B5CF41DCFF64 /* MPRewardedVideoAdapter.m */, - 847189F08D89DF3C9E9519F038A0DA06 /* MPRewardedVideoAdManager.h */, - A2BD0639176EB88C4B27B7D8B02538E8 /* MPRewardedVideoAdManager.m */, - 93394A2CCDC05379C87BF2BA5652A6C4 /* MPRewardedVideoConnection.h */, - 682738E757DC07C82AC542F70D04CB05 /* MPRewardedVideoConnection.m */, - 140F1A237A03BF5B0D0A43D01C270139 /* MPRewardedVideoCustomEvent.h */, - 4C343D13D77918349EF073B4AC04B2D8 /* MPRewardedVideoCustomEvent.m */, - 04CAAE79F8E583E8701290D864BC94C7 /* MPRewardedVideoCustomEvent+Caching.h */, - 1F055A8AEE0C70B9109ADD89B8E2F978 /* MPRewardedVideoCustomEvent+Caching.m */, - DC0D6ADFFC4E9376050517360B97853C /* MPRewardedVideoError.h */, - 21F3A33787480241B32572807612E5AA /* MPRewardedVideoError.m */, - 0B61789D97354FBAB4799A9C17706A82 /* MPRewardedVideoReward.h */, - D4E2E57F02D333828355BB27CB5999D2 /* MPRewardedVideoReward.m */, - 5AFD09E2DA3916859DE6EDC68E95B910 /* MPServerAdPositioning.h */, - C5FD0283D4D3656EFCCEFDF6BEC1247A /* MPServerAdPositioning.m */, - 066428C1265FA58EBACB54C65F70DB04 /* MPSessionTracker.h */, - 6355A0B01E1688B504820C95EB129A71 /* MPSessionTracker.m */, - 933AEA94C7E4DEF2E4BA460FC5BC5247 /* MPStaticNativeAdRenderer.h */, - 74A77272B3F23FFFD47DEEFD29CCA0C4 /* MPStaticNativeAdRenderer.m */, - CC9A3BBC595418ED2B144220635A49D7 /* MPStaticNativeAdRendererSettings.h */, - FBA0A75D96BF25F4D634FD7A5686865E /* MPStaticNativeAdRendererSettings.m */, - 543C647CBCDFAF1EEB0D4A83DC7C6541 /* MPStoreKitProvider.h */, - B00D59BBBF8A757E6EED5A47E7AB1B56 /* MPStoreKitProvider.m */, - EFD0108DF2CA8176BFBC5754B8156FC4 /* MPStreamAdPlacementData.h */, - BAD109338E52785C26618DF1F0950BEA /* MPStreamAdPlacementData.m */, - 402AE196F4E8D739385C3E25D6334580 /* MPStreamAdPlacer.h */, - CFCCBD2200429AC5121B7CAB80A30483 /* MPStreamAdPlacer.m */, - 4756995F1B3A3BBF756F9CFCA8174E69 /* MPTableViewAdPlacer.h */, - DC1459032BCB5DD89601DED15F93B07D /* MPTableViewAdPlacer.m */, - 783AE5701397975CDEFCA1A906D27BC2 /* MPTableViewAdPlacerCell.h */, - B9CCABD037F16AC6F04E6185FAB42547 /* MPTableViewAdPlacerCell.m */, - 794673407B07F33C370E653971C7F8D4 /* MPTableViewCellImpressionTracker.h */, - 51D7B75A9AB40920FD6A6CC2623F0CBE /* MPTableViewCellImpressionTracker.m */, - F7604B70F2C26002AE4774F2BB331B0F /* MPTimer.h */, - 05300B60DE7C79DCC1EF3BF467752287 /* MPTimer.m */, - CA1432AC146FD6E74F9C450A54FF5692 /* MPURL.h */, - 5DA5AB9CF58E357F8318208442A322A7 /* MPURL.m */, - 846FE6B8942A40F56906064476AF673B /* MPURLActionInfo.h */, - A3768F1014BBC90B64E89A8663D640C6 /* MPURLActionInfo.m */, - 112AA901C10C457F114489C501850F98 /* MPURLRequest.h */, - E87C06C23517FB8F3FA160737E76F5EF /* MPURLRequest.m */, - 50014E2A3FFBD320D3BC5FB88A4E85A5 /* MPURLResolver.h */, - 3D50CE5E2C2E44DD12E38D08E423AF89 /* MPURLResolver.m */, - B70708AC9988EC7E4E95FA8CE0C82CBF /* MPUserInteractionGestureRecognizer.h */, - 6C3B58CA6A4BCF53AFD885B994AB2466 /* MPUserInteractionGestureRecognizer.m */, - E30A70D4C5F5F778472CCC2F0685D3FC /* MPVASTAd.h */, - D1486C78EBCFC6578F7A7D5ABDDE32DD /* MPVASTAd.m */, - 1C8A646D3E09B26646C27235807DEC09 /* MPVASTCompanionAd.h */, - 004991EBE1C5BAEB9342DE1C32667D18 /* MPVASTCompanionAd.m */, - FC23AB19F90B304323C19E6FA1DB548C /* MPVASTCreative.h */, - 66AF777E59370ABF37704D150EF681FB /* MPVASTCreative.m */, - 343357935FEAC6E4274F800A26F7DE2E /* MPVASTDurationOffset.h */, - 74ED3BEAA4E789373952FCA0857BA292 /* MPVASTDurationOffset.m */, - 7EE4A1149FA7A1DF1C75ACC937518B82 /* MPVASTIndustryIcon.h */, - ED1AEE17CAE75B62E8022EE2C9816384 /* MPVASTIndustryIcon.m */, - 01F82CA7EAEDB56F37870657E46EB70B /* MPVASTInline.h */, - 1B1EF203CC51009F542D3C31D8D3211F /* MPVASTInline.m */, - 513545EE94647C1D63BBCA115C5233A6 /* MPVASTLinearAd.h */, - BB0C48FDC24D1E89A89272F5490538DC /* MPVASTLinearAd.m */, - DADC9A09C4E2A86991367A4CDB048CDA /* MPVASTMacroProcessor.h */, - C0C0DC1AB0A419009B2207C4BF671B3B /* MPVASTMacroProcessor.m */, - EB1AF4ACB89A2DCEBA1292A739B3C75D /* MPVASTManager.h */, - BFFFC9C231B099FB35A274BF18921F5B /* MPVASTManager.m */, - E3D6949FF8E5178E896283520CC9ADB6 /* MPVASTMediaFile.h */, - 7CAA0263AB473E89C5A0F88D6F6A64C5 /* MPVASTMediaFile.m */, - EAABB1511906AA86FEB7ABC736F203C6 /* MPVASTModel.h */, - 6901D93648A46CB8DA8FD80AFC141617 /* MPVASTModel.m */, - 68ABBE6978A829A88D2FD2F9F27E73E1 /* MPVASTResource.h */, - DDE9BF49FB6F8C3830F19F8AD6936F39 /* MPVASTResource.m */, - 183009C1FB48F6D134E1FD34CFFEA971 /* MPVASTResponse.h */, - 67BA315210E40B93EEACEB7B0B058FC6 /* MPVASTResponse.m */, - BB2B2004F21AF6D90670C785AC555084 /* MPVASTStringUtilities.h */, - 87063590200EDA240FEB8E39B186C08B /* MPVASTStringUtilities.m */, - A395EBB5F6DF387A602BAD06758A17F2 /* MPVASTTracking.h */, - 84748373A6CDDC34BFE69CA0D8933EC1 /* MPVASTTracking.m */, - 83494C485B66D17930A1A1B97FF78C2C /* MPVASTTrackingEvent.h */, - FBE55A84F9AB32C1CA36FC437BE1DAC6 /* MPVASTTrackingEvent.m */, - 3BCA19265FC15F958CF95E2F8E2C99C0 /* MPVASTWrapper.h */, - 9522F2A7FAD0B2631DA9CBEC8F80D902 /* MPVASTWrapper.m */, - 43FD1AF64622E7BF07D04804E2C1E538 /* MPVideoConfig.h */, - 4AF06F21267D3E6362C2EF2F0C6748CC /* MPVideoConfig.m */, - 2FA902772F39E38C6BF80FC6F3793E5C /* MPViewabilityAdapter.h */, - D94D0894B453B199C1B41D0E0C476CA6 /* MPViewabilityOption.h */, - 5C19C8FBF570CB13BC5E14BE869340EE /* MPViewabilityTracker.h */, - 22B4751EF454827A3BE69330D0931112 /* MPViewabilityTracker.m */, - 505EC7EBE0E56C9DB19FBE2AAD1CF008 /* MPWebView.h */, - B67352CBE63150A994F2F2C0025BF2D6 /* MPWebView.m */, - B96809DB8BB31B53976A0958B754B0AA /* MPWebView+Viewability.h */, - 5E8DD426734513D42B3C5DBB786115FE /* MPWebView+Viewability.m */, - 78773C03BEB994293DD90515B21EACDC /* MPXMLParser.h */, - C6A700D84D0510754869DFB3593CD08F /* MPXMLParser.m */, - 5E26C9C74F15AFF32D69AA767F27E917 /* MRBridge.h */, - 554F4CE235F8732E0634E4F1ED2B0536 /* MRBridge.m */, - 1090064C185F36AC53092C1CE3F0281A /* MRBundleManager.h */, - E011A173FB75710FA7327C8C3CAA6BA7 /* MRBundleManager.m */, - D5DBB70A8E3EE44969F4F7DF9C7B0476 /* MRCommand.h */, - 062E14CFB6987F43AE00F9BE5E0D8489 /* MRCommand.m */, - 14FD9EDE564C657CB79CD398BB2B2944 /* MRConstants.h */, - 0C71474E43D96357AAB9A318BCC86E8A /* MRConstants.m */, - 223CCC5CBC5E5F25AD719B02C2AEB7B2 /* MRController.h */, - 03FDC86A31EA1E9CEA24AC01A7025070 /* MRController.m */, - AA448D1ACFE765C3292DC430237439C1 /* MRError.h */, - 092BECC23D335BF3F74CE30A85BBF3D1 /* MRError.m */, - 2B2A7EDBE5CCB3C2642F9F4782896808 /* MRExpandModalViewController.h */, - 02EEDBCF8BFB1E3ABED3ECFC6C641CEC /* MRExpandModalViewController.m */, - B655561C64B526ADFF65F6FDC7E993CD /* MRNativeCommandHandler.h */, - 6D4F4735034A493C4E3BCCBF7AFC0D97 /* MRNativeCommandHandler.m */, - 9027AAFCCEF76C0892DDC93A6D3F4C15 /* MRProperty.h */, - 970A167C3DC88DCA2F8BA1CB70C62225 /* MRProperty.m */, - 1B52F222BC81C51B3427962CC6F50D0E /* MRVideoPlayerManager.h */, - 9EB84CF40E6DBC928D0A207E34095A16 /* MRVideoPlayerManager.m */, - EE38A6937309F953788475C89C1DF493 /* NSBundle+MPAdditions.h */, - E248ABD4E7E6D6D39819253C76AAC8CD /* NSBundle+MPAdditions.m */, - 61080907C1E63C9751878CF0A8AC84D2 /* NSDate+MPAdditions.h */, - 1BB6547EDACFFAD56F7879CA5A0BDD98 /* NSDate+MPAdditions.m */, - 475EE79C53F7B91803098999B87C3FCD /* NSDictionary+MPAdditions.h */, - 7B256972AE899B6CEDE8067C8112FD41 /* NSDictionary+MPAdditions.m */, - 44C7B20AC5ACCA5B62127A0B9291657E /* NSError+MPAdditions.h */, - 81DF74E143B47C067A78725571FC4CAA /* NSError+MPAdditions.m */, - 35421D6B15CB07433EBA7B5136D9534B /* NSHTTPURLResponse+MPAdditions.h */, - 82936453879A953B5A6C87A83F6845F9 /* NSHTTPURLResponse+MPAdditions.m */, - 2C9DBD11EF54623AA1552F11641DADF8 /* NSJSONSerialization+MPAdditions.h */, - 6A4833879691DCCC4883AACCA87351B8 /* NSJSONSerialization+MPAdditions.m */, - CF43E5A781200F60D26BBD9042B02DE4 /* NSMutableArray+MPAdditions.h */, - F07CAFDBEABF657E4554CCAFECB266D0 /* NSMutableArray+MPAdditions.m */, - FBADFA21D6CF4FDF92F510EAF0FF4319 /* NSString+MPAdditions.h */, - C76825C5F64783A60863BAFC9FFEF6ED /* NSString+MPAdditions.m */, - DA08C790EC506E6891F6202527714A28 /* NSString+MPConsentStatus.h */, - 925F64CBB5132F8893261CF723C98AC3 /* NSString+MPConsentStatus.m */, - 97DC531AACD03871278DEC02FE8FA967 /* NSURL+MPAdditions.h */, - F1A06B0D0F45170A803A078BD4730C5C /* NSURL+MPAdditions.m */, - FCD43EB0D49AD4E105A090EE5AB0F261 /* UIButton+MPAdditions.h */, - 27450C1F837E94076EBE0E340A1858A3 /* UIButton+MPAdditions.m */, - D37D1C8C8C390E715A512EE98F4561EF /* UIColor+MPAdditions.h */, - 935D1D629139E22E52AE88EAF3E711A7 /* UIColor+MPAdditions.m */, - 5B16186616192AA09429941B6EBF67E8 /* UIView+MPAdditions.h */, - B8A47C7B1DFBD8EB571A30F1D7DC2E88 /* UIView+MPAdditions.m */, - C2C9B322A6F892DD8F351E301E802058 /* UIWebView+MPAdditions.h */, - 518AFD8BC393FAC9F43A59FA036016B7 /* UIWebView+MPAdditions.m */, - 1EB9BFBD1C124C8E31F69286A41D9F34 /* Resources */, - ); - name = Core; - sourceTree = ""; - }; - DA0F565414E1DE9CBFE89699EE501112 /* Google-Mobile-Ads-SDK */ = { - isa = PBXGroup; - children = ( - 47EB2D6B12BC94EE8DF96C1B84930D44 /* Frameworks */, - ); - name = "Google-Mobile-Ads-SDK"; - path = "Google-Mobile-Ads-SDK"; - sourceTree = ""; - }; - EB57DDB3388FBC701046A1E93218737F /* Frameworks */ = { - isa = PBXGroup; - children = ( - 0196862B3D2F33BB34FE9425E565FC1E /* iOS */, - ); - name = Frameworks; - sourceTree = ""; - }; - EC5939FBD4F2AE86F37B0C11641FA6DF /* Pods-PrebidMobileDemo */ = { - isa = PBXGroup; - children = ( - D6B9309AF4B666ADBA1D90D7FE936E59 /* Pods-PrebidMobileDemo-acknowledgements.markdown */, - 32D2CCB7AEF3571A6AF5971EA87241C0 /* Pods-PrebidMobileDemo-acknowledgements.plist */, - E8EC67306067AA573EF033FD77A4804E /* Pods-PrebidMobileDemo-dummy.m */, - 649390A61583C34071E59F370075D9D3 /* Pods-PrebidMobileDemo-frameworks.sh */, - CEB3EA6C71061EDD532059D27ADF715A /* Pods-PrebidMobileDemo-resources.sh */, - 0DBE326B33C8DBF354443CDE78482D26 /* Pods-PrebidMobileDemo.debug.xcconfig */, - DFE2DD01A4E3426FCAFAD1862CF38CEB /* Pods-PrebidMobileDemo.release.xcconfig */, - ); - name = "Pods-PrebidMobileDemo"; - path = "Target Support Files/Pods-PrebidMobileDemo"; - sourceTree = ""; - }; - FB0B3A4E4072076C4EDDE67F5076FB86 /* Support Files */ = { - isa = PBXGroup; - children = ( - 79C22829A56CCDBBE45775E7531A1C96 /* mopub-ios-sdk.xcconfig */, - A0BBCA2D281944E27735364ADA515AA1 /* mopub-ios-sdk-dummy.m */, - A0D519E9555E427A18B5E60B7728CD50 /* mopub-ios-sdk-prefix.pch */, - ); - name = "Support Files"; - path = "../Target Support Files/mopub-ios-sdk"; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 383C682EB1D47060FF8958A86F067586 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 4274191F2BB2B5F5F66DC478AB3FF3AD /* MoPub-Bridging-Header.h in Headers */, - 483BCCD9F398000E345EEE16CC3BEFA9 /* MoPub.h in Headers */, - EC5B8F36CFE1D28F5E9E635C0529D791 /* MoPub_AbstractAvidAdSession.h in Headers */, - 93B67945D4CDA0DDCB6CBA77AC10A3AC /* MoPub_AbstractAvidManagedAdSession.h in Headers */, - BB50C53C0B0E9006C2082BF603906A1D /* MoPub_Avid.h in Headers */, - B9E25F21246E0810B20FCF036902F09B /* MoPub_AvidAdSessionManager.h in Headers */, - 421352ADA312623237389AA8942D4AA7 /* MoPub_AvidDeferredAdSessionListener.h in Headers */, - 2440EFA82FECDA67AAC6AB63732951D1 /* MoPub_AvidDisplayAdSession.h in Headers */, - 53BBC71D800E8692CE4D53A3426AB951 /* MoPub_AvidManagedDisplayAdSession.h in Headers */, - 4326BB56EC90C81D8D0BC025DAD54300 /* MoPub_AvidManagedVideoAdSession.h in Headers */, - 62E55A81DCEEC7087C0FC0D582B21CDE /* MoPub_AvidVideoAdSession.h in Headers */, - 83A76A4E00E0F35BECDEAE14081224ED /* MoPub_AvidVideoPlaybackListener.h in Headers */, - A5947D45D84CCA55D79C5B81E18F9188 /* MoPub_ExternalAvidAdSessionContext.h in Headers */, - 3718A4540AC5320B9D28B1FD383EFCC2 /* MOPUBActivityIndicatorView.h in Headers */, - ED92D3AD275DFEB4D2F27D0BA5D32C99 /* MOPUBAVPlayer.h in Headers */, - 65ADD15093F45490060CEA30E69D08EA /* MOPUBAVPlayerView.h in Headers */, - ECA57967B4238D31CCE48E05B4D91EE1 /* MOPUBDisplayAgentType.h in Headers */, - 9D6B392280D57064B4DD1B122F9D89DD /* MOPUBExperimentProvider.h in Headers */, - D2AEFDAA1CE63EB0CB185F6F1F820873 /* MOPUBFullscreenPlayerViewController.h in Headers */, - E68CBCD4940185766C3FA5AFA4DFAF63 /* MOPUBNativeVideoAdAdapter.h in Headers */, - 3829153B7B4E3473771F9B9285249B89 /* MOPUBNativeVideoAdConfigValues.h in Headers */, - 19A83039B218B7CEC95306A722C43843 /* MOPUBNativeVideoAdRenderer.h in Headers */, - 24EF18B38F40181E0CE532D8709498F3 /* MOPUBNativeVideoAdRendererSettings.h in Headers */, - D880480BB7FA234A93C7BE2CE4FFD69D /* MOPUBNativeVideoCustomEvent.h in Headers */, - B2177BF5C7A73EE2658CA321C2F8D384 /* MOPUBNativeVideoImpressionAgent.h in Headers */, - D1D636B0044D9B141CE82E62F7FA30A1 /* MOPUBPlayerManager.h in Headers */, - F0FFC5F868B7B70CCA7E32AE6418DACB /* MOPUBPlayerView.h in Headers */, - C0129BF1F28166E0B442C808E9FCB747 /* MOPUBPlayerViewController.h in Headers */, - C615F5121A60A9F4E1A9AA4C03DFB3BB /* MOPUBReplayView.h in Headers */, - D174127F6F59AF5A3F9F7FF0A14DF1C0 /* MPActivityViewControllerHelper+TweetShare.h in Headers */, - A153CF016B5B34C43E47841DF433B3CE /* MPActivityViewControllerHelper.h in Headers */, - 245DB158204A0F3E9DFAA385C2E874DC /* MPAdAlertGestureRecognizer.h in Headers */, - 76AEE63A9C43EF91C21678663A4510B2 /* MPAdAlertManager.h in Headers */, - D85E9D4F530DC422051580CAD3108EAE /* MPAdBrowserController.h in Headers */, - 367F95236A6C7935B947480DE220E2E2 /* MPAdConfiguration.h in Headers */, - 3A46DC1788EBF18B0F768A6819A39BC9 /* MPAdConversionTracker.h in Headers */, - B3C9C4786B8EF2F96C6A38DD15F6D35C /* MPAdDestinationDisplayAgent.h in Headers */, - A459F3ECF573263F66749C83D4DB2A98 /* MPAdImpressionTimer.h in Headers */, - 8A7C4DFE1242FEC3B17B7E0098EBB806 /* MPAdPlacerInvocation.h in Headers */, - 0001103EAE765FD5E709587C81330A29 /* MPAdPositioning.h in Headers */, - A0964D347B5BC922CF4B6A6EACD5E0D9 /* MPAdServerCommunicator.h in Headers */, - 6696E7ADA7B808FDEE5F0EF1AB324CE2 /* MPAdServerKeys.h in Headers */, - 5DA59A0AC71384DC320D3632920AB75C /* MPAdServerURLBuilder.h in Headers */, - 846BD8D2F719E1631AA4A95778E2F4E0 /* MPAdTargeting.h in Headers */, - A7D43E12A7169B166C2D2DD7E1761C9C /* MPAdvancedBidder.h in Headers */, - 9718CFEFF27DADD86E75E95676A1A3A2 /* MPAdvancedBiddingManager.h in Headers */, - FE674C9A5E00A69BF714AF8C07B84260 /* MPAdView.h in Headers */, - 0A178A4AC05BEC289A155B4FEBB6C5FD /* MPAdWebViewAgent.h in Headers */, - 9A5E95E1273C0079F7B351590BC0EFCE /* MPAnalyticsTracker.h in Headers */, - 1ACDFEAB2154ECF64621AA45C50F49AB /* MPAPIEndpoints.h in Headers */, - B21E9AB7F64871F29E2D2EC79F4FF60A /* MPBannerAdManager.h in Headers */, - 6A49BA338F36B0E6571829FABB8972C9 /* MPBannerAdManagerDelegate.h in Headers */, - 8576CD5A870CB06C24A42DF30A6D93BC /* MPBannerCustomEvent+Internal.h in Headers */, - CDA91A222E23AF05939E97569C59CA8D /* MPBannerCustomEvent.h in Headers */, - 91A7BBD622CE352A0B4F218F3DDDC4B7 /* MPBannerCustomEventAdapter.h in Headers */, - 67544B447B196C75B658CE1A05EFDE62 /* MPBannerCustomEventDelegate.h in Headers */, - A8FFF96AA5560DC5F76917E709D82BE8 /* MPBaseBannerAdapter.h in Headers */, - 54F17F2EEEA575094AB4741E3B2824A7 /* MPBaseInterstitialAdapter.h in Headers */, - 6D1C30E66BAE116664BCB9DA95608616 /* MPBool.h in Headers */, - 16B30443602196FD482DD8304FB95D7B /* MPClientAdPositioning.h in Headers */, - 6AD42E228BD38B6FC610109119169D4D /* MPClosableView.h in Headers */, - 6B9A9DADD356290E1D038DC197559850 /* MPCollectionViewAdPlacer.h in Headers */, - AC39CBE6A6D331E54D96B05F60669549 /* MPCollectionViewAdPlacerCell.h in Headers */, - B6BEFD9A892AE6316DF6E73FBAF01B74 /* MPConsentChangedNotification.h in Headers */, - 6E52A52816E781DEA0486D68E5A64A20 /* MPConsentChangedReason.h in Headers */, - 19A5A0982B6BA6AA4BEABBDA2A183885 /* MPConsentDialogViewController.h in Headers */, - E46B6B58BAA202DFFEAB3DD790D56C59 /* MPConsentError.h in Headers */, - 74100C066D44437846A90032C7D73AAC /* MPConsentManager.h in Headers */, - C7100B0753AB42A8A40BFC9D930EADDB /* MPConsentStatus.h in Headers */, - 40C14148438FA648C5C2D14E368AF879 /* MPConstants.h in Headers */, - 2EFEFDA571301A504CDD364C45DB4963 /* MPCoreInstanceProvider+MRAID.h in Headers */, - F22FACC9DD08FC36E615438F4CE82609 /* MPCoreInstanceProvider.h in Headers */, - 25A256602614778B7BD99DFBEAD48429 /* MPCountdownTimerView.h in Headers */, - DA2F9BB49930E86D432A5CB8A22CB8EC /* MPDiskLRUCache.h in Headers */, - A45BB55921F94841BEEE8088592AA5C3 /* MPEnhancedDeeplinkRequest.h in Headers */, - 1964180B530F0B90F7CFC6B7AFEBE80A /* MPError.h in Headers */, - 778381C35243C06EAB9005B822B37F48 /* MPForceableOrientationProtocol.h in Headers */, - C433A48286B5F0CDDA568F05E9B88EE6 /* MPGeolocationProvider.h in Headers */, - 0C2FAC2E98A37038043473FBB6D68B6E /* MPGlobal.h in Headers */, - 2FB64E1A237A51CCE7C21D0F4AE2EAFE /* MPHTMLBannerCustomEvent.h in Headers */, - 01619D97278E976951F0DAE4D6AE1012 /* MPHTMLInterstitialCustomEvent.h in Headers */, - 76B5DDDEC4F25B158396C06A6E51F557 /* MPHTMLInterstitialViewController.h in Headers */, - 5AF0AB85E3A7106E05A7659A02A8C8F3 /* MPHTTPNetworkSession.h in Headers */, - 026478637B0A56A106C23411001A53FE /* MPHTTPNetworkTaskData.h in Headers */, - 4181367F0CB2F2CA1890F8991392E1E3 /* MPIdentityProvider.h in Headers */, - F5DFBA3871CB26B1A595AAC28D130FF4 /* MPImageDownloadQueue.h in Headers */, - C17E1DFE67C2A483C0ED3E3A8C592BBD /* MPInternalUtils.h in Headers */, - 3764D0A897FE864A9799E9108E3FAAFD /* MPInterstitialAdController.h in Headers */, - 7B5365211225531AC01D228F87B6DAD0 /* MPInterstitialAdManager.h in Headers */, - 4AFDE250EA32415D7B1801B78231A4B9 /* MPInterstitialAdManagerDelegate.h in Headers */, - 6E51DBE69649436E44607BDC9D97C327 /* MPInterstitialCustomEvent.h in Headers */, - A6967A4B96D356950F883681B038520B /* MPInterstitialCustomEventAdapter.h in Headers */, - F6E6BEC8D09C40676896154F557E2DF1 /* MPInterstitialCustomEventDelegate.h in Headers */, - 10C58206897CBD24F389D4CC445E91A2 /* MPInterstitialViewController.h in Headers */, - 254CC8224C401030FAA2F5018FF23FC8 /* MPLastResortDelegate.h in Headers */, - 7EDB282B655C1E76E7F8CFA67657FDDA /* MPLogging.h in Headers */, - 0C61B213AC14037C8B9D744600508508 /* MPLogLevel.h in Headers */, - 7F32C1CF2395A8D82D2B2387851EDFB5 /* MPLogProvider.h in Headers */, - 5030884A4A2EC260173D580B12CA50C9 /* MPMediationManager.h in Headers */, - 31600E97AF319EC95761518A0FCD2B99 /* MPMediationSdkInitializable.h in Headers */, - 8BABF2A9B68993ED8968B18ACB30197C /* MPMediationSettingsProtocol.h in Headers */, - D4BFD00F1C9A9E1EB3DA4E297694977D /* MPMemoryCache.h in Headers */, - 19488443BECD8D29AC4CE872C5C17A21 /* MPMoPubConfiguration.h in Headers */, - D7FBFAC0BBA0D0CE9C6A668950130CA6 /* MPMoPubNativeAdAdapter.h in Headers */, - DE11F70C78713ABA7176C788AF3D1E21 /* MPMoPubNativeCustomEvent.h in Headers */, - 818015D85B62018092324C109CC80474 /* MPMoPubRewardedPlayableCustomEvent.h in Headers */, - 2E0C7402A09458DF80CA735854D62D19 /* MPMoPubRewardedVideoCustomEvent.h in Headers */, - 5D8E6FF91B6DE7F61C324FFB04EB69DF /* MPMRAIDBannerCustomEvent.h in Headers */, - 1D0FF864A9669794FE8BCD808B5C42A4 /* MPMRAIDInterstitialCustomEvent.h in Headers */, - 1230BF086D5FFD39CF0E968B3374FF0C /* MPMRAIDInterstitialViewController.h in Headers */, - 58F6684FD3C062F6CD6C98D8ECFA60E7 /* MPNativeAd+Internal.h in Headers */, - FBDAB891D32BE0B1C79E5480D2A5D6CB /* MPNativeAd.h in Headers */, - 06BC7766CF658F6B0D91F69EDF7062A9 /* MPNativeAdAdapter.h in Headers */, - 40E3684E698C5EE6AE940F4610437E9C /* MPNativeAdConfigValues+Internal.h in Headers */, - 51164C3CDE864A39A47507CB1F859738 /* MPNativeAdConfigValues.h in Headers */, - 686681A5C532044F40BE218624787DD6 /* MPNativeAdConstants.h in Headers */, - E53FE6F384818635F9122EDE163EF116 /* MPNativeAdData.h in Headers */, - 415E6EEFFA75A8425E979ED23D19E807 /* MPNativeAdDelegate.h in Headers */, - 35E079D7E7EE1F6EE7AFBA365D023BC8 /* MPNativeAdError.h in Headers */, - EAC4122B5825875FF11DAEF1E5B7BD86 /* MPNativeAdRenderer.h in Headers */, - BBA2AF9CFFBB3DCE44540EDB30CF502B /* MPNativeAdRendererConfiguration.h in Headers */, - DD6270A19FDA6C89190DA8E003EC8FA5 /* MPNativeAdRendererConstants.h in Headers */, - 1B517202F17E6AE2AB49644E4716DFA0 /* MPNativeAdRendererImageHandler.h in Headers */, - EA758FFA3449EEACDA2407CB68A64440 /* MPNativeAdRendererSettings.h in Headers */, - C41E114B8943BD49992070AC6F160A76 /* MPNativeAdRendering.h in Headers */, - B23D485FBC5E6A6BFED9BB95AA718D04 /* MPNativeAdRenderingImageLoader.h in Headers */, - B6010777D94A9DCE523AFBCB0A69C2EB /* MPNativeAdRequest+MPNativeAdSource.h in Headers */, - 8535B4E5FEAA1952B72A3B11F770AC58 /* MPNativeAdRequest.h in Headers */, - E625A6129F8206A383704832B7715B66 /* MPNativeAdRequestTargeting.h in Headers */, - A6E419E767B935348FA6C7D308D725C3 /* MPNativeAdSource.h in Headers */, - 841193D25B58FB469F86FBF87B3329E2 /* MPNativeAdSourceDelegate.h in Headers */, - 7A8C4E1BABF0459F2B30506370606F90 /* MPNativeAdSourceQueue.h in Headers */, - 6B071A607D2A98A3BCFCD02486980DB8 /* MPNativeAdUtils.h in Headers */, - 482297CF9E5553AD13C0C3BEBA6722D6 /* MPNativeCache.h in Headers */, - 1E969A00177FA32F43916E644C357102 /* MPNativeCustomEvent.h in Headers */, - 8FD8EC5C063E4A4FDDBF82B44DFC0122 /* MPNativeCustomEventDelegate.h in Headers */, - D6AA985AA1118C7AB6ABFCCF532E1EE6 /* MPNativePositionResponseDeserializer.h in Headers */, - D1AC9F164F8228B3835D5ED0A06D2AEE /* MPNativePositionSource.h in Headers */, - C15768986544AFBF41EB370C7B5DF9AD /* MPNativeView.h in Headers */, - 16297C15FCF8D48A4B21CD2CB1D0BF2D /* MPPrivateBannerCustomEventDelegate.h in Headers */, - F53AE73980747FAA4EB2135DA24C3CA6 /* MPPrivateInterstitialCustomEventDelegate.h in Headers */, - E6629EC6BBAED954262E864D456CCDB2 /* MPPrivateRewardedVideoCustomEventDelegate.h in Headers */, - EE25689289AE0256DB473D1B628B66B5 /* MPProgressOverlayView.h in Headers */, - EA84C91037DC197237312E5993B60FE9 /* MPReachability.h in Headers */, - C4A7EC1A0238363EEC89B854EDFD3C43 /* MPReachabilityManager.h in Headers */, - CC460EB39240C58FE4419CD65C5830B1 /* MPRealTimeTimer.h in Headers */, - 5E22A17EF5B119ACCFC0B95077C36152 /* MPRewardedVideo+Internal.h in Headers */, - 601D4980DADE035AAE08C543ABABACB9 /* MPRewardedVideo.h in Headers */, - 337F437390C796F603CA5BA0D085A937 /* MPRewardedVideoAdapter.h in Headers */, - 35F800A2761286F4DF79682D27637C27 /* MPRewardedVideoAdManager.h in Headers */, - 36A75DAD9BD599FBF80FB7DD47F1C0CE /* MPRewardedVideoConnection.h in Headers */, - E425F2417F20A984BE8855E75E363436 /* MPRewardedVideoCustomEvent+Caching.h in Headers */, - 4CD6D9F6FA48C97AEFC56B9130A359B9 /* MPRewardedVideoCustomEvent.h in Headers */, - E9C1990D0F0745F9605F95D0F8F49501 /* MPRewardedVideoError.h in Headers */, - 757E17AE4E81A745E6F34B4F3F556921 /* MPRewardedVideoReward.h in Headers */, - C50B3509DB3A30C64F649EE85DE45089 /* MPServerAdPositioning.h in Headers */, - AE48270E55EEEA25FC905D54F1451750 /* MPSessionTracker.h in Headers */, - E1F706C213BB59C9A9B5D122758C2726 /* MPStaticNativeAdRenderer.h in Headers */, - 7E435E31CE34D2DD08C78F473BB28BB2 /* MPStaticNativeAdRendererSettings.h in Headers */, - 994650142AA42A7E5A1D157E273BF554 /* MPStoreKitProvider.h in Headers */, - 4FCA94F7C67DE89C83169E9E0F61B380 /* MPStreamAdPlacementData.h in Headers */, - D21E18ADBB6C4FFC8C8FB524269EED40 /* MPStreamAdPlacer.h in Headers */, - D2779EAD11974B072A8511D6D7AAAC02 /* MPTableViewAdPlacer.h in Headers */, - 8736DFBFD30732B4C3C38E7F60EE8156 /* MPTableViewAdPlacerCell.h in Headers */, - B383F50B697474B6536BCD530A2C1667 /* MPTableViewCellImpressionTracker.h in Headers */, - 60067305E8550B4AC25E81C19E7DDFA3 /* MPTimer.h in Headers */, - C5864C4C87289D693F2E8F94C943C25B /* MPURL.h in Headers */, - 9CFEC4E135B667AB624518568734D09B /* MPURLActionInfo.h in Headers */, - A641C9C745D8BB618D1C050683B7E300 /* MPURLRequest.h in Headers */, - 6B9DE811A2F73B08CC966A43821AD005 /* MPURLResolver.h in Headers */, - E01DFE6B429CC61C17C1DA2C34CC4F9C /* MPUserInteractionGestureRecognizer.h in Headers */, - E6D7660EF9164C6ADF2E6D5875E28ACA /* MPVASTAd.h in Headers */, - 78810BA0161B683BF3CA153384F55157 /* MPVASTCompanionAd.h in Headers */, - 048F44A454A3B04B270CF9E681478C4F /* MPVASTCreative.h in Headers */, - D3BC758AF73D13542D5BA251D3933468 /* MPVASTDurationOffset.h in Headers */, - C7747394DDA8975E6A9F36E1E9EB951B /* MPVASTIndustryIcon.h in Headers */, - 460D0C63DF194767E57E00D22B804A21 /* MPVASTInline.h in Headers */, - 6BDE9F9AB0AB66735F52A5C6C758D3F6 /* MPVASTLinearAd.h in Headers */, - 50BA1D3EC24FF1F18FB4B84BF2128456 /* MPVASTMacroProcessor.h in Headers */, - 50D5384F39D3CA071A5CC1A7C9E5E65C /* MPVASTManager.h in Headers */, - 9E12BBEA983DF15E1EB643682AF1B3F2 /* MPVASTMediaFile.h in Headers */, - 2154EEBAD8379B1564967CDBB06D20C5 /* MPVASTModel.h in Headers */, - 338B16AD753154D15666799D96CF55A6 /* MPVASTResource.h in Headers */, - E8223A1F032832D2695079D38672787F /* MPVASTResponse.h in Headers */, - 41964CB18EBEBAF59A00666EEACE39E8 /* MPVASTStringUtilities.h in Headers */, - 774F0BDDFECA667BB08773F076C81382 /* MPVASTTracking.h in Headers */, - 96745E2DBF728EC88AC5B174961C36F8 /* MPVASTTrackingEvent.h in Headers */, - E393ADA6255C4BCBBDDBED6065A1E1A7 /* MPVASTWrapper.h in Headers */, - E5CE183AA8322C3FD98A48187B31BCFB /* MPVideoConfig.h in Headers */, - 72D9A8461F26908409E8649E6D468A4F /* MPViewabilityAdapter.h in Headers */, - 5791BC2328ED77FC95E0468BBCA6D8D3 /* MPViewabilityAdapterAvid.h in Headers */, - 72A1F43AFE4BACD3039DAFD26C25E771 /* MPViewabilityAdapterMoat.h in Headers */, - B213AC93C97BE1F76E7B400C58A5D04B /* MPViewabilityOption.h in Headers */, - 8FA661C2102AFA1D69C936E39BA3FDD9 /* MPViewabilityTracker.h in Headers */, - 252BC7C44F66EFA3DF7629BECDCA3B65 /* MPWebView+Viewability.h in Headers */, - 251965FFD7889741FE277F80C7A99293 /* MPWebView.h in Headers */, - 1F9AD166F0461810615076A4C78BD805 /* MPXMLParser.h in Headers */, - 5262535F9C076AC71CFF49EB50FAFC84 /* MRBridge.h in Headers */, - 3ED04A91D5C7D6FA2B9AB331E0F97344 /* MRBundleManager.h in Headers */, - 6E54657454D40B7C8DBB2E4DB87D16DF /* MRCommand.h in Headers */, - E09E380E03D5037A3A4E6E7A1D0FB00D /* MRConstants.h in Headers */, - 87A8B6960744BD51CF064B5F1E9E82E6 /* MRController.h in Headers */, - E7BA7A295327624720972B1F030A9ED3 /* MRError.h in Headers */, - 8E3ECC8DDA894775E84A86CAC1EADF65 /* MRExpandModalViewController.h in Headers */, - 2B23F1C1FDB2B9C26838A28D8560C1F3 /* MRNativeCommandHandler.h in Headers */, - 794AF7790C86BA1ED82118ADEDF66961 /* MRProperty.h in Headers */, - 04B19DEA4D29AC15BDC220A7FC3BE019 /* MRVideoPlayerManager.h in Headers */, - A14D6AB6B37E8D2FD79A96ADD6080F06 /* NSBundle+MPAdditions.h in Headers */, - 06C531D8730BB7810BE8A266A8F2A2B7 /* NSDate+MPAdditions.h in Headers */, - ED5F0317461E9F725AB9F3C2BA82453B /* NSDictionary+MPAdditions.h in Headers */, - 66E3370D730AD3BCBE0CDF15C2BB0E4B /* NSError+MPAdditions.h in Headers */, - 409F24EAD2B073E1BAD9AAF77622B3A2 /* NSHTTPURLResponse+MPAdditions.h in Headers */, - F84D687B45A37F4D500631AF95B0FFDE /* NSJSONSerialization+MPAdditions.h in Headers */, - 0600AAE7847F95372A974E6B129FFB9F /* NSMutableArray+MPAdditions.h in Headers */, - 32AF38A3D3CC651E49AAEBA5B97CEBDF /* NSString+MPAdditions.h in Headers */, - 8676477F22818AF98D1ACBF81744E54A /* NSString+MPConsentStatus.h in Headers */, - 081932AFAE31BC7C22424303B4A7C5EC /* NSURL+MPAdditions.h in Headers */, - 8390282C4EC14637F1F5003A57962466 /* UIButton+MPAdditions.h in Headers */, - 4EAFAC21A02BF3E6CC1B7935976C2485 /* UIColor+MPAdditions.h in Headers */, - 36ED820965504179F7A7C721B091302A /* UIView+MPAdditions.h in Headers */, - 12DA71595903FE38658575A2B7F3F08D /* UIWebView+MPAdditions.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 20B16B6AE1879253D8E116DA8D1A2E8F /* mopub-ios-sdk */ = { - isa = PBXNativeTarget; - buildConfigurationList = CB98B3280CBD35D868E017C9A2887971 /* Build configuration list for PBXNativeTarget "mopub-ios-sdk" */; - buildPhases = ( - CAC543320207C33EA0F9A8E28449814A /* Sources */, - E82FB5DD775A63302DCCD0D7B7C7158F /* Frameworks */, - 383C682EB1D47060FF8958A86F067586 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "mopub-ios-sdk"; - productName = "mopub-ios-sdk"; - productReference = 2EBF74BBD4D0643E11CD802CEA2D8737 /* libmopub-ios-sdk.a */; - productType = "com.apple.product-type.library.static"; - }; - F989F1203B79153056C6DAD8E55E74EB /* Pods-PrebidMobileDemo */ = { - isa = PBXNativeTarget; - buildConfigurationList = E35CC3CB8AE13AB9EB5BF1AD09C71F2F /* Build configuration list for PBXNativeTarget "Pods-PrebidMobileDemo" */; - buildPhases = ( - 72FB4143E6937106254B671FC80FF03F /* Sources */, - 41831932CFB5A346E9274D0608858BE9 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 70362E0C0B95E14529999C3AC94D2BD3 /* PBXTargetDependency */, - ); - name = "Pods-PrebidMobileDemo"; - productName = "Pods-PrebidMobileDemo"; - productReference = 7A43535A18382DD2714FFE28782259D0 /* libPods-PrebidMobileDemo.a */; - productType = "com.apple.product-type.library.static"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 0930; - LastUpgradeCheck = 0930; - }; - buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = 526DC260EDC4EA2F92D54EF018C908E1 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 20B16B6AE1879253D8E116DA8D1A2E8F /* mopub-ios-sdk */, - F989F1203B79153056C6DAD8E55E74EB /* Pods-PrebidMobileDemo */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXSourcesBuildPhase section */ - 72FB4143E6937106254B671FC80FF03F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 3A20059A6BCA5A709777A4476A7E6F40 /* Pods-PrebidMobileDemo-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CAC543320207C33EA0F9A8E28449814A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 18E5D20D6DC62B659EEF025D131583E8 /* mopub-ios-sdk-dummy.m in Sources */, - A00FC2009F2ADAB8F33079A82332145C /* MoPub.m in Sources */, - 0B09144F888207E933B53575C8C6A45A /* MOPUBActivityIndicatorView.m in Sources */, - 62E7B4E22D61C2E08F2F7CB536B4338A /* MOPUBAVPlayer.m in Sources */, - D667CC2A3D786C778BA0548A6F804464 /* MOPUBAVPlayerView.m in Sources */, - 74C1D5B841A3DDF7865B57D2AB13061B /* MOPUBExperimentProvider.m in Sources */, - 7AE6BB63E1185090EB4FBF3DDAFDEE44 /* MOPUBFullscreenPlayerViewController.m in Sources */, - E2E422B879ADAFFA772E6325D67EC1C4 /* MOPUBNativeVideoAdAdapter.m in Sources */, - 1F7FC4A940284D3E3C12D8233EF7465A /* MOPUBNativeVideoAdConfigValues.m in Sources */, - 68ED4B9B3660DD0AB17753B330B84832 /* MOPUBNativeVideoAdRenderer.m in Sources */, - E884FD9234491C197203A51CC9F18CD3 /* MOPUBNativeVideoAdRendererSettings.m in Sources */, - 073F2B60EA485A2669B79F23BF6EC57D /* MOPUBNativeVideoCustomEvent.m in Sources */, - 2B8640FD39AA159CA615B7BD751E8423 /* MOPUBNativeVideoImpressionAgent.m in Sources */, - BD03858E32E2AF73EFC0FD8E9D7F2E99 /* MOPUBPlayerManager.m in Sources */, - 7B56DD6FBDFEF66A804F65FB5DBEEFBF /* MOPUBPlayerView.m in Sources */, - 7407578F2D72F03FB859610FBF7BD442 /* MOPUBPlayerViewController.m in Sources */, - 07B3E477BD2B05C17B9F6FF586039A73 /* MOPUBReplayView.m in Sources */, - 39F9E9103C38DB65544745AED40E5954 /* MPActivityViewControllerHelper+TweetShare.m in Sources */, - B556A8196B8CF5300C0A54B56E2A0422 /* MPActivityViewControllerHelper.m in Sources */, - 25B1E562686BED290D88B3C80DDCC717 /* MPAdAlertGestureRecognizer.m in Sources */, - FDC6BF90EEECD74BCC8F5DA089D2D1BC /* MPAdAlertManager.m in Sources */, - 4AE79E32047F9E9C19A659902B8ED10E /* MPAdBrowserController.m in Sources */, - 89483F16A5BDE5FC6666B32B6F03E873 /* MPAdConfiguration.m in Sources */, - 1519EFD8A60984F50AFF0AA779CFE496 /* MPAdConversionTracker.m in Sources */, - E95E3DAD53615756037E6B2C2D71E5A1 /* MPAdDestinationDisplayAgent.m in Sources */, - 536E9DE1B7C98536809069DBB629554B /* MPAdImpressionTimer.m in Sources */, - 73F828421DF7CCA6DFE9D88A4B72B729 /* MPAdPlacerInvocation.m in Sources */, - 49E5B8FF40E3E16412B0CEEC6291174B /* MPAdPositioning.m in Sources */, - 7BB5ECBAEF8A0598258093A83C3945C2 /* MPAdServerCommunicator.m in Sources */, - 0F29A46DEB3787967F746D848E12B644 /* MPAdServerKeys.m in Sources */, - 204AA44C8D64A028074FD1BBB932E58B /* MPAdServerURLBuilder.m in Sources */, - 6AC8F120A9041D5553DA3619BB6AD300 /* MPAdTargeting.m in Sources */, - FE332E5FBA095781EB879530A0478E9C /* MPAdvancedBiddingManager.m in Sources */, - FEAC880B8D446C8B31559836E2E32883 /* MPAdView.m in Sources */, - 0CCB49E919FB0E541CF1E539D2E4D7E8 /* MPAdWebViewAgent.m in Sources */, - F0642C2EFAB9F326A766EB103DCF5020 /* MPAnalyticsTracker.m in Sources */, - 7387C2CA13F2B4DE906394A172EC2E2A /* MPAPIEndpoints.m in Sources */, - 647D3F7B17A17DD9E6FF944068340CF9 /* MPBannerAdManager.m in Sources */, - A864B7AA1347117D479DAAC9EBC20A67 /* MPBannerCustomEvent+Internal.m in Sources */, - A14EE15DB82609C8CA0D42C8023C4B27 /* MPBannerCustomEvent.m in Sources */, - CE2694C78D53D24CED980FDB1909D47B /* MPBannerCustomEventAdapter.m in Sources */, - FDC335A6182F2E27BC80A8F94711B2C2 /* MPBaseBannerAdapter.m in Sources */, - 5A61AE57DFBD6DD980BD122FE0942DB6 /* MPBaseInterstitialAdapter.m in Sources */, - A57B52F39410EC557DC22C55F930A9B3 /* MPClientAdPositioning.m in Sources */, - 16AE3CD2AC2B0A890F2E976F616F0233 /* MPClosableView.m in Sources */, - 5D6D4DCFE3FADA3F3C8983919095F111 /* MPCollectionViewAdPlacer.m in Sources */, - 64A299E0682E1ADECF15F51214E14AEA /* MPCollectionViewAdPlacerCell.m in Sources */, - CFF7F3FC9AA8BBF117B0092330DAC661 /* MPConsentChangedNotification.m in Sources */, - AF0EFB9609D4389E47F138A9FA2C6FAA /* MPConsentChangedReason.m in Sources */, - 0CBAFCD0C91854A6CD24972C698B02C5 /* MPConsentDialogViewController.m in Sources */, - 2D062AA87FF53B7E30F82EAFE18EA8A3 /* MPConsentManager.m in Sources */, - CA130C6B9E9B59143B8EA73F7DB52492 /* MPConstants.m in Sources */, - 3A4A4839C786C4A940317B994F376ECC /* MPCoreInstanceProvider+MRAID.m in Sources */, - 829F0C2257D529B6F13A0C0D1CF28683 /* MPCoreInstanceProvider.m in Sources */, - 2D434F325DE7461EA0D225A66B5FB805 /* MPCountdownTimerView.m in Sources */, - 4AB9AAA54B061A5785C6B68C40A92E63 /* MPDiskLRUCache.m in Sources */, - D5732162E75503B2633A4305C191E543 /* MPEnhancedDeeplinkRequest.m in Sources */, - CD983E693D61D9BC3C6B414AF72C32F2 /* MPError.m in Sources */, - 223B10AC6CC2EE0C6458DD41505DCE9E /* MPGeolocationProvider.m in Sources */, - BA14370A83A8B3E482B479D65EEA5556 /* MPGlobal.m in Sources */, - ECD180F3218C915778D986F8D56E1A69 /* MPHTMLBannerCustomEvent.m in Sources */, - 88E7DA3339D91C8FA54910E35DD18B58 /* MPHTMLInterstitialCustomEvent.m in Sources */, - 8371B6602D00843B1D3101D29A8FC5E0 /* MPHTMLInterstitialViewController.m in Sources */, - 56CDAF977E02029355C316F7DC69B081 /* MPHTTPNetworkSession.m in Sources */, - D16EFAC036021344E68C02FDE3F0DC41 /* MPHTTPNetworkTaskData.m in Sources */, - 3C77A8D7999D3437E10CA61C13E638A2 /* MPIdentityProvider.m in Sources */, - 0E83EB3C1CB10DBF5DF53EF37C212CFE /* MPImageDownloadQueue.m in Sources */, - C4A0A55B2A1E3B6FF5A82826CD4A103C /* MPInternalUtils.m in Sources */, - 498F63A932727E765F6AB814D261D94E /* MPInterstitialAdController.m in Sources */, - E790462DBC58139363358896A7C767A1 /* MPInterstitialAdManager.m in Sources */, - 17689B6FACC3DB006E37056D65787446 /* MPInterstitialCustomEvent.m in Sources */, - 5AF1D2A4FE2267F0AC56F704E20ABAEF /* MPInterstitialCustomEventAdapter.m in Sources */, - 06490E9762547C0041B176C401190177 /* MPInterstitialViewController.m in Sources */, - 4B74A434B01448D3E6ACAD96DAF29D16 /* MPLastResortDelegate.m in Sources */, - F559D92720FC5F8A97934DEEA71B6927 /* MPLogging.m in Sources */, - 61DB588F4E237EBCED2611596EE503E1 /* MPLogProvider.m in Sources */, - 75D19A14B1854EEE3124D1E8881EEFA3 /* MPMediationManager.m in Sources */, - 866F01A2C8B109A4FE16EDD74401B46C /* MPMemoryCache.m in Sources */, - 0D58DD092C315F9AEEA4794ACFF06D64 /* MPMoPubConfiguration.m in Sources */, - 78807540C3A407DC5C60369A5BFEEB80 /* MPMoPubNativeAdAdapter.m in Sources */, - 1145943D3911785B994892589CC7A514 /* MPMoPubNativeCustomEvent.m in Sources */, - 6D585D832C7883006F28C509154D05C1 /* MPMoPubRewardedPlayableCustomEvent.m in Sources */, - 2B0332187880355A3277A1CB8917916A /* MPMoPubRewardedVideoCustomEvent.m in Sources */, - A27C8E6D0A619BC655AB60DCF36662F1 /* MPMRAIDBannerCustomEvent.m in Sources */, - 87622CA940589FDD7AAFB6E0398ACE85 /* MPMRAIDInterstitialCustomEvent.m in Sources */, - 18DB77AFE814D32F1DF0074FD8D962AC /* MPMRAIDInterstitialViewController.m in Sources */, - 0DC92E001319039E15A20561C1618F6C /* MPNativeAd+Internal.m in Sources */, - 57846C6FACE82A0DF8E8CD68D92123F4 /* MPNativeAd.m in Sources */, - B69A579CF5C580EC99AB4B167F2D3E94 /* MPNativeAdConfigValues+Internal.m in Sources */, - F8DBFA90D8A65F7DB31D9573AB8C4372 /* MPNativeAdConfigValues.m in Sources */, - E0B0870A02DA0DBA7089D4A232A43DAF /* MPNativeAdConstants.m in Sources */, - 609F58C179813A5A354A944F96CC01A3 /* MPNativeAdData.m in Sources */, - C0CAA6101F6717EE75D82C7D430B9F0E /* MPNativeAdError.m in Sources */, - B3EB76F45A135F212769FEFF827657AF /* MPNativeAdRendererConfiguration.m in Sources */, - 9737284CC33DBB0A5C7086FBDA87F3FD /* MPNativeAdRendererImageHandler.m in Sources */, - D8B0DB8B7A4652073224C423B13BE392 /* MPNativeAdRenderingImageLoader.m in Sources */, - 35B32CDFC8C1B3E5762C424827813B10 /* MPNativeAdRequest.m in Sources */, - 982A627847966B812877C27AFF40399F /* MPNativeAdRequestTargeting.m in Sources */, - 5882CC20C392EEBCB9615A80D068DC85 /* MPNativeAdSource.m in Sources */, - 6A1315FBC9C283A7E008A3BCA9977F37 /* MPNativeAdSourceQueue.m in Sources */, - 1D744D614090939E224F57D0EA31D903 /* MPNativeAdUtils.m in Sources */, - 58C716FD9B46A95B6AEA7344B53177BE /* MPNativeCache.m in Sources */, - 308A2A43E2FA00EE53BD35A960D053D6 /* MPNativeCustomEvent.m in Sources */, - 146E60D797246932BAE0593DAB40610D /* MPNativePositionResponseDeserializer.m in Sources */, - 3B1156F833DB69E05D0AC87D8089867E /* MPNativePositionSource.m in Sources */, - 5B37556E4B5BABB1AA4072E44347DD60 /* MPNativeView.m in Sources */, - AE68B475933FBE1F331B0D661507379D /* MPProgressOverlayView.m in Sources */, - E2B59107E0E728CA218C94C674D74526 /* MPReachability.m in Sources */, - 4B649160240E4883D41EA7F3C826FDAE /* MPReachabilityManager.m in Sources */, - E509A3D293326446EF51977A1C9D3C9D /* MPRealTimeTimer.m in Sources */, - DC9DABBE3878896956124004D24C553F /* MPRewardedVideo.m in Sources */, - A69DB7C9CD08CB59BA84109FCF137F4F /* MPRewardedVideoAdapter.m in Sources */, - 023F9DDF832B48B210EE3118676B4127 /* MPRewardedVideoAdManager.m in Sources */, - 2C4F327883E113E134B00E7947BDFAD7 /* MPRewardedVideoConnection.m in Sources */, - 81D43E97EA84D0595A57345AE244BF66 /* MPRewardedVideoCustomEvent+Caching.m in Sources */, - 50CFD9CBA971EA7A7C6F6B7C18459EE2 /* MPRewardedVideoCustomEvent.m in Sources */, - 67F0E3D6416E11ADA19735CD6C0192BB /* MPRewardedVideoError.m in Sources */, - 703E6B8C21D9529B09116E96DD2EDFD7 /* MPRewardedVideoReward.m in Sources */, - 1F2F666C1D5A16D838A744C009D46D82 /* MPServerAdPositioning.m in Sources */, - B1427A16D018F023A46CA3BA1240A957 /* MPSessionTracker.m in Sources */, - 6633E87CA07901DFBEE6AADA47A5E422 /* MPStaticNativeAdRenderer.m in Sources */, - 9AD71A003200F75223F2E7EAA19327D1 /* MPStaticNativeAdRendererSettings.m in Sources */, - F64941F61B71E1C1FA626DBD21C660FE /* MPStoreKitProvider.m in Sources */, - 6B122C258F2C5B9652D2277FF4A48C62 /* MPStreamAdPlacementData.m in Sources */, - CC90CB967CAA93E3FC5F6828B60A378A /* MPStreamAdPlacer.m in Sources */, - 9A174E247300DE6E9C120EAA2AC1006D /* MPTableViewAdPlacer.m in Sources */, - C0623FBC7EE341B164F44A9AA5C9C105 /* MPTableViewAdPlacerCell.m in Sources */, - DEE198002E971CABB7FF5B6A9FCFE3FD /* MPTableViewCellImpressionTracker.m in Sources */, - ED282F39553A930B6CB186788298C492 /* MPTimer.m in Sources */, - 0233FE9CDF44B5EA4386E00C7E81F6C3 /* MPURL.m in Sources */, - 48FCCFCC3E946B332CB8294E632EBC32 /* MPURLActionInfo.m in Sources */, - 01D18131D831A0747B70FFDFB63A5542 /* MPURLRequest.m in Sources */, - 689624796256C6BCA8B51FCC25FDC981 /* MPURLResolver.m in Sources */, - 27F37D84E271ED0CBC6D55411D85B416 /* MPUserInteractionGestureRecognizer.m in Sources */, - B153068CFD871F5865009B81AD2F3AB1 /* MPVASTAd.m in Sources */, - 7E5218BBE08D5E0EC184B9E0AFBA49A9 /* MPVASTCompanionAd.m in Sources */, - 341A605B282A90AC871A46A3B17F1C1B /* MPVASTCreative.m in Sources */, - D6470A6914F4B1C63A373885DA51D000 /* MPVASTDurationOffset.m in Sources */, - 0D3AF3AF21BC0B49E7A8539F4290A06C /* MPVASTIndustryIcon.m in Sources */, - 077479EF1A45042A0CD1A9C89F80DCD7 /* MPVASTInline.m in Sources */, - 2B8A62F8FC2E6FACAE0939FE601BC681 /* MPVASTLinearAd.m in Sources */, - 45B078CB3CA94FABDA8CEB5F36257427 /* MPVASTMacroProcessor.m in Sources */, - 950144E6722A026888A85311387F86EF /* MPVASTManager.m in Sources */, - 29F084BB5383903A9A547ECD669CB395 /* MPVASTMediaFile.m in Sources */, - 88B913963FA97D6C84D7E885D4711084 /* MPVASTModel.m in Sources */, - 3F78054FD9415800D5EE8907BDABCCB8 /* MPVASTResource.m in Sources */, - D712B14DE58134F53C970B0504D7D1F8 /* MPVASTResponse.m in Sources */, - CE8F3773A735EDE958B7BC3BCC5409EB /* MPVASTStringUtilities.m in Sources */, - 6EBCF4AA517B1ACA7D8D5F41AC96B970 /* MPVASTTracking.m in Sources */, - 6DC3FC3D62C8D890F07F56E833F1CB29 /* MPVASTTrackingEvent.m in Sources */, - AD4C614493C13B684FFF6E969F14122D /* MPVASTWrapper.m in Sources */, - D309D21D4051863B82FD39BA3B6FABCA /* MPVideoConfig.m in Sources */, - DF60D1B27884E19F1BC79EC1138F22B9 /* MPViewabilityAdapterAvid.m in Sources */, - D34B065CC0DD932A9EB4F03CB352420A /* MPViewabilityAdapterMoat.m in Sources */, - AC09546ED0043AFA43B7552DBEB26299 /* MPViewabilityTracker.m in Sources */, - 59741C98BAF2DB6F227E627EF93FD44A /* MPWebView+Viewability.m in Sources */, - D855375D8033E609B1A34A5F04A5CB24 /* MPWebView.m in Sources */, - F0A5F363EF85182A236D7F6475C660C4 /* MPXMLParser.m in Sources */, - 681614198C93B8BF5EEA6321C9CEEAE1 /* MRBridge.m in Sources */, - A8B82B06E04613C659C35E1A2C55D8A2 /* MRBundleManager.m in Sources */, - 21CB5C6C59F5C7710CFBA2D22D93C3E6 /* MRCommand.m in Sources */, - 18EABA336576906C414ECB32CAFC94AB /* MRConstants.m in Sources */, - 5609575AA61E8489185BB2AA5FB30D6A /* MRController.m in Sources */, - F6745A0D56CD93443234ADD84F22669D /* MRError.m in Sources */, - C152E7DBE80E37531A1D8281E53F9EB8 /* MRExpandModalViewController.m in Sources */, - 42A0CBD4E933F1E0E63B48178F2B6786 /* MRNativeCommandHandler.m in Sources */, - D7E1232119D5156B86C54DAFA2C41FD8 /* MRProperty.m in Sources */, - EFD8E187C411838A69BC3A1CBA20D30A /* MRVideoPlayerManager.m in Sources */, - 4ACFEE6F6A1B442666DBE233890CBC18 /* NSBundle+MPAdditions.m in Sources */, - 99CC863EC94E03AD785FB4C5C571BD3B /* NSDate+MPAdditions.m in Sources */, - C4D38C5C500ADD846140AF9EA9C604EB /* NSDictionary+MPAdditions.m in Sources */, - 36ED9977AA9C183DB823D783777EB78F /* NSError+MPAdditions.m in Sources */, - D7D3FDB7CA9AC1C48908168B04E8A860 /* NSHTTPURLResponse+MPAdditions.m in Sources */, - BF1BD82C792C37F89676D5A4336429D6 /* NSJSONSerialization+MPAdditions.m in Sources */, - 28DF0A6854767CCA0031732C150E406F /* NSMutableArray+MPAdditions.m in Sources */, - 2C2B2B49AE29F78C58F97022248C3C64 /* NSString+MPAdditions.m in Sources */, - C82E1D87724F5A023A90F70201B4DD8B /* NSString+MPConsentStatus.m in Sources */, - EE9B9BB61601C2F6B4872C8E04276B09 /* NSURL+MPAdditions.m in Sources */, - BA3495E1E75EB0181B51A6D3F035AA64 /* UIButton+MPAdditions.m in Sources */, - 742AD4675D7E8F71E1BA28B3E84F3620 /* UIColor+MPAdditions.m in Sources */, - 87E91AE62FDB8CF407FAF794A67CF2E5 /* UIView+MPAdditions.m in Sources */, - 0AD8FD1721DDCEA7316FE73E5468F227 /* UIWebView+MPAdditions.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 70362E0C0B95E14529999C3AC94D2BD3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "mopub-ios-sdk"; - target = 20B16B6AE1879253D8E116DA8D1A2E8F /* mopub-ios-sdk */; - targetProxy = 57FCCB09E425AF13D07BEF24A0DCC5DC /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 1EE19F5DD95931924296F637BF18BD8F /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_ALLOWED = NO; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Debug; - }; - 7042976EEBD310C1BDAAA6E3E6BE5672 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 0DBE326B33C8DBF354443CDE78482D26 /* Pods-PrebidMobileDemo.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACH_O_TYPE = staticlib; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 7C9AFC4E509505D5990371C5DBE46431 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 79C22829A56CCDBBE45775E7531A1C96 /* mopub-ios-sdk.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/mopub-ios-sdk/mopub-ios-sdk-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = MoPub; - PRODUCT_NAME = "mopub-ios-sdk"; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 94E14D9D82E3F0A7636F1C210838C325 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DFE2DD01A4E3426FCAFAD1862CF38CEB /* Pods-PrebidMobileDemo.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACH_O_TYPE = staticlib; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 97B687EA42ED15350568D1BE98F6D0A2 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 79C22829A56CCDBBE45775E7531A1C96 /* mopub-ios-sdk.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/mopub-ios-sdk/mopub-ios-sdk-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = MoPub; - PRODUCT_NAME = "mopub-ios-sdk"; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - F4568DEE257655D290C2B9CEAB37C934 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_ALLOWED = NO; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1EE19F5DD95931924296F637BF18BD8F /* Debug */, - F4568DEE257655D290C2B9CEAB37C934 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - CB98B3280CBD35D868E017C9A2887971 /* Build configuration list for PBXNativeTarget "mopub-ios-sdk" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 97B687EA42ED15350568D1BE98F6D0A2 /* Debug */, - 7C9AFC4E509505D5990371C5DBE46431 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - E35CC3CB8AE13AB9EB5BF1AD09C71F2F /* Build configuration list for PBXNativeTarget "Pods-PrebidMobileDemo" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7042976EEBD310C1BDAAA6E3E6BE5672 /* Debug */, - 94E14D9D82E3F0A7636F1C210838C325 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; -} diff --git a/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo-acknowledgements.markdown b/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo-acknowledgements.markdown deleted file mode 100644 index 5c5655f43..000000000 --- a/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo-acknowledgements.markdown +++ /dev/null @@ -1,11 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: - -## Google-Mobile-Ads-SDK - -Copyright 2018 Google - -## mopub-ios-sdk - -The MoPub SDK License can be found at http://www.mopub.com/legal/sdk-license-agreement/ -Generated by CocoaPods - https://cocoapods.org diff --git a/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo-acknowledgements.plist b/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo-acknowledgements.plist deleted file mode 100644 index ea0ca5bbc..000000000 --- a/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo-acknowledgements.plist +++ /dev/null @@ -1,49 +0,0 @@ - - - - - PreferenceSpecifiers - - - FooterText - This application makes use of the following third party libraries: - Title - Acknowledgements - Type - PSGroupSpecifier - - - FooterText - Copyright 2018 Google - License - Copyright - Title - Google-Mobile-Ads-SDK - Type - PSGroupSpecifier - - - FooterText - The MoPub SDK License can be found at http://www.mopub.com/legal/sdk-license-agreement/ - License - New BSD - Title - mopub-ios-sdk - Type - PSGroupSpecifier - - - FooterText - Generated by CocoaPods - https://cocoapods.org - Title - - Type - PSGroupSpecifier - - - StringsTable - Acknowledgements - Title - Acknowledgements - - diff --git a/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo-dummy.m b/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo-dummy.m deleted file mode 100644 index bae043136..000000000 --- a/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Pods_PrebidMobileDemo : NSObject -@end -@implementation PodsDummy_Pods_PrebidMobileDemo -@end diff --git a/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo-frameworks.sh b/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo-frameworks.sh deleted file mode 100755 index 08e3eaaca..000000000 --- a/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo-frameworks.sh +++ /dev/null @@ -1,146 +0,0 @@ -#!/bin/sh -set -e -set -u -set -o pipefail - -if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then - # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy - # frameworks to, so exit 0 (signalling the script phase was successful). - exit 0 -fi - -echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" -mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - -COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" -SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" - -# Used as a return value for each invocation of `strip_invalid_archs` function. -STRIP_BINARY_RETVAL=0 - -# This protects against multiple targets copying the same framework dependency at the same time. The solution -# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html -RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") - -# Copies and strips a vendored framework -install_framework() -{ - if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then - local source="${BUILT_PRODUCTS_DIR}/$1" - elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then - local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" - elif [ -r "$1" ]; then - local source="$1" - fi - - local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - - if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink "${source}")" - fi - - # Use filter instead of exclude so missing patterns don't throw errors. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" - - local basename - basename="$(basename -s .framework "$1")" - binary="${destination}/${basename}.framework/${basename}" - if ! [ -r "$binary" ]; then - binary="${destination}/${basename}" - fi - - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then - strip_invalid_archs "$binary" - fi - - # Resign the code if required by the build settings to avoid unstable apps - code_sign_if_enabled "${destination}/$(basename "$1")" - - # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. - if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then - local swift_runtime_libs - swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) - for lib in $swift_runtime_libs; do - echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" - rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" - code_sign_if_enabled "${destination}/${lib}" - done - fi -} - -# Copies and strips a vendored dSYM -install_dsym() { - local source="$1" - if [ -r "$source" ]; then - # Copy the dSYM into a the targets temp dir. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" - - local basename - basename="$(basename -s .framework.dSYM "$source")" - binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" - - # Strip invalid architectures so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then - strip_invalid_archs "$binary" - fi - - if [[ $STRIP_BINARY_RETVAL == 1 ]]; then - # Move the stripped file into its final destination. - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" - else - # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. - touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" - fi - fi -} - -# Signs a framework with the provided identity -code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then - # Use the current code_sign_identitiy - echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" - - if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - code_sign_cmd="$code_sign_cmd &" - fi - echo "$code_sign_cmd" - eval "$code_sign_cmd" - fi -} - -# Strip invalid architectures -strip_invalid_archs() { - binary="$1" - # Get architectures for current target binary - binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" - # Intersect them with the architectures we are building for - intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" - # If there are no archs supported by this binary then warn the user - if [[ -z "$intersected_archs" ]]; then - echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." - STRIP_BINARY_RETVAL=0 - return - fi - stripped="" - for arch in $binary_archs; do - if ! [[ "${ARCHS}" == *"$arch"* ]]; then - # Strip non-valid architectures in-place - lipo -remove "$arch" -output "$binary" "$binary" || exit 1 - stripped="$stripped $arch" - fi - done - if [[ "$stripped" ]]; then - echo "Stripped $binary of architectures:$stripped" - fi - STRIP_BINARY_RETVAL=1 -} - -if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - wait -fi diff --git a/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo-resources.sh b/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo-resources.sh deleted file mode 100755 index d9c3f6668..000000000 --- a/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo-resources.sh +++ /dev/null @@ -1,164 +0,0 @@ -#!/bin/sh -set -e -set -u -set -o pipefail - -if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then - # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy - # resources to, so exit 0 (signalling the script phase was successful). - exit 0 -fi - -mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - -RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt -> "$RESOURCES_TO_COPY" - -XCASSET_FILES=() - -# This protects against multiple targets copying the same framework dependency at the same time. The solution -# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html -RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") - -case "${TARGETED_DEVICE_FAMILY:-}" in - 1,2) - TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" - ;; - 1) - TARGET_DEVICE_ARGS="--target-device iphone" - ;; - 2) - TARGET_DEVICE_ARGS="--target-device ipad" - ;; - 3) - TARGET_DEVICE_ARGS="--target-device tv" - ;; - 4) - TARGET_DEVICE_ARGS="--target-device watch" - ;; - *) - TARGET_DEVICE_ARGS="--target-device mac" - ;; -esac - -install_resource() -{ - if [[ "$1" = /* ]] ; then - RESOURCE_PATH="$1" - else - RESOURCE_PATH="${PODS_ROOT}/$1" - fi - if [[ ! -e "$RESOURCE_PATH" ]] ; then - cat << EOM -error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. -EOM - exit 1 - fi - case $RESOURCE_PATH in - *.storyboard) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true - ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} - ;; - *.xib) - echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true - ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} - ;; - *.framework) - echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true - mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - ;; - *.xcdatamodel) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true - xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" - ;; - *.xcdatamodeld) - echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true - xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" - ;; - *.xcmappingmodel) - echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true - xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" - ;; - *.xcassets) - ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" - XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") - ;; - *) - echo "$RESOURCE_PATH" || true - echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" - ;; - esac -} -if [[ "$CONFIGURATION" == "Debug" ]]; then - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdBrowserController.xib" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@2x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@3x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@2x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@3x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCountdownTimer.html" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@2x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@3x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@2x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@3x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@2x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@3x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@2x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@3x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MRAID.bundle" -fi -if [[ "$CONFIGURATION" == "Release" ]]; then - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdBrowserController.xib" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@2x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@3x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@2x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@3x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCountdownTimer.html" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@2x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@3x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@2x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@3x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@2x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@3x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@2x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@3x.png" - install_resource "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MRAID.bundle" -fi - -mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then - mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" -fi -rm -f "$RESOURCES_TO_COPY" - -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] -then - # Find all other xcassets (this unfortunately includes those of path pods and other targets). - OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) - while read line; do - if [[ $line != "${PODS_ROOT}*" ]]; then - XCASSET_FILES+=("$line") - fi - done <<<"$OTHER_XCASSETS" - - if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" - else - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" - fi -fi diff --git a/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo.debug.xcconfig b/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo.debug.xcconfig deleted file mode 100644 index 5709a05bc..000000000 --- a/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo.debug.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google-Mobile-Ads-SDK/Frameworks/frameworks" "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/MOAT" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Google-Mobile-Ads-SDK" "${PODS_ROOT}/Headers/Public/mopub-ios-sdk" -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk" "${PODS_ROOT}/Google-Mobile-Ads-SDK/Libraries" "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/Avid" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Google-Mobile-Ads-SDK" -isystem "${PODS_ROOT}/Headers/Public/mopub-ios-sdk" -OTHER_LDFLAGS = $(inherited) -ObjC -l"Avid-mopub-3.6.1" -l"GoogleMobileAds" -l"mopub-ios-sdk" -l"sqlite3" -l"z" -framework "AVFoundation" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreMotion" -framework "CoreTelephony" -framework "CoreVideo" -framework "Foundation" -framework "GLKit" -framework "GoogleMobileAds" -framework "MPUBMoatMobileAppKit" -framework "MediaPlayer" -framework "MessageUI" -framework "MobileCoreServices" -framework "OpenGLES" -framework "QuartzCore" -framework "SafariServices" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "AdSupport" -weak_framework "JavaScriptCore" -weak_framework "SafariServices" -weak_framework "StoreKit" -weak_framework "WebKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods diff --git a/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo.release.xcconfig b/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo.release.xcconfig deleted file mode 100644 index 5709a05bc..000000000 --- a/examples/PrebidMobileDemo/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo.release.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Google-Mobile-Ads-SDK/Frameworks/frameworks" "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/MOAT" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Google-Mobile-Ads-SDK" "${PODS_ROOT}/Headers/Public/mopub-ios-sdk" -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk" "${PODS_ROOT}/Google-Mobile-Ads-SDK/Libraries" "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/Avid" -OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Google-Mobile-Ads-SDK" -isystem "${PODS_ROOT}/Headers/Public/mopub-ios-sdk" -OTHER_LDFLAGS = $(inherited) -ObjC -l"Avid-mopub-3.6.1" -l"GoogleMobileAds" -l"mopub-ios-sdk" -l"sqlite3" -l"z" -framework "AVFoundation" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreMotion" -framework "CoreTelephony" -framework "CoreVideo" -framework "Foundation" -framework "GLKit" -framework "GoogleMobileAds" -framework "MPUBMoatMobileAppKit" -framework "MediaPlayer" -framework "MessageUI" -framework "MobileCoreServices" -framework "OpenGLES" -framework "QuartzCore" -framework "SafariServices" -framework "Security" -framework "StoreKit" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "AdSupport" -weak_framework "JavaScriptCore" -weak_framework "SafariServices" -weak_framework "StoreKit" -weak_framework "WebKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_PODFILE_DIR_PATH = ${SRCROOT}/. -PODS_ROOT = ${SRCROOT}/Pods diff --git a/examples/PrebidMobileDemo/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-dummy.m b/examples/PrebidMobileDemo/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-dummy.m deleted file mode 100644 index 8cd65a3e9..000000000 --- a/examples/PrebidMobileDemo/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_mopub_ios_sdk : NSObject -@end -@implementation PodsDummy_mopub_ios_sdk -@end diff --git a/examples/PrebidMobileDemo/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-prefix.pch b/examples/PrebidMobileDemo/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-prefix.pch deleted file mode 100644 index beb2a2441..000000000 --- a/examples/PrebidMobileDemo/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/examples/PrebidMobileDemo/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.xcconfig b/examples/PrebidMobileDemo/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.xcconfig deleted file mode 100644 index 69ff0322e..000000000 --- a/examples/PrebidMobileDemo/Pods/Target Support Files/mopub-ios-sdk/mopub-ios-sdk.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/mopub-ios-sdk -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/MOAT" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/mopub-ios-sdk" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/mopub-ios-sdk" -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Viewability/Avid" -OTHER_LDFLAGS = -l"Avid-mopub-3.6.1" -framework "AVFoundation" -framework "CoreGraphics" -framework "CoreLocation" -framework "CoreMedia" -framework "CoreTelephony" -framework "Foundation" -framework "MPUBMoatMobileAppKit" -framework "MediaPlayer" -framework "QuartzCore" -framework "SafariServices" -framework "SystemConfiguration" -framework "UIKit" -weak_framework "AdSupport" -weak_framework "StoreKit" -weak_framework "WebKit" -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/mopub-ios-sdk -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/LICENSE b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/LICENSE deleted file mode 100644 index dbbea5c1f..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/LICENSE +++ /dev/null @@ -1 +0,0 @@ -The MoPub SDK License can be found at http://www.mopub.com/legal/sdk-license-agreement/ \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.h deleted file mode 100644 index 0bf1fac2f..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// MPBannerAdManager.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAdServerCommunicator.h" -#import "MPBaseBannerAdapter.h" - -@class MPAdTargeting; - -@protocol MPBannerAdManagerDelegate; - -@interface MPBannerAdManager : NSObject - -@property (nonatomic, weak) id delegate; - -- (id)initWithDelegate:(id)delegate; - -- (void)loadAdWithTargeting:(MPAdTargeting *)targeting; -- (void)forceRefreshAd; -- (void)stopAutomaticallyRefreshingContents; -- (void)startAutomaticallyRefreshingContents; -- (void)rotateToOrientation:(UIInterfaceOrientation)orientation; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.m deleted file mode 100644 index 0e648611e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManager.m +++ /dev/null @@ -1,426 +0,0 @@ -// -// MPBannerAdManager.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBannerAdManager.h" -#import "MPAdServerURLBuilder.h" -#import "MPAdTargeting.h" -#import "MPCoreInstanceProvider.h" -#import "MPBannerAdManagerDelegate.h" -#import "MPError.h" -#import "MPTimer.h" -#import "MPConstants.h" -#import "MPLogging.h" -#import "MPBannerCustomEventAdapter.h" -#import "NSMutableArray+MPAdditions.h" -#import "NSDate+MPAdditions.h" -#import "NSError+MPAdditions.h" - -@interface MPBannerAdManager () - -@property (nonatomic, strong) MPAdServerCommunicator *communicator; -@property (nonatomic, strong) MPBaseBannerAdapter *onscreenAdapter; -@property (nonatomic, strong) MPBaseBannerAdapter *requestingAdapter; -@property (nonatomic, strong) UIView *requestingAdapterAdContentView; -@property (nonatomic, strong) MPAdConfiguration *requestingConfiguration; -@property (nonatomic, strong) MPAdTargeting *targeting; -@property (nonatomic, strong) NSMutableArray *remainingConfigurations; -@property (nonatomic, strong) MPTimer *refreshTimer; -@property (nonatomic, assign) BOOL adActionInProgress; -@property (nonatomic, assign) BOOL automaticallyRefreshesContents; -@property (nonatomic, assign) BOOL hasRequestedAtLeastOneAd; -@property (nonatomic, assign) UIInterfaceOrientation currentOrientation; -@property (nonatomic, assign) NSTimeInterval adapterLoadStartTimestamp; - -- (void)loadAdWithURL:(NSURL *)URL; -- (void)applicationWillEnterForeground; -- (void)scheduleRefreshTimer; -- (void)refreshTimerDidFire; - -@end - -@implementation MPBannerAdManager - -@synthesize delegate = _delegate; -@synthesize communicator = _communicator; -@synthesize onscreenAdapter = _onscreenAdapter; -@synthesize requestingAdapter = _requestingAdapter; -@synthesize refreshTimer = _refreshTimer; -@synthesize adActionInProgress = _adActionInProgress; -@synthesize currentOrientation = _currentOrientation; - -- (id)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - self.delegate = delegate; - - self.communicator = [[MPAdServerCommunicator alloc] initWithDelegate:self]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(applicationWillEnterForeground) - name:UIApplicationWillEnterForegroundNotification - object:[UIApplication sharedApplication]]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(applicationDidEnterBackground) - name:UIApplicationDidEnterBackgroundNotification - object:[UIApplication sharedApplication]]; - - self.automaticallyRefreshesContents = YES; - self.currentOrientation = MPInterfaceOrientation(); - } - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - - [self.communicator cancel]; - [self.communicator setDelegate:nil]; - - [self.refreshTimer invalidate]; - - [self.onscreenAdapter unregisterDelegate]; - - [self.requestingAdapter unregisterDelegate]; - -} - -- (BOOL)loading -{ - return self.communicator.loading || self.requestingAdapter; -} - -- (void)loadAdWithTargeting:(MPAdTargeting *)targeting -{ - if (!self.hasRequestedAtLeastOneAd) { - self.hasRequestedAtLeastOneAd = YES; - } - - if (self.loading) { - MPLogWarn(@"Banner view (%@) is already loading an ad. Wait for previous load to finish.", [self.delegate adUnitId]); - return; - } - - self.targeting = targeting; - [self loadAdWithURL:nil]; -} - -- (void)forceRefreshAd -{ - [self loadAdWithURL:nil]; -} - -- (void)applicationWillEnterForeground -{ - if (self.automaticallyRefreshesContents && self.hasRequestedAtLeastOneAd) { - [self loadAdWithURL:nil]; - } -} - -- (void)applicationDidEnterBackground -{ - [self pauseRefreshTimer]; -} - -- (void)pauseRefreshTimer -{ - if ([self.refreshTimer isValid]) { - [self.refreshTimer pause]; - } -} - -- (void)stopAutomaticallyRefreshingContents -{ - self.automaticallyRefreshesContents = NO; - - [self pauseRefreshTimer]; -} - -- (void)startAutomaticallyRefreshingContents -{ - self.automaticallyRefreshesContents = YES; - - if ([self.refreshTimer isValid]) { - [self.refreshTimer resume]; - } else if (self.refreshTimer) { - [self scheduleRefreshTimer]; - } -} - -- (void)loadAdWithURL:(NSURL *)URL -{ - URL = [URL copy]; //if this is the URL from the requestingConfiguration, it's about to die... - // Cancel the current request/requesting adapter - self.requestingConfiguration = nil; - [self.requestingAdapter unregisterDelegate]; - self.requestingAdapter = nil; - self.requestingAdapterAdContentView = nil; - - [self.communicator cancel]; - - URL = (URL) ? URL : [MPAdServerURLBuilder URLWithAdUnitID:[self.delegate adUnitId] - keywords:self.targeting.keywords - userDataKeywords:self.targeting.userDataKeywords - location:self.targeting.location]; - - [self.communicator loadURL:URL]; -} - -- (void)rotateToOrientation:(UIInterfaceOrientation)orientation -{ - self.currentOrientation = orientation; - [self.requestingAdapter rotateToOrientation:orientation]; - [self.onscreenAdapter rotateToOrientation:orientation]; -} - -#pragma mark - Internal - -- (void)scheduleRefreshTimer -{ - [self.refreshTimer invalidate]; - NSTimeInterval timeInterval = self.requestingConfiguration ? self.requestingConfiguration.refreshInterval : DEFAULT_BANNER_REFRESH_INTERVAL; - - if (timeInterval > 0) { - self.refreshTimer = [[MPCoreInstanceProvider sharedProvider] buildMPTimerWithTimeInterval:timeInterval - target:self - selector:@selector(refreshTimerDidFire) - repeats:NO]; - [self.refreshTimer scheduleNow]; - MPLogDebug(@"Scheduled the autorefresh timer to fire in %.1f seconds (%p).", timeInterval, self.refreshTimer); - } -} - -- (void)refreshTimerDidFire -{ - if (!self.loading && self.automaticallyRefreshesContents) { - [self loadAdWithTargeting:self.targeting]; - } -} - -- (BOOL)shouldScheduleTimerOnImpressionDisplay { - // If `visibleImpressionTrackingEnabled` is set to `YES`, we - // should schedule the timer only after the impression has fired. - return self.requestingConfiguration.visibleImpressionTrackingEnabled; -} - -- (void)fetchAdWithConfiguration:(MPAdConfiguration *)configuration { - MPLogInfo(@"Banner ad view is fetching ad network type: %@", configuration.networkType); - - if (configuration.adType == MPAdTypeUnknown) { - [self didFailToLoadAdapterWithError:[MOPUBError errorWithCode:MOPUBErrorServerError]]; - return; - } - - if (configuration.adType == MPAdTypeInterstitial) { - MPLogWarn(@"Could not load ad: banner object received an interstitial ad unit ID."); - [self didFailToLoadAdapterWithError:[MOPUBError errorWithCode:MOPUBErrorAdapterInvalid]]; - return; - } - - if (configuration.adUnitWarmingUp) { - MPLogInfo(kMPWarmingUpErrorLogFormatWithAdUnitID, self.delegate.adUnitId); - [self didFailToLoadAdapterWithError:[MOPUBError errorWithCode:MOPUBErrorAdUnitWarmingUp]]; - return; - } - - if ([configuration.networkType isEqualToString:kAdTypeClear]) { - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.delegate.adUnitId); - [self didFailToLoadAdapterWithError:[MOPUBError errorWithCode:MOPUBErrorNoInventory]]; - return; - } - - // Notify Ad Server of the ad fetch attempt. This is fire and forget. - [self.communicator sendBeforeLoadUrlWithConfiguration:configuration]; - - // Record the start time of the load. - self.adapterLoadStartTimestamp = NSDate.now.timeIntervalSince1970; - - self.requestingAdapter = [[MPBannerCustomEventAdapter alloc] initWithConfiguration:configuration - delegate:self]; - if (self.requestingAdapter == nil) { - [self adapter:nil didFailToLoadAdWithError:nil]; - return; - } - - [self.requestingAdapter _getAdWithConfiguration:configuration targeting:self.targeting containerSize:self.delegate.containerSize]; -} - -#pragma mark - - -- (void)communicatorDidReceiveAdConfigurations:(NSArray *)configurations -{ - self.remainingConfigurations = [configurations mutableCopy]; - self.requestingConfiguration = [self.remainingConfigurations removeFirst]; - - // There are no configurations to try. Consider this a clear response by the server. - if (self.remainingConfigurations.count == 0 && self.requestingConfiguration == nil) { - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.delegate.adUnitId); - [self didFailToLoadAdapterWithError:[MOPUBError errorWithCode:MOPUBErrorNoInventory]]; - return; - } - - [self fetchAdWithConfiguration:self.requestingConfiguration]; -} - -- (void)communicatorDidFailWithError:(NSError *)error -{ - [self didFailToLoadAdapterWithError:error]; -} - -- (void)didFailToLoadAdapterWithError:(NSError *)error -{ - [self.delegate managerDidFailToLoadAd]; - [self scheduleRefreshTimer]; - - MPLogError(@"Banner view (%@) failed. Error: %@", [self.delegate adUnitId], error); -} - -#pragma mark - - -- (MPAdView *)banner -{ - return [self.delegate banner]; -} - -- (id)bannerDelegate -{ - return [self.delegate bannerDelegate]; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (MPNativeAdOrientation)allowedNativeAdsOrientation -{ - return [self.delegate allowedNativeAdsOrientation]; -} - -- (CLLocation *)location -{ - return self.targeting.location; -} - -- (BOOL)requestingAdapterIsReadyToBePresented -{ - return !!self.requestingAdapterAdContentView; -} - -- (void)presentRequestingAdapter -{ - if (!self.adActionInProgress && self.requestingAdapterIsReadyToBePresented) { - [self.onscreenAdapter unregisterDelegate]; - self.onscreenAdapter = self.requestingAdapter; - self.requestingAdapter = nil; - - [self.onscreenAdapter rotateToOrientation:self.currentOrientation]; - [self.delegate managerDidLoadAd:self.requestingAdapterAdContentView]; - [self.onscreenAdapter didDisplayAd]; - - self.requestingAdapterAdContentView = nil; - - if (![self shouldScheduleTimerOnImpressionDisplay]) { - [self scheduleRefreshTimer]; - } - } -} - -- (void)adapter:(MPBaseBannerAdapter *)adapter didFinishLoadingAd:(UIView *)ad -{ - if (self.requestingAdapter == adapter) { - self.remainingConfigurations = nil; - self.requestingAdapterAdContentView = ad; - - // Record the end of the adapter load and send off the fire and forget after-load-url tracker. - NSTimeInterval duration = NSDate.now.timeIntervalSince1970 - self.adapterLoadStartTimestamp; - [self.communicator sendAfterLoadUrlWithConfiguration:self.requestingConfiguration adapterLoadDuration:duration adapterLoadResult:MPAfterLoadResultAdLoaded]; - - [self presentRequestingAdapter]; - } -} - -- (void)adapter:(MPBaseBannerAdapter *)adapter didFailToLoadAdWithError:(NSError *)error -{ - // Record the end of the adapter load and send off the fire and forget after-load-url tracker - // with the appropriate error code result. - NSTimeInterval duration = NSDate.now.timeIntervalSince1970 - self.adapterLoadStartTimestamp; - MPAfterLoadResult result = (error.isAdRequestTimedOutError ? MPAfterLoadResultTimeout : (adapter == nil ? MPAfterLoadResultMissingAdapter : MPAfterLoadResultError)); - [self.communicator sendAfterLoadUrlWithConfiguration:self.requestingConfiguration adapterLoadDuration:duration adapterLoadResult:result]; - - if (self.requestingAdapter == adapter) { - // There are more ad configurations to try. - if (self.remainingConfigurations.count > 0) { - self.requestingConfiguration = [self.remainingConfigurations removeFirst]; - [self fetchAdWithConfiguration:self.requestingConfiguration]; - } - // No more configurations to try. Send new request to Ads server to get more Ads. - else if (self.requestingConfiguration.nextURL != nil) { - [self loadAdWithURL:self.requestingConfiguration.nextURL]; - } - // No more configurations to try and no more pages to load. - else { - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.delegate.adUnitId); - [self didFailToLoadAdapterWithError:[MOPUBError errorWithCode:MOPUBErrorNoInventory]]; - } - } - - if (self.onscreenAdapter == adapter && adapter != nil) { - // the onscreen adapter has failed. we need to: - // 1) remove it - // 2) and note that there can't possibly be a modal on display any more - [self.delegate invalidateContentView]; - [self.onscreenAdapter unregisterDelegate]; - self.onscreenAdapter = nil; - if (self.adActionInProgress) { - [self.delegate userActionDidFinish]; - self.adActionInProgress = NO; - } - if (self.requestingAdapterIsReadyToBePresented) { - [self presentRequestingAdapter]; - } else { - [self loadAdWithTargeting:self.targeting]; - } - } -} - -- (void)adapter:(MPBaseBannerAdapter *)adapter didTrackImpressionForAd:(UIView *)ad { - if (self.onscreenAdapter == adapter && [self shouldScheduleTimerOnImpressionDisplay]) { - [self scheduleRefreshTimer]; - } -} - -- (void)userActionWillBeginForAdapter:(MPBaseBannerAdapter *)adapter -{ - if (self.onscreenAdapter == adapter) { - self.adActionInProgress = YES; - [self.delegate userActionWillBegin]; - } -} - -- (void)userActionDidFinishForAdapter:(MPBaseBannerAdapter *)adapter -{ - if (self.onscreenAdapter == adapter) { - [self.delegate userActionDidFinish]; - self.adActionInProgress = NO; - [self presentRequestingAdapter]; - } -} - -- (void)userWillLeaveApplicationFromAdapter:(MPBaseBannerAdapter *)adapter -{ - if (self.onscreenAdapter == adapter) { - [self.delegate userWillLeaveApplication]; - } -} - -@end - - diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManagerDelegate.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManagerDelegate.h deleted file mode 100644 index 1744f4ed0..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerAdManagerDelegate.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// MPBannerAdManagerDelegate.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPAdView; -@protocol MPAdViewDelegate; - -@protocol MPBannerAdManagerDelegate - -- (NSString *)adUnitId; -- (MPNativeAdOrientation)allowedNativeAdsOrientation; -- (MPAdView *)banner; -- (id)bannerDelegate; -- (CGSize)containerSize; -- (UIViewController *)viewControllerForPresentingModalView; - -- (void)invalidateContentView; - -- (void)managerDidLoadAd:(UIView *)ad; -- (void)managerDidFailToLoadAd; -- (void)userActionWillBegin; -- (void)userActionDidFinish; -- (void)userWillLeaveApplication; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.h deleted file mode 100644 index d2d21bde5..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// MPBannerCustomEvent+Internal.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBannerCustomEvent.h" - -@interface MPBannerCustomEvent (Internal) - -/** - * Track impressions for trackers that are included in the creative's markup. - * Extended class implements this method if necessary. - * Currently, only HTML and MRAID banners use trackers included in markup. - * Mediated networks track impressions via their own means. - */ -- (void)trackImpressionsIncludedInMarkup; - -/** - * Start viewability tracker. The default implementation of this method does nothing. - * Subclasses can override this method if necessary. - */ -- (void)startViewabilityTracker; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.m deleted file mode 100644 index ccc6f079b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEvent+Internal.m +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPBannerCustomEvent+Internal.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBannerCustomEvent+Internal.h" - -@implementation MPBannerCustomEvent (Internal) - -- (void)trackImpressionsIncludedInMarkup -{ - // no-op. -} - -- (void)startViewabilityTracker -{ - // no-op -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.h deleted file mode 100644 index 1f4c08f79..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPBannerCustomEventAdapter.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBaseBannerAdapter.h" - -#import "MPPrivateBannerCustomEventDelegate.h" - -@class MPBannerCustomEvent; - -@interface MPBannerCustomEventAdapter : MPBaseBannerAdapter - -- (instancetype)initWithConfiguration:(MPAdConfiguration *)configuration delegate:(id)delegate; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.m deleted file mode 100644 index eefefc11e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBannerCustomEventAdapter.m +++ /dev/null @@ -1,204 +0,0 @@ -// -// MPBannerCustomEventAdapter.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBannerCustomEventAdapter.h" - -#import "MPAdConfiguration.h" -#import "MPAdTargeting.h" -#import "MPBannerCustomEvent.h" -#import "MPCoreInstanceProvider.h" -#import "MPLogging.h" -#import "MPAdImpressionTimer.h" -#import "MPBannerCustomEvent+Internal.h" - -@interface MPBannerCustomEventAdapter () - -@property (nonatomic, strong) MPBannerCustomEvent *bannerCustomEvent; -@property (nonatomic, strong) MPAdConfiguration *configuration; -@property (nonatomic, assign) BOOL hasTrackedImpression; -@property (nonatomic, assign) BOOL hasTrackedClick; -@property (nonatomic) MPAdImpressionTimer *impressionTimer; -@property (nonatomic) UIView *adView; - -- (void)trackClickOnce; - -@end - -@implementation MPBannerCustomEventAdapter - -- (instancetype)initWithConfiguration:(MPAdConfiguration *)configuration delegate:(id)delegate -{ - if (!configuration.customEventClass) { - return nil; - } - return [self initWithDelegate:delegate]; -} - -- (void)unregisterDelegate -{ - if ([self.bannerCustomEvent respondsToSelector:@selector(invalidate)]) { - // Secret API to allow us to detach the custom event from (shared instance) routers synchronously - [self.bannerCustomEvent performSelector:@selector(invalidate)]; - } - self.bannerCustomEvent.delegate = nil; - - // make sure the custom event isn't released synchronously as objects owned by the custom event - // may do additional work after a callback that results in unregisterDelegate being called - [[MPCoreInstanceProvider sharedProvider] keepObjectAliveForCurrentRunLoopIteration:_bannerCustomEvent]; - - [super unregisterDelegate]; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting containerSize:(CGSize)size -{ - MPLogInfo(@"Looking for custom event class named %@.", configuration.customEventClass); - self.configuration = configuration; - - MPBannerCustomEvent *customEvent = [[configuration.customEventClass alloc] init]; - if (![customEvent isKindOfClass:[MPBannerCustomEvent class]]) { - MPLogError(@"**** Custom Event Class: %@ does not extend MPBannerCustomEvent ****", NSStringFromClass(configuration.customEventClass)); - [self.delegate adapter:self didFailToLoadAdWithError:nil]; - return; - } - - - self.bannerCustomEvent = customEvent; - self.bannerCustomEvent.delegate = self; - self.bannerCustomEvent.localExtras = targeting.localExtras; - [self.bannerCustomEvent requestAdWithSize:size customEventInfo:configuration.customEventClassData adMarkup:configuration.advancedBidPayload]; -} - -- (void)rotateToOrientation:(UIInterfaceOrientation)newOrientation -{ - [self.bannerCustomEvent rotateToOrientation:newOrientation]; -} - -- (void)didDisplayAd -{ - if([self shouldTrackImpressionOnDisplay]) { - [self trackImpressionOnDisplay]; - } else if (self.configuration.visibleImpressionTrackingEnabled) { - [self startViewableTrackingTimer]; - } else { - // Mediated networks except Google AdMob - // no-op here. - } - - [self.bannerCustomEvent didDisplayAd]; -} - -#pragma mark - 1px impression tracking methods - -- (void)trackImpressionOnDisplay -{ - self.hasTrackedImpression = YES; - [self trackImpression]; -} - -- (void)startViewableTrackingTimer -{ - self.impressionTimer = [[MPAdImpressionTimer alloc] initWithRequiredSecondsForImpression:self.configuration.impressionMinVisibleTimeInSec requiredViewVisibilityPixels:self.configuration.impressionMinVisiblePixels]; - self.impressionTimer.delegate = self; - [self.impressionTimer startTrackingView:self.adView]; -} - - -- (BOOL)shouldTrackImpressionOnDisplay { - if (self.configuration.visibleImpressionTrackingEnabled) { - return NO; - } - if([self.bannerCustomEvent enableAutomaticImpressionAndClickTracking] && !self.hasTrackedImpression) { - return YES; - } - return NO; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -#pragma mark - MPPrivateBannerCustomEventDelegate - -- (NSString *)adUnitId -{ - return [self.delegate banner].adUnitId; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (id)bannerDelegate -{ - return [self.delegate bannerDelegate]; -} - -- (CLLocation *)location -{ - return [self.delegate location]; -} - -- (void)bannerCustomEvent:(MPBannerCustomEvent *)event didLoadAd:(UIView *)ad -{ - [self didStopLoading]; - if (ad) { - self.adView = ad; - [self.delegate adapter:self didFinishLoadingAd:ad]; - } else { - [self.delegate adapter:self didFailToLoadAdWithError:nil]; - } -} - -- (void)bannerCustomEvent:(MPBannerCustomEvent *)event didFailToLoadAdWithError:(NSError *)error -{ - [self didStopLoading]; - [self.delegate adapter:self didFailToLoadAdWithError:error]; -} - -- (void)bannerCustomEventWillBeginAction:(MPBannerCustomEvent *)event -{ - [self trackClickOnce]; - [self.delegate userActionWillBeginForAdapter:self]; -} - -- (void)bannerCustomEventDidFinishAction:(MPBannerCustomEvent *)event -{ - [self.delegate userActionDidFinishForAdapter:self]; -} - -- (void)bannerCustomEventWillLeaveApplication:(MPBannerCustomEvent *)event -{ - [self trackClickOnce]; - [self.delegate userWillLeaveApplicationFromAdapter:self]; -} - -- (void)trackClickOnce -{ - if ([self.bannerCustomEvent enableAutomaticImpressionAndClickTracking] && !self.hasTrackedClick) { - self.hasTrackedClick = YES; - [self trackClick]; - } -} - -#pragma mark - MPAdImpressionTimerDelegate - -- (void)adViewWillLogImpression:(UIView *)adView -{ - // Track impression for all impression trackers known by the SDK - [self trackImpression]; - // Track impression for all impression trackers included in the markup - [self.bannerCustomEvent trackImpressionsIncludedInMarkup]; - // Start viewability tracking - [self.bannerCustomEvent startViewabilityTracker]; - - // Notify delegate that an impression tracker was fired - [self.delegate adapter:self didTrackImpressionForAd:adView]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.h deleted file mode 100644 index 59c0513b9..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.h +++ /dev/null @@ -1,86 +0,0 @@ -// -// MPBaseBannerAdapter.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPAdView.h" - -@protocol MPBannerAdapterDelegate; -@class MPAdConfiguration; -@class MPAdTargeting; - -@interface MPBaseBannerAdapter : NSObject - -@property (nonatomic, weak) id delegate; -@property (nonatomic, copy) NSURL *impressionTrackingURL; -@property (nonatomic, copy) NSURL *clickTrackingURL; - -- (instancetype)initWithDelegate:(id)delegate; - -/* - * Sets the adapter's delegate to nil. - */ -- (void)unregisterDelegate; - -/* - * -_getAdWithConfiguration creates a strong reference to self before calling - * -getAdWithConfiguration to prevent the adapter from being prematurely deallocated. - */ -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting containerSize:(CGSize)size; -- (void)_getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting containerSize:(CGSize)size; - -- (void)didStopLoading; -- (void)didDisplayAd; - -/* - * Your subclass should implement this method if your native ads vary depending on orientation. - */ -- (void)rotateToOrientation:(UIInterfaceOrientation)newOrientation; - -- (void)trackImpression; - -- (void)trackClick; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@protocol MPBannerAdapterDelegate - -@required - -- (MPAdView *)banner; -- (id)bannerDelegate; -- (UIViewController *)viewControllerForPresentingModalView; -- (MPNativeAdOrientation)allowedNativeAdsOrientation; -- (CLLocation *)location; - -/* - * These callbacks notify you that the adapter (un)successfully loaded an ad. - */ -- (void)adapter:(MPBaseBannerAdapter *)adapter didFailToLoadAdWithError:(NSError *)error; -- (void)adapter:(MPBaseBannerAdapter *)adapter didFinishLoadingAd:(UIView *)ad; - -/* - * These callbacks notify you that the user interacted (or stopped interacting) with the native ad. - */ -- (void)userActionWillBeginForAdapter:(MPBaseBannerAdapter *)adapter; -- (void)userActionDidFinishForAdapter:(MPBaseBannerAdapter *)adapter; - -/* - * This callback notifies you that user has tapped on an ad which will cause them to leave the - * current application (e.g. the ad action opens the iTunes store, Mobile Safari, etc). - */ -- (void)userWillLeaveApplicationFromAdapter:(MPBaseBannerAdapter *)adapter; - -/** - * Fires when the impression tracker has been sent. - */ -- (void)adapter:(MPBaseBannerAdapter *)adapter didTrackImpressionForAd:(UIView *)ad; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.m deleted file mode 100644 index 1128543a4..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPBaseBannerAdapter.m +++ /dev/null @@ -1,120 +0,0 @@ -// -// MPBaseBannerAdapter.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBaseBannerAdapter.h" -#import "MPConstants.h" - -#import "MPAdConfiguration.h" -#import "MPLogging.h" -#import "MPCoreInstanceProvider.h" -#import "MPAnalyticsTracker.h" -#import "MPTimer.h" -#import "MPError.h" - -@interface MPBaseBannerAdapter () - -@property (nonatomic, strong) MPAdConfiguration *configuration; -@property (nonatomic, strong) MPTimer *timeoutTimer; - -- (void)startTimeoutTimer; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPBaseBannerAdapter - -- (instancetype)initWithDelegate:(id)delegate -{ - if (self = [super init]) { - self.delegate = delegate; - } - return self; -} - -- (void)dealloc -{ - [self unregisterDelegate]; - [self.timeoutTimer invalidate]; -} - -- (void)unregisterDelegate -{ - self.delegate = nil; -} - -#pragma mark - Requesting Ads - -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting containerSize:(CGSize)size -{ - // To be implemented by subclasses. - [self doesNotRecognizeSelector:_cmd]; -} - -- (void)_getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting containerSize:(CGSize)size -{ - self.configuration = configuration; - - [self startTimeoutTimer]; - [self getAdWithConfiguration:configuration targeting:targeting containerSize:size]; -} - -- (void)didStopLoading -{ - [self.timeoutTimer invalidate]; -} - -- (void)didDisplayAd -{ - [self trackImpression]; -} - -- (void)startTimeoutTimer -{ - NSTimeInterval timeInterval = (self.configuration && self.configuration.adTimeoutInterval >= 0) ? - self.configuration.adTimeoutInterval : BANNER_TIMEOUT_INTERVAL; - - if (timeInterval > 0) { - self.timeoutTimer = [[MPCoreInstanceProvider sharedProvider] buildMPTimerWithTimeInterval:timeInterval - target:self - selector:@selector(timeout) - repeats:NO]; - - [self.timeoutTimer scheduleNow]; - } -} - -- (void)timeout -{ - NSError * error = [MOPUBError errorWithCode:MOPUBErrorAdRequestTimedOut - localizedDescription:@"Banner ad request timed out"]; - [self.delegate adapter:self didFailToLoadAdWithError:error]; -} - -#pragma mark - Rotation - -- (void)rotateToOrientation:(UIInterfaceOrientation)newOrientation -{ - // Do nothing by default. Subclasses can override. - MPLogDebug(@"rotateToOrientation %d called for adapter %@ (%p)", - newOrientation, NSStringFromClass([self class]), self); -} - -#pragma mark - Metrics - -- (void)trackImpression -{ - [[MPAnalyticsTracker sharedTracker] trackImpressionForConfiguration:self.configuration]; -} - -- (void)trackClick -{ - [[MPAnalyticsTracker sharedTracker] trackClickForConfiguration:self.configuration]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPPrivateBannerCustomEventDelegate.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPPrivateBannerCustomEventDelegate.h deleted file mode 100644 index a2d548f82..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Banners/MPPrivateBannerCustomEventDelegate.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MPPrivateBannerCustomEventDelegate.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPBannerCustomEventDelegate.h" - -@class MPAdConfiguration; - -@protocol MPPrivateBannerCustomEventDelegate - -- (NSString *)adUnitId; -- (MPAdConfiguration *)configuration; -- (id)bannerDelegate; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.h deleted file mode 100644 index eb64f431d..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// MPAdAlertGestureRecognizer.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -extern NSInteger const kMPAdAlertGestureMaxAllowedYAxisMovement; - -typedef enum -{ - MPAdAlertGestureRecognizerState_ZigRight1, - MPAdAlertGestureRecognizerState_ZagLeft2, - MPAdAlertGestureRecognizerState_Recognized -} MPAdAlertGestureRecognizerState; - -@interface MPAdAlertGestureRecognizer : UIGestureRecognizer - -// default is 4 -@property (nonatomic, assign) NSInteger numZigZagsForRecognition; - -// default is 100 -@property (nonatomic, assign) CGFloat minTrackedDistanceForZigZag; - -@property (nonatomic, readonly) MPAdAlertGestureRecognizerState currentAlertGestureState; -@property (nonatomic, readonly) CGPoint inflectionPoint; -@property (nonatomic, readonly) BOOL thresholdReached; -@property (nonatomic, readonly) NSInteger curNumZigZags; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.m deleted file mode 100644 index 339bb1247..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertGestureRecognizer.m +++ /dev/null @@ -1,230 +0,0 @@ -// -// MPAdAlertGestureRecognizer.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdAlertGestureRecognizer.h" - -#import - -#define kMaxRequiredTrackedDistance 100 -#define kDefaultMinTrackedDistance 100 -#define kDefaultNumZigZagsForRecognition 4 - -NSInteger const kMPAdAlertGestureMaxAllowedYAxisMovement = 50; - -@interface MPAdAlertGestureRecognizer () - -@property (nonatomic, assign) MPAdAlertGestureRecognizerState currentAlertGestureState; -@property (nonatomic, assign) CGPoint inflectionPoint; -@property (nonatomic, assign) CGPoint startingPoint; -@property (nonatomic, assign) BOOL thresholdReached; -@property (nonatomic, assign) NSInteger curNumZigZags; - -@end - -@implementation MPAdAlertGestureRecognizer - -@synthesize currentAlertGestureState = _currentAlertGestureState; -@synthesize inflectionPoint = _inflectionPoint; -@synthesize thresholdReached = _thresholdReached; -@synthesize curNumZigZags = _curNumZigZags; -@synthesize numZigZagsForRecognition = _numZigZagsForRecognition; -@synthesize minTrackedDistanceForZigZag = _minTrackedDistanceForZigZag; - -- (id)init -{ - self = [super init]; - if (self != nil) { - [self commonInit]; - } - - return self; -} - -- (id)initWithTarget:(id)target action:(SEL)action -{ - self = [super initWithTarget:target action:action]; - if (self != nil) { - [self commonInit]; - } - - return self; -} - -- (void)commonInit -{ - self.minTrackedDistanceForZigZag = kDefaultMinTrackedDistance; - self.numZigZagsForRecognition = kDefaultNumZigZagsForRecognition; - [self resetToInitialState]; -} - -- (void)setMinTrackedDistanceForZigZag:(CGFloat)minTrackedDistanceForZigZag -{ - if (_minTrackedDistanceForZigZag != minTrackedDistanceForZigZag) { - _minTrackedDistanceForZigZag = MIN(minTrackedDistanceForZigZag, kMaxRequiredTrackedDistance); - } -} - -#pragma mark Required Overrides - -- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event -{ - [super touchesBegan:touches withEvent:event]; - if ([touches count] != 1) { - self.state = UIGestureRecognizerStateFailed; - return; - } - - CGPoint nowPoint = [touches.anyObject locationInView:self.view]; - self.inflectionPoint = nowPoint; - self.startingPoint = nowPoint; -} - -- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event -{ - [super touchesMoved:touches withEvent:event]; - - if (self.state == UIGestureRecognizerStateFailed) { - return; - } - - [self updateAlertGestureStateWithTouches:touches]; -} - -- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event -{ - [super touchesEnded:touches withEvent:event]; - - if ((self.state == UIGestureRecognizerStatePossible) && self.currentAlertGestureState == MPAdAlertGestureRecognizerState_Recognized) { - self.state = UIGestureRecognizerStateRecognized; - } - - [self resetToInitialState]; -} - -- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event -{ - [super touchesCancelled:touches withEvent:event]; - - [self resetToInitialState]; - - self.state = UIGestureRecognizerStateFailed; -} - -- (void)reset -{ - [super reset]; - - [self resetToInitialState]; -} - -- (void)resetToInitialState -{ - self.currentAlertGestureState = MPAdAlertGestureRecognizerState_ZigRight1; - self.inflectionPoint = CGPointZero; - self.startingPoint = CGPointZero; - self.thresholdReached = NO; - self.curNumZigZags = 0; -} - -#pragma mark State Transitions - -- (void)handleZigRightGestureStateWithTouches:(NSSet *)touches -{ - CGPoint nowPoint = [touches.anyObject locationInView:self.view]; - CGPoint prevPoint = [touches.anyObject previousLocationInView:self.view]; - - // first zig must be to the right, x must increase - // if the touch has covered enough distance, then we're ready to move on to the next state - if (nowPoint.x > prevPoint.x && nowPoint.x - self.inflectionPoint.x >= self.minTrackedDistanceForZigZag) { - self.thresholdReached = YES; - } else if (nowPoint.x < prevPoint.x) { - // user has changed touch direction - if (self.thresholdReached) { - self.inflectionPoint = nowPoint; - self.currentAlertGestureState = MPAdAlertGestureRecognizerState_ZagLeft2; - self.thresholdReached = NO; - } else { - // the user changed directions before covering the required distance, fail - self.state = UIGestureRecognizerStateFailed; - } - } - // else remain in the current state and continue tracking finger movement -} - -- (void)handleZagLeftGestureStateWithTouches:(NSSet *)touches -{ - CGPoint nowPoint = [touches.anyObject locationInView:self.view]; - CGPoint prevPoint = [touches.anyObject previousLocationInView:self.view]; - - // zag to the left, x must decrease - // if the touch has covered enough distance, then we're ready to move on to the next state - if (nowPoint.x < prevPoint.x && self.inflectionPoint.x - nowPoint.x >= self.minTrackedDistanceForZigZag) { - BOOL prevThresholdState = self.thresholdReached; - self.thresholdReached = YES; - - // increment once, and only once, after we hit the threshold for the zag - if (prevThresholdState != self.thresholdReached) { - self.curNumZigZags++; - } - - if (self.curNumZigZags >= self.numZigZagsForRecognition) { - self.currentAlertGestureState = MPAdAlertGestureRecognizerState_Recognized; - } - } else if (nowPoint.x > prevPoint.x) { - // user has changed touch direction - if (self.thresholdReached) { - self.inflectionPoint = nowPoint; - self.currentAlertGestureState = MPAdAlertGestureRecognizerState_ZigRight1; - self.thresholdReached = NO; - } else { - // the user changed directions before covering the required distance, fail - self.state = UIGestureRecognizerStateFailed; - } - } - // else remain in the current state and continue tracking finger movement -} - -- (void)updateAlertGestureStateWithTouches:(NSSet *)touches -{ - // fail gesture recognition if the touch moves outside of our defined bounds - if (![self touchIsWithinBoundsForTouches:touches] && self.currentAlertGestureState != MPAdAlertGestureRecognizerState_Recognized) { - self.state = UIGestureRecognizerStateFailed; - return; - } - - switch (self.currentAlertGestureState) { - case MPAdAlertGestureRecognizerState_ZigRight1: - [self handleZigRightGestureStateWithTouches:touches]; - - break; - case MPAdAlertGestureRecognizerState_ZagLeft2: - [self handleZagLeftGestureStateWithTouches:touches]; - - break; - default: - break; - } -} - -- (BOOL)validYAxisMovementForTouches:(NSSet *)touches -{ - CGPoint nowPoint = [touches.anyObject locationInView:self.view]; - - return fabs(nowPoint.y - self.startingPoint.y) <= kMPAdAlertGestureMaxAllowedYAxisMovement; -} - -- (BOOL)touchIsWithinBoundsForTouches:(NSSet *)touches -{ - CGPoint nowPoint = [touches.anyObject locationInView:self.view]; - - // 1. use self.view.bounds because locationInView converts to self.view's coordinate system - // 2. ensure user doesn't stray too far in the Y-axis - return CGRectContainsPoint(self.view.bounds, nowPoint) && [self validYAxisMovementForTouches:touches]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.h deleted file mode 100644 index ffc686474..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// MPAdAlertManager.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPGlobal.h" - -@class CLLocation; -@protocol MPAdAlertManagerDelegate; - -@class MPAdConfiguration; - -@interface MPAdAlertManager : NSObject - -@end - -@protocol MPAdAlertManagerDelegate - -@required -- (UIViewController *)viewControllerForPresentingMailVC; -- (void)adAlertManagerDidTriggerAlert:(MPAdAlertManager *)manager; - -@optional -- (void)adAlertManagerDidProcessAlert:(MPAdAlertManager *)manager; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.m deleted file mode 100644 index b517f972b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/AdAlerts/MPAdAlertManager.m +++ /dev/null @@ -1,232 +0,0 @@ -// -// MPAdAlertManager.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdAlertManager.h" -#import "MPAdConfiguration.h" -#import "MPAdAlertGestureRecognizer.h" -#import "MPLogging.h" -#import "MPIdentityProvider.h" -#import "MPCoreInstanceProvider.h" -#import "MPLastResortDelegate.h" - -#import -#import -#import - -#define kTimestampParamKey @"timestamp" - -@interface MPAdAlertManager () - -@property (nonatomic, assign) BOOL processedAlert; -@property (nonatomic, strong) MPAdAlertGestureRecognizer *adAlertGestureRecognizer; -@property (nonatomic, strong) MFMailComposeViewController *currentOpenMailVC; - -@end - -@implementation MPAdAlertManager - -@synthesize delegate = _delegate; -@synthesize adConfiguration = _adConfiguration; -@synthesize processedAlert = _processedAlert; -@synthesize adAlertGestureRecognizer = _adAlertGestureRecognizer; -@synthesize adUnitId = _adUnitId; -@synthesize targetAdView = _targetAdView; -@synthesize location = _location; -@synthesize currentOpenMailVC = _currentOpenMailVC; - -- (id)init -{ - self = [super init]; - if (self != nil) { - self.adAlertGestureRecognizer = [[MPCoreInstanceProvider sharedProvider] buildMPAdAlertGestureRecognizerWithTarget:self - action:@selector(handleAdAlertGesture)]; - self.adAlertGestureRecognizer.delegate = self; - self.processedAlert = NO; - } - - return self; -} - -- (void)dealloc -{ - [_targetAdView removeGestureRecognizer:_adAlertGestureRecognizer]; - [_adAlertGestureRecognizer removeTarget:self action:nil]; - _adAlertGestureRecognizer.delegate = nil; - _currentOpenMailVC.mailComposeDelegate = [MPLastResortDelegate sharedDelegate]; -} - -- (void)processAdAlert -{ - static NSDateFormatter *dateFormatter = nil; - - MPLogInfo(@"MPAdAlertManager processing ad alert"); - - // don't even try if this device can't send emails - if (![MFMailComposeViewController canSendMail]) { - if ([self.delegate respondsToSelector:@selector(adAlertManagerDidProcessAlert:)]) { - [self.delegate adAlertManagerDidProcessAlert:self]; - } - - return; - } - - // since iOS 4, drawing an image to a graphics context is thread-safe - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - // take screenshot of the ad - UIGraphicsBeginImageContextWithOptions(self.targetAdView.bounds.size, YES, 0.0); - [self.targetAdView.layer renderInContext:UIGraphicsGetCurrentContext()]; - - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - - dispatch_async(dispatch_get_main_queue(), ^{ - // package additional ad data - NSMutableDictionary *params = [NSMutableDictionary dictionary]; - - [params setValue:@"iOS" forKey:@"platform"]; - [params setValue:[UIDevice currentDevice].systemVersion forKey:@"platform_version"]; - [params setValue:[MPIdentityProvider identifier] forKey:@"device_id"]; - [params setValue:[UIDevice currentDevice].model forKey:@"device_model"]; - [params setValue:[NSNumber numberWithInteger:self.adConfiguration.adType] forKey:@"ad_type"]; - [params setValue:self.adUnitId forKey:@"ad_unit_id"]; - [params setValue:self.adConfiguration.dspCreativeId forKey:@"creative_id"]; - [params setValue:self.adConfiguration.networkType forKey:@"network_type"]; - [params setValue:[[NSLocale currentLocale] localeIdentifier] forKey:@"device_locale"]; - [params setValue:[self.location description] forKey:@"location"]; - [params setValue:MP_SDK_VERSION forKey:@"sdk_version"]; - - if (self.adConfiguration.hasPreferredSize) { - [params setValue:NSStringFromCGSize(self.adConfiguration.preferredSize) forKey:@"ad_size"]; - } - - if (dateFormatter == nil) { - dateFormatter = [[NSDateFormatter alloc] init]; - [dateFormatter setTimeStyle:NSDateFormatterLongStyle]; - [dateFormatter setDateStyle:NSDateFormatterShortStyle]; - } - [params setValue:[dateFormatter stringFromDate:self.adConfiguration.creationTimestamp] forKey:kTimestampParamKey]; - - [self processAdParams:params andScreenshot:image]; - - MPLogInfo(@"MPAdAlertManager finished processing ad alert"); - }); - }); -} - -- (void)handleAdAlertGesture -{ - MPLogInfo(@"MPAdAlertManager alert gesture recognized"); - - [self.delegate adAlertManagerDidTriggerAlert:self]; -} - -- (void)processAdParams:(NSDictionary *)params andScreenshot:(UIImage *)screenshot -{ - NSData *imageData = UIImagePNGRepresentation(screenshot); - NSData *paramData =[[self stringFromDictionary:params] dataUsingEncoding:NSUTF8StringEncoding]; - NSData *markupData = self.adConfiguration.adResponseData; - - self.currentOpenMailVC = [[MFMailComposeViewController alloc] init]; - self.currentOpenMailVC.mailComposeDelegate = self; - - [self.currentOpenMailVC setToRecipients:[NSArray arrayWithObject:@"creative-review@mopub.com"]]; - [self.currentOpenMailVC setSubject:[NSString stringWithFormat:@"New creative violation report - %@", [params objectForKey:kTimestampParamKey]]]; - [self.currentOpenMailVC setMessageBody:@"" isHTML:YES]; - - if (imageData != nil) { - [self.currentOpenMailVC addAttachmentData:imageData mimeType:@"image/png" fileName:@"mp_adalert_screenshot.png"]; - } - - if (paramData != nil) { - [self.currentOpenMailVC addAttachmentData:paramData mimeType:@"text/plain" fileName:@"mp_adalert_parameters.txt"]; - } - - if (markupData != nil) { - [self.currentOpenMailVC addAttachmentData:markupData mimeType:@"text/html" fileName:@"mp_adalert_markup.html"]; - } - - [[self.delegate viewControllerForPresentingMailVC] presentViewController:self.currentOpenMailVC animated:MP_ANIMATED completion:nil]; - - if ([self.delegate respondsToSelector:@selector(adAlertManagerDidProcessAlert:)]) { - [self.delegate adAlertManagerDidProcessAlert:self]; - } -} - -// could just use [dictionary description], but this gives us more control over the output -- (NSString *)stringFromDictionary:(NSDictionary *)dictionary -{ - NSMutableString *result = [NSMutableString string]; - - for (NSString *key in [dictionary allKeys]) { - [result appendFormat:@"%@ : %@\n", key, [dictionary objectForKey:key]]; - } - - return result; -} - -#pragma mark - - -- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error -{ - self.currentOpenMailVC = nil; - - // reset processed state to allow the user to alert on this ad again - if (result == MFMailComposeResultCancelled || result == MFMailComposeResultFailed) { - self.processedAlert = NO; - } - - [[self.delegate viewControllerForPresentingMailVC] dismissViewControllerAnimated:MP_ANIMATED completion:nil]; -} - -#pragma mark - Public - -- (void)beginMonitoringAlerts -{ - [self endMonitoringAlerts]; - - [self.targetAdView addGestureRecognizer:self.adAlertGestureRecognizer]; - - // dynamically set minimum tracking distance to account for all ad sizes - self.adAlertGestureRecognizer.minTrackedDistanceForZigZag = self.targetAdView.bounds.size.width / 3; - - self.processedAlert = NO; -} - -- (void)endMonitoringAlerts -{ - [self.targetAdView removeGestureRecognizer:self.adAlertGestureRecognizer]; -} - -- (void)processAdAlertOnce -{ - if (self.processedAlert) { - return; - } - - self.processedAlert = YES; - - [self processAdAlert]; -} - -#pragma mark - - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch -{ - if ([touch.view isKindOfClass:[UIButton class]]) { - // we touched a button - return NO; // ignore the touch - } - return YES; // handle the touch -} - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer; -{ - return YES; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAPIEndpoints.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAPIEndpoints.h deleted file mode 100644 index afc1cddc6..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAPIEndpoints.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MPAPIEndpoints.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#define MOPUB_API_PATH_AD_REQUEST @"/m/ad" -#define MOPUB_API_PATH_NATIVE_POSITIONING @"/m/pos" -#define MOPUB_API_PATH_OPEN @"/m/open" -#define MOPUB_API_PATH_CONSENT_DIALOG @"/m/gdpr_consent_dialog" -#define MOPUB_API_PATH_CONSENT_SYNC @"/m/gdpr_sync" - -@interface MPAPIEndpoints : NSObject - -@property (nonatomic, copy, class) NSString * baseHostname; -@property (nonatomic, copy, readonly, class) NSString * baseURL; - -+ (void)setUsesHTTPS:(BOOL)usesHTTPS; -+ (NSURLComponents *)baseURLComponentsWithPath:(NSString *)path; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAPIEndpoints.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAPIEndpoints.m deleted file mode 100644 index 962640a0c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAPIEndpoints.m +++ /dev/null @@ -1,66 +0,0 @@ -// -// MPAPIEndpoints.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAPIEndpoints.h" -#import "MPConstants.h" -#import "MPCoreInstanceProvider.h" - -// URL scheme constants -static NSString * const kUrlSchemeHttp = @"http"; -static NSString * const kUrlSchemeHttps = @"https"; - -// Base URL constant -static NSString * const kMoPubBaseHostname = @"ads.mopub.com"; - -@implementation MPAPIEndpoints - -#pragma mark - baseHostname property - -static NSString * _baseHostname = nil; -+ (void)setBaseHostname:(NSString *)baseHostname { - _baseHostname = baseHostname; -} - -+ (NSString *)baseHostname { - if (_baseHostname == nil || [_baseHostname isEqualToString:@""]) { - return kMoPubBaseHostname; - } - - return _baseHostname; -} - -#pragma mark - setUsesHTTPS - -static BOOL sUsesHTTPS = YES; -+ (void)setUsesHTTPS:(BOOL)usesHTTPS -{ - sUsesHTTPS = usesHTTPS; -} - -#pragma mark - baseURL - -+ (NSString *)baseURL -{ - if ([[MPCoreInstanceProvider sharedProvider] appTransportSecuritySettings] == MPATSSettingEnabled) { - return [@"https://" stringByAppendingString:self.baseHostname]; - } - - return [@"http://" stringByAppendingString:self.baseHostname]; -} - -+ (NSURLComponents *)baseURLComponentsWithPath:(NSString *)path -{ - NSURLComponents * components = [[NSURLComponents alloc] init]; - components.scheme = (sUsesHTTPS ? kUrlSchemeHttps : kUrlSchemeHttp); - components.host = self.baseHostname; - components.path = path; - - return components; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.h deleted file mode 100644 index 450b6579b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// MPActivityViewControllerHelper+TweetShare.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPActivityViewControllerHelper.h" - -/** - * `TweetShare` category added to MPActivityViewController to add functionality - * for sharing a tweet. - */ - -@interface MPActivityViewControllerHelper (TweetShare) - -/** - * Present the UIActivityViewController as specified by the - * provided URL. - * - * @param URL Instance of NSURL to be used for generating - * the share sheet. Should be of the format: - * mopubshare://tweet?screen_name=&tweet_id= - * - * @return a BOOL indicating whether or not the tweet share url was successfully shown - */ - -- (BOOL)presentActivityViewControllerWithTweetShareURL:(NSURL *)URL; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.m deleted file mode 100644 index 003681a77..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper+TweetShare.m +++ /dev/null @@ -1,72 +0,0 @@ -// -// MPActivityViewControllerHelper+TweetShare.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPActivityViewControllerHelper+TweetShare.h" -#import "MPLogging.h" -#import "NSURL+MPAdditions.h" - -static NSString * const kShareTweetScreenName = @"screen_name"; -static NSString * const kShareTweetId = @"tweet_id"; -static NSString * const kShareTweetURLTemplate = @"https://twitter.com/%@/status/%@"; -static NSString * const kShareTweetMessageTemplate = @"Check out @%@'s Tweet: %@"; - -/** - * MPSharedTweet parses an NSURL and stores the specified screenName and tweetURL. - */ - -@interface MPSharedTweet : NSObject - -@property (nonatomic, readonly) NSString *screenName; -@property (nonatomic, readonly) NSString *tweetURL; - -- (instancetype)initWithShareURL:(NSURL *)URL; - -@end - -@implementation MPSharedTweet - -- (instancetype)initWithShareURL:(NSURL *)URL -{ - self = [super init]; - if (self) { - NSDictionary *queryParamDict = [URL mp_queryAsDictionary]; - id screenName = [queryParamDict objectForKey:kShareTweetScreenName]; - id tweetId = [queryParamDict objectForKey:kShareTweetId]; - - // Fail initialization if the provided URL is not of the correct format. - // Both parameters are required. - if (screenName && tweetId) { - _screenName = screenName; - _tweetURL = [NSString stringWithFormat:kShareTweetURLTemplate, screenName, tweetId]; - } else { - MPLogDebug(@"MPActivityViewControllerHelper+TweetShare - \ - unable to initWithShareURL for share URL: %@. \ - screen_name or tweet_id missing or of the wrong \ - format", [URL absoluteString]); - return nil; - } - } - return self; -} - -@end - -@implementation MPActivityViewControllerHelper (TweetShare) - -- (BOOL)presentActivityViewControllerWithTweetShareURL:(NSURL *)URL -{ - MPSharedTweet *sharedTweet = [[MPSharedTweet alloc] initWithShareURL:URL]; - if (sharedTweet) { - NSString *tweetMessage = [NSString stringWithFormat:kShareTweetMessageTemplate, - sharedTweet.screenName, sharedTweet.tweetURL]; - return [self presentActivityViewControllerWithSubject:tweetMessage body:tweetMessage]; - } - return NO; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.h deleted file mode 100644 index 6256bb53c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.h +++ /dev/null @@ -1,81 +0,0 @@ -// -// MPActivityViewControllerHelper.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@protocol MPActivityViewControllerHelperDelegate; - -/** - * The MPActivityViewControllerHelper provides a wrapper around a UIActvityViewController - * and provides hooks via the MPActivityViewControllerHelperDelegate to handle the - * lifecycle of the underlying UIActivityViewController. - */ - -@interface MPActivityViewControllerHelper : NSObject - -/** - * The delegate (`MPActivityViewControllerHelperDelegate`) of the - * MPActivityViewControllerHelper. - */ - -@property (nonatomic, weak) id delegate; - -/** - * Initializes the MPActivityViewControllerHelper and stores a weak reference - * to the supplied delegate. - * - * @param delegate Optional callback delegate - */ -- (instancetype)initWithDelegate:(id)delegate; - -/** - * Instantiates and displays the underlying UIActivityViewController with the - * the specified `subject` and `body`. - * - * @param subject The subject to be displayed in the UIActivityViewController. - * @param body The body to be displayed in the UIActivityViewController. - * - * @return a BOOL indicating whether or not the UIActivityViewController was successfully shown. - */ -- (BOOL)presentActivityViewControllerWithSubject:(NSString *)subject body:(NSString *)body; - -@end - - -/** - * The delegate of a `MPActivityViewController` must adopt the `MPActivityViewController` - * protocol. It must implement `viewControllerForPresentingActivityViewController` to - * provide a root view controller from which to display content. - * - * Optional methods of this protocol allow the delegate to be notified before - * presenting and after dismissal. - */ -@protocol MPActivityViewControllerHelperDelegate - -@required - -/** - * Asks the delegate for a view controller to use for presenting content. - * - * @return A view controller that should be used for presenting content. - */ -- (UIViewController *)viewControllerForPresentingActivityViewController; - -@optional - -/** - * Sent before the UIActivityViewController is presented. - */ -- (void)activityViewControllerWillPresent; - -/** - * Sent after the UIActivityViewController has been dismissed. - */ -- (void)activityViewControllerDidDismiss; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.m deleted file mode 100644 index c7e7c9016..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPActivityViewControllerHelper.m +++ /dev/null @@ -1,113 +0,0 @@ -// -// MPActivityViewControllerHelper.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPActivityViewControllerHelper.h" - -/** - * MPActivityItemProviderWithSubject subclasses UIActivityItemProvider - * to provide a subject for email activity types. - */ - -@interface MPActivityItemProviderWithSubject : UIActivityItemProvider - -@property (nonatomic, readonly) NSString *subject; -@property (nonatomic, readonly) NSString *body; - -- (instancetype)initWithSubject:(NSString *)subject body:(NSString *)body; - -@end - -@implementation MPActivityItemProviderWithSubject - -- (instancetype)initWithSubject:(NSString *)subject body:(NSString *)body -{ - self = [super initWithPlaceholderItem:body]; - if (self) { - _subject = [subject copy]; - _body = [body copy]; - } - return self; -} - -- (id)item -{ - return self.body; -} - -- (NSString *)activityViewController:(UIActivityViewController *)activityViewController subjectForActivityType:(NSString *)activityType -{ - return self.subject; -} - -@end - -@interface MPActivityViewControllerHelper() - -- (UIActivityViewController *)initializeActivityViewControllerWithSubject:(NSString *)subject body:(NSString *)body; - -@end - -@implementation MPActivityViewControllerHelper - -- (instancetype)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - _delegate = delegate; - } - return self; -} - -- (UIActivityViewController *)initializeActivityViewControllerWithSubject:(NSString *)subject body:(NSString *)body -{ - if (NSClassFromString(@"UIActivityViewController") && NSClassFromString(@"UIActivityItemProvider")) { - MPActivityItemProviderWithSubject *activityItemProvider = - [[MPActivityItemProviderWithSubject alloc] initWithSubject:subject body:body]; - UIActivityViewController *activityViewController = - [[UIActivityViewController alloc] initWithActivityItems:@[activityItemProvider] applicationActivities:nil]; - activityViewController.completionWithItemsHandler = ^(UIActivityType _Nullable activityType, BOOL completed, NSArray * _Nullable returnedItems, NSError * _Nullable activityError) { - if ([self.delegate respondsToSelector:@selector(activityViewControllerDidDismiss)]) { - [self.delegate activityViewControllerDidDismiss]; - } - }; - return activityViewController; - } else { - return nil; - } -} - -- (BOOL)presentActivityViewControllerWithSubject:(NSString *)subject body:(NSString *)body -{ - if (NSClassFromString(@"UIActivityViewController")) { - UIActivityViewController *activityViewController = [self initializeActivityViewControllerWithSubject:subject body:body]; - if (activityViewController) { - if ([self.delegate respondsToSelector:@selector(activityViewControllerWillPresent)]) { - [self.delegate activityViewControllerWillPresent]; - } - - UIUserInterfaceIdiom userInterfaceIdiom = UIDevice.currentDevice.userInterfaceIdiom; - // iPad must present as popover on iOS >= 8 - if (userInterfaceIdiom == UIUserInterfaceIdiomPad) { - if ([activityViewController respondsToSelector:@selector(popoverPresentationController)]) { - activityViewController.popoverPresentationController.sourceView = - [self.delegate viewControllerForPresentingActivityViewController].view; - } - } - - UIViewController *viewController = [self.delegate viewControllerForPresentingActivityViewController]; - [viewController presentViewController:activityViewController - animated:YES - completion:nil]; - return YES; - } - } - - return NO; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdBrowserController.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdBrowserController.h deleted file mode 100644 index d209a7f1e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdBrowserController.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// MPAdBrowserController.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPWebView.h" - -#ifndef CF_RETURNS_RETAINED -#if __has_feature(attribute_cf_returns_retained) -#define CF_RETURNS_RETAINED __attribute__((cf_returns_retained)) -#else -#define CF_RETURNS_RETAINED -#endif -#endif - -@class MPAdConfiguration; - -@protocol MPAdBrowserControllerDelegate; - -@interface MPAdBrowserController : UIViewController - -@property (nonatomic, strong) IBOutlet MPWebView *webView; -@property (nonatomic, strong) IBOutlet UIBarButtonItem *backButton; -@property (nonatomic, strong) IBOutlet UIBarButtonItem *forwardButton; -@property (nonatomic, strong) IBOutlet UIBarButtonItem *refreshButton; -@property (nonatomic, strong) IBOutlet UIBarButtonItem *safariButton; -@property (nonatomic, strong) IBOutlet UIBarButtonItem *doneButton; -@property (nonatomic, strong) IBOutlet UIBarButtonItem *spinnerItem; -@property (nonatomic, strong) UIActivityIndicatorView *spinner; - -@property (nonatomic, weak) id delegate; -@property (nonatomic, copy) NSURL *URL; - -- (instancetype)initWithURL:(NSURL *)URL HTMLString:(NSString *)HTMLString delegate:(id)delegate; -- (instancetype)initWithURL:(NSURL *)URL delegate:(id)delegate; - -// Navigation methods. -- (IBAction)back; -- (IBAction)forward; -- (IBAction)refresh; -- (IBAction)safari; -- (IBAction)done; - -// Drawing methods. -- (CGContextRef)createContext CF_RETURNS_RETAINED; -- (UIImage *)backArrowImage; -- (UIImage *)forwardArrowImage; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@protocol MPAdBrowserControllerDelegate - -- (void)dismissBrowserController:(MPAdBrowserController *)browserController animated:(BOOL)animated; - -@optional - -- (MPAdConfiguration *)adConfiguration; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdBrowserController.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdBrowserController.m deleted file mode 100644 index f00a3123c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdBrowserController.m +++ /dev/null @@ -1,345 +0,0 @@ -// -// MPAdBrowserController.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdBrowserController.h" -#import "MPLogging.h" -#import "MPAdConfiguration.h" -#import "MPAPIEndpoints.h" -#import "NSBundle+MPAdditions.h" -#import "MPURLRequest.h" - -static NSString * const kAdBrowserControllerNibName = @"MPAdBrowserController"; - -@interface MPAdBrowserController () - -@property (weak, nonatomic) IBOutlet UINavigationBar *navigationBar; -@property (weak, nonatomic) IBOutlet NSLayoutConstraint *navigationBarYConstraint; - -@property (weak, nonatomic) IBOutlet UIToolbar *browserControlToolbar; -@property (weak, nonatomic) IBOutlet NSLayoutConstraint *browserControlToolbarBottomConstraint; - -@property (weak, nonatomic) IBOutlet NSLayoutConstraint *webViewTopConstraint; -@property (weak, nonatomic) IBOutlet NSLayoutConstraint *webViewLeadingConstraint; -@property (weak, nonatomic) IBOutlet NSLayoutConstraint *webViewTrailingConstraint; - -@property (nonatomic, strong) UIActionSheet *actionSheet; -@property (nonatomic, strong) NSString *HTMLString; -@property (nonatomic, assign) int webViewLoadCount; - -- (void)dismissActionSheet; - -@end - -@implementation MPAdBrowserController - -#pragma mark - -#pragma mark Lifecycle - -- (instancetype)initWithURL:(NSURL *)URL HTMLString:(NSString *)HTMLString delegate:(id)delegate -{ - if (self = [super initWithNibName:kAdBrowserControllerNibName bundle:[NSBundle resourceBundleForClass:self.class]]) - { - self.delegate = delegate; - self.URL = URL; - self.HTMLString = HTMLString; - - MPLogDebug(@"Ad browser (%p) initialized with URL: %@", self, self.URL); - - self.spinner = [[UIActivityIndicatorView alloc] initWithFrame:CGRectZero]; - [self.spinner sizeToFit]; - self.spinner.hidesWhenStopped = YES; - - self.webViewLoadCount = 0; - } - return self; -} - -- (instancetype)initWithURL:(NSURL *)URL delegate:(id)delegate { - return [self initWithURL:URL - HTMLString:nil - delegate:delegate]; -} - -- (void)dealloc -{ - self.webView.delegate = nil; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - // Set web view delegate - self.webView.delegate = self; - self.webView.scalesPageToFit = YES; - - // Set up toolbar buttons - self.backButton.image = [self backArrowImage]; - self.backButton.title = nil; - self.forwardButton.image = [self forwardArrowImage]; - self.forwardButton.title = nil; - self.spinnerItem.customView = self.spinner; - self.spinnerItem.title = nil; - - // If iOS 11, set up autolayout constraints so that the toolbar and web view stay within the safe area - // Note: The web view has to be constrained to the safe area on top for the notch in Portait and leading/trailing - // for the notch in Landscape. Only the bottom of the toolbar needs to be constrained because Apple will move - // the buttons into the safe area automatically in Landscape, and otherwise it's preferable for the toolbar to - // stretch the length of the unsafe area as well. - if (@available(iOS 11, *)) { - // Disable the old constraints - self.navigationBarYConstraint.active = NO; - self.browserControlToolbarBottomConstraint.active = NO; - self.webViewTopConstraint.active = NO; - self.webViewLeadingConstraint.active = NO; - self.webViewTrailingConstraint.active = NO; - - // Set new constraints based on the safe area layout guide - self.navigationBarYConstraint = [self.navigationBar.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor]; // put nav bar just above safe area - self.browserControlToolbarBottomConstraint = [self.browserControlToolbar.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor]; - self.webViewTopConstraint = [self.webView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor]; - self.webViewLeadingConstraint = [self.webView.leadingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.leadingAnchor]; - self.webViewTrailingConstraint = [self.webView.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor]; - - // Enable the new constraints - [NSLayoutConstraint activateConstraints:@[ - self.navigationBarYConstraint, - self.browserControlToolbarBottomConstraint, - self.webViewTopConstraint, - self.webViewLeadingConstraint, - self.webViewTrailingConstraint, - ]]; - } - - // Set web view background color to white so scrolling at extremes won't have a gray background - self.webView.backgroundColor = [UIColor whiteColor]; -} - -- (void)viewWillAppear:(BOOL)animated -{ - [super viewWillAppear:animated]; - - // Set button enabled status. - self.backButton.enabled = self.webView.canGoBack; - self.forwardButton.enabled = self.webView.canGoForward; - self.refreshButton.enabled = NO; - self.safariButton.enabled = NO; -} - -- (void)viewDidAppear:(BOOL)animated -{ - [super viewDidAppear:animated]; - - NSURL *baseURL = (self.URL != nil) ? self.URL : [NSURL URLWithString:[MPAPIEndpoints baseURL]]; - - if (self.HTMLString) { - [self.webView loadHTMLString:self.HTMLString baseURL:baseURL]; - } else { - [self.webView loadRequest:[MPURLRequest requestWithURL:self.URL]]; - } -} - -- (void)viewWillDisappear:(BOOL)animated -{ - [self.webView stopLoading]; - [super viewWillDisappear:animated]; -} - -#pragma mark - Hidding status bar (iOS 7 and above) - -- (BOOL)prefersStatusBarHidden -{ - return YES; -} - -#pragma mark - -#pragma mark Navigation - -- (IBAction)refresh -{ - [self dismissActionSheet]; - [self.webView reload]; -} - -- (IBAction)done -{ - [self dismissActionSheet]; - if (self.delegate) { - [self.delegate dismissBrowserController:self animated:MP_ANIMATED]; - } else { - [self dismissViewControllerAnimated:MP_ANIMATED completion:nil]; - } -} - -- (IBAction)back -{ - [self dismissActionSheet]; - [self.webView goBack]; - self.backButton.enabled = self.webView.canGoBack; - self.forwardButton.enabled = self.webView.canGoForward; -} - -- (IBAction)forward -{ - [self dismissActionSheet]; - [self.webView goForward]; - self.backButton.enabled = self.webView.canGoBack; - self.forwardButton.enabled = self.webView.canGoForward; -} - -- (IBAction)safari -{ - if (self.actionSheet) { - [self dismissActionSheet]; - } else { - self.actionSheet = [[UIActionSheet alloc] initWithTitle:nil - delegate:self - cancelButtonTitle:@"Cancel" - destructiveButtonTitle:nil - otherButtonTitles:@"Open in Safari", nil]; - - if ([UIActionSheet instancesRespondToSelector:@selector(showFromBarButtonItem:animated:)]) { - [self.actionSheet showFromBarButtonItem:self.safariButton animated:YES]; - } else { - [self.actionSheet showInView:self.webView]; - } - } -} - -- (void)dismissActionSheet -{ - [self.actionSheet dismissWithClickedButtonIndex:0 animated:YES]; - -} - -#pragma mark - -#pragma mark UIActionSheetDelegate - -- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex -{ - self.actionSheet = nil; - if (buttonIndex == 0) { - // Open in Safari. - [[UIApplication sharedApplication] openURL:self.URL]; - } -} - -#pragma mark - -#pragma mark MPWebViewDelegate - -- (BOOL)webView:(MPWebView *)webView -shouldStartLoadWithRequest:(NSURLRequest *)request - navigationType:(UIWebViewNavigationType)navigationType -{ - MPLogDebug(@"Ad browser (%p) starting to load URL: %@", self, request.URL); - self.URL = request.URL; - - BOOL appShouldOpenURL = ![self.URL.scheme isEqualToString:@"http"] && ![self.URL.scheme isEqualToString:@"https"]; - - if (appShouldOpenURL) { - [[UIApplication sharedApplication] openURL:self.URL]; - } - - return !appShouldOpenURL; -} - -- (void)webViewDidStartLoad:(MPWebView *)webView -{ - self.refreshButton.enabled = YES; - self.safariButton.enabled = YES; - [self.spinner startAnimating]; - - self.webViewLoadCount++; -} - -- (void)webViewDidFinishLoad:(MPWebView *)webView -{ - self.webViewLoadCount--; - if (self.webViewLoadCount > 0) return; - - self.refreshButton.enabled = YES; - self.safariButton.enabled = YES; - self.backButton.enabled = self.webView.canGoBack; - self.forwardButton.enabled = self.webView.canGoForward; - [self.spinner stopAnimating]; -} - -- (void)webView:(MPWebView *)webView didFailLoadWithError:(NSError *)error -{ - self.webViewLoadCount--; - - self.refreshButton.enabled = YES; - self.safariButton.enabled = YES; - self.backButton.enabled = self.webView.canGoBack; - self.forwardButton.enabled = self.webView.canGoForward; - [self.spinner stopAnimating]; - - // Ignore NSURLErrorDomain error (-999). - if (error.code == NSURLErrorCancelled) return; - - // Ignore "Frame Load Interrupted" errors after navigating to iTunes or the App Store. - if (error.code == 102 && [error.domain isEqual:@"WebKitErrorDomain"]) return; - - MPLogError(@"Ad browser (%p) experienced an error: %@.", self, [error localizedDescription]); -} - -#pragma mark - -#pragma mark Drawing - -- (CGContextRef)createContext -{ - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - CGContextRef context = CGBitmapContextCreate(nil,27,27,8,0, - colorSpace,(CGBitmapInfo)kCGImageAlphaPremultipliedLast); - CFRelease(colorSpace); - return context; -} - -- (UIImage *)backArrowImage -{ - CGContextRef context = [self createContext]; - CGColorRef fillColor = [[UIColor blackColor] CGColor]; - CGContextSetFillColor(context, CGColorGetComponents(fillColor)); - - CGContextBeginPath(context); - CGContextMoveToPoint(context, 8.0f, 13.0f); - CGContextAddLineToPoint(context, 24.0f, 4.0f); - CGContextAddLineToPoint(context, 24.0f, 22.0f); - CGContextClosePath(context); - CGContextFillPath(context); - - CGImageRef imageRef = CGBitmapContextCreateImage(context); - CGContextRelease(context); - - UIImage *image = [[UIImage alloc] initWithCGImage:imageRef]; - CGImageRelease(imageRef); - return image; -} - -- (UIImage *)forwardArrowImage -{ - CGContextRef context = [self createContext]; - CGColorRef fillColor = [[UIColor blackColor] CGColor]; - CGContextSetFillColor(context, CGColorGetComponents(fillColor)); - - CGContextBeginPath(context); - CGContextMoveToPoint(context, 24.0f, 13.0f); - CGContextAddLineToPoint(context, 8.0f, 4.0f); - CGContextAddLineToPoint(context, 8.0f, 22.0f); - CGContextClosePath(context); - CGContextFillPath(context); - - CGImageRef imageRef = CGBitmapContextCreateImage(context); - CGContextRelease(context); - - UIImage *image = [[UIImage alloc] initWithCGImage:imageRef]; - CGImageRelease(imageRef); - return image; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdBrowserController.xib b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdBrowserController.xib deleted file mode 100644 index f79f27b03..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdBrowserController.xib +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdConfiguration.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdConfiguration.h deleted file mode 100644 index a5acbad09..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdConfiguration.h +++ /dev/null @@ -1,125 +0,0 @@ -// -// MPAdConfiguration.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPGlobal.h" - -@class MPRewardedVideoReward; - -enum { - MPAdTypeUnknown = -1, - MPAdTypeBanner = 0, - MPAdTypeInterstitial = 1 -}; -typedef NSUInteger MPAdType; - -typedef NS_ENUM(NSUInteger, MPAfterLoadResult) { - MPAfterLoadResultMissingAdapter, - MPAfterLoadResultAdLoaded, - MPAfterLoadResultError, - MPAfterLoadResultTimeout -}; - -extern NSString * const kAdTypeMetadataKey; -extern NSString * const kAdUnitWarmingUpMetadataKey; -extern NSString * const kClickthroughMetadataKey; -extern NSString * const kCreativeIdMetadataKey; -extern NSString * const kCustomEventClassNameMetadataKey; -extern NSString * const kCustomEventClassDataMetadataKey; -extern NSString * const kNextUrlMetadataKey; -extern NSString * const kBeforeLoadUrlMetadataKey; -extern NSString * const kAfterLoadUrlMetadataKey; -extern NSString * const kAfterLoadSuccessUrlMetadataKey; -extern NSString * const kAfterLoadFailureUrlMetadataKey; -extern NSString * const kHeightMetadataKey; -extern NSString * const kImpressionTrackerMetadataKey; -extern NSString * const kImpressionTrackersMetadataKey; -extern NSString * const kNativeSDKParametersMetadataKey; -extern NSString * const kNetworkTypeMetadataKey; -extern NSString * const kRefreshTimeMetadataKey; -extern NSString * const kAdTimeoutMetadataKey; -extern NSString * const kWidthMetadataKey; -extern NSString * const kDspCreativeIdKey; -extern NSString * const kPrecacheRequiredKey; -extern NSString * const kIsVastVideoPlayerKey; -extern NSString * const kRewardedVideoCurrencyNameMetadataKey; -extern NSString * const kRewardedVideoCurrencyAmountMetadataKey; -extern NSString * const kRewardedVideoCompletionUrlMetadataKey; -extern NSString * const kRewardedCurrenciesMetadataKey; -extern NSString * const kRewardedPlayableDurationMetadataKey; -extern NSString * const kRewardedPlayableRewardOnClickMetadataKey; - -extern NSString * const kInterstitialAdTypeMetadataKey; -extern NSString * const kOrientationTypeMetadataKey; - -extern NSString * const kAdTypeHtml; -extern NSString * const kAdTypeInterstitial; -extern NSString * const kAdTypeMraid; -extern NSString * const kAdTypeClear; -extern NSString * const kAdTypeNative; -extern NSString * const kAdTypeNativeVideo; - -extern NSString * const kClickthroughExperimentBrowserAgent; - -extern NSString * const kViewabilityDisableMetadataKey; - -extern NSString * const kBannerImpressionVisableMsMetadataKey; -extern NSString * const kBannerImpressionMinPixelMetadataKey; - -@interface MPAdConfiguration : NSObject - -@property (nonatomic, assign) MPAdType adType; -@property (nonatomic, assign) BOOL adUnitWarmingUp; -@property (nonatomic, copy) NSString *networkType; -// If this flag is YES, it implies that we've reached the end of the waterfall for the request -// and there is no need to hit ad server again. -@property (nonatomic) BOOL isEndOfWaterfall; -@property (nonatomic, assign) CGSize preferredSize; -@property (nonatomic, strong) NSURL *clickTrackingURL; -@property (nonatomic, strong) NSArray * impressionTrackingURLs; -@property (nonatomic, strong) NSURL *nextURL; -@property (nonatomic, strong) NSURL *beforeLoadURL; -@property (nonatomic, assign) NSTimeInterval refreshInterval; -@property (nonatomic, assign) NSTimeInterval adTimeoutInterval; -@property (nonatomic, copy) NSData *adResponseData; -@property (nonatomic, strong) NSDictionary *nativeSDKParameters; -@property (nonatomic, assign) Class customEventClass; -@property (nonatomic, strong) NSDictionary *customEventClassData; -@property (nonatomic, assign) MPInterstitialOrientationType orientationType; -@property (nonatomic, copy) NSString *dspCreativeId; -@property (nonatomic, assign) BOOL precacheRequired; -@property (nonatomic, assign) BOOL isVastVideoPlayer; -@property (nonatomic, strong) NSDate *creationTimestamp; -@property (nonatomic, copy) NSString *creativeId; -@property (nonatomic, copy) NSString *metadataAdType; -@property (nonatomic, assign) NSInteger nativeVideoPlayVisiblePercent; -@property (nonatomic, assign) NSInteger nativeVideoPauseVisiblePercent; -@property (nonatomic, assign) CGFloat nativeImpressionMinVisiblePixels; -@property (nonatomic, assign) NSInteger nativeImpressionMinVisiblePercent; // The pixels Metadata takes priority over percentage, but percentage is left for backwards compatibility -@property (nonatomic, assign) NSTimeInterval nativeImpressionMinVisibleTimeInterval; -@property (nonatomic, assign) NSTimeInterval nativeVideoMaxBufferingTime; -@property (nonatomic) NSDictionary *nativeVideoTrackers; -@property (nonatomic, readonly) NSArray *availableRewards; -@property (nonatomic, strong) MPRewardedVideoReward *selectedReward; -@property (nonatomic, copy) NSString *rewardedVideoCompletionUrl; -@property (nonatomic, assign) NSTimeInterval rewardedPlayableDuration; -@property (nonatomic, assign) BOOL rewardedPlayableShouldRewardOnClick; -@property (nonatomic, copy) NSString *advancedBidPayload; - -// viewable impression tracking experiment -@property (nonatomic) NSTimeInterval impressionMinVisibleTimeInSec; -@property (nonatomic) CGFloat impressionMinVisiblePixels; -@property (nonatomic) BOOL visibleImpressionTrackingEnabled; - -- (id)initWithMetadata:(NSDictionary *)metadata data:(NSData *)data; - -- (BOOL)hasPreferredSize; -- (NSString *)adResponseHTMLString; -- (NSArray *)afterLoadUrlsWithLoadDuration:(NSTimeInterval)duration loadResult:(MPAfterLoadResult)result; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdConfiguration.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdConfiguration.m deleted file mode 100644 index 2af4e215b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdConfiguration.m +++ /dev/null @@ -1,629 +0,0 @@ -// -// MPAdConfiguration.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdConfiguration.h" - -#import "MOPUBExperimentProvider.h" -#import "MPAdServerKeys.h" -#import "MPConstants.h" -#import "MPLogging.h" -#import "MPRewardedVideoReward.h" -#import "MPViewabilityTracker.h" -#import "NSJSONSerialization+MPAdditions.h" -#import "NSString+MPAdditions.h" -#import "NSDictionary+MPAdditions.h" - -#if MP_HAS_NATIVE_PACKAGE -#import "MPVASTTrackingEvent.h" -#endif - -// MACROS -#define AFTER_LOAD_DURATION_MACRO @"%%LOAD_DURATION_MS%%" -#define AFTER_LOAD_RESULT_MACRO @"%%LOAD_RESULT%%" - -NSString * const kAdTypeMetadataKey = @"x-adtype"; -NSString * const kAdUnitWarmingUpMetadataKey = @"x-warmup"; -NSString * const kClickthroughMetadataKey = @"x-clickthrough"; -NSString * const kCreativeIdMetadataKey = @"x-creativeid"; -NSString * const kCustomEventClassNameMetadataKey = @"x-custom-event-class-name"; -NSString * const kCustomEventClassDataMetadataKey = @"x-custom-event-class-data"; -NSString * const kNextUrlMetadataKey = @"x-next-url"; -NSString * const kBeforeLoadUrlMetadataKey = @"x-before-load-url"; -NSString * const kAfterLoadUrlMetadataKey = @"x-after-load-url"; -NSString * const kAfterLoadSuccessUrlMetadataKey = @"x-after-load-success-url"; -NSString * const kAfterLoadFailureUrlMetadataKey = @"x-after-load-fail-url"; -NSString * const kHeightMetadataKey = @"x-height"; -NSString * const kImpressionTrackerMetadataKey = @"x-imptracker"; // Deprecated; "imptrackers" if available -NSString * const kImpressionTrackersMetadataKey = @"imptrackers"; -NSString * const kNativeSDKParametersMetadataKey = @"x-nativeparams"; -NSString * const kNetworkTypeMetadataKey = @"x-networktype"; -NSString * const kRefreshTimeMetadataKey = @"x-refreshtime"; -NSString * const kAdTimeoutMetadataKey = @"x-ad-timeout-ms"; -NSString * const kWidthMetadataKey = @"x-width"; -NSString * const kDspCreativeIdKey = @"x-dspcreativeid"; -NSString * const kPrecacheRequiredKey = @"x-precacheRequired"; -NSString * const kIsVastVideoPlayerKey = @"x-vastvideoplayer"; - -NSString * const kInterstitialAdTypeMetadataKey = @"x-fulladtype"; -NSString * const kOrientationTypeMetadataKey = @"x-orientation"; - -NSString * const kNativeImpressionMinVisiblePixelsMetadataKey = @"x-native-impression-min-px"; // The pixels Metadata takes priority over percentage, but percentage is left for backwards compatibility -NSString * const kNativeImpressionMinVisiblePercentMetadataKey = @"x-impression-min-visible-percent"; -NSString * const kNativeImpressionVisibleMsMetadataKey = @"x-impression-visible-ms"; -NSString * const kNativeVideoPlayVisiblePercentMetadataKey = @"x-play-visible-percent"; -NSString * const kNativeVideoPauseVisiblePercentMetadataKey = @"x-pause-visible-percent"; -NSString * const kNativeVideoMaxBufferingTimeMsMetadataKey = @"x-max-buffer-ms"; -NSString * const kNativeVideoTrackersMetadataKey = @"x-video-trackers"; - -NSString * const kBannerImpressionVisableMsMetadataKey = @"x-banner-impression-min-ms"; -NSString * const kBannerImpressionMinPixelMetadataKey = @"x-banner-impression-min-pixels"; - -NSString * const kAdTypeHtml = @"html"; -NSString * const kAdTypeInterstitial = @"interstitial"; -NSString * const kAdTypeMraid = @"mraid"; -NSString * const kAdTypeClear = @"clear"; -NSString * const kAdTypeNative = @"json"; -NSString * const kAdTypeNativeVideo = @"json_video"; - -// rewarded video -NSString * const kRewardedVideoCurrencyNameMetadataKey = @"x-rewarded-video-currency-name"; -NSString * const kRewardedVideoCurrencyAmountMetadataKey = @"x-rewarded-video-currency-amount"; -NSString * const kRewardedVideoCompletionUrlMetadataKey = @"x-rewarded-video-completion-url"; -NSString * const kRewardedCurrenciesMetadataKey = @"x-rewarded-currencies"; - -// rewarded playables -NSString * const kRewardedPlayableDurationMetadataKey = @"x-rewarded-duration"; -NSString * const kRewardedPlayableRewardOnClickMetadataKey = @"x-should-reward-on-click"; - -// native video -NSString * const kNativeVideoTrackerUrlMacro = @"%%VIDEO_EVENT%%"; -NSString * const kNativeVideoTrackerEventsMetadataKey = @"events"; -NSString * const kNativeVideoTrackerUrlsMetadataKey = @"urls"; -NSString * const kNativeVideoTrackerEventDictionaryKey = @"event"; -NSString * const kNativeVideoTrackerTextDictionaryKey = @"text"; - -// clickthrough experiment -NSString * const kClickthroughExperimentBrowserAgent = @"x-browser-agent"; -static const NSInteger kMaximumVariantForClickthroughExperiment = 2; - -// viewability -NSString * const kViewabilityDisableMetadataKey = @"x-disable-viewability"; - -// advanced bidding -NSString * const kAdvancedBiddingMarkupMetadataKey = @"adm"; - -@interface MPAdConfiguration () - -@property (nonatomic, copy) NSString *adResponseHTMLString; -@property (nonatomic, strong, readwrite) NSArray *availableRewards; -@property (nonatomic) MOPUBDisplayAgentType clickthroughExperimentBrowserAgent; - -@property (nonatomic, copy) NSArray *afterLoadUrlsWithMacros; -@property (nonatomic, copy) NSArray *afterLoadSuccessUrlsWithMacros; -@property (nonatomic, copy) NSArray *afterLoadFailureUrlsWithMacros; - -- (MPAdType)adTypeFromMetadata:(NSDictionary *)metadata; -- (NSString *)networkTypeFromMetadata:(NSDictionary *)metadata; -- (NSTimeInterval)refreshIntervalFromMetadata:(NSDictionary *)metadata; -- (NSDictionary *)dictionaryFromMetadata:(NSDictionary *)metadata forKey:(NSString *)key; -- (NSURL *)URLFromMetadata:(NSDictionary *)metadata forKey:(NSString *)key; -- (NSArray *)URLsFromMetadata:(NSDictionary *)metadata forKey:(NSString *)key; -- (Class)setUpCustomEventClassFromMetadata:(NSDictionary *)metadata; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPAdConfiguration - -- (id)initWithMetadata:(NSDictionary *)metadata data:(NSData *)data -{ - self = [super init]; - if (self) { - self.adResponseData = data; - - self.adType = [self adTypeFromMetadata:metadata]; - self.adUnitWarmingUp = [metadata mp_boolForKey:kAdUnitWarmingUpMetadataKey]; - - self.networkType = [self networkTypeFromMetadata:metadata]; - self.networkType = self.networkType ? self.networkType : @""; - - self.preferredSize = CGSizeMake([metadata mp_floatForKey:kWidthMetadataKey], - [metadata mp_floatForKey:kHeightMetadataKey]); - - self.clickTrackingURL = [self URLFromMetadata:metadata - forKey:kClickthroughMetadataKey]; - self.nextURL = [self URLFromMetadata:metadata - forKey:kNextUrlMetadataKey]; - self.beforeLoadURL = [self URLFromMetadata:metadata forKey:kBeforeLoadUrlMetadataKey]; - self.afterLoadUrlsWithMacros = [self URLStringsFromMetadata:metadata forKey:kAfterLoadUrlMetadataKey]; - self.afterLoadSuccessUrlsWithMacros = [self URLStringsFromMetadata:metadata forKey:kAfterLoadSuccessUrlMetadataKey]; - self.afterLoadFailureUrlsWithMacros = [self URLStringsFromMetadata:metadata forKey:kAfterLoadFailureUrlMetadataKey]; - - self.refreshInterval = [self refreshIntervalFromMetadata:metadata]; - self.adTimeoutInterval = [self timeIntervalFromMsmetadata:metadata forKey:kAdTimeoutMetadataKey]; - - self.nativeSDKParameters = [self dictionaryFromMetadata:metadata - forKey:kNativeSDKParametersMetadataKey]; - - self.orientationType = [self orientationTypeFromMetadata:metadata]; - - self.customEventClass = [self setUpCustomEventClassFromMetadata:metadata]; - - self.customEventClassData = [self customEventClassDataFromMetadata:metadata]; - - self.dspCreativeId = [metadata objectForKey:kDspCreativeIdKey]; - - self.precacheRequired = [metadata mp_boolForKey:kPrecacheRequiredKey]; - - self.isVastVideoPlayer = [metadata mp_boolForKey:kIsVastVideoPlayerKey]; - - self.creationTimestamp = [NSDate date]; - - self.creativeId = [metadata objectForKey:kCreativeIdMetadataKey]; - - self.metadataAdType = [metadata objectForKey:kAdTypeMetadataKey]; - - self.nativeVideoPlayVisiblePercent = [self percentFromMetadata:metadata forKey:kNativeVideoPlayVisiblePercentMetadataKey]; - - self.nativeVideoPauseVisiblePercent = [self percentFromMetadata:metadata forKey:kNativeVideoPauseVisiblePercentMetadataKey]; - - self.nativeImpressionMinVisiblePixels = [[self adAmountFromMetadata:metadata key:kNativeImpressionMinVisiblePixelsMetadataKey] floatValue]; - - self.nativeImpressionMinVisiblePercent = [self percentFromMetadata:metadata forKey:kNativeImpressionMinVisiblePercentMetadataKey]; - - self.nativeImpressionMinVisibleTimeInterval = [self timeIntervalFromMsmetadata:metadata forKey:kNativeImpressionVisibleMsMetadataKey]; - - self.nativeVideoMaxBufferingTime = [self timeIntervalFromMsmetadata:metadata forKey:kNativeVideoMaxBufferingTimeMsMetadataKey]; -#if MP_HAS_NATIVE_PACKAGE - self.nativeVideoTrackers = [self nativeVideoTrackersFromMetadata:metadata key:kNativeVideoTrackersMetadataKey]; -#endif - - self.impressionMinVisibleTimeInSec = [self timeIntervalFromMsmetadata:metadata forKey:kBannerImpressionVisableMsMetadataKey]; - self.impressionMinVisiblePixels = [[self adAmountFromMetadata:metadata key:kBannerImpressionMinPixelMetadataKey] floatValue]; - - // Organize impression tracking URLs - NSArray * URLs = [self URLsFromMetadata:metadata forKey:kImpressionTrackersMetadataKey]; - // Check to see if the array actually contains URLs - if (URLs.count > 0) { - self.impressionTrackingURLs = URLs; - } else { - // If the array does not contain URLs, take the old `x-imptracker` URL and save that into an array instead. - self.impressionTrackingURLs = [self URLsFromMetadata:metadata forKey:kImpressionTrackerMetadataKey]; - } - - // rewarded video - - // Attempt to parse the multiple currency Metadata first since this will take - // precedence over the older single currency approach. - self.availableRewards = [self parseAvailableRewardsFromMetadata:metadata]; - if (self.availableRewards != nil) { - // Multiple currencies exist. We will select the first entry in the list - // as the default selected reward. - if (self.availableRewards.count > 0) { - self.selectedReward = self.availableRewards[0]; - } - // In the event that the list of available currencies is empty, we will - // follow the behavior from the single currency approach and create an unspecified reward. - else { - MPRewardedVideoReward * defaultReward = [[MPRewardedVideoReward alloc] initWithCurrencyType:kMPRewardedVideoRewardCurrencyTypeUnspecified amount:@(kMPRewardedVideoRewardCurrencyAmountUnspecified)]; - self.availableRewards = [NSArray arrayWithObject:defaultReward]; - self.selectedReward = defaultReward; - } - } - // Multiple currencies are not available; attempt to process single currency - // metadata. - else { - NSString *currencyName = [metadata objectForKey:kRewardedVideoCurrencyNameMetadataKey] ?: kMPRewardedVideoRewardCurrencyTypeUnspecified; - - NSNumber *currencyAmount = [self adAmountFromMetadata:metadata key:kRewardedVideoCurrencyAmountMetadataKey]; - if (currencyAmount.integerValue <= 0) { - currencyAmount = @(kMPRewardedVideoRewardCurrencyAmountUnspecified); - } - - MPRewardedVideoReward * reward = [[MPRewardedVideoReward alloc] initWithCurrencyType:currencyName amount:currencyAmount]; - self.availableRewards = [NSArray arrayWithObject:reward]; - self.selectedReward = reward; - } - - self.rewardedVideoCompletionUrl = [metadata objectForKey:kRewardedVideoCompletionUrlMetadataKey]; - - // rewarded playables - self.rewardedPlayableDuration = [self timeIntervalFromMetadata:metadata forKey:kRewardedPlayableDurationMetadataKey]; - self.rewardedPlayableShouldRewardOnClick = [[metadata objectForKey:kRewardedPlayableRewardOnClickMetadataKey] boolValue]; - - // clickthrough experiment - self.clickthroughExperimentBrowserAgent = [self clickthroughExperimentVariantFromMetadata:metadata forKey:kClickthroughExperimentBrowserAgent]; - [MOPUBExperimentProvider setDisplayAgentFromAdServer:self.clickthroughExperimentBrowserAgent]; - - // viewability - NSInteger disabledViewabilityValue = [metadata mp_integerForKey:kViewabilityDisableMetadataKey]; - - if (disabledViewabilityValue != 0 && - disabledViewabilityValue >= MPViewabilityOptionNone && - disabledViewabilityValue <= MPViewabilityOptionAll) { - MPViewabilityOption vendorsToDisable = (MPViewabilityOption)disabledViewabilityValue; - [MPViewabilityTracker disableViewability:vendorsToDisable]; - } - - // advanced bidding - self.advancedBidPayload = [metadata objectForKey:kAdvancedBiddingMarkupMetadataKey]; - } - return self; -} - -- (Class)setUpCustomEventClassFromMetadata:(NSDictionary *)metadata -{ - NSString *customEventClassName = [metadata objectForKey:kCustomEventClassNameMetadataKey]; - - NSMutableDictionary *convertedCustomEvents = [NSMutableDictionary dictionary]; - if (self.adType == MPAdTypeBanner) { - [convertedCustomEvents setObject:@"MPGoogleAdMobBannerCustomEvent" forKey:@"admob_native"]; - [convertedCustomEvents setObject:@"MPMillennialBannerCustomEvent" forKey:@"millennial_native"]; - [convertedCustomEvents setObject:@"MPHTMLBannerCustomEvent" forKey:@"html"]; - [convertedCustomEvents setObject:@"MPMRAIDBannerCustomEvent" forKey:@"mraid"]; - [convertedCustomEvents setObject:@"MOPUBNativeVideoCustomEvent" forKey:@"json_video"]; - [convertedCustomEvents setObject:@"MPMoPubNativeCustomEvent" forKey:@"json"]; - } else if (self.adType == MPAdTypeInterstitial) { - [convertedCustomEvents setObject:@"MPGoogleAdMobInterstitialCustomEvent" forKey:@"admob_full"]; - [convertedCustomEvents setObject:@"MPMillennialInterstitialCustomEvent" forKey:@"millennial_full"]; - [convertedCustomEvents setObject:@"MPHTMLInterstitialCustomEvent" forKey:@"html"]; - [convertedCustomEvents setObject:@"MPMRAIDInterstitialCustomEvent" forKey:@"mraid"]; - [convertedCustomEvents setObject:@"MPMoPubRewardedVideoCustomEvent" forKey:@"rewarded_video"]; - [convertedCustomEvents setObject:@"MPMoPubRewardedPlayableCustomEvent" forKey:@"rewarded_playable"]; - } - if ([convertedCustomEvents objectForKey:self.networkType]) { - customEventClassName = [convertedCustomEvents objectForKey:self.networkType]; - } - - Class customEventClass = NSClassFromString(customEventClassName); - - if (customEventClassName && !customEventClass) { - MPLogWarn(@"Could not find custom event class named %@", customEventClassName); - } - - return customEventClass; -} - - - -- (NSDictionary *)customEventClassDataFromMetadata:(NSDictionary *)metadata -{ - NSDictionary *result = [self dictionaryFromMetadata:metadata forKey:kCustomEventClassDataMetadataKey]; - if (!result) { - result = [self dictionaryFromMetadata:metadata forKey:kNativeSDKParametersMetadataKey]; - } - return result; -} - - -- (BOOL)hasPreferredSize -{ - return (self.preferredSize.width > 0 && self.preferredSize.height > 0); -} - -- (NSString *)adResponseHTMLString -{ - if (!_adResponseHTMLString) { - self.adResponseHTMLString = [[NSString alloc] initWithData:self.adResponseData - encoding:NSUTF8StringEncoding]; - } - - return _adResponseHTMLString; -} - -- (NSArray *)afterLoadUrlsWithLoadDuration:(NSTimeInterval)duration loadResult:(MPAfterLoadResult)result -{ - NSArray * afterLoadUrls = [self concatenateBaseUrlArray:self.afterLoadUrlsWithMacros - withConditionalArray:(result == MPAfterLoadResultAdLoaded ? self.afterLoadSuccessUrlsWithMacros : self.afterLoadFailureUrlsWithMacros)]; - - // No URLs to generate - if (afterLoadUrls == nil || afterLoadUrls.count == 0) { - return nil; - } - - NSMutableArray * urls = [NSMutableArray arrayWithCapacity:afterLoadUrls.count]; - - for (NSString * urlString in afterLoadUrls) { - // Skip if the URL length is 0 - if (urlString.length == 0) { - continue; - } - - // Generate the ad server value from the enumeration. If the result type failed to - // match, we should not process this any further. - NSString * resultString = nil; - switch (result) { - case MPAfterLoadResultError: resultString = @"error"; break; - case MPAfterLoadResultTimeout: resultString = @"timeout"; break; - case MPAfterLoadResultAdLoaded: resultString = @"ad_loaded"; break; - case MPAfterLoadResultMissingAdapter: resultString = @"missing_adapter"; break; - default: return nil; - } - - // Convert the duration to milliseconds - NSString * durationMs = [NSString stringWithFormat:@"%llu", (unsigned long long)(duration * 1000)]; - - // Replace the macros - NSString * expandedUrl = [urlString stringByReplacingOccurrencesOfString:AFTER_LOAD_DURATION_MACRO withString:durationMs]; - expandedUrl = [expandedUrl stringByReplacingOccurrencesOfString:AFTER_LOAD_RESULT_MACRO withString:resultString]; - - // Add to array (@c URLWithString may return @c nil, so check before appending to the array) - NSURL * url = [NSURL URLWithString:expandedUrl]; - if (url != nil) { - [urls addObject:url]; - } - } - - return urls.count > 0 ? urls : nil; -} - -#pragma mark - Private - -- (NSArray *)concatenateBaseUrlArray:(NSArray *)baseArray withConditionalArray:(NSArray *)conditionalArray { - if (baseArray == nil && conditionalArray == nil) { - return nil; - } - - if (baseArray == nil) { - return conditionalArray; - } - - if (conditionalArray == nil) { - return baseArray; - } - - return [baseArray arrayByAddingObjectsFromArray:conditionalArray]; -} - -- (MPAdType)adTypeFromMetadata:(NSDictionary *)metadata -{ - NSString *adTypeString = [metadata objectForKey:kAdTypeMetadataKey]; - - if ([adTypeString isEqualToString:@"interstitial"] || [adTypeString isEqualToString:@"rewarded_video"] || [adTypeString isEqualToString:@"rewarded_playable"]) { - return MPAdTypeInterstitial; - } else if (adTypeString && - [metadata objectForKey:kOrientationTypeMetadataKey]) { - return MPAdTypeInterstitial; - } else if (adTypeString) { - return MPAdTypeBanner; - } else { - return MPAdTypeUnknown; - } -} - -- (NSString *)networkTypeFromMetadata:(NSDictionary *)metadata -{ - NSString *adTypeString = [metadata objectForKey:kAdTypeMetadataKey]; - if ([adTypeString isEqualToString:@"interstitial"]) { - return [metadata objectForKey:kInterstitialAdTypeMetadataKey]; - } else { - return adTypeString; - } -} - -- (NSURL *)URLFromMetadata:(NSDictionary *)metadata forKey:(NSString *)key -{ - NSString *URLString = [metadata objectForKey:key]; - return URLString ? [NSURL URLWithString:URLString] : nil; -} - -/** - Reads the value at key @c key from dictionary @c metadata. If the value is a @c NSString that is convertable to - @c NSURL, it will be converted into an @c NSURL, inserted into an array, and returned. If the value is a @c NSArray, - each @c NSString in the array that is convertable to @c NSURL will be converted and all returned in an array, with all - other objects scrubbed. If the value from @c metadata is @c nil, not an @c NSString, not an @c NSArray, an @c NSString - that cannot be converted to @c NSURL, or an @c NSArray that does not contain NSURL-convertable strings, this method - will return @c nil. - @remark This method converts all @c NSStrings into @c NSURLs, where possible. If this behavior is not desired, - use @c URLStringsFromMetadata:forkey: instead. - @param metadata the @c NSDictionary to read from - @param key the @c the key to look up in @c metadata - @return @c NSArray of @c NSURL contained at key @c key, or @c nil - */ -- (NSArray *)URLsFromMetadata:(NSDictionary *)metadata forKey:(NSString *)key { - NSArray * URLStrings = [self URLStringsFromMetadata:metadata forKey:key]; - if (URLStrings == nil) { - return nil; - } - - // Convert the strings into NSURLs and save in a new array - NSMutableArray * URLs = [NSMutableArray arrayWithCapacity:URLStrings.count]; - for (NSString * URLString in URLStrings) { - // @c URLWithString may return @c nil, so check before appending to the array - NSURL * URL = [NSURL URLWithString:URLString]; - if (URL != nil) { - [URLs addObject:URL]; - } - } - - return URLs.count > 0 ? URLs : nil; -} - -/** - Reads the value at key @c key from dictionary @c metadata. If the value is a @c NSString, it will be inserted into - an array and returned. If the value is a @c NSArray, the @c NSStrings contained in that array will be all be returned - in an array, with any object that is not an @c NSString scrubbed. If the value from @c metadata is @c nil, not an - @c NSString, not an @c NSArray, or an @c NSArray that does not contain strings, this method will return @c nil. - @remark This method does not convert the @c NSStrings into @c NSURLs. Use @c URLsFromMetadata:forKey: for that instead. - @param metadata the @c NSDictionary to read from - @param key the @c the key to look up in @c metadata - @return @c NSArray of @c NSStrings contained at key @c key, or @c nil - */ -- (NSArray *)URLStringsFromMetadata:(NSDictionary *)metadata forKey:(NSString *)key { - NSObject * value = metadata[key]; - - if (value == nil) { - return nil; - } - - if ([value isKindOfClass:[NSString class]]) { - NSString * string = (NSString *)value; - return string.length > 0 ? @[string] : nil; - } - - if ([value isKindOfClass:[NSArray class]]) { - NSArray * objects = (NSArray *)value; - NSMutableArray * URLStrings = [NSMutableArray arrayWithCapacity:objects.count]; - for (NSObject * object in objects) { - if ([object isKindOfClass:[NSString class]]) { - [URLStrings addObject:(NSString *)object]; - } - } - return URLStrings.count > 0 ? URLStrings : nil; - } - - return nil; -} - -- (NSDictionary *)dictionaryFromMetadata:(NSDictionary *)metadata forKey:(NSString *)key -{ - NSData *data = [(NSString *)[metadata objectForKey:key] dataUsingEncoding:NSUTF8StringEncoding]; - NSDictionary *JSONFromMetadata = nil; - if (data) { - JSONFromMetadata = [NSJSONSerialization mp_JSONObjectWithData:data options:NSJSONReadingMutableContainers clearNullObjects:YES error:nil]; - } - return JSONFromMetadata; -} - -- (NSTimeInterval)refreshIntervalFromMetadata:(NSDictionary *)metadata -{ - NSTimeInterval interval = [metadata mp_doubleForKey:kRefreshTimeMetadataKey defaultValue:MINIMUM_REFRESH_INTERVAL]; - if (interval < MINIMUM_REFRESH_INTERVAL) { - interval = MINIMUM_REFRESH_INTERVAL; - } - return interval; -} - -- (NSTimeInterval)timeIntervalFromMetadata:(NSDictionary *)metadata forKey:(NSString *)key -{ - NSTimeInterval interval = [metadata mp_doubleForKey:key defaultValue:-1]; - return interval; -} - -- (NSTimeInterval)timeIntervalFromMsmetadata:(NSDictionary *)metadata forKey:(NSString *)key -{ - NSTimeInterval interval = [metadata mp_doubleForKey:key defaultValue:-1]; - if (interval >= 0) { - interval /= 1000.0f; - } - return interval; -} - -- (NSInteger)percentFromMetadata:(NSDictionary *)metadata forKey:(NSString *)key -{ - return [metadata mp_integerForKey:key defaultValue:-1]; - -} - -- (NSNumber *)adAmountFromMetadata:(NSDictionary *)metadata key:(NSString *)key -{ - NSInteger amount = [metadata mp_integerForKey:key defaultValue:-1]; - return @(amount); -} - -- (MPInterstitialOrientationType)orientationTypeFromMetadata:(NSDictionary *)metadata -{ - NSString *orientation = [metadata objectForKey:kOrientationTypeMetadataKey]; - if ([orientation isEqualToString:@"p"]) { - return MPInterstitialOrientationTypePortrait; - } else if ([orientation isEqualToString:@"l"]) { - return MPInterstitialOrientationTypeLandscape; - } else { - return MPInterstitialOrientationTypeAll; - } -} - -#if MP_HAS_NATIVE_PACKAGE -- (NSDictionary *)nativeVideoTrackersFromMetadata:(NSDictionary *)metadata key:(NSString *)key -{ - NSDictionary *dictFromMetadata = [self dictionaryFromMetadata:metadata forKey:key]; - if (!dictFromMetadata) { - return nil; - } - NSMutableDictionary *videoTrackerDict = [NSMutableDictionary new]; - NSArray *events = dictFromMetadata[kNativeVideoTrackerEventsMetadataKey]; - NSArray *urls = dictFromMetadata[kNativeVideoTrackerUrlsMetadataKey]; - NSSet *supportedEvents = [NSSet setWithObjects:MPVASTTrackingEventTypeStart, MPVASTTrackingEventTypeFirstQuartile, MPVASTTrackingEventTypeMidpoint, MPVASTTrackingEventTypeThirdQuartile, MPVASTTrackingEventTypeComplete, nil]; - for (NSString *event in events) { - if (![supportedEvents containsObject:event]) { - continue; - } - [self setVideoTrackers:videoTrackerDict event:event urls:urls]; - } - if (videoTrackerDict.count == 0) { - return nil; - } - return videoTrackerDict; -} - -- (void)setVideoTrackers:(NSMutableDictionary *)videoTrackerDict event:(NSString *)event urls:(NSArray *)urls { - NSMutableArray *trackers = [NSMutableArray new]; - for (NSString *url in urls) { - if ([url rangeOfString:kNativeVideoTrackerUrlMacro].location != NSNotFound) { - NSString *trackerUrl = [url stringByReplacingOccurrencesOfString:kNativeVideoTrackerUrlMacro withString:event]; - NSDictionary *dict = @{kNativeVideoTrackerEventDictionaryKey:event, kNativeVideoTrackerTextDictionaryKey:trackerUrl}; - MPVASTTrackingEvent *tracker = [[MPVASTTrackingEvent alloc] initWithDictionary:dict]; - [trackers addObject:tracker]; - } - } - if (trackers.count > 0) { - videoTrackerDict[event] = trackers; - } -} - -#endif - -- (NSArray *)parseAvailableRewardsFromMetadata:(NSDictionary *)metadata { - // The X-Rewarded-Currencies Metadata key doesn't exist. This is probably - // not a rewarded ad. - NSDictionary * currencies = [metadata objectForKey:kRewardedCurrenciesMetadataKey]; - if (currencies == nil) { - return nil; - } - - // Either the list of available rewards doesn't exist or is empty. - // This is an error. - NSArray * rewards = [currencies objectForKey:@"rewards"]; - if (rewards.count == 0) { - MPLogError(@"No available rewards found."); - return nil; - } - - // Parse the list of JSON rewards into objects. - NSMutableArray * availableRewards = [NSMutableArray arrayWithCapacity:rewards.count]; - [rewards enumerateObjectsUsingBlock:^(NSDictionary * rewardDict, NSUInteger idx, BOOL * _Nonnull stop) { - NSString * name = rewardDict[@"name"] ?: kMPRewardedVideoRewardCurrencyTypeUnspecified; - NSNumber * amount = rewardDict[@"amount"] ?: @(kMPRewardedVideoRewardCurrencyAmountUnspecified); - - MPRewardedVideoReward * reward = [[MPRewardedVideoReward alloc] initWithCurrencyType:name amount:amount]; - [availableRewards addObject:reward]; - }]; - - return availableRewards; -} - -- (MOPUBDisplayAgentType)clickthroughExperimentVariantFromMetadata:(NSDictionary *)metadata forKey:(NSString *)key -{ - NSInteger variant = [metadata mp_integerForKey:key]; - if (variant > kMaximumVariantForClickthroughExperiment) { - variant = -1; - } - - return variant; -} - -- (BOOL)visibleImpressionTrackingEnabled -{ - if (self.impressionMinVisibleTimeInSec < 0 || self.impressionMinVisiblePixels <= 0) { - return NO; - } - return YES; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.h deleted file mode 100644 index 234369b15..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// MPAdDestinationDisplayAgent.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPActivityViewControllerHelper+TweetShare.h" -#import "MPURLResolver.h" -#import "MPProgressOverlayView.h" -#import "MPAdBrowserController.h" -#import "MPStoreKitProvider.h" -#import "MOPUBDisplayAgentType.h" - -@protocol MPAdDestinationDisplayAgentDelegate; - -@interface MPAdDestinationDisplayAgent : NSObject - -@property (nonatomic, weak) id delegate; - -+ (MPAdDestinationDisplayAgent *)agentWithDelegate:(id)delegate; -+ (BOOL)shouldUseSafariViewController; -- (void)displayDestinationForURL:(NSURL *)URL; -- (void)cancel; - -@end - -@protocol MPAdDestinationDisplayAgentDelegate - -- (UIViewController *)viewControllerForPresentingModalView; -- (void)displayAgentWillPresentModal; -- (void)displayAgentWillLeaveApplication; -- (void)displayAgentDidDismissModal; - -@optional - -- (MPAdConfiguration *)adConfiguration; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.m deleted file mode 100644 index ebe259752..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdDestinationDisplayAgent.m +++ /dev/null @@ -1,419 +0,0 @@ -// -// MPAdDestinationDisplayAgent.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdDestinationDisplayAgent.h" -#import "MPCoreInstanceProvider.h" -#import "MPLastResortDelegate.h" -#import "MPLogging.h" -#import "NSURL+MPAdditions.h" -#import "MPCoreInstanceProvider.h" -#import "MPAnalyticsTracker.h" -#import "MOPUBExperimentProvider.h" -#import - -static NSString * const kDisplayAgentErrorDomain = @"com.mopub.displayagent"; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPAdDestinationDisplayAgent () - -@property (nonatomic, strong) MPURLResolver *resolver; -@property (nonatomic, strong) MPURLResolver *enhancedDeeplinkFallbackResolver; -@property (nonatomic, strong) MPProgressOverlayView *overlayView; -@property (nonatomic, assign) BOOL isLoadingDestination; -@property (nonatomic) MOPUBDisplayAgentType displayAgentType; -@property (nonatomic, strong) SKStoreProductViewController *storeKitController; - -@property (nonatomic, strong) MPAdBrowserController *browserController; -@property (nonatomic, strong) SFSafariViewController *safariController; - -@property (nonatomic, strong) MPTelephoneConfirmationController *telephoneConfirmationController; -@property (nonatomic, strong) MPActivityViewControllerHelper *activityViewControllerHelper; - -- (void)presentStoreKitControllerWithItemIdentifier:(NSString *)identifier fallbackURL:(NSURL *)URL; -- (void)hideOverlay; -- (void)hideModalAndNotifyDelegate; -- (void)dismissAllModalContent; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPAdDestinationDisplayAgent - -@synthesize delegate = _delegate; -@synthesize resolver = _resolver; -@synthesize isLoadingDestination = _isLoadingDestination; - -+ (MPAdDestinationDisplayAgent *)agentWithDelegate:(id)delegate -{ - MPAdDestinationDisplayAgent *agent = [[MPAdDestinationDisplayAgent alloc] init]; - agent.delegate = delegate; - agent.overlayView = [[MPProgressOverlayView alloc] initWithDelegate:agent]; - agent.activityViewControllerHelper = [[MPActivityViewControllerHelper alloc] initWithDelegate:agent]; - agent.displayAgentType = [MOPUBExperimentProvider displayAgentType]; - return agent; -} - -- (void)dealloc -{ - [self dismissAllModalContent]; - - self.overlayView.delegate = nil; - - // XXX: If this display agent is deallocated while a StoreKit controller is still on-screen, - // nil-ing out the controller's delegate would leave us with no way to dismiss the controller - // in the future. Therefore, we change the controller's delegate to a singleton object which - // implements SKStoreProductViewControllerDelegate and is always around. - self.storeKitController.delegate = [MPLastResortDelegate sharedDelegate]; - - self.browserController.delegate = nil; - -} - -- (void)dismissAllModalContent -{ - [self.overlayView hide]; -} - -- (void)displayDestinationForURL:(NSURL *)URL -{ - if (self.isLoadingDestination) return; - self.isLoadingDestination = YES; - - [self.delegate displayAgentWillPresentModal]; - [self.overlayView show]; - - [self.resolver cancel]; - [self.enhancedDeeplinkFallbackResolver cancel]; - - __weak __typeof__(self) weakSelf = self; - self.resolver = [MPURLResolver resolverWithURL:URL completion:^(MPURLActionInfo *suggestedAction, NSError *error) { - __typeof__(self) strongSelf = weakSelf; - if (error) { - [strongSelf failedToResolveURLWithError:error]; - } else { - [strongSelf handleSuggestedURLAction:suggestedAction isResolvingEnhancedDeeplink:NO]; - } - }]; - - [self.resolver start]; -} - -- (void)cancel -{ - if (self.isLoadingDestination) { - [self.resolver cancel]; - [self.enhancedDeeplinkFallbackResolver cancel]; - [self hideOverlay]; - [self completeDestinationLoading]; - } -} - -- (BOOL)handleSuggestedURLAction:(MPURLActionInfo *)actionInfo isResolvingEnhancedDeeplink:(BOOL)isResolvingEnhancedDeeplink -{ - if (actionInfo == nil) { - [self failedToResolveURLWithError:[NSError errorWithDomain:kDisplayAgentErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey: @"Invalid URL action"}]]; - return NO; - } - - BOOL success = YES; - - switch (actionInfo.actionType) { - case MPURLActionTypeStoreKit: - [self showStoreKitWithAction:actionInfo]; - break; - case MPURLActionTypeGenericDeeplink: - [self openURLInApplication:actionInfo.deeplinkURL]; - break; - case MPURLActionTypeEnhancedDeeplink: - if (isResolvingEnhancedDeeplink) { - // We end up here if we encounter a nested enhanced deeplink. We'll simply disallow - // this to avoid getting into cycles. - [self failedToResolveURLWithError:[NSError errorWithDomain:kDisplayAgentErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey: @"Cannot resolve an enhanced deeplink that is nested within another enhanced deeplink."}]]; - success = NO; - } else { - [self handleEnhancedDeeplinkRequest:actionInfo.enhancedDeeplinkRequest]; - } - break; - case MPURLActionTypeOpenInSafari: - [self openURLInApplication:actionInfo.safariDestinationURL]; - break; - case MPURLActionTypeOpenInWebView: - [self showWebViewWithHTMLString:actionInfo.HTTPResponseString baseURL:actionInfo.webViewBaseURL actionType:MPURLActionTypeOpenInWebView]; - break; - case MPURLActionTypeOpenURLInWebView: - [self showWebViewWithHTMLString:actionInfo.HTTPResponseString baseURL:actionInfo.originalURL actionType:MPURLActionTypeOpenInWebView]; - break; - case MPURLActionTypeShare: - [self openShareURL:actionInfo.shareURL]; - break; - default: - [self failedToResolveURLWithError:[NSError errorWithDomain:kDisplayAgentErrorDomain code:-2 userInfo:@{NSLocalizedDescriptionKey: @"Unrecognized URL action type."}]]; - success = NO; - break; - } - - return success; -} - -- (void)handleEnhancedDeeplinkRequest:(MPEnhancedDeeplinkRequest *)request -{ - BOOL didOpenSuccessfully = [[UIApplication sharedApplication] openURL:request.primaryURL]; - if (didOpenSuccessfully) { - [self hideOverlay]; - [self.delegate displayAgentWillLeaveApplication]; - [self completeDestinationLoading]; - [[MPAnalyticsTracker sharedTracker] sendTrackingRequestForURLs:request.primaryTrackingURLs]; - } else if (request.fallbackURL) { - [self handleEnhancedDeeplinkFallbackForRequest:request]; - } else { - [self openURLInApplication:request.originalURL]; - } -} - -- (void)handleEnhancedDeeplinkFallbackForRequest:(MPEnhancedDeeplinkRequest *)request; -{ - __weak __typeof__(self) weakSelf = self; - [self.enhancedDeeplinkFallbackResolver cancel]; - self.enhancedDeeplinkFallbackResolver = [MPURLResolver resolverWithURL:request.fallbackURL completion:^(MPURLActionInfo *actionInfo, NSError *error) { - __typeof__(self) strongSelf = weakSelf; - if (error) { - // If the resolver fails, just treat the entire original URL as a regular deeplink. - [strongSelf openURLInApplication:request.originalURL]; - } - else { - // Otherwise, the resolver will return us a URL action. We process that action - // normally with one exception: we don't follow any nested enhanced deeplinks. - BOOL success = [strongSelf handleSuggestedURLAction:actionInfo isResolvingEnhancedDeeplink:YES]; - if (success) { - [[MPAnalyticsTracker sharedTracker] sendTrackingRequestForURLs:request.fallbackTrackingURLs]; - } - } - }]; - [self.enhancedDeeplinkFallbackResolver start]; -} - -- (void)showWebViewWithHTMLString:(NSString *)HTMLString baseURL:(NSURL *)URL actionType:(MPURLActionType)actionType { - switch (self.displayAgentType) { - case MOPUBDisplayAgentTypeInApp: - case MOPUBDisplayAgentTypeSafariViewController: - if ([MPAdDestinationDisplayAgent shouldUseSafariViewController]) { - if (@available(iOS 9.0, *)) { - self.safariController = [[SFSafariViewController alloc] initWithURL:URL]; - self.safariController.delegate = self; - } - } else { - if (actionType == MPURLActionTypeOpenInWebView) { - self.browserController = [[MPAdBrowserController alloc] initWithURL:URL - HTMLString:HTMLString - delegate:self]; - } else { - self.browserController = [[MPAdBrowserController alloc] initWithURL:URL - delegate:self]; - } - } - [self showAdBrowserController]; - break; - case MOPUBDisplayAgentTypeNativeSafari: - [self openURLInApplication:URL]; - break; - } -} - -- (void)showAdBrowserController { - [self hideOverlay]; - - UIViewController *browserViewController = self.safariController ? self.safariController : self.browserController; - - browserViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; - [[self.delegate viewControllerForPresentingModalView] presentViewController:browserViewController - animated:MP_ANIMATED - completion:nil]; -} - -- (void)showStoreKitProductWithParameter:(NSString *)parameter fallbackURL:(NSURL *)URL -{ - if ([MPStoreKitProvider deviceHasStoreKit]) { - [self presentStoreKitControllerWithItemIdentifier:parameter fallbackURL:URL]; - } else { - [self openURLInApplication:URL]; - } -} - -- (void)openURLInApplication:(NSURL *)URL -{ - [self hideOverlay]; - - if ([URL mp_hasTelephoneScheme] || [URL mp_hasTelephonePromptScheme]) { - [self interceptTelephoneURL:URL]; - } else { - BOOL didOpenSuccessfully = [[UIApplication sharedApplication] openURL:URL]; - if (didOpenSuccessfully) { - [self.delegate displayAgentWillLeaveApplication]; - } - [self completeDestinationLoading]; - } -} - -- (BOOL)openShareURL:(NSURL *)URL -{ - MPLogDebug(@"MPAdDestinationDisplayAgent - loading Share URL: %@", URL); - MPMoPubShareHostCommand command = [URL mp_MoPubShareHostCommand]; - switch (command) { - case MPMoPubShareHostCommandTweet: - return [self.activityViewControllerHelper presentActivityViewControllerWithTweetShareURL:URL]; - default: - MPLogWarn(@"MPAdDestinationDisplayAgent - unsupported Share URL: %@", [URL absoluteString]); - return NO; - } -} - -- (void)interceptTelephoneURL:(NSURL *)URL -{ - __weak MPAdDestinationDisplayAgent *weakSelf = self; - self.telephoneConfirmationController = [[MPTelephoneConfirmationController alloc] initWithURL:URL clickHandler:^(NSURL *targetTelephoneURL, BOOL confirmed) { - MPAdDestinationDisplayAgent *strongSelf = weakSelf; - if (strongSelf) { - if (confirmed) { - [strongSelf.delegate displayAgentWillLeaveApplication]; - [[UIApplication sharedApplication] openURL:targetTelephoneURL]; - } - [strongSelf completeDestinationLoading]; - } - }]; - - [self.telephoneConfirmationController show]; -} - -- (void)failedToResolveURLWithError:(NSError *)error -{ - [self hideOverlay]; - [self completeDestinationLoading]; -} - -- (void)completeDestinationLoading -{ - self.isLoadingDestination = NO; - [self.delegate displayAgentDidDismissModal]; -} - -- (void)presentStoreKitControllerWithItemIdentifier:(NSString *)identifier fallbackURL:(NSURL *)URL -{ - self.storeKitController = [MPStoreKitProvider buildController]; - self.storeKitController.delegate = self; - - NSDictionary *parameters = [NSDictionary dictionaryWithObject:identifier - forKey:SKStoreProductParameterITunesItemIdentifier]; - [self.storeKitController loadProductWithParameters:parameters completionBlock:nil]; - - [self hideOverlay]; - [[self.delegate viewControllerForPresentingModalView] presentViewController:self.storeKitController animated:MP_ANIMATED completion:nil]; -} - -#pragma mark - - -- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController -{ - self.isLoadingDestination = NO; - [self hideModalAndNotifyDelegate]; -} - -#pragma mark - - -- (void)dismissBrowserController:(MPAdBrowserController *)browserController animated:(BOOL)animated -{ - self.isLoadingDestination = NO; - [self hideModalAndNotifyDelegate]; -} - -- (MPAdConfiguration *)adConfiguration -{ - if ([self.delegate respondsToSelector:@selector(adConfiguration)]) { - return [self.delegate adConfiguration]; - } - - return nil; -} - -#pragma mark - - -- (void)safariViewControllerDidFinish:(SFSafariViewController *)controller { - self.isLoadingDestination = NO; - [self.delegate displayAgentDidDismissModal]; -} - -#pragma mark - - -- (void)overlayCancelButtonPressed -{ - [self cancel]; -} - -#pragma mark - Convenience Methods - -- (void)hideModalAndNotifyDelegate -{ - [[self.delegate viewControllerForPresentingModalView] dismissViewControllerAnimated:MP_ANIMATED completion:^{ - [self.delegate displayAgentDidDismissModal]; - }]; -} - -+ (BOOL)shouldUseSafariViewController -{ - MOPUBDisplayAgentType displayAgentType = [MOPUBExperimentProvider displayAgentType]; - if (@available(iOS 9.0, *)) { - return (displayAgentType == MOPUBDisplayAgentTypeSafariViewController); - } - - return NO; -} - -- (void)hideOverlay -{ - [self.overlayView hide]; -} - -#pragma mark - -- (UIViewController *)viewControllerForPresentingActivityViewController -{ - return self.delegate.viewControllerForPresentingModalView; -} - -- (void)activityViewControllerWillPresent -{ - [self hideOverlay]; - self.isLoadingDestination = NO; - [self.delegate displayAgentWillPresentModal]; -} - -- (void)activityViewControllerDidDismiss -{ - [self.delegate displayAgentDidDismissModal]; -} - -#pragma mark - Experiment with 3 display agent types: 0 -> keep existing, 1 -> use native safari, 2 -> use SafariViewController - -- (void)showStoreKitWithAction:(MPURLActionInfo *)actionInfo -{ - switch (self.displayAgentType) { - case MOPUBDisplayAgentTypeInApp: - case MOPUBDisplayAgentTypeSafariViewController: // It doesn't make sense to open store kit in SafariViewController so storeKitController is used here. - [self showStoreKitProductWithParameter:actionInfo.iTunesItemIdentifier - fallbackURL:actionInfo.iTunesStoreFallbackURL]; - break; - case MOPUBDisplayAgentTypeNativeSafari: - [self openURLInApplication:actionInfo.iTunesStoreFallbackURL]; - break; - default: - break; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.h deleted file mode 100644 index 6861d6ff0..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// MPAdImpressionTimer.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@protocol MPAdImpressionTimerDelegate - -@required - -/* - * Called when the required visibility time has been satisfied. This delegate method - * will only be called once for the lifetime of this object. - */ -- (void)adViewWillLogImpression:(UIView *)adView; - -@end - -@interface MPAdImpressionTimer : NSObject - -@property (nonatomic, weak) id delegate; - -/* - * Initializes and returns an object that will tell its delegate certain number of pixels of the view - * has been visible for a given amount of time. - * - * requiredSecondsForImpression represents the number of seconds a view needs to be visible for impression counting. Range of the value: [0, infinite). - * visibilityPixels is a float number, ranging from [0, infinite) . For example, 1 represents 1 pixel. - */ -- (instancetype)initWithRequiredSecondsForImpression:(NSTimeInterval)requiredSecondsForImpression requiredViewVisibilityPixels:(CGFloat)visibilityPixels NS_DESIGNATED_INITIALIZER; - -/* - * Initializes and returns an `MPAdImpressionTimer` instance which will alert its delegate when the given - * percentage of a view (given by `startTrackingView`) has been visible for the given amount of time. - * - * requiredSecondsForImpression represents the number of seconds a view needs to be visible to count an impression. Range of the value: [0, infinite). - * visibilityPercentage is a float number, ranging from [0, 1]. 0 represents 0%, and 1 represents 100%. - */ -- (instancetype)initWithRequiredSecondsForImpression:(NSTimeInterval)requiredSecondsForImpression requiredViewVisibilityPercentage:(CGFloat)visibilityPercentage NS_DESIGNATED_INITIALIZER; - -/* - * Starts tracking a view based on the rules given in `initWithRequiredSecondsForImpression:requiredViewVisibilityPixels` - * or `initWithRequiredSecondsForImpression:requiredViewVisibilityPercentage`. Calls `adViewWillLogImpression:` on the - * delegate when an impression has been tracked. - * - * view is the view to track - */ -- (void)startTrackingView:(UIView *)view; - -/** - * `init` is not available. - */ -- (instancetype)init __attribute__((unavailable("init not available"))); - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.m deleted file mode 100644 index f004fbe72..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdImpressionTimer.m +++ /dev/null @@ -1,124 +0,0 @@ -// -// MPAdImpressionTimer.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdImpressionTimer.h" -#import "MPTimer.h" -#import "MPGlobal.h" -#import "MPLogging.h" - -@interface MPAdImpressionTimer () - -@property (nonatomic) UIView *adView; -@property (nonatomic) MPTimer *viewVisibilityTimer; -@property (nonatomic) NSTimeInterval firstVisibilityTimestamp; -@property (nonatomic) CGFloat pixelsRequiredForViewVisibility; -@property (nonatomic) CGFloat percentageRequiredForViewVisibility; -@property (nonatomic) NSTimeInterval requiredSecondsForImpression; - -@end - -@implementation MPAdImpressionTimer - -static const CGFloat kImpressionTimerInterval = 0.1; -static const NSTimeInterval kFirstVisibilityTimestampNone = -1; -static const CGFloat kDefaultPixelCountWhenUsingPercentage = CGFLOAT_MIN; - -- (instancetype)initWithRequiredSecondsForImpression:(NSTimeInterval)requiredSecondsForImpression requiredViewVisibilityPixels:(CGFloat)visibilityPixels -{ - if (self = [super init]) { - _viewVisibilityTimer = [MPTimer timerWithTimeInterval:kImpressionTimerInterval target:self selector:@selector(tick:) repeats:YES]; - _viewVisibilityTimer.runLoopMode = NSRunLoopCommonModes; - _requiredSecondsForImpression = requiredSecondsForImpression; - _pixelsRequiredForViewVisibility = visibilityPixels; - _firstVisibilityTimestamp = kFirstVisibilityTimestampNone; - } - - return self; -} - -- (instancetype)initWithRequiredSecondsForImpression:(NSTimeInterval)requiredSecondsForImpression requiredViewVisibilityPercentage:(CGFloat)visibilityPercentage -{ - if (self = [super init]) { - // Set `pixelsRequiredForViewVisibility` to a default invalid value so that we know to use the percent directly instead. - _pixelsRequiredForViewVisibility = kDefaultPixelCountWhenUsingPercentage; - - _viewVisibilityTimer = [MPTimer timerWithTimeInterval:kImpressionTimerInterval target:self selector:@selector(tick:) repeats:YES]; - _viewVisibilityTimer.runLoopMode = NSRunLoopCommonModes; - _requiredSecondsForImpression = requiredSecondsForImpression; - _percentageRequiredForViewVisibility = visibilityPercentage; - _firstVisibilityTimestamp = kFirstVisibilityTimestampNone; - } - - return self; -} - -- (void)dealloc -{ - [_viewVisibilityTimer invalidate]; - _delegate = nil; - _viewVisibilityTimer = nil; -} - -- (void)startTrackingView:(UIView *)view -{ - if (!view) { - MPLogError(@"Cannot track empty view"); - return; - } - - if (self.viewVisibilityTimer.isScheduled) { - MPLogWarn(@"viewVisibilityTimer is already started."); - return; - } - - [self.viewVisibilityTimer scheduleNow]; - self.adView = view; -} - -#pragma mark - MPTimer - -- (void)tick:(MPTimer *)timer -{ - CGFloat adViewArea = CGRectGetWidth(self.adView.bounds) * CGRectGetHeight(self.adView.bounds); - if (adViewArea == 0) { - MPLogError(@"ad view area cannot be 0"); - return; - } - - // If using pixels, recalculate the percent of the view that the pixels take up in case the view has resized - // since the previous tick. If using percent, this is irrelevant. - if (self.pixelsRequiredForViewVisibility != kDefaultPixelCountWhenUsingPercentage) { - // The following comment explains the meaning of Ads visible. - // Assume adView frame: (0, 0, 10, 10), self.requiredViewVisibilityPixels = 1. - // We get adViewArea = 10 * 10 = 100. percentVisible = (1 * 1) / 100 = 0.01 - // In this case, adView is considerated to be visible when the ratio of adView's intersection area with it's parent window is >= 0.01. - self.percentageRequiredForViewVisibility = (self.pixelsRequiredForViewVisibility * self.pixelsRequiredForViewVisibility) / adViewArea; - } - - // Calculate visibility based on percent - BOOL visible = MPViewIsVisible(self.adView) && MPViewIntersectsParentWindowWithPercent(self.adView, self.percentageRequiredForViewVisibility) && ([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive); - - if (visible) { - NSTimeInterval now = [[NSDate date] timeIntervalSinceReferenceDate]; - - if (self.firstVisibilityTimestamp == kFirstVisibilityTimestampNone) { - self.firstVisibilityTimestamp = now; - } else if (now - self.firstVisibilityTimestamp >= self.requiredSecondsForImpression) { - // Invalidate the timer and tell the delegate it should track an impression. - self.firstVisibilityTimestamp = kFirstVisibilityTimestampNone; - [self.viewVisibilityTimer invalidate]; - self.viewVisibilityTimer = nil; - - [self.delegate adViewWillLogImpression:self.adView]; - } - } else { - self.firstVisibilityTimestamp = kFirstVisibilityTimestampNone; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerCommunicator.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerCommunicator.h deleted file mode 100644 index 63f1950f2..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerCommunicator.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// MPAdServerCommunicator.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#import "MPAdConfiguration.h" -#import "MPGlobal.h" - -@protocol MPAdServerCommunicatorDelegate; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPAdServerCommunicator : NSObject - -@property (nonatomic, weak) id delegate; -@property (nonatomic, assign, readonly) BOOL loading; - -- (id)initWithDelegate:(id)delegate; - -- (void)loadURL:(NSURL *)URL; -- (void)cancel; - -- (void)sendBeforeLoadUrlWithConfiguration:(MPAdConfiguration *)configuration; -- (void)sendAfterLoadUrlWithConfiguration:(MPAdConfiguration *)configuration - adapterLoadDuration:(NSTimeInterval)duration - adapterLoadResult:(MPAfterLoadResult)result; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@protocol MPAdServerCommunicatorDelegate - -@required -- (void)communicatorDidReceiveAdConfigurations:(NSArray *)configurations; -- (void)communicatorDidFailWithError:(NSError *)error; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerCommunicator.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerCommunicator.m deleted file mode 100644 index b9d39f04a..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerCommunicator.m +++ /dev/null @@ -1,318 +0,0 @@ -// -// MPAdServerCommunicator.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdServerCommunicator.h" - -#import "MoPub.h" -#import "MPAdConfiguration.h" -#import "MPAdServerKeys.h" -#import "MPAPIEndpoints.h" -#import "MPConsentManager.h" -#import "MPCoreInstanceProvider.h" -#import "MPError.h" -#import "MPHTTPNetworkSession.h" -#import "MPLogging.h" -#import "MPURLRequest.h" - -// Multiple response JSON fields -static NSString * const kAdResponsesKey = @"ad-responses"; -static NSString * const kAdResonsesMetadataKey = @"metadata"; -static NSString * const kAdResonsesContentKey = @"content"; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPAdServerCommunicator () - -@property (nonatomic, assign, readwrite) BOOL loading; -@property (nonatomic, strong) NSURLSessionTask * task; -@property (nonatomic, strong) NSDictionary *responseHeaders; -@property (nonatomic) NSArray *topLevelJsonKeys; - -@end - -@interface MPAdServerCommunicator (Consent) - -/** - Removes all ads.mopub.com cookies that are presently saved in NSHTTPCookieStorage to avoid inadvertently - sending personal data across the wire via cookies. This method is expected to be called every ad request. - */ -- (void)removeAllMoPubCookies; - -/** - Handles all server-side consent overrides, and strips them out of the response JSON - so that they are not propagated to the rest of the responses. - @param serverResponseJson Top-level JSON response from the server - @return Top-level JSON response stripped of all consent override fields - */ -- (NSDictionary *)handleConsentOverrides:(NSDictionary *)serverResponseJson; -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPAdServerCommunicator - -- (id)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - _delegate = delegate; - _topLevelJsonKeys = @[kNextUrlMetadataKey]; - } - return self; -} - -- (void)dealloc -{ - [self.task cancel]; -} - -#pragma mark - Public - -- (void)loadURL:(NSURL *)URL -{ - [self cancel]; - - // Delete any cookies previous creatives have set before starting the load - [self removeAllMoPubCookies]; - - // Check to be sure the SDK is initialized before starting the request - if (!MoPub.sharedInstance.isSdkInitialized) { - [self failLoadForSDKInit]; - return; - } - - // Generate request - MPURLRequest * request = [[MPURLRequest alloc] initWithURL:URL]; - MPLogInfo(@"Loading ad with MoPub server URL: %@", request); - - __weak __typeof__(self) weakSelf = self; - self.task = [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:^(NSData * data, NSHTTPURLResponse * response) { - // Capture strong self for the duration of this block. - __typeof__(self) strongSelf = weakSelf; - - // Status code indicates an error. - if (response.statusCode >= 400) { - [strongSelf didFailWithError:[strongSelf errorForStatusCode:response.statusCode]]; - return; - } - - // Handle the response. - [strongSelf didFinishLoadingWithData:data]; - - } errorHandler:^(NSError * error) { - // Capture strong self for the duration of this block. - __typeof__(self) strongSelf = weakSelf; - - // Handle the error. - [strongSelf didFailWithError:error]; - }]; - - self.loading = YES; -} - -- (void)cancel -{ - self.loading = NO; - [self.task cancel]; - self.task = nil; -} - -- (void)sendBeforeLoadUrlWithConfiguration:(MPAdConfiguration *)configuration -{ - if (configuration.beforeLoadURL != nil) { - MPURLRequest * request = [MPURLRequest requestWithURL:configuration.beforeLoadURL]; - [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - MPLogTrace(@"Sucessfully sent before load URL"); - } errorHandler:^(NSError * _Nonnull error) { - MPLogWarn(@"Failed to send before load URL"); - }]; - } -} - -- (void)sendAfterLoadUrlWithConfiguration:(MPAdConfiguration *)configuration - adapterLoadDuration:(NSTimeInterval)duration - adapterLoadResult:(MPAfterLoadResult)result -{ - NSArray * afterLoadUrls = [configuration afterLoadUrlsWithLoadDuration:duration loadResult:result]; - - for (NSURL * afterLoadUrl in afterLoadUrls) { - MPURLRequest * request = [MPURLRequest requestWithURL:afterLoadUrl]; - [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - // no-op - } errorHandler:^(NSError * _Nonnull error) { - MPLogDebug(@"Failed to send after load URL: %@", afterLoadUrl); - }]; - } -} - -- (void)failLoadForSDKInit { - NSString * errorString = @"Ad prevented from loading. Error: Ad requested before initializing MoPub SDK. The MoPub SDK requires initializeSdkWithConfiguration:completion: to be called on MoPub.sharedInstance before attempting to load ads. Please update your integration."; - MPLogError(errorString); - - NSError *error = [NSError errorWithDomain:kMOPUBErrorDomain - code:MOPUBErrorSDKNotInitialized - userInfo:@{ NSLocalizedDescriptionKey : errorString }]; - [self didFailWithError:error]; -} - -#pragma mark - Handlers - -- (void)didFailWithError:(NSError *)error { - // Do not record a logging event if we failed. - self.loading = NO; - [self.delegate communicatorDidFailWithError:error]; -} - -- (void)didFinishLoadingWithData:(NSData *)data { - // Headers from the original HTTP response are intentionally ignored as laid out - // by the Client Side Waterfall design doc. - // - // The response data is a JSON payload conforming to the structure: - // { - // "ad-responses": [ - // { - // "metadata": { - // "adm": "some advanced bidding payload", - // "x-ad-timeout-ms": 5000, - // "x-adtype": "rewarded_video", - // }, - // "content": "Ad markup goes here" - // } - // ], - // "x-next-url": "https:// ..." - // } - - NSError * error = nil; - NSDictionary * json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; - if (error) { - MPLogError(@"Failed to parse ad response JSON: %@", error.localizedDescription); - self.loading = NO; - [self.delegate communicatorDidFailWithError:error]; - return; - } - - // Handle consent overrides and strip them out of the top level JSON response. - json = [self handleConsentOverrides:json]; - - NSArray *responses = [self getFlattenJsonResponses:json keys:self.topLevelJsonKeys]; - if (responses == nil) { - MPLogError(@"No ad responses"); - self.loading = NO; - [self.delegate communicatorDidFailWithError:[MOPUBError errorWithCode:MOPUBErrorUnableToParseJSONAdResponse]]; - return; - } - - MPLogInfo(@"There are %ld ad responses", responses.count); - - NSMutableArray * configurations = [NSMutableArray arrayWithCapacity:responses.count]; - for (NSDictionary * responseJson in responses) { - // The `metadata` field is required and must contain at least one entry. The `content` field is optional. - // If there is a failure, this response should be ignored. - NSDictionary * metadata = responseJson[kAdResonsesMetadataKey]; - NSData * content = [responseJson[kAdResonsesContentKey] dataUsingEncoding:NSUTF8StringEncoding]; - if (metadata == nil || (metadata != nil && metadata.count == 0)) { - MPLogError(@"The metadata field is either non-existent or empty"); - continue; - } - - MPAdConfiguration * configuration = [[MPAdConfiguration alloc] initWithMetadata:metadata data:content]; - if (configuration != nil) { - [configurations addObject:configuration]; - } - else { - MPLogInfo(@"Failed to generate configuration from\nmetadata:\n%@\nbody:\n%@", metadata, responseJson[kAdResonsesContentKey]); - } - } - - self.loading = NO; - [self.delegate communicatorDidReceiveAdConfigurations:configurations]; -} - -// Add top level json attributes to each ad server response so MPAdConfiguration contains -// all attributes for an ad response. -- (NSArray *)getFlattenJsonResponses:(NSDictionary *)json keys:(NSArray *)keys -{ - NSMutableArray *responses = json[kAdResponsesKey]; - if (responses == nil) { - return nil; - } - - NSMutableArray *flattenResponses = [NSMutableArray new]; - for (NSDictionary *response in responses) { - NSMutableDictionary *flattenResponse = [response mutableCopy]; - for (NSString *key in keys) { - flattenResponse[kAdResonsesMetadataKey] = [response[kAdResonsesMetadataKey] mutableCopy]; - flattenResponse[kAdResonsesMetadataKey][key] = json[key]; - } - [flattenResponses addObject:flattenResponse]; - } - return flattenResponses; -} - -#pragma mark - Internal - -- (NSError *)errorForStatusCode:(NSInteger)statusCode -{ - NSString *errorMessage = [NSString stringWithFormat: - NSLocalizedString(@"MoPub returned status code %d.", - @"Status code error"), - statusCode]; - NSDictionary *errorInfo = [NSDictionary dictionaryWithObject:errorMessage - forKey:NSLocalizedDescriptionKey]; - return [NSError errorWithDomain:@"mopub.com" code:statusCode userInfo:errorInfo]; -} - -@end - -#pragma mark - Consent - -@implementation MPAdServerCommunicator (Consent) - -- (void)removeAllMoPubCookies { - // Make NSURL from base URL - NSURL *moPubBaseURL = [NSURL URLWithString:[MPAPIEndpoints baseURL]]; - - // Get array of cookies with the base URL, and delete each one - NSArray * cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:moPubBaseURL]; - for (NSHTTPCookie * cookie in cookies) { - [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie]; - } -} - -/** - Handles all server-side consent overrides, and strips them out of the response JSON - so that they are not propagated to the rest of the responses. - @param serverResponseJson Top-level JSON response from the server - @return Top-level JSON response stripped of all consent override fields - */ -- (NSDictionary *)handleConsentOverrides:(NSDictionary *)serverResponseJson { - // Nothing to handle. - if (serverResponseJson == nil) { - return nil; - } - - // Handle the consent overrides - [[MPConsentManager sharedManager] forceStatusShouldForceExplicitNo:[serverResponseJson[kForceExplicitNoKey] boolValue] - shouldInvalidateConsent:[serverResponseJson[kInvalidateConsentKey] boolValue] - shouldReacquireConsent:[serverResponseJson[kReacquireConsentKey] boolValue] - shouldForceGDPRApplicability:[serverResponseJson[kForceGDPRAppliesKey] boolValue] - consentChangeReason:serverResponseJson[kConsentChangedReasonKey] - shouldBroadcast:YES]; - - // Strip out the consent overrides - NSMutableDictionary * parsedResponseJson = [serverResponseJson mutableCopy]; - parsedResponseJson[kForceExplicitNoKey] = nil; - parsedResponseJson[kInvalidateConsentKey] = nil; - parsedResponseJson[kReacquireConsentKey] = nil; - parsedResponseJson[kForceGDPRAppliesKey] = nil; - parsedResponseJson[kConsentChangedReasonKey] = nil; - - return parsedResponseJson; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerURLBuilder.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerURLBuilder.h deleted file mode 100644 index 1275f002e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerURLBuilder.h +++ /dev/null @@ -1,114 +0,0 @@ -// -// MPAdServerURLBuilder.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPURL.h" - -@class CLLocation; - -@interface MPAdServerURLBuilder : NSObject - -/** - * Returns an NSURL object given an endpoint and a dictionary of query parameters/values - */ -+ (MPURL *)URLWithEndpointPath:(NSString *)endpointPath postData:(NSDictionary *)parameters; - -@end - -@interface MPAdServerURLBuilder (Ad) - -+ (MPURL *)URLWithAdUnitID:(NSString *)adUnitID - keywords:(NSString *)keywords - userDataKeywords:(NSString *)userDataKeywords - location:(CLLocation *)location; - -+ (MPURL *)URLWithAdUnitID:(NSString *)adUnitID - keywords:(NSString *)keywords - userDataKeywords:(NSString *)userDataKeywords - location:(CLLocation *)location - desiredAssets:(NSArray *)assets - viewability:(BOOL)viewability; - -+ (MPURL *)URLWithAdUnitID:(NSString *)adUnitID - keywords:(NSString *)keywords - userDataKeywords:(NSString *)userDataKeywords - location:(CLLocation *)location - desiredAssets:(NSArray *)assets - adSequence:(NSInteger)adSequence - viewability:(BOOL)viewability; - -@end - -@interface MPAdServerURLBuilder (Open) - -/** - Constructs the conversion tracking URL using current consent state, SDK state, and @c appID parameter. - @param appID The App ID to be included in the URL. - @returns URL to the open endpoint configuring for conversion tracking. - */ -+ (MPURL *)conversionTrackingURLForAppID:(NSString *)appID; - -/** - Constructs the session tracking URL using current consent state and SDK state. - @returns URL to the open endpoint configuring for session tracking. - */ -+ (MPURL *)sessionTrackingURL; - -@end - -@interface MPAdServerURLBuilder (Consent) - -/** - Constructs the consent synchronization endpoint URL using the current consent manager - state. - @returns URL to the consent synchronization endpoint. - */ -+ (MPURL *)consentSynchronizationUrl; - -/** - Constructs the URL to fetch the consent dialog using the current consent manager state. - @returns URL to the consent dialog endpoint - */ -+ (MPURL *)consentDialogURL; - -@end - -@interface MPAdServerURLBuilder (Native) - -/** - Constructs the URL to fetch the native ad positions for the given ad unit ID. - @param adUnitId Native ad unit ID to fetch positioning information. - @return URL for the native position request if successful; otherwise @c nil. - */ -+ (MPURL *)nativePositionUrlForAdUnitId:(NSString *)adUnitId; - -@end - -@interface MPAdServerURLBuilder (Rewarded) - -/** - Appends additional reward information to the source rewarded completion. - @param sourceUrl The source rewarded completion URL given by the server. - @param customerId Optional customer ID to associate with the reward. - @param rewardType Optional reward type to associate with the customer. - Both @c rewardType and @c rewardAmount must be present in order for them to be added. - @param rewardAmount Optional reward amount to associate with the reward type. - Both @c rewardType and @c rewardAmount must be present in order for them to be added. - @param customEventName Optional name of the custom event class used to render the rewarded ad. - @param additionalData Optional additional data passed in by the publisher to be sent back to - their reward server. - @return Expandeded URL if successful; otherwise @c nil. - */ -+ (MPURL *)rewardedCompletionUrl:(NSString *)sourceUrl - withCustomerId:(NSString *)customerId - rewardType:(NSString *)rewardType - rewardAmount:(NSNumber *)rewardAmount - customEventName:(NSString *)customEventName - additionalData:(NSString *)additionalData; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerURLBuilder.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerURLBuilder.m deleted file mode 100644 index 1d9c25384..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdServerURLBuilder.m +++ /dev/null @@ -1,504 +0,0 @@ -// -// MPAdServerURLBuilder.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdServerURLBuilder.h" - -#import - -#import "MPAdvancedBiddingManager.h" -#import "MPAdServerKeys.h" -#import "MPConstants.h" -#import "MPGeolocationProvider.h" -#import "MPGlobal.h" -#import "MPIdentityProvider.h" -#import "MPCoreInstanceProvider+MRAID.h" -#import "MPReachabilityManager.h" -#import "MPAPIEndpoints.h" -#import "MPViewabilityTracker.h" -#import "NSString+MPAdditions.h" -#import "NSString+MPConsentStatus.h" -#import "MPConsentManager.h" - -static NSString * const kMoPubInterfaceOrientationPortrait = @"p"; -static NSString * const kMoPubInterfaceOrientationLandscape = @"l"; -static NSInteger const kAdSequenceNone = -1; - -@interface MPAdServerURLBuilder () - -/** - * Builds an NSMutableDictionary with all generic URL parameters and their values. The `id` URL parameter is gathered from - * the `idParameter` method parameter because it has different uses depending on the URL. This base set of parameters - * includes the following: - * - ID Parameter (`id`) - * - Server API Version Used (`v`) - * - SDK Version (`nv`) - * - Application Version (`av`) - * - GDPR Region Applicable (`gdpr_applies`) - * - Current Consent Status (`current_consent_status`) - * - Limit Ad Tracking Status (`dnt`) - * - Bundle Identifier (`bundle`) - * - IF AVAILABLE: Consented Privacy Policy Version (`consented_privacy_policy_version`) - * - IF AVAILABLE: Consented Vendor List Version (`consented_vendor_list_version`) - */ -+ (NSMutableDictionary *)baseParametersDictionaryWithIDParameter:(NSString *)idParameter; - -/** - * Builds an NSMutableDictionary with all generic URL parameters above and their values, but with the addition of IDFA. - * If @c usingIDFAForConsent is @c YES, the IDFA will be gathered from MPConsentManager (which may be nil without - * consent). Otherwise, the IDFA will be taken from MPIdentityProvider, which will always have a value, but may be - * MoPub's value. - */ -+ (NSMutableDictionary *)baseParametersDictionaryWithIDFAUsingIDFAForConsent:(BOOL)usingIDFAForConsent - withIDParameter:(NSString *)idParameter; - -@end - -@implementation MPAdServerURLBuilder - -+ (MPURL *)URLWithEndpointPath:(NSString *)endpointPath postData:(NSDictionary *)parameters { - // Build the full URL string - NSURLComponents * components = [MPAPIEndpoints baseURLComponentsWithPath:endpointPath]; - return [MPURL URLWithComponents:components postData:parameters]; -} - -+ (NSMutableDictionary *)baseParametersDictionaryWithIDParameter:(NSString *)idParameter { - MPConsentManager * manager = MPConsentManager.sharedManager; - NSMutableDictionary * queryParameters = [NSMutableDictionary dictionary]; - - // REQUIRED: ID Parameter (used for different things depending on which URL, take from method parameter) - queryParameters[kAdServerIDKey] = idParameter; - - // REQUIRED: Server API Version - queryParameters[kServerAPIVersionKey] = MP_SERVER_VERSION; - - // REQUIRED: SDK Version - queryParameters[kSDKVersionKey] = MP_SDK_VERSION; - - // REQUIRED: Application Version - queryParameters[kApplicationVersionKey] = [self applicationVersion]; - - // REQUIRED: GDPR region applicable - if (manager.isGDPRApplicable != MPBoolUnknown) { - queryParameters[kGDPRAppliesKey] = manager.isGDPRApplicable > 0 ? @"1" : @"0"; - } - - // REQUIRED: GDPR applicable was forced - queryParameters[kForceGDPRAppliesKey] = manager.forceIsGDPRApplicable ? @"1" : @"0"; - - // REQUIRED: Current consent status - queryParameters[kCurrentConsentStatusKey] = [NSString stringFromConsentStatus:manager.currentStatus]; - - // REQUIRED: DNT, Bundle - queryParameters[kDoNotTrackIdKey] = [MPIdentityProvider advertisingTrackingEnabled] ? nil : @"1"; - queryParameters[kBundleKey] = [[NSBundle mainBundle] bundleIdentifier]; - - // OPTIONAL: Consented versions - queryParameters[kConsentedPrivacyPolicyVersionKey] = manager.consentedPrivacyPolicyVersion; - queryParameters[kConsentedVendorListVersionKey] = manager.consentedVendorListVersion; - - return queryParameters; -} - -+ (NSMutableDictionary *)baseParametersDictionaryWithIDFAUsingIDFAForConsent:(BOOL)usingIDFAForConsent - withIDParameter:(NSString *)idParameter { - MPConsentManager * manager = MPConsentManager.sharedManager; - NSMutableDictionary * queryParameters = [self baseParametersDictionaryWithIDParameter:idParameter]; - - // OPTIONAL: IDFA if available - if (usingIDFAForConsent) { - queryParameters[kIdfaKey] = manager.ifaForConsent; - } else { - queryParameters[kIdfaKey] = [MPIdentityProvider identifier]; - } - - return queryParameters; -} - -+ (NSString *)applicationVersion { - static NSString * gApplicationVersion; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - gApplicationVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]; - }); - - return gApplicationVersion; -} - -@end - -@implementation MPAdServerURLBuilder (Ad) - -+ (MPURL *)URLWithAdUnitID:(NSString *)adUnitID - keywords:(NSString *)keywords - userDataKeywords:(NSString *)userDataKeywords - location:(CLLocation *)location -{ - return [self URLWithAdUnitID:adUnitID - keywords:keywords - userDataKeywords:userDataKeywords - location:location - desiredAssets:nil - viewability:YES]; -} - -+ (MPURL *)URLWithAdUnitID:(NSString *)adUnitID - keywords:(NSString *)keywords - userDataKeywords:(NSString *)userDataKeywords - location:(CLLocation *)location - desiredAssets:(NSArray *)assets - viewability:(BOOL)viewability -{ - - - return [self URLWithAdUnitID:adUnitID - keywords:keywords - userDataKeywords:userDataKeywords - location:location - desiredAssets:assets - adSequence:kAdSequenceNone - viewability:viewability]; -} - -+ (MPURL *)URLWithAdUnitID:(NSString *)adUnitID - keywords:(NSString *)keywords - userDataKeywords:(NSString *)userDataKeywords - location:(CLLocation *)location - desiredAssets:(NSArray *)assets - adSequence:(NSInteger)adSequence - viewability:(BOOL)viewability -{ - // In the event that the `adUnitIdUsedForConsent` from `MPConsentManager` is still `nil`, - // we should populate it with this `adUnitId`. This is to cover the edge case where the - // publisher does not explcitily initialize the SDK via `initializeSdkWithConfiguration:completion:`. - if (adUnitID != nil && MPConsentManager.sharedManager.adUnitIdUsedForConsent == nil) { - MPConsentManager.sharedManager.adUnitIdUsedForConsent = adUnitID; - } - - NSMutableDictionary * queryParams = [self baseParametersDictionaryWithIDFAUsingIDFAForConsent:NO - withIDParameter:adUnitID]; - - queryParams[kOrientationKey] = [self orientationValue]; - queryParams[kScaleFactorKey] = [self scaleFactorValue]; - queryParams[kTimeZoneKey] = [self timeZoneValue]; - queryParams[kIsMRAIDEnabledSDKKey] = [self isMRAIDEnabledSDKValue]; - queryParams[kConnectionTypeKey] = [self connectionTypeValue]; - queryParams[kCarrierNameKey] = [self carrierNameValue]; - queryParams[kISOCountryCodeKey] = [self isoCountryCodeValue]; - queryParams[kMobileNetworkCodeKey] = [self mobileNetworkCodeValue]; - queryParams[kMobileCountryCodeKey] = [self mobileCountryCodeValue]; - queryParams[kDeviceNameKey] = [self deviceNameValue]; - queryParams[kDesiredAdAssetsKey] = [self desiredAdAssetsValue:assets]; - queryParams[kAdSequenceKey] = [self adSequenceValue:adSequence]; - queryParams[kScreenResolutionWidthKey] = [self physicalScreenResolutionWidthValue]; - queryParams[kScreenResolutionHeightKey] = [self physicalScreenResolutionHeightValue]; - queryParams[kAppTransportSecurityStatusKey] = [self appTransportSecurityStatusValue]; - queryParams[kKeywordsKey] = [self keywordsValue:keywords]; - queryParams[kUserDataKeywordsKey] = [self userDataKeywordsValue:userDataKeywords]; - queryParams[kViewabilityStatusKey] = [self viewabilityStatusValue:viewability]; - queryParams[kAdvancedBiddingKey] = [self advancedBiddingValue]; - [queryParams addEntriesFromDictionary:[self locationInformationDictionary:location]]; - - return [self URLWithEndpointPath:MOPUB_API_PATH_AD_REQUEST postData:queryParams]; -} - -+ (NSString *)orientationValue -{ - UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; - return UIInterfaceOrientationIsPortrait(orientation) ? - kMoPubInterfaceOrientationPortrait : kMoPubInterfaceOrientationLandscape; -} - -+ (NSString *)scaleFactorValue -{ - return [NSString stringWithFormat:@"%.1f", MPDeviceScaleFactor()]; -} - -+ (NSString *)timeZoneValue -{ - static NSDateFormatter *formatter; - @synchronized(self) - { - if (!formatter) formatter = [[NSDateFormatter alloc] init]; - } - [formatter setDateFormat:@"Z"]; - NSDate *today = [NSDate date]; - return [formatter stringFromDate:today]; -} - -+ (NSString *)isMRAIDEnabledSDKValue -{ - BOOL isMRAIDEnabled = [[MPCoreInstanceProvider sharedProvider] isMraidJavascriptAvailable] && - NSClassFromString(@"MPMRAIDBannerCustomEvent") != Nil && - NSClassFromString(@"MPMRAIDInterstitialCustomEvent") != Nil; - return isMRAIDEnabled ? @"1" : nil; -} - -+ (NSString *)connectionTypeValue -{ - return [NSString stringWithFormat:@"%ld", (long)MPReachabilityManager.sharedManager.currentStatus]; -} - -+ (NSString *)carrierNameValue -{ - NSString *carrierName = [[[MPCoreInstanceProvider sharedProvider] sharedCarrierInfo] objectForKey:@"carrierName"]; - return carrierName; -} - -+ (NSString *)isoCountryCodeValue -{ - NSString *code = [[[MPCoreInstanceProvider sharedProvider] sharedCarrierInfo] objectForKey:@"isoCountryCode"]; - return code; -} - -+ (NSString *)mobileNetworkCodeValue -{ - NSString *code = [[[MPCoreInstanceProvider sharedProvider] sharedCarrierInfo] objectForKey:@"mobileNetworkCode"]; - return code; -} - -+ (NSString *)mobileCountryCodeValue -{ - NSString *code = [[[MPCoreInstanceProvider sharedProvider] sharedCarrierInfo] objectForKey:@"mobileCountryCode"]; - return code; -} - -+ (NSString *)deviceNameValue -{ - NSString *deviceName = [[UIDevice currentDevice] mp_hardwareDeviceName]; - return deviceName; -} - -+ (NSString *)desiredAdAssetsValue:(NSArray *)assets -{ - NSString *concatenatedAssets = [assets componentsJoinedByString:@","]; - return [concatenatedAssets length] ? concatenatedAssets : nil; -} - -+ (NSString *)adSequenceValue:(NSInteger)adSequence -{ - return (adSequence >= 0) ? [NSString stringWithFormat:@"%ld", (long)adSequence] : nil; -} - -+ (NSString *)physicalScreenResolutionWidthValue -{ - return [NSString stringWithFormat:@"%.0f", MPScreenResolution().width]; -} - -+ (NSString *)physicalScreenResolutionHeightValue -{ - return [NSString stringWithFormat:@"%.0f", MPScreenResolution().height]; -} - -+ (NSString *)appTransportSecurityStatusValue -{ - return [NSString stringWithFormat:@"%@", @([[MPCoreInstanceProvider sharedProvider] appTransportSecuritySettings])]; -} - -+ (NSString *)keywordsValue:(NSString *)keywords -{ - return keywords; -} - -+ (NSString *)userDataKeywordsValue:(NSString *)userDataKeywords -{ - // Avoid sending user data keywords if we are not allowed to collect personal info - if (![MPConsentManager sharedManager].canCollectPersonalInfo) { - return nil; - } - - return userDataKeywords; -} - -+ (NSString *)viewabilityStatusValue:(BOOL)isViewabilityEnabled { - if (!isViewabilityEnabled) { - return nil; - } - - return [NSString stringWithFormat:@"%d", (int)[MPViewabilityTracker enabledViewabilityVendors]]; -} - -+ (NSString *)advancedBiddingValue { - // Opted out of advanced bidding, no query parameter should be sent. - if (![MPAdvancedBiddingManager sharedManager].advancedBiddingEnabled) { - return nil; - } - - // No JSON at this point means that no advanced bidders were initialized. - NSString * tokens = MPAdvancedBiddingManager.sharedManager.bidderTokensJson; - if (tokens == nil) { - return nil; - } - - return tokens; -} - -+ (NSDictionary *)locationInformationDictionary:(CLLocation *)location { - if (![MPConsentManager.sharedManager canCollectPersonalInfo] || !location) { - return @{}; - } - - NSMutableDictionary *locationDict = [NSMutableDictionary dictionary]; - - CLLocation *bestLocation = location; - CLLocation *locationFromProvider = [[[MPCoreInstanceProvider sharedProvider] sharedMPGeolocationProvider] lastKnownLocation]; - - if (locationFromProvider) { - bestLocation = locationFromProvider; - } - - if (bestLocation && bestLocation.horizontalAccuracy >= 0) { - locationDict[kLocationLatitudeLongitudeKey] = [NSString stringWithFormat:@"%@,%@", - @(bestLocation.coordinate.latitude), - @(bestLocation.coordinate.longitude)]; - if (bestLocation.horizontalAccuracy) { - locationDict[kLocationHorizontalAccuracy] = [NSString stringWithFormat:@"%@", @(bestLocation.horizontalAccuracy)]; - } - - if (bestLocation == locationFromProvider) { - locationDict[kLocationIsFromSDK] = @"1"; - } - - NSTimeInterval locationLastUpdatedMillis = [[NSDate date] timeIntervalSinceDate:bestLocation.timestamp] * 1000.0; - locationDict[kLocationLastUpdatedMilliseconds] = [NSString stringWithFormat:@"%.0f", locationLastUpdatedMillis]; - } - - return locationDict; -} - -@end - -@implementation MPAdServerURLBuilder (Open) - -+ (NSURL *)conversionTrackingURLForAppID:(NSString *)appID { - return [self openEndpointURLWithIDParameter:appID isSessionTracking:NO]; -} - -+ (MPURL *)sessionTrackingURL { - NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier]; - return [self openEndpointURLWithIDParameter:bundleIdentifier isSessionTracking:YES]; -} - -+ (MPURL *)openEndpointURLWithIDParameter:(NSString *)idParameter isSessionTracking:(BOOL)isSessionTracking { - NSMutableDictionary * queryParameters = [self baseParametersDictionaryWithIDFAUsingIDFAForConsent:NO - withIDParameter:idParameter]; - - // OPTIONAL: Include Session Tracking Parameter if needed - if (isSessionTracking) { - queryParameters[kOpenEndpointSessionTrackingKey] = @"1"; - } - - return [self URLWithEndpointPath:MOPUB_API_PATH_OPEN postData:queryParameters]; -} - -@end - -@implementation MPAdServerURLBuilder (Consent) - -#pragma mark - Consent URLs - -+ (MPURL *)consentSynchronizationUrl { - MPConsentManager * manager = MPConsentManager.sharedManager; - - // REQUIRED: Ad unit ID for consent may be empty if the publisher - // never initialized the SDK. - NSMutableDictionary * postData = [self baseParametersDictionaryWithIDFAUsingIDFAForConsent:YES - withIDParameter:manager.adUnitIdUsedForConsent]; - - // OPTIONAL: Last synchronized consent status, last changed reason, - // last changed timestamp in milliseconds - postData[kLastSynchronizedConsentStatusKey] = manager.lastSynchronizedStatus; - postData[kConsentChangedReasonKey] = manager.lastChangedReason; - postData[kLastChangedMsKey] = manager.lastChangedTimestampInMilliseconds > 0 ? [NSString stringWithFormat:@"%llu", (unsigned long long)manager.lastChangedTimestampInMilliseconds] : nil; - - // OPTIONAL: Cached IAB Vendor List Hash Key - postData[kCachedIabVendorListHashKey] = manager.iabVendorListHash; - - // OPTIONAL: Server extras - postData[kExtrasKey] = manager.extras; - - // OPTIONAL: Force GDPR appliciability has changed - postData[kForcedGDPRAppliesChangedKey] = manager.isForcedGDPRAppliesTransition ? @"1" : nil; - - return [self URLWithEndpointPath:MOPUB_API_PATH_CONSENT_SYNC postData:postData]; -} - -+ (MPURL *)consentDialogURL { - MPConsentManager * manager = MPConsentManager.sharedManager; - - // REQUIRED: Ad unit ID for consent; may be empty if the publisher - // never initialized the SDK. - NSMutableDictionary * postData = [self baseParametersDictionaryWithIDParameter:manager.adUnitIdUsedForConsent]; - - // REQUIRED: Language - postData[kLanguageKey] = manager.currentLanguageCode; - - return [self URLWithEndpointPath:MOPUB_API_PATH_CONSENT_DIALOG postData:postData]; -} - -@end - -@implementation MPAdServerURLBuilder (Native) - -+ (MPURL *)nativePositionUrlForAdUnitId:(NSString *)adUnitId { - // No ad unit ID - if (adUnitId == nil) { - return nil; - } - - NSDictionary * queryItems = [self baseParametersDictionaryWithIDFAUsingIDFAForConsent:NO withIDParameter:adUnitId]; - return [self URLWithEndpointPath:MOPUB_API_PATH_NATIVE_POSITIONING postData:queryItems]; -} - -@end - -@implementation MPAdServerURLBuilder (Rewarded) - -+ (MPURL *)rewardedCompletionUrl:(NSString *)sourceUrl - withCustomerId:(NSString *)customerId - rewardType:(NSString *)rewardType - rewardAmount:(NSNumber *)rewardAmount - customEventName:(NSString *)customEventName - additionalData:(NSString *)additionalData { - - NSURLComponents * components = [NSURLComponents componentsWithString:sourceUrl]; - - // Build the additional query parameters to be appended to the existing set. - NSMutableDictionary * postData = [NSMutableDictionary dictionary]; - - // REQUIRED: Rewarded APIVersion - postData[kServerAPIVersionKey] = MP_REWARDED_API_VERSION; - - // REQUIRED: SDK Version - postData[kSDKVersionKey] = MP_SDK_VERSION; - - // OPTIONAL: Customer ID - if (customerId != nil && customerId.length > 0) { - postData[kCustomerIdKey] = customerId; - } - - // OPTIONAL: Rewarded currency and amount - if (rewardType != nil && rewardType.length > 0 && rewardAmount != nil) { - postData[kRewardedCurrencyNameKey] = rewardType; - postData[kRewardedCurrencyAmountKey] = [NSString stringWithFormat:@"%i", rewardAmount.intValue]; - } - - // OPTIONAL: Rewarded custom event name - if (customEventName != nil) { - postData[kRewardedCustomEventNameKey] = customEventName; - } - - // OPTIONAL: Additional publisher data - if (additionalData != nil) { - postData[kRewardedCustomDataKey] = additionalData; - } - - return [MPURL URLWithComponents:components postData:postData]; -} - -@end - diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.h deleted file mode 100644 index 37cff36d3..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.h +++ /dev/null @@ -1,68 +0,0 @@ -// -// MPClosableView.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPWebView; - -enum { - MPClosableViewCloseButtonLocationTopRight, - MPClosableViewCloseButtonLocationTopLeft, - MPClosableViewCloseButtonLocationTopCenter, - MPClosableViewCloseButtonLocationBottomRight, - MPClosableViewCloseButtonLocationBottomLeft, - MPClosableViewCloseButtonLocationBottomCenter, - MPClosableViewCloseButtonLocationCenter -}; -typedef NSInteger MPClosableViewCloseButtonLocation; - -enum { - MPClosableViewCloseButtonTypeNone, - MPClosableViewCloseButtonTypeTappableWithoutImage, - MPClosableViewCloseButtonTypeTappableWithImage, -}; -typedef NSInteger MPClosableViewCloseButtonType; - -CGRect MPClosableViewCustomCloseButtonFrame(CGSize size, MPClosableViewCloseButtonLocation closeButtonLocation); - -@protocol MPClosableViewDelegate; - -/** - * `MPClosableView` is composed of a content view and a close button. The close button can - * be positioned at any corner, the center of top and bottom edges, and the center of the view. - * The close button can either be a button that is tappable with image, tappable without an image, - * and completely disabled altogether. Finally, `MPClosableView` keeps track as to whether or not - * it has been tapped. - */ -@interface MPClosableView : UIView - -@property (nonatomic, weak) id delegate; -@property (nonatomic, assign) MPClosableViewCloseButtonType closeButtonType; -@property (nonatomic, assign) MPClosableViewCloseButtonLocation closeButtonLocation; -@property (nonatomic, readonly) BOOL wasTapped; -@property (nonatomic, strong, readonly) UIButton *closeButton; - -- (instancetype)initWithFrame:(CGRect)frame - webView:(MPWebView *)webView - delegate:(id)delegate; - -@end - -/** - * `MPClosableViewDelegate` allows an object that implements `MPClosableViewDelegate` to - * be notified when the close button of the `MPClosableView` has been tapped. - */ -@protocol MPClosableViewDelegate - -- (void)closeButtonPressed:(MPClosableView *)closableView; - -@optional - -- (void)closableView:(MPClosableView *)closableView didMoveToWindow:(UIWindow *)window; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.m deleted file mode 100644 index da4b83b20..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPClosableView.m +++ /dev/null @@ -1,222 +0,0 @@ -// -// MPClosableView.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPClosableView.h" -#import "MPGlobal.h" -#import "MPUserInteractionGestureRecognizer.h" -#import "MPWebView.h" - -static CGFloat kCloseRegionWidth = 50.0f; -static CGFloat kCloseRegionHeight = 50.0f; -static NSString *const kExpandableCloseButtonImageName = @"MPCloseButtonX.png"; - -CGRect MPClosableViewCustomCloseButtonFrame(CGSize size, MPClosableViewCloseButtonLocation closeButtonLocation) -{ - CGFloat width = size.width; - CGFloat height = size.height; - CGRect closeButtonFrame = CGRectMake(0.0f, 0.0f, kCloseRegionWidth, kCloseRegionHeight); - - switch (closeButtonLocation) { - case MPClosableViewCloseButtonLocationTopRight: - closeButtonFrame.origin = CGPointMake(width-kCloseRegionWidth, 0.0f); - break; - case MPClosableViewCloseButtonLocationTopLeft: - closeButtonFrame.origin = CGPointMake(0.0f, 0.0f); - break; - case MPClosableViewCloseButtonLocationTopCenter: - closeButtonFrame.origin = CGPointMake((width-kCloseRegionWidth) / 2.0f, 0.0f); - break; - case MPClosableViewCloseButtonLocationBottomRight: - closeButtonFrame.origin = CGPointMake(width-kCloseRegionWidth, height-kCloseRegionHeight); - break; - case MPClosableViewCloseButtonLocationBottomLeft: - closeButtonFrame.origin = CGPointMake(0.0f, height-kCloseRegionHeight); - break; - case MPClosableViewCloseButtonLocationBottomCenter: - closeButtonFrame.origin = CGPointMake((width-kCloseRegionWidth) / 2.0f, height-kCloseRegionHeight); - break; - case MPClosableViewCloseButtonLocationCenter: - closeButtonFrame.origin = CGPointMake((width-kCloseRegionWidth) / 2.0f, (height-kCloseRegionHeight) / 2.0f); - break; - default: - closeButtonFrame.origin = CGPointMake(width-kCloseRegionWidth, 0.0f); - break; - } - - return closeButtonFrame; -} - -@interface MPClosableView () - -@property (nonatomic, strong, readwrite) UIButton *closeButton; -@property (nonatomic, strong) UIImage *closeButtonImage; -@property (nonatomic, strong) MPUserInteractionGestureRecognizer *userInteractionRecognizer; -@property (nonatomic, assign) BOOL wasTapped; - -@end - -@implementation MPClosableView - -- (instancetype)initWithFrame:(CGRect)frame - webView:(MPWebView *)webView - delegate:(id)delegate { - self = [super initWithFrame:frame]; - - if (self) { - self.backgroundColor = [UIColor clearColor]; - self.opaque = NO; - self.clipsToBounds = YES; - - _delegate = delegate; - - // Set up close button - _closeButtonLocation = MPClosableViewCloseButtonLocationTopRight; - - _userInteractionRecognizer = [[MPUserInteractionGestureRecognizer alloc] initWithTarget:self action:@selector(handleInteraction:)]; - _userInteractionRecognizer.cancelsTouchesInView = NO; - [self addGestureRecognizer:_userInteractionRecognizer]; - _userInteractionRecognizer.delegate = self; - - _closeButtonImage = [UIImage imageNamed:MPResourcePathForResource(kExpandableCloseButtonImageName)]; - - _closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; - _closeButton.backgroundColor = [UIColor clearColor]; - _closeButton.accessibilityLabel = @"Close Interstitial Ad"; - - [_closeButton addTarget:self action:@selector(closeButtonPressed) forControlEvents:UIControlEventTouchUpInside]; - - [self setCloseButtonType:MPClosableViewCloseButtonTypeTappableWithImage]; - - [self addSubview:_closeButton]; - - // Set up web view - webView.frame = self.bounds; - [self addSubview:webView]; - } - - return self; -} - -- (void)dealloc -{ - _userInteractionRecognizer.delegate = nil; - [self.userInteractionRecognizer removeTarget:self action:nil]; -} - -- (void)layoutSubviews -{ - if (@available(iOS 11, *)) { - self.closeButton.translatesAutoresizingMaskIntoConstraints = NO; - - NSMutableArray *constraints = [NSMutableArray arrayWithObjects: - [self.closeButton.widthAnchor constraintEqualToConstant:kCloseRegionWidth], - [self.closeButton.heightAnchor constraintEqualToConstant:kCloseRegionHeight], - nil]; - - switch (self.closeButtonLocation) { - case MPClosableViewCloseButtonLocationTopRight: - [constraints addObject:[self.closeButton.trailingAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.trailingAnchor]]; - [constraints addObject:[self.closeButton.topAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.topAnchor]]; - break; - case MPClosableViewCloseButtonLocationTopLeft: - [constraints addObject:[self.closeButton.leadingAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.leadingAnchor]]; - [constraints addObject:[self.closeButton.topAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.topAnchor]]; - break; - case MPClosableViewCloseButtonLocationTopCenter: - [constraints addObject:[self.closeButton.topAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.topAnchor]]; - [constraints addObject:[self.closeButton.centerXAnchor constraintEqualToAnchor:self.centerXAnchor]]; - break; - case MPClosableViewCloseButtonLocationBottomRight: - [constraints addObject:[self.closeButton.trailingAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.trailingAnchor]]; - [constraints addObject:[self.closeButton.bottomAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.bottomAnchor]]; - break; - case MPClosableViewCloseButtonLocationBottomLeft: - [constraints addObject:[self.closeButton.leadingAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.leadingAnchor]]; - [constraints addObject:[self.closeButton.bottomAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.bottomAnchor]]; - break; - case MPClosableViewCloseButtonLocationBottomCenter: - [constraints addObject:[self.closeButton.bottomAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.bottomAnchor]]; - [constraints addObject:[self.closeButton.centerXAnchor constraintEqualToAnchor:self.centerXAnchor]]; - break; - case MPClosableViewCloseButtonLocationCenter: - [constraints addObject:[self.closeButton.centerXAnchor constraintEqualToAnchor:self.centerXAnchor]]; - [constraints addObject:[self.closeButton.centerYAnchor constraintEqualToAnchor:self.centerYAnchor]]; - break; - default: - // Top-right default - [constraints addObject:[self.closeButton.trailingAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.trailingAnchor]]; - [constraints addObject:[self.closeButton.topAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.topAnchor]]; - break; - } - - [NSLayoutConstraint activateConstraints:constraints]; - } else { - self.closeButton.frame = MPClosableViewCustomCloseButtonFrame(self.bounds.size, self.closeButtonLocation); - } - - [self bringSubviewToFront:self.closeButton]; -} - -- (void)didMoveToWindow -{ - if ([self.delegate respondsToSelector:@selector(closableView:didMoveToWindow:)]) { - [self.delegate closableView:self didMoveToWindow:self.window]; - } -} - -- (void)setCloseButtonType:(MPClosableViewCloseButtonType)closeButtonType -{ - _closeButtonType = closeButtonType; - - switch (closeButtonType) { - case MPClosableViewCloseButtonTypeNone: - self.closeButton.hidden = YES; - break; - case MPClosableViewCloseButtonTypeTappableWithoutImage: - self.closeButton.hidden = NO; - [self.closeButton setImage:nil forState:UIControlStateNormal]; - break; - case MPClosableViewCloseButtonTypeTappableWithImage: - self.closeButton.hidden = NO; - [self.closeButton setImage:self.closeButtonImage forState:UIControlStateNormal]; - break; - default: - self.closeButton.hidden = NO; - [self.closeButton setImage:self.closeButtonImage forState:UIControlStateNormal]; - break; - } -} - -- (void)setCloseButtonLocation:(MPClosableViewCloseButtonLocation)closeButtonLocation -{ - _closeButtonLocation = closeButtonLocation; - [self setNeedsLayout]; -} - -- (void)handleInteraction:(UIGestureRecognizer *)gestureRecognizer -{ - if (gestureRecognizer.state == UIGestureRecognizerStateEnded) { - self.wasTapped = YES; - } -} - -#pragma mark - - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer; -{ - return YES; -} - -#pragma mark - - -- (void)closeButtonPressed -{ - [self.delegate closeButtonPressed:self]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPCountdownTimerView.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPCountdownTimerView.h deleted file mode 100644 index 2003465fe..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPCountdownTimerView.h +++ /dev/null @@ -1,59 +0,0 @@ -// -// MPCountdownTimerView.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/** - * A view that will display a countdown timer and invoke a completion block once - * the timer has elapsed. - */ -@interface MPCountdownTimerView : UIView - -/** - * Flag indicating if the timer is active. - */ -@property (nonatomic, readonly) BOOL isActive; - -/** - * Flag indicating if the timer is currently paused. - */ -@property (nonatomic, readonly) BOOL isPaused; - -/** - * Initializes a countdown timer view. The timer is not automatically started. - * - * @param frame Frame of the view. - * @param seconds Duration of the timer in seconds. This value must be greater than zero. - * @returns An initialized timer if successful; otherwise nil. - */ -- (instancetype)initWithFrame:(CGRect)frame duration:(NSTimeInterval)seconds; - -/** - * Starts the countdown timer. If the timer has already started, calling this method again will do nothing. - * - * @param completion Completion block that is fired when the timer elapses or is stopped. - */ -- (void)startWithTimerCompletion:(void(^)(BOOL hasElapsed))completion; - -/** - * Stops the timer and optionally invokes the completion block from `startWithTimerCompletion:`. - * If the timer hasn't started, calling this method will do nothing. - */ -- (void)stopAndSignalCompletion:(BOOL)shouldSignalCompletion; - -/** - * Pauses the timer. If the timer hasn't started, calling this method will do nothing. - */ -- (void)pause; - -/** - * Resumes the timer. If the timer isn't paused, calling this method will do nothing. - */ -- (void)resume; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPCountdownTimerView.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPCountdownTimerView.m deleted file mode 100644 index 9b82d9d4b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPCountdownTimerView.m +++ /dev/null @@ -1,196 +0,0 @@ -// -// MPCountdownTimerView.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPCountdownTimerView.h" -#import "MPLogging.h" -#import "MPTimer.h" -#import "NSBundle+MPAdditions.h" - -// The frequency at which the internal timer is fired in seconds. -// This value matches the step size of the jQuery knob in MPCountdownTimer.html. -static const NSTimeInterval kCountdownTimerInterval = 0.05; - -@interface MPCountdownTimerView() -@property (nonatomic, assign, readwrite) BOOL isPaused; - -@property (nonatomic, copy) void(^completionBlock)(BOOL); -@property (nonatomic, assign) NSTimeInterval currentSeconds; -@property (nonatomic, strong) MPTimer * timer; -@property (nonatomic, strong) UIWebView * timerView; -@end - -@implementation MPCountdownTimerView - -#pragma mark - Initialization - -- (instancetype)initWithFrame:(CGRect)frame duration:(NSTimeInterval)seconds { - if (self = [super initWithFrame:frame]) { - // Duration should be non-negative. - if (seconds < 0) { - MPLogDebug(@"Attempted to initialize MPCountdownTimerView with a negative duration. No timer will be created."); - return nil; - } - - _completionBlock = nil; - _currentSeconds = seconds; - _isPaused = NO; - _timer = nil; - _timerView = ({ - UIWebView * view = [[UIWebView alloc] initWithFrame:self.bounds]; - view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - view.backgroundColor = [UIColor clearColor]; - view.delegate = self; - view.opaque = NO; - view.userInteractionEnabled = NO; - view; - }); - self.userInteractionEnabled = NO; - - [self addSubview:_timerView]; - [_timerView loadHTMLString:self.timerHtml baseURL:self.timerBaseUrl]; - } - - return self; -} - -- (void)dealloc { - // Stop the timer if the view is going away, but do not notify the completion block - // if there is one. - _completionBlock = nil; - [self stopAndSignalCompletion:NO]; -} - -#pragma mark - Timer - -- (BOOL)isActive { - return (self.timer != nil); -} - -- (void)startWithTimerCompletion:(void(^)(BOOL hasElapsed))completion { - if (self.isActive) { - return; - } - - // Reset any internal state that may be dirty from a previous timer run. - self.isPaused = NO; - - // Copy the completion block and set up the initial state of the timer. - self.completionBlock = completion; - - // Start the timer now. - self.timer = [MPTimer timerWithTimeInterval:kCountdownTimerInterval - target:self - selector:@selector(onTimerUpdate:) - repeats:YES]; - [self.timer scheduleNow]; - - MPLogInfo(@"MPCountdownTimerView started"); -} - -- (void)stopAndSignalCompletion:(BOOL)shouldSignalCompletion { - if (!self.isActive) { - return; - } - - // Invalidate and clear the timer to stop it completely. - [self.timer invalidate]; - self.timer = nil; - - MPLogInfo(@"MPCountdownTimerView stopped"); - - // Notify the completion block and clear it out once it's handling has finished. - if (shouldSignalCompletion && self.completionBlock != nil) { - BOOL hasElapsed = (self.currentSeconds <= 0); - self.completionBlock(hasElapsed); - - MPLogInfo(@"MPCountdownTimerView completion block notified"); - } - - // Clear out the completion block since the timer has stopped and it is - // no longer needed for this instance. - self.completionBlock = nil; -} - -- (void)pause { - if (!self.isActive) { - return; - } - - self.isPaused = [self.timer pause]; - if (self.isPaused) { - MPLogInfo(@"MPCountdownTimerView paused"); - } -} - -- (void)resume { - if (!self.isActive) { - return; - } - - if ([self.timer resume]) { - self.isPaused = NO; - MPLogInfo(@"MPCountdownTimerView resumed"); - } -} - -#pragma mark - Resources - -- (NSString *)timerHtml { - // Save the contents of the HTML into a static string since it will not change - // across instances. - static NSString * html = nil; - - if (html == nil) { - NSBundle * parentBundle = [NSBundle resourceBundleForClass:self.class]; - NSString * filepath = [parentBundle pathForResource:@"MPCountdownTimer" ofType:@"html"]; - html = [NSString stringWithContentsOfFile:filepath encoding:NSUTF8StringEncoding error:nil]; - - if (html == nil) { - MPLogError(@"Could not find MPCountdownTimer.html in bundle %@", parentBundle.bundlePath); - } - } - - return html; -} - -- (NSURL *)timerBaseUrl { - // Save the base URL into a static string since it will not change - // across instances. - static NSURL * baseUrl = nil; - - if (baseUrl == nil) { - NSBundle * parentBundle = [NSBundle resourceBundleForClass:self.class]; - baseUrl = [NSURL fileURLWithPath:parentBundle.bundlePath]; - } - - return baseUrl; -} - -#pragma mark - MPTimer - -- (void)onTimerUpdate:(MPTimer *)sender { - // Update the count. - self.currentSeconds -= kCountdownTimerInterval; - - NSString * jsToEvaluate = [NSString stringWithFormat:@"setCounterValue(%f);", self.currentSeconds]; - [self.timerView stringByEvaluatingJavaScriptFromString:jsToEvaluate]; - - // Stop the timer and notify the completion block. - if (self.currentSeconds <= 0) { - [self stopAndSignalCompletion:YES]; - } -} - -#pragma mark - UIWebViewDelegate - -- (void)webViewDidFinishLoad:(UIWebView *)webView { - NSString * jsToEvaluate = [NSString stringWithFormat:@"setMaxCounterValue(%f); setCounterValue(%f);", self.currentSeconds, self.currentSeconds]; - [self.timerView stringByEvaluatingJavaScriptFromString:jsToEvaluate]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.h deleted file mode 100644 index 1b1153b63..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPEnhancedDeeplinkRequest.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPEnhancedDeeplinkRequest : NSObject - -@property (copy) NSURL *originalURL; - -// Request components derived from the original URL. -@property (copy) NSURL *primaryURL; -@property (strong) NSArray *primaryTrackingURLs; -@property (copy) NSURL *fallbackURL; -@property (strong) NSArray *fallbackTrackingURLs; - -- (instancetype)initWithURL:(NSURL *)URL; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.m deleted file mode 100644 index 1566d610c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPEnhancedDeeplinkRequest.m +++ /dev/null @@ -1,57 +0,0 @@ -// -// MPEnhancedDeeplinkRequest.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPEnhancedDeeplinkRequest.h" -#import "NSURL+MPAdditions.h" - -static NSString * const kRequiredHostname = @"navigate"; -static NSString * const kPrimaryURLKey = @"primaryUrl"; -static NSString * const kPrimaryTrackingURLKey = @"primaryTrackingUrl"; -static NSString * const kFallbackURLKey = @"fallbackUrl"; -static NSString * const kFallbackTrackingURLKey = @"fallbackTrackingUrl"; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPEnhancedDeeplinkRequest - -- (instancetype)initWithURL:(NSURL *)URL -{ - self = [super init]; - if (self) { - if (![[[URL host] lowercaseString] isEqualToString:kRequiredHostname]) { - return nil; - } - - NSString *primaryURLString = [URL mp_queryParameterForKey:kPrimaryURLKey]; - if (![primaryURLString length]) { - return nil; - } - _primaryURL = [NSURL URLWithString:primaryURLString]; - _originalURL = [URL copy]; - - NSMutableArray *primaryTrackingURLs = [NSMutableArray array]; - NSArray *primaryTrackingURLStrings = [URL mp_queryParametersForKey:kPrimaryTrackingURLKey]; - for (NSString *URLString in primaryTrackingURLStrings) { - [primaryTrackingURLs addObject:[NSURL URLWithString:URLString]]; - } - _primaryTrackingURLs = [NSArray arrayWithArray:primaryTrackingURLs]; - - NSString *fallbackURLString = [URL mp_queryParameterForKey:kFallbackURLKey]; - _fallbackURL = [NSURL URLWithString:fallbackURLString]; - - NSMutableArray *fallbackTrackingURLs = [NSMutableArray array]; - NSArray *fallbackTrackingURLStrings = [URL mp_queryParametersForKey:kFallbackTrackingURLKey]; - for (NSString *URLString in fallbackTrackingURLStrings) { - [fallbackTrackingURLs addObject:[NSURL URLWithString:URLString]]; - } - _fallbackTrackingURLs = [NSArray arrayWithArray:fallbackTrackingURLs]; - } - return self; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.h deleted file mode 100644 index 844861299..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MPLastResortDelegate.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@interface MPLastResortDelegate : NSObject - -+ (id)sharedDelegate; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.m deleted file mode 100644 index 14061a84e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPLastResortDelegate.m +++ /dev/null @@ -1,36 +0,0 @@ -// -// MPLastResortDelegate.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPLastResortDelegate.h" -#import "MPGlobal.h" - -@class MFMailComposeViewController; - -@implementation MPLastResortDelegate - -+ (id)sharedDelegate -{ - static MPLastResortDelegate *lastResortDelegate; - static dispatch_once_t once; - dispatch_once(&once, ^{ - lastResortDelegate = [[self alloc] init]; - }); - return lastResortDelegate; -} - -- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(NSInteger)result error:(NSError*)error -{ - [(UIViewController *)controller dismissViewControllerAnimated:MP_ANIMATED completion:nil]; -} - -- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController -{ - [viewController dismissViewControllerAnimated:MP_ANIMATED completion:nil]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPProgressOverlayView.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPProgressOverlayView.h deleted file mode 100644 index 66ecbe217..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPProgressOverlayView.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// MPProgressOverlayView.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@protocol MPProgressOverlayViewDelegate; - -@interface MPProgressOverlayView : UIView { - id __weak _delegate; - UIView *_outerContainer; - UIView *_innerContainer; - UIActivityIndicatorView *_activityIndicator; - UIButton *_closeButton; - CGPoint _closeButtonPortraitCenter; -} - -@property (nonatomic, weak) id delegate; -@property (nonatomic, strong) UIButton *closeButton; - -- (id)initWithDelegate:(id)delegate; -- (void)show; -- (void)hide; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@protocol MPProgressOverlayViewDelegate - -@optional -- (void)overlayCancelButtonPressed; -- (void)overlayDidAppear; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPProgressOverlayView.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPProgressOverlayView.m deleted file mode 100644 index 1a9ae0447..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPProgressOverlayView.m +++ /dev/null @@ -1,325 +0,0 @@ -// -// MPProgressOverlayView.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPProgressOverlayView.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import - -static NSString * const kCloseButtonXImageName = @"MPCloseButtonX.png"; - -@interface MPProgressOverlayView () - -- (void)updateCloseButtonPosition; -- (void)registerForDeviceOrientationNotifications; -- (void)unregisterForDeviceOrientationNotifications; -- (void)deviceOrientationDidChange:(NSNotification *)notification; -- (void)setTransformForCurrentOrientationAnimated:(BOOL)animated; -- (void)setTransformForAllSubviews:(CGAffineTransform)transform; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -#define kProgressOverlaySide 60.0 -#define kProgressOverlayBorderWidth 1.0 -#define kProgressOverlayCornerRadius 8.0 -#define kProgressOverlayShadowOpacity 0.8 -#define kProgressOverlayShadowRadius 8.0 -#define kProgressOverlayCloseButtonDelay 4.0 - -static void exponentialDecayInterpolation(void *info, const CGFloat *input, CGFloat *output); - -@implementation MPProgressOverlayView - -@synthesize delegate = _delegate; -@synthesize closeButton = _closeButton; - -- (id)initWithDelegate:(id)delegate -{ - self = [self initWithFrame:MPKeyWindow().bounds]; - if (self) { - self.delegate = delegate; - } - return self; -} - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - self.alpha = 0.0; - self.opaque = NO; - - // Close button. - _closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; - _closeButton.alpha = 0.0; - _closeButton.hidden = YES; - [_closeButton addTarget:self - action:@selector(closeButtonPressed) - forControlEvents:UIControlEventTouchUpInside]; - UIImage *image = [UIImage imageNamed:MPResourcePathForResource(kCloseButtonXImageName)]; - [_closeButton setImage:image forState:UIControlStateNormal]; - [_closeButton sizeToFit]; - - _closeButtonPortraitCenter = - CGPointMake(self.bounds.size.width - 6.0 - CGRectGetMidX(_closeButton.bounds), - 6.0 + CGRectGetMidY(_closeButton.bounds)); - - _closeButton.center = _closeButtonPortraitCenter; - [self addSubview:_closeButton]; - - // Progress indicator container. - CGRect outerFrame = CGRectMake(0, 0, kProgressOverlaySide, kProgressOverlaySide); - _outerContainer = [[UIView alloc] initWithFrame:outerFrame]; - _outerContainer.alpha = 0.6; - _outerContainer.backgroundColor = [UIColor whiteColor]; - _outerContainer.center = self.center; - _outerContainer.frame = CGRectIntegral(_outerContainer.frame); - _outerContainer.opaque = NO; - _outerContainer.layer.cornerRadius = kProgressOverlayCornerRadius; - if ([_outerContainer.layer respondsToSelector:@selector(setShadowColor:)]) { - _outerContainer.layer.shadowColor = [UIColor blackColor].CGColor; - _outerContainer.layer.shadowOffset = CGSizeMake(0.0f, kProgressOverlayShadowRadius - 2.0f); - _outerContainer.layer.shadowOpacity = kProgressOverlayShadowOpacity; - _outerContainer.layer.shadowRadius = kProgressOverlayShadowRadius; - } - [self addSubview:_outerContainer]; - - CGFloat innerSide = kProgressOverlaySide - 2 * kProgressOverlayBorderWidth; - CGRect innerFrame = CGRectMake(0, 0, innerSide, innerSide); - _innerContainer = [[UIView alloc] initWithFrame:innerFrame]; - _innerContainer.backgroundColor = [UIColor blackColor]; - _innerContainer.center = CGPointMake(CGRectGetMidX(_outerContainer.bounds), - CGRectGetMidY(_outerContainer.bounds)); - _innerContainer.frame = CGRectIntegral(_innerContainer.frame); - _innerContainer.layer.cornerRadius = - kProgressOverlayCornerRadius - kProgressOverlayBorderWidth; - _innerContainer.opaque = NO; - [_outerContainer addSubview:_innerContainer]; - - // Progress indicator. - - _activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle: - UIActivityIndicatorViewStyleWhiteLarge]; - [_activityIndicator sizeToFit]; - [_activityIndicator startAnimating]; - _activityIndicator.center = self.center; - _activityIndicator.frame = CGRectIntegral(_activityIndicator.frame); - [self addSubview:_activityIndicator]; - - [self registerForDeviceOrientationNotifications]; - } - return self; -} - -- (void)dealloc -{ - [self unregisterForDeviceOrientationNotifications]; -} - -#pragma mark - Public Methods - -- (void)show -{ - [MPKeyWindow() addSubview:self]; - - [self setTransformForCurrentOrientationAnimated:NO]; - - if (MP_ANIMATED) { - [UIView animateWithDuration:0.2 animations:^{ - self.alpha = 1.0; - } completion:^(BOOL finished) { - if ([self.delegate respondsToSelector:@selector(overlayDidAppear)]) { - [self.delegate overlayDidAppear]; - } - }]; - } else { - self.alpha = 1.0; - if ([self.delegate respondsToSelector:@selector(overlayDidAppear)]) { - [self.delegate overlayDidAppear]; - } - } - - [self performSelector:@selector(enableCloseButton) - withObject:nil - afterDelay:kProgressOverlayCloseButtonDelay]; -} - -- (void)hide -{ - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(enableCloseButton) object:nil]; - - self.closeButton.hidden = YES; - self.closeButton.alpha = 0.0f; - - if (MP_ANIMATED) { - [UIView animateWithDuration:0.2 animations:^{ - self.alpha = 0.0; - } completion:^(BOOL finished) { - [self removeFromSuperview]; - }]; - } else { - self.alpha = 0.0; - [self removeFromSuperview]; - } -} - -#pragma mark - Drawing and Layout - -- (void)drawRect:(CGRect)rect -{ - CGContextRef context = UIGraphicsGetCurrentContext(); - - CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); - - static const CGFloat input_value_range[2] = {0, 1}; - static const CGFloat output_value_range[8] = {0, 1, 0, 1, 0, 1, 0, 1}; - CGFunctionCallbacks callbacks = {0, exponentialDecayInterpolation, NULL}; - - CGFunctionRef shadingFunction = CGFunctionCreate((__bridge void *)(self), 1, input_value_range, 4, - output_value_range, &callbacks); - - CGPoint startPoint = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds)); - CGFloat startRadius = 0.0; - CGPoint endPoint = startPoint; - CGFloat endRadius = MAX(CGRectGetWidth(self.bounds), CGRectGetHeight(self.bounds)) / 2; - - CGShadingRef shading = CGShadingCreateRadial(colorSpace, startPoint, startRadius, endPoint, - endRadius, shadingFunction, - YES, // extend shading beyond starting circle - YES); // extend shading beyond ending circle - CGContextDrawShading(context, shading); - - CGShadingRelease(shading); - CGFunctionRelease(shadingFunction); - CGColorSpaceRelease(colorSpace); -} - -#define kGradientMaximumAlphaValue 0.90 -#define kGradientAlphaDecayFactor 1.1263 - -static void exponentialDecayInterpolation(void *info, const CGFloat *input, CGFloat *output) -{ - // output is an RGBA array corresponding to the color black with an alpha value somewhere on - // our exponential decay curve. - CGFloat progress = *input; - output[0] = 0.0; - output[1] = 0.0; - output[2] = 0.0; - output[3] = kGradientMaximumAlphaValue - exp(-progress / kGradientAlphaDecayFactor); -} - -- (void)layoutSubviews -{ - [self updateCloseButtonPosition]; -} - -- (void)updateCloseButtonPosition -{ - // Ensure that the close button is anchored to the top-right corner of the screen. - - CGPoint originalCenter = _closeButtonPortraitCenter; - CGPoint center = originalCenter; - BOOL statusBarHidden = [UIApplication sharedApplication].statusBarHidden; - CGFloat statusBarOffset = (statusBarHidden) ? 0.0 : 20.0; - - UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; - switch (orientation) { - case UIInterfaceOrientationLandscapeLeft: - center.x = CGRectGetMaxX(self.bounds) - originalCenter.x + statusBarOffset; - center.y = originalCenter.y; - break; - case UIInterfaceOrientationLandscapeRight: - center.x = originalCenter.x - statusBarOffset; - center.y = CGRectGetMaxY(self.bounds) - originalCenter.y; - break; - case UIInterfaceOrientationPortraitUpsideDown: - center.x = CGRectGetMaxX(self.bounds) - originalCenter.x; - center.y = CGRectGetMaxY(self.bounds) - originalCenter.y - statusBarOffset; - break; - default: - center.y = originalCenter.y + statusBarOffset; - break; - } - - _closeButton.center = center; -} - -#pragma mark - Internal - -- (void)registerForDeviceOrientationNotifications -{ - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(deviceOrientationDidChange:) - name:UIDeviceOrientationDidChangeNotification - object:nil]; -} - -- (void)unregisterForDeviceOrientationNotifications -{ - [[NSNotificationCenter defaultCenter] removeObserver:self - name:UIDeviceOrientationDidChangeNotification - object:nil]; -} - -- (void)deviceOrientationDidChange:(NSNotification *)notification -{ - [self setTransformForCurrentOrientationAnimated:YES]; - [self setNeedsLayout]; -} - -- (void)enableCloseButton -{ - _closeButton.hidden = NO; - - [UIView beginAnimations:nil context:nil]; - _closeButton.alpha = 1.0; - [UIView commitAnimations]; -} - -- (void)closeButtonPressed -{ - if ([_delegate respondsToSelector:@selector(overlayCancelButtonPressed)]) { - [_delegate overlayCancelButtonPressed]; - } -} - -- (void)setTransformForCurrentOrientationAnimated:(BOOL)animated -{ - UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; - float angle = 0; - if (UIInterfaceOrientationIsPortrait(orientation)) { - if (orientation == UIInterfaceOrientationPortraitUpsideDown) { - angle = M_PI; - } - } else { - if (orientation == UIInterfaceOrientationLandscapeLeft) { - angle = -M_PI_2; - } else { - angle = M_PI_2; - } - } - - if (animated) { - [UIView beginAnimations:nil context:nil]; - [self setTransformForAllSubviews:CGAffineTransformMakeRotation(angle)]; - [UIView commitAnimations]; - } else { - [self setTransformForAllSubviews:CGAffineTransformMakeRotation(angle)]; - } -} - -- (void)setTransformForAllSubviews:(CGAffineTransform)transform -{ - for (UIView *view in self.subviews) { - view.transform = transform; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.h deleted file mode 100644 index a985b4361..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// MPRealTimeTimer.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/*** - * MPRealTimeTimer is a class meant for situations in which one may want to disaptch an event for later without - * any regard for application state. Backgrounding and suspension will not affect time keeping. MPRealTimeTimer will NOT - * fire while the application is backgrounded or suspended, but will fire immediately upon foregrounding if the - * application is not foregrounded when the time interval elapses. - * - * Note: MPRealTimeTimer uses NSTimer as a base and as such perfect accuracy is not guaranteed. - ***/ - -@interface MPRealTimeTimer : NSObject - -// Initializer which takes in a time interval (from when `scheduleNow` is called) and a block to execute when firing. -- (instancetype)initWithInterval:(NSTimeInterval)interval - block:(void(^)(MPRealTimeTimer *))block NS_DESIGNATED_INITIALIZER; - -// Returns `YES` if the timer is currently keeping time; `NO` if it's waiting to be scheduled. -@property (nonatomic, assign, readonly) BOOL isScheduled; - -// Schedules the MPRealTimeTimer instance to fire at `interval` seconds from now. Calling `scheduleNow` while -// `isScheduled` is set to `YES` will do nothing. -- (void)scheduleNow; - -// Executes `block` and stops all time keeping. -- (void)fire; - -// Stops all time keeping without executing anything. -- (void)invalidate; - -// Use of `init` is not supported. -- (instancetype)init NS_UNAVAILABLE; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.m deleted file mode 100644 index 70d701a60..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPRealTimeTimer.m +++ /dev/null @@ -1,113 +0,0 @@ -// -// MPRealTimeTimer.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRealTimeTimer.h" -#import "MPTimer.h" - -@interface MPRealTimeTimer () - -@property (strong, nonatomic) MPTimer *timer; -@property (copy, nonatomic) void (^block)(MPRealTimeTimer *); -@property (assign, nonatomic) NSTimeInterval interval; -@property (assign, nonatomic, readwrite) BOOL isScheduled; - -@property (copy, nonatomic) NSDate *fireDate; -@property (assign, nonatomic) NSTimeInterval currentTimeInterval; - -@end - -@implementation MPRealTimeTimer - -- (instancetype)initWithInterval:(NSTimeInterval)interval - block:(void(^)(MPRealTimeTimer *))block { - if (self = [super init]) { - _interval = interval; - _block = block; - } - - return self; -} - -- (void)scheduleNow { - if (!self.isScheduled) { - [self addNotificationCenterObservers]; - self.currentTimeInterval = self.interval; - [self setTimerWithCurrentTimeInterval]; - self.isScheduled = YES; - } -} - -- (void)invalidate { - [self.timer invalidate]; - self.timer = nil; - - [[NSNotificationCenter defaultCenter] removeObserver:self]; - self.isScheduled = NO; - self.fireDate = nil; -} - -- (void)fire { - [self invalidate]; - [self runBlock]; -} - -#pragma mark - Internal Methods - -- (void)runBlock { - if (self.block) { - self.block(self); - } -} - -- (void)setTimerWithCurrentTimeInterval { - self.timer = [MPTimer timerWithTimeInterval:self.currentTimeInterval - target:self - selector:@selector(fire) - repeats:NO]; - self.timer.runLoopMode = NSRunLoopCommonModes; - [self.timer scheduleNow]; - if (!self.fireDate) { - self.fireDate = [NSDate dateWithTimeIntervalSinceNow:self.currentTimeInterval]; - } -} - -- (void)didEnterBackground { - // invalidate timer (don't invalidate self because we're still keeping time) - [self.timer invalidate]; -} - -- (void)willEnterForeground { - // check if date has passed and fire if needed - NSComparisonResult result = [[NSDate date] compare:self.fireDate]; - if (result == NSOrderedSame || result == NSOrderedDescending) { - [self fire]; - return; - } - - // update time interval and schedule a new timer if it's not yet time to fire - self.currentTimeInterval = [self.fireDate timeIntervalSinceNow]; - [self setTimerWithCurrentTimeInterval]; -} - -- (void)addNotificationCenterObservers { - // Set up notifications to react to backgrounding/foregrounding - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(didEnterBackground) - name:UIApplicationDidEnterBackgroundNotification - object:nil]; - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(willEnterForeground) - name:UIApplicationWillEnterForegroundNotification - object:nil]; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.h deleted file mode 100644 index 6b72441c0..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// MPURLActionInfo.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#import "MPEnhancedDeeplinkRequest.h" - -#ifndef NS_ENUM -#define NS_ENUM(_type, _name) enum _name : _type _name; enum _name : _type -#endif - -typedef NS_ENUM(NSUInteger, MPURLActionType) { - MPURLActionTypeStoreKit, - MPURLActionTypeGenericDeeplink, - MPURLActionTypeEnhancedDeeplink, - MPURLActionTypeOpenInSafari, - MPURLActionTypeOpenURLInWebView, - MPURLActionTypeOpenInWebView, - MPURLActionTypeShare -}; - -@interface MPURLActionInfo : NSObject - -@property (nonatomic, readonly) MPURLActionType actionType; -@property (nonatomic, readonly, copy) NSURL *originalURL; -@property (nonatomic, readonly, copy) NSString *iTunesItemIdentifier; -@property (nonatomic, readonly, copy) NSURL *iTunesStoreFallbackURL; -@property (nonatomic, readonly, copy) NSURL *safariDestinationURL; -@property (nonatomic, readonly, copy) NSString *HTTPResponseString; -@property (nonatomic, readonly, copy) NSURL *webViewBaseURL; -@property (nonatomic, readonly, copy) NSURL *deeplinkURL; -@property (nonatomic, readonly, strong) MPEnhancedDeeplinkRequest *enhancedDeeplinkRequest; -@property (nonatomic, readonly, copy) NSURL *shareURL; - -+ (instancetype)infoWithURL:(NSURL *)URL iTunesItemIdentifier:(NSString *)identifier iTunesStoreFallbackURL:(NSURL *)URL; -+ (instancetype)infoWithURL:(NSURL *)URL safariDestinationURL:(NSURL *)safariDestinationURL; -+ (instancetype)infoWithURL:(NSURL *)URL HTTPResponseString:(NSString *)responseString webViewBaseURL:(NSURL *)baseURL; -+ (instancetype)infoWithURL:(NSURL *)URL webViewBaseURL:(NSURL *)baseURL; -+ (instancetype)infoWithURL:(NSURL *)URL deeplinkURL:(NSURL *)deeplinkURL; -+ (instancetype)infoWithURL:(NSURL *)URL enhancedDeeplinkRequest:(MPEnhancedDeeplinkRequest *)request; -+ (instancetype)infoWithURL:(NSURL *)URL shareURL:(NSURL *)shareURL; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.m deleted file mode 100644 index 00d3b3fdb..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLActionInfo.m +++ /dev/null @@ -1,95 +0,0 @@ -// -// MPURLActionInfo.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPURLActionInfo.h" - -@interface MPURLActionInfo () - -@property (nonatomic, readwrite) MPURLActionType actionType; -@property (nonatomic, readwrite, copy) NSURL *originalURL; -@property (nonatomic, readwrite, copy) NSString *iTunesItemIdentifier; -@property (nonatomic, readwrite, copy) NSURL *iTunesStoreFallbackURL; -@property (nonatomic, readwrite, copy) NSURL *safariDestinationURL; -@property (nonatomic, readwrite, copy) NSString *HTTPResponseString; -@property (nonatomic, readwrite, copy) NSURL *webViewBaseURL; -@property (nonatomic, readwrite, copy) NSURL *deeplinkURL; -@property (nonatomic, readwrite, strong) MPEnhancedDeeplinkRequest *enhancedDeeplinkRequest; -@property (nonatomic, readwrite, copy) NSURL *shareURL; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPURLActionInfo - -+ (instancetype)infoWithURL:(NSURL *)URL iTunesItemIdentifier:(NSString *)identifier iTunesStoreFallbackURL:(NSURL *)fallbackURL -{ - MPURLActionInfo *info = [[[self class] alloc] init]; - info.actionType = MPURLActionTypeStoreKit; - info.originalURL = URL; - info.iTunesItemIdentifier = identifier; - info.iTunesStoreFallbackURL = fallbackURL; - return info; -} - -+ (instancetype)infoWithURL:(NSURL *)URL safariDestinationURL:(NSURL *)safariDestinationURL -{ - MPURLActionInfo *info = [[[self class] alloc] init]; - info.actionType = MPURLActionTypeOpenInSafari; - info.originalURL = URL; - info.safariDestinationURL = safariDestinationURL; - return info; -} - -+ (instancetype)infoWithURL:(NSURL *)URL HTTPResponseString:(NSString *)responseString webViewBaseURL:(NSURL *)baseURL -{ - MPURLActionInfo *info = [[[self class] alloc] init]; - info.actionType = MPURLActionTypeOpenInWebView; - info.originalURL = URL; - info.HTTPResponseString = responseString; - info.webViewBaseURL = baseURL; - return info; -} - -+ (instancetype)infoWithURL:(NSURL *)URL webViewBaseURL:(NSURL *)baseURL -{ - MPURLActionInfo *info = [[[self class] alloc] init]; - info.actionType = MPURLActionTypeOpenURLInWebView; - info.originalURL = URL; - info.webViewBaseURL = baseURL; - return info; -} - -+ (instancetype)infoWithURL:(NSURL *)URL deeplinkURL:(NSURL *)deeplinkURL -{ - MPURLActionInfo *info = [[[self class] alloc] init]; - info.actionType = MPURLActionTypeGenericDeeplink; - info.originalURL = URL; - info.deeplinkURL = deeplinkURL; - return info; -} - -+ (instancetype)infoWithURL:(NSURL *)URL enhancedDeeplinkRequest:(MPEnhancedDeeplinkRequest *)request -{ - MPURLActionInfo *info = [[[self class] alloc] init]; - info.actionType = MPURLActionTypeEnhancedDeeplink; - info.originalURL = URL; - info.enhancedDeeplinkRequest = request; - return info; -} - -+ (instancetype)infoWithURL:(NSURL *)URL shareURL:(NSURL *)shareURL -{ - MPURLActionInfo *info = [[[self class] alloc] init]; - info.actionType = MPURLActionTypeShare; - info.originalURL = URL; - info.shareURL = shareURL; - return info; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.h deleted file mode 100644 index f487f8f02..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// MPURLResolver.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPGlobal.h" -#import "MPURLActionInfo.h" - -typedef void (^MPURLResolverCompletionBlock)(MPURLActionInfo *actionInfo, NSError *error); - -@interface MPURLResolver : NSObject - -+ (instancetype)resolverWithURL:(NSURL *)URL completion:(MPURLResolverCompletionBlock)completion; -- (void)start; -- (void)cancel; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.m deleted file mode 100644 index 4cf2cfc59..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPURLResolver.m +++ /dev/null @@ -1,318 +0,0 @@ -// -// MPURLResolver.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPURLResolver.h" -#import "MPHTTPNetworkSession.h" -#import "NSURL+MPAdditions.h" -#import "NSHTTPURLResponse+MPAdditions.h" -#import "MPLogging.h" -#import "MPCoreInstanceProvider.h" -#import "MOPUBExperimentProvider.h" -#import "NSURL+MPAdditions.h" -#import "MPURLRequest.h" - -static NSString * const kMoPubSafariScheme = @"mopubnativebrowser"; -static NSString * const kMoPubSafariNavigateHost = @"navigate"; -static NSString * const kResolverErrorDomain = @"com.mopub.resolver"; -static NSString * const kWebviewClickthroughHost = @"ads.mopub.com"; -static NSString * const kWebviewClickthroughPath = @"/m/aclk"; -static NSString * const kRedirectURLQueryStringKey = @"r"; - -@interface MPURLResolver () - -@property (nonatomic, strong) NSURL *originalURL; -@property (nonatomic, strong) NSURL *currentURL; -@property (nonatomic, strong) NSURLSessionTask *task; -@property (nonatomic, copy) MPURLResolverCompletionBlock completion; - -- (MPURLActionInfo *)actionInfoFromURL:(NSURL *)URL error:(NSError **)error; -- (NSString *)storeItemIdentifierForURL:(NSURL *)URL; -- (BOOL)URLShouldOpenInApplication:(NSURL *)URL; -- (BOOL)URLIsHTTPOrHTTPS:(NSURL *)URL; -- (BOOL)URLPointsToAMap:(NSURL *)URL; -- (NSStringEncoding)stringEncodingFromContentType:(NSString *)contentType; - -@end - -@implementation MPURLResolver - -+ (instancetype)resolverWithURL:(NSURL *)URL completion:(MPURLResolverCompletionBlock)completion -{ - return [[MPURLResolver alloc] initWithURL:URL completion:completion]; -} - -- (instancetype)initWithURL:(NSURL *)URL completion:(MPURLResolverCompletionBlock)completion -{ - self = [super init]; - if (self) { - _originalURL = [URL copy]; - _completion = [completion copy]; - } - return self; -} - -- (void)start -{ - [self.task cancel]; - self.currentURL = self.originalURL; - - NSError *error = nil; - MPURLActionInfo *info = [self actionInfoFromURL:self.originalURL error:&error]; - - if (info) { - [self safeInvokeAndNilCompletionBlock:info error:nil]; - } else if ([self shouldEnableClickthroughExperiment]) { - info = [MPURLActionInfo infoWithURL:self.originalURL webViewBaseURL:self.currentURL]; - [self safeInvokeAndNilCompletionBlock:info error:nil]; - } else if (error) { - [self safeInvokeAndNilCompletionBlock:nil error:error]; - } else { - MPURLRequest *request = [[MPURLRequest alloc] initWithURL:self.originalURL]; - self.task = [self httpTaskWithRequest:request]; - } -} - -- (NSURLSessionTask *)httpTaskWithRequest:(MPURLRequest *)request { - __weak __typeof__(self) weakSelf = self; - NSURLSessionTask * task = [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - __typeof__(self) strongSelf = weakSelf; - - // Set the response content type - NSStringEncoding responseEncoding = NSUTF8StringEncoding; - NSDictionary *headers = [response allHeaderFields]; - NSString *contentType = [headers objectForKey:kMoPubHTTPHeaderContentType]; - if (contentType != nil) { - responseEncoding = [response stringEncodingFromContentType:contentType]; - } - - NSString *responseString = [[NSString alloc] initWithData:data encoding:responseEncoding]; - MPURLActionInfo *info = [MPURLActionInfo infoWithURL:strongSelf.originalURL HTTPResponseString:responseString webViewBaseURL:strongSelf.currentURL]; - [strongSelf safeInvokeAndNilCompletionBlock:info error:nil]; - - } errorHandler:^(NSError * _Nonnull error) { - __typeof__(self) strongSelf = weakSelf; - [strongSelf safeInvokeAndNilCompletionBlock:nil error:error]; - } shouldRedirectWithNewRequest:^BOOL(NSURLSessionTask * _Nonnull task, NSURLRequest * _Nonnull newRequest) { - __typeof__(self) strongSelf = weakSelf; - - // First, check to see if the redirect URL matches any of our suggested actions. - NSError * actionInfoError = nil; - MPURLActionInfo * info = [strongSelf actionInfoFromURL:newRequest.URL error:&actionInfoError]; - - if (info) { - [task cancel]; - [strongSelf safeInvokeAndNilCompletionBlock:info error:nil]; - return NO; - } else { - // The redirected URL didn't match any actions, so we should continue with loading the URL. - strongSelf.currentURL = newRequest.URL; - return YES; - } - }]; - - return task; -} - -- (void)cancel -{ - [self.task cancel]; - self.task = nil; - self.completion = nil; -} - -- (void)safeInvokeAndNilCompletionBlock:(MPURLActionInfo *)info error:(NSError *)error -{ - dispatch_async(dispatch_get_main_queue(), ^{ - if (self.completion != nil) { - self.completion(info, error); - self.completion = nil; - } - }); -} - -#pragma mark - Handling Application/StoreKit URLs - -/* - * Parses the provided URL for actions to perform (opening StoreKit, opening Safari, etc.). - * If the URL represents an action, this method will return an info object containing data that is - * relevant to the suggested action. - */ -- (MPURLActionInfo *)actionInfoFromURL:(NSURL *)URL error:(NSError **)error; -{ - MPURLActionInfo *actionInfo = nil; - - if (URL == nil) { - if (error) { - *error = [NSError errorWithDomain:kResolverErrorDomain code:-1 userInfo:@{NSLocalizedDescriptionKey: @"URL is nil"}]; - } - return nil; - } - - if ([self storeItemIdentifierForURL:URL]) { - actionInfo = [MPURLActionInfo infoWithURL:self.originalURL iTunesItemIdentifier:[self storeItemIdentifierForURL:URL] iTunesStoreFallbackURL:URL]; - } else if ([self URLHasDeeplinkPlusScheme:URL]) { - MPEnhancedDeeplinkRequest *request = [[MPEnhancedDeeplinkRequest alloc] initWithURL:URL]; - if (request) { - actionInfo = [MPURLActionInfo infoWithURL:self.originalURL enhancedDeeplinkRequest:request]; - } else { - actionInfo = [MPURLActionInfo infoWithURL:self.originalURL deeplinkURL:URL]; - } - } else if ([self safariURLForURL:URL]) { - actionInfo = [MPURLActionInfo infoWithURL:self.originalURL safariDestinationURL:[NSURL URLWithString:[self safariURLForURL:URL]]]; - } else if ([URL mp_isMoPubShareScheme]) { - actionInfo = [MPURLActionInfo infoWithURL:self.originalURL shareURL:URL]; - } else if ([self URLShouldOpenInApplication:URL]) { - actionInfo = [MPURLActionInfo infoWithURL:self.originalURL deeplinkURL:URL]; - } else if ([URL.scheme isEqualToString:@"http"]) { // handle HTTP requests in particular to get around ATS settings - // As a note: `appTransportSecuritySettings` returns what makes sense for the iOS version. I.e., if the device - // is running iOS 8, this method will always return `MPATSSettingAllowsArbitraryLoads`. If the device is running - // iOS 9, this method will never give us `MPATSSettingAllowsArbitraryLoadsInWebContent`. As a result, we don't - // have to do OS checks here; we can just trust these settings. - MPATSSetting settings = [[MPCoreInstanceProvider sharedProvider] appTransportSecuritySettings]; - - if ((settings & MPATSSettingAllowsArbitraryLoads) != 0) { // opens as normal if ATS is disabled - // don't do anything - } else if ((settings & MPATSSettingAllowsArbitraryLoadsInWebContent) != 0) { // opens in WKWebView if ATS is disabled for arbitrary web content - actionInfo = [MPURLActionInfo infoWithURL:self.originalURL - webViewBaseURL:self.currentURL]; - } else { // opens in Mobile Safari if no other option is available - actionInfo = [MPURLActionInfo infoWithURL:self.originalURL - safariDestinationURL:self.currentURL]; - } - } - - return actionInfo; -} - -#pragma mark Identifying Application URLs - -- (BOOL)URLShouldOpenInApplication:(NSURL *)URL -{ - return ![self URLIsHTTPOrHTTPS:URL] || [self URLPointsToAMap:URL]; -} - -- (BOOL)URLIsHTTPOrHTTPS:(NSURL *)URL -{ - return [URL.scheme isEqualToString:@"http"] || [URL.scheme isEqualToString:@"https"]; -} - -- (BOOL)URLHasDeeplinkPlusScheme:(NSURL *)URL -{ - return [[URL.scheme lowercaseString] isEqualToString:@"deeplink+"]; -} - -- (BOOL)URLPointsToAMap:(NSURL *)URL -{ - return [URL.host hasSuffix:@"maps.google.com"] || [URL.host hasSuffix:@"maps.apple.com"]; -} - -#pragma mark Extracting StoreItem Identifiers - -- (NSString *)storeItemIdentifierForURL:(NSURL *)URL -{ - NSString *itemIdentifier = nil; - if ([URL.host hasSuffix:@"itunes.apple.com"]) { - NSString *lastPathComponent = [[URL path] lastPathComponent]; - if ([lastPathComponent hasPrefix:@"id"]) { - itemIdentifier = [lastPathComponent substringFromIndex:2]; - } else { - itemIdentifier = [URL.mp_queryAsDictionary objectForKey:@"id"]; - } - } else if ([URL.host hasSuffix:@"phobos.apple.com"]) { - itemIdentifier = [URL.mp_queryAsDictionary objectForKey:@"id"]; - } - - NSCharacterSet *nonIntegers = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; - if (itemIdentifier && itemIdentifier.length > 0 && [itemIdentifier rangeOfCharacterFromSet:nonIntegers].location == NSNotFound) { - return itemIdentifier; - } - - return nil; -} - -#pragma mark - Identifying URLs to open in Safari - -- (NSString *)safariURLForURL:(NSURL *)URL -{ - NSString *safariURL = nil; - - if ([[URL scheme] isEqualToString:kMoPubSafariScheme] && - [[URL host] isEqualToString:kMoPubSafariNavigateHost]) { - safariURL = [URL.mp_queryAsDictionary objectForKey:@"url"]; - } - - return safariURL; -} - -#pragma mark - Identifying NSStringEncoding from NSURLResponse Content-Type header - -- (NSStringEncoding)stringEncodingFromContentType:(NSString *)contentType -{ - NSStringEncoding encoding = NSUTF8StringEncoding; - - if (![contentType length]) { - MPLogWarn(@"Attempting to set string encoding from nil %@", kMoPubHTTPHeaderContentType); - return encoding; - } - - NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?<=charset=)[^;]*" options:kNilOptions error:nil]; - - NSTextCheckingResult *charsetResult = [regex firstMatchInString:contentType options:kNilOptions range:NSMakeRange(0, [contentType length])]; - if (charsetResult && charsetResult.range.location != NSNotFound) { - NSString *charset = [contentType substringWithRange:[charsetResult range]]; - - // ensure that charset is not deallocated early - CFStringRef cfCharset = (CFStringRef)CFBridgingRetain(charset); - CFStringEncoding cfEncoding = CFStringConvertIANACharSetNameToEncoding(cfCharset); - CFBridgingRelease(cfCharset); - - if (cfEncoding == kCFStringEncodingInvalidId) { - return encoding; - } - encoding = CFStringConvertEncodingToNSStringEncoding(cfEncoding); - } - - return encoding; -} - -#pragma mark - Check if it's necessary to include a URL in the clickthrough experiment. -// There are two types of clickthrough URL sources: from webviews and from non-web views. -// The ones from webviews start with (https|http)://ads.mopub.com/m/aclk -// For webviews, in order for a URL to be included in the clickthrough experiment, redirect URL scheme needs to be http/https. - -- (BOOL)shouldEnableClickthroughExperiment -{ - if (!self.currentURL) { - return NO; - } - - // If redirect URL isn't http/https, do not include it in the clickthrough experiment. - if (![self URLIsHTTPOrHTTPS:self.currentURL]) { - return NO; - } - - // Clickthroughs from webviews - if ([self.currentURL.host isEqualToString:kWebviewClickthroughHost] && - [self.currentURL.path isEqualToString:kWebviewClickthroughPath]) { - - NSString *redirectURLStr = [self.currentURL mp_queryParameterForKey:kRedirectURLQueryStringKey]; - if (!redirectURLStr || ![self URLIsHTTPOrHTTPS:[NSURL URLWithString:redirectURLStr]]) { - return NO; - } - } - - // Check experiment variant is in test group. - if ([MPAdDestinationDisplayAgent shouldUseSafariViewController] || - [MOPUBExperimentProvider displayAgentType] == MOPUBDisplayAgentTypeNativeSafari) { - return YES; - } - return NO; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPVideoConfig.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPVideoConfig.h deleted file mode 100644 index 3149ffd5b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPVideoConfig.h +++ /dev/null @@ -1,50 +0,0 @@ -// -// MPVideoConfig.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTResponse.h" - -@interface MPVideoConfig : NSObject - -@property (nonatomic, readonly) NSURL *mediaURL; -@property (nonatomic, readonly) NSURL *clickThroughURL; -@property (nonatomic, readonly) NSArray *clickTrackingURLs; -@property (nonatomic, readonly) NSArray *errorURLs; -@property (nonatomic, readonly) NSArray *impressionURLs; - -/** @name Tracking Events */ - -@property (nonatomic, readonly) NSArray *creativeViewTrackers; -@property (nonatomic, readonly) NSArray *startTrackers; -@property (nonatomic, readonly) NSArray *firstQuartileTrackers; -@property (nonatomic, readonly) NSArray *midpointTrackers; -@property (nonatomic, readonly) NSArray *thirdQuartileTrackers; -@property (nonatomic, readonly) NSArray *completionTrackers; -@property (nonatomic, readonly) NSArray *muteTrackers; -@property (nonatomic, readonly) NSArray *unmuteTrackers; -@property (nonatomic, readonly) NSArray *pauseTrackers; -@property (nonatomic, readonly) NSArray *rewindTrackers; -@property (nonatomic, readonly) NSArray *resumeTrackers; -@property (nonatomic, readonly) NSArray *fullscreenTrackers; -@property (nonatomic, readonly) NSArray *exitFullscreenTrackers; -@property (nonatomic, readonly) NSArray *expandTrackers; -@property (nonatomic, readonly) NSArray *collapseTrackers; -@property (nonatomic, readonly) NSArray *acceptInvitationLinearTrackers; -@property (nonatomic, readonly) NSArray *closeLinearTrackers; -@property (nonatomic, readonly) NSArray *skipTrackers; -@property (nonatomic, readonly) NSArray *otherProgressTrackers; - -/** @name Viewability */ - -@property (nonatomic, readonly) NSTimeInterval minimumViewabilityTimeInterval; -@property (nonatomic, readonly) double minimumFractionOfVideoVisible; -@property (nonatomic, readonly) NSURL *viewabilityTrackingURL; - -- (instancetype)initWithVASTResponse:(MPVASTResponse *)response additionalTrackers:(NSDictionary *)additionalTrackers; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPVideoConfig.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPVideoConfig.m deleted file mode 100644 index 963c0a774..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPVideoConfig.m +++ /dev/null @@ -1,301 +0,0 @@ -// -// MPVideoConfig.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVideoConfig.h" -#import "MPLogging.h" -#import "MPVASTStringUtilities.h" - -@interface MPVideoPlaybackCandidate : NSObject - -@property (nonatomic, readwrite) MPVASTLinearAd *linearAd; -@property (nonatomic, readwrite) NSArray *errorURLs; -@property (nonatomic, readwrite) NSArray *impressionURLs; -@property (nonatomic, readwrite) NSTimeInterval minimumViewabilityTimeInterval; -@property (nonatomic, readwrite) double minimumFractionOfVideoVisible; -@property (nonatomic, readwrite) NSURL *viewabilityTrackingURL; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPVideoPlaybackCandidate - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPVideoConfig () - -@property (nonatomic, readwrite) NSURL *mediaURL; -@property (nonatomic, readwrite) NSURL *clickThroughURL; -@property (nonatomic, readwrite) NSArray *clickTrackingURLs; -@property (nonatomic, readwrite) NSArray *errorURLs; -@property (nonatomic, readwrite) NSArray *impressionURLs; -@property (nonatomic, readwrite) NSArray *startTrackers; -@property (nonatomic, readwrite) NSArray *firstQuartileTrackers; -@property (nonatomic, readwrite) NSArray *midpointTrackers; -@property (nonatomic, readwrite) NSArray *thirdQuartileTrackers; -@property (nonatomic, readwrite) NSArray *completionTrackers; -@property (nonatomic, readwrite) NSArray *muteTrackers; -@property (nonatomic, readwrite) NSArray *unmuteTrackers; -@property (nonatomic, readwrite) NSArray *pauseTrackers; -@property (nonatomic, readwrite) NSArray *rewindTrackers; -@property (nonatomic, readwrite) NSArray *resumeTrackers; -@property (nonatomic, readwrite) NSArray *fullscreenTrackers; -@property (nonatomic, readwrite) NSArray *exitFullscreenTrackers; -@property (nonatomic, readwrite) NSArray *expandTrackers; -@property (nonatomic, readwrite) NSArray *collapseTrackers; -@property (nonatomic, readwrite) NSArray *acceptInvitationLinearTrackers; -@property (nonatomic, readwrite) NSArray *closeLinearTrackers; -@property (nonatomic, readwrite) NSArray *skipTrackers; -@property (nonatomic, readwrite) NSArray *otherProgressTrackers; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPVASTLinearAd (MPVideoConfig) - -@property (nonatomic, readwrite) NSArray *clickTrackingURLs; -@property (nonatomic, readwrite) NSArray *customClickURLs; -@property (nonatomic, readwrite) NSArray *industryIcons; -@property (nonatomic, readwrite) NSDictionary *trackingEvents; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPVideoConfig - -- (instancetype)initWithVASTResponse:(MPVASTResponse *)response additionalTrackers:(NSDictionary *)additionalTrackers -{ - self = [super init]; - if (self) { - [self commonInit:response additionalTrackers:additionalTrackers]; - } - return self; -} - -- (void)commonInit:(MPVASTResponse *)response additionalTrackers:(NSDictionary *)additionalTrackers -{ - NSArray *candidates = [self playbackCandidatesFromVASTResponse:response]; - - if (candidates.count == 0) { - return; - } - - MPVideoPlaybackCandidate *candidate = candidates[0]; - MPVASTMediaFile *mediaFile = candidate.linearAd.highestBitrateMediaFile; - - _mediaURL = mediaFile.URL; - _clickThroughURL = candidate.linearAd.clickThroughURL; - _clickTrackingURLs = candidate.linearAd.clickTrackingURLs; - _errorURLs = candidate.errorURLs; - _impressionURLs = candidate.impressionURLs; - - NSDictionary *trackingEvents = candidate.linearAd.trackingEvents; - _creativeViewTrackers = trackingEvents[MPVASTTrackingEventTypeCreativeView]; - _startTrackers = [self trackersByMergingOriginalTrackers:trackingEvents additionalTrackers:additionalTrackers name:MPVASTTrackingEventTypeStart]; - _firstQuartileTrackers = [self trackersByMergingOriginalTrackers:trackingEvents additionalTrackers:additionalTrackers name:MPVASTTrackingEventTypeFirstQuartile]; - _midpointTrackers = [self trackersByMergingOriginalTrackers:trackingEvents additionalTrackers:additionalTrackers name:MPVASTTrackingEventTypeMidpoint]; - _thirdQuartileTrackers = [self trackersByMergingOriginalTrackers:trackingEvents additionalTrackers:additionalTrackers name:MPVASTTrackingEventTypeThirdQuartile]; - _completionTrackers = [self trackersByMergingOriginalTrackers:trackingEvents additionalTrackers:additionalTrackers name:MPVASTTrackingEventTypeComplete]; - _muteTrackers = trackingEvents[MPVASTTrackingEventTypeMute]; - _unmuteTrackers = trackingEvents[MPVASTTrackingEventTypeUnmute]; - _pauseTrackers = trackingEvents[MPVASTTrackingEventTypePause]; - _rewindTrackers = trackingEvents[MPVASTTrackingEventTypeRewind]; - _resumeTrackers = trackingEvents[MPVASTTrackingEventTypeResume]; - _fullscreenTrackers = trackingEvents[MPVASTTrackingEventTypeFullscreen]; - _exitFullscreenTrackers = trackingEvents[MPVASTTrackingEventTypeExitFullscreen]; - _expandTrackers = trackingEvents[MPVASTTrackingEventTypeExpand]; - _collapseTrackers = trackingEvents[MPVASTTrackingEventTypeCollapse]; - _acceptInvitationLinearTrackers = trackingEvents[MPVASTTrackingEventTypeAcceptInvitationLinear]; - _closeLinearTrackers = trackingEvents[MPVASTTrackingEventTypeCloseLinear]; - _skipTrackers = trackingEvents[MPVASTTrackingEventTypeSkip]; - _otherProgressTrackers = trackingEvents[MPVASTTrackingEventTypeProgress]; - - _minimumViewabilityTimeInterval = candidate.minimumViewabilityTimeInterval; - _minimumFractionOfVideoVisible = candidate.minimumFractionOfVideoVisible; - _viewabilityTrackingURL = candidate.viewabilityTrackingURL; -} - -- (NSArray *)playbackCandidatesFromVASTResponse:(MPVASTResponse *)response -{ - NSMutableArray *candidates = [NSMutableArray array]; - - for (MPVASTAd *ad in response.ads) { - if (ad.inlineAd) { - MPVASTInline *inlineAd = ad.inlineAd; - NSArray *creatives = inlineAd.creatives; - for (MPVASTCreative *creative in creatives) { - if (creative.linearAd && [creative.linearAd.mediaFiles count]) { - MPVideoPlaybackCandidate *candidate = [[MPVideoPlaybackCandidate alloc] init]; - candidate.linearAd = creative.linearAd; - candidate.errorURLs = inlineAd.errorURLs; - candidate.impressionURLs = inlineAd.impressionURLs; - - NSDictionary *viewabilityExt = [self extensionFromInlineAd:inlineAd forKey:@"MoPubViewabilityTracker"]; - if (viewabilityExt) { - NSURL *viewabilityTrackingURL = [NSURL URLWithString:viewabilityExt[@"text"]]; - BOOL valid = [MPVASTStringUtilities stringRepresentsNonNegativeDuration:viewabilityExt[@"viewablePlaytime"]]&& - [MPVASTStringUtilities stringRepresentsNonNegativePercentage:viewabilityExt[@"percentViewable"]] && - viewabilityTrackingURL; - - if (valid) { - candidate.minimumViewabilityTimeInterval = [MPVASTStringUtilities timeIntervalFromString:viewabilityExt[@"viewablePlaytime"]]; - candidate.minimumFractionOfVideoVisible = [MPVASTStringUtilities percentageFromString:viewabilityExt[@"percentViewable"]] / 100.0; - candidate.viewabilityTrackingURL = viewabilityTrackingURL; - } - } - - [candidates addObject:candidate]; - } - } - } else if (ad.wrapper) { - NSArray *candidatesFromWrapper = [self playbackCandidatesFromVASTResponse:ad.wrapper.wrappedVASTResponse]; - - // Merge any wrapper-level tracking URLs into each of the candidates. - for (MPVideoPlaybackCandidate *candidate in candidatesFromWrapper) { - candidate.errorURLs = [candidate.errorURLs arrayByAddingObjectsFromArray:ad.wrapper.errorURLs]; - candidate.impressionURLs = [candidate.impressionURLs arrayByAddingObjectsFromArray:ad.wrapper.impressionURLs]; - - candidate.linearAd.trackingEvents = [self dictionaryByMergingTrackingDictionaries:@[candidate.linearAd.trackingEvents, [self trackingEventsFromWrapper:ad.wrapper]]]; - candidate.linearAd.clickTrackingURLs = [candidate.linearAd.clickTrackingURLs arrayByAddingObjectsFromArray:[self clickTrackingURLsFromWrapper:ad.wrapper]]; - candidate.linearAd.customClickURLs = [candidate.linearAd.customClickURLs arrayByAddingObjectsFromArray:[self customClickURLsFromWrapper:ad.wrapper]]; - candidate.linearAd.industryIcons = [candidate.linearAd.industryIcons arrayByAddingObjectsFromArray:[self industryIconsFromWrapper:ad.wrapper]]; - } - - [candidates addObjectsFromArray:candidatesFromWrapper]; - } - } - - return candidates; -} - -- (NSDictionary *)trackingEventsFromWrapper:(MPVASTWrapper *)wrapper -{ - NSMutableArray *trackingEventDictionaries = [NSMutableArray array]; - - for (MPVASTCreative *creative in wrapper.creatives) { - [trackingEventDictionaries addObject:creative.linearAd.trackingEvents]; - } - - return [self dictionaryByMergingTrackingDictionaries:trackingEventDictionaries]; -} - -- (NSArray *)clickTrackingURLsFromWrapper:(MPVASTWrapper *)wrapper -{ - NSMutableArray *clickTrackingURLs = [NSMutableArray array]; - for (MPVASTCreative *creative in wrapper.creatives) { - [clickTrackingURLs addObjectsFromArray:creative.linearAd.clickTrackingURLs]; - } - - return clickTrackingURLs; -} - -- (NSArray *)customClickURLsFromWrapper:(MPVASTWrapper *)wrapper -{ - NSMutableArray *customClickURLs = [NSMutableArray array]; - for (MPVASTCreative *creative in wrapper.creatives) { - [customClickURLs addObjectsFromArray:creative.linearAd.customClickURLs]; - } - - return customClickURLs; -} - -- (NSArray *)industryIconsFromWrapper:(MPVASTWrapper *)wrapper -{ - NSMutableArray *industryIcons = [NSMutableArray array]; - for (MPVASTCreative *creative in wrapper.creatives) { - [industryIcons addObjectsFromArray:creative.linearAd.industryIcons]; - } - - return industryIcons; -} - -- (NSDictionary *)extensionFromInlineAd:(MPVASTInline *)inlineAd forKey:(NSString *)key -{ - NSDictionary *extensions = inlineAd.extensions; - id extensionObject = [extensions objectForKey:@"Extension"]; - - if ([extensionObject isKindOfClass:[NSDictionary class]]) { - // Case 1: "Extensions" element with only one "Extension" child. - NSDictionary *extensionChildNode = extensionObject; - id extension = [self firstObjectForKey:key inDictionary:extensionChildNode]; - if ([extension isKindOfClass:[NSDictionary class]]) { - return extension; - } - } else if ([extensionObject isKindOfClass:[NSArray class]]) { - // Case 2: "Extensions" element with multiple "Extension" children. - NSArray *extensionChildNodes = extensionObject; - for (id node in extensionChildNodes) { - if (![node isKindOfClass:[NSDictionary class]]) { - continue; - } - - id extension = [self firstObjectForKey:key inDictionary:node]; - if ([extension isKindOfClass:[NSDictionary class]]) { - return extension; - } - } - } - - return nil; -} - -// When dealing with VAST, we will often have dictionaries where a key can map either to a single -// value or an array of values. For example, the dictionary containing VAST extensions might contain -// one or more nodes. This method is useful when we simply want the first value matching -// a given key. It is equivalent to calling [dictionary objectForKey:key] when the key maps to a -// single value. When the key maps to an NSArray, it returns the first value in the array. -- (id)firstObjectForKey:(NSString *)key inDictionary:(NSDictionary *)dictionary -{ - id value = [dictionary objectForKey:key]; - if ([value isKindOfClass:[NSArray class]]) { - return [value firstObject]; - } else { - return value; - } -} - -- (NSArray *)trackersByMergingOriginalTrackers:(NSDictionary *)originalTrackers additionalTrackers:(NSDictionary *)additionalTrackers name:(NSString *)trackerName -{ - if (![originalTrackers[trackerName] isKindOfClass:[NSArray class]]) { - return additionalTrackers[trackerName]; - } - if (![additionalTrackers[trackerName] isKindOfClass:[NSArray class]]) { - return originalTrackers[trackerName]; - } - NSMutableArray *mergedTrackers = [NSMutableArray new]; - [mergedTrackers addObjectsFromArray:originalTrackers[trackerName]]; - [mergedTrackers addObjectsFromArray:additionalTrackers[trackerName]]; - return mergedTrackers; -} - -- (NSDictionary *)dictionaryByMergingTrackingDictionaries:(NSArray *)dictionaries -{ - NSMutableDictionary *mergedDictionary = [NSMutableDictionary dictionary]; - for (NSDictionary *dictionary in dictionaries) { - for (NSString *key in [dictionary allKeys]) { - if ([dictionary[key] isKindOfClass:[NSArray class]]) { - if (!mergedDictionary[key]) { - mergedDictionary[key] = [NSMutableArray array]; - } - - [mergedDictionary[key] addObjectsFromArray:dictionary[key]]; - } else { - MPLogError(@"TrackingEvents dictionary expected an array object for key '%@' " - @"but got an instance of %@ instead.", - key, NSStringFromClass([dictionary[key] class])); - } - } - } - return mergedDictionary; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.h deleted file mode 100644 index 0b7cd100d..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// MPXMLParser.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPXMLParser : NSObject - -- (NSDictionary *)dictionaryWithData:(NSData *)data error:(NSError **)error; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.m deleted file mode 100644 index 59e527dcb..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Common/MPXMLParser.m +++ /dev/null @@ -1,89 +0,0 @@ -// -// MPXMLParser.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPXMLParser.h" - -@interface MPXMLParser () - -@property (nonatomic) NSMutableArray *elementStack; -@property (nonatomic) NSMutableString *currentTextContent; -@property (nonatomic) NSError *parseError; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPXMLParser - -- (instancetype)init -{ - if (self = [super init]) { - _elementStack = [NSMutableArray array]; - - // Create a "root" dictionary. - [_elementStack addObject:[NSMutableDictionary dictionary]]; - - _currentTextContent = [NSMutableString string]; - } - return self; -} - -- (NSDictionary *)dictionaryWithData:(NSData *)data error:(NSError *__autoreleasing *)error -{ - NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data]; - [parser setDelegate:self]; - [parser parse]; - return self.elementStack[0]; -} - -#pragma mark - - -- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict -{ - NSMutableDictionary *parentElement = [self.elementStack lastObject]; - NSMutableDictionary *currentElement = [NSMutableDictionary dictionary]; - [currentElement addEntriesFromDictionary:attributeDict]; - - if (parentElement[elementName] && [parentElement[elementName] isKindOfClass:[NSArray class]]) { - [parentElement[elementName] addObject:currentElement]; - } else if (parentElement[elementName]) { - NSMutableDictionary *previousElement = parentElement[elementName]; - NSMutableArray *elementsArray = [NSMutableArray array]; - [elementsArray addObject:previousElement]; - [elementsArray addObject:currentElement]; - parentElement[elementName] = elementsArray; - } else { - parentElement[elementName] = currentElement; - } - - [self.elementStack addObject:currentElement]; -} - -- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName -{ - NSMutableDictionary *currentElement = [self.elementStack lastObject]; - NSString *trimmedContent = [self.currentTextContent stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - if ([trimmedContent length]) { - currentElement[@"text"] = trimmedContent; - } - - self.currentTextContent = [NSMutableString string]; - [self.elementStack removeLastObject]; -} - -- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string -{ - [self.currentTextContent appendString:string]; -} - -- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError -{ - self.parseError = parseError; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.h deleted file mode 100644 index d686c1c16..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.h +++ /dev/null @@ -1,57 +0,0 @@ -// -// MPAdWebViewAgent.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAdDestinationDisplayAgent.h" -#import "MPWebView.h" - -enum { - MPAdWebViewEventAdDidAppear = 0, - MPAdWebViewEventAdDidDisappear = 1 -}; -typedef NSUInteger MPAdWebViewEvent; - -@protocol MPAdWebViewAgentDelegate; - -@class MPAdConfiguration; -@class CLLocation; -@class MPViewabilityTracker; - -@interface MPAdWebViewAgent : NSObject - -@property (nonatomic, strong) MPWebView *view; -@property (nonatomic, weak) id delegate; - -@property (nonatomic, strong, readonly) MPViewabilityTracker *viewabilityTracker; - -- (id)initWithAdWebViewFrame:(CGRect)frame delegate:(id)delegate; -- (void)loadConfiguration:(MPAdConfiguration *)configuration; -- (void)rotateToOrientation:(UIInterfaceOrientation)orientation; -- (void)invokeJavaScriptForEvent:(MPAdWebViewEvent)event; -- (void)forceRedraw; - -- (void)enableRequestHandling; -- (void)disableRequestHandling; - -- (void)startViewabilityTracker; - -@end - -@protocol MPAdWebViewAgentDelegate - -- (NSString *)adUnitId; -- (CLLocation *)location; -- (UIViewController *)viewControllerForPresentingModalView; -- (void)adDidClose:(MPWebView *)ad; -- (void)adDidFinishLoadingAd:(MPWebView *)ad; -- (void)adDidFailToLoadAd:(MPWebView *)ad; -- (void)adActionWillBegin:(MPWebView *)ad; -- (void)adActionWillLeaveApplication:(MPWebView *)ad; -- (void)adActionDidFinish:(MPWebView *)ad; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.m deleted file mode 100644 index 3adc5fdb4..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPAdWebViewAgent.m +++ /dev/null @@ -1,379 +0,0 @@ -// -// MPAdWebViewAgent.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdWebViewAgent.h" -#import "MPAdConfiguration.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MPAdDestinationDisplayAgent.h" -#import "NSURL+MPAdditions.h" -#import "UIWebView+MPAdditions.h" -#import "MPWebView.h" -#import "MPCoreInstanceProvider.h" -#import "MPUserInteractionGestureRecognizer.h" -#import "NSJSONSerialization+MPAdditions.h" -#import "NSURL+MPAdditions.h" -#import "MPInternalUtils.h" -#import "MPAPIEndPoints.h" -#import "MoPub.h" -#import "MPViewabilityTracker.h" -#import "NSString+MPAdditions.h" - -#ifndef NSFoundationVersionNumber_iOS_6_1 -#define NSFoundationVersionNumber_iOS_6_1 993.00 -#endif - -#define MPOffscreenWebViewNeedsRenderingWorkaround() (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) - -@interface MPAdWebViewAgent () - -@property (nonatomic, strong) MPAdConfiguration *configuration; -@property (nonatomic, strong) MPAdDestinationDisplayAgent *destinationDisplayAgent; -@property (nonatomic, assign) BOOL shouldHandleRequests; -@property (nonatomic, strong) id adAlertManager; -@property (nonatomic, assign) BOOL userInteractedWithWebView; -@property (nonatomic, strong) MPUserInteractionGestureRecognizer *userInteractionRecognizer; -@property (nonatomic, assign) CGRect frame; -@property (nonatomic, strong, readwrite) MPViewabilityTracker *viewabilityTracker; - -- (void)performActionForMoPubSpecificURL:(NSURL *)URL; -- (BOOL)shouldIntercept:(NSURL *)URL navigationType:(UIWebViewNavigationType)navigationType; -- (void)interceptURL:(NSURL *)URL; - -@end - -@implementation MPAdWebViewAgent - -@synthesize configuration = _configuration; -@synthesize delegate = _delegate; -@synthesize destinationDisplayAgent = _destinationDisplayAgent; -@synthesize shouldHandleRequests = _shouldHandleRequests; -@synthesize view = _view; -@synthesize adAlertManager = _adAlertManager; -@synthesize userInteractedWithWebView = _userInteractedWithWebView; -@synthesize userInteractionRecognizer = _userInteractionRecognizer; - -- (id)initWithAdWebViewFrame:(CGRect)frame delegate:(id)delegate; -{ - self = [super init]; - if (self) { - _frame = frame; - - self.destinationDisplayAgent = [MPAdDestinationDisplayAgent agentWithDelegate:self]; - self.delegate = delegate; - self.shouldHandleRequests = YES; - self.adAlertManager = [[MPCoreInstanceProvider sharedProvider] buildMPAdAlertManagerWithDelegate:self]; - - self.userInteractionRecognizer = [[MPUserInteractionGestureRecognizer alloc] initWithTarget:self action:@selector(handleInteraction:)]; - self.userInteractionRecognizer.cancelsTouchesInView = NO; - self.userInteractionRecognizer.delegate = self; - } - return self; -} - -- (void)dealloc -{ - [self.viewabilityTracker stopTracking]; - self.userInteractionRecognizer.delegate = nil; - [self.userInteractionRecognizer removeTarget:self action:nil]; - [self.destinationDisplayAgent cancel]; - [self.destinationDisplayAgent setDelegate:nil]; - self.view.delegate = nil; -} - -- (void)handleInteraction:(UITapGestureRecognizer *)sender -{ - if (sender.state == UIGestureRecognizerStateEnded) { - self.userInteractedWithWebView = YES; - } -} - -#pragma mark - - -- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer; -{ - return YES; -} - -#pragma mark - - -- (UIViewController *)viewControllerForPresentingMailVC -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (void)adAlertManagerDidTriggerAlert:(MPAdAlertManager *)manager -{ - [self.adAlertManager processAdAlertOnce]; -} - -#pragma mark - Public - -- (void)loadConfiguration:(MPAdConfiguration *)configuration -{ - self.configuration = configuration; - - // Initialize web view - if (self.view != nil) { - self.view.delegate = nil; - [self.view removeFromSuperview]; - self.view = nil; - } - self.view = [[MPWebView alloc] initWithFrame:self.frame]; - self.view.shouldConformToSafeArea = [self isInterstitialAd]; - self.view.delegate = self; - [self.view addGestureRecognizer:self.userInteractionRecognizer]; - - // Ignore server configuration size for interstitials. At this point our web view - // is sized correctly for the device's screen. Currently the server sends down values for a 3.5in - // screen, and they do not size correctly on a 4in screen. - if (configuration.adType != MPAdTypeInterstitial) { - if ([configuration hasPreferredSize]) { - CGRect frame = self.view.frame; - frame.size.width = configuration.preferredSize.width; - frame.size.height = configuration.preferredSize.height; - self.view.frame = frame; - } - } - - [self.view mp_setScrollable:NO]; - [self.view disableJavaScriptDialogs]; - - // Initialize viewability trackers before loading self.view - [self init3rdPartyViewabilityTrackers]; - - [self.view loadHTMLString:[configuration adResponseHTMLString] - baseURL:[NSURL URLWithString:[MPAPIEndpoints baseURL]] - ]; - - [self initAdAlertManager]; -} - -- (void)invokeJavaScriptForEvent:(MPAdWebViewEvent)event -{ - switch (event) { - case MPAdWebViewEventAdDidAppear: - // For banner, viewability tracker is handled right after adView is initialized (not here). - // For interstitial (handled here), we start tracking viewability if it's not started during adView initialization. - if (![self shouldStartViewabilityDuringInitialization]) { - [self startViewabilityTracker]; - } - - [self.view stringByEvaluatingJavaScriptFromString:@"webviewDidAppear();"]; - break; - case MPAdWebViewEventAdDidDisappear: - [self.view stringByEvaluatingJavaScriptFromString:@"webviewDidClose();"]; - break; - default: - break; - } -} - -- (void)startViewabilityTracker -{ - [self.viewabilityTracker startTracking]; -} - -- (void)disableRequestHandling -{ - self.shouldHandleRequests = NO; - [self.destinationDisplayAgent cancel]; -} - -- (void)enableRequestHandling -{ - self.shouldHandleRequests = YES; -} - -#pragma mark - - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (void)displayAgentWillPresentModal -{ - [self.delegate adActionWillBegin:self.view]; -} - -- (void)displayAgentWillLeaveApplication -{ - [self.delegate adActionWillLeaveApplication:self.view]; -} - -- (void)displayAgentDidDismissModal -{ - [self.delegate adActionDidFinish:self.view]; -} - -- (MPAdConfiguration *)adConfiguration -{ - return self.configuration; -} - -#pragma mark - - -- (BOOL)webView:(MPWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request - navigationType:(UIWebViewNavigationType)navigationType -{ - if (!self.shouldHandleRequests) { - return NO; - } - - NSURL *URL = [request URL]; - if ([URL mp_isMoPubScheme]) { - [self performActionForMoPubSpecificURL:URL]; - return NO; - } else if ([self shouldIntercept:URL navigationType:navigationType]) { - - // Disable intercept without user interaction - if (!self.userInteractedWithWebView) { - MPLogInfo(@"Redirect without user interaction detected"); - return NO; - } - - [self interceptURL:URL]; - return NO; - } else { - // don't handle any deep links without user interaction - return self.userInteractedWithWebView || [URL mp_isSafeForLoadingWithoutUserAction]; - } -} - -- (void)webViewDidStartLoad:(MPWebView *)webView -{ - [self.view disableJavaScriptDialogs]; -} - -#pragma mark - MoPub-specific URL handlers -- (void)performActionForMoPubSpecificURL:(NSURL *)URL -{ - MPLogDebug(@"MPAdWebView - loading MoPub URL: %@", URL); - MPMoPubHostCommand command = [URL mp_mopubHostCommand]; - switch (command) { - case MPMoPubHostCommandClose: - [self.delegate adDidClose:self.view]; - break; - case MPMoPubHostCommandFinishLoad: - [self.delegate adDidFinishLoadingAd:self.view]; - break; - case MPMoPubHostCommandFailLoad: - [self.delegate adDidFailToLoadAd:self.view]; - break; - default: - MPLogWarn(@"MPAdWebView - unsupported MoPub URL: %@", [URL absoluteString]); - break; - } -} - -#pragma mark - URL Interception -- (BOOL)shouldIntercept:(NSURL *)URL navigationType:(UIWebViewNavigationType)navigationType -{ - if ([URL mp_hasTelephoneScheme] || [URL mp_hasTelephonePromptScheme]) { - return YES; - } else if (navigationType == UIWebViewNavigationTypeLinkClicked) { - return YES; - } else if (navigationType == UIWebViewNavigationTypeOther && self.userInteractedWithWebView) { - return YES; - } else { - return NO; - } -} - -- (void)interceptURL:(NSURL *)URL -{ - NSURL *redirectedURL = URL; - if (self.configuration.clickTrackingURL) { - NSString *path = [NSString stringWithFormat:@"%@&r=%@", - self.configuration.clickTrackingURL.absoluteString, - [[URL absoluteString] mp_URLEncodedString]]; - redirectedURL = [NSURL URLWithString:path]; - } - - [self.destinationDisplayAgent displayDestinationForURL:redirectedURL]; -} - -#pragma mark - Utility - -- (void)init3rdPartyViewabilityTrackers -{ - self.viewabilityTracker = [[MPViewabilityTracker alloc] initWithAdView:self.view isVideo:self.configuration.isVastVideoPlayer startTrackingImmediately:[self shouldStartViewabilityDuringInitialization]]; -} - -- (BOOL)shouldStartViewabilityDuringInitialization -{ - // If viewabile impression tracking experiment is enabled, we defer viewability trackers until - // ad view is at least x pixels on screen for y seconds, where x and y are configurable values defined in server. - if (self.adConfiguration.visibleImpressionTrackingEnabled) { - return NO; - } - - return ![self isInterstitialAd]; -} - -- (BOOL)isInterstitialAd -{ - return (self.configuration.adType == MPAdTypeInterstitial); -} - -- (void)initAdAlertManager -{ - self.adAlertManager.adConfiguration = self.configuration; - self.adAlertManager.adUnitId = [self.delegate adUnitId]; - self.adAlertManager.targetAdView = self.view; - self.adAlertManager.location = [self.delegate location]; - [self.adAlertManager beginMonitoringAlerts]; -} - -- (void)rotateToOrientation:(UIInterfaceOrientation)orientation -{ - [self forceRedraw]; -} - -- (void)forceRedraw -{ - UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; - int angle = -1; - switch (orientation) { - case UIInterfaceOrientationPortrait: angle = 0; break; - case UIInterfaceOrientationLandscapeLeft: angle = 90; break; - case UIInterfaceOrientationLandscapeRight: angle = -90; break; - case UIInterfaceOrientationPortraitUpsideDown: angle = 180; break; - default: break; - } - - if (angle == -1) return; - - // UIWebView doesn't seem to fire the 'orientationchange' event upon rotation, so we do it here. - NSString *orientationEventScript = [NSString stringWithFormat: - @"window.__defineGetter__('orientation',function(){return %d;});" - @"(function(){ var evt = document.createEvent('Events');" - @"evt.initEvent('orientationchange',true,true);window.dispatchEvent(evt);})();", - angle]; - [self.view stringByEvaluatingJavaScriptFromString:orientationEventScript]; - - // XXX: In iOS 7, off-screen UIWebViews will fail to render certain image creatives. - // Specifically, creatives that only contain an tag whose src attribute uses a 302 - // redirect will not be rendered at all. One workaround is to temporarily change the web view's - // internal contentInset property; this seems to force the web view to re-draw. - if (MPOffscreenWebViewNeedsRenderingWorkaround()) { - if ([self.view respondsToSelector:@selector(scrollView)]) { - UIScrollView *scrollView = self.view.scrollView; - UIEdgeInsets originalInsets = scrollView.contentInset; - UIEdgeInsets newInsets = UIEdgeInsetsMake(originalInsets.top + 1, - originalInsets.left, - originalInsets.bottom, - originalInsets.right); - scrollView.contentInset = newInsets; - scrollView.contentInset = originalInsets; - } - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.h deleted file mode 100644 index 993b6ff9c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MPHTMLBannerCustomEvent.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBannerCustomEvent.h" -#import "MPAdWebViewAgent.h" -#import "MPPrivateBannerCustomEventDelegate.h" - -@interface MPHTMLBannerCustomEvent : MPBannerCustomEvent - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wobjc-property-synthesis" -@property (nonatomic, weak) id delegate; -#pragma clang diagnostic pop - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.m deleted file mode 100644 index c174b0bb8..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLBannerCustomEvent.m +++ /dev/null @@ -1,112 +0,0 @@ -// -// MPHTMLBannerCustomEvent.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPHTMLBannerCustomEvent.h" -#import "MPWebView.h" -#import "MPLogging.h" -#import "MPAdConfiguration.h" -#import "MPAnalyticsTracker.h" - -@interface MPHTMLBannerCustomEvent () - -@property (nonatomic, strong) MPAdWebViewAgent *bannerAgent; - -@end - -@implementation MPHTMLBannerCustomEvent - -@synthesize bannerAgent = _bannerAgent; - -- (BOOL)enableAutomaticImpressionAndClickTracking -{ - return NO; -} - -- (void)requestAdWithSize:(CGSize)size customEventInfo:(NSDictionary *)info -{ - MPLogInfo(@"Loading MoPub HTML banner"); - MPLogTrace(@"Loading banner with HTML source: %@", [[self.delegate configuration] adResponseHTMLString]); - - CGRect adWebViewFrame = CGRectMake(0, 0, size.width, size.height); - self.bannerAgent = [[MPAdWebViewAgent alloc] initWithAdWebViewFrame:adWebViewFrame delegate:self]; - [self.bannerAgent loadConfiguration:[self.delegate configuration]]; -} - -- (void)dealloc -{ - self.bannerAgent.delegate = nil; -} - -- (void)rotateToOrientation:(UIInterfaceOrientation)newOrientation -{ - [self.bannerAgent rotateToOrientation:newOrientation]; -} - -#pragma mark - MPAdWebViewAgentDelegate - -- (CLLocation *)location -{ - return [self.delegate location]; -} - -- (NSString *)adUnitId -{ - return [self.delegate adUnitId]; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (void)adDidFinishLoadingAd:(MPWebView *)ad -{ - MPLogInfo(@"MoPub HTML banner did load"); - [self.delegate bannerCustomEvent:self didLoadAd:ad]; -} - -- (void)adDidFailToLoadAd:(MPWebView *)ad -{ - MPLogInfo(@"MoPub HTML banner did fail"); - [self.delegate bannerCustomEvent:self didFailToLoadAdWithError:nil]; -} - -- (void)adDidClose:(MPWebView *)ad -{ - //don't care -} - -- (void)adActionWillBegin:(MPWebView *)ad -{ - MPLogInfo(@"MoPub HTML banner will begin action"); - [self.delegate bannerCustomEventWillBeginAction:self]; -} - -- (void)adActionDidFinish:(MPWebView *)ad -{ - MPLogInfo(@"MoPub HTML banner did finish action"); - [self.delegate bannerCustomEventDidFinishAction:self]; -} - -- (void)adActionWillLeaveApplication:(MPWebView *)ad -{ - MPLogInfo(@"MoPub HTML banner will leave application"); - [self.delegate bannerCustomEventWillLeaveApplication:self]; -} - -- (void)trackImpressionsIncludedInMarkup -{ - [self.bannerAgent invokeJavaScriptForEvent:MPAdWebViewEventAdDidAppear]; -} - -- (void)startViewabilityTracker -{ - [self.bannerAgent startViewabilityTracker]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.h deleted file mode 100644 index 7a1c16fc5..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MPHTMLInterstitialCustomEvent.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPInterstitialCustomEvent.h" -#import "MPHTMLInterstitialViewController.h" -#import "MPPrivateInterstitialCustomEventDelegate.h" - -@interface MPHTMLInterstitialCustomEvent : MPInterstitialCustomEvent - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wobjc-property-synthesis" -@property (nonatomic, weak) id delegate; -#pragma clang diagnostic pop - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.m deleted file mode 100644 index 18e1bc994..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialCustomEvent.m +++ /dev/null @@ -1,121 +0,0 @@ -// -// MPHTMLInterstitialCustomEvent.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPHTMLInterstitialCustomEvent.h" -#import "MPLogging.h" -#import "MPAdConfiguration.h" - -@interface MPHTMLInterstitialCustomEvent () - -@property (nonatomic, strong) MPHTMLInterstitialViewController *interstitial; -@property (nonatomic, assign) BOOL trackedImpression; - -@end - -@implementation MPHTMLInterstitialCustomEvent - -@synthesize interstitial = _interstitial; - -- (BOOL)enableAutomaticImpressionAndClickTracking -{ - // An HTML interstitial tracks its own clicks. Turn off automatic tracking to prevent the tap event callback - // from generating an additional click. - // However, an HTML interstitial does not track its own impressions so we must manually do it in this class. - // See interstitialDidAppear: - return NO; -} - -- (void)requestInterstitialWithCustomEventInfo:(NSDictionary *)info -{ - MPLogInfo(@"Loading MoPub HTML interstitial"); - MPAdConfiguration *configuration = [self.delegate configuration]; - MPLogTrace(@"Loading HTML interstitial with source: %@", [configuration adResponseHTMLString]); - - self.interstitial = [[MPHTMLInterstitialViewController alloc] init]; - self.interstitial.delegate = self; - self.interstitial.orientationType = configuration.orientationType; - - [self.interstitial loadConfiguration:configuration]; -} - -- (void)showInterstitialFromRootViewController:(UIViewController *)rootViewController -{ - [self.interstitial presentInterstitialFromViewController:rootViewController]; -} - -#pragma mark - MPInterstitialViewControllerDelegate - -- (CLLocation *)location -{ - return [self.delegate location]; -} - -- (NSString *)adUnitId -{ - return [self.delegate adUnitId]; -} - -- (void)interstitialDidLoadAd:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub HTML interstitial did load"); - [self.delegate interstitialCustomEvent:self didLoadAd:self.interstitial]; -} - -- (void)interstitialDidFailToLoadAd:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub HTML interstitial did fail"); - [self.delegate interstitialCustomEvent:self didFailToLoadAdWithError:nil]; -} - -- (void)interstitialWillAppear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub HTML interstitial will appear"); - [self.delegate interstitialCustomEventWillAppear:self]; -} - -- (void)interstitialDidAppear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub HTML interstitial did appear"); - [self.delegate interstitialCustomEventDidAppear:self]; - - if (!self.trackedImpression) { - self.trackedImpression = YES; - [self.delegate trackImpression]; - } -} - -- (void)interstitialWillDisappear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub HTML interstitial will disappear"); - [self.delegate interstitialCustomEventWillDisappear:self]; -} - -- (void)interstitialDidDisappear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub HTML interstitial did disappear"); - [self.delegate interstitialCustomEventDidDisappear:self]; - - // Deallocate the interstitial as we don't need it anymore. If we don't deallocate the interstitial after dismissal, - // then the html in the webview will continue to run which could lead to bugs such as continuing to play the sound of an inline - // video since the app may hold onto the interstitial ad controller. Moreover, we keep an array of controllers around as well. - self.interstitial = nil; -} - -- (void)interstitialDidReceiveTapEvent:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub HTML interstitial did receive tap event"); - [self.delegate interstitialCustomEventDidReceiveTapEvent:self]; -} - -- (void)interstitialWillLeaveApplication:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub HTML interstitial will leave application"); - [self.delegate interstitialCustomEventWillLeaveApplication:self]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.h deleted file mode 100644 index bc29f15de..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MPHTMLInterstitialViewController.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#import "MPAdWebViewAgent.h" -#import "MPInterstitialViewController.h" - -@class MPAdConfiguration; - -@interface MPHTMLInterstitialViewController : MPInterstitialViewController - -@property (nonatomic, strong) MPAdWebViewAgent *backingViewAgent; - -- (void)loadConfiguration:(MPAdConfiguration *)configuration; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.m deleted file mode 100644 index ca2ceda8f..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPHTMLInterstitialViewController.m +++ /dev/null @@ -1,164 +0,0 @@ -// -// MPHTMLInterstitialViewController.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPHTMLInterstitialViewController.h" -#import "MPWebView.h" -#import "MPAdDestinationDisplayAgent.h" -#import "MPViewabilityTracker.h" - -@interface MPHTMLInterstitialViewController () - -@property (nonatomic, strong) MPWebView *backingView; - -@end - -/////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPHTMLInterstitialViewController - -@synthesize delegate = _delegate; -@synthesize backingViewAgent = _backingViewAgent; -@synthesize backingView = _backingView; - -- (void)dealloc -{ - self.backingViewAgent.delegate = nil; - - self.backingView.delegate = nil; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.view.backgroundColor = [UIColor blackColor]; - self.backingViewAgent = [[MPAdWebViewAgent alloc] initWithAdWebViewFrame:self.view.bounds delegate:self]; -} - -#pragma mark - Public - -- (void)loadConfiguration:(MPAdConfiguration *)configuration -{ - [self view]; - [self.backingViewAgent loadConfiguration:configuration]; - - self.backingView = self.backingViewAgent.view; - [self.view addSubview:self.backingView]; - self.backingView.frame = self.view.bounds; - self.backingView.autoresizingMask = UIViewAutoresizingFlexibleWidth | - UIViewAutoresizingFlexibleHeight; - if (@available(iOS 11, *)) { - self.backingView.translatesAutoresizingMaskIntoConstraints = NO; - [NSLayoutConstraint activateConstraints:@[ - [self.backingView.topAnchor constraintEqualToAnchor:self.view.topAnchor], - [self.backingView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], - [self.backingView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor], - [self.backingView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor], - ]]; - } - - [self.backingViewAgent.viewabilityTracker registerFriendlyObstructionView:self.closeButton]; -} - -- (void)willPresentInterstitial -{ - self.backingView.alpha = 0.0; - [self.delegate interstitialWillAppear:self]; -} - -- (void)didPresentInterstitial -{ - [self.backingViewAgent enableRequestHandling]; - [self.backingViewAgent invokeJavaScriptForEvent:MPAdWebViewEventAdDidAppear]; - - // XXX: In certain cases, UIWebView's content appears off-center due to rotation / auto- - // resizing while off-screen. -forceRedraw corrects this issue, but there is always a brief - // instant when the old content is visible. We mask this using a short fade animation. - [self.backingViewAgent forceRedraw]; - - [UIView beginAnimations:nil context:nil]; - [UIView setAnimationDuration:0.3]; - self.backingView.alpha = 1.0; - [UIView commitAnimations]; - - [self.delegate interstitialDidAppear:self]; -} - -- (void)willDismissInterstitial -{ - [self.backingViewAgent disableRequestHandling]; - [self.delegate interstitialWillDisappear:self]; -} - -- (void)didDismissInterstitial -{ - [self.backingViewAgent invokeJavaScriptForEvent:MPAdWebViewEventAdDidDisappear]; - [self.delegate interstitialDidDisappear:self]; -} - -#pragma mark - Autorotation - -- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator -{ - [coordinator animateAlongsideTransition:^(id context) { - UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation]; - [self.backingViewAgent rotateToOrientation:orientation]; - } completion:nil]; - - [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; -} - -#pragma mark - MPAdWebViewAgentDelegate - -- (CLLocation *)location -{ - return [self.delegate location]; -} - -- (NSString *)adUnitId -{ - return [self.delegate adUnitId]; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - return self; -} - -- (void)adDidFinishLoadingAd:(MPWebView *)ad -{ - [self.delegate interstitialDidLoadAd:self]; -} - -- (void)adDidFailToLoadAd:(MPWebView *)ad -{ - [self.delegate interstitialDidFailToLoadAd:self]; -} - -- (void)adActionWillBegin:(MPWebView *)ad -{ - [self.delegate interstitialDidReceiveTapEvent:self]; -} - -- (void)adActionWillLeaveApplication:(MPWebView *)ad -{ - [self.delegate interstitialWillLeaveApplication:self]; - [self dismissInterstitialAnimated:NO]; -} - -- (void)adActionDidFinish:(MPWebView *)ad -{ - //NOOP: the landing page is going away, but not the interstitial. -} - -- (void)adDidClose:(MPWebView *)ad -{ - //NOOP: the ad is going away, but not the interstitial. -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPWebView.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPWebView.h deleted file mode 100644 index 94e5bbbe9..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPWebView.h +++ /dev/null @@ -1,116 +0,0 @@ -// -// MPWebView.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -/*** - * MPWebView - * This class is a wrapper class for WKWebView and UIWebView. Internally, it utilizes WKWebView when possible, and - * falls back on UIWebView only when WKWebView isn't available (i.e., in iOS 7). MPWebView's interface is meant to - * imitate UIWebView, and, in many cases, MPWebView can act as a drop-in replacement for UIWebView. MPWebView also - * blocks all JavaScript text boxes from appearing. - * - * While `stringByEvaluatingJavaScriptFromString:` does exist for UIWebView compatibility reasons, it's highly - * recommended that the caller uses `evaluateJavaScript:completionHandler:` whenever code can be reworked - * to make use of completion blocks to keep the advantages of asynchronicity. It solely fires off the javascript - * execution within WKWebView and does not wait or return. - * - * MPWebView currently does not support a few other features of UIWebView -- such as pagination -- as WKWebView also - * does not contain support. - ***/ - -#import - -@class MPWebView; - -@protocol MPWebViewDelegate - -@optional - -- (BOOL)webView:(MPWebView *)webView -shouldStartLoadWithRequest:(NSURLRequest *)request - navigationType:(UIWebViewNavigationType)navigationType; - -- (void)webViewDidStartLoad:(MPWebView *)webView; - -- (void)webViewDidFinishLoad:(MPWebView *)webView; - -- (void)webView:(MPWebView *)webView -didFailLoadWithError:(NSError *)error; - -@end - -typedef void (^MPWebViewJavascriptEvaluationCompletionHandler)(id result, NSError *error); - -@interface MPWebView : UIView - -// If you -need- UIWebView for some reason, use this method to init and send `YES` to `forceUIWebView` to be sure -// you're using UIWebView regardless of OS. If any other `init` method is used, or if `NO` is used as the forceUIWebView -// parameter, WKWebView will be used when available. -- (instancetype)initWithFrame:(CGRect)frame forceUIWebView:(BOOL)forceUIWebView; - -@property (weak, nonatomic) id delegate; - -// When set to `YES`, `shouldConformToSafeArea` sets constraints on the WKWebView to always stay within the safe area -// using the MPWebView's safeAreaLayoutGuide. Otherwise, the WKWebView will be constrained directly to MPWebView's -// anchors to fill the whole container. Default is `NO`. -// -// This property has no effect on versions of iOS less than 11 or phones other than iPhone X. -// -// This property has no effect on UIWebView-based MPWebViews, as UIWebView only supports springs and struts, however -// this should not be an issue because UIWebView doesn't seem to be glitchy with the safe area. -@property (nonatomic, assign) BOOL shouldConformToSafeArea; - -@property (nonatomic, readonly, getter=isLoading) BOOL loading; - -// These methods and properties are non-functional below iOS 9. If you call or try to set them, they'll do nothing. -// For the properties, if you try to access them, you'll get `NO` 100% of the time. They are entirely hidden when -// compiling with iOS 8 SDK or below. -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= MP_IOS_9_0 -- (void)loadData:(NSData *)data - MIMEType:(NSString *)MIMEType -textEncodingName:(NSString *)encodingName - baseURL:(NSURL *)baseURL; - -@property (nonatomic) BOOL allowsLinkPreview; -@property (nonatomic, readonly) BOOL allowsPictureInPictureMediaPlayback; -#endif - -+ (void)forceWKWebView:(BOOL)shouldForce; -+ (BOOL)isForceWKWebView; - -- (void)loadHTMLString:(NSString *)string - baseURL:(NSURL *)baseURL; - -- (void)loadRequest:(NSURLRequest *)request; -- (void)stopLoading; -- (void)reload; - -@property (nonatomic, readonly) BOOL canGoBack; -@property (nonatomic, readonly) BOOL canGoForward; -- (void)goBack; -- (void)goForward; - -@property (nonatomic) BOOL scalesPageToFit; -@property (nonatomic, readonly) UIScrollView *scrollView; - -- (void)evaluateJavaScript:(NSString *)javaScriptString - completionHandler:(MPWebViewJavascriptEvaluationCompletionHandler)completionHandler; - -// When using WKWebView, always returns @"" and solely fires the javascript execution without waiting on it. -// If you need a guaranteed return value from `stringByEvaluatingJavaScriptFromString:`, please use -// `evaluateJavaScript:completionHandler:` instead. -- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)javaScriptString; - -@property (nonatomic, readonly) BOOL allowsInlineMediaPlayback; -@property (nonatomic, readonly) BOOL mediaPlaybackRequiresUserAction; -@property (nonatomic, readonly) BOOL mediaPlaybackAllowsAirPlay; - -// UIWebView+MPAdditions methods -- (void)mp_setScrollable:(BOOL)scrollable; -- (void)disableJavaScriptDialogs; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPWebView.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPWebView.m deleted file mode 100644 index 76da75d36..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/HTML/MPWebView.m +++ /dev/null @@ -1,643 +0,0 @@ -// -// MPWebView.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPWebView.h" - -#import - -static BOOL const kMoPubAllowsInlineMediaPlaybackDefault = YES; -static BOOL const kMoPubRequiresUserActionForMediaPlaybackDefault = NO; - -// Set defaults for this as its default differs between UIWebView and WKWebView -static BOOL const kMoPubAllowsLinkPreviewDefault = NO; - -static NSString *const kMoPubJavaScriptDisableDialogScript = @"window.alert = function() { }; window.prompt = function() { }; window.confirm = function() { };"; - -static NSString *const kMoPubFrameKeyPathString = @"frame"; - -static BOOL gForceWKWebView = NO; - -@interface MPWebView () - -@property (weak, nonatomic) WKWebView *wkWebView; -@property (weak, nonatomic) UIWebView *uiWebView; - -@property (strong, nonatomic) NSArray *wkWebViewLayoutConstraints; - -@property (nonatomic, assign) BOOL hasMovedToWindow; - -@end - -@implementation MPWebView - -- (instancetype)init { - if (self = [super init]) { - [self setUpStepsForceUIWebView:NO]; - } - - return self; -} - -- (instancetype)initWithCoder:(NSCoder *)aDecoder { - if (self = [super initWithCoder:aDecoder]) { - [self setUpStepsForceUIWebView:NO]; - } - - return self; -} - -- (instancetype)initWithFrame:(CGRect)frame { - if (self = [super initWithFrame:frame]) { - [self setUpStepsForceUIWebView:NO]; - } - - return self; -} - -- (instancetype)initWithFrame:(CGRect)frame forceUIWebView:(BOOL)forceUIWebView { - if (self = [super initWithFrame:frame]) { - [self setUpStepsForceUIWebView:forceUIWebView]; - } - - return self; -} - -- (void)setUpStepsForceUIWebView:(BOOL)forceUIWebView { - // set up web view - UIView *webView; - - if ((gForceWKWebView || !forceUIWebView) && [WKWebView class]) { - WKUserContentController *contentController = [[WKUserContentController alloc] init]; - WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; - config.allowsInlineMediaPlayback = kMoPubAllowsInlineMediaPlaybackDefault; - if (@available(iOS 9.0, *)) { - config.requiresUserActionForMediaPlayback = kMoPubRequiresUserActionForMediaPlaybackDefault; - } else { - config.mediaPlaybackRequiresUserAction = kMoPubRequiresUserActionForMediaPlaybackDefault; - } - config.userContentController = contentController; - - WKWebView *wkWebView = [[WKWebView alloc] initWithFrame:self.bounds configuration:config]; - - wkWebView.UIDelegate = self; - wkWebView.navigationDelegate = self; - - webView = wkWebView; - - self.wkWebView = wkWebView; - - // Put WKWebView onto the offscreen view so any loading will complete correctly; see comment below. - [self retainWKWebViewOffscreen:wkWebView]; - } else { - UIWebView *uiWebView = [[UIWebView alloc] initWithFrame:self.bounds]; - - uiWebView.allowsInlineMediaPlayback = kMoPubAllowsInlineMediaPlaybackDefault; - uiWebView.mediaPlaybackRequiresUserAction = kMoPubRequiresUserActionForMediaPlaybackDefault; - - uiWebView.delegate = self; - - webView = uiWebView; - - self.uiWebView = uiWebView; - - [self addSubview:webView]; - } - - webView.backgroundColor = [UIColor clearColor]; - webView.opaque = NO; - - webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - - // set default scalesPageToFit - self.scalesPageToFit = NO; - - // set default `shouldConformToSafeArea` - self.shouldConformToSafeArea = NO; - - // configure like the old MPAdWebView - self.backgroundColor = [UIColor clearColor]; - self.opaque = NO; - - // set default for allowsLinkPreview as they're different between WKWebView and UIWebView - self.allowsLinkPreview = kMoPubAllowsLinkPreviewDefault; - - // set up KVO to adjust the frame of the WKWebView to avoid white screens - if (self.wkWebView) { - [self addObserver:self - forKeyPath:kMoPubFrameKeyPathString - options:NSKeyValueObservingOptionOld - context:NULL]; - } -} - -// WKWebView won't load/execute javascript unless it's on the view hierarchy. Because the MoPub SDK uses a lot of -// javascript before adding the view to the hierarchy, let's stick the WKWebView into an offscreen-but-on-the-window -// view, and move it to self when self gets a window. -static UIView *gOffscreenView = nil; - -- (void)retainWKWebViewOffscreen:(WKWebView *)webView { - if (!gOffscreenView) { - gOffscreenView = [self constructOffscreenView]; - } - [gOffscreenView addSubview:webView]; -} - -- (void)cleanUpOffscreenView { - if (gOffscreenView.subviews.count == 0) { - [gOffscreenView removeFromSuperview]; - gOffscreenView = nil; - } -} - -- (UIView *)constructOffscreenView { - UIView *view = [[UIView alloc] initWithFrame:CGRectZero]; - view.clipsToBounds = YES; - - UIWindow *appWindow = [[UIApplication sharedApplication] keyWindow]; - [appWindow addSubview:view]; - - return view; -} - -- (void)didMoveToWindow { - // If using WKWebView, and if MPWebView is in the view hierarchy, and if the WKWebView is in the offscreen view currently, - // move our WKWebView to self and deallocate OffscreenView if no other MPWebView is using it. - if (self.wkWebView - && !self.hasMovedToWindow - && self.window != nil - && [self.wkWebView.superview isEqual:gOffscreenView]) { - self.wkWebView.frame = self.bounds; - [self addSubview:self.wkWebView]; - [self constrainWebViewShouldUseSafeArea:self.shouldConformToSafeArea]; - self.hasMovedToWindow = YES; - - // Don't keep OffscreenView if we don't need it; it can always be re-allocated again later - [self cleanUpOffscreenView]; - } -} - -// Occasionally, we encounter an issue where, when MPWebView is initialized at a different frame size than when it's shown, -// the WKWebView shows as all white because it doesn't have a chance to get redrawn at the new size before getting shown. -// This makes sure WKWebView is always already rendered at the correct size when it gets moved to the window. -- (void)observeValueForKeyPath:(NSString *)keyPath - ofObject:(id)object - change:(NSDictionary *)change - context:(void *)context { - // Only keep the wkWebView up-to-date if its superview is the offscreen view. - // If it's attached to self, the autoresizing mask should come into play & this is just extra work. - if ([keyPath isEqualToString:kMoPubFrameKeyPathString] - && [self.wkWebView.superview isEqual:gOffscreenView]) { - if (@available(iOS 11.0, *)) { - // In iOS 11, WKWebView loads web view contents into the safe area only unless `viewport-fit=cover` is - // included in the page's viewport tag. Also, as of iOS 11, it appears WKWebView does not redraw page - // contents to match the safe area of a new position after being moved. As a result, making `wkWebView`'s - // X/Y coordinates (0,0) can introduce an issue on iPhone X where banners do not load inside of - // `wkWebView`'s bounds, even if the banner is moved into the safe area after loading. - // - // To skirt around these problems, always put `wkWebView` into the safe area when using iOS 11 or later. - self.wkWebView.frame = CGRectMake(gOffscreenView.safeAreaInsets.left, - gOffscreenView.safeAreaInsets.top, - CGRectGetWidth(self.bounds), - CGRectGetHeight(self.bounds)); - } else { - self.wkWebView.frame = self.bounds; - } - } -} - -- (void)dealloc { - // Remove KVO observer - if (self.wkWebView) { - [self removeObserver:self forKeyPath:kMoPubFrameKeyPathString]; - } - - // Avoids EXC_BAD_INSTRUCTION crash - self.wkWebView.scrollView.delegate = nil; - - // Be sure our WKWebView doesn't stay stuck to the static OffscreenView - [self.wkWebView removeFromSuperview]; - // Deallocate OffscreenView if needed - [self cleanUpOffscreenView]; -} - -- (void)setShouldConformToSafeArea:(BOOL)shouldConformToSafeArea { - _shouldConformToSafeArea = shouldConformToSafeArea; - - if (self.hasMovedToWindow) { - [self constrainWebViewShouldUseSafeArea:shouldConformToSafeArea]; - } -} - -- (void)constrainWebViewShouldUseSafeArea:(BOOL)shouldUseSafeArea { - if (@available(iOS 11.0, *)) { - self.wkWebView.translatesAutoresizingMaskIntoConstraints = NO; - - if (self.wkWebViewLayoutConstraints) { - [NSLayoutConstraint deactivateConstraints:self.wkWebViewLayoutConstraints]; - } - - if (shouldUseSafeArea) { - self.wkWebViewLayoutConstraints = @[ - [self.wkWebView.topAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.topAnchor], - [self.wkWebView.leadingAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.leadingAnchor], - [self.wkWebView.trailingAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.trailingAnchor], - [self.wkWebView.bottomAnchor constraintEqualToAnchor:self.safeAreaLayoutGuide.bottomAnchor], - ]; - } else { - self.wkWebViewLayoutConstraints = @[ - [self.wkWebView.topAnchor constraintEqualToAnchor:self.topAnchor], - [self.wkWebView.leadingAnchor constraintEqualToAnchor:self.leadingAnchor], - [self.wkWebView.trailingAnchor constraintEqualToAnchor:self.trailingAnchor], - [self.wkWebView.bottomAnchor constraintEqualToAnchor:self.bottomAnchor], - ]; - } - - [NSLayoutConstraint activateConstraints:self.wkWebViewLayoutConstraints]; - } -} - -- (BOOL)isLoading { - return self.uiWebView ? self.uiWebView.isLoading : self.wkWebView.isLoading; -} - -- (void)loadData:(NSData *)data - MIMEType:(NSString *)MIMEType -textEncodingName:(NSString *)encodingName - baseURL:(NSURL *)baseURL { - if (self.uiWebView) { - [self.uiWebView loadData:data - MIMEType:MIMEType - textEncodingName:encodingName - baseURL:baseURL]; - } else if (@available(iOS 9.0, *)) { - [self.wkWebView loadData:data - MIMEType:MIMEType - characterEncodingName:encodingName - baseURL:baseURL]; - } -} - -+ (void)forceWKWebView:(BOOL)shouldForce -{ - gForceWKWebView = shouldForce; -} - -+ (BOOL)isForceWKWebView -{ - return gForceWKWebView; -} - -- (void)loadHTMLString:(NSString *)string - baseURL:(NSURL *)baseURL { - if (self.uiWebView) { - [self.uiWebView loadHTMLString:string - baseURL:baseURL]; - } else { - [self.wkWebView loadHTMLString:string - baseURL:baseURL]; - } -} - -- (void)loadRequest:(NSURLRequest *)request { - if (self.uiWebView) { - [self.uiWebView loadRequest:request]; - } else { - [self.wkWebView loadRequest:request]; - } -} - -- (void)stopLoading { - if (self.uiWebView) { - [self.uiWebView stopLoading]; - } else { - [self.wkWebView stopLoading]; - } -} - -- (void)reload { - if (self.uiWebView) { - [self.uiWebView reload]; - } else { - [self.wkWebView reload]; - } -} - -- (BOOL)canGoBack { - return self.uiWebView ? self.uiWebView.canGoBack : self.wkWebView.canGoBack; -} - -- (BOOL)canGoForward { - return self.uiWebView ? self.uiWebView.canGoForward : self.wkWebView.canGoForward; -} - -- (void)goBack { - if (self.uiWebView) { - [self.uiWebView goBack]; - } else { - [self.wkWebView goBack]; - } -} - -- (void)goForward { - if (self.uiWebView) { - [self.uiWebView goForward]; - } else { - [self.wkWebView goForward]; - } -} - -- (void)setAllowsLinkPreview:(BOOL)allowsLinkPreview { - if (@available(iOS 9.0, *)) { - if (self.uiWebView) { - self.uiWebView.allowsLinkPreview = allowsLinkPreview; - } else { - self.wkWebView.allowsLinkPreview = allowsLinkPreview; - } - } -} - -- (BOOL)allowsLinkPreview { - if (@available(iOS 9.0, *)) { - if (self.uiWebView) { - return self.uiWebView.allowsLinkPreview; - } else { - return self.wkWebView.allowsLinkPreview; - } - } - - return NO; -} - -- (void)setScalesPageToFit:(BOOL)scalesPageToFit { - if (self.uiWebView) { - self.uiWebView.scalesPageToFit = scalesPageToFit; - } else { - if (scalesPageToFit) { - self.wkWebView.scrollView.delegate = nil; - - [self.wkWebView.configuration.userContentController removeAllUserScripts]; - } else { - // Make sure the scroll view can't scroll (prevent double tap to zoom) - self.wkWebView.scrollView.delegate = self; - } - } -} - -- (BOOL)scalesPageToFit { - return self.uiWebView ? self.uiWebView.scalesPageToFit : self.scrollView.delegate == nil; -} - -- (UIScrollView *)scrollView { - return self.uiWebView ? self.uiWebView.scrollView : self.wkWebView.scrollView; -} - -- (void)evaluateJavaScript:(NSString *)javaScriptString - completionHandler:(MPWebViewJavascriptEvaluationCompletionHandler)completionHandler { - if (self.uiWebView) { - NSString *resultString = [self.uiWebView stringByEvaluatingJavaScriptFromString:javaScriptString]; - - if (completionHandler) { - completionHandler(resultString, nil); - } - } else { - [self.wkWebView evaluateJavaScript:javaScriptString - completionHandler:completionHandler]; - } -} - -- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)javaScriptString { - if (self.uiWebView) { - return [self.uiWebView stringByEvaluatingJavaScriptFromString:javaScriptString]; - } else { - // There is no way to reliably wait for `evaluateJavaScript:completionHandler:` to finish without risk of - // deadlocking the main thread. This method is called on the main thread and the completion block is also - // called on the main thread. - // Instead of waiting, just fire and return an empty string. - - // Methods attempted: - // libdispatch dispatch groups - // http://stackoverflow.com/questions/17920169/how-to-wait-for-method-that-has-completion-block-all-on-main-thread - - [self.wkWebView evaluateJavaScript:javaScriptString completionHandler:nil]; - return @""; - } -} - -- (BOOL)allowsInlineMediaPlayback { - return self.uiWebView ? self.uiWebView.allowsInlineMediaPlayback : self.wkWebView.configuration.allowsInlineMediaPlayback; -} - -- (BOOL)mediaPlaybackRequiresUserAction { - if (self.uiWebView) { - return self.uiWebView.mediaPlaybackRequiresUserAction; - } else { - if (@available(iOS 9.0, *)) { - return self.wkWebView.configuration.requiresUserActionForMediaPlayback; - } else if (![self.wkWebView.configuration respondsToSelector:@selector(requiresUserActionForMediaPlayback)]) { - return self.wkWebView.configuration.mediaPlaybackRequiresUserAction; - } else { - return NO; - } - } -} - -- (BOOL)mediaPlaybackAllowsAirPlay { - if (self.uiWebView) { - return self.uiWebView.mediaPlaybackAllowsAirPlay; - } else { - if (@available(iOS 9.0, *)) { - return self.wkWebView.configuration.allowsAirPlayForMediaPlayback; - } else if (![self.wkWebView.configuration respondsToSelector:@selector(allowsAirPlayForMediaPlayback)]) { - return self.wkWebView.configuration.mediaPlaybackAllowsAirPlay; - } else { - return NO; - } - } -} - -- (BOOL)allowsPictureInPictureMediaPlayback { - if (@available(iOS 9.0, *)) { - if (self.uiWebView) { - return self.uiWebView.allowsPictureInPictureMediaPlayback; - } else { - return self.wkWebView.configuration.allowsPictureInPictureMediaPlayback; - } - } - - return NO; -} - -#pragma mark - UIWebViewDelegate - -- (BOOL)webView:(UIWebView *)webView -shouldStartLoadWithRequest:(NSURLRequest *)request - navigationType:(UIWebViewNavigationType)navigationType { - if ([self.delegate respondsToSelector:@selector(webView:shouldStartLoadWithRequest:navigationType:)]) { - return [self.delegate webView:self - shouldStartLoadWithRequest:request - navigationType:navigationType]; - } - - return YES; -} - -- (void)webViewDidStartLoad:(UIWebView *)webView { - if ([self.delegate respondsToSelector:@selector(webViewDidStartLoad:)]) { - [self.delegate webViewDidStartLoad:self]; - } -} - -- (void)webViewDidFinishLoad:(UIWebView *)webView { - if ([self.delegate respondsToSelector:@selector(webViewDidFinishLoad:)]) { - [self.delegate webViewDidFinishLoad:self]; - } -} - -- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { - if ([self.delegate respondsToSelector:@selector(webView:didFailLoadWithError:)]) { - [self.delegate webView:self didFailLoadWithError:error]; - } -} - -#pragma mark - UIWebView+MPAdditions methods - -/// Find all subviews that are UIScrollViews or subclasses and set their scrolling and bounce. -- (void)mp_setScrollable:(BOOL)scrollable { - UIScrollView *scrollView = self.scrollView; - scrollView.scrollEnabled = scrollable; - scrollView.bounces = scrollable; -} - -/// Redefine alert, prompt, and confirm to do nothing -- (void)disableJavaScriptDialogs -{ - if (self.uiWebView) { // Only redefine on UIWebView, as the WKNavigationDelegate for WKWebView takes care of this. - [self stringByEvaluatingJavaScriptFromString:kMoPubJavaScriptDisableDialogScript]; - } -} - -#pragma mark - WKNavigationDelegate - -- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation { - if ([self.delegate respondsToSelector:@selector(webViewDidStartLoad:)]) { - [self.delegate webViewDidStartLoad:self]; - } -} - -- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation { - if ([self.delegate respondsToSelector:@selector(webViewDidFinishLoad:)]) { - [self.delegate webViewDidFinishLoad:self]; - } -} - -- (void)webView:(WKWebView *)webView -didFailNavigation:(WKNavigation *)navigation - withError:(NSError *)error { - if ([self.delegate respondsToSelector:@selector(webView:didFailLoadWithError:)]) { - [self.delegate webView:self didFailLoadWithError:error]; - } -} - -- (void)webView:(WKWebView *)webView -didFailProvisionalNavigation:(WKNavigation *)navigation - withError:(NSError *)error { - if ([self.delegate respondsToSelector:@selector(webView:didFailLoadWithError:)]) { - [self.delegate webView:self didFailLoadWithError:error]; - } -} - -- (void)webView:(WKWebView *)webView -decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction -decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { - WKNavigationActionPolicy policy = WKNavigationActionPolicyAllow; - - if ([self.delegate respondsToSelector:@selector(webView:shouldStartLoadWithRequest:navigationType:)]) { - NSURLRequest *request = navigationAction.request; - UIWebViewNavigationType navType; - switch (navigationAction.navigationType) { - case WKNavigationTypeLinkActivated: - navType = UIWebViewNavigationTypeLinkClicked; - break; - case WKNavigationTypeFormSubmitted: - navType = UIWebViewNavigationTypeFormSubmitted; - break; - case WKNavigationTypeBackForward: - navType = UIWebViewNavigationTypeBackForward; - break; - case WKNavigationTypeReload: - navType = UIWebViewNavigationTypeReload; - break; - case WKNavigationTypeFormResubmitted: - navType = UIWebViewNavigationTypeFormResubmitted; - break; - default: - navType = UIWebViewNavigationTypeOther; - break; - } - - policy = [self.delegate webView:self - shouldStartLoadWithRequest:request - navigationType:navType] ? WKNavigationActionPolicyAllow : WKNavigationActionPolicyCancel; - } - - decisionHandler(policy); -} - -- (WKWebView *)webView:(WKWebView *)webView -createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration -forNavigationAction:(WKNavigationAction *)navigationAction -windowFeatures:(WKWindowFeatures *)windowFeatures { - // Open any links to new windows in the current WKWebView rather than create a new one - if (!navigationAction.targetFrame.isMainFrame) { - [webView loadRequest:navigationAction.request]; - } - - return nil; -} - -#pragma mark - UIScrollViewDelegate - -// Avoid double tap to zoom in WKWebView -// Delegate is only set when scalesPagesToFit is set to NO -- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { - return nil; -} - -#pragma mark - WKUIDelegate - -// WKUIDelegate method implementations makes it so that, if a WKWebView is being used, javascript dialog boxes can -// never show. They're programatically dismissed with the "Cancel" option (if there is any such option) before showing -// a view. - -- (void)webView:(WKWebView *)webView -runJavaScriptAlertPanelWithMessage:(NSString *)message -initiatedByFrame:(WKFrameInfo *)frame -#if __IPHONE_OS_VERSION_MAX_ALLOWED < MP_IOS_9_0 // This pre-processor code is to be sure we can compile under both iOS 8 and 9 SDKs -completionHandler:(void (^)())completionHandler { -#else -completionHandler:(void (^)(void))completionHandler { -#endif - completionHandler(); -} - -- (void)webView:(WKWebView *)webView -runJavaScriptConfirmPanelWithMessage:(NSString *)message -initiatedByFrame:(WKFrameInfo *)frame -completionHandler:(void (^)(BOOL))completionHandler { - completionHandler(NO); -} - -- (void)webView:(WKWebView *)webView -runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt - defaultText:(NSString *)defaultText -initiatedByFrame:(WKFrameInfo *)frame -completionHandler:(void (^)(NSString *result))completionHandler { - completionHandler(nil); -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.h deleted file mode 100644 index 1bb129aa7..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.h +++ /dev/null @@ -1,71 +0,0 @@ -// -// MPBaseInterstitialAdapter.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@class CLLocation; -@class MPAdConfiguration; -@class MPAdTargeting; - -@protocol MPInterstitialAdapterDelegate; - -@interface MPBaseInterstitialAdapter : NSObject - -@property (nonatomic, weak) id delegate; - -/* - * Creates an adapter with a reference to an MPInterstitialAdManager. - */ -- (id)initWithDelegate:(id)delegate; - -/* - * Sets the adapter's delegate to nil. - */ -- (void)unregisterDelegate; - -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting; -- (void)_getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting; - -- (void)didStopLoading; - -/* - * Presents the interstitial from the specified view controller. - */ -- (void)showInterstitialFromViewController:(UIViewController *)controller; - -@end - -@interface MPBaseInterstitialAdapter (ProtectedMethods) - -- (void)trackImpression; -- (void)trackClick; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@class MPInterstitialAdController; - -@protocol MPInterstitialAdapterDelegate - -- (MPInterstitialAdController *)interstitialAdController; -- (id)interstitialDelegate; -- (CLLocation *)location; - -- (void)adapterDidFinishLoadingAd:(MPBaseInterstitialAdapter *)adapter; -- (void)adapter:(MPBaseInterstitialAdapter *)adapter didFailToLoadAdWithError:(NSError *)error; -- (void)interstitialWillAppearForAdapter:(MPBaseInterstitialAdapter *)adapter; -- (void)interstitialDidAppearForAdapter:(MPBaseInterstitialAdapter *)adapter; -- (void)interstitialWillDisappearForAdapter:(MPBaseInterstitialAdapter *)adapter; -- (void)interstitialDidDisappearForAdapter:(MPBaseInterstitialAdapter *)adapter; -- (void)interstitialDidExpireForAdapter:(MPBaseInterstitialAdapter *)adapter; -- (void)interstitialDidReceiveTapEventForAdapter:(MPBaseInterstitialAdapter *)adapter; -- (void)interstitialWillLeaveApplicationForAdapter:(MPBaseInterstitialAdapter *)adapter; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.m deleted file mode 100644 index a87dc78c7..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPBaseInterstitialAdapter.m +++ /dev/null @@ -1,116 +0,0 @@ -// -// MPBaseInterstitialAdapter.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBaseInterstitialAdapter.h" -#import "MPAdConfiguration.h" -#import "MPGlobal.h" -#import "MPAnalyticsTracker.h" -#import "MPCoreInstanceProvider.h" -#import "MPError.h" -#import "MPTimer.h" -#import "MPConstants.h" - -@interface MPBaseInterstitialAdapter () - -@property (nonatomic, strong) MPAdConfiguration *configuration; -@property (nonatomic, strong) MPTimer *timeoutTimer; - -- (void)startTimeoutTimer; - -@end - -@implementation MPBaseInterstitialAdapter - -@synthesize delegate = _delegate; -@synthesize configuration = _configuration; -@synthesize timeoutTimer = _timeoutTimer; - -- (id)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - self.delegate = delegate; - } - return self; -} - -- (void)dealloc -{ - [self unregisterDelegate]; - - [self.timeoutTimer invalidate]; - -} - -- (void)unregisterDelegate -{ - self.delegate = nil; -} - -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting -{ - // To be implemented by subclasses. - [self doesNotRecognizeSelector:_cmd]; -} - -- (void)_getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting -{ - self.configuration = configuration; - - [self startTimeoutTimer]; - [self getAdWithConfiguration:configuration targeting:targeting]; -} - -- (void)startTimeoutTimer -{ - NSTimeInterval timeInterval = (self.configuration && self.configuration.adTimeoutInterval >= 0) ? - self.configuration.adTimeoutInterval : INTERSTITIAL_TIMEOUT_INTERVAL; - - if (timeInterval > 0) { - self.timeoutTimer = [[MPCoreInstanceProvider sharedProvider] buildMPTimerWithTimeInterval:timeInterval - target:self - selector:@selector(timeout) - repeats:NO]; - - [self.timeoutTimer scheduleNow]; - } -} - -- (void)didStopLoading -{ - [self.timeoutTimer invalidate]; -} - -- (void)timeout -{ - NSError * error = [MOPUBError errorWithCode:MOPUBErrorAdRequestTimedOut localizedDescription:@"Interstitial ad request timed out"]; - [self.delegate adapter:self didFailToLoadAdWithError:error]; - self.delegate = nil; -} - -#pragma mark - Presentation - -- (void)showInterstitialFromViewController:(UIViewController *)controller -{ - [self doesNotRecognizeSelector:_cmd]; -} - -#pragma mark - Metrics - -- (void)trackImpression -{ - [[MPAnalyticsTracker sharedTracker] trackImpressionForConfiguration:self.configuration]; -} - -- (void)trackClick -{ - [[MPAnalyticsTracker sharedTracker] trackClickForConfiguration:self.configuration]; -} - -@end - diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.h deleted file mode 100644 index 4a6be0f2a..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MPInterstitialAdManager.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdServerCommunicator.h" -#import "MPBaseInterstitialAdapter.h" - -@class MPAdTargeting; -@protocol MPInterstitialAdManagerDelegate; - -@interface MPInterstitialAdManager : NSObject - -@property (nonatomic, weak) id delegate; -@property (nonatomic, assign, readonly) BOOL ready; - -- (id)initWithDelegate:(id)delegate; - -- (void)loadInterstitialWithAdUnitID:(NSString *)ID targeting:(MPAdTargeting *)targeting; -- (void)presentInterstitialFromViewController:(UIViewController *)controller; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.m deleted file mode 100644 index 52e9c2c5f..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManager.m +++ /dev/null @@ -1,285 +0,0 @@ -// -// MPInterstitialAdManager.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#import "MPInterstitialAdManager.h" - -#import "MPAdServerURLBuilder.h" -#import "MPAdTargeting.h" -#import "MPInterstitialAdController.h" -#import "MPInterstitialCustomEventAdapter.h" -#import "MPCoreInstanceProvider.h" -#import "MPInterstitialAdManagerDelegate.h" -#import "MPLogging.h" -#import "MPError.h" -#import "NSMutableArray+MPAdditions.h" -#import "NSDate+MPAdditions.h" -#import "NSError+MPAdditions.h" - -@interface MPInterstitialAdManager () - -@property (nonatomic, assign) BOOL loading; -@property (nonatomic, assign, readwrite) BOOL ready; -@property (nonatomic, strong) MPBaseInterstitialAdapter *adapter; -@property (nonatomic, strong) MPAdServerCommunicator *communicator; -@property (nonatomic, strong) MPAdConfiguration *requestingConfiguration; -@property (nonatomic, strong) NSMutableArray *remainingConfigurations; -@property (nonatomic, assign) NSTimeInterval adapterLoadStartTimestamp; -@property (nonatomic, strong) MPAdTargeting * targeting; - -- (void)setUpAdapterWithConfiguration:(MPAdConfiguration *)configuration; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPInterstitialAdManager - -@synthesize loading = _loading; -@synthesize ready = _ready; -@synthesize delegate = _delegate; -@synthesize communicator = _communicator; -@synthesize adapter = _adapter; -@synthesize requestingConfiguration = _requestingConfiguration; - -- (id)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - self.communicator = [[MPAdServerCommunicator alloc] initWithDelegate:self]; - self.delegate = delegate; - } - return self; -} - -- (void)dealloc -{ - [self.communicator cancel]; - [self.communicator setDelegate:nil]; - - self.adapter = nil; -} - -- (void)setAdapter:(MPBaseInterstitialAdapter *)adapter -{ - if (self.adapter != adapter) { - [self.adapter unregisterDelegate]; - _adapter = adapter; - } -} - -#pragma mark - Public - -- (void)loadAdWithURL:(NSURL *)URL -{ - if (self.loading) { - MPLogWarn(@"Interstitial controller is already loading an ad. " - @"Wait for previous load to finish."); - return; - } - - self.loading = YES; - [self.communicator loadURL:URL]; -} - - -- (void)loadInterstitialWithAdUnitID:(NSString *)ID targeting:(MPAdTargeting *)targeting -{ - if (self.ready) { - [self.delegate managerDidLoadInterstitial:self]; - } else { - self.targeting = targeting; - [self loadAdWithURL:[MPAdServerURLBuilder URLWithAdUnitID:ID - keywords:targeting.keywords - userDataKeywords:targeting.userDataKeywords - location:targeting.location]]; - } -} - -- (void)presentInterstitialFromViewController:(UIViewController *)controller -{ - // Don't allow the ad to be shown if it isn't ready. - if (!self.ready) { - // We don't want to remotely log this event -- it's simply for publisher troubleshooting -- so use NSLog - // rather than MPLog. - NSLog(@"Interstitial ad view is not ready to be shown"); - return; - } - - [self.adapter showInterstitialFromViewController:controller]; -} - -- (CLLocation *)location -{ - return [self.delegate location]; -} - -- (MPInterstitialAdController *)interstitialAdController -{ - return [self.delegate interstitialAdController]; -} - -- (id)interstitialDelegate -{ - return [self.delegate interstitialDelegate]; -} - -#pragma mark - MPAdServerCommunicatorDelegate - -- (void)communicatorDidReceiveAdConfigurations:(NSArray *)configurations { - self.remainingConfigurations = [NSMutableArray arrayWithArray:configurations]; - self.requestingConfiguration = [self.remainingConfigurations removeFirst]; - - // There are no configurations to try. Consider this a clear response by the server. - if (self.remainingConfigurations.count == 0 && self.requestingConfiguration == nil) { - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.delegate.interstitialAdController.adUnitId); - self.loading = NO; - [self.delegate manager:self didFailToLoadInterstitialWithError:[MOPUBError errorWithCode:MOPUBErrorNoInventory]]; - return; - } - - [self fetchAdWithConfiguration:self.requestingConfiguration]; -} - -- (void)fetchAdWithConfiguration:(MPAdConfiguration *)configuration -{ - MPLogInfo(@"Interstitial ad view is fetching ad network type: %@", configuration.networkType); - - if (configuration.adUnitWarmingUp) { - MPLogInfo(kMPWarmingUpErrorLogFormatWithAdUnitID, self.delegate.interstitialAdController.adUnitId); - self.loading = NO; - [self.delegate manager:self didFailToLoadInterstitialWithError:[MOPUBError errorWithCode:MOPUBErrorAdUnitWarmingUp]]; - return; - } - - if ([configuration.networkType isEqualToString:kAdTypeClear]) { - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.delegate.interstitialAdController.adUnitId); - self.loading = NO; - [self.delegate manager:self didFailToLoadInterstitialWithError:[MOPUBError errorWithCode:MOPUBErrorNoInventory]]; - return; - } - - if (configuration.adType != MPAdTypeInterstitial) { - MPLogWarn(@"Could not load ad: interstitial object received a non-interstitial ad unit ID."); - self.loading = NO; - [self.delegate manager:self didFailToLoadInterstitialWithError:[MOPUBError errorWithCode:MOPUBErrorAdapterInvalid]]; - return; - } - - [self setUpAdapterWithConfiguration:configuration]; -} - -- (void)communicatorDidFailWithError:(NSError *)error -{ - self.ready = NO; - self.loading = NO; - - [self.delegate manager:self didFailToLoadInterstitialWithError:error]; -} - -- (void)setUpAdapterWithConfiguration:(MPAdConfiguration *)configuration; -{ - // Notify Ad Server of the adapter load. This is fire and forget. - [self.communicator sendBeforeLoadUrlWithConfiguration:configuration]; - - // Record the start time of the adapter load. - self.adapterLoadStartTimestamp = NSDate.now.timeIntervalSince1970; - - if (configuration.customEventClass == nil) { - [self adapter:nil didFailToLoadAdWithError:nil]; - return; - } - - MPBaseInterstitialAdapter *adapter = [[MPInterstitialCustomEventAdapter alloc] initWithDelegate:self]; - self.adapter = adapter; - [self.adapter _getAdWithConfiguration:configuration targeting:self.targeting]; -} - -#pragma mark - MPInterstitialAdapterDelegate - -- (void)adapterDidFinishLoadingAd:(MPBaseInterstitialAdapter *)adapter -{ - self.remainingConfigurations = nil; - self.ready = YES; - self.loading = NO; - - // Record the end of the adapter load and send off the fire and forget after-load-url tracker. - NSTimeInterval duration = NSDate.now.timeIntervalSince1970 - self.adapterLoadStartTimestamp; - [self.communicator sendAfterLoadUrlWithConfiguration:self.requestingConfiguration adapterLoadDuration:duration adapterLoadResult:MPAfterLoadResultAdLoaded]; - - [self.delegate managerDidLoadInterstitial:self]; -} - -- (void)adapter:(MPBaseInterstitialAdapter *)adapter didFailToLoadAdWithError:(NSError *)error -{ - // Record the end of the adapter load and send off the fire and forget after-load-url tracker - // with the appropriate error code result. - NSTimeInterval duration = NSDate.now.timeIntervalSince1970 - self.adapterLoadStartTimestamp; - MPAfterLoadResult result = (error.isAdRequestTimedOutError ? MPAfterLoadResultTimeout : (adapter == nil ? MPAfterLoadResultMissingAdapter : MPAfterLoadResultError)); - [self.communicator sendAfterLoadUrlWithConfiguration:self.requestingConfiguration adapterLoadDuration:duration adapterLoadResult:result]; - - // There are more ad configurations to try. - if (self.remainingConfigurations.count > 0) { - self.requestingConfiguration = [self.remainingConfigurations removeFirst]; - [self fetchAdWithConfiguration:self.requestingConfiguration]; - } - // No more configurations to try. Send new request to Ads server to get more Ads. - else if (self.requestingConfiguration.nextURL != nil) { - self.ready = NO; - self.loading = NO; - [self loadAdWithURL:self.requestingConfiguration.nextURL]; - } - // No more configurations to try and no more pages to load. - else { - self.ready = NO; - self.loading = NO; - - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.delegate.interstitialAdController.adUnitId); - [self.delegate manager:self didFailToLoadInterstitialWithError:[MOPUBError errorWithCode:MOPUBErrorNoInventory]]; - } -} - -- (void)interstitialWillAppearForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - [self.delegate managerWillPresentInterstitial:self]; -} - -- (void)interstitialDidAppearForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - [self.delegate managerDidPresentInterstitial:self]; -} - -- (void)interstitialWillDisappearForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - [self.delegate managerWillDismissInterstitial:self]; -} - -- (void)interstitialDidDisappearForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - self.ready = NO; - [self.delegate managerDidDismissInterstitial:self]; -} - -- (void)interstitialDidExpireForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - self.ready = NO; - [self.delegate managerDidExpireInterstitial:self]; -} - -- (void)interstitialDidReceiveTapEventForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - [self.delegate managerDidReceiveTapEventFromInterstitial:self]; -} - -- (void)interstitialWillLeaveApplicationForAdapter:(MPBaseInterstitialAdapter *)adapter -{ - //noop -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManagerDelegate.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManagerDelegate.h deleted file mode 100644 index ed5e47eda..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialAdManagerDelegate.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// MPInterstitialAdManagerDelegate.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPInterstitialAdManager; -@class MPInterstitialAdController; -@class CLLocation; - -@protocol MPInterstitialAdManagerDelegate - -- (MPInterstitialAdController *)interstitialAdController; -- (CLLocation *)location; -- (id)interstitialDelegate; -- (void)managerDidLoadInterstitial:(MPInterstitialAdManager *)manager; -- (void)manager:(MPInterstitialAdManager *)manager -didFailToLoadInterstitialWithError:(NSError *)error; -- (void)managerWillPresentInterstitial:(MPInterstitialAdManager *)manager; -- (void)managerDidPresentInterstitial:(MPInterstitialAdManager *)manager; -- (void)managerWillDismissInterstitial:(MPInterstitialAdManager *)manager; -- (void)managerDidDismissInterstitial:(MPInterstitialAdManager *)manager; -- (void)managerDidExpireInterstitial:(MPInterstitialAdManager *)manager; -- (void)managerDidReceiveTapEventFromInterstitial:(MPInterstitialAdManager *)manager; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.h deleted file mode 100644 index 9cf4f77e8..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// MPInterstitialCustomEventAdapter.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBaseInterstitialAdapter.h" - -#import "MPPrivateInterstitialCustomEventDelegate.h" - -@interface MPInterstitialCustomEventAdapter : MPBaseInterstitialAdapter - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.m deleted file mode 100644 index fdbb7246b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialCustomEventAdapter.m +++ /dev/null @@ -1,177 +0,0 @@ -// -// MPInterstitialCustomEventAdapter.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPInterstitialCustomEventAdapter.h" - -#import "MPAdConfiguration.h" -#import "MPAdTargeting.h" -#import "MPConstants.h" -#import "MPCoreInstanceProvider.h" -#import "MPHTMLInterstitialCustomEvent.h" -#import "MPLogging.h" -#import "MPInterstitialCustomEvent.h" -#import "MPInterstitialAdController.h" -#import "MPMRAIDInterstitialCustomEvent.h" -#import "MPRealTimeTimer.h" - -@interface MPInterstitialCustomEventAdapter () - -@property (nonatomic, strong) MPInterstitialCustomEvent *interstitialCustomEvent; -@property (nonatomic, strong) MPAdConfiguration *configuration; -@property (nonatomic, assign) BOOL hasTrackedImpression; -@property (nonatomic, assign) BOOL hasTrackedClick; -@property (nonatomic, strong) MPRealTimeTimer *expirationTimer; - -@end - -@implementation MPInterstitialCustomEventAdapter -@synthesize hasTrackedImpression = _hasTrackedImpression; -@synthesize hasTrackedClick = _hasTrackedClick; - -@synthesize interstitialCustomEvent = _interstitialCustomEvent; - -- (void)dealloc -{ - if ([self.interstitialCustomEvent respondsToSelector:@selector(invalidate)]) { - // Secret API to allow us to detach the custom event from (shared instance) routers synchronously - // See the chartboost interstitial custom event for an example use case. - [self.interstitialCustomEvent performSelector:@selector(invalidate)]; - } - self.interstitialCustomEvent.delegate = nil; - - // make sure the custom event isn't released synchronously as objects owned by the custom event - // may do additional work after a callback that results in dealloc being called - [[MPCoreInstanceProvider sharedProvider] keepObjectAliveForCurrentRunLoopIteration:_interstitialCustomEvent]; -} - -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting -{ - MPLogInfo(@"Looking for custom event class named %@.", configuration.customEventClass); - self.configuration = configuration; - - MPInterstitialCustomEvent *customEvent = [[configuration.customEventClass alloc] init]; - if (![customEvent isKindOfClass:[MPInterstitialCustomEvent class]]) { - MPLogError(@"**** Custom Event Class: %@ does not extend MPInterstitialCustomEvent ****", NSStringFromClass(configuration.customEventClass)); - [self.delegate adapter:self didFailToLoadAdWithError:nil]; - return; - } - customEvent.delegate = self; - customEvent.localExtras = targeting.localExtras; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wundeclared-selector" - if ([customEvent respondsToSelector:@selector(customEventDidUnload)]) { - MPLogWarn(@"**** Custom Event Class: %@ implements the deprecated -customEventDidUnload method. This is no longer called. Use -dealloc for cleanup instead ****", NSStringFromClass(configuration.customEventClass)); - } -#pragma clang diagnostic pop - - self.interstitialCustomEvent = customEvent; - [self.interstitialCustomEvent requestInterstitialWithCustomEventInfo:configuration.customEventClassData adMarkup:configuration.advancedBidPayload]; -} - -- (void)showInterstitialFromViewController:(UIViewController *)controller -{ - [self.interstitialCustomEvent showInterstitialFromRootViewController:controller]; -} - -#pragma mark - MPInterstitialCustomEventDelegate - -- (NSString *)adUnitId -{ - return [self.delegate interstitialAdController].adUnitId; -} - -- (CLLocation *)location -{ - return [self.delegate location]; -} - -- (id)interstitialDelegate -{ - return [self.delegate interstitialDelegate]; -} - -- (void)interstitialCustomEvent:(MPInterstitialCustomEvent *)customEvent - didLoadAd:(id)ad -{ - [self didStopLoading]; - [self.delegate adapterDidFinishLoadingAd:self]; - - // Check for MoPub-specific custom events before setting the timer - if ([customEvent isKindOfClass:[MPHTMLInterstitialCustomEvent class]] - || [customEvent isKindOfClass:[MPMRAIDInterstitialCustomEvent class]]) { - // Set up timer for expiration - __weak __typeof__(self) weakSelf = self; - self.expirationTimer = [[MPRealTimeTimer alloc] initWithInterval:[MPConstants adsExpirationInterval] block:^(MPRealTimeTimer *timer){ - __strong __typeof__(weakSelf) strongSelf = weakSelf; - if (strongSelf && !strongSelf.hasTrackedImpression) { - [strongSelf interstitialCustomEventDidExpire:strongSelf.interstitialCustomEvent]; - } - [strongSelf.expirationTimer invalidate]; - }]; - [self.expirationTimer scheduleNow]; - } -} - -- (void)interstitialCustomEvent:(MPInterstitialCustomEvent *)customEvent - didFailToLoadAdWithError:(NSError *)error -{ - [self didStopLoading]; - [self.delegate adapter:self didFailToLoadAdWithError:error]; -} - -- (void)interstitialCustomEventWillAppear:(MPInterstitialCustomEvent *)customEvent -{ - [self.delegate interstitialWillAppearForAdapter:self]; -} - -- (void)interstitialCustomEventDidAppear:(MPInterstitialCustomEvent *)customEvent -{ - if ([self.interstitialCustomEvent enableAutomaticImpressionAndClickTracking] && !self.hasTrackedImpression) { - [self trackImpression]; - } - [self.delegate interstitialDidAppearForAdapter:self]; -} - -- (void)interstitialCustomEventWillDisappear:(MPInterstitialCustomEvent *)customEvent -{ - [self.delegate interstitialWillDisappearForAdapter:self]; -} - -- (void)interstitialCustomEventDidDisappear:(MPInterstitialCustomEvent *)customEvent -{ - [self.delegate interstitialDidDisappearForAdapter:self]; -} - -- (void)interstitialCustomEventDidExpire:(MPInterstitialCustomEvent *)customEvent -{ - [self.delegate interstitialDidExpireForAdapter:self]; -} - -- (void)interstitialCustomEventDidReceiveTapEvent:(MPInterstitialCustomEvent *)customEvent -{ - if ([self.interstitialCustomEvent enableAutomaticImpressionAndClickTracking] && !self.hasTrackedClick) { - self.hasTrackedClick = YES; - [self trackClick]; - } - - [self.delegate interstitialDidReceiveTapEventForAdapter:self]; -} - -- (void)interstitialCustomEventWillLeaveApplication:(MPInterstitialCustomEvent *)customEvent -{ - [self.delegate interstitialWillLeaveApplicationForAdapter:self]; -} - -- (void)trackImpression { - [super trackImpression]; - self.hasTrackedImpression = YES; - [self.expirationTimer invalidate]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.h deleted file mode 100644 index cfbd5dee1..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// MPInterstitialViewController.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPGlobal.h" - -@class CLLocation; - -@protocol MPInterstitialViewControllerDelegate; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPInterstitialViewController : UIViewController - -@property (nonatomic, assign) MPInterstitialCloseButtonStyle closeButtonStyle; -@property (nonatomic, assign) MPInterstitialOrientationType orientationType; -@property (nonatomic, strong) UIButton *closeButton; -@property (nonatomic, weak) id delegate; - -- (void)presentInterstitialFromViewController:(UIViewController *)controller; -- (void)dismissInterstitialAnimated:(BOOL)animated; -- (BOOL)shouldDisplayCloseButton; -- (void)willPresentInterstitial; -- (void)didPresentInterstitial; -- (void)willDismissInterstitial; -- (void)didDismissInterstitial; -- (void)layoutCloseButton; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@protocol MPInterstitialViewControllerDelegate - -- (NSString *)adUnitId; -- (void)interstitialDidLoadAd:(MPInterstitialViewController *)interstitial; -- (void)interstitialDidFailToLoadAd:(MPInterstitialViewController *)interstitial; -- (void)interstitialWillAppear:(MPInterstitialViewController *)interstitial; -- (void)interstitialDidAppear:(MPInterstitialViewController *)interstitial; -- (void)interstitialWillDisappear:(MPInterstitialViewController *)interstitial; -- (void)interstitialDidDisappear:(MPInterstitialViewController *)interstitial; -- (void)interstitialDidReceiveTapEvent:(MPInterstitialViewController *)interstitial; -- (void)interstitialWillLeaveApplication:(MPInterstitialViewController *)interstitial; - -@optional -- (CLLocation *)location; -- (void)interstitialRewardedVideoEnded; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.m deleted file mode 100644 index 9e32143a3..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPInterstitialViewController.m +++ /dev/null @@ -1,267 +0,0 @@ -// -// MPInterstitialViewController.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPInterstitialViewController.h" - -#import "MPGlobal.h" -#import "MPLogging.h" -#import "UIButton+MPAdditions.h" - -static const CGFloat kCloseButtonPadding = 5.0; -static const CGFloat kCloseButtonEdgeInset = 5.0; -static NSString * const kCloseButtonXImageName = @"MPCloseButtonX.png"; - -@interface MPInterstitialViewController () - -@property (nonatomic, assign) BOOL applicationHasStatusBar; - -- (void)setCloseButtonImageWithImageNamed:(NSString *)imageName; -- (void)setCloseButtonStyle:(MPInterstitialCloseButtonStyle)style; -- (void)closeButtonPressed; -- (void)dismissInterstitialAnimated:(BOOL)animated; -- (void)setApplicationStatusBarHidden:(BOOL)hidden; - -@end - -/////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPInterstitialViewController - -@synthesize closeButton = _closeButton; -@synthesize closeButtonStyle = _closeButtonStyle; -@synthesize orientationType = _orientationType; -@synthesize applicationHasStatusBar = _applicationHasStatusBar; -@synthesize delegate = _delegate; - - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.view.backgroundColor = [UIColor blackColor]; -} - -- (BOOL)prefersHomeIndicatorAutoHidden { - return YES; -} - -#pragma mark - Public - -- (void)presentInterstitialFromViewController:(UIViewController *)controller -{ - if (self.presentingViewController) { - MPLogWarn(@"Cannot present an interstitial that is already on-screen."); - return; - } - - [self willPresentInterstitial]; - - self.applicationHasStatusBar = !([UIApplication sharedApplication].isStatusBarHidden); - [self setApplicationStatusBarHidden:YES]; - - [self layoutCloseButton]; - - [controller presentViewController:self animated:MP_ANIMATED completion:^{ - [self didPresentInterstitial]; - }]; -} - -- (void)willPresentInterstitial -{ - -} - -- (void)didPresentInterstitial -{ - -} - -- (void)willDismissInterstitial -{ - -} - -- (void)didDismissInterstitial -{ - -} - -- (BOOL)shouldDisplayCloseButton -{ - return YES; -} - -#pragma mark - Close Button - -- (UIButton *)closeButton -{ - if (!_closeButton) { - _closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; - _closeButton.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | - UIViewAutoresizingFlexibleBottomMargin; - - UIImage *closeButtonImage = [UIImage imageNamed:MPResourcePathForResource(kCloseButtonXImageName)]; - [_closeButton setImage:closeButtonImage forState:UIControlStateNormal]; - [_closeButton sizeToFit]; - - [_closeButton addTarget:self - action:@selector(closeButtonPressed) - forControlEvents:UIControlEventTouchUpInside]; - _closeButton.accessibilityLabel = @"Close Interstitial Ad"; - } - - return _closeButton; -} - -- (void)layoutCloseButton -{ - [self.view addSubview:self.closeButton]; - CGFloat originX = self.view.bounds.size.width - kCloseButtonPadding - - self.closeButton.bounds.size.width; - self.closeButton.frame = CGRectMake(originX, - kCloseButtonPadding, - self.closeButton.bounds.size.width, - self.closeButton.bounds.size.height); - self.closeButton.mp_TouchAreaInsets = UIEdgeInsetsMake(kCloseButtonEdgeInset, kCloseButtonEdgeInset, kCloseButtonEdgeInset, kCloseButtonEdgeInset); - [self setCloseButtonStyle:self.closeButtonStyle]; - if (@available(iOS 11.0, *)) { - self.closeButton.translatesAutoresizingMaskIntoConstraints = NO; - [NSLayoutConstraint activateConstraints:@[ - [self.closeButton.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor constant:kCloseButtonPadding], - [self.closeButton.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor constant:-kCloseButtonPadding], - ]]; - } - [self.view bringSubviewToFront:self.closeButton]; -} - -- (void)setCloseButtonImageWithImageNamed:(NSString *)imageName -{ - UIImage *image = [UIImage imageNamed:imageName]; - [self.closeButton setImage:image forState:UIControlStateNormal]; - [self.closeButton sizeToFit]; -} - -- (void)setCloseButtonStyle:(MPInterstitialCloseButtonStyle)style -{ - _closeButtonStyle = style; - switch (style) { - case MPInterstitialCloseButtonStyleAlwaysVisible: - self.closeButton.hidden = NO; - break; - case MPInterstitialCloseButtonStyleAlwaysHidden: - self.closeButton.hidden = YES; - break; - case MPInterstitialCloseButtonStyleAdControlled: - self.closeButton.hidden = ![self shouldDisplayCloseButton]; - break; - default: - self.closeButton.hidden = NO; - break; - } -} - -- (void)closeButtonPressed -{ - [self dismissInterstitialAnimated:YES]; -} - -- (void)dismissInterstitialAnimated:(BOOL)animated -{ - [self setApplicationStatusBarHidden:!self.applicationHasStatusBar]; - - [self willDismissInterstitial]; - - UIViewController *presentingViewController = self.presentingViewController; - // TODO: Is this check necessary? - if (presentingViewController.presentedViewController == self) { - [presentingViewController dismissViewControllerAnimated:MP_ANIMATED completion:^{ - [self didDismissInterstitial]; - }]; - } else { - [self didDismissInterstitial]; - } -} - -#pragma mark - Hidding status bar (pre-iOS 7) - -- (void)setApplicationStatusBarHidden:(BOOL)hidden -{ - [[UIApplication sharedApplication] mp_preIOS7setApplicationStatusBarHidden:hidden]; -} - -#pragma mark - Hidding status bar (iOS 7 and above) - -- (BOOL)prefersStatusBarHidden -{ - return YES; -} - -#pragma mark - Autorotation (iOS 6.0 and above) - -- (BOOL)shouldAutorotate -{ - return YES; -} - -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= MP_IOS_9_0 -- (UIInterfaceOrientationMask)supportedInterfaceOrientations -#else -- (NSUInteger)supportedInterfaceOrientations -#endif -{ - NSUInteger applicationSupportedOrientations = - [[UIApplication sharedApplication] supportedInterfaceOrientationsForWindow:MPKeyWindow()]; - NSUInteger interstitialSupportedOrientations = applicationSupportedOrientations; - NSString *orientationDescription = @"any"; - - // Using the _orientationType, narrow down the supported interface orientations. - - if (_orientationType == MPInterstitialOrientationTypePortrait) { - interstitialSupportedOrientations &= - (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown); - orientationDescription = @"portrait"; - } else if (_orientationType == MPInterstitialOrientationTypeLandscape) { - interstitialSupportedOrientations &= UIInterfaceOrientationMaskLandscape; - orientationDescription = @"landscape"; - } - - // If the application does not support any of the orientations given by _orientationType, - // just return the application's supported orientations. - - if (!interstitialSupportedOrientations) { - MPLogError(@"Your application does not support this interstitial's desired orientation " - @"(%@).", orientationDescription); - return applicationSupportedOrientations; - } else { - return interstitialSupportedOrientations; - } -} - -- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation -{ - NSUInteger supportedInterfaceOrientations = [self supportedInterfaceOrientations]; - UIInterfaceOrientation currentInterfaceOrientation = MPInterfaceOrientation(); - NSUInteger currentInterfaceOrientationMask = (1 << currentInterfaceOrientation); - - // First, try to display the interstitial using the current interface orientation. If the - // current interface orientation is unsupported, just use any of the supported orientations. - - if (supportedInterfaceOrientations & currentInterfaceOrientationMask) { - return currentInterfaceOrientation; - } else if (supportedInterfaceOrientations & UIInterfaceOrientationMaskPortrait) { - return UIInterfaceOrientationPortrait; - } else if (supportedInterfaceOrientations & UIInterfaceOrientationMaskPortraitUpsideDown) { - return UIInterfaceOrientationPortraitUpsideDown; - } else if (supportedInterfaceOrientations & UIInterfaceOrientationMaskLandscapeLeft) { - return UIInterfaceOrientationLandscapeLeft; - } else { - return UIInterfaceOrientationLandscapeRight; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPPrivateInterstitialCustomEventDelegate.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPPrivateInterstitialCustomEventDelegate.h deleted file mode 100644 index c180c800f..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Interstitials/MPPrivateInterstitialCustomEventDelegate.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// MPPrivateInterstitialCustomEventDelegate.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPInterstitialCustomEventDelegate.h" - -@class MPAdConfiguration; -@class CLLocation; - -@protocol MPPrivateInterstitialCustomEventDelegate - -- (NSString *)adUnitId; -- (MPAdConfiguration *)configuration; -- (id)interstitialDelegate; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdServerKeys.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdServerKeys.h deleted file mode 100644 index ffe4901b1..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdServerKeys.h +++ /dev/null @@ -1,96 +0,0 @@ -// -// MPAdServerKeys.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#pragma mark - Ad Server All URL Request Keys -extern NSString * const kAdServerIDKey; -extern NSString * const kServerAPIVersionKey; -extern NSString * const kApplicationVersionKey; -extern NSString * const kIdfaKey; -extern NSString * const kBundleKey; -extern NSString * const kDoNotTrackIdKey; -extern NSString * const kSDKVersionKey; - -#pragma mark - Ad Server Ad Request Endpoint Keys -extern NSString * const kOrientationKey; -extern NSString * const kScaleFactorKey; -extern NSString * const kTimeZoneKey; -extern NSString * const kIsMRAIDEnabledSDKKey; -extern NSString * const kConnectionTypeKey; -extern NSString * const kCarrierNameKey; -extern NSString * const kISOCountryCodeKey; -extern NSString * const kMobileNetworkCodeKey; -extern NSString * const kMobileCountryCodeKey; -extern NSString * const kDeviceNameKey; -extern NSString * const kDesiredAdAssetsKey; -extern NSString * const kAdSequenceKey; -extern NSString * const kScreenResolutionWidthKey; -extern NSString * const kScreenResolutionHeightKey; -extern NSString * const kAppTransportSecurityStatusKey; -extern NSString * const kViewabilityStatusKey; -extern NSString * const kKeywordsKey; -extern NSString * const kUserDataKeywordsKey; -extern NSString * const kAdvancedBiddingKey; -extern NSString * const kLocationLatitudeLongitudeKey; -extern NSString * const kLocationHorizontalAccuracy; -extern NSString * const kLocationIsFromSDK; -extern NSString * const kLocationLastUpdatedMilliseconds; - -#pragma mark - Open Endpoint Request Keys -extern NSString * const kOpenEndpointSessionTrackingKey; - -#pragma mark - Synchronization Keys Shared With Other Endpoints -extern NSString * const kGDPRAppliesKey; -extern NSString * const kCurrentConsentStatusKey; -extern NSString * const kConsentedVendorListVersionKey; -extern NSString * const kConsentedPrivacyPolicyVersionKey; -extern NSString * const kForceGDPRAppliesKey; - -#pragma mark - Synchronization Endpoint: Request Keys - -extern NSString * const kLastChangedMsKey; -extern NSString * const kLastSynchronizedConsentStatusKey; -extern NSString * const kCachedIabVendorListHashKey; -extern NSString * const kForcedGDPRAppliesChangedKey; - -#pragma mark - Synchronization Endpoint: Shared Keys - -extern NSString * const kConsentChangedReasonKey; -extern NSString * const kExtrasKey; - -#pragma mark - Synchronization Endpoint: Response Keys - -extern NSString * const kForceExplicitNoKey; -extern NSString * const kInvalidateConsentKey; -extern NSString * const kReacquireConsentKey; -extern NSString * const kIsWhitelistedKey; -extern NSString * const kIsGDPRRegionKey; -extern NSString * const kVendorListUrlKey; -extern NSString * const kVendorListVersionKey; -extern NSString * const kPrivacyPolicyUrlKey; -extern NSString * const kPrivacyPolicyVersionKey; -extern NSString * const kIabVendorListKey; -extern NSString * const kIabVendorListHashKey; -extern NSString * const kSyncFrequencyKey; - -#pragma mark - Consent Dialog Endpoint: Request Keys - -extern NSString * const kLanguageKey; - -#pragma mark - Consent Dialog Endpoint: Response Keys - -extern NSString * const kDialogHTMLKey; - -#pragma mark - Rewarded Keys - -extern NSString * const kCustomerIdKey; -extern NSString * const kRewardedCurrencyNameKey; -extern NSString * const kRewardedCurrencyAmountKey; -extern NSString * const kRewardedCustomEventNameKey; -extern NSString * const kRewardedCustomDataKey; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdServerKeys.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdServerKeys.m deleted file mode 100644 index 3188f1d0e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdServerKeys.m +++ /dev/null @@ -1,96 +0,0 @@ -// -// MPAdServerKeys.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdServerKeys.h" - -#pragma mark - Ad Server All URL Request Keys -NSString * const kAdServerIDKey = @"id"; -NSString * const kServerAPIVersionKey = @"v"; -NSString * const kApplicationVersionKey = @"av"; -NSString * const kIdfaKey = @"udid"; -NSString * const kBundleKey = @"bundle"; -NSString * const kDoNotTrackIdKey = @"dnt"; -NSString * const kSDKVersionKey = @"nv"; - -#pragma mark - Ad Server Ad Request Endpoint Keys -NSString * const kOrientationKey = @"o"; -NSString * const kScaleFactorKey = @"sc"; -NSString * const kTimeZoneKey = @"z"; -NSString * const kIsMRAIDEnabledSDKKey = @"mr"; -NSString * const kConnectionTypeKey = @"ct"; -NSString * const kCarrierNameKey = @"cn"; -NSString * const kISOCountryCodeKey = @"iso"; -NSString * const kMobileNetworkCodeKey = @"mnc"; -NSString * const kMobileCountryCodeKey = @"mcc"; -NSString * const kDeviceNameKey = @"dn"; -NSString * const kDesiredAdAssetsKey = @"assets"; -NSString * const kAdSequenceKey = @"seq"; -NSString * const kScreenResolutionWidthKey = @"w"; -NSString * const kScreenResolutionHeightKey = @"h"; -NSString * const kAppTransportSecurityStatusKey = @"ats"; -NSString * const kViewabilityStatusKey = @"vv"; -NSString * const kKeywordsKey = @"q"; -NSString * const kUserDataKeywordsKey = @"user_data_q"; -NSString * const kAdvancedBiddingKey = @"abt"; -NSString * const kLocationLatitudeLongitudeKey = @"ll"; -NSString * const kLocationHorizontalAccuracy = @"lla"; -NSString * const kLocationIsFromSDK = @"llsdk"; -NSString * const kLocationLastUpdatedMilliseconds = @"llf"; - -#pragma mark - Open Endpoint Request Keys -NSString * const kOpenEndpointSessionTrackingKey = @"st"; - -#pragma mark - Synchronization Keys Shared With Other Endpoints -NSString * const kGDPRAppliesKey = @"gdpr_applies"; -NSString * const kCurrentConsentStatusKey = @"current_consent_status"; -NSString * const kConsentedVendorListVersionKey = @"consented_vendor_list_version"; -NSString * const kConsentedPrivacyPolicyVersionKey = @"consented_privacy_policy_version"; -NSString * const kForceGDPRAppliesKey = @"force_gdpr_applies"; - -#pragma mark - Synchronization Endpoint: Request Keys - -NSString * const kLastChangedMsKey = @"last_changed_ms"; -NSString * const kLastSynchronizedConsentStatusKey = @"last_consent_status"; -NSString * const kCachedIabVendorListHashKey = @"cached_vendor_list_iab_hash"; -NSString * const kForcedGDPRAppliesChangedKey = @"force_gdpr_applies_changed"; - -#pragma mark - Synchronization Endpoint: Shared Keys - -NSString * const kConsentChangedReasonKey = @"consent_change_reason"; -NSString * const kExtrasKey = @"extras"; - -#pragma mark - Synchronization Endpoint: Response Keys - -NSString * const kForceExplicitNoKey = @"force_explicit_no"; -NSString * const kInvalidateConsentKey = @"invalidate_consent"; -NSString * const kReacquireConsentKey = @"reacquire_consent"; -NSString * const kIsWhitelistedKey = @"is_whitelisted"; -NSString * const kIsGDPRRegionKey = @"is_gdpr_region"; -NSString * const kVendorListUrlKey = @"current_vendor_list_link"; -NSString * const kVendorListVersionKey = @"current_vendor_list_version"; -NSString * const kPrivacyPolicyUrlKey = @"current_privacy_policy_link"; -NSString * const kPrivacyPolicyVersionKey = @"current_privacy_policy_version"; -NSString * const kIabVendorListKey = @"current_vendor_list_iab_format"; -NSString * const kIabVendorListHashKey = @"current_vendor_list_iab_hash"; -NSString * const kSyncFrequencyKey = @"call_again_after_secs"; - -#pragma mark - Consent Dialog Endpoint: Request Keys - -NSString * const kLanguageKey = @"language"; - -#pragma mark - Consent Dialog Endpoint: Response Keys - -NSString * const kDialogHTMLKey = @"dialog_html"; - -#pragma mark - Rewarded Keys - -NSString * const kCustomerIdKey = @"customer_id"; -NSString * const kRewardedCurrencyNameKey = @"rcn"; -NSString * const kRewardedCurrencyAmountKey = @"rca"; -NSString * const kRewardedCustomEventNameKey = @"cec"; -NSString * const kRewardedCustomDataKey = @"rcd"; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdvancedBiddingManager.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdvancedBiddingManager.h deleted file mode 100644 index dd5225965..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdvancedBiddingManager.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// MPAdvancedBiddingManager.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAdvancedBidder.h" - -/** - * Internally manages all aspects related to advanced bidding. - */ -@interface MPAdvancedBiddingManager : NSObject -/** - * A boolean value indicating whether advanced bidding is enabled. This boolean defaults to `YES`. - * To disable advanced bidding, set this value to `NO`. - */ -@property (nonatomic, assign) BOOL advancedBiddingEnabled; - -/** - * A UTF-8 JSON string representation of the Advanced Bidding tokens. - * @remark If `advancedBiddingEnabled` is set to `NO`, this will always return `nil`. - */ -@property (nonatomic, copy, readonly) NSString * _Nullable bidderTokensJson; - -/** - * Singleton instance of the manager. - */ -+ (MPAdvancedBiddingManager * _Nonnull)sharedManager; - -/** - Initializes each Advanced Bidder and retains a reference. If an Advanced Bidder is - already initialized, nothing will be done. - @param bidders Array of bidders - @param complete Completion block - */ -- (void)initializeBidders:(NSArray> * _Nonnull)bidders complete:(void(^_Nullable)(void))complete; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdvancedBiddingManager.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdvancedBiddingManager.m deleted file mode 100644 index 06c5c3f07..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPAdvancedBiddingManager.m +++ /dev/null @@ -1,115 +0,0 @@ -// -// MPAdvancedBiddingManager.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAdvancedBiddingManager.h" -#import "MPLogging.h" - -// JSON constants -static NSString const * kTokenKey = @"token"; - -@interface MPAdvancedBiddingManager() - -// Dictionary of Advanced Bidding network name to instance of that Advanced Bidder. -@property (nonatomic, strong) NSMutableDictionary> * bidders; - -// Advanced Bidder initialization queue. -@property (nonatomic, strong) dispatch_queue_t queue; - -@end - -@implementation MPAdvancedBiddingManager - -#pragma mark - Initialization - -+ (MPAdvancedBiddingManager *)sharedManager { - static MPAdvancedBiddingManager * sharedMyManager = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedMyManager = [[self alloc] init]; - }); - return sharedMyManager; -} - -- (instancetype)init { - if (self = [super init]) { - _advancedBiddingEnabled = YES; - _bidders = [NSMutableDictionary dictionary]; - _queue = dispatch_queue_create("Advanced Bidder Initialization Queue", NULL); - } - - return self; -} - -#pragma mark - Bidders - -- (NSString *)bidderTokensJson { - // No bidders. - if (self.bidders.count == 0) { - return nil; - } - - // Advanced Bidding is not enabled. - if (!self.advancedBiddingEnabled) { - return nil; - } - - // Generate the JSON dictionary for all participating bidders. - NSMutableDictionary * tokens = [NSMutableDictionary dictionary]; - [self.bidders enumerateKeysAndObjectsUsingBlock:^(NSString * network, id bidder, BOOL * stop) { - if (bidder.token != nil) { - tokens[network] = @{ kTokenKey: bidder.token }; - } - }]; - - // Serialize the JSON dictionary into a JSON string. - NSError * error = nil; - NSData * jsonData = [NSJSONSerialization dataWithJSONObject:tokens options:0 error:&error]; - if (jsonData == nil) { - MPLogError(@"Failed to generate a JSON string from\n%@\nReason: %@", tokens, error.localizedDescription); - return nil; - } - - return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; -} - -- (void)initializeBidders:(NSArray> * _Nonnull)bidders complete:(void(^_Nullable)(void))complete { - // No bidders to initialize, complete immediately - if (bidders.count == 0) { - if (complete) { - complete(); - } - return; - } - - // Asynchronous dispatch the initialization as it may take some time. - __weak __typeof__(self) weakSelf = self; - dispatch_async(self.queue, ^{ - __typeof__(self) strongSelf = weakSelf; - if (strongSelf != nil) { - for (Class advancedBidderClass in bidders) { - // Create an instance of the Advanced Bidder - id advancedBidder = (id)[[[advancedBidderClass class] alloc] init]; - NSString * network = advancedBidder.creativeNetworkName; - - // Verify that the Advanced Bidder has a creative network name and that it's - // not already created. - if (network != nil && strongSelf.bidders[network] == nil) { - strongSelf.bidders[network] = advancedBidder; - } - } - } - - // Notify completion block handler. - if (complete) { - complete(); - } - }); // End dispatch_async -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.h deleted file mode 100644 index 732cbd6b7..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.h +++ /dev/null @@ -1,70 +0,0 @@ -// -// MPConsentDialogViewController.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class MPConsentDialogViewController; - -@protocol MPConsentDialogViewControllerDelegate - -@optional - -/** - Informs the delegate of the received consent response. - */ -- (void)consentDialogViewControllerDidReceiveConsentResponse:(BOOL)response - consentDialogViewController:(MPConsentDialogViewController *)consentDialogViewController; - -/** - Informs the delegate that the given consentDialogViewController will disappear. - */ -- (void)consentDialogViewControllerWillDisappear:(MPConsentDialogViewController *)consentDialogViewController; - -/** - Informs the delegate that the given consentDialogViewController did complete dismissing. - */ -- (void)consentDialogViewControllerDidDismiss:(MPConsentDialogViewController *)consentDialogViewController; - -@end - -@interface MPConsentDialogViewController : UIViewController - -/** - Initializes a consent dialog view controller with an HTML string to load. It is expected that this initializer is used - when initializing. - - @param dialogHTML The markup string for the consent dialog. - */ -- (instancetype)initWithDialogHTML:(NSString *)dialogHTML NS_DESIGNATED_INITIALIZER; - -/** - Delegate object to inform an outside object of events. - */ -@property (nonatomic, weak) id delegate; - -/** - This method starts the loading of the consent page. When complete, `completion` will be called with a `BOOL` - indicating success, and an `NSError` object with information about the error in the case of failure. - - This method can be called and is expected to be called before the view controller is presented. This way, - the consent dialog is already loaded and in-view by the time the user sees it. - */ -- (void)loadConsentPageWithCompletion:(void (^_Nullable)(BOOL success, NSError *error))completion; - -/** - These initializers are not available - */ -- (instancetype)init NS_UNAVAILABLE; -- (instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE; -- (instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.m deleted file mode 100644 index e1d38d953..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentDialogViewController.m +++ /dev/null @@ -1,260 +0,0 @@ -// -// MPConsentDialogViewController.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAPIEndpoints.h" -#import "MPConsentDialogViewController.h" -#import "MPGlobal.h" -#import "MPWebView.h" - -typedef void(^MPConsentDialogViewControllerCompletion)(BOOL success, NSError *error); - -static NSString * const kMoPubScheme = @"mopub"; -static NSString * const kMoPubConsentURLHost = @"consent"; -static NSString * const kMoPubCloseURLHost = @"close"; - -static NSString * const kMoPubAffirmativeConsentQueryString = @"yes"; -static NSString * const kMoPubNegativeConsentQueryString = @"no"; - -static CGFloat const kCloseButtonDimension = 40.0; -static CGFloat const kCloseButtonSpacing = 7.0; -static NSTimeInterval const kCloseButtonFadeInAnimationDuration = 0.2; -static NSTimeInterval const kCloseButtonFadeInAfterSeconds = 10.0; - -@interface MPConsentDialogViewController () - -@property (nonatomic, strong) UIButton *closeButton; -@property (nonatomic, strong) MPWebView *webView; -@property (nonatomic, assign) BOOL finishedInitialLoad; -@property (nonatomic, assign) BOOL closeButtonHasBeenShown; -@property (nonatomic, copy) MPConsentDialogViewControllerCompletion didLoadCompletionBlock; - -@property (nonatomic, copy) NSString *dialogHTML; - -@end - -@implementation MPConsentDialogViewController - -#pragma mark - Initialization - -- (instancetype)initWithDialogHTML:(NSString *)dialogHTML { - if (self = [super initWithNibName:nil bundle:nil]) { - // Set internal variables - _dialogHTML = dialogHTML; - - // Initialize web view - [self setUpWebView]; - } - - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; - - // Make background color black - self.view.backgroundColor = [UIColor blackColor]; - - // It is important to layout the web view first, then set up the close button so that the button appears on top. - [self layoutWebView]; - [self setUpCloseButton]; -} - -- (void)viewDidAppear:(BOOL)animated { - [super viewDidAppear:animated]; - - // Fade in close button - __weak __typeof__(self) weakSelf = self; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(kCloseButtonFadeInAfterSeconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [weakSelf fadeInCloseButton]; - }); -} - -- (void)viewWillDisappear:(BOOL)animated { - [super viewWillDisappear:animated]; - - if ([self.delegate respondsToSelector:@selector(consentDialogViewControllerWillDisappear:)]) { - [self.delegate consentDialogViewControllerWillDisappear:self]; - } -} - -- (void)closeConsentDialog { - [self dismissViewControllerAnimated:YES completion:^{ - // Intentionally holding a strong reference to @c self here so that the view controller doesn't deallocate - // before the delegate method is called. - if ([self.delegate respondsToSelector:@selector(consentDialogViewControllerDidDismiss:)]) { - [self.delegate consentDialogViewControllerDidDismiss:self]; - } - }]; -} - -- (void)setUpWebView { - self.webView = [[MPWebView alloc] initWithFrame:CGRectZero forceUIWebView:NO]; - self.webView.delegate = self; - self.webView.scrollView.bounces = NO; - self.webView.backgroundColor = [UIColor whiteColor]; - self.webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; -} - -- (void)layoutWebView { - self.webView.frame = self.view.bounds; - [self.view addSubview:self.webView]; - - // Set up autolayout constraints on iOS 11+. This web view should always stay within the safe area. - if (@available(iOS 11.0, *)) { - self.webView.translatesAutoresizingMaskIntoConstraints = NO; - [NSLayoutConstraint activateConstraints:@[ - [self.webView.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor], - [self.webView.leadingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.leadingAnchor], - [self.webView.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor], - [self.webView.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor], - ]]; - } -} - -- (BOOL)prefersStatusBarHidden { - return YES; -} - -- (void)setUpCloseButton { - self.closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; - self.closeButton.frame = CGRectMake(CGRectGetMaxX(self.view.bounds) - kCloseButtonDimension - kCloseButtonSpacing, - CGRectGetMinY(self.view.bounds) + kCloseButtonSpacing, - kCloseButtonDimension, - kCloseButtonDimension); - self.closeButton.backgroundColor = [UIColor clearColor]; - [self.closeButton setImage:[UIImage imageWithContentsOfFile:MPResourcePathForResource(@"MPCloseButtonX.png")] forState:UIControlStateNormal]; - [self.closeButton addTarget:self - action:@selector(closeButtonAction:) - forControlEvents:UIControlEventTouchUpInside]; - [self.view addSubview:self.closeButton]; - - if (@available(iOS 11.0, *)) { - self.closeButton.translatesAutoresizingMaskIntoConstraints = NO; - [NSLayoutConstraint activateConstraints:@[ - [self.closeButton.widthAnchor constraintEqualToConstant:kCloseButtonDimension], - [self.closeButton.heightAnchor constraintEqualToConstant:kCloseButtonDimension], - [self.closeButton.topAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.topAnchor constant:kCloseButtonSpacing], - [self.closeButton.trailingAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.trailingAnchor constant:-kCloseButtonSpacing], - ]]; - } - - // Set close button alpha to zero to fade in later - self.closeButton.alpha = 0.0; -} - -- (IBAction)closeButtonAction:(id)sender { - [self closeConsentDialog]; -} - -- (void)fadeInCloseButton { - if (!self.closeButtonHasBeenShown) { - self.closeButtonHasBeenShown = YES; - [UIView animateWithDuration:kCloseButtonFadeInAnimationDuration animations:^{ - self.closeButton.alpha = 1.0; - }]; - } -} - -#pragma mark - Load Consent Page - -- (void)loadConsentPageWithCompletion:(MPConsentDialogViewControllerCompletion)completion { - // Set `finishedInitialLoad` to `NO` because this method is (re)doing the initial load - self.finishedInitialLoad = NO; - - // Copy the completion block to `didLoadCompletionBlock` to run when the page loads or fails to load - self.didLoadCompletionBlock = completion; - - // Load consent dialog HTML markup - [self.webView loadHTMLString:self.dialogHTML - baseURL:[NSURL URLWithString:[MPAPIEndpoints baseURL]]]; -} - -#pragma mark - MPWebViewDelegate - -- (void)webView:(MPWebView *)webView didFailLoadWithError:(NSError *)error { - if (!self.finishedInitialLoad) { - self.finishedInitialLoad = YES; - - if (self.didLoadCompletionBlock) { - self.didLoadCompletionBlock(NO, error); - self.didLoadCompletionBlock = nil; - } - } -} - -- (void)webViewDidFinishLoad:(MPWebView *)webView { - if (!self.finishedInitialLoad) { - self.finishedInitialLoad = YES; - - if (self.didLoadCompletionBlock) { - self.didLoadCompletionBlock(YES, nil); - self.didLoadCompletionBlock = nil; - } - } -} - -- (BOOL)webView:(MPWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { - BOOL requestIsMoPubScheme = [request.URL.scheme isEqualToString:kMoPubScheme]; - BOOL requestIsMoPubHost = [request.URL.host isEqualToString:MPAPIEndpoints.baseHostname]; - - // Kick to Safari if the URL is not of MoPub scheme or hostname - if (!requestIsMoPubScheme && !requestIsMoPubHost) { - [[UIApplication sharedApplication] openURL:request.URL]; - return NO; - } - - // Allow load if request came from ads.mopub.com - if (requestIsMoPubHost) { - return YES; - } - - // Sanity check: do nothing if we get to this point and it is not a MoPub scheme - if (!requestIsMoPubScheme) { - return NO; - } - - // MoPub Scheme - - // Received close command; send dismiss and do not allow load. - if ([request.URL.host isEqualToString:kMoPubCloseURLHost]) { - [self closeConsentDialog]; - return NO; - } - - // Break out if any command other than consent (we do not know any commands besides "close" and "consent" - if (![request.URL.host isEqualToString:kMoPubConsentURLHost]) { - return NO; - } - - // Received consent command; validate query string - BOOL receivedAffirmativeAnswer = [request.URL.query isEqualToString:kMoPubAffirmativeConsentQueryString]; - BOOL receivedNegativeAnswer = [request.URL.query isEqualToString:kMoPubNegativeConsentQueryString]; - // We should have received one answer or the other (i.e., one of these should be marked as `YES`). If neither - // was marked as `YES` (i.e., the query string was malformed), break out immediately. - if (!receivedAffirmativeAnswer && !receivedNegativeAnswer) { - return NO; - } - // Given that we did receive an answer, the receivedAffirmativeAnswer variable is what we expect consentAnswer to be. - // If consent was given, receivedAffirmativeAnswer will be `YES`. - // If consent was not given, receivedAffirmativeAnswer will be `NO` (and the above `if` will filter out unknowns). - BOOL consentAnswer = receivedAffirmativeAnswer; - - // Inform delegate - if ([self.delegate respondsToSelector:@selector(consentDialogViewControllerDidReceiveConsentResponse:consentDialogViewController:)]) { - [self.delegate consentDialogViewControllerDidReceiveConsentResponse:consentAnswer - consentDialogViewController:self]; - } - - // Show close button (if it hasn't already been shown) - [self fadeInCloseButton]; - - // Do not load - return NO; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.h deleted file mode 100644 index fc2ab61ec..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.h +++ /dev/null @@ -1,263 +0,0 @@ -// -// MPConsentManager.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPBool.h" -#import "MPConsentStatus.h" -#import "MPConsentDialogViewController.h" - -@interface MPConsentManager : NSObject - -/** - Ad unit ID sent to Ad Server as a proxy for the MoPub app ID. - @remark This should only be set by SDK initialization and must be non-nil. - */ -@property (nonatomic, strong, nonnull) NSString * adUnitIdUsedForConsent; - -/** - Flag indicating that personally identifiable information can be collected. - */ -@property (nonatomic, readonly) BOOL canCollectPersonalInfo; - -/** - Flag indicating that consent needs to be acquired (or reacquired) by the user, and - that the consent dialog may need to be shown. - */ -@property (nonatomic, readonly) BOOL isConsentNeeded; - -/** - Flag indicating that GDPR applicability was forced and the transition should be - communicated back to the server. This will only persist in memory. - */ -@property (nonatomic, readonly) BOOL isForcedGDPRAppliesTransition; - -/** - Retrieves the current language code. - */ -@property (nonatomic, copy, readonly, nonnull) NSString * currentLanguageCode; - -/** - * Singleton instance of the manager. - */ -+ (MPConsentManager * _Nonnull)sharedManager; - -/** - Allows a whitelisted publisher to grant consent on the user's behalf. - */ -- (void)grantConsent; - -/** - Allows a publisher to explicitly deny or revoke consent on the user's behalf. - */ -- (void)revokeConsent; - -/** - Checks if there is a transition from a "do not track" state to an "allowed to track" state, or from - an "allowed to track" state to a "do not track" state. If detected, the appropriate consent - status state change will occur locally and trigger the @c kMPConsentChangedNotification. - @remark This is a local update only and will require a seperate Ad Server synchronization. - @return @c YES if a transition occurred; @c NO otherwise. - */ -- (BOOL)checkForDoNotTrackAndTransition; - -/** - This method takes in parameters (expected to be derived from a server response) which tell the SDK to force consent - status to explicit no or unknown. Explicit no takes priority over unknown. It also takes in a consent change reason, - and a BOOL to tell it whether to cache and broadcast. - */ -- (void)forceStatusShouldForceExplicitNo:(BOOL)shouldForceExplicitNo - shouldInvalidateConsent:(BOOL)shouldInvalidateConsent - shouldReacquireConsent:(BOOL)shouldReacquireConsent - shouldForceGDPRApplicability:(BOOL)shouldForceGDPRApplies - consentChangeReason:(NSString * _Nullable)consentChangeReason - shouldBroadcast:(BOOL)shouldBroadcast; - -/** - Synchronizes the current state with Ad Server and makes any state adjustments - based upon the response. - @param completion Synchronization completion block. - */ -- (void)synchronizeConsentWithCompletion:(void (^ _Nonnull)(NSError * _Nullable error))completion; - -/** - `YES` if a consent dialog is currently loaded; `NO` otherwise. - */ -@property (nonatomic, readonly) BOOL isConsentDialogLoaded; - -/** - Starts loading a consent dialog asynchronously. Calls `completion` when done with an NSError if not successful. - Calls `completion` immediately if a `consentDialog` is already loaded. - */ -- (void)loadConsentDialogWithCompletion:(void (^ _Nullable)(NSError * _Nullable error))completion; - -/** - If a consent dialog is loaded, this method will present it modally from the given `viewController`. If no consent - dialog is loaded this method will do nothing. `completion` is called upon successful presentation; it is not called otherwise. - */ -- (void)showConsentDialogFromViewController:(UIViewController * _Nonnull)viewController - didShow:(void (^ _Nullable)(void))didShow - didDismiss:(void (^ _Nullable)(void))didDismiss; - -@end - -@interface MPConsentManager (State) - -/** - IAB vendor list that has been consented to. - */ -@property (nonatomic, copy, readonly, nullable) NSString * consentedIabVendorList; - -/** - MoPub privacy policy version that has been consented to. - */ -@property (nonatomic, copy, readonly, nullable) NSString * consentedPrivacyPolicyVersion; - -/** - Vendor list version that has been consented to. - */ -@property (nonatomic, copy, readonly, nullable) NSString * consentedVendorListVersion; - -/** - Current consent status. - */ -@property (nonatomic, readonly) MPConsentStatus currentStatus; - -/** - Server extras (reserved for future use). - */ -@property (nonatomic, copy, readonly, nullable) NSString * extras; - -/** - Current IAB format vendor list. - */ -@property (nonatomic, copy, readonly, nullable) NSString * iabVendorList; - -/** - Current IAB format vendor list hash. - */ -@property (nonatomic, copy, readonly, nullable) NSString * iabVendorListHash; - -/** - IFA used for consent purposes only. - */ -@property (nonatomic, copy, readonly, nullable) NSString * ifaForConsent; - -/** - Flag indicating if GDPR is applicable to the user. - */ -@property (nonatomic, readonly) MPBool isGDPRApplicable; - -/** - Allows a publisher to force @c isGDPRApplicable to @c YES. When this is set to @c YES, @c isGDPRApplicable will always - be @c MPBoolYes. This property is disk-backed, so its value will persist between app sessions once it has been set. - When set back to @c NO, the value of @c isGDPRApplicable determined at first app session will apply. - */ -@property (nonatomic, assign) BOOL forceIsGDPRApplicable; - -/** - Flag indicating that the app is whitelisted for non-user-initiated consent changes. - */ -@property (nonatomic, readonly) BOOL isWhitelisted; - -/** - Optional description of why the consent was changed to the current value. - */ -@property (nonatomic, copy, readonly, nullable) NSString * lastChangedReason; - -/** - Timestamp of the current consent status in milliseconds. If this value is zero, - consent status has never changed. - */ -@property (nonatomic, readonly) NSTimeInterval lastChangedTimestampInMilliseconds; - -/** - Consent status that was last synchronized with the server. - */ -@property (nonatomic, copy, readonly, nullable) NSString * lastSynchronizedStatus; - -/** - URL to the MoPub privacy policy in the device's preferred language. If the device's - preferred language could not be determined, English will be used. - @return The privacy policy URL for the desired language if successful; @c nil if - there is no current vendor list. - */ -- (NSURL * _Nullable)privacyPolicyUrl; - -/** - URL to the MoPub privacy policy in the language of choice. - @param isoLanguageCode ISO 630-1 language code - @return The privacy policy URL for the desired language if successful; @c nil if the - language code is invalid or if there is no current vendor list. - */ -- (NSURL * _Nullable)privacyPolicyUrlWithISOLanguageCode:(NSString * _Nonnull)isoLanguageCode; - -/** - Current version of MoPub’s privacy policy. - */ -@property (nonatomic, copy, readonly, nullable) NSString * privacyPolicyVersion; - -/** - The maximum frequency in seconds that the SDK is allowed to synchronize consent - information. - */ -@property (nonatomic, readonly) NSTimeInterval syncFrequency; - -/** - Current vendor list URL in the device's preferred language. If the device's - preferred language could not be determined, English will be used. - @return The vendor list URL for the desired language if successful; @c nil if - there is no current vendor list. - */ -- (NSURL * _Nullable)vendorListUrl; - -/** - Current vendor list URL in the language of choice. - @param isoLanguageCode ISO 630-1 language code - @return The vendor list URL for the desired language if successful; @c nil if the - language code is invalid or if there is no current vendor list. - */ -- (NSURL * _Nullable)vendorListUrlWithISOLanguageCode:(NSString * _Nonnull)isoLanguageCode; - -/** - Current version of the vendor list. - */ -@property (nonatomic, copy, readonly, nullable) NSString * vendorListVersion; - -@end - -@interface MPConsentManager (PersonalDataHandler) - -/** - * Clean up personal data and add additonal logic for personal data when consent state changes. - */ - -- (void)handlePersonalDataOnStateChangeTo:(MPConsentStatus)newStatus fromOldStatus:(MPConsentStatus)oldStatus; - -/** - * Store IFA(IDFA) temporary in NSUserDefault during MoPub initialization or app foregrounding. IFA is only used for removing personal data. - * - */ -- (void)storeIfa; - -/** - * Remove IFA from NSUserDefault. - */ -- (void)removeIfa; - -/** - * If IFA is changed and the status is transitioning from MPConsentStatusConsented, remove old IFA from NSUserDefault and change status to unknown. - * - */ -- (void)checkForIfaChange; - -/** - * App conversion request will only be fired when MoPub obtains consent. - */ -- (void)updateAppConversionTracking; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.m deleted file mode 100644 index 92bc67d77..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPConsentManager.m +++ /dev/null @@ -1,1038 +0,0 @@ -// -// MPConsentManager.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAPIEndpoints.h" -#import "MPAdServerURLBuilder.h" -#import "MPAdServerKeys.h" -#import "MPConsentChangedNotification.h" -#import "MPConsentChangedReason.h" -#import "MPConsentError.h" -#import "MPConsentManager.h" -#import "MPConstants.h" -#import "MPHTTPNetworkSession.h" -#import "MPIdentityProvider.h" -#import "MPLogging.h" -#import "MPTimer.h" -#import "MPURLRequest.h" -#import "NSString+MPConsentStatus.h" -#import "MPAdConversionTracker.h" - -// NSUserDefault keys -static NSString * const kConsentedIabVendorListStorageKey = @"com.mopub.mopub-ios-sdk.consented.iab.vendor.list"; -static NSString * const kConsentedPrivacyPolicyVersionStorageKey = @"com.mopub.mopub-ios-sdk.consented.privacy.policy.version"; -static NSString * const kConsentedVendorListVersionStorageKey = @"com.mopub.mopub-ios-sdk.consented.vendor.list.version"; -static NSString * const kConsentStatusStorageKey = @"com.mopub.mopub-ios-sdk.consent.status"; -static NSString * const kExtrasStorageKey = @"com.mopub.mopub-ios-sdk.extras"; -static NSString * const kIabVendorListStorageKey = @"com.mopub.mopub-ios-sdk.iab.vendor.list"; -static NSString * const kIabVendorListHashStorageKey = @"com.mopub.mopub-ios-sdk.iab.vendor.list.hash"; -static NSString * const kIfaForConsentStorageKey = @"com.mopub.mopub-ios-sdk.ifa.for.consent"; -static NSString * const kIsDoNotTrackStorageKey = @"com.mopub.mopub-ios-sdk.is.do.not.track"; -static NSString * const kIsWhitelistedStorageKey = @"com.mopub.mopub-ios-sdk.is.whitelisted"; -static NSString * const kGDPRAppliesStorageKey = @"com.mopub.mopub-ios-sdk.gdpr.applies"; -static NSString * const kForceGDPRAppliesStorageKey = @"com.mopub.mopub-ios-sdk.gdpr.force.applies.true"; -static NSString * const kLastChangedMsStorageKey = @"com.mopub.mopub-ios-sdk.last.changed.ms"; -static NSString * const kLastChangedReasonStorageKey = @"com.mopub.mopub-ios-sdk.last.changed.reason"; -static NSString * const kLastSynchronizedConsentStatusStorageKey = @"com.mopub.mopub-ios-sdk.last.synchronized.consent.status"; -static NSString * const kPrivacyPolicyUrlStorageKey = @"com.mopub.mopub-ios-sdk.privacy.policy.url"; -static NSString * const kPrivacyPolicyVersionStorageKey = @"com.mopub.mopub-ios-sdk.privacy.policy.version"; -static NSString * const kShouldReacquireConsentStorageKey = @"com.mopub.mopub-ios-sdk.should.reacquire.consent"; -static NSString * const kVendorListUrlStorageKey = @"com.mopub.mopub-ios-sdk.vendor.list.url"; -static NSString * const kVendorListVersionStorageKey = @"com.mopub.mopub-ios-sdk.vendor.list.version"; - -// Frequency constants -static NSTimeInterval const kDefaultRefreshInterval = 300; //seconds - -// String replacement macros -static NSString * const kMacroReplaceLanguageCode = @"%%LANGUAGE%%"; - -@interface MPConsentManager() - -/** - The loaded consent dialog view controller, or nil if the dialog has not been loaded. - */ -@property (nonatomic, strong, nullable) MPConsentDialogViewController * consentDialogViewController; - -/** - Flag indicating the last known "do not track" status. This is primarily used for detecting - changes in the "do not track" state by the user. This state should only be set by the - @c setCurrentStatus:reason:shouldBroadcast: method. A value of @c YES indicates - that we were last known to be in a "do not track" state; otherwise @c NO. - */ -@property (nonatomic, readonly) BOOL isDoNotTrack; - -/** - Flag indicating that GDPR applicability was forced and the transition should be - communicated back to the server. This will only persist in memory. - */ -@property (nonatomic, assign, readwrite) BOOL isForcedGDPRAppliesTransition; - -/** - Timer used to fire the next consent synchronization update. This will be invalidated - everytime `synchronizeConsentWithCompletion:` is explcitly called. The timer - frequency is determined by `self.syncFrequency`. - */ -@property (nonatomic, strong, nullable) MPTimer * nextUpdateTimer; - -/** - Queries the raw consent status value that is stored in @c kConsentStatusStorageKey - */ -@property (nonatomic, readonly) MPConsentStatus rawConsentStatus; - -/** - Queries the raw isGDPRApplicable value that is stored in @c kGDPRAppliesStorageKey - */ -@property (nonatomic, readonly) MPBool rawIsGDPRApplicable; - -/** - Flag indicating that the server requires reacquisition of consent. - This flag should be reset once the dialog has been shown to the user - and the user has consented/not consented, or if the whitelisted publisher - has explicitly called @c grantConsent or @c revokeConsent. - @remark Setting this property will not trigger a @c NSUserDefaults.synchronize - */ -@property (nonatomic, assign) BOOL shouldReacquireConsent; - -/** - The maximum frequency in seconds that the SDK is allowed to synchronize consent - information. Defaults to 300 seconds. - */ -@property (nonatomic, assign, readwrite) NSTimeInterval syncFrequency; - -/** - Block to be executed after the consent dialog dismisses. Typically will be nil, but - if a consent dialog view controller is currently presented, and the publisher set a - block to be executed once the view controller dismisses, that block is stored here - while it's waiting to be executed. - */ -@property (nonatomic, copy) void (^consentDialogDidDismissCompletionBlock)(void); - -@end - -@implementation MPConsentManager - -#pragma mark - Initialization - -+ (MPConsentManager *)sharedManager { - static MPConsentManager * sharedMyManager = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedMyManager = [[self alloc] init]; - }); - return sharedMyManager; -} - -- (instancetype)init { - if (self = [super init]) { - // Register application foreground and background listeners - [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(onApplicationWillEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil]; - - // Initialize internal state - _consentDialogViewController = nil; - _syncFrequency = kDefaultRefreshInterval; - - // Initializing the timer must be done last since it depends on the - // value of _syncFrequency - _nextUpdateTimer = [self newNextUpdateTimer]; - } - - return self; -} - -- (void)dealloc { - [NSNotificationCenter.defaultCenter removeObserver:self]; - - // Tear down the next update timer. - [_nextUpdateTimer invalidate]; - _nextUpdateTimer = nil; -} - -#pragma mark - Properties - -- (BOOL)canCollectPersonalInfo { - // We can collection information under the following conditions: - // 1. GDPR does not apply to the user - // or - // 2. GDPR does apply and the user explicitly granted consent. - return self.isGDPRApplicable == MPBoolNo || (self.isGDPRApplicable == MPBoolYes && self.currentStatus == MPConsentStatusConsented); -} - -- (NSString *)currentLanguageCode { - // Need to strip out any region code if it's in there. - // In the event we cannot determine the language code, we will default to English. - NSString * code = [self removeRegionFromLanguageCode:NSLocale.preferredLanguages.firstObject]; - return code != nil ? code : @"en"; -} - -- (BOOL)isConsentNeeded { - return self.shouldReacquireConsent || (self.currentStatus == MPConsentStatusUnknown && self.isGDPRApplicable == MPBoolYes); -} - -/** - Flag indicating the last known "do not track" status. This is primarily used for detecting - changes in the "do not track" state by the user. This state should only be set by the - @c setCurrentStatus:reason:shouldBroadcast: method. - @return @c YES if we were in a "do not track" state; otherwise @c NO. - */ -- (BOOL)isDoNotTrack { - return [NSUserDefaults.standardUserDefaults boolForKey:kIsDoNotTrackStorageKey]; -} - -- (MPConsentStatus)rawConsentStatus { - return (MPConsentStatus)[NSUserDefaults.standardUserDefaults integerForKey:kConsentStatusStorageKey]; -} - -- (MPBool)rawIsGDPRApplicable { - return (MPBool)[NSUserDefaults.standardUserDefaults integerForKey:kGDPRAppliesStorageKey]; -} - -- (BOOL)shouldReacquireConsent { - return [NSUserDefaults.standardUserDefaults boolForKey:kShouldReacquireConsentStorageKey]; -} - -- (void)setShouldReacquireConsent:(BOOL)shouldReacquireConsent { - [NSUserDefaults.standardUserDefaults setBool:shouldReacquireConsent forKey:kShouldReacquireConsentStorageKey]; -} - -#pragma mark - ISO Language Code - -/** - Strip out any region code if there is one in the ISO langauge code. - For example: en-US --> en and zh-Hans-HK --> zh - @param isoLanguageCode ISO-639 compliant language code - @return The ISO language code stripped of the region if successful; @c nil otherwise. - */ -- (NSString * _Nullable)removeRegionFromLanguageCode:(NSString * _Nullable)isoLanguageCode { - return [isoLanguageCode componentsSeparatedByString:@"-"].firstObject; -} - -#pragma mark - Publisher Consent Granting and Revoking - -- (void)grantConsent { - MPLogInfo(@"Grant consent was called with publisher whitelist status of: %@whitelisted", self.isWhitelisted ? @"" : @"not "); - if (!self.isWhitelisted) { - MPLogWarn(@"You do not have approval to use the grantConsent API. Please reach out to your account teams or support@mopub.com for more information."); - } - - // Reset the reacquire consent flag since the user has taken action. - self.shouldReacquireConsent = NO; - - MPConsentStatus grantStatus = self.isWhitelisted ? MPConsentStatusConsented : MPConsentStatusPotentialWhitelist; - NSString * grantReason = (grantStatus == MPConsentStatusConsented ? kConsentedChangedReasonWhitelistGranted : kConsentedChangedReasonPotentialWhitelist); - - // Grant consent and if the state has transitioned, immediately synchronize - // with the server as this is an externally induced state change. - if ([self setCurrentStatus:grantStatus reason:grantReason shouldBroadcast:YES]) { - [self synchronizeConsentWithCompletion:^(NSError * _Nullable error) { - if (error) { - MPLogError(@"Consent synchronization failed: %@", error.localizedDescription); - } - else { - MPLogInfo(@"Consent synchronization completed"); - } - }]; - } -} - -- (void)revokeConsent { - // Reset the reacquire consent flag since the user has taken action. - self.shouldReacquireConsent = NO; - - // Revoke consent and if the state has transitioned, immediately synchronize - // with the server as this is an externally induced state change. - if ([self setCurrentStatus:MPConsentStatusDenied reason:kConsentedChangedReasonPublisherDenied shouldBroadcast:YES]) { - [self synchronizeConsentWithCompletion:^(NSError * _Nullable error) { - if (error) { - MPLogError(@"Consent synchronization failed: %@", error.localizedDescription); - } - else { - MPLogInfo(@"Consent synchronization completed"); - } - }]; - } -} - -#pragma mark - Consent Dialog - -- (BOOL)isConsentDialogLoaded { - return self.consentDialogViewController != nil; -} - -- (void)loadConsentDialogWithCompletion:(void (^)(NSError *error))completion { - // Helper block to call completion if not nil - void (^callCompletion)(NSError *error) = ^(NSError *error) { - if (completion != nil) { - completion(error); - } - }; - - // If "Limit Ad Tracking" is on, do not load, nil any view controller that has already loaded, and send error - if (self.currentStatus == MPConsentStatusDoNotTrack) { - self.consentDialogViewController = nil; - NSError *limitAdTrackingError = [NSError errorWithDomain:kConsentErrorDomain - code:MPConsentErrorCodeLimitAdTrackingEnabled - userInfo:nil]; - callCompletion(limitAdTrackingError); - return; - } - - // If GDPR is not applicable, do not load, nil any view controller that has already loaded, and send error - if (self.isGDPRApplicable != MPBoolYes) { - self.consentDialogViewController = nil; - NSError *gdprIsNotApplicableError = [NSError errorWithDomain:kConsentErrorDomain - code:MPConsentErrorCodeGDPRIsNotApplicable - userInfo:nil]; - callCompletion(gdprIsNotApplicableError); - return; - } - - // If a view controller is already loaded, don't load another. - if (self.consentDialogViewController) { - callCompletion(nil); - return; - } - - // Weak self reference for blocks - __weak __typeof__(self) weakSelf = self; - - // Do network request to get HTML - MPURLRequest *consentDialogRequest = [MPURLRequest requestWithURL:[MPAdServerURLBuilder consentDialogURL]]; - [MPHTTPNetworkSession startTaskWithHttpRequest:consentDialogRequest responseHandler:^(NSData *data, NSURLResponse *response){ - // De-serialize JSON data - NSError *deserializationError; - NSDictionary *consentDialogResponse = [NSJSONSerialization JSONObjectWithData:data options:0 error:&deserializationError]; - // Stop if there was a de-serialization error - if (!consentDialogResponse) { - callCompletion(deserializationError); - return; - } - - // Initialize view controller with response HTML strings - MPConsentDialogViewController *viewController = [[MPConsentDialogViewController alloc] initWithDialogHTML:consentDialogResponse[kDialogHTMLKey]]; - viewController.delegate = weakSelf; - - // Load consent page data - [viewController loadConsentPageWithCompletion:^(BOOL success, NSError *error) { - if (success) { - // Notify when page data has been loaded and set the property - weakSelf.consentDialogViewController = viewController; - callCompletion(nil); - } else { - // Notify when there was an error loading page data and set the property to `nil`. - weakSelf.consentDialogViewController = nil; - callCompletion(error); - } - }]; - } errorHandler:^(NSError *error){ - // Call completion without success if the network request failed - callCompletion(error); - }]; -} - -- (void)showConsentDialogFromViewController:(UIViewController *)viewController - didShow:(void (^)(void))didShow - didDismiss:(void (^)(void))didDismiss { - if (self.isConsentDialogLoaded) { - [viewController presentViewController:self.consentDialogViewController - animated:YES - completion:didShow]; - - // Save @c didDismiss block for later - self.consentDialogDidDismissCompletionBlock = didDismiss; - } -} - -// MPConsentDialogViewControllerDelegate -- (void)consentDialogViewControllerDidReceiveConsentResponse:(BOOL)response - consentDialogViewController:(MPConsentDialogViewController *)consentDialogViewController { - // Reset the reacquire consent flag since the user has taken action. - self.shouldReacquireConsent = NO; - - // Set consent status - MPConsentStatus status = (response ? MPConsentStatusConsented : MPConsentStatusDenied); - NSString * changeReason = (response ? kConsentedChangedReasonGranted : kConsentedChangedReasonDenied); - BOOL didTransition = [self setCurrentStatus:status reason:changeReason shouldBroadcast:YES]; - - // Synchronize only if there was a successful state transition. - // It is possible that the user responded to the consent dialog while - // in a "do not track" state. - if (didTransition) { - [self synchronizeConsentWithCompletion:^(NSError * _Nullable error) { - if (error) { - MPLogInfo(@"Error when syncing consent dialog response: %@", error); - return; - } - - MPLogInfo(@"Did sync consent dialog response."); - }]; - } -} - -- (void)consentDialogViewControllerWillDisappear:(MPConsentDialogViewController *)consentDialogViewController { - // Nil out the consent dialog view controller here so the same dialog instance is not accidentally reused - // if attempted to be loaded again too early - self.consentDialogViewController = nil; -} - -- (void)consentDialogViewControllerDidDismiss:(MPConsentDialogViewController *)consentDialogViewController { - // Execute @c consentDialogWillDismissCompletionBlock if needed - if (self.consentDialogDidDismissCompletionBlock) { - self.consentDialogDidDismissCompletionBlock(); - - // Set completion block to @c nil once done running it - self.consentDialogDidDismissCompletionBlock = nil; - } -} - -#pragma mark - Foreground / Background Notification Listeners - -- (void)onApplicationWillEnterForeground:(NSNotification *)notification { - // Always check for "do not track" changes and synchronize with the server - // whenever possible. - [self checkForDoNotTrackAndTransition]; - // If IDFA changed, status will be set to MPConsentStatusUnknown. - [self checkForIfaChange]; - [self synchronizeConsentWithCompletion:^(NSError * _Nullable error) { - if (error) { - MPLogError(@"Consent synchronization failed: %@", error.localizedDescription); - } - else { - MPLogInfo(@"Consent synchronization completed"); - } - }]; -} - -#pragma mark - Broadcasted Notifications - -/** - Broadcasts a @c NSNotification that the consent status has changed. - @param newStatus The new consent state. - @param oldStatus The previous consent state. - @param canCollectPii Flag indicating that collection of PII is allowed. - */ -- (void)notifyConsentChangedTo:(MPConsentStatus)newStatus - fromOldStatus:(MPConsentStatus)oldStatus - canCollectPii:(BOOL)canCollectPii { - // Build the NSNotification userInfo dictionary. - NSDictionary * userInfo = @{ kMPConsentChangedInfoNewConsentStatusKey: @(newStatus), - kMPConsentChangedInfoPreviousConsentStatusKey: @(oldStatus), - kMPConsentChangedInfoCanCollectPersonalInfoKey: @(canCollectPii) - }; - - // Broadcast the consent changed notification on the main thread - // because there may be a listener that is dealing with UI. - dispatch_async(dispatch_get_main_queue(), ^{ - [NSNotificationCenter.defaultCenter postNotificationName:kMPConsentChangedNotification object:self userInfo:userInfo]; - }); - - [self handlePersonalDataOnStateChangeTo:newStatus fromOldStatus:oldStatus]; -} - -#pragma mark - Ad Server Communication - -/** - Synchronizes the current consent state with the server. The local consent state - may change depending upon the response from the server. - @remark Calling this method will reset the current periodic timer update again after @c self.syncFrequency seconds. - @param completion Required completion block to listen for the result of the synchronization. - */ -- (void)synchronizeConsentWithCompletion:(void (^ _Nonnull)(NSError * error))completion { - // Invalidate the next update timer since we are synchronizing right now. - [self.nextUpdateTimer invalidate]; - self.nextUpdateTimer = nil; - - // If GDPR does not apply to the user, synchronizing with the ad server - // is no longer required. This call will complete without error and no - // next update timer will be created. - if (self.isGDPRApplicable == MPBoolNo) { - MPLogInfo(@"GDPR not applicable, consent synchronization will complete immediately"); - completion(nil); - return; - } - - // In the event that the device is in a "do not track" state and there is - // no IFA to send one last time for the server to revoke consent, further - // server synchronization is not necessary until the device transitions - // out of the "do not track" state. - // In the case that raw (MoPub) GDPR applicability is unknown, we should perform a sync - // to determine the final state. - if (!MPIdentityProvider.advertisingTrackingEnabled && self.ifaForConsent == nil && self.rawIsGDPRApplicable != MPBoolUnknown) { - MPLogInfo(@"Currently in a do not track state, consent synchronization will complete immediately"); - completion(nil); - return; - } - - // Before beginning the sync, check for a nil or empty ad unit ID, and output to the log if there's an issue. - // Otherwise, output the ad unit ID to the log. - if (self.adUnitIdUsedForConsent == nil || [self.adUnitIdUsedForConsent isEqualToString:@""]) { - MPLogError(@"Warning: no ad unit available for GDPR sync. Please make sure that the SDK is initialized correctly via `initializeSdkWithConfiguration:completion:` as soon as possible after app startup."); - } else { - MPLogInfo(@"Ad unit used for GDPR sync: %@", self.adUnitIdUsedForConsent); - } - - // Capture the current status being synchronized with the server - NSString * synchronizedStatus = [NSString stringFromConsentStatus:self.currentStatus]; - - // Generate the request. - NSURL * syncUrl = [MPAdServerURLBuilder consentSynchronizationUrl]; - MPURLRequest * syncRequest = [MPURLRequest requestWithURL:syncUrl]; - - // Send the synchronization request out. - __weak __typeof__(self) weakSelf = self; - [MPHTTPNetworkSession startTaskWithHttpRequest:syncRequest responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - __typeof__(self) strongSelf = weakSelf; - - // Update the last successfully synchronized state. - // We still update this state even if we failed to parse the response - // because this is a reflection of what we last sent to the server. - // If we've made it this far, it means that the `synchronizedStatus` was - // successfully sent to the server. However, it may be the case that the - // server sends us back an invalid response. - [NSUserDefaults.standardUserDefaults setObject:synchronizedStatus forKey:kLastSynchronizedConsentStatusStorageKey]; - - // Reset the GDPR applies transition state since it was successfully sent to - // ad server. - strongSelf.isForcedGDPRAppliesTransition = NO; - - // Deserialize the JSON response and attempt to parse it - NSError * deserializationError = nil; - NSDictionary * json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&deserializationError]; - if (deserializationError != nil) { - // Schedule the next timer and complete with error. - strongSelf.nextUpdateTimer = [strongSelf newNextUpdateTimer]; - MPLogError(@"%@", deserializationError.localizedDescription); - completion(deserializationError); - return; - } - - // Attempt to parse and update the consent state - NSError * parseError = nil; - if ([strongSelf updateConsentStateWithParameters:json]) { - MPLogTrace(@"Successfully parsed consent synchronization response"); - } - else { - parseError = [NSError errorWithDomain:kConsentErrorDomain code:MPConsentErrorCodeFailedToParseSynchronizationResponse userInfo:@{ NSLocalizedDescriptionKey: @"Failed to parse consent synchronization response; one or more required fields are missing" }]; - MPLogError(@"%@", parseError.localizedDescription); - } - - // Schedule the next timer and complete. - strongSelf.nextUpdateTimer = [strongSelf newNextUpdateTimer]; - completion(parseError); - } errorHandler:^(NSError * _Nonnull error) { - __typeof__(self) strongSelf = weakSelf; - - // Schedule the next timer and complete with error. - strongSelf.nextUpdateTimer = [strongSelf newNextUpdateTimer]; - MPLogError(@"%@", error.localizedDescription); - completion(error); - }]; -} - -#pragma mark - Next Update Timer - -/** - Creates a new next update timer instance and starts the timer immediately. This timer - will repeat. - @return A new timer instance. - */ -- (MPTimer * _Nonnull)newNextUpdateTimer { - MPTimer * timer = [MPTimer timerWithTimeInterval:self.syncFrequency target:self selector:@selector(onNextUpdateFiredWithTimer) repeats:YES]; - [timer scheduleNow]; - return timer; -} - -- (void)onNextUpdateFiredWithTimer { - // Synchronize with the server because it's time. - [self synchronizeConsentWithCompletion:^(NSError * _Nullable error) { - if (error) { - MPLogError(@"Consent synchronization failed: %@", error.localizedDescription); - } - else { - MPLogInfo(@"Consent synchronization completed"); - } - }]; -} - -#pragma mark - Internal State Synchronization - -/** - Checks if there is a transition from a do not track state to a tracking state, or a tracking - state to a do not track state. If detected, the appropriate consent status state change will - occur locally and trigger the @c kMPConsentChangedNotification. - @remark This is a local update only and will require a seperate Ad Server synchronization. - @return @c YES if a transition occurred; @c NO otherwise. - */ -- (BOOL)checkForDoNotTrackAndTransition { - BOOL didTransition = NO; - - // Transitioned from an "allowed to track" to "do not track" state. - BOOL trackingAllowed = ASIdentifierManager.sharedManager.advertisingTrackingEnabled; - MPConsentStatus status = self.currentStatus; - if (status != MPConsentStatusDoNotTrack && !trackingAllowed) { - didTransition = [self setCurrentStatus:MPConsentStatusDoNotTrack reason:kConsentedChangedReasonDoNotTrackEnabled shouldBroadcast:YES]; - } - // Transitioned from a "do not track" state to an "allowed to track" state. - // If the previously cached state was "deny consent" - else if (status == MPConsentStatusDoNotTrack && trackingAllowed) { - MPConsentStatus transitionToState = (self.rawConsentStatus == MPConsentStatusDenied ? MPConsentStatusDenied : MPConsentStatusUnknown); - NSString * transitionReason = (transitionToState == MPConsentStatusDenied ? kConsentedChangedReasonDoNotTrackDisabled : kConsentedChangedReasonDoNotTrackDisabledNeedConsent); - didTransition = [self setCurrentStatus:transitionToState reason:transitionReason shouldBroadcast:YES]; - } - - return didTransition; -} - -/** - Checks if there is a transition from a "potential whitelist" state to an "allowed" - state. If detected, the appropriate consent status state change will occur locally. - @remark This check should only be performed after the current versions and current - consent status have been updated, but before broadcasting any consent state change - notification. - @return @c YES if a transition occurred; @c NO otherwise. - */ -- (BOOL)checkForWhitelistAllowedAndTransition { - // Logic only applicable if in the potential whitelist state. - if (self.currentStatus != MPConsentStatusPotentialWhitelist) { - return NO; - } - - BOOL didTransition = NO; - if (self.isWhitelisted) { - didTransition = [self setCurrentStatus:MPConsentStatusConsented reason:kConsentedChangedReasonWhitelistGranted shouldBroadcast:NO]; - } - - return didTransition; -} - -/** - Updates the local consent status. - @param currentStatus The updated status. - @param reasonForChange Reason for the change in status. This should map to an entry in @c MPConsentChangedReason.h - @param shouldBroadcast Flag indicating if the change in status broadcasted. - @return @c YES if the consent status was successfully changed; @c NO otherwise. - */ -- (BOOL)setCurrentStatus:(MPConsentStatus)currentStatus - reason:(NSString * _Nonnull)reasonForChange - shouldBroadcast:(BOOL)shouldBroadcast { - // Compare the current consent status with the proposed status. - // Nothing needs to be done if we're not changing state. - MPConsentStatus oldStatus = self.currentStatus; - if (oldStatus == currentStatus) { - MPLogWarn(@"Attempted to set consent status to same value"); - return NO; - } - - // Disallow setting consent status if we are currently in a "do not track" state - // and will not transition out of it. - BOOL trackingEnabledOnDevice = MPIdentityProvider.advertisingTrackingEnabled; - if (oldStatus == MPConsentStatusDoNotTrack && !trackingEnabledOnDevice) { - MPLogWarn(@"Attempted to set consent status while in a do not track state"); - return NO; - } - - // Save IFA for this particular case so it can be used to remove personal data later. - if (oldStatus != MPConsentStatusConsented && currentStatus == MPConsentStatusConsented) { - [self storeIfa]; - } - - // Set the time stamp for this consent status update. - NSUserDefaults * defaults = NSUserDefaults.standardUserDefaults; - NSTimeInterval timestampInMilliseconds = [NSDate date].timeIntervalSince1970 * 1000.0; - [defaults setDouble:timestampInMilliseconds forKey:kLastChangedMsStorageKey]; - - // Explicitly disallow the setting of `MPConsentStatusDoNotTrack` since we - // need to preserve the previously cached status in the event that - // advertiser tracking is allowed. - if (currentStatus != MPConsentStatusDoNotTrack) { - [defaults setObject:reasonForChange forKey:kLastChangedReasonStorageKey]; - [defaults setInteger:currentStatus forKey:kConsentStatusStorageKey]; - } - - // "do not track" state is maintained by a seperate storage field. - [defaults setBool:(currentStatus == MPConsentStatusDoNotTrack) forKey:kIsDoNotTrackStorageKey]; - - // Copy the current privacy policy version, vendor list version, and IAB vendor list - // to the equivalent consented fields under the following conditions: - // 1. Consent has been updated to "potential whitelist", or - // 2. Consent has been updated to "consented" from a previously not "potential whitelist" state - if (currentStatus == MPConsentStatusPotentialWhitelist || - (currentStatus == MPConsentStatusConsented && oldStatus != MPConsentStatusPotentialWhitelist)) { - [defaults setObject:self.iabVendorList forKey:kConsentedIabVendorListStorageKey]; - [defaults setObject:self.privacyPolicyVersion forKey:kConsentedPrivacyPolicyVersionStorageKey]; - [defaults setObject:self.vendorListVersion forKey:kConsentedVendorListVersionStorageKey]; - } - // If the state has transitioned out of the "consented" state, remove any previously - // consented versions as they no longer apply. - else if (oldStatus == MPConsentStatusConsented) { - [defaults setObject:nil forKey:kConsentedIabVendorListStorageKey]; - [defaults setObject:nil forKey:kConsentedPrivacyPolicyVersionStorageKey]; - [defaults setObject:nil forKey:kConsentedVendorListVersionStorageKey]; - } - - if (shouldBroadcast) { - [self notifyConsentChangedTo:self.currentStatus fromOldStatus:oldStatus canCollectPii:self.canCollectPersonalInfo]; - } - - MPLogInfo(@"Consent state changed to %@: %@", [NSString stringFromConsentStatus:currentStatus], reasonForChange); - - return YES; -} - -/** - Updates the local consent state atomically. - @param newState Parameters are stored as @c NSString key-value pairs. - @return @c YES if the parameters were successfully parsed; @c NO otherwise. - */ -- (BOOL)updateConsentStateWithParameters:(NSDictionary * _Nonnull)newState { - MPLogTrace(@"Attempting to update consent with new state:\n%@", newState); - - // Validate required parameters - NSString * isWhitelistedValue = newState[kIsWhitelistedKey]; - NSString * isGDPRRegionValue = newState[kIsGDPRRegionKey]; - NSString * currentIabVendorListHash = newState[kIabVendorListHashKey]; - NSString * vendorListUrl = newState[kVendorListUrlKey]; - NSString * vendorListVersion = newState[kVendorListVersionKey]; - NSString * privacyPolicyUrl = newState[kPrivacyPolicyUrlKey]; - NSString * privacyPolicyVersion = newState[kPrivacyPolicyVersionKey]; - if (isWhitelistedValue == nil || isGDPRRegionValue == nil || - currentIabVendorListHash == nil || - vendorListUrl == nil || vendorListVersion == nil || - privacyPolicyUrl == nil || privacyPolicyVersion == nil) { - MPLogError(@"Failed to parse new state. Missing required fields."); - return NO; - } - - // Extract the old field values for comparison. - MPConsentStatus oldStatus = self.currentStatus; - MPBool oldGDPRApplicableStatus = self.isGDPRApplicable; - - // Update the required fields. - NSUserDefaults * defaults = NSUserDefaults.standardUserDefaults; - [defaults setBool:[isWhitelistedValue boolValue] forKey:kIsWhitelistedStorageKey]; - - [defaults setObject:currentIabVendorListHash forKey:kIabVendorListHashStorageKey]; - [defaults setObject:vendorListUrl forKey:kVendorListUrlStorageKey]; - [defaults setObject:vendorListVersion forKey:kVendorListVersionStorageKey]; - [defaults setObject:privacyPolicyUrl forKey:kPrivacyPolicyUrlStorageKey]; - [defaults setObject:privacyPolicyVersion forKey:kPrivacyPolicyVersionStorageKey]; - - // A user is considered GDPR applicable if they first launched the app - // within a GDPR region. Check the @c rawIsGDPRApplicable property because - // a publisher may have already set @c forceIsGDPRApplicable before this point, - // and we still want our own definition of applicability to apply in the case that - // a pub stops forcing. - if (self.rawIsGDPRApplicable == MPBoolUnknown) { - MPBool gdprApplies = [isGDPRRegionValue boolValue] ? MPBoolYes : MPBoolNo; - [defaults setInteger:gdprApplies forKey:kGDPRAppliesStorageKey]; - } - - // Optionally force state to explicit no or unknown. - BOOL shouldForceExplicitNo = [newState[kForceExplicitNoKey] boolValue]; - BOOL shouldInvalidateConsent = [newState[kInvalidateConsentKey] boolValue]; - BOOL shouldReacquireConsent = [newState[kReacquireConsentKey] boolValue]; - BOOL shouldForceGDPRApplies = [newState[kForceGDPRAppliesKey] boolValue]; - NSString * consentChangeReason = newState[kConsentChangedReasonKey]; - [self forceStatusShouldForceExplicitNo:shouldForceExplicitNo - shouldInvalidateConsent:shouldInvalidateConsent - shouldReacquireConsent:shouldReacquireConsent - shouldForceGDPRApplicability:shouldForceGDPRApplies - consentChangeReason:consentChangeReason - shouldBroadcast:NO]; - - // Optionally update the current IAB vendor list - NSString * currentIabVendorList = newState[kIabVendorListKey]; - if (currentIabVendorList != nil) { - [defaults setObject:currentIabVendorList forKey:kIabVendorListStorageKey]; - - // In the event that the IAB has changed the structure of the vendor list format, - // but the vendors in the list remain the same, we should update the consented - // IAB vendor list to the current one if the privacy policy version and vendor list - // version match their consented counterparts. - if ([self.consentedPrivacyPolicyVersion isEqualToString:privacyPolicyVersion] && - [self.consentedVendorListVersion isEqualToString:vendorListVersion]) { - [defaults setObject:currentIabVendorList forKey:kConsentedIabVendorListStorageKey]; - } - } - - // Optionally update the synchronization frequency - NSString * syncFrequencyValue = newState[kSyncFrequencyKey]; - if (syncFrequencyValue != nil) { - NSTimeInterval frequency = [syncFrequencyValue doubleValue]; - self.syncFrequency = (frequency > 0 ? frequency : kDefaultRefreshInterval); - } - - // Optionally update the server extras field - NSString * extras = newState[kExtrasKey]; - if (extras != nil) { - [defaults setObject:extras forKey:kExtrasStorageKey]; - } - - // State transition check for server finally whitelisting a publisher. - [self checkForWhitelistAllowedAndTransition]; - - // Broadcast the `kMPConsentChangedNotification` if needed. - if ((oldStatus != self.currentStatus) || (oldGDPRApplicableStatus != self.isGDPRApplicable)) { - [self notifyConsentChangedTo:self.currentStatus fromOldStatus:oldStatus canCollectPii:self.canCollectPersonalInfo]; - } - - return YES; -} - -- (void)forceStatusShouldForceExplicitNo:(BOOL)shouldForceExplicitNo - shouldInvalidateConsent:(BOOL)shouldInvalidateConsent - shouldReacquireConsent:(BOOL)shouldReacquireConsent - shouldForceGDPRApplicability:(BOOL)shouldForceGDPRApplies - consentChangeReason:(NSString *)consentChangeReason - shouldBroadcast:(BOOL)shouldBroadcast { - if (shouldForceExplicitNo) { - self.shouldReacquireConsent = NO; - [self setCurrentStatus:MPConsentStatusDenied reason:consentChangeReason shouldBroadcast:shouldBroadcast]; - } - else if (shouldInvalidateConsent) { - self.shouldReacquireConsent = NO; - [self setCurrentStatus:MPConsentStatusUnknown reason:consentChangeReason shouldBroadcast:shouldBroadcast]; - } - else if (shouldReacquireConsent) { - self.shouldReacquireConsent = YES; - } - - // Forcing GDPR applicability is seperate from forcing consent. - if (shouldForceGDPRApplies) { - self.forceIsGDPRApplicable = YES; - } -} - -@end - -@implementation MPConsentManager (State) - -#pragma mark - Read/Write Properties - -- (void)setForceIsGDPRApplicable:(BOOL)forceIsGDPRApplicable { - NSUserDefaults * defaults = NSUserDefaults.standardUserDefaults; - BOOL valueExists = [defaults objectForKey:kForceGDPRAppliesStorageKey] != nil; - - // This can only be set once for the lifetime of the app. - // In the event that a set `NO` value is attempted or if there already - // is a set value, nothing will happen. - if (!forceIsGDPRApplicable || valueExists) { - return; - } - - // Capture old can collect PII value - BOOL oldCanCollectPII = self.canCollectPersonalInfo; - - // Set new value and mark the transition - [defaults setBool:forceIsGDPRApplicable forKey:kForceGDPRAppliesStorageKey]; - self.isForcedGDPRAppliesTransition = YES; - - // Broadcast the `kMPConsentChangedNotification` if needed. - if (oldCanCollectPII != self.canCollectPersonalInfo) { - [self notifyConsentChangedTo:self.currentStatus fromOldStatus:self.currentStatus canCollectPii:self.canCollectPersonalInfo]; - } - - // Start sync cycle if needed - if (self.adUnitIdUsedForConsent != nil && // If @c adUnitIdUsedForConsent is non-nil (i.e., if SDK init has been called; otherwise the sync will happen as part of init) AND - (forceIsGDPRApplicable && self.rawIsGDPRApplicable == MPBoolNo)) { // If GDPR was not already applicable and it has become so (otherwise there's already an active sync cycle and the effective @c isGDPRApplilcableValue didn't actually change) - [self synchronizeConsentWithCompletion:^(NSError *error){ - if (error) { - MPLogError(@"Force GDPR consent synchronization failed: %@", error.localizedDescription); - } - else { - MPLogInfo(@"Force GDPR consent synchronization completed"); - } - }]; - } -} - -- (BOOL)forceIsGDPRApplicable { - return [[NSUserDefaults standardUserDefaults] boolForKey:kForceGDPRAppliesStorageKey]; -} - -#pragma mark - Read Only Properties - -/** - Replace all the macros in the URL format. - @param urlFormat URL format string from ad server - @param isoLanguageCode ISO language code used for macro replacement - @return A valid URL if successful; @c nil otherwise - */ -- (NSURL * _Nullable)urlWithFormat:(NSString * _Nullable)urlFormat isoLanguageCode:(NSString * _Nullable)isoLanguageCode { - NSString * regionFreeLangaugeCode = [self removeRegionFromLanguageCode:isoLanguageCode]; - if (regionFreeLangaugeCode == nil) { - return nil; - } - - if (![NSLocale.ISOLanguageCodes containsObject:regionFreeLangaugeCode]) { - MPLogInfo(@"%@ is not a valid ISO 639-1 language code", regionFreeLangaugeCode); - return nil; - } - - // Replace the %%LANGUAGE%% macro in the url. - NSString * url = [urlFormat stringByReplacingOccurrencesOfString:kMacroReplaceLanguageCode withString:regionFreeLangaugeCode]; - return (url != nil ? [NSURL URLWithString:url] : nil); -} - -- (NSString * _Nullable)consentedIabVendorList { - return [NSUserDefaults.standardUserDefaults stringForKey:kConsentedIabVendorListStorageKey]; -} - -- (NSString * _Nullable)consentedPrivacyPolicyVersion { - return [NSUserDefaults.standardUserDefaults stringForKey:kConsentedPrivacyPolicyVersionStorageKey]; -} - -- (NSString * _Nullable)consentedVendorListVersion { - return [NSUserDefaults.standardUserDefaults stringForKey:kConsentedVendorListVersionStorageKey]; -} - -- (MPConsentStatus)currentStatus { - // Query the "do not track" state first, since "do not track" trumps all other states. - // The cached consent state may be different than "do not track", and is preserved - // to retain the previous consent status in the event that advertiser tracking is re-enabled. - if (self.isDoNotTrack) { - return MPConsentStatusDoNotTrack; - } - - // Read the cached consent status. In the event that the key kConsentStatusKey - // doesn't exist, integerForKey: will return a 0, which will translate into - // MPConsentStatusUnknown. - return (MPConsentStatus)[NSUserDefaults.standardUserDefaults integerForKey:kConsentStatusStorageKey]; -} - -- (NSString * _Nullable)extras { - return [NSUserDefaults.standardUserDefaults stringForKey:kExtrasStorageKey]; -} - -- (NSString * _Nullable)iabVendorList { - return [NSUserDefaults.standardUserDefaults stringForKey:kIabVendorListStorageKey]; -} - -- (NSString * _Nullable)iabVendorListHash { - return [NSUserDefaults.standardUserDefaults stringForKey:kIabVendorListHashStorageKey]; -} - -- (NSString * _Nullable)ifaForConsent { - return [NSUserDefaults.standardUserDefaults stringForKey:kIfaForConsentStorageKey]; -} - -- (MPBool)isGDPRApplicable { - // Always return @c MPBoolYes if @c forceIsGDPRApplicable has been set to @c YES - return self.forceIsGDPRApplicable ? MPBoolYes : (MPBool)[NSUserDefaults.standardUserDefaults integerForKey:kGDPRAppliesStorageKey]; -} - -- (BOOL)isWhitelisted { - return [NSUserDefaults.standardUserDefaults boolForKey:kIsWhitelistedStorageKey]; -} - -- (NSString * _Nullable)lastChangedReason { - // Query the "do not track" state first, since "do not track" trumps all other states. - // The cached consent state may be different than "do not track", and is preserved - // to retain the previous consent status in the event that advertiser tracking is re-enabled. - // In this case, the last changed reason in a "do not track" state will always be - // kConsentedChangedReasonDoNotTrackEnabled - if (self.isDoNotTrack) { - return kConsentedChangedReasonDoNotTrackEnabled; - } - - return [NSUserDefaults.standardUserDefaults stringForKey:kLastChangedReasonStorageKey]; -} - -- (NSTimeInterval)lastChangedTimestampInMilliseconds { - return (NSTimeInterval)[NSUserDefaults.standardUserDefaults doubleForKey:kLastChangedMsStorageKey]; -} - -- (NSString * _Nullable)lastSynchronizedStatus { - return [NSUserDefaults.standardUserDefaults stringForKey:kLastSynchronizedConsentStatusStorageKey]; -} - -- (NSURL * _Nullable)privacyPolicyUrl { - return [self privacyPolicyUrlWithISOLanguageCode:self.currentLanguageCode]; -} - -- (NSURL * _Nullable)privacyPolicyUrlWithISOLanguageCode:(NSString * _Nonnull)isoLanguageCode { - NSString * urlFormat = [NSUserDefaults.standardUserDefaults stringForKey:kPrivacyPolicyUrlStorageKey]; - return [self urlWithFormat:urlFormat isoLanguageCode:isoLanguageCode]; -} - -- (NSString * _Nullable)privacyPolicyVersion { - return [NSUserDefaults.standardUserDefaults stringForKey:kPrivacyPolicyVersionStorageKey]; -} - -- (NSURL *)vendorListUrl { - return [self vendorListUrlWithISOLanguageCode:self.currentLanguageCode]; -} - -- (NSURL *)vendorListUrlWithISOLanguageCode:(NSString *)isoLanguageCode { - NSString * urlFormat = [NSUserDefaults.standardUserDefaults stringForKey:kVendorListUrlStorageKey]; - return [self urlWithFormat:urlFormat isoLanguageCode:isoLanguageCode]; -} - -- (NSString * _Nullable)vendorListVersion { - return [NSUserDefaults.standardUserDefaults stringForKey:kVendorListVersionStorageKey]; -} - -@end - -@implementation MPConsentManager (PersonalDataHandler) - -- (void)handlePersonalDataOnStateChangeTo:(MPConsentStatus)newStatus fromOldStatus:(MPConsentStatus)oldStatus { - [self updateAppConversionTracking]; - - if (oldStatus == MPConsentStatusConsented && newStatus != MPConsentStatusConsented) { - [self synchronizeConsentWithCompletion:^(NSError * _Nullable error) { - if (!error) { - [self removeIfa]; - } - }]; - } -} - -- (void)storeIfa { - NSString *identifier = [MPIdentityProvider identifierFromASIdentifierManager:NO]; - if (!identifier) { - return; - } - NSString *storedIFA = [NSUserDefaults.standardUserDefaults stringForKey:kIfaForConsentStorageKey]; - if (![identifier isEqualToString:storedIFA]) { - [NSUserDefaults.standardUserDefaults setObject:identifier forKey:kIfaForConsentStorageKey]; - } -} - -/** - * If IFA is changed and the status is transitioning from MPConsentStatusConsented, remove old IFA from NSUserDefault and change status to unknown. - */ -- (void)checkForIfaChange -{ - NSString *oldIfa = [NSUserDefaults.standardUserDefaults stringForKey:kIfaForConsentStorageKey]; - NSString *newIfa = [MPIdentityProvider identifierFromASIdentifierManager:NO]; - // IFA reset - if (self.currentStatus == MPConsentStatusConsented && ![oldIfa isEqualToString:newIfa] && newIfa != nil) { - [NSUserDefaults.standardUserDefaults removeObjectForKey:kLastSynchronizedConsentStatusStorageKey]; - [NSUserDefaults.standardUserDefaults removeObjectForKey:kIfaForConsentStorageKey]; - [self setCurrentStatus:MPConsentStatusUnknown reason:kConsentedChangedReasonIfaChanged shouldBroadcast:YES]; - } -} - -- (void)removeIfa { - [NSUserDefaults.standardUserDefaults removeObjectForKey:kIfaForConsentStorageKey]; -} - -/** - * App conversion request will only be fired when MoPub obtains consent. - */ -- (void)updateAppConversionTracking { - if ([MPConsentManager sharedManager].canCollectPersonalInfo) { - NSString *appId = [NSUserDefaults.standardUserDefaults stringForKey:MOPUB_CONVERSION_APP_ID_KEY]; - BOOL hasAlreadyCheckedAppConversion = [NSUserDefaults.standardUserDefaults boolForKey:MOPUB_CONVERSION_DEFAULTS_KEY]; - if (!hasAlreadyCheckedAppConversion && appId.length > 0) { - [[MPAdConversionTracker sharedConversionTracker] reportApplicationOpenForApplicationID:appId]; - } - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.h deleted file mode 100644 index 5319b4a27..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// MPCoreInstanceProvider+MRAID.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPCoreInstanceProvider.h" - -@interface MPCoreInstanceProvider (MRAID) - -/** - Returns @c YES if MRAID.js loaded correctly, @c NO otherwise. - */ -@property (nonatomic, readonly) BOOL isMraidJavascriptAvailable; - -/** - Returns an @c NSString containing the MRAID.js javascript to be loaded into webviews created for MRAID ads. If MRAID.js - is missing, this property returns @c nil instead. - */ -@property (nonatomic, readonly, copy) NSString * mraidJavascript; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.m deleted file mode 100644 index 33a34589d..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider+MRAID.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// MPCoreInstanceProvider+MRAID.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPCoreInstanceProvider+MRAID.h" -#import "MRBundleManager.h" - -@implementation MPCoreInstanceProvider (MRAID) - -- (NSString *)mraidJavascript { - static NSString * mraidJavascript = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - NSString * mraidJavascriptFilePath = [[MRBundleManager sharedManager] mraidPath]; - mraidJavascript = [NSString stringWithContentsOfFile:mraidJavascriptFilePath encoding:NSUTF8StringEncoding error:nil]; - }); - - // @c stringWithContentsOfFile will return @c nil when the file cannot be opened or parsed. Therefore, if - // mraid.js is missing, this method will return @c nil. - return mraidJavascript; -} - -- (BOOL)isMraidJavascriptAvailable { - return [self mraidJavascript] != nil; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.h deleted file mode 100644 index 05c064724..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// MPCoreInstanceProvider.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPGlobal.h" -#import "MPReachability.h" -#import "MPURLResolver.h" - -@class MPAdConfiguration; - -// Fetching Ads -@class MPAdServerCommunicator; -@protocol MPAdServerCommunicatorDelegate; - -// URL Handling -@class MPAdDestinationDisplayAgent; -@protocol MPAdDestinationDisplayAgentDelegate; - -// Utilities -@class MPAdAlertManager, MPAdAlertGestureRecognizer; -@class MPAnalyticsTracker; -@class MPTimer; -@class MPGeolocationProvider; -@class CLLocationManager; - -typedef id(^MPSingletonProviderBlock)(void); - - -typedef NS_OPTIONS(NSUInteger, MPATSSetting) { - MPATSSettingEnabled = 0, - MPATSSettingAllowsArbitraryLoads = (1 << 0), - MPATSSettingAllowsArbitraryLoadsForMedia = (1 << 1), - MPATSSettingAllowsArbitraryLoadsInWebContent = (1 << 2), - MPATSSettingRequiresCertificateTransparency = (1 << 3), - MPATSSettingAllowsLocalNetworking = (1 << 4), -}; - -@interface MPCoreInstanceProvider : NSObject - -+ (instancetype)sharedProvider; -- (id)singletonForClass:(Class)klass provider:(MPSingletonProviderBlock)provider; - -- (void)keepObjectAliveForCurrentRunLoopIteration:(id)anObject; - -#pragma mark - Utilities -- (MPGeolocationProvider *)sharedMPGeolocationProvider; -- (CLLocationManager *)buildCLLocationManager; -- (id)buildMPAdAlertManagerWithDelegate:(id)delegate; -- (MPAdAlertGestureRecognizer *)buildMPAdAlertGestureRecognizerWithTarget:(id)target action:(SEL)action; -- (MPATSSetting)appTransportSecuritySettings; - -// This call may return nil and may not update if the user hot-swaps the device's sim card. -- (NSDictionary *)sharedCarrierInfo; - -- (MPNetworkStatus)currentRadioAccessTechnology; - -- (MPTimer *)buildMPTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)selector repeats:(BOOL)repeats; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.m deleted file mode 100644 index fb323fa84..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPCoreInstanceProvider.m +++ /dev/null @@ -1,276 +0,0 @@ -// -// MPCoreInstanceProvider.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPCoreInstanceProvider.h" - -#import -#import - -#import "MPAdDestinationDisplayAgent.h" -#import "MPAdServerCommunicator.h" -#import "MPAnalyticsTracker.h" -#import "MPGeolocationProvider.h" -#import "MPTimer.h" -#import "MPURLResolver.h" - -#define MOPUB_CARRIER_INFO_DEFAULTS_KEY @"com.mopub.carrierinfo" - -#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) -#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) - -static NSString *const kMoPubAppTransportSecurityDictionaryKey = @"NSAppTransportSecurity"; -static NSString *const kMoPubAppTransportSecurityAllowsArbitraryLoadsKey = @"NSAllowsArbitraryLoads"; -static NSString *const kMoPubAppTransportSecurityAllowsArbitraryLoadsForMediaKey = @"NSAllowsArbitraryLoadsForMedia"; -static NSString *const kMoPubAppTransportSecurityAllowsArbitraryLoadsInWebContentKey = @"NSAllowsArbitraryLoadsInWebContent"; -static NSString *const kMoPubAppTransportSecurityRequiresCertificateTransparencyKey = @"NSRequiresCertificateTransparency"; -static NSString *const kMoPubAppTransportSecurityAllowsLocalNetworkingKey = @"NSAllowsLocalNetworking"; - -typedef enum -{ - MPTwitterDeepLinkNotChecked, - MPTwitterDeepLinkEnabled, - MPTwitterDeepLinkDisabled -} MPTwitterDeepLink; - -@interface MPCoreInstanceProvider () - -@property (nonatomic, strong) NSMutableDictionary *singletons; -@property (nonatomic, strong) NSMutableDictionary *carrierInfo; -@property (nonatomic, assign) MPTwitterDeepLink twitterDeepLinkStatus; - -@end - -@implementation MPCoreInstanceProvider - -@synthesize singletons = _singletons; -@synthesize carrierInfo = _carrierInfo; -@synthesize twitterDeepLinkStatus = _twitterDeepLinkStatus; - -static MPCoreInstanceProvider *sharedProvider = nil; - -+ (instancetype)sharedProvider -{ - static dispatch_once_t once; - dispatch_once(&once, ^{ - sharedProvider = [[self alloc] init]; - }); - - return sharedProvider; -} - -- (id)init -{ - self = [super init]; - if (self) { - self.singletons = [NSMutableDictionary dictionary]; - - [self initializeCarrierInfo]; - } - return self; -} - - -- (id)singletonForClass:(Class)klass provider:(MPSingletonProviderBlock)provider -{ - id singleton = [self.singletons objectForKey:klass]; - if (!singleton) { - singleton = provider(); - [self.singletons setObject:singleton forKey:(id)klass]; - } - return singleton; -} - -// This method ensures that "anObject" is retained until the next runloop iteration when -// performNoOp: is executed. -// -// This is useful in situations where, potentially due to a callback chain reaction, an object -// is synchronously deallocated as it's trying to do more work, especially invoking self, after -// the callback. -- (void)keepObjectAliveForCurrentRunLoopIteration:(id)anObject -{ - [self performSelector:@selector(performNoOp:) withObject:anObject afterDelay:0]; -} - -- (void)performNoOp:(id)anObject -{ - ; // noop -} - -#pragma mark - Initializing Carrier Info - -- (void)initializeCarrierInfo -{ - self.carrierInfo = [NSMutableDictionary dictionary]; - - // check if we have a saved copy - NSDictionary *saved = [[NSUserDefaults standardUserDefaults] dictionaryForKey:MOPUB_CARRIER_INFO_DEFAULTS_KEY]; - if (saved != nil) { - [self.carrierInfo addEntriesFromDictionary:saved]; - } - - // now asynchronously load a fresh copy - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - CTTelephonyNetworkInfo *networkInfo = [[CTTelephonyNetworkInfo alloc] init]; - [self performSelectorOnMainThread:@selector(updateCarrierInfoForCTCarrier:) withObject:networkInfo.subscriberCellularProvider waitUntilDone:NO]; - }); -} - -- (void)updateCarrierInfoForCTCarrier:(CTCarrier *)ctCarrier -{ - // use setValue instead of setObject here because ctCarrier could be nil, and any of its properties could be nil - [self.carrierInfo setValue:ctCarrier.carrierName forKey:@"carrierName"]; - [self.carrierInfo setValue:ctCarrier.isoCountryCode forKey:@"isoCountryCode"]; - [self.carrierInfo setValue:ctCarrier.mobileCountryCode forKey:@"mobileCountryCode"]; - [self.carrierInfo setValue:ctCarrier.mobileNetworkCode forKey:@"mobileNetworkCode"]; - - [[NSUserDefaults standardUserDefaults] setObject:self.carrierInfo forKey:MOPUB_CARRIER_INFO_DEFAULTS_KEY]; - [[NSUserDefaults standardUserDefaults] synchronize]; -} - -#pragma mark - Utilities - -- (MPGeolocationProvider *)sharedMPGeolocationProvider -{ - return [self singletonForClass:[MPGeolocationProvider class] provider:^id{ - return [MPGeolocationProvider sharedProvider]; - }]; -} - -- (CLLocationManager *)buildCLLocationManager -{ - return [[CLLocationManager alloc] init]; -} - -- (id)buildMPAdAlertManagerWithDelegate:(id)delegate -{ - id adAlertManager = nil; - - Class adAlertManagerClass = NSClassFromString(@"MPAdAlertManager"); - if (adAlertManagerClass != nil) { - adAlertManager = [[adAlertManagerClass alloc] init]; - [adAlertManager performSelector:@selector(setDelegate:) withObject:delegate]; - } - - return adAlertManager; -} - -- (MPAdAlertGestureRecognizer *)buildMPAdAlertGestureRecognizerWithTarget:(id)target action:(SEL)action -{ - MPAdAlertGestureRecognizer *gestureRecognizer = nil; - - Class gestureRecognizerClass = NSClassFromString(@"MPAdAlertGestureRecognizer"); - if (gestureRecognizerClass != nil) { - gestureRecognizer = [[gestureRecognizerClass alloc] initWithTarget:target action:action]; - } - - return gestureRecognizer; -} - -- (MPATSSetting)appTransportSecuritySettings -{ - // Keep track of ATS settings statically, as they'll never change in the lifecycle of the application. - // This way, the setting value only gets assembled once. - static BOOL gCheckedAppTransportSettings = NO; - static MPATSSetting gSetting = MPATSSettingEnabled; - - // If we've already checked ATS settings, just use what we have - if (gCheckedAppTransportSettings) { - return gSetting; - } - - // Otherwise, figure out ATS settings - - // App Transport Security was introduced in iOS 9; if the system version is less than 9, then arbirtrary loads are fine. - if (SYSTEM_VERSION_LESS_THAN(@"9.0")) { - gSetting = MPATSSettingAllowsArbitraryLoads; - gCheckedAppTransportSettings = YES; - return gSetting; - } - - // Start with the assumption that ATS is enabled - gSetting = MPATSSettingEnabled; - - // Grab the ATS dictionary from the Info.plist - NSDictionary *atsSettingsDictionary = [NSBundle mainBundle].infoDictionary[kMoPubAppTransportSecurityDictionaryKey]; - - // Check if ATS is entirely disabled, and if so, add that to the setting value - if ([atsSettingsDictionary[kMoPubAppTransportSecurityAllowsArbitraryLoadsKey] boolValue]) { - gSetting |= MPATSSettingAllowsArbitraryLoads; - } - - // New App Transport Security keys were introduced in iOS 10. Only send settings for these keys if we're running iOS 10 or greater. - // They may exist in the dictionary if we're running iOS 9, but they won't do anything, so the server shouldn't know about them. - if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) { - // In iOS 10, NSAllowsArbitraryLoads gets ignored if ANY keys of NSAllowsArbitraryLoadsForMedia, - // NSAllowsArbitraryLoadsInWebContent, or NSAllowsLocalNetworking are PRESENT (i.e., they can be set to `false`) - // See: https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW34 - // If needed, flip NSAllowsArbitraryLoads back to 0 if any of these keys are present. - if (atsSettingsDictionary[kMoPubAppTransportSecurityAllowsArbitraryLoadsForMediaKey] != nil - || atsSettingsDictionary[kMoPubAppTransportSecurityAllowsArbitraryLoadsInWebContentKey] != nil - || atsSettingsDictionary[kMoPubAppTransportSecurityAllowsLocalNetworkingKey] != nil) { - gSetting &= (~MPATSSettingAllowsArbitraryLoads); - } - - if ([atsSettingsDictionary[kMoPubAppTransportSecurityAllowsArbitraryLoadsForMediaKey] boolValue]) { - gSetting |= MPATSSettingAllowsArbitraryLoadsForMedia; - } - if ([atsSettingsDictionary[kMoPubAppTransportSecurityAllowsArbitraryLoadsInWebContentKey] boolValue]) { - gSetting |= MPATSSettingAllowsArbitraryLoadsInWebContent; - } - if ([atsSettingsDictionary[kMoPubAppTransportSecurityRequiresCertificateTransparencyKey] boolValue]) { - gSetting |= MPATSSettingRequiresCertificateTransparency; - } - if ([atsSettingsDictionary[kMoPubAppTransportSecurityAllowsLocalNetworkingKey] boolValue]) { - gSetting |= MPATSSettingAllowsLocalNetworking; - } - } - - gCheckedAppTransportSettings = YES; - return gSetting; -} - -- (NSDictionary *)sharedCarrierInfo -{ - return self.carrierInfo; -} - -- (MPTimer *)buildMPTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)selector repeats:(BOOL)repeats -{ - return [MPTimer timerWithTimeInterval:seconds target:target selector:selector repeats:repeats]; -} - -static CTTelephonyNetworkInfo * gTelephonyNetworkInfo; -- (MPNetworkStatus)currentRadioAccessTechnology { - if (!gTelephonyNetworkInfo) { - gTelephonyNetworkInfo = [[CTTelephonyNetworkInfo alloc] init]; - } - NSString * accessTechnology = gTelephonyNetworkInfo.currentRadioAccessTechnology; - - // The determination of 2G/3G/4G technology is a best-effort. - if ([accessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) { // Source: https://en.wikipedia.org/wiki/LTE_(telecommunication) - return MPReachableViaCellularNetwork4G; - } - else if ([accessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0] || // Source: https://www.phonescoop.com/glossary/term.php?gid=151 - [accessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA] || // Source: https://www.phonescoop.com/glossary/term.php?gid=151 - [accessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB] || // Source: https://www.phonescoop.com/glossary/term.php?gid=151 - [accessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA] || // Source: https://www.techopedia.com/definition/24282/wideband-code-division-multiple-access-wcdma - [accessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA] || // Source: https://en.wikipedia.org/wiki/High_Speed_Packet_Access#High_Speed_Downlink_Packet_Access_(HSDPA) - [accessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA]) { // Source: https://en.wikipedia.org/wiki/High_Speed_Packet_Access#High_Speed_Uplink_Packet_Access_(HSUPA) - return MPReachableViaCellularNetwork3G; - } - else if ([accessTechnology isEqualToString:CTRadioAccessTechnologyCDMA1x] || // Source: In testing, this mode showed up when the phone was in Verizon 1x mode - [accessTechnology isEqualToString:CTRadioAccessTechnologyGPRS] || // Source: https://en.wikipedia.org/wiki/General_Packet_Radio_Service - [accessTechnology isEqualToString:CTRadioAccessTechnologyEdge] || // Source: https://en.wikipedia.org/wiki/2G#2.75G_(EDGE) - [accessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD]) { // Source: https://www.phonescoop.com/glossary/term.php?gid=155 - return MPReachableViaCellularNetwork2G; - } - - return MPReachableViaCellularNetworkUnknownGeneration; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.h deleted file mode 100644 index 830e51bea..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.h +++ /dev/null @@ -1,62 +0,0 @@ -// -// MPHTTPNetworkSession.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN -@interface MPHTTPNetworkSession : NSObject -/** - Singleton instance of @c MPHTTPNetworkSession. - */ -+ (instancetype)sharedInstance; - -/** - Initializes a HTTP network request. - @param request Request to send. - @param responseHandler Optional response handler that will be invoked on the current thread. - @param errorHandler Optional error handler that will be invoked on the current thread. - @param shouldRedirectWithNewRequest Optional logic control block to determine if a redirection should occur. This is invoked on the current thread. - @returns The HTTP networking task. - */ -+ (NSURLSessionTask *)taskWithHttpRequest:(NSURLRequest *)request - responseHandler:(void (^ _Nullable)(NSData * data, NSHTTPURLResponse * response))responseHandler - errorHandler:(void (^ _Nullable)(NSError * error))errorHandler - shouldRedirectWithNewRequest:(BOOL (^ _Nullable)(NSURLSessionTask * task, NSURLRequest * newRequest))shouldRedirectWithNewRequest; - -/** - Initializes a HTTP network request and immediately sends it. - @param request Request to send. - @returns The HTTP networking task. - */ -+ (NSURLSessionTask *)startTaskWithHttpRequest:(NSURLRequest *)request; - -/** - Initializes a HTTP network request and immediately sends it. - @param request Request to send. - @param responseHandler Optional response handler that will be invoked on the main thread. - @param errorHandler Optional error handler that will be invoked on the main thread. - @returns The HTTP networking task. - */ -+ (NSURLSessionTask *)startTaskWithHttpRequest:(NSURLRequest *)request - responseHandler:(void (^ _Nullable)(NSData * data, NSHTTPURLResponse * response))responseHandler - errorHandler:(void (^ _Nullable)(NSError * error))errorHandler; - -/** - Initializes a HTTP network request and immediately sends it. - @param request Request to send. - @param responseHandler Optional response handler that will be invoked on the main thread. - @param errorHandler Optional error handler that will be invoked on the main thread. - @param shouldRedirectWithNewRequest Optional logic control block to determine if a redirection should occur. This is invoked on the current thread. - @returns The HTTP networking task. - */ -+ (NSURLSessionTask *)startTaskWithHttpRequest:(NSURLRequest *)request - responseHandler:(void (^ _Nullable)(NSData * data, NSHTTPURLResponse * response))responseHandler - errorHandler:(void (^ _Nullable)(NSError * error))errorHandler - shouldRedirectWithNewRequest:(BOOL (^ _Nullable)(NSURLSessionTask * task, NSURLRequest * newRequest))shouldRedirectWithNewRequest; -@end -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.m deleted file mode 100644 index 5be4ab735..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkSession.m +++ /dev/null @@ -1,250 +0,0 @@ -// -// MPHTTPNetworkSession.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPError.h" -#import "MPHTTPNetworkTaskData.h" -#import "MPHTTPNetworkSession.h" -#import "MPLogging.h" -#import "NSError+MPAdditions.h" - -// Macros for dispatching asynchronously to the main queue -#define safe_block(block, ...) block ? block(__VA_ARGS__) : nil -#define async_queue_block(queue, block, ...) dispatch_async(queue, ^ \ -{ \ -safe_block(block, __VA_ARGS__); \ -}) -#define main_queue_block(block, ...) async_queue_block(dispatch_get_main_queue(), block, __VA_ARGS__); - -// Constants -NSString * const kMoPubSDKNetworkDomain = @"MoPubSDKNetworkDomain"; - -@interface MPHTTPNetworkSession() -@property (nonatomic, strong) NSURLSession * sharedSession; - -// Access to `NSMutableDictionary` is not thread-safe by default, so we will gate access -// to it using GCD to allow concurrent reads, but synchronous writes. -@property (nonatomic, strong) NSMutableDictionary * sessions; -@property (nonatomic, strong) dispatch_queue_t sessionsQueue; -@end - -@implementation MPHTTPNetworkSession - -#pragma mark - Initialization - -+ (instancetype)sharedInstance { - static dispatch_once_t once; - static id _sharedInstance; - dispatch_once(&once, ^{ - _sharedInstance = [[self alloc] init]; - }); - return _sharedInstance; -} - -- (instancetype)init { - if (self = [super init]) { - // Shared `NSURLSession` to be used for all `MPHTTPNetworkTask` objects. All tasks should use this single - // session so that the DNS lookup and SSL handshakes do not need to be redone. - _sharedSession = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:nil]; - - // Dictionary of all sessions currently in flight. - _sessions = [NSMutableDictionary dictionary]; - _sessionsQueue = dispatch_queue_create("com.mopub.mopub-ios-sdk.mphttpnetworksession.queue", DISPATCH_QUEUE_CONCURRENT); - } - - return self; -} - -#pragma mark - Session Access - -- (void)setSessionData:(MPHTTPNetworkTaskData *)data forTask:(NSURLSessionTask *)task { - dispatch_barrier_sync(self.sessionsQueue, ^{ - self.sessions[task] = data; - }); -} - -/** - Retrieves the task data for the specified task. Accessing the data is thread - safe, but mutating the data is not thread safe. - @param task Task which needs a data retrieval. - @return The task data or @c nil - */ -- (MPHTTPNetworkTaskData *)sessionDataForTask:(NSURLSessionTask *)task { - __block MPHTTPNetworkTaskData * data = nil; - dispatch_sync(self.sessionsQueue, ^{ - data = self.sessions[task]; - }); - - return data; -} - -/** - Appends additional data to the @c responseData field of @c MPHTTPNetworkTaskData in - a thread safe manner. - @param data New data to append. - @param task Task to append the data to. - */ -- (void)appendData:(NSData *)data toSessionDataForTask:(NSURLSessionTask *)task { - // No data to append or task. - if (data == nil || task == nil) { - return; - } - - dispatch_barrier_sync(self.sessionsQueue, ^{ - // Do nothing if there is no task data entry. - MPHTTPNetworkTaskData * taskData = self.sessions[task]; - if (taskData == nil) { - return; - } - - // Append the new data to the task. - if (taskData.responseData == nil) { - taskData.responseData = [NSMutableData data]; - } - - [taskData.responseData appendData:data]; - }); -} - -#pragma mark - Manual Start Tasks - -+ (NSURLSessionTask *)taskWithHttpRequest:(NSURLRequest *)request - responseHandler:(void (^ _Nullable)(NSData * data, NSHTTPURLResponse * response))responseHandler - errorHandler:(void (^ _Nullable)(NSError * error))errorHandler - shouldRedirectWithNewRequest:(BOOL (^ _Nullable)(NSURLSessionTask * task, NSURLRequest * newRequest))shouldRedirectWithNewRequest { - // Networking task - NSURLSessionDataTask * task = [MPHTTPNetworkSession.sharedInstance.sharedSession dataTaskWithRequest:request]; - - // Initialize the task data - MPHTTPNetworkTaskData * taskData = [[MPHTTPNetworkTaskData alloc] initWithResponseHandler:responseHandler errorHandler:errorHandler shouldRedirectWithNewRequest:shouldRedirectWithNewRequest]; - - // Update the sessions. - [MPHTTPNetworkSession.sharedInstance setSessionData:taskData forTask:task]; - - return task; -} - -#pragma mark - Automatic Start Tasks - -+ (NSURLSessionTask *)startTaskWithHttpRequest:(NSURLRequest *)request { - return [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:nil errorHandler:nil shouldRedirectWithNewRequest:nil]; -} - -+ (NSURLSessionTask *)startTaskWithHttpRequest:(NSURLRequest *)request - responseHandler:(void (^ _Nullable)(NSData * data, NSHTTPURLResponse * response))responseHandler - errorHandler:(void (^ _Nullable)(NSError * error))errorHandler { - return [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:responseHandler errorHandler:errorHandler shouldRedirectWithNewRequest:nil]; -} - -+ (NSURLSessionTask *)startTaskWithHttpRequest:(NSURLRequest *)request - responseHandler:(void (^ _Nullable)(NSData * data, NSHTTPURLResponse * response))responseHandler - errorHandler:(void (^ _Nullable)(NSError * error))errorHandler - shouldRedirectWithNewRequest:(BOOL (^ _Nullable)(NSURLSessionTask * task, NSURLRequest * newRequest))shouldRedirectWithNewRequest { - // Generate a manual start task. - NSURLSessionTask * task = [MPHTTPNetworkSession taskWithHttpRequest:request responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - main_queue_block(responseHandler, data, response); - } errorHandler:^(NSError * _Nonnull error) { - main_queue_block(errorHandler, error); - } shouldRedirectWithNewRequest:shouldRedirectWithNewRequest]; - - // Immediately start the task. - [task resume]; - - return task; -} - -#pragma mark - NSURLSessionDataDelegate - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask -didReceiveResponse:(NSURLResponse *)response - completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler { - // Allow all responses. - completionHandler(NSURLSessionResponseAllow); -} - -- (void)URLSession:(NSURLSession *)session - dataTask:(NSURLSessionDataTask *)dataTask - didReceiveData:(NSData *)data { - - // Append the new data to the task. - [self appendData:data toSessionDataForTask:dataTask]; -} - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task -willPerformHTTPRedirection:(NSHTTPURLResponse *)response - newRequest:(NSURLRequest *)request - completionHandler:(void (^)(NSURLRequest * _Nullable))completionHandler { - // Retrieve the task data. - MPHTTPNetworkTaskData * taskData = [self sessionDataForTask:task]; - if (taskData == nil) { - completionHandler(request); - return; - } - - // If there is a redirection handler block registered with the HTTP task, we should - // query for it's response. By default, we will allow the redirection. - NSURLRequest * newRequest = request; - if (taskData.shouldRedirectWithNewRequest != nil && !taskData.shouldRedirectWithNewRequest(task, request)) { - // Reject the redirection. - newRequest = nil; - } - - completionHandler(newRequest); -} - -- (void)URLSession:(NSURLSession *)session - task:(NSURLSessionTask *)task -didCompleteWithError:(nullable NSError *)error { - // Retrieve the task data. - MPHTTPNetworkTaskData * taskData = [self sessionDataForTask:task]; - if (taskData == nil) { - return; - } - - // Remove the task data from the currently in flight sessions. - [self setSessionData:nil forTask:task]; - - // Validate that response is not an error. - if (error != nil) { - MPLogError(@"Network request failed with: %@", error.localizedDescription); - safe_block(taskData.errorHandler, error); - return; - } - - // Validate response is a HTTP response. - NSHTTPURLResponse * httpResponse = [task.response isKindOfClass:[NSHTTPURLResponse class]] ? (NSHTTPURLResponse *)task.response : nil; - if (httpResponse == nil) { - NSError * notHttpResponseError = [NSError errorWithDomain:kMoPubSDKNetworkDomain code:MOPUBErrorUnexpectedNetworkResponse userInfo:@{ NSLocalizedDescriptionKey: @"response is not of type NSHTTPURLResponse" }]; - MPLogError(@"Network request failed with: %@", notHttpResponseError.localizedDescription); - safe_block(taskData.errorHandler, notHttpResponseError); - return; - } - - // Validate response code is not an error (>= 400) - // See https://en.wikipedia.org/wiki/List_of_HTTP_status_codes for all valid status codes. - if (httpResponse.statusCode >= 400) { - NSError * not200ResponseError = [NSError networkErrorWithHTTPStatusCode:httpResponse.statusCode]; - MPLogError(@"Network request failed with: %@", not200ResponseError.localizedDescription); - safe_block(taskData.errorHandler, not200ResponseError); - return; - } - - // Validate that there is data - if (taskData.responseData == nil) { - NSError * noDataError = [NSError errorWithDomain:kMoPubSDKNetworkDomain code:MOPUBErrorNoNetworkData userInfo:@{ NSLocalizedDescriptionKey: @"no data found in the NSHTTPURLResponse" }]; - MPLogError(@"Network request failed with: %@", noDataError.localizedDescription); - safe_block(taskData.errorHandler, noDataError); - return; - } - - // By this point all of the fields have been validated. - safe_block(taskData.responseHandler, taskData.responseData, httpResponse); -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.h deleted file mode 100644 index 6e1e153cc..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// MPHTTPNetworkTaskData.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/** - Provides an easy encapsulation of a HTTP networking task's data because we can't effectively - subclass @c NSURLSessionDataTask. - */ -NS_ASSUME_NONNULL_BEGIN -@interface MPHTTPNetworkTaskData : NSObject -@property (nonatomic, strong, nullable) NSMutableData * responseData; -@property (nonatomic, copy, nullable) void (^responseHandler)(NSData * data, NSHTTPURLResponse * response); -@property (nonatomic, copy, nullable) void (^errorHandler)(NSError * error); -@property (nonatomic, copy, nullable) BOOL (^shouldRedirectWithNewRequest)(NSURLSessionTask * task, NSURLRequest * newRequest); - -/** - Initializes the task data with the given handlers. - @param responseHandler Optional response handler that will be invoked on the current thread. - @param errorHandler Optional error handler that will be invoked on the current thread. - @param shouldRedirectWithNewRequest Optional logic control block to determine if a redirection should occur. This is invoked on the current thread. - @returns The HTTP networking task data. - */ -- (instancetype)initWithResponseHandler:(void (^ _Nullable)(NSData * data, NSHTTPURLResponse * response))responseHandler - errorHandler:(void (^ _Nullable)(NSError * error))errorHandler - shouldRedirectWithNewRequest:(BOOL (^ _Nullable)(NSURLSessionTask * task, NSURLRequest * newRequest))shouldRedirectWithNewRequest NS_DESIGNATED_INITIALIZER; - -@end -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.m deleted file mode 100644 index f0ebd2bca..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPHTTPNetworkTaskData.m +++ /dev/null @@ -1,32 +0,0 @@ -// -// MPHTTPNetworkTaskData.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPHTTPNetworkTaskData.h" - -NS_ASSUME_NONNULL_BEGIN -@implementation MPHTTPNetworkTaskData - -- (instancetype)init { - return [self initWithResponseHandler:nil errorHandler:nil shouldRedirectWithNewRequest:nil]; -} - -- (instancetype)initWithResponseHandler:(void (^ _Nullable)(NSData * data, NSHTTPURLResponse * response))responseHandler - errorHandler:(void (^ _Nullable)(NSError * error))errorHandler - shouldRedirectWithNewRequest:(BOOL (^ _Nullable)(NSURLSessionTask * task, NSURLRequest * newRequest))shouldRedirectWithNewRequest { - if (self = [super init]) { - _responseData = nil; - _responseHandler = responseHandler; - _errorHandler = errorHandler; - _shouldRedirectWithNewRequest = shouldRedirectWithNewRequest; - } - - return self; -} - -@end -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMediationManager.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMediationManager.h deleted file mode 100644 index 5b35fbc2f..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMediationManager.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// MPMediationManager.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPMediationSdkInitializable.h" - -@interface MPMediationManager : NSObject - -/** - Singleton instance of the manager. - */ -+ (instancetype _Nonnull)sharedManager; - -/** - Initializes the inputted mediated network SDKs from the cache. - @param networks Networks to initialize. If @c nil, nothing will be done. - @param completion Optional completion block. - */ -- (void)initializeMediatedNetworks:(NSArray> * _Nullable)networks - completion:(void (^ _Nullable)(NSError * _Nullable error))completion; - -/** - Sets the initialization parameters for a given network in the cache. - @param params Initialization parameters sent to the @c MPSdkInitializable instance when initialized. - @param networkClass Network class. - */ -- (void)setCachedInitializationParameters:(NSDictionary * _Nullable)params forNetwork:(Class _Nonnull)networkClass; - -/** - Retrieves the cached initialization parameters for a given network. - @param networkClass Network class. - @returns The cached parameters or @c nil. - */ -- (NSDictionary * _Nullable)cachedInitializationParametersForNetwork:(Class _Nonnull)networkClass; - -/** - Retrieves all of the currently cached networks. - @return A list of all cached networks or @c nil. - */ -- (NSArray> * _Nullable)allCachedNetworks; - -/** - Clears the cache. - */ -- (void)clearCache; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMediationManager.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMediationManager.m deleted file mode 100644 index c41f864ea..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMediationManager.m +++ /dev/null @@ -1,138 +0,0 @@ -// -// MPMediationManager.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMediationManager.h" -#import "MPLogging.h" - -/** - Key of the @c NSUserDefaults entry for the network initialization cache. - */ -static NSString * const kNetworkSDKInitializationParametersKey = @"com.mopub.mopub-ios-sdk.network-init-info"; - -@implementation MPMediationManager - -#pragma mark - Initialization - -+ (instancetype)sharedManager { - static MPMediationManager * sharedInstance = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[MPMediationManager alloc] init]; - }); - - return sharedInstance; -} - -#pragma mark - Cache - -- (void)setCachedInitializationParameters:(NSDictionary * _Nullable)params forNetwork:(Class _Nonnull)networkClass { - // Empty network names and parameters are invalid. - NSString * network = NSStringFromClass(networkClass); - if (network.length == 0 || params == nil) { - return; - } - - @synchronized (self) { - NSMutableDictionary * cachedParameters = [[[NSUserDefaults standardUserDefaults] objectForKey:kNetworkSDKInitializationParametersKey] mutableCopy]; - if (cachedParameters == nil) { - cachedParameters = [NSMutableDictionary dictionaryWithCapacity:1]; - } - - cachedParameters[network] = params; - [[NSUserDefaults standardUserDefaults] setObject:cachedParameters forKey:kNetworkSDKInitializationParametersKey]; - [[NSUserDefaults standardUserDefaults] synchronize]; - - MPLogInfo(@"Cached SDK initialization parameters for %@:\n%@", network, params); - } -} - -- (NSDictionary * _Nullable)cachedInitializationParametersForNetwork:(Class)networkClass { - // Empty network names are invalid. - NSString * network = NSStringFromClass(networkClass); - if (network.length == 0) { - return nil; - } - - NSDictionary * networkParameters = nil; - @synchronized (self) { - NSDictionary * cachedParameters = [[NSUserDefaults standardUserDefaults] objectForKey:kNetworkSDKInitializationParametersKey]; - if (cachedParameters != nil) { - networkParameters = [cachedParameters objectForKey:network]; - } - } - - return networkParameters; -} - -- (NSArray> * _Nullable)allCachedNetworks { - NSMutableArray> * cachedNetworks = nil; - - @synchronized (self) { - NSDictionary * cachedParameters = [[NSUserDefaults standardUserDefaults] objectForKey:kNetworkSDKInitializationParametersKey]; - NSArray * cacheKeys = [cachedParameters allKeys]; - if (cacheKeys == nil) { - return nil; - } - - // Convert the strings of class names into class types. - cachedNetworks = [NSMutableArray array]; - [cacheKeys enumerateObjectsUsingBlock:^(NSString * key, NSUInteger idx, BOOL * _Nonnull stop) { - Class c = NSClassFromString(key); - if ([c conformsToProtocol:@protocol(MPMediationSdkInitializable)]) { - [cachedNetworks addObject:c]; - } - }]; - } - - return cachedNetworks; -} - -- (void)clearCache { - @synchronized (self) { - [[NSUserDefaults standardUserDefaults] removeObjectForKey:kNetworkSDKInitializationParametersKey]; - [[NSUserDefaults standardUserDefaults] synchronize]; - - MPLogInfo(@"Cleared cached SDK initialization parameters"); - } -} - -#pragma mark - Mediation - -- (void)initializeMediatedNetworks:(NSArray> *)networks - completion:(void (^ _Nullable)(NSError * _Nullable error))completion { - // Nothing to initialize - if (networks.count == 0) { - if (completion != nil) { - completion(nil); - } - - return; - } - - // Network SDK initializations should occur on the main thread since - // some of those SDKs require it. - dispatch_async(dispatch_get_main_queue(), ^{ - for (Class mediationClass in networks) { - id mediationNetwork = (id)[[mediationClass class] new]; - NSDictionary * cachedInitializationParams = [self cachedInitializationParametersForNetwork:mediationClass]; - - // Only attempt initialization if they exist. Otherwise, we should wait for the - // on-demand initialization to occur with the correct parameters. - if (cachedInitializationParams != nil) { - [mediationNetwork initializeSdkWithParameters:cachedInitializationParams]; - MPLogInfo(@"Loaded mediated network: %@", NSStringFromClass(mediationClass)); - } - } - - if (completion != nil) { - completion(nil); - } - }); -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMemoryCache.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMemoryCache.h deleted file mode 100644 index 557989a4e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMemoryCache.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// MPMemoryCache.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/** - Thread-safe memory cache. Items contained within the cache may be evicted - at the operating system's discretion. - */ -@interface MPMemoryCache : NSObject - -/** - Singleton instance. - */ -+ (instancetype _Nonnull)sharedInstance; - -/** - Retrieves the cached data for the given key, if it exists. - @param key Key into the cache - @return The cached data if it exists; otherwise @c nil. - */ -- (NSData * _Nullable)dataForKey:(NSString * _Nonnull)key; - -/** - Sets the cache entry for the given key. If a value of @c nil is given - as the data, the cache entry will be cleared. - @param data New data for the cache entry. A value of @c nil will clear the cache entry. - @param key Key into the cache - */ -- (void)setData:(NSData * _Nullable)data forKey:(NSString * _Nonnull)key; - -@end - -@interface MPMemoryCache (UIImage) - -/** - Retrieves the cached data as a @c UIImage for the given key, if it exists. - @param key Key into the cache - @return The cached image if it exists and contains image data; otherwise @c nil. - */ -- (UIImage * _Nullable)imageForKey:(NSString * _Nonnull)key; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMemoryCache.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMemoryCache.m deleted file mode 100644 index 99c8be4c1..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPMemoryCache.m +++ /dev/null @@ -1,91 +0,0 @@ -// -// MPMemoryCache.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMemoryCache.h" -#import "MPLogging.h" - -@interface MPMemoryCache() -/** - Memory cache - */ -@property (nonatomic, strong) NSCache * memcache; - -@end - -@implementation MPMemoryCache - -#pragma mark - Initialization - -+ (instancetype)sharedInstance { - static dispatch_once_t onceToken; - static MPMemoryCache * manager; - dispatch_once(&onceToken, ^{ - manager = [[MPMemoryCache alloc] init]; - }); - - return manager; -} - -- (instancetype)init { - if (self = [super init]) { - _memcache = [[NSCache alloc] init]; - _memcache.delegate = self; - } - - return self; -} - -#pragma mark - Cache Access - -- (NSData * _Nullable)dataForKey:(NSString * _Nonnull)key { - if (key == nil) { - return nil; - } - - MPLogTrace(@"%@ retrieved data for key %@", NSStringFromClass(self.class), key); - return [self.memcache objectForKey:key]; -} - -- (void)setData:(NSData * _Nullable)data forKey:(NSString * _Nonnull)key { - if (key == nil) { - return; - } - - // Set cache entry - if (data != nil) { - MPLogTrace(@"%@ set data %@ for key %@", NSStringFromClass(self.class), data, key); - [self.memcache setObject:data forKey:key]; - } - // Remove cache entry - else { - MPLogTrace(@"%@ removed cache entry %@", NSStringFromClass(self.class), key); - [self.memcache removeObjectForKey:key]; - } -} - -#pragma mark - NSCacheDelegate - -- (void)cache:(NSCache *)cache willEvictObject:(id)obj { - MPLogTrace(@"%@ evicted %@", NSStringFromClass(self.class), obj); -} - -@end - -@implementation MPMemoryCache (UIImage) - -- (UIImage * _Nullable)imageForKey:(NSString * _Nonnull)key { - NSData * imageData = [self dataForKey:key]; - if (imageData == nil) { - MPLogTrace(@"%@ found no image data for key %@", NSStringFromClass(self.class), key); - return nil; - } - - return [[UIImage alloc] initWithData:imageData]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPReachabilityManager.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPReachabilityManager.h deleted file mode 100644 index 3307415d7..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPReachabilityManager.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// MPReachabilityManager.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPReachability.h" - -/** - Provides a singleton interface for `MPReachability` since creating new - instances of `MPReachability` is an expensive operation. - */ -@interface MPReachabilityManager : NSObject - -/** - Current network status. - */ -@property (nonatomic, readonly) MPNetworkStatus currentStatus; - -/** - Singleton instance of the manager. - */ -+ (instancetype _Nonnull)sharedManager; - -/** - Starts monitoring for changes in connectivity. - */ -- (void)startMonitoring; - -/** - Stops monitoring for changes in connectivity. - */ -- (void)stopMonitoring; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPReachabilityManager.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPReachabilityManager.m deleted file mode 100644 index be85cab89..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPReachabilityManager.m +++ /dev/null @@ -1,56 +0,0 @@ -// -// MPReachabilityManager.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPReachabilityManager.h" - -@interface MPReachabilityManager() -@property (nonatomic, strong) MPReachability * reachability; -@end - -@implementation MPReachabilityManager - -#pragma mark - Initialization - -+ (instancetype _Nonnull)sharedManager { - static MPReachabilityManager * sharedMyManager = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedMyManager = [[self alloc] init]; - }); - return sharedMyManager; -} - -- (instancetype)init { - if (self = [super init]) { - _reachability = [MPReachability reachabilityForInternetConnection]; - } - - return self; -} - -- (void)dealloc { - [_reachability stopNotifier]; -} - -#pragma mark - Properties - -- (MPNetworkStatus)currentStatus { - return self.reachability.currentReachabilityStatus; -} - -#pragma mark - Monitoring - -- (void)startMonitoring { - [self.reachability startNotifier]; -} - -- (void)stopMonitoring { - [self.reachability stopNotifier]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURL.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURL.h deleted file mode 100644 index 5318137ef..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURL.h +++ /dev/null @@ -1,81 +0,0 @@ -// -// MPURL.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -NS_ASSUME_NONNULL_BEGIN - -/** - MoPub-specific URL object to include passing along a POST request payload. - */ -@interface MPURL : NSURL -/** - Dictionary of data that will be represented as JSON in the POST request body. - @c NSJSONSerialization will be used to perform the serialization of the data - into JSON; as such the only objects that are supported are: @c NSString, - @c NSNumber, @c NSArray, @c NSDictionary, and @c NSNull. - @note Keys and values will not be URL encoded. - */ -@property (nonatomic, strong, readonly) NSMutableDictionary * postData; - -/** - Initialize with a valid URL string with the string arguments to contain any percent - escape codes that are necessary. It is an error for URLString to be nil. - @param URLString Valid URL string with percent escaped arguments. - @return MoPub object representation of the URL. - */ -- (instancetype _Nullable)initWithString:(NSString * _Nullable)URLString; - -/** - Initialize with a valid URL string with the string arguments to contain any percent - escape codes that are necessary. It is an error for URLString to be nil. - @param URLString Valid URL string with percent escaped arguments. - @return MoPub object representation of the URL. - */ -+ (instancetype _Nullable)URLWithString:(NSString * _Nullable)URLString; - -/** - Initialize with a URL components and optional POST data. - @param components Components of the URL. - @param postData Optional POST data to include with the URL. The values should not be URL encoded, - and only supports the following JSON-serializable types: @c NSString, @c NSNumber, @c NSDictionary, - and @c NSArray. - @return MoPub object representation of the URL. - */ -+ (instancetype _Nullable)URLWithComponents:(NSURLComponents * _Nullable)components postData:(NSDictionary * _Nullable)postData; - -/** - Attempts to retrieve the value for the POST data key as a @c NSArray. - @param key POST data key. - @return The value of the POST data key cast into a @c NSArray; otherwise @c nil. - */ -- (NSArray * _Nullable)arrayForPOSTDataKey:(NSString *)key; - -/** - Attempts to retrieve the value for the POST data key as a @c NSDictionary. - @param key POST data key. - @return The value of the POST data key cast into a @c NSDictionary; otherwise @c nil. - */ -- (NSDictionary * _Nullable)dictionaryForPOSTDataKey:(NSString *)key; - -/** - Attempts to retrieve the value for the POST data key as a @c NSNumber. - @param key POST data key. - @return The value of the POST data key cast into a @c NSNumber; otherwise @c nil. - */ -- (NSNumber * _Nullable)numberForPOSTDataKey:(NSString *)key; - -/** - Attempts to retrieve the value for the POST data key as a @c NSString. - @param key POST data key. - @return The value of the POST data key cast into a @c NSString; otherwise @c nil. - */ -- (NSString * _Nullable)stringForPOSTDataKey:(NSString *)key; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURL.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURL.m deleted file mode 100644 index c2d3f1b9f..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURL.m +++ /dev/null @@ -1,52 +0,0 @@ -// -// MPURL.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPURL.h" - -@implementation MPURL - -#pragma mark - Initialization - -- (instancetype)initWithString:(NSString *)URLString { - if (self = [super initWithString:URLString]) { - _postData = [NSMutableDictionary dictionary]; - } - return self; -} - -+ (instancetype)URLWithString:(NSString *)URLString { - return [[MPURL alloc] initWithString:URLString]; -} - -+ (instancetype)URLWithComponents:(NSURLComponents *)components postData:(NSDictionary *)postData { - NSString * urlString = components.URL.absoluteString; - MPURL * mpUrl = [[MPURL alloc] initWithString:urlString]; - [mpUrl.postData addEntriesFromDictionary:postData]; - - return mpUrl; -} - -#pragma mark - POST Data Convenience Getters - -- (NSArray *)arrayForPOSTDataKey:(NSString *)key { - return (NSArray *)self.postData[key]; -} - -- (NSDictionary *)dictionaryForPOSTDataKey:(NSString *)key { - return (NSDictionary *)self.postData[key]; -} - -- (NSNumber *)numberForPOSTDataKey:(NSString *)key { - return (NSNumber *)self.postData[key]; -} - -- (NSString *)stringForPOSTDataKey:(NSString *)key { - return (NSString *)self.postData[key]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.h deleted file mode 100644 index ff2c04d36..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// MPURLRequest.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NS_ASSUME_NONNULL_BEGIN -@interface MPURLRequest : NSMutableURLRequest - -/** - Initializes an URL request with a given URL. - @param URL The URL for the request. - @returns Returns a URL request for a specified URL with @c NSURLRequestReloadIgnoringCacheData - cache policy and @c kRequestTimeoutInterval timeout value. - */ -- (instancetype)initWithURL:(NSURL *)URL; - -/** - Initializes an URL request with a given URL. - @param URL The URL for the request. - @returns Returns a URL request for a specified URL with @c NSURLRequestReloadIgnoringCacheData - cache policy and @c kRequestTimeoutInterval timeout value. - */ -+ (MPURLRequest *)requestWithURL:(NSURL *)URL; - -@end -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.m deleted file mode 100644 index 3dcc19573..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPURLRequest.m +++ /dev/null @@ -1,136 +0,0 @@ -// -// MPURLRequest.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPURLRequest.h" -#import "MPAPIEndpoints.h" -#import "MPLogging.h" -#import "MPURL.h" - -// All requests have a 10 second timeout. -const NSTimeInterval kRequestTimeoutInterval = 10.0; - -NS_ASSUME_NONNULL_BEGIN -@interface MPURLRequest() - -@end - -@implementation MPURLRequest - -- (instancetype)initWithURL:(NSURL *)URL { - // In the event that the URL passed in is really a MPURL type, - // extract the POST body. - NSMutableDictionary * postData = [NSMutableDictionary dictionary]; - if ([URL isKindOfClass:[MPURL class]]) { - MPURL * mpUrl = (MPURL *)URL; - if ([NSJSONSerialization isValidJSONObject:mpUrl.postData]) { - postData = mpUrl.postData; - } - else { - MPLogFatal(@"POST Data is not serializable into JSON:\n%@", mpUrl.postData); - } - } - - // Requests sent to MoPub should always be in POST format. All other requests - // should be sent as a normal GET. - BOOL isMoPubRequest = [URL.host isEqualToString:MPAPIEndpoints.baseHostname]; - NSURL * requestUrl = URL; - if (isMoPubRequest) { - // Move the query parameters to the POST data dictionary. - // NSURLQUeryItem automatically URL decodes the query parameter name and value when - // using the `name` and `value` properties. - NSURLComponents * components = [NSURLComponents componentsWithURL:URL resolvingAgainstBaseURL:NO]; - [components.queryItems enumerateObjectsUsingBlock:^(NSURLQueryItem * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { - postData[obj.name] = obj.value; - }]; - - // The incoming URL may contain query parameters; we will need to strip them out. - components.queryItems = nil; - requestUrl = components.URL; - } - - if (self = [super initWithURL:requestUrl]) { - // Generate the request - [self setHTTPShouldHandleCookies:NO]; - [self setValue:MPURLRequest.userAgent forHTTPHeaderField:@"User-Agent"]; - [self setCachePolicy:NSURLRequestReloadIgnoringCacheData]; - [self setTimeoutInterval:kRequestTimeoutInterval]; - - // Request contains POST data or is a MoPub request; the should be a POST - // with a UTF-8 JSON payload as the HTTP body. - if (isMoPubRequest || postData.count > 0) { - [self setHTTPMethod:@"POST"]; - [self setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"]; - - // Generate the JSON body from the POST parameters - NSError * error = nil; - NSData * jsonData = [NSJSONSerialization dataWithJSONObject:postData options:0 error:&error]; - - // Set the request body with the query parameter key/value pairs if there was no - // error in generating a JSON from the dictionary. - if (error == nil) { - [self setValue:[NSString stringWithFormat:@"%lu", (unsigned long)jsonData.length] forHTTPHeaderField:@"Content-Length"]; - [self setHTTPBody:jsonData]; - } - else { - MPLogError(@"Could not generate JSON body from %@", postData); - } - } - } - - return self; -} - -+ (MPURLRequest *)requestWithURL:(NSURL *)URL { - return [[MPURLRequest alloc] initWithURL:URL]; -} - -- (NSString *)description { - if (self.HTTPBody != nil) { - NSString * httpBody = [[NSString alloc] initWithData:self.HTTPBody encoding:NSUTF8StringEncoding]; - return [NSString stringWithFormat:@"%@\n%@", self.URL, httpBody]; - } - else { - return self.URL.absoluteString; - } -} - -/** - Global variable for holding the user agent string - */ -NSString * gUserAgent = nil; - -/** - Retrieves the current user agent as determined by @c UIWebView. - @returns The user agent. - */ -+ (NSString *)userAgent { - if (gUserAgent == nil) { - // The user agent string cannot be obtained from a UIWebView unless on the - // main thread (there'll be a crash if you try to obtain on a thread other than main). - // Therefore, obtain the string on main thread and block this thread if needed to get it. - - // Make a block to obtain the user agent string - void (^obtainUserAgentBlock)(void) = ^void(void) { - // Only set @c gUserAgent on the main thread to avoid undefined behavior. - gUserAgent = [[[UIWebView alloc] init] stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"]; - }; - - if ([NSThread isMainThread]) { - // Run the block directly if on main thread. - obtainUserAgentBlock(); - } else { - // Block this thread to obtain user agent string on main thread. - dispatch_sync(dispatch_get_main_queue(), obtainUserAgentBlock); - } - } - - return gUserAgent; -} - -@end -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTTracking.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTTracking.h deleted file mode 100644 index 741835d0d..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTTracking.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// MPVASTTracking.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPVideoConfig; - -typedef NS_ENUM(NSUInteger, MPVideoEventType) { - MPVideoEventTypeTimeUpdate = 0, - MPVideoEventTypeMuted, - MPVideoEventTypeUnmuted, - MPVideoEventTypePause, - MPVideoEventTypeResume, - MPVideoEventTypeFullScreen, - MPVideoEventTypeExitFullScreen, - MPVideoEventTypeExpand, - MPVideoEventTypeCollapse, - MPVideoEventTypeCompleted, - MPVideoEventTypeImpression, - MPVideoEventTypeClick, - MPVideoEventTypeError -}; - -@interface MPVASTTracking : NSObject - -@property (nonatomic, readonly) MPVideoConfig *videoConfig; -@property (nonatomic) NSTimeInterval videoDuration; - -- (instancetype)initWithMPVideoConfig:(MPVideoConfig *)videoConfig videoView:(UIView *)videoView; -- (void)handleVideoEvent:(MPVideoEventType)videoEventType videoTimeOffset:(NSTimeInterval)timeOffset; -- (void)handleNewVideoView:(UIView *)videoView; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTTracking.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTTracking.m deleted file mode 100644 index e657ace65..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MPVASTTracking.m +++ /dev/null @@ -1,254 +0,0 @@ -// -// MPVASTTracking.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBNativeVideoImpressionAgent.h" -#import "MPAnalyticsTracker.h" -#import "MPCoreInstanceProvider.h" -#import "MPLogging.h" -#import "MPVASTMacroProcessor.h" -#import "MPVASTTracking.h" -#import "MPVideoConfig.h" - -// Do not fire the start tracker until this time has been reached in the video -static const NSInteger kStartTrackerTime = 0; - -@interface VASTTrackingURL : NSObject - -@property (nonatomic, copy) NSURL *url; -@property (nonatomic) MPVASTDurationOffset *progressOffset; - -@end - -@implementation VASTTrackingURL - -@end - -@interface VASTEventTracker : NSObject - -@property (nonatomic, assign) BOOL trackersFired; -@property (nonatomic) NSArray *trackingEvents; // NSArray - -@end - -@implementation VASTEventTracker - -+ (VASTEventTracker *)eventTrackerWithMPVastTrackingEvents:(NSArray *)events -{ - VASTEventTracker *result = [[VASTEventTracker alloc] init]; - NSMutableArray *trackingEvents = [NSMutableArray array]; - for (MPVASTTrackingEvent *event in events) { - VASTTrackingURL *tracker = [[VASTTrackingURL alloc] init]; - tracker.url = event.URL; - tracker.progressOffset = event.progressOffset; - [trackingEvents addObject:tracker]; - } - - result.trackingEvents = trackingEvents; - - return result; -} - -+ (VASTEventTracker *)eventTrackerWithURLs:(NSArray *)urls -{ - VASTEventTracker *result = [[VASTEventTracker alloc] init]; - NSMutableArray *trackingEvents = [NSMutableArray array]; - for (NSURL *url in urls) { - VASTTrackingURL *tracker = [[VASTTrackingURL alloc] init]; - tracker.url = url; - tracker.progressOffset = nil; - [trackingEvents addObject:tracker]; - } - - result.trackingEvents = trackingEvents; - - return result; -} - -@end - -@interface MPVASTTracking() - -@property (nonatomic) VASTEventTracker *errorTracker; -@property (nonatomic) VASTEventTracker *impressionTracker; -@property (nonatomic) VASTEventTracker *clickTracker; -@property (nonatomic) VASTEventTracker *customViewabilityTracker; - -@property (nonatomic) VASTEventTracker *startTracker; -@property (nonatomic) VASTEventTracker *firstQuartileTracker; -@property (nonatomic) VASTEventTracker *midPointTracker; -@property (nonatomic) VASTEventTracker *thirdQuartileTracker; -@property (nonatomic) VASTEventTracker *completionTracker; - -@property (nonatomic) NSMutableArray *variableProgressTrackers; //NSMutableArray - -@property (nonatomic) VASTEventTracker *muteTracker; -@property (nonatomic) VASTEventTracker *unmuteTracker; -@property (nonatomic) VASTEventTracker *pauseTracker; -@property (nonatomic) VASTEventTracker *rewindTracker; -@property (nonatomic) VASTEventTracker *resumeTracker; -@property (nonatomic) VASTEventTracker *fullscreenTracker; -@property (nonatomic) VASTEventTracker *exitFullscreenTracker; -@property (nonatomic) VASTEventTracker *expandTracker; -@property (nonatomic) VASTEventTracker *collapseTracker; - -@property (nonatomic) MOPUBNativeVideoImpressionAgent *customViewabilityTrackingAgent; - -@end - -@implementation MPVASTTracking - -- (instancetype)initWithMPVideoConfig:(MPVideoConfig *)videoConfig videoView:(UIView *)videoView; -{ - self = [super init]; - if (self) { - _videoConfig = videoConfig; - _videoDuration = -1; - - _errorTracker = [VASTEventTracker eventTrackerWithURLs:_videoConfig.errorURLs]; - _impressionTracker = [VASTEventTracker eventTrackerWithURLs:_videoConfig.impressionURLs]; - _clickTracker = [VASTEventTracker eventTrackerWithURLs:_videoConfig.clickTrackingURLs]; - - _startTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.startTrackers]; - _firstQuartileTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.firstQuartileTrackers]; - _midPointTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.midpointTrackers]; - _thirdQuartileTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.thirdQuartileTrackers]; - _completionTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.completionTrackers]; - - _variableProgressTrackers = [NSMutableArray array]; - for (MPVASTTrackingEvent *event in _videoConfig.otherProgressTrackers) { - [_variableProgressTrackers addObject:[VASTEventTracker eventTrackerWithMPVastTrackingEvents:[NSArray arrayWithObject:event]]]; - } - - _muteTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.muteTrackers]; - _unmuteTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.unmuteTrackers]; - _pauseTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.pauseTrackers]; - _rewindTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.rewindTrackers]; - _resumeTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.resumeTrackers]; - _fullscreenTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.fullscreenTrackers]; - _exitFullscreenTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.exitFullscreenTrackers]; - _expandTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.expandTrackers]; - _collapseTracker = [VASTEventTracker eventTrackerWithMPVastTrackingEvents:_videoConfig.collapseTrackers]; - - if (_videoConfig.viewabilityTrackingURL) { - _customViewabilityTracker = [VASTEventTracker eventTrackerWithURLs:[NSArray arrayWithObject:_videoConfig.viewabilityTrackingURL]]; - _customViewabilityTrackingAgent = [[MOPUBNativeVideoImpressionAgent alloc] initWithVideoView:videoView requiredVisibilityPercentage:videoConfig.minimumFractionOfVideoVisible requiredPlaybackDuration:videoConfig.minimumViewabilityTimeInterval]; - } - } - return self; -} - -- (void)handleVideoEvent:(MPVideoEventType)videoEventType videoTimeOffset:(NSTimeInterval)timeOffset -{ - if (self.videoConfig && (self.videoDuration > 0 || videoEventType == MPVideoEventTypeError)) { - if (videoEventType == MPVideoEventTypeTimeUpdate) { - [self handleProgressTrackers:timeOffset]; - } else { - VASTEventTracker *eventTrackerToFire; - switch (videoEventType) { - case MPVideoEventTypeMuted: - eventTrackerToFire = self.muteTracker; - break; - case MPVideoEventTypeUnmuted: - eventTrackerToFire = self.unmuteTracker; - break; - case MPVideoEventTypePause: - eventTrackerToFire = self.pauseTracker; - break; - case MPVideoEventTypeResume: - eventTrackerToFire = self.resumeTracker; - break; - case MPVideoEventTypeFullScreen: - eventTrackerToFire = self.fullscreenTracker; - break; - case MPVideoEventTypeExitFullScreen: - eventTrackerToFire = self.exitFullscreenTracker; - break; - case MPVideoEventTypeExpand: - eventTrackerToFire = self.expandTracker; - break; - case MPVideoEventTypeCollapse: - eventTrackerToFire = self.collapseTracker; - break; - case MPVideoEventTypeError: - eventTrackerToFire = self.errorTracker; - break; - case MPVideoEventTypeImpression: - if (!self.impressionTracker.trackersFired) { - eventTrackerToFire = self.impressionTracker; - } - break; - case MPVideoEventTypeClick: - if (!self.clickTracker.trackersFired) { - eventTrackerToFire = self.clickTracker; - } - break; - case MPVideoEventTypeCompleted: - if (!self.completionTracker.trackersFired) { - eventTrackerToFire = self.completionTracker; - } - break; - default: - eventTrackerToFire = nil; - } - // Only fire event trackers after the video has started playing - if (eventTrackerToFire && (self.startTracker.trackersFired || videoEventType == MPVideoEventTypeError)) { - [self cleanAndSendTrackingEvents:eventTrackerToFire timeOffset:timeOffset]; - } - } - } -} - -- (void)handleProgressTrackers:(NSTimeInterval)timeOffset -{ - if (timeOffset >= kStartTrackerTime && !self.startTracker.trackersFired) { - [self cleanAndSendTrackingEvents:self.startTracker timeOffset:timeOffset]; - } - - if ((0.75 * self.videoDuration) <= timeOffset && !self.thirdQuartileTracker.trackersFired) { - [self cleanAndSendTrackingEvents:self.thirdQuartileTracker timeOffset:timeOffset]; - } - - if ((0.50 * self.videoDuration) <= timeOffset && !self.midPointTracker.trackersFired) { - [self cleanAndSendTrackingEvents:self.midPointTracker timeOffset:timeOffset]; - } - - if ((0.25 * self.videoDuration) <= timeOffset && !self.firstQuartileTracker.trackersFired) { - [self cleanAndSendTrackingEvents:self.firstQuartileTracker timeOffset:timeOffset]; - } - - for (VASTEventTracker *progressTracker in self.variableProgressTrackers) { - VASTTrackingURL *progressTrackingURL = progressTracker.trackingEvents[0]; // there's only one - if (!progressTracker.trackersFired && [progressTrackingURL.progressOffset timeIntervalForVideoWithDuration:self.videoDuration] <= timeOffset) { - [self cleanAndSendTrackingEvents:progressTracker timeOffset:timeOffset]; - } - } - - if (self.customViewabilityTracker && !self.customViewabilityTracker.trackersFired && - [self.customViewabilityTrackingAgent shouldTrackImpressionWithCurrentPlaybackTime:timeOffset]) { - [self cleanAndSendTrackingEvents:self.customViewabilityTracker timeOffset:timeOffset]; - } -} - -- (void)cleanAndSendTrackingEvents:(VASTEventTracker *)vastEventTracker timeOffset:(NSTimeInterval)timeOffset -{ - if (vastEventTracker && [vastEventTracker.trackingEvents count]) { - NSMutableArray *cleanedTrackingURLs = [NSMutableArray array]; - for (VASTTrackingURL *vastTrackingURL in vastEventTracker.trackingEvents) { - [cleanedTrackingURLs addObject:[MPVASTMacroProcessor macroExpandedURLForURL:vastTrackingURL.url errorCode:nil videoTimeOffset:timeOffset videoAssetURL:self.videoConfig.mediaURL]]; - } - [[MPAnalyticsTracker sharedTracker] sendTrackingRequestForURLs:cleanedTrackingURLs]; - } - vastEventTracker.trackersFired = YES; -} - -- (void)handleNewVideoView:(UIView *)videoView -{ - self.customViewabilityTrackingAgent = [[MOPUBNativeVideoImpressionAgent alloc] initWithVideoView:videoView requiredVisibilityPercentage:self.videoConfig.minimumFractionOfVideoVisible requiredPlaybackDuration:self.videoConfig.minimumViewabilityTimeInterval]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPForceableOrientationProtocol.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPForceableOrientationProtocol.h deleted file mode 100644 index 225424d31..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPForceableOrientationProtocol.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPForceableOrientationProtocol.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@protocol MPForceableOrientationProtocol - -/** - * An orientation mask that defines the orientations the view controller supports. - * This cannot force a change in orientation though. - */ -- (void)setSupportedOrientationMask:(UIInterfaceOrientationMask)supportedOrientationMask; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.h deleted file mode 100644 index f2d1b9644..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPMRAIDBannerCustomEvent.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBannerCustomEvent.h" -#import "MPPrivateBannerCustomEventDelegate.h" - -@interface MPMRAIDBannerCustomEvent : MPBannerCustomEvent - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wobjc-property-synthesis" -@property (nonatomic, weak) id delegate; -#pragma clang diagnostic pop - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.m deleted file mode 100644 index 25f6f9e7d..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDBannerCustomEvent.m +++ /dev/null @@ -1,102 +0,0 @@ -// -// MPMRAIDBannerCustomEvent.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMRAIDBannerCustomEvent.h" -#import "MPLogging.h" -#import "MPAdConfiguration.h" -#import "MRController.h" -#import "MPWebView.h" -#import "MPViewabilityTracker.h" - -@interface MPMRAIDBannerCustomEvent () - -@property (nonatomic, strong) MRController *mraidController; - -@end - -@implementation MPMRAIDBannerCustomEvent - -- (void)requestAdWithSize:(CGSize)size customEventInfo:(NSDictionary *)info -{ - MPLogInfo(@"Loading MoPub MRAID banner"); - MPAdConfiguration *configuration = [self.delegate configuration]; - - CGRect adViewFrame = CGRectZero; - if ([configuration hasPreferredSize]) { - adViewFrame = CGRectMake(0, 0, configuration.preferredSize.width, - configuration.preferredSize.height); - } - - self.mraidController = [[MRController alloc] initWithAdViewFrame:adViewFrame - adPlacementType:MRAdViewPlacementTypeInline - delegate:self]; - [self.mraidController loadAdWithConfiguration:configuration]; -} - -#pragma mark - MRControllerDelegate - -- (CLLocation *)location -{ - return [self.delegate location]; -} - -- (NSString *)adUnitId -{ - return [self.delegate adUnitId]; -} - -- (MPAdConfiguration *)adConfiguration -{ - return [self.delegate configuration]; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (void)adDidLoad:(UIView *)adView -{ - MPLogInfo(@"MoPub MRAID banner did load"); - [self.delegate bannerCustomEvent:self didLoadAd:adView]; -} - -- (void)adDidFailToLoad:(UIView *)adView -{ - MPLogInfo(@"MoPub MRAID banner did fail"); - [self.delegate bannerCustomEvent:self didFailToLoadAdWithError:nil]; -} - -- (void)closeButtonPressed -{ - //don't care -} - -- (void)appShouldSuspendForAd:(UIView *)adView -{ - MPLogInfo(@"MoPub MRAID banner will begin action"); - [self.delegate bannerCustomEventWillBeginAction:self]; -} - -- (void)appShouldResumeFromAd:(UIView *)adView -{ - MPLogInfo(@"MoPub MRAID banner did end action"); - [self.delegate bannerCustomEventDidFinishAction:self]; -} - -- (void)trackImpressionsIncludedInMarkup -{ - [self.mraidController.mraidWebView stringByEvaluatingJavaScriptFromString:@"webviewDidAppear();"]; -} - -- (void)startViewabilityTracker -{ - [self.mraidController.viewabilityTracker startTracking]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.h deleted file mode 100644 index 81b10fabf..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MPMRAIDInterstitialCustomEvent.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPInterstitialCustomEvent.h" -#import "MPMRAIDInterstitialViewController.h" -#import "MPPrivateInterstitialCustomEventDelegate.h" - -@interface MPMRAIDInterstitialCustomEvent : MPInterstitialCustomEvent - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wobjc-property-synthesis" -@property (nonatomic, weak) id delegate; -#pragma clang diagnostic pop - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.m deleted file mode 100644 index ee20030a6..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialCustomEvent.m +++ /dev/null @@ -1,103 +0,0 @@ -// -// MPMRAIDInterstitialCustomEvent.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMRAIDInterstitialCustomEvent.h" -#import "MPLogging.h" - -@interface MPMRAIDInterstitialCustomEvent () - -@property (nonatomic, strong) MPMRAIDInterstitialViewController *interstitial; - -@end - -@implementation MPMRAIDInterstitialCustomEvent - -@synthesize interstitial = _interstitial; - -- (void)requestInterstitialWithCustomEventInfo:(NSDictionary *)info -{ - MPLogInfo(@"Loading MoPub MRAID interstitial"); - self.interstitial = [[MPMRAIDInterstitialViewController alloc] initWithAdConfiguration:[self.delegate configuration]]; - self.interstitial.delegate = self; - - // The MRAID ad view will handle the close button so we don't need the MPInterstitialViewController's close button. - [self.interstitial setCloseButtonStyle:MPInterstitialCloseButtonStyleAlwaysHidden]; - [self.interstitial startLoading]; -} - -- (void)showInterstitialFromRootViewController:(UIViewController *)controller -{ - [self.interstitial presentInterstitialFromViewController:controller]; -} - -#pragma mark - MPMRAIDInterstitialViewControllerDelegate - -- (CLLocation *)location -{ - return [self.delegate location]; -} - -- (NSString *)adUnitId -{ - return [self.delegate adUnitId]; -} - -- (void)interstitialDidLoadAd:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub MRAID interstitial did load"); - [self.delegate interstitialCustomEvent:self didLoadAd:self.interstitial]; -} - -- (void)interstitialDidFailToLoadAd:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub MRAID interstitial did fail"); - [self.delegate interstitialCustomEvent:self didFailToLoadAdWithError:nil]; -} - -- (void)interstitialWillAppear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub MRAID interstitial will appear"); - [self.delegate interstitialCustomEventWillAppear:self]; -} - -- (void)interstitialDidAppear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub MRAID interstitial did appear"); - [self.delegate interstitialCustomEventDidAppear:self]; -} - -- (void)interstitialWillDisappear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub MRAID interstitial will disappear"); - [self.delegate interstitialCustomEventWillDisappear:self]; -} - -- (void)interstitialDidDisappear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub MRAID interstitial did disappear"); - [self.delegate interstitialCustomEventDidDisappear:self]; - - // Deallocate the interstitial as we don't need it anymore. If we don't deallocate the interstitial after dismissal, - // then the html in the webview will continue to run which could lead to bugs such as continuing to play the sound of an inline - // video since the app may hold onto the interstitial ad controller. Moreover, we keep an array of controllers around as well. - self.interstitial = nil; -} - -- (void)interstitialDidReceiveTapEvent:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub MRAID interstitial did receive tap event"); - [self.delegate interstitialCustomEventDidReceiveTapEvent:self]; -} - -- (void)interstitialWillLeaveApplication:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub MRAID interstitial will leave application"); - [self.delegate interstitialCustomEventWillLeaveApplication:self]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.h deleted file mode 100644 index 96b554460..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MPMRAIDInterstitialViewController.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPInterstitialViewController.h" -#import "MPForceableOrientationProtocol.h" - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@protocol MPMRAIDInterstitialViewControllerDelegate; -@class MPAdConfiguration; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPMRAIDInterstitialViewController : MPInterstitialViewController - -- (id)initWithAdConfiguration:(MPAdConfiguration *)configuration; -- (void)startLoading; - -@end - diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.m deleted file mode 100644 index 9715d7e17..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MPMRAIDInterstitialViewController.m +++ /dev/null @@ -1,195 +0,0 @@ -// -// MPMRAIDInterstitialViewController.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMRAIDInterstitialViewController.h" -#import "MPAdConfiguration.h" -#import "MRController.h" - -@interface MPMRAIDInterstitialViewController () - -@property (nonatomic, strong) MPAdConfiguration *configuration; -@property (nonatomic, strong) MRController *mraidController; -@property (nonatomic, strong) UIView *interstitialView; -@property (nonatomic, assign) UIInterfaceOrientationMask supportedOrientationMask; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPMRAIDInterstitialViewController - - -- (id)initWithAdConfiguration:(MPAdConfiguration *)configuration -{ - self = [super init]; - if (self) { - CGFloat width = MAX(configuration.preferredSize.width, 1); - CGFloat height = MAX(configuration.preferredSize.height, 1); - CGRect frame = CGRectMake(0, 0, width, height); - self.mraidController = [[MRController alloc] initWithAdViewFrame:frame - adPlacementType:MRAdViewPlacementTypeInterstitial - delegate:self]; - - self.configuration = configuration; - self.orientationType = [self.configuration orientationType]; - } - return self; -} - -#pragma mark - Public - -- (void)startLoading -{ - [self.mraidController loadAdWithConfiguration:self.configuration]; -} - -- (void)willPresentInterstitial -{ - [self.mraidController disableRequestHandling]; - if ([self.delegate respondsToSelector:@selector(interstitialWillAppear:)]) { - [self.delegate interstitialWillAppear:self]; - } -} - -- (void)didPresentInterstitial -{ - // This ensures that we handle didPresentInterstitial at the end of the run loop, and prevents a bug - // where code is run before UIKit thinks the presentViewController animation is complete, even though - // this is is called from the completion block for said animation. - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0), dispatch_get_main_queue(), ^{ - [self.mraidController handleMRAIDInterstitialDidPresentWithViewController:self]; - if ([self.delegate respondsToSelector:@selector(interstitialDidAppear:)]) { - [self.delegate interstitialDidAppear:self]; - } - }); -} - -- (void)willDismissInterstitial -{ - [self.mraidController disableRequestHandling]; - if ([self.delegate respondsToSelector:@selector(interstitialWillDisappear:)]) { - [self.delegate interstitialWillDisappear:self]; - } -} - -- (void)didDismissInterstitial -{ - if ([self.delegate respondsToSelector:@selector(interstitialDidDisappear:)]) { - [self.delegate interstitialDidDisappear:self]; - } -} - -#pragma mark - MRControllerDelegate - -- (CLLocation *)location -{ - if ([self.delegate respondsToSelector:@selector(location)]) { - return [self.delegate location]; - } - return nil; -} - -- (NSString *)adUnitId -{ - return [self.delegate adUnitId]; -} - -- (MPAdConfiguration *)adConfiguration -{ - return self.configuration; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - return self; -} - -- (void)adDidLoad:(UIView *)adView -{ - [self.interstitialView removeFromSuperview]; - - self.interstitialView = adView; - self.interstitialView.frame = self.view.bounds; - self.interstitialView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - [self.view addSubview:self.interstitialView]; - if (@available(iOS 9.0, *)) { - self.interstitialView.translatesAutoresizingMaskIntoConstraints = NO; - [NSLayoutConstraint activateConstraints:@[ - [self.interstitialView.topAnchor constraintEqualToAnchor:self.view.topAnchor], - [self.interstitialView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor], - [self.interstitialView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor], - [self.interstitialView.bottomAnchor constraintEqualToAnchor:self.view.bottomAnchor], - ]]; - } - - if ([self.delegate respondsToSelector:@selector(interstitialDidLoadAd:)]) { - [self.delegate interstitialDidLoadAd:self]; - } -} - -- (void)adDidFailToLoad:(UIView *)adView -{ - if ([self.delegate respondsToSelector:@selector(interstitialDidFailToLoadAd:)]) { - [self.delegate interstitialDidFailToLoadAd:self]; - } -} - -- (void)adWillClose:(UIView *)adView -{ - [self dismissInterstitialAnimated:YES]; -} - -- (void)adDidClose:(UIView *)adView -{ - // TODO: -} - -- (void)appShouldSuspendForAd:(UIView *)adView -{ - [self.delegate interstitialDidReceiveTapEvent:self]; -} - -- (void)appShouldResumeFromAd:(UIView *)adView -{ - -} - -- (void)setSupportedOrientationMask:(UIInterfaceOrientationMask)supportedOrientationMask -{ - _supportedOrientationMask = supportedOrientationMask; - - // This should be called whenever the return value of -supportedInterfaceOrientations changes. Since the return - // value is based on _supportedOrientationMask, we do that here. Prevents possible rotation bugs. - [UIViewController attemptRotationToDeviceOrientation]; -} - -- (void)rewardedVideoEnded -{ - if ([self.delegate respondsToSelector:@selector(interstitialRewardedVideoEnded)]) { - [self.delegate interstitialRewardedVideoEnded]; - } -} - -#pragma mark - Orientation Handling - -// supportedInterfaceOrientations and shouldAutorotate are for ios 6, 7, and 8. -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= MP_IOS_9_0 -- (UIInterfaceOrientationMask)supportedInterfaceOrientations -#else -- (NSUInteger)supportedInterfaceOrientations -#endif -{ - return ([[UIApplication sharedApplication] mp_supportsOrientationMask:self.supportedOrientationMask]) ? self.supportedOrientationMask : UIInterfaceOrientationMaskAll; -} - -- (BOOL)shouldAutorotate -{ - return YES; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.h deleted file mode 100644 index d6ef943df..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.h +++ /dev/null @@ -1,79 +0,0 @@ -// -// MRBridge.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MRConstants.h" -#import "MPWebView.h" - -@class MRProperty; -@protocol MRBridgeDelegate; - -/** - * The `MRBridge` class is an intermediate object between native code and JavaScript for - * MRAID ads. The MRAID web view communicates events to `MRBridge` which translates them - * down to native code. Likewise, native code will communicate with `MRBridge` to execute - * commands inside the JavaScript. `MRBridge` also inserts mraid.js into the web view when - * loading an ad's HTML. - */ -@interface MRBridge : NSObject - -@property (nonatomic, assign) BOOL shouldHandleRequests; -@property (nonatomic, weak) id delegate; - -- (instancetype)initWithWebView:(MPWebView *)webView delegate:(id)delegate; - -- (void)loadHTMLString:(NSString *)HTML baseURL:(NSURL *)baseURL; - -- (void)fireReadyEvent; -- (void)fireChangeEventForProperty:(MRProperty *)property; -- (void)fireChangeEventsForProperties:(NSArray *)properties; -- (void)fireErrorEventForAction:(NSString *)action withMessage:(NSString *)message; - -/* - * fireSizeChangeEvent: will always execute the javascript to notify mraid bridge that the size of the ad may have - * changed. mraid.js will only fire the change event if the size has actually changed. - */ -- (void)fireSizeChangeEvent:(CGSize)size; - -- (void)fireSetScreenSize:(CGSize)size; -- (void)fireSetPlacementType:(NSString *)placementType; -- (void)fireSetCurrentPositionWithPositionRect:(CGRect)positionRect; -- (void)fireSetDefaultPositionWithPositionRect:(CGRect)positionRect; -- (void)fireSetMaxSize:(CGSize)maxSize; - -@end - -/** - * The delegate of an `MRBridge` object that implements `MRBridgeDelegate` must provide information - * about the state of an MRAID ad through `isLoadingAd` and `hasUserInteractedWithWebView` so `MRBridge` - * can correctly process web view events. The delegate will be notified of specific events that need - * to be handled natively for an MRAID ad. The delegate is also notified of most web view events so it - * can perform necessary actions such as changing the ad's state. - */ -@protocol MRBridgeDelegate - -- (BOOL)isLoadingAd; -- (MRAdViewPlacementType)placementType; -- (BOOL)hasUserInteractedWithWebViewForBridge:(MRBridge *)bridge; -- (UIViewController *)viewControllerForPresentingModalView; - -- (void)nativeCommandWillPresentModalView; -- (void)nativeCommandDidDismissModalView; - -- (void)bridge:(MRBridge *)bridge didFinishLoadingWebView:(MPWebView *)webView; -- (void)bridge:(MRBridge *)bridge didFailLoadingWebView:(MPWebView *)webView error:(NSError *)error; - -- (void)handleNativeCommandCloseWithBridge:(MRBridge *)bridge; -- (void)bridge:(MRBridge *)bridge performActionForMoPubSpecificURL:(NSURL *)url; -- (void)bridge:(MRBridge *)bridge handleDisplayForDestinationURL:(NSURL *)URL; -- (void)bridge:(MRBridge *)bridge handleNativeCommandUseCustomClose:(BOOL)useCustomClose; -- (void)bridge:(MRBridge *)bridge handleNativeCommandSetOrientationPropertiesWithForceOrientationMask:(UIInterfaceOrientationMask)forceOrientationMask; -- (void)bridge:(MRBridge *)bridge handleNativeCommandExpandWithURL:(NSURL *)url useCustomClose:(BOOL)useCustomClose; -- (void)bridge:(MRBridge *)bridge handleNativeCommandResizeWithParameters:(NSDictionary *)parameters; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.m deleted file mode 100644 index f50f79528..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBridge.m +++ /dev/null @@ -1,311 +0,0 @@ -// -// MRBridge.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MRBridge.h" -#import "MPConstants.h" -#import "MPCoreInstanceProvider+MRAID.h" -#import "MPLogging.h" -#import "NSURL+MPAdditions.h" -#import "MPGlobal.h" -#import "MRBundleManager.h" -#import "UIWebView+MPAdditions.h" -#import "MRError.h" -#import "MRProperty.h" -#import "MRNativeCommandHandler.h" - -static NSString * const kMraidURLScheme = @"mraid"; - -@interface MRBridge () - -@property (nonatomic, strong) MPWebView *webView; -@property (nonatomic, strong) MRNativeCommandHandler *nativeCommandHandler; - -@end - -@implementation MRBridge - -- (instancetype)initWithWebView:(MPWebView *)webView delegate:(id)delegate -{ - if (self = [super init]) { - _webView = webView; - _webView.delegate = self; - _nativeCommandHandler = [[MRNativeCommandHandler alloc] initWithDelegate:self]; - _shouldHandleRequests = YES; - _delegate = delegate; - } - - return self; -} - -- (void)dealloc -{ - _webView.delegate = nil; -} - -- (void)loadHTMLString:(NSString *)HTML baseURL:(NSURL *)baseURL -{ - // Bail out if we can't locate mraid.js. - if (![[MPCoreInstanceProvider sharedProvider] isMraidJavascriptAvailable]) { - NSError *error = [NSError errorWithDomain:MoPubMRAIDAdsSDKDomain code:MRErrorMRAIDJSNotFound userInfo:nil]; - [self.delegate bridge:self didFailLoadingWebView:self.webView error:error]; - return; - } - - if (HTML) { - // Execute the javascript in the web view directly. - dispatch_async(dispatch_get_main_queue(), ^{ - [self.webView evaluateJavaScript:[[MPCoreInstanceProvider sharedProvider] mraidJavascript] completionHandler:^(id result, NSError *error){ - [self.webView disableJavaScriptDialogs]; - [self.webView loadHTMLString:HTML baseURL:baseURL]; - }]; - }); - } -} - -- (void)fireReadyEvent -{ - MPLogDebug(@"mraidbridge.fireReadyEvent()"); - [self executeJavascript:@"window.mraidbridge.fireReadyEvent();"]; -} - -- (void)fireChangeEventForProperty:(MRProperty *)property -{ - NSString *JSON = [NSString stringWithFormat:@"{%@}", property]; - - MPLogDebug(@"mraidbridge.fireChangeEvent(%@)", JSON); - [self executeJavascript:@"window.mraidbridge.fireChangeEvent(%@);", JSON]; -} - -- (void)fireChangeEventsForProperties:(NSArray *)properties -{ - NSString *JSON = [NSString stringWithFormat:@"{%@}", [properties componentsJoinedByString:@", "]]; - - MPLogDebug(@"mraidbridge.fireChangeEvent(%@)", JSON); - [self executeJavascript:@"window.mraidbridge.fireChangeEvent(%@);", JSON]; -} - -- (void)fireErrorEventForAction:(NSString *)action withMessage:(NSString *)message -{ - MPLogDebug(@"mraidbridge.fireErrorEvent('%@', '%@')", message, action); - [self executeJavascript:@"window.mraidbridge.fireErrorEvent('%@', '%@');", message, action]; -} - -- (void)fireSizeChangeEvent:(CGSize)size -{ - MPLogDebug(@"mraidbridge.notifySizeChangeEvent(%.1f, %.1f)", size.width, size.height); - [self executeJavascript:@"window.mraidbridge.notifySizeChangeEvent(%.1f, %.1f);", size.width, size.height]; -} - -- (void)fireSetScreenSize:(CGSize)size -{ - MPLogDebug(@"mraidbridge.setScreenSize(%.1f, %.1f)", size.width, size.height); - [self executeJavascript:@"window.mraidbridge.setScreenSize(%.1f, %.1f);", size.width, size.height]; -} - -- (void)fireSetPlacementType:(NSString *)placementType -{ - MPLogDebug(@"mraidbridge.setPlacementType('%@')", placementType); - [self executeJavascript:@"window.mraidbridge.setPlacementType('%@');", placementType]; -} - -- (void)fireSetCurrentPositionWithPositionRect:(CGRect)positionRect -{ - MPLogDebug(@"mraidbridge.setCurrentPosition(%.1f, %.1f, %.1f, %.1f)", positionRect.origin.x, positionRect.origin.y, - positionRect.size.width, positionRect.size.height); - [self executeJavascript:@"window.mraidbridge.setCurrentPosition(%.1f, %.1f, %.1f, %.1f);", positionRect.origin.x, positionRect.origin.y, - positionRect.size.width, positionRect.size.height]; -} - -- (void)fireSetDefaultPositionWithPositionRect:(CGRect)positionRect -{ - MPLogDebug(@"mraidbridge.setDefaultPosition(%.1f, %.1f, %.1f, %.1f)", positionRect.origin.x, positionRect.origin.y, - positionRect.size.width, positionRect.size.height); - [self executeJavascript:@"window.mraidbridge.setDefaultPosition(%.1f, %.1f, %.1f, %.1f);", positionRect.origin.x, positionRect.origin.y, - positionRect.size.width, positionRect.size.height]; -} - -- (void)fireSetMaxSize:(CGSize)maxSize -{ - MPLogDebug(@"mraidbridge.setMaxSize(%.1f, %.1f)", maxSize.width, maxSize.height); - [self executeJavascript:@"window.mraidbridge.setMaxSize(%.1f, %.1f);", maxSize.width, maxSize.height]; -} - -#pragma mark - - -- (BOOL)webView:(MPWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType -{ - NSURL *url = [request URL]; - NSMutableString *urlString = [NSMutableString stringWithString:[url absoluteString]]; - NSString *scheme = url.scheme; - - if ([scheme isEqualToString:kMraidURLScheme]) { - // Some native commands such as useCustomClose should be allowed to run even if we're not handling requests. - // The command handler will make sure we don't execute native commands that aren't allowed to execute while we're not handling requests. - MPLogDebug(@"Trying to process command: %@", urlString); - NSString *command = url.host; - NSDictionary *properties = MPDictionaryFromQueryString(url.query); - [self.nativeCommandHandler handleNativeCommand:command withProperties:properties]; - return NO; - } else if ([url mp_isMoPubScheme]) { - [self.delegate bridge:self performActionForMoPubSpecificURL:url]; - return NO; - } else if ([scheme isEqualToString:@"ios-log"]) { - [urlString replaceOccurrencesOfString:@"%20" - withString:@" " - options:NSLiteralSearch - range:NSMakeRange(0, [urlString length])]; - MPLogDebug(@"Web console: %@", urlString); - return NO; - } - - if (!self.shouldHandleRequests) { - return NO; - } - - if ([url mp_hasTelephoneScheme] || [url mp_hasTelephonePromptScheme]) { - [self.delegate bridge:self handleDisplayForDestinationURL:url]; - return NO; - } - - BOOL isLoading = [self.delegate isLoadingAd]; - BOOL userInteractedWithWebView = [self.delegate hasUserInteractedWithWebViewForBridge:self]; - BOOL safeToAutoloadLink = navigationType == UIWebViewNavigationTypeLinkClicked || userInteractedWithWebView || [url mp_isSafeForLoadingWithoutUserAction]; - - if (!isLoading && (navigationType == UIWebViewNavigationTypeOther || navigationType == UIWebViewNavigationTypeLinkClicked)) { - BOOL iframe = ![request.URL isEqual:request.mainDocumentURL]; - - // If we load a URL from an iFrame that did not originate from a click or - // is a deep link, handle normally and return safeToAutoloadLink. - if (iframe && !((navigationType == UIWebViewNavigationTypeLinkClicked) && ([scheme isEqualToString:@"https"] || [scheme isEqualToString:@"http"]))) { - return safeToAutoloadLink; - } - - // Otherwise, open the URL in a new web view. - [self.delegate bridge:self handleDisplayForDestinationURL:url]; - return NO; - } - - return safeToAutoloadLink; -} - -- (void)webViewDidStartLoad:(MPWebView *)webView -{ - [webView disableJavaScriptDialogs]; -} - -- (void)webViewDidFinishLoad:(MPWebView *)webView -{ - [self.delegate bridge:self didFinishLoadingWebView:webView]; -} - -- (void)webView:(MPWebView *)webView didFailLoadWithError:(NSError *)error -{ - if (error.code == NSURLErrorCancelled) { - return; - } - - [self.delegate bridge:self didFailLoadingWebView:webView error:error]; -} - -#pragma mark - Private - -- (void)executeJavascript:(NSString *)javascript, ... -{ - va_list args; - va_start(args, javascript); - [self executeJavascript:javascript withVarArgs:args]; - va_end(args); -} - -- (void)fireNativeCommandCompleteEvent:(NSString *)command -{ - MPLogDebug(@"mraidbridge.nativeCallComplete('%@')", command); - [self executeJavascript:@"window.mraidbridge.nativeCallComplete('%@');", command]; -} - -- (void)executeJavascript:(NSString *)javascript withVarArgs:(va_list)args -{ - NSString *js = [[NSString alloc] initWithFormat:javascript arguments:args]; - [self.webView stringByEvaluatingJavaScriptFromString:js]; -} - -#pragma mark - MRNativeCommandHandlerDelegate - -- (void)handleMRAIDUseCustomClose:(BOOL)useCustomClose -{ - [self.delegate bridge:self handleNativeCommandUseCustomClose:useCustomClose]; -} - -- (void)handleMRAIDSetOrientationPropertiesWithForceOrientationMask:(UIInterfaceOrientationMask)forceOrientationMask -{ - [self.delegate bridge:self handleNativeCommandSetOrientationPropertiesWithForceOrientationMask:forceOrientationMask]; -} - -- (void)handleMRAIDOpenCallForURL:(NSURL *)URL -{ - [self.delegate bridge:self handleDisplayForDestinationURL:URL]; -} - -- (void)handleMRAIDExpandWithParameters:(NSDictionary *)params -{ - id urlValue = [params objectForKey:@"url"]; - [self.delegate bridge:self handleNativeCommandExpandWithURL:(urlValue == [NSNull null]) ? nil : urlValue - useCustomClose:[[params objectForKey:@"useCustomClose"] boolValue]]; -} - -- (void)handleMRAIDResizeWithParameters:(NSDictionary *)params -{ - [self.delegate bridge:self handleNativeCommandResizeWithParameters:params]; -} - -- (void)handleMRAIDClose -{ - [self.delegate handleNativeCommandCloseWithBridge:self]; -} - -- (void)nativeCommandWillPresentModalView -{ - [self.delegate nativeCommandWillPresentModalView]; -} - -- (void)nativeCommandDidDismissModalView -{ - [self.delegate nativeCommandDidDismissModalView]; -} - -- (void)nativeCommandCompleted:(NSString *)command -{ - [self fireNativeCommandCompleteEvent:command]; -} - -- (void)nativeCommandFailed:(NSString *)command withMessage:(NSString *)message -{ - [self fireErrorEventForAction:command withMessage:message]; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (MRAdViewPlacementType)adViewPlacementType -{ - return [self.delegate placementType]; -} - -- (BOOL)userInteractedWithWebView -{ - return [self.delegate hasUserInteractedWithWebViewForBridge:self]; -} - -- (BOOL)handlingWebviewRequests -{ - return self.shouldHandleRequests; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.h deleted file mode 100644 index a7fb4d2a4..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MRBundleManager.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MRBundleManager : NSObject - -+ (MRBundleManager *)sharedManager; -- (NSString *)mraidPath; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.m deleted file mode 100644 index eab667dda..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRBundleManager.m +++ /dev/null @@ -1,33 +0,0 @@ -// -// MRBundleManager.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MRBundleManager.h" -#import "NSBundle+MPAdditions.h" - -@implementation MRBundleManager - -static MRBundleManager *sharedManager = nil; - -+ (MRBundleManager *)sharedManager -{ - if (!sharedManager) { - sharedManager = [[MRBundleManager alloc] init]; - } - return sharedManager; -} - -- (NSString *)mraidPath -{ - NSBundle *parentBundle = [NSBundle resourceBundleForClass:self.class]; - - NSString *mraidBundlePath = [parentBundle pathForResource:@"MRAID" ofType:@"bundle"]; - NSBundle *mraidBundle = [NSBundle bundleWithPath:mraidBundlePath]; - return [mraidBundle pathForResource:@"mraid" ofType:@"js"]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.h deleted file mode 100644 index da46c3332..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.h +++ /dev/null @@ -1,85 +0,0 @@ -// -// MRCommand.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@class MRCommand; - -@protocol MRCommandDelegate - -- (void)mrCommand:(MRCommand *)command playVideoWithURL:(NSURL *)url; -- (void)mrCommand:(MRCommand *)command shouldUseCustomClose:(BOOL)useCustomClose; -- (void)mrCommand:(MRCommand *)command setOrientationPropertiesWithForceOrientation:(UIInterfaceOrientationMask)forceOrientation; -- (void)mrCommand:(MRCommand *)command openURL:(NSURL *)url; -- (void)mrCommand:(MRCommand *)command expandWithParams:(NSDictionary *)params; -- (void)mrCommand:(MRCommand *)command resizeWithParams:(NSDictionary *)params; -- (void)mrCommandClose:(MRCommand *)command; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRCommand : NSObject - -@property (nonatomic, weak) id delegate; - -+ (id)commandForString:(NSString *)string; - -// returns YES by default for user safety -- (BOOL)requiresUserInteractionForPlacementType:(NSUInteger)placementType; -// This allows commands to run even if the delegate is not handling webview requests. Returns NO by default to avoid race conditions. This is -// primarily used to stop commands that can cause bad side effects while the mraid ad is presenting, dismissing, resizing, expanding and pretty much -// just animating at all. If you decide to return YES for this method, you must make sure that the command can operate safely at any point in time -// during an MRAID ad's lifetime from starting presentation to complete dismissal. -- (BOOL)executableWhileBlockingRequests; -- (BOOL)executeWithParams:(NSDictionary *)params; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRCloseCommand : MRCommand - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRExpandCommand : MRCommand - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRResizeCommand : MRCommand - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRUseCustomCloseCommand : MRCommand - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRSetOrientationPropertiesCommand : MRCommand - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MROpenCommand : MRCommand - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRPlayVideoCommand : MRCommand - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.m deleted file mode 100644 index ec4453efe..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRCommand.m +++ /dev/null @@ -1,336 +0,0 @@ -// -// MRCommand.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MRCommand.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MRConstants.h" - -@implementation MRCommand - -+ (void)initialize { - if (self == [MRCommand self]) { - // Register command classes - [self registerCommand:[MRCloseCommand self]]; - [self registerCommand:[MRExpandCommand self]]; - [self registerCommand:[MRResizeCommand self]]; - [self registerCommand:[MRUseCustomCloseCommand self]]; - [self registerCommand:[MRSetOrientationPropertiesCommand self]]; - [self registerCommand:[MROpenCommand self]]; - [self registerCommand:[MRPlayVideoCommand self]]; - } -} - -+ (NSMutableDictionary *)sharedCommandClassMap -{ - static NSMutableDictionary *sharedMap = nil; - - static dispatch_once_t once; - dispatch_once(&once, ^{ - sharedMap = [[NSMutableDictionary alloc] init]; - }); - - return sharedMap; -} - -+ (void)registerCommand:(Class)commandClass -{ - NSMutableDictionary *map = [self sharedCommandClassMap]; - @synchronized(self) { - [map setValue:commandClass forKey:[commandClass commandType]]; - } -} - -+ (NSString *)commandType -{ - return @"BASE_CMD_TYPE"; -} - -+ (Class)commandClassForString:(NSString *)string -{ - NSMutableDictionary *map = [self sharedCommandClassMap]; - @synchronized(self) { - return [map objectForKey:string]; - } -} - -+ (id)commandForString:(NSString *)string -{ - Class commandClass = [self commandClassForString:string]; - return [[commandClass alloc] init]; -} - -// return YES by default for user safety -- (BOOL)requiresUserInteractionForPlacementType:(NSUInteger)placementType -{ - return YES; -} - -// Default to NO to avoid race conditions. -- (BOOL)executableWhileBlockingRequests -{ - return NO; -} - -- (BOOL)executeWithParams:(NSDictionary *)params -{ - return YES; -} - -- (CGFloat)floatFromParameters:(NSDictionary *)parameters forKey:(NSString *)key -{ - return [self floatFromParameters:parameters forKey:key withDefault:0.0]; -} - -- (CGFloat)floatFromParameters:(NSDictionary *)parameters forKey:(NSString *)key withDefault:(CGFloat)defaultValue -{ - NSString *stringValue = [parameters valueForKey:key]; - return stringValue ? [stringValue floatValue] : defaultValue; -} - -- (BOOL)boolFromParameters:(NSDictionary *)parameters forKey:(NSString *)key -{ - NSString *stringValue = [parameters valueForKey:key]; - return [stringValue isEqualToString:@"true"] || [stringValue isEqualToString:@"1"]; -} - -- (int)intFromParameters:(NSDictionary *)parameters forKey:(NSString *)key -{ - NSString *stringValue = [parameters valueForKey:key]; - return stringValue ? [stringValue intValue] : -1; -} - -- (NSString *)stringFromParameters:(NSDictionary *)parameters forKey:(NSString *)key -{ - NSString *value = [parameters objectForKey:key]; - if (!value || [value isEqual:[NSNull null]]) return nil; - - value = [value stringByTrimmingCharactersInSet: - [NSCharacterSet whitespaceAndNewlineCharacterSet]]; - if (!value || [value isEqual:[NSNull null]] || value.length == 0) return nil; - - return value; -} - -- (NSURL *)urlFromParameters:(NSDictionary *)parameters forKey:(NSString *)key -{ - NSString *value = [self stringFromParameters:parameters forKey:key]; - return [NSURL URLWithString:value]; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRCloseCommand - -+ (NSString *)commandType -{ - return @"close"; -} - -- (BOOL)executeWithParams:(NSDictionary *)params -{ - [self.delegate mrCommandClose:self]; - return YES; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRExpandCommand - -+ (NSString *)commandType -{ - return @"expand"; -} - -- (BOOL)executeWithParams:(NSDictionary *)params -{ - NSURL *url = [self urlFromParameters:params forKey:@"url"]; - - NSDictionary *expandParams = [NSDictionary dictionaryWithObjectsAndKeys: - (url == nil) ? [NSNull null] : url , @"url", - [NSNumber numberWithBool:[self boolFromParameters:params forKey:@"shouldUseCustomClose"]], @"useCustomClose", - nil]; - - [self.delegate mrCommand:self expandWithParams:expandParams]; - - return YES; -} -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRResizeCommand - -+ (NSString *)commandType -{ - return @"resize"; -} - -- (BOOL)executeWithParams:(NSDictionary *)params -{ - [self.delegate mrCommand:self resizeWithParams:params]; - - return YES; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRUseCustomCloseCommand - -// We allow useCustomClose to run while we're blocking requests because it only controls how we present a UIButton. -// It can't present/dismiss any view or view controllers. It also doesn't affect any mraid ad/screen metrics. -- (BOOL)executableWhileBlockingRequests -{ - return YES; -} - -- (BOOL)requiresUserInteractionForPlacementType:(NSUInteger)placementType -{ - return NO; -} - -+ (NSString *)commandType -{ - return @"usecustomclose"; -} - -- (BOOL)executeWithParams:(NSDictionary *)params -{ - [self.delegate mrCommand:self shouldUseCustomClose:[self boolFromParameters:params forKey:@"shouldUseCustomClose"]]; - - return YES; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRSetOrientationPropertiesCommand - -+ (NSString *)commandType -{ - return @"setOrientationProperties"; -} - -- (BOOL)requiresUserInteractionForPlacementType:(NSUInteger)placementType -{ - return NO; -} - -- (BOOL)executeWithParams:(NSDictionary *)params -{ - // We can take the forceOrientation and allowOrientationChange values and boil them down to an orientation mask - // that will represent the intention of the ad. - UIInterfaceOrientationMask forceOrientationMaskValue; - - NSString *forceOrientationString = params[@"forceOrientation"]; - - // Give a default value of "none" for forceOrientationString if it didn't come in through the params. - if (!forceOrientationString) { - forceOrientationString = kOrientationPropertyForceOrientationNoneKey; - } - - // Do not allow orientation changing if we're given a force orientation other than none. Based on the spec, - // we believe that forceOrientation takes precedence over allowOrientationChange and should not allow - // orientation changes when a forceOrientation other than 'none' is given. - if ([forceOrientationString isEqualToString:kOrientationPropertyForceOrientationPortraitKey]) { - forceOrientationMaskValue = UIInterfaceOrientationMaskPortrait; - } else if ([forceOrientationString isEqualToString:kOrientationPropertyForceOrientationLandscapeKey]) { - forceOrientationMaskValue = UIInterfaceOrientationMaskLandscape; - } else { - // Default allowing orientation change to YES. We will change this only if we received a value for this in our params. - BOOL allowOrientationChangeValue = YES; - - // If we end up allowing orientation change, then we're going to allow any orientation. - forceOrientationMaskValue = UIInterfaceOrientationMaskAll; - - NSObject *allowOrientationChangeObj = params[@"allowOrientationChange"]; - - if (allowOrientationChangeObj) { - allowOrientationChangeValue = [self boolFromParameters:params forKey:@"allowOrientationChange"]; - } - - // If we don't allow orientation change, we're locking the user into the current orientation. - if (!allowOrientationChangeValue) { - UIInterfaceOrientation currentOrientation = MPInterfaceOrientation(); - - if (UIInterfaceOrientationIsLandscape(currentOrientation)) { - forceOrientationMaskValue = UIInterfaceOrientationMaskLandscape; - } else if (currentOrientation == UIInterfaceOrientationPortrait) { - forceOrientationMaskValue = UIInterfaceOrientationMaskPortrait; - } else if (currentOrientation == UIInterfaceOrientationPortraitUpsideDown) { - forceOrientationMaskValue = UIInterfaceOrientationMaskPortraitUpsideDown; - } - } - } - - [self.delegate mrCommand:self setOrientationPropertiesWithForceOrientation:forceOrientationMaskValue]; - - return YES; -} -/* - * We allow setOrientationProperties to run while we're blocking requests because this command can occur during the presentation - * animation of an interstitial, and has a strong effect on how an ad is presented so we want to make sure it's executed. - * - * Even though we return YES here, updating orientation while blocking requests is not safe. MRController receives the appropriate - * delegate call, and caches the intended call in a block, which it executes when request-blocking is disabled. - */ -- (BOOL)executableWhileBlockingRequests -{ - return YES; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MROpenCommand - -+ (NSString *)commandType -{ - return @"open"; -} - -- (BOOL)executeWithParams:(NSDictionary *)params -{ - [self.delegate mrCommand:self openURL:[self urlFromParameters:params forKey:@"url"]]; - - return YES; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRPlayVideoCommand - -+ (NSString *)commandType -{ - return @"playVideo"; -} - -- (BOOL)requiresUserInteractionForPlacementType:(NSUInteger)placementType -{ - // allow interstitials to auto-play video - return placementType != MRAdViewPlacementTypeInterstitial; -} - -- (BOOL)executeWithParams:(NSDictionary *)params -{ - [self.delegate mrCommand:self playVideoWithURL:[self urlFromParameters:params forKey:@"uri"]]; - - return YES; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.h deleted file mode 100644 index 24eadd2f8..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MRConstants.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -enum { - MRAdViewStateHidden, - MRAdViewStateDefault, - MRAdViewStateExpanded, - MRAdViewStateResized -}; -typedef NSUInteger MRAdViewState; - -enum { - MRAdViewPlacementTypeInline, - MRAdViewPlacementTypeInterstitial -}; -typedef NSUInteger MRAdViewPlacementType; - -extern NSString *const kOrientationPropertyForceOrientationPortraitKey; -extern NSString *const kOrientationPropertyForceOrientationLandscapeKey; -extern NSString *const kOrientationPropertyForceOrientationNoneKey; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.m deleted file mode 100644 index cecb1a027..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRConstants.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// MRConstants.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -NSString *const kOrientationPropertyForceOrientationPortraitKey = @"portrait"; -NSString *const kOrientationPropertyForceOrientationLandscapeKey = @"landscape"; -NSString *const kOrientationPropertyForceOrientationNoneKey = @"none"; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.h deleted file mode 100644 index 43b1367f5..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.h +++ /dev/null @@ -1,83 +0,0 @@ -// -// MRController.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MRConstants.h" -#import "MPMRAIDInterstitialViewController.h" - -@protocol MRControllerDelegate; -@class MPAdConfiguration; -@class CLLocation; -@class MPWebView; -@class MPViewabilityTracker; - -/** - * The `MRController` class is used to load and interact with MRAID ads. - * It contains two MRAID ad views and uses a separate `MRBridge` to - * communicate to each view. `MRController` handles view-related MRAID - * native calls such as expand(), resize(), close(), and open(). - */ -@interface MRController : NSObject - -@property (nonatomic, readonly) MPWebView *mraidWebView; -@property (nonatomic, readonly) MPViewabilityTracker *viewabilityTracker; -@property (nonatomic, weak) id delegate; - -- (instancetype)initWithAdViewFrame:(CGRect)adViewFrame - adPlacementType:(MRAdViewPlacementType)placementType - delegate:(id)delegate; - -- (void)loadAdWithConfiguration:(MPAdConfiguration *)configuration; -- (void)handleMRAIDInterstitialDidPresentWithViewController:(MPMRAIDInterstitialViewController *)viewController; -- (void)enableRequestHandling; -- (void)disableRequestHandling; - -@end - -/** - * The `MRControllerDelegate` will relay specific events such as ad loading to - * the object that implements the delegate. It also requires information - * such as adUnitId, adConfiguation, and location in order to use its - * ad alert manager. - **/ -@protocol MRControllerDelegate - -@required - -- (NSString *)adUnitId; -- (MPAdConfiguration *)adConfiguration; -- (CLLocation *)location; - -// Retrieves the view controller from which modal views should be presented. -- (UIViewController *)viewControllerForPresentingModalView; - -// Called when the ad is about to display modal content (thus taking over the screen). -- (void)appShouldSuspendForAd:(UIView *)adView; - -// Called when the ad has dismissed any modal content (removing any on-screen takeovers). -- (void)appShouldResumeFromAd:(UIView *)adView; - -@optional - -// Called when the ad loads successfully. -- (void)adDidLoad:(UIView *)adView; - -// Called when the ad fails to load. -- (void)adDidFailToLoad:(UIView *)adView; - -// Called just before the ad closes. -- (void)adWillClose:(UIView *)adView; - -// Called just after the ad has closed. -- (void)adDidClose:(UIView *)adView; - -// Called after the rewarded video finishes playing -- (void)rewardedVideoEnded; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.m deleted file mode 100644 index 9f4915c6d..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRController.m +++ /dev/null @@ -1,1224 +0,0 @@ -// -// MRController.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MRController.h" -#import "MRBridge.h" -#import "MRCommand.h" -#import "MRProperty.h" -#import "MPAdAlertManager.h" -#import "MPAdConfiguration.h" -#import "MPAdDestinationDisplayAgent.h" -#import "MRExpandModalViewController.h" -#import "MPCoreInstanceProvider.h" -#import "MPClosableView.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MPTimer.h" -#import "NSHTTPURLResponse+MPAdditions.h" -#import "NSURL+MPAdditions.h" -#import "UIWebView+MPAdditions.h" -#import "MPForceableOrientationProtocol.h" -#import "MPAPIEndPoints.h" -#import "MoPub.h" -#import "MPViewabilityTracker.h" -#import "MPHTTPNetworkSession.h" -#import "MPURLRequest.h" - -static const NSTimeInterval kAdPropertyUpdateTimerInterval = 1.0; -static const NSTimeInterval kMRAIDResizeAnimationTimeInterval = 0.3; - -static NSString *const kMRAIDCommandExpand = @"expand"; -static NSString *const kMRAIDCommandResize = @"resize"; - -@interface MRController () - -@property (nonatomic) MPAdConfiguration *adConfiguration; -@property (nonatomic, strong) MRBridge *mraidBridge; -@property (nonatomic, strong) MRBridge *mraidBridgeTwoPart; -@property (nonatomic, strong) MPClosableView *mraidAdView; -@property (nonatomic, strong) MPClosableView *mraidAdViewTwoPart; -@property (nonatomic, strong) UIView *resizeBackgroundView; -@property (nonatomic, strong) MPTimer *adPropertyUpdateTimer; -@property (nonatomic, assign) MRAdViewPlacementType placementType; -@property (nonatomic, strong) MRExpandModalViewController *expandModalViewController; -@property (nonatomic, weak) MPMRAIDInterstitialViewController *interstitialViewController; -@property (nonatomic, assign) CGRect mraidDefaultAdFrame; -@property (nonatomic, assign) CGRect mraidDefaultAdFrameInKeyWindow; -@property (nonatomic, assign) CGSize currentAdSize; -@property (nonatomic, assign) NSUInteger modalViewCount; -@property (nonatomic, assign) MRAdViewState currentState; -@property (nonatomic, assign) BOOL shouldUseUIWebView; -// Track the original super view for when we move the ad view to the key window for a 1-part expand. -@property (nonatomic, weak) UIView *originalSuperview; -@property (nonatomic, assign) BOOL isViewable; -@property (nonatomic, assign) BOOL isAnimatingAdSize; -@property (nonatomic, assign) BOOL isAdLoading; -// Whether or not an interstitial requires precaching. Does not affect banners. -@property (nonatomic, assign) BOOL adRequiresPrecaching; -@property (nonatomic, assign) BOOL isAdVastVideoPlayer; -@property (nonatomic, assign) BOOL firedReadyEventForDefaultAd; - -// Points to mraidAdView (one-part expand) or mraidAdViewTwoPart (two-part expand) while expanded. -@property (nonatomic, strong) MPClosableView *expansionContentView; - -@property (nonatomic, strong) MPAdDestinationDisplayAgent *destinationDisplayAgent; -@property (nonatomic, strong) id adAlertManager; -@property (nonatomic, strong) id adAlertManagerTwoPart; - -// Use UIInterfaceOrientationMaskALL to specify no forcing. -@property (nonatomic, assign) UIInterfaceOrientationMask forceOrientationMask; - -@property (nonatomic, assign) UIInterfaceOrientation currentInterfaceOrientation; - -@property (nonatomic, copy) void (^forceOrientationAfterAnimationBlock)(void); - -@property (nonatomic, readwrite) MPViewabilityTracker *viewabilityTracker; -@property (nonatomic, readwrite) MPWebView *mraidWebView; - -// Networking -@property (nonatomic, strong) NSURLSessionTask *task; - -@end - -@implementation MRController - -- (instancetype)initWithAdViewFrame:(CGRect)adViewFrame - adPlacementType:(MRAdViewPlacementType)placementType - delegate:(id)delegate -{ - if (self = [super init]) { - _placementType = placementType; - _currentState = MRAdViewStateDefault; - _forceOrientationMask = UIInterfaceOrientationMaskAll; - _isAnimatingAdSize = NO; - _firedReadyEventForDefaultAd = NO; - _currentAdSize = CGSizeZero; - - _mraidDefaultAdFrame = adViewFrame; - - _adPropertyUpdateTimer = [[MPCoreInstanceProvider sharedProvider] buildMPTimerWithTimeInterval:kAdPropertyUpdateTimerInterval - target:self - selector:@selector(updateMRAIDProperties) - repeats:YES]; - _adPropertyUpdateTimer.runLoopMode = NSRunLoopCommonModes; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(viewEnteredBackground) - name:UIApplicationDidEnterBackgroundNotification - object:nil]; - - //Setting the frame here is irrelevant - we update it whenever an ad resizes to match the - //application frame. - _resizeBackgroundView = [[UIView alloc] initWithFrame:adViewFrame]; - _resizeBackgroundView.backgroundColor = [UIColor clearColor]; - - _destinationDisplayAgent = [MPAdDestinationDisplayAgent agentWithDelegate:self]; - - _adAlertManager = [[MPCoreInstanceProvider sharedProvider] buildMPAdAlertManagerWithDelegate:self]; - _adAlertManagerTwoPart = [[MPCoreInstanceProvider sharedProvider] buildMPAdAlertManagerWithDelegate:self]; - - _delegate = delegate; - } - - return self; -} - -- (void)dealloc -{ - [self.viewabilityTracker stopTracking]; - - // Transfer delegation to the expand modal view controller in the event the modal is still being presented so it can dismiss itself. - _expansionContentView.delegate = _expandModalViewController; - - [_adPropertyUpdateTimer invalidate]; - [[NSNotificationCenter defaultCenter] removeObserver:self]; -} - -#pragma mark - Public - -- (void)loadAdWithConfiguration:(MPAdConfiguration *)configuration -{ - self.adConfiguration = configuration; - self.isAdLoading = YES; - self.adRequiresPrecaching = configuration.precacheRequired; - self.isAdVastVideoPlayer = configuration.isVastVideoPlayer; - self.shouldUseUIWebView = self.isAdVastVideoPlayer; - - self.mraidWebView = [self buildMRAIDWebViewWithFrame:self.mraidDefaultAdFrame - forceUIWebView:self.shouldUseUIWebView]; - self.mraidWebView.shouldConformToSafeArea = [self isInterstitialAd]; - - self.mraidBridge = [[MRBridge alloc] initWithWebView:self.mraidWebView delegate:self]; - self.mraidAdView = [[MPClosableView alloc] initWithFrame:self.mraidDefaultAdFrame - webView:self.mraidWebView - delegate:self]; - if (self.placementType == MRAdViewPlacementTypeInterstitial) { - self.mraidAdView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - } - - [self initAdAlertManager:self.adAlertManager forAdView:self.mraidAdView]; - - // Initially turn off the close button for default banner MRAID ads while defaulting to turning it on for interstitials. - if (self.placementType == MRAdViewPlacementTypeInline) { - self.mraidAdView.closeButtonType = MPClosableViewCloseButtonTypeNone; - } else if (self.placementType == MRAdViewPlacementTypeInterstitial) { - self.mraidAdView.closeButtonType = MPClosableViewCloseButtonTypeTappableWithImage; - } - - [self init3rdPartyViewabilityTrackers]; - - // This load is guaranteed to never be called for a two-part expand so we know we need to load the HTML into the default web view. - NSString *HTML = [configuration adResponseHTMLString]; - [self.mraidBridge loadHTMLString:HTML - baseURL:[NSURL URLWithString:[MPAPIEndpoints baseURL]] - ]; - -} - -- (void)handleMRAIDInterstitialDidPresentWithViewController:(MPMRAIDInterstitialViewController *)viewController -{ - self.interstitialViewController = viewController; - [self enableRequestHandling]; - [self checkViewability]; - - // If viewability tracking has been deferred (i.e., if this is a non-banner ad), start tracking here now that the - // ad has been presented. If viewability tracking was not deferred, we're already tracking and there's no need to - // call start tracking. - if (![self shouldStartViewabilityDuringInitialization]) { - [self.viewabilityTracker startTracking]; - } -} - -- (void)enableRequestHandling -{ - self.mraidBridge.shouldHandleRequests = YES; - self.mraidBridgeTwoPart.shouldHandleRequests = YES; - // If orientation has been forced while requests are disabled (during animation), we need to execute that command through the block forceOrientationAfterAnimationBlock() after the presentation completes. - if (self.forceOrientationAfterAnimationBlock) { - self.forceOrientationAfterAnimationBlock(); - self.forceOrientationAfterAnimationBlock = nil; - } -} - -- (void)disableRequestHandling -{ - self.mraidBridge.shouldHandleRequests = NO; - self.mraidBridgeTwoPart.shouldHandleRequests = NO; - [self.destinationDisplayAgent cancel]; -} - -#pragma mark - Loading Two Part Expand - -- (void)loadTwoPartCreativeFromURL:(NSURL *)url -{ - self.isAdLoading = YES; - - MPURLRequest * request = [MPURLRequest requestWithURL:url]; - - __weak __typeof__(self) weakSelf = self; - self.task = [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - __typeof__(self) strongSelf = weakSelf; - - NSURL *currentRequestUrl = strongSelf.task.currentRequest.URL; - [strongSelf connectionDidFinishLoadingData:data withResponse:response fromRequestUrl:currentRequestUrl]; - } errorHandler:^(NSError * _Nonnull error) { - __typeof__(self) strongSelf = weakSelf; - [strongSelf didFailWithError:error]; - }]; -} - -- (void)didFailWithError:(NSError *)error -{ - self.isAdLoading = NO; - // No matter what, show the close button on the expanded view. - self.expansionContentView.closeButtonType = MPClosableViewCloseButtonTypeTappableWithImage; - [self.mraidBridge fireErrorEventForAction:kMRAIDCommandExpand withMessage:@"Could not load URL."]; -} - -- (void)connectionDidFinishLoadingData:(NSData *)data withResponse:(NSHTTPURLResponse *)response fromRequestUrl:(NSURL *)requestUrl -{ - // Extract the response encoding type. - NSDictionary *headers = [response allHeaderFields]; - NSString *contentType = [headers objectForKey:kMoPubHTTPHeaderContentType]; - NSStringEncoding responseEncoding = [response stringEncodingFromContentType:contentType]; - - NSString *str = [[NSString alloc] initWithData:data encoding:responseEncoding]; - [self.mraidBridgeTwoPart loadHTMLString:str baseURL:requestUrl]; -} - -#pragma mark - Private - -- (void)init3rdPartyViewabilityTrackers -{ - self.viewabilityTracker = [[MPViewabilityTracker alloc] - initWithAdView:self.mraidWebView - isVideo:self.isAdVastVideoPlayer - startTrackingImmediately:[self shouldStartViewabilityDuringInitialization]]; - [self.viewabilityTracker registerFriendlyObstructionView:self.mraidAdView.closeButton]; -} - -- (BOOL)shouldStartViewabilityDuringInitialization -{ - // If viewabile impression tracking experiment is enabled, we defer viewability trackers until - // ad view is at least x pixels on screen for y seconds, where x and y are configurable values defined in server. - if (self.adConfiguration.visibleImpressionTrackingEnabled) { - return NO; - } - - return ![self isInterstitialAd]; -} - -- (BOOL)isInterstitialAd -{ - return (self.placementType == MRAdViewPlacementTypeInterstitial); -} - -- (void)initAdAlertManager:(id)adAlertManager forAdView:(MPClosableView *)adView -{ - adAlertManager.adConfiguration = [self.delegate adConfiguration]; - adAlertManager.adUnitId = [self.delegate adUnitId]; - adAlertManager.targetAdView = adView; - adAlertManager.location = [self.delegate location]; - [adAlertManager beginMonitoringAlerts]; -} - -- (MPClosableView *)adViewForBridge:(MRBridge *)bridge -{ - if (bridge == self.mraidBridgeTwoPart) { - return self.mraidAdViewTwoPart; - } - - return self.mraidAdView; -} - -- (MRBridge *)bridgeForAdView:(MPClosableView *)view -{ - if (view == self.mraidAdViewTwoPart) { - return self.mraidBridgeTwoPart; - } - - return self.mraidBridge; -} - -- (MPClosableView *)activeView -{ - if (self.currentState == MRAdViewStateExpanded) { - return self.expansionContentView; - } - - return self.mraidAdView; -} - -- (MRBridge *)bridgeForActiveAdView -{ - MRBridge *bridge = [self bridgeForAdView:[self activeView]]; - return bridge; -} - -- (MPWebView *)buildMRAIDWebViewWithFrame:(CGRect)frame forceUIWebView:(BOOL)forceUIWebView -{ - MPWebView *webView = [[MPWebView alloc] initWithFrame:frame forceUIWebView:forceUIWebView]; - webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - webView.backgroundColor = [UIColor clearColor]; - webView.clipsToBounds = YES; - webView.opaque = NO; - [webView mp_setScrollable:NO]; - - return webView; -} - -#pragma mark - Orientation Notifications - -- (void)orientationDidChange:(NSNotification *)notification -{ - // We listen for device notification changes because at that point our ad's frame is in - // the correct state; however, MRAID updates should only happen when the interface changes, so the update logic is only executed if the interface orientation has changed. - - //MPInterfaceOrientation is guaranteed to be the new orientation at this point. - UIInterfaceOrientation newInterfaceOrientation = MPInterfaceOrientation(); - if (newInterfaceOrientation != self.currentInterfaceOrientation) { - // Update all properties and fire a size change event. - [self updateMRAIDProperties]; - - //According to MRAID Specs, a resized ad should close when there's an orientation change - //due to unpredictability of the new layout. - if (self.currentState == MRAdViewStateResized) { - [self close]; - } - - self.currentInterfaceOrientation = newInterfaceOrientation; - } -} - -#pragma mark - Executing Javascript - -- (void)initializeLoadedAdForBridge:(MRBridge *)bridge -{ - // Set up some initial properties so mraid can operate. - MPLogDebug(@"Injecting initial JavaScript state."); - NSArray *startingMraidProperties = @[[MRHostSDKVersionProperty defaultProperty], - [MRPlacementTypeProperty propertyWithType:self.placementType], - [MRSupportsProperty defaultProperty], - [MRStateProperty propertyWithState:self.currentState] - ]; - - [bridge fireChangeEventsForProperties:startingMraidProperties]; - - [self updateMRAIDProperties]; - - [bridge fireReadyEvent]; -} - -- (void)fireChangeEventToBothBridgesForProperty:(MRProperty *)property -{ - [self.mraidBridge fireChangeEventForProperty:property]; - [self.mraidBridgeTwoPart fireChangeEventForProperty:property]; -} - -#pragma mark - Resize Helpers - -- (CGRect)adjustedFrameForFrame:(CGRect)frame allowOffscreen:(BOOL)allowOffscreen -{ - if (allowOffscreen) { - return frame; - } - - CGRect applicationFrame = MPApplicationFrame(); - CGFloat applicationWidth = CGRectGetWidth(applicationFrame); - CGFloat applicationHeight = CGRectGetHeight(applicationFrame); - CGFloat adFrameWidth = CGRectGetWidth(frame); - CGFloat adFrameHeight = CGRectGetHeight(frame); - - //Checking that the ad's frame falls offscreen, and then it is smaller than the screen's bounds (so when - //moved onscreen, it will fit). If not, we bail out, and validation is done separately. - if (!CGRectContainsRect(applicationFrame, frame) && adFrameWidth <= applicationWidth && adFrameHeight <= applicationHeight) { - - CGFloat applicationMinX = CGRectGetMinX(applicationFrame); - CGFloat applicationMaxX = CGRectGetMaxX(applicationFrame); - CGFloat adFrameMinX = CGRectGetMinX(frame); - CGFloat adFrameMaxX = CGRectGetMaxX(frame); - - if (adFrameMinX < applicationMinX) { - frame.origin.x += applicationMinX - adFrameMinX; - } else if (adFrameMaxX > applicationMaxX) { - frame.origin.x -= adFrameMaxX - applicationMaxX; - } - - CGFloat applicationMinY = CGRectGetMinY(applicationFrame); - CGFloat applicationMaxY = CGRectGetMaxY(applicationFrame); - CGFloat adFrameMinY = CGRectGetMinY(frame); - CGFloat adFrameMaxY = CGRectGetMaxY(frame); - - if (adFrameMinY < applicationMinY) { - frame.origin.y += applicationMinY - adFrameMinY; - } else if (adFrameMaxY > applicationMaxY) { - frame.origin.y -= adFrameMaxY - applicationMaxY; - } - } - - return frame; -} - -- (BOOL)isValidResizeFrame:(CGRect)frame allowOffscreen:(BOOL)allowOffscreen -{ - BOOL valid = YES; - if (!allowOffscreen && !CGRectContainsRect(MPApplicationFrame(), frame)) { - valid = NO; - } else if (CGRectGetWidth(frame) < 50.0f || CGRectGetHeight(frame) < 50.0f) { - valid = NO; - } - - return valid; -} - -- (BOOL)isValidResizeCloseButtonPlacementInFrame:(CGRect)newFrame -{ - CGRect closeButtonFrameForResize = MPClosableViewCustomCloseButtonFrame(newFrame.size, self.mraidAdView.closeButtonLocation); - //Manually calculating Button's Frame in the window (newFrame's soon-to-be superview) because newFrame is not - //part of the view hierarchy yet. - CGRect closeButtonFrameInWindow = CGRectOffset(closeButtonFrameForResize, CGRectGetMinX(newFrame), CGRectGetMinY(newFrame)); - - return CGRectContainsRect(MPApplicationFrame(), closeButtonFrameInWindow); -} - -- (MPClosableViewCloseButtonLocation)adCloseButtonLocationFromString:(NSString *)closeButtonLocationString -{ - if ([closeButtonLocationString isEqualToString:@"top-left"]) { - return MPClosableViewCloseButtonLocationTopLeft; - } else if ([closeButtonLocationString isEqualToString:@"top-center"]) { - return MPClosableViewCloseButtonLocationTopCenter; - } else if ([closeButtonLocationString isEqualToString:@"bottom-left"]) { - return MPClosableViewCloseButtonLocationBottomLeft; - } else if ([closeButtonLocationString isEqualToString:@"bottom-center"]) { - return MPClosableViewCloseButtonLocationBottomCenter; - } else if ([closeButtonLocationString isEqualToString:@"bottom-right"]) { - return MPClosableViewCloseButtonLocationBottomRight; - } else if ([closeButtonLocationString isEqualToString:@"center"]) { - return MPClosableViewCloseButtonLocationCenter; - } else { - return MPClosableViewCloseButtonLocationTopRight; - } -} - -- (void)animateViewFromDefaultStateToResizedState:(MPClosableView *)view withFrame:(CGRect)newFrame -{ - [self willBeginAnimatingAdSize]; - - [UIView animateWithDuration:kMRAIDResizeAnimationTimeInterval animations:^{ - self.mraidAdView.frame = newFrame; - } completion:^(BOOL finished) { - [self changeStateTo:MRAdViewStateResized]; - [self didEndAnimatingAdSize]; - }]; -} - -#pragma mark - Expand Helpers - -- (void)presentExpandModalViewControllerWithView:(MPClosableView *)view animated:(BOOL)animated -{ - [self presentExpandModalViewControllerWithView:view animated:animated completion:nil]; -} - -- (void)presentExpandModalViewControllerWithView:(MPClosableView *)view animated:(BOOL)animated completion:(void (^)(void))completionBlock -{ - [self willBeginAnimatingAdSize]; - - self.expandModalViewController = [[MRExpandModalViewController alloc] initWithOrientationMask:self.forceOrientationMask]; - [self.expandModalViewController.view addSubview:view]; - view.frame = self.expandModalViewController.view.bounds; - view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - self.expandModalViewController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve; - [self.expandModalViewController hideStatusBar]; - - [[self.delegate viewControllerForPresentingModalView] presentViewController:self.expandModalViewController - animated:animated - completion:^{ - self.currentInterfaceOrientation = MPInterfaceOrientation(); - [self didEndAnimatingAdSize]; - - if (completionBlock) { - completionBlock(); - } - }]; -} - -- (void)willBeginAnimatingAdSize -{ - self.isAnimatingAdSize = YES; - [self disableRequestHandling]; -} - -- (void)didEndAnimatingAdSize -{ - self.isAnimatingAdSize = NO; - [self enableRequestHandling]; -} - -#pragma mark - Close Helpers - -- (void)close -{ - switch (self.currentState) { - case MRAdViewStateDefault: - [self closeFromDefaultState]; - break; - case MRAdViewStateExpanded: - [self closeFromExpandedState]; - break; - case MRAdViewStateResized: - [self closeFromResizedState]; - break; - case MRAdViewStateHidden: - break; - default: - break; - } -} - -- (void)closeFromDefaultState -{ - [self adWillClose]; - - self.mraidAdView.hidden = YES; - [self changeStateTo:MRAdViewStateHidden]; - - [self adDidClose]; -} - -- (void)closeFromExpandedState -{ - self.mraidAdView.closeButtonType = MPClosableViewCloseButtonTypeNone; - - // Immediately re-parent the ad so it will show up as the expand modal goes away rather than after. - [self.originalSuperview addSubview:self.mraidAdView]; - self.mraidAdView.frame = self.mraidDefaultAdFrame; - if (self.placementType != MRAdViewPlacementTypeInterstitial) { - self.mraidAdView.autoresizingMask = UIViewAutoresizingNone; - } - - // Track isAnimatingAdSize because we have a timer that will update the mraid ad properties. We don't want to examine our views when - // they're in a transitional state. - [self willBeginAnimatingAdSize]; - - // Tell the modal view controller to restore the state of the status bar back to what the application had it set to. - [self.expandModalViewController restoreStatusBarVisibility]; - __weak __typeof__(self) weakSelf = self; - [self.expandModalViewController dismissViewControllerAnimated:YES completion:^{ - __typeof__(self) strongSelf = weakSelf; - - - [strongSelf didEndAnimatingAdSize]; - [strongSelf adDidDismissModalView]; - - // Get rid of the bridge and view if we are closing from two-part expand. - if (strongSelf.mraidAdViewTwoPart) { - [strongSelf.adAlertManagerTwoPart endMonitoringAlerts]; - strongSelf.mraidAdViewTwoPart = nil; - strongSelf.mraidBridgeTwoPart = nil; - } - - strongSelf.expansionContentView = nil; - strongSelf.expandModalViewController = nil; - - // Waiting this long to change the state results in some awkward animation. The full screen ad will briefly appear in the banner's - // frame after the modal dismisses. However, this is a much safer time to change the state and results in less side effects. - [strongSelf changeStateTo:MRAdViewStateDefault]; - }]; -} - -- (void)closeFromResizedState -{ - self.mraidAdView.closeButtonType = MPClosableViewCloseButtonTypeNone; - - [self willBeginAnimatingAdSize]; - - [UIView animateWithDuration:kMRAIDResizeAnimationTimeInterval animations:^{ - self.mraidAdView.frame = self.mraidDefaultAdFrameInKeyWindow; - } completion:^(BOOL finished) { - [self.resizeBackgroundView removeFromSuperview]; - [self.originalSuperview addSubview:self.mraidAdView]; - self.mraidAdView.frame = self.mraidDefaultAdFrame; - [self changeStateTo:MRAdViewStateDefault]; - [self didEndAnimatingAdSize]; - [self adDidDismissModalView]; - }]; -} - -#pragma mark - - -- (BOOL)isLoadingAd -{ - return self.isAdLoading; -} - -- (BOOL)hasUserInteractedWithWebViewForBridge:(MRBridge *)bridge -{ - // inline videos seem to delay tap gesture recognition so that we get the click through - // request in the webview delegate BEFORE we get the gesture recognizer triggered callback. For now - // excuse all MRAID interstitials from the user interaction requirement. We do the same for expanded ads. - // We can go ahead and return true for either bridge (default, expanded) if the current state is expanded since - // the fact we're in expanded means that the first webview has been tapped. Then we just don't require the check - // for the expanded bridge. - if (self.placementType == MRAdViewPlacementTypeInterstitial || self.currentState == MRAdViewStateExpanded) { - return YES; - } - - MPClosableView *adView = [self adViewForBridge:bridge]; - return adView.wasTapped; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - UIViewController *delegateVC = [self.delegate viewControllerForPresentingModalView]; - - // Use the expand modal view controller as the presenting modal if it's being presented. - if (self.expandModalViewController.presentingViewController != nil) { - return self.expandModalViewController; - } - - return delegateVC; -} - -- (void)nativeCommandWillPresentModalView -{ - [self adWillPresentModalView]; -} - -- (void)nativeCommandDidDismissModalView -{ - [self adDidDismissModalView]; -} - -- (void)bridge:(MRBridge *)bridge didFinishLoadingWebView:(MPWebView *)webView -{ - // Loading an iframe can cause this method to execute and could potentially cause us to initialize the javascript for a two-part expand - // and fire the ready event more than once. The isAdLoading flags helps us prevent that from happening. - if (self.isAdLoading) { - - self.isAdLoading = NO; - - if (!self.adRequiresPrecaching) { - // Only tell the delegate that the ad loaded when the view is the default ad view and not a two-part ad view. - if (bridge == self.mraidBridge) { - // We do not intialize the javascript/fire ready event, or start our timer for a banner load yet. We wait until - // the ad is in the view hierarchy. We are notified by the view when it is potentially added to the hierarchy in - // -closableView:didMoveToWindow:. - [self adDidLoad]; - } else if (bridge == self.mraidBridgeTwoPart) { - // If the default ad was already viewable, we need to simply tell the two part it is viewable. Otherwise, if the default - // ad wasn't viewable, we need to update the state across both webviews and the controller. - if (self.isViewable) { - [self.mraidBridgeTwoPart fireChangeEventForProperty:[MRViewableProperty propertyWithViewable:YES]]; - } else { - [self updateViewabilityWithBool:YES]; - } - - // We initialize javascript and fire the ready event for the two part ad view once it loads - // since it'll already be in the view hierarchy. - [self initializeLoadedAdForBridge:bridge]; - } - } - } -} - -- (void)bridge:(MRBridge *)bridge didFailLoadingWebView:(MPWebView *)webView error:(NSError *)error -{ - self.isAdLoading = NO; - - if (bridge == self.mraidBridge) { - // We need to report that the ad failed to load when the default ad fails to load. - [self adDidFailToLoad]; - } else if (bridge == self.mraidBridgeTwoPart) { - // Always show the close button when the two-part expand fails. - self.expansionContentView.closeButtonType = MPClosableViewCloseButtonTypeTappableWithImage; - - // For two-part expands, we don't want to tell the delegate anything went wrong since the ad did successfully load. - // We will fire an error to the javascript though. - [self.mraidBridge fireErrorEventForAction:kMRAIDCommandExpand withMessage:@"Could not load URL."]; - } -} - -- (void)bridge:(MRBridge *)bridge performActionForMoPubSpecificURL:(NSURL *)url -{ - MPLogDebug(@"MRController - loading MoPub URL: %@", url); - MPMoPubHostCommand command = [url mp_mopubHostCommand]; - if (command == MPMoPubHostCommandPrecacheComplete && self.adRequiresPrecaching) { - [self adDidLoad]; - } else if (command == MPMoPubHostCommandFailLoad) { - [self adDidFailToLoad]; - } else if (command == MPMoPubHostCommandRewardedVideoEnded) { - [self.delegate rewardedVideoEnded]; - } else { - MPLogWarn(@"MRController - unsupported MoPub URL: %@", [url absoluteString]); - } -} - -- (void)handleNativeCommandCloseWithBridge:(MRBridge *)bridge -{ - [self close]; -} - -- (void)bridge:(MRBridge *)bridge handleDisplayForDestinationURL:(NSURL *)URL -{ - if ([self hasUserInteractedWithWebViewForBridge:bridge]) { - [self.destinationDisplayAgent displayDestinationForURL:URL]; - } -} - -- (void)bridge:(MRBridge *)bridge handleNativeCommandUseCustomClose:(BOOL)useCustomClose -{ - // Calling useCustomClose() for banners won't take effect until expand() is called so we don't need to take - // any action here as useCustomClose will be given to us when expand is called. Interstitials can have their - // close buttons changed at any time though. - if (self.placementType != MRAdViewPlacementTypeInterstitial) { - return; - } - - [self configureCloseButtonForView:self.mraidAdView forUseCustomClose:useCustomClose]; -} - -- (void)configureCloseButtonForView:(MPClosableView *)view forUseCustomClose:(BOOL)useCustomClose -{ - if (useCustomClose) { - // When using custom close, we must leave a tappable region on the screen and just hide the image - // unless the ad is a vast video ad. For vast video, we expect that the creative will have a tappable - // close region. - if (self.isAdVastVideoPlayer) { - view.closeButtonType = MPClosableViewCloseButtonTypeNone; - } else { - view.closeButtonType = MPClosableViewCloseButtonTypeTappableWithoutImage; - } - } else { - // When not using custom close, show our own image with a tappable region. - view.closeButtonType = MPClosableViewCloseButtonTypeTappableWithImage; - } -} - -- (void)bridge:(MRBridge *)bridge handleNativeCommandSetOrientationPropertiesWithForceOrientationMask:(UIInterfaceOrientationMask)forceOrientationMask -{ - // If the ad is trying to force an orientation that the app doesn't support, we shouldn't try to force the orientation. - if (![[UIApplication sharedApplication] mp_supportsOrientationMask:forceOrientationMask]) { - return; - } - - BOOL inExpandedState = self.currentState == MRAdViewStateExpanded; - - // If we aren't expanded or showing an interstitial ad, we don't have to force orientation on our ad. - if (!inExpandedState && self.placementType != MRAdViewPlacementTypeInterstitial) { - return; - } - - // If request handling is paused, we want to queue up this method to be called again when they are re-enabled. - if (!bridge.shouldHandleRequests) { - __weak __typeof__(self) weakSelf = self; - self.forceOrientationAfterAnimationBlock = ^void() { - __typeof__(self) strongSelf = weakSelf; - [strongSelf bridge:bridge handleNativeCommandSetOrientationPropertiesWithForceOrientationMask:forceOrientationMask]; - }; - return; - } - - // By this point, we've committed to forcing the orientation so we don't need a forceOrientationAfterAnimationBlock. - self.forceOrientationAfterAnimationBlock = nil; - self.forceOrientationMask = forceOrientationMask; - - BOOL inSameOrientation = [[UIApplication sharedApplication] mp_doesOrientation:MPInterfaceOrientation() matchOrientationMask:forceOrientationMask]; - UIViewController *fullScreenAdViewController = inExpandedState ? self.expandModalViewController : self.interstitialViewController; - - // If we're currently in the force orientation, we don't need to do any rotation. However, we still need to make sure - // that the view controller knows to use the forced orientation when the user rotates the device. - if (inSameOrientation) { - fullScreenAdViewController.supportedOrientationMask = forceOrientationMask; - } else { - // It doesn't seem possible to force orientation in iOS 7+. So we dismiss the current view controller and re-present it with the forced orientation. - // If it's an expanded ad, we need to restore the status bar visibility before we dismiss the current VC since we don't show the status bar in expanded state. - if (inExpandedState) { - [self.expandModalViewController restoreStatusBarVisibility]; - } - - // Block our timer from updating properties while we force orientation on the view controller. - [self willBeginAnimatingAdSize]; - - UIViewController *presentingViewController = fullScreenAdViewController.presentingViewController; - __weak __typeof__(self) weakSelf = self; - [fullScreenAdViewController dismissViewControllerAnimated:NO completion:^{ - __typeof__(self) strongSelf = weakSelf; - - if (inExpandedState) { - [strongSelf didEndAnimatingAdSize]; - - // If expanded, we don't need to change the state of the ad once the modal is present here as the ad is technically - // always in the expanded state throughout the process of dismissing and presenting. - [strongSelf presentExpandModalViewControllerWithView:strongSelf.expansionContentView animated:NO completion:^{ - [strongSelf updateMRAIDProperties]; - }]; - } else { - fullScreenAdViewController.supportedOrientationMask = forceOrientationMask; - [presentingViewController presentViewController:fullScreenAdViewController animated:NO completion:^{ - [strongSelf didEndAnimatingAdSize]; - strongSelf.currentInterfaceOrientation = MPInterfaceOrientation(); - [strongSelf updateMRAIDProperties]; - }]; - } - }]; - } -} - -- (void)bridge:(MRBridge *)bridge handleNativeCommandExpandWithURL:(NSURL *)url useCustomClose:(BOOL)useCustomClose -{ - if (self.placementType != MRAdViewPlacementTypeInline) { - [bridge fireErrorEventForAction:kMRAIDCommandExpand withMessage:@"Cannot expand from interstitial ads."]; - return; - } - - // Save the state of the default ad view if it's in default state. If it's resized, the controller has already - // been informed of a modal being presented on resize, and the expand basically takes its place. Additionally, - // self.mraidDefaultAdFrame has already been set from resize, and the mraidAdView's frame is not the correct default. - if (self.currentState != MRAdViewStateResized) { - self.mraidDefaultAdFrame = self.mraidAdView.frame; - [self adWillPresentModalView]; - } else { - [self.resizeBackgroundView removeFromSuperview]; - } - - // We change the state after the modal is fully presented which results in an undesirable animation where the banner will briefly appear in the modal which then - // will instantly change to the full screen ad. However, it is far safer to update the state like this and has less side effects. - if (url) { - // It doesn't matter what frame we use for the two-part expand. We'll overwrite it with a new frame when presenting the modal. - CGRect twoPartFrame = self.mraidAdView.frame; - - MPWebView *twoPartWebView = [self buildMRAIDWebViewWithFrame:twoPartFrame forceUIWebView:self.shouldUseUIWebView]; - self.mraidBridgeTwoPart = [[MRBridge alloc] initWithWebView:twoPartWebView delegate:self]; - self.mraidAdViewTwoPart = [[MPClosableView alloc] initWithFrame:twoPartFrame - webView:twoPartWebView - delegate:self]; - self.isAdLoading = YES; - - self.expansionContentView = self.mraidAdViewTwoPart; - - // To avoid race conditions, we start loading the two part creative after the ad has fully expanded. - [self presentExpandModalViewControllerWithView:self.expansionContentView animated:YES completion:^{ - [self initAdAlertManager:self.adAlertManagerTwoPart forAdView:self.mraidAdViewTwoPart]; - [self loadTwoPartCreativeFromURL:url]; - [self changeStateTo:MRAdViewStateExpanded]; - }]; - } else { - self.expansionContentView = self.mraidAdView; - //If the ad is resized, the original superview has already been set. - if (self.currentState != MRAdViewStateResized) { - self.originalSuperview = self.mraidAdView.superview; - } - [self presentExpandModalViewControllerWithView:self.expansionContentView animated:YES completion:^{ - [self changeStateTo:MRAdViewStateExpanded]; - }]; - } - - [self configureCloseButtonForView:self.expansionContentView forUseCustomClose:useCustomClose]; -} - -- (void)bridge:(MRBridge *)bridge handleNativeCommandResizeWithParameters:(NSDictionary *)parameters -{ - NSArray *parameterKeys = [parameters allKeys]; - if (self.currentState == MRAdViewStateExpanded) { - [bridge fireErrorEventForAction:kMRAIDCommandResize withMessage:@"Cannot resize from and expanded state."]; - return; - } else if (self.placementType != MRAdViewPlacementTypeInline) { - [bridge fireErrorEventForAction:kMRAIDCommandResize withMessage:@"Cannot resize from interstitial ads."]; - return; - } else if (![parameterKeys containsObject:@"width"] || ![parameterKeys containsObject:@"height"] || ![parameterKeys containsObject:@"offsetX"] || ![parameterKeys containsObject:@"offsetY"]) { - [bridge fireErrorEventForAction:kMRAIDCommandResize withMessage:@"Cannot resize when missing required parameter(s)."]; - return; - } - - CGFloat width = [[parameters objectForKey:@"width"] floatValue]; - CGFloat height = [[parameters objectForKey:@"height"] floatValue]; - CGFloat offsetX = [[parameters objectForKey:@"offsetX"] floatValue]; - CGFloat offsetY = [[parameters objectForKey:@"offsetY"] floatValue]; - BOOL allowOffscreen = [parameters objectForKey:@"allowOffscreen"] ? [[parameters objectForKey:@"allowOffscreen"] boolValue] : YES; - NSString *customClosePositionString = [[parameters objectForKey:@"customClosePosition"] length] ? [parameters objectForKey:@"customClosePosition"] : @"top-right"; - - //save default frame of the ad view - if (self.currentState == MRAdViewStateDefault) { - self.mraidDefaultAdFrameInKeyWindow = [self.mraidAdView.superview convertRect:self.mraidAdView.frame toView:MPKeyWindow().rootViewController.view]; - } - - CGRect newFrame = CGRectMake(CGRectGetMinX(self.mraidDefaultAdFrameInKeyWindow) + offsetX, CGRectGetMinY(self.mraidDefaultAdFrameInKeyWindow) + offsetY, width, height); - newFrame = [self adjustedFrameForFrame:newFrame allowOffscreen:allowOffscreen]; - - self.mraidAdView.closeButtonType = MPClosableViewCloseButtonTypeTappableWithoutImage; - self.mraidAdView.closeButtonLocation = [self adCloseButtonLocationFromString:customClosePositionString]; - - if (![self isValidResizeFrame:newFrame allowOffscreen:allowOffscreen]) { - [self.mraidBridge fireErrorEventForAction:kMRAIDCommandResize withMessage:@"Could not display desired frame in compliance with MRAID 2.0 specifications."]; - } else if (![self isValidResizeCloseButtonPlacementInFrame:newFrame]) { - [self.mraidBridge fireErrorEventForAction:kMRAIDCommandResize withMessage:@"Custom close event region is offscreen."]; - } else { - // If current state is default, save our current frame as the default frame, set originalSuperview, setup resizeBackgroundView, - // move mraidAdView to rootViewController's view, and call adWillPresentModalView - if (self.currentState == MRAdViewStateDefault) { - self.mraidDefaultAdFrame = self.mraidAdView.frame; - self.originalSuperview = self.mraidAdView.superview; - - self.mraidAdView.frame = self.mraidDefaultAdFrameInKeyWindow; - self.resizeBackgroundView.frame = MPApplicationFrame(); - - [MPKeyWindow().rootViewController.view addSubview:self.resizeBackgroundView]; - [MPKeyWindow().rootViewController.view addSubview:self.mraidAdView]; - - [self adWillPresentModalView]; - } - - [self animateViewFromDefaultStateToResizedState:self.mraidAdView withFrame:newFrame]; - } -} - -#pragma mark - - -- (void)closeButtonPressed:(MPClosableView *)view -{ - [self close]; -} - -- (void)closableView:(MPClosableView *)closableView didMoveToWindow:(UIWindow *)window -{ - // Fire the ready event and initialize properties if the view has a window. - MRBridge *bridge = [self bridgeForAdView:closableView]; - - if (!self.firedReadyEventForDefaultAd && bridge == self.mraidBridge) { - // The window may be nil if it was removed from a window or added to a view that isn't attached to a window so make sure it actually has a window. - if (window != nil) { - // Just in case this code is executed twice, ensures that self is only added as - // an observer once. - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil]; - - //Keep track of the orientation before we start observing changes. - self.currentInterfaceOrientation = MPInterfaceOrientation(); - - // Placing orientation notification observing here ensures that the controller only - // observes changes after it's been added to the view hierarchy. Subscribing to - // orientation changes so we can notify the javascript about the new screen size. - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(orientationDidChange:) - name:UIDeviceOrientationDidChangeNotification - object:nil]; - - [self.adPropertyUpdateTimer scheduleNow]; - [self initializeLoadedAdForBridge:bridge]; - self.firedReadyEventForDefaultAd = YES; - } - } -} - -#pragma mark - - -- (void)displayAgentWillPresentModal -{ - [self adWillPresentModalView]; -} - -- (void)displayAgentDidDismissModal -{ - [self adDidDismissModalView]; -} - -- (void)displayAgentWillLeaveApplication -{ - // Do nothing. -} - -// - (MPAdConfiguration *)adConfiguration delegate method is automatically implemented via the adConfiguration property declaration. - -#pragma mark - Property Updating - -- (void)updateMRAIDProperties -{ - // Don't need to update mraid properties while animating as they'll be set correctly when the animations start/finish and it - // requires a bit of extra state logic to handle. We also don't want to check if the ad is visible during animation because - // the view is transitioning to a parent view that may or may not be on screen at any given time. - if (!self.isAnimatingAdSize) { - [self checkViewability]; - [self updateCurrentPosition]; - [self updateDefaultPosition]; - [self updateScreenSize]; - [self updateMaxSize]; - [self updateEventSizeChange]; - } -} - -- (CGRect)activeAdFrameInScreenSpace -{ - CGRect visibleFrame = CGRectZero; - - if (self.placementType == MRAdViewPlacementTypeInline) { - if (self.currentState == MRAdViewStateExpanded) { - // We're in a modal so we can just return the expanded view's frame. - visibleFrame = self.expansionContentView.frame; - } else { - UIWindow *keyWindow = MPKeyWindow(); - visibleFrame = [self.mraidAdView.superview convertRect:self.mraidAdView.frame toView:keyWindow.rootViewController.view]; - } - } else if (self.placementType == MRAdViewPlacementTypeInterstitial) { - visibleFrame = self.mraidAdView.frame; - } - - return visibleFrame; -} - -- (CGRect)defaultAdFrameInScreenSpace -{ - CGRect defaultFrame = CGRectZero; - - if (self.placementType == MRAdViewPlacementTypeInline) { - UIWindow *keyWindow = MPKeyWindow(); - if (self.expansionContentView == self.mraidAdViewTwoPart) { - defaultFrame = [self.mraidAdView.superview convertRect:self.mraidAdView.frame toView:keyWindow.rootViewController.view]; - } else { - defaultFrame = [self.originalSuperview convertRect:self.mraidDefaultAdFrame toView:keyWindow.rootViewController.view]; - } - } else if (self.placementType == MRAdViewPlacementTypeInterstitial) { - defaultFrame = self.mraidAdView.frame; - } - - return defaultFrame; -} - -- (void)updateCurrentPosition -{ - CGRect frame = [self activeAdFrameInScreenSpace]; - - // Only fire to the active ad view. - MRBridge *activeBridge = [self bridgeForActiveAdView]; - [activeBridge fireSetCurrentPositionWithPositionRect:frame]; - - MPLogTrace(@"Current Position: %@", NSStringFromCGRect(frame)); -} - -- (void)updateDefaultPosition -{ - CGRect defaultFrame = [self defaultAdFrameInScreenSpace]; - - // Not necessary to fire to both ad views, but it's better that the two-part expand knows the default position than not. - [self.mraidBridge fireSetDefaultPositionWithPositionRect:defaultFrame]; - [self.mraidBridgeTwoPart fireSetDefaultPositionWithPositionRect:defaultFrame]; - - MPLogTrace(@"Default Position: %@", NSStringFromCGRect(defaultFrame)); -} - -- (void)updateScreenSize -{ - // Fire an event for screen size changing. This includes the area of the status bar in its calculation. - CGSize screenSize = MPScreenBounds().size; - - // Fire to both ad views as it pertains to both views. - [self.mraidBridge fireSetScreenSize:screenSize]; - [self.mraidBridgeTwoPart fireSetScreenSize:screenSize]; - - MPLogTrace(@"Screen Size: %@", NSStringFromCGSize(screenSize)); -} - -- (void)updateMaxSize -{ - // Similar to updateScreenSize except this doesn't include the area of the status bar in its calculation. - CGSize maxSize = MPApplicationFrame().size; - - // Fire to both ad views as it pertains to both views. - [self.mraidBridge fireSetMaxSize:maxSize]; - [self.mraidBridgeTwoPart fireSetMaxSize:maxSize]; - - MPLogTrace(@"Max Size: %@", NSStringFromCGSize(maxSize)); -} - -#pragma mark - MRAID events - -- (void)updateEventSizeChange -{ - CGSize adSize = [self activeAdFrameInScreenSpace].size; - - // Firing the size change event will broadcast the event to the ad. The ad may subscribe to this event and - // perform some action when it receives the event. As a result, we don't want to have the ad do any work - // when the size hasn't changed. So we make sure we don't fire the size change event unless the size has - // actually changed. We don't place similar guards around updating properties that don't broadcast events - // since the ad won't be notified when we update the properties. Thus, the ad can't do any unnecessary work - // when we update other properties. - if (!CGSizeEqualToSize(adSize, self.currentAdSize)) { - MRBridge *activeBridge = [self bridgeForActiveAdView]; - self.currentAdSize = adSize; - - MPLogDebug(@"Ad Size (Size Event): %@", NSStringFromCGSize(self.currentAdSize)); - [activeBridge fireSizeChangeEvent:adSize]; - } -} - -- (void)changeStateTo:(MRAdViewState)state -{ - self.currentState = state; - - // Update the mraid properties so they're ready before the state change happens. - [self updateMRAIDProperties]; - [self fireChangeEventToBothBridgesForProperty:[MRStateProperty propertyWithState:self.currentState]]; -} - -#pragma mark - Viewability Helpers - -- (void)checkViewability -{ - BOOL viewable = MPViewIsVisible([self activeView]) && - ([[UIApplication sharedApplication] applicationState] == UIApplicationStateActive); - [self updateViewabilityWithBool:viewable]; -} - -- (void)viewEnteredBackground -{ - [self updateViewabilityWithBool:NO]; -} - -- (void)updateViewabilityWithBool:(BOOL)currentViewability -{ - if (self.isViewable != currentViewability) - { - MPLogDebug(@"Viewable changed to: %@", currentViewability ? @"YES" : @"NO"); - self.isViewable = currentViewability; - - // Both views in two-part expand need to report if they're viewable or not depending on the active one. - [self fireChangeEventToBothBridgesForProperty:[MRViewableProperty propertyWithViewable:self.isViewable]]; - } -} - -#pragma mark - - -- (UIViewController *)viewControllerForPresentingMailVC -{ - return [self viewControllerForPresentingModalView]; -} - -- (void)adAlertManagerDidTriggerAlert:(MPAdAlertManager *)manager -{ - [manager processAdAlertOnce]; -} - -#pragma mark - Delegation Wrappers - -- (void)adDidLoad -{ - if ([self.delegate respondsToSelector:@selector(adDidLoad:)]) { - [self.delegate adDidLoad:self.mraidAdView]; - } -} - -- (void)adDidFailToLoad -{ - if ([self.delegate respondsToSelector:@selector(adDidFailToLoad:)]) { - [self.delegate adDidFailToLoad:self.mraidAdView]; - } -} - -- (void)adWillClose -{ - if ([self.delegate respondsToSelector:@selector(adWillClose:)]) { - [self.delegate adWillClose:self.mraidAdView]; - } -} - -- (void)adDidClose -{ - if ([self.delegate respondsToSelector:@selector(adDidClose:)]) { - [self.delegate adDidClose:self.mraidAdView]; - } -} - -- (void)adWillPresentModalView -{ - self.modalViewCount++; - if (self.modalViewCount == 1) { - [self appShouldSuspend]; - } -} - -- (void)adDidDismissModalView -{ - self.modalViewCount--; - if (self.modalViewCount == 0) { - [self appShouldResume]; - } -} - -- (void)appShouldSuspend -{ - if ([self.delegate respondsToSelector:@selector(appShouldSuspendForAd:)]) { - [self.delegate appShouldSuspendForAd:self.mraidAdView]; - } -} - -- (void)appShouldResume -{ - if ([self.delegate respondsToSelector:@selector(appShouldResumeFromAd:)]) { - [self.delegate appShouldResumeFromAd:self.mraidAdView]; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRError.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRError.h deleted file mode 100644 index 1ac3b3789..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRError.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MRError.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -extern NSString * const MoPubMRAIDAdsSDKDomain; - -enum { - MRErrorMRAIDJSNotFound -}; -typedef NSInteger MRErrorCode; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRError.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRError.m deleted file mode 100644 index 6b0efbca0..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRError.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// MRError.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MRError.h" - -NSString * const MoPubMRAIDAdsSDKDomain = @"com.mopub.iossdk.mraid"; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRExpandModalViewController.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRExpandModalViewController.h deleted file mode 100644 index 8b2ee4a32..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRExpandModalViewController.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// MRExpandModalViewController.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPClosableView.h" -#import "MPForceableOrientationProtocol.h" -@protocol MRExpandModalViewControllerDelegate; - -/** - * `MRExpandModalViewController` is specifically for presenting expanded MRAID ads. Its orientation can be - * forced via the orientationMask property. - */ -@interface MRExpandModalViewController : UIViewController - -/** - * Initializes the view controller with an orientation mask that defines what orientation - * the view controller supports. When using an orientation mask on initialization, the view controlller - * will force the orientation of the device to match the orientation mask if the app supports it. - */ -- (instancetype)initWithOrientationMask:(UIInterfaceOrientationMask)orientationMask; - -/** - * Hides the status bar when called. Every call to hideStatusBar should be matched with a call to - * restoreStatusBarVisibility. That is, each time hideStatusBar is called, restoreStatusBarVisibility - * must be called before calling hideStatusBar again. If the methods aren't called in the correct order, - * consecutive calls to this method become no ops. - */ -- (void)hideStatusBar; - -/** - * This will set the visibility of the status bar based on whether or not the status bar was hidden when hideStatusBar was called. - * A call to this method should be matched with a call to hideStatusBar. That is, each call to restoreStatusBarVisibility should - * be preceded by a call to hideStatusBar. Calling this method consecutively will not affect the status bar beyond the first call. - */ -- (void)restoreStatusBarVisibility; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRExpandModalViewController.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRExpandModalViewController.m deleted file mode 100644 index 17a613737..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRExpandModalViewController.m +++ /dev/null @@ -1,105 +0,0 @@ -// -// MRExpandModalViewController.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MRExpandModalViewController.h" -#import "MPGlobal.h" - -@interface MRExpandModalViewController () - -@property (nonatomic, assign) BOOL statusBarHidden; -@property (nonatomic, assign) BOOL applicationHidesStatusBar; -@property (nonatomic, assign) UIInterfaceOrientationMask supportedOrientationMask; - -@end - -@implementation MRExpandModalViewController - -- (instancetype)initWithOrientationMask:(UIInterfaceOrientationMask)orientationMask -{ - if (self = [super init]) { - _supportedOrientationMask = orientationMask; - } - - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - self.view.backgroundColor = [UIColor blackColor]; -} - -- (void)hideStatusBar -{ - if (!self.statusBarHidden) { - self.statusBarHidden = YES; - self.applicationHidesStatusBar = [UIApplication sharedApplication].statusBarHidden; - - // pre-ios 7 hiding status bar - [[UIApplication sharedApplication] mp_preIOS7setApplicationStatusBarHidden:YES]; - - // In the event we come back to this view controller from another modal, we need to update the status bar's - // visibility again in ios 7/8. - if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) { - [self setNeedsStatusBarAppearanceUpdate]; - } - } -} - -- (void)restoreStatusBarVisibility -{ - self.statusBarHidden = self.applicationHidesStatusBar; - - // pre-ios 7 restoring the status bar - [[UIApplication sharedApplication] mp_preIOS7setApplicationStatusBarHidden:self.applicationHidesStatusBar]; - - // ios 7/8 restoring status bar - if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) { - [self setNeedsStatusBarAppearanceUpdate]; - } -} - -- (BOOL)prefersStatusBarHidden -{ - // ios 7 hiding status bar - return self.statusBarHidden; -} - -- (void)setSupportedOrientationMask:(UIInterfaceOrientationMask)supportedOrientationMask -{ - _supportedOrientationMask = supportedOrientationMask; - - [UIViewController attemptRotationToDeviceOrientation]; -} - -// supportedInterfaceOrientations and shouldAutorotate are for ios 6, 7, and 8. -#if __IPHONE_OS_VERSION_MAX_ALLOWED >= MP_IOS_9_0 -- (UIInterfaceOrientationMask)supportedInterfaceOrientations -#else -- (NSUInteger)supportedInterfaceOrientations -#endif -{ - return ([[UIApplication sharedApplication] mp_supportsOrientationMask:self.supportedOrientationMask]) ? self.supportedOrientationMask : UIInterfaceOrientationMaskAll; -} - -- (BOOL)shouldAutorotate -{ - return YES; -} - -#pragma mark - - -// We transfer closable view delegation to the expand view controller in the event MRController is deallocated and the expand modal is presented. -- (void)closeButtonPressed:(MPClosableView *)closableView -{ - // All we need to do is dismiss ourself. - [self dismissViewControllerAnimated:YES completion:nil]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.h deleted file mode 100644 index 28f623194..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.h +++ /dev/null @@ -1,50 +0,0 @@ -// -// MRNativeCommandHandler.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MRConstants.h" - -@class MRCommand; -@protocol MRNativeCommandHandlerDelegate; - -/** - * The `MRNativeCommandHandler` class is an object that encapsulates functionality that processes, - * and where possible, executes MRAID commands. - */ -@interface MRNativeCommandHandler : NSObject - -- (instancetype)initWithDelegate:(id)delegate; -- (void)handleNativeCommand:(NSString *)command withProperties:(NSDictionary *)properties; - -@end - -/** - * The delegate of an `MRNativeCommandHandler` object that implements `MRNativeCommandHandlerDelegate` - * must provide information and a view controller that allow the `MRNativeCommandHandler` to execute - * MRAID commands. The `MRNativeCommandHandlerDelegate` is also notified of certain events and - * expected to respond appropriately to them. - */ -@protocol MRNativeCommandHandlerDelegate - -- (void)handleMRAIDUseCustomClose:(BOOL)useCustomClose; -- (void)handleMRAIDSetOrientationPropertiesWithForceOrientationMask:(UIInterfaceOrientationMask)forceOrientationMask; -- (void)handleMRAIDExpandWithParameters:(NSDictionary *)params; -- (void)handleMRAIDResizeWithParameters:(NSDictionary *)params; -- (void)handleMRAIDClose; -- (void)handleMRAIDOpenCallForURL:(NSURL *)URL; -- (void)nativeCommandWillPresentModalView; -- (void)nativeCommandDidDismissModalView; -- (void)nativeCommandCompleted:(NSString *)command; -- (void)nativeCommandFailed:(NSString *)command withMessage:(NSString *)message; -- (UIViewController *)viewControllerForPresentingModalView; -- (MRAdViewPlacementType)adViewPlacementType; -- (BOOL)userInteractedWithWebView; -- (BOOL)handlingWebviewRequests; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.m deleted file mode 100644 index 8566f0306..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRNativeCommandHandler.m +++ /dev/null @@ -1,126 +0,0 @@ -// -// MRNativeCommandHandler.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MRNativeCommandHandler.h" -#import "MRCommand.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MRVideoPlayerManager.h" - -@interface MRNativeCommandHandler () - -@property (nonatomic, weak) id delegate; -@property (nonatomic, strong) MRVideoPlayerManager *videoPlayerManager; - -@end - -@implementation MRNativeCommandHandler - -- (instancetype)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - _delegate = delegate; - - _videoPlayerManager = [[MRVideoPlayerManager alloc] initWithDelegate:self]; - } - - return self; -} - -- (void)handleNativeCommand:(NSString *)command withProperties:(NSDictionary *)properties -{ - BOOL success = YES; - - MRCommand *cmd = [MRCommand commandForString:command]; - if (cmd == nil) { - success = NO; - } else if ([self shouldExecuteMRCommand:cmd]) { - cmd.delegate = self; - success = [cmd executeWithParams:properties]; - } - - [self.delegate nativeCommandCompleted:command]; - - if (!success) { - MPLogDebug(@"Unknown command: %@", command); - [self.delegate nativeCommandFailed:command withMessage:@"Specified command is not implemented."]; - } -} - -- (BOOL)shouldExecuteMRCommand:(MRCommand *)cmd -{ - // The command may not be whitelisted to run while the delegate is not handling webview requests. - if (![self.delegate handlingWebviewRequests] && ![cmd executableWhileBlockingRequests]) { - return NO; - } - - // some MRAID commands may not require user interaction - return ![cmd requiresUserInteractionForPlacementType:[self.delegate adViewPlacementType]] || [self.delegate userInteractedWithWebView]; -} - -#pragma mark - MRCommandDelegate - -- (void)mrCommand:(MRCommand *)command playVideoWithURL:(NSURL *)url -{ - [self.videoPlayerManager playVideo:url]; -} - -- (void)mrCommand:(MRCommand *)command shouldUseCustomClose:(BOOL)useCustomClose -{ - [self.delegate handleMRAIDUseCustomClose:useCustomClose]; -} - -- (void)mrCommand:(MRCommand *)command setOrientationPropertiesWithForceOrientation:(UIInterfaceOrientationMask)forceOrientation -{ - [self.delegate handleMRAIDSetOrientationPropertiesWithForceOrientationMask:forceOrientation]; -} - -- (void)mrCommand:(MRCommand *)command openURL:(NSURL *)url -{ - [self.delegate handleMRAIDOpenCallForURL:url]; -} - -- (void)mrCommand:(MRCommand *)command expandWithParams:(NSDictionary *)params -{ - [self.delegate handleMRAIDExpandWithParameters:params]; -} - -- (void)mrCommand:(MRCommand *)command resizeWithParams:(NSDictionary *)params -{ - [self.delegate handleMRAIDResizeWithParameters:params]; -} - -- (void)mrCommandClose:(MRCommand *)command -{ - [self.delegate handleMRAIDClose]; -} - -#pragma mark - - -- (void)videoPlayerManager:(MRVideoPlayerManager *)manager didFailToPlayVideoWithErrorMessage:(NSString *)message -{ - [self.delegate nativeCommandFailed:@"playVideo" withMessage:message]; -} - -- (void)videoPlayerManagerWillPresentVideo:(MRVideoPlayerManager *)manager -{ - [self.delegate nativeCommandWillPresentModalView]; -} - -- (void)videoPlayerManagerDidDismissVideo:(MRVideoPlayerManager *)manager -{ - [self.delegate nativeCommandDidDismissModalView]; -} - -- (UIViewController *)viewControllerForPresentingVideoPlayer -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.h deleted file mode 100644 index a37a6126a..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.h +++ /dev/null @@ -1,92 +0,0 @@ -// -// MRProperty.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MRConstants.h" - -@interface MRProperty : NSObject - -- (NSString *)description; -- (NSString *)jsonString; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRHostSDKVersionProperty : MRProperty - -@property (nonatomic, copy) NSString *version; - -+ (MRHostSDKVersionProperty *)defaultProperty; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRPlacementTypeProperty : MRProperty { - MRAdViewPlacementType _placementType; -} - -@property (nonatomic, assign) MRAdViewPlacementType placementType; - -+ (MRPlacementTypeProperty *)propertyWithType:(MRAdViewPlacementType)type; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRStateProperty : MRProperty { - MRAdViewState _state; -} - -@property (nonatomic, assign) MRAdViewState state; - -+ (MRStateProperty *)propertyWithState:(MRAdViewState)state; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRScreenSizeProperty : MRProperty { - CGSize _screenSize; -} - -@property (nonatomic, assign) CGSize screenSize; - -+ (MRScreenSizeProperty *)propertyWithSize:(CGSize)size; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRSupportsProperty : MRProperty - -@property (nonatomic, assign) BOOL supportsSms; -@property (nonatomic, assign) BOOL supportsTel; -@property (nonatomic, assign) BOOL supportsCalendar; -@property (nonatomic, assign) BOOL supportsStorePicture; -@property (nonatomic, assign) BOOL supportsInlineVideo; - -+ (NSDictionary *)supportedFeatures; -+ (MRSupportsProperty *)defaultProperty; -+ (MRSupportsProperty *)propertyWithSupportedFeaturesDictionary:(NSDictionary *)dictionary; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MRViewableProperty : MRProperty { - BOOL _isViewable; -} - -@property (nonatomic, assign) BOOL isViewable; - -+ (MRViewableProperty *)propertyWithViewable:(BOOL)viewable; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.m deleted file mode 100644 index 118ab7ba8..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRProperty.m +++ /dev/null @@ -1,193 +0,0 @@ -// -// MRProperty.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MRProperty.h" -#import "MPConstants.h" -#import "MPCoreInstanceProvider.h" - -@implementation MRProperty - -- (NSString *)description { - return @""; -} - -- (NSString *)jsonString { - return @"{}"; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRHostSDKVersionProperty : MRProperty - -@synthesize version = _version; - -+ (instancetype)defaultProperty -{ - MRHostSDKVersionProperty *property = [[self alloc] init]; - property.version = MP_SDK_VERSION; - return property; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"hostSDKVersion: '%@'", self.version]; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRPlacementTypeProperty : MRProperty - -@synthesize placementType = _placementType; - -+ (MRPlacementTypeProperty *)propertyWithType:(MRAdViewPlacementType)type { - MRPlacementTypeProperty *property = [[self alloc] init]; - property.placementType = type; - return property; -} - -- (NSString *)description { - NSString *placementTypeString = @"unknown"; - switch (_placementType) { - case MRAdViewPlacementTypeInline: placementTypeString = @"inline"; break; - case MRAdViewPlacementTypeInterstitial: placementTypeString = @"interstitial"; break; - default: break; - } - - return [NSString stringWithFormat:@"placementType: '%@'", placementTypeString]; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRStateProperty - -@synthesize state = _state; - -+ (MRStateProperty *)propertyWithState:(MRAdViewState)state { - MRStateProperty *property = [[self alloc] init]; - property.state = state; - return property; -} - -- (NSString *)description { - NSString *stateString; - switch (_state) { - case MRAdViewStateHidden: - stateString = @"hidden"; - break; - case MRAdViewStateDefault: - stateString = @"default"; - break; - case MRAdViewStateExpanded: - stateString = @"expanded"; - break; - case MRAdViewStateResized: - stateString = @"resized"; - break; - default: - stateString = @"loading"; - break; - } - return [NSString stringWithFormat:@"state: '%@'", stateString]; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRScreenSizeProperty : MRProperty - -@synthesize screenSize = _screenSize; - -+ (MRScreenSizeProperty *)propertyWithSize:(CGSize)size { - MRScreenSizeProperty *property = [[self alloc] init]; - property.screenSize = size; - return property; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"screenSize: {width: %f, height: %f}", - _screenSize.width, - _screenSize.height]; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRSupportsProperty : MRProperty - -+ (NSDictionary *)supportedFeatures -{ - BOOL supportsSms, supportsTel; - supportsSms = supportsTel = [MPCoreInstanceProvider sharedProvider].sharedCarrierInfo[@"carrierName"] != nil; - - return [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithBool:supportsSms], @"sms", - [NSNumber numberWithBool:supportsTel], @"tel", - [NSNumber numberWithBool:NO], @"calendar", - [NSNumber numberWithBool:NO], @"storePicture", - [NSNumber numberWithBool:YES], @"inlineVideo", - nil]; -} - -+ (MRSupportsProperty *)defaultProperty -{ - return [self propertyWithSupportedFeaturesDictionary:[self supportedFeatures]]; -} - -+ (MRSupportsProperty *)propertyWithSupportedFeaturesDictionary:(NSDictionary *)dictionary -{ - MRSupportsProperty *property = [[self alloc] init]; - property.supportsSms = [[dictionary objectForKey:@"sms"] boolValue]; - property.supportsTel = [[dictionary objectForKey:@"tel"] boolValue]; - property.supportsCalendar = NO; - property.supportsStorePicture = NO; - property.supportsInlineVideo = [[dictionary objectForKey:@"inlineVideo"] boolValue]; - return property; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"supports: {sms: %@, tel: %@, calendar: %@, storePicture: %@, inlineVideo: %@}", - [self javascriptBooleanStringFromBoolValue:self.supportsSms], - [self javascriptBooleanStringFromBoolValue:self.supportsTel], - [self javascriptBooleanStringFromBoolValue:self.supportsCalendar], - [self javascriptBooleanStringFromBoolValue:self.supportsStorePicture], - [self javascriptBooleanStringFromBoolValue:self.supportsInlineVideo]]; -} - -- (NSString *)javascriptBooleanStringFromBoolValue:(BOOL)value -{ - return value ? @"true" : @"false"; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MRViewableProperty : MRProperty - -@synthesize isViewable = _isViewable; - -+ (MRViewableProperty *)propertyWithViewable:(BOOL)viewable { - MRViewableProperty *property = [[self alloc] init]; - property.isViewable = viewable; - return property; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"viewable: %@", _isViewable ? @"true" : @"false"]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.h deleted file mode 100644 index ae57806f3..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// MRVideoPlayerManager.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@protocol MRVideoPlayerManagerDelegate; - -@interface MRVideoPlayerManager : NSObject - -@property (nonatomic, weak) id delegate; - -- (id)initWithDelegate:(id)delegate; -- (void)playVideo:(NSURL *)url; - -@end - -@protocol MRVideoPlayerManagerDelegate - -- (UIViewController *)viewControllerForPresentingVideoPlayer; -- (void)videoPlayerManagerWillPresentVideo:(MRVideoPlayerManager *)manager; -- (void)videoPlayerManagerDidDismissVideo:(MRVideoPlayerManager *)manager; -- (void)videoPlayerManager:(MRVideoPlayerManager *)manager - didFailToPlayVideoWithErrorMessage:(NSString *)message; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.m deleted file mode 100644 index 8482241d8..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/MRAID/MRVideoPlayerManager.m +++ /dev/null @@ -1,61 +0,0 @@ -// -// MRVideoPlayerManager.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MRVideoPlayerManager.h" -#import -#import "MPGlobal.h" - -@implementation MRVideoPlayerManager - -@synthesize delegate = _delegate; - -- (id)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - _delegate = delegate; - } - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self - name:MPMoviePlayerPlaybackDidFinishNotification - object:nil]; -} - -- (void)playVideo:(NSURL *)url -{ - if (!url) { - [self.delegate videoPlayerManager:self didFailToPlayVideoWithErrorMessage:@"URI was not valid."]; - return; - } - - MPMoviePlayerViewController *controller = [[MPMoviePlayerViewController alloc] initWithContentURL:url]; - - [self.delegate videoPlayerManagerWillPresentVideo:self]; - [[self.delegate viewControllerForPresentingVideoPlayer] presentViewController:controller animated:MP_ANIMATED completion:nil]; - - // Avoid subscribing to the notification multiple times in the event the user plays the video more than once. - [[NSNotificationCenter defaultCenter] removeObserver:self - name:MPMoviePlayerPlaybackDidFinishNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(moviePlayerPlaybackDidFinish:) - name:MPMoviePlayerPlaybackDidFinishNotification - object:nil]; -} - -- (void)moviePlayerPlaybackDidFinish:(NSNotification *)notification -{ - [self.delegate videoPlayerManagerDidDismissVideo:self]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.h deleted file mode 100644 index c014c9315..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// NSBundle+MPAdditions.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface NSBundle (MPAdditions) - -/** - * Retrieves the bundle that contains the MoPubSDK resources. - * @param aClass MoPub class. Typically will be self.class. - * @returns The bundle containing the MoPubSDK resources. - */ -+ (NSBundle *)resourceBundleForClass:(Class)aClass; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.m deleted file mode 100644 index b3511ddf5..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSBundle+MPAdditions.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// NSBundle+MPAdditions.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSBundle+MPAdditions.h" - -@implementation NSBundle (MPAdditions) - -+ (NSBundle *)resourceBundleForClass:(Class)aClass { - NSString * resourceBundlePath = [[NSBundle mainBundle] pathForResource:@"MoPub" ofType:@"bundle"]; - return (resourceBundlePath != nil ? [NSBundle bundleWithPath:resourceBundlePath] : [NSBundle bundleForClass:aClass]); -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.h deleted file mode 100644 index 011eb7b3d..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// NSDate+MPAdditions.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface NSDate (MPAdditions) - -/** - Current date object. Equivalent to @c [NSDate date]. - */ -+ (NSDate *)now; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.m deleted file mode 100644 index 67dea93e1..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDate+MPAdditions.m +++ /dev/null @@ -1,17 +0,0 @@ -// -// NSDate+MPAdditions.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSDate+MPAdditions.h" - -@implementation NSDate (MPAdditions) - -+ (NSDate *)now { - return [NSDate date]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.h deleted file mode 100644 index 4e08cf646..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// NSDictionary+MPAdditions.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface NSDictionary (MPAdditions) - -- (NSInteger)mp_integerForKey:(id)key; -- (NSInteger)mp_integerForKey:(id)key defaultValue:(NSInteger)defaultVal; -- (double)mp_doubleForKey:(id)key; -- (double)mp_doubleForKey:(id)key defaultValue:(double)defaultVal; -- (NSString *)mp_stringForKey:(id)key; -- (NSString *)mp_stringForKey:(id)key defaultValue:(NSString *)defaultVal; -- (BOOL)mp_boolForKey:(id)key; -- (BOOL)mp_boolForKey:(id)key defaultValue:(BOOL)defaultVal; -- (float)mp_floatForKey:(id)key; -- (float)mp_floatForKey:(id)key defaultValue:(float)defaultVal; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.m deleted file mode 100644 index d87134e85..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSDictionary+MPAdditions.m +++ /dev/null @@ -1,83 +0,0 @@ -// -// NSDictionary+MPAdditions.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSDictionary+MPAdditions.h" - -@implementation NSDictionary (MPAdditions) - -- (NSInteger)mp_integerForKey:(id)key -{ - return [self mp_integerForKey:key defaultValue:0]; -} - -- (NSInteger)mp_integerForKey:(id)key defaultValue:(NSInteger)defaultVal -{ - id obj = [self objectForKey:key]; - if ([obj respondsToSelector:@selector(integerValue)]) { - return [obj integerValue]; - } - return defaultVal; -} - -- (double)mp_doubleForKey:(id)key -{ - return [self mp_doubleForKey:key defaultValue:0.0]; -} - -- (double)mp_doubleForKey:(id)key defaultValue:(double)defaultVal -{ - id obj = [self objectForKey:key]; - if ([obj respondsToSelector:@selector(doubleValue)]) { - return [obj doubleValue]; - } - return defaultVal; -} - -- (NSString *)mp_stringForKey:(id)key -{ - return [self mp_stringForKey:key defaultValue:nil]; -} - -- (NSString *)mp_stringForKey:(id)key defaultValue:(NSString *)defaultVal -{ - id obj = [self objectForKey:key]; - if ([obj isKindOfClass:[NSString class]]) { - return obj; - } - return defaultVal; -} - -- (BOOL)mp_boolForKey:(id)key -{ - return [self mp_boolForKey:key defaultValue:NO]; -} - -- (BOOL)mp_boolForKey:(id)key defaultValue:(BOOL)defaultVal -{ - id obj = [self objectForKey:key]; - if ([obj respondsToSelector:@selector(boolValue)]) { - return [obj boolValue]; - } - return defaultVal; -} - -- (float)mp_floatForKey:(id)key -{ - return [self mp_floatForKey:key defaultValue:0]; -} - -- (float)mp_floatForKey:(id)key defaultValue:(float)defaultVal -{ - id obj = [self objectForKey:key]; - if ([obj respondsToSelector:@selector(floatValue)]) { - return [obj floatValue]; - } - return defaultVal; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.h deleted file mode 100644 index 582983cd7..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// NSError+MPAdditions.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface NSError (MPAdditions) - -/** - Queries if the error is a MoPub ad request timeout error. - */ -@property (nonatomic, readonly) BOOL isAdRequestTimedOutError; - -@end - -@interface NSError (Networking) -/** - Networking error from an HTTP status code. - @param statusCode HTTP status code. - @return Error. - */ -+ (NSError *)networkErrorWithHTTPStatusCode:(NSInteger)statusCode; -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.m deleted file mode 100644 index 9e5cade32..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSError+MPAdditions.m +++ /dev/null @@ -1,32 +0,0 @@ -// -// NSError+MPAdditions.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSError+MPAdditions.h" -#import "MPError.h" - -@implementation NSError (MPAdditions) - -- (BOOL)isAdRequestTimedOutError { - return ([self.domain isEqualToString:kMOPUBErrorDomain] && self.code == MOPUBErrorAdRequestTimedOut); -} - -@end - -@implementation NSError (Networking) - -+ (NSError *)networkErrorWithHTTPStatusCode:(NSInteger)statusCode { - // `localizedStringForStatusCode:` will always give back a valid string even if the - // status code is 200 (not an error). It is up to the caller of this method to - // determine if the status code is really an error or not. - NSString * message = [NSHTTPURLResponse localizedStringForStatusCode:statusCode]; - NSError * error = [NSError errorWithDomain:kMOPUBErrorDomain code:MOPUBErrorHTTPResponseNot200 userInfo:@{ NSLocalizedDescriptionKey: message }]; - - return error; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.h deleted file mode 100644 index 53e7a1803..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// NSHTTPURLResponse+MPAdditions.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -extern NSString * const kMoPubHTTPHeaderContentType; - -@interface NSHTTPURLResponse (MPAdditions) - -- (NSStringEncoding)stringEncodingFromContentType:(NSString *)contentType; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.m deleted file mode 100644 index 0c2535a1a..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSHTTPURLResponse+MPAdditions.m +++ /dev/null @@ -1,45 +0,0 @@ -// -// NSHTTPURLResponse+MPAdditions.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSHTTPURLResponse+MPAdditions.h" -#import "MPLogging.h" - -NSString * const kMoPubHTTPHeaderContentType = @"Content-Type"; - -@implementation NSHTTPURLResponse (MPAdditions) - -- (NSStringEncoding)stringEncodingFromContentType:(NSString *)contentType -{ - NSStringEncoding encoding = NSUTF8StringEncoding; - - if (![contentType length]) { - MPLogWarn(@"Attempting to set string encoding from nil %@", kMoPubHTTPHeaderContentType); - return encoding; - } - - NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?<=charset=)[^;]*" options:kNilOptions error:nil]; - - NSTextCheckingResult *charsetResult = [regex firstMatchInString:contentType options:kNilOptions range:NSMakeRange(0, [contentType length])]; - if (charsetResult && charsetResult.range.location != NSNotFound) { - NSString *charset = [contentType substringWithRange:[charsetResult range]]; - - // ensure that charset is not deallocated early - CFStringRef cfCharset = (CFStringRef)CFBridgingRetain(charset); - CFStringEncoding cfEncoding = CFStringConvertIANACharSetNameToEncoding(cfCharset); - CFBridgingRelease(cfCharset); - - if (cfEncoding == kCFStringEncodingInvalidId) { - return encoding; - } - encoding = CFStringConvertEncodingToNSStringEncoding(cfEncoding); - } - - return encoding; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.h deleted file mode 100644 index 8b85fa437..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// NSJSONSerialization+MPAdditions.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface NSJSONSerialization (MPAdditions) - -+ (id)mp_JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt clearNullObjects:(BOOL)clearNulls error:(NSError **)error; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.m deleted file mode 100644 index f3aa95bcd..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSJSONSerialization+MPAdditions.m +++ /dev/null @@ -1,94 +0,0 @@ -// -// NSJSONSerialization+MPAdditions.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSJSONSerialization+MPAdditions.h" - -@interface NSMutableDictionary (RemoveNullObjects) - -- (void)mp_removeNullsRecursively; - -@end - -@interface NSMutableArray (RemoveNullObjects) - -- (void)mp_removeNullsRecursively; - -@end - -@implementation NSJSONSerialization (MPAdditions) - -+ (id)mp_JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt clearNullObjects:(BOOL)clearNulls error:(NSError **)error -{ - if (clearNulls) { - opt |= NSJSONReadingMutableContainers; - } - - id JSONObject = [NSJSONSerialization JSONObjectWithData:data options:opt error:error]; - - if (error || !clearNulls) { - return JSONObject; - } - - [JSONObject mp_removeNullsRecursively]; - - return JSONObject; -} - -@end - -@implementation NSMutableDictionary (RemovingNulls) - --(void)mp_removeNullsRecursively -{ - // First, filter out directly stored nulls - NSMutableArray *nullKeys = [NSMutableArray array]; - NSMutableArray *arrayKeys = [NSMutableArray array]; - NSMutableArray *dictionaryKeys = [NSMutableArray array]; - - [self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - if ([obj isEqual:[NSNull null]]) { - [nullKeys addObject:key]; - } else if ([obj isKindOfClass:[NSDictionary class]]) { - [dictionaryKeys addObject:key]; - } else if ([obj isKindOfClass:[NSArray class]]) { - [arrayKeys addObject:key]; - } - }]; - - // Remove all the nulls - [self removeObjectsForKeys:nullKeys]; - - // Cascade down the dictionaries - for (id dictionaryKey in dictionaryKeys) { - NSMutableDictionary *dictionary = [self objectForKey:dictionaryKey]; - [dictionary mp_removeNullsRecursively]; - } - - // Recursively remove nulls from arrays - for (id arrayKey in arrayKeys) { - NSMutableArray *array = [self objectForKey:arrayKey]; - [array mp_removeNullsRecursively]; - } -} - -@end - -@implementation NSMutableArray (RemovingNulls) - --(void)mp_removeNullsRecursively -{ - [self removeObjectIdenticalTo:[NSNull null]]; - - for (id object in self) { - if ([object respondsToSelector:@selector(mp_removeNullsRecursively)]) { - [(NSMutableDictionary *)object mp_removeNullsRecursively]; - } - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.h deleted file mode 100644 index 105f7cbff..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// NSMutableArray+MPAdditions.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface NSMutableArray (MPAdditions) - -- (nullable ObjectType)removeFirst; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.m deleted file mode 100644 index 61fb93341..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSMutableArray+MPAdditions.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// NSMutableArray+MPAdditions.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSMutableArray+MPAdditions.h" - -@implementation NSMutableArray (MPAdditions) - -- (id)removeFirst { - if (self.count == 0) { - return nil; - } - id firstObject = self.firstObject; - [self removeObjectAtIndex:0]; - return firstObject; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.h deleted file mode 100644 index 98365f51c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// NSString+MPAdditions.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface NSString (MPAdditions) - -/* - * Returns string with reserved/unsafe characters encoded. - */ -- (NSString *)mp_URLEncodedString; - -/** - * Attempts to convert the string into an integer value. - * @return A valid integer or `nil` if the string is not valid. - */ -- (NSNumber *)safeIntegerValue; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.m deleted file mode 100644 index 03a497820..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPAdditions.m +++ /dev/null @@ -1,33 +0,0 @@ -// -// NSString+MPAdditions.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSString+MPAdditions.h" - -@implementation NSString (MPAdditions) - -- (NSString *)mp_URLEncodedString { - NSString *result = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, - (CFStringRef)self, - NULL, - (CFStringRef)@"!*'();:@&=+$,/?%#[]<>", - kCFStringEncodingUTF8)); - return result; -} - -- (NSNumber *)safeIntegerValue { - // Reusable number formatter since reallocating this is expensive. - static NSNumberFormatter * formatter = nil; - if (formatter == nil) { - formatter = [[NSNumberFormatter alloc] init]; - formatter.numberStyle = NSNumberFormatterNoStyle; - } - - return [formatter numberFromString:self]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.h deleted file mode 100644 index 3894b0736..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// NSString+MPConsentStatus.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPConsentStatus.h" - -@interface NSString (MPConsentStatus) -/** - Converts the string into a @c MPConsentStatus value. If the conversion fails, - @c MPConsentStatusUnknown will be returned. - */ -- (MPConsentStatus)consentStatusValue; - -/** - Converts a @c MPConsentStatus value into a string. - @param status Consent status to convert. - @returns A valid string or @c nil. - */ -+ (NSString * _Nullable)stringFromConsentStatus:(MPConsentStatus)status; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.m deleted file mode 100644 index 194d1b1f4..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSString+MPConsentStatus.m +++ /dev/null @@ -1,45 +0,0 @@ -// -// NSString+MPConsentStatus.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSString+MPConsentStatus.h" - -// The consent value strings that are given back by the server. -static NSString * const kConsentStatusDoNotTrack = @"dnt"; -static NSString * const kConsentStatusExplicitNo = @"explicit_no"; -static NSString * const kConsentStatusExplicitYes = @"explicit_yes"; -static NSString * const kConsentStatusPotentialWhitelist = @"potential_whitelist"; -static NSString * const kConsentStatusUnknown = @"unknown"; - -@implementation NSString (MPConsentStatus) - -- (MPConsentStatus)consentStatusValue { - static NSDictionary * stringToEnumTable = nil; - if (stringToEnumTable == nil) { - stringToEnumTable = @{ kConsentStatusDoNotTrack: @(MPConsentStatusDoNotTrack), - kConsentStatusExplicitNo: @(MPConsentStatusDenied), - kConsentStatusExplicitYes: @(MPConsentStatusConsented), - kConsentStatusPotentialWhitelist: @(MPConsentStatusPotentialWhitelist), - kConsentStatusUnknown: @(MPConsentStatusUnknown) - }; - } - - return (MPConsentStatus)[stringToEnumTable[self] integerValue]; -} - -+ (NSString * _Nullable)stringFromConsentStatus:(MPConsentStatus)status { - switch (status) { - case MPConsentStatusDoNotTrack: return kConsentStatusDoNotTrack; - case MPConsentStatusDenied: return kConsentStatusExplicitNo; - case MPConsentStatusConsented: return kConsentStatusExplicitYes; - case MPConsentStatusPotentialWhitelist: return kConsentStatusPotentialWhitelist; - case MPConsentStatusUnknown: return kConsentStatusUnknown; - default: return nil; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.h deleted file mode 100644 index 4b76e0ee2..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// NSURL+MPAdditions.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -typedef enum { - MPMoPubHostCommandUnrecognized, - MPMoPubHostCommandClose, - MPMoPubHostCommandFinishLoad, - MPMoPubHostCommandFailLoad, - MPMoPubHostCommandPrecacheComplete, - MPMoPubHostCommandRewardedVideoEnded -} MPMoPubHostCommand; - -typedef enum { - MPMoPubShareHostCommandTweet, - MPMoPubShareHostCommandUnrecognized -} MPMoPubShareHostCommand; - -@interface NSURL (MPAdditions) - -- (NSString *)mp_queryParameterForKey:(NSString *)key; -- (NSArray *)mp_queryParametersForKey:(NSString *)key; -- (NSDictionary *)mp_queryAsDictionary; -- (BOOL)mp_hasTelephoneScheme; -- (BOOL)mp_hasTelephonePromptScheme; -- (BOOL)mp_isSafeForLoadingWithoutUserAction; -- (BOOL)mp_isMoPubScheme; -- (MPMoPubHostCommand)mp_mopubHostCommand; -- (BOOL)mp_isMoPubShareScheme; -- (MPMoPubShareHostCommand)mp_MoPubShareHostCommand; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.m deleted file mode 100644 index 5eecc6928..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/NSURL+MPAdditions.m +++ /dev/null @@ -1,132 +0,0 @@ -// -// NSURL+MPAdditions.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "NSURL+MPAdditions.h" - -static NSString * const kTelephoneScheme = @"tel"; -static NSString * const kTelephonePromptScheme = @"telprompt"; - -// Share Constants -static NSString * const kMoPubShareScheme = @"mopubshare"; -static NSString * const kMoPubShareTweetHost = @"tweet"; - -// Commands Constants -static NSString * const kMoPubURLScheme = @"mopub"; -static NSString * const kMoPubCloseHost = @"close"; -static NSString * const kMoPubFinishLoadHost = @"finishLoad"; -static NSString * const kMoPubFailLoadHost = @"failLoad"; -static NSString * const kMoPubPrecacheCompleteHost = @"precacheComplete"; -static NSString * const kMoPubRewardedVideoEndedHost = @"rewardedVideoEnded"; - -@implementation NSURL (MPAdditions) - -- (NSString *)mp_queryParameterForKey:(NSString *)key -{ - NSArray *queryElements = [self.query componentsSeparatedByString:@"&"]; - for (NSString *element in queryElements) { - NSArray *keyAndValue = [element componentsSeparatedByString:@"="]; - if (keyAndValue.count >= 2 && - [[keyAndValue objectAtIndex:0] isEqualToString:key] && - [[keyAndValue objectAtIndex:1] length] > 0) { - return [[keyAndValue objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - } - } - return nil; -} - -- (NSArray *)mp_queryParametersForKey:(NSString *)key -{ - NSMutableArray *matchingParameters = [NSMutableArray array]; - NSArray *queryElements = [self.query componentsSeparatedByString:@"&"]; - for (NSString *element in queryElements) { - NSArray *keyAndValue = [element componentsSeparatedByString:@"="]; - if (keyAndValue.count >= 2 && - [[keyAndValue objectAtIndex:0] isEqualToString:key] && - [[keyAndValue objectAtIndex:1] length] > 0) { - [matchingParameters addObject:[[keyAndValue objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; - } - } - return [NSArray arrayWithArray:matchingParameters]; -} - -- (NSDictionary *)mp_queryAsDictionary -{ - NSMutableDictionary *queryDict = [NSMutableDictionary dictionary]; - NSArray *queryElements = [self.query componentsSeparatedByString:@"&"]; - for (NSString *element in queryElements) { - NSArray *keyVal = [element componentsSeparatedByString:@"="]; - if (keyVal.count >= 2) { - NSString *key = [keyVal objectAtIndex:0]; - NSString *value = [keyVal objectAtIndex:1]; - [queryDict setObject:[value stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] - forKey:key]; - } - } - return queryDict; -} - -- (BOOL)mp_hasTelephoneScheme -{ - return [[[self scheme] lowercaseString] isEqualToString:kTelephoneScheme]; -} - -- (BOOL)mp_hasTelephonePromptScheme -{ - return [[[self scheme] lowercaseString] isEqualToString:kTelephonePromptScheme]; -} - -- (BOOL)mp_isSafeForLoadingWithoutUserAction -{ - return [[self scheme].lowercaseString isEqualToString:@"http"] || - [[self scheme].lowercaseString isEqualToString:@"https"] || - [[self scheme].lowercaseString isEqualToString:@"about"]; -} - -- (BOOL)mp_isMoPubScheme -{ - return [[self scheme] isEqualToString:kMoPubURLScheme]; -} - -- (MPMoPubShareHostCommand)mp_MoPubShareHostCommand -{ - NSString *host = [self host]; - if (![self mp_isMoPubShareScheme]) { - return MPMoPubShareHostCommandUnrecognized; - } else if ([host isEqualToString:kMoPubShareTweetHost]) { - return MPMoPubShareHostCommandTweet; - } else { - return MPMoPubShareHostCommandUnrecognized; - } -} - -- (MPMoPubHostCommand)mp_mopubHostCommand -{ - NSString *host = [self host]; - if (![self mp_isMoPubScheme]) { - return MPMoPubHostCommandUnrecognized; - } else if ([host isEqualToString:kMoPubCloseHost]) { - return MPMoPubHostCommandClose; - } else if ([host isEqualToString:kMoPubFinishLoadHost]) { - return MPMoPubHostCommandFinishLoad; - } else if ([host isEqualToString:kMoPubFailLoadHost]) { - return MPMoPubHostCommandFailLoad; - } else if ([host isEqualToString:kMoPubPrecacheCompleteHost]) { - return MPMoPubHostCommandPrecacheComplete; - } else if ([host isEqualToString:kMoPubRewardedVideoEndedHost]) { - return MPMoPubHostCommandRewardedVideoEnded; - } else { - return MPMoPubHostCommandUnrecognized; - } -} - -- (BOOL)mp_isMoPubShareScheme -{ - return [[self scheme] isEqualToString:kMoPubShareScheme]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.h deleted file mode 100644 index e5c98aeb4..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UIButton+MPAdditions.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface UIButton (MPAdditions) - -@property (nonatomic) UIEdgeInsets mp_TouchAreaInsets; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.m deleted file mode 100644 index 4aafc2d76..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIButton+MPAdditions.m +++ /dev/null @@ -1,36 +0,0 @@ -// -// UIButton+MPAdditions.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "UIButton+MPAdditions.h" -#import - -@implementation UIButton (MPAdditions) - -- (UIEdgeInsets)mp_TouchAreaInsets -{ - return [objc_getAssociatedObject(self, @selector(mp_TouchAreaInsets)) UIEdgeInsetsValue]; -} - -- (void)setMp_TouchAreaInsets:(UIEdgeInsets)touchAreaInsets -{ - NSValue *value = [NSValue valueWithUIEdgeInsets:touchAreaInsets]; - objc_setAssociatedObject(self, @selector(mp_TouchAreaInsets), value, OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event -{ - UIEdgeInsets touchAreaInsets = self.mp_TouchAreaInsets; - CGRect bounds = self.bounds; - bounds = CGRectMake(bounds.origin.x - touchAreaInsets.left, - bounds.origin.y - touchAreaInsets.top, - bounds.size.width + touchAreaInsets.left + touchAreaInsets.right, - bounds.size.height + touchAreaInsets.top + touchAreaInsets.bottom); - return CGRectContainsPoint(bounds, point); -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.h deleted file mode 100644 index c4242dcff..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// UIColor+MPAdditions.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface UIColor (MPAdditions) - -+ (UIColor *)mp_colorFromHexString:(NSString *)hexString alpha:(CGFloat)alpha; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.m deleted file mode 100644 index c0532bdc2..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIColor+MPAdditions.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// UIColor+MPAdditions.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "UIColor+MPAdditions.h" - -@implementation UIColor (MPAdditions) - -+ (UIColor *)mp_colorFromHexString:(NSString *)hexString alpha:(CGFloat)alpha -{ - unsigned rgbValue = 0; - NSScanner *scanner = [NSScanner scannerWithString:hexString]; - [scanner setScanLocation:1]; // bypass '#' character - [scanner scanHexInt:&rgbValue]; - return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:alpha]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.h deleted file mode 100644 index 2129012d1..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// UIView+MPAdditions.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface UIView (MPAdditions) - -@property (nonatomic) CGFloat mp_x; -@property (nonatomic) CGFloat mp_y; -@property (nonatomic) CGFloat mp_height; -@property (nonatomic) CGFloat mp_width; - -- (void)setMp_x:(CGFloat)mp_x; -- (void)setMp_y:(CGFloat)mp_y; -- (void)setMp_width:(CGFloat)mp_width; -- (void)setMp_height:(CGFloat)mp_height; - -- (UIView *)mp_snapshotView; - -// convert any UIView to UIImage view. We can apply blur effect on UIImage. -- (UIImage *)mp_snapshot:(BOOL)usePresentationLayer; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.m deleted file mode 100644 index 8ecd51aa7..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIView+MPAdditions.m +++ /dev/null @@ -1,100 +0,0 @@ -// -// UIView+MPAdditions.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "UIView+MPAdditions.h" - -@implementation UIView (Helper) - -- (CGFloat)mp_x -{ - return self.frame.origin.x; -} - -- (CGFloat)mp_y -{ - return self.frame.origin.y; -} - -- (CGFloat)mp_width -{ - return self.frame.size.width; -} - -- (CGFloat)mp_height -{ - return self.frame.size.height; -} - -- (void)setMp_x:(CGFloat)mp_x -{ - [self setX:mp_x andY:self.frame.origin.y]; -} - -- (void)setMp_y:(CGFloat)mp_y -{ - [self setX:self.frame.origin.x andY:mp_y]; -} - -- (void)setX:(CGFloat)x andY:(CGFloat)y -{ - CGRect f = self.frame; - self.frame = CGRectMake(x, y, f.size.width, f.size.height); -} - - -- (void)setMp_width:(CGFloat)mp_width -{ - CGRect frame = self.frame; - frame.size.width = mp_width; - self.frame = frame; -} - -- (void)setMp_height:(CGFloat)mp_height -{ - CGRect frame = self.frame; - frame.size.height = mp_height; - self.frame = frame; -} - -- (UIView *)mp_snapshotView -{ - CGRect rect = self.bounds; - UIGraphicsBeginImageContextWithOptions(rect.size, NO, self.window.screen.scale); - UIView *snapshotView; - if ([self respondsToSelector:@selector(snapshotViewAfterScreenUpdates:)]) { - snapshotView = [self snapshotViewAfterScreenUpdates:NO]; - } else { - CGContextRef ctx = UIGraphicsGetCurrentContext(); - [self.layer renderInContext:ctx]; - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - snapshotView = [[UIImageView alloc] initWithImage:image]; - } - UIGraphicsEndImageContext(); - return snapshotView; -} - -- (UIImage *)mp_snapshot:(BOOL)usePresentationLayer -{ - CGRect rect = self.bounds; - UIGraphicsBeginImageContextWithOptions(rect.size, NO, self.window.screen.scale); - if (!usePresentationLayer && [self respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) { - [self drawViewHierarchyInRect:rect afterScreenUpdates:NO]; - } else { - CGContextRef ctx = UIGraphicsGetCurrentContext(); - if (usePresentationLayer) { - [self.layer.presentationLayer renderInContext:ctx]; - } else { - [self.layer renderInContext:ctx]; - } - } - UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); - UIGraphicsEndImageContext(); - return image; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIWebView+MPAdditions.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIWebView+MPAdditions.h deleted file mode 100644 index b8cb7b7e1..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIWebView+MPAdditions.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// UIWebView+MPAdditions.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -extern NSString *const kJavaScriptDisableDialogSnippet; - -@interface UIWebView (MPAdditions) - -- (void)mp_setScrollable:(BOOL)scrollable; -- (void)disableJavaScriptDialogs; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIWebView+MPAdditions.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIWebView+MPAdditions.m deleted file mode 100644 index 111d15a4b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/Categories/UIWebView+MPAdditions.m +++ /dev/null @@ -1,49 +0,0 @@ -// -// UIWebView+MPAdditions.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "UIWebView+MPAdditions.h" - -NSString *const kJavaScriptDisableDialogSnippet = @"window.alert = function() { }; window.prompt = function() { }; window.confirm = function() { };"; - -@implementation UIWebView (MPAdditions) - -/* - * Find all subviews that are UIScrollViews or subclasses and set their scrolling and bounce. - */ -- (void)mp_setScrollable:(BOOL)scrollable { - if ([self respondsToSelector:@selector(scrollView)]) - { - UIScrollView *scrollView = self.scrollView; - scrollView.scrollEnabled = scrollable; - scrollView.bounces = scrollable; - } - else - { - UIScrollView *scrollView = nil; - for (UIView *v in self.subviews) - { - if ([v isKindOfClass:[UIScrollView class]]) - { - scrollView = (UIScrollView *)v; - break; - } - } - scrollView.scrollEnabled = scrollable; - scrollView.bounces = scrollable; - } -} - -/* - * Redefine alert, prompt, and confirm to do nothing - */ -- (void)disableJavaScriptDialogs -{ - [self stringByEvaluatingJavaScriptFromString:kJavaScriptDisableDialogSnippet]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.h deleted file mode 100644 index 73d11abf3..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// MOPUBExperimentProvider.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdDestinationDisplayAgent.h" - -@interface MOPUBExperimentProvider : NSObject - -+ (void)setDisplayAgentType:(MOPUBDisplayAgentType)displayAgentType; -+ (void)setDisplayAgentFromAdServer:(MOPUBDisplayAgentType)displayAgentType; -+ (MOPUBDisplayAgentType)displayAgentType; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.m deleted file mode 100644 index 861d8718c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MOPUBExperimentProvider.m +++ /dev/null @@ -1,40 +0,0 @@ -// -// MOPUBExperimentProvider.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBExperimentProvider.h" - -@implementation MOPUBExperimentProvider - -static BOOL gIsDisplayAgentOverriddenByClient = NO; -static MOPUBDisplayAgentType gDisplayAgentType = MOPUBDisplayAgentTypeInApp; - -+ (void)setDisplayAgentType:(MOPUBDisplayAgentType)displayAgentType -{ - gIsDisplayAgentOverriddenByClient = YES; - gDisplayAgentType = displayAgentType; -} - -+ (void)setDisplayAgentFromAdServer:(MOPUBDisplayAgentType)displayAgentType -{ - if (!gIsDisplayAgentOverriddenByClient) { - gDisplayAgentType = displayAgentType; - } -} - -+ (MOPUBDisplayAgentType)displayAgentType -{ - return gDisplayAgentType; -} - -// used in test only -+ (void)setDisplayAgentOverriddenByClientFlag:(BOOL)flag -{ - gIsDisplayAgentOverriddenByClient = flag; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPAnalyticsTracker.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPAnalyticsTracker.h deleted file mode 100644 index c9624ce20..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPAnalyticsTracker.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// MPAnalyticsTracker.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPAdConfiguration; - -@interface MPAnalyticsTracker : NSObject - -+ (MPAnalyticsTracker *)sharedTracker; - -- (void)trackImpressionForConfiguration:(MPAdConfiguration *)configuration; -- (void)trackClickForConfiguration:(MPAdConfiguration *)configuration; -- (void)sendTrackingRequestForURLs:(NSArray *)URLs; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPAnalyticsTracker.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPAnalyticsTracker.m deleted file mode 100644 index 5e0b86073..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPAnalyticsTracker.m +++ /dev/null @@ -1,51 +0,0 @@ -// -// MPAnalyticsTracker.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAnalyticsTracker.h" -#import "MPAdConfiguration.h" -#import "MPCoreInstanceProvider.h" -#import "MPHTTPNetworkSession.h" -#import "MPLogging.h" -#import "MPURLRequest.h" - -@implementation MPAnalyticsTracker - -+ (MPAnalyticsTracker *)sharedTracker -{ - static MPAnalyticsTracker * sharedTracker = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedTracker = [[self alloc] init]; - }); - return sharedTracker; -} - -- (void)trackImpressionForConfiguration:(MPAdConfiguration *)configuration -{ - // Take the @c impressionTrackingURLs array from @c configuration and use the @c sendTrackingRequestForURLs method - // to actually send the requests. - MPLogDebug(@"Tracking impression: %@", configuration.impressionTrackingURLs.firstObject); - [self sendTrackingRequestForURLs:configuration.impressionTrackingURLs]; -} - -- (void)trackClickForConfiguration:(MPAdConfiguration *)configuration -{ - MPLogDebug(@"Tracking click: %@", configuration.clickTrackingURL); - MPURLRequest * request = [[MPURLRequest alloc] initWithURL:configuration.clickTrackingURL]; - [MPHTTPNetworkSession startTaskWithHttpRequest:request]; -} - -- (void)sendTrackingRequestForURLs:(NSArray *)URLs -{ - for (NSURL *URL in URLs) { - MPURLRequest * trackingRequest = [[MPURLRequest alloc] initWithURL:URL]; - [MPHTTPNetworkSession startTaskWithHttpRequest:trackingRequest]; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPError.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPError.h deleted file mode 100644 index 6c805270a..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPError.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// MPError.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -extern NSString * const kMOPUBErrorDomain; - -typedef enum { - MOPUBErrorUnknown = -1, - MOPUBErrorNoInventory = 0, - MOPUBErrorAdUnitWarmingUp = 1, - MOPUBErrorNetworkTimedOut = 4, - MOPUBErrorServerError = 8, - MOPUBErrorAdapterNotFound = 16, - MOPUBErrorAdapterInvalid = 17, - MOPUBErrorAdapterHasNoInventory = 18, - MOPUBErrorUnableToParseJSONAdResponse, - MOPUBErrorUnexpectedNetworkResponse, - MOPUBErrorHTTPResponseNot200, - MOPUBErrorNoNetworkData, - MOPUBErrorSDKNotInitialized, - MOPUBErrorAdRequestTimedOut, - MOPUBErrorNoRenderer, -} MOPUBErrorCode; - -@interface MOPUBError : NSError - -+ (MOPUBError *)errorWithCode:(MOPUBErrorCode)code; -+ (MOPUBError *)errorWithCode:(MOPUBErrorCode)code localizedDescription:(NSString *)description; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPError.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPError.m deleted file mode 100644 index 9ba5e2e4b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPError.m +++ /dev/null @@ -1,28 +0,0 @@ -// -// MPError.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPError.h" - -NSString * const kMOPUBErrorDomain = @"com.mopub.iossdk"; - -@implementation MOPUBError - -+ (MOPUBError *)errorWithCode:(MOPUBErrorCode)code { - return [MOPUBError errorWithCode:code localizedDescription:nil]; -} - -+ (MOPUBError *)errorWithCode:(MOPUBErrorCode)code localizedDescription:(NSString *)description { - NSDictionary * userInfo = nil; - if (description != nil) { - userInfo = @{ NSLocalizedDescriptionKey: description }; - } - - return [self errorWithDomain:kMOPUBErrorDomain code:code userInfo:userInfo]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.h deleted file mode 100644 index 8e5ffeaff..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// MPGeolocationProvider.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@interface MPGeolocationProvider : NSObject - -/** - * Returns the shared instance of the `MPGeolocationProvider` class. - * - * @return The shared instance of the `MPGeolocationProvider` class. - */ -+ (instancetype)sharedProvider; - -/** - * The most recent location determined by the location provider. - */ -@property (nonatomic, readonly) CLLocation *lastKnownLocation; - -/** - * Determines whether the location provider should attempt to listen for location updates. The - * default value is YES. - */ -@property (nonatomic, assign) BOOL locationUpdatesEnabled; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.m deleted file mode 100644 index 197f49c5b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGeolocationProvider.m +++ /dev/null @@ -1,307 +0,0 @@ -// -// MPGeolocationProvider.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPGeolocationProvider.h" - -#import "MPCoreInstanceProvider.h" -#import "MPIdentityProvider.h" -#import "MPLogging.h" -#import "MPTimer.h" -#import "MPConsentManager.h" -#import "MPConsentChangedNotification.h" - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -// The minimum distance (meters) a device must move horizontally before CLLocationManager generates -// an update event. Used to limit the amount of events generated. -const CLLocationDistance kMPCityBlockDistanceFilter = 100.0; - -// The duration (seconds) for which we want to listen for location updates (i.e. how long we wait to -// call -stopUpdatingLocation after calling -startUpdatingLocation). -const NSTimeInterval kMPLocationUpdateDuration = 15.0; - -// The duration (seconds) between calls to -startUpdatingLocation. -const NSTimeInterval kMPLocationUpdateInterval = 10.0 * 60.0; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPGeolocationProvider () - -@property (nonatomic, readwrite) CLLocation *lastKnownLocation; -@property (nonatomic) CLLocationManager *locationManager; -@property (nonatomic) BOOL authorizedForLocationServices; -@property (nonatomic) NSDate *timeOfLastLocationUpdate; -@property (nonatomic) MPTimer *nextLocationUpdateTimer; -@property (nonatomic) MPTimer *locationUpdateDurationTimer; -// Raw locationUpdatesEnabled value set by publisher -@property (nonatomic) BOOL rawLocationUpdatesEnabled; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPGeolocationProvider - -+ (instancetype)sharedProvider -{ - static MPGeolocationProvider *sharedProvider = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedProvider = [[[self class] alloc] init]; - }); - return sharedProvider; -} - -- (instancetype)init -{ - self = [super init]; - if (self) { - _rawLocationUpdatesEnabled = YES; - - _locationManager = [[MPCoreInstanceProvider sharedProvider] buildCLLocationManager]; - _locationManager.delegate = self; - _locationManager.distanceFilter = kMPCityBlockDistanceFilter; - - // CLLocationManager's `location` property may already contain location data upon - // initialization (for example, if the application uses significant location updates). - CLLocation *existingLocation = _locationManager.location; - if ([self locationHasValidCoordinates:existingLocation]) { - _lastKnownLocation = existingLocation; - MPLogDebug(@"Found previous location information."); - } - - // Avoid processing location updates when the application enters the background. - [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidEnterBackgroundNotification object:[UIApplication sharedApplication] queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) { - [self stopAllCurrentOrScheduledLocationUpdates]; - }]; - - // Re-activate location updates when the application comes back to the foreground. - [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillEnterForegroundNotification object:[UIApplication sharedApplication] queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) { - if (self.locationUpdatesEnabled) { - [self resumeLocationUpdatesAfterBackgrounding]; - } - }]; - - if ([MPConsentManager sharedManager].canCollectPersonalInfo) { - [self startRecurringLocationUpdates]; - } - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(consentStateChanged:) name:kMPConsentChangedNotification object:nil]; - - } - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:[UIApplication sharedApplication]]; - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillEnterForegroundNotification object:[UIApplication sharedApplication]]; -} - -#pragma mark - Public - -- (CLLocation *)lastKnownLocation -{ - if (!self.locationUpdatesEnabled) { - return nil; - } - - return _lastKnownLocation; -} - -- (BOOL)locationUpdatesEnabled -{ - return self.rawLocationUpdatesEnabled && [MPConsentManager sharedManager].canCollectPersonalInfo; -} - -- (void)setLocationUpdatesEnabled:(BOOL)enabled -{ - self.rawLocationUpdatesEnabled = enabled; - [self startOrStopLocationUpdates]; -} - -- (void)startOrStopLocationUpdates -{ - if (!self.locationUpdatesEnabled) { - [self stopAllCurrentOrScheduledLocationUpdates]; - self.lastKnownLocation = nil; - } else if (![self.locationUpdateDurationTimer isValid] && ![self.nextLocationUpdateTimer isValid]) { - [self startRecurringLocationUpdates]; - } -} - -#pragma mark - Internal - -- (void)setAuthorizedForLocationServices:(BOOL)authorizedForLocationServices -{ - _authorizedForLocationServices = authorizedForLocationServices; - - if (_authorizedForLocationServices && [CLLocationManager locationServicesEnabled]) { - [self startRecurringLocationUpdates]; - } else { - [self stopAllCurrentOrScheduledLocationUpdates]; - self.lastKnownLocation = nil; - } -} - -- (BOOL)isAuthorizedStatus:(CLAuthorizationStatus)status -{ - return (status == kCLAuthorizationStatusAuthorizedAlways) || (status == kCLAuthorizationStatusAuthorizedWhenInUse); -} - -/** - * Tells the location provider to start periodically retrieving new location data. - * - * The location provider will activate its underlying location manager for a specified amount of - * time, during which the provider may receive delegate callbacks about location updates. After this - * duration, the provider will schedule a future update. These updates can be stopped via - * -stopAllCurrentOrScheduledLocationUpdates. - */ -- (void)startRecurringLocationUpdates -{ - self.timeOfLastLocationUpdate = [NSDate date]; - - if (![CLLocationManager locationServicesEnabled] || ![self isAuthorizedStatus:[CLLocationManager authorizationStatus]]) { - MPLogDebug(@"Will not start location updates: the application is not authorized " - @"for location services."); - return; - } - - if (!self.locationUpdatesEnabled) { - MPLogDebug(@"Will not start location updates because they have been disabled."); - return; - } - - [self.locationManager startUpdatingLocation]; - - [self.locationUpdateDurationTimer invalidate]; - self.locationUpdateDurationTimer = [[MPCoreInstanceProvider sharedProvider] buildMPTimerWithTimeInterval:kMPLocationUpdateDuration target:self selector:@selector(currentLocationUpdateDidFinish) repeats:NO]; - [self.locationUpdateDurationTimer scheduleNow]; -} - -- (void)currentLocationUpdateDidFinish -{ - MPLogDebug(@"Stopping the current location update session and scheduling the next session."); - [self.locationUpdateDurationTimer invalidate]; - [self.locationManager stopUpdatingLocation]; - - [self scheduleNextLocationUpdateAfterDelay:kMPLocationUpdateInterval]; -} - -- (void)scheduleNextLocationUpdateAfterDelay:(NSTimeInterval)delay -{ - MPLogDebug(@"Next user location update due in %.1f seconds.", delay); - [self.nextLocationUpdateTimer invalidate]; - self.nextLocationUpdateTimer = [[MPCoreInstanceProvider sharedProvider] buildMPTimerWithTimeInterval:delay target:self selector:@selector(startRecurringLocationUpdates) repeats:NO]; - [self.nextLocationUpdateTimer scheduleNow]; -} - -- (void)stopAllCurrentOrScheduledLocationUpdates -{ - MPLogDebug(@"Stopping any scheduled location updates."); - [self.locationUpdateDurationTimer invalidate]; - [self.locationManager stopUpdatingLocation]; - - [self.nextLocationUpdateTimer invalidate]; -} - -- (void)resumeLocationUpdatesAfterBackgrounding -{ - NSTimeInterval timeSinceLastUpdate = [[NSDate date] timeIntervalSinceDate:self.timeOfLastLocationUpdate]; - - if (timeSinceLastUpdate >= kMPLocationUpdateInterval) { - MPLogDebug(@"Last known user location is stale. Updating location."); - [self startRecurringLocationUpdates]; - } else if (timeSinceLastUpdate >= 0) { - NSTimeInterval timeToNextUpdate = kMPLocationUpdateInterval - timeSinceLastUpdate; - [self scheduleNextLocationUpdateAfterDelay:timeToNextUpdate]; - } else { - [self scheduleNextLocationUpdateAfterDelay:kMPLocationUpdateInterval]; - } -} - -#pragma mark - CLLocation Helpers - -- (BOOL)isLocation:(CLLocation *)location betterThanLocation:(CLLocation *)otherLocation -{ - if (!otherLocation) { - return YES; - } - - // Nil locations and locations with invalid horizontal accuracy are worse than any location. - if (![self locationHasValidCoordinates:location]) { - return NO; - } - - if ([self isLocation:location olderThanLocation:otherLocation]) { - return NO; - } - - return YES; -} - -- (BOOL)locationHasValidCoordinates:(CLLocation *)location -{ - return location && location.horizontalAccuracy > 0; -} - -- (BOOL)isLocation:(CLLocation *)location olderThanLocation:(CLLocation *)otherLocation -{ - return [location.timestamp timeIntervalSinceDate:otherLocation.timestamp] < 0; -} - -#pragma mark - (iOS 6.0+) - -- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status -{ - MPLogDebug(@"Location authorization status changed to: %ld", (long)status); - - switch (status) { - case kCLAuthorizationStatusNotDetermined: - case kCLAuthorizationStatusDenied: - case kCLAuthorizationStatusRestricted: - self.authorizedForLocationServices = NO; - break; - case kCLAuthorizationStatusAuthorizedAlways: - case kCLAuthorizationStatusAuthorizedWhenInUse: - self.authorizedForLocationServices = YES; - break; - default: - self.authorizedForLocationServices = NO; - break; - } -} - -- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations -{ - for (CLLocation *location in locations) { - if ([self isLocation:location betterThanLocation:self.lastKnownLocation]) { - self.lastKnownLocation = location; - MPLogDebug(@"Updated last known user location: %@", location); - } - } -} - -- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error -{ - if (error.code == kCLErrorDenied) { - MPLogDebug(@"Location manager failed: the user has denied access to location services."); - [self stopAllCurrentOrScheduledLocationUpdates]; - } else if (error.code == kCLErrorLocationUnknown) { - MPLogDebug(@"Location manager could not obtain a location right now."); - } -} - -#pragma mark - Consent - -- (void)consentStateChanged:(NSNotification *)notification -{ - [self startOrStopLocationUpdates]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.h deleted file mode 100644 index 4514a41c0..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.h +++ /dev/null @@ -1,118 +0,0 @@ -// -// MPGlobal.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -#ifndef MP_ANIMATED -#define MP_ANIMATED YES -#endif - -UIInterfaceOrientation MPInterfaceOrientation(void); -UIWindow *MPKeyWindow(void); -CGFloat MPStatusBarHeight(void); -CGRect MPApplicationFrame(void); -CGRect MPScreenBounds(void); -CGSize MPScreenResolution(void); -CGFloat MPDeviceScaleFactor(void); -NSDictionary *MPDictionaryFromQueryString(NSString *query); -NSString *MPSHA1Digest(NSString *string); -BOOL MPViewIsVisible(UIView *view); -BOOL MPViewIntersectsParentWindowWithPercent(UIView *view, CGFloat percentVisible); -NSString *MPResourcePathForResource(NSString *resourceName); -NSArray *MPConvertStringArrayToURLArray(NSArray *strArray); -//////////////////////////////////////////////////////////////////////////////////////////////////// - -/* - * Availability constants. - */ - -#define MP_IOS_2_0 20000 -#define MP_IOS_2_1 20100 -#define MP_IOS_2_2 20200 -#define MP_IOS_3_0 30000 -#define MP_IOS_3_1 30100 -#define MP_IOS_3_2 30200 -#define MP_IOS_4_0 40000 -#define MP_IOS_4_1 40100 -#define MP_IOS_4_2 40200 -#define MP_IOS_4_3 40300 -#define MP_IOS_5_0 50000 -#define MP_IOS_5_1 50100 -#define MP_IOS_6_0 60000 -#define MP_IOS_7_0 70000 -#define MP_IOS_8_0 80000 -#define MP_IOS_9_0 90000 - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -typedef NS_ENUM(NSUInteger, MPInterstitialCloseButtonStyle) { - MPInterstitialCloseButtonStyleAlwaysVisible, - MPInterstitialCloseButtonStyleAlwaysHidden, - MPInterstitialCloseButtonStyleAdControlled, -}; - -typedef NS_ENUM(NSUInteger, MPInterstitialOrientationType) { - MPInterstitialOrientationTypePortrait, - MPInterstitialOrientationTypeLandscape, - MPInterstitialOrientationTypeAll, -}; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface UIDevice (MPAdditions) - -- (NSString *)mp_hardwareDeviceName; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface UIApplication (MPAdditions) - -// Correct way to hide/show the status bar on pre-ios 7. -- (void)mp_preIOS7setApplicationStatusBarHidden:(BOOL)hidden; -- (BOOL)mp_supportsOrientationMask:(UIInterfaceOrientationMask)orientationMask; -- (BOOL)mp_doesOrientation:(UIInterfaceOrientation)orientation matchOrientationMask:(UIInterfaceOrientationMask)orientationMask; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// Optional Class Forward Def Protocols -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@class MPAdConfiguration, CLLocation; - -@protocol MPAdAlertManagerProtocol - -@property (nonatomic, strong) MPAdConfiguration *adConfiguration; -@property (nonatomic, copy) NSString *adUnitId; -@property (nonatomic, copy) CLLocation *location; -@property (nonatomic, weak) UIView *targetAdView; -@property (nonatomic, weak) id delegate; - -- (void)beginMonitoringAlerts; -- (void)endMonitoringAlerts; -- (void)processAdAlertOnce; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// Small alert wrapper class to handle telephone protocol prompting -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@class MPTelephoneConfirmationController; - -typedef void (^MPTelephoneConfirmationControllerClickHandler)(NSURL *targetTelephoneURL, BOOL confirmed); - -@interface MPTelephoneConfirmationController : NSObject - -- (id)initWithURL:(NSURL *)url clickHandler:(MPTelephoneConfirmationControllerClickHandler)clickHandler; -- (void)show; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.m deleted file mode 100644 index 7b185bec1..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPGlobal.m +++ /dev/null @@ -1,386 +0,0 @@ -// -// MPGlobal.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPGlobal.h" -#import "MPConstants.h" -#import "MPLogging.h" -#import "NSURL+MPAdditions.h" -#import "MoPub.h" -#import - -#import -#import - -BOOL MPViewHasHiddenAncestor(UIView *view); -UIWindow *MPViewGetParentWindow(UIView *view); -BOOL MPViewIntersectsParentWindow(UIView *view); -NSString *MPSHA1Digest(NSString *string); - -UIInterfaceOrientation MPInterfaceOrientation() -{ - return [UIApplication sharedApplication].statusBarOrientation; -} - -UIWindow *MPKeyWindow() -{ - return [UIApplication sharedApplication].keyWindow; -} - -CGFloat MPStatusBarHeight() { - if ([UIApplication sharedApplication].statusBarHidden) return 0.0f; - - CGFloat width = CGRectGetWidth([UIApplication sharedApplication].statusBarFrame); - CGFloat height = CGRectGetHeight([UIApplication sharedApplication].statusBarFrame); - - return (width < height) ? width : height; -} - -CGRect MPApplicationFrame() -{ - CGRect frame = MPScreenBounds(); - - frame.origin.y += MPStatusBarHeight(); - frame.size.height -= MPStatusBarHeight(); - - return frame; -} - -CGRect MPScreenBounds() -{ - // Prior to iOS 8, window and screen coordinates were fixed and always specified relative to the - // device’s screen in a portrait orientation. Starting with iOS8, the `fixedCoordinateSpace` - // property was introduced which specifies bounds that always reflect the screen dimensions of - // the device in a portrait-up orientation. - CGRect bounds = [UIScreen mainScreen].bounds; - if ([[UIScreen mainScreen] respondsToSelector:@selector(fixedCoordinateSpace)]) { - bounds = [UIScreen mainScreen].fixedCoordinateSpace.bounds; - } - - // Rotate the portrait-up bounds if the orientation of the device is in landscape. - if (UIInterfaceOrientationIsLandscape(MPInterfaceOrientation())) { - CGFloat width = bounds.size.width; - bounds.size.width = bounds.size.height; - bounds.size.height = width; - } - - return bounds; -} - -CGSize MPScreenResolution() -{ - CGRect bounds = MPScreenBounds(); - CGFloat scale = MPDeviceScaleFactor(); - - return CGSizeMake(bounds.size.width*scale, bounds.size.height*scale); -} - -CGFloat MPDeviceScaleFactor() -{ - if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && - [[UIScreen mainScreen] respondsToSelector:@selector(scale)]) { - return [[UIScreen mainScreen] scale]; - } else { - return 1.0; - } -} - -NSDictionary *MPDictionaryFromQueryString(NSString *query) { - NSMutableDictionary *queryDict = [NSMutableDictionary dictionary]; - NSArray *queryElements = [query componentsSeparatedByString:@"&"]; - for (NSString *element in queryElements) { - NSArray *keyVal = [element componentsSeparatedByString:@"="]; - NSString *key = [keyVal objectAtIndex:0]; - NSString *value = [keyVal lastObject]; - [queryDict setObject:[value stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] - forKey:key]; - } - return queryDict; -} - -NSString *MPSHA1Digest(NSString *string) -{ - unsigned char digest[CC_SHA1_DIGEST_LENGTH]; - NSData *data = [string dataUsingEncoding:NSASCIIStringEncoding]; - CC_SHA1([data bytes], (CC_LONG)[data length], digest); - - NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2]; - for (int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) { - [output appendFormat:@"%02x", digest[i]]; - } - - return output; -} - -BOOL MPViewIsVisible(UIView *view) -{ - // In order for a view to be visible, it: - // 1) must not be hidden, - // 2) must not have an ancestor that is hidden, - // 3) must be within the frame of its parent window. - // - // Note: this function does not check whether any part of the view is obscured by another view. - - return (!view.hidden && - !MPViewHasHiddenAncestor(view) && - MPViewIntersectsParentWindow(view)); -} - -BOOL MPViewHasHiddenAncestor(UIView *view) -{ - UIView *ancestor = view.superview; - while (ancestor) { - if (ancestor.hidden) return YES; - ancestor = ancestor.superview; - } - return NO; -} - -UIWindow *MPViewGetParentWindow(UIView *view) -{ - UIView *ancestor = view.superview; - while (ancestor) { - if ([ancestor isKindOfClass:[UIWindow class]]) { - return (UIWindow *)ancestor; - } - ancestor = ancestor.superview; - } - return nil; -} - -BOOL MPViewIntersectsParentWindow(UIView *view) -{ - UIWindow *parentWindow = MPViewGetParentWindow(view); - - if (parentWindow == nil) { - return NO; - } - - // We need to call convertRect:toView: on this view's superview rather than on this view itself. - CGRect viewFrameInWindowCoordinates = [view.superview convertRect:view.frame toView:parentWindow]; - - return CGRectIntersectsRect(viewFrameInWindowCoordinates, parentWindow.frame); -} - -BOOL MPViewIntersectsParentWindowWithPercent(UIView *view, CGFloat percentVisible) -{ - UIWindow *parentWindow = MPViewGetParentWindow(view); - - if (parentWindow == nil) { - return NO; - } - - // We need to call convertRect:toView: on this view's superview rather than on this view itself. - CGRect viewFrameInWindowCoordinates = [view.superview convertRect:view.frame toView:parentWindow]; - CGRect intersection = CGRectIntersection(viewFrameInWindowCoordinates, parentWindow.frame); - - CGFloat intersectionArea = CGRectGetWidth(intersection) * CGRectGetHeight(intersection); - CGFloat originalArea = CGRectGetWidth(view.bounds) * CGRectGetHeight(view.bounds); - - return intersectionArea >= (originalArea * percentVisible); -} - -NSString *MPResourcePathForResource(NSString *resourceName) -{ - if ([[NSBundle mainBundle] pathForResource:@"MoPub" ofType:@"bundle"] != nil) { - return [@"MoPub.bundle" stringByAppendingPathComponent:resourceName]; - } - else if ([[UIDevice currentDevice].systemVersion compare:@"8.0" options:NSNumericSearch] != NSOrderedAscending) { - // When using open source or cocoapods (on ios 8 and above), we can rely on the MoPub class - // living in the same bundle/framework as the assets. - // We can use pathForResource on ios 8 and above to succesfully load resources. - NSBundle *resourceBundle = [NSBundle bundleForClass:[MoPub class]]; - NSString *resourcePath = [resourceBundle pathForResource:resourceName ofType:nil]; - return resourcePath; - } - else { - // We can just return the resource name because: - // 1. This is being used as an open source release so the resource will be - // in the main bundle. - // 2. This is cocoapods but CAN'T be using frameworks since that is only allowed - // on ios 8 and above. - return resourceName; - } -} - -NSArray *MPConvertStringArrayToURLArray(NSArray *strArray) -{ - NSMutableArray *urls = [NSMutableArray array]; - - for (NSObject *str in strArray) { - if ([str isKindOfClass:[NSString class]]) { - NSURL *url = [NSURL URLWithString:(NSString *)str]; - if (url) { - [urls addObject:url]; - } - } - } - - return urls; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation UIDevice (MPAdditions) - -- (NSString *)mp_hardwareDeviceName -{ - size_t size; - sysctlbyname("hw.machine", NULL, &size, NULL, 0); - char *machine = malloc(size); - sysctlbyname("hw.machine", machine, &size, NULL, 0); - NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding]; - free(machine); - return platform; -} - -@end - -@implementation UIApplication (MPAdditions) - -- (void)mp_preIOS7setApplicationStatusBarHidden:(BOOL)hidden -{ - // Hiding the status bar should use a fade effect. - // Displaying the status bar should use no animation. - UIStatusBarAnimation animation = hidden ? - UIStatusBarAnimationFade : UIStatusBarAnimationNone; - [[UIApplication sharedApplication] setStatusBarHidden:hidden withAnimation:animation]; -} - -- (BOOL)mp_supportsOrientationMask:(UIInterfaceOrientationMask)orientationMask -{ - NSArray *supportedOrientations = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"UISupportedInterfaceOrientations"]; - - if (orientationMask & UIInterfaceOrientationMaskLandscapeLeft) { - if ([supportedOrientations containsObject:@"UIInterfaceOrientationLandscapeLeft"]) { - return YES; - } - } - - if (orientationMask & UIInterfaceOrientationMaskLandscapeRight) { - if ([supportedOrientations containsObject:@"UIInterfaceOrientationLandscapeRight"]) { - return YES; - } - } - - if (orientationMask & UIInterfaceOrientationMaskPortrait) { - if ([supportedOrientations containsObject:@"UIInterfaceOrientationPortrait"]) { - return YES; - } - } - - if (orientationMask & UIInterfaceOrientationMaskPortraitUpsideDown) { - if ([supportedOrientations containsObject:@"UIInterfaceOrientationPortraitUpsideDown"]) { - return YES; - } - } - - return NO; -} - -- (BOOL)mp_doesOrientation:(UIInterfaceOrientation)orientation matchOrientationMask:(UIInterfaceOrientationMask)orientationMask -{ - BOOL supportsLandscapeLeft = (orientationMask & UIInterfaceOrientationMaskLandscapeLeft) > 0; - BOOL supportsLandscapeRight = (orientationMask & UIInterfaceOrientationMaskLandscapeRight) > 0; - BOOL supportsPortrait = (orientationMask & UIInterfaceOrientationMaskPortrait) > 0; - BOOL supportsPortraitUpsideDown = (orientationMask & UIInterfaceOrientationMaskPortraitUpsideDown) > 0; - - if (supportsLandscapeLeft && orientation == UIInterfaceOrientationLandscapeLeft) { - return YES; - } - - if (supportsLandscapeRight && orientation == UIInterfaceOrientationLandscapeRight) { - return YES; - } - - if (supportsPortrait && orientation == UIInterfaceOrientationPortrait) { - return YES; - } - - if (supportsPortraitUpsideDown && orientation == UIInterfaceOrientationPortraitUpsideDown) { - return YES; - } - - return NO; -} - -@end -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPTelephoneConfirmationController () - -@property (nonatomic, strong) UIAlertView *alertView; -@property (nonatomic, strong) NSURL *telephoneURL; -@property (nonatomic, copy) MPTelephoneConfirmationControllerClickHandler clickHandler; - -@end - -@implementation MPTelephoneConfirmationController - -- (id)initWithURL:(NSURL *)url clickHandler:(MPTelephoneConfirmationControllerClickHandler)clickHandler -{ - if (![url mp_hasTelephoneScheme] && ![url mp_hasTelephonePromptScheme]) { - // Shouldn't be here as the url must have a tel or telPrompt scheme. - MPLogError(@"Processing URL as a telephone URL when %@ doesn't follow the tel:// or telprompt:// schemes", url.absoluteString); - return nil; - } - - if (self = [super init]) { - // If using tel://xxxxxxx, the host will be the number. If using tel:xxxxxxx, we will try the resourceIdentifier. - NSString *phoneNumber = [url host]; - - if (!phoneNumber) { - phoneNumber = [url resourceSpecifier]; - if ([phoneNumber length] == 0) { - MPLogError(@"Invalid telelphone URL: %@.", url.absoluteString); - return nil; - } - } - - _alertView = [[UIAlertView alloc] initWithTitle: @"Are you sure you want to call?" - message:phoneNumber - delegate:self - cancelButtonTitle:@"Cancel" - otherButtonTitles:@"Call", nil]; - self.clickHandler = clickHandler; - - // We want to manually handle telPrompt scheme alerts. So we'll convert telPrompt schemes to tel schemes. - if ([url mp_hasTelephonePromptScheme]) { - self.telephoneURL = [NSURL URLWithString:[NSString stringWithFormat:@"tel://%@", phoneNumber]]; - } else { - self.telephoneURL = url; - } - } - - return self; -} - -- (void)dealloc -{ - self.alertView.delegate = nil; - [self.alertView dismissWithClickedButtonIndex:0 animated:YES]; -} - -- (void)show -{ - [self.alertView show]; -} - -#pragma mark - UIAlertViewDelegate - -- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex -{ - BOOL confirmed = (buttonIndex == 1); - - if (self.clickHandler) { - self.clickHandler(self.telephoneURL, confirmed); - } - -} - -@end - diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.h deleted file mode 100644 index d3e73648b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.h +++ /dev/null @@ -1,42 +0,0 @@ -// -// MPIdentityProvider.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPIdentityProvider : NSObject - -/** - * Return IDFA if it's available. If IDFA is not available or contains only 0s, return MoPub rotation ID that changes every 24 hours. - */ -+ (NSString *)identifier; - -/** - * Return IDFA if it's available. If IDFA is not available or contains only 0s, return nil. - */ -+ (NSString *)identifierFromASIdentifierManager:(BOOL)obfuscate; - -/** -* Return MoPub UUID -*/ -+ (NSString *)obfuscatedIdentifier; - -+ (BOOL)advertisingTrackingEnabled; - -/** - * A Boolean value indicating whether the MoPub SDK should create a MoPub ID that can be used - * for frequency capping when Limit ad tracking is on & the IDFA we get is - * 00000000-0000-0000-0000-000000000000. - * - * When set to NO, the SDK will not create a MoPub ID in the above case. When set to YES, the - * SDK will generate a MoPub ID. The default value is YES. - * - */ -+ (void)setFrequencyCappingIdUsageEnabled:(BOOL)frequencyCappingIdUsageEnabled; -+ (BOOL)frequencyCappingIdUsageEnabled; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.m deleted file mode 100644 index b94fab45c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPIdentityProvider.m +++ /dev/null @@ -1,113 +0,0 @@ -// -// MPIdentityProvider.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPIdentityProvider.h" -#import "MPGlobal.h" -#import "MPConsentManager.h" -#import - -#define MOPUB_IDENTIFIER_DEFAULTS_KEY @"com.mopub.identifier" -#define MOPUB_IDENTIFIER_LAST_SET_TIME_KEY @"com.mopub.identifiertime" -#define MOPUB_DAY_IN_SECONDS 24 * 60 * 60 -#define MOPUB_ALL_ZERO_UUID @"00000000-0000-0000-0000-000000000000" - -static BOOL gFrequencyCappingIdUsageEnabled = YES; - -@interface MPIdentityProvider () - -+ (NSString *)mopubIdentifier:(BOOL)obfuscate; - -@end - -@implementation MPIdentityProvider - -+ (NSString *)identifier -{ - return [self _identifier:NO]; -} - -+ (NSString *)obfuscatedIdentifier -{ - return [self _identifier:YES]; -} - -+ (NSString *)_identifier:(BOOL)obfuscate -{ - if (MPIdentityProvider.advertisingTrackingEnabled && [MPConsentManager sharedManager].canCollectPersonalInfo) { - return [self identifierFromASIdentifierManager:obfuscate]; - } else { - return [self mopubIdentifier:obfuscate]; - } -} - -+ (BOOL)advertisingTrackingEnabled -{ - return [[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]; -} - -+ (NSString *)identifierFromASIdentifierManager:(BOOL)obfuscate -{ - if (obfuscate) { - return @"ifa:XXXX"; - } - if (!MPIdentityProvider.advertisingTrackingEnabled) { - return nil; - } - - NSString *identifier = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString]; - return [NSString stringWithFormat:@"ifa:%@", [identifier uppercaseString]]; -} - -+ (NSString *)mopubIdentifier:(BOOL)obfuscate -{ - if (![self frequencyCappingIdUsageEnabled]) { - return [NSString stringWithFormat:@"ifa:%@", MOPUB_ALL_ZERO_UUID]; - } - - if (obfuscate) { - return @"mopub:XXXX"; - } - - // reset identifier every 24 hours - NSDate *lastSetDate = [[NSUserDefaults standardUserDefaults] objectForKey:MOPUB_IDENTIFIER_LAST_SET_TIME_KEY]; - if (!lastSetDate) { - [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:MOPUB_IDENTIFIER_LAST_SET_TIME_KEY]; - [[NSUserDefaults standardUserDefaults] synchronize]; - } else { - NSTimeInterval diff = [[NSDate date] timeIntervalSinceDate:lastSetDate]; - if (diff > MOPUB_DAY_IN_SECONDS) { - [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:MOPUB_IDENTIFIER_LAST_SET_TIME_KEY]; - [[NSUserDefaults standardUserDefaults] removeObjectForKey:MOPUB_IDENTIFIER_DEFAULTS_KEY]; - } - } - - NSString *identifier = [[NSUserDefaults standardUserDefaults] objectForKey:MOPUB_IDENTIFIER_DEFAULTS_KEY]; - if (!identifier) { - CFUUIDRef uuidObject = CFUUIDCreate(kCFAllocatorDefault); - NSString *uuidStr = (NSString *)CFBridgingRelease(CFUUIDCreateString(kCFAllocatorDefault, uuidObject)); - CFRelease(uuidObject); - - identifier = [NSString stringWithFormat:@"mopub:%@", [uuidStr uppercaseString]]; - [[NSUserDefaults standardUserDefaults] setObject:identifier forKey:MOPUB_IDENTIFIER_DEFAULTS_KEY]; - [[NSUserDefaults standardUserDefaults] synchronize]; - } - - return identifier; -} - -+ (void)setFrequencyCappingIdUsageEnabled:(BOOL)frequencyCappingIdUsageEnabled -{ - gFrequencyCappingIdUsageEnabled = frequencyCappingIdUsageEnabled; -} - -+ (BOOL)frequencyCappingIdUsageEnabled -{ - return gFrequencyCappingIdUsageEnabled; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPInternalUtils.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPInternalUtils.h deleted file mode 100644 index 9520286f1..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPInternalUtils.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MPInternalUtils.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#define SUPPRESS_PERFORM_SELECTOR_LEAK_WARNING(code) \ - _Pragma("clang diagnostic push") \ - _Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \ - code; \ - _Pragma("clang diagnostic pop") \ - -@interface MPInternalUtils : NSObject - -@end - -@interface NSMutableDictionary (MPInternalUtils) - -- (void)mp_safeSetObject:(id)obj forKey:(id)key; -- (void)mp_safeSetObject:(id)obj forKey:(id)key withDefault:(id)defaultObj; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPInternalUtils.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPInternalUtils.m deleted file mode 100644 index be87981ee..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPInternalUtils.m +++ /dev/null @@ -1,33 +0,0 @@ -// -// MPInternalUtils.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPInternalUtils.h" - -@implementation MPInternalUtils - -@end - -@implementation NSMutableDictionary (MPInternalUtils) - -- (void)mp_safeSetObject:(id)obj forKey:(id)key -{ - if (obj != nil) { - [self setObject:obj forKey:key]; - } -} - -- (void)mp_safeSetObject:(id)obj forKey:(id)key withDefault:(id)defaultObj -{ - if (obj != nil) { - [self setObject:obj forKey:key]; - } else { - [self setObject:defaultObj forKey:key]; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPLogProvider.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPLogProvider.h deleted file mode 100644 index d9caa2cf7..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPLogProvider.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// MPLogProvider.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPLogging.h" - -@protocol MPLogger; - -@interface MPLogProvider : NSObject - -+ (MPLogProvider *)sharedLogProvider; -- (void)addLogger:(id)logger; -- (void)removeLogger:(id)logger; -- (void)logMessage:(NSString *)message atLogLevel:(MPLogLevel)logLevel; - -@end - -@protocol MPLogger - -- (MPLogLevel)logLevel; -- (void)logMessage:(NSString *)message; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPLogProvider.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPLogProvider.m deleted file mode 100644 index 58a063f20..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPLogProvider.m +++ /dev/null @@ -1,84 +0,0 @@ -// -// MPLogProvider.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPLogProvider.h" - -@interface MPLogProvider () - -@property (nonatomic, strong) NSMutableArray *loggers; - -@end - -@interface MPSystemLogger : NSObject -@end - -@implementation MPLogProvider - -#pragma mark - Singleton instance - -+ (MPLogProvider *)sharedLogProvider -{ - static dispatch_once_t once; - static MPLogProvider *sharedLogProvider; - dispatch_once(&once, ^{ - sharedLogProvider = [[self alloc] init]; - }); - - return sharedLogProvider; -} - -#pragma mark - Object Lifecycle - -- (id)init -{ - self = [super init]; - if (self) { - _loggers = [NSMutableArray array]; - [self addLogger:[[MPSystemLogger alloc] init]]; - } - return self; -} - -#pragma mark - Loggers - -- (void)addLogger:(id)logger -{ - [self.loggers addObject:logger]; -} - -- (void)removeLogger:(id)logger -{ - [self.loggers removeObject:logger]; -} - -#pragma mark - Logging - -- (void)logMessage:(NSString *)message atLogLevel:(MPLogLevel)logLevel -{ - [self.loggers enumerateObjectsUsingBlock:^(id logger, NSUInteger idx, BOOL *stop) { - if ([logger logLevel] <= logLevel) { - [logger logMessage:message]; - } - }]; -} - -@end - -@implementation MPSystemLogger - -- (void)logMessage:(NSString *)message -{ - NSLog(@"%@", message); -} - -- (MPLogLevel)logLevel -{ - return MPLogGetLevel(); -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPLogging.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPLogging.h deleted file mode 100644 index 4d3cd5bd1..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPLogging.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// MPLogging.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPConstants.h" -#import "MPLogLevel.h" - -extern NSString * const kMPClearErrorLogFormatWithAdUnitID; -extern NSString * const kMPWarmingUpErrorLogFormatWithAdUnitID; - -MPLogLevel MPLogGetLevel(void); -void MPLogSetLevel(MPLogLevel level); -void _MPLogTrace(NSString *format, ...); -void _MPLogDebug(NSString *format, ...); -void _MPLogInfo(NSString *format, ...); -void _MPLogWarn(NSString *format, ...); -void _MPLogError(NSString *format, ...); -void _MPLogFatal(NSString *format, ...); - -#if MP_DEBUG_MODE && !SPECS - -#define MPLogTrace(...) _MPLogTrace(__VA_ARGS__) -#define MPLogDebug(...) _MPLogDebug(__VA_ARGS__) -#define MPLogInfo(...) _MPLogInfo(__VA_ARGS__) -#define MPLogWarn(...) _MPLogWarn(__VA_ARGS__) -#define MPLogError(...) _MPLogError(__VA_ARGS__) -#define MPLogFatal(...) _MPLogFatal(__VA_ARGS__) - -#else - -#define MPLogTrace(...) {} -#define MPLogDebug(...) {} -#define MPLogInfo(...) {} -#define MPLogWarn(...) {} -#define MPLogError(...) {} -#define MPLogFatal(...) {} - -#endif diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPLogging.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPLogging.m deleted file mode 100644 index 0e83b191c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPLogging.m +++ /dev/null @@ -1,102 +0,0 @@ -// -// MPLogging.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPLogging.h" -#import "MPIdentityProvider.h" -#import "MPLogProvider.h" - -NSString * const kMPClearErrorLogFormatWithAdUnitID = @"No ads found for ad unit: %@"; -NSString * const kMPWarmingUpErrorLogFormatWithAdUnitID = @"Ad unit %@ is currently warming up. Please try again in a few minutes."; -NSString * const kMPSystemLogPrefix = @"MOPUB: %@"; - -static MPLogLevel systemLogLevel = MPLogLevelInfo; - -MPLogLevel MPLogGetLevel() -{ - return systemLogLevel; -} - -void MPLogSetLevel(MPLogLevel level) -{ - systemLogLevel = level; -} - -void _MPLog(MPLogLevel level, NSString *format, va_list args) -{ - static NSString *sIdentifier; - static NSString *sObfuscatedIdentifier; - - if (!sIdentifier) { - sIdentifier = [[MPIdentityProvider identifier] copy]; - } - - if (!sObfuscatedIdentifier) { - sObfuscatedIdentifier = [[MPIdentityProvider obfuscatedIdentifier] copy]; - } - - NSString *logString = [[NSString alloc] initWithFormat:format arguments:args]; - - // Replace identifier with a obfuscated version when logging. - logString = [logString stringByReplacingOccurrencesOfString:sIdentifier withString:sObfuscatedIdentifier]; - - [[MPLogProvider sharedLogProvider] logMessage:logString atLogLevel:level]; -} - -void _MPLogTrace(NSString *format, ...) -{ - format = [NSString stringWithFormat:kMPSystemLogPrefix, format]; - va_list args; - va_start(args, format); - _MPLog(MPLogLevelTrace, format, args); - va_end(args); -} - -void _MPLogDebug(NSString *format, ...) -{ - format = [NSString stringWithFormat:kMPSystemLogPrefix, format]; - va_list args; - va_start(args, format); - _MPLog(MPLogLevelDebug, format, args); - va_end(args); -} - -void _MPLogWarn(NSString *format, ...) -{ - format = [NSString stringWithFormat:kMPSystemLogPrefix, format]; - va_list args; - va_start(args, format); - _MPLog(MPLogLevelWarn, format, args); - va_end(args); -} - -void _MPLogInfo(NSString *format, ...) -{ - format = [NSString stringWithFormat:kMPSystemLogPrefix, format]; - va_list args; - va_start(args, format); - _MPLog(MPLogLevelInfo, format, args); - va_end(args); -} - -void _MPLogError(NSString *format, ...) -{ - format = [NSString stringWithFormat:kMPSystemLogPrefix, format]; - va_list args; - va_start(args, format); - _MPLog(MPLogLevelError, format, args); - va_end(args); -} - -void _MPLogFatal(NSString *format, ...) -{ - format = [NSString stringWithFormat:kMPSystemLogPrefix, format]; - va_list args; - va_start(args, format); - _MPLog(MPLogLevelFatal, format, args); - va_end(args); -} diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPReachability.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPReachability.h deleted file mode 100644 index e8ec12717..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPReachability.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - Copyright (C) 2016 Apple Inc. All Rights Reserved. - See LICENSE.txt for this sample’s licensing information - - Abstract: - Basic demonstration of how to use the SystemConfiguration Reachablity APIs. - */ - -#import -#import -#import - - -// Values chosen to match the IAB Connection Type Spec, where: -// Unknown: 0 -// Ethernet: 1 (skipped because it's not possible on a phone) -// Wifi: 2 -// Cellular Unknown: 3 -// Cellular 2G: 4 -// Cellular 3G: 5 -// Cellular 4G: 6 -typedef enum : NSInteger { - MPNotReachable = 0, - MPReachableViaWiFi = 2, - MPReachableViaCellularNetworkUnknownGeneration, - MPReachableViaCellularNetwork2G, - MPReachableViaCellularNetwork3G, - MPReachableViaCellularNetwork4G -} MPNetworkStatus; - -#pragma mark IPv6 Support -//Reachability fully support IPv6. For full details, see ReadMe.md. - - -extern NSString *kMPReachabilityChangedNotification; - - -@interface MPReachability : NSObject - -/*! - * Use to check the reachability of a given host name. - */ -+ (instancetype)reachabilityWithHostName:(NSString *)hostName; - -/*! - * Use to check the reachability of a given IP address. - */ -+ (instancetype)reachabilityWithAddress:(const struct sockaddr *)hostAddress; - -/*! - * Checks whether the default route is available. Should be used by applications that do not connect to a particular host. - */ -+ (instancetype)reachabilityForInternetConnection; - - -#pragma mark reachabilityForLocalWiFi -//reachabilityForLocalWiFi has been removed from the sample. See ReadMe.md for more information. -//+ (instancetype)reachabilityForLocalWiFi; - -/*! - * Start listening for reachability notifications on the current run loop. - */ -- (BOOL)startNotifier; -- (void)stopNotifier; - -- (MPNetworkStatus)currentReachabilityStatus; - -/*! - * WWAN may be available, but not active until a connection has been established. WiFi may require a connection for VPN on Demand. - */ -- (BOOL)connectionRequired; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPReachability.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPReachability.m deleted file mode 100644 index 9269b9db8..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPReachability.m +++ /dev/null @@ -1,244 +0,0 @@ -/* - Copyright (C) 2016 Apple Inc. All Rights Reserved. - See LICENSE.txt for this sample’s licensing information - - Abstract: - Basic demonstration of how to use the SystemConfiguration Reachablity APIs. - */ - -#import -#import -#import -#import -#import - -#import - -#import "MPReachability.h" -#import "MPCoreInstanceProvider.h" - -#pragma mark IPv6 Support -//Reachability fully support IPv6. For full details, see ReadMe.md. - - -NSString *kMPReachabilityChangedNotification = @"kMPReachabilityChangedNotification"; - - -#pragma mark - Supporting functions - -#define kShouldPrintReachabilityFlags 0 - -static void PrintReachabilityFlags(SCNetworkReachabilityFlags flags, const char* comment) -{ -#if kShouldPrintReachabilityFlags - - NSLog(@"Reachability Flag Status: %c%c %c%c%c%c%c%c%c %s\n", - (flags & kSCNetworkReachabilityFlagsIsWWAN) ? 'W' : '-', - (flags & kSCNetworkReachabilityFlagsReachable) ? 'R' : '-', - - (flags & kSCNetworkReachabilityFlagsTransientConnection) ? 't' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionRequired) ? 'c' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) ? 'C' : '-', - (flags & kSCNetworkReachabilityFlagsInterventionRequired) ? 'i' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionOnDemand) ? 'D' : '-', - (flags & kSCNetworkReachabilityFlagsIsLocalAddress) ? 'l' : '-', - (flags & kSCNetworkReachabilityFlagsIsDirect) ? 'd' : '-', - comment - ); -#endif -} - - -static void ReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void* info) -{ -#pragma unused (target, flags) - NSCAssert(info != NULL, @"info was NULL in ReachabilityCallback"); - NSCAssert([(__bridge NSObject*) info isKindOfClass: [MPReachability class]], @"info was wrong class in ReachabilityCallback"); - - MPReachability* noteObject = (__bridge MPReachability *)info; - // Post a notification to notify the client that the network reachability changed. - [[NSNotificationCenter defaultCenter] postNotificationName: kMPReachabilityChangedNotification object: noteObject]; -} - - -#pragma mark - Reachability implementation - -@implementation MPReachability -{ - SCNetworkReachabilityRef _reachabilityRef; -} - -+ (instancetype)reachabilityWithHostName:(NSString *)hostName -{ - MPReachability* returnValue = NULL; - SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, [hostName UTF8String]); - if (reachability != NULL) - { - returnValue= [[self alloc] init]; - if (returnValue != NULL) - { - returnValue->_reachabilityRef = reachability; - } - else { - CFRelease(reachability); - } - } - return returnValue; -} - - -+ (instancetype)reachabilityWithAddress:(const struct sockaddr *)hostAddress -{ - SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, hostAddress); - - MPReachability* returnValue = NULL; - - if (reachability != NULL) - { - returnValue = [[self alloc] init]; - if (returnValue != NULL) - { - returnValue->_reachabilityRef = reachability; - } - else { - CFRelease(reachability); - } - } - return returnValue; -} - - -+ (instancetype)reachabilityForInternetConnection -{ - struct sockaddr_in zeroAddress; - bzero(&zeroAddress, sizeof(zeroAddress)); - zeroAddress.sin_len = sizeof(zeroAddress); - zeroAddress.sin_family = AF_INET; - - return [self reachabilityWithAddress: (const struct sockaddr *) &zeroAddress]; -} - -#pragma mark reachabilityForLocalWiFi -//reachabilityForLocalWiFi has been removed from the sample. See ReadMe.md for more information. -//+ (instancetype)reachabilityForLocalWiFi - - - -#pragma mark - Start and stop notifier - -- (BOOL)startNotifier -{ - BOOL returnValue = NO; - SCNetworkReachabilityContext context = {0, (__bridge void *)(self), NULL, NULL, NULL}; - - if (SCNetworkReachabilitySetCallback(_reachabilityRef, ReachabilityCallback, &context)) - { - if (SCNetworkReachabilityScheduleWithRunLoop(_reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode)) - { - returnValue = YES; - } - } - - return returnValue; -} - - -- (void)stopNotifier -{ - if (_reachabilityRef != NULL) - { - SCNetworkReachabilityUnscheduleFromRunLoop(_reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); - } -} - - -- (void)dealloc -{ - [self stopNotifier]; - if (_reachabilityRef != NULL) - { - CFRelease(_reachabilityRef); - } -} - - -#pragma mark - Network Flag Handling - -- (MPNetworkStatus)networkStatusForFlags:(SCNetworkReachabilityFlags)flags -{ - PrintReachabilityFlags(flags, "networkStatusForFlags"); - if ((flags & kSCNetworkReachabilityFlagsReachable) == 0) - { - // The target host is not reachable. - return MPNotReachable; - } - - MPNetworkStatus returnValue = MPNotReachable; - - if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0) - { - /* - If the target host is reachable and no connection is required then we'll assume (for now) that you're on Wi-Fi... - */ - returnValue = MPReachableViaWiFi; - } - - if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand ) != 0) || - (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)) - { - /* - ... and the connection is on-demand (or on-traffic) if the calling application is using the CFSocketStream or higher APIs... - */ - - if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0) - { - /* - ... and no [user] intervention is needed... - */ - returnValue = MPReachableViaWiFi; - } - } - - if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) - { - /* - ... but WWAN connections are OK if the calling application is using the CFNetwork APIs. - */ - - // If using WWAN, get current radio access technology to fill in 2G/3G/4G info - returnValue = [[MPCoreInstanceProvider sharedProvider] currentRadioAccessTechnology]; - } - - return returnValue; -} - - -- (BOOL)connectionRequired -{ - NSAssert(_reachabilityRef != NULL, @"connectionRequired called with NULL reachabilityRef"); - SCNetworkReachabilityFlags flags; - - if (SCNetworkReachabilityGetFlags(_reachabilityRef, &flags)) - { - return (flags & kSCNetworkReachabilityFlagsConnectionRequired); - } - - return NO; -} - - -- (MPNetworkStatus)currentReachabilityStatus -{ - NSAssert(_reachabilityRef != NULL, @"currentNetworkStatus called with NULL SCNetworkReachabilityRef"); - MPNetworkStatus returnValue = MPNotReachable; - SCNetworkReachabilityFlags flags; - - if (SCNetworkReachabilityGetFlags(_reachabilityRef, &flags)) - { - returnValue = [self networkStatusForFlags:flags]; - } - - return returnValue; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPSessionTracker.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPSessionTracker.h deleted file mode 100644 index c1da4db03..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPSessionTracker.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// MPSessionTracker.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPSessionTracker : NSObject - -+ (void)initializeNotificationObservers; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPSessionTracker.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPSessionTracker.m deleted file mode 100644 index 9f6bb737f..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPSessionTracker.m +++ /dev/null @@ -1,42 +0,0 @@ -// -// MPSessionTracker.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPSessionTracker.h" -#import "MPConstants.h" -#import "MPIdentityProvider.h" -#import "MPGlobal.h" -#import "MPCoreInstanceProvider.h" -#import "MPAPIEndpoints.h" -#import "MPHTTPNetworkSession.h" -#import "MPURLRequest.h" -#import "MPAdServerURLBuilder.h" - -@implementation MPSessionTracker - -+ (void)initializeNotificationObservers -{ - if (SESSION_TRACKING_ENABLED) { - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(trackEvent) - name:UIApplicationWillEnterForegroundNotification - object:nil]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(trackEvent) - name:UIApplicationDidFinishLaunchingNotification - object:nil]; - } -} - -+ (void)trackEvent -{ - MPURLRequest * request = [[MPURLRequest alloc] initWithURL:[MPAdServerURLBuilder sessionTrackingURL]]; - [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:nil errorHandler:nil]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPStoreKitProvider.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPStoreKitProvider.h deleted file mode 100644 index 84e45e7c5..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPStoreKitProvider.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPStoreKitProvider.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPGlobal.h" -#import - -@class SKStoreProductViewController; - -@interface MPStoreKitProvider : NSObject - -+ (BOOL)deviceHasStoreKit; -+ (SKStoreProductViewController *)buildController; - -@end - -@protocol MPSKStoreProductViewControllerDelegate -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPStoreKitProvider.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPStoreKitProvider.m deleted file mode 100644 index 5b6541dd0..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPStoreKitProvider.m +++ /dev/null @@ -1,51 +0,0 @@ -// -// MPStoreKitProvider.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPStoreKitProvider.h" -#import "MPGlobal.h" - -#import - -/* - * On iOS 7 and above, SKStoreProductViewController can cause a crash if the application does not list Portrait as a supported - * interface orientation. Specifically, SKStoreProductViewController's shouldAutorotate returns YES, even though - * the SKStoreProductViewController's supported interface orientations does not intersect with the application's list. - * - * To fix, we disallow autorotation so the SKStoreProductViewController will use its supported orientation on iOS 7 devices. - */ -@interface MPiOS7SafeStoreProductViewController : SKStoreProductViewController - -@end - -@implementation MPiOS7SafeStoreProductViewController - -- (BOOL)shouldAutorotate -{ - return NO; -} - -@end - -@implementation MPStoreKitProvider - -+ (BOOL)deviceHasStoreKit -{ - return !!NSClassFromString(@"SKStoreProductViewController"); -} - -+ (SKStoreProductViewController *)buildController -{ - // use our safe subclass on iOS 7 and above - if ([[UIDevice currentDevice].systemVersion compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending) { - return [[MPiOS7SafeStoreProductViewController alloc] init]; - } else { - return [[SKStoreProductViewController alloc] init]; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPTimer.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPTimer.h deleted file mode 100644 index 6bfba7c5a..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPTimer.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// MPTimer.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/* - * MPTimer wraps an NSTimer and adds pause/resume functionality. - */ -@interface MPTimer : NSObject - -@property (nonatomic, copy) NSString *runLoopMode; - -+ (MPTimer *)timerWithTimeInterval:(NSTimeInterval)seconds - target:(id)target - selector:(SEL)aSelector - repeats:(BOOL)repeats; - -- (BOOL)isValid; -- (void)invalidate; -- (BOOL)isScheduled; -- (BOOL)scheduleNow; -- (BOOL)pause; -- (BOOL)resume; -- (NSTimeInterval)initialTimeInterval; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPTimer.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPTimer.m deleted file mode 100644 index cf9b2ecc8..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPTimer.m +++ /dev/null @@ -1,177 +0,0 @@ -// -// MPTimer.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPTimer.h" -#import "MPLogging.h" -#import "MPInternalUtils.h" - -@interface MPTimer () -@property (nonatomic, assign) NSTimeInterval timeInterval; -@property (nonatomic, strong) NSTimer *timer; -@property (nonatomic, copy) NSDate *pauseDate; -@property (nonatomic, assign) BOOL isPaused; -@end - -@interface MPTimer () - -@property (nonatomic, weak) id target; -@property (nonatomic, assign) SEL selector; - -@end - -@implementation MPTimer - -@synthesize timeInterval = _timeInterval; -@synthesize timer = _timer; -@synthesize pauseDate = _pauseDate; -@synthesize target = _target; -@synthesize selector = _selector; -@synthesize isPaused = _isPaused; - -+ (MPTimer *)timerWithTimeInterval:(NSTimeInterval)seconds - target:(id)target - selector:(SEL)aSelector - repeats:(BOOL)repeats -{ - MPTimer *timer = [[MPTimer alloc] init]; - timer.target = target; - timer.selector = aSelector; - timer.timer = [NSTimer timerWithTimeInterval:seconds - target:timer - selector:@selector(timerDidFire) - userInfo:nil - repeats:repeats]; - timer.timeInterval = seconds; - timer.runLoopMode = NSDefaultRunLoopMode; - return timer; -} - -- (void)dealloc -{ - [self.timer invalidate]; -} - -- (void)timerDidFire -{ - SUPPRESS_PERFORM_SELECTOR_LEAK_WARNING( - [self.target performSelector:self.selector withObject:nil] - ); -} - -- (BOOL)isValid -{ - return [self.timer isValid]; -} - -- (void)invalidate -{ - self.target = nil; - self.selector = nil; - [self.timer invalidate]; - self.timer = nil; -} - -- (BOOL)isScheduled -{ - if (!self.timer) { - return NO; - } - CFRunLoopRef runLoopRef = [[NSRunLoop currentRunLoop] getCFRunLoop]; - CFArrayRef arrayRef = CFRunLoopCopyAllModes(runLoopRef); - CFIndex count = CFArrayGetCount(arrayRef); - - for (CFIndex i = 0; i < count; ++i) { - CFStringRef runLoopMode = CFArrayGetValueAtIndex(arrayRef, i); - if (CFRunLoopContainsTimer(runLoopRef, (__bridge CFRunLoopTimerRef)self.timer, runLoopMode)) { - CFRelease(arrayRef); - return YES; - } - } - - CFRelease(arrayRef); - return NO; -} - -- (BOOL)scheduleNow -{ - if (![self.timer isValid]) { - MPLogDebug(@"Could not schedule invalidated MPTimer (%p).", self); - return NO; - } - - [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:self.runLoopMode]; - return YES; -} - -- (BOOL)pause -{ - NSTimeInterval secondsLeft; - if (self.isPaused) { - MPLogDebug(@"No-op: tried to pause an MPTimer (%p) that was already paused.", self); - return NO; - } - - if (![self.timer isValid]) { - MPLogDebug(@"Cannot pause invalidated MPTimer (%p).", self); - return NO; - } - - if (![self isScheduled]) { - MPLogDebug(@"No-op: tried to pause an MPTimer (%p) that was never scheduled.", self); - return NO; - } - - NSDate *fireDate = [self.timer fireDate]; - self.pauseDate = [NSDate date]; - secondsLeft = [fireDate timeIntervalSinceDate:self.pauseDate]; - if (secondsLeft <= 0) { - MPLogWarn(@"An MPTimer was somehow paused after it was supposed to fire."); - } else { - MPLogDebug(@"Paused MPTimer (%p) %.1f seconds left before firing.", self, secondsLeft); - } - - // Pause the timer by setting its fire date far into the future. - [self.timer setFireDate:[NSDate distantFuture]]; - self.isPaused = YES; - - return YES; -} - -- (BOOL)resume -{ - if (![self.timer isValid]) { - MPLogDebug(@"Cannot resume invalidated MPTimer (%p).", self); - return NO; - } - - if (!self.isPaused) { - MPLogDebug(@"No-op: tried to resume an MPTimer (%p) that was never paused.", self); - return NO; - } - - MPLogDebug(@"Resumed MPTimer (%p), should fire in %.1f seconds.", self.timeInterval); - - // Resume the timer. - NSDate *newFireDate = [NSDate dateWithTimeInterval:self.timeInterval sinceDate:[NSDate date]]; - [self.timer setFireDate:newFireDate]; - - if (![self isScheduled]) { - [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:self.runLoopMode]; - } - - self.isPaused = NO; - return YES; -} - -- (NSTimeInterval)initialTimeInterval -{ - return self.timeInterval; -} - -@end - diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.h deleted file mode 100644 index 8ff8c02b3..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPUserInteractionGestureRecognizer.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPUserInteractionGestureRecognizer : UIGestureRecognizer - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.m deleted file mode 100644 index 4f78fa75e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/Utility/MPUserInteractionGestureRecognizer.m +++ /dev/null @@ -1,46 +0,0 @@ -// -// MPUserInteractionGestureRecognizer.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPUserInteractionGestureRecognizer.h" - -#import - -@implementation MPUserInteractionGestureRecognizer - -// Currently, we treat any touch as evidence of user interaction -- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event -{ - [super touchesBegan:touches withEvent:event]; - - if (self.state == UIGestureRecognizerStatePossible) { - self.state = UIGestureRecognizerStateRecognized; - } -} - -- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event -{ - [super touchesMoved:touches withEvent:event]; - - self.state = UIGestureRecognizerStateFailed; -} - -- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event -{ - [super touchesEnded:touches withEvent:event]; - - self.state = UIGestureRecognizerStateFailed; -} - -- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event -{ - [super touchesCancelled:touches withEvent:event]; - - self.state = UIGestureRecognizerStateFailed; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.h deleted file mode 100644 index b4004928c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MPVASTAd.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTModel.h" - -@class MPVASTInline; -@class MPVASTWrapper; - -@interface MPVASTAd : MPVASTModel - -@property (nonatomic, copy, readonly) NSString *identifier; -@property (nonatomic, copy, readonly) NSString *sequence; -@property (nonatomic, readonly) MPVASTInline *inlineAd; -@property (nonatomic, readonly) MPVASTWrapper *wrapper; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.m deleted file mode 100644 index d669ce2c2..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTAd.m +++ /dev/null @@ -1,39 +0,0 @@ -// -// MPVASTAd.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTAd.h" -#import "MPVASTInline.h" -#import "MPVASTWrapper.h" -#import "MPLogging.h" - -@implementation MPVASTAd - -- (instancetype)initWithDictionary:(NSDictionary *)dictionary -{ - self = [super initWithDictionary:dictionary]; - if (self) { - // The VAST spec (2.2.2.2) prohibits an element from having both an and a - // element. If both are present, we'll only allow the element. - if (_inlineAd && _wrapper) { - MPLogWarn(@"VAST element is not allowed to contain both an and a " - @". The will be ignored."); - _wrapper = nil; - } - } - return self; -} - -+ (NSDictionary *)modelMap -{ - return @{@"identifier": @"id", - @"sequence": @"sequence", - @"inlineAd": @[@"InLine", MPParseClass([MPVASTInline class])], - @"wrapper": @[@"Wrapper", MPParseClass([MPVASTWrapper class])]}; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCompanionAd.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCompanionAd.h deleted file mode 100644 index 08862746c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCompanionAd.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// MPVASTCompanionAd.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPVASTModel.h" - -@interface MPVASTCompanionAd : MPVASTModel - -@property (nonatomic, readonly) CGFloat assetHeight; -@property (nonatomic, readonly) CGFloat assetWidth; -@property (nonatomic, copy, readonly) NSURL *clickThroughURL; -@property (nonatomic, readonly) NSArray *clickTrackingURLs; -@property (nonatomic, readonly) CGFloat height; -@property (nonatomic, readonly) NSArray *HTMLResources; -@property (nonatomic, copy, readonly) NSString *identifier; -@property (nonatomic, readonly) NSArray *iframeResources; -@property (nonatomic, readonly) NSArray *staticResources; -@property (nonatomic, readonly) NSDictionary *trackingEvents; -@property (nonatomic, readonly) CGFloat width; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCompanionAd.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCompanionAd.m deleted file mode 100644 index 2c10671f9..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCompanionAd.m +++ /dev/null @@ -1,53 +0,0 @@ -// -// MPVASTCompanionAd.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTCompanionAd.h" -#import "MPVASTResource.h" -#import "MPVASTStringUtilities.h" -#import "MPVASTTrackingEvent.h" - -@implementation MPVASTCompanionAd - -- (instancetype)initWithDictionary:(NSDictionary *)dictionary -{ - self = [super initWithDictionary:dictionary]; - if (self) { - NSArray *trackingEvents = [self generateModelsFromDictionaryValue:dictionary[@"TrackingEvents"][@"Tracking"] - modelProvider:^id(NSDictionary *dictionary) { - return [[MPVASTTrackingEvent alloc] initWithDictionary:dictionary]; - }]; - NSMutableDictionary *eventsDictionary = [NSMutableDictionary dictionary]; - for (MPVASTTrackingEvent *event in trackingEvents) { - NSMutableArray *events = [eventsDictionary objectForKey:event.eventType]; - if (!events) { - [eventsDictionary setObject:[NSMutableArray array] forKey:event.eventType]; - events = [eventsDictionary objectForKey:event.eventType]; - } - [events addObject:event]; - } - _trackingEvents = eventsDictionary; - } - return self; -} - -+ (NSDictionary *)modelMap -{ - return @{@"assetHeight": @[@"assetHeight", MPParseNumberFromString(NSNumberFormatterDecimalStyle)], - @"assetWidth": @[@"assetWidth", MPParseNumberFromString(NSNumberFormatterDecimalStyle)], - @"height": @[@"height", MPParseNumberFromString(NSNumberFormatterDecimalStyle)], - @"width": @[@"width", MPParseNumberFromString(NSNumberFormatterDecimalStyle)], - @"clickThroughURL": @[@"CompanionClickThrough.text", MPParseURLFromString()], - @"clickTrackingURLs": @[@"CompanionClickTracking.text", MPParseArrayOf(MPParseURLFromString())], - @"viewTrackingURLs": @[@"IconViewTracking.text", MPParseArrayOf(MPParseURLFromString())], - @"identifier": @"id", - @"HTMLResources": @[@"HTMLResource", MPParseArrayOf(MPParseClass([MPVASTResource class]))], - @"iframeResources": @[@"IFrameResource", MPParseArrayOf(MPParseClass([MPVASTResource class]))], - @"staticResources": @[@"StaticResource", MPParseArrayOf(MPParseClass([MPVASTResource class]))]}; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCreative.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCreative.h deleted file mode 100644 index 33013badc..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCreative.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MPVASTCreative.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTModel.h" - -@class MPVASTLinearAd; - -@interface MPVASTCreative : MPVASTModel - -@property (nonatomic, copy, readonly) NSString *identifier; -@property (nonatomic, copy, readonly) NSString *sequence; -@property (nonatomic, copy, readonly) NSString *adID; -@property (nonatomic, readonly) MPVASTLinearAd *linearAd; -@property (nonatomic, readonly) NSArray *companionAds; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCreative.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCreative.m deleted file mode 100644 index 624d59463..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTCreative.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// MPVASTCreative.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTCreative.h" -#import "MPVASTLinearAd.h" -#import "MPVASTCompanionAd.h" - -@implementation MPVASTCreative - -+ (NSDictionary *)modelMap -{ - return @{@"identifier": @"id", - @"sequence": @"sequence", - @"adID": @"adID", - @"linearAd": @[@"Linear", MPParseClass([MPVASTLinearAd class])], - @"companionAds": @[@"CompanionAds.Companion", MPParseArrayOf(MPParseClass([MPVASTCompanionAd class]))]}; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTDurationOffset.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTDurationOffset.h deleted file mode 100644 index 40963a297..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTDurationOffset.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// MPVASTDurationOffset.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTModel.h" - -typedef NS_ENUM(NSUInteger, MPVASTDurationOffsetType) { - MPVASTDurationOffsetTypeAbsolute, - MPVASTDurationOffsetTypePercentage, -}; - -@interface MPVASTDurationOffset : MPVASTModel - -@property (nonatomic, readonly) MPVASTDurationOffsetType type; -@property (nonatomic, copy, readonly) NSString *offset; - -- (NSTimeInterval)timeIntervalForVideoWithDuration:(NSTimeInterval)duration; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTDurationOffset.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTDurationOffset.m deleted file mode 100644 index ec78ae55e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTDurationOffset.m +++ /dev/null @@ -1,50 +0,0 @@ -// -// MPVASTDurationOffset.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTDurationOffset.h" -#import "MPVASTStringUtilities.h" - -@implementation MPVASTDurationOffset - -- (instancetype)initWithDictionary:(NSDictionary *)dictionary -{ - self = [super initWithDictionary:dictionary]; - if (self) { - _offset = dictionary[@"offset"] ?: dictionary[@"skipoffset"]; - if (!_offset) { - return nil; - } - - BOOL isPercentage = [MPVASTStringUtilities stringRepresentsNonNegativePercentage:_offset]; - BOOL isDuration = [MPVASTStringUtilities stringRepresentsNonNegativeDuration:_offset]; - if (!isPercentage && !isDuration) { - return nil; - } - - _type = isDuration ? MPVASTDurationOffsetTypeAbsolute : MPVASTDurationOffsetTypePercentage; - } - return self; -} - -- (NSTimeInterval)timeIntervalForVideoWithDuration:(NSTimeInterval)duration -{ - if (duration < 0) { - return 0; - } - - if (self.type == MPVASTDurationOffsetTypeAbsolute) { - return [MPVASTStringUtilities timeIntervalFromString:self.offset]; - } else if (self.type == MPVASTDurationOffsetTypePercentage) { - NSInteger percentage = [MPVASTStringUtilities percentageFromString:self.offset]; - return duration * percentage / 100.0f; - } else { - return 0; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTIndustryIcon.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTIndustryIcon.h deleted file mode 100644 index ca4f33e0c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTIndustryIcon.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// MPVASTIndustryIcon.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPVASTModel.h" - -@class MPVASTDurationOffset; -@class MPVASTResource; - -@interface MPVASTIndustryIcon : MPVASTModel - -@property (nonatomic, copy, readonly) NSString *program; -@property (nonatomic, readonly) CGFloat height; -@property (nonatomic, readonly) CGFloat width; -@property (nonatomic, copy, readonly) NSString *xPosition; -@property (nonatomic, copy, readonly) NSString *yPosition; - -@property (nonatomic, copy, readonly) NSString *apiFramework; -@property (nonatomic, readonly) NSTimeInterval duration; -@property (nonatomic, readonly) MPVASTDurationOffset *offset; - -@property (nonatomic, copy, readonly) NSURL *clickThroughURL; -@property (nonatomic, readonly) NSArray *clickTrackingURLs; -@property (nonatomic, readonly) NSArray *viewTrackingURLs; - -@property (nonatomic, readonly) MPVASTResource *HTMLResource; -@property (nonatomic, readonly) MPVASTResource *iframeResource; -@property (nonatomic, readonly) MPVASTResource *staticResource; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTIndustryIcon.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTIndustryIcon.m deleted file mode 100644 index 407b85bc3..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTIndustryIcon.m +++ /dev/null @@ -1,35 +0,0 @@ -// -// MPVASTIndustryIcon.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTIndustryIcon.h" -#import "MPVASTDurationOffset.h" -#import "MPVASTResource.h" -#import "MPVASTStringUtilities.h" - -@implementation MPVASTIndustryIcon - -+ (NSDictionary *)modelMap -{ - return @{@"program": @"program", - @"height": @[@"height", MPParseNumberFromString(NSNumberFormatterDecimalStyle)], - @"width": @[@"width", MPParseNumberFromString(NSNumberFormatterDecimalStyle)], - @"xPosition": @"xPosition", - @"yPosition": @"yPosition", - @"clickThroughURL": @[@"IconClicks.IconClickThrough.text", MPParseURLFromString()], - @"clickTrackingURLs": @[@"IconClicks.IconClickTracking.text", MPParseArrayOf(MPParseURLFromString())], - @"viewTrackingURLs": @[@"IconViewTracking.text", MPParseArrayOf(MPParseURLFromString())], - @"apiFramework": @"apiFramework", - @"duration": @[@"duration", MPParseTimeIntervalFromDurationString()], - @"offset": @[@"@self", MPParseClass([MPVASTDurationOffset class])], - @"HTMLResource": @[@"HTMLResource", MPParseArrayOf(MPParseClass([MPVASTResource class]))], - @"iframeResource": @[@"IFrameResource", MPParseArrayOf(MPParseClass([MPVASTResource class]))], - @"staticResource": @[@"StaticResource", MPParseArrayOf(MPParseClass([MPVASTResource class]))]}; - -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTInline.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTInline.h deleted file mode 100644 index 43da537b0..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTInline.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPVASTInline.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTModel.h" - -@interface MPVASTInline : MPVASTModel - -@property (nonatomic, readonly) NSArray *creatives; -@property (nonatomic, readonly) NSArray *errorURLs; -@property (nonatomic, readonly) NSDictionary *extensions; -@property (nonatomic, readonly) NSArray *impressionURLs; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTInline.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTInline.m deleted file mode 100644 index 878bc4c18..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTInline.m +++ /dev/null @@ -1,33 +0,0 @@ -// -// MPVASTInline.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTInline.h" -#import "MPVASTCreative.h" - -@implementation MPVASTInline - -- (instancetype)initWithDictionary:(NSDictionary *)dictionary -{ - self = [super initWithDictionary:dictionary]; - if (self) { - _extensions = [self generateModelFromDictionaryValue:dictionary[@"Extensions"] - modelProvider:^id(NSDictionary *dictionary) { - return dictionary; - }]; - } - return self; -} - -+ (NSDictionary *)modelMap -{ - return @{@"creatives": @[@"Creatives.Creative", MPParseArrayOf(MPParseClass([MPVASTCreative class]))], - @"errorURLs": @[@"Error.text", MPParseArrayOf(MPParseURLFromString())], - @"impressionURLs": @[@"Impression.text", MPParseArrayOf(MPParseURLFromString())]}; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTLinearAd.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTLinearAd.h deleted file mode 100644 index 00f3d5f34..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTLinearAd.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// MPVASTLinearAd.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTModel.h" - -@class MPVASTDurationOffset; -@class MPVASTMediaFile; - -@interface MPVASTLinearAd : MPVASTModel - -@property (nonatomic, copy, readonly) NSURL *clickThroughURL; -@property (nonatomic, readonly) NSArray *clickTrackingURLs; -@property (nonatomic, readonly) NSArray *customClickURLs; -@property (nonatomic, readonly) NSTimeInterval duration; -@property (nonatomic, readonly) NSArray *industryIcons; -@property (nonatomic, readonly) NSArray *mediaFiles; -@property (nonatomic, readonly) MPVASTDurationOffset *skipOffset; -@property (nonatomic, readonly) NSDictionary *trackingEvents; - -@end - -@interface MPVASTLinearAd (Media) -@property (nonatomic, readonly) MPVASTMediaFile *highestBitrateMediaFile; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTLinearAd.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTLinearAd.m deleted file mode 100644 index bd5dae41e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTLinearAd.m +++ /dev/null @@ -1,88 +0,0 @@ -// -// MPVASTLinearAd.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTLinearAd.h" -#import "MPVASTDurationOffset.h" -#import "MPVASTIndustryIcon.h" -#import "MPVASTMediaFile.h" -#import "MPVASTStringUtilities.h" -#import "MPVASTTrackingEvent.h" - -@interface MPVASTLinearAd () - -@property (nonatomic, readwrite) NSArray *clickTrackingURLs; -@property (nonatomic, readwrite) NSArray *customClickURLs; -@property (nonatomic, readwrite) NSArray *industryIcons; -@property (nonatomic, readwrite) NSDictionary *trackingEvents; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPVASTLinearAd - -- (instancetype)initWithDictionary:(NSDictionary *)dictionary -{ - self = [super initWithDictionary:dictionary]; - if (self) { - NSArray *trackingEvents = [self generateModelsFromDictionaryValue:dictionary[@"TrackingEvents"][@"Tracking"] - modelProvider:^id(NSDictionary *dictionary) { - return [[MPVASTTrackingEvent alloc] initWithDictionary:dictionary]; - }]; - NSMutableDictionary *eventsDictionary = [NSMutableDictionary dictionary]; - for (MPVASTTrackingEvent *event in trackingEvents) { - NSMutableArray *events = [eventsDictionary objectForKey:event.eventType]; - if (!events) { - [eventsDictionary setObject:[NSMutableArray array] forKey:event.eventType]; - events = [eventsDictionary objectForKey:event.eventType]; - } - [events addObject:event]; - } - _trackingEvents = eventsDictionary; - } - return self; -} - -+ (NSDictionary *)modelMap -{ - return @{@"clickThroughURL": @[@"VideoClicks.ClickThrough.text", MPParseURLFromString()], - @"clickTrackingURLs": @[@"VideoClicks.ClickTracking.text", MPParseArrayOf(MPParseURLFromString())], - @"customClickURLs": @[@"VideoClicks.CustomClick.text", MPParseArrayOf(MPParseURLFromString())], - @"duration": @[@"Duration.text", MPParseTimeIntervalFromDurationString()], - @"industryIcons": @[@"Icons.Icon", MPParseArrayOf(MPParseClass([MPVASTIndustryIcon class]))], - @"mediaFiles": @[@"MediaFiles.MediaFile", MPParseArrayOf(MPParseClass([MPVASTMediaFile class]))], - @"skipOffset": @[@"@self", MPParseClass([MPVASTDurationOffset class])]}; -} - -@end - -@implementation MPVASTLinearAd (Media) - -// Static set of supported MIME types for native video. -- (NSSet *)validVideoMimeTypes { - static dispatch_once_t onceToken; - static NSSet * validVideoMimeTypes = nil; - dispatch_once(&onceToken, ^{ - validVideoMimeTypes = [NSSet setWithObjects:@"video/quicktime", @"video/mp4", @"video/3gpp", @"video/3gpp2", @"video/x-m4v", nil]; - }); - - return validVideoMimeTypes; -} - -// Filters out unsupported media files and selects the highest bitrate video -- (MPVASTMediaFile *)highestBitrateMediaFile { - NSPredicate * predicate = [NSPredicate predicateWithFormat:@"mimeType IN %@", self.validVideoMimeTypes]; - NSArray * filteredMediaFiles = [self.mediaFiles filteredArrayUsingPredicate:predicate]; - NSArray * sortedMediaFiles = [filteredMediaFiles sortedArrayUsingComparator:^NSComparisonResult(MPVASTMediaFile * a, MPVASTMediaFile * b) { - return a.bitrate < b.bitrate; - }]; - - return (sortedMediaFiles.count > 0 ? sortedMediaFiles[0] : nil); -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTMacroProcessor.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTMacroProcessor.h deleted file mode 100644 index 21a12206d..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTMacroProcessor.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MPVASTMacroProcessor.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPVASTMacroProcessor : NSObject - -+ (NSURL *)macroExpandedURLForURL:(NSURL *)URL errorCode:(NSString *)errorCode; -+ (NSURL *)macroExpandedURLForURL:(NSURL *)URL errorCode:(NSString *)errorCode videoTimeOffset:(NSTimeInterval)timeOffset videoAssetURL:(NSURL *)videoAssetURL; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTMacroProcessor.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTMacroProcessor.m deleted file mode 100644 index bf834fab3..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTMacroProcessor.m +++ /dev/null @@ -1,50 +0,0 @@ -// -// MPVASTMacroProcessor.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTMacroProcessor.h" -#import "MPGlobal.h" -#import "MPVASTStringUtilities.h" -#import "NSString+MPAdditions.h" - -@implementation MPVASTMacroProcessor - -+ (NSURL *)macroExpandedURLForURL:(NSURL *)URL errorCode:(NSString *)errorCode -{ - return [self macroExpandedURLForURL:URL errorCode:errorCode videoTimeOffset:-1 videoAssetURL:nil]; -} - -+ (NSURL *)macroExpandedURLForURL:(NSURL *)URL errorCode:(NSString *)errorCode videoTimeOffset:(NSTimeInterval)timeOffset videoAssetURL:(NSURL *)assetURL -{ - NSMutableString *URLString = [[URL absoluteString] mutableCopy]; - - NSString *trimmedErrorCode = [errorCode stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - if ([trimmedErrorCode length]) { - [URLString replaceOccurrencesOfString:@"[ERRORCODE]" withString:errorCode options:0 range:NSMakeRange(0, [URLString length])]; - [URLString replaceOccurrencesOfString:@"%5BERRORCODE%5D" withString:errorCode options:0 range:NSMakeRange(0, [URLString length])]; - } - - if (timeOffset >= 0) { - NSString *timeOffsetString = [MPVASTStringUtilities stringFromTimeInterval:timeOffset]; - [URLString replaceOccurrencesOfString:@"[CONTENTPLAYHEAD]" withString:timeOffsetString options:0 range:NSMakeRange(0, [URLString length])]; - [URLString replaceOccurrencesOfString:@"%5BCONTENTPLAYHEAD%5D" withString:timeOffsetString options:0 range:NSMakeRange(0, [URLString length])]; - } - - if (assetURL) { - NSString *encodedAssetURLString = [[assetURL absoluteString] mp_URLEncodedString]; - [URLString replaceOccurrencesOfString:@"[ASSETURI]" withString:encodedAssetURLString options:0 range:NSMakeRange(0, [URLString length])]; - [URLString replaceOccurrencesOfString:@"%5BASSETURI%5D" withString:encodedAssetURLString options:0 range:NSMakeRange(0, [URLString length])]; - } - - NSString *cachebuster = [NSString stringWithFormat:@"%u", arc4random() % 90000000 + 10000000]; - [URLString replaceOccurrencesOfString:@"[CACHEBUSTING]" withString:cachebuster options:0 range:NSMakeRange(0, [URLString length])]; - [URLString replaceOccurrencesOfString:@"%5BCACHEBUSTING%5D" withString:cachebuster options:0 range:NSMakeRange(0, [URLString length])]; - - return [NSURL URLWithString:URLString]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTManager.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTManager.h deleted file mode 100644 index cbb7f9569..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTManager.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPVASTManager.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTResponse.h" - -typedef enum { - MPVASTErrorXMLParseFailure, - MPVASTErrorExceededMaximumWrapperDepth, - MPVASTErrorNoAdsFound -} MPVASTError; - -@interface MPVASTManager : NSObject - -+ (void)fetchVASTWithURL:(NSURL *)URL completion:(void (^)(MPVASTResponse *, NSError *))completion; -+ (void)fetchVASTWithData:(NSData *)data completion:(void (^)(MPVASTResponse *, NSError *))completion; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTManager.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTManager.m deleted file mode 100644 index 8bd7649df..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTManager.m +++ /dev/null @@ -1,141 +0,0 @@ -// -// MPVASTManager.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTManager.h" -#import "MPVASTAd.h" -#import "MPVASTWrapper.h" -#import "MPXMLParser.h" -#import "MPHTTPNetworkSession.h" -#import "MPURLRequest.h" - -@interface MPVASTWrapper (MPVASTManager) - -@property (nonatomic, readwrite) MPVASTResponse *wrappedVASTResponse; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -static const NSInteger kMaximumWrapperDepth = 10; -static NSString * const kMPVASTManagerErrorDomain = @"com.mopub.MPVASTManager"; - -@implementation MPVASTManager - -+ (void)fetchVASTWithURL:(NSURL *)URL completion:(void (^)(MPVASTResponse *, NSError *))completion -{ - [MPHTTPNetworkSession startTaskWithHttpRequest:[MPURLRequest requestWithURL:URL] responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - [MPVASTManager fetchVASTWithData:data completion:completion]; - } errorHandler:^(NSError * _Nonnull error) { - if (completion != nil) { - completion(nil, error); - } - }]; -} - -+ (void)fetchVASTWithData:(NSData *)data completion:(void (^)(MPVASTResponse *, NSError *))completion -{ - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - [self parseVASTResponseFromData:data depth:0 completion:^(MPVASTResponse *response, NSError *error) { - dispatch_async(dispatch_get_main_queue(), ^{ - if (error) { - completion(nil, error); - } else { - completion(response, nil); - } - }); - }]; - }); -} - -+ (void)parseVASTResponseFromData:(NSData *)data depth:(NSInteger)depth completion:(void (^)(MPVASTResponse *response, NSError *error))completion -{ - if (depth >= kMaximumWrapperDepth) { - completion(nil, [NSError errorWithDomain:kMPVASTManagerErrorDomain code:MPVASTErrorExceededMaximumWrapperDepth userInfo:nil]); - return; - } - - NSError *XMLParserError = nil; - MPXMLParser *parser = [[MPXMLParser alloc] init]; - NSDictionary *dictionary = [parser dictionaryWithData:data error:&XMLParserError]; - if (XMLParserError) { - completion(nil, [NSError errorWithDomain:kMPVASTManagerErrorDomain code:MPVASTErrorXMLParseFailure userInfo:nil]); - return; - } - - MPVASTResponse *VASTResponse = [[MPVASTResponse alloc] initWithDictionary:dictionary]; - NSArray *wrappers = [self wrappersForVASTResponse:VASTResponse]; - if ([wrappers count] == 0) { - if ([self VASTResponseContainsAtLeastOneAd:VASTResponse]) { - completion(VASTResponse, nil); - return; - } else { - completion(nil, [NSError errorWithDomain:kMPVASTManagerErrorDomain code:MPVASTErrorNoAdsFound userInfo:nil]); - return; - } - } - - __weak __typeof__(self) weakSelf = self; - __block NSInteger wrappersFetched = 0; - for (MPVASTWrapper *wrapper in wrappers) { - [MPHTTPNetworkSession startTaskWithHttpRequest:[MPURLRequest requestWithURL:wrapper.VASTAdTagURI] responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - // Dispatch the VAST XML parsing. - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - __typeof__(self) strongSelf = weakSelf; - [strongSelf parseVASTResponseFromData:data depth:depth + 1 completion:^(MPVASTResponse *response, NSError *error) { - if (error) { - completion(nil, error); - return; - } - - wrapper.wrappedVASTResponse = response; - wrappersFetched++; - - // Once we've fetched all wrappers within the VAST - // response, we can call the top-level completion - // handler. - if (wrappersFetched == [wrappers count]) { - if ([self VASTResponseContainsAtLeastOneAd:VASTResponse]) { - completion(VASTResponse, nil); - return; - } else { - completion(nil, [NSError errorWithDomain:kMPVASTManagerErrorDomain code:MPVASTErrorNoAdsFound userInfo:nil]); - return; - } - } - }]; - - }); - } errorHandler:^(NSError * _Nonnull error) { - wrapper.wrappedVASTResponse = nil; - }]; - } -} - -+ (NSArray *)wrappersForVASTResponse:(MPVASTResponse *)response -{ - NSMutableArray *wrappers = [NSMutableArray array]; - for (MPVASTAd *ad in response.ads) { - if (ad.wrapper) { - [wrappers addObject:ad.wrapper]; - } - } - return wrappers; -} - -+ (BOOL)VASTResponseContainsAtLeastOneAd:(MPVASTResponse *)response -{ - for (MPVASTAd *ad in response.ads) { - if (ad.inlineAd || ad.wrapper.wrappedVASTResponse) { - return YES; - } - } - return NO; -} - -@end - diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTMediaFile.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTMediaFile.h deleted file mode 100644 index ecd883c81..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTMediaFile.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPVASTMediaFile.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPVASTModel.h" - -@interface MPVASTMediaFile : MPVASTModel - -@property (nonatomic, copy, readonly) NSString *identifier; -@property (nonatomic, copy, readonly) NSString *delivery; -@property (nonatomic, copy, readonly) NSString *mimeType; -@property (nonatomic, readonly) double bitrate; -@property (nonatomic, readonly) CGFloat width; -@property (nonatomic, readonly) CGFloat height; -@property (nonatomic, copy, readonly) NSURL *URL; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTMediaFile.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTMediaFile.m deleted file mode 100644 index f12d3142e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTMediaFile.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// MPVASTMediaFile.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTMediaFile.h" -#import "MPVASTStringUtilities.h" - -@implementation MPVASTMediaFile - -+ (NSDictionary *)modelMap -{ - return @{@"bitrate": @[@"bitrate", MPParseNumberFromString(NSNumberFormatterDecimalStyle)], - @"height": @[@"height", MPParseNumberFromString(NSNumberFormatterDecimalStyle)], - @"width": @[@"width", MPParseNumberFromString(NSNumberFormatterDecimalStyle)], - @"identifier": @"id", - @"delivery": @"delivery", - @"mimeType": @"type", - @"URL": @[@"text", MPParseURLFromString()]}; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTModel.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTModel.h deleted file mode 100644 index eed4d0966..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTModel.h +++ /dev/null @@ -1,69 +0,0 @@ -// -// MPVASTModel.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@protocol MPObjectMapper - -- (id)mappedObjectFromSourceObject:(id)object; -- (Class)requiredSourceObjectClass; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -id MPParseArrayOf(id internalMapper); -id MPParseURLFromString(void); -id MPParseNumberFromString(NSNumberFormatterStyle numberStyle); -id MPParseTimeIntervalFromDurationString(void); -id MPParseClass(Class destinationClass); - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPNSStringToNSURLMapper : NSObject -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPDurationStringToTimeIntervalMapper : NSObject -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPStringToNumberMapper : NSObject - -- (id)initWithNumberStyle:(NSNumberFormatterStyle)numberStyle; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPClassMapper : NSObject - -- (id)initWithDestinationClass:(Class)destinationClass; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPNSArrayMapper : NSObject - -- (id)initWithInternalMapper:(id)mapper; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPVASTModel : NSObject - -+ (NSDictionary *)modelMap; -- (instancetype)initWithDictionary:(NSDictionary *)dictionary; -- (id)generateModelFromDictionaryValue:(id)value modelProvider:(id(^)(id))provider; -- (NSArray *)generateModelsFromDictionaryValue:(id)value modelProvider:(id(^)(id))provider; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTModel.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTModel.m deleted file mode 100644 index 78e34adea..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTModel.m +++ /dev/null @@ -1,368 +0,0 @@ -// -// MPVASTModel.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTModel.h" -#import "MPVASTStringUtilities.h" -#import "MPLogging.h" -#import - -id MPParseArrayOf(id internalMapper) -{ - return [[MPNSArrayMapper alloc] initWithInternalMapper:internalMapper]; -} - -id MPParseURLFromString() -{ - return [[MPNSStringToNSURLMapper alloc] init]; -} - -id MPParseNumberFromString(NSNumberFormatterStyle numberStyle) -{ - return [[MPStringToNumberMapper alloc] initWithNumberStyle:numberStyle]; -} - -id MPParseTimeIntervalFromDurationString() -{ - return [[MPDurationStringToTimeIntervalMapper alloc] init]; -} - -id MPParseClass(Class destinationClass) -{ - return [[MPClassMapper alloc] initWithDestinationClass:destinationClass]; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPNSStringToNSURLMapper - -- (id)mappedObjectFromSourceObject:(id)object -{ - if (![object isKindOfClass:self.requiredSourceObjectClass]) { - return nil; - } - - NSString *URLString = [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; - return [NSURL URLWithString:URLString]; -} - -- (Class)requiredSourceObjectClass -{ - return [NSString class]; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPDurationStringToTimeIntervalMapper - -- (id)mappedObjectFromSourceObject:(id)object -{ - if (![object isKindOfClass:self.requiredSourceObjectClass]) { - return nil; - } - - return @([MPVASTStringUtilities timeIntervalFromString:object]); -} - -- (Class)requiredSourceObjectClass -{ - return [NSString class]; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPStringToNumberMapper () - -@property (nonatomic) NSNumberFormatter *numberFormatter; - -@end - -@implementation MPStringToNumberMapper - -- (id)init -{ - [self doesNotRecognizeSelector:_cmd]; - return nil; -} - -- (id)initWithNumberStyle:(NSNumberFormatterStyle)numberStyle -{ - self = [super init]; - if (self) { - _numberFormatter = [[NSNumberFormatter alloc] init]; - _numberFormatter.numberStyle = numberStyle; - } - return self; -} - -- (id)mappedObjectFromSourceObject:(id)object -{ - if (![object isKindOfClass:self.requiredSourceObjectClass]) { - return nil; - } - - return [self.numberFormatter numberFromString:object]; -} - -- (Class)requiredSourceObjectClass -{ - return [NSString class]; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPClassMapper () - -@property (nonatomic) Class destinationClass; - -@end - -@implementation MPClassMapper - -- (id)init -{ - [self doesNotRecognizeSelector:_cmd]; - return nil; -} - -- (id)initWithDestinationClass:(Class)destinationClass -{ - self = [super init]; - if (self) { - _destinationClass = destinationClass; - } - return self; -} - -- (id)mappedObjectFromSourceObject:(id)object -{ - if (![object isKindOfClass:self.requiredSourceObjectClass]) { - return nil; - } - - if (![self.destinationClass isSubclassOfClass:[MPVASTModel class]] || - ![self.destinationClass instancesRespondToSelector:@selector(initWithDictionary:)]) { - return nil; - } - - return [[self.destinationClass alloc] initWithDictionary:object]; -} - -- (Class)requiredSourceObjectClass -{ - return [NSDictionary class]; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPNSArrayMapper () - -@property (nonatomic) id mapper; - -@end - -@implementation MPNSArrayMapper - -- (id)init -{ - [self doesNotRecognizeSelector:_cmd]; - return nil; -} - -- (id)initWithInternalMapper:(id)mapper -{ - self = [super init]; - if (self) { - _mapper = mapper; - } - return self; -} - -- (id)mappedObjectFromSourceObject:(id)object -{ - // If the input isn't a type we recognize, return nil immediately - if (![object isKindOfClass:self.requiredSourceObjectClass] && - ![object isKindOfClass:self.mapper.requiredSourceObjectClass]) { - return nil; - } - - // If the input isn't an array, return the mapped version of this object encapsulated in an array. - if ([object isKindOfClass:self.mapper.requiredSourceObjectClass]) { - id mappedObject = [self.mapper mappedObjectFromSourceObject:object]; - - // If mapping failed, return nil - if (mappedObject == nil) { - return nil; - } - - // If mapping succeeded, return an array with the mapped object - return @[mappedObject]; - } - - // Otherwise, an array was passed in. - // Map each object in the original array into a new array and return that array. - - NSArray * originalArray = (NSArray *)object; - NSMutableArray * mappedArray = [NSMutableArray arrayWithCapacity:originalArray.count]; - - [originalArray enumerateObjectsUsingBlock:^(id object, NSUInteger index, BOOL * stop){ - id mappedObject = [self.mapper mappedObjectFromSourceObject:object]; - if (mappedObject != nil) { - [mappedArray addObject:mappedObject]; - } - }]; - - return mappedArray.count == 0 ? nil : mappedArray; -} - -- (Class)requiredSourceObjectClass -{ - return [NSArray class]; -} - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPVASTModel - -- (instancetype)initWithDictionary:(NSDictionary *)dictionary -{ - self = [super init]; - if (self) { - if (!dictionary) { - return nil; - } - - NSDictionary *modelMap = [[self class] modelMap]; - for (NSString *key in modelMap) { - if ([self hasPropertyNamed:key]) { - id modelMapValue = modelMap[key]; - - if ([modelMapValue isKindOfClass:[NSString class]]) { - // The simple case: grab the value corresponding to the given key path and - // assign it to the property. - id value = [dictionary valueForKeyPath:modelMapValue]; - if (value) { - [self setValue:value forKey:key]; - } - } else if ([modelMapValue isKindOfClass:[NSArray class]] && [modelMapValue count] == 2) { - NSString *dictionaryKeyPath = modelMapValue[0]; - id mapper = modelMapValue[1]; - - if ([mapper conformsToProtocol:@protocol(MPObjectMapper)]) { - id sourceObject = [dictionary valueForKeyPath:dictionaryKeyPath]; - if (sourceObject) { - id model = [mapper mappedObjectFromSourceObject:sourceObject]; - if (model) { - [self setValue:model forKey:key]; - } - } - } - } else { - MPLogError(@"Could not populate %@ of class %@ because its mapper is invalid.", - key, NSStringFromClass([self class])); - } - } - } - } - return self; -} - -+ (NSDictionary *)modelMap -{ - // Implemented by subclasses. - return nil; -} - -- (id)generateModelFromDictionaryValue:(id)value modelProvider:(id(^)(id))provider { - if (value && [value isKindOfClass:[NSArray class]] && [value count] > 0) { - return provider(value[0]); - } else if (value && [value isKindOfClass:[NSDictionary class]]) { - return provider(value); - } else { - return nil; - } -} - -- (NSArray *)generateModelsFromDictionaryValue:(id)value modelProvider:(id(^)(id))provider { - NSMutableArray *models = [NSMutableArray array]; - - if (value && [value isKindOfClass:[NSArray class]]) { - for (NSDictionary *dictionary in value) { - id model = provider(dictionary); - if (model) { - [models addObject:model]; - } - } - } else if (value && [value isKindOfClass:[NSDictionary class]]) { - id model = provider(value); - if (model) { - [models addObject:model]; - } - } - - return [models copy]; -} - -#pragma mark - Internal - -- (BOOL)hasPropertyNamed:(NSString *)name -{ - // This method uses the objc runtime API to check whether the current model class has a given - // property. After we grab the set of properties for a given class, we cache it for efficiency. - - static NSMutableDictionary *propertyNamesForClass; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - propertyNamesForClass = [NSMutableDictionary dictionary]; - }); - - NSString *className = NSStringFromClass([self class]); - NSMutableSet *propertyNames = propertyNamesForClass[className]; - - if (!propertyNames) { - unsigned int propertyCount; - objc_property_t *properties = class_copyPropertyList([self class], &propertyCount); - propertyNames = [NSMutableSet setWithCapacity:propertyCount]; - for (unsigned int i = 0; i < propertyCount; i++) { - objc_property_t property = properties[i]; - [propertyNames addObject:[NSString stringWithUTF8String:property_getName(property)]]; - } - propertyNamesForClass[className] = propertyNames; - free(properties); - } - - return [propertyNames containsObject:name]; -} - -- (NSString *)description -{ - NSMutableString *descriptionString = [NSMutableString stringWithFormat:@"%@:", NSStringFromClass([self class])]; - - unsigned int propertyCount; - objc_property_t *properties = class_copyPropertyList([self class], &propertyCount); - - for (unsigned int i = 0; i < propertyCount; i++) { - objc_property_t property = properties[i]; - NSString *propertyName = [[NSString alloc] initWithUTF8String:property_getName(property)]; - [descriptionString appendFormat:@"\n\t%s = %s", propertyName.UTF8String, [[self valueForKey:propertyName] description].UTF8String]; - } - - free(properties); - return descriptionString; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResource.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResource.h deleted file mode 100644 index 4363a283e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResource.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// MPVASTResource.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTModel.h" - -@interface MPVASTResource : MPVASTModel - -@property (nonatomic, readonly) NSString *content; -@property (nonatomic, readonly) NSString *staticCreativeType; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResource.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResource.m deleted file mode 100644 index dd5253a87..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResource.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPVASTResource.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTResource.h" - -@implementation MPVASTResource - -+ (NSDictionary *)modelMap -{ - return @{@"content": @"text", - @"staticCreativeType": @"creativeType"}; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResponse.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResponse.h deleted file mode 100644 index 1d44695a9..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResponse.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// MPVASTResponse.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTModel.h" - -#import "MPVASTAd.h" -#import "MPVASTCompanionAd.h" -#import "MPVASTCreative.h" -#import "MPVASTDurationOffset.h" -#import "MPVASTIndustryIcon.h" -#import "MPVASTInline.h" -#import "MPVASTLinearAd.h" -#import "MPVASTMediaFile.h" -#import "MPVASTResource.h" -#import "MPVASTTrackingEvent.h" -#import "MPVASTWrapper.h" - -@interface MPVASTResponse : MPVASTModel - -@property (nonatomic, readonly) NSArray *ads; -@property (nonatomic, readonly) NSArray *errorURLs; -@property (nonatomic, copy, readonly) NSString *version; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResponse.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResponse.m deleted file mode 100644 index 59b6c4c47..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTResponse.m +++ /dev/null @@ -1,29 +0,0 @@ -// -// MPVASTResponse.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTResponse.h" - -@interface MPVASTResponse () - -@property (nonatomic) NSArray *ads; -@property (nonatomic) NSArray *errorURLs; -@property (nonatomic, copy) NSString *version; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPVASTResponse - -+ (NSDictionary *)modelMap -{ - return @{@"ads": @[@"VAST.Ad", MPParseArrayOf(MPParseClass([MPVASTAd class]))], - @"version": @"VAST.version"}; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTStringUtilities.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTStringUtilities.h deleted file mode 100644 index b1ca4fec5..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTStringUtilities.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// MPVASTStringUtilities.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPVASTStringUtilities : NSObject - -+ (double)doubleFromString:(NSString *)string; -+ (BOOL)stringRepresentsNonNegativePercentage:(NSString *)string; -+ (BOOL)stringRepresentsNonNegativeDuration:(NSString *)string; -+ (NSInteger)percentageFromString:(NSString *)string; -+ (NSTimeInterval)timeIntervalFromString:(NSString *)string; -+ (NSString *)stringFromTimeInterval:(NSTimeInterval)timeInterval; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTStringUtilities.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTStringUtilities.m deleted file mode 100644 index e61cfc2df..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTStringUtilities.m +++ /dev/null @@ -1,147 +0,0 @@ -// -// MPVASTStringUtilities.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTStringUtilities.h" - -// Expected format is a decimal number from 0-100 followed by the % sign. -static NSString * const kPercentageRegexString = @"^(\\d?\\d(\\.\\d*)?|100(?:\\.0*)?)%$"; -static dispatch_once_t percentageRegexOnceToken; -static NSRegularExpression *percentageRegex; - -// Expected format is either HH:mm:ss.mmm or simply a floating-point number. -static NSString * const kDurationRegexString = @"^(\\d{2}):([0-5]\\d):([0-5]\\d(?:\\.\\d{1,3})?)|(^[0-9]*\\.?[0-9]+$)"; -static dispatch_once_t durationRegexOnceToken; -static NSRegularExpression *durationRegex; - -@implementation MPVASTStringUtilities - -+ (double)doubleFromString:(NSString *)string -{ - static NSNumberFormatter *formatter = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - formatter = [[NSNumberFormatter alloc] init]; - formatter.numberStyle = NSNumberFormatterDecimalStyle; - }); - - return [[formatter numberFromString:string] doubleValue]; -} - -+ (BOOL)stringRepresentsNonNegativePercentage:(NSString *)string -{ - dispatch_once(&percentageRegexOnceToken, ^{ - percentageRegex = [NSRegularExpression regularExpressionWithPattern:kPercentageRegexString options:0 error:nil]; - }); - - NSArray *matches = [percentageRegex matchesInString:string options:0 range:NSMakeRange(0, [string length])]; - - if (![matches count]) { - return NO; - } - - NSTextCheckingResult *match = matches[0]; - return (match.range.location != NSNotFound); -} - -+ (BOOL)stringRepresentsNonNegativeDuration:(NSString *)string -{ - dispatch_once(&durationRegexOnceToken, ^{ - durationRegex = [NSRegularExpression regularExpressionWithPattern:kDurationRegexString options:0 error:nil]; - }); - - NSArray *matches = [durationRegex matchesInString:string options:0 range:NSMakeRange(0, [string length])]; - - if (![matches count]) { - return NO; - } - - NSTextCheckingResult *match = matches[0]; - return (match.range.location != NSNotFound); -} - -+ (NSInteger)percentageFromString:(NSString *)string -{ - dispatch_once(&percentageRegexOnceToken, ^{ - percentageRegex = [NSRegularExpression regularExpressionWithPattern:kPercentageRegexString options:0 error:nil]; - }); - - if (![string length]) { - return 0; - } - - NSArray *matches = [percentageRegex matchesInString:string options:0 range:NSMakeRange(0, [string length])]; - if ([matches count]) { - NSTextCheckingResult *match = matches[0]; - if (match.range.location == NSNotFound) { - return 0; - } - - return [[string substringWithRange:[match rangeAtIndex:1]] integerValue]; - } else { - return 0; - } -} - -+ (NSTimeInterval)timeIntervalFromString:(NSString *)string -{ - dispatch_once(&durationRegexOnceToken, ^{ - durationRegex = [NSRegularExpression regularExpressionWithPattern:kDurationRegexString options:0 error:nil]; - }); - - if (![string length]) { - return 0; - } - - NSArray *matches = [durationRegex matchesInString:string options:0 range:NSMakeRange(0, [string length])]; - - if (![matches count]) { - return 0; - } - - NSTextCheckingResult *match = matches[0]; - if (match.range.location == NSNotFound) { - return 0; - } - - // This is the case where the string is simply a floating-point number. - if ([match rangeAtIndex:4].location != NSNotFound) { - return [[string substringWithRange:[match rangeAtIndex:4]] doubleValue]; - } - - // Fail if hours, minutes, or seconds are missing. - if ([match rangeAtIndex:1].location == NSNotFound || - [match rangeAtIndex:2].location == NSNotFound || - [match rangeAtIndex:3].location == NSNotFound) { - return 0; - } - - NSInteger hours = 0; - NSInteger minutes = 0; - double seconds = 0; - - hours = [[string substringWithRange:[match rangeAtIndex:1]] integerValue]; - minutes = [[string substringWithRange:[match rangeAtIndex:2]] integerValue]; - seconds = [[string substringWithRange:[match rangeAtIndex:3]] doubleValue]; - - return hours * 60 * 60 + minutes * 60 + seconds; -} - -+ (NSString *)stringFromTimeInterval:(NSTimeInterval)timeInterval -{ - if (timeInterval < 0) { - return @"00:00:00.000"; - } - - NSInteger flooredTimeInterval = (NSInteger)timeInterval; - NSInteger hours = flooredTimeInterval / 3600; - NSInteger minutes = (flooredTimeInterval / 60) % 60; - NSTimeInterval seconds = fmod(timeInterval, 60); - return [NSString stringWithFormat:@"%02ld:%02ld:%06.3f", (long)hours, (long)minutes, seconds]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.h deleted file mode 100644 index 160d35917..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// MPVASTTrackingEvent.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTModel.h" - -@class MPVASTDurationOffset; - -extern NSString * const MPVASTTrackingEventTypeCreativeView; -extern NSString * const MPVASTTrackingEventTypeStart; -extern NSString * const MPVASTTrackingEventTypeFirstQuartile; -extern NSString * const MPVASTTrackingEventTypeMidpoint; -extern NSString * const MPVASTTrackingEventTypeThirdQuartile; -extern NSString * const MPVASTTrackingEventTypeComplete; -extern NSString * const MPVASTTrackingEventTypeMute; -extern NSString * const MPVASTTrackingEventTypeUnmute; -extern NSString * const MPVASTTrackingEventTypePause; -extern NSString * const MPVASTTrackingEventTypeRewind; -extern NSString * const MPVASTTrackingEventTypeResume; -extern NSString * const MPVASTTrackingEventTypeFullscreen; -extern NSString * const MPVASTTrackingEventTypeExitFullscreen; -extern NSString * const MPVASTTrackingEventTypeExpand; -extern NSString * const MPVASTTrackingEventTypeCollapse; -extern NSString * const MPVASTTrackingEventTypeAcceptInvitationLinear; -extern NSString * const MPVASTTrackingEventTypeCloseLinear; -extern NSString * const MPVASTTrackingEventTypeSkip; -extern NSString * const MPVASTTrackingEventTypeProgress; - -@interface MPVASTTrackingEvent : MPVASTModel - -@property (nonatomic, copy, readonly) NSString *eventType; -@property (nonatomic, copy, readonly) NSURL *URL; -@property (nonatomic, readonly) MPVASTDurationOffset *progressOffset; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.m deleted file mode 100644 index 5e17873b0..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTTrackingEvent.m +++ /dev/null @@ -1,57 +0,0 @@ -// -// MPVASTTrackingEvent.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTTrackingEvent.h" -#import "MPVASTDurationOffset.h" - -NSString * const MPVASTTrackingEventTypeCreativeView = @"creativeView"; -NSString * const MPVASTTrackingEventTypeStart = @"start"; -NSString * const MPVASTTrackingEventTypeFirstQuartile = @"firstQuartile"; -NSString * const MPVASTTrackingEventTypeMidpoint = @"midpoint"; -NSString * const MPVASTTrackingEventTypeThirdQuartile = @"thirdQuartile"; -NSString * const MPVASTTrackingEventTypeComplete = @"complete"; -NSString * const MPVASTTrackingEventTypeMute = @"mute"; -NSString * const MPVASTTrackingEventTypeUnmute = @"unmute"; -NSString * const MPVASTTrackingEventTypePause = @"pause"; -NSString * const MPVASTTrackingEventTypeRewind = @"rewind"; -NSString * const MPVASTTrackingEventTypeResume = @"resume"; -NSString * const MPVASTTrackingEventTypeFullscreen = @"fullscreen"; -NSString * const MPVASTTrackingEventTypeExitFullscreen = @"exitFullscreen"; -NSString * const MPVASTTrackingEventTypeExpand = @"expand"; -NSString * const MPVASTTrackingEventTypeCollapse = @"collapse"; -NSString * const MPVASTTrackingEventTypeAcceptInvitationLinear = @"acceptInvitationLinear"; -NSString * const MPVASTTrackingEventTypeCloseLinear = @"closeLinear"; -NSString * const MPVASTTrackingEventTypeSkip = @"skip"; -NSString * const MPVASTTrackingEventTypeProgress = @"progress"; - -@implementation MPVASTTrackingEvent - -- (instancetype)initWithDictionary:(NSDictionary *)dictionary -{ - self = [super initWithDictionary:dictionary]; - if (self) { - _eventType = dictionary[@"event"]; - - _URL = [self generateModelFromDictionaryValue:dictionary - modelProvider:^id(NSDictionary *dictionary) { - return [NSURL URLWithString:[dictionary[@"text"] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]]; - }]; - // a tracker that does not specify a URL is not valid - if (_URL == nil) { - return nil; - } - - _progressOffset = [self generateModelFromDictionaryValue:dictionary - modelProvider:^id(NSDictionary *dictionary) { - return [[MPVASTDurationOffset alloc] initWithDictionary:dictionary]; - }]; - } - return self; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTWrapper.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTWrapper.h deleted file mode 100644 index 4a2e865d8..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTWrapper.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPVASTWrapper.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPVASTModel.h" - -@class MPVASTResponse; - -@interface MPVASTWrapper : MPVASTModel - -@property (nonatomic, readonly) NSArray *creatives; -@property (nonatomic, readonly) NSArray *errorURLs; -@property (nonatomic, readonly) NSArray *extensions; -@property (nonatomic, readonly) NSArray *impressionURLs; -@property (nonatomic, copy, readonly) NSURL *VASTAdTagURI; -@property (nonatomic, readonly) MPVASTResponse *wrappedVASTResponse; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTWrapper.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTWrapper.m deleted file mode 100644 index 38a2d4f8b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Internal/VAST/MPVASTWrapper.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// MPVASTWrapper.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPVASTWrapper.h" -#import "MPVASTCreative.h" - -@interface MPVASTWrapper () - -@property (nonatomic, readwrite) MPVASTResponse *wrappedVASTResponse; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPVASTWrapper - -- (instancetype)initWithDictionary:(NSDictionary *)dictionary -{ - self = [super initWithDictionary:dictionary]; - if (self) { - _extensions = [self generateModelsFromDictionaryValue:dictionary[@"Extensions"][@"Extension"] - modelProvider:^id(NSDictionary *dictionary) { - return dictionary; - }]; - } - return self; -} - -+ (NSDictionary *)modelMap -{ - return @{@"creatives": @[@"Creatives.Creative", MPParseArrayOf(MPParseClass([MPVASTCreative class]))], - @"errorURLs": @[@"Error.text", MPParseArrayOf(MPParseURLFromString())], - @"impressionURLs": @[@"Impression.text", MPParseArrayOf(MPParseURLFromString())], - // @"extensions": @[@"Extensions.Extension"], - @"VASTAdTagURI": @[@"VASTAdTagURI.text", MPParseURLFromString()]}; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MOPUBDisplayAgentType.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MOPUBDisplayAgentType.h deleted file mode 100644 index 01a99c544..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MOPUBDisplayAgentType.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// MOPUBDisplayAgentType.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -typedef NS_ENUM(NSInteger, MOPUBDisplayAgentType) { - MOPUBDisplayAgentTypeInApp = 0, - MOPUBDisplayAgentTypeNativeSafari, - MOPUBDisplayAgentTypeSafariViewController -}; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdConversionTracker.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdConversionTracker.h deleted file mode 100644 index 5b1d6a36c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdConversionTracker.h +++ /dev/null @@ -1,58 +0,0 @@ -// -// MPAdConversionTracker.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#define MOPUB_CONVERSION_DEFAULTS_KEY @"com.mopub.conversion" -#define MOPUB_CONVERSION_APP_ID_KEY @"com.mopub.conversion.appId" - -/** - * The `MPAdConversionTracker` class provides a mechanism for reporting application download - * (conversion) events to MoPub. This type of tracking is important for measuring the effectiveness - * of cross-promotional and direct-sold advertising. - * - * To track application downloads, get a reference to the shared instance of this class using the - * `sharedConversionTracker` method. Then, in your application delegate's - * `application:didFinishLaunchingWithOptions:` method, call the - * `reportApplicationOpenForApplicationID:` method on the shared instance. With this call in place, - * the conversion tracker will report an event to MoPub whenever the application is launched on a - * given device for the first time. Any subsequent launches will not be recorded as conversion - * events. - */ - -@interface MPAdConversionTracker : NSObject - -/** @name Recording Conversions */ - -/** - * Returns the shared instance of the `MPAdConversionTracker` class. - * - * @return A singleton `MPAdConversionTracker` object. - */ -+ (MPAdConversionTracker *)sharedConversionTracker; - -/** - * Notifies MoPub that a conversion event should be recorded for the application corresponding to - * the specified `appID`. - * - * A conversion event will only be reported once per application download, even if this method - * is called multiple times. - * - * @param appID An iTunes application ID. - * - * The easiest way to find the correct ID for your application is to generate an iTunes URL using - * the [iTunes Link Maker](https://itunes.apple.com/linkmaker), and then extract the number - * immediately following the "id" string. - * - * For example, the iTunes URL for the "Find My Friends" application is - * https://itunes.apple.com/us/app/find-my-friends/id466122094, so its application ID is - * 466122094. - */ -- (void)reportApplicationOpenForApplicationID:(NSString *)appID; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdConversionTracker.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdConversionTracker.m deleted file mode 100644 index aecc8d3b0..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdConversionTracker.m +++ /dev/null @@ -1,64 +0,0 @@ -// -// MPAdConversionTracker.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdConversionTracker.h" -#import "MPConstants.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MPIdentityProvider.h" -#import "MPCoreInstanceProvider.h" -#import "MPAPIEndpoints.h" -#import "MPHTTPNetworkSession.h" -#import "MPURLRequest.h" -#import "MPConsentManager.h" -#import "MPAdServerURLBuilder.h" - -@interface MPAdConversionTracker () -@property (nonatomic, strong) NSURLSessionTask * task; -@end - -@implementation MPAdConversionTracker - -+ (MPAdConversionTracker *)sharedConversionTracker -{ - static MPAdConversionTracker *sharedConversionTracker; - - @synchronized(self) - { - if (!sharedConversionTracker) - sharedConversionTracker = [[MPAdConversionTracker alloc] init]; - return sharedConversionTracker; - } -} - - -- (void)reportApplicationOpenForApplicationID:(NSString *)appID -{ - // Store app ID in case retry is needed. - [[NSUserDefaults standardUserDefaults] setObject:appID forKey:MOPUB_CONVERSION_APP_ID_KEY]; - [[NSUserDefaults standardUserDefaults] synchronize]; - - // Do not send app conversion request if collecting personal information is not allowed. - if (![MPConsentManager sharedManager].canCollectPersonalInfo) { - return; - } - - if (![[NSUserDefaults standardUserDefaults] boolForKey:MOPUB_CONVERSION_DEFAULTS_KEY]) { - MPLogInfo(@"Tracking conversion"); - MPURLRequest * request = [[MPURLRequest alloc] initWithURL:[MPAdServerURLBuilder conversionTrackingURLForAppID:appID]]; - self.task = [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:^(NSData * data, NSHTTPURLResponse * response) { - if (response.statusCode == 200 && data.length > 0) { - [[NSUserDefaults standardUserDefaults] removeObjectForKey:MOPUB_CONVERSION_APP_ID_KEY]; - [[NSUserDefaults standardUserDefaults] setBool:YES forKey:MOPUB_CONVERSION_DEFAULTS_KEY]; - [[NSUserDefaults standardUserDefaults] synchronize]; - } - } errorHandler:nil]; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdTargeting.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdTargeting.h deleted file mode 100644 index 32a0e88d1..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdTargeting.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// MPAdTargeting.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class CLLocation; - -/** - Optional targeting parameters to use when requesting an ad. - */ -@interface MPAdTargeting : NSObject - -/** - A string representing a set of non-personally identifiable keywords that should be passed - to the MoPub ad server to receive more relevant advertising. - - @remark If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain - consent from the user, @c keywords will still be sent to the server. - */ -@property (nonatomic, copy) NSString * keywords; - -/** - Key-value pairs that are locally available to the custom event. - */ -@property (nonatomic, copy) NSDictionary * localExtras; - -/** - A user's location that should be passed to the MoPub ad server to receive more relevant advertising. - */ -@property (nonatomic, copy) CLLocation * location; - -/** - A string representing a set of personally identifiable keywords that should be passed to the MoPub ad server to receive - more relevant advertising. - - Keywords are typically used to target ad campaigns at specific user segments. They should be - formatted as comma-separated key-value pairs (e.g. "marital:single,age:24"). - - On the MoPub website, keyword targeting options can be found under the "Advanced Targeting" - section when managing campaigns. - - @remark If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain - consent from the user, @c userDataKeywords will not be sent to the server. - */ -@property (nonatomic, copy) NSString * userDataKeywords; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdTargeting.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdTargeting.m deleted file mode 100644 index 30094410c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdTargeting.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPAdTargeting.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdTargeting.h" - -@implementation MPAdTargeting - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdView.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdView.h deleted file mode 100644 index 162460b33..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdView.h +++ /dev/null @@ -1,300 +0,0 @@ -// -// MPAdView.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPConstants.h" - -typedef enum -{ - MPNativeAdOrientationAny, - MPNativeAdOrientationPortrait, - MPNativeAdOrientationLandscape -} MPNativeAdOrientation; - -@protocol MPAdViewDelegate; - -/** - * The MPAdView class provides a view that can display banner advertisements. - */ - -@interface MPAdView : UIView - -/** @name Initializing a Banner Ad */ - -/** - * Initializes an MPAdView with the given ad unit ID and banner size. - * - * @param adUnitId A string representing a MoPub ad unit ID. - * @param size The desired ad size. A list of standard ad sizes is available in MPConstants.h. - * @return A newly initialized ad view corresponding to the given ad unit ID and size. - */ -- (id)initWithAdUnitId:(NSString *)adUnitId size:(CGSize)size; - -/** @name Setting and Getting the Delegate */ - -/** - * The delegate (`MPAdViewDelegate`) of the ad view. - * - * @warning **Important**: Before releasing an instance of `MPAdView`, you must set its delegate - * property to `nil`. - */ -@property (nonatomic, weak) id delegate; - -/** @name Setting Request Parameters */ - -/** - * The MoPub ad unit ID for this ad view. - * - * Ad unit IDs are created on the MoPub website. An ad unit is a defined placement in your - * application set aside for advertising. If no ad unit ID is set, the ad view will use a default - * ID that only receives test ads. - */ -@property (nonatomic, copy) NSString *adUnitId; - -/** - * A string representing a set of non-personally identifiable keywords that should be passed to the MoPub ad server to receive - * more relevant advertising. - - * Note: If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain consent from the user, "keywords" will still be sent to the server. - * - */ -@property (nonatomic, copy) NSString *keywords; - -/** - * A string representing a set of personally identifiable keywords that should be passed to the MoPub ad server to receive - * more relevant advertising. - * - * Keywords are typically used to target ad campaigns at specific user segments. They should be - * formatted as comma-separated key-value pairs (e.g. "marital:single,age:24"). - * - * On the MoPub website, keyword targeting options can be found under the "Advanced Targeting" - * section when managing campaigns. - -* Note: If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain consent from the user, "userDataKeywords" will not be sent to the server. - */ -@property (nonatomic, copy) NSString *userDataKeywords; - -/** - * A `CLLocation` object representing a user's location that should be passed to the MoPub ad server - * to receive more relevant advertising. - */ -@property (nonatomic, copy) CLLocation *location; - -/** - * An optional dictionary containing extra local data. - */ -@property (nonatomic, copy) NSDictionary *localExtras; - -/** @name Loading a Banner Ad */ - -/** - * Requests a new ad from the MoPub ad server. - * - * If the ad view is already loading an ad, this call will be ignored. You may use `forceRefreshAd` - * if you would like cancel any existing ad requests and force a new ad to load. - */ -- (void)loadAd; - -/** - * Cancels any existing ad requests and requests a new ad from the MoPub ad server. - */ -- (void)forceRefreshAd; - -/** @name Handling Orientation Changes */ - -/** - * Informs the ad view that the device orientation has changed. - * - * Banners from some third-party ad networks have orientation-specific behavior. You should call - * this method when your application's orientation changes if you want mediated ads to acknowledge - * their new orientation. - * - * If your application layout needs to change based on the size of the mediated ad, you may want to - * check the value of `adContentViewSize` after calling this method, in case the orientation change - * causes the mediated ad to resize. - * - * @param newOrientation The new interface orientation (after orientation changes have occurred). - */ -- (void)rotateToOrientation:(UIInterfaceOrientation)newOrientation; - -/** - * Forces third-party native ad networks to only use ads sized for the specified orientation. - * - * Banners from some third-party ad networks have orientation-specific behaviors and/or sizes. - * You may use this method to lock ads to a certain orientation. For instance, - * if you call this with MPInterfaceOrientationPortrait, native networks will never - * return ads sized for the landscape orientation. - * - * @param orientation An MPNativeAdOrientation enum value. - * - *
typedef enum {
- *          MPNativeAdOrientationAny,
- *          MPNativeAdOrientationPortrait,
- *          MPNativeAdOrientationLandscape
- *      } MPNativeAdOrientation;
- * 
- * - * @see unlockNativeAdsOrientation - * @see allowedNativeAdsOrientation - */ -- (void)lockNativeAdsToOrientation:(MPNativeAdOrientation)orientation; - -/** - * Allows third-party native ad networks to use ads sized for any orientation. - * - * You do not need to call this method unless you have previously called - * `lockNativeAdsToOrientation:`. - * - * @see lockNativeAdsToOrientation: - * @see allowedNativeAdsOrientation - */ -- (void)unlockNativeAdsOrientation; - -/** - * Returns the banner orientations that third-party ad networks are allowed to use. - * - * @return An enum value representing an allowed set of orientations. - * - * @see lockNativeAdsToOrientation: - * @see unlockNativeAdsOrientation - */ -- (MPNativeAdOrientation)allowedNativeAdsOrientation; - -/** @name Obtaining the Size of the Current Ad */ - -/** - * Returns the size of the current ad being displayed in the ad view. - * - * Ad sizes may vary between different ad networks. This method returns the actual size of the - * underlying mediated ad. This size may be different from the original, initialized size of the - * ad view. You may use this size to determine to adjust the size or positioning of the ad view - * to avoid clipping or border issues. - * - * @returns The size of the underlying mediated ad. - */ -- (CGSize)adContentViewSize; - -/** @name Managing the Automatic Refreshing of Ads */ - -/** - * Stops the ad view from periodically loading new advertisements. - * - * By default, an ad view is allowed to automatically load new advertisements if a refresh interval - * has been configured on the MoPub website. This method prevents new ads from automatically loading, - * even if a refresh interval has been specified. - * - * As a best practice, you should call this method whenever the ad view will be hidden from the user - * for any period of time, in order to avoid unnecessary ad requests. You can then call - * `startAutomaticallyRefreshingContents` to re-enable the refresh behavior when the ad view becomes - * visible. - * - * @see startAutomaticallyRefreshingContents - */ -- (void)stopAutomaticallyRefreshingContents; - -/** - * Causes the ad view to periodically load new advertisements in accordance with user-defined - * refresh settings on the MoPub website. - * - * Calling this method is only necessary if you have previously stopped the ad view's refresh - * behavior using `stopAutomaticallyRefreshingContents`. By default, an ad view is allowed to - * automatically load new advertisements if a refresh interval has been configured on the MoPub - * website. This method has no effect if a refresh interval has not been set. - * - * @see stopAutomaticallyRefreshingContents - */ -- (void)startAutomaticallyRefreshingContents; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -#pragma mark - - -/** - * The delegate of an `MPAdView` object must adopt the `MPAdViewDelegate` protocol. It must - * implement `viewControllerForPresentingModalView` to provide a root view controller from which - * the ad view should present modal content. - * - * Optional methods of this protocol allow the delegate to be notified of banner success or - * failure, as well as other lifecycle events. - */ - -@protocol MPAdViewDelegate - -@required - -/** @name Managing Modal Content Presentation */ - -/** - * Asks the delegate for a view controller to use for presenting modal content, such as the in-app - * browser that can appear when an ad is tapped. - * - * @return A view controller that should be used for presenting modal content. - */ -- (UIViewController *)viewControllerForPresentingModalView; - -@optional - -/** @name Detecting When a Banner Ad is Loaded */ - -/** - * Sent when an ad view successfully loads an ad. - * - * Your implementation of this method should insert the ad view into the view hierarchy, if you - * have not already done so. - * - * @param view The ad view sending the message. - */ -- (void)adViewDidLoadAd:(MPAdView *)view; - -/** - * Sent when an ad view fails to load an ad. - * - * To avoid displaying blank ads, you should hide the ad view in response to this message. - * - * @param view The ad view sending the message. - */ -- (void)adViewDidFailToLoadAd:(MPAdView *)view; - -/** @name Detecting When a User Interacts With the Ad View */ - -/** - * Sent when an ad view is about to present modal content. - * - * This method is called when the user taps on the ad view. Your implementation of this method - * should pause any application activity that requires user interaction. - * - * @param view The ad view sending the message. - * @see `didDismissModalViewForAd:` - */ -- (void)willPresentModalViewForAd:(MPAdView *)view; - -/** - * Sent when an ad view has dismissed its modal content, returning control to your application. - * - * Your implementation of this method should resume any application activity that was paused - * in response to `willPresentModalViewForAd:`. - * - * @param view The ad view sending the message. - * @see `willPresentModalViewForAd:` - */ -- (void)didDismissModalViewForAd:(MPAdView *)view; - -/** - * Sent when a user is about to leave your application as a result of tapping - * on an ad. - * - * Your application will be moved to the background shortly after this method is called. - * - * @param view The ad view sending the message. - */ -- (void)willLeaveApplicationFromAd:(MPAdView *)view; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdView.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdView.m deleted file mode 100644 index 492240054..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdView.m +++ /dev/null @@ -1,193 +0,0 @@ -// -// MPAdView.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdView.h" -#import "MPAdTargeting.h" -#import "MPBannerAdManager.h" -#import "MPBannerAdManagerDelegate.h" -#import "MPClosableView.h" -#import "MPCoreInstanceProvider.h" -#import "MPLogging.h" - -@interface MPAdView () - -@property (nonatomic, strong) MPBannerAdManager *adManager; -@property (nonatomic, weak) UIView *adContentView; -@property (nonatomic, assign) CGSize originalSize; -@property (nonatomic, assign) MPNativeAdOrientation allowedNativeAdOrientation; - -@end - -@implementation MPAdView - -#pragma mark - -#pragma mark Lifecycle - -- (id)initWithAdUnitId:(NSString *)adUnitId size:(CGSize)size -{ - CGRect f = (CGRect){{0, 0}, size}; - if (self = [super initWithFrame:f]) - { - self.backgroundColor = [UIColor clearColor]; - self.clipsToBounds = YES; - self.originalSize = size; - self.allowedNativeAdOrientation = MPNativeAdOrientationAny; - self.adUnitId = (adUnitId) ? adUnitId : DEFAULT_PUB_ID; - self.adManager = [[MPBannerAdManager alloc] initWithDelegate:self]; - self.userInteractionEnabled = NO; - } - return self; -} - -- (void)dealloc -{ - self.adManager.delegate = nil; -} - -#pragma mark - - -- (void)setAdContentView:(UIView *)view -{ - [self.adContentView removeFromSuperview]; - _adContentView = view; - [self addSubview:view]; - - if (view != nil) { - self.userInteractionEnabled = YES; - } -} - -- (CGSize)adContentViewSize -{ - // MPClosableView represents an MRAID ad. - if (!self.adContentView || [self.adContentView isKindOfClass:[MPClosableView class]]) { - return self.originalSize; - } else { - return self.adContentView.bounds.size; - } -} - -- (void)rotateToOrientation:(UIInterfaceOrientation)newOrientation -{ - [self.adManager rotateToOrientation:newOrientation]; -} - -- (void)loadAd -{ - MPAdTargeting * targeting = [[MPAdTargeting alloc] init]; - targeting.keywords = self.keywords; - targeting.localExtras = self.localExtras; - targeting.location = self.location; - targeting.userDataKeywords = self.userDataKeywords; - - [self.adManager loadAdWithTargeting:targeting]; -} - -- (void)refreshAd -{ - [self loadAd]; -} - -- (void)forceRefreshAd -{ - [self.adManager forceRefreshAd]; -} - -- (void)stopAutomaticallyRefreshingContents -{ - [self.adManager stopAutomaticallyRefreshingContents]; -} - -- (void)startAutomaticallyRefreshingContents -{ - [self.adManager startAutomaticallyRefreshingContents]; -} - -- (void)lockNativeAdsToOrientation:(MPNativeAdOrientation)orientation -{ - self.allowedNativeAdOrientation = orientation; -} - -- (void)unlockNativeAdsOrientation -{ - self.allowedNativeAdOrientation = MPNativeAdOrientationAny; -} - -- (MPNativeAdOrientation)allowedNativeAdsOrientation -{ - return self.allowedNativeAdOrientation; -} - -#pragma mark - - -- (MPAdView *)banner -{ - return self; -} - -- (id)bannerDelegate -{ - return self.delegate; -} - -- (CGSize)containerSize -{ - return self.originalSize; -} - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (void)invalidateContentView -{ - [self setAdContentView:nil]; -} - -- (void)managerDidFailToLoadAd -{ - if ([self.delegate respondsToSelector:@selector(adViewDidFailToLoadAd:)]) { - // make sure we are not released synchronously as objects owned by us - // may do additional work after this callback - [[MPCoreInstanceProvider sharedProvider] keepObjectAliveForCurrentRunLoopIteration:self]; - - [self.delegate adViewDidFailToLoadAd:self]; - } -} - -- (void)managerDidLoadAd:(UIView *)ad -{ - [self setAdContentView:ad]; - if ([self.delegate respondsToSelector:@selector(adViewDidLoadAd:)]) { - [self.delegate adViewDidLoadAd:self]; - } -} - -- (void)userActionWillBegin -{ - if ([self.delegate respondsToSelector:@selector(willPresentModalViewForAd:)]) { - [self.delegate willPresentModalViewForAd:self]; - } -} - -- (void)userActionDidFinish -{ - if ([self.delegate respondsToSelector:@selector(didDismissModalViewForAd:)]) { - [self.delegate didDismissModalViewForAd:self]; - } -} - -- (void)userWillLeaveApplication -{ - if ([self.delegate respondsToSelector:@selector(willLeaveApplicationFromAd:)]) { - [self.delegate willLeaveApplicationFromAd:self]; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdvancedBidder.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdvancedBidder.h deleted file mode 100644 index 3d7310056..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPAdvancedBidder.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPAdvancedBidder.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@protocol MPAdvancedBidder -@required -/** - * The name of the network that generated the token. - * @remark This value should correspond to `creative_network_name` in the dashboard. - */ -@property (nonatomic, copy, readonly) NSString * _Nonnull creativeNetworkName; - -/** - * An identity token needed for ORTB requests to the bidder. - */ -@property (nonatomic, copy, readonly) NSString * _Nonnull token; -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPBannerCustomEvent.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPBannerCustomEvent.h deleted file mode 100644 index f3f16ed7e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPBannerCustomEvent.h +++ /dev/null @@ -1,117 +0,0 @@ -// -// MPBannerCustomEvent.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPBannerCustomEventDelegate.h" - -/** - * The MoPub iOS SDK mediates third party Ad Networks using custom events. The custom events are - * responsible for instantiating and manipulating objects in the third party SDK and translating - * and communicating events from those objects back to the MoPub SDK by notifying a delegate. - * - * `MPBannerCustomEvent` is a base class for custom events that support banners. By implementing - * subclasses of `MPBannerCustomEvent` you can enable the MoPub SDK to natively support a wide - * variety of third-party ad networks. - * - * At runtime, the MoPub SDK will find and instantiate an `MPBannerCustomEvent` subclass as needed and - * invoke its `-requestAdWithSize:customEventInfo:` method. - */ - -@interface MPBannerCustomEvent : NSObject - -/** @name Requesting a Banner Ad */ - -/** - * Called when the MoPub SDK requires a new banner ad. - * - * When the MoPub SDK receives a response indicating it should load a custom event, it will send - * this message to your custom event class. Your implementation of this method can either load a - * banner ad from a third-party ad network, or execute any application code. It must also notify the - * `MPBannerCustomEventDelegate` of certain lifecycle events. - * - * @param size The current size of the parent `MPAdView`. You should use this information to create - * and request a banner of the appropriate size. - * - * @param info A dictionary containing additional custom data associated with a given custom event - * request. This data is configurable on the MoPub website, and may be used to pass dynamic information, such as publisher IDs. - */ -- (void)requestAdWithSize:(CGSize)size customEventInfo:(NSDictionary *)info; - -/** - * Called when the MoPub SDK requires a new banner ad. - * - * When the MoPub SDK receives a response indicating it should load a custom event, it will send - * this message to your custom event class. Your implementation of this method can either load a - * banner ad from a third-party ad network, or execute any application code. It must also notify the - * `MPBannerCustomEventDelegate` of certain lifecycle events. - * - * @param size The current size of the parent `MPAdView`. You should use this information to create - * and request a banner of the appropriate size. - * - * @param info A dictionary containing additional custom data associated with a given custom event - * request. This data is configurable on the MoPub website, and may be used to pass dynamic information, such as publisher IDs. - * - * @param adMarkup An optional ad markup to use. - */ -- (void)requestAdWithSize:(CGSize)size customEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup; - -/** @name Callbacks */ - -/** - * Called when a banner rotation should occur. - * - * If you call `-rotateToOrientation` on an `MPAdView`, it will forward the message to its custom event. - * You can implement this method for third-party ad networks that have special behavior when - * orientation changes happen. - * - * @param newOrientation The `UIInterfaceOrientation` passed to the `MPAdView`'s `rotateToOrientation` method. - * - */ -- (void)rotateToOrientation:(UIInterfaceOrientation)newOrientation; - -/** - * Calld when the banner is presented on screen. - * - * If you decide to [opt out of automatic impression tracking](enableAutomaticImpressionAndClickTracking), you should place your - * manual calls to [-trackImpression]([MPBannerCustomEventDelegate trackImpression]) in this method to ensure correct metrics. - */ -- (void)didDisplayAd; - -/** @name Impression and Click Tracking */ - -/** - * Override to opt out of automatic impression and click tracking. - * - * By default, the MPBannerCustomEventDelegate will automatically record impressions and clicks in - * response to the appropriate callbacks. You may override this behavior by implementing this method - * to return `NO`. - * - * @warning **Important**: If you do this, you are responsible for calling the `[-trackImpression]([MPBannerCustomEventDelegate trackImpression])` and - * `[-trackClick]([MPBannerCustomEventDelegate trackClick])` methods on the custom event delegate. Additionally, you should make sure that these - * methods are only called **once** per ad. - * - */ -- (BOOL)enableAutomaticImpressionAndClickTracking; - -/** @name Communicating with the MoPub SDK */ - -/** - * The `MPBannerCustomEventDelegate` to send messages to as events occur. - * - * The `delegate` object defines several methods that you should call in order to inform both MoPub - * and your `MPAdView`'s delegate of the progress of your custom event. - * - */ -@property (nonatomic, weak) id delegate; - -/** - * An optional dictionary containing extra local data. - */ -@property (nonatomic, copy) NSDictionary *localExtras; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPBannerCustomEvent.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPBannerCustomEvent.m deleted file mode 100644 index 3bb6d3002..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPBannerCustomEvent.m +++ /dev/null @@ -1,45 +0,0 @@ -// -// MPBannerCustomEvent.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPBannerCustomEvent.h" - -@implementation MPBannerCustomEvent - -- (void)requestAdWithSize:(CGSize)size customEventInfo:(NSDictionary *)info -{ - // The default implementation of this method does nothing. Subclasses must override this method - // and implement code to load a banner here. -} - -- (void)requestAdWithSize:(CGSize)size customEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - // By default, the original requestAdWithSize:customEventInfo: method will be called. - // Otherwise subclasses must override this method and implement code to load a banner here. - [self requestAdWithSize:size customEventInfo:info]; -} - -- (void)didDisplayAd -{ - // The default implementation of this method does nothing. Subclasses may override this method - // to be notified when the ad is actually displayed on screen. -} - -- (BOOL)enableAutomaticImpressionAndClickTracking -{ - // Subclasses may override this method to return NO to perform impression and click tracking - // manually. - return YES; -} - -- (void)rotateToOrientation:(UIInterfaceOrientation)newOrientation -{ - // The default implementation of this method does nothing. Subclasses may override this method - // to be notified when the parent MPAdView receives -rotateToOrientation: calls. -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPBannerCustomEventDelegate.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPBannerCustomEventDelegate.h deleted file mode 100644 index ea97d69c8..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPBannerCustomEventDelegate.h +++ /dev/null @@ -1,136 +0,0 @@ -// -// MPBannerCustomEventDelegate.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@class MPBannerCustomEvent; - -/** - * Instances of your custom subclass of `MPBannerCustomEvent` will have an `MPBannerCustomEventDelegate` delegate. - * You use this delegate to communicate events ad events back to the MoPub SDK. - * - * When mediating a third party ad network it is important to call as many of these methods - * as accurately as possible. Not all ad networks support all these events, and some support - * different events. It is your responsibility to find an appropriate mapping betwen the ad - * network's events and the callbacks defined on `MPBannerCustomEventDelegate`. - */ - -@protocol MPBannerCustomEventDelegate - -/** - * The view controller instance to use when presenting modals. - * - * @return `viewControllerForPresentingModalView` returns the same view controller that you - * specify when implementing the `MPAdViewDelegate` protocol. - */ -- (UIViewController *)viewControllerForPresentingModalView; - -/** - * The user's current location. - * - * @return This method provides the location that was passed into the parent `MPAdView`. The MoPub - * SDK does **not** automatically request the user's location. It is your responsibility to pass the location - * into `MPAdView`. - * - * You may use this to inform third-party ad networks of the user's location. - */ -- (CLLocation *)location; - -/** @name Banner Ad Event Callbacks - Fetching Ads */ - -/** - * Call this method immediately after an ad loads succesfully. - * - * @param event You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @param ad The `UIView` representing the banner ad. This view will be inserted into the `MPAdView` - * and presented to the user by the MoPub SDK. - * - * @warning **Important**: Your custom event subclass **must** call this method when it successfully loads an ad. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - */ -- (void)bannerCustomEvent:(MPBannerCustomEvent *)event didLoadAd:(UIView *)ad; - -/** - * Call this method immediately after an ad fails to load. - * - * @param event You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @param error (*optional*) You may pass an error describing the failure. - * - * @warning **Important**: Your custom event subclass **must** call this method when it fails to load an ad. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - */ -- (void)bannerCustomEvent:(MPBannerCustomEvent *)event didFailToLoadAdWithError:(NSError *)error; - -/** @name Banner Ad Event Callbacks - User Interaction */ - -/** - * Call this method when the user taps on the banner ad. - * - * This method is optional. When automatic click and impression tracking is enabled (the default) - * this method will track a click (the click is guaranteed to only be tracked once per ad). - * - * @param event You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: If you call `-bannerCustomEventWillBeginAction:`, you _**must**_ also call - * `-bannerCustomEventDidFinishAction:` at a later point. - */ -- (void)bannerCustomEventWillBeginAction:(MPBannerCustomEvent *)event; - -/** - * Call this method when the user finishes interacting with the banner ad. - * - * For example, the user may have dismissed any modal content. This method is optional. - * - * @param event You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: If you call `-bannerCustomEventWillBeginAction:`, you _**must**_ also call - * `-bannerCustomEventDidFinishAction:` at a later point. - */ -- (void)bannerCustomEventDidFinishAction:(MPBannerCustomEvent *)event; - -/** - * Call this method when the banner ad will cause the user to leave the application. - * - * For example, the user may have tapped on a link to visit the App Store or Safari. - * - * @param event You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - */ -- (void)bannerCustomEventWillLeaveApplication:(MPBannerCustomEvent *)event; - -/** @name Impression and Click Tracking */ - -/** - * Call this method to track an impression. - * - * @warning **Important**: You should **only** call this method if you have [opted out of automatic click and impression tracking]([MPBannerCustomEvent enableAutomaticImpressionAndClickTracking]). - * By default the MoPub SDK automatically tracks impressions. - * - * **Important**: In order to obtain accurate metrics, it is your responsibility to call `trackImpression` only **once** per ad. - */ -- (void)trackImpression; - -/** - * Call this method to track a click. - * - * @warning **Important**: You should **only** call this method if you have [opted out of automatic click and impression tracking]([MPBannerCustomEvent enableAutomaticImpressionAndClickTracking]). - * By default the MoPub SDK automatically tracks clicks. - * - * **Important**: In order to obtain accurate metrics, it is your responsibility to call `trackClick` only **once** per ad. - */ -- (void)trackClick; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPBool.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPBool.h deleted file mode 100644 index 3e3c57c97..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPBool.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// MPBool.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -/** - Tri-state boolean. - */ -typedef NS_ENUM(NSInteger, MPBool) { - /** - No - */ - MPBoolNo = -1, - - /** - Unknown - */ - MPBoolUnknown = 0, - - /** - Yes - */ - MPBoolYes = 1, -}; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedNotification.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedNotification.h deleted file mode 100644 index 70284261c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedNotification.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// MPConsentChangedNotification.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/** - Notification fire whenever the current consent status has changed. The payload - will be included in the @NSNotification.userInfo dictionary. - */ -extern NSString * const kMPConsentChangedNotification; - -/** - The new consent state; represented as a @c MPConsentStatus value wrapped - in a @c NSNumber. - */ -extern NSString * const kMPConsentChangedInfoNewConsentStatusKey; - -/** - The previous consent state; represented as a @c MPConsentStatus value wrapped - in a @c NSNumber. - */ -extern NSString * const kMPConsentChangedInfoPreviousConsentStatusKey; - -/** - Boolean flag indicating that it is okay to collection any personally - identifiable information; represented as a @c BOOL value wrapped in - a @c NSNumber. - */ -extern NSString * const kMPConsentChangedInfoCanCollectPersonalInfoKey; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedNotification.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedNotification.m deleted file mode 100644 index 1393d4d7e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedNotification.m +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPConsentChangedNotification.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPConsentChangedNotification.h" - -#pragma mark - NSNotification Name - -NSString * const kMPConsentChangedNotification = @"com.mopub.mopub-ios-sdk.notification.consent.changed"; - -#pragma mark - NSNotification userInfo Keys - -NSString * const kMPConsentChangedInfoNewConsentStatusKey = @"newConsentStatus"; -NSString * const kMPConsentChangedInfoPreviousConsentStatusKey = @"previousConsentStatus"; -NSString * const kMPConsentChangedInfoCanCollectPersonalInfoKey = @"canCollectPersonalInfo"; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedReason.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedReason.h deleted file mode 100644 index 3bbcee027..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedReason.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// MPConsentChangedReason.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -extern NSString * const kConsentedChangedReasonGranted; -extern NSString * const kConsentedChangedReasonWhitelistGranted; -extern NSString * const kConsentedChangedReasonPotentialWhitelist; -extern NSString * const kConsentedChangedReasonDenied; -extern NSString * const kConsentedChangedReasonPublisherDenied; -extern NSString * const kConsentedChangedReasonDoNotTrackEnabled; -extern NSString * const kConsentedChangedReasonDoNotTrackDisabled; -extern NSString * const kConsentedChangedReasonDoNotTrackDisabledNeedConsent; -extern NSString * const kConsentedChangedReasonIfaChanged; -extern NSString * const kConsentedChangedReasonPrivacyPolicyChange; -extern NSString * const kConsentedChangedReasonVendorListChange; -extern NSString * const kConsentedChangedReasonIabVendorListChange; -extern NSString * const kConsentedChangedReasonServerDeniedConsent; -extern NSString * const kConsentedChangedReasonServerForceInvalidate; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedReason.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedReason.m deleted file mode 100644 index 0c6193528..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConsentChangedReason.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// MPConsentChangedReason.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPConsentChangedReason.h" - -// Human readable descriptions of why consent changed. -NSString * const kConsentedChangedReasonGranted = @"Consent was explicitly granted by the user"; -NSString * const kConsentedChangedReasonWhitelistGranted = @"Consent was explicitly granted by a whitelisted publisher"; -NSString * const kConsentedChangedReasonPotentialWhitelist = @"Consent was explicitly granted by a publisher who is not whitelisted"; -NSString * const kConsentedChangedReasonDenied = @"Consent was explicitly denied by the user"; -NSString * const kConsentedChangedReasonPublisherDenied = @"Consent was explicitly denied by the publisher"; -NSString * const kConsentedChangedReasonDoNotTrackEnabled = @"Limit ad tracking was enabled and consent implicitly denied by the user"; -NSString * const kConsentedChangedReasonDoNotTrackDisabled = @"Limit ad tracking was disabled"; -NSString * const kConsentedChangedReasonDoNotTrackDisabledNeedConsent = @"Consent needs to be reacquired because the user disabled limit ad tracking"; -NSString * const kConsentedChangedReasonIfaChanged = @"Consent needs to be reacquired because the IFA has changed"; -NSString * const kConsentedChangedReasonPrivacyPolicyChange = @"Consent needs to be reacquired because the privacy policy has changed"; -NSString * const kConsentedChangedReasonVendorListChange = @"Consent needs to be reacquired because the vendor list has changed"; -NSString * const kConsentedChangedReasonIabVendorListChange = @"Consent needs to be reacquired because the IAB vendor list has changed"; -NSString * const kConsentedChangedReasonServerDeniedConsent = @"Consent was revoked by the server"; -NSString * const kConsentedChangedReasonServerForceInvalidate = @"Server requires that consent needs to be reacquired"; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConsentError.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConsentError.h deleted file mode 100644 index 0a449ff30..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConsentError.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// MPConsentError.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -static NSString * const kConsentErrorDomain = @"com.mopub.mopub-ios-sdk.consent"; - -/** - Error codes related to consent management. - */ -typedef NS_ENUM(NSUInteger, MPConsentErrorCode) { - MPConsentErrorCodeLimitAdTrackingEnabled = 1, - MPConsentErrorCodeFailedToParseSynchronizationResponse, - MPConsentErrorCodeGDPRIsNotApplicable, -}; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConsentStatus.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConsentStatus.h deleted file mode 100644 index 6d840f347..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConsentStatus.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// MPConsentStatus.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/** - Personally identifiable information (PII) consent status. - PII is allowed to be collected only if @c MPConsentStatus is @c MPConsentStatusConsented. - In all other cases, PII is not allowed to be collected. - */ -typedef NS_ENUM(NSInteger, MPConsentStatus) { - /** - Status is unknown. Either the status is currently updating or - @c initializeSdkWithConfiguration:completion: has not been called. - */ - MPConsentStatusUnknown = 0, - - /** - Consent is denied. - */ - MPConsentStatusDenied, - - /** - Advertiser tracking is disabled. - */ - MPConsentStatusDoNotTrack, - - /** - A potentially whitelisted publisher has attempted to grant consent on - the user's behalf. - */ - MPConsentStatusPotentialWhitelist, - - /** - Consented. - */ - MPConsentStatusConsented -}; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConstants.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConstants.h deleted file mode 100644 index f10fd7b1b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConstants.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// MPConstants.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#define MP_DEBUG_MODE 1 - -#define MP_HAS_NATIVE_PACKAGE 1 - -#define DEFAULT_PUB_ID @"agltb3B1Yi1pbmNyDAsSBFNpdGUYkaoMDA" -#define MP_SERVER_VERSION @"8" -#define MP_REWARDED_API_VERSION @"1" -#define MP_BUNDLE_IDENTIFIER @"com.mopub.mopub" -#define MP_SDK_VERSION @"5.4.0" - -// Sizing constants. -extern CGSize const MOPUB_BANNER_SIZE; -extern CGSize const MOPUB_MEDIUM_RECT_SIZE; -extern CGSize const MOPUB_LEADERBOARD_SIZE; -extern CGSize const MOPUB_WIDE_SKYSCRAPER_SIZE; - -// Miscellaneous constants. -#define MINIMUM_REFRESH_INTERVAL 10.0 -#define DEFAULT_BANNER_REFRESH_INTERVAL 60 // seconds -#define BANNER_TIMEOUT_INTERVAL 10 // seconds -#define INTERSTITIAL_TIMEOUT_INTERVAL 30 // seconds -#define REWARDED_VIDEO_TIMEOUT_INTERVAL 30 // seconds -#define NATIVE_TIMEOUT_INTERVAL 10 // seconds -#define MOPUB_ADS_EXPIRATION_INTERVAL 14400 // 4 hours converted to seconds - -// Feature Flags -#define SESSION_TRACKING_ENABLED 1 - -@interface MPConstants : NSObject - -+ (NSTimeInterval)adsExpirationInterval; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConstants.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConstants.m deleted file mode 100644 index 0243d0fb2..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPConstants.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// MPConstants.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPConstants.h" - -CGSize const MOPUB_BANNER_SIZE = { .width = 320.0f, .height = 50.0f }; -CGSize const MOPUB_MEDIUM_RECT_SIZE = { .width = 300.0f, .height = 250.0f }; -CGSize const MOPUB_LEADERBOARD_SIZE = { .width = 728.0f, .height = 90.0f }; -CGSize const MOPUB_WIDE_SKYSCRAPER_SIZE = { .width = 160.0f, .height = 600.0f }; - -@implementation MPConstants - -+ (NSTimeInterval)adsExpirationInterval { - return MOPUB_ADS_EXPIRATION_INTERVAL; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialAdController.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialAdController.h deleted file mode 100644 index 070d2369f..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialAdController.h +++ /dev/null @@ -1,263 +0,0 @@ -// -// MPInterstitialAdController.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@protocol MPInterstitialAdControllerDelegate; - -/** - * The `MPInterstitialAdController` class provides a full-screen advertisement that can be - * displayed during natural transition points in your application. - */ - -@interface MPInterstitialAdController : NSObject - -/** @name Obtaining an Interstitial Ad */ - -/** - * Returns an interstitial ad object matching the given ad unit ID. - * - * The first time this method is called for a given ad unit ID, a new interstitial ad object is - * created, stored in a shared pool, and returned. Subsequent calls for the same ad unit ID will - * return that object, unless you have disposed of the object using - * `removeSharedInterstitialAdController:`. - * - * There can only be one interstitial object for an ad unit ID at a given time. - * - * @param adUnitId A string representing a MoPub ad unit ID. - */ -+ (MPInterstitialAdController *)interstitialAdControllerForAdUnitId:(NSString *)adUnitId; - -/** @name Setting and Getting the Delegate */ - -/** - * The delegate (`MPInterstitialAdControllerDelegate`) of the interstitial ad object. - */ -@property (nonatomic, weak) id delegate; - -/** @name Setting Request Parameters */ - -/** - * The MoPub ad unit ID for this interstitial ad. - * - * Ad unit IDs are created on the MoPub website. An ad unit is a defined placement in your - * application set aside for advertising. If no ad unit ID is set, the ad object will use a default - * ID that only receives test ads. - */ -@property (nonatomic, copy) NSString *adUnitId; - -/** - * A string representing a set of non-personally identifiable keywords that should be passed to the MoPub ad server to receive - * more relevant advertising. - - * Note: If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain consent from the user, "keywords" will still be sent to the server. - * - */ -@property (nonatomic, copy) NSString *keywords; - -/** - * A string representing a set of personally identifiable keywords that should be passed to the MoPub ad server to receive - * more relevant advertising. - * - * Keywords are typically used to target ad campaigns at specific user segments. They should be - * formatted as comma-separated key-value pairs (e.g. "marital:single,age:24"). - * - * On the MoPub website, keyword targeting options can be found under the "Advanced Targeting" - * section when managing campaigns. - * - * Note: If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain consent from the user, personally identifiable keywords will not be sent to the server. - */ -@property (nonatomic, copy) NSString *userDataKeywords; - -/** - * A `CLLocation` object representing a user's location that should be passed to the MoPub ad server - * to receive more relevant advertising. - */ -@property (nonatomic, copy) CLLocation *location; - -/** - * An optional dictionary containing extra local data. - */ -@property (nonatomic, copy) NSDictionary *localExtras; - -/** @name Loading an Interstitial Ad */ - -/** - * Begins loading ad content for the interstitial. - * - * You can implement the `interstitialDidLoadAd:` and `interstitialDidFailToLoadAd:` methods of - * `MPInterstitialAdControllerDelegate` if you would like to be notified as loading succeeds or - * fails. - */ -- (void)loadAd; - -/** @name Detecting Whether the Interstitial Ad Has Loaded */ - -/** - * A Boolean value that represents whether the interstitial ad has loaded an advertisement and is - * ready to be presented. - * - * After obtaining an interstitial ad object, you can use `loadAd` to tell the object to begin - * loading ad content. Once the content has been loaded, the value of this property will be YES. - * - * The value of this property can be NO if the ad content has not finished loading, has already - * been presented, or has expired. The expiration condition only applies for ads from certain - * third-party ad networks. See `MPInterstitialAdControllerDelegate` for more details. - */ -@property (nonatomic, assign, readonly) BOOL ready; - -/** @name Presenting an Interstitial Ad */ - -/** - * Presents the interstitial ad modally from the specified view controller. - * - * This method will do nothing if the interstitial ad has not been loaded (i.e. the value of its - * `ready` property is NO). - * - * `MPInterstitialAdControllerDelegate` provides optional methods that you may implement to stay - * informed about when an interstitial takes over or relinquishes the screen. - * - * @param controller The view controller that should be used to present the interstitial ad. - */ -- (void)showFromViewController:(UIViewController *)controller; - -/** @name Disposing of an Interstitial Ad */ - -/** - * Removes the given interstitial object from the shared pool of interstitials available to your - * application. - * - * This method removes the mapping from the interstitial's ad unit ID to the interstitial ad - * object. In other words, you will receive a different ad object if you subsequently call - * `interstitialAdControllerForAdUnitId:` for the same ad unit ID. - * - * @warning **Important**: This method is intended to be used for deallocating the interstitial - * ad object when it is no longer needed. You should `nil` out any references you have to the - * object after calling this method. - * - * @param controller The interstitial ad object that should be disposed. - */ -+ (void)removeSharedInterstitialAdController:(MPInterstitialAdController *)controller; - -/* - * Returns the shared pool of interstitial objects for your application. - */ -+ (NSMutableArray *)sharedInterstitialAdControllers DEPRECATED_MSG_ATTRIBUTE("This functionality will be removed in a future SDK release."); - -@end - -#pragma mark - - -/** - * The delegate of an `MPInterstitialAdController` object must adopt the - * `MPInterstitialAdControllerDelegate` protocol. - * - * The optional methods of this protocol allow the delegate to be notified of interstitial state - * changes, such as when an ad has loaded, when an ad has been presented or dismissed from the - * screen, and when an ad has expired. - */ - -@protocol MPInterstitialAdControllerDelegate - -@optional - -/** @name Detecting When an Interstitial Ad is Loaded */ - -/** - * Sent when an interstitial ad object successfully loads an ad. - * - * @param interstitial The interstitial ad object sending the message. - */ -- (void)interstitialDidLoadAd:(MPInterstitialAdController *)interstitial; - -/** - * Sent when an interstitial ad object fails to load an ad. - * - * @param interstitial The interstitial ad object sending the message. - */ -- (void)interstitialDidFailToLoadAd:(MPInterstitialAdController *)interstitial; - -/** - * Sent when an interstitial ad object fails to load an ad. - * - * @param interstitial The interstitial ad object sending the message. - * @param error The error that occurred during the load. - */ -- (void)interstitialDidFailToLoadAd:(MPInterstitialAdController *)interstitial - withError:(NSError *)error; - -/** @name Detecting When an Interstitial Ad is Presented */ - -/** - * Sent immediately before an interstitial ad object is presented on the screen. - * - * Your implementation of this method should pause any application activity that requires user - * interaction. - * - * @param interstitial The interstitial ad object sending the message. - */ -- (void)interstitialWillAppear:(MPInterstitialAdController *)interstitial; - -/** - * Sent after an interstitial ad object has been presented on the screen. - * - * @param interstitial The interstitial ad object sending the message. - */ -- (void)interstitialDidAppear:(MPInterstitialAdController *)interstitial; - -/** @name Detecting When an Interstitial Ad is Dismissed */ - -/** - * Sent immediately before an interstitial ad object will be dismissed from the screen. - * - * @param interstitial The interstitial ad object sending the message. - */ -- (void)interstitialWillDisappear:(MPInterstitialAdController *)interstitial; - -/** - * Sent after an interstitial ad object has been dismissed from the screen, returning control - * to your application. - * - * Your implementation of this method should resume any application activity that was paused - * prior to the interstitial being presented on-screen. - * - * @param interstitial The interstitial ad object sending the message. - */ -- (void)interstitialDidDisappear:(MPInterstitialAdController *)interstitial; - -/** @name Detecting When an Interstitial Ad Expires */ - -/** - * Sent when a loaded interstitial ad is no longer eligible to be displayed. - * - * Interstitial ads from certain networks may expire their content at any time, - * even if the content is currently on-screen. This method notifies you when the currently- - * loaded interstitial has expired and is no longer eligible for display. - * - * If the ad was on-screen when it expired, you can expect that the ad will already have been - * dismissed by the time this message is sent. - * - * Your implementation may include a call to `loadAd` to fetch a new ad, if desired. - * - * @param interstitial The interstitial ad object sending the message. - */ -- (void)interstitialDidExpire:(MPInterstitialAdController *)interstitial; - -/** - * Sent when the user taps the interstitial ad and the ad is about to perform its target action. - * - * This action may include displaying a modal or leaving your application. Certain ad networks - * may not expose a "tapped" callback so you should not rely on this callback to perform - * critical tasks. - * - * @param interstitial The interstitial ad object sending the message. - */ -- (void)interstitialDidReceiveTapEvent:(MPInterstitialAdController *)interstitial; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialAdController.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialAdController.m deleted file mode 100644 index da3691ef2..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialAdController.m +++ /dev/null @@ -1,190 +0,0 @@ -// -// MPInterstitialAdController.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPInterstitialAdController.h" -#import "MPAdTargeting.h" -#import "MPLogging.h" -#import "MPInterstitialAdManager.h" -#import "MPInterstitialAdManagerDelegate.h" - -@interface MPInterstitialAdController () - -@property (nonatomic, strong) MPInterstitialAdManager *manager; - -+ (NSMutableDictionary *)sharedInterstitials; -- (id)initWithAdUnitId:(NSString *)adUnitId; - -@end - -@implementation MPInterstitialAdController - -- (id)initWithAdUnitId:(NSString *)adUnitId -{ - if (self = [super init]) { - self.manager = [[MPInterstitialAdManager alloc] initWithDelegate:self]; - self.adUnitId = adUnitId; - } - return self; -} - -- (void)dealloc -{ - [self.manager setDelegate:nil]; -} - -#pragma mark - Public - -+ (MPInterstitialAdController *)interstitialAdControllerForAdUnitId:(NSString *)adUnitId -{ - NSMutableDictionary *interstitials = [[self class] sharedInterstitials]; - - @synchronized(self) { - // Find the correct ad controller based on the ad unit ID. - MPInterstitialAdController * interstitial = interstitials[adUnitId]; - - // Create a new ad controller for this ad unit ID if one doesn't already exist. - if (interstitial == nil) { - interstitial = [[[self class] alloc] initWithAdUnitId:adUnitId]; - interstitials[adUnitId] = interstitial; - } - - return interstitial; - } -} - -- (BOOL)ready -{ - return self.manager.ready; -} - -- (void)loadAd -{ - MPAdTargeting * targeting = [[MPAdTargeting alloc] init]; - targeting.keywords = self.keywords; - targeting.localExtras = self.localExtras; - targeting.location = self.location; - targeting.userDataKeywords = self.userDataKeywords; - - [self.manager loadInterstitialWithAdUnitID:self.adUnitId targeting:targeting]; -} - -- (void)showFromViewController:(UIViewController *)controller -{ - if (!controller) { - MPLogWarn(@"The interstitial could not be shown: " - @"a nil view controller was passed to -showFromViewController:."); - return; - } - - if (![controller.view.window isKeyWindow]) { - MPLogWarn(@"Attempted to present an interstitial ad in non-key window. The ad may not render properly"); - } - - [self.manager presentInterstitialFromViewController:controller]; -} - -#pragma mark - Internal - -+ (NSMutableDictionary *)sharedInterstitials -{ - static NSMutableDictionary *sharedInterstitials; - - @synchronized(self) { - if (!sharedInterstitials) { - sharedInterstitials = [NSMutableDictionary dictionary]; - } - } - - return sharedInterstitials; -} - -#pragma mark - MPInterstitialAdManagerDelegate - -- (MPInterstitialAdController *)interstitialAdController -{ - return self; -} - -- (id)interstitialDelegate -{ - return self.delegate; -} - -- (void)managerDidLoadInterstitial:(MPInterstitialAdManager *)manager -{ - if ([self.delegate respondsToSelector:@selector(interstitialDidLoadAd:)]) { - [self.delegate interstitialDidLoadAd:self]; - } -} - -- (void)manager:(MPInterstitialAdManager *)manager - didFailToLoadInterstitialWithError:(NSError *)error -{ - if ([self.delegate respondsToSelector:@selector(interstitialDidFailToLoadAd:withError:)]) { - [self.delegate interstitialDidFailToLoadAd:self withError:error]; - } else if ([self.delegate respondsToSelector:@selector(interstitialDidFailToLoadAd:)]) { - [self.delegate interstitialDidFailToLoadAd:self]; - } -} - -- (void)managerWillPresentInterstitial:(MPInterstitialAdManager *)manager -{ - if ([self.delegate respondsToSelector:@selector(interstitialWillAppear:)]) { - [self.delegate interstitialWillAppear:self]; - } -} - -- (void)managerDidPresentInterstitial:(MPInterstitialAdManager *)manager -{ - if ([self.delegate respondsToSelector:@selector(interstitialDidAppear:)]) { - [self.delegate interstitialDidAppear:self]; - } -} - -- (void)managerWillDismissInterstitial:(MPInterstitialAdManager *)manager -{ - if ([self.delegate respondsToSelector:@selector(interstitialWillDisappear:)]) { - [self.delegate interstitialWillDisappear:self]; - } -} - -- (void)managerDidDismissInterstitial:(MPInterstitialAdManager *)manager -{ - if ([self.delegate respondsToSelector:@selector(interstitialDidDisappear:)]) { - [self.delegate interstitialDidDisappear:self]; - } -} - -- (void)managerDidExpireInterstitial:(MPInterstitialAdManager *)manager -{ - if ([self.delegate respondsToSelector:@selector(interstitialDidExpire:)]) { - [self.delegate interstitialDidExpire:self]; - } -} - -- (void)managerDidReceiveTapEventFromInterstitial:(MPInterstitialAdManager *)manager -{ - if ([self.delegate respondsToSelector:@selector(interstitialDidReceiveTapEvent:)]) { - [self.delegate interstitialDidReceiveTapEvent:self]; - } -} - -+ (NSMutableArray *)sharedInterstitialAdControllers -{ - return [NSMutableArray arrayWithArray:[[self class] sharedInterstitials].allValues]; -} - -+ (void)removeSharedInterstitialAdController:(MPInterstitialAdController *)controller -{ - @synchronized(self) { - NSMutableDictionary * sharedInterstitials = [[self class] sharedInterstitials]; - [sharedInterstitials removeObjectForKey:controller.adUnitId]; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEvent.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEvent.h deleted file mode 100644 index 20dd25373..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEvent.h +++ /dev/null @@ -1,106 +0,0 @@ -// -// MPInterstitialCustomEvent.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPInterstitialCustomEventDelegate.h" - -/** - * The MoPub iOS SDK mediates third party Ad Networks using custom events. The custom events are - * responsible for instantiating and manipulating objects in the third party SDK and translating - * and communicating events from those objects back to the MoPub SDK by notifying a delegate. - * - * `MPInterstitialCustomEvent` is a base class for custom events that support full-screen interstitial ads. - * By implementing subclasses of `MPInterstitialCustomEvent` you can enable the MoPub SDK to - * natively support a wide variety of third-party ad networks. - * - * At runtime, the MoPub SDK will find and instantiate an `MPInterstitialCustomEvent` subclass as needed and - * invoke its `-requestInterstitialWithCustomEventInfo:` method. - */ - - -@interface MPInterstitialCustomEvent : NSObject - -/** @name Requesting and Displaying an Interstitial Ad */ - -/** - * Called when the MoPub SDK requires a new interstitial ad. - * - * When the MoPub SDK receives a response indicating it should load a custom event, it will send - * this message to your custom event class. Your implementation of this method should load an - * interstitial ad from a third-party ad network. It must also notify the - * `MPInterstitialCustomEventDelegate` of certain lifecycle events. - * - * @param info A dictionary containing additional custom data associated with a given custom event - * request. This data is configurable on the MoPub website, and may be used to pass dynamic information, such as publisher IDs. - */ - -- (void)requestInterstitialWithCustomEventInfo:(NSDictionary *)info; - -/** - * Called when the MoPub SDK requires a new interstitial ad. - * - * When the MoPub SDK receives a response indicating it should load a custom event, it will send - * this message to your custom event class. Your implementation of this method should load an - * interstitial ad from a third-party ad network. It must also notify the - * `MPInterstitialCustomEventDelegate` of certain lifecycle events. - * - * @param info A dictionary containing additional custom data associated with a given custom event - * request. This data is configurable on the MoPub website, and may be used to pass dynamic information, such as publisher IDs. - * @param adMarkup An optional ad markup to use. - */ - -- (void)requestInterstitialWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup; - -/** - * Called when the interstitial should be displayed. - * - * This message is sent sometime after an interstitial has been successfully loaded, as a result - * of your code calling `-[MPInterstitialAdController showFromViewController:]`. Your implementation - * of this method should present the interstitial ad from the specified view controller. - * - * If you decide to [opt out of automatic impression tracking](enableAutomaticImpressionAndClickTracking), you should place your - * manual calls to [-trackImpression]([MPInterstitialCustomEventDelegate trackImpression]) in this method to ensure correct metrics. - * - * @param rootViewController The controller to use to present the interstitial modally. - * - */ -- (void)showInterstitialFromRootViewController:(UIViewController *)rootViewController; - -/** @name Impression and Click Tracking */ - -/** - * Override to opt out of automatic impression and click tracking. - * - * By default, the MPInterstitialCustomEventDelegate will automatically record impressions and clicks in - * response to the appropriate callbacks. You may override this behavior by implementing this method - * to return `NO`. - * - * @warning **Important**: If you do this, you are responsible for calling the `[-trackImpression]([MPInterstitialCustomEventDelegate trackImpression])` and - * `[-trackClick]([MPInterstitialCustomEventDelegate trackClick])` methods on the custom event delegate. Additionally, you should make sure that these - * methods are only called **once** per ad. - */ -- (BOOL)enableAutomaticImpressionAndClickTracking; - -/** @name Communicating with the MoPub SDK */ - -/** - * The `MPInterstitialCustomEventDelegate` to send messages to as events occur. - * - * The `delegate` object defines several methods that you should call in order to inform both MoPub - * and your `MPInterstitialAdController`'s delegate of the progress of your custom event. - * - */ - -@property (nonatomic, weak) id delegate; - -/** - * An optional dictionary containing extra local data. - */ -@property (nonatomic, copy) NSDictionary *localExtras; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEvent.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEvent.m deleted file mode 100644 index 93a68c556..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEvent.m +++ /dev/null @@ -1,41 +0,0 @@ -// -// MPInterstitialCustomEvent.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPInterstitialCustomEvent.h" - -@implementation MPInterstitialCustomEvent - -@synthesize delegate; - -- (void)requestInterstitialWithCustomEventInfo:(NSDictionary *)info -{ - // The default implementation of this method does nothing. Subclasses must override this method - // and implement code to load an interstitial here. -} - -- (void)requestInterstitialWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - // By default, the original requestInterstitialWithCustomEventInfo: method will be called. - // Otherwise subclasses must override this method and implement code to load an interstitial here. - [self requestInterstitialWithCustomEventInfo:info]; -} - -- (BOOL)enableAutomaticImpressionAndClickTracking -{ - // Subclasses may override this method to return NO to perform impression and click tracking - // manually. - return YES; -} - -- (void)showInterstitialFromRootViewController:(UIViewController *)rootViewController -{ - // The default implementation of this method does nothing. Subclasses must override this method - // and implement code to display an interstitial here. -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEventDelegate.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEventDelegate.h deleted file mode 100644 index 770aa1dae..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPInterstitialCustomEventDelegate.h +++ /dev/null @@ -1,184 +0,0 @@ -// -// MPInterstitialCustomEventDelegate.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@class MPInterstitialCustomEvent; - -/** - * Instances of your custom subclass of `MPInterstitialCustomEvent` will have an `MPInterstitialCustomEventDelegate` delegate. - * You use this delegate to communicate events ad events back to the MoPub SDK. - * - * When mediating a third party ad network it is important to call as many of these methods - * as accurately as possible. Not all ad networks support all these events, and some support - * different events. It is your responsibility to find an appropriate mapping betwen the ad - * network's events and the callbacks defined on `MPInterstitialCustomEventDelegate`. - */ - -@protocol MPInterstitialCustomEventDelegate - -/** - * The user's current location. - * - * @return This method provides the location that was passed into the parent `MPInterstitialAdController`. The MoPub - * SDK does **not** automatically request the user's location. It is your responsibility to pass the location - * into `MPInterstitialAdController`. - * - * You may use this to inform third-party ad networks of the user's location. - */ -- (CLLocation *)location; - -/** @name Interstitial Ad Event Callbacks - Fetching Ads */ - -/** - * Call this method immediately after an ad loads succesfully. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @param ad (*optional*) An object that represents the ad that was retrieved. The MoPub SDK does not - * do anything with this optional parameter. - * - * @warning **Important**: Your custom event subclass **must** call this method when it successfully loads an ad. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - */ -- (void)interstitialCustomEvent:(MPInterstitialCustomEvent *)customEvent - didLoadAd:(id)ad; - -/** - * Call this method immediately after an ad fails to load. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @param error (*optional*) You may pass an error describing the failure. - * - * @warning **Important**: Your custom event subclass **must** call this method when it fails to load an ad. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - */ -- (void)interstitialCustomEvent:(MPInterstitialCustomEvent *)customEvent - didFailToLoadAdWithError:(NSError *)error; - -/** - * Call this method if a previously loaded interstitial should no longer be eligible for presentation. - * - * Some third-party networks will mark interstitials as expired (indicating they should not be - * presented) *after* they have loaded. You may use this method to inform the MoPub SDK that a - * previously loaded interstitial has expired and that a new interstitial should be obtained. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - */ -- (void)interstitialCustomEventDidExpire:(MPInterstitialCustomEvent *)customEvent; - -/** @name Interstitial Ad Event Callbacks - Presenting and Dismissing Ads */ - -/** - * Call this method when an ad is about to appear. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: Your custom event subclass **must** call this method when it is about to present the interstitial. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - * - */ -- (void)interstitialCustomEventWillAppear:(MPInterstitialCustomEvent *)customEvent; - -/** - * Call this method when an ad has finished appearing. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: Your custom event subclass **must** call this method when it is finished presenting the interstitial. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - * - * **Note**: if it is not possible to know when the interstitial *finished* appearing, you should call - * this immediately after calling `-interstitialCustomEventWillAppear:`. - */ -- (void)interstitialCustomEventDidAppear:(MPInterstitialCustomEvent *)customEvent; - -/** - * Call this method when an ad is about to disappear. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: Your custom event subclass **must** call this method when it is about to dismiss the interstitial. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - * - */ -- (void)interstitialCustomEventWillDisappear:(MPInterstitialCustomEvent *)customEvent; - -/** - * Call this method when an ad has finished disappearing. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: Your custom event subclass **must** call this method when it is finished with dismissing the interstitial. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - * - * **Note**: if it is not possible to know when the interstitial *finished* dismissing, you should call - * this immediately after calling `-interstitialCustomEventDidDisappear:`. - */ -- (void)interstitialCustomEventDidDisappear:(MPInterstitialCustomEvent *)customEvent; - -/** @name Interstitial Ad Event Callbacks - User Interaction */ - -/** - * Call this method when the user taps on the interstitial ad. - * - * This method is optional. When automatic click and impression tracking is enabled (the default) - * this method will track a click (the click is guaranteed to only be tracked once per ad). - * - * **Note**: some third-party networks provide a "will leave application" callback instead of/in - * addition to a "user did click" callback. You should call this method in response to either of - * those callbacks (since leaving the application is generally an indicator of a user tap). - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - */ -- (void)interstitialCustomEventDidReceiveTapEvent:(MPInterstitialCustomEvent *)customEvent; - -/** - * Call this method when the interstitial ad will cause the user to leave the application. - * - * For example, the user may have tapped on a link to visit the App Store or Safari. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - */ -- (void)interstitialCustomEventWillLeaveApplication:(MPInterstitialCustomEvent *)customEvent; - -/** @name Impression and Click Tracking */ - -/** - * Call this method to track an impression. - * - * @warning **Important**: You should **only** call this method if you have [opted out of automatic click and impression tracking]([MPInterstitialCustomEvent enableAutomaticImpressionAndClickTracking]). - * By default the MoPub SDK automatically tracks impressions. - * - * **Important**: In order to obtain accurate metrics, it is your responsibility to call `trackImpression` only **once** per ad. - */ -- (void)trackImpression; - -/** - * Call this method to track a click. - * - * @warning **Important**: You should **only** call this method if you have [opted out of automatic click and impression tracking]([MPInterstitialCustomEvent enableAutomaticImpressionAndClickTracking]). - * By default the MoPub SDK automatically tracks clicks. - * - * **Important**: In order to obtain accurate metrics, it is your responsibility to call `trackClick` only **once** per ad. - */ -- (void)trackClick; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPLogLevel.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPLogLevel.h deleted file mode 100644 index dc7d8a67d..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPLogLevel.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// MPLogLevel.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/** - * SDK logging level. - * @remark Lower values equate to more detailed logs. - */ -typedef enum { - MPLogLevelAll = 0, - MPLogLevelTrace = 10, - MPLogLevelDebug = 20, - MPLogLevelInfo = 30, - MPLogLevelWarn = 40, - MPLogLevelError = 50, - MPLogLevelFatal = 60, - MPLogLevelOff = 70 -} MPLogLevel; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPMediationSdkInitializable.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPMediationSdkInitializable.h deleted file mode 100644 index 0a1ff50b5..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPMediationSdkInitializable.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MPMediationSdkInitializable.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/** - Indicates that the implementer is initializable by the MoPub SDK when - @c initializeSdkWithConfiguration:complete: is called, or whenever the - mediated network needs to be initialized. - */ -@protocol MPMediationSdkInitializable - -/** - Called when the MoPub SDK requires the underlying mediation SDK to be initialized. - - @param parameters A dictionary containing any mediation SDK-specific information - needed for initialization, such as app IDs and placement IDs. - */ -- (void)initializeSdkWithParameters:(NSDictionary * _Nullable)parameters; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPMediationSettingsProtocol.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPMediationSettingsProtocol.h deleted file mode 100644 index 073e01432..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPMediationSettingsProtocol.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// MPMediationSettingsProtocol.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/** - * The MoPub SDK has a concept of mediation settings that allow you to define objects - * that allow the application to configure specific settings for your custom event's ad - * network. - * - * Your object can be a global mediation setting that contains settings you deem to be constant - * across all of your ad network's ads. Ideally this is where you will place settings necessary for - * your ad network's intialization as well. The global medation setting object should be ready for - * your custom event by the time you load the ad from your network. Inside your custom event, you can retrieve - * the global mediation settings by calling `[-globalMediationSettingsForClass:]([MoPub -globalMediationSettingsForClass:])` - * passing in the class type of your global based mediation settings object. - * - * You can also define instance based mediation settings. The application may or may not define - * a mediation settings object per ad unit ID in their application. This allows ads in different locations - * to behave differently. The instance based mediation settings object should be available to your custom event - * by the time you load the ad from your network. Inside your custom event, you can retrieve the instance based - * mediation settings by calling `[-instanceMediationSettingsForClass:]([MPRewardedVideoCustomEventDelegate -instanceMediationSettingsForClass:])` - * passing in the class type of your instance based mediation settings object. - * - * **Important**: Your custom event must not assume it will receive a global or any instance based mediation settings - * as the application may choose not to supply any. Your custom event must have a default implementation in the event - * the application doesn't wish to provide any specific settings. - */ -@protocol MPMediationSettingsProtocol - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPMoPubConfiguration.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPMoPubConfiguration.h deleted file mode 100644 index 86b040cf4..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPMoPubConfiguration.h +++ /dev/null @@ -1,62 +0,0 @@ -// -// MPMoPubConfiguration.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAdvancedBidder.h" -#import "MPMediationSdkInitializable.h" -#import "MPMediationSettingsProtocol.h" -#import "MPRewardedVideo.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MPMoPubConfiguration : NSObject -/** - Any valid ad unit ID used within the app used for app initialization. - @remark This is a required field. - */ -@property (nonatomic, strong, nonnull) NSString * adUnitIdForAppInitialization; - -/** - Optional list of advanced bidders to initialize. - */ -@property (nonatomic, strong, nullable) NSArray> * advancedBidders; - -/** - Optional global configurations for all ad networks your app supports. - */ -@property (nonatomic, strong, nullable) NSArray> * globalMediationSettings; - -/** - Optional list of mediated network SDKs to pre-initialize from the cache. If the mediated network - SDK has no cache entry, nothing will be done. If set to @c nil or empty array, no network - SDKs will be preinitialized. - - To initialize all existing cached networks use @c MoPub.sharedInstance.allCachedNetworks - */ -@property (nonatomic, strong, nullable) NSArray> * mediatedNetworks; - -/** - Initializes the @c MPMoPubConfiguration object with the required fields. - @param adUnitId Any valid ad unit ID used within the app used for app initialization. - @return A configuration instance. - */ -- (instancetype)initWithAdUnitIdForAppInitialization:(NSString *)adUnitId NS_DESIGNATED_INITIALIZER; - -/** - Usage of default initializer is disallowed. Use @c initWithAdUnitIdForAppInitialization: instead. - */ -- (instancetype)init NS_UNAVAILABLE; - -/** - Usage of @c new is disallowed. Use @c initWithAdUnitIdForAppInitialization: instead. - */ -+ (instancetype)new NS_UNAVAILABLE; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPMoPubConfiguration.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPMoPubConfiguration.m deleted file mode 100644 index 305477e7b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MPMoPubConfiguration.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// MPMoPubConfiguration.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMoPubConfiguration.h" - -@implementation MPMoPubConfiguration - -- (instancetype)initWithAdUnitIdForAppInitialization:(NSString * _Nonnull)adUnitId { - if (self = [super init]) { - _adUnitIdForAppInitialization = adUnitId; - _advancedBidders = nil; - _globalMediationSettings = nil; - _mediatedNetworks = nil; - } - - return self; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MoPub-Bridging-Header.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MoPub-Bridging-Header.h deleted file mode 100644 index 4ae6d6246..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MoPub-Bridging-Header.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// MoPub-Bridging-Header.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MoPub.h" - -#import "MPAdConversionTracker.h" -#import "MPAdView.h" -#import "MPBannerCustomEvent.h" -#import "MPBannerCustomEventDelegate.h" -#import "MPConstants.h" -#import "MPInterstitialAdController.h" -#import "MPInterstitialCustomEvent.h" -#import "MPInterstitialCustomEventDelegate.h" - -#if MP_HAS_NATIVE_PACKAGE - -#import "MPNativeAd.h" -#import "MPNativeAdAdapter.h" -#import "MPNativeAdConstants.h" -#import "MPNativeCustomEvent.h" -#import "MPNativeCustomEventDelegate.h" -#import "MPNativeAdDelegate.h" -#import "MPNativeAdError.h" -#import "MPNativeAdRendering.h" -#import "MPNativeAdRequest.h" -#import "MPNativeAdRequestTargeting.h" -#import "MPStaticNativeAdRendererSettings.h" -#import "MPNativeAdRendererConfiguration.h" -#import "MPNativeAdRendererSettings.h" -#import "MPNativeAdRenderer.h" -#import "MPStaticNativeAdRenderer.h" -#import "MOPUBNativeVideoAdRendererSettings.h" -#import "MOPUBNativeVideoAdRenderer.h" -#import "MPNativeAdRenderingImageLoader.h" -#import "MPClientAdPositioning.h" -#import "MPServerAdPositioning.h" -#import "MPCollectionViewAdPlacer.h" -#import "MPTableViewAdPlacer.h" - -#endif - - -#import "MPMediationSettingsProtocol.h" -#import "MPRewardedVideo.h" -#import "MPRewardedVideoReward.h" -#import "MPRewardedVideoCustomEvent.h" -#import "MPRewardedVideoError.h" diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MoPub.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MoPub.h deleted file mode 100644 index 29d3d484f..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MoPub.h +++ /dev/null @@ -1,354 +0,0 @@ -// -// MoPub.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPConstants.h" - -#import "MOPUBDisplayAgentType.h" -#import "MPAdConversionTracker.h" -#import "MPAdImpressionTimer.h" -#import "MPAdTargeting.h" -#import "MPAdvancedBidder.h" -#import "MPAdView.h" -#import "MPBannerCustomEvent.h" -#import "MPBannerCustomEventDelegate.h" -#import "MPBool.h" -#import "MPConsentChangedNotification.h" -#import "MPConsentError.h" -#import "MPConsentStatus.h" -#import "MPError.h" -#import "MPGlobal.h" -#import "MPIdentityProvider.h" -#import "MPInterstitialAdController.h" -#import "MPInterstitialCustomEvent.h" -#import "MPInterstitialCustomEventDelegate.h" -#import "MPLogging.h" -#import "MPLogLevel.h" -#import "MPLogProvider.h" -#import "MPMediationSdkInitializable.h" -#import "MPMediationSettingsProtocol.h" -#import "MPMoPubConfiguration.h" -#import "MPRealTimeTimer.h" -#import "MPRewardedVideo.h" -#import "MPRewardedVideoReward.h" -#import "MPRewardedVideoCustomEvent.h" -#import "MPRewardedVideoCustomEvent+Caching.h" -#import "MPRewardedVideoError.h" -#import "MPViewabilityAdapter.h" -#import "MPViewabilityOption.h" - -#if MP_HAS_NATIVE_PACKAGE -#import "MPNativeAd.h" -#import "MPNativeAdAdapter.h" -#import "MPNativeAdConstants.h" -#import "MPNativeCustomEvent.h" -#import "MPNativeCustomEventDelegate.h" -#import "MPNativeAdError.h" -#import "MPNativeAdRendering.h" -#import "MPNativeAdRequest.h" -#import "MPNativeAdRequestTargeting.h" -#import "MPNativeView.h" -#import "MPNativeAdUtils.h" -#import "MPCollectionViewAdPlacer.h" -#import "MPTableViewAdPlacer.h" -#import "MPClientAdPositioning.h" -#import "MPServerAdPositioning.h" -#import "MPNativeAdDelegate.h" -#import "MPStaticNativeAdRendererSettings.h" -#import "MPNativeAdRendererConfiguration.h" -#import "MPNativeAdRendererSettings.h" -#import "MPNativeAdRenderer.h" -#import "MPStaticNativeAdRenderer.h" -#import "MPNativeAdRendererImageHandler.h" -#import "MOPUBNativeVideoAdRendererSettings.h" -#import "MOPUBNativeVideoAdRenderer.h" -#import "MPNativeAdRenderingImageLoader.h" -#import "MPStreamAdPlacer.h" -#endif - -// Import these frameworks for module support. -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import - -#define MoPubKit [MoPub sharedInstance] - -NS_ASSUME_NONNULL_BEGIN - -@interface MoPub : NSObject - -/** - * Returns the MoPub singleton object. - * - * @return The MoPub singleton object. - */ -+ (MoPub * _Nonnull)sharedInstance; - -/** - * A Boolean value indicating whether the MoPub SDK should use Core Location APIs to automatically - * derive targeting information for location-based ads. - * - * When set to NO, the SDK will not attempt to determine device location. When set to YES, the - * SDK will periodically try to listen for location updates in order to request location-based ads. - * This only occurs if location services are enabled and the user has already authorized the use - * of location services for the application. The default value is YES. - * - * If a user is in General Data Protection Regulation (GDPR) region and - * MoPub doesn't obtain consent from the user for using his/her personal data, - * locationUpdatesEnabled will always be set to NO. - * - * @return A Boolean value indicating whether the SDK should listen for location updates. - */ -@property (nonatomic, assign) BOOL locationUpdatesEnabled; - -/** - * A Boolean value indicating whether the MoPub SDK should create a MoPub ID that can be used - * for frequency capping when Limit ad tracking is on & the IDFA we get is - * 00000000-0000-0000-0000-000000000000. - * - * When set to NO, the SDK will not create a MoPub ID in the above case. When set to YES, the - * SDK will generate a MoPub ID. The default value is YES. - * - */ -@property (nonatomic) BOOL frequencyCappingIdUsageEnabled; - -/** - * Forces the usage of WKWebView (if able). - */ -@property (nonatomic, assign) BOOL forceWKWebView; - -/** - * SDK log level. The default value is `MPLogLevelInfo`. - */ -@property (nonatomic, assign) MPLogLevel logLevel; - -/** - * A boolean value indicating whether advanced bidding is enabled. This boolean defaults to `YES`. - * To disable advanced bidding, set this value to `NO`. - */ -@property (nonatomic, assign) BOOL enableAdvancedBidding; - -/** - * Initializes the MoPub SDK asynchronously on a background thread. - * @remark This should be called from the app's `application:didFinishLaunchingWithOptions:` method. - * @param configuration Required SDK configuration options. - * @param completionBlock Optional completion block that will be called when initialization has completed. - */ -- (void)initializeSdkWithConfiguration:(MPMoPubConfiguration * _Nonnull)configuration - completion:(void(^_Nullable)(void))completionBlock; - -/** - * A boolean value indicating if the SDK has been initialized. This property's value is @c YES if - * @c initializeSdkWithConfiguration:completion: has been called and completed; the value is @c NO otherwise. - */ -@property (nonatomic, readonly) BOOL isSdkInitialized; - -/** - * Retrieves the global mediation settings for a given class type. - * - * @param aClass The type of mediation settings object you want to receive from the collection. - */ -- (id _Nullable)globalMediationSettingsForClass:(Class)aClass; - -- (NSString * _Nonnull)version; -- (NSString * _Nonnull)bundleIdentifier; - -/** - * Default is MOPUBDisplayAgentTypeInApp = 0. - * - * If displayType is set to MOPUBDisplayAgentTypeNativeSafari = 1, http/https clickthrough URLs are opened in native - * safari browser. - * If displayType is set to MOPUBDisplayAgentTypeSafariViewController = 2, http/https clickthrough URLs are opened in - * SafariViewController. - * - */ -- (void)setClickthroughDisplayAgentType:(MOPUBDisplayAgentType)displayAgentType; - -/** - * Disables viewability measurement via the specified vendor(s) for the rest of the app session. A given vendor cannot - * be re-enabled after being disabled. - * - * @param vendors The viewability vendor(s) to be disabled. This is a bitmask value; ORing vendors together is okay. - */ -- (void)disableViewability:(MPViewabilityOption)vendors; - -@end - -@interface MoPub (Mediation) -/** - * Retrieves all currently cached mediated networks. - * @return A list of all cached networks or @c nil. - */ -- (NSArray> * _Nullable)allCachedNetworks; - -/** - * Clears all currently cached mediated networks. - */ -- (void)clearCachedNetworks; - -@end - -@interface MoPub (Consent) - -/** - * Querying Consent State - */ - -/** - * Flag indicating that personally identifiable information can be collected. - */ -@property (nonatomic, readonly) BOOL canCollectPersonalInfo; - -/** - * Gives the current consent status of this user. - * Note: NSNotification with name @c kMPConsentChangedNotification can be listened for to be informed of changes - * in the @c currentConsentStatus value. Please see MPConsentChangedNotification.h for more information on this - * notification. - */ -@property (nonatomic, readonly) MPConsentStatus currentConsentStatus; - -/** - * Flag indicating that GDPR is applicable to the user. - */ -@property (nonatomic, readonly) MPBool isGDPRApplicable; - -/** - * When called, @c isGDPRApplicable will always be set to @c MPBoolYes, and GDPR will apply to this user - * regardless of any other conditions. - * Note: This property's value is persisted for the lifetime of the app and cannot be unset. - */ -- (void)forceGDPRApplicable; - -/** - * Consent Acquisition - */ - -/** - * `YES` if a consent dialog is presently loaded and ready to be shown; `NO` otherwise - */ -@property (nonatomic, readonly) BOOL isConsentDialogReady; - -/** - * Attempts to load a consent dialog. `completion` is called when either the consent dialog has finished loading - * or has failed to load. If there was an error, the `error` parameter will be non-nil. - */ -- (void)loadConsentDialogWithCompletion:(void (^ _Nullable)(NSError * _Nullable error))completion; - -/** - * If a consent dialog is currently loaded, this method will present it modally on top of @c viewController. If no - * consent dialog is loaded, this method will do nothing. @c didShow is called upon successful presentation of the - * consent dialog; otherwise it is not called. @c didDismiss is called after the dismissal of the consent dialog; - * otherwise (including if the dialog failed to present) it is not called. - */ -- (void)showConsentDialogFromViewController:(UIViewController *)viewController - didShow:(void (^ _Nullable)(void))didShow - didDismiss:(void (^ _Nullable)(void))didDismiss; - -/** - * If a consent dialog is currently loaded, this method will present it modally on top of @c viewController. If no - * consent dialog is loaded, this method will do nothing. @c completion is called upon successful presentation of the - * consent dialog; otherwise it is not called. - */ -- (void)showConsentDialogFromViewController:(UIViewController *)viewController completion:(void (^ _Nullable)(void))completion; - -/** - * Flag indicating that consent needs to be acquired (or reacquired) by the user, and that the consent dialog may need - * to be shown. (Note: This flag can be used for publishers that require use of MoPub's consent dialog, as well as - * publishers that specify their own consent interface) - */ -@property (nonatomic, readonly) BOOL shouldShowConsentDialog; - -/** - * Custom Consent Interface - * Note: publishers must have explicit permission from MoPub to use their own consent interface. - */ - -/** - URL to the MoPub privacy policy in the device's preferred language. If the device's - preferred language could not be determined, English will be used. - @returns The privacy policy URL for the desired language if successful; @c nil if - there is no current vendor list. - */ -- (NSURL * _Nullable)currentConsentPrivacyPolicyUrl; - -/** - URL to the MoPub privacy policy in the language of choice. - @param isoLanguageCode ISO 630-1 language code - @returns The privacy policy URL for the desired language if successful; @c nil if the - language code is invalid or if there is no current vendor list. - */ -- (NSURL * _Nullable)currentConsentPrivacyPolicyUrlWithISOLanguageCode:(NSString * _Nonnull)isoLanguageCode; - -/** - Current vendor list URL in the device's preferred language. If the device's - preferred language could not be determined, English will be used. - @returns The vendor list URL for the desired language if successful; @c nil if - there is no current vendor list. - */ -- (NSURL * _Nullable)currentConsentVendorListUrl; - -/** - Current vendor list URL in the language of choice. - @param isoLanguageCode ISO 630-1 language code - @returns The vendor list URL for the desired language if successful; @c nil if the - language code is invalid or if there is no current vendor list. - */ -- (NSURL * _Nullable)currentConsentVendorListUrlWithISOLanguageCode:(NSString * _Nonnull)isoLanguageCode; - -/** - * Grants consent on behalf of the current user. If you do not have permission from MoPub to use a custom consent - * interface, this method will always fail to grant consent. - */ -- (void)grantConsent; - -/** - * Revokes consent on behalf of the current user. - */ -- (void)revokeConsent; - -/** - * Current IAB format vendor list. - */ -@property (nonatomic, copy, readonly, nullable) NSString * currentConsentIabVendorListFormat; - -/** - * Current version of MoPub’s privacy policy. - */ -@property (nonatomic, copy, readonly, nullable) NSString * currentConsentPrivacyPolicyVersion; - -/** - * Current version of the vendor list. - */ -@property (nonatomic, copy, readonly, nullable) NSString * currentConsentVendorListVersion; - -/** - * IAB vendor list that has been consented to. - */ -@property (nonatomic, copy, readonly, nullable) NSString * previouslyConsentedIabVendorListFormat; - -/** - * MoPub privacy policy version that has been consented to. - */ -@property (nonatomic, copy, readonly, nullable) NSString * previouslyConsentedPrivacyPolicyVersion; - -/** - * Vendor list version that has been consented to. - */ -@property (nonatomic, copy, readonly, nullable) NSString * previouslyConsentedVendorListVersion; - -@end - -NS_ASSUME_NONNULL_END diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MoPub.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MoPub.m deleted file mode 100644 index 1ded71584..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/MoPub.m +++ /dev/null @@ -1,307 +0,0 @@ -// -// MoPub.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MoPub.h" -#import "MPAdvancedBiddingManager.h" -#import "MPConsentManager.h" -#import "MPConstants.h" -#import "MPCoreInstanceProvider.h" -#import "MPGeolocationProvider.h" -#import "MPLogging.h" -#import "MPMediationManager.h" -#import "MPRewardedVideo.h" -#import "MPRewardedVideoCustomEvent+Caching.h" -#import "MPIdentityProvider.h" -#import "MPWebView.h" -#import "MOPUBExperimentProvider.h" -#import "MPViewabilityTracker.h" -#import "MPAdConversionTracker.h" -#import "MPConsentManager.h" -#import "MPConsentChangedNotification.h" -#import "MPSessionTracker.h" - -@interface MoPub () - -@property (nonatomic, strong) NSArray *globalMediationSettings; - -@property (nonatomic, assign, readwrite) BOOL isSdkInitialized; - -@end - -@implementation MoPub - -+ (MoPub *)sharedInstance -{ - static MoPub *sharedInstance = nil; - static dispatch_once_t initOnceToken; - dispatch_once(&initOnceToken, ^{ - sharedInstance = [[MoPub alloc] init]; - }); - return sharedInstance; -} - -- (instancetype)init -{ - if (self = [super init]) { - // Processing personal data if a user is in GDPR region. - [self handlePersonalData]; - } - return self; -} - -- (void)setLocationUpdatesEnabled:(BOOL)locationUpdatesEnabled -{ - [[[MPCoreInstanceProvider sharedProvider] sharedMPGeolocationProvider] setLocationUpdatesEnabled:locationUpdatesEnabled]; -} - -- (BOOL)locationUpdatesEnabled -{ - return [[MPCoreInstanceProvider sharedProvider] sharedMPGeolocationProvider].locationUpdatesEnabled; -} - -- (void)setFrequencyCappingIdUsageEnabled:(BOOL)frequencyCappingIdUsageEnabled -{ - [MPIdentityProvider setFrequencyCappingIdUsageEnabled:frequencyCappingIdUsageEnabled]; -} - -- (void)setForceWKWebView:(BOOL)forceWKWebView -{ - [MPWebView forceWKWebView:forceWKWebView]; -} - -- (BOOL)forceWKWebView -{ - return [MPWebView isForceWKWebView]; -} - -- (void)setLogLevel:(MPLogLevel)level -{ - MPLogSetLevel(level); -} - -- (MPLogLevel)logLevel -{ - return MPLogGetLevel(); -} - -- (void)setEnableAdvancedBidding:(BOOL)enableAdvancedBidding -{ - [MPAdvancedBiddingManager sharedManager].advancedBiddingEnabled = enableAdvancedBidding; -} - -- (BOOL)enableAdvancedBidding -{ - return [MPAdvancedBiddingManager sharedManager].advancedBiddingEnabled; -} - -- (void)setClickthroughDisplayAgentType:(MOPUBDisplayAgentType)displayAgentType -{ - [MOPUBExperimentProvider setDisplayAgentType:displayAgentType]; -} - -- (BOOL)frequencyCappingIdUsageEnabled -{ - return [MPIdentityProvider frequencyCappingIdUsageEnabled]; -} - -// Keep -version and -bundleIdentifier methods around for Fabric backwards compatibility. -- (NSString *)version -{ - return MP_SDK_VERSION; -} - -- (NSString *)bundleIdentifier -{ - return MP_BUNDLE_IDENTIFIER; -} - -- (void)initializeSdkWithConfiguration:(MPMoPubConfiguration *)configuration - completion:(void(^_Nullable)(void))completionBlock -{ - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - [self setSdkWithConfiguration:configuration completion:completionBlock]; - }); -} - -- (void)setSdkWithConfiguration:(MPMoPubConfiguration *)configuration - completion:(void(^_Nullable)(void))completionBlock -{ - @synchronized (self) { - // Store the global mediation settings - self.globalMediationSettings = configuration.globalMediationSettings; - - // Create a dispatch group to synchronize mutliple asynchronous tasks. - dispatch_group_t initializationGroup = dispatch_group_create(); - - // Configure the consent manager and synchronize regardless of the result - // of `checkForDoNotTrackAndTransition`. - dispatch_group_enter(initializationGroup); - MPConsentManager.sharedManager.adUnitIdUsedForConsent = configuration.adUnitIdForAppInitialization; - [MPConsentManager.sharedManager checkForDoNotTrackAndTransition]; - [MPConsentManager.sharedManager synchronizeConsentWithCompletion:^(NSError * _Nullable error) { - dispatch_group_leave(initializationGroup); - }]; - - // Configure session tracker - [MPSessionTracker initializeNotificationObservers]; - - // Configure mediated network SDKs - dispatch_group_enter(initializationGroup); - NSArray> * mediatedNetworks = configuration.mediatedNetworks; - [MPMediationManager.sharedManager initializeMediatedNetworks:mediatedNetworks completion:^(NSError * _Nullable error) { - dispatch_group_leave(initializationGroup); - }]; - - // Configure advanced bidders - dispatch_group_enter(initializationGroup); - [MPAdvancedBiddingManager.sharedManager initializeBidders:configuration.advancedBidders complete:^{ - dispatch_group_leave(initializationGroup); - }]; - - // Once all of the asynchronous tasks have completed, notify the - // completion handler. - dispatch_group_notify(initializationGroup, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ - self.isSdkInitialized = YES; - if (completionBlock) { - completionBlock(); - } - }); - } -} - -- (void)handlePersonalData -{ - [[MPConsentManager sharedManager] checkForIfaChange]; -} - -- (id)globalMediationSettingsForClass:(Class)aClass -{ - NSArray *mediationSettingsCollection = self.globalMediationSettings; - - for (id settings in mediationSettingsCollection) { - if ([settings isKindOfClass:aClass]) { - return settings; - } - } - - return nil; -} - -- (void)disableViewability:(MPViewabilityOption)vendors -{ - [MPViewabilityTracker disableViewability:vendors]; -} - -@end - -@implementation MoPub (Mediation) - -- (NSArray> * _Nullable)allCachedNetworks { - return [MPMediationManager.sharedManager allCachedNetworks]; -} - -- (void)clearCachedNetworks { - return [MPMediationManager.sharedManager clearCache]; -} - -@end - -@implementation MoPub (Consent) - -- (BOOL)shouldShowConsentDialog { - return [MPConsentManager sharedManager].isConsentNeeded; -} - -- (BOOL)canCollectPersonalInfo { - return [MPConsentManager sharedManager].canCollectPersonalInfo; -} - -- (MPBool)isGDPRApplicable { - return [MPConsentManager sharedManager].isGDPRApplicable; -} - -- (void)forceGDPRApplicable { - [MPConsentManager sharedManager].forceIsGDPRApplicable = YES; -} - -- (MPConsentStatus)currentConsentStatus { - return [MPConsentManager sharedManager].currentStatus; -} - -- (NSString *)currentConsentIabVendorListFormat { - return [MPConsentManager sharedManager].iabVendorList; -} - -- (NSString *)currentConsentPrivacyPolicyVersion { - return [MPConsentManager sharedManager].privacyPolicyVersion; -} - -- (NSString *)currentConsentVendorListVersion { - return [MPConsentManager sharedManager].vendorListVersion; -} - -- (NSString *)previouslyConsentedIabVendorListFormat { - return [MPConsentManager sharedManager].consentedIabVendorList; -} - -- (NSString *)previouslyConsentedPrivacyPolicyVersion { - return [MPConsentManager sharedManager].consentedPrivacyPolicyVersion; -} - -- (NSString *)previouslyConsentedVendorListVersion { - return [MPConsentManager sharedManager].consentedVendorListVersion; -} - -- (void)loadConsentDialogWithCompletion:(void (^)(NSError * _Nullable))completion { - [[MPConsentManager sharedManager] loadConsentDialogWithCompletion:completion]; -} - -- (void)showConsentDialogFromViewController:(UIViewController *)viewController - didShow:(void (^ _Nullable)(void))didShow - didDismiss:(void (^ _Nullable)(void))didDismiss { - [[MPConsentManager sharedManager] showConsentDialogFromViewController:viewController - didShow:didShow - didDismiss:didDismiss]; -} - -- (void)showConsentDialogFromViewController:(UIViewController *)viewController completion:(void (^ _Nullable)(void))completion { - [self showConsentDialogFromViewController:viewController - didShow:completion - didDismiss:nil]; -} - -- (BOOL)isConsentDialogReady { - return [MPConsentManager sharedManager].isConsentDialogLoaded; -} - -- (void)revokeConsent { - [[MPConsentManager sharedManager] revokeConsent]; -} - -- (void)grantConsent { - [[MPConsentManager sharedManager] grantConsent]; -} - -- (NSURL *)currentConsentPrivacyPolicyUrl { - return [[MPConsentManager sharedManager] privacyPolicyUrl]; -} - -- (NSURL *)currentConsentPrivacyPolicyUrlWithISOLanguageCode:(NSString *)isoLanguageCode { - return [[MPConsentManager sharedManager] privacyPolicyUrlWithISOLanguageCode:isoLanguageCode]; -} - -- (NSURL *)currentConsentVendorListUrl { - return [[MPConsentManager sharedManager] vendorListUrl]; -} - -- (NSURL *)currentConsentVendorListUrlWithISOLanguageCode:(NSString *)isoLanguageCode { - return [[MPConsentManager sharedManager] vendorListUrlWithISOLanguageCode:isoLanguageCode]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/Categories/MPNativeAdRequest+MPNativeAdSource.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/Categories/MPNativeAdRequest+MPNativeAdSource.h deleted file mode 100644 index 91651a6fb..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/Categories/MPNativeAdRequest+MPNativeAdSource.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// MPNativeAdRequest+MPNativeAdSource.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdRequest.h" - -@interface MPNativeAdRequest (MPNativeAdSource) - -- (void)startForAdSequence:(NSInteger)adSequence withCompletionHandler:(MPNativeAdRequestHandler)handler; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.h deleted file mode 100644 index 045aed791..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.h +++ /dev/null @@ -1,125 +0,0 @@ -// -// MPAdPlacerInvocation.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPStreamAdPlacer; - -/** - * A convenience class that handles a lot of the common logic when implementing a wrapper for the delegate / data source of a UI collection object - * (e.g. UITableView or UICollectionView). - * - * When implementing wrapper object methods, you will often have to take the following into consideration: - * - * - Handling cells that contain ads differently from regular content cells. For example, you may want to disable moving an ad cell while allowing - * regular content cells to move. - * - * - Calling through to the original object when handling regular content cells. The original delegate / data source only knows about regular content - * cells. Thus, you need to translate the given index path, that indexes ads and content, to an original index path that only indexes content. - * You can use the original translated index path to have the original delegate / data source process logic on the correct cell. - * - * - Providing the default behavior when the original object doesn't respond to the specific method and an ad doesn't occupy the given index path. - * - * This class takes care of all the work in two steps. Set up and invoke an NSInvocation object by calling invokeForTarget:. If you wish to return - * a value based on the invocation, you may pass the returned invocation to one of the result methods (e.g. boolResultForInvocation:defaultValue:) and - * provide a defaultValue that will be returned if an ad occupies the cell or the original delegate / data source doesn't respond to the selector. - * If an ad is not at the given index path and the original delegate / data source responds to the selector, invokeForTarget: will translate the index - * path for you and pass it to the original delegate / data source. The result method will then return the result from the invocation. - */ - -@interface MPAdPlacerInvocation : NSObject - -/** - * Creates an NSInvocation object with the given parameters and invokes the object. - * This will return nil if there is an ad at the index path or the target doesn't respond to the selector. - * - * @param target The object's original data source or delegate. - * @param selector The method we want to execute on the target if an ad doesn't exist. - * @param arg1 The first argument to the selector. - * @param indexPath The second argument to the selector. - * @param streamAdPlacer The MPStreamAdPlacer backing your UI collection that can translate index paths to their originals. - * - * @return The invocation with all the parameters passed into the method. - */ -+ (NSInvocation *)invokeForTarget:(id)target - with2ArgSelector:(SEL)selector - firstArg:(id)arg1 - secondArg:(NSIndexPath *)indexPath - streamAdPlacer:(MPStreamAdPlacer *)streamAdPlacer; - -/** - * Creates an NSInvocation object with the given parameters and invokes the object. - * This will return nil if there is an ad at the index path or the target doesn't respond to the selector. - * - * @param target The object's original data source or delegate. - * @param selector The method we want to execute on the target if an ad doesn't exist. - * @param arg1 The first argument to the selector. - * @param arg2 The second argument to the selector. - * @param indexPath The third argument to the selector. - * @param streamAdPlacer The MPStreamAdPlacer backing your UI collection that can translate index paths to their originals. - * - * @return The invocation with all the parameters passed into the method. - */ -+ (NSInvocation *)invokeForTarget:(id)target - with3ArgSelector:(SEL)selector - firstArg:(id)arg1 - secondArg:(id)arg2 - thirdArg:(NSIndexPath *)indexPath - streamAdPlacer:(MPStreamAdPlacer *)streamAdPlacer; - -/** - * Creates an NSInvocation object with the given parameters and invokes the object. - * This will return nil if there is an ad at the index path or the target doesn't respond to the selector. - * - * @param target The object's original data source or delegate. - * @param selector The method we want to execute on the target if an ad doesn't exist. - * @param arg1 The first argument to the selector. - * @param arg2 The second argument to the selector. - * @param indexPath The third argument to the selector. - * @param streamAdPlacer The MPStreamAdPlacer backing your UI collection that can translate index paths to their originals. - * - * @return The invocation with all the parameters passed into the method. - */ -+ (NSInvocation *)invokeForTarget:(id)target - with3ArgIntSelector:(SEL)selector - firstArg:(id)arg1 - secondArg:(NSInteger)arg2 - thirdArg:(NSIndexPath *)indexPath - streamAdPlacer:(MPStreamAdPlacer *)streamAdPlacer; - -/** - * Returns the result for an invocation. Will return defaultReturnValue if invocation is nil. - * - * @param invocation The invocation that was returned from invokeForTarget:. - * @param defaultReturnValue What to return when the invocation is nil. - * - * @return defaultReturnValue or the invocation's return value. - */ -+ (BOOL)boolResultForInvocation:(NSInvocation *)invocation defaultValue:(BOOL)defaultReturnValue; - -/** - * Returns the result for an invocation. Will return defaultReturnValue if invocation is nil. - * - * @param invocation The invocation that was returned from invokeForTarget:. - * @param defaultReturnValue What to return when the invocation is nil. - * - * @return defaultReturnValue or the invocation's return value. - */ -+ (NSInteger)integerResultForInvocation:(NSInvocation *)invocation defaultValue:(NSInteger)defaultReturnValue; - -/** - * Returns the result for an invocation. Will return defaultReturnValue if invocation is nil. - * - * @param invocation The invocation that was returned from invokeForTarget:. - * @param defaultReturnValue What to return when the invocation is nil. - * - * @return defaultReturnValue or the invocation's return value. - */ -+ (id)resultForInvocation:(NSInvocation *)invocation defaultValue:(id)defaultReturnValue; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.m deleted file mode 100644 index 5ffa5aa7c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPAdPlacerInvocation.m +++ /dev/null @@ -1,130 +0,0 @@ -// -// MPAdPlacerInvocation.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdPlacerInvocation.h" -#import "MPStreamAdPlacer.h" - -@implementation MPAdPlacerInvocation - -+ (NSInvocation *)invocationForTarget:(id)target - selector:(SEL)selector - indexPath:(NSIndexPath *)indexPath - streamAdPlacer:(MPStreamAdPlacer *)streamAdPlacer -{ - if (![target respondsToSelector:selector]) { - return nil; - } - - // No invocations for ad rows. - if ([streamAdPlacer isAdAtIndexPath:indexPath]) { - return nil; - } - - // Create the invocation. - NSMethodSignature *signature = [target methodSignatureForSelector:selector]; - NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; - [invocation setTarget:target]; - [invocation setSelector:selector]; - return invocation; -} - -+ (NSInvocation *)invokeForTarget:(id)target - with2ArgSelector:(SEL)selector - firstArg:(id)arg1 - secondArg:(NSIndexPath *)indexPath - streamAdPlacer:(MPStreamAdPlacer *)streamAdPlacer -{ - NSInvocation *invocation = [MPAdPlacerInvocation invocationForTarget:target - selector:selector - indexPath:indexPath - streamAdPlacer:streamAdPlacer]; - if (invocation) { - NSIndexPath *origPath = [streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - [invocation setArgument:&(arg1) atIndex:2]; - [invocation setArgument:&(origPath) atIndex:3]; - [invocation invoke]; - } - return invocation; -} - -+ (NSInvocation *)invokeForTarget:(id)target - with3ArgSelector:(SEL)selector - firstArg:(id)arg1 - secondArg:(id)arg2 - thirdArg:(NSIndexPath *)indexPath - streamAdPlacer:(MPStreamAdPlacer *)streamAdPlacer -{ - NSInvocation *invocation = [MPAdPlacerInvocation invocationForTarget:target - selector:selector - indexPath:indexPath - streamAdPlacer:streamAdPlacer]; - if (invocation) { - NSIndexPath *origPath = [streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - [invocation setArgument:&(arg1) atIndex:2]; - [invocation setArgument:&(arg2) atIndex:3]; - [invocation setArgument:&(origPath) atIndex:4]; - [invocation invoke]; - } - return invocation; -} - -+ (NSInvocation *)invokeForTarget:(id)target - with3ArgIntSelector:(SEL)selector - firstArg:(id)arg1 - secondArg:(NSInteger)arg2 - thirdArg:(NSIndexPath *)indexPath - streamAdPlacer:(MPStreamAdPlacer *)streamAdPlacer -{ - NSInvocation *invocation = [MPAdPlacerInvocation invocationForTarget:target - selector:selector - indexPath:indexPath - streamAdPlacer:streamAdPlacer]; - if (invocation) { - NSIndexPath *origPath = [streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - [invocation setArgument:&(arg1) atIndex:2]; - [invocation setArgument:&(arg2) atIndex:3]; - [invocation setArgument:&(origPath) atIndex:4]; - [invocation invoke]; - } - return invocation; -} - -+ (BOOL)boolResultForInvocation:(NSInvocation *)invocation defaultValue:(BOOL)defaultReturnValue -{ - if (!invocation) { - return defaultReturnValue; - } - - BOOL returnValue; - [invocation getReturnValue:&returnValue]; - return returnValue; -} - -+ (id)resultForInvocation:(NSInvocation *)invocation defaultValue:(id)defaultReturnValue -{ - if (!invocation) { - return defaultReturnValue; - } - - __unsafe_unretained id returnValue; - [invocation getReturnValue:&returnValue]; - return returnValue; -} - -+ (NSInteger)integerResultForInvocation:(NSInvocation *)invocation defaultValue:(NSInteger)defaultReturnValue -{ - if (!invocation) { - return defaultReturnValue; - } - - NSInteger returnValue; - [invocation getReturnValue:&returnValue]; - return returnValue; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.h deleted file mode 100644 index 46b48ce29..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPCollectionViewAdPlacerCell.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPCollectionViewAdPlacerCell : UICollectionViewCell - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.m deleted file mode 100644 index 21386f17a..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPCollectionViewAdPlacerCell.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPCollectionViewAdPlacerCell.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPCollectionViewAdPlacerCell.h" - -@implementation MPCollectionViewAdPlacerCell - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPDiskLRUCache.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPDiskLRUCache.h deleted file mode 100755 index a43800c09..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPDiskLRUCache.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPDiskLRUCache.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPDiskLRUCache : NSObject - -+ (MPDiskLRUCache *)sharedDiskCache; - -/* - * Do NOT call any of the following methods on the main thread, potentially lengthy wait for disk IO - */ -- (BOOL)cachedDataExistsForKey:(NSString *)key; -- (NSData *)retrieveDataForKey:(NSString *)key; -- (void)storeData:(NSData *)data forKey:(NSString *)key; -- (void)removeAllCachedFiles; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPDiskLRUCache.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPDiskLRUCache.m deleted file mode 100755 index a8bbd6bbc..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPDiskLRUCache.m +++ /dev/null @@ -1,268 +0,0 @@ -// -// MPDiskLRUCache.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPDiskLRUCache.h" -#import "MPGlobal.h" -#import "MPLogging.h" - -#import - -// cached files that have not been access since kCacheFileMaxAge ago will be evicted -#define kCacheFileMaxAge (7 * 24 * 60 * 60) // 1 week - -// once the cache hits this size AND we've added at least kCacheBytesStoredBeforeSizeCheck bytes, -// cached files will be evicted (LRU) until the total size drops below this limit -#define kCacheSoftMaxSize (100 * 1024 * 1024) // 100 MB - -#define kCacheBytesStoredBeforeSizeCheck (kCacheSoftMaxSize / 10) // 10% of kCacheSoftMaxSize - -@interface MPDiskLRUCacheFile : NSObject - -@property (nonatomic, copy) NSString *filePath; -@property (nonatomic, assign) NSTimeInterval lastModTimestamp; -@property (nonatomic, assign) uint64_t fileSize; - -@end - -@implementation MPDiskLRUCacheFile - - -@end - -@interface MPDiskLRUCache () - -#if !OS_OBJECT_USE_OBJC -@property (nonatomic, assign) dispatch_queue_t diskIOQueue; -#else -@property (nonatomic, strong) dispatch_queue_t diskIOQueue; -#endif -@property (nonatomic, copy) NSString *diskCachePath; -@property (atomic, assign) uint64_t numBytesStoredForSizeCheck; - -@end - -@implementation MPDiskLRUCache - -+ (MPDiskLRUCache *)sharedDiskCache -{ - static dispatch_once_t once; - static MPDiskLRUCache *sharedDiskCache; - dispatch_once(&once, ^{ - sharedDiskCache = [self new]; - }); - return sharedDiskCache; -} - -- (id)init -{ - self = [super init]; - if (self != nil) { - _diskIOQueue = dispatch_queue_create("com.mopub.diskCacheIOQueue", DISPATCH_QUEUE_SERIAL); - - NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); - if (paths.count > 0) { - _diskCachePath = [[[paths objectAtIndex:0] stringByAppendingPathComponent:@"com.mopub.diskCache"] copy]; - - NSFileManager *fileManager = [NSFileManager defaultManager]; - if (![fileManager fileExistsAtPath:_diskCachePath]) { - [fileManager createDirectoryAtPath:_diskCachePath withIntermediateDirectories:YES attributes:nil error:nil]; - } - } - - // check cache size on startup - [self ensureCacheSizeLimit]; - } - - return self; -} - -- (void)dealloc -{ -#if !OS_OBJECT_USE_OBJC - dispatch_release(_diskIOQueue); -#endif -} - -#pragma mark Public - -- (void)removeAllCachedFiles -{ - dispatch_sync(self.diskIOQueue, ^{ - NSFileManager *fileManager = [NSFileManager defaultManager]; - - NSArray *allFiles = [self cacheFilesSortedByModDate]; - for (MPDiskLRUCacheFile *file in allFiles) { - [fileManager removeItemAtPath:file.filePath error:nil]; - } - }); -} - -- (BOOL)cachedDataExistsForKey:(NSString *)key -{ - __block BOOL result = NO; - - dispatch_sync(self.diskIOQueue, ^{ - NSFileManager *fileManager = [NSFileManager defaultManager]; - result = [fileManager fileExistsAtPath:[self cacheFilePathForKey:key]]; - }); - - return result; -} - -- (NSData *)retrieveDataForKey:(NSString *)key -{ - __block NSData *data = nil; - - dispatch_sync(self.diskIOQueue, ^{ - NSString *cachedFilePath = [self cacheFilePathForKey:key]; - - NSFileManager *fileManager = [NSFileManager defaultManager]; - BOOL isDirectory = NO; - if ([fileManager fileExistsAtPath:cachedFilePath isDirectory:&isDirectory]) { - data = [NSData dataWithContentsOfFile:cachedFilePath]; - - // "touch" file to mark access since NSFileManager doesn't return a last accessed date - [fileManager setAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] ofItemAtPath:cachedFilePath error:nil]; - } - }); - - return data; -} - -- (void)storeData:(NSData *)data forKey:(NSString *)key -{ - dispatch_sync(self.diskIOQueue, ^{ - NSString *cacheFilePath = [self cacheFilePathForKey:key]; - NSFileManager *fileManager = [NSFileManager defaultManager]; - - if (![fileManager fileExistsAtPath:cacheFilePath]) { - [fileManager createFileAtPath:cacheFilePath contents:data attributes:nil]; - } else { - // overwrite existing file - [data writeToFile:cacheFilePath atomically:YES]; - } - }); - - self.numBytesStoredForSizeCheck += data.length; - - if (self.numBytesStoredForSizeCheck >= kCacheBytesStoredBeforeSizeCheck) { - [self ensureCacheSizeLimit]; - self.numBytesStoredForSizeCheck = 0; - } -} - -#pragma mark Private - -- (void)ensureCacheSizeLimit -{ - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ - MPLogDebug(@"Checking cache size..."); - - NSFileManager *fileManager = [NSFileManager defaultManager]; - - NSMutableArray *cacheFilesSortedByModDate = [self cacheFilesSortedByModDate]; - - dispatch_async(self.diskIOQueue, ^{ - @autoreleasepool { - // verify age - NSArray *expiredFiles = [self expiredCachedFilesInArray:cacheFilesSortedByModDate]; - for (MPDiskLRUCacheFile *file in expiredFiles) { - MPLogDebug(@"Trying to remove %@ from cache due to expiration", file.filePath); - - [fileManager removeItemAtPath:file.filePath error:nil]; - [cacheFilesSortedByModDate removeObject:file]; - } - - // verify size - while ([self sizeOfCacheFilesInArray:cacheFilesSortedByModDate] >= kCacheSoftMaxSize && cacheFilesSortedByModDate.count > 0) { - NSString *oldestFilePath = ((MPDiskLRUCacheFile *)[cacheFilesSortedByModDate objectAtIndex:0]).filePath; - - MPLogDebug(@"Trying to remove %@ from cache due to size", oldestFilePath); - - [fileManager removeItemAtPath:oldestFilePath error:nil]; - [cacheFilesSortedByModDate removeObjectAtIndex:0]; - } - } - }); - }); -} - -- (NSArray *)expiredCachedFilesInArray:(NSArray *)cachedFiles -{ - NSMutableArray *result = [NSMutableArray array]; - - NSTimeInterval now = [[NSDate date] timeIntervalSinceReferenceDate]; - - for (MPDiskLRUCacheFile *file in cachedFiles) { - if (now - file.lastModTimestamp >= kCacheFileMaxAge) { - [result addObject:file]; - } - } - - return result; -} - -- (NSMutableArray *)cacheFilesSortedByModDate -{ - NSFileManager *fileManager = [NSFileManager defaultManager]; - - NSArray *cachedFiles = [fileManager contentsOfDirectoryAtPath:self.diskCachePath error:nil]; - NSArray *sortedFiles = [cachedFiles sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { - NSString *fileName1 = [self.diskCachePath stringByAppendingPathComponent:(NSString *)obj1]; - NSString *fileName2 = [self.diskCachePath stringByAppendingPathComponent:(NSString *)obj2]; - - NSDictionary *fileAttrs1 = [fileManager attributesOfItemAtPath:fileName1 error:nil]; - NSDictionary *fileAttrs2 = [fileManager attributesOfItemAtPath:fileName2 error:nil]; - - NSDate *lastModDate1 = [fileAttrs1 fileModificationDate]; - NSDate *lastModDate2 = [fileAttrs2 fileModificationDate]; - - return [lastModDate1 compare:lastModDate2]; - }]; - - NSMutableArray *result = [NSMutableArray array]; - - for (NSString *fileName in sortedFiles) { - if ([fileName hasPrefix:@"."]) { - continue; - } - - MPDiskLRUCacheFile *cacheFile = [[MPDiskLRUCacheFile alloc] init]; - cacheFile.filePath = [self.diskCachePath stringByAppendingPathComponent:fileName]; - - NSDictionary *fileAttrs = [fileManager attributesOfItemAtPath:cacheFile.filePath error:nil]; - cacheFile.fileSize = [fileAttrs fileSize]; - cacheFile.lastModTimestamp = [[fileAttrs fileModificationDate] timeIntervalSinceReferenceDate]; - - [result addObject:cacheFile]; - } - - return result; -} - -- (uint64_t)sizeOfCacheFilesInArray:(NSArray *)files -{ - uint64_t currentSize = 0; - - for (MPDiskLRUCacheFile *file in files) { - currentSize += file.fileSize; - } - - MPLogDebug(@"Current cache size %qu bytes", currentSize); - - return currentSize; -} - -- (NSString *)cacheFilePathForKey:(NSString *)key -{ - NSString *hashedKey = MPSHA1Digest(key); - NSString *cachedFilePath = [self.diskCachePath stringByAppendingPathComponent:hashedKey]; - return cachedFilePath; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPImageDownloadQueue.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPImageDownloadQueue.h deleted file mode 100755 index 75af35f18..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPImageDownloadQueue.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// MPImageDownloadQueue.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -typedef void (^MPImageDownloadQueueCompletionBlock)(NSArray *errors); - -@interface MPImageDownloadQueue : NSObject - -// pass useCachedImage:NO to force download of images. default is YES, cached images will not be re-downloaded -- (void)addDownloadImageURLs:(NSArray *)imageURLs completionBlock:(MPImageDownloadQueueCompletionBlock)completionBlock; -- (void)addDownloadImageURLs:(NSArray *)imageURLs completionBlock:(MPImageDownloadQueueCompletionBlock)completionBlock useCachedImage:(BOOL)useCachedImage; - -- (void)cancelAllDownloads; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPImageDownloadQueue.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPImageDownloadQueue.m deleted file mode 100755 index 48f35a5de..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPImageDownloadQueue.m +++ /dev/null @@ -1,117 +0,0 @@ -// -// MPImageDownloadQueue.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPImageDownloadQueue.h" -#import "MPNativeAdError.h" -#import "MPLogging.h" -#import "MPNativeCache.h" -#import "MPHTTPNetworkSession.h" -#import "MPURLRequest.h" - -@interface MPImageDownloadQueue () - -@property (atomic, strong) NSOperationQueue *imageDownloadQueue; -@property (atomic, assign) BOOL isCanceled; - -@end - -@implementation MPImageDownloadQueue - -- (id)init -{ - self = [super init]; - - if (self != nil) { - _imageDownloadQueue = [[NSOperationQueue alloc] init]; - [_imageDownloadQueue setMaxConcurrentOperationCount:1]; // serial queue - } - - return self; -} - -- (void)dealloc -{ - [_imageDownloadQueue cancelAllOperations]; -} - -- (void)addDownloadImageURLs:(NSArray *)imageURLs completionBlock:(MPImageDownloadQueueCompletionBlock)completionBlock -{ - [self addDownloadImageURLs:imageURLs completionBlock:completionBlock useCachedImage:YES]; -} - -- (void)addDownloadImageURLs:(NSArray *)imageURLs completionBlock:(MPImageDownloadQueueCompletionBlock)completionBlock useCachedImage:(BOOL)useCachedImage -{ - __block NSMutableArray *errors = nil; - - for (NSURL *imageURL in imageURLs) { - [self.imageDownloadQueue addOperationWithBlock:^{ - @autoreleasepool { - if (![[MPNativeCache sharedCache] cachedDataExistsForKey:imageURL.absoluteString] || !useCachedImage) { - MPLogDebug(@"Downloading %@", imageURL); - - __block NSError *error = nil; - __block NSData *data = nil; - - // Synchronous attempt to fetch the image. - dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); - [MPHTTPNetworkSession startTaskWithHttpRequest:[MPURLRequest requestWithURL:imageURL] responseHandler:^(NSData * _Nonnull responseData, NSHTTPURLResponse * _Nonnull response) { - data = responseData; - dispatch_semaphore_signal(semaphore); - } errorHandler:^(NSError * _Nonnull networkError) { - error = networkError; - dispatch_semaphore_signal(semaphore); - }]; - dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); - - BOOL validImageDownloaded = data != nil; - if (validImageDownloaded) { - UIImage *downloadedImage = [UIImage imageWithData:data]; - if (downloadedImage != nil) { - [[MPNativeCache sharedCache] storeData:data forKey:imageURL.absoluteString]; - } else { - if (downloadedImage == nil) { - MPLogDebug(@"Error: invalid image data downloaded"); - } - - validImageDownloaded = NO; - } - } - - if (!validImageDownloaded) { - if (error == nil) { - error = MPNativeAdNSErrorForImageDownloadFailure(); - } - - if (errors == nil) { - errors = [NSMutableArray array]; - } - - [errors addObject:error]; - } - } - } - }]; - } - - // after all images have been downloaded, invoke callback on main thread - [self.imageDownloadQueue addOperationWithBlock:^{ - dispatch_async(dispatch_get_main_queue(), ^{ - if (!self.isCanceled) { - completionBlock(errors); - } - }); - }]; -} - -- (void)cancelAllDownloads -{ - self.isCanceled = YES; - [self.imageDownloadQueue cancelAllOperations]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.h deleted file mode 100644 index 8e97533f2..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MPMoPubNativeAdAdapter.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdAdapter.h" - -@class MPAdConfiguration; - -@interface MPMoPubNativeAdAdapter : NSObject - -@property (nonatomic, weak) id delegate; -@property (nonatomic, readonly) NSArray *impressionTrackerURLs; -@property (nonatomic, readonly) NSArray *clickTrackerURLs; -@property (nonatomic) MPAdConfiguration *adConfiguration; - -- (instancetype)initWithAdProperties:(NSMutableDictionary *)properties; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.m deleted file mode 100644 index 8f5c12712..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeAdAdapter.m +++ /dev/null @@ -1,208 +0,0 @@ -// -// MPMoPubNativeAdAdapter.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdDestinationDisplayAgent.h" -#import "MPAdImpressionTimer.h" -#import "MPCoreInstanceProvider.h" -#import "MPGlobal.h" -#import "MPMemoryCache.h" -#import "MPMoPubNativeAdAdapter.h" -#import "MPNativeAdConfigValues.h" -#import "MPNativeAdConstants.h" -#import "MPNativeAdError.h" - -static const NSTimeInterval kMoPubRequiredSecondsForImpression = 1.0; -static const CGFloat kMoPubRequiredViewVisibilityPercentage = 0.5; - -@interface MPMoPubNativeAdAdapter () - -@property (nonatomic, strong) MPAdImpressionTimer *impressionTimer; -@property (nonatomic, strong) MPAdDestinationDisplayAgent *destinationDisplayAgent; - -@end - -@implementation MPMoPubNativeAdAdapter - -@synthesize properties = _properties; -@synthesize defaultActionURL = _defaultActionURL; - -- (instancetype)initWithAdProperties:(NSMutableDictionary *)properties -{ - if (self = [super init]) { - - // Let's make sure the data types of all the provided native ad properties are strings before creating the adapter - - NSArray *keysToCheck = @[kAdIconImageKey, kAdMainImageKey, kAdTextKey, kAdTitleKey, kAdCTATextKey, kAdPrivacyIconImageUrlKey, kAdPrivacyIconClickUrlKey]; - - for (NSString *key in keysToCheck) { - id value = properties[key]; - if (value != nil && ![value isKindOfClass:[NSString class]]) { - return nil; - } - } - - // Validate that the views are actually views - NSArray * viewKeysToCheck = @[kAdIconImageViewKey, kAdMainMediaViewKey]; - for (NSString * key in viewKeysToCheck) { - id value = properties[key]; - if (value != nil && ![value isKindOfClass:[UIView class]]) { - return nil; - } - } - - BOOL valid = YES; - NSArray *impressionTrackers = [properties objectForKey:kImpressionTrackerURLsKey]; - if (![impressionTrackers isKindOfClass:[NSArray class]] || [impressionTrackers count] < 1) { - valid = NO; - } else { - _impressionTrackerURLs = MPConvertStringArrayToURLArray(impressionTrackers); - } - - NSObject *clickTracker = [properties objectForKey:kClickTrackerURLKey]; - - // The click tracker could either be a single URL or an array of URLS. - if ([clickTracker isKindOfClass:[NSArray class]]) { - _clickTrackerURLs = MPConvertStringArrayToURLArray((NSArray *)clickTracker); - } else if ([clickTracker isKindOfClass:[NSString class]]) { - NSURL *url = [NSURL URLWithString:(NSString *)clickTracker]; - if (url) { - _clickTrackerURLs = @[ url ]; - } else { - valid = NO; - } - } else { - valid = NO; - } - - _defaultActionURL = [NSURL URLWithString:[properties objectForKey:kDefaultActionURLKey]]; - - // Grab the config, figure out requiredSecondsForImpression and requiredViewVisibilityPercentage, - // and set up the timer. - MPNativeAdConfigValues *config = properties[kNativeAdConfigKey]; - NSTimeInterval requiredSecondsForImpression = config.isImpressionMinVisibleSecondsValid ? config.impressionMinVisibleSeconds : kMoPubRequiredSecondsForImpression; - if (config.isImpressionMinVisiblePixelsValid) { - _impressionTimer = [[MPAdImpressionTimer alloc] initWithRequiredSecondsForImpression:requiredSecondsForImpression - requiredViewVisibilityPixels:config.impressionMinVisiblePixels]; - } else { - CGFloat requiredViewVisibilityPercentage = config.isImpressionMinVisiblePercentValid ? (config.impressionMinVisiblePercent / 100.0) : kMoPubRequiredViewVisibilityPercentage; - _impressionTimer = [[MPAdImpressionTimer alloc] initWithRequiredSecondsForImpression:requiredSecondsForImpression - requiredViewVisibilityPercentage:requiredViewVisibilityPercentage]; - } - _impressionTimer.delegate = self; - - [properties removeObjectsForKeys:@[kImpressionTrackerURLsKey, kClickTrackerURLKey, kDefaultActionURLKey, kNativeAdConfigKey]]; - _properties = properties; - - if (!valid) { - return nil; - } - - // The privacy icon has been overridden by the server. We will use its image instead if it is - // already cached. Otherwise, we will defer loading the image until later. - NSString * privacyIconUrl = properties[kAdPrivacyIconImageUrlKey]; - if (privacyIconUrl != nil) { - UIImage * cachedIcon = [MPMemoryCache.sharedInstance imageForKey:privacyIconUrl]; - if (cachedIcon != nil) { - [properties setObject:cachedIcon forKey:kAdPrivacyIconUIImageKey]; - } - } - // Use the default MoPub privacy icon bundled with the SDK. - else { - // Add the privacy icon settings to our properties dictionary. - // Path will not change, so load path and image statically. - static NSString *privacyIconImagePath = nil; - static UIImage *privacyIconImage = nil; - if (!privacyIconImagePath || !privacyIconImage) { - privacyIconImagePath = MPResourcePathForResource(kPrivacyIconImageName); - privacyIconImage = privacyIconImagePath ? [UIImage imageWithContentsOfFile:privacyIconImagePath] : nil; - } - if (privacyIconImagePath) { - [properties setObject:privacyIconImagePath forKey:kAdPrivacyIconImageUrlKey]; - } - if (privacyIconImage) { - [properties setObject:privacyIconImage forKey:kAdPrivacyIconUIImageKey]; - } - } - - _destinationDisplayAgent = [MPAdDestinationDisplayAgent agentWithDelegate:self]; - } - - return self; -} - -- (void)dealloc -{ - [_destinationDisplayAgent cancel]; - [_destinationDisplayAgent setDelegate:nil]; -} - -#pragma mark - - -- (void)willAttachToView:(UIView *)view -{ - [self.impressionTimer startTrackingView:view]; -} - -- (void)displayContentForURL:(NSURL *)URL rootViewController:(UIViewController *)controller -{ - if (!controller) { - return; - } - - if (!URL || ![URL isKindOfClass:[NSURL class]] || ![URL.absoluteString length]) { - return; - } - - [self.destinationDisplayAgent displayDestinationForURL:URL]; -} - -#pragma mark - Privacy Icon - -- (void)displayContentForDAAIconTap -{ - NSURL *defaultPrivacyClickUrl = [NSURL URLWithString:kPrivacyIconTapDestinationURL]; - NSURL *overridePrivacyClickUrl = ({ - NSString *url = self.properties[kAdPrivacyIconClickUrlKey]; - (url != nil ? [NSURL URLWithString:url] : nil); - }); - - [self.destinationDisplayAgent displayDestinationForURL:(overridePrivacyClickUrl != nil ? overridePrivacyClickUrl : defaultPrivacyClickUrl)]; -} - -#pragma mark - - -- (void)adViewWillLogImpression:(UIView *)adView -{ - [self.delegate nativeAdWillLogImpression:self]; -} - -#pragma mark - - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (void)displayAgentWillPresentModal -{ - [self.delegate nativeAdWillPresentModalForAdapter:self]; -} - -- (void)displayAgentWillLeaveApplication -{ - [self.delegate nativeAdWillLeaveApplicationFromAdapter:self]; -} - -- (void)displayAgentDidDismissModal -{ - [self.delegate nativeAdDidDismissModalForAdapter:self]; -} - -// - (MPAdConfiguration *)adConfiguration delegate method is automatically implemented via the adConfiguration property declaration. - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.h deleted file mode 100644 index cd94873ed..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPMoPubNativeCustomEvent.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeCustomEvent.h" - -@interface MPMoPubNativeCustomEvent : MPNativeCustomEvent - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.m deleted file mode 100644 index f70b375b8..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPMoPubNativeCustomEvent.m +++ /dev/null @@ -1,51 +0,0 @@ -// -// MPMoPubNativeCustomEvent.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMoPubNativeCustomEvent.h" -#import "MPMoPubNativeAdAdapter.h" -#import "MPNativeAd+Internal.h" -#import "MPNativeAdError.h" -#import "MPLogging.h" -#import "MPNativeAdUtils.h" - -@implementation MPMoPubNativeCustomEvent - -- (void)requestAdWithCustomEventInfo:(NSDictionary *)info -{ - MPMoPubNativeAdAdapter *adAdapter = [[MPMoPubNativeAdAdapter alloc] initWithAdProperties:[info mutableCopy]]; - - if (adAdapter.properties) { - MPNativeAd *interfaceAd = [[MPNativeAd alloc] initWithAdAdapter:adAdapter]; - [interfaceAd.impressionTrackerURLs addObjectsFromArray:adAdapter.impressionTrackerURLs]; - [interfaceAd.clickTrackerURLs addObjectsFromArray:adAdapter.clickTrackerURLs]; - - // Get the image urls so we can download them prior to returning the ad. - NSMutableArray *imageURLs = [NSMutableArray array]; - for (NSString *key in [info allKeys]) { - if ([[key lowercaseString] hasSuffix:@"image"] && [[info objectForKey:key] isKindOfClass:[NSString class]]) { - if (![MPNativeAdUtils addURLString:[info objectForKey:key] toURLArray:imageURLs]) { - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForInvalidImageURL()]; - } - } - } - - [super precacheImagesWithURLs:imageURLs completionBlock:^(NSArray *errors) { - if (errors) { - MPLogDebug(@"%@", errors); - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForImageDownloadFailure()]; - } else { - [self.delegate nativeCustomEvent:self didLoadAd:interfaceAd]; - } - }]; - } else { - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForInvalidAdServerResponse(nil)]; - } - -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.h deleted file mode 100644 index df3e572ab..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// MPNativeAd+Internal.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAd.h" - -@class MPNativeView; - -@interface MPNativeAd (Internal) - -@property (nonatomic, readonly) NSDate *creationDate; -@property (nonatomic) MPNativeView *associatedView; -@property (nonatomic, readwrite, strong) id renderer; -@property (nonatomic, readonly) NSMutableSet *clickTrackerURLs; -@property (nonatomic, readonly) NSMutableSet *impressionTrackerURLs; -@property (nonatomic, readonly, strong) id adAdapter; - -/** - * This method is called by the ad placers when the sizes of the ad placer stream - * view's have changed. The ad placer will get the size from the renderer and just - * pass it through to the mpnativead to update the view size since the ad is the only one - * who has access to the ad view. -*/ -- (void)updateAdViewSize:(CGSize)size; - -/** - * Retrieves the custom ad view with its frame set to the would-be containing native view. Unlike - * `retrieveAdViewWithError:`, this method does not have side effects of changing the view hierarchy - * and is only intended for size calculation purposes. - * - * @param error A pointer to an error object. If an error occurs, this pointer will be set to an - * actual error object containing the error information. - * - * @return If successful, the method will return the rendered ad. The method will - * return nil if it cannot render the ad data to a view. - */ -- (UIView *)retrieveAdViewForSizeCalculationWithError:(NSError **)error; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.m deleted file mode 100644 index b90156460..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAd+Internal.m +++ /dev/null @@ -1,39 +0,0 @@ -// -// MPNativeAd+Internal.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPNativeAd+Internal.h" -#import "MPNativeAdRenderer.h" -#import "MPNativeView.h" - -@implementation MPNativeAd (Internal) - -@dynamic impressionTrackerURLs; -@dynamic clickTrackerURLs; -@dynamic creationDate; -@dynamic renderer; -@dynamic associatedView; -@dynamic adAdapter; - -- (void)updateAdViewSize:(CGSize)size -{ - self.associatedView.frame = CGRectMake(0, 0, size.width, size.height); -} - -- (UIView *)retrieveAdViewForSizeCalculationWithError:(NSError **)error -{ - // retrieve the ad and apply the frame of the associatedView (superview of the adView) so the - // adView can calculate its own size. It's important that we don't add adView to the associatedView - // because this can mess up expectations in `retrieveAdViewWithError:` especially around hydrating - // image views asynchronously - UIView *adView = [self.renderer retrieveViewWithAdapter:self.adAdapter error:error]; - adView.frame = self.associatedView.bounds; - return adView; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.h deleted file mode 100644 index d5c38c2b6..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// MPNativeAdConfigValues+Internal.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdConfigValues.h" - -@interface MPNativeAdConfigValues (Internal) - -- (BOOL)isValidPercentage:(NSInteger)percentage; -- (BOOL)isValidTimeInterval:(NSTimeInterval)timeInterval; -- (BOOL)isValidNumberOfPixels:(CGFloat)pixels; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.m deleted file mode 100644 index d74f3a800..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues+Internal.m +++ /dev/null @@ -1,27 +0,0 @@ -// -// MPNativeAdConfigValues+Internal.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdConfigValues+Internal.h" - -@implementation MPNativeAdConfigValues (Internal) - -- (BOOL)isValidPercentage:(NSInteger)percentage -{ - return (percentage >= 0 && percentage <= 100); -} - -- (BOOL)isValidTimeInterval:(NSTimeInterval)timeInterval -{ - return timeInterval > 0.0; -} - -- (BOOL)isValidNumberOfPixels:(CGFloat)pixels { - return pixels >= 0.0; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.h deleted file mode 100644 index 284ec4e21..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// MPNativeAdConfigValues.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPNativeAdConfigValues : NSObject - -@property (nonatomic, readonly) CGFloat impressionMinVisiblePixels; -@property (nonatomic, readonly) NSInteger impressionMinVisiblePercent; -@property (nonatomic, readonly) NSTimeInterval impressionMinVisibleSeconds; - -- (instancetype)initWithImpressionMinVisiblePixels:(CGFloat)impressionMinVisiblePixels - impressionMinVisiblePercent:(NSInteger)impressionMinVisiblePercent - impressionMinVisibleSeconds:(NSTimeInterval)impressionMinVisibleSeconds NS_DESIGNATED_INITIALIZER; - -@property (nonatomic, readonly) BOOL isImpressionMinVisiblePercentValid; -@property (nonatomic, readonly) BOOL isImpressionMinVisibleSecondsValid; -@property (nonatomic, readonly) BOOL isImpressionMinVisiblePixelsValid; - -/** - * `init` is not available. - */ -- (instancetype)init __attribute__((unavailable("init not available"))); - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.m deleted file mode 100644 index c8f49332d..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdConfigValues.m +++ /dev/null @@ -1,38 +0,0 @@ -// -// MPNativeAdConfigValues.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdConfigValues.h" -#import "MPNativeAdConfigValues+Internal.h" - -@implementation MPNativeAdConfigValues - -- (instancetype)initWithImpressionMinVisiblePixels:(CGFloat)impressionMinVisiblePixels - impressionMinVisiblePercent:(NSInteger)impressionMinVisiblePercent - impressionMinVisibleSeconds:(NSTimeInterval)impressionMinVisibleSeconds { - if (self = [super init]) { - _impressionMinVisiblePixels = impressionMinVisiblePixels; - _impressionMinVisiblePercent = impressionMinVisiblePercent; - _impressionMinVisibleSeconds = impressionMinVisibleSeconds; - } - - return self; -} - -- (BOOL)isImpressionMinVisibleSecondsValid { - return [self isValidTimeInterval:self.impressionMinVisibleSeconds]; -} - -- (BOOL)isImpressionMinVisiblePercentValid { - return [self isValidPercentage:self.impressionMinVisiblePercent]; -} - -- (BOOL)isImpressionMinVisiblePixelsValid { - return [self isValidNumberOfPixels:self.impressionMinVisiblePixels]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererConstants.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererConstants.h deleted file mode 100644 index 2c4fa731b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererConstants.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// MPNativeAdRendererConstants.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -/** - * Return this value from `MPNativeViewSizeHandler` when you want to display ad content that could - * have variable height and needs to be calculated only after ad properties are available. The - * implementation of ad view conforming to the `MPNativeAdRendering` protocol should implement - * `sizeThatFits:` and handle layout changes appropriately. - */ -FOUNDATION_EXPORT const CGFloat MPNativeViewDynamicDimension; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.h deleted file mode 100644 index 6b3a728a6..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MPNativeAdRendererImageHandler.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@protocol MPNativeAdRendererImageHandlerDelegate - -- (BOOL)nativeAdViewInViewHierarchy; - -@end - -@interface MPNativeAdRendererImageHandler : NSObject - - -@property (nonatomic, weak) id delegate; - -- (void)loadImageForURL:(NSURL *)imageURL intoImageView:(UIImageView *)imageView; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.m deleted file mode 100644 index a6550897e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdRendererImageHandler.m +++ /dev/null @@ -1,99 +0,0 @@ -// -// MPNativeAdRendererImageHandler.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdRendererImageHandler.h" -#import "MPLogging.h" -#import "MPNativeCache.h" -#import "MPImageDownloadQueue.h" - -@interface MPNativeAdRendererImageHandler() - -@property (nonatomic) MPImageDownloadQueue *imageDownloadQueue; - -@end - -@implementation MPNativeAdRendererImageHandler - -- (instancetype)init -{ - if (self = [super init]) { - _imageDownloadQueue = [[MPImageDownloadQueue alloc] init]; - } - return self; -} - -- (void)loadImageForURL:(NSURL *)imageURL intoImageView:(UIImageView *)imageView -{ - imageView.image = nil; - - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ - __block BOOL isAdViewInHierarchy = NO; - - // Try to prevent unnecessary work if the ad view is not currently in the view hierarchy. - // Note that this doesn't prevent 100% of the cases as the ad view can still be recycled after this passes. - // We have an additional 100% accurate check in safeMainQueueSetImage to ensure that we don't overwrite. - - dispatch_sync(dispatch_get_main_queue(), ^{ - isAdViewInHierarchy = [self.delegate nativeAdViewInViewHierarchy]; - }); - - if (!isAdViewInHierarchy) { - MPLogDebug(@"Cell was recycled. Don't bother rendering the image."); - return; - } - - NSData *cachedImageData = [[MPNativeCache sharedCache] retrieveDataForKey:imageURL.absoluteString]; - UIImage *image = [UIImage imageWithData:cachedImageData]; - - if (image) { - // By default, the image data isn't decompressed until set on a UIImageView, on the main thread. This - // can result in poor scrolling performance. To fix this, we force decompression in the background before - // assignment to a UIImageView. - UIGraphicsBeginImageContext(CGSizeMake(1, 1)); - [image drawAtPoint:CGPointZero]; - UIGraphicsEndImageContext(); - - [self safeMainQueueSetImage:image intoImageView:imageView]; - } else if (imageURL) { - MPLogDebug(@"Cache miss on %@. Re-downloading...", imageURL); - - __weak __typeof__(self) weakSelf = self; - [self.imageDownloadQueue addDownloadImageURLs:@[imageURL] - completionBlock:^(NSArray *errors) { - __strong __typeof__(self) strongSelf = weakSelf; - if (strongSelf) { - if (errors.count == 0) { - UIImage *image = [UIImage imageWithData:[[MPNativeCache sharedCache] retrieveDataForKey:imageURL.absoluteString]]; - - [strongSelf safeMainQueueSetImage:image intoImageView:imageView]; - } else { - MPLogDebug(@"Failed to download %@ on cache miss. Giving up for now.", imageURL); - } - } else { - MPLogInfo(@"MPNativeAd deallocated before loadImageForURL:intoImageView: download completion block was called"); - } - }]; - } - }); -} - -- (void)safeMainQueueSetImage:(UIImage *)image intoImageView:(UIImageView *)imageView -{ - dispatch_async(dispatch_get_main_queue(), ^{ - if (![self.delegate nativeAdViewInViewHierarchy]) { - MPLogDebug(@"Cell was recycled. Don't bother setting the image."); - return; - } - - if (image) { - imageView.image = image; - } - }); -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.h deleted file mode 100644 index 9ae845a11..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// MPNativeAdSourceQueue.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -@class MPNativeAdRequestTargeting; -@class MPNativeAd; - -@protocol MPNativeAdSourceQueueDelegate; - -@interface MPNativeAdSourceQueue : NSObject - -@property (nonatomic, weak) id delegate; - - -- (instancetype)initWithAdUnitIdentifier:(NSString *)identifier rendererConfigurations:(NSArray *)rendererConfigurations andTargeting:(MPNativeAdRequestTargeting *)targeting; -- (MPNativeAd *)dequeueAdWithMaxAge:(NSTimeInterval)age; -- (NSUInteger)count; -- (void)loadAds; -- (void)cancelRequests; - -@end - -@protocol MPNativeAdSourceQueueDelegate - -- (void)adSourceQueueAdIsAvailable:(MPNativeAdSourceQueue *)source; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.m deleted file mode 100644 index 86f8b5a39..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdSourceQueue.m +++ /dev/null @@ -1,153 +0,0 @@ -// -// MPNativeAdSourceQueue.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdSourceQueue.h" -#import "MPNativeAd+Internal.h" -#import "MPNativeAdRequestTargeting.h" -#import "MPNativeAdRequest+MPNativeAdSource.h" -#import "MPLogging.h" -#import "MPNativeAdError.h" - -static NSUInteger const kCacheSizeLimit = 1; -static NSTimeInterval const kAdFetchRetryTimes[] = {1, 3, 5, 25, 60, 300}; -// Calculate the number of elements inside the array by taking the size divided by the size of one element. -static NSUInteger const kMaxRetries = sizeof(kAdFetchRetryTimes)/sizeof(kAdFetchRetryTimes[0]); - -@interface MPNativeAdSourceQueue () - -@property (nonatomic) NSMutableArray *adQueue; -@property (nonatomic, assign) NSUInteger adFetchRetryCounter; -@property (nonatomic, assign) NSUInteger currentSequence; -@property (nonatomic, copy) NSString *adUnitIdentifier; -@property (nonatomic) MPNativeAdRequestTargeting *targeting; -@property (nonatomic) NSArray *rendererConfigurations; -@property (nonatomic, assign) BOOL isAdLoading; - -@end - -@implementation MPNativeAdSourceQueue - -#pragma mark - Object Lifecycle - -- (instancetype)initWithAdUnitIdentifier:(NSString *)identifier rendererConfigurations:(NSArray *)rendererConfigurations andTargeting:(MPNativeAdRequestTargeting *)targeting -{ - self = [super init]; - if (self) { - _adUnitIdentifier = [identifier copy]; - _rendererConfigurations = rendererConfigurations; - _targeting = targeting; - _adQueue = [[NSMutableArray alloc] init]; - } - return self; -} - - -#pragma mark - Public Methods - -- (MPNativeAd *)dequeueAd -{ - MPNativeAd *nextAd = [self.adQueue firstObject]; - [self.adQueue removeObject:nextAd]; - [self loadAds]; - return nextAd; -} - -- (MPNativeAd *)dequeueAdWithMaxAge:(NSTimeInterval)age -{ - MPNativeAd *nextAd = [self dequeueAd]; - - while (nextAd && ![self isAdAgeValid:nextAd withMaxAge:age]) { - nextAd = [self dequeueAd]; - } - - return nextAd; -} - -- (void)addNativeAd:(MPNativeAd *)nativeAd -{ - [self.adQueue addObject:nativeAd]; -} - -- (NSUInteger)count -{ - return [self.adQueue count]; -} - -- (void)cancelRequests -{ - [self resetBackoff]; -} - -#pragma mark - Internal Logic - -- (BOOL)isAdAgeValid:(MPNativeAd *)ad withMaxAge:(NSTimeInterval)maxAge -{ - NSTimeInterval adAge = [ad.creationDate timeIntervalSinceNow]; - - return fabs(adAge) < maxAge; -} - -#pragma mark - Ad Requests - -- (void)resetBackoff -{ - [NSObject cancelPreviousPerformRequestsWithTarget:self]; - self.adFetchRetryCounter = 0; -} - -- (void)loadAds -{ - if (self.adFetchRetryCounter == 0) { - [self replenishCache]; - } -} - -- (void)replenishCache -{ - if ([self count] >= kCacheSizeLimit || self.isAdLoading) { - return; - } - - self.isAdLoading = YES; - - MPNativeAdRequest *adRequest = [MPNativeAdRequest requestWithAdUnitIdentifier:self.adUnitIdentifier rendererConfigurations:self.rendererConfigurations]; - adRequest.targeting = self.targeting; - - [adRequest startForAdSequence:self.currentSequence withCompletionHandler:^(MPNativeAdRequest *request, MPNativeAd *response, NSError *error) { - if (response && !error) { - self.adFetchRetryCounter = 0; - - [self addNativeAd:response]; - self.currentSequence++; - if ([self count] == 1) { - [self.delegate adSourceQueueAdIsAvailable:self]; - } - } else { - MPLogDebug(@"%@", error); - //increment in this failure case to prevent retrying a request that wasn't bid on. - //currently under discussion on whether we do this or not. - if (error.code == MPNativeAdErrorNoInventory) { - self.currentSequence++; - } - - if (self.adFetchRetryCounter < kMaxRetries) { - NSTimeInterval retryTime = kAdFetchRetryTimes[self.adFetchRetryCounter]; - self.adFetchRetryCounter++; - [self performSelector:@selector(replenishCache) withObject:nil afterDelay:retryTime]; - MPLogDebug(@"Will re-attempt to replenish the ad cache in %.1f seconds.", retryTime); - } else { - // Don't try to fetch anymore ads after we have tried kMaxRetries times. - MPLogDebug(@"Replenishing the cache has timed out."); - } - } - self.isAdLoading = NO; - [self loadAds]; - }]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdUtils.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdUtils.h deleted file mode 100644 index 2da65d656..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdUtils.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// MPNativeAdUtils.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -extern NSTimeInterval const kUpdateVisibleCellsInterval; - -@interface MPNativeAdUtils : NSObject - -+ (BOOL)addURLString:(NSString *)urlString toURLArray:(NSMutableArray *)urlArray; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdUtils.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdUtils.m deleted file mode 100644 index 9adcc1998..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeAdUtils.m +++ /dev/null @@ -1,29 +0,0 @@ -// -// MPNativeAdUtils.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdUtils.h" - -NSTimeInterval const kUpdateVisibleCellsInterval = 0.25; - -@implementation MPNativeAdUtils - -+ (BOOL)addURLString:(NSString *)urlString toURLArray:(NSMutableArray *)urlArray -{ - if (urlString.length == 0) { - return NO; - } - - NSURL *url = [NSURL URLWithString:urlString]; - if (url) { - [urlArray addObject:url]; - return YES; - } else { - return NO; - } -} -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeCache.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeCache.h deleted file mode 100644 index 0abc85f4a..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeCache.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// MPNativeCache.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPNativeCache : NSObject - -+ (instancetype)sharedCache; - -/* - * Do NOT call any of the following methods on the main thread, potentially lengthy wait for disk IO - */ -- (BOOL)cachedDataExistsForKey:(NSString *)key; -- (NSData *)retrieveDataForKey:(NSString *)key; -- (void)storeData:(NSData *)data forKey:(NSString *)key; -- (void)removeAllDataFromCache; -- (void)setInMemoryCacheEnabled:(BOOL)enabled; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeCache.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeCache.m deleted file mode 100644 index 5155724aa..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeCache.m +++ /dev/null @@ -1,186 +0,0 @@ -// -// MPNativeCache.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeCache.h" -#import "MPDiskLRUCache.h" -#import "MPLogging.h" - -typedef enum { - MPNativeCacheMethodDisk = 0, - MPNativeCacheMethodDiskAndMemory = 1 << 0 -} MPNativeCacheMethod; - -@interface MPNativeCache () - -@property (nonatomic, strong) NSCache *memoryCache; -@property (nonatomic, strong) MPDiskLRUCache *diskCache; -@property (nonatomic, assign) MPNativeCacheMethod cacheMethod; - -- (BOOL)cachedDataExistsForKey:(NSString *)key withCacheMethod:(MPNativeCacheMethod)cacheMethod; -- (NSData *)retrieveDataForKey:(NSString *)key withCacheMethod:(MPNativeCacheMethod)cacheMethod; -- (void)storeData:(id)data forKey:(NSString *)key withCacheMethod:(MPNativeCacheMethod)cacheMethod; -- (void)removeAllDataFromMemory; -- (void)removeAllDataFromDisk; - -@end - -@implementation MPNativeCache - -+ (instancetype)sharedCache; -{ - static dispatch_once_t once; - static MPNativeCache *sharedCache; - dispatch_once(&once, ^{ - sharedCache = [[self alloc] init]; - }); - return sharedCache; -} - -- (id)init -{ - self = [super init]; - if (self != nil) { - _memoryCache = [[NSCache alloc] init]; - _memoryCache.delegate = self; - - _diskCache = [[MPDiskLRUCache alloc] init]; - - _cacheMethod = MPNativeCacheMethodDiskAndMemory; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveMemoryWarning:) name:UIApplicationDidReceiveMemoryWarningNotification object:[UIApplication sharedApplication]]; - } - - return self; -} - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; -} - -#pragma mark - Public Cache Interactions - -- (void)setInMemoryCacheEnabled:(BOOL)enabled -{ - if (enabled) { - self.cacheMethod = MPNativeCacheMethodDiskAndMemory; - } else { - self.cacheMethod = MPNativeCacheMethodDisk; - [self.memoryCache removeAllObjects]; - } -} - -- (BOOL)cachedDataExistsForKey:(NSString *)key -{ - return [self cachedDataExistsForKey:key withCacheMethod:self.cacheMethod]; -} - -- (NSData *)retrieveDataForKey:(NSString *)key -{ - return [self retrieveDataForKey:key withCacheMethod:self.cacheMethod]; -} - -- (void)storeData:(NSData *)data forKey:(NSString *)key -{ - [self storeData:data forKey:key withCacheMethod:self.cacheMethod]; -} - -- (void)removeAllDataFromCache -{ - [self removeAllDataFromMemory]; - [self removeAllDataFromDisk]; -} - -#pragma mark - Private Cache Implementation - -- (BOOL)cachedDataExistsForKey:(NSString *)key withCacheMethod:(MPNativeCacheMethod)cacheMethod -{ - BOOL dataExists = NO; - if (cacheMethod & MPNativeCacheMethodDiskAndMemory) { - dataExists = [self.memoryCache objectForKey:key] != nil; - } - - if (!dataExists) { - dataExists = [self.diskCache cachedDataExistsForKey:key]; - } - - return dataExists; -} - -- (id)retrieveDataForKey:(NSString *)key withCacheMethod:(MPNativeCacheMethod)cacheMethod -{ - id data = nil; - - if (cacheMethod & MPNativeCacheMethodDiskAndMemory) { - data = [self.memoryCache objectForKey:key]; - } - - if (data) { - MPLogDebug(@"RETRIEVE FROM MEMORY: %@", key); - } - - - if (data == nil) { - data = [self.diskCache retrieveDataForKey:key]; - - if (data && cacheMethod & MPNativeCacheMethodDiskAndMemory) { - MPLogDebug(@"RETRIEVE FROM DISK: %@", key); - - [self.memoryCache setObject:data forKey:key]; - MPLogDebug(@"STORED IN MEMORY: %@", key); - } - } - - if (data == nil) { - MPLogDebug(@"RETRIEVE FAILED: %@", key); - } - - return data; -} - -- (void)storeData:(id)data forKey:(NSString *)key withCacheMethod:(MPNativeCacheMethod)cacheMethod -{ - if (data == nil) { - return; - } - - if (cacheMethod & MPNativeCacheMethodDiskAndMemory) { - [self.memoryCache setObject:data forKey:key]; - MPLogDebug(@"STORED IN MEMORY: %@", key); - } - - [self.diskCache storeData:data forKey:key]; - MPLogDebug(@"STORED ON DISK: %@", key); -} - -- (void)removeAllDataFromMemory -{ - [self.memoryCache removeAllObjects]; -} - -- (void)removeAllDataFromDisk -{ - [self.diskCache removeAllCachedFiles]; -} - -#pragma mark - Notifications - -- (void)didReceiveMemoryWarning:(NSNotification *)notification -{ - [self.memoryCache removeAllObjects]; -} - -#pragma mark - NSCacheDelegate - -- (void)cache:(NSCache *)cache willEvictObject:(id)obj -{ - MPLogDebug(@"Evicting Object"); -} - - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.h deleted file mode 100644 index 7c00399a3..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// MPNativePositionResponseDeserializer.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@class MPClientAdPositioning; - -typedef enum : NSUInteger { - MPNativePositionResponseDataIsEmpty, - MPNativePositionResponseIsNotValidJSON, - MPNativePositionResponseJSONHasInvalidPositionData, -} MPNativePositionResponseDeserializationErrorCode; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * The `MPNativePositionResponseDeserializer` class is used to convert HTTP response data - * containing positioning information into ad positioning objects that may be used by various - * native ad placers. - */ -@interface MPNativePositionResponseDeserializer : NSObject - -/** - * Creates and returns an object that can deserialize HTTP response data into ad positioning - * objects. - * - * @return The newly created deserializer. - */ -+ (instancetype)deserializer; - -/** - * Returns an ad positioning object given a data object. - * - * If an error occurs during the data conversion, this method will return an empty positioning - * object containing no desired ad positions. - * - * @param data A data object containing positioning information. - * @param error A pointer to an error object. If an error occurs, this pointer will be set to an - * actual error object containing the error information. - * - * @return An `MPClientAdPositioning` object. This is guaranteed to be non-nil; if an error occurs - * during deserialization, the return value will still be a positioning object with no ad positions. - */ -- (MPClientAdPositioning *)clientPositioningForData:(NSData *)data error:(NSError **)error; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.m deleted file mode 100644 index f82c0f285..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionResponseDeserializer.m +++ /dev/null @@ -1,251 +0,0 @@ -// -// MPNativePositionResponseDeserializer.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativePositionResponseDeserializer.h" -#import "MPClientAdPositioning.h" -#import "NSJSONSerialization+MPAdditions.h" - -static NSString * const MPNativePositionResponseDeserializationErrorDomain = @"com.mopub.iossdk.position.deserialization"; -static NSString * const MPNativePositionResponseFixedPositionsKey = @"fixed"; -static NSString * const MPNativePositionResponseSectionKey = @"section"; -static NSString * const MPNativePositionResponsePositionKey = @"position"; -static NSString * const MPNativePositionResponseRepeatingKey = @"repeating"; -static NSString * const MPNativePositionResponseIntervalKey = @"interval"; -static NSInteger const MPMinRepeatingInterval = 2; -static NSInteger const MPMaxRepeatingInterval = 1 << 16; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPNativePositionResponseDeserializer - -+ (instancetype)deserializer -{ - return [[[self class] alloc] init]; -} - -- (MPClientAdPositioning *)clientPositioningForData:(NSData *)data error:(NSError **)error -{ - MPClientAdPositioning *positioning = [MPClientAdPositioning positioning]; - - if (!data || [data length] == 0) { - [self safeAssignError:error code:MPNativePositionResponseDataIsEmpty description:@"Positioning cannot be created from nil or empty data."]; - return [MPClientAdPositioning positioning]; - } - - NSError *deserializationError = nil; - NSDictionary *positionDictionary = [NSJSONSerialization mp_JSONObjectWithData:data options:0 clearNullObjects:YES error:&deserializationError]; - - if (deserializationError) { - [self safeAssignError:error code:MPNativePositionResponseIsNotValidJSON description:@"Failed to deserialize JSON." underlyingError:deserializationError]; - return [MPClientAdPositioning positioning]; - } - - NSError *fixedPositionsError = nil; - NSArray *fixedPositions = [self parseFixedPositionsObject:[positionDictionary objectForKey:MPNativePositionResponseFixedPositionsKey] error:&fixedPositionsError]; - - if (fixedPositionsError) { - if (error) { - *error = fixedPositionsError; - } - return [MPClientAdPositioning positioning]; - } - - NSError *repeatingIntervalError = nil; - NSInteger repeatingInterval = [self parseRepeatingIntervalObject:[positionDictionary objectForKey:MPNativePositionResponseRepeatingKey] error:&repeatingIntervalError]; - - if (repeatingIntervalError) { - if (error) { - *error = repeatingIntervalError; - } - return [MPClientAdPositioning positioning]; - } - - if ([fixedPositions count] == 0 && repeatingInterval <= 0) { - [self safeAssignError:error code:MPNativePositionResponseJSONHasInvalidPositionData description:@"Positioning object must have either fixed positions or a repeating interval."]; - return [MPClientAdPositioning positioning]; - } - - [fixedPositions enumerateObjectsUsingBlock:^(NSIndexPath *indexPath, NSUInteger idx, BOOL *stop) { - [positioning addFixedIndexPath:indexPath]; - }]; - [positioning enableRepeatingPositionsWithInterval:repeatingInterval]; - return positioning; -} - -#pragma mark - Parsing and validation - -- (NSArray *)parseFixedPositionsObject:(id)positionsObject error:(NSError **)error -{ - NSMutableArray *parsedPositions = [NSMutableArray array]; - - if (positionsObject && ![positionsObject isKindOfClass:[NSArray class]]) { - [self safeAssignError:error code:MPNativePositionResponseJSONHasInvalidPositionData description:[NSString stringWithFormat:@"Expected object for key \"%@\" to be an array. Actual: %@", MPNativePositionResponseFixedPositionsKey, positionsObject]]; - return nil; - } - - __block NSError *fixedPositionError = nil; - [positionsObject enumerateObjectsUsingBlock:^(id positionObj, NSUInteger idx, BOOL *stop) { - if (![self validatePositionObject:positionObj error:&fixedPositionError]) { - *stop = YES; - return; - } - - NSInteger section = [self integerFromDictionary:positionObj forKey:MPNativePositionResponseSectionKey defaultValue:0]; - NSInteger position = [self integerFromDictionary:positionObj forKey:MPNativePositionResponsePositionKey defaultValue:0]; - NSIndexPath *indexPath = [NSIndexPath indexPathForRow:position inSection:section]; - [parsedPositions addObject:indexPath]; - }]; - - if (fixedPositionError) { - if (error) { - *error = fixedPositionError; - } - return nil; - } - - return parsedPositions; -} - -- (NSInteger)parseRepeatingIntervalObject:(id)repeatingIntervalObject error:(NSError **)error -{ - if (!repeatingIntervalObject) { - return 0; - } - - NSError *repeatingIntervalError = nil; - if (![self validateRepeatingIntervalObject:repeatingIntervalObject error:&repeatingIntervalError]) { - if (error) { - *error = repeatingIntervalError; - } - return 0; - } - - return [self integerFromDictionary:repeatingIntervalObject forKey:MPNativePositionResponseIntervalKey defaultValue:0]; -} - -- (BOOL)validatePositionObject:(id)positionObject error:(NSError **)error -{ - if (![positionObject isKindOfClass:[NSDictionary class]]) { - [self safeAssignError:error code:MPNativePositionResponseJSONHasInvalidPositionData description:[NSString stringWithFormat:@"Position object is not a dictionary: %@.", positionObject]]; - return NO; - } - - // Section number is not required. If it's present, we have to check that it's non-negative; - // if it isn't there, we assign a section number of 0. - NSInteger section = [positionObject objectForKey:MPNativePositionResponseSectionKey] ? [self integerFromDictionary:positionObject forKey:MPNativePositionResponseSectionKey defaultValue:-1] : 0; - if (section < 0) { - [self safeAssignError:error code:MPNativePositionResponseJSONHasInvalidPositionData description:[NSString stringWithFormat:@"Position object has an invalid \"%@\" value or is not a positive number: %ld.", MPNativePositionResponseSectionKey, (long)section]]; - return NO; - } - - // Unlike section, position is required. It also must be a non-negative number. - NSInteger position = [self integerFromDictionary:positionObject forKey:MPNativePositionResponsePositionKey defaultValue:-1]; - if (position < 0) { - [self safeAssignError:error code:MPNativePositionResponseJSONHasInvalidPositionData description:[NSString stringWithFormat:@"Position object has an invalid \"%@\" value or is not a positive number: %ld.", MPNativePositionResponsePositionKey, (long)position]]; - return NO; - } - - return YES; -} - -- (BOOL)validateRepeatingIntervalObject:(id)repeatingIntervalObject error:(NSError **)error -{ - if (![repeatingIntervalObject isKindOfClass:[NSDictionary class]]) { - [self safeAssignError:error code:MPNativePositionResponseJSONHasInvalidPositionData description:[NSString stringWithFormat:@"Repeating interval object is not a dictionary: %@.", repeatingIntervalObject]]; - return NO; - } - - // The object must contain a value between MPMinRepeatingInterval and MPMaxRepeatingInterval. - NSInteger interval = [self integerFromDictionary:repeatingIntervalObject forKey:MPNativePositionResponseIntervalKey defaultValue:0]; - if (interval < MPMinRepeatingInterval || interval > MPMaxRepeatingInterval) { - [self safeAssignError:error code:MPNativePositionResponseJSONHasInvalidPositionData description:[NSString stringWithFormat:@"\"%@\" value in repeating interval object needs to be between %ld and %ld: %ld.", MPNativePositionResponseIntervalKey, (long)MPMinRepeatingInterval, (long)MPMaxRepeatingInterval, (long)interval]]; - return NO; - } - - return YES; -} - -#pragma mark - Dictionary helpers - -/** - * Returns an `NSInteger` value associated with a certain key in a dictionary, or a specified - * default value if the key is not associated with a valid integer representation. - * - * Valid integer representations include `NSNumber` objects and `NSString` objects that - * consist only of integer or sign characters. - * - * @param dictionary A dictionary containing keys and values. - * @param key The key for which to return an integer value. - * @param defaultValue A value that should be returned if `key` is not associated with an object - * that contains an integer representation. - * - * @return The integer value associated with `key`, or `defaultValue` if the object is not an - * `NSNumber` or an `NSString` representing an integer. - */ -- (NSInteger)integerFromDictionary:(NSDictionary *)dictionary forKey:(NSString *)key defaultValue:(NSInteger)defaultValue -{ - static NSCharacterSet *nonIntegerCharacterSet; - - id object = [dictionary objectForKey:key]; - - if ([object isKindOfClass:[NSNumber class]]) { - return [object integerValue]; - } else if ([object isKindOfClass:[NSString class]]) { - if (!nonIntegerCharacterSet) { - nonIntegerCharacterSet = [[NSCharacterSet characterSetWithCharactersInString:@"0123456789-"] invertedSet]; - } - - // If the string consists of all digits, we'll call -integerValue. Otherwise, return the - // default value. - if ([object rangeOfCharacterFromSet:nonIntegerCharacterSet].location == NSNotFound) { - return [object integerValue]; - } else { - return defaultValue; - } - } else { - return defaultValue; - } -} - -#pragma mark - Error helpers - -- (void)safeAssignError:(NSError **)error code:(MPNativePositionResponseDeserializationErrorCode)code userInfo:(NSDictionary *)userInfo -{ - if (error) { - *error = [self deserializationErrorWithCode:code userInfo:userInfo]; - } -} - -- (void)safeAssignError:(NSError **)error code:(MPNativePositionResponseDeserializationErrorCode)code description:(NSString *)description -{ - [self safeAssignError:error code:code description:description underlyingError:nil]; -} - -- (void)safeAssignError:(NSError **)error code:(MPNativePositionResponseDeserializationErrorCode)code description:(NSString *)description underlyingError:(NSError *)underlyingError -{ - NSMutableDictionary *userInfo = [NSMutableDictionary dictionary]; - - if (description) { - [userInfo setObject:description forKey:NSLocalizedDescriptionKey]; - } - - if (underlyingError) { - [userInfo setObject:underlyingError forKey:NSUnderlyingErrorKey]; - } - - [self safeAssignError:error code:code userInfo:userInfo]; -} - -- (NSError *)deserializationErrorWithCode:(MPNativePositionResponseDeserializationErrorCode)code userInfo:(NSDictionary *)userInfo -{ - return [NSError errorWithDomain:MPNativePositionResponseDeserializationErrorDomain - code:code - userInfo:userInfo]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionSource.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionSource.h deleted file mode 100644 index d1439a822..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionSource.h +++ /dev/null @@ -1,27 +0,0 @@ -// -// MPNativePositionSource.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPAdPositioning; - -typedef enum : NSUInteger { - MPNativePositionSourceInvalidAdUnitIdentifier, - MPNativePositionSourceEmptyResponse, - MPNativePositionSourceDeserializationFailed, - MPNativePositionSourceConnectionFailed, -} MPNativePositionSourceErrorCode; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPNativePositionSource : NSObject - -- (void)loadPositionsWithAdUnitIdentifier:(NSString *)identifier completionHandler:(void (^)(MPAdPositioning *positioning, NSError *error))completionHandler; -- (void)cancel; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionSource.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionSource.m deleted file mode 100644 index 3a8d0429e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativePositionSource.m +++ /dev/null @@ -1,155 +0,0 @@ -// -// MPNativePositionSource.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativePositionSource.h" -#import "MPConstants.h" -#import "MPIdentityProvider.h" -#import "MPAdPositioning.h" -#import "MPClientAdPositioning.h" -#import "MPLogging.h" -#import "MPNativePositionResponseDeserializer.h" -#import "MPAPIEndpoints.h" -#import "MPHTTPNetworkSession.h" -#import "MPURLRequest.h" -#import "MPAdServerURLBuilder.h" - -static NSString * const kPositioningSourceErrorDomain = @"com.mopub.iossdk.positioningsource"; -static const NSTimeInterval kMaximumRetryInterval = 60.0; -static const NSTimeInterval kMinimumRetryInterval = 1.0; -static const CGFloat kRetryIntervalBackoffMultiplier = 2.0; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPNativePositionSource () - -@property (nonatomic, assign) BOOL loading; -@property (nonatomic, copy) NSString *adUnitIdentifier; -@property (nonatomic, strong) NSURLSessionTask *task; -@property (nonatomic, copy) void (^completionHandler)(MPAdPositioning *positioning, NSError *error); -@property (nonatomic, assign) NSTimeInterval maximumRetryInterval; -@property (nonatomic, assign) NSTimeInterval minimumRetryInterval; -@property (nonatomic, assign) NSTimeInterval retryInterval; -@property (nonatomic, assign) NSUInteger retryCount; -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPNativePositionSource - -- (id)init -{ - if (self) { - self.maximumRetryInterval = kMaximumRetryInterval; - self.minimumRetryInterval = kMinimumRetryInterval; - self.retryInterval = self.minimumRetryInterval; - } - return self; -} - -- (void)dealloc -{ - [_task cancel]; -} - -#pragma mark - Public - -- (void)loadPositionsWithAdUnitIdentifier:(NSString *)identifier completionHandler:(void (^)(MPAdPositioning *positioning, NSError *error))completionHandler -{ - NSAssert(completionHandler != nil, @"A completion handler is required to load positions."); - - if (![identifier length]) { - NSError *invalidIDError = [NSError errorWithDomain:kPositioningSourceErrorDomain code:MPNativePositionSourceInvalidAdUnitIdentifier userInfo:nil]; - completionHandler(nil, invalidIDError); - return; - } - - self.adUnitIdentifier = identifier; - self.completionHandler = completionHandler; - self.retryCount = 0; - self.retryInterval = self.minimumRetryInterval; - - MPLogInfo(@"Requesting ad positions for native ad unit (%@).", identifier); - - MPURLRequest *request = [[MPURLRequest alloc] initWithURL:[MPAdServerURLBuilder nativePositionUrlForAdUnitId:identifier]]; - [self.task cancel]; - self.task = [self httpTaskWithRequest:request]; -} - -- (void)cancel -{ - // Cancel any connection currently in flight. - [self.task cancel]; - - // Cancel any queued retry requests. - [NSObject cancelPreviousPerformRequestsWithTarget:self]; -} - -#pragma mark - Internal - -- (NSURLSessionTask *)httpTaskWithRequest:(MPURLRequest *)request { - __weak __typeof__(self) weakSelf = self; - NSURLSessionTask * task = [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - __typeof__(self) strongSelf = weakSelf; - - [strongSelf parsePositioningData:data]; - } errorHandler:^(NSError * _Nonnull error) { - __typeof__(self) strongSelf = weakSelf; - - if (strongSelf.retryInterval >= strongSelf.maximumRetryInterval) { - strongSelf.completionHandler(nil, error); - strongSelf.completionHandler = nil; - } else { - [strongSelf performSelector:@selector(retryLoadingPositions) withObject:nil afterDelay:strongSelf.retryInterval]; - strongSelf.retryInterval = MIN(strongSelf.retryInterval * kRetryIntervalBackoffMultiplier, strongSelf.maximumRetryInterval); - } - }]; - - return task; -} - -- (void)retryLoadingPositions -{ - self.retryCount++; - - MPLogInfo(@"Retrying positions (retry attempt #%lu).", (unsigned long)self.retryCount); - - MPURLRequest *request = [[MPURLRequest alloc] initWithURL:[MPAdServerURLBuilder nativePositionUrlForAdUnitId:self.adUnitIdentifier]]; - [self.task cancel]; - self.task = [self httpTaskWithRequest:request]; -} - -- (void)parsePositioningData:(NSData *)data -{ - NSError *deserializationError = nil; - MPClientAdPositioning *positioning = [[MPNativePositionResponseDeserializer deserializer] clientPositioningForData:data error:&deserializationError]; - - if (deserializationError) { - MPLogDebug(@"Position deserialization failed with error: %@", deserializationError); - - NSError *underlyingError = [[deserializationError userInfo] objectForKey:NSUnderlyingErrorKey]; - if ([underlyingError code] == MPNativePositionResponseDataIsEmpty) { - // Empty response data means the developer hasn't assigned any ad positions for the ad - // unit. No point in retrying the request. - self.completionHandler(nil, [NSError errorWithDomain:kPositioningSourceErrorDomain code:MPNativePositionSourceEmptyResponse userInfo:nil]); - self.completionHandler = nil; - } else if (self.retryInterval >= self.maximumRetryInterval) { - self.completionHandler(nil, deserializationError); - self.completionHandler = nil; - } else { - [self performSelector:@selector(retryLoadingPositions) withObject:nil afterDelay:self.retryInterval]; - self.retryInterval = MIN(self.retryInterval * kRetryIntervalBackoffMultiplier, self.maximumRetryInterval); - } - - return; - } - - self.completionHandler(positioning, nil); - self.completionHandler = nil; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeView.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeView.h deleted file mode 100644 index f975fae56..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeView.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// MPNativeView.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@protocol MPNativeViewDelegate; - -@interface MPNativeView : UIView - -@property (nonatomic, weak) id delegate; - -@end - -@protocol MPNativeViewDelegate - -@required - -- (void)nativeViewWillMoveToSuperview:(UIView *)superview; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeView.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeView.m deleted file mode 100644 index 1816befbd..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPNativeView.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// MPNativeView.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeView.h" - -@implementation MPNativeView - -- (void)willMoveToSuperview:(UIView *)superview -{ - [self.delegate nativeViewWillMoveToSuperview:superview]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.h deleted file mode 100644 index 5095687e0..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPTableViewAdPlacerCell.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPTableViewAdPlacerCell : UITableViewCell - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.m deleted file mode 100644 index 3f2f55a42..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewAdPlacerCell.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPTableViewAdPlacerCell.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPTableViewAdPlacerCell.h" - -@implementation MPTableViewAdPlacerCell - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewCellImpressionTracker.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewCellImpressionTracker.h deleted file mode 100644 index a8426f87b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewCellImpressionTracker.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MPTableViewCellImpressionTracker.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@protocol MPTableViewCellImpressionTrackerDelegate; - -@interface MPTableViewCellImpressionTracker : NSObject - -- (id)initWithTableView:(UITableView *)tableView delegate:(id)delegate; -- (void)startTracking; -- (void)stopTracking; - -@end - -@protocol MPTableViewCellImpressionTrackerDelegate - -- (void)tracker:(MPTableViewCellImpressionTracker *)tracker didDetectVisibleRowsAtIndexPaths:(NSArray *)indexPaths; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewCellImpressionTracker.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewCellImpressionTracker.m deleted file mode 100644 index adb88273b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/Internal/MPTableViewCellImpressionTracker.m +++ /dev/null @@ -1,85 +0,0 @@ -// -// MPTableViewCellImpressionTracker.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPTableViewCellImpressionTracker.h" - -@interface MPTableViewCellImpressionTracker () - -@property (nonatomic, strong) UITableView *tableView; -@property (nonatomic, weak) id delegate; -@property (nonatomic, strong) NSTimer *timer; - -@end - -#define MPTableViewCellImpressionTrackerTimeInterval 0.25 - -@implementation MPTableViewCellImpressionTracker - -- (id)initWithTableView:(UITableView *)tableView delegate:(id)delegate -{ - self = [super init]; - if (self) { - _tableView = tableView; - _delegate = delegate; - } - return self; -} - -- (void)dealloc -{ - [_timer invalidate]; -} - -- (void)startTracking -{ - [self.timer invalidate]; - self.timer = [NSTimer timerWithTimeInterval:MPTableViewCellImpressionTrackerTimeInterval target:self selector:@selector(tick:) userInfo:nil repeats:YES]; - - [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes]; -} - -- (void)stopTracking -{ - [self.timer invalidate]; - self.timer = nil; -} - -#pragma mark - Internal - -- (void)tick:(NSTimer *)timer -{ - NSMutableArray *indexPathsForVisibleRows = [[self.tableView indexPathsForVisibleRows] mutableCopy]; - NSUInteger rowCount = [indexPathsForVisibleRows count]; - - // For our purposes, "visible" means that more than half of the cell is on-screen. - // Filter -indexPathsForVisibleRows to fit this definition. - if (rowCount > 1) { - NSIndexPath *firstVisibleRow = [indexPathsForVisibleRows objectAtIndex:0]; - if (![self isMajorityOfCellAtIndexPathVisible:firstVisibleRow]) { - [indexPathsForVisibleRows removeObjectAtIndex:0]; - } - - NSIndexPath *lastVisibleRow = [indexPathsForVisibleRows lastObject]; - if (![self isMajorityOfCellAtIndexPathVisible:lastVisibleRow]) { - [indexPathsForVisibleRows removeLastObject]; - } - } - - if ([indexPathsForVisibleRows count]) { - [self.delegate tracker:self didDetectVisibleRowsAtIndexPaths:[NSArray arrayWithArray:indexPathsForVisibleRows]]; - } -} - -- (BOOL)isMajorityOfCellAtIndexPathVisible:(NSIndexPath *)indexPath -{ - CGRect cellRect = [self.tableView rectForRowAtIndexPath:indexPath]; - CGPoint cellRectMidY = CGPointMake(0, CGRectGetMidY(cellRect)); - return CGRectContainsPoint(self.tableView.bounds, cellRectMidY); -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPAdPositioning.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPAdPositioning.h deleted file mode 100644 index ac9d877d7..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPAdPositioning.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MPAdPositioning.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MPAdPositioning : NSObject - -@property (nonatomic, assign) NSUInteger repeatingInterval; -@property (nonatomic, strong, readonly) NSMutableOrderedSet *fixedPositions; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPAdPositioning.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPAdPositioning.m deleted file mode 100644 index 2164d9af8..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPAdPositioning.m +++ /dev/null @@ -1,40 +0,0 @@ -// -// MPAdPositioning.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdPositioning.h" - -@interface MPAdPositioning () - -@property (nonatomic, strong) NSMutableOrderedSet *fixedPositions; - -@end - -@implementation MPAdPositioning - -- (id)init -{ - self = [super init]; - if (self) { - _fixedPositions = [[NSMutableOrderedSet alloc] init]; - } - - return self; -} - - -#pragma mark - - -- (id)copyWithZone:(NSZone *)zone -{ - MPAdPositioning *newPositioning = [[[self class] allocWithZone:zone] init]; - newPositioning.fixedPositions = [self.fixedPositions copyWithZone:zone]; - newPositioning.repeatingInterval = self.repeatingInterval; - return newPositioning; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPClientAdPositioning.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPClientAdPositioning.h deleted file mode 100644 index 5f0ae087a..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPClientAdPositioning.h +++ /dev/null @@ -1,65 +0,0 @@ -// -// MPClientAdPositioning.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAdPositioning.h" - -/** - * The `MPClientAdPositioning` class is a model that allows you to control the positions where - * native advertisements should appear within a stream. A positioning object works in conjunction - * with an ad placer, giving the ad placer the information it needs to configure the positions and - * frequency of ads. You can specify that ads should appear at fixed index paths and/or at equally - * spaced intervals throughout your content. - * - * Unlike with `MPServerAdPositioning`, which tells an ad placer to obtain its positioning - * information from the MoPub ad server, client ad positioning does not allow you to control your ad - * positions via the MoPub website. - */ - -@interface MPClientAdPositioning : MPAdPositioning - -/** @name Creating a Client Positioning Object */ - -/** - * Creates and returns an empty positioning object. In order for ads to display in a stream, the - * positioning object must either have at least one fixed position or have repeating positions - * enabled. - * - * @return The newly created positioning object. - */ -+ (instancetype)positioning; - -/** - * Tells the positioning object that an ad should be placed at the specified position. - * - * Positions are passed in as absolute index paths within a stream. For example, if you place an - * ad in a table view at a fixed index path with row 1, an ad will appear in row 1, which may shift - * other content items to higher row indexes. - * - * Note: this method uses `NSIndexPath` objects to accommodate streams with multiple sections. If - * your stream does not contain multiple sections, you should pass in index paths with a section - * value of 0. - * - * @param indexPath An index path representing a position for an ad. - */ -- (void)addFixedIndexPath:(NSIndexPath *)indexPath; - -/** - * Tells the positioning object that ads should be displayed evenly throughout a stream using the - * specified interval. - * - * Repeating ads will only appear within a single section. If the receiver has fixed positions, - * the sequence of repeating ads will start to appear following the last registered fixed position. - * If the receiver does not have any fixed positions, ads will appear regularly starting at - * `interval`, within the first section. - * - * @param interval The frequency at which to display ads. This must be a value greater than 1. - */ -- (void)enableRepeatingPositionsWithInterval:(NSUInteger)interval; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPClientAdPositioning.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPClientAdPositioning.m deleted file mode 100644 index de0823fd3..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPClientAdPositioning.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// MPClientAdPositioning.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPClientAdPositioning.h" -#import "MPLogging.h" - -@implementation MPClientAdPositioning - -+ (instancetype)positioning -{ - return [[self alloc] init]; -} - -- (void)addFixedIndexPath:(NSIndexPath *)indexPath -{ - [self.fixedPositions addObject:indexPath]; -} - -- (void)enableRepeatingPositionsWithInterval:(NSUInteger)interval -{ - if (interval > 1) { - self.repeatingInterval = interval; - } else { - MPLogWarn(@"Repeating positions will not be enabled: the provided interval must be greater " - @"than 1."); - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPCollectionViewAdPlacer.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPCollectionViewAdPlacer.h deleted file mode 100644 index c016a8ee8..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPCollectionViewAdPlacer.h +++ /dev/null @@ -1,388 +0,0 @@ -// -// MPCollectionViewAdPlacer.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPClientAdPositioning.h" -#import "MPServerAdPositioning.h" - -@class MPNativeAdRequestTargeting; -@protocol MPCollectionViewAdPlacerDelegate; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * The `MPCollectionViewAdPlacer` class allows you to request native ads from the MoPub ad server - * and place them into a `UICollectionView` object. - * - * When an instance of this class is initialized with a collection view, it wraps the collection - * view's data source and delegate in order to insert ads and adjust the positions of your regular - * content cells. - */ - -@interface MPCollectionViewAdPlacer : NSObject - -@property (nonatomic, weak) id delegate; - -/** @name Initializing a Collection View Ad Placer */ - -/** - * Creates and returns an ad placer that will insert ads into a collection view at positions that can - * be configured dynamically on the MoPub website. - * - * When you make an ad request, the ad placer will ask the MoPub ad server for the positions where - * ads should be inserted into the collection view. You can configure these positioning values by - * editing your ad unit's settings on the MoPub website. - * - * Using this method is equivalent to calling - * +placerWithCollectionView:viewController:adPositioning:defaultAdRenderingClass: and passing in an - * `MPServerAdPositioning` object as the `positioning` parameter. - * - * @param collectionView The collection view in which to insert ads. - * @param controller The view controller which should be used to present modal content. - * @param rendererConfigurations An array of MPNativeAdRendererConfiguration objects that control how - * the native ad is rendered. - * - * @return An `MPCollectionViewAdPlacer` object. - */ -+ (instancetype)placerWithCollectionView:(UICollectionView *)collectionView viewController:(UIViewController *)controller rendererConfigurations:(NSArray *)rendererConfigurations; - -/** - * Creates and returns an ad placer that will insert ads into a collection view. - * - * When using this method, there are two options for controlling the positions where ads appear - * within the collection view. - * - * First, you may pass an `MPServerAdPositioning` object as the `positioning` parameter, which tells - * the ad placer to obtain positioning information dynamically from the ad server, which you can - * configure on the MoPub website. In many cases, this is the preferred approach, since it allows - * you to modify the positions without rebuilding your application. Note that calling the - * convenience method +placerWithCollectionView:viewController:defaultAdRenderingClass: accomplishes - * this as well. - * - * Alternatively, if you wish to hard-code your positions, you may pass an `MPClientAdPositioning` - * object instead. - * - * @param collectionView The collection view in which to insert ads. - * @param controller The view controller which should be used to present modal content. - * @param positioning The positioning object that specifies where ads should be shown in the stream. - * @param rendererConfigurations An array of MPNativeAdRendererConfiguration objects that control how - * the native ad is rendered. - * - * @return An `MPCollectionViewAdPlacer` object. - */ -+ (instancetype)placerWithCollectionView:(UICollectionView *)collectionView viewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations; - -/** @name Requesting Ads */ - -/** - * Requests ads from the MoPub ad server using the specified ad unit ID. - * - * @param adUnitID A string representing a MoPub ad unit ID. - */ -- (void)loadAdsForAdUnitID:(NSString *)adUnitID; - -/** - * Requests ads from the MoPub ad server using the specified ad unit ID and targeting parameters. - * - * @param adUnitID A string representing a MoPub ad unit ID. - * @param targeting An object containing targeting information, such as geolocation data. - */ -- (void)loadAdsForAdUnitID:(NSString *)adUnitID targeting:(MPNativeAdRequestTargeting *)targeting; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * The MoPub SDK adds interfaces to the `UICollectionView` class to help your application with - * responsibilities related to `MPCollectionViewAdPlacer`. These APIs include methods to help notify - * the ad placer of all modifications to the original collection view, as well as to simplify your - * application code such that it does not need to perform index path manipulations to account for - * the presence of ads. - * - * Since the ad placer replaces the original data source and delegate objects of your collection - * view, the SDK also provides new methods for you to set these properties such that the ad placer - * remains aware of the changes. - */ - -@interface UICollectionView (MPCollectionViewAdPlacer) - -- (void)mp_setAdPlacer:(MPCollectionViewAdPlacer *)placer; - -/** @name Obtaining the Collection View Ad Placer */ - -/** - * Returns the ad placer currently being used for this collection view. - * - * @return An ad placer object or `nil` if no ad placer is being used. - */ -- (MPCollectionViewAdPlacer *)mp_adPlacer; - -/** @name Setting and Getting the Delegate and Data Source */ - -/** - * Sets the collection view's data source. - * - * If your application needs to change a collection view's data source after it has instantiated an - * ad placer using that collection view, use this method rather than - * -[UICollectionView setDataSource:]. - * - * @param dataSource The new collection view data source. - */ -- (void)mp_setDataSource:(id)dataSource; - -/** - * Returns the original data source of the collection view. - * - * When you instantiate an ad placer using a collection view, the ad placer replaces the collection - * view's original data source object. If your application needs to access the original data source, - * use this method instead of -[UICollectionView dataSource]. - * - * @return The original collection view data source. - */ -- (id)mp_dataSource; - -/** - * Sets the collection view's delegate. - * - * If your application needs to change a collection view's delegate after it has instantiated an ad - * placer using that collection view, use this method rather than -[UICollectionView setDelegate:]. - * - * @param delegate The new collection view delegate. - */ -- (void)mp_setDelegate:(id)delegate; - -/** - * Returns the original delegate of the collection view. - * - * When you instantiate an ad placer using a collection view, the ad placer replaces the collection - * view's original delegate object. If your application needs to access the original delegate, use - * this method instead of -[UICollectionView delegate]. - * - * @return The original collection view delegate. - */ -- (id)mp_delegate; - -/** @name Notifying the Collection View Ad Placer of Content Changes */ - -/** - * Reloads all of the data for the collection view. - */ -- (void)mp_reloadData; - -/** - * Inserts new items at the specified index paths, and informs the attached ad placer of the - * insertions. - * - * @param indexPaths An array of `NSIndexPath` objects, each of which contains a section index and - * item index at which to insert a new cell. This parameter must not be `nil`. - */ -- (void)mp_insertItemsAtIndexPaths:(NSArray *)indexPaths; - -/** - * Deletes the items at the specified index paths, and informs the attached ad placer of the - * deletions. - * - * @param indexPaths An array of `NSIndexPath` objects, each of which contains a section index and - * item index for the item you want to delete from the collection view. This parameter must not be - * `nil`. - */ -- (void)mp_deleteItemsAtIndexPaths:(NSArray *)indexPaths; - -/** - * Reloads just the items at the specified index paths. - * - * @param indexPaths An array of `NSIndexPath` objects identifying the items you want to update. - */ -- (void)mp_reloadItemsAtIndexPaths:(NSArray *)indexPaths; - -/** - * Moves an item from one location to another in the collection view, taking into account ads - * inserted by the ad placer. - * - * @param indexPath The index path of the item you want to move. This parameter must not be - * `nil`. - * @param newIndexPath The index path of the item’s new location. This parameter must not be `nil`. - */ -- (void)mp_moveItemAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath; - -/** - * Inserts new sections at the specified indexes, and informs the attached ad placer of the - * insertions. - * - * @param sections An index set containing the indexes of the sections you want to insert. This - * parameter must not be `nil`. - */ -- (void)mp_insertSections:(NSIndexSet *)sections; - -/** - * Deletes the sections at the specified indexes, and informs the attached ad placer of the - * deletions. - * - * @param sections The indexes of the sections you want to delete. This parameter must not be `nil`. - */ -- (void)mp_deleteSections:(NSIndexSet *)sections; - -/** - * Reloads the data in the specified sections of the collection view, and informs the attached ad - * placer that sections may have changed. - * - * @param sections The indexes of the sections to reload. - */ -- (void)mp_reloadSections:(NSIndexSet *)sections; - -/** - * Moves a section from one location to another in the collection view, and informs the attached ad - * placer. - * - * @param section The index path of the section you want to move. This parameter must not be - * `nil`. - * @param newSection The index path of the section’s new location. This parameter must not be `nil`. - */ -- (void)mp_moveSection:(NSInteger)section toSection:(NSInteger)newSection; - -/** @name Methods Involving Index Paths */ - -/** - * Returns the visible cell object at the specified index path. - * - * @param indexPath The index path that specifies the section and item number of the cell. - * - * @return The cell object at the corresponding index path or `nil` if the cell is not visible or - * *indexPath* is out of range. - */ -- (UICollectionViewCell *)mp_cellForItemAtIndexPath:(NSIndexPath *)indexPath; - -/** - * Returns a reusable cell object located by its identifier. - * - * @param identifier The reuse identifier for the specified cell. This parameter must not be `nil`. - * @param indexPath The index path specifying the location of the cell. The data source receives - * this information when it is asked for the cell and should just pass it along. This method uses - * the index path to perform additional configuration based on the cell’s position in the collection - * view. - * - * @return A valid `UICollectionReusableView` object. - */ -- (id)mp_dequeueReusableCellWithReuseIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath*)indexPath; - -/** - * Deselects the item at the specified index. - * - * @param indexPath The index path of the item to select. Specifying `nil` results in no change to - * the current selection. - * @param animated Specify YES to animate the change in the selection or NO to make the change - * without animating it. - */ -- (void)mp_deselectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated; - -/** - * Returns the original index path for the given cell or `nil` if the cell is an ad cell. - * - * @param cell The cell object whose index path you want. - * - * @return The index path of the cell or `nil` if the specified cell contains an ad or is not in the - * collection view. - */ -- (NSIndexPath *)mp_indexPathForCell:(UICollectionViewCell *)cell; - -/** - * Returns the index path of the item at the specified point in the collection view. - * - * @param point A point in the collection view’s coordinate system. - * - * @return The index path of the item at the specified point or `nil` if either an ad or no item was - * found at the specified point. - */ -- (NSIndexPath *)mp_indexPathForItemAtPoint:(CGPoint)point; - -/** - * Returns the original index paths (as if no ads were inserted) for the selected items. - * - * @return An array of the original index paths for the selected items. - */ -- (NSArray *)mp_indexPathsForSelectedItems; - -/** - * Returns an array of original index paths each identifying a visible non-ad item in the collection - * view, calculated before any ads were inserted. - * - * @return An array of the original index paths representing visible non-ad items in the collection - * view. Returns `nil` if no items are visible. - */ -- (NSArray *)mp_indexPathsForVisibleItems; - -/** - * Returns the layout information for the item at the specified index path. - * - * @param indexPath The index path of the item. - * - * @return The layout attributes for the item or `nil` if no item exists at the specified path. - */ -- (UICollectionViewLayoutAttributes *)mp_layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath; - -/** - * Scrolls the collection view contents until the specified item is visible. - * - * @param indexPath The index path of the item to scroll into view. - * @param scrollPosition An option that specifies where the item should be positioned when scrolling - * finishes. - * @param animated Specify YES to animate the scrolling behavior or NO to adjust the scroll - * view’s visible content immediately. - */ -- (void)mp_scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:(BOOL)animated; - -/** - * Selects the item at the specified index path and optionally scrolls it into view. - * - * @param indexPath The index path of the item to select. Specifying `nil` for this parameter - * clears the current selection. - * @param animated Specify YES to animate the change in the selection or NO to make the change - * without animating it. - * @param scrollPosition An option that specifies where the item should be positioned when scrolling - * finishes. - */ -- (void)mp_selectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UICollectionViewScrollPosition)scrollPosition; - -/** - * Returns an array of the non-ad cells that are visible in the collection view. - * - * @return An array of `UICollectionViewCell` objects, each representing a visible, non-ad cell in - * the receiving collection view. - */ -- (NSArray *)mp_visibleCells; - -@end - -@protocol MPCollectionViewAdPlacerDelegate - -@optional - -/* - * This method is called when a native ad, placed by the collection view ad placer, will present a modal view controller. - * - * @param placer The collection view ad placer that contains the ad displaying the modal. - */ --(void)nativeAdWillPresentModalForCollectionViewAdPlacer:(MPCollectionViewAdPlacer *)placer; - -/* - * This method is called when a native ad, placed by the collection view ad placer, did dismiss its modal view controller. - * - * @param placer The collection view ad placer that contains the ad that dismissed the modal. - */ --(void)nativeAdDidDismissModalForCollectionViewAdPlacer:(MPCollectionViewAdPlacer *)placer; - -/* - * This method is called when a native ad, placed by the collection view ad placer, will cause the app to background due to user interaction with the ad. - * - * @param placer The collection view ad placer that contains the ad causing the app to background. - */ --(void)nativeAdWillLeaveApplicationFromCollectionViewAdPlacer:(MPCollectionViewAdPlacer *)placer; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPCollectionViewAdPlacer.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPCollectionViewAdPlacer.m deleted file mode 100644 index 5d6995610..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPCollectionViewAdPlacer.m +++ /dev/null @@ -1,655 +0,0 @@ -// -// MPCollectionViewAdPlacer.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPCollectionViewAdPlacer.h" -#import "MPStreamAdPlacer.h" -#import "MPAdPlacerInvocation.h" -#import "MPTimer.h" -#import "MPNativeAdUtils.h" -#import "MPCollectionViewAdPlacerCell.h" -#import "MPNativeAdRendererConfiguration.h" -#import - -static NSString * const kCollectionViewAdPlacerReuseIdentifier = @"MPCollectionViewAdPlacerReuseIdentifier"; - -@protocol MPNativeAdRenderer; - -@interface MPCollectionViewAdPlacer () - -@property (nonatomic, strong) MPStreamAdPlacer *streamAdPlacer; -@property (nonatomic, strong) UICollectionView *collectionView; -@property (nonatomic, weak) id originalDataSource; -@property (nonatomic, weak) id originalDelegate; -@property (nonatomic, strong) MPTimer *insertionTimer; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPCollectionViewAdPlacer - -+ (instancetype)placerWithCollectionView:(UICollectionView *)collectionView viewController:(UIViewController *)controller rendererConfigurations:(NSArray *)rendererConfigurations -{ - return [[self class] placerWithCollectionView:collectionView viewController:controller adPositioning:[MPServerAdPositioning positioning] rendererConfigurations:rendererConfigurations]; -} - -+ (instancetype)placerWithCollectionView:(UICollectionView *)collectionView viewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations -{ - MPCollectionViewAdPlacer *collectionViewAdPlacer = [[MPCollectionViewAdPlacer alloc] initWithCollectionView:collectionView viewController:controller adPositioning:positioning rendererConfigurations:rendererConfigurations]; - return collectionViewAdPlacer; -} - -- (instancetype)initWithCollectionView:(UICollectionView *)collectionView viewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations -{ - for (id rendererConfiguration in rendererConfigurations) { - NSAssert([rendererConfiguration isKindOfClass:[MPNativeAdRendererConfiguration class]], @"A collection view ad placer must be instantiated with rendererConfigurations that are of type MPNativeAdRendererConfiguration."); - } - - if (self = [super init]) { - _collectionView = collectionView; - _streamAdPlacer = [MPStreamAdPlacer placerWithViewController:controller adPositioning:positioning rendererConfigurations:rendererConfigurations]; - _streamAdPlacer.delegate = self; - - _insertionTimer = [MPTimer timerWithTimeInterval:kUpdateVisibleCellsInterval target:self selector:@selector(updateVisibleCells) repeats:YES]; - _insertionTimer.runLoopMode = NSRunLoopCommonModes; - [_insertionTimer scheduleNow]; - - _originalDataSource = collectionView.dataSource; - _originalDelegate = collectionView.delegate; - collectionView.dataSource = self; - collectionView.delegate = self; - - [_collectionView registerClass:[MPCollectionViewAdPlacerCell class] forCellWithReuseIdentifier:kCollectionViewAdPlacerReuseIdentifier]; - - [collectionView mp_setAdPlacer:self]; - } - - return self; -} - -- (void)dealloc -{ - [_insertionTimer invalidate]; -} - -#pragma mark - Public - -- (void)loadAdsForAdUnitID:(NSString *)adUnitID -{ - [self.streamAdPlacer loadAdsForAdUnitID:adUnitID]; -} - -- (void)loadAdsForAdUnitID:(NSString *)adUnitID targeting:(MPNativeAdRequestTargeting *)targeting -{ - [self.streamAdPlacer loadAdsForAdUnitID:adUnitID targeting:targeting]; -} - -#pragma mark - Ad Insertion - -- (void)updateVisibleCells -{ - NSArray *visiblePaths = self.collectionView.mp_indexPathsForVisibleItems; - - if ([visiblePaths count]) { - [self.streamAdPlacer setVisibleIndexPaths:visiblePaths]; - } -} - -#pragma mark - - -- (void)adPlacer:(MPStreamAdPlacer *)adPlacer didLoadAdAtIndexPath:(NSIndexPath *)indexPath -{ - BOOL animationsWereEnabled = [UIView areAnimationsEnabled]; - //We only want to enable animations if the index path is before or within our visible cells - BOOL animationsEnabled = ([(NSIndexPath *)[self.collectionView.indexPathsForVisibleItems lastObject] compare:indexPath] != NSOrderedAscending) && animationsWereEnabled; - - [UIView setAnimationsEnabled:animationsEnabled]; - - [self.collectionView insertItemsAtIndexPaths:@[indexPath]]; - - [UIView setAnimationsEnabled:animationsWereEnabled]; -} - -- (void)adPlacer:(MPStreamAdPlacer *)adPlacer didRemoveAdsAtIndexPaths:(NSArray *)indexPaths -{ - BOOL animationsWereEnabled = [UIView areAnimationsEnabled]; - [UIView setAnimationsEnabled:NO]; - - [self.collectionView performBatchUpdates:^{ - [self.collectionView deleteItemsAtIndexPaths:indexPaths]; - } completion:^(BOOL finished) { - [UIView setAnimationsEnabled:animationsWereEnabled]; - }]; -} - -- (void)nativeAdWillPresentModalForStreamAdPlacer:(MPStreamAdPlacer *)adPlacer -{ - if ([self.delegate respondsToSelector:@selector(nativeAdWillPresentModalForCollectionViewAdPlacer:)]) { - [self.delegate nativeAdWillPresentModalForCollectionViewAdPlacer:self]; - } -} - -- (void)nativeAdDidDismissModalForStreamAdPlacer:(MPStreamAdPlacer *)adPlacer -{ - if ([self.delegate respondsToSelector:@selector(nativeAdDidDismissModalForCollectionViewAdPlacer:)]) { - [self.delegate nativeAdDidDismissModalForCollectionViewAdPlacer:self]; - } -} - -- (void)nativeAdWillLeaveApplicationFromStreamAdPlacer:(MPStreamAdPlacer *)adPlacer -{ - if ([self.delegate respondsToSelector:@selector(nativeAdWillLeaveApplicationFromCollectionViewAdPlacer:)]) { - [self.delegate nativeAdWillLeaveApplicationFromCollectionViewAdPlacer:self]; - } -} - -#pragma mark - - -- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView -{ - if ([self.originalDataSource respondsToSelector:@selector(numberOfSectionsInCollectionView:)]) { - return [self.originalDataSource numberOfSectionsInCollectionView:collectionView]; - } - else { - return 1; - } -} - -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section -{ - NSUInteger numberOfItems = [self.originalDataSource collectionView:collectionView numberOfItemsInSection:section]; - [self.streamAdPlacer setItemCount:numberOfItems forSection:section]; - return [self.streamAdPlacer adjustedNumberOfItems:numberOfItems inSection:section]; -} - -- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - MPCollectionViewAdPlacerCell *cell = (MPCollectionViewAdPlacerCell *)[collectionView dequeueReusableCellWithReuseIdentifier:kCollectionViewAdPlacerReuseIdentifier forIndexPath:indexPath]; - cell.clipsToBounds = YES; - - [self.streamAdPlacer renderAdAtIndexPath:indexPath inView:cell.contentView]; - return cell; - } - - NSIndexPath *originalIndexPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - return [self.originalDataSource collectionView:collectionView cellForItemAtIndexPath:originalIndexPath]; -} - -#pragma mark - - -- (BOOL)collectionView:(UICollectionView *)collectionView canPerformAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - return NO; - } - - id delegate = self.originalDelegate; - if ([delegate respondsToSelector:@selector(collectionView:canPerformAction:forItemAtIndexPath:withSender:)]) { - NSIndexPath *originalPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - return [delegate collectionView:collectionView canPerformAction:action forItemAtIndexPath:originalPath withSender:sender]; - } - - return NO; -} - -- (void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(collectionView:didDeselectItemAtIndexPath:) firstArg:collectionView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with3ArgSelector:@selector(collectionView:didEndDisplayingCell:forItemAtIndexPath:) firstArg:collectionView secondArg:cell thirdArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(collectionView:didHighlightItemAtIndexPath:) firstArg:collectionView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - // The view inside the cell already has a gesture recognizer to handle the tap event. - [self.collectionView deselectItemAtIndexPath:indexPath animated:NO]; - return; - } - - id delegate = self.originalDelegate; - if ([delegate respondsToSelector:@selector(collectionView:didSelectItemAtIndexPath:)]) { - NSIndexPath *originalPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - [delegate collectionView:collectionView didSelectItemAtIndexPath:originalPath]; - } -} - -- (void)collectionView:(UICollectionView *)collectionView didUnhighlightItemAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(collectionView:didUnhighlightItemAtIndexPath:) firstArg:collectionView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (void)collectionView:(UICollectionView *)collectionView performAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - return; - } - - id delegate = self.originalDelegate; - if ([delegate respondsToSelector:@selector(collectionView:performAction:forItemAtIndexPath:withSender:)]) { - NSIndexPath *originalPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - [delegate collectionView:collectionView performAction:action forItemAtIndexPath:originalPath withSender:sender]; - } -} - -- (BOOL)collectionView:(UICollectionView *)collectionView shouldDeselectItemAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(collectionView:shouldDeselectItemAtIndexPath:) firstArg:collectionView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation boolResultForInvocation:invocation defaultValue:YES]; -} - -- (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(collectionView:shouldHighlightItemAtIndexPath:) firstArg:collectionView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation boolResultForInvocation:invocation defaultValue:YES]; -} - -- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(collectionView:shouldSelectItemAtIndexPath:) firstArg:collectionView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation boolResultForInvocation:invocation defaultValue:collectionView.allowsSelection]; -} - -- (BOOL)collectionView:(UICollectionView *)collectionView shouldShowMenuForItemAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(collectionView:shouldShowMenuForItemAtIndexPath:) firstArg:collectionView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation boolResultForInvocation:invocation defaultValue:NO]; -} - -- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.originalDelegate respondsToSelector:@selector(collectionView:willDisplayCell:forItemAtIndexPath:)]) { - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with3ArgSelector:@selector(collectionView:willDisplayCell:forItemAtIndexPath:) firstArg:collectionView secondArg:cell thirdArg:indexPath streamAdPlacer:self.streamAdPlacer]; - } -} - -#pragma mark - UICollectionViewDelegateFlowLayout - -- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - return [self.streamAdPlacer sizeForAdAtIndexPath:indexPath withMaximumWidth:CGRectGetWidth(self.collectionView.bounds)]; - } - - if ([self.originalDelegate respondsToSelector:@selector(collectionView:layout:sizeForItemAtIndexPath:)]) { - NSIndexPath *originalPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - id flowLayout = (id)[self originalDelegate]; - return [flowLayout collectionView:collectionView layout:collectionViewLayout sizeForItemAtIndexPath:originalPath]; - } - return ((UICollectionViewFlowLayout *)collectionViewLayout).itemSize; -} - -#pragma mark - Method Forwarding - -- (BOOL)isKindOfClass:(Class)aClass { - return [super isKindOfClass:aClass] || - [self.originalDataSource isKindOfClass:aClass] || - [self.originalDelegate isKindOfClass:aClass]; -} - -- (BOOL)conformsToProtocol:(Protocol *)aProtocol -{ - return [super conformsToProtocol:aProtocol] || - [self.originalDelegate conformsToProtocol:aProtocol] || - [self.originalDataSource conformsToProtocol:aProtocol]; -} - -- (BOOL)respondsToSelector:(SEL)aSelector -{ - return [super respondsToSelector:aSelector] || - [self.originalDataSource respondsToSelector:aSelector] || - [self.originalDelegate respondsToSelector:aSelector]; -} - -- (id)forwardingTargetForSelector:(SEL)aSelector -{ - if ([self.originalDataSource respondsToSelector:aSelector]) { - return self.originalDataSource; - } else if ([self.originalDelegate respondsToSelector:aSelector]) { - return self.originalDelegate; - } else { - return [super forwardingTargetForSelector:aSelector]; - } -} - -@end - -@implementation UICollectionView (MPCollectionViewAdPlacer) - -static char kAdPlacerKey; - -- (void)mp_setAdPlacer:(MPCollectionViewAdPlacer *)placer -{ - objc_setAssociatedObject(self, &kAdPlacerKey, placer, OBJC_ASSOCIATION_ASSIGN); -} - -- (MPCollectionViewAdPlacer *)mp_adPlacer -{ - return objc_getAssociatedObject(self, &kAdPlacerKey); -} - -- (void)mp_setDelegate:(id)delegate -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - adPlacer.originalDelegate = delegate; - } else { - self.delegate = delegate; - } -} - -- (id)mp_delegate -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - return adPlacer.originalDelegate; - } else { - return self.delegate; - } -} - -- (void)mp_setDataSource:(id)dataSource -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - adPlacer.originalDataSource = dataSource; - } else { - self.dataSource = dataSource; - } -} - -- (id)mp_dataSource -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - return adPlacer.originalDataSource; - } else { - return self.dataSource; - } -} - -- (id)mp_dequeueReusableCellWithReuseIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:indexPath]; - } - - // Only pass nil through if developer passed it through - if (!indexPath || adjustedIndexPath) { - return [self dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:adjustedIndexPath]; - } else { - return nil; - } -} - -- (NSArray *)mp_indexPathsForSelectedItems -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *adjustedIndexPaths = [self indexPathsForSelectedItems]; - - if (adPlacer) { - adjustedIndexPaths = [adPlacer.streamAdPlacer originalIndexPathsForAdjustedIndexPaths:adjustedIndexPaths]; - } - - return adjustedIndexPaths; -} - -- (void)mp_selectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UICollectionViewScrollPosition)scrollPosition -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:indexPath]; - } - - // Only pass nil through if developer passed it through - if (!indexPath || adjustedIndexPath) { - [self selectItemAtIndexPath:adjustedIndexPath animated:animated scrollPosition:scrollPosition]; - } -} - -- (void)mp_deselectItemAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:indexPath]; - } - - [self deselectItemAtIndexPath:adjustedIndexPath animated:animated]; -} - -- (void)mp_reloadData -{ - [self reloadData]; -} - -- (UICollectionViewLayoutAttributes *)mp_layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:indexPath]; - } - - return [self layoutAttributesForItemAtIndexPath:adjustedIndexPath]; -} - -- (NSIndexPath *)mp_indexPathForItemAtPoint:(CGPoint)point -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = [self indexPathForItemAtPoint:point]; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer originalIndexPathForAdjustedIndexPath:adjustedIndexPath]; - } - - return adjustedIndexPath; -} - -- (NSIndexPath *)mp_indexPathForCell:(UICollectionViewCell *)cell -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = [self indexPathForCell:cell]; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer originalIndexPathForAdjustedIndexPath:adjustedIndexPath]; - } - - return adjustedIndexPath; -} - -- (UICollectionViewCell *)mp_cellForItemAtIndexPath:(NSIndexPath *)indexPath -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:adjustedIndexPath]; - } - - return [self cellForItemAtIndexPath:adjustedIndexPath]; -} - -- (NSArray *)mp_visibleCells -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - NSArray *indexPaths = [self mp_indexPathsForVisibleItems]; - NSMutableArray *visibleCells = [NSMutableArray array]; - for (NSIndexPath *indexPath in indexPaths) { - UICollectionViewCell * cell = [self mp_cellForItemAtIndexPath:indexPath]; - if (cell != nil) { - [visibleCells addObject:cell]; - } - } - return visibleCells; - } else { - return [self visibleCells]; - } -} - -- (NSArray *)mp_indexPathsForVisibleItems -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *adjustedIndexPaths = [self indexPathsForVisibleItems]; - - if (adPlacer) { - adjustedIndexPaths = [adPlacer.streamAdPlacer originalIndexPathsForAdjustedIndexPaths:adjustedIndexPaths]; - } - - return adjustedIndexPaths; -} - -- (void)mp_scrollToItemAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UICollectionViewScrollPosition)scrollPosition animated:(BOOL)animated -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:adjustedIndexPath]; - } - - // Only pass nil through if developer passed it through - if (!indexPath || adjustedIndexPath) { - [self scrollToItemAtIndexPath:adjustedIndexPath atScrollPosition:scrollPosition animated:animated]; - } -} - -- (void)mp_insertSections:(NSIndexSet *)sections -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - [adPlacer.streamAdPlacer insertSections:sections]; - } - - [self insertSections:sections]; -} - -- (void)mp_deleteSections:(NSIndexSet *)sections -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - [adPlacer.streamAdPlacer deleteSections:sections]; - } - - [self deleteSections:sections]; -} - -- (void)mp_reloadSections:(NSIndexSet *)sections -{ - [self reloadSections:sections]; -} - -- (void)mp_moveSection:(NSInteger)section toSection:(NSInteger)newSection -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - [adPlacer.streamAdPlacer moveSection:section toSection:newSection]; - } - - [self moveSection:section toSection:newSection]; -} - -- (void)mp_insertItemsAtIndexPaths:(NSArray *)indexPaths -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *adjustedIndexPaths = indexPaths; - - if (adPlacer) { - [adPlacer.streamAdPlacer insertItemsAtIndexPaths:indexPaths]; - adjustedIndexPaths = [adPlacer.streamAdPlacer adjustedIndexPathsForOriginalIndexPaths:indexPaths]; - } - - // We perform the actual UI insertion AFTER updating the stream ad placer's - // data, because the insertion can trigger queries to the data source, which - // needs to reflect the post-insertion state. - [self insertItemsAtIndexPaths:adjustedIndexPaths]; -} - -- (void)mp_deleteItemsAtIndexPaths:(NSArray *)indexPaths -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - [self performBatchUpdates:^{ - NSArray *adjustedIndexPaths = indexPaths; - - if (adPlacer) { - // We need to obtain the adjusted index paths to delete BEFORE we - // update the stream ad placer's data. - adjustedIndexPaths = [adPlacer.streamAdPlacer adjustedIndexPathsForOriginalIndexPaths:indexPaths]; - - [adPlacer.streamAdPlacer deleteItemsAtIndexPaths:indexPaths]; - } - - // We perform the actual UI deletion AFTER updating the stream ad placer's - // data, because the deletion can trigger queries to the data source, which - // needs to reflect the post-deletion state. - [self deleteItemsAtIndexPaths:adjustedIndexPaths]; - } completion:nil]; -} - -- (void)mp_reloadItemsAtIndexPaths:(NSArray *)indexPaths -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *adjustedIndexPaths = indexPaths; - - if (adPlacer) { - adjustedIndexPaths = [adPlacer.streamAdPlacer adjustedIndexPathsForOriginalIndexPaths:indexPaths]; - } - - [self reloadItemsAtIndexPaths:adjustedIndexPaths]; -} - -- (void)mp_moveItemAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath -{ - MPCollectionViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedFrom = indexPath; - NSIndexPath *adjustedTo = newIndexPath; - - if (adPlacer) { - // We need to obtain the adjusted index paths to move BEFORE we - // update the stream ad placer's data. - adjustedFrom = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:indexPath]; - adjustedTo = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:newIndexPath]; - - [adPlacer.streamAdPlacer moveItemAtIndexPath:indexPath toIndexPath:newIndexPath]; - } - - // We perform the actual UI operation AFTER updating the stream ad placer's - // data, because the operation can trigger queries to the data source, which - // needs to reflect the post-operation state. - [self moveItemAtIndexPath:adjustedFrom toIndexPath:adjustedTo]; -} -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAd.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAd.h deleted file mode 100644 index 3dfbe80d0..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAd.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// MPNativeAd.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@protocol MPNativeAdAdapter; -@protocol MPNativeAdDelegate; -@protocol MPNativeAdRenderer; -@class MPAdConfiguration; - -/** - * The `MPNativeAd` class is used to render and manage events for a native advertisement. The - * class provides methods for accessing native ad properties returned by the server, as well as - * convenience methods for URL navigation and metrics-gathering. - */ - -@interface MPNativeAd : NSObject - -/** @name Ad Resources */ - -/** - * The delegate of the `MPNativeAd` object. - */ -@property (nonatomic, weak) id delegate; - -/** - * A dictionary representing the native ad properties. - */ -@property (nonatomic, readonly) NSDictionary *properties; - -- (instancetype)initWithAdAdapter:(id)adAdapter; - -/** @name Retrieving Ad View */ - -/** - * Retrieves a rendered view containing the ad. - * - * @param error A pointer to an error object. If an error occurs, this pointer will be set to an - * actual error object containing the error information. - * - * @return If successful, the method will return a view containing the rendered ad. The method will - * return nil if it cannot render the ad data to a view. - */ -- (UIView *)retrieveAdViewWithError:(NSError **)error; - -- (void)trackMetricForURL:(NSURL *)URL; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAd.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAd.m deleted file mode 100644 index 832383a4b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAd.m +++ /dev/null @@ -1,247 +0,0 @@ -// -// MPNativeAd.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAd+Internal.h" -#import "MPAdConfiguration.h" -#import "MPCoreInstanceProvider.h" -#import "MPNativeAdError.h" -#import "MPLogging.h" -#import "MPNativeCache.h" -#import "MPNativeAdRendering.h" -#import "MPImageDownloadQueue.h" -#import "NSJSONSerialization+MPAdditions.h" -#import "MPNativeCustomEvent.h" -#import "MPNativeAdAdapter.h" -#import "MPNativeAdConstants.h" -#import "MPTimer.h" -#import "MPNativeAdRenderer.h" -#import "MPNativeAdDelegate.h" -#import "MPNativeView.h" -#import "MPHTTPNetworkSession.h" -#import "MPURLRequest.h" - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPNativeAd () - -@property (nonatomic, readwrite, strong) id renderer; - -@property (nonatomic, strong) NSDate *creationDate; - -@property (nonatomic, strong) NSMutableSet *clickTrackerURLs; -@property (nonatomic, strong) NSMutableSet *impressionTrackerURLs; - -@property (nonatomic, readonly, strong) id adAdapter; -@property (nonatomic, assign) BOOL hasTrackedImpression; -@property (nonatomic, assign) BOOL hasTrackedClick; - -@property (nonatomic, copy) NSString *adIdentifier; -@property (nonatomic) MPNativeView *associatedView; - -@property (nonatomic) BOOL hasAttachedToView; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPNativeAd - -- (instancetype)initWithAdAdapter:(id)adAdapter -{ - static int sequenceNumber = 0; - - self = [super init]; - if (self) { - _adAdapter = adAdapter; - if ([_adAdapter respondsToSelector:@selector(setDelegate:)]) { - [_adAdapter setDelegate:self]; - } - _adIdentifier = [[NSString stringWithFormat:@"%d", sequenceNumber++] copy]; - _impressionTrackerURLs = [[NSMutableSet alloc] init]; - _clickTrackerURLs = [[NSMutableSet alloc] init]; - _creationDate = [NSDate date]; - _associatedView = [[MPNativeView alloc] init]; - _associatedView.clipsToBounds = YES; - _associatedView.delegate = self; - - // Add a tap recognizer on top of the view if the ad network isn't handling clicks on its own. - if (!([_adAdapter respondsToSelector:@selector(enableThirdPartyClickTracking)] && [_adAdapter enableThirdPartyClickTracking])) { - UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(adViewTapped)]; - [_associatedView addGestureRecognizer:recognizer]; - } - } - return self; -} - -#pragma mark - Public - -- (UIView *)retrieveAdViewWithError:(NSError **)error -{ - // We always return the same MPNativeView (self.associatedView) so we need to remove its subviews - // before attaching the new ad view to it. Also need to reset the `hasAttachedToView` state - // variable back to `NO` since all of the subviews should be removed. - for (UIView * view in self.associatedView.subviews) { - [view removeFromSuperview]; - } - - if (self.associatedView.subviews.count == 0) { - self.hasAttachedToView = NO; - } - - UIView *adView = [self.renderer retrieveViewWithAdapter:self.adAdapter error:error]; - - if (adView) { - if (!self.hasAttachedToView) { - [self willAttachToView:self.associatedView withAdContentViews:adView.subviews]; - self.hasAttachedToView = YES; - } - - adView.frame = self.associatedView.bounds; - [self.associatedView addSubview:adView]; - - return self.associatedView; - } else { - return nil; - } -} - -- (NSDictionary *)properties -{ - return self.adAdapter.properties; -} - -- (void)trackImpression -{ - if (self.hasTrackedImpression) { - MPLogDebug(@"Impression already tracked."); - return; - } - - MPLogDebug(@"Tracking an impression for %@.", self.adIdentifier); - self.hasTrackedImpression = YES; - [self trackMetricsForURLs:self.impressionTrackerURLs]; -} - -- (void)trackClick -{ - if (self.hasTrackedClick) { - MPLogDebug(@"Click already tracked."); - return; - } - - MPLogDebug(@"Tracking a click for %@.", self.adIdentifier); - self.hasTrackedClick = YES; - [self trackMetricsForURLs:self.clickTrackerURLs]; - - if ([self.adAdapter respondsToSelector:@selector(trackClick)] && ![self isThirdPartyHandlingClicks]) { - [self.adAdapter trackClick]; - } - -} - -- (void)trackMetricsForURLs:(NSSet *)URLs -{ - for (NSURL *URL in URLs) { - [self trackMetricForURL:URL]; - } -} - -- (void)trackMetricForURL:(NSURL *)URL -{ - MPURLRequest *request = [[MPURLRequest alloc] initWithURL:URL]; - [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:nil errorHandler:nil]; -} - -#pragma mark - Internal - -- (void)willAttachToView:(UIView *)view withAdContentViews:(NSArray *)adContentViews { - if ([self.adAdapter respondsToSelector:@selector(willAttachToView:withAdContentViews:)]) { - [self.adAdapter willAttachToView:view withAdContentViews:adContentViews]; - } else if ([self.adAdapter respondsToSelector:@selector(willAttachToView:)]) { - [self.adAdapter willAttachToView:view]; - } -} - -- (BOOL)isThirdPartyHandlingClicks -{ - return [self.adAdapter respondsToSelector:@selector(enableThirdPartyClickTracking)] && [self.adAdapter enableThirdPartyClickTracking]; -} - -- (void)displayAdContent -{ - [self trackClick]; - - if ([self.adAdapter respondsToSelector:@selector(displayContentForURL:rootViewController:)]) { - [self.adAdapter displayContentForURL:self.adAdapter.defaultActionURL rootViewController:[self.delegate viewControllerForPresentingModalView]]; - } else { - // If this method is called, that means that the backing adapter should implement -displayContentForURL:rootViewController:completion:. - // If it doesn't, we'll log a warning. - MPLogWarn(@"Cannot display native ad content. -displayContentForURL:rootViewController:completion: not implemented by native ad adapter: %@", [self.adAdapter class]); - } -} - -#pragma mark - UITapGestureRecognizer - -- (void)adViewTapped -{ - [self displayAdContent]; - - if ([self.renderer respondsToSelector:@selector(nativeAdTapped)]) { - [self.renderer nativeAdTapped]; - } -} - -#pragma mark - MPNativeViewDelegate - -- (void)nativeViewWillMoveToSuperview:(UIView *)superview -{ - if ([self.renderer respondsToSelector:@selector(adViewWillMoveToSuperview:)]) - { - [self.renderer adViewWillMoveToSuperview:superview]; - } -} - -#pragma mark - MPNativeAdAdapterDelegate - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (void)nativeAdWillLogImpression:(id)adAdapter -{ - [self trackImpression]; -} - -- (void)nativeAdDidClick:(id)adAdapter -{ - [self trackClick]; -} - -- (void)nativeAdWillPresentModalForAdapter:(id)adapter -{ - if ([self.delegate respondsToSelector:@selector(willPresentModalForNativeAd:)]) { - [self.delegate willPresentModalForNativeAd:self]; - } -} - -- (void)nativeAdDidDismissModalForAdapter:(id)adapter -{ - if ([self.delegate respondsToSelector:@selector(didDismissModalForNativeAd:)]) { - [self.delegate didDismissModalForNativeAd:self]; - } -} - -- (void)nativeAdWillLeaveApplicationFromAdapter:(id)adapter -{ - if ([self.delegate respondsToSelector:@selector(willLeaveApplicationFromNativeAd:)]) { - [self.delegate willLeaveApplicationFromNativeAd:self]; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdAdapter.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdAdapter.h deleted file mode 100644 index 091dbc0fc..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdAdapter.h +++ /dev/null @@ -1,209 +0,0 @@ -// -// MPNativeAdAdapter.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@protocol MPNativeAdAdapter; - -/** - * Classes that conform to the `MPNativeAdAdapter` protocol can have an - * `MPNativeAdAdapterDelegate` delegate object. You use this delegate to communicate - * native ad events (such as impressions and clicks occurring) back to the MoPub SDK. - */ -@protocol MPNativeAdAdapterDelegate - -@required - -/** - * Asks the delegate for a view controller to use for presenting modal content, such as the in-app - * browser that can appear when an ad is tapped. - * - * @return A view controller that should be used for presenting modal content. - */ -- (UIViewController *)viewControllerForPresentingModalView; - -/** - * You should call this method when your adapter's modal is about to be presented. - * - * @param adapter The adapter that will present the modal. - */ -- (void)nativeAdWillPresentModalForAdapter:(id)adapter; - -/** - * You should call this method when your adapter's modal has been dismissed. - * - * @param adapter The adapter that dismissed the modal. - */ -- (void)nativeAdDidDismissModalForAdapter:(id)adapter; - -/** - * You should call this method when your the user will leave the application due to interaction with the ad. - * - * @param adapter The adapter that represents the ad that caused the user to leave the application. - */ -- (void)nativeAdWillLeaveApplicationFromAdapter:(id)adapter; - -@optional - -/** - * This method is called before the backing native ad logs an impression. - * - * @param adAdapter You should pass `self` to allow the MoPub SDK to associate this event with the - * correct instance of your ad adapter. - */ -- (void)nativeAdWillLogImpression:(id)adAdapter; - -/** - * This method is called when the user interacts with the ad. - * - * @param adAdapter You should pass `self` to allow the MoPub SDK to associate this event with the - * correct instance of your ad adapter. - */ -- (void)nativeAdDidClick:(id)adAdapter; - -@end - -/** - * The `MPNativeAdAdapter` protocol allows the MoPub SDK to interact with native ad objects obtained - * from third-party ad networks. An object that adopts this protocol acts as a wrapper for a native - * ad object, translating its proprietary interface into a common one that the MoPub SDK can - * understand. - * - * An object that adopts this protocol must implement the `properties` property to specify a - * dictionary of assets, such as title and text, that should be rendered as part of a native ad. - * When possible, you should place values in the returned dictionary such that they correspond to - * the pre-defined keys in the MPNativeAdConstants header file. - * - * An adopting object must additionally implement -displayContentForURL:rootViewController:completion: - * to supply the behavior that should occur when the user interacts with the ad. - * - * Optional methods of the protocol allow the adopting object to define when and how impressions - * and interactions should be tracked. - */ -@protocol MPNativeAdAdapter - -@required - -/** @name Ad Resources */ - -/** - * Provides a dictionary of all publicly accessible assets (such as title and text) for the - * native ad. - * - * When possible, you should place values in the returned dictionary such that they correspond to - * the pre-defined keys in the MPNativeAdConstants header file. - */ -@property (nonatomic, readonly) NSDictionary *properties; - -/** - * The default click-through URL for the ad. - * - * This may safely be set to nil if your network doesn't expose this value (for example, it may only - * provide a method to handle a click, lacking another for retrieving the URL itself). - */ -@property (nonatomic, readonly) NSURL *defaultActionURL; - -/** @name Handling Ad Interactions */ - -@optional - -/** - * Tells the object to open the specified URL using an appropriate mechanism. - * - * @param URL The URL to be opened. - * @param controller The view controller that should be used to present the modal view controller. - * - * Your implementation of this method should either forward the request to the underlying - * third-party ad object (if it has built-in support for handling ad interactions), or open an - * in-application modal web browser or a modal App Store controller. - */ -- (void)displayContentForURL:(NSURL *)URL rootViewController:(UIViewController *)controller; - -/** - * Determines whether MPNativeAd should track clicks - * - * If not implemented, this will be assumed to return NO, and MPNativeAd will track clicks. - * If this returns YES, then MPNativeAd will defer to the MPNativeAdAdapterDelegate callbacks to - * track clicks. - */ -- (BOOL)enableThirdPartyClickTracking; - -/** - * Tracks a click for this ad. - * - * To avoid reporting discrepancies, you should only implement this method if the third-party ad - * network requires clicks to be reported manually. - */ -- (void)trackClick; - -/** - * The `MPNativeAdAdapterDelegate` to send messages to as events occur. - * - * The `delegate` object defines several methods that you should call in order to inform MoPub - * of interactions with the ad. This delegate needs to be implemented if third party impression and/or - * click tracking is enabled. - */ -@property (nonatomic, weak) id delegate; - -/** @name Responding to an Ad Being Attached to a View */ - -/** - * This method will be called when your ad's content is about to be loaded into a view. - * - * @param view A view that will contain the ad content. - * - * You should implement this method if the underlying third-party ad object needs to be informed - * of this event. - */ -- (void)willAttachToView:(UIView *)view; - -/** - * This method will be called when your ad's content is about to be loaded into a view; subviews which contain ad - * contents are also included. - * - * Note: If both this method and `willAttachToView:` are implemented, ONLY this method will be called. - * - * @param view A view that will contain the ad content. - * @param adContentViews Array of views that contains the ad's content views. - * - * You should implement this method if the underlying third-party ad object needs to be informed of this event. - */ -- (void)willAttachToView:(UIView *)view withAdContentViews:(NSArray *)adContentViews; - -/** - * This method will be called if your implementation provides a privacy icon through the properties dictionary - * and the user has tapped the icon. - */ -- (void)displayContentForDAAIconTap; - -/** - * Return your ad's privacy information icon view. - * - * You should implement this method if your ad supplies its own view for its privacy information icon. - */ -- (UIView *)privacyInformationIconView; - -/** - * Return your ad's main media view. - * - * You should implement this method if your ad supplies its own view for the main media view which is typically - * an image or video. If you implement this method, the SDK will not make any other attempts at retrieving - * the main media asset. - */ -- (UIView *)mainMediaView; - -/** - * Return your ad's icon view. - * - * You should implement this method if your ad supplies its own view for the icon view which is typically - * an image. If you implement this method, the SDK will not make any other attempts at retrieving - * the icon asset. - */ -- (UIView *)iconMediaView; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdConstants.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdConstants.h deleted file mode 100644 index e628cd02a..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdConstants.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// MPNativeAdConstants.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -extern const CGFloat kUniversalStarRatingScale; -extern const CGFloat kStarRatingMaxValue; -extern const CGFloat kStarRatingMinValue; -extern const NSTimeInterval kDefaultRequiredSecondsForImpression; - -/** @name MPNativeAd asset keys */ - -extern NSString *const kAdTitleKey; -extern NSString *const kAdTextKey; -extern NSString *const kAdIconImageKey; -extern NSString *const kAdIconImageViewKey; -extern NSString *const kAdMainImageKey; -extern NSString *const kAdMainMediaViewKey; -extern NSString *const kAdCTATextKey; -extern NSString *const kAdStarRatingKey; -extern NSString *const kVideoConfigKey; -extern NSString *const kVASTVideoKey; -extern NSString *const kNativeAdConfigKey; -extern NSString *const kAdPrivacyIconImageUrlKey; -extern NSString *const kAdPrivacyIconUIImageKey; -extern NSString *const kAdPrivacyIconClickUrlKey; - -extern NSString *const kPrivacyIconImageName; -extern NSString *const kPrivacyIconTapDestinationURL; -extern NSString *const kImpressionTrackerURLsKey; -extern NSString *const kDefaultActionURLKey; -extern NSString *const kClickTrackerURLKey; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdConstants.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdConstants.m deleted file mode 100644 index 3b1ccc0fd..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdConstants.m +++ /dev/null @@ -1,35 +0,0 @@ -// -// MPNativeAdConstants.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdConstants.h" - -const CGFloat kUniversalStarRatingScale = 5.0f; -const CGFloat kStarRatingMaxValue = 5.0f; -const CGFloat kStarRatingMinValue = 0.0f; -const NSTimeInterval kDefaultRequiredSecondsForImpression = 1.0; - -NSString *const kAdTitleKey = @"title"; -NSString *const kAdTextKey = @"text"; -NSString *const kAdIconImageKey = @"iconimage"; -NSString *const kAdIconImageViewKey = @"iconimageview"; -NSString *const kAdMainImageKey = @"mainimage"; -NSString *const kAdMainMediaViewKey = @"mainmediaview"; -NSString *const kAdCTATextKey = @"ctatext"; -NSString *const kAdStarRatingKey = @"starrating"; -NSString *const kVideoConfigKey = @"videoconfig"; -NSString *const kVASTVideoKey = @"video"; -NSString *const kNativeAdConfigKey = @"nativeadconfig"; -NSString *const kAdPrivacyIconImageUrlKey = @"privacyicon"; -NSString *const kAdPrivacyIconUIImageKey = @"privacyiconuiimage"; -NSString *const kAdPrivacyIconClickUrlKey = @"privacyclkurl"; - -NSString *const kPrivacyIconImageName = @"MPDAAIcon.png"; -NSString *const kPrivacyIconTapDestinationURL = @"https://www.mopub.com/optout"; -NSString *const kImpressionTrackerURLsKey = @"imptracker"; -NSString *const kDefaultActionURLKey = @"clk"; -NSString *const kClickTrackerURLKey = @"clktracker"; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdData.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdData.h deleted file mode 100644 index 2cfbe833d..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdData.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// MPNativeAdData.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPNativeAd; - -@interface MPNativeAdData : NSObject - -@property (nonatomic, copy) NSString *adUnitID; -@property (nonatomic, strong) MPNativeAd *ad; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdData.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdData.m deleted file mode 100644 index 920b8d5a2..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdData.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPNativeAdData.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdData.h" - -@implementation MPNativeAdData - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdDelegate.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdDelegate.h deleted file mode 100644 index 13c967bd0..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdDelegate.h +++ /dev/null @@ -1,52 +0,0 @@ -// -// MPNativeAdDelegate.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -/** - * The delegate of an `MPNativeAd` object must adopt the `MPNativeAdDelegate` protocol. It must - * implement `viewControllerForPresentingModalView` to provide a root view controller from which - * the ad view should present modal content. - */ -@class MPNativeAd; -@protocol MPNativeAdDelegate - -@optional - -/** - * Sent when the native ad will present its modal content. - * - * @param nativeAd The native ad sending the message. - */ -- (void)willPresentModalForNativeAd:(MPNativeAd *)nativeAd; - -/** - * Sent when a native ad has dismissed its modal content, returning control to your application. - * - * @param nativeAd The native ad sending the message. - */ -- (void)didDismissModalForNativeAd:(MPNativeAd *)nativeAd; - -/** - * Sent when a user is about to leave your application as a result of tapping this native ad. - * - * @param nativeAd The native ad sending the message. - */ -- (void)willLeaveApplicationFromNativeAd:(MPNativeAd *)nativeAd; - -@required - -/** @name Managing Modal Content Presentation */ - -/** - * Asks the delegate for a view controller to use for presenting modal content, such as the in-app - * browser that can appear when an ad is tapped. - * - * @return A view controller that should be used for presenting modal content. - */ -- (UIViewController *)viewControllerForPresentingModalView; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdError.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdError.h deleted file mode 100644 index ed2b46026..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdError.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// MPNativeAdError.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -typedef enum MPNativeAdErrorCode { - MPNativeAdErrorUnknown = -1, - - MPNativeAdErrorHTTPError = -1000, - MPNativeAdErrorInvalidServerResponse = -1001, - MPNativeAdErrorNoInventory = -1002, - MPNativeAdErrorImageDownloadFailed = -1003, - MPNativeAdErrorAdUnitWarmingUp = -1004, - MPNativeAdErrorVASTParsingFailed = -1005, - MPNativeAdErrorVideoConfigInvalid = -1006, - - MPNativeAdErrorContentDisplayError = -1100, - MPNativeAdErrorRenderError = -1200 -} MPNativeAdErrorCode; - -extern NSString * const MoPubNativeAdsSDKDomain; - -NSError *MPNativeAdNSErrorForInvalidAdServerResponse(NSString *reason); -NSError *MPNativeAdNSErrorForAdUnitWarmingUp(void); -NSError *MPNativeAdNSErrorForNoInventory(void); -NSError *MPNativeAdNSErrorForNetworkConnectionError(void); -NSError *MPNativeAdNSErrorForInvalidImageURL(void); -NSError *MPNativeAdNSErrorForImageDownloadFailure(void); -NSError *MPNativeAdNSErrorForContentDisplayErrorMissingRootController(void); -NSError *MPNativeAdNSErrorForContentDisplayErrorInvalidURL(void); -NSError *MPNativeAdNSErrorForVASTParsingFailure(void); -NSError *MPNativeAdNSErrorForVideoConfigInvalid(void); -NSError *MPNativeAdNSErrorForRenderValueTypeError(void); diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdError.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdError.m deleted file mode 100644 index 10e1a080d..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdError.m +++ /dev/null @@ -1,59 +0,0 @@ -// -// MPNativeAdError.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdError.h" - -NSString * const MoPubNativeAdsSDKDomain = @"com.mopub.nativeads"; - -NSError *MPNativeAdNSErrorForInvalidAdServerResponse(NSString *reason) { - if (reason.length == 0) { - reason = @"Invalid ad server response"; - } - - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorInvalidServerResponse userInfo:@{NSLocalizedDescriptionKey : [reason copy]}]; -} - -NSError *MPNativeAdNSErrorForAdUnitWarmingUp() { - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorAdUnitWarmingUp userInfo:@{NSLocalizedDescriptionKey : @"Ad unit is warming up"}]; -} - -NSError *MPNativeAdNSErrorForNoInventory() { - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorNoInventory userInfo:@{NSLocalizedDescriptionKey : @"Ad server returned no inventory"}]; -} - -NSError *MPNativeAdNSErrorForNetworkConnectionError() { - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorHTTPError userInfo:@{NSLocalizedDescriptionKey : @"Connection error"}]; -} - -NSError *MPNativeAdNSErrorForInvalidImageURL() { - return MPNativeAdNSErrorForInvalidAdServerResponse(@"Invalid image URL"); -} - -NSError *MPNativeAdNSErrorForImageDownloadFailure() { - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorImageDownloadFailed userInfo:@{NSLocalizedDescriptionKey : @"Failed to download images"}]; -} - -NSError *MPNativeAdNSErrorForVASTParsingFailure() { - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorVASTParsingFailed userInfo:@{NSLocalizedDescriptionKey : @"Failed to parse VAST tag"}]; -} - -NSError *MPNativeAdNSErrorForVideoConfigInvalid() { - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorVideoConfigInvalid userInfo:@{NSLocalizedDescriptionKey : @"Native Video Config Values in Adserver response are invalid"}]; -} - -NSError *MPNativeAdNSErrorForContentDisplayErrorMissingRootController() { - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorContentDisplayError userInfo:@{NSLocalizedDescriptionKey : @"Cannot display content without a root view controller"}]; -} - -NSError *MPNativeAdNSErrorForContentDisplayErrorInvalidURL() { - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorContentDisplayError userInfo:@{NSLocalizedDescriptionKey : @"Cannot display content without a valid URL"}]; -} - -NSError *MPNativeAdNSErrorForRenderValueTypeError() { - return [NSError errorWithDomain:MoPubNativeAdsSDKDomain code:MPNativeAdErrorRenderError userInfo:@{NSLocalizedDescriptionKey : @"Native ad property was an incorrect data type"}]; -} diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderer.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderer.h deleted file mode 100644 index 5d530b594..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderer.h +++ /dev/null @@ -1,107 +0,0 @@ -// -// MPNativeAdRenderer.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@protocol MPNativeAdAdapter; -@protocol MPNativeAdRendererSettings; -@class MPNativeAdRendererConfiguration; - -/** - * Provide an implementation of this handler for your renderer settings. - * - * @param maximumWidth Max width of the ad expected to be rendered as. - * - * @return Size of the view as rendered given the maximum width desired. - */ -typedef CGSize (^MPNativeViewSizeHandler)(CGFloat maximumWidth); - -/** - * The MoPub SDK has a concept of native ad renderer that allows you to render the ad however you want. It also gives you the - * ability to expose configurable properties through renderer settings objects to the application that influence how you render - * your native custom event's view. - * - * Your renderer should implement this protocol. Your renderer is responsible for rendering the network's ad data into a view - * when `-retrieveViewWithAdapter:error:` is called. Your renderer will be asked to render the native ad if your renderer configuration - * indicates that your renderer supports your specific native ad network. - * - * Finally, your renderer will live as long as the ad adapter so you may store data in your renderer if necessary. - */ -@protocol MPNativeAdRenderer - -@required - -/** - * You must construct and return an MPNativeAdRendererConfiguration object specific for your renderer. You must - * set all the properties on the configuration object. - * - * @param rendererSettings Application defined settings that you should store in the configuration object that you - * construct. - * - * @return A configuration object that allows the MoPub SDK to instantiate your renderer with the application - * settings and for the supported ad types. - */ -+ (MPNativeAdRendererConfiguration *)rendererConfigurationWithRendererSettings:(id)rendererSettings; - -/** - * This is the init method that will be called when the MoPub SDK initializes your renderer. - * - * @param rendererSettings The renderer settings object that corresponds to your renderer. - */ -- (instancetype)initWithRendererSettings:(id)rendererSettings; - -/** - * You must return a native ad view when `-retrieveViewWithAdapter:error:` is called. Ideally, you should create a native view - * each time this is called as holding onto the view may end up consuming a lot of memory when many ads are being shown. - * However, it is OK to hold a strong reference to the view if you must. - * - * @param adapter Your custom event's adapter class that contains the network specific data necessary to render the ad to - * a view. - * @param error If you can't construct a view for whatever reason, you must fill in this error object. - * - * @return If successful, the method will return a native view presenting the ad. If it - * is unsuccessful at retrieving a view, it will return nil and create - * an error object for the error parameter. - */ -- (UIView *)retrieveViewWithAdapter:(id)adapter error:(NSError **)error; - -@optional - -/** - * The viewSizeHandler is used to allow the app to configure its native ad view size - * given a maximum width when using ad placer solutions. This is not called when the - * app is manually integrating native ads. - * - * You should obtain the renderer's viewSizeHandler from the settings object in - * `-initWithRendererSettings:`. - */ -@property (nonatomic, readonly) MPNativeViewSizeHandler viewSizeHandler; - -/** - * The MoPubSDK will notify your renderer when your native ad's view has moved in - * the hierarchy. superview will be nil if the native ad's view has been removed - * from the view hierarchy. - * - * The view your renderer creates is attached to another view before being added - * to the view hierarchy. As a result, the superview argument will not be the renderer's ad view's superview. - * - * @param superview The app's view that contains the native ad view. There is an - * intermediate view between the renderer's ad view and the app's view. - */ -- (void)adViewWillMoveToSuperview:(UIView *)superview; - -/** - * - * The MoPubSDK will call this method when the user has tapped the ad and will - * invoke the clickthrough action. - * - */ -- (void)nativeAdTapped; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.h deleted file mode 100644 index 0bca54c81..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// MPNativeAdRendererConfiguration.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@protocol MPNativeAdRendererSettings; - -/* - * All native ads loaded with the MoPub SDK take a renderer configuration object. This object links - * the necessary native ad objects together. - * - * The configuration stores the renderer settings that will eventually be used when initializing the - * render class. Furthermore, the configuration indicates what custom events the renderer class supports - * through the supportedCustomEvents property. - */ -@interface MPNativeAdRendererConfiguration : NSObject - -/* - * The settings that inform the ad renderer about how it should render the ad. - */ -@property (nonatomic, strong) id rendererSettings; - -/* - * The renderer class used to render supported custom events. - */ -@property (nonatomic, assign) Class rendererClass; - -/* - * An array of custom event class names (as strings) that the renderClass can - * render. - */ -@property (nonatomic, strong) NSArray *supportedCustomEvents; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.m deleted file mode 100644 index 5a35bedab..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererConfiguration.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPNativeAdRendererConfiguration.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdRendererConfiguration.h" - -@implementation MPNativeAdRendererConfiguration - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererSettings.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererSettings.h deleted file mode 100644 index e44ca61e5..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendererSettings.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// MPNativeAdRendererSettings.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPNativeAdRenderer.h" - -/* - * Renderer settings are objects that allow you to expose configurable properties to the application. - * You renderer will be initialized with these settings. - * - * You should create a renderer settings object that adheres to this protocol and exposes configurable - * configurable properties for your renderer class. - */ -@protocol MPNativeAdRendererSettings - -@optional - -/** - * The viewSizeHandler is used to allow the app to configure its native ad view size - * given a maximum width when using ad placer solutions. This is not called when the - * app is manually integrating native ads. - * - * Your renderer settings object should expose a settable viewSizeHandler property so the - * application can choose how it wants to size its ad views. Your renderer will be able - * to use the view size handler from your settings object. - */ -@property (nonatomic, readwrite, copy) MPNativeViewSizeHandler viewSizeHandler; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendering.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendering.h deleted file mode 100644 index d0f567f0c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRendering.h +++ /dev/null @@ -1,106 +0,0 @@ -// -// MPNativeAdRendering.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -#import "MPNativeAd.h" - -@class MPNativeAdRenderingImageLoader; - -/** - * The MPNativeAdRendering protocol provides methods for displaying ad content in - * custom view classes. - * - * It can be used for both static native ads and native video ads. If you are serving - * native video ads, you need to implement nativeVideoView. - */ - -@protocol MPNativeAdRendering - -@optional - -/** - * Return the UILabel that your view is using for the main text. - * - * @return a UILabel that is used for the main text. - */ -- (UILabel *)nativeMainTextLabel; - -/** - * Return the UILabel that your view is using for the title text. - * - * @return a UILabel that is used for the title text. - */ -- (UILabel *)nativeTitleTextLabel; - -/** - * Return the UIImageView that your view is using for the icon image. - * - * @return a UIImageView that is used for the icon image. - */ -- (UIImageView *)nativeIconImageView; - -/** - * Return the UIImageView that your view is using for the main image. - * - * @return a UIImageView that is used for the main image. - */ -- (UIImageView *)nativeMainImageView; - -/** - * Return the UIView that your view is using for the video. - * You only need to implement this when you are serving video ads. - * - * @return a UIView that is used to hold the video. - */ - -- (UIView *)nativeVideoView; - -/** - * Returns the UILabel that your view is using for the call to action (cta) text. - * - * @return a UILabel that is used for the cta text. - */ -- (UILabel *)nativeCallToActionTextLabel; - -/** - * Returns the UIImageView that your view is using for the privacy information icon. - * - * @return a UIImageView that is used for the privacy information icon. - */ -- (UIImageView *)nativePrivacyInformationIconImageView; - -/** - * This method is called if the ad contains a star rating. - * - * Implement this method if you expect and wish to display a star rating. - * - * @param starRating An NSNumber that is a float in the range of 0.0f and 5.0f. - */ -- (void)layoutStarRating:(NSNumber *)starRating; - -/** - * This method allows you to insert your custom native ad elements into your view. - * - * This method will be called when your ad view is added to the view hierarchy. - * - * @param customProperties Dictionary that contains custom native ad elements. - * @param imageLoader Use this object to load your custom images by calling `loadImageForURL:intoImageView:`. - */ -- (void)layoutCustomAssetsWithProperties:(NSDictionary *)customProperties imageLoader:(MPNativeAdRenderingImageLoader *)imageLoader; - -/** - * Specifies a nib object containing a view that should be used to render ads. - * - * If you want to use a nib object to render ads, you must implement this method. - * - * @return an initialized UINib object. This is not allowed to be `nil`. - */ -+ (UINib *)nibForAd; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.h deleted file mode 100644 index 4b3d8e7ae..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPNativeAdRenderingImageLoader.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPNativeAdRendererImageHandler; - -@interface MPNativeAdRenderingImageLoader : NSObject - -- (instancetype)initWithImageHandler:(MPNativeAdRendererImageHandler *)imageHandler; - -- (void)loadImageForURL:(NSURL *)url intoImageView:(UIImageView *)imageView; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.m deleted file mode 100644 index 9bc3ee238..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRenderingImageLoader.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// MPNativeAdRenderingImageLoader.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdRenderingImageLoader.h" -#import "MPNativeAdRendererImageHandler.h" - -@interface MPNativeAdRenderingImageLoader () - -@property (nonatomic) MPNativeAdRendererImageHandler *imageHandler; - -@end - -@implementation MPNativeAdRenderingImageLoader - -- (instancetype)initWithImageHandler:(MPNativeAdRendererImageHandler *)imageHandler -{ - if (self = [super init]) { - _imageHandler = imageHandler; - } - - return self; -} - -- (void)loadImageForURL:(NSURL *)url intoImageView:(UIImageView *)imageView -{ - [self.imageHandler loadImageForURL:url intoImageView:imageView]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequest.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequest.h deleted file mode 100644 index ec1bbd698..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequest.h +++ /dev/null @@ -1,63 +0,0 @@ -// -// MPNativeAdRequest.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPNativeAd; -@class MPNativeAdRequest; -@class MPNativeAdRequestTargeting; - -typedef void(^MPNativeAdRequestHandler)(MPNativeAdRequest *request, - MPNativeAd *response, - NSError *error); - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * The `MPNativeAdRequest` class is used to manage individual requests to the MoPub ad server for - * native ads. - * - * @warning **Note:** This class is meant for one-off requests for which you intend to manually - * process the native ad response. If you are using `MPTableViewAdPlacer` or - * `MPCollectionViewAdPlacer` to display ads, there should be no need for you to use this class. - */ - -@interface MPNativeAdRequest : NSObject - -/** @name Targeting Information */ - -/** - * An object representing targeting parameters that can be passed to the MoPub ad server to - * serve more relevant advertising. - */ -@property (nonatomic, strong) MPNativeAdRequestTargeting *targeting; - -/** @name Initializing and Starting an Ad Request */ - -/** - * Initializes a request object. - * - * @param identifier The ad unit identifier for this request. An ad unit is a defined placement in - * your application set aside for advertising. Ad unit IDs are created on the MoPub website. - * - * @param rendererConfigurations An array of MPNativeAdRendererConfiguration objects that control how - * the native ad is rendered. - * - * @return An `MPNativeAdRequest` object. - */ -+ (MPNativeAdRequest *)requestWithAdUnitIdentifier:(NSString *)identifier rendererConfigurations:(NSArray *)rendererConfigurations; - -/** - * Executes a request to the MoPub ad server. - * - * @param handler A block to execute when the request finishes. The block includes as parameters the - * request itself and either a valid MPNativeAd or an NSError object indicating failure. - */ -- (void)startWithCompletionHandler:(MPNativeAdRequestHandler)handler; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequest.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequest.m deleted file mode 100644 index c34980992..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequest.m +++ /dev/null @@ -1,381 +0,0 @@ -// -// MPNativeAdRequest.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdRequest.h" - -#import "MPAdServerURLBuilder.h" -#import "MPCoreInstanceProvider.h" -#import "MPNativeAdError.h" -#import "MPNativeAd+Internal.h" -#import "MPNativeAdRequestTargeting.h" -#import "MPLogging.h" -#import "MPImageDownloadQueue.h" -#import "MPConstants.h" -#import "MPNativeAdConstants.h" -#import "MPNativeCustomEventDelegate.h" -#import "MPNativeCustomEvent.h" -#import "MOPUBNativeVideoAdConfigValues.h" -#import "MOPUBNativeVideoCustomEvent.h" -#import "NSJSONSerialization+MPAdditions.h" -#import "MPAdServerCommunicator.h" -#import "MPNativeAdRenderer.h" -#import "MPMoPubNativeCustomEvent.h" -#import "MPNativeAdRendererConfiguration.h" -#import "NSMutableArray+MPAdditions.h" -#import "MPTimer.h" -#import "MPError.h" -#import "NSDate+MPAdditions.h" -#import "NSError+MPAdditions.h" - -static NSString * const kNativeAdErrorDomain = @"com.mopub.NativeAd"; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPNativeAdRequest () - -@property (nonatomic, copy) NSString *adUnitIdentifier; -@property (nonatomic) NSArray *rendererConfigurations; -@property (nonatomic, strong) NSURL *URL; -@property (nonatomic, strong) MPAdServerCommunicator *communicator; -@property (nonatomic, copy) MPNativeAdRequestHandler completionHandler; -@property (nonatomic, strong) MPNativeCustomEvent *nativeCustomEvent; -@property (nonatomic, strong) MPAdConfiguration *adConfiguration; -@property (nonatomic, strong) NSMutableArray *remainingConfigurations; -@property (nonatomic) id customEventRenderer; -@property (nonatomic, assign) BOOL loading; -@property (nonatomic, strong) MPTimer *timeoutTimer; -@property (nonatomic, assign) NSTimeInterval adapterLoadStartTimestamp; - -@end - -@implementation MPNativeAdRequest - -- (id)initWithAdUnitIdentifier:(NSString *)identifier rendererConfigurations:(NSArray *)rendererConfigurations -{ - self = [super init]; - if (self) { - _adUnitIdentifier = [identifier copy]; - _communicator = [[MPAdServerCommunicator alloc] initWithDelegate:self]; - _rendererConfigurations = rendererConfigurations; - } - return self; -} - -- (void)dealloc -{ - [_communicator cancel]; - [_communicator setDelegate:nil]; - [_nativeCustomEvent setDelegate:nil]; -} - -#pragma mark - Public - -+ (MPNativeAdRequest *)requestWithAdUnitIdentifier:(NSString *)identifier rendererConfigurations:(NSArray *)rendererConfigurations -{ - return [[self alloc] initWithAdUnitIdentifier:identifier rendererConfigurations:rendererConfigurations]; -} - -- (void)startWithCompletionHandler:(MPNativeAdRequestHandler)handler -{ - if (handler) { - self.URL = [MPAdServerURLBuilder URLWithAdUnitID:self.adUnitIdentifier - keywords:self.targeting.keywords - userDataKeywords:self.targeting.userDataKeywords - location:self.targeting.location - desiredAssets:[self.targeting.desiredAssets allObjects] - viewability:NO]; - - [self assignCompletionHandler:handler]; - - [self loadAdWithURL:self.URL]; - } else { - MPLogWarn(@"Native Ad Request did not start - requires completion handler block."); - } -} - -- (void)startForAdSequence:(NSInteger)adSequence withCompletionHandler:(MPNativeAdRequestHandler)handler -{ - if (handler) { - self.URL = [MPAdServerURLBuilder URLWithAdUnitID:self.adUnitIdentifier - keywords:self.targeting.keywords - userDataKeywords:self.targeting.userDataKeywords - location:self.targeting.location - desiredAssets:[self.targeting.desiredAssets allObjects] - adSequence:adSequence - viewability:NO]; - - [self assignCompletionHandler:handler]; - - [self loadAdWithURL:self.URL]; - } else { - MPLogWarn(@"Native Ad Request did not start - requires completion handler block."); - } -} - -#pragma mark - Private - -- (void)assignCompletionHandler:(MPNativeAdRequestHandler)handler -{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-retain-cycles" - // we explicitly create a block retain cycle here to prevent self from being deallocated if the developer - // removes his strong reference to the request. This retain cycle is broken in - // - (void)completeAdRequestWithAdObject:(MPNativeAd *)adObject error:(NSError *)error - // when self.completionHandler is set to nil. - self.completionHandler = ^(MPNativeAdRequest *request, MPNativeAd *response, NSError *error) { - handler(self, response, error); - }; -#pragma clang diagnostic pop -} - -- (void)loadAdWithURL:(NSURL *)URL -{ - if (self.loading) { - MPLogWarn(@"Native ad request is already loading an ad. Wait for previous load to finish."); - return; - } - - self.loading = YES; - [self.communicator loadURL:URL]; -} - -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration -{ - if (configuration.customEventClass) { - MPLogInfo(@"Looking for custom event class named %@.", configuration.customEventClass); - } - - [self startTimeoutTimer]; - - // For MoPub native ads, set the classData to be the adResponseData - if ((configuration.customEventClass == [MPMoPubNativeCustomEvent class]) || (configuration.customEventClass == [MOPUBNativeVideoCustomEvent class])) { - NSError *error; - NSMutableDictionary *classData = [NSJSONSerialization mp_JSONObjectWithData:configuration.adResponseData - options:0 - clearNullObjects:YES - error:&error]; - if (configuration.customEventClass == [MOPUBNativeVideoCustomEvent class]) { - classData[kNativeAdConfigKey] = [[MOPUBNativeVideoAdConfigValues alloc] initWithPlayVisiblePercent:configuration.nativeVideoPlayVisiblePercent - pauseVisiblePercent:configuration.nativeVideoPauseVisiblePercent - impressionMinVisiblePixels:configuration.nativeImpressionMinVisiblePixels - impressionMinVisiblePercent:configuration.nativeImpressionMinVisiblePercent - impressionMinVisibleSeconds:configuration.nativeImpressionMinVisibleTimeInterval - maxBufferingTime:configuration.nativeVideoMaxBufferingTime - trackers:configuration.nativeVideoTrackers]; - } else if (configuration.customEventClass == [MPMoPubNativeCustomEvent class]) { - classData[kNativeAdConfigKey] = [[MPNativeAdConfigValues alloc] initWithImpressionMinVisiblePixels:configuration.nativeImpressionMinVisiblePixels - impressionMinVisiblePercent:configuration.nativeImpressionMinVisiblePercent - impressionMinVisibleSeconds:configuration.nativeImpressionMinVisibleTimeInterval]; - } - - configuration.customEventClassData = classData; - } - - // See if we have a renderer that we can use for the custom event now so we can fail early. - NSString *customEventClassName = NSStringFromClass(configuration.customEventClass); - MPNativeAdRendererConfiguration *customEventRendererConfig = nil; - - for (MPNativeAdRendererConfiguration *rendererConfig in self.rendererConfigurations) { - NSArray *supportedCustomEvents = rendererConfig.supportedCustomEvents; - - if ([supportedCustomEvents containsObject:customEventClassName]) { - customEventRendererConfig = rendererConfig; - break; - } - } - - if (customEventRendererConfig == nil) { - NSString * noRendererErrorMessage = [NSString stringWithFormat:@"Could not find renderer configuration for custom event class: %@", NSStringFromClass(configuration.customEventClass)]; - NSError * noRendererError = [MOPUBError errorWithCode:MOPUBErrorNoRenderer localizedDescription:noRendererErrorMessage]; - MPLogError(noRendererErrorMessage); - - [self nativeCustomEvent:nil didFailToLoadAdWithError:noRendererError]; - return; - } - // Create a renderer from the config. - self.customEventRenderer = [[customEventRendererConfig.rendererClass alloc] initWithRendererSettings:customEventRendererConfig.rendererSettings]; - - MPNativeCustomEvent *customEvent = [[configuration.customEventClass alloc] init]; - if (![customEvent isKindOfClass:[MPNativeCustomEvent class]]) { - NSString * invalidCustomEventErrorMessage = [NSString stringWithFormat:@"Custom Event Class: %@ does not extend MPNativeCustomEvent", NSStringFromClass(configuration.customEventClass)]; - NSError * invalidCustomEventError = [MOPUBError errorWithCode:MOPUBErrorNoRenderer localizedDescription:invalidCustomEventErrorMessage]; - MPLogError(invalidCustomEventErrorMessage); - - [self nativeCustomEvent:nil didFailToLoadAdWithError:invalidCustomEventError]; - return; - } - customEvent.delegate = self; - customEvent.localExtras = self.targeting.localExtras; - self.nativeCustomEvent = customEvent; - - [self.nativeCustomEvent requestAdWithCustomEventInfo:configuration.customEventClassData adMarkup:configuration.advancedBidPayload]; -} - -- (void)failAdRequest { - if (self.adConfiguration.nextURL == nil || [[self.adConfiguration.nextURL absoluteString] length] == 0) { - [self completeAdRequestWithAdObject:nil error:MPNativeAdNSErrorForInvalidAdServerResponse(nil)]; - return; - } - - self.loading = NO; - [self loadAdWithURL:self.adConfiguration.nextURL]; -} - -- (void)completeAdRequestWithAdObject:(MPNativeAd *)adObject error:(NSError *)error -{ - [self didStopLoading]; - - self.loading = NO; - self.remainingConfigurations = nil; - - adObject.renderer = self.customEventRenderer; - - if ([(id)adObject.adAdapter respondsToSelector:@selector(setAdConfiguration:)]) { - [(id)adObject.adAdapter performSelector:@selector(setAdConfiguration:) withObject:self.adConfiguration]; - } - - if (!error) { - MPLogInfo(@"Successfully loaded native ad."); - } else { - MPLogError(@"Native ad failed to load with error: %@", error); - } - - if (self.completionHandler) { - self.completionHandler(self, adObject, error); - self.completionHandler = nil; - } -} - -- (void)fetchAdWithConfiguration:(MPAdConfiguration *)configuration { - if (configuration.adUnitWarmingUp) { - MPLogInfo(kMPWarmingUpErrorLogFormatWithAdUnitID, self.adUnitIdentifier); - [self completeAdRequestWithAdObject:nil error:MPNativeAdNSErrorForAdUnitWarmingUp()]; - return; - } - - if ([configuration.networkType isEqualToString:kAdTypeClear]) { - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.adUnitIdentifier); - [self completeAdRequestWithAdObject:nil error:MPNativeAdNSErrorForNoInventory()]; - return; - } - - MPLogInfo(@"Received data from MoPub to construct native ad.\n"); - - // Notify Ad Server of the adapter load. This is fire and forget. - [self.communicator sendBeforeLoadUrlWithConfiguration:configuration]; - - // Record the start time of the adapter load. - self.adapterLoadStartTimestamp = NSDate.now.timeIntervalSince1970; - - [self getAdWithConfiguration:self.adConfiguration]; -} - -#pragma mark - - -- (void)communicatorDidReceiveAdConfigurations:(NSArray *)configurations -{ - self.remainingConfigurations = [configurations mutableCopy]; - self.adConfiguration = [self.remainingConfigurations removeFirst]; - - // There are no configurations to try. Consider this a clear response by the server. - if (self.remainingConfigurations.count == 0 && self.adConfiguration == nil) { - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.adUnitIdentifier); - [self completeAdRequestWithAdObject:nil error:MPNativeAdNSErrorForNoInventory()]; - return; - } - - [self fetchAdWithConfiguration:self.adConfiguration]; -} - -- (void)communicatorDidFailWithError:(NSError *)error -{ - MPLogDebug(@"Error: Couldn't retrieve an ad from MoPub. Message: %@", error); - - [self completeAdRequestWithAdObject:nil error:MPNativeAdNSErrorForNetworkConnectionError()]; -} - -#pragma mark - - -- (void)nativeCustomEvent:(MPNativeCustomEvent *)event didLoadAd:(MPNativeAd *)adObject -{ - // Record the end of the adapter load and send off the fire and forget after-load-url tracker. - NSTimeInterval duration = NSDate.now.timeIntervalSince1970 - self.adapterLoadStartTimestamp; - [self.communicator sendAfterLoadUrlWithConfiguration:self.adConfiguration adapterLoadDuration:duration adapterLoadResult:MPAfterLoadResultAdLoaded]; - - // Add the click tracker url from the header to our set. - if (self.adConfiguration.clickTrackingURL) { - [adObject.clickTrackerURLs addObject:self.adConfiguration.clickTrackingURL]; - } - - // Add the impression tracker url from the header to our set. - if (self.adConfiguration.impressionTrackingURLs) { - [adObject.impressionTrackerURLs addObjectsFromArray:self.adConfiguration.impressionTrackingURLs]; - } - - // Error if we don't have click trackers or impression trackers. - if (adObject.clickTrackerURLs.count < 1 || adObject.impressionTrackerURLs.count < 1) { - [self completeAdRequestWithAdObject:nil error:MPNativeAdNSErrorForInvalidAdServerResponse(@"Invalid ad trackers")]; - } - else { - [self completeAdRequestWithAdObject:adObject error:nil]; - } -} - -- (void)nativeCustomEvent:(MPNativeCustomEvent *)event didFailToLoadAdWithError:(NSError *)error -{ - // Record the end of the adapter load and send off the fire and forget after-load-url tracker - // with the appropriate error code result. - NSTimeInterval duration = NSDate.now.timeIntervalSince1970 - self.adapterLoadStartTimestamp; - MPAfterLoadResult result = (error.isAdRequestTimedOutError ? MPAfterLoadResultTimeout : (event == nil ? MPAfterLoadResultMissingAdapter : MPAfterLoadResultError)); - [self.communicator sendAfterLoadUrlWithConfiguration:self.adConfiguration adapterLoadDuration:duration adapterLoadResult:result]; - - // There are more ad configurations to try. - if (self.remainingConfigurations.count > 0) { - self.adConfiguration = [self.remainingConfigurations removeFirst]; - [self fetchAdWithConfiguration:self.adConfiguration]; - } - // No more configurations to try. Fail over and let Ad Server get more ads - else if (self.adConfiguration.nextURL != nil) { - self.loading = NO; - [self loadAdWithURL:self.adConfiguration.nextURL]; - } - // Nothing left to try. - else { - self.loading = NO; - - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.adUnitIdentifier); - [self completeAdRequestWithAdObject:nil error:MPNativeAdNSErrorForNoInventory()]; - } -} - -- (void)startTimeoutTimer -{ - NSTimeInterval timeInterval = (self.adConfiguration && self.adConfiguration.adTimeoutInterval >= 0) ? self.adConfiguration.adTimeoutInterval : NATIVE_TIMEOUT_INTERVAL; - - if (timeInterval > 0) { - self.timeoutTimer = [[MPCoreInstanceProvider sharedProvider] buildMPTimerWithTimeInterval:timeInterval - target:self - selector:@selector(timeout) - repeats:NO]; - - [self.timeoutTimer scheduleNow]; - } -} - -- (void)timeout -{ - NSError * error = [MOPUBError errorWithCode:MOPUBErrorAdRequestTimedOut localizedDescription:@"Native ad request timed out"]; - [self nativeCustomEvent:self.nativeCustomEvent didFailToLoadAdWithError:error]; -} - -- (void)didStopLoading -{ - [self.timeoutTimer invalidate]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequestTargeting.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequestTargeting.h deleted file mode 100644 index e4dcf9765..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequestTargeting.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// MPNativeAdRequestTargeting.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAdTargeting.h" - -/** - The @c MPNativeAdRequestTargeting class is used to attach targeting information to - @c MPNativeAdRequest objects. - */ -@interface MPNativeAdRequestTargeting : MPAdTargeting - -/** - Creates and returns an empty @c MPNativeAdRequestTargeting object. - @return A newly initialized @c MPNativeAdRequestTargeting object. - */ -+ (MPNativeAdRequestTargeting *)targeting; - -/** - A set of defined strings that correspond to assets for the intended native ad - object. This set should contain only those assets that will be displayed in the ad. - - The MoPub ad server will attempt to only return the assets in @c desiredAssets. - */ -@property (nonatomic, strong) NSSet * desiredAssets; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequestTargeting.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequestTargeting.m deleted file mode 100644 index 71c2461a6..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdRequestTargeting.m +++ /dev/null @@ -1,40 +0,0 @@ -// -// MPNativeAdRequestTargeting.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdRequestTargeting.h" -#import "MPNativeAdConstants.h" - -#import - -@implementation MPNativeAdRequestTargeting - -+ (MPNativeAdRequestTargeting *)targeting -{ - return [[MPNativeAdRequestTargeting alloc] init]; -} - -- (void)setDesiredAssets:(NSSet *)desiredAssets -{ - if (_desiredAssets != desiredAssets) { - - NSMutableSet *allowedAdAssets = [NSMutableSet setWithObjects:kAdTitleKey, - kAdTextKey, - kAdIconImageKey, - kAdMainImageKey, - kAdCTATextKey, - kAdStarRatingKey, - kAdIconImageViewKey, - kAdMainMediaViewKey, - nil]; - [allowedAdAssets intersectSet:desiredAssets]; - _desiredAssets = allowedAdAssets; - } -} - - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSource.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSource.h deleted file mode 100644 index 59da9b468..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSource.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPNativeAdSource.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPNativeAdSourceDelegate.h" -@class MPNativeAdRequestTargeting; - -@interface MPNativeAdSource : NSObject - -@property (nonatomic, weak) id delegate; - -- (instancetype)initWithDelegate:(id)delegate; - -- (void)loadAdsWithAdUnitIdentifier:(NSString *)identifier rendererConfigurations:(NSArray *)rendererConfigurations andTargeting:(MPNativeAdRequestTargeting *)targeting; -- (void)deleteCacheForAdUnitIdentifier:(NSString *)identifier; -- (id)dequeueAdForAdUnitIdentifier:(NSString *)identifier; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSource.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSource.m deleted file mode 100644 index d964f2eaf..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSource.m +++ /dev/null @@ -1,81 +0,0 @@ -// -// MPNativeAdSource.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdSource.h" -#import "MPNativeAd.h" -#import "MPNativeAdRequestTargeting.h" -#import "MPNativeAdSourceQueue.h" -#import "MPConstants.h" - -static NSTimeInterval const kCacheTimeoutInterval = MOPUB_ADS_EXPIRATION_INTERVAL; - -@interface MPNativeAdSource () - -@property (nonatomic, strong) NSMutableDictionary *adQueueDictionary; - -@end - -@implementation MPNativeAdSource - -#pragma mark - Object Lifecycle - -- (instancetype)initWithDelegate:(id)delegate -{ - self = [super init]; - if (self) { - _adQueueDictionary = [[NSMutableDictionary alloc] init]; - _delegate = delegate; - } - - return self; -} - -- (void)dealloc -{ - for (NSString *queueKey in [_adQueueDictionary allKeys]) { - [self deleteCacheForAdUnitIdentifier:queueKey]; - } -} - -#pragma mark - Ad Source Interface - -- (void)loadAdsWithAdUnitIdentifier:(NSString *)identifier rendererConfigurations:(NSArray *)rendererConfigurations andTargeting:(MPNativeAdRequestTargeting *)targeting -{ - [self deleteCacheForAdUnitIdentifier:identifier]; - - MPNativeAdSourceQueue *adQueue = [[MPNativeAdSourceQueue alloc] initWithAdUnitIdentifier:identifier rendererConfigurations:rendererConfigurations andTargeting:targeting]; - adQueue.delegate = self; - [self.adQueueDictionary setObject:adQueue forKey:identifier]; - - [adQueue loadAds]; -} - -- (id)dequeueAdForAdUnitIdentifier:(NSString *)identifier -{ - MPNativeAdSourceQueue *adQueue = [self.adQueueDictionary objectForKey:identifier]; - MPNativeAd *nextAd = [adQueue dequeueAdWithMaxAge:kCacheTimeoutInterval]; - return nextAd; -} - -- (void)deleteCacheForAdUnitIdentifier:(NSString *)identifier -{ - MPNativeAdSourceQueue *sourceQueue = [self.adQueueDictionary objectForKey:identifier]; - sourceQueue.delegate = nil; - [sourceQueue cancelRequests]; - - [self.adQueueDictionary removeObjectForKey:identifier]; -} - -#pragma mark - MPNativeAdSourceQueueDelegate - -- (void)adSourceQueueAdIsAvailable:(MPNativeAdSourceQueue *)source -{ - [self.delegate adSourceDidFinishRequest:self]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSourceDelegate.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSourceDelegate.h deleted file mode 100644 index 38d963cf9..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeAdSourceDelegate.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// MPNativeAdSourceDelegate.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPNativeAdSource; - -@protocol MPNativeAdSourceDelegate - -- (void)adSourceDidFinishRequest:(MPNativeAdSource *)source; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEvent.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEvent.h deleted file mode 100644 index e0dfa9819..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEvent.h +++ /dev/null @@ -1,91 +0,0 @@ -// -// MPNativeCustomEvent.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeCustomEventDelegate.h" - -/** - * The MoPub iOS SDK mediates third-party native ad networks using custom events. Custom events are - * responsible for instantiating and manipulating native ad objects in the third-party SDK and - * translating and communicating events from those objects back to the MoPub SDK by notifying a - * delegate. - * - * `MPNativeCustomEvent` is a base class for custom events that support native ads. By implementing - * subclasses of `MPNativeCustomEvent` you can enable the MoPub SDK to support a variety of - * third-party ad networks. - * - * Your implementation should create an `MPNativeAd` object using an appropriate `MPNativeAdAdapter` - * for your network. Your custom event should also call the appropriate - * `MPNativeCustomEventDelegate` methods. - * - * At runtime, the MoPub SDK will find and instantiate an `MPNativeCustomEvent` subclass as needed - * and invoke its `-requestAdWithCustomEventInfo:` method. - */ -@interface MPNativeCustomEvent : NSObject - -/** @name Requesting a Native Ad */ - -/** - * Called when the MoPub SDK requires a new native ad. - * - * When the MoPub SDK receives a response indicating it should load a custom event, it will send - * this message to your custom event class. Your implementation should load a native ad from a - * third-party ad network. - * - * @param info A dictionary containing additional custom data associated with a given custom event - * request. This data is configurable on the MoPub website, and may be used to pass dynamic - * information, such as publisher IDs. - */ -- (void)requestAdWithCustomEventInfo:(NSDictionary *)info; - -/** - * Called when the MoPub SDK requires a new native ad. - * - * When the MoPub SDK receives a response indicating it should load a custom event, it will send - * this message to your custom event class. Your implementation should load a native ad from a - * third-party ad network. - * - * @param info A dictionary containing additional custom data associated with a given custom event - * request. This data is configurable on the MoPub website, and may be used to pass dynamic - * information, such as publisher IDs. - * @param adMarkup An optional ad markup to use. - */ -- (void)requestAdWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup; - -/** @name Caching Image Resources */ - -/** - * Downloads and pre-caches images. - * - * If your ad network does not provide built-in support for image caching, you may invoke this - * method in your custom event implementation to pre-cache image assets. If you do call this method, - * you should wait until the completion block is called before invoking the appropriate - * success or failure callbacks on the `MPNativeCustomEventDelegate`. - * - * @param imageURLs An array of `NSURL` objects representing image resource locations. - * @param completionBlock A block that will be called after all download operations are complete. - * If any image downloads do not complete successfully, the `errors` parameter will contain - * error information about the failures. - */ -- (void)precacheImagesWithURLs:(NSArray *)imageURLs completionBlock:(void (^)(NSArray *errors))completionBlock; - -/** @name Communicating with the MoPub SDK */ - -/** - * The `MPNativeCustomEventDelegate` receives messages concerning the status of loading a native ad. - * - * The `delegate` object defines several methods that you should call in order to inform MoPub - * of the progress of your custom event. - */ -@property (nonatomic, weak) id delegate; - -/** - * An optional dictionary containing extra local data. - */ -@property (nonatomic, copy) NSDictionary *localExtras; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEvent.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEvent.m deleted file mode 100644 index 1307a22e7..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEvent.m +++ /dev/null @@ -1,59 +0,0 @@ -// -// MPNativeCustomEvent.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeCustomEvent.h" -#import "MPNativeAdError.h" -#import "MPImageDownloadQueue.h" -#import "MPLogging.h" - -@interface MPNativeCustomEvent () - -@property (nonatomic, strong) MPImageDownloadQueue *imageDownloadQueue; - -@end - -@implementation MPNativeCustomEvent - -- (id)init -{ - self = [super init]; - if (self) { - _imageDownloadQueue = [[MPImageDownloadQueue alloc] init]; - } - - return self; -} - -- (void)precacheImagesWithURLs:(NSArray *)imageURLs completionBlock:(void (^)(NSArray *errors))completionBlock -{ - if (imageURLs.count > 0) { - [_imageDownloadQueue addDownloadImageURLs:imageURLs completionBlock:^(NSArray *errors) { - if (completionBlock) { - completionBlock(errors); - } - }]; - } else { - if (completionBlock) { - completionBlock(nil); - } - } -} - -- (void)requestAdWithCustomEventInfo:(NSDictionary *)info -{ - /*override with custom network behavior*/ -} - -- (void)requestAdWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - // By default, the original requestAdWithCustomEventInfo: method will be called. - // Otherwise subclasses must override this method and implement code to load a banner here. - [self requestAdWithCustomEventInfo:info]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEventDelegate.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEventDelegate.h deleted file mode 100644 index 82eeb271e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPNativeCustomEventDelegate.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// MPNativeCustomEventDelegate.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MPNativeAd; -@class MPNativeCustomEvent; - -/** - * Instances of your custom subclass of `MPNativeCustomEvent` will have an - * `MPNativeCustomEventDelegate` delegate object. You use this delegate to communicate progress - * (such as whether an ad has loaded successfully) back to the MoPub SDK. - */ -@protocol MPNativeCustomEventDelegate - -/** - * This method is called when the ad and all required ad assets are loaded. - * - * @param event You should pass `self` to allow the MoPub SDK to associate this event with the - * correct instance of your custom event. - * @param adObject An `MPNativeAd` object, representing the ad that was retrieved. - */ -- (void)nativeCustomEvent:(MPNativeCustomEvent *)event didLoadAd:(MPNativeAd *)adObject; - -/** - * This method is called when the ad or any required ad assets fail to load. - * - * @param event You should pass `self` to allow the MoPub SDK to associate this event with the - * correct instance of your custom event. - * @param error (*optional*) You may pass an error describing the failure. - */ -- (void)nativeCustomEvent:(MPNativeCustomEvent *)event didFailToLoadAdWithError:(NSError *)error; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPServerAdPositioning.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPServerAdPositioning.h deleted file mode 100644 index cfd8eca6f..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPServerAdPositioning.h +++ /dev/null @@ -1,39 +0,0 @@ -// -// MPServerAdPositioning.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdPositioning.h" - -/** - * The `MPServerAdPositioning` class is a model that allows you to control the positions where - * native advertisements should appear within a stream. A server positioning object works in - * conjunction with an ad placer, telling the ad placer that it should retrieve positioning - * information from the MoPub ad server. - * - * Unlike `MPClientAdPositioning`, which represents hard-coded positioning information, a server - * positioning object offers you the benefit of modifying your ad positions via the MoPub website, - * without rebuilding your application. - */ - -@interface MPServerAdPositioning : MPAdPositioning - -/** @name Creating a Server Positioning Object */ - -/** - * Creates and returns a server positioning object. - * - * When an ad placer is set to use server positioning, it will ask the MoPub ad server for the - * positions where ads should be inserted into a given stream. These positioning values are - * configurable on the MoPub website. - * - * @return The newly created positioning object. - * - * @see MPClientAdPositioning - */ -+ (instancetype)positioning; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPServerAdPositioning.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPServerAdPositioning.m deleted file mode 100644 index 7103cbbd2..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPServerAdPositioning.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// MPServerAdPositioning.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPServerAdPositioning.h" - -@implementation MPServerAdPositioning - -+ (instancetype)positioning -{ - return [[[self class] alloc] init]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRenderer.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRenderer.h deleted file mode 100644 index b960c491e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRenderer.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// MPStaticNativeAdRenderer.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPNativeAdRenderer.h" - -@class MPNativeAdRendererConfiguration; -@class MPStaticNativeAdRendererSettings; - -@interface MPStaticNativeAdRenderer : NSObject - -@property (nonatomic, readonly) MPNativeViewSizeHandler viewSizeHandler; - -+ (MPNativeAdRendererConfiguration *)rendererConfigurationWithRendererSettings:(id)rendererSettings; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRenderer.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRenderer.m deleted file mode 100644 index a38183806..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRenderer.m +++ /dev/null @@ -1,250 +0,0 @@ -// -// MPStaticNativeAdRenderer.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdDestinationDisplayAgent.h" -#import "MPHTTPNetworkSession.h" -#import "MPLogging.h" -#import "MPMemoryCache.h" -#import "MPNativeAdAdapter.h" -#import "MPNativeAdConstants.h" -#import "MPNativeAdError.h" -#import "MPNativeAdRenderer.h" -#import "MPNativeAdRendererConfiguration.h" -#import "MPNativeAdRendererConstants.h" -#import "MPNativeAdRendererImageHandler.h" -#import "MPNativeAdRendering.h" -#import "MPNativeAdRenderingImageLoader.h" -#import "MPNativeCache.h" -#import "MPNativeView.h" -#import "MPStaticNativeAdRenderer.h" -#import "MPStaticNativeAdRendererSettings.h" -#import "MPURLRequest.h" - -/** - * -1.0 is somewhat significant because this also happens to be what `UITableViewAutomaticDimension` - * is so it makes for easier migration to use `UITableViewAutomaticDimension` on iOS 8+ later but is not - * currently passed back in `-tableView:shouldIndentWhileEditingRowAtIndexPath:` directly so it can - * be any abitrary value. - */ -const CGFloat MPNativeViewDynamicDimension = -1.0; - -@interface MPStaticNativeAdRenderer () - -@property (nonatomic) UIView *adView; -@property (nonatomic) id adapter; -@property (nonatomic) BOOL adViewInViewHierarchy; -@property (nonatomic) Class renderingViewClass; -@property (nonatomic) MPNativeAdRendererImageHandler *rendererImageHandler; - -@end - -@implementation MPStaticNativeAdRenderer - -+ (MPNativeAdRendererConfiguration *)rendererConfigurationWithRendererSettings:(id)rendererSettings -{ - MPNativeAdRendererConfiguration *config = [[MPNativeAdRendererConfiguration alloc] init]; - config.rendererClass = [self class]; - config.rendererSettings = rendererSettings; - config.supportedCustomEvents = @[@"MPMoPubNativeCustomEvent", @"FacebookNativeCustomEvent", @"MillennialNativeCustomEvent"]; - - return config; -} - -- (instancetype)initWithRendererSettings:(id)rendererSettings -{ - if (self = [super init]) { - MPStaticNativeAdRendererSettings *settings = (MPStaticNativeAdRendererSettings *)rendererSettings; - _renderingViewClass = settings.renderingViewClass; - _viewSizeHandler = [settings.viewSizeHandler copy]; - _rendererImageHandler = [MPNativeAdRendererImageHandler new]; - _rendererImageHandler.delegate = self; - } - - return self; -} - -- (UIView *)retrieveViewWithAdapter:(id)adapter error:(NSError **)error -{ - if (!adapter) { - if (error) { - *error = MPNativeAdNSErrorForRenderValueTypeError(); - } - - return nil; - } - - self.adapter = adapter; - - if ([self.renderingViewClass respondsToSelector:@selector(nibForAd)]) { - self.adView = (UIView *)[[[self.renderingViewClass nibForAd] instantiateWithOwner:nil options:nil] firstObject]; - } else { - self.adView = [[self.renderingViewClass alloc] init]; - } - - self.adView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - - // We only load text here. We delay loading of images until the view is added to the view hierarchy - // so we don't unnecessarily load images from the cache if the user is scrolling fast. So we will - // just store the image URLs for now. - if ([self.adView respondsToSelector:@selector(nativeMainTextLabel)]) { - self.adView.nativeMainTextLabel.text = [adapter.properties objectForKey:kAdTextKey]; - } - - if ([self.adView respondsToSelector:@selector(nativeTitleTextLabel)]) { - self.adView.nativeTitleTextLabel.text = [adapter.properties objectForKey:kAdTitleKey]; - } - - if ([self.adView respondsToSelector:@selector(nativeCallToActionTextLabel)] && self.adView.nativeCallToActionTextLabel) { - self.adView.nativeCallToActionTextLabel.text = [adapter.properties objectForKey:kAdCTATextKey]; - } - - if ([self.adView respondsToSelector:@selector(nativePrivacyInformationIconImageView)]) { - UIImage *privacyIconImage = [adapter.properties objectForKey:kAdPrivacyIconUIImageKey]; - NSString *privacyIconImageUrl = [adapter.properties objectForKey:kAdPrivacyIconImageUrlKey]; - // A cached privacy information icon image exists; it should be used. - if (privacyIconImage != nil) { - UIImageView *imageView = self.adView.nativePrivacyInformationIconImageView; - imageView.hidden = NO; - imageView.image = privacyIconImage; - - // Attach a gesture recognizer to handle loading the privacy icon URL. - UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onPrivacyIconTapped)]; - imageView.userInteractionEnabled = YES; - [imageView addGestureRecognizer:tapRecognizer]; - } - // No cached privacy information icon image was cached, but there is a URL for the - // icon. Go fetch the icon and populate the UIImageView when complete. - else if (privacyIconImageUrl != nil) { - NSURL *iconUrl = [NSURL URLWithString:privacyIconImageUrl]; - MPURLRequest *imageRequest = [MPURLRequest requestWithURL:iconUrl]; - - __weak __typeof__(self) weakSelf = self; - [MPHTTPNetworkSession startTaskWithHttpRequest:imageRequest responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - // Cache the successfully retrieved icon image - [MPMemoryCache.sharedInstance setData:data forKey:privacyIconImageUrl]; - - // Populate the image view - __typeof__(self) strongSelf = weakSelf; - UIImageView *imageView = strongSelf.adView.nativePrivacyInformationIconImageView; - imageView.hidden = NO; - imageView.image = [UIImage imageWithData:data]; - - // Attach a gesture recognizer to handle loading the privacy icon URL. - UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:strongSelf action:@selector(onPrivacyIconTapped)]; - imageView.userInteractionEnabled = YES; - [imageView addGestureRecognizer:tapRecognizer]; - } errorHandler:^(NSError * _Nonnull error) { - MPLogInfo(@"Failed to retrieve privacy icon from %@", privacyIconImageUrl); - }]; - } - // The ad network may provide its own view for its privacy information icon. - // We assume the ad handles the tap on the icon as well. - else if ([adapter respondsToSelector:@selector(privacyInformationIconView)]) { - UIView *privacyIconAdView = [adapter privacyInformationIconView]; - privacyIconAdView.frame = self.adView.nativePrivacyInformationIconImageView.bounds; - privacyIconAdView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - self.adView.nativePrivacyInformationIconImageView.userInteractionEnabled = YES; - [self.adView.nativePrivacyInformationIconImageView addSubview:privacyIconAdView]; - self.adView.nativePrivacyInformationIconImageView.hidden = NO; - } - // No privacy icon - else { - self.adView.nativePrivacyInformationIconImageView.userInteractionEnabled = NO; - self.adView.nativePrivacyInformationIconImageView.hidden = YES; - } - } - - if ([self hasIconView]) { - UIView *iconView = [self.adapter iconMediaView]; - UIView *iconImageView = [self.adView nativeIconImageView]; - - iconView.frame = iconImageView.bounds; - iconView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - iconImageView.userInteractionEnabled = YES; - - [iconImageView addSubview:iconView]; - } - - if ([self shouldLoadMediaView]) { - UIView *mediaView = [self.adapter mainMediaView]; - UIView *mainImageView = [self.adView nativeMainImageView]; - - mediaView.frame = mainImageView.bounds; - mediaView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - mainImageView.userInteractionEnabled = YES; - - [mainImageView addSubview:mediaView]; - } - - // See if the ad contains a star rating and notify the view if it does. - if ([self.adView respondsToSelector:@selector(layoutStarRating:)]) { - NSNumber *starRatingNum = [adapter.properties objectForKey:kAdStarRatingKey]; - - if ([starRatingNum isKindOfClass:[NSNumber class]] && starRatingNum.floatValue >= kStarRatingMinValue && starRatingNum.floatValue <= kStarRatingMaxValue) { - [self.adView layoutStarRating:starRatingNum]; - } - } - - return self.adView; -} - -- (BOOL)shouldLoadMediaView -{ - return [self.adapter respondsToSelector:@selector(mainMediaView)] - && [self.adapter mainMediaView] - && [self.adView respondsToSelector:@selector(nativeMainImageView)]; -} - -- (BOOL)hasIconView -{ - return [self.adapter respondsToSelector:@selector(iconMediaView)] - && [self.adapter iconMediaView] - && [self.adView respondsToSelector:@selector(nativeIconImageView)]; -} - -- (void)onPrivacyIconTapped -{ - if ([self.adapter respondsToSelector:@selector(displayContentForDAAIconTap)]) { - [self.adapter displayContentForDAAIconTap]; - } -} - -- (void)adViewWillMoveToSuperview:(UIView *)superview -{ - self.adViewInViewHierarchy = (superview != nil); - - if (superview) { - // Only handle the loading of the icon image if the adapter doesn't already have a view for it. - if (![self hasIconView] && [self.adapter.properties objectForKey:kAdIconImageKey] && [self.adView respondsToSelector:@selector(nativeIconImageView)]) { - [self.rendererImageHandler loadImageForURL:[NSURL URLWithString:[self.adapter.properties objectForKey:kAdIconImageKey]] intoImageView:self.adView.nativeIconImageView]; - } - - // Only handle the loading of the main image if the adapter doesn't already have a view for it. - if (!([self.adapter respondsToSelector:@selector(mainMediaView)] && [self.adapter mainMediaView])) { - if ([self.adapter.properties objectForKey:kAdMainImageKey] && [self.adView respondsToSelector:@selector(nativeMainImageView)]) { - [self.rendererImageHandler loadImageForURL:[NSURL URLWithString:[self.adapter.properties objectForKey:kAdMainImageKey]] intoImageView:self.adView.nativeMainImageView]; - } - } - - // Layout custom assets here as the custom assets may contain images that need to be loaded. - if ([self.adView respondsToSelector:@selector(layoutCustomAssetsWithProperties:imageLoader:)]) { - // Create a simplified image loader for the ad view to use. - MPNativeAdRenderingImageLoader *imageLoader = [[MPNativeAdRenderingImageLoader alloc] initWithImageHandler:self.rendererImageHandler]; - [self.adView layoutCustomAssetsWithProperties:self.adapter.properties imageLoader:imageLoader]; - } - } -} - -#pragma mark - MPNativeAdRendererImageHandlerDelegate - -- (BOOL)nativeAdViewInViewHierarchy -{ - return self.adViewInViewHierarchy; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.h deleted file mode 100644 index 256609f85..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// MPStaticNativeAdRendererSettings.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPNativeAdRendererSettings.h" -#import "MPNativeAdRenderer.h" - -@interface MPStaticNativeAdRendererSettings : NSObject - -/** - * A rendering class that must be a UIView that implements the MPNativeAdRendering protocol. - * The ad will be rendered to a view of this class type. - */ -@property (nonatomic, assign) Class renderingViewClass; - -/** - * A block that returns the size of the view given a maximum width. This needs to be set when - * used in conjunction with ad placer classes so the ad placers can correctly size the cells - * that contain the ads. - * - * viewSizeHandler is not used for manual native ad integration. You must set the - * frame of your manually integrated native ad view. - */ -@property (nonatomic, readwrite, copy) MPNativeViewSizeHandler viewSizeHandler; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.m deleted file mode 100644 index d2c87accc..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStaticNativeAdRendererSettings.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPStaticNativeAdRendererSettings.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPStaticNativeAdRendererSettings.h" - -@implementation MPStaticNativeAdRendererSettings - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacementData.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacementData.h deleted file mode 100644 index 83b7717f0..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacementData.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// MPStreamAdPlacementData.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@class MPAdPositioning; -@class MPNativeAdData; - -@interface MPStreamAdPlacementData : NSObject - -- (instancetype)initWithPositioning:(MPAdPositioning *)positioning; -- (void)insertAdData:(MPNativeAdData *)data atIndexPath:(NSIndexPath *)adjustedIndexPath; -- (NSArray *)adjustedAdIndexPathsInAdjustedRange:(NSRange)range inSection:(NSInteger)section; -- (void)clearAdsInAdjustedRange:(NSRange)range inSection:(NSInteger)section; -- (NSIndexPath *)nextAdInsertionIndexPathForAdjustedIndexPath:(NSIndexPath *)adjustedIndexPath; -- (NSIndexPath *)previousAdInsertionIndexPathForAdjustedIndexPath:(NSIndexPath *)adjustedIndexPath; -- (BOOL)isAdAtAdjustedIndexPath:(NSIndexPath *)adjustedIndexPath; -- (NSArray *)adjustedIndexPathsWithAdsInSection:(NSUInteger)section; -- (MPNativeAdData *)adDataAtAdjustedIndexPath:(NSIndexPath *)adjustedIndexPath; -- (NSUInteger)adjustedNumberOfItems:(NSUInteger)numberOfItems inSection:(NSUInteger)section; -- (NSIndexPath *)adjustedIndexPathForOriginalIndexPath:(NSIndexPath *)indexPath; -- (NSIndexPath *)originalIndexPathForAdjustedIndexPath:(NSIndexPath *)indexPath; -- (void)insertSections:(NSIndexSet *)sections; -- (void)deleteSections:(NSIndexSet *)sections; -- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection; -- (void)insertItemsAtIndexPaths:(NSArray *)originalIndexPaths; -- (void)deleteItemsAtIndexPaths:(NSArray *)originalIndexPaths; -- (void)moveItemAtIndexPath:(NSIndexPath *)originalIndexPath toIndexPath:(NSIndexPath *)newIndexPath; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacementData.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacementData.m deleted file mode 100644 index 7c1aee658..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacementData.m +++ /dev/null @@ -1,515 +0,0 @@ -// -// MPStreamAdPlacementData.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPStreamAdPlacementData.h" -#import "MPAdPositioning.h" -#import "MPLogging.h" - -static const NSUInteger kMaximumNumberOfAdsPerStream = 255; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@interface MPStreamAdPlacementData () - -@property (nonatomic, strong) NSMutableDictionary *desiredOriginalPositions; -@property (nonatomic, strong) NSMutableDictionary *desiredInsertionPositions; -@property (nonatomic, strong) NSMutableDictionary *originalAdIndexPaths; -@property (nonatomic, strong) NSMutableDictionary *adjustedAdIndexPaths; -@property (nonatomic, strong) NSMutableDictionary *adDataObjects; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPStreamAdPlacementData - -- (id)initWithPositioning:(MPAdPositioning *)positioning -{ - self = [super init]; - if (self) { - [self initializeDesiredPositionsFromPositioning:positioning]; - self.originalAdIndexPaths = [NSMutableDictionary dictionary]; - self.adjustedAdIndexPaths = [NSMutableDictionary dictionary]; - self.adDataObjects = [NSMutableDictionary dictionary]; - } - return self; -} - - -- (NSMutableArray *)positioningArrayForSection:(NSUInteger)section inDictionary:(NSMutableDictionary *)dictionary -{ - NSMutableArray *array = [dictionary objectForKey:[NSNumber numberWithUnsignedInteger:section]]; - if (array) { - return array; - } else { - array = [NSMutableArray array]; - [dictionary setObject:array forKey:[NSNumber numberWithUnsignedInteger:section]]; - return array; - } -} - -- (void)initializeDesiredPositionsFromPositioning:(MPAdPositioning *)positioning -{ - NSArray *fixedPositions = [[positioning.fixedPositions array] sortedArrayUsingSelector:@selector(compare:)]; - - self.desiredOriginalPositions = [NSMutableDictionary dictionary]; - self.desiredInsertionPositions = [NSMutableDictionary dictionary]; - - [fixedPositions enumerateObjectsUsingBlock:^(NSIndexPath *position, NSUInteger idx, BOOL *stop) { - [self insertDesiredPositionsForIndexPath:position]; - }]; - - //Current behavior only inserts repeating ads following the last fixed position in the table, and they will only be inserted - //within the same section as that position. If no fixed positions exist, repeating ads will be placed only in the first section. - if (positioning.repeatingInterval > 1) { - NSInteger lastInsertionSection = [[fixedPositions lastObject] section]; - - NSMutableArray *desiredOriginalPositions = [self positioningArrayForSection:lastInsertionSection inDictionary:self.desiredOriginalPositions]; - - NSUInteger numberOfFixedAds = [desiredOriginalPositions count]; - NSUInteger numberOfRepeatingAds = kMaximumNumberOfAdsPerStream - numberOfFixedAds; - - NSInteger startingIndex = [fixedPositions lastObject] ? [(NSIndexPath *)[fixedPositions lastObject] row] : -1; - for (NSUInteger repeatingAdIndex = 1; repeatingAdIndex <= numberOfRepeatingAds; repeatingAdIndex++) { - NSInteger adIndexItem = startingIndex + positioning.repeatingInterval * repeatingAdIndex; - [self insertDesiredPositionsForIndexPath:[NSIndexPath indexPathForRow:adIndexItem inSection:lastInsertionSection]]; - } - } -} - -//assumes items are inserted sequentially, beginning to end -- (void)insertDesiredPositionsForIndexPath:(NSIndexPath *)indexPath -{ - NSMutableArray *desiredOriginalPositions = [self positioningArrayForSection:indexPath.section inDictionary:self.desiredOriginalPositions]; - NSIndexPath *insertionIndexPath = [NSIndexPath indexPathForRow:indexPath.row - [desiredOriginalPositions count] inSection:indexPath.section]; - [desiredOriginalPositions addObject:[insertionIndexPath copy]]; - - NSMutableArray *desiredInsertionPositions = [self positioningArrayForSection:indexPath.section inDictionary:self.desiredInsertionPositions]; - [desiredInsertionPositions addObject:[insertionIndexPath copy]]; -} - -- (NSUInteger)adjustedNumberOfItems:(NSUInteger)numberOfItems inSection:(NSUInteger)section -{ - if (numberOfItems <= 0) return 0; - - NSIndexPath *pathOfLastItem = [NSIndexPath indexPathForRow:numberOfItems - 1 inSection:section]; - NSMutableArray *originalAdIndexPaths = [self positioningArrayForSection:section inDictionary:self.originalAdIndexPaths]; - NSUInteger numberOfAdsBeforeLastItem = [self indexOfIndexPath:pathOfLastItem inSortedArray:originalAdIndexPaths options:NSBinarySearchingInsertionIndex | NSBinarySearchingLastEqual]; - - return numberOfItems + numberOfAdsBeforeLastItem; -} - -- (NSIndexPath *)adjustedIndexPathForOriginalIndexPath:(NSIndexPath *)indexPath -{ - if (!indexPath || indexPath.row == NSNotFound) { - return indexPath; - } - - NSMutableArray *originalAdIndexPaths = [self positioningArrayForSection:indexPath.section inDictionary:self.originalAdIndexPaths]; - NSUInteger numberOfAdsBeforeIndexPath = [self indexOfIndexPath:indexPath inSortedArray:originalAdIndexPaths options:NSBinarySearchingInsertionIndex | NSBinarySearchingLastEqual]; - - return [NSIndexPath indexPathForRow:indexPath.row + numberOfAdsBeforeIndexPath inSection:indexPath.section]; -} - -- (NSIndexPath *)originalIndexPathForAdjustedIndexPath:(NSIndexPath *)indexPath -{ - if (!indexPath || indexPath.row == NSNotFound) { - return indexPath; - } else if ([self isAdAtAdjustedIndexPath:indexPath]) { - return nil; - } else { - NSMutableArray *adjustedAdIndexPaths = [self positioningArrayForSection:indexPath.section inDictionary:self.adjustedAdIndexPaths]; - NSUInteger numberOfAdsBeforeIndexPath = [self indexOfIndexPath:indexPath inSortedArray:adjustedAdIndexPaths options:NSBinarySearchingInsertionIndex]; - return [NSIndexPath indexPathForRow:indexPath.row - numberOfAdsBeforeIndexPath inSection:indexPath.section]; - } -} - -- (NSIndexPath *)nextAdInsertionIndexPathForAdjustedIndexPath:(NSIndexPath *)adjustedIndexPath -{ - if (adjustedIndexPath.section > [self largestSectionIndexContainingAds]) { - return nil; - } - - NSMutableArray *desiredInsertionPositions = [self.desiredInsertionPositions objectForKey:[NSNumber numberWithUnsignedInteger:adjustedIndexPath.section]]; - - NSUInteger index = [self indexOfIndexPath:adjustedIndexPath inSortedArray:desiredInsertionPositions options:NSBinarySearchingInsertionIndex | NSBinarySearchingFirstEqual]; - - if (desiredInsertionPositions && (index < [desiredInsertionPositions count])) { - return [desiredInsertionPositions objectAtIndex:index]; - } else { - // Go to the next section. - return [self nextAdInsertionIndexPathForAdjustedIndexPath:[NSIndexPath indexPathForRow:0 inSection:adjustedIndexPath.section+1]]; - } -} - -- (NSIndexPath *)previousAdInsertionIndexPathForAdjustedIndexPath:(NSIndexPath *)adjustedIndexPath -{ - NSMutableArray *desiredInsertionPositions = [self positioningArrayForSection:adjustedIndexPath.section inDictionary:self.desiredInsertionPositions]; - NSUInteger index = [self indexOfIndexPath:adjustedIndexPath inSortedArray:desiredInsertionPositions options:NSBinarySearchingInsertionIndex | NSBinarySearchingFirstEqual]; - - if (index > 0) { - return desiredInsertionPositions[index - 1]; - } else { - return nil; - } -} - -- (void)insertAdData:(MPNativeAdData *)data atIndexPath:(NSIndexPath *)adjustedIndexPath -{ - NSMutableArray *desiredInsertionPositions = [self positioningArrayForSection:adjustedIndexPath.section inDictionary:self.desiredInsertionPositions]; - NSMutableArray *desiredOriginalPositions = [self positioningArrayForSection:adjustedIndexPath.section inDictionary:self.desiredOriginalPositions]; - NSMutableArray *adjustedAdIndexPaths = [self positioningArrayForSection:adjustedIndexPath.section inDictionary:self.adjustedAdIndexPaths]; - NSMutableArray *originalAdIndexPaths = [self positioningArrayForSection:adjustedIndexPath.section inDictionary:self.originalAdIndexPaths]; - NSMutableArray *adDataObjects = [self positioningArrayForSection:adjustedIndexPath.section inDictionary:self.adDataObjects]; - - NSUInteger indexInDesiredArrays = [self indexOfIndexPath:adjustedIndexPath inSortedArray:desiredInsertionPositions options:NSBinarySearchingFirstEqual]; - - if (indexInDesiredArrays == NSNotFound) { - MPLogWarn(@"Attempted to insert an ad at position %@, which is not in the desired array.", adjustedIndexPath); - return; - } - - NSIndexPath *originalPosition = desiredOriginalPositions[indexInDesiredArrays]; - NSIndexPath *insertionPosition = desiredInsertionPositions[indexInDesiredArrays]; - - NSUInteger insertionIndex = [self indexOfIndexPath:insertionPosition inSortedArray:adjustedAdIndexPaths options:NSBinarySearchingInsertionIndex | NSBinarySearchingFirstEqual]; - - [originalAdIndexPaths insertObject:originalPosition atIndex:insertionIndex]; - [adjustedAdIndexPaths insertObject:insertionPosition atIndex:insertionIndex]; - [adDataObjects insertObject:data atIndex:insertionIndex]; - - [desiredOriginalPositions removeObjectAtIndex:indexInDesiredArrays]; - [desiredInsertionPositions removeObjectAtIndex:indexInDesiredArrays]; - - for (NSUInteger i = insertionIndex + 1; i < [adjustedAdIndexPaths count]; i++) { - NSIndexPath *newIndexPath = adjustedAdIndexPaths[i]; - adjustedAdIndexPaths[i] = [NSIndexPath indexPathForRow:newIndexPath.row + 1 inSection:newIndexPath.section]; - } - - for (NSUInteger j = indexInDesiredArrays; j < [desiredInsertionPositions count]; j++) { - NSIndexPath *newInsertionPosition = desiredInsertionPositions[j]; - desiredInsertionPositions[j] = [NSIndexPath indexPathForRow:newInsertionPosition.row + 1 inSection:newInsertionPosition.section]; - } -} - -- (NSArray *)adjustedAdIndexPathsInAdjustedRange:(NSRange)range inSection:(NSInteger)section -{ - NSMutableArray *adjustedIndexPaths = [self positioningArrayForSection:section inDictionary:self.adjustedAdIndexPaths]; - - NSIndexSet *indexesOfObjectsInRange = [adjustedIndexPaths indexesOfObjectsPassingTest:^BOOL(NSIndexPath *adjustedIndexPath, NSUInteger idx, BOOL *stop) { - return NSLocationInRange(adjustedIndexPath.row, range); - }]; - - return [adjustedIndexPaths objectsAtIndexes:indexesOfObjectsInRange]; -} - -- (void)clearAdsInAdjustedRange:(NSRange)range inSection:(NSInteger)section -{ - NSMutableArray *adjustedAdIndexPaths = [self positioningArrayForSection:section inDictionary:self.adjustedAdIndexPaths]; - NSMutableArray *originalAdIndexPaths = [self positioningArrayForSection:section inDictionary:self.originalAdIndexPaths]; - NSMutableArray *adDataObjects = [self positioningArrayForSection:section inDictionary:self.adDataObjects]; - NSMutableArray *desiredInsertionPositions = [self positioningArrayForSection:section inDictionary:self.desiredInsertionPositions]; - NSMutableArray *desiredOriginalPositions = [self positioningArrayForSection:section inDictionary:self.desiredOriginalPositions]; - - NSIndexSet *indexesOfObjectsToRemove = [adjustedAdIndexPaths indexesOfObjectsPassingTest:^BOOL(NSIndexPath *adjustedIndexPath, NSUInteger idx, BOOL *stop) { - return NSLocationInRange(adjustedIndexPath.row, range); - }]; - - if ([indexesOfObjectsToRemove count]) { - [indexesOfObjectsToRemove enumerateIndexesWithOptions:NSEnumerationReverse usingBlock:^(NSUInteger idx, BOOL *stop) { - NSIndexPath *adjustedIndexPathToRemove = adjustedAdIndexPaths[idx]; - NSIndexPath *originalIndexPathToRemove = originalAdIndexPaths[idx]; - NSUInteger insertionIndex = [self indexOfIndexPath:originalIndexPathToRemove inSortedArray:desiredOriginalPositions options:NSBinarySearchingInsertionIndex | NSBinarySearchingFirstEqual]; - for (NSInteger i = insertionIndex; i < [desiredInsertionPositions count]; i++) { - NSIndexPath *nextIndexPath = desiredInsertionPositions[i]; - desiredInsertionPositions[i] = [NSIndexPath indexPathForRow:nextIndexPath.row - 1 inSection:nextIndexPath.section]; - } - [desiredOriginalPositions insertObject:originalIndexPathToRemove atIndex:insertionIndex]; - [desiredInsertionPositions insertObject:adjustedIndexPathToRemove atIndex:insertionIndex]; - - }]; - - [adjustedAdIndexPaths removeObjectsAtIndexes:indexesOfObjectsToRemove]; - [originalAdIndexPaths removeObjectsAtIndexes:indexesOfObjectsToRemove]; - [adDataObjects removeObjectsAtIndexes:indexesOfObjectsToRemove]; - } -} - -- (BOOL)isAdAtAdjustedIndexPath:(NSIndexPath *)adjustedIndexPath -{ - NSMutableArray *adjustedAdIndexPaths = [self positioningArrayForSection:adjustedIndexPath.section inDictionary:self.adjustedAdIndexPaths]; - NSUInteger indexOfIndexPath = [self indexOfIndexPath:adjustedIndexPath inSortedArray:adjustedAdIndexPaths options:NSBinarySearchingFirstEqual]; - - return indexOfIndexPath != NSNotFound; -} - -- (NSArray *)adjustedIndexPathsWithAdsInSection:(NSUInteger)section -{ - return [self positioningArrayForSection:section inDictionary:self.adjustedAdIndexPaths]; -} - -- (MPNativeAdData *)adDataAtAdjustedIndexPath:(NSIndexPath *)adjustedIndexPath -{ - NSMutableArray *adjustedAdIndexPaths = [self positioningArrayForSection:adjustedIndexPath.section inDictionary:self.adjustedAdIndexPaths]; - NSMutableArray *adDataObjects = [self positioningArrayForSection:adjustedIndexPath.section inDictionary:self.adDataObjects]; - - NSUInteger indexOfIndexPath = [self indexOfIndexPath:adjustedIndexPath inSortedArray:adjustedAdIndexPaths options:NSBinarySearchingFirstEqual]; - - if (indexOfIndexPath != NSNotFound) { - return adDataObjects[indexOfIndexPath]; - } else { - return nil; - } -} - -- (void)insertSections:(NSIndexSet *)sections -{ - [sections enumerateIndexesUsingBlock:^(NSUInteger insertionSection, BOOL *stop) { - // Explicitly casting indices to NSInteger because we're counting backwards. - NSInteger maxSection = [self largestSectionIndexContainingAds]; - NSInteger signedInsertionSection = insertionSection; - - // We need to shift all the data above the new section up by 1. - for (NSInteger i = maxSection; i >= signedInsertionSection; --i) { - if (self.desiredInsertionPositions[@(i)]) { - [self moveAllPositioningArraysInDictionariesAtSection:i toSection:i+1]; - } - } - }]; -} - -- (void)deleteSections:(NSIndexSet *)sections -{ - [sections enumerateIndexesWithOptions:NSEnumerationReverse usingBlock:^(NSUInteger deletionSection, BOOL *stop) { - NSUInteger maxSection = [self largestSectionIndexContainingAds]; - - [self clearPositioningArraysInDictionariesAtSection:deletionSection]; - - // We need to shift all the data above the deletionSection down by 1. - for (NSUInteger i = deletionSection; i < maxSection; ++i) { - if (self.desiredInsertionPositions[@(i+1)]) { - [self moveAllPositioningArraysInDictionariesAtSection:i+1 toSection:i]; - } - } - }]; -} - -- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection -{ - // Store the data at the section we're moving and retain it so it doesn't get deleted. - NSMutableArray *desiredInsertionPositions = [self positioningArrayForSection:section inDictionary:self.desiredInsertionPositions]; - NSMutableArray *desiredOriginalPositions = [self positioningArrayForSection:section inDictionary:self.desiredOriginalPositions]; - NSMutableArray *adjustedAdIndexPaths = [self positioningArrayForSection:section inDictionary:self.adjustedAdIndexPaths]; - NSMutableArray *originalAdIndexPaths = [self positioningArrayForSection:section inDictionary:self.originalAdIndexPaths]; - NSMutableArray *adDataObjects = [self positioningArrayForSection:section inDictionary:self.adDataObjects]; - - // Delete it from our dictionaries. - [self deleteSections:[NSIndexSet indexSetWithIndex:section]]; - - // Now insert an empty section at the new spot. - [self insertSections:[NSIndexSet indexSetWithIndex:newSection]]; - - // Fill in its data. - self.desiredInsertionPositions[@(newSection)] = desiredInsertionPositions; - self.desiredOriginalPositions[@(newSection)] = desiredOriginalPositions; - self.adjustedAdIndexPaths[@(newSection)] = adjustedAdIndexPaths; - self.originalAdIndexPaths[@(newSection)] = originalAdIndexPaths; - self.adDataObjects[@(newSection)] = adDataObjects; - - [self updateAllSectionsForPositioningArraysAtSection:newSection]; -} - -- (void)insertItemsAtIndexPaths:(NSArray *)originalIndexPaths -{ - originalIndexPaths = [originalIndexPaths sortedArrayUsingSelector:@selector(compare:)]; - - [originalIndexPaths enumerateObjectsUsingBlock:^(NSIndexPath *originalIndexPath, NSUInteger idx, BOOL *stop) { - NSMutableArray *desiredOriginalPositions = [self positioningArrayForSection:originalIndexPath.section inDictionary:self.desiredOriginalPositions]; - NSMutableArray *originalAdIndexPaths = [self positioningArrayForSection:originalIndexPath.section inDictionary:self.originalAdIndexPaths]; - - NSUInteger insertionIndex = [self indexOfIndexPath:originalIndexPath inSortedArray:desiredOriginalPositions options:NSBinarySearchingInsertionIndex | NSBinarySearchingFirstEqual]; - for (NSUInteger i = insertionIndex; i < [desiredOriginalPositions count]; i++) { - [self incrementDesiredIndexPathsAtIndex:i inSection:originalIndexPath.section]; - } - - NSUInteger originalInsertionIndex = [self indexOfIndexPath:originalIndexPath inSortedArray:originalAdIndexPaths options:NSBinarySearchingInsertionIndex | NSBinarySearchingFirstEqual]; - for (NSUInteger i = originalInsertionIndex; i < [originalAdIndexPaths count]; i++) { - [self incrementPlacedIndexPathsAtIndex:i inSection:originalIndexPath.section]; - } - }]; -} - -- (void)deleteItemsAtIndexPaths:(NSArray *)originalIndexPaths -{ - originalIndexPaths = [originalIndexPaths sortedArrayUsingSelector:@selector(compare:)]; - - __block NSUInteger currentNumberOfAdsInSection = 0; - __block NSInteger lastSection = [[originalIndexPaths firstObject] section]; - - [originalIndexPaths enumerateObjectsUsingBlock:^(NSIndexPath *originalIndexPath, NSUInteger idx, BOOL *stop) { - // Batch deletions are actually performed one at a time. This requires us to shift up the - // deletion index paths each time a deletion is performed. - // - // For example, batch-deleting the 2nd and 3rd items is not equivalent to incrementally - // deleting the 2nd item and then the 3rd item; the equivalent would be to delete the 2nd - // item each time. - if (originalIndexPath.section != lastSection) { - lastSection = originalIndexPath.section; - currentNumberOfAdsInSection = 0; - } - - NSMutableArray *desiredOriginalPositions = [self positioningArrayForSection:originalIndexPath.section inDictionary:self.desiredOriginalPositions]; - NSMutableArray *originalAdIndexPaths = [self positioningArrayForSection:originalIndexPath.section inDictionary:self.originalAdIndexPaths]; - - NSIndexPath *indexPathOfItemToDelete = [NSIndexPath indexPathForRow:originalIndexPath.row - currentNumberOfAdsInSection inSection:originalIndexPath.section]; - - NSUInteger searchIndexInDesired = [self indexOfIndexPath:indexPathOfItemToDelete inSortedArray:desiredOriginalPositions options:NSBinarySearchingInsertionIndex | NSBinarySearchingLastEqual]; - for (NSUInteger i = searchIndexInDesired; i < [desiredOriginalPositions count]; i++) { - [self decrementDesiredIndexPathsAtIndex:i inSection:originalIndexPath.section]; - } - - NSUInteger searchIndexInPlaced = [self indexOfIndexPath:indexPathOfItemToDelete inSortedArray:originalAdIndexPaths options:NSBinarySearchingInsertionIndex | NSBinarySearchingLastEqual]; - for (NSUInteger i = searchIndexInPlaced; i < [originalAdIndexPaths count]; i++) { - [self decrementPlacedIndexPathsAtIndex:i inSection:originalIndexPath.section]; - } - - currentNumberOfAdsInSection++; - }]; -} - -- (void)moveItemAtIndexPath:(NSIndexPath *)originalIndexPath toIndexPath:(NSIndexPath *)newIndexPath -{ - [self deleteItemsAtIndexPaths:@[originalIndexPath]]; - [self insertItemsAtIndexPaths:@[newIndexPath]]; -} - -#pragma mark - NSIndexPath array helpers - -- (NSUInteger)indexOfIndexPath:(NSIndexPath *)indexPath inSortedArray:(NSArray *)array options:(NSBinarySearchingOptions)options -{ - if (!indexPath || indexPath.row == NSNotFound) { - return NSNotFound; - } - return [array indexOfObject:indexPath inSortedRange:NSMakeRange(0, [array count]) options:options usingComparator:^NSComparisonResult(NSIndexPath *path1, NSIndexPath *path2) { - return [path1 compare:path2]; - }]; -} - -- (void)incrementDesiredIndexPathsAtIndex:(NSUInteger)index inSection:(NSUInteger)section -{ - NSMutableArray *desiredOriginalPositions = [self positioningArrayForSection:section inDictionary:self.desiredOriginalPositions]; - NSMutableArray *desiredInsertionPositions = [self positioningArrayForSection:section inDictionary:self.desiredInsertionPositions]; - - NSIndexPath *currentDesiredOriginalPosition = desiredOriginalPositions[index]; - NSIndexPath *newDesiredOriginalPosition = [NSIndexPath indexPathForRow:currentDesiredOriginalPosition.row + 1 inSection:currentDesiredOriginalPosition.section]; - desiredOriginalPositions[index] = newDesiredOriginalPosition; - - NSIndexPath *currentDesiredInsertionPosition = desiredInsertionPositions[index]; - NSIndexPath *newDesiredInsertionPosition = [NSIndexPath indexPathForRow:currentDesiredInsertionPosition.row + 1 inSection:currentDesiredInsertionPosition.section]; - desiredInsertionPositions[index] = newDesiredInsertionPosition; -} - -- (void)incrementPlacedIndexPathsAtIndex:(NSUInteger)index inSection:(NSUInteger)section -{ - NSMutableArray *originalAdIndexPaths = [self positioningArrayForSection:section inDictionary:self.originalAdIndexPaths]; - NSMutableArray *adjustedAdIndexPaths = [self positioningArrayForSection:section inDictionary:self.adjustedAdIndexPaths]; - - NSIndexPath *currentOriginalIndexPath = originalAdIndexPaths[index]; - NSIndexPath *newOriginalIndexPath = [NSIndexPath indexPathForRow:currentOriginalIndexPath.row + 1 inSection:currentOriginalIndexPath.section]; - originalAdIndexPaths[index] = newOriginalIndexPath; - - NSIndexPath *currentAdjustedIndexPath = adjustedAdIndexPaths[index]; - NSIndexPath *newAdjustedIndexPath = [NSIndexPath indexPathForRow:currentAdjustedIndexPath.row + 1 inSection:currentAdjustedIndexPath.section]; - adjustedAdIndexPaths[index] = newAdjustedIndexPath; -} - -- (void)decrementDesiredIndexPathsAtIndex:(NSUInteger)index inSection:(NSUInteger)section -{ - NSMutableArray *desiredOriginalPositions = [self positioningArrayForSection:section inDictionary:self.desiredOriginalPositions]; - NSMutableArray *desiredInsertionPositions = [self positioningArrayForSection:section inDictionary:self.desiredInsertionPositions]; - - NSIndexPath *currentDesiredOriginalPosition = desiredOriginalPositions[index]; - NSIndexPath *newDesiredOriginalPosition = [NSIndexPath indexPathForRow:currentDesiredOriginalPosition.row - 1 inSection:currentDesiredOriginalPosition.section]; - desiredOriginalPositions[index] = newDesiredOriginalPosition; - - NSIndexPath *currentDesiredInsertionPosition = desiredInsertionPositions[index]; - NSIndexPath *newDesiredInsertionPosition = [NSIndexPath indexPathForRow:currentDesiredInsertionPosition.row - 1 inSection:currentDesiredInsertionPosition.section]; - desiredInsertionPositions[index] = newDesiredInsertionPosition; -} - -- (void)decrementPlacedIndexPathsAtIndex:(NSUInteger)index inSection:(NSUInteger)section -{ - NSMutableArray *originalAdIndexPaths = [self positioningArrayForSection:section inDictionary:self.originalAdIndexPaths]; - NSMutableArray *adjustedAdIndexPaths = [self positioningArrayForSection:section inDictionary:self.adjustedAdIndexPaths]; - - NSIndexPath *currentOriginalIndexPath = originalAdIndexPaths[index]; - NSIndexPath *newOriginalIndexPath = [NSIndexPath indexPathForRow:currentOriginalIndexPath.row - 1 inSection:currentOriginalIndexPath.section]; - originalAdIndexPaths[index] = newOriginalIndexPath; - - NSIndexPath *currentAdjustedIndexPath = adjustedAdIndexPaths[index]; - NSIndexPath *newAdjustedIndexPath = [NSIndexPath indexPathForRow:currentAdjustedIndexPath.row - 1 inSection:currentAdjustedIndexPath.section]; - adjustedAdIndexPaths[index] = newAdjustedIndexPath; -} - -#pragma mark - Section modification helpers - -- (NSUInteger)largestSectionIndexContainingAds -{ - return [[[self.desiredInsertionPositions allKeys] valueForKeyPath:@"@max.unsignedIntValue"] unsignedIntegerValue]; -} - -// Does not update the index path sections. Call updateSectionForPositioningArray to update the sections in the index paths. -- (void)copyPositioningArrayInDictionary:(NSMutableDictionary *)dict atSection:(NSUInteger)atSection toSection:(NSUInteger)toSection -{ - if (dict[@(atSection)]) { - dict[@(toSection)] = dict[@(atSection)]; - } -} - -- (void)clearPositioningArraysInDictionariesAtSection:(NSUInteger)section -{ - [self.desiredInsertionPositions removeObjectForKey:@(section)]; - [self.desiredOriginalPositions removeObjectForKey:@(section)]; - [self.adjustedAdIndexPaths removeObjectForKey:@(section)]; - [self.originalAdIndexPaths removeObjectForKey:@(section)]; - [self.adDataObjects removeObjectForKey:@(section)]; -} - -// Moves the positioning arrays to the correct spots in the dictionaries and also updates the sections for all the index paths. -- (void)moveAllPositioningArraysInDictionariesAtSection:(NSUInteger)atSection toSection:(NSUInteger)toSection -{ - [self copyPositioningArrayInDictionary:self.desiredInsertionPositions atSection:atSection toSection:toSection]; - [self copyPositioningArrayInDictionary:self.desiredOriginalPositions atSection:atSection toSection:toSection]; - [self copyPositioningArrayInDictionary:self.adjustedAdIndexPaths atSection:atSection toSection:toSection]; - [self copyPositioningArrayInDictionary:self.originalAdIndexPaths atSection:atSection toSection:toSection]; - [self copyPositioningArrayInDictionary:self.adDataObjects atSection:atSection toSection:toSection]; - - [self updateAllSectionsForPositioningArraysAtSection:toSection]; - - [self clearPositioningArraysInDictionariesAtSection:atSection]; -} - -- (void)updateAllSectionsForPositioningArraysAtSection:(NSUInteger)section -{ - [self updateSectionForPositioningArray:self.desiredInsertionPositions[@(section)] toSection:section]; - [self updateSectionForPositioningArray:self.desiredOriginalPositions[@(section)] toSection:section]; - [self updateSectionForPositioningArray:self.adjustedAdIndexPaths[@(section)] toSection:section]; - [self updateSectionForPositioningArray:self.originalAdIndexPaths[@(section)] toSection:section]; -} - -- (void)updateSectionForPositioningArray:(NSMutableArray *)positioningArray toSection:(NSUInteger)section -{ - for (NSUInteger i = 0; i < positioningArray.count; ++i) { - NSIndexPath *indexPath = positioningArray[i]; - - NSUInteger indices[] = { section, [indexPath indexAtPosition:1] }; - positioningArray[i] = [NSIndexPath indexPathWithIndexes:indices length:2]; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacer.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacer.h deleted file mode 100644 index 2c1d0817b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacer.h +++ /dev/null @@ -1,273 +0,0 @@ -// -// MPStreamAdPlacer.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPClientAdPositioning.h" - -@protocol MPStreamAdPlacerDelegate; -@protocol MPNativeAdRendering; -@class MPNativeAdRequestTargeting; -@class MPNativeAd; - -/** - * The `MPStreamAdPlacer` class allows you to retrieve native ads from the MoPub ad server and - * place them into any custom UI component that represents a stream of content. It does not actually - * present or insert any ads on its own; you must provide a delegate conforming to the - * `MPStreamAdPlacerDelegate` protocol to handle ad insertions. - * - * @warning **Note:** If you are inserting ads into a `UITableView` or `UICollectionView`, you - * should first consider whether the `UITableViewAdPlacer` or `UICollectionViewAdPlacer` classes are - * sufficient for your use case before choosing to use this class. - * - * @discussion Your app's first responsibility when creating a stream ad placer is to communicate - * the state of your stream. Specifically, you must provide it with the count of the - * original content items in your stream using -setItemCount:forSection:, so that it can determine - * where and how many ads should appear. Additionally, you must also make sure to notify the ad - * placer of any insertions, deletions, or rearrangement of content items or sections. - * - * Use the -loadAdsForAdUnitID: method to tell the stream ad placer to begin retrieving ads. In - * order to optimize performance, this call may not immediately result in the ad placer asking its - * delegate to insert any ads. Instead, the ad placer decides whether to insert ads by determining - * what content items are currently visible. This means that your delegate may be intermittently - * informed about new insertions, and is meant to minimize situations in which ads are requested for - * positions in the stream that have a low likelihood of visibility. - * - * ### Responding to Insertions and Rendering Ads - * - * Your delegate should respond to insertion callbacks by updating your stream's data source so - * that it knows to render an ad (rather than an original content item) at the given index path. - * Note that the implementation may vary depending on the design of your data source. - * - * Use -renderAdAtIndexPath:inView: to populate a view with the contents of an ad. - */ - -@interface MPStreamAdPlacer : NSObject - -/** - * An array of `NSIndexPath` objects representing the positions of items that are currently visible - * on the screen. - * - * The stream ad placer uses the contents of this array to determine where ads should be inserted. - * It calculates an on-screen range and uses a small look-ahead to place ads where the user is - * likely to view them. - */ -@property (nonatomic, strong) NSArray *visibleIndexPaths; - -@property (nonatomic, readonly) NSArray *rendererConfigurations; -@property (nonatomic, weak) UIViewController *viewController; -@property (nonatomic, weak) id delegate; -@property (nonatomic, readonly, copy) MPAdPositioning *adPositioning; - -/** - * Creates and returns a new ad placer that can display ads in a stream. - * - * @param controller The view controller which should be used to present modal content. - * @param positioning The positioning object that specifies where ads should be shown in the stream. - * @param rendererConfigurations An array of MPNativeAdRendererConfiguration objects that control how - * the native ad is rendered. You should pass in configurations that can render any ad type that - * may be displayed for the given ad unit. - * - */ -+ (instancetype)placerWithViewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations; - -/** - * Lets the ad placer know of how many items are in a section. This allows the ad placer - * to place ads more effectively around its visible range. - * - * @param count How many items are in the section. - * @param section The section that the ad placer is recording the count for. - */ -- (void)setItemCount:(NSUInteger)count forSection:(NSInteger)section; - -/** - * Uses the corresponding rendering class to render content in the view. - * - * @param indexPath The index path of the cell you want to render. - * @param view The view you want to render your contents into. - */ -- (void)renderAdAtIndexPath:(NSIndexPath *)indexPath inView:(UIView *)view; - -/** - * Get the size of the ad at the index path. - * - * @param indexPath Retrieve the size at indexPath. - * @param maxWidth The maximum acceptable width for the view. - * - * @return The size of the ad at indexPath. - */ -- (CGSize)sizeForAdAtIndexPath:(NSIndexPath *)indexPath withMaximumWidth:(CGFloat)maxWidth; - -/** - * Requests ads from the MoPub ad server using the specified ad unit ID. - * - * @param adUnitID A string representing a MoPub ad unit ID. - */ -- (void)loadAdsForAdUnitID:(NSString *)adUnitID; - -/** - * Requests ads from the MoPub ad server using the specified ad unit ID and targeting parameters. - * - * @param adUnitID A string representing a MoPub ad unit ID. - * @param targeting An object containing targeting information, such as geolocation data. - */ -- (void)loadAdsForAdUnitID:(NSString *)adUnitID targeting:(MPNativeAdRequestTargeting *)targeting; - -/** - * Returns whether an ad is ready to be displayed at the indexPath. - * - * @param indexPath The index path to examine for ad readiness. - */ -- (BOOL)isAdAtIndexPath:(NSIndexPath *)indexPath; - -/** - * Returns the number of items in the given section of the stream, including any ads that have been - * inserted. - * - * @param numberOfItems The number of content items. - * @param section The section the method will retrieve the adjusted number of items for. - */ -- (NSUInteger)adjustedNumberOfItems:(NSUInteger)numberOfItems inSection:(NSUInteger)section; - -/** - * Returns the index path representing the location of an item after accounting for ads that have - * been inserted into the stream. - * - * @param indexPath An index path object identifying the original location of a content item, before - * any ads have been inserted into the stream. - */ -- (NSIndexPath *)adjustedIndexPathForOriginalIndexPath:(NSIndexPath *)indexPath; - -/** - * Asks for the original position of a content item, given its position in the stream after ads - * have been inserted. - * - * If the specified index path does not identify a content item, but rather an ad, this method - * will return nil. - * - * @param indexPath An index path object identifying an item in the stream, after ads have been - * inserted. - */ -- (NSIndexPath *)originalIndexPathForAdjustedIndexPath:(NSIndexPath *)indexPath; - -/** - * Returns the index paths representing the locations of items after accounting for ads that have - * been inserted into the stream. - * - * @param indexPaths An array of index path objects each identifying the original location of a - * content item, before any ads have been inserted into the stream. - */ -- (NSArray *)adjustedIndexPathsForOriginalIndexPaths:(NSArray *)indexPaths; - -/** - * Retrieves the original positions of content items, given their positions in the stream after ads - * have been inserted. - * - * If a specified index path does not identify a content item, but rather an ad, it will not be - * included in the result. - * - * @param indexPaths An array of index path objects each identifying an item in the stream, after - * ads have been inserted. - */ -- (NSArray *)originalIndexPathsForAdjustedIndexPaths:(NSArray *)indexPaths; - -/** @name Notifying the Ad Placer of Content Updates */ - -/** - * Tells the ad placer that content items have been inserted at the specified index paths. - * - * This method allows the ad placer to adjust its ad positions correctly. - * - * @param originalIndexPaths An array of NSIndexPath objects that identify positions where content - * has been inserted. - */ -- (void)insertItemsAtIndexPaths:(NSArray *)originalIndexPaths; - -/** - * Tells the ad placer that content items have been deleted at the specified index paths. - * - * This method allows the ad placer to adjust its ad positions correctly, and remove from the - * stream if necessary - * - * @param originalIndexPaths An array of NSIndexPath objects that identify positions where content - * has been deleted. -*/ -- (void)deleteItemsAtIndexPaths:(NSArray *)originalIndexPaths; - -/** - * Tells the ad placer that a content item has moved from one index path to another. - * - * This method allows the ad placer to adjust its ad positions correctly. - * - * @param fromIndexPath The index path identifying the original location of the item. - * @param toIndexPath The destination index path for the item. - */ -- (void)moveItemAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath; - -/** - * Tells the ad placer that sections have been inserted at the specified indices. - * - * This method allows the ad placer to adjust its ad positions correctly. - * - * @param sections An NSIndexSet that identifies the positions where sections - * have been inserted. - */ -- (void)insertSections:(NSIndexSet *)sections; - -/** - * Tells the ad placer that sections have been deleted at the specified indices. - * - * This method allows the ad placer to adjust its ad positions correctly. - * - * @param sections An NSIndexSet that identifies the positions where sections - * have been deleted. - */ -- (void)deleteSections:(NSIndexSet *)sections; - -/** - * Tells the ad placer that a section has moved from one index to another. - * - * This method allows the ad placer to adjust its ad positions correctly. - * - * @param section The index identifying the original location of the section. - * @param newSection The destination index for the section. - */ -- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@protocol MPStreamAdPlacerDelegate - -@optional -- (void)adPlacer:(MPStreamAdPlacer *)adPlacer didLoadAdAtIndexPath:(NSIndexPath *)indexPath; -- (void)adPlacer:(MPStreamAdPlacer *)adPlacer didRemoveAdsAtIndexPaths:(NSArray *)indexPaths; - -/* - * This method is called when a native ad, placed by the stream ad placer, will present a modal view controller. - * - * @param placer The stream ad placer that contains the ad displaying the modal. - */ -- (void)nativeAdWillPresentModalForStreamAdPlacer:(MPStreamAdPlacer *)adPlacer; - -/* - * This method is called when a native ad, placed by the stream ad placer, did dismiss its modal view controller. - * - * @param placer The stream ad placer that contains the ad that dismissed the modal. - */ -- (void)nativeAdDidDismissModalForStreamAdPlacer:(MPStreamAdPlacer *)adPlacer; - -/* - * This method is called when a native ad, placed by the stream ad placer, will cause the app to background due to user interaction with the ad. - * - * @param placer The stream ad placer that contains the ad causing the app to background. - */ -- (void)nativeAdWillLeaveApplicationFromStreamAdPlacer:(MPStreamAdPlacer *)adPlacer; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacer.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacer.m deleted file mode 100644 index da64e7e2b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPStreamAdPlacer.m +++ /dev/null @@ -1,581 +0,0 @@ -// -// MPStreamAdPlacer.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPAdPositioning.h" -#import "MPLogging.h" -#import "MPNativeAd+Internal.h" -#import "MPNativeAdData.h" -#import "MPNativeAdDelegate.h" -#import "MPNativeAdRendererConfiguration.h" -#import "MPNativeAdRendererConstants.h" -#import "MPNativeAdRendering.h" -#import "MPNativeAdSource.h" -#import "MPNativePositionSource.h" -#import "MPNativeView.h" -#import "MPServerAdPositioning.h" -#import "MPStaticNativeAdRenderer.h" -#import "MPStreamAdPlacementData.h" -#import "MPStreamAdPlacer.h" - -static NSInteger const kAdInsertionLookAheadAmount = 3; -static const NSUInteger kIndexPathItemIndex = 1; - -@protocol MPNativeAdRenderer; - -@interface MPStreamAdPlacer () - -@property (nonatomic, strong) NSArray *rendererConfigurations; -@property (nonatomic, strong) MPNativeAdSource *adSource; -@property (nonatomic, strong) MPNativePositionSource *positioningSource; -@property (nonatomic, copy) MPAdPositioning *adPositioning; -@property (nonatomic, strong) MPStreamAdPlacementData *adPlacementData; -@property (nonatomic, copy) NSString *adUnitID; -@property (nonatomic, strong) NSMutableDictionary *sectionCounts; -@property (nonatomic, strong) NSIndexPath *topConsideredIndexPath; -@property (nonatomic, strong) NSIndexPath *bottomConsideredIndexPath; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPStreamAdPlacer - -+ (instancetype)placerWithViewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations -{ - MPStreamAdPlacer *placer = [[self alloc] initWithViewController:controller adPositioning:positioning rendererConfigurations:rendererConfigurations]; - return placer; -} - -- (instancetype)initWithViewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations -{ - NSAssert(controller != nil, @"A stream ad placer cannot be instantiated with a nil view controller."); - NSAssert(positioning != nil, @"A stream ad placer cannot be instantiated with a nil positioning object."); - - for (id rendererConfiguration in rendererConfigurations) { - NSAssert([rendererConfiguration isKindOfClass:[MPNativeAdRendererConfiguration class]], @"A stream ad placer must be instantiated with rendererConfigurations that are of type MPNativeAdRendererConfiguration."); - } - - self = [super init]; - if (self) { - _viewController = controller; - _adPositioning = [positioning copy]; - _adSource = [[MPNativeAdSource alloc] initWithDelegate:self]; - _adPlacementData = [[MPStreamAdPlacementData alloc] initWithPositioning:_adPositioning]; - _rendererConfigurations = rendererConfigurations; - _sectionCounts = [[NSMutableDictionary alloc] init]; - } - return self; -} - -- (void)dealloc -{ - [_positioningSource cancel]; -} - -- (void)setVisibleIndexPaths:(NSArray *)visibleIndexPaths -{ - if (visibleIndexPaths.count == 0) { - _visibleIndexPaths = nil; - self.topConsideredIndexPath = nil; - self.bottomConsideredIndexPath = nil; - return; - } - - _visibleIndexPaths = [visibleIndexPaths sortedArrayUsingSelector:@selector(compare:)]; - self.topConsideredIndexPath = self.visibleIndexPaths.firstObject; - self.bottomConsideredIndexPath = [self furthestValidIndexPathAfterIndexPath:self.visibleIndexPaths.lastObject withinDistance:visibleIndexPaths.count + kAdInsertionLookAheadAmount]; - - [self fillAdsInConsideredRange]; -} - -- (void)setItemCount:(NSUInteger)count forSection:(NSInteger)section -{ - self.sectionCounts[@(section)] = @(count); -} - -- (void)renderAdAtIndexPath:(NSIndexPath *)indexPath inView:(UIView *)view -{ - MPNativeAdData *adData = [self.adPlacementData adDataAtAdjustedIndexPath:indexPath]; - - if (!adData) { - MPLogError(@"-renderAdAtIndexPath: An ad does not exist at indexPath"); - return; - } - - // Remove any old native ad views from the view prior to adding the new ad view as a sub view. - for (UIView *subview in view.subviews) { - if ([subview isKindOfClass:[MPNativeView class]]) { - [subview removeFromSuperview]; - } - } - - [view addSubview:[adData.ad retrieveAdViewWithError:nil]]; - - CGSize adSize = [self sizeForAd:adData.ad withMaximumWidth:view.bounds.size.width andIndexPath:indexPath]; - [adData.ad updateAdViewSize:adSize]; -} - -- (CGSize)sizeForAdAtIndexPath:(NSIndexPath *)indexPath withMaximumWidth:(CGFloat)maxWidth -{ - MPNativeAdData *adData = [self.adPlacementData adDataAtAdjustedIndexPath:indexPath]; - - // Tell the ad that it should resize the native ad view. - CGSize adSize = [self sizeForAd:adData.ad withMaximumWidth:maxWidth andIndexPath:indexPath]; - [adData.ad updateAdViewSize:adSize]; - - return adSize; -} - -- (void)loadAdsForAdUnitID:(NSString *)adUnitID -{ - [self loadAdsForAdUnitID:adUnitID targeting:nil]; -} - -- (void)loadAdsForAdUnitID:(NSString *)adUnitID targeting:(MPNativeAdRequestTargeting *)targeting -{ - self.adUnitID = adUnitID; - - // Gather all the index paths with ads so we can notify the delegate that ads were removed. - NSMutableArray *adIndexPaths = [NSMutableArray array]; - for (NSNumber *section in self.sectionCounts) { - NSInteger intSection = [section unsignedIntegerValue]; - [adIndexPaths addObjectsFromArray:[self.adPlacementData adjustedIndexPathsWithAdsInSection:intSection]]; - } - - if (!adUnitID) { - // We need some placement data. Pass nil to it so it doesn't do any unnecessary work. - self.adPlacementData = [[MPStreamAdPlacementData alloc] initWithPositioning:nil]; - } else if ([self.adPositioning isKindOfClass:[MPClientAdPositioning class]]) { - // Reset to a placement data that has "desired" ads but not "placed" ones. - self.adPlacementData = [[MPStreamAdPlacementData alloc] initWithPositioning:self.adPositioning]; - } else if ([self.adPositioning isKindOfClass:[MPServerAdPositioning class]]) { - // Reset to a placement data that has no "desired" ads at all. - self.adPlacementData = [[MPStreamAdPlacementData alloc] initWithPositioning:nil]; - - // Get positioning information from the server. - self.positioningSource = [[MPNativePositionSource alloc] init]; - __weak __typeof__(self) weakSelf = self; - [self.positioningSource loadPositionsWithAdUnitIdentifier:self.adUnitID completionHandler:^(MPAdPositioning *positioning, NSError *error) { - __typeof__(self) strongSelf = weakSelf; - - if (!strongSelf) { - return; - } - - if (error) { - if ([error code] == MPNativePositionSourceEmptyResponse) { - MPLogError(@"ERROR: Ad placer cannot show any ads because ad positions have " - @"not been configured for your ad unit %@. You must assign positions " - @"by editing the ad unit's settings on the MoPub website.", - strongSelf.adUnitID); - } else { - MPLogError(@"ERROR: Ad placer failed to get positions from the ad server for " - @"ad unit ID %@. Error: %@", strongSelf.adUnitID, error); - } - } else { - strongSelf.adPlacementData = [[MPStreamAdPlacementData alloc] initWithPositioning:positioning]; - } - }]; - } - - if (adIndexPaths.count > 0) { - [self.delegate adPlacer:self didRemoveAdsAtIndexPaths:adIndexPaths]; - } - - if (!adUnitID) { - MPLogError(@"Ad placer cannot load ads with a nil ad unit ID."); - return; - } - - [self.adSource loadAdsWithAdUnitIdentifier:adUnitID rendererConfigurations:self.rendererConfigurations andTargeting:targeting]; -} - -- (BOOL)isAdAtIndexPath:(NSIndexPath *)indexPath -{ - return [self.adPlacementData isAdAtAdjustedIndexPath:indexPath]; -} - -- (NSUInteger)adjustedNumberOfItems:(NSUInteger)numberOfItems inSection:(NSUInteger)section -{ - return [self.adPlacementData adjustedNumberOfItems:numberOfItems inSection:section]; -} - -- (NSIndexPath *)adjustedIndexPathForOriginalIndexPath:(NSIndexPath *)indexPath -{ - return [self.adPlacementData adjustedIndexPathForOriginalIndexPath:indexPath]; -} - -- (NSIndexPath *)originalIndexPathForAdjustedIndexPath:(NSIndexPath *)indexPath -{ - return [self.adPlacementData originalIndexPathForAdjustedIndexPath:indexPath]; -} - -- (NSArray *)adjustedIndexPathsForOriginalIndexPaths:(NSArray *)indexPaths -{ - NSMutableArray *adjustedIndexPaths = [NSMutableArray array]; - for (NSIndexPath *indexPath in indexPaths) { - [adjustedIndexPaths addObject:[self adjustedIndexPathForOriginalIndexPath:indexPath]]; - } - return [adjustedIndexPaths copy]; -} - -- (NSArray *)originalIndexPathsForAdjustedIndexPaths:(NSArray *)indexPaths -{ - NSMutableArray *originalIndexPaths = [NSMutableArray array]; - for (NSIndexPath *indexPath in indexPaths) { - NSIndexPath *originalIndexPath = [self originalIndexPathForAdjustedIndexPath:indexPath]; - if (originalIndexPath) { - [originalIndexPaths addObject:originalIndexPath]; - } - } - return [originalIndexPaths copy]; -} - -- (void)insertItemsAtIndexPaths:(NSArray *)originalIndexPaths -{ - [self.adPlacementData insertItemsAtIndexPaths:originalIndexPaths]; - [originalIndexPaths enumerateObjectsUsingBlock:^(NSIndexPath *originalIndexPath, NSUInteger idx, BOOL *stop) { - NSInteger section = originalIndexPath.section; - [self setItemCount:[[self.sectionCounts objectForKey:@(section)] integerValue] + 1 forSection:section]; - }]; -} - -- (void)deleteItemsAtIndexPaths:(NSArray *)originalIndexPaths -{ - originalIndexPaths = [originalIndexPaths sortedArrayUsingSelector:@selector(compare:)]; - NSMutableSet *activeSections = [NSMutableSet setWithCapacity:[originalIndexPaths count]]; - [originalIndexPaths enumerateObjectsUsingBlock:^(NSIndexPath *indexPath, NSUInteger idx, BOOL *stop) { - [activeSections addObject:[NSNumber numberWithInteger:indexPath.section]]; - }]; - - NSMutableArray *removedIndexPaths = [NSMutableArray array]; - [activeSections enumerateObjectsUsingBlock:^(NSNumber *section, BOOL *stop) { - NSArray *originalIndexPathsInSection = [originalIndexPaths filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"section = %@", section]]; - NSRange deleteRange = [self rangeToDeleteInSection:section forOriginalContentIndexPaths:originalIndexPathsInSection]; - - NSArray *indexPathsToDelete = [self.adPlacementData adjustedAdIndexPathsInAdjustedRange:deleteRange inSection:[section integerValue]]; - [removedIndexPaths addObjectsFromArray:indexPathsToDelete]; - [self.adPlacementData clearAdsInAdjustedRange:deleteRange inSection:[section integerValue]]; - }]; - - [self.adPlacementData deleteItemsAtIndexPaths:originalIndexPaths]; - - [originalIndexPaths enumerateObjectsUsingBlock:^(NSIndexPath *originalIndexPath, NSUInteger idx, BOOL *stop) { - NSInteger section = originalIndexPath.section; - [self setItemCount:[[self.sectionCounts objectForKey:@(section)] integerValue] - 1 forSection:section]; - }]; - - if ([removedIndexPaths count]) { - [self.delegate adPlacer:self didRemoveAdsAtIndexPaths:removedIndexPaths]; - } -} - -- (void)moveItemAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath -{ - [self.adPlacementData moveItemAtIndexPath:fromIndexPath toIndexPath:toIndexPath]; -} - -- (void)insertSections:(NSIndexSet *)sections -{ - [self.adPlacementData insertSections:sections]; - [self insertItemCountSections:sections]; -} - -- (void)deleteSections:(NSIndexSet *)sections -{ - [self.adPlacementData deleteSections:sections]; - [self deleteItemCountSections:sections]; -} - -- (void)moveSection:(NSInteger)section toSection:(NSInteger)newSection -{ - [self.adPlacementData moveSection:section toSection:newSection]; - - NSUInteger originalSectionCount = [self.sectionCounts[@(section)] unsignedIntegerValue]; - - [self deleteItemCountSections:[NSIndexSet indexSetWithIndex:section]]; - [self insertItemCountSections:[NSIndexSet indexSetWithIndex:newSection]]; - - [self setItemCount:originalSectionCount forSection:newSection]; -} - -#pragma mark - Private - -- (void)insertItemCountSections:(NSIndexSet *)sections -{ - [sections enumerateIndexesUsingBlock:^(NSUInteger insertionSection, BOOL *stop) { - // Explicitly casting indices to NSInteger because we're counting backwards. - NSInteger maxSection = [[[self.sectionCounts allKeys] valueForKeyPath:@"@max.unsignedIntValue"] unsignedIntegerValue]; - NSInteger signedInsertionSection = insertionSection; - - // We need to shift all the data above the new section up by 1. This assumes each section has a count (as each section should). - for (NSInteger i = maxSection; i >= signedInsertionSection; --i) { - NSUInteger currentCount = [self.sectionCounts[@(i)] unsignedIntegerValue]; - [self setItemCount:currentCount forSection:i+1]; - } - - // Setting the count to 0 isn't exactly correct, but it will be updated correctly when numberOfItems/Rows is called onthe data source. - [self setItemCount:0 forSection:insertionSection]; - }]; -} - -- (void)deleteItemCountSections:(NSIndexSet *)sections -{ - [sections enumerateIndexesWithOptions:NSEnumerationReverse usingBlock:^(NSUInteger deletionSection, BOOL *stop) { - NSUInteger maxSection = [[[self.sectionCounts allKeys] valueForKeyPath:@"@max.unsignedIntValue"] unsignedIntegerValue]; - - // We need to shift all the data above the deletionSection down by 1. This assumes each section has a count (as each section should). - for (NSUInteger i = deletionSection; i <= maxSection; ++i) { - NSUInteger nextCount = [self.sectionCounts[@(i+1)] unsignedIntegerValue]; - [self setItemCount:nextCount forSection:i]; - } - - [self.sectionCounts removeObjectForKey:@(maxSection)]; - }]; -} - -/* - * Returns the range to consider removing cells from the datasource for a given section. - * - * We want to prevent a state where ads are present after the last remaining content item. - * In order to do this, we need to find the range between the last remaining content item - * (after deletion occurs) and last item being deleted. If the end of this range includes - * the (current) last remaining item, we should delete all ads within the range, since they - * would otherwise be "trailing" ads. - * - * The range returned from this method will not include any ads that appear before the - * last remaining content item, because all we care about is preventing trailing ads. - */ -- (NSRange)rangeToDeleteInSection:(NSNumber *)section forOriginalContentIndexPaths:(NSArray *)originalContentIndexPaths -{ - NSRange rangeToDelete = NSMakeRange(0, 0); - NSInteger sectionCount = [self.sectionCounts[section] integerValue]; - //In order to remove trailing ads, we need to find the first index path of the last contiguous block of content items - //That we're deleting. Using the item of this index path, we can create a range in which to remove ads from the datasource. - __block NSIndexPath *firstIndexPathOfLastContiguousContentItemBlock = [originalContentIndexPaths lastObject]; - - //determines if the last content item is being deleted. If not, no ads will be deleted. - if (sectionCount == firstIndexPathOfLastContiguousContentItemBlock.row + 1) { - - //Traverses (in reverse) the content index paths being deleted until it reaches the beginning of the section (all items being deleted), or a gap in that block. - [[[originalContentIndexPaths reverseObjectEnumerator] allObjects] enumerateObjectsUsingBlock:^(NSIndexPath *contentPath, NSUInteger idx, BOOL *stop) { - if (idx > 0 && contentPath.row == firstIndexPathOfLastContiguousContentItemBlock.row - 1) { - firstIndexPathOfLastContiguousContentItemBlock = contentPath; - } - }]; - - NSInteger sectionTotal = [self.adPlacementData adjustedNumberOfItems:sectionCount inSection:[section integerValue]]; - - if (firstIndexPathOfLastContiguousContentItemBlock.row == 0) { - rangeToDelete = NSMakeRange(0, sectionTotal); - } else { - //Last content item *not* being deleted - will be the new end of the section. - NSIndexPath *lastRemainingContentIndexPath = [NSIndexPath indexPathForRow:firstIndexPathOfLastContiguousContentItemBlock.row - 1 inSection:firstIndexPathOfLastContiguousContentItemBlock.section]; - NSIndexPath *adjustedLastContent = [self.adPlacementData adjustedIndexPathForOriginalIndexPath:lastRemainingContentIndexPath]; - rangeToDelete = NSMakeRange(adjustedLastContent.row, sectionTotal - adjustedLastContent.row); - } - } - return rangeToDelete; -} - -- (NSIndexPath *)furthestValidIndexPathAfterIndexPath:(NSIndexPath *)startingPath withinDistance:(NSUInteger)numberOfItems -{ - NSUInteger section = [startingPath indexAtPosition:0]; - NSInteger itemIndex = [startingPath indexAtPosition:1]; - - NSNumber *sectionCountNumber = self.sectionCounts[@(section)]; - NSUInteger sectionItemCount = [sectionCountNumber unsignedIntegerValue]; - NSUInteger itemsPassed = 0; - while (itemsPassed < numberOfItems) { - if (sectionItemCount > (itemIndex + 1)) { - ++itemIndex; - ++itemsPassed; - } else { - // Ignore 0 sized sections. - NSUInteger trySection = section; - do { - ++trySection; - sectionCountNumber = self.sectionCounts[@(trySection)]; - sectionItemCount = [sectionCountNumber unsignedIntegerValue]; - } while (sectionCountNumber && sectionItemCount == 0); - - // We can exit and use the last known valid index path if we can't get a section count number. - if (!sectionCountNumber) { - break; - } else { - // Otherwise we move onto the next non-zero section. - section = trySection; - ++itemsPassed; - itemIndex = 0; - } - } - } - - NSUInteger indices[] = {section, itemIndex}; - return [NSIndexPath indexPathWithIndexes:indices length:2]; -} - -- (NSIndexPath *)earliestValidIndexPathBeforeIndexPath:(NSIndexPath *)startingPath withinDistance:(NSUInteger)numberOfItems -{ - NSUInteger section = [startingPath indexAtPosition:0]; - NSInteger itemIndex = [startingPath indexAtPosition:1]; - - NSUInteger itemsPassed = 0; - while (itemsPassed < numberOfItems) { - if ((itemIndex - 1) >= 0) { - --itemIndex; - ++itemsPassed; - } else { - // Ignore 0 sized sections. - NSNumber *sectionCountNumber; - NSUInteger trySection = section; - NSUInteger trySectionCount; - - do { - --trySection; - sectionCountNumber = self.sectionCounts[@(trySection)]; - trySectionCount = [sectionCountNumber unsignedIntegerValue]; - } while (sectionCountNumber && trySectionCount == 0); - - // Exit and use the last known valid index path. - if (!sectionCountNumber) { - break; - } else { - // Otherwise we move backwards. - section = trySection; - itemIndex = trySectionCount - 1; - ++itemsPassed; - } - } - } - - NSUInteger indices[] = {section, itemIndex}; - return [NSIndexPath indexPathWithIndexes:indices length:2]; -} - -// Determines whether or not insertionPath is close enough to the visible cells to place an ad at insertionPath. -- (BOOL)shouldPlaceAdAtIndexPath:(NSIndexPath *)insertionPath -{ - if (!self.topConsideredIndexPath || !self.bottomConsideredIndexPath || !insertionPath) { - return NO; - } - - // We need to make sure the insertionPath is actually at a valid index in a section by confirming the index is less than the count in the section. - NSUInteger originalSectionCount = [self.sectionCounts[@(insertionPath.section)] unsignedIntegerValue]; - NSUInteger adjustedSectionCount = [self adjustedNumberOfItems:originalSectionCount inSection:insertionPath.section]; - - if ([insertionPath indexAtPosition:kIndexPathItemIndex] >= adjustedSectionCount) { - return NO; - } - - NSIndexPath *topAdjustedIndexPath = [self adjustedIndexPathForOriginalIndexPath:self.topConsideredIndexPath]; - NSIndexPath *bottomAdjustedIndexPath = [self adjustedIndexPathForOriginalIndexPath:self.bottomConsideredIndexPath]; - - return ([topAdjustedIndexPath compare:insertionPath] != NSOrderedDescending) && ([bottomAdjustedIndexPath compare:insertionPath] != NSOrderedAscending); -} - -- (MPNativeAdData *)retrieveAdDataForInsertionPath:(NSIndexPath *)insertionPath -{ - MPNativeAd *adObject = [self.adSource dequeueAdForAdUnitIdentifier:self.adUnitID]; - - if (!adObject) { - return nil; - } - - MPNativeAdData *adData = [[MPNativeAdData alloc] init]; - adData.adUnitID = self.adUnitID; - adData.ad = adObject; - - return adData; -} - -- (void)fillAdsInConsideredRange -{ - if (!self.topConsideredIndexPath || !self.bottomConsideredIndexPath) { - return; - } - - NSIndexPath *topAdjustedIndexPath = [self adjustedIndexPathForOriginalIndexPath:self.topConsideredIndexPath]; - NSIndexPath *insertionPath = [self.adPlacementData nextAdInsertionIndexPathForAdjustedIndexPath:topAdjustedIndexPath]; - - while ([self shouldPlaceAdAtIndexPath:insertionPath]) { - MPNativeAdData *adData = [self retrieveAdDataForInsertionPath:insertionPath]; - adData.ad.delegate = self; - - if (!adData) { - break; - } - - [self.adPlacementData insertAdData:adData atIndexPath:insertionPath]; - [self.delegate adPlacer:self didLoadAdAtIndexPath:insertionPath]; - - insertionPath = [self.adPlacementData nextAdInsertionIndexPathForAdjustedIndexPath:insertionPath]; - } -} - -#pragma mark - - -- (void)adSourceDidFinishRequest:(MPNativeAdSource *)source -{ - [self fillAdsInConsideredRange]; -} - -#pragma mark - - -- (UIViewController *)viewControllerForPresentingModalView -{ - return self.viewController; -} - -- (void)willPresentModalForNativeAd:(MPNativeAd *)nativeAd -{ - if ([self.delegate respondsToSelector:@selector(nativeAdWillPresentModalForStreamAdPlacer:)]) { - [self.delegate nativeAdWillPresentModalForStreamAdPlacer:self]; - } -} - -- (void)didDismissModalForNativeAd:(MPNativeAd *)nativeAd -{ - if ([self.delegate respondsToSelector:@selector(nativeAdDidDismissModalForStreamAdPlacer:)]) { - [self.delegate nativeAdDidDismissModalForStreamAdPlacer:self]; - } -} - -- (void)willLeaveApplicationFromNativeAd:(MPNativeAd *)nativeAd -{ - if ([self.delegate respondsToSelector:@selector(nativeAdWillLeaveApplicationFromStreamAdPlacer:)]) { - [self.delegate nativeAdWillLeaveApplicationFromStreamAdPlacer:self]; - } -} - -#pragma mark - Internal - -- (CGSize)sizeForAd:(MPNativeAd *)ad withMaximumWidth:(CGFloat)maxWidth andIndexPath:(NSIndexPath *)indexPath -{ - id renderer = ad.renderer; - - CGSize adSize; - - if ([renderer respondsToSelector:@selector(viewSizeHandler)] && renderer.viewSizeHandler) { - adSize = [renderer viewSizeHandler](maxWidth); - if (adSize.height == MPNativeViewDynamicDimension) { - UIView *adView = [ad retrieveAdViewForSizeCalculationWithError:nil]; - if (adView) { - CGSize hydratedAdViewSize = [adView sizeThatFits:CGSizeMake(adSize.width, CGFLOAT_MAX)]; - return hydratedAdViewSize; - } - } - return adSize; - } - - adSize = CGSizeMake(maxWidth, 44.0f); - MPLogWarn(@"WARNING: + (CGSize)viewSizeHandler is NOT implemented for native ad renderer %@ at index path %@. You MUST implement this method to ensure that ad placer native ad cells are correctly sized. Returning a default size of %@ for now.", NSStringFromClass([(id)renderer class]), indexPath, NSStringFromCGSize(adSize)); - - return adSize; -} -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPTableViewAdPlacer.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPTableViewAdPlacer.h deleted file mode 100644 index b18bb3753..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPTableViewAdPlacer.h +++ /dev/null @@ -1,432 +0,0 @@ -// -// MPTableViewAdPlacer.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPClientAdPositioning.h" -#import "MPServerAdPositioning.h" - -@class MPNativeAdRequestTargeting; -@protocol MPTableViewAdPlacerDelegate; - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * The `MPTableViewAdPlacer` class allows you to request native ads from the MoPub ad server and - * place them into a `UITableView` object. - * - * When an instance of this class is initialized with a table view, it wraps the table view's - * data source and delegate in order to insert ads and adjust the positions of your regular - * content cells. - */ - -@interface MPTableViewAdPlacer : NSObject - -@property (nonatomic, weak) id delegate; - -/** @name Initializing a Table View Ad Placer */ - -/** - * Creates and returns an ad placer that will insert ads into a table view at positions that can - * be configured dynamically on the MoPub website. - * - * When you make an ad request, the ad placer will ask the MoPub ad server for the positions where - * ads should be inserted into the table view. You can configure these positioning values by - * editing your ad unit's settings on the MoPub website. - * - * Using this method is equivalent to calling - * +placerWithTableView:viewController:adPositioning:rendererConfigurations: and passing in an - * `MPServerAdPositioning` object as the `positioning` parameter. - * - * @param tableView The table view in which to insert ads. - * @param controller The view controller which should be used to present modal content. - * @param rendererConfigurations An array of MPNativeAdRendererConfiguration objects that control how - * the native ad is rendered. You should pass in configurations that can render any ad type that - * may be displayed for the given ad unit. - * - * @return An `MPTableViewAdPlacer` object. - */ -+ (instancetype)placerWithTableView:(UITableView *)tableView viewController:(UIViewController *)controller rendererConfigurations:(NSArray *)rendererConfigurations; - -/** - * Creates and returns an ad placer that will insert ads into a table view at specified positions. - * - * When using this method, there are two options for controlling the positions where ads appear - * within the table view. - * - * First, you may pass an `MPServerAdPositioning` object as the `positioning` parameter, which tells - * the ad placer to obtain positioning information dynamically from the ad server, which you can - * configure on the MoPub website. In many cases, this is the preferred approach, since it allows - * you to modify the positions without rebuilding your application. Note that calling the - * convenience method +placerWithTableView:viewController:defaultAdRenderingClass: accomplishes - * this as well. - * - * Alternatively, if you wish to hard-code your positions, you may pass an `MPClientAdPositioning` - * object instead. - * - * @param tableView The table view in which to insert ads. - * @param controller The view controller which should be used to present modal content. - * @param positioning The positioning object that specifies where ads should be shown in the stream. - * @param rendererConfigurations An array of MPNativeAdRendererConfiguration objects that control how - * the native ad is rendered. You should pass in configurations that can render any ad type that - * may be displayed for the given ad unit. - * - * @return An `MPTableViewAdPlacer` object. - */ -+ (instancetype)placerWithTableView:(UITableView *)tableView viewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations; - -/** @name Requesting Ads */ - -/** - * Requests ads from the MoPub ad server using the specified ad unit ID. - * - * @param adUnitID A string representing a MoPub ad unit ID. - */ -- (void)loadAdsForAdUnitID:(NSString *)adUnitID; - -/** - * Requests ads from the MoPub ad server using the specified ad unit ID and targeting parameters. - * - * @param adUnitID A string representing a MoPub ad unit ID. - * @param targeting An object containing targeting information, such as geolocation data. - */ -- (void)loadAdsForAdUnitID:(NSString *)adUnitID targeting:(MPNativeAdRequestTargeting *)targeting; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -/** - * The MoPub SDK adds interfaces to the `UITableView` class to help your application with - * responsibilities related to `MPTableViewAdPlacer`. These APIs include methods to help notify the - * ad placer of all modifications to the original table view, as well as to simplify your - * application code such that it does not need to perform index path manipulations to account for - * the presence of ads. - * - * Since the ad placer replaces the original data source and delegate objects of your table view, - * the SDK also provides new methods for you to set these properties such that the ad placer remains - * aware of the changes. - */ - -@interface UITableView (MPTableViewAdPlacer) - -- (void)mp_setAdPlacer:(MPTableViewAdPlacer *)placer; - -/** @name Obtaining the Table View Ad Placer */ - -/** - * Returns the ad placer currently being used for this table view. - * - * @return An ad placer object or `nil` if no ad placer is being used. - */ -- (MPTableViewAdPlacer *)mp_adPlacer; - -/** @name Setting and Getting the Delegate and Data Source */ - -/** - * Sets the table view's data source. - * - * If your application needs to change a table view's data source after it has instantiated an ad - * placer using that table view, use this method rather than -[UITableView setDataSource:]. - * - * @param dataSource The new table view data source. - */ -- (void)mp_setDataSource:(id)dataSource; - -/** - * Returns the original data source of the table view. - * - * When you instantiate an ad placer using a table view, the ad placer replaces the table view's - * original data source object. If your application needs to access the original data source, use - * this method instead of -[UITableView dataSource]. - * - * @return The original table view data source. - */ -- (id)mp_dataSource; - -/** - * Sets the table view's delegate. - * - * If your application needs to change a table view's delegate after it has instantiated an ad - * placer using that table view, use this method rather than -[UITableView setDelegate:]. - * - * @param delegate The new table view delegate. - */ -- (void)mp_setDelegate:(id)delegate; - -/** - * Returns the original delegate of the table view. - * - * When you instantiate an ad placer using a table view, the ad placer replaces the table view's - * original delegate object. If your application needs to access the original delegate, use this - * method instead of -[UITableView delegate]. - * - * @return The original table view delegate. - */ -- (id)mp_delegate; - -/** @name Notifying the Table View Ad Placer of Content Changes */ - -/** - * Begin a series of method calls that insert, delete, or select rows and sections of the table - * view. - */ -- (void)mp_beginUpdates; - -/** - * Conclude a series of method calls that insert, delete, select, or reload rows and sections of - * the table view. - */ -- (void)mp_endUpdates; - -/** - * Reloads the rows and sections of the table view. - */ -- (void)mp_reloadData; - -/** - * Inserts rows in the receiver at the locations identified by an array of index paths, and informs - * the attached ad placer of the insertions. - * - * @param indexPaths An array of `NSIndexPath` objects that represent rows to insert into the - * table. - * @param animation A constant that either specifies the kind of animation to perform when - * inserting the cells or requests no animation. - */ -- (void)mp_insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation; - -/** - * Deletes rows in the receiver at the locations identified by an array of index paths, and informs - * the attached ad placer of the deletions. - * - * @param indexPaths An array of `NSIndexPath` objects identifying the rows to delete. - * @param animation A constant that either specifies the kind of animation to perform when - * deleting the cells or requests no animation. - */ -- (void)mp_deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation; - -/** - * Reloads the specified rows using the given animation effect, and informs the attached ad placer - * that the row positions may have changed. - * - * @param indexPaths An array of `NSIndexPath` objects identifying the rows to reload. - * @param animation A constant that indicates how the reloading is to be animated. - */ -- (void)mp_reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation; - -/** - * Moves the row at a specified location to a destination location, taking into account ads - * inserted by the ad placer. - * - * @param indexPath An index path identifying the row to move. - * @param newIndexPath An index path identifying the row that is the destination of the row at - * *indexPath*. - */ -- (void)mp_moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath; - -/** - * Inserts one or more sections in the receiver, and informs the attached ad placer of the - * insertions. - * - * @param sections An index set that specifies the sections to insert in the receiving table view. - * If a section already exists at the specified index location, it is moved down one index - * location. - * @param animation A constant that indicates how the insertion is to be animated. - */ -- (void)mp_insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation; - -/** - * Deletes one or more sections in the receiver, and informs the attached ad placer of the - * deletions. - * - * @param sections An index set that specifies the sections to delete from the receiving table - * view. If a section exists after the specified index location, it is moved up one index location. - * @param animation A constant that either specifies the kind of animation to perform when deleting - * the section or requests no animation. - */ -- (void)mp_deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation; - -/** - * Reloads the specified sections, and informs the attached ad placer that sections may have - * changed. - * - * @param sections An index set identifying the sections to reload. - * @param animation A constant that indicates how the reloading is to be animated. - */ -- (void)mp_reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation; - -/** - * Moves a section to a new location in the table view, and informs the attached ad placer. - * - * @param section The index of the section to move. - * @param newSection The index in the table view that is the destination of the move for the - * section. The existing section at that location slides up or down to an adjoining index position - * to make room for it. - */ -- (void)mp_moveSection:(NSInteger)section toSection:(NSInteger)newSection; - -/** @name Methods Involving Index Paths */ - -/** - * Returns the table view cell at the specified index path. - * - * @param indexPath The index path locating the row in the table view. - * - * @return An object representing a cell of the table or `nil` if the cell is not visible or - * *indexPath* is out of range. - */ -- (UITableViewCell *)mp_cellForRowAtIndexPath:(NSIndexPath *)indexPath; - -/** - * Returns a reusable table-view cell object for the specified reuse identifier. - * - * @param identifier A string identifying the cell object to be reused. This parameter must not be - * `nil`. - * @param indexPath The index path specifying the location of the cell. The data source receives - * this information when asked for the cell and should just pass it along. - * - * @return A `UITableViewCell` object with the associated reuse identifier. - */ -- (id)mp_dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath; - -/** - * Deselects a given row identified by index path, with an option to animate the deselection. - * - * @param indexPath An index path identifying a row in the receiver. - * @param animated YES if you want to animate the deselection and NO if the change should be - * immediate. - */ -- (void)mp_deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated; - -/** - * Returns an index path representing the original row and section of a given table view cell, - * calculated before any ads were inserted. - * - * @param cell A cell object of the table view. - * - * @return An index path representing the row and section of the cell or `nil` if the index path - * is invalid or is a reference to a cell containing an ad. - */ -- (NSIndexPath *)mp_indexPathForCell:(UITableViewCell *)cell; - -/** - * Returns an index path representing the original row and section at the given point. - * - * @param point A point in the local coordinate system of the receiver (the table view's bounds). - * - * @return An index path representing the row and section associated with *point* or `nil` if the - * point is out of bounds of any row or is associated with a cell containing an ad. - */ -- (NSIndexPath *)mp_indexPathForRowAtPoint:(CGPoint)point; - -/** - * Returns the original index path for the selected row, as if no ads have been inserted. - * - * @return The original index path for the selected row. - */ -- (NSIndexPath *)mp_indexPathForSelectedRow; - -/** - * Returns an array of index paths each representing a non-ad row enclosed by a given rectangle, - * calculated before any ads were inserted. - * - * @param rect A rectangle defining an area of the table view in local coordinates. - * - * @return An array of `NSIndexPath` objects each representing a row and section index identifying - * a row within *rect*. Index paths representing ads are not returned. - */ -- (NSArray *)mp_indexPathsForRowsInRect:(CGRect)rect; - -/** - * Returns an array of the original index paths for the selected rows, as if no ads have been - * inserted. - * - * @return An array of the original index paths for the selected rows. - */ -- (NSArray *)mp_indexPathsForSelectedRows; - -/** - * Returns an array of index paths each identifying a visible non-ad row in the table view, - * calculated before any ads were inserted. - * - * @return An array of `NSIndexPath` objects each representing a visible non-ad row in the table - * view. Returns `nil` if no rows are visible. - */ -- (NSArray *)mp_indexPathsForVisibleRows; - -/** - * Returns the drawing area for a row identified by index path. - * - * @param indexPath An index path object that identifies a row of your original content. - * - * @return A rectangle defining the area in which the table view draws the row or `CGRectZero` if - * *indexPath* is invalid. - */ -- (CGRect)mp_rectForRowAtIndexPath:(NSIndexPath *)indexPath; - -/** - * Scrolls the table view so that the selected row nearest to a specified position in the table - * view is at that position. - * - * @param indexPath An index path that identifies a row in the table view by its row index and - * its section index. - * @param scrollPosition A constant that identifies a relative position in the receiving table view - * (top, middle, bottom) for row when scrolling concludes. - * @param animated YES if you want to animate the change in position, NO if it should be - * immediate. - */ -- (void)mp_scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated; - -/** - * Selects a row in the receiver identified by index path, optionally scrolling the row to a - * location in the receiver. - * - * @param indexPath An index path identifying a row in the receiver. - * @param animated YES if you want to animate the selection and any change in position, NO if - * the change should be immediate. - * @param scrollPosition A constant that identifies a relative position in the receiving table view - * (top, middle, bottom) for the row when scrolling concludes. - */ -- (void)mp_selectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition; - -/** - * Returns an array of the non-ad cells that are visible in the table view. - * - * @return An array containing `UITableViewCell` objects, each representing a visible, non-ad cell - * in the receiving table view. - */ -- (NSArray *)mp_visibleCells; - -@end - -@protocol MPTableViewAdPlacerDelegate - -@optional - -/* - * This method is called when a native ad, placed by the table view ad placer, will present a modal view controller. - * - * @param placer The table view ad placer that contains the ad displaying the modal. - */ --(void)nativeAdWillPresentModalForTableViewAdPlacer:(MPTableViewAdPlacer *)placer; - -/* - * This method is called when a native ad, placed by the table view ad placer, did dismiss its modal view controller. - * - * @param placer The table view ad placer that contains the ad that dismissed the modal. - */ --(void)nativeAdDidDismissModalForTableViewAdPlacer:(MPTableViewAdPlacer *)placer; - -/* - * This method is called when a native ad, placed by the table view ad placer, will cause the app to background due to user interaction with the ad. - * - * @param placer The table view ad placer that contains the ad causing the app to background. - */ --(void)nativeAdWillLeaveApplicationFromTableViewAdPlacer:(MPTableViewAdPlacer *)placer; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPTableViewAdPlacer.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPTableViewAdPlacer.m deleted file mode 100644 index 387fa0d20..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeAds/MPTableViewAdPlacer.m +++ /dev/null @@ -1,872 +0,0 @@ -// -// MPTableViewAdPlacer.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPTableViewAdPlacer.h" -#import "MPStreamAdPlacer.h" -#import "MPAdPlacerInvocation.h" -#import "MPTimer.h" -#import "MPNativeAdRendering.h" -#import "MPNativeAdUtils.h" -#import "MPGlobal.h" -#import "MPNativeAdRendererConfiguration.h" -#import "MPTableViewAdPlacerCell.h" -#import - -static NSString * const kTableViewAdPlacerReuseIdentifier = @"MPTableViewAdPlacerReuseIdentifier"; - -@interface MPTableViewAdPlacer () - -@property (nonatomic, strong) MPStreamAdPlacer *streamAdPlacer; -@property (nonatomic, strong) UITableView *tableView; -@property (nonatomic, weak) id originalDataSource; -@property (nonatomic, weak) id originalDelegate; -@property (nonatomic, strong) MPTimer *insertionTimer; - -@end - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -@implementation MPTableViewAdPlacer - -+ (instancetype)placerWithTableView:(UITableView *)tableView viewController:(UIViewController *)controller rendererConfigurations:(NSArray *)rendererConfigurations -{ - return [[self class] placerWithTableView:tableView viewController:controller adPositioning:[MPServerAdPositioning positioning] rendererConfigurations:rendererConfigurations]; -} - -+ (instancetype)placerWithTableView:(UITableView *)tableView viewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations -{ - MPTableViewAdPlacer *tableViewAdPlacer = [[MPTableViewAdPlacer alloc] initWithTableView:tableView viewController:controller adPositioning:positioning rendererConfigurations:rendererConfigurations]; - return tableViewAdPlacer; -} - -- (instancetype)initWithTableView:(UITableView *)tableView viewController:(UIViewController *)controller adPositioning:(MPAdPositioning *)positioning rendererConfigurations:(NSArray *)rendererConfigurations -{ - for (id rendererConfiguration in rendererConfigurations) { - NSAssert([rendererConfiguration isKindOfClass:[MPNativeAdRendererConfiguration class]], @"A table view ad placer must be instantiated with rendererConfigurations that are of type MPNativeAdRendererConfiguration."); - } - - if (self = [super init]) { - _tableView = tableView; - _streamAdPlacer = [MPStreamAdPlacer placerWithViewController:controller adPositioning:positioning rendererConfigurations:rendererConfigurations]; - _streamAdPlacer.delegate = self; - - _originalDataSource = tableView.dataSource; - _originalDelegate = tableView.delegate; - tableView.dataSource = self; - tableView.delegate = self; - - [self.tableView registerClass:[MPTableViewAdPlacerCell class] forCellReuseIdentifier:kTableViewAdPlacerReuseIdentifier]; - - [tableView mp_setAdPlacer:self]; - } - return self; -} - -- (void)dealloc -{ - [_insertionTimer invalidate]; -} - -#pragma mark - Public - -- (void)loadAdsForAdUnitID:(NSString *)adUnitID -{ - [self loadAdsForAdUnitID:adUnitID targeting:nil]; -} - -- (void)loadAdsForAdUnitID:(NSString *)adUnitID targeting:(MPNativeAdRequestTargeting *)targeting -{ - if (!self.insertionTimer) { - self.insertionTimer = [MPTimer timerWithTimeInterval:kUpdateVisibleCellsInterval target:self selector:@selector(updateVisibleCells) repeats:YES]; - self.insertionTimer.runLoopMode = NSRunLoopCommonModes; - [self.insertionTimer scheduleNow]; - } - [self.streamAdPlacer loadAdsForAdUnitID:adUnitID targeting:targeting]; -} - -#pragma mark - Ad Insertion - -- (void)updateVisibleCells -{ - NSArray *visiblePaths = self.tableView.mp_indexPathsForVisibleRows; - - if ([visiblePaths count]) { - [self.streamAdPlacer setVisibleIndexPaths:visiblePaths]; - } -} - -#pragma mark - - -- (void)adPlacer:(MPStreamAdPlacer *)adPlacer didLoadAdAtIndexPath:(NSIndexPath *)indexPath -{ - BOOL originalAnimationsEnabled = [UIView areAnimationsEnabled]; - //We only want to enable animations if the index path is before or within our visible cells - BOOL animationsEnabled = ([(NSIndexPath *)[self.tableView.indexPathsForVisibleRows lastObject] compare:indexPath] != NSOrderedAscending) && originalAnimationsEnabled; - - [UIView setAnimationsEnabled:animationsEnabled]; - [self.tableView mp_beginUpdates]; - [self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationMiddle]; - [self.tableView mp_endUpdates]; - [UIView setAnimationsEnabled:originalAnimationsEnabled]; -} - -- (void)adPlacer:(MPStreamAdPlacer *)adPlacer didRemoveAdsAtIndexPaths:(NSArray *)indexPaths -{ - BOOL originalAnimationsEnabled = [UIView areAnimationsEnabled]; - [UIView setAnimationsEnabled:NO]; - [self.tableView mp_beginUpdates]; - [self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone]; - [self.tableView mp_endUpdates]; - [UIView setAnimationsEnabled:originalAnimationsEnabled]; -} - -- (void)nativeAdWillPresentModalForStreamAdPlacer:(MPStreamAdPlacer *)adPlacer -{ - if ([self.delegate respondsToSelector:@selector(nativeAdWillPresentModalForTableViewAdPlacer:)]) { - [self.delegate nativeAdWillPresentModalForTableViewAdPlacer:self]; - } -} - -- (void)nativeAdDidDismissModalForStreamAdPlacer:(MPStreamAdPlacer *)adPlacer -{ - if ([self.delegate respondsToSelector:@selector(nativeAdDidDismissModalForTableViewAdPlacer:)]) { - [self.delegate nativeAdDidDismissModalForTableViewAdPlacer:self]; - } -} - -- (void)nativeAdWillLeaveApplicationFromStreamAdPlacer:(MPStreamAdPlacer *)adPlacer -{ - if ([self.delegate respondsToSelector:@selector(nativeAdWillLeaveApplicationFromTableViewAdPlacer:)]) { - [self.delegate nativeAdWillLeaveApplicationFromTableViewAdPlacer:self]; - } -} - -#pragma mark - - -// Default is 1 if not implemented -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView -{ - if ([self.originalDataSource respondsToSelector:@selector(numberOfSectionsInTableView:)]) { - return [self.originalDataSource numberOfSectionsInTableView:tableView]; - } - else { - return 1; - } -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section -{ - NSUInteger numberOfItems = [self.originalDataSource tableView:tableView numberOfRowsInSection:section]; - [self.streamAdPlacer setItemCount:numberOfItems forSection:section]; - return [self.streamAdPlacer adjustedNumberOfItems:numberOfItems inSection:section]; -} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - MPTableViewAdPlacerCell *cell = (MPTableViewAdPlacerCell *)[tableView dequeueReusableCellWithIdentifier:kTableViewAdPlacerReuseIdentifier forIndexPath:indexPath]; - cell.clipsToBounds = YES; - - [self.streamAdPlacer renderAdAtIndexPath:indexPath inView:cell.contentView]; - return cell; - } - NSIndexPath *originalIndexPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - return [self.originalDataSource tableView:tableView cellForRowAtIndexPath:originalIndexPath]; -} - -- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - return NO; - } - - id datasource = self.originalDataSource; - if ([datasource respondsToSelector:@selector(tableView:canEditRowAtIndexPath:)]) { - NSIndexPath *origPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - return [datasource tableView:tableView canEditRowAtIndexPath:origPath]; - } - - // When the data source doesn't implement tableView:canEditRowAtIndexPath:, Apple assumes the cells are editable. So we return YES. - return YES; -} - -- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDataSource with2ArgSelector:@selector(tableView:canMoveRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation boolResultForInvocation:invocation defaultValue:NO]; -} - -- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDataSource with3ArgIntSelector:@selector(tableView:commitEditingStyle:forRowAtIndexPath:) firstArg:tableView secondArg:editingStyle thirdArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:sourceIndexPath]) { - // Can't move an ad explicitly. - return; - } - - id dataSource = self.originalDataSource; - if ([dataSource respondsToSelector:@selector(tableView:moveRowAtIndexPath:toIndexPath:)]) { - NSIndexPath *origSource = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:sourceIndexPath]; - NSIndexPath *origDestination = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:destinationIndexPath]; - [dataSource tableView:tableView moveRowAtIndexPath:origSource toIndexPath:origDestination]; - } -} - -#pragma mark - - -// We don't override the following: -// -// -tableView:targetIndexPathForMoveFromRowAtIndexPath:toProposedIndexPath - No need to override because -// targeting is typically based on the adjusted paths. -// -// -tableView:accessoryTypeForRowWithIndexPath - Deprecated, and causes a runtime exception. - -- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - return [self.streamAdPlacer sizeForAdAtIndexPath:indexPath withMaximumWidth:CGRectGetWidth(self.tableView.bounds)].height; - } - - if ([self.originalDelegate respondsToSelector:@selector(tableView:heightForRowAtIndexPath:)]) { - NSIndexPath *originalIndexPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - return [self.originalDelegate tableView:tableView heightForRowAtIndexPath:originalIndexPath]; - } - - return tableView.rowHeight; -} - -- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with3ArgSelector:@selector(tableView:willDisplayCell:forRowAtIndexPath:) firstArg:tableView secondArg:cell thirdArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with3ArgSelector:@selector(tableView:didEndDisplayingCell:forRowAtIndexPath:) firstArg:tableView secondArg:cell thirdArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:accessoryButtonTappedForRowWithIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:shouldHighlightRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation boolResultForInvocation:invocation defaultValue:YES]; -} - -- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:didHighlightRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:didUnhighlightRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (NSIndexPath *)tableView:(UITableView *)tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - return indexPath; - } - - id delegate = self.originalDelegate; - if ([delegate respondsToSelector:@selector(tableView:willSelectRowAtIndexPath:)]) { - NSIndexPath *origPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - NSIndexPath *origResult = [delegate tableView:tableView willSelectRowAtIndexPath:origPath]; - return [self.streamAdPlacer adjustedIndexPathForOriginalIndexPath:origResult]; - } - - return indexPath; -} - -- (NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - return indexPath; - } - - id delegate = self.originalDelegate; - if ([delegate respondsToSelector:@selector(tableView:willDeselectRowAtIndexPath:)]) { - NSIndexPath *origPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - NSIndexPath *origResult = [delegate tableView:tableView willDeselectRowAtIndexPath:origPath]; - return [self.streamAdPlacer adjustedIndexPathForOriginalIndexPath:origResult]; - } - - return indexPath; -} - -- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - // The view inside the cell already has a gesture recognizer to handle the tap event. - [self.tableView deselectRowAtIndexPath:indexPath animated:NO]; - return; - } - - id delegate = self.originalDelegate; - if ([delegate respondsToSelector:@selector(tableView:didSelectRowAtIndexPath:)]) { - NSIndexPath *originalPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - [delegate tableView:tableView didSelectRowAtIndexPath:originalPath]; - } -} - -- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:didDeselectRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - return UITableViewCellEditingStyleNone; - } - - id delegate = self.originalDelegate; - if ([delegate respondsToSelector:@selector(tableView:editingStyleForRowAtIndexPath:)]) { - NSIndexPath *origPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - return [delegate tableView:tableView editingStyleForRowAtIndexPath:origPath]; - } - - // Apple returns UITableViewCellEditingStyleDelete by default when the cell is editable. So we'll do the same. - // We'll also return UITableViewCellEditingStyleNone if the cell isn't editable. - BOOL editable = [self tableView:tableView canEditRowAtIndexPath:indexPath]; - - if (editable) { - return UITableViewCellEditingStyleDelete; - } else { - return UITableViewCellEditingStyleNone; - } -} - -- (NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation resultForInvocation:invocation defaultValue:@"Delete"]; -} - -- (BOOL)tableView:(UITableView *)tableView shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:shouldIndentWhileEditingRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation boolResultForInvocation:invocation defaultValue:YES]; -} - -- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:willBeginEditingRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath -{ - [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:didEndEditingRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; -} - -- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:indentationLevelForRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation integerResultForInvocation:invocation - defaultValue:UITableViewCellEditingStyleNone]; -} - -- (BOOL)tableView:(UITableView *)tableView shouldShowMenuForRowAtIndexPath:(NSIndexPath *)indexPath -{ - NSInvocation *invocation = [MPAdPlacerInvocation invokeForTarget:self.originalDelegate with2ArgSelector:@selector(tableView:shouldShowMenuForRowAtIndexPath:) firstArg:tableView secondArg:indexPath streamAdPlacer:self.streamAdPlacer]; - - return [MPAdPlacerInvocation boolResultForInvocation:invocation defaultValue:NO]; -} - -- (BOOL)tableView:(UITableView *)tableView canPerformAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender -{ - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - // Can't copy or paste to an ad. - return NO; - } - - id delegate = self.originalDelegate; - if ([delegate respondsToSelector:@selector(tableView:canPerformAction:forRowAtIndexPath:withSender:)]) { - NSIndexPath *origPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - return [delegate tableView:tableView canPerformAction:action forRowAtIndexPath:origPath withSender:sender]; - } - - return NO; -} - -- (void)tableView:(UITableView *)tableView performAction:(SEL)action forRowAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender { - - if ([self.streamAdPlacer isAdAtIndexPath:indexPath]) { - // Can't copy or paste to an ad. - return; - } - - id delegate = self.originalDelegate; - if ([delegate respondsToSelector:@selector(tableView:performAction:forRowAtIndexPath:withSender:)]) { - NSIndexPath *origPath = [self.streamAdPlacer originalIndexPathForAdjustedIndexPath:indexPath]; - [delegate tableView:tableView performAction:action forRowAtIndexPath:origPath withSender:sender]; - } -} - -- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { - if ([self.originalDelegate respondsToSelector:@selector(tableView:viewForHeaderInSection:)]) { - return [self.originalDelegate tableView:tableView viewForHeaderInSection:section]; - } - - return nil; -} - -- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { - if ([self.originalDelegate respondsToSelector:@selector(tableView:viewForFooterInSection:)]) { - return [self.originalDelegate tableView:tableView viewForFooterInSection:section]; - } - - return nil; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { - if ([self.originalDelegate respondsToSelector:@selector(tableView:heightForHeaderInSection:)]) { - return [self.originalDelegate tableView:tableView heightForHeaderInSection:section]; - } - - return 0; -} - -- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForHeaderInSection:(NSInteger)section { - if ([self.originalDelegate respondsToSelector:@selector(tableView:estimatedHeightForHeaderInSection:)]) { - return [self.originalDelegate tableView:tableView estimatedHeightForHeaderInSection:section]; - } - - return 0; -} - -- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { - if ([self.originalDelegate respondsToSelector:@selector(tableView:heightForFooterInSection:)]) { - return [self.originalDelegate tableView:tableView heightForFooterInSection:section]; - } - - return 0; -} - -- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForFooterInSection:(NSInteger)section { - if ([self.originalDelegate respondsToSelector:@selector(tableView:estimatedHeightForFooterInSection:)]) { - return [self.originalDelegate tableView:tableView estimatedHeightForFooterInSection:section]; - } - - return 0; -} - -#pragma mark - Method Forwarding - -- (BOOL)isKindOfClass:(Class)aClass { - return [super isKindOfClass:aClass] || - [self.originalDataSource isKindOfClass:aClass] || - [self.originalDelegate isKindOfClass:aClass]; -} - -- (BOOL)conformsToProtocol:(Protocol *)aProtocol -{ - return [super conformsToProtocol:aProtocol] || - [self.originalDelegate conformsToProtocol:aProtocol] || - [self.originalDataSource conformsToProtocol:aProtocol]; -} - -- (BOOL)respondsToSelector:(SEL)aSelector -{ - return [super respondsToSelector:aSelector] || - [self.originalDataSource respondsToSelector:aSelector] || - [self.originalDelegate respondsToSelector:aSelector]; -} - -- (id)forwardingTargetForSelector:(SEL)aSelector -{ - if ([self.originalDataSource respondsToSelector:aSelector]) { - return self.originalDataSource; - } else if ([self.originalDelegate respondsToSelector:aSelector]) { - return self.originalDelegate; - } else { - return [super forwardingTargetForSelector:aSelector]; - } -} - -@end - -#pragma mark - - -@implementation UITableView (MPTableViewAdPlacer) - -static char kAdPlacerKey; - -- (void)mp_setAdPlacer:(MPTableViewAdPlacer *)placer -{ - objc_setAssociatedObject(self, &kAdPlacerKey, placer, OBJC_ASSOCIATION_ASSIGN); -} - -- (MPTableViewAdPlacer *)mp_adPlacer -{ - return objc_getAssociatedObject(self, &kAdPlacerKey); -} - -- (void)mp_setDelegate:(id)delegate -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - adPlacer.originalDelegate = delegate; - } else { - self.delegate = delegate; - } -} - -- (id)mp_delegate -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - return adPlacer.originalDelegate; - } else { - return self.delegate; - } -} - -- (void)mp_setDataSource:(id)dataSource -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - adPlacer.originalDataSource = dataSource; - } else { - self.dataSource = dataSource; - } -} - -- (id)mp_dataSource -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - return adPlacer.originalDataSource; - } else { - return self.dataSource; - } -} - -- (void)mp_reloadData -{ - [self reloadData]; -} - -- (CGRect)mp_rectForRowAtIndexPath:(NSIndexPath *)indexPath -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:adjustedIndexPath]; - } - - if (!indexPath || adjustedIndexPath) { - return [self rectForRowAtIndexPath:adjustedIndexPath]; - } else { - return CGRectZero; - } -} - -- (NSIndexPath *)mp_indexPathForRowAtPoint:(CGPoint)point -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = [self indexPathForRowAtPoint:point]; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer originalIndexPathForAdjustedIndexPath:adjustedIndexPath]; - } - - return adjustedIndexPath; -} - -- (NSIndexPath *)mp_indexPathForCell:(UITableViewCell *)cell -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = [self indexPathForCell:cell]; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer originalIndexPathForAdjustedIndexPath:adjustedIndexPath]; - } - - return adjustedIndexPath; -} - -- (NSArray *)mp_indexPathsForRowsInRect:(CGRect)rect -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *indexPaths = [self indexPathsForRowsInRect:rect]; - - if (adPlacer) { - indexPaths = [adPlacer.streamAdPlacer originalIndexPathsForAdjustedIndexPaths:indexPaths]; - } - - return indexPaths; -} - -- (UITableViewCell *)mp_cellForRowAtIndexPath:(NSIndexPath *)indexPath -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:adjustedIndexPath]; - } - - return [self cellForRowAtIndexPath:adjustedIndexPath]; -} - -- (NSArray *)mp_visibleCells -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - NSArray *indexPaths = [self mp_indexPathsForVisibleRows]; - NSMutableArray *visibleCells = [NSMutableArray array]; - for (NSIndexPath *indexPath in indexPaths) { - UITableViewCell * cell = [self mp_cellForRowAtIndexPath:indexPath]; - if (cell != nil) { - [visibleCells addObject:cell]; - } - } - return visibleCells; - } else { - return [self visibleCells]; - } -} - -- (NSArray *)mp_indexPathsForVisibleRows -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *adjustedIndexPaths = [self indexPathsForVisibleRows]; - - if (adPlacer) { - adjustedIndexPaths = [adPlacer.streamAdPlacer originalIndexPathsForAdjustedIndexPaths:adjustedIndexPaths]; - } - - return adjustedIndexPaths; -} - -- (void)mp_scrollToRowAtIndexPath:(NSIndexPath *)indexPath atScrollPosition:(UITableViewScrollPosition)scrollPosition animated:(BOOL)animated -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer && indexPath.row != NSNotFound) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:adjustedIndexPath]; - } - - [self scrollToRowAtIndexPath:adjustedIndexPath atScrollPosition:scrollPosition animated:animated]; -} - -- (void)mp_beginUpdates -{ - [self beginUpdates]; -} - -- (void)mp_endUpdates -{ - [self endUpdates]; -} - -- (void)mp_insertSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - [adPlacer.streamAdPlacer insertSections:sections]; - } - - [self insertSections:sections withRowAnimation:animation]; -} - -- (void)mp_deleteSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - [adPlacer.streamAdPlacer deleteSections:sections]; - } - - [self deleteSections:sections withRowAnimation:animation]; -} - -- (void)mp_reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation -{ - [self reloadSections:sections withRowAnimation:animation]; -} - -- (void)mp_moveSection:(NSInteger)section toSection:(NSInteger)newSection -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - - if (adPlacer) { - [adPlacer.streamAdPlacer moveSection:section toSection:newSection]; - } - - [self moveSection:section toSection:newSection]; -} - -- (void)mp_insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *adjustedIndexPaths = indexPaths; - - if (adPlacer) { - [adPlacer.streamAdPlacer insertItemsAtIndexPaths:indexPaths]; - adjustedIndexPaths = [adPlacer.streamAdPlacer adjustedIndexPathsForOriginalIndexPaths:indexPaths]; - } - - // We perform the actual UI insertion AFTER updating the stream ad placer's - // data, because the insertion can trigger queries to the data source, which - // needs to reflect the post-insertion state. - [self insertRowsAtIndexPaths:adjustedIndexPaths withRowAnimation:animation]; -} - -- (void)mp_deleteRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *adjustedIndexPaths = indexPaths; - - // We need to wrap the delete process in begin/end updates in case any ad - // cells are also deleted. MPStreamAdPlacer's deleteItemsAtIndexPaths: can - // call the delegate's didRemoveAdsAtIndexPaths, which will remove those - // ads from the tableview. - [self mp_beginUpdates]; - if (adPlacer) { - // We need to obtain the adjusted index paths to delete BEFORE we - // update the stream ad placer's data. - adjustedIndexPaths = [adPlacer.streamAdPlacer adjustedIndexPathsForOriginalIndexPaths:indexPaths]; - [adPlacer.streamAdPlacer deleteItemsAtIndexPaths:indexPaths]; - } - - // We perform the actual UI deletion AFTER updating the stream ad placer's - // data, because the deletion can trigger queries to the data source, which - // needs to reflect the post-deletion state. - [self deleteRowsAtIndexPaths:adjustedIndexPaths withRowAnimation:animation]; - [self mp_endUpdates]; -} - -- (void)mp_reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *adjustedIndexPaths = indexPaths; - - if (adPlacer) { - adjustedIndexPaths = [adPlacer.streamAdPlacer adjustedIndexPathsForOriginalIndexPaths:indexPaths]; - } - - [self reloadRowsAtIndexPaths:adjustedIndexPaths withRowAnimation:animation]; -} - -- (void)mp_moveRowAtIndexPath:(NSIndexPath *)indexPath toIndexPath:(NSIndexPath *)newIndexPath -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedFrom = indexPath; - NSIndexPath *adjustedTo = newIndexPath; - - if (adPlacer) { - // We need to obtain the adjusted index paths to move BEFORE we - // update the stream ad placer's data. - adjustedFrom = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:indexPath]; - adjustedTo = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:newIndexPath]; - - [adPlacer.streamAdPlacer moveItemAtIndexPath:indexPath toIndexPath:newIndexPath]; - } - - // We perform the actual UI operation AFTER updating the stream ad placer's - // data, because the operation can trigger queries to the data source, which - // needs to reflect the post-operation state. - [self moveRowAtIndexPath:adjustedFrom toIndexPath:adjustedTo]; -} - -- (NSIndexPath *)mp_indexPathForSelectedRow -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = [self indexPathForSelectedRow]; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer originalIndexPathForAdjustedIndexPath:adjustedIndexPath]; - } - - return adjustedIndexPath; -} - -- (NSArray *)mp_indexPathsForSelectedRows -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSArray *adjustedIndexPaths = [self indexPathsForSelectedRows]; - - if (adPlacer) { - adjustedIndexPaths = [adPlacer.streamAdPlacer originalIndexPathsForAdjustedIndexPaths:adjustedIndexPaths]; - } - - return adjustedIndexPaths; -} - -- (void)mp_selectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:indexPath]; - } - - if (!indexPath || adjustedIndexPath) { - [self selectRowAtIndexPath:adjustedIndexPath animated:animated scrollPosition:scrollPosition]; - } -} - -- (void)mp_deselectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:indexPath]; - } - - if (!indexPath || adjustedIndexPath) { - [self deselectRowAtIndexPath:adjustedIndexPath animated:animated]; - } -} - -- (id)mp_dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath -{ - MPTableViewAdPlacer *adPlacer = [self mp_adPlacer]; - NSIndexPath *adjustedIndexPath = indexPath; - - if (adPlacer) { - adjustedIndexPath = [adPlacer.streamAdPlacer adjustedIndexPathForOriginalIndexPath:indexPath]; - } - - if (!indexPath || adjustedIndexPath) { - if ([self respondsToSelector:@selector(dequeueReusableCellWithIdentifier:forIndexPath:)]) { - return [self dequeueReusableCellWithIdentifier:identifier forIndexPath:adjustedIndexPath]; - } else { - return [self dequeueReusableCellWithIdentifier:identifier]; - } - } else { - return nil; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.h deleted file mode 100644 index 7a0c8f73e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// MOPUBAVPlayer.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MOPUBAVPlayer; - -@protocol MOPUBAVPlayerDelegate - -- (void)avPlayer:(MOPUBAVPlayer *)player didError:(NSError *)error withMessage:(NSString *)message; - -- (void)avPlayer:(MOPUBAVPlayer *)player playbackTimeDidProgress:(NSTimeInterval)currentPlaybackTime; - -- (void)avPlayerDidFinishPlayback:(MOPUBAVPlayer *)player; - -- (void)avPlayerDidRecoverFromStall:(MOPUBAVPlayer *)player; - -- (void)avPlayerDidStall:(MOPUBAVPlayer *)player; - -@end - - -@interface MOPUBAVPlayer : AVPlayer - -// Indicates the duration of the player item. -@property (nonatomic, readonly) NSTimeInterval currentItemDuration; - -// Returns the current time of the current player item. -@property (nonatomic, readonly) NSTimeInterval currentPlaybackTime; - -- (id)initWithDelegate:(id)delegate playerItem:(AVPlayerItem *)playerItem; - -- (void)dispose; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.m deleted file mode 100644 index 28eb18669..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayer.m +++ /dev/null @@ -1,257 +0,0 @@ -// -// MOPUBAVPlayer.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBAVPlayer.h" -#import "MPLogging.h" -#import "MPReachabilityManager.h" -#import "MPTimer.h" -#import "MPCoreInstanceProvider.h" - -static CGFloat const kAvPlayerTimerInterval = 0.1f; - -static NSString * const MPAVPlayerItemLoadErrorTemplate = @"Loading player item at %@ failed."; - -@interface MOPUBAVPlayer() - -@property (nonatomic, weak, readonly) id delegate; - -@property (nonatomic, copy) NSURL *mediaURL; -@property (nonatomic) MPTimer *playbackTimer; -@property (nonatomic) CMTime lastContinuousPlaybackCMTime; -@property (nonatomic) BOOL playbackDidStall; - -@end - -@implementation MOPUBAVPlayer - -- (id)initWithDelegate:(id)delegate playerItem:(AVPlayerItem *)playerItem -{ - if (playerItem && delegate) { - self = [super initWithPlayerItem:playerItem]; - if (self) { - _delegate = delegate; - - // AVPlayer KVO doesn't handle disconnect/reconnect case. - // Reachability is used to detect network drop and reconnect. - [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(checkNetworkStatus:) name:kMPReachabilityChangedNotification object:nil]; - [MPReachabilityManager.sharedManager startMonitoring]; - } - return self; - } else { - return nil; - } -} - -- (void)dealloc -{ - [self dispose]; -} - -#pragma mark - controls of AVPlayer - -- (void)play -{ - [super play]; - [self startTimeObserver]; - MPLogDebug(@"start playback"); -} - -- (void)pause -{ - [super pause]; - [self stopTimeObserver]; - MPLogDebug(@"playback paused"); -} - -- (void)setMuted:(BOOL)muted -{ - if ([[self superclass] instancesRespondToSelector:@selector(setMuted:)]) { - [super setMuted:muted]; - } else { - if (muted) { - [self setAudioVolume:0]; - } else { - [self setAudioVolume:1]; - } - } -} - -// iOS 6 doesn't have muted for avPlayerItem. Use volume to control mute/unmute -- (void)setAudioVolume:(float)volume -{ - NSArray *audioTracks = [self.currentItem.asset tracksWithMediaType:AVMediaTypeAudio]; - NSMutableArray *allAudioParams = [NSMutableArray array]; - for (AVAssetTrack *track in audioTracks) { - AVMutableAudioMixInputParameters *audioInputParams = [AVMutableAudioMixInputParameters audioMixInputParameters]; - [audioInputParams setVolume:volume atTime:kCMTimeZero]; - [audioInputParams setTrackID:[track trackID]]; - [allAudioParams addObject:audioInputParams]; - } - AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix]; - [audioMix setInputParameters:allAudioParams]; - [self.currentItem setAudioMix:audioMix]; -} - -#pragma mark - Timer - -- (void)startTimeObserver -{ - // Use custom timer to check for playback time changes and stall detection, since there are bugs - // in the AVPlayer time observing API that can cause crashes. Also, the AVPlayerItem stall notification - // does not always report accurately. - if (_playbackTimer == nil) { - _playbackTimer = [[MPCoreInstanceProvider sharedProvider] buildMPTimerWithTimeInterval:kAvPlayerTimerInterval target:self selector:@selector(timerTick) repeats:YES]; - // Add timer to main run loop with common modes to allow the timer to tick while user is scrolling. - _playbackTimer.runLoopMode = NSRunLoopCommonModes; - [_playbackTimer scheduleNow]; - _lastContinuousPlaybackCMTime = kCMTimeZero; - - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackDidFinish) name:AVPlayerItemDidPlayToEndTimeNotification object:self.currentItem]; - } else { - [_playbackTimer resume]; - } -} - -- (void)timerTick -{ - if (!self.currentItem || self.currentItem.error != nil) { - [self stopTimeObserver]; - NSError *error = nil; - NSString *errorMessage = nil; - if (self.currentItem) { - error = self.currentItem.error; - errorMessage = self.currentItem.error.description ?: self.currentItem.errorLog.description; - } else { - errorMessage = [NSString stringWithFormat:MPAVPlayerItemLoadErrorTemplate, self.mediaURL]; - } - - if ([self.delegate respondsToSelector:@selector(avPlayer:didError:withMessage:)]) { - [self.delegate avPlayer:self didError:error withMessage:errorMessage]; - } - MPLogInfo(@"avplayer experienced error: %@", errorMessage); - } else { - CMTime currentCMTime = self.currentTime; - int32_t result = CMTimeCompare(currentCMTime, self.lastContinuousPlaybackCMTime); - // finished or stalled - if (result == 0) { - NSTimeInterval duration = self.currentItemDuration; - NSTimeInterval currentPlaybackTime = self.currentPlaybackTime; - if (!isnan(duration) && !isnan(currentPlaybackTime) && duration > 0 && currentPlaybackTime > 0) { - [self avPlayerDidStall]; - } - } else { - self.lastContinuousPlaybackCMTime = currentCMTime; - if (result > 0) { - NSTimeInterval currentPlaybackTime = self.currentPlaybackTime; - if (!isnan(currentPlaybackTime) && isfinite(currentPlaybackTime)) { - // There are bugs in AVPlayer that causes the currentTime to be negative - if (currentPlaybackTime < 0) { - currentPlaybackTime = 0; - } - [self avPlayer:self playbackTimeDidProgress:currentPlaybackTime]; - } - } - } - - } -} - -- (void)stopTimeObserver -{ - [_playbackTimer pause]; - MPLogDebug(@"AVPlayer timer stopped"); -} - -#pragma mark - disconnect/reconnect handling -- (void)checkNetworkStatus:(NSNotification *)notice -{ - MPNetworkStatus remoteHostStatus = MPReachabilityManager.sharedManager.currentStatus; - - if (remoteHostStatus == MPNotReachable) { - if (!self.rate) { - [self pause]; - if ([self.delegate respondsToSelector:@selector(avPlayerDidStall:)]) { - [self.delegate avPlayerDidStall:self]; - } - } - } else { - if (!self.rate) { - [self play]; - } - } -} - -#pragma mark - avPlayer state changes - -- (void)avPlayer:(MOPUBAVPlayer *)player playbackTimeDidProgress:(NSTimeInterval)currentPlaybackTime -{ - if (self.playbackDidStall) { - self.playbackDidStall = NO; - if ([self.delegate respondsToSelector:@selector(avPlayerDidRecoverFromStall:)]) { - [self.delegate avPlayerDidRecoverFromStall:self]; - } - } - - if ([self.delegate respondsToSelector:@selector(avPlayer:playbackTimeDidProgress:)]) { - [self.delegate avPlayer:self playbackTimeDidProgress:currentPlaybackTime]; - } -} - -- (void)avPlayerDidStall -{ - // Only call delegate methods once per stall cycle. - if (!self.playbackDidStall && [self.delegate respondsToSelector:@selector(avPlayerDidStall:)]) { - [self.delegate avPlayerDidStall:self]; - } - self.playbackDidStall = YES; -} - -- (void)playbackDidFinish -{ - // Make sure we stop time observing once we know we've done playing. - [self stopTimeObserver]; - if ([self.delegate respondsToSelector:@selector(avPlayerDidFinishPlayback:)]) { - [self.delegate avPlayerDidFinishPlayback:self]; - } - MPLogDebug(@"playback finished"); -} - -- (void)dispose -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - - [self stopTimeObserver]; - [MPReachabilityManager.sharedManager stopMonitoring]; - if (_playbackTimer) { - [_playbackTimer invalidate]; - _playbackTimer = nil; - } - - // Cancel preroll after time observer is removed, - // otherwise an NSInternalInconsistencyException may be thrown and crash on - // [AVCMNotificationDispatcher _copyAndRemoveListenerAndCallbackForWeakReferenceToListener:callback:name:object:], - // depends on timing. - [self cancelPendingPrerolls]; -} - - -#pragma mark - getter - -- (NSTimeInterval)currentItemDuration -{ - NSTimeInterval duration = CMTimeGetSeconds(self.currentItem.duration); - return (isfinite(duration)) ? duration : NAN; -} - -- (NSTimeInterval)currentPlaybackTime -{ - NSTimeInterval currentTime = CMTimeGetSeconds(self.currentTime); - return (isfinite(currentTime)) ? currentTime : NAN; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.h deleted file mode 100644 index 0518aed4a..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// MOPUBAVPlayerView.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class AVPlayer; - -@interface MOPUBAVPlayerView : UIView - -@property (nonatomic) AVPlayer *player; -@property (nonatomic) NSString *videoGravity; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.m deleted file mode 100644 index b54ee9034..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBAVPlayerView.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// MOPUBAVPlayerView.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MOPUBAVPlayerView.h" - -@implementation MOPUBAVPlayerView - -+ (Class)layerClass -{ - return [AVPlayerLayer class]; -} - -- (AVPlayer *)player -{ - AVPlayerLayer *playerLayer = (AVPlayerLayer *)self.layer; - return playerLayer.player; -} - -- (void)setPlayer:(AVPlayer *)player -{ - AVPlayerLayer *playerLayer = (AVPlayerLayer *)self.layer; - playerLayer.player = player; -} - -- (NSString *)videoGravity -{ - AVPlayerLayer *playerLayer = (AVPlayerLayer *)self.layer; - return playerLayer.videoGravity; -} - -- (void)setVideoGravity:(NSString *)videoGravity -{ - AVPlayerLayer *playerLayer = (AVPlayerLayer *)self.layer; - playerLayer.videoGravity = videoGravity; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.h deleted file mode 100644 index 88e077c7c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// MOPUBActivityIndicatorView.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@interface MOPUBActivityIndicatorView : UIView - -- (void)startAnimating; -- (void)stopAnimating; -- (BOOL)isAnimating; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.m deleted file mode 100644 index 864e3ef20..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBActivityIndicatorView.m +++ /dev/null @@ -1,59 +0,0 @@ -// -// MOPUBActivityIndicatorView.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBActivityIndicatorView.h" -#import "MPGlobal.h" -#import "UIColor+MPAdditions.h" - -static NSString * const kSpinnerBgColor = @"#000000"; -static CGFloat const kSpinnerAlpha = 0.5f; -static CGFloat const kSpinnerCornerRadius = 4.0f; - -@interface MOPUBActivityIndicatorView() - -@property (nonatomic) UIActivityIndicatorView *activityIndicator; -@property (nonatomic) UIView *bgView; - -@end - -@implementation MOPUBActivityIndicatorView - -- (instancetype)initWithFrame:(CGRect)frame -{ - if (self = [super initWithFrame:frame]) { - _bgView = [[UIView alloc] initWithFrame:frame]; - _bgView.backgroundColor = [UIColor mp_colorFromHexString:kSpinnerBgColor alpha:kSpinnerAlpha]; - _bgView.layer.cornerRadius = kSpinnerCornerRadius; - [self addSubview:_bgView]; - - _activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; - _activityIndicator.center = self.center; - _activityIndicator.frame = CGRectIntegral(_activityIndicator.frame); - [self addSubview:_activityIndicator]; - } - return self; -} - -- (void)startAnimating -{ - self.bgView.hidden = NO; - [self.activityIndicator startAnimating]; -} - -- (void)stopAnimating -{ - self.bgView.hidden = YES; - [self.activityIndicator stopAnimating]; -} - -- (BOOL)isAnimating -{ - return self.activityIndicator.isAnimating; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.h deleted file mode 100644 index e32fdb618..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// MOPUBFullscreenPlayerViewController.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MOPUBPlayerViewController; -@class MOPUBPlayerView; -@class MOPUBFullscreenPlayerViewController; - -@protocol MOPUBFullscreenPlayerViewControllerDelegate - -- (void)playerDidProgressToTime:(NSTimeInterval)playbackTime; -- (void)ctaTapped:(MOPUBFullscreenPlayerViewController *)viewController; -- (void)fullscreenPlayerWillLeaveApplication:(MOPUBFullscreenPlayerViewController *)viewController; - -@end - -typedef void (^MOPUBFullScreenPlayerViewControllerDismissBlock)(UIView *originalParentView); - -@interface MOPUBFullscreenPlayerViewController : UIViewController - -@property (nonatomic) MOPUBPlayerView *playerView; - -@property (nonatomic, weak) id delegate; - -- (instancetype)initWithVideoPlayer:(MOPUBPlayerViewController *)playerController nativeAdProperties:(NSDictionary *)properties dismissBlock:(MOPUBFullScreenPlayerViewControllerDismissBlock)dismiss; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.m deleted file mode 100644 index 191283f26..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBFullscreenPlayerViewController.m +++ /dev/null @@ -1,418 +0,0 @@ -// -// MOPUBFullscreenPlayerViewController.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MOPUBFullscreenPlayerViewController.h" -#import "MOPUBPlayerView.h" -#import "MOPUBPlayerViewController.h" -#import "MPAdDestinationDisplayAgent.h" -#import "MPCoreInstanceProvider.h" -#import "MPHTTPNetworkSession.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MPMemoryCache.h" -#import "MPNativeAdConstants.h" -#import "MPURLRequest.h" -#import "MOPUBActivityIndicatorView.h" -#import "UIView+MPAdditions.h" -#import "UIButton+MPAdditions.h" -#import "UIColor+MPAdditions.h" - -static CGFloat const kPrivacyIconFullscreenLeftMargin = 16.0f; -static CGFloat const kPrivacyIconFullscreenTopMargin = 16.0f; -static CGFloat const kPrivacyIconSize = 16.0f; -static CGFloat const kCloseButtonRightMargin = 16.0f; -static CGFloat const kDefaultButtonTouchAreaInsets = 10.0f; - -static NSString * const kCloseButtonImage = @"MPCloseBtn.png"; -static NSString * const kCtaButtonTitleText = @"Learn More"; -static CGFloat const kCtaButtonTopMarginPortrait = 15.0f; -static CGFloat const kCtaButtonTrailingMarginLandscape = 15.0f; -static CGFloat const kCtaButtonBottomMarginLandscape = 15.0f; -static CGFloat const kCtaButtonBottomCornerRadius = 4.0f; -static CGFloat const kCtaButtonBottomBorderWidth = 0.5f; -static CGFloat const kCtaButtonBottomFontSize = 18.0f; -static CGFloat const kCtaButtonContentInsetsHorizontal = 35.0f; -static CGFloat const kCtaButtonContentInsetsVertical = 10.0f; -static CGFloat const kCtaButtonBackgroundAlpha = 0.2f; -static NSString * const kCtaButtonBackgroundColor = @"#000000"; - -static NSString * const kTopGradientColor = @"#000000"; -static NSString * const kBottomGradientColor= @"#000000"; -static CGFloat const kTopGradientAlpha = 0.4f; -static CGFloat const kBottomGradientAlpha = 0.0f; -static CGFloat const kGradientHeight = 42; - -static CGFloat const kStallSpinnerSize = 35.0f; - -@interface MOPUBFullscreenPlayerViewController () - -// UI components -@property (nonatomic) UIButton *privacyButton; -@property (nonatomic) UIButton *closeButton; -@property (nonatomic) UIButton *ctaButton; -@property (nonatomic) MOPUBActivityIndicatorView *stallSpinner; -@property (nonatomic) UIActivityIndicatorView *playerNotReadySpinner; -@property (nonatomic) UIView *gradientView; -@property (nonatomic) CAGradientLayer *gradient; - -@property (nonatomic) MOPUBPlayerViewController *playerController; -@property (nonatomic) UIView *originalParentView; -@property (nonatomic) MPAdDestinationDisplayAgent *displayAgent; -@property (nonatomic, copy) MOPUBFullScreenPlayerViewControllerDismissBlock dismissBlock; - -// Overrides -@property (nonatomic, copy) NSString * overridePrivacyIcon; -@property (nonatomic, strong) UIImage * overridePrivacyIconImage; -@property (nonatomic, copy) NSString * overridePrivacyClickUrl; - -@end - -@implementation MOPUBFullscreenPlayerViewController - -- (instancetype)initWithVideoPlayer:(MOPUBPlayerViewController *)playerController - nativeAdProperties:(NSDictionary *)properties - dismissBlock:(MOPUBFullScreenPlayerViewControllerDismissBlock)dismissBlock -{ - if (self = [super init]) { - _playerController = playerController; - _originalParentView = self.playerController.playerView.superview; - _playerView = self.playerController.playerView; - _playerController.delegate = self; - _dismissBlock = [dismissBlock copy]; - _displayAgent = [MPAdDestinationDisplayAgent agentWithDelegate:self]; - _overridePrivacyIcon = properties[kAdPrivacyIconImageUrlKey]; - _overridePrivacyIconImage = properties[kAdPrivacyIconUIImageKey]; - _overridePrivacyClickUrl = properties[kAdPrivacyIconClickUrlKey]; - } - return self; -} - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - [self setApplicationStatusBarHidden:YES]; - [self.playerController willEnterFullscreen]; - - self.view.backgroundColor = [UIColor blackColor]; - [self.view addSubview:self.playerView]; - - [self createAndAddGradientView]; - - self.privacyButton = [UIButton buttonWithType:UIButtonTypeCustom]; - self.privacyButton.frame = CGRectMake(0, 0, kPrivacyIconSize, kPrivacyIconSize); - [self setPrivacyIconImageForButton:self.privacyButton]; - [self.privacyButton addTarget:self action:@selector(privacyButtonTapped) forControlEvents:UIControlEventTouchUpInside]; - self.privacyButton.mp_TouchAreaInsets = UIEdgeInsetsMake(kDefaultButtonTouchAreaInsets, kDefaultButtonTouchAreaInsets, kDefaultButtonTouchAreaInsets, kDefaultButtonTouchAreaInsets); - [self.view addSubview:self.privacyButton]; - - self.closeButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [self.closeButton setImage:[UIImage imageNamed:MPResourcePathForResource(kCloseButtonImage)] forState:UIControlStateNormal]; - [self.closeButton addTarget:self action:@selector(closeButtonTapped) forControlEvents:UIControlEventTouchUpInside]; - self.closeButton.mp_TouchAreaInsets = UIEdgeInsetsMake(kDefaultButtonTouchAreaInsets, kDefaultButtonTouchAreaInsets, kDefaultButtonTouchAreaInsets, kDefaultButtonTouchAreaInsets); - [self.closeButton sizeToFit]; - [self.view addSubview:self.closeButton]; - - self.ctaButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [self.ctaButton setTitle:kCtaButtonTitleText forState:UIControlStateNormal]; - [self.ctaButton setBackgroundColor:[UIColor mp_colorFromHexString:kCtaButtonBackgroundColor alpha:kCtaButtonBackgroundAlpha]]; - [self.ctaButton addTarget:self action:@selector(ctaButtonTapped) forControlEvents:UIControlEventTouchUpInside]; - self.ctaButton.layer.cornerRadius = kCtaButtonBottomCornerRadius; - self.ctaButton.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:kCtaButtonBottomFontSize]; - [self.ctaButton setContentEdgeInsets:UIEdgeInsetsMake(kCtaButtonContentInsetsVertical, kCtaButtonContentInsetsHorizontal, kCtaButtonContentInsetsVertical, kCtaButtonContentInsetsHorizontal)]; - [[self.ctaButton layer] setBorderWidth:kCtaButtonBottomBorderWidth]; - [[self.ctaButton layer] setBorderColor:[UIColor whiteColor].CGColor]; - [self.ctaButton sizeToFit]; - [self.view addSubview:self.ctaButton]; - - if (!self.playerController.isReadyToPlay) { - [self createPlayerNotReadySpinner]; - } - - // Once the video enters fullscreen mode, we should resume the playback if it is paused. - if (self.playerController.paused) { - [self.playerController resume]; - } -} - -- (void)setPrivacyIconImageForButton:(UIButton *)button -{ - if (button == nil) { - return; - } - - // A cached privacy information icon image exists; it should be used. - if (self.overridePrivacyIconImage != nil) { - [button setImage:self.overridePrivacyIconImage forState:UIControlStateNormal]; - } - // No cached privacy information icon image was cached, but there is a URL for the - // icon. Go fetch the icon and populate the UIImageView when complete. - else if (self.overridePrivacyIcon != nil) { - NSURL *iconUrl = [NSURL URLWithString:self.overridePrivacyIcon]; - MPURLRequest *imageRequest = [MPURLRequest requestWithURL:iconUrl]; - - [MPHTTPNetworkSession startTaskWithHttpRequest:imageRequest responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - // Cache the successfully retrieved icon image - [MPMemoryCache.sharedInstance setData:data forKey:self.overridePrivacyIcon]; - - // Populate the button - [button setImage:[UIImage imageWithData:data] forState:UIControlStateNormal]; - } errorHandler:^(NSError * _Nonnull error) { - MPLogInfo(@"Failed to retrieve privacy icon from %@", self.overridePrivacyIcon); - }]; - } - // Default to built in MoPub privacy icon. - else { - [button setImage:[UIImage imageNamed:MPResourcePathForResource(kPrivacyIconImageName)] forState:UIControlStateNormal]; - } -} - -- (void)createAndAddGradientView -{ - // Create the gradient - self.gradientView = [UIView new]; - self.gradientView.userInteractionEnabled = NO; - UIColor *topColor = [UIColor mp_colorFromHexString:kTopGradientColor alpha:kTopGradientAlpha]; - UIColor *bottomColor= [UIColor mp_colorFromHexString:kBottomGradientColor alpha:kBottomGradientAlpha]; - self.gradient = [CAGradientLayer layer]; - self.gradient.colors = [NSArray arrayWithObjects: (id)topColor.CGColor, (id)bottomColor.CGColor, nil]; - CGSize screenSize = MPScreenBounds().size; - self.gradient.frame = CGRectMake(0, 0, screenSize.width, kGradientHeight); - - //Add gradient to view - [self.gradientView.layer insertSublayer:self.gradient atIndex:0]; - [self.view addSubview:self.gradientView]; -} - -- (void)showStallSpinner -{ - if (!self.stallSpinner) { - self.stallSpinner = [[MOPUBActivityIndicatorView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, kStallSpinnerSize, kStallSpinnerSize)]; - [self.view addSubview:self.stallSpinner]; - } -} - -- (void)hideStallSpinner -{ - if (self.stallSpinner) { - [self.stallSpinner stopAnimating]; - [self.stallSpinner removeFromSuperview]; - } -} - -- (void)createPlayerNotReadySpinner -{ - if (!self.playerNotReadySpinner) { - self.playerNotReadySpinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; - [self.view addSubview:self.playerNotReadySpinner]; - [self.playerNotReadySpinner startAnimating]; - } -} - -- (void)removePlayerNotReadySpinner -{ - [self.playerNotReadySpinner stopAnimating]; - [self.playerNotReadySpinner removeFromSuperview]; - self.playerNotReadySpinner = nil; -} - -#pragma mark - Layout UI components - -- (void)viewWillLayoutSubviews -{ - [super viewWillLayoutSubviews]; - - [self layoutPlayerView]; - [self layoutPrivacyButton]; - [self layoutCloseButton]; - [self layoutCtaButton]; - [self layoutStallSpinner]; - [self layoutPlayerNotReadySpinner]; - [self layoutGradientView]; -} - -- (void)layoutPlayerView -{ - CGSize screenSize = MPScreenBounds().size; - self.playerView.videoGravity = AVLayerVideoGravityResizeAspectFill; - if (UIInterfaceOrientationIsLandscape(MPInterfaceOrientation())) { - self.playerView.frame = CGRectMake(0, 0, screenSize.width, screenSize.height); - } else { - self.playerView.mp_width = screenSize.width; - self.playerView.mp_height = self.playerView.mp_width/self.playerController.videoAspectRatio; - self.playerView.center = self.view.center; - self.playerView.frame = CGRectIntegral(self.playerView.frame); - } -} - -- (void)layoutPrivacyButton -{ - self.privacyButton.mp_x = kPrivacyIconFullscreenLeftMargin; - self.privacyButton.mp_y = kPrivacyIconFullscreenTopMargin; -} - -- (void)layoutCloseButton -{ - CGSize screenSize = MPScreenBounds().size; - self.closeButton.mp_x = screenSize.width - kCloseButtonRightMargin - self.closeButton.mp_width; - CGFloat privacyCenterY = self.privacyButton.frame.origin.y + self.privacyButton.mp_height/2.0f; - self.closeButton.mp_y = privacyCenterY - self.closeButton.mp_height/2.0f; - self.closeButton.frame = CGRectIntegral(self.closeButton.frame); -} - -- (void)layoutCtaButton -{ - UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation; - if (UIInterfaceOrientationIsLandscape(orientation)) { - self.ctaButton.mp_x = CGRectGetMaxX(self.playerView.frame) - kCtaButtonTrailingMarginLandscape - CGRectGetWidth(self.ctaButton.bounds); - self.ctaButton.mp_y = CGRectGetMaxY(self.playerView.frame) - kCtaButtonBottomMarginLandscape - CGRectGetHeight(self.ctaButton.bounds); - } else { - self.ctaButton.center = self.view.center; - self.ctaButton.mp_y = CGRectGetMaxY(self.playerView.frame) + kCtaButtonTopMarginPortrait; - self.ctaButton.frame = CGRectIntegral(self.ctaButton.frame); - } -} - -- (void)layoutStallSpinner -{ - if (self.stallSpinner) { - CGSize screenSize = MPScreenBounds().size; - self.stallSpinner.center = CGPointMake(screenSize.width/2.0f, screenSize.height/2.0f); - self.stallSpinner.frame = CGRectIntegral(self.stallSpinner.frame); - } -} - -- (void)layoutPlayerNotReadySpinner -{ - if (self.playerNotReadySpinner) { - CGSize screenSize = MPScreenBounds().size; - self.playerNotReadySpinner.center = CGPointMake(screenSize.width/2.0f, screenSize.height/2.0f); - self.playerNotReadySpinner.frame = CGRectIntegral(self.playerNotReadySpinner.frame); - } -} - -- (void)layoutGradientView -{ - if (UIInterfaceOrientationIsLandscape(MPInterfaceOrientation())) { - self.gradientView.hidden = NO; - } else { - self.gradientView.hidden = YES; - } - CGSize screenSize = MPScreenBounds().size; - self.gradient.frame = CGRectMake(0, 0, screenSize.width, kGradientHeight); - self.gradientView.frame = CGRectMake(0, 0, screenSize.width, kGradientHeight); -} - -#pragma mark - button tap - -- (void)closeButtonTapped -{ - [self dismissViewControllerAnimated:NO completion:^{ - if (self.dismissBlock) { - self.dismissBlock(self.originalParentView); - } - }]; -} - -- (void)ctaButtonTapped -{ - if ([self.delegate respondsToSelector:@selector(ctaTapped:)]) { - [self.delegate ctaTapped:self]; - } - [self.displayAgent displayDestinationForURL:self.playerController.defaultActionURL]; -} - -- (void)privacyButtonTapped -{ - NSURL *defaultPrivacyClickUrl = [NSURL URLWithString:kPrivacyIconTapDestinationURL]; - NSURL *overridePrivacyClickUrl = ({ - NSString *url = self.overridePrivacyClickUrl; - (url != nil ? [NSURL URLWithString:url] : nil); - }); - - [self.displayAgent displayDestinationForURL:(overridePrivacyClickUrl != nil ? overridePrivacyClickUrl : defaultPrivacyClickUrl)]; -} - -#pragma mark - MOPUBPlayerViewControllerDelegate - -- (void)playerPlaybackDidStart:(MOPUBPlayerViewController *)player -{ - [self removePlayerNotReadySpinner]; -} - -- (void)playerViewController:(MOPUBPlayerViewController *)playerViewController willShowReplayView:(MOPUBPlayerView *)view -{ - [self.view bringSubviewToFront:self.privacyButton]; -} - -- (void)playerViewController:(MOPUBPlayerViewController *)playerViewController didStall:(MOPUBAVPlayer *)player -{ - if (self.stallSpinner) { - if (!self.stallSpinner.superview) { - [self.view addSubview:self.stallSpinner]; - } - if (!self.stallSpinner.isAnimating) { - [self.stallSpinner startAnimating]; - } - } else { - [self showStallSpinner]; - [self.stallSpinner startAnimating]; - } -} - -- (void)playerViewController:(MOPUBPlayerViewController *)playerViewController didRecoverFromStall:(MOPUBAVPlayer *)player -{ - [self hideStallSpinner]; -} - -- (void)playerDidProgressToTime:(NSTimeInterval)playbackTime -{ - if ([self.delegate respondsToSelector:@selector(playerDidProgressToTime:)]) { - [self.delegate playerDidProgressToTime:playbackTime]; - } -} - -#pragma mark - - -- (UIViewController *)viewControllerForPresentingModalView -{ - return self; -} - -- (void)displayAgentWillPresentModal -{ - [self.playerController pause]; -} - -- (void)displayAgentWillLeaveApplication -{ - [self.playerController pause]; - [self.delegate fullscreenPlayerWillLeaveApplication:self]; -} - -- (void)displayAgentDidDismissModal -{ - [self.playerController resume]; -} - -#pragma mark - Hidding status bar (pre-iOS 7) - -- (void)setApplicationStatusBarHidden:(BOOL)hidden -{ - [[UIApplication sharedApplication] mp_preIOS7setApplicationStatusBarHidden:hidden]; -} - -#pragma mark - Hidding status bar (iOS 7 and above) - -- (BOOL)prefersStatusBarHidden -{ - return YES; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.h deleted file mode 100644 index a0cc2209c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MOPUBNativeVideoAdAdapter.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdAdapter.h" - -@class MPAdConfiguration; - -@interface MOPUBNativeVideoAdAdapter : NSObject - -@property (nonatomic, weak) id delegate; -@property (nonatomic, readonly) NSArray *impressionTrackerURLs; -@property (nonatomic, readonly) NSArray *clickTrackerURLs; -@property (nonatomic) MPAdConfiguration *adConfiguration; - -- (instancetype)initWithAdProperties:(NSMutableDictionary *)properties; - -- (void)handleVideoViewImpression; -- (void)handleVideoViewClick; -- (void)handleVideoHasProgressedToTime:(NSTimeInterval)playbackTime; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.m deleted file mode 100644 index a48b020f5..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdAdapter.m +++ /dev/null @@ -1,238 +0,0 @@ -// -// MOPUBNativeVideoAdAdapter.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBNativeVideoAdAdapter.h" -#import "MOPUBNativeVideoAdConfigValues.h" -#import "MPAdDestinationDisplayAgent.h" -#import "MPAdImpressionTimer.h" -#import "MPCoreInstanceProvider.h" -#import "MPLogging.h" -#import "MPMemoryCache.h" -#import "MPNativeAdConstants.h" -#import "MPNativeAdError.h" - -@interface MOPUBNativeVideoAdAdapter() - -@property (nonatomic) MPAdImpressionTimer *impressionTimer; -@property (nonatomic, strong) MPAdDestinationDisplayAgent *destinationDisplayAgent; - -@end - -@implementation MOPUBNativeVideoAdAdapter - -@synthesize properties = _properties; -@synthesize defaultActionURL = _defaultActionURL; - -- (instancetype)initWithAdProperties:(NSMutableDictionary *)properties -{ - if (self = [super init]) { - - // Let's make sure the data types of all the provided native ad properties are strings before creating the adapter. - - NSArray *keysToCheck = @[kAdIconImageKey, kAdMainImageKey, kAdTextKey, kAdTitleKey, kAdCTATextKey, kVASTVideoKey, kAdPrivacyIconImageUrlKey, kAdPrivacyIconClickUrlKey]; - - for (NSString *key in keysToCheck) { - id value = properties[key]; - if (value != nil && ![value isKindOfClass:[NSString class]]) { - return nil; - } - } - - // Validate that the views are actually views - NSArray * viewKeysToCheck = @[kAdIconImageViewKey, kAdMainMediaViewKey]; - for (NSString * key in viewKeysToCheck) { - id value = properties[key]; - if (value != nil && ![value isKindOfClass:[UIView class]]) { - return nil; - } - } - - BOOL valid = YES; - NSArray *impressionTrackers = [properties objectForKey:kImpressionTrackerURLsKey]; - if (![impressionTrackers isKindOfClass:[NSArray class]] || [impressionTrackers count] < 1) { - valid = NO; - } else { - _impressionTrackerURLs = MPConvertStringArrayToURLArray(impressionTrackers); - } - - NSObject *clickTracker = [properties objectForKey:kClickTrackerURLKey]; - - // The click tracker could either be a single URL or an array of URLS. - if ([clickTracker isKindOfClass:[NSArray class]]) { - _clickTrackerURLs = MPConvertStringArrayToURLArray((NSArray *)clickTracker); - } else if ([clickTracker isKindOfClass:[NSString class]]) { - NSURL *url = [NSURL URLWithString:(NSString *)clickTracker]; - if (url) { - _clickTrackerURLs = @[ url ]; - } else { - valid = NO; - } - } else { - valid = NO; - } - - _defaultActionURL = [NSURL URLWithString:[properties objectForKey:kDefaultActionURLKey]]; - - [properties removeObjectsForKeys:[NSArray arrayWithObjects:kImpressionTrackerURLsKey, kClickTrackerURLKey, kDefaultActionURLKey, nil]]; - _properties = properties; - - if (!valid) { - return nil; - } - - // The privacy icon has been overridden by the server. We will use its image instead if it is - // already cached. Otherwise, we will defer loading the image until later. - NSString * privacyIconUrl = properties[kAdPrivacyIconImageUrlKey]; - if (privacyIconUrl != nil) { - UIImage * cachedIcon = [MPMemoryCache.sharedInstance imageForKey:privacyIconUrl]; - if (cachedIcon != nil) { - [properties setObject:cachedIcon forKey:kAdPrivacyIconUIImageKey]; - } - } - // Use the default MoPub privacy icon bundled with the SDK. - else { - // Add the privacy icon settings to our properties dictionary. - // Path will not change, so load path and image statically. - static NSString *privacyIconImagePath = nil; - static UIImage *privacyIconImage = nil; - if (!privacyIconImagePath || !privacyIconImage) { - privacyIconImagePath = MPResourcePathForResource(kPrivacyIconImageName); - privacyIconImage = privacyIconImagePath ? [UIImage imageWithContentsOfFile:privacyIconImagePath] : nil; - } - if (privacyIconImagePath) { - [properties setObject:privacyIconImagePath forKey:kAdPrivacyIconImageUrlKey]; - } - if (privacyIconImage) { - [properties setObject:privacyIconImage forKey:kAdPrivacyIconUIImageKey]; - } - } - - _destinationDisplayAgent = [MPAdDestinationDisplayAgent agentWithDelegate:self]; - - _impressionTimer = nil; - } - - return self; -} - -- (void)dealloc -{ - [self removeStaticImpressionTimer]; - [_destinationDisplayAgent cancel]; - [_destinationDisplayAgent setDelegate:nil]; - _delegate = nil; -} - -#pragma mark - Private - -- (void)removeStaticImpressionTimer -{ - _impressionTimer.delegate = nil; - _impressionTimer = nil; -} - -#pragma mark - - -- (void)willAttachToView:(UIView *)view -{ - [self removeStaticImpressionTimer]; - - // Set up an impression timer that will fire the mopub impression if the video fails to play prior to meeting the video impression tracking requirements. - MOPUBNativeVideoAdConfigValues *nativeVideoAdConfig = [self.properties objectForKey:kNativeAdConfigKey]; - - // If we have a valid pixel value, use it to track the impression. If not, use percentage instead. - if (nativeVideoAdConfig.isImpressionMinVisiblePixelsValid) { - self.impressionTimer = [[MPAdImpressionTimer alloc] initWithRequiredSecondsForImpression:nativeVideoAdConfig.impressionMinVisibleSeconds - requiredViewVisibilityPixels:nativeVideoAdConfig.impressionMinVisiblePixels]; - } else { - // impressionMinVisiblePercent is an integer (a value of 50 means 50%) while the impression timer takes in a float (.50 means 50%) so we have to multiply it by .01f. - self.impressionTimer = [[MPAdImpressionTimer alloc] initWithRequiredSecondsForImpression:nativeVideoAdConfig.impressionMinVisibleSeconds - requiredViewVisibilityPercentage:nativeVideoAdConfig.impressionMinVisiblePercent * 0.01f]; - } - self.impressionTimer.delegate = self; - - [self.impressionTimer startTrackingView:view]; -} - -- (void)displayContentForURL:(NSURL *)URL rootViewController:(UIViewController *)controller -{ - if (!controller) { - return; - } - - if (!URL || ![URL isKindOfClass:[NSURL class]] || ![URL.absoluteString length]) { - return; - } - - [self.destinationDisplayAgent displayDestinationForURL:URL]; -} - -#pragma mark - Privacy Icon - -- (void)displayContentForDAAIconTap -{ - NSURL *defaultPrivacyClickUrl = [NSURL URLWithString:kPrivacyIconTapDestinationURL]; - NSURL *overridePrivacyClickUrl = ({ - NSString *url = self.properties[kAdPrivacyIconClickUrlKey]; - (url != nil ? [NSURL URLWithString:url] : nil); - }); - - [self.destinationDisplayAgent displayDestinationForURL:(overridePrivacyClickUrl != nil ? overridePrivacyClickUrl : defaultPrivacyClickUrl)]; -} - -#pragma mark - Impression and click tracking. Renderer calls those two methods - -- (void)handleVideoViewImpression -{ - [self.delegate nativeAdWillLogImpression:self]; -} - -- (void)handleVideoViewClick -{ - [self.delegate nativeAdDidClick:self]; -} - -- (void)handleVideoHasProgressedToTime:(NSTimeInterval)playbackTime -{ - // If the video makes progress, don't allow static impression tracking. - self.impressionTimer.delegate = nil; - self.impressionTimer = nil; -} - -#pragma mark - - -- (void)adViewWillLogImpression:(UIView *)adView -{ - // We'll fire a static impression if the video hasn't started playing by the time the static impression timer has met its requirements. - [self.delegate nativeAdWillLogImpression:self]; -} - -#pragma mark - - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (void)displayAgentWillPresentModal -{ - [self.delegate nativeAdWillPresentModalForAdapter:self]; -} - -- (void)displayAgentWillLeaveApplication -{ - [self.delegate nativeAdWillLeaveApplicationFromAdapter:self]; -} - -- (void)displayAgentDidDismissModal -{ - [self.delegate nativeAdDidDismissModalForAdapter:self]; -} - -// -adConfiguration delegate method is automatically implemented via the adConfiguration property declaration. -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.h deleted file mode 100644 index 7d73fddd5..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// MOPUBNativeVideoAdConfigValues.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAdConfigValues.h" - -@interface MOPUBNativeVideoAdConfigValues : MPNativeAdConfigValues - -@property (nonatomic, readonly) NSInteger playVisiblePercent; -@property (nonatomic, readonly) NSInteger pauseVisiblePercent; -@property (nonatomic, readonly) NSTimeInterval maxBufferingTime; -@property (nonatomic, readonly) NSDictionary *trackers; - -- (instancetype)initWithPlayVisiblePercent:(NSInteger)playVisiblePercent - pauseVisiblePercent:(NSInteger)pauseVisiblePercent - impressionMinVisiblePixels:(CGFloat)impressionMinVisiblePixels - impressionMinVisiblePercent:(NSInteger)impressionMinVisiblePercent - impressionMinVisibleSeconds:(NSTimeInterval)impressionMinVisibleSeconds - maxBufferingTime:(NSTimeInterval)maxBufferingTime - trackers:(NSDictionary *)trackers NS_DESIGNATED_INITIALIZER; - -@property (nonatomic, readonly) BOOL isValid; - -- (instancetype)initWithImpressionMinVisiblePixels:(CGFloat)impressionMinVisiblePixels - impressionMinVisiblePercent:(NSInteger)impressionMinVisiblePercent - impressionMinVisibleSeconds:(NSTimeInterval)impressionMinVisibleSeconds __attribute__((unavailable("initWithImpressionMinVisiblePixels:impressionMinVisiblePercent:impressionMinVisibleSeconds: not available"))); - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.m deleted file mode 100644 index 5fb8d6526..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoAdConfigValues.m +++ /dev/null @@ -1,43 +0,0 @@ -// -// MOPUBNativeVideoAdConfigValues.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBNativeVideoAdConfigValues.h" -#import "MPNativeAdConfigValues+Internal.h" - -@implementation MOPUBNativeVideoAdConfigValues - -- (instancetype)initWithPlayVisiblePercent:(NSInteger)playVisiblePercent - pauseVisiblePercent:(NSInteger)pauseVisiblePercent - impressionMinVisiblePixels:(CGFloat)impressionMinVisiblePixels - impressionMinVisiblePercent:(NSInteger)impressionMinVisiblePercent - impressionMinVisibleSeconds:(NSTimeInterval)impressionMinVisibleSeconds - maxBufferingTime:(NSTimeInterval)maxBufferingTime - trackers:(NSDictionary *)trackers -{ - self = [super initWithImpressionMinVisiblePixels:impressionMinVisiblePixels - impressionMinVisiblePercent:impressionMinVisiblePercent - impressionMinVisibleSeconds:impressionMinVisibleSeconds]; - if (self) { - _playVisiblePercent = playVisiblePercent; - _pauseVisiblePercent = pauseVisiblePercent; - _maxBufferingTime = maxBufferingTime; - _trackers = trackers; - } - return self; -} - -- (BOOL)isValid -{ - return ((self.isImpressionMinVisiblePixelsValid || self.isImpressionMinVisiblePercentValid) && // OR because we only need pixels or percent, not both - self.isImpressionMinVisibleSecondsValid && - [self isValidPercentage:self.playVisiblePercent] && - [self isValidPercentage:self.pauseVisiblePercent] && - [self isValidTimeInterval:self.maxBufferingTime]); -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.h deleted file mode 100644 index e07c33f79..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// MOPUBNativeVideoCustomEvent.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeCustomEvent.h" - -@interface MOPUBNativeVideoCustomEvent : MPNativeCustomEvent - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.m deleted file mode 100644 index 07c68c414..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoCustomEvent.m +++ /dev/null @@ -1,77 +0,0 @@ -// -// MOPUBNativeVideoCustomEvent.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPNativeAd.h" -#import "MPNativeAdError.h" -#import "MPNativeAdUtils.h" -#import "MPNativeAdConstants.h" -#import "MOPUBNativeVideoAdAdapter.h" -#import "MOPUBNativeVideoAdConfigValues.h" -#import "MOPUBNativeVideoCustomEvent.h" -#import "MPLogging.h" -#import "MPVideoConfig.h" -#import "MPVASTManager.h" -#import "MPNativeAd+Internal.h" - -@implementation MOPUBNativeVideoCustomEvent - -- (void)handleSuccessfulVastParsing:(MPVASTResponse *)mpVastResponse info:(NSDictionary *)info -{ - NSMutableDictionary *infoMutableCopy = [info mutableCopy]; - [infoMutableCopy setObject:[[MPVideoConfig alloc] initWithVASTResponse:mpVastResponse additionalTrackers:((MOPUBNativeVideoAdConfigValues *)info[kNativeAdConfigKey]).trackers] forKey:kVideoConfigKey]; - MOPUBNativeVideoAdAdapter *adAdapter = [[MOPUBNativeVideoAdAdapter alloc] initWithAdProperties:infoMutableCopy]; - if (adAdapter.properties) { - MPNativeAd *interfaceAd = [[MPNativeAd alloc] initWithAdAdapter:adAdapter]; - [interfaceAd.impressionTrackerURLs addObjectsFromArray:adAdapter.impressionTrackerURLs]; - [interfaceAd.clickTrackerURLs addObjectsFromArray:adAdapter.clickTrackerURLs]; - // Get the image urls so we can download them prior to returning the ad. - NSMutableArray *imageURLs = [NSMutableArray array]; - for (NSString *key in [info allKeys]) { - if ([[key lowercaseString] hasSuffix:@"image"] && [[info objectForKey:key] isKindOfClass:[NSString class]]) { - if (![MPNativeAdUtils addURLString:[info objectForKey:key] toURLArray:imageURLs]) { - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForInvalidImageURL()]; - } - } - } - - [super precacheImagesWithURLs:imageURLs completionBlock:^(NSArray *errors) { - if (errors) { - MPLogDebug(@"%@", errors); - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForImageDownloadFailure()]; - } else { - [self.delegate nativeCustomEvent:self didLoadAd:interfaceAd]; - } - }]; - } else { - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForInvalidAdServerResponse(nil)]; - } -} - -- (void)requestAdWithCustomEventInfo:(NSDictionary *)info -{ - MOPUBNativeVideoAdConfigValues *nativeVideoAdConfigValues = [info objectForKey:kNativeAdConfigKey]; - if (nativeVideoAdConfigValues && [nativeVideoAdConfigValues isValid]) { - NSString *vastString = [info objectForKey:kVASTVideoKey]; - if (vastString) { - [MPVASTManager fetchVASTWithData:[vastString dataUsingEncoding:NSUTF8StringEncoding] - completion: ^(MPVASTResponse *mpVastResponse, NSError *error) { - if (error) { - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForVASTParsingFailure()]; - } else { - [self handleSuccessfulVastParsing:mpVastResponse info:info]; - } - }]; - } else { - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForVASTParsingFailure()]; - } - } else { - [self.delegate nativeCustomEvent:self didFailToLoadAdWithError:MPNativeAdNSErrorForVideoConfigInvalid()]; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoImpressionAgent.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoImpressionAgent.h deleted file mode 100644 index cbfefe760..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoImpressionAgent.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// MOPUBNativeVideoImpressionAgent.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@interface MOPUBNativeVideoImpressionAgent : NSObject - -- (instancetype)initWithVideoView:(UIView *)videoView requiredVisibilityPercentage:(CGFloat)visiblePercentage requiredPlaybackDuration:(NSTimeInterval)playbackDuration; - -- (BOOL)shouldTrackImpressionWithCurrentPlaybackTime:(NSTimeInterval)currentPlaybackTime; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoImpressionAgent.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoImpressionAgent.m deleted file mode 100644 index 054593339..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBNativeVideoImpressionAgent.m +++ /dev/null @@ -1,64 +0,0 @@ -// -// MOPUBNativeVideoImpressionAgent.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBNativeVideoImpressionAgent.h" -#import "MPGlobal.h" - -static const NSTimeInterval kInvalidTimestamp = -1; - -@interface MOPUBNativeVideoImpressionAgent () - -@property (nonatomic) CGFloat requiredVisiblePercentage; -@property (nonatomic) NSTimeInterval requiredPlaybackDuration; -@property (nonatomic) NSTimeInterval visibilitySatisfiedPlaybackTime; -@property (nonatomic, weak) UIView *measuredVideoView; -@property (nonatomic) BOOL requirementsSatisfied; - -@end - -@implementation MOPUBNativeVideoImpressionAgent - -- (instancetype)initWithVideoView:(UIView *)videoView requiredVisibilityPercentage:(CGFloat)visiblePercentage requiredPlaybackDuration:(NSTimeInterval)playbackDuration -{ - self = [super init]; - - if (self) { - _measuredVideoView = videoView; - _requiredVisiblePercentage = visiblePercentage; - _requiredPlaybackDuration = playbackDuration; - _visibilitySatisfiedPlaybackTime = kInvalidTimestamp; - _requirementsSatisfied = NO; - } - - return self; -} - -- (BOOL)shouldTrackImpressionWithCurrentPlaybackTime:(NSTimeInterval)currentPlaybackTime -{ - // this class's work is done once the requirements are met - if (!self.requirementsSatisfied) { - if (MPViewIntersectsParentWindowWithPercent(self.measuredVideoView, self.requiredVisiblePercentage)) { - // if this is the first time we satisfied the visibility requirement or - // if the user replays the video and we haven't satisfied the impression yet, set satisfied playback timestamp - if (self.visibilitySatisfiedPlaybackTime == kInvalidTimestamp || self.visibilitySatisfiedPlaybackTime > currentPlaybackTime) { - self.visibilitySatisfiedPlaybackTime = currentPlaybackTime; - } - - // we consider the requirements met if the visibility requirements are met for requiredPlaybackDuration seconds of actual continuous playback - if (currentPlaybackTime - self.visibilitySatisfiedPlaybackTime >= self.requiredPlaybackDuration) { - self.requirementsSatisfied = YES; - } - } else { - self.visibilitySatisfiedPlaybackTime = kInvalidTimestamp; - } - } - - return self.requirementsSatisfied; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.h deleted file mode 100644 index 3a7e847ad..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MOPUBPlayerManager.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@class MOPUBPlayerViewController; -@class MOPUBNativeVideoAdConfigValues; -@class MPVideoConfig; - -@interface MOPUBPlayerManager : NSObject - -+ (MOPUBPlayerManager *)sharedInstance; -- (void)disposePlayerViewController; - -- (MOPUBPlayerViewController *)playerViewControllerWithVideoConfig:(MPVideoConfig *)videoConfig nativeVideoAdConfig:(MOPUBNativeVideoAdConfigValues *)nativeVideoAdConfig; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.m deleted file mode 100644 index f4c8ec887..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerManager.m +++ /dev/null @@ -1,50 +0,0 @@ -// -// MOPUBPlayerManager.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBPlayerManager.h" -#import "MOPUBPlayerViewController.h" -#import "MOPUBNativeVideoAdRenderer.h" -#import "MPVideoConfig.h" -#import "MOPUBNativeVideoAdConfigValues.h" - -@interface MOPUBPlayerManager() - -@property (nonatomic) MOPUBPlayerViewController *currentPlayerViewController; - -@end - -@implementation MOPUBPlayerManager - -+ (MOPUBPlayerManager *)sharedInstance -{ - static MOPUBPlayerManager *sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[MOPUBPlayerManager alloc] init]; - }); - return sharedInstance; -} - -- (void)disposePlayerViewController -{ - [self.currentPlayerViewController dispose]; - self.currentPlayerViewController = nil; -} - -- (MOPUBPlayerViewController *)playerViewControllerWithVideoConfig:(MPVideoConfig *)videoConfig nativeVideoAdConfig:(MOPUBNativeVideoAdConfigValues *)nativeVideoAdConfig -{ - // make sure only one instance of avPlayer at a time - if (self.currentPlayerViewController) { - [self disposePlayerViewController]; - } - - self.currentPlayerViewController = [[MOPUBPlayerViewController alloc] initWithVideoConfig:videoConfig nativeVideoAdConfig:nativeVideoAdConfig]; - return self.currentPlayerViewController; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.h deleted file mode 100644 index 29d29ef0f..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// MOPUBPlayerView.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MOPUBAVPlayer.h" - -@class MOPUBPlayerView; - -typedef NS_ENUM(NSUInteger, MOPUBPlayerDisplayMode) { - MOPUBPlayerDisplayModeInline = 0, - MOPUBPlayerDisplayModeFullscreen -}; - -@protocol MOPUBPlayerViewDelegate - -- (void)playerViewDidTapReplayButton:(MOPUBPlayerView *)view; -- (void)playerViewWillShowReplayView:(MOPUBPlayerView *)view; -- (void)playerViewWillEnterFullscreen:(MOPUBPlayerView *)view; - -@end - -@interface MOPUBPlayerView : UIControl - -@property (nonatomic) MOPUBAVPlayer *avPlayer; -@property (nonatomic) MOPUBPlayerDisplayMode displayMode; -@property (nonatomic, copy) NSString *videoGravity; - -- (instancetype)initWithFrame:(CGRect)frame delegate:(id)delegate; - -- (void)createPlayerView; -- (void)playbackTimeDidProgress; -- (void)playbackDidFinish; -- (void)setProgressBarVisible:(BOOL)visible; -- (void)handleVideoInitFailure; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.m deleted file mode 100644 index c29008f06..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerView.m +++ /dev/null @@ -1,230 +0,0 @@ -// -// MOPUBPlayerView.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MOPUBAVPlayerView.h" -#import "MOPUBAVPlayer.h" -#import "MOPUBAVPlayerView.h" -#import "MOPUBPlayerView.h" -#import "MOPUBPlayerViewController.h" -#import "MOPUBReplayView.h" -#import "UIView+MPAdditions.h" -#import "UIColor+MPAdditions.h" - -static NSString * const kProgressBarFillColor = @"#FFCC4D"; -static CGFloat const kVideoProgressBarHeight = 4.0f; - -// gradient -static NSString * const kTopGradientColor = @"#000000"; -static NSString * const kBottomGradientColor = @"#000000"; -static CGFloat const kTopGradientAlpha = 0.0f; -static CGFloat const kBottomGradientAlpha = 0.4f; -static CGFloat const kGradientViewHeight = 25.0f; - -@interface MOPUBPlayerView() - -// UI elements -@property (nonatomic) MOPUBAVPlayerView *avView; -@property (nonatomic) MOPUBReplayView *replayView; -@property (nonatomic) UIButton *replayVideoButton; -@property (nonatomic) UIView *progressBarBackground; -@property (nonatomic) UIView *progressBar; -@property (nonatomic) UIView *gradientView; -@property (nonatomic) CAGradientLayer *gradient; - -@property (nonatomic) UITapGestureRecognizer *tapGestureRecognizer; -@property (nonatomic, weak) id delegate; - -@end - -@implementation MOPUBPlayerView - -- (instancetype)initWithFrame:(CGRect)frame delegate:(id)delegate -{ - self = [super initWithFrame:frame]; - if (self) { - _delegate = delegate; - - _tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(avPlayerTapped)]; - [self addGestureRecognizer:_tapGestureRecognizer]; - } - return self; -} - -- (void)dealloc -{ - [self.tapGestureRecognizer removeTarget:self action:@selector(avPlayerTapped)]; -} - -- (void)createPlayerView -{ - self.clipsToBounds = YES; - if (!self.gradientView && self.displayMode == MOPUBPlayerDisplayModeInline) { - // Create the gradient - self.gradientView = [UIView new]; - UIColor *topColor = [UIColor mp_colorFromHexString:kTopGradientColor alpha:kTopGradientAlpha]; - UIColor *bottomColor = [UIColor mp_colorFromHexString:kBottomGradientColor alpha:kBottomGradientAlpha]; - self.gradient = [CAGradientLayer layer]; - self.gradient.colors = [NSArray arrayWithObjects: (id)topColor.CGColor, (id)bottomColor.CGColor, nil]; - self.gradient.frame = CGRectMake(0, 0, CGRectGetWidth(self.bounds), kGradientViewHeight); - - //Add gradient to view - [self.gradientView.layer insertSublayer:self.gradient atIndex:0]; - [self addSubview:self.gradientView]; - } - - if (!self.progressBar) { - self.progressBar = [[UIView alloc] init]; - self.progressBarBackground = [[UIView alloc] init]; - [self addSubview:self.progressBarBackground]; - - self.progressBarBackground.backgroundColor = [UIColor colorWithRed:.5f green:.5f blue:.5f alpha:.5f]; - self.progressBar.backgroundColor = [UIColor mp_colorFromHexString:kProgressBarFillColor alpha:1.0f]; - [self addSubview:self.progressBar]; - } -} - -#pragma mark - set avPlayer - -- (void)setAvPlayer:(MOPUBAVPlayer *)player -{ - if (!player) { - MPLogError(@"Cannot set avPlayer to nil"); - return; - } - if (_avPlayer == player) { - return; - } - _avPlayer = player; - [_avView removeFromSuperview]; - _avView = [[MOPUBAVPlayerView alloc] initWithFrame:CGRectZero]; - _avView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - self.videoGravity = AVLayerVideoGravityResizeAspectFill; - self.avView.player = self.avPlayer; - self.avView.frame = (CGRect){CGPointZero, self.bounds.size}; - [self insertSubview:_avView atIndex:0]; -} - -- (void)setVideoGravity:(NSString *)videoGravity -{ - ((AVPlayerLayer *)_avView.layer).videoGravity = videoGravity; -} - -// make the player view not clickable when initializing video failed. -- (void)handleVideoInitFailure -{ - [self removeGestureRecognizer:self.tapGestureRecognizer]; -} - -#pragma mark - Synchronize UI Elements - -- (void)playbackTimeDidProgress -{ - [self layoutProgressBar]; -} - -- (void)playbackDidFinish -{ - if (!self.replayView) { - self.replayView = [[MOPUBReplayView alloc] initWithFrame:self.avView.bounds displayMode:self.displayMode]; - __weak __typeof__(self) weakSelf = self; - self.replayView.actionBlock = ^(MOPUBReplayView *view) { - __strong __typeof__(self) strongSelf = weakSelf; - if ([strongSelf.delegate respondsToSelector:@selector(playerViewDidTapReplayButton:)]) { - [strongSelf.delegate playerViewDidTapReplayButton:strongSelf]; - } - [strongSelf.replayView removeFromSuperview]; - strongSelf.replayView = nil; - }; - [self addSubview:self.replayView]; - - if ([self.delegate respondsToSelector:@selector(playerViewWillShowReplayView:)]) { - [self.delegate playerViewWillShowReplayView:self]; - } - } -} - -- (void)setProgressBarVisible:(BOOL)visible -{ - self.progressBarBackground.hidden = !visible; - self.progressBar.hidden = !visible; -} - -#pragma mark - Touch event - -- (void)avPlayerTapped -{ - // Only trigger tap event in infeed mode - if (self.displayMode == MOPUBPlayerDisplayModeInline) { - self.displayMode = MOPUBPlayerDisplayModeFullscreen; - if ([self.delegate respondsToSelector:@selector(playerViewWillEnterFullscreen:)]) { - [self.delegate playerViewWillEnterFullscreen:self]; - } - [self setNeedsLayout]; - [self layoutIfNeeded]; - } -} - -#pragma mark - layout views - -- (void)layoutSubviews -{ - [super layoutSubviews]; - - [self layoutProgressBar]; - [self layoutGradientview]; - [self layoutReplayView]; -} - -- (void)layoutProgressBar -{ - if (self.avPlayer && !isnan(self.avPlayer.currentItemDuration)) { - CGFloat vcWidth = CGRectGetWidth(self.bounds); - CGFloat currentProgress = self.avPlayer.currentPlaybackTime/self.avPlayer.currentItemDuration; - if (currentProgress < 0) { - currentProgress = 0; - MPLogError(@"Progress shouldn't be < 0"); - } - if (currentProgress > 1) { - currentProgress = 1; - MPLogError(@"Progress shouldn't be > 1"); - } - - self.progressBar.frame = CGRectMake(0, CGRectGetMaxY(self.avView.frame)- kVideoProgressBarHeight, vcWidth * currentProgress, kVideoProgressBarHeight); - self.progressBarBackground.frame = CGRectMake(0, CGRectGetMaxY(self.avView.frame) - kVideoProgressBarHeight, vcWidth, kVideoProgressBarHeight); - } -} - - -- (void)layoutGradientview -{ - if (self.displayMode == MOPUBPlayerDisplayModeInline) { - self.gradientView.hidden = NO; - self.gradient.frame = CGRectMake(0, 0, CGRectGetWidth(self.bounds), kGradientViewHeight); - self.gradientView.frame = CGRectMake(0, CGRectGetMaxY(self.avView.frame) - kGradientViewHeight, CGRectGetWidth(self.bounds), kGradientViewHeight); - } else { - self.gradientView.hidden = YES; - } -} - -- (void)layoutReplayView -{ - if (self.replayView) { - CGSize screenSize = MPScreenBounds().size; - if (UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]) && self.displayMode == MOPUBPlayerDisplayModeFullscreen) { - self.replayView.frame = CGRectMake(0, 0, screenSize.width, screenSize.height); - } else { - self.replayView.frame = self.avView.frame; - } - [self.replayView setNeedsLayout]; - [self.replayView layoutIfNeeded]; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.h deleted file mode 100644 index 45cf178d7..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.h +++ /dev/null @@ -1,79 +0,0 @@ -// -// MOPUBPlayerViewController.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MOPUBPlayerView.h" - -@class AVPlayerItem; -@class MOPUBAVPlayer; -@class MOPUBPlayerViewController; -@class MOPUBNativeVideoAdConfigValues; -@class MPVASTTracking; -@class MPVideoConfig; - -@protocol MOPUBPlayerViewControllerDelegate - -@optional - -- (void)willEnterFullscreen:(MOPUBPlayerViewController *)viewController; -- (void)playerPlaybackWillStart:(MOPUBPlayerViewController *)player; -- (void)playerPlaybackDidStart:(MOPUBPlayerViewController *)player; -- (void)playerDidProgressToTime:(NSTimeInterval)playbackTime; -- (void)playerViewController:(MOPUBPlayerViewController *)playerViewController didTapReplayButton:(MOPUBPlayerView *)view; -- (void)playerViewController:(MOPUBPlayerViewController *)playerViewController willShowReplayView:(MOPUBPlayerView *)view; -- (void)playerViewController:(MOPUBPlayerViewController *)playerViewController didStall:(MOPUBAVPlayer *)player; -- (void)playerViewController:(MOPUBPlayerViewController *)playerViewController didRecoverFromStall:(MOPUBAVPlayer *)player; - -- (UIViewController *)viewControllerForPresentingModalView; - -@end - -@interface MOPUBPlayerViewController : UIViewController - -@property (nonatomic, readonly) NSURL *mediaURL; - -@property (nonatomic, readonly) MOPUBPlayerView *playerView; -@property (nonatomic, readonly) AVPlayerItem *playerItem; -@property (nonatomic, readonly) MOPUBAVPlayer *avPlayer; -@property (nonatomic) MPVASTTracking *vastTracking; -@property (nonatomic, readonly) CGFloat videoAspectRatio; -@property (nonatomic, readonly) MOPUBNativeVideoAdConfigValues *nativeVideoAdConfig; - -#pragma mark - Configurations/States -@property (nonatomic) MOPUBPlayerDisplayMode displayMode; -@property (nonatomic) BOOL muted; -@property (nonatomic) BOOL startedLoading; -@property (nonatomic) BOOL playing; -@property (nonatomic) BOOL paused; -@property (nonatomic) BOOL isReadyToPlay; -@property (nonatomic) BOOL disposed; - -#pragma - Call to action click tracking url -@property (nonatomic) NSURL *defaultActionURL; - -@property (nonatomic, weak) id delegate; - -#pragma mark - Initializer -- (instancetype)initWithVideoConfig:(MPVideoConfig *)videoConfig nativeVideoAdConfig:(MOPUBNativeVideoAdConfigValues *)nativeVideoAdConfig; -- (instancetype)init NS_UNAVAILABLE; -+ (instancetype)new NS_UNAVAILABLE; - -- (void)loadAndPlayVideo; -- (void)seekToTime:(NSTimeInterval)time; -- (void)pause; -- (void)resume; -- (void)dispose; - -- (BOOL)shouldStartNewPlayer; -- (BOOL)shouldResumePlayer; -- (BOOL)shouldPausePlayer; - -- (void)willEnterFullscreen; -- (void)willExitFullscreen; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.m deleted file mode 100644 index 5fc3a7357..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBPlayerViewController.m +++ /dev/null @@ -1,621 +0,0 @@ -// -// MOPUBPlayerViewController.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MOPUBAVPlayer.h" -#import "MOPUBFullscreenPlayerViewController.h" -#import "MOPUBPlayerViewController.h" -#import "MOPUBActivityIndicatorView.h" -#import "MPAdDestinationDisplayAgent.h" -#import "MPCoreInstanceProvider.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MOPUBNativeVideoAdConfigValues.h" -#import "MPVastTracking.h" -#import "MPVideoConfig.h" -#import "UIView+MPAdditions.h" -#import "MOPUBNativeVideoAdConfigValues.h" -#import "MPVideoConfig.h" -#import "UIButton+MPAdditions.h" - -#define kDefaultVideoAspectRatio 16.0f/9.0f - -static NSString * const kMutedButtonImage = @"MPMutedBtn.png"; -static NSString * const kUnmutedButtonImage = @"MPUnmutedBtn.png"; - -static NSString * const kTracksKey = @"tracks"; -static NSString * const kPlayableKey = @"playable"; - -// playerItem keys -static NSString * const kStatusKey = @"status"; -static NSString * const kCurrentItemKey = @"currentItem"; -static NSString * const kLoadedTimeRangesKey = @"loadedTimeRanges"; -static void *AudioControllerBufferingObservationContext = &AudioControllerBufferingObservationContext; - -// UI specifications -static CGFloat const kMuteIconInlineModeLeftMargin = 6.0f; -static CGFloat const kMuteIconInlineModeBottomMargin = 5.0f; -static CGFloat const kMuteIconInlineModeTouchAreaInsets = 25.0f; - -static CGFloat const kLoadingIndicatorTopMargin = 8.0f; -static CGFloat const kLoadingIndicatorRightMargin = 8.0f; - -// force resume playback in 3 seconds. player might get stuck due to stalled item -static CGFloat const kDelayPlayInSeconds = 3.0f; - -// We compare the buffered time to the length of the video to determine when it has been -// fully buffered. To account for rounding errors, allow a small error when making this -// calculation. -static const double kVideoFinishedBufferingAllowedError = 0.1; - -@interface MOPUBPlayerViewController() - -@property (nonatomic) UIButton *muteButton; -@property (nonatomic) UIActivityIndicatorView *loadingIndicator; -@property (nonatomic) MPAdDestinationDisplayAgent *displayAgent; - -// KVO might be triggerd multipe times. This property is used to make sure the view will only be created once. -@property (nonatomic) BOOL alreadyInitialized; -@property (nonatomic) BOOL downloadFinishedEventFired; -@property (nonatomic) BOOL alreadyCreatedPlayerView; -@property (nonatomic) BOOL finishedPlaying; - -@end - -@implementation MOPUBPlayerViewController - -- (instancetype)initWithVideoConfig:(MPVideoConfig *)videoConfig nativeVideoAdConfig:(MOPUBNativeVideoAdConfigValues *)nativeVideoAdConfig -{ - if (self = [super init]) { - _mediaURL = videoConfig.mediaURL; - _playerView = [[MOPUBPlayerView alloc] initWithFrame:CGRectZero delegate:self]; - self.displayMode = MOPUBPlayerDisplayModeInline; - - NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; - [notificationCenter addObserver:self selector:@selector(applicationDidEnterBackground:) name:UIApplicationDidEnterBackgroundNotification object:nil]; - [notificationCenter addObserver:self selector:@selector(applicationDidEnterForeground:) name:UIApplicationWillEnterForegroundNotification object:nil]; - _nativeVideoAdConfig = nativeVideoAdConfig; - - // default aspect ratio is 16:9 - _videoAspectRatio = kDefaultVideoAspectRatio; - } - return self; -} - -#pragma mark - UIViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - - [self.view addSubview:self.playerView]; - [self startLoadingIndicator]; -} - -- (void)viewWillLayoutSubviews -{ - [super viewWillLayoutSubviews]; - - // Bring mute button to front. This is necessary because the video view might be detached - // and re-attached during fullscreen to in-feed transition - [self.view bringSubviewToFront:self.muteButton]; - // Set playerView's frame so it will work for rotation - self.playerView.frame = self.view.bounds; - - [self layoutLoadingIndicator]; -} - -- (void)layoutLoadingIndicator -{ - if (_loadingIndicator) { - _loadingIndicator.mp_x = CGRectGetWidth(self.view.bounds) - kLoadingIndicatorRightMargin - CGRectGetWidth(_loadingIndicator.bounds); - _loadingIndicator.mp_y = kLoadingIndicatorTopMargin; - } -} - -#pragma mark - dealloc or dispose the controller - -- (void)dealloc -{ - [[NSNotificationCenter defaultCenter] removeObserver:self]; - - if (self.avPlayer) { - [self.avPlayer removeObserver:self forKeyPath:kStatusKey]; - } - - if (self.playerItem) { - [self.playerItem removeObserver:self forKeyPath:kStatusKey]; - [self.playerItem removeObserver:self forKeyPath:kLoadedTimeRangesKey]; - } - - MPLogDebug(@"playerViewController dealloc called"); -} - -- (void)dispose -{ - [self.view removeFromSuperview]; - [self.avPlayer dispose]; - self.avPlayer = nil; - self.disposed = YES; -} - -#pragma mark - load asset, set up aVplayer and avPlayer view - -- (void)handleVideoInitError -{ - [self.vastTracking handleVideoEvent:MPVideoEventTypeError videoTimeOffset:self.avPlayer.currentPlaybackTime]; - [self stopLoadingIndicator]; - [self.playerView handleVideoInitFailure]; -} - -- (void)loadAndPlayVideo -{ - self.startedLoading = YES; - - AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:self.mediaURL options:nil]; - - if (asset == nil) { - MPLogError(@"failed to initialize video asset for URL %@", self.mediaURL); - [self handleVideoInitError]; - - return; - } - - NSArray *requestedKeys = @[kTracksKey, kPlayableKey]; - [asset loadValuesAsynchronouslyForKeys:requestedKeys completionHandler:^{ - dispatch_async(dispatch_get_main_queue(), ^{ - if (!self.disposed) { - [self prepareToPlayAsset:asset withKeys:requestedKeys]; - } - }); - }]; -} - -- (void)setVideoAspectRatioWithAsset:(AVURLAsset *)asset -{ - if (asset && [asset tracksWithMediaType:AVMediaTypeVideo].count > 0) { - AVAssetTrack *videoTrack = [asset tracksWithMediaType:AVMediaTypeVideo][0]; - CGSize naturalSize = CGSizeApplyAffineTransform(videoTrack.naturalSize, videoTrack.preferredTransform); - naturalSize = CGSizeMake(fabs(naturalSize.width), fabs(naturalSize.height)); - - // make sure the natural size is at least 1pt (not 0) check - if (naturalSize.height > 0 && naturalSize.width > 0) { - _videoAspectRatio = naturalSize.width / naturalSize.height; - } - } -} - -- (void)prepareToPlayAsset:(AVURLAsset *)asset withKeys:(NSArray *)requestedKeys -{ - NSError *error = nil; - - if (!asset.playable) { - MPLogError(@"asset is not playable"); - [self handleVideoInitError]; - - return; - } - - AVKeyValueStatus status = [asset statusOfValueForKey:kTracksKey error:&error]; - if (status == AVKeyValueStatusFailed) { - MPLogError(@"AVKeyValueStatusFailed"); - [self handleVideoInitError]; - - return; - } else if (status == AVKeyValueStatusLoaded) { - [self setVideoAspectRatioWithAsset:asset]; - - self.playerItem = [AVPlayerItem playerItemWithAsset:asset]; - self.avPlayer = [[MOPUBAVPlayer alloc] initWithDelegate:self playerItem:self.playerItem]; - self.avPlayer.muted = YES; - - [self.playerView setAvPlayer:self.avPlayer]; - } -} - -#pragma mark - video ready to play -- (void)initOnVideoReady -{ - [self startPlayer]; -} - -- (void)createView -{ - [self.playerView createPlayerView]; - [self createMuteButton]; -} - -- (void)createMuteButton -{ - if (!self.muteButton) { - self.muteButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [self.muteButton setImage:[UIImage imageNamed:MPResourcePathForResource(kMutedButtonImage)] forState:UIControlStateNormal]; - [self.muteButton setImage:[UIImage imageNamed:MPResourcePathForResource(kUnmutedButtonImage)] forState:UIControlStateSelected]; - [self.muteButton addTarget:self action:@selector(muteButtonTapped) forControlEvents:UIControlEventTouchUpInside]; - self.muteButton.mp_TouchAreaInsets = UIEdgeInsetsMake(kMuteIconInlineModeTouchAreaInsets, kMuteIconInlineModeTouchAreaInsets, kMuteIconInlineModeTouchAreaInsets, kMuteIconInlineModeTouchAreaInsets); - [self.muteButton sizeToFit]; - [self.view addSubview:self.muteButton]; - self.muteButton.frame = CGRectMake(kMuteIconInlineModeLeftMargin, CGRectGetMaxY(self.view.bounds) - kMuteIconInlineModeBottomMargin - CGRectGetHeight(self.muteButton.bounds), CGRectGetWidth(self.muteButton.bounds), CGRectGetHeight(self.muteButton.bounds)); - } -} - -- (void)startPlayer -{ - [self.avPlayer play]; - self.playing = YES; - self.isReadyToPlay = YES; - if ([self.delegate respondsToSelector:@selector(playerPlaybackDidStart:)]) { - [self.delegate playerPlaybackDidStart:self]; - } -} - -#pragma mark - displayAgent - -- (MPAdDestinationDisplayAgent *)displayAgent -{ - if (!_displayAgent) { - _displayAgent = [MPAdDestinationDisplayAgent agentWithDelegate:self]; - } - return _displayAgent; -} - - -#pragma mark - setter for player related objects - -- (void)setPlayerItem:(AVPlayerItem *)playerItem -{ - if (_playerItem) { - [_playerItem removeObserver:self forKeyPath:kStatusKey]; - [_playerItem removeObserver:self forKeyPath:kLoadedTimeRangesKey]; - } - _playerItem = playerItem; - if (!playerItem) { - return; - } - - [_playerItem addObserver:self forKeyPath:kStatusKey options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew context:nil]; - [_playerItem addObserver:self - forKeyPath:kLoadedTimeRangesKey - options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew - context:AudioControllerBufferingObservationContext]; -} - -- (void)setAvPlayer:(MOPUBAVPlayer *)avPlayer -{ - if (_avPlayer) { - [_avPlayer removeObserver:self forKeyPath:kStatusKey]; - } - _avPlayer = avPlayer; - if (_avPlayer) { - NSKeyValueObservingOptions options = (NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew); - [_avPlayer addObserver:self forKeyPath:kStatusKey options:options context:nil]; - } -} - -- (void)setMuted:(BOOL)muted -{ - _muted = muted; - [self.muteButton setSelected:!muted]; - self.avPlayer.muted = muted; -} - -#pragma mark - displayMode - -- (MOPUBPlayerDisplayMode)displayMode -{ - return self.playerView.displayMode; -} - -- (void)setDisplayMode:(MOPUBPlayerDisplayMode)displayMode -{ - self.playerView.displayMode = displayMode; - if (displayMode == MOPUBPlayerDisplayModeInline) { - self.muted = YES; - } else { - self.muted = NO; - } -} - -#pragma mark - acvivityIndicator -- (UIActivityIndicatorView *)loadingIndicator -{ - if (!_loadingIndicator) { - _loadingIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; - _loadingIndicator.hidesWhenStopped = YES; - _loadingIndicator.color = [UIColor whiteColor]; - [self.view addSubview:_loadingIndicator]; - } - return _loadingIndicator; -} - -- (void)startLoadingIndicator -{ - [self.loadingIndicator.superview bringSubviewToFront:_loadingIndicator]; - [self.loadingIndicator startAnimating]; -} - -- (void)stopLoadingIndicator -{ - if (_loadingIndicator && _loadingIndicator.isAnimating) { - [_loadingIndicator stopAnimating]; - } -} - -- (void)removeLoadingIndicator -{ - if (_loadingIndicator) { - [_loadingIndicator stopAnimating]; - [_loadingIndicator removeFromSuperview]; - _loadingIndicator = nil; - } -} - - -#pragma mark - Tap actions - -- (void)muteButtonTapped -{ - self.muteButton.selected = !self.muteButton.selected; - self.muted = !self.muteButton.selected; - - MPVideoEventType eventType = self.muted ? MPVideoEventTypeMuted : MPVideoEventTypeUnmuted; - [self.vastTracking handleVideoEvent:eventType videoTimeOffset:self.avPlayer.currentPlaybackTime]; -} - -# pragma mark - KVO - -- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context -{ - if (object == self.avPlayer) { - if (self.avPlayer.status == AVPlayerItemStatusFailed) { - MPLogError(@"avPlayer status failed"); - [self.vastTracking handleVideoEvent:MPVideoEventTypeError videoTimeOffset:self.avPlayer.currentPlaybackTime]; - } - } else if (object == self.playerItem) { - if (context == AudioControllerBufferingObservationContext) { - NSArray *timeRangeArray = [self.playerItem loadedTimeRanges]; - if (timeRangeArray && timeRangeArray.count > 0) { - CMTimeRange aTimeRange = [[timeRangeArray objectAtIndex:0] CMTimeRangeValue]; - double startTime = CMTimeGetSeconds(aTimeRange.start); - double loadedDuration = CMTimeGetSeconds(aTimeRange.duration); - double videoDuration = CMTimeGetSeconds(self.playerItem.duration); - if ((startTime + loadedDuration + kVideoFinishedBufferingAllowedError) >= videoDuration && !self.downloadFinishedEventFired) { - self.downloadFinishedEventFired = YES; - } - } - } - if ([keyPath isEqualToString:kStatusKey]) { - switch (self.playerItem.status) { - case AVPlayerItemStatusReadyToPlay: - self.vastTracking.videoDuration = CMTimeGetSeconds(self.playerItem.duration); - if (!self.alreadyInitialized) { - self.alreadyInitialized = YES; - [self initOnVideoReady]; - } - break; - case AVPlayerItemStatusFailed: - { - MPLogError(@"avPlayerItem status failed"); - [self.vastTracking handleVideoEvent:MPVideoEventTypeError videoTimeOffset:self.avPlayer.currentPlaybackTime]; - break; - } - default: - break; - } - } - } else { - [super observeValueForKeyPath:keyPath ofObject:object change:change context:context]; - } -} - -#pragma mark - player controls - -- (void)pause -{ - self.paused = YES; - self.playing = NO; - [self.avPlayer pause]; - [self.vastTracking handleVideoEvent:MPVideoEventTypePause videoTimeOffset:self.avPlayer.currentPlaybackTime]; -} - -- (void)resume -{ - self.paused = NO; - self.playing = YES; - [self.avPlayer play]; - [self.vastTracking handleVideoEvent:MPVideoEventTypeResume videoTimeOffset:self.avPlayer.currentPlaybackTime]; -} - -- (void)seekToTime:(NSTimeInterval)time -{ - [self.avPlayer seekToTime:CMTimeMakeWithSeconds(time, NSEC_PER_SEC) toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero]; -} - -#pragma mark - auto play helper method -- (BOOL)shouldStartNewPlayer -{ - UIApplicationState state = [[UIApplication sharedApplication] applicationState]; - if (!self.startedLoading && !self.playing && !self.paused && state == UIApplicationStateActive) { - return YES; - } - return NO; -} - -- (BOOL)shouldResumePlayer -{ - UIApplicationState state = [[UIApplication sharedApplication] applicationState]; - if (self.startedLoading && self.paused == YES && self.displayMode == MOPUBPlayerDisplayModeInline - && state == UIApplicationStateActive) { - return YES; - } - return NO; -} - -- (BOOL)shouldPausePlayer -{ - if (self.playing && self.displayMode == MOPUBPlayerDisplayModeInline) { - return YES; - } - return NO; -} - -#pragma mark - enter fullscreen or exit fullscreen - -- (void)willEnterFullscreen -{ - self.displayMode = MOPUBPlayerDisplayModeFullscreen; - [self.vastTracking handleVideoEvent:MPVideoEventTypeFullScreen videoTimeOffset:self.avPlayer.currentPlaybackTime]; - [self.vastTracking handleVideoEvent:MPVideoEventTypeExpand videoTimeOffset:self.avPlayer.currentPlaybackTime]; -} - -- (void)willExitFullscreen -{ - self.displayMode = MOPUBPlayerDisplayModeInline; - [self.vastTracking handleVideoEvent:MPVideoEventTypeExitFullScreen videoTimeOffset:self.avPlayer.currentPlaybackTime]; - [self.vastTracking handleVideoEvent:MPVideoEventTypeCollapse videoTimeOffset:self.avPlayer.currentPlaybackTime]; -} - -#pragma mark - MOPUBAVPlayerDelegate - -- (void)avPlayer:(MOPUBAVPlayer *)player playbackTimeDidProgress:(NSTimeInterval)currentPlaybackTime -{ - // stop the loading indicator if it exists and is animating. - [self stopLoadingIndicator]; - - // When the KVO sends AVPlayerItemStatusReadyToPlay, there could still be a delay for the video really starts playing. - // If we create the mute button and progress bar immediately after AVPlayerItemStatusReadyToPlay signal, we might - // end up with showing them before the video is visible. To prevent that, we create mute button and progress bar here. - // There will be 0.1s delay after the video starts playing, but it's a much better user experience. - - if (!self.alreadyCreatedPlayerView) { - [self createView]; - self.alreadyCreatedPlayerView = YES; - } - - [self.playerView playbackTimeDidProgress]; - - if ([self.delegate respondsToSelector:@selector(playerDidProgressToTime:)]) { - [self.delegate playerDidProgressToTime:currentPlaybackTime]; - } -} - -- (void)avPlayer:(MOPUBAVPlayer *)player didError:(NSError *)error withMessage:(NSString *)message -{ - [self.avPlayer pause]; - [self.vastTracking handleVideoEvent:MPVideoEventTypeError videoTimeOffset:self.avPlayer.currentPlaybackTime]; -} - -- (void)avPlayerDidFinishPlayback:(MOPUBAVPlayer *)player -{ - self.finishedPlaying = YES; - [self removeLoadingIndicator]; - [self.avPlayer pause]; - // update view - [self.playerView playbackDidFinish]; - [self.vastTracking handleVideoEvent:MPVideoEventTypeCompleted videoTimeOffset:self.avPlayer.currentPlaybackTime]; -} - -- (void)avPlayerDidRecoverFromStall:(MOPUBAVPlayer *)player -{ - if (self.displayMode == MOPUBPlayerDisplayModeInline) { - [self removeLoadingIndicator]; - } else { - if ([self.delegate respondsToSelector:@selector(playerViewController:didRecoverFromStall:)]) { - [self.delegate playerViewController:self didRecoverFromStall:player]; - } - } - - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(resume) object:nil]; -} - -- (void)avPlayerDidStall:(MOPUBAVPlayer *)player -{ - if (self.displayMode == MOPUBPlayerDisplayModeInline) { - [self startLoadingIndicator]; - } else { - if ([self.delegate respondsToSelector:@selector(playerViewController:didStall:)]) { - [self.delegate playerViewController:self didStall:self.avPlayer]; - } - } - - // Try to resume the video play after 3 seconds. The perform selector request is cancelled when - // didRecoverFromStall signal is received. This way, we won't queue up the requests. - [self performSelector:@selector(resume) withObject:nil afterDelay:kDelayPlayInSeconds]; -} - -#pragma mark - MOPUBPlayerViewDelegate -- (void)playerViewDidTapReplayButton:(MOPUBPlayerView *)view -{ - self.muteButton.hidden = NO; - self.finishedPlaying = NO; - [self.playerView setProgressBarVisible:YES]; - [self seekToTime:0]; - [self.avPlayer play]; -} - -- (void)playerViewWillShowReplayView:(MOPUBPlayerView *)view -{ - self.muteButton.hidden = YES; - [self.playerView setProgressBarVisible:NO]; - if (self.displayMode == MOPUBPlayerDisplayModeFullscreen) { - if ([self.delegate respondsToSelector:@selector(playerViewController:didTapReplayButton:)]) { - [self.delegate playerViewController:self willShowReplayView:self.playerView]; - } - } -} - -- (void)playerViewWillEnterFullscreen:(MOPUBPlayerView *)view -{ - if ([self.delegate respondsToSelector:@selector(willEnterFullscreen:)]) { - [self.delegate willEnterFullscreen:self]; - } -} - -#pragma mark - Application state monitoring - -- (void)applicationDidEnterBackground:(NSNotification *)notification -{ - if (self.avPlayer && self.avPlayer.rate > 0) { - [self pause]; - } -} - -- (void)applicationDidEnterForeground:(NSNotification *)notification -{ - // Resume video playback only if the visible area is larger than or equal to the autoplay threshold. - - BOOL playVisible = MPViewIntersectsParentWindowWithPercent(self.playerView, self.nativeVideoAdConfig.playVisiblePercent/100.0f); - if (self.avPlayer && self.isReadyToPlay && !self.finishedPlaying && playVisible) { - [self resume]; - } -} - -#pragma mark - - -- (UIViewController *)viewControllerForPresentingModalView -{ - return [self.delegate viewControllerForPresentingModalView]; -} - -- (void)displayAgentWillPresentModal -{ - [self pause]; -} - -- (void)displayAgentWillLeaveApplication -{ - [self pause]; -} - -- (void)displayAgentDidDismissModal -{ - [self resume]; -} - -@end - diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBReplayView.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBReplayView.h deleted file mode 100644 index 6d6cbc438..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBReplayView.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MOPUBReplayView.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MOPUBPlayerView.h" - -@class MOPUBReplayView; - -typedef void (^MPBReplayActionBlock)(MOPUBReplayView *replayView); - -@interface MOPUBReplayView : UIView - -@property (nonatomic, copy) MPBReplayActionBlock actionBlock; - -- (instancetype)initWithFrame:(CGRect)frame displayMode:(MOPUBPlayerDisplayMode)displayMode; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBReplayView.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBReplayView.m deleted file mode 100644 index e2bcbc899..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/Internal/MOPUBReplayView.m +++ /dev/null @@ -1,59 +0,0 @@ -// -// MOPUBReplayView.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBReplayView.h" -#import "MPGlobal.h" -#import "UIView+MPAdditions.h" -#import "UIColor+MPAdditions.h" - -static NSString * const kPlayButtonImage = @"MPPlayBtn.png"; -static NSString * const kOverlayBgColor = @"#000000"; -static CGFloat const kOverlayAlpha = 0.5f; - -@interface MOPUBReplayView() - -@property (nonatomic) UIView *overlayView; -@property (nonatomic) UIButton *replayVideoButton; - -@end - -@implementation MOPUBReplayView - -- (instancetype)initWithFrame:(CGRect)frame displayMode:(MOPUBPlayerDisplayMode)displayMode -{ - if (self = [super initWithFrame:frame]) { - // only apply the overlay for fullscreen mode - if (displayMode == MOPUBPlayerDisplayModeFullscreen) { - _overlayView = [UIView new]; - _overlayView.backgroundColor = [UIColor mp_colorFromHexString:kOverlayBgColor alpha:kOverlayAlpha]; - [self addSubview:_overlayView]; - } - - _replayVideoButton = [UIButton buttonWithType:UIButtonTypeCustom]; - [_replayVideoButton setImage:[UIImage imageNamed:MPResourcePathForResource(kPlayButtonImage)] forState:UIControlStateNormal]; - [_replayVideoButton addTarget:self action:@selector(replayButtonTapped) forControlEvents:UIControlEventTouchUpInside]; - [_replayVideoButton sizeToFit]; - [self addSubview:_replayVideoButton]; - } - return self; -} - -- (void)layoutSubviews -{ - [super layoutSubviews]; - self.overlayView.frame = self.bounds; - self.replayVideoButton.center = self.center; - self.replayVideoButton.frame = CGRectIntegral(self.replayVideoButton.frame); -} - -- (void)replayButtonTapped -{ - self.actionBlock(self); -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.h deleted file mode 100644 index 10583d98d..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// MOPUBNativeVideoAdRenderer.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPNativeAdRenderer.h" - -@class MPNativeAdRendererConfiguration; -@class MPStaticNativeAdRendererSettings; - -@interface MOPUBNativeVideoAdRenderer : NSObject - -@property (nonatomic, readonly) MPNativeViewSizeHandler viewSizeHandler; - -+ (MPNativeAdRendererConfiguration *)rendererConfigurationWithRendererSettings:(id)rendererSettings; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.m deleted file mode 100644 index f46c92182..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRenderer.m +++ /dev/null @@ -1,408 +0,0 @@ -// -// MOPUBNativeVideoAdRenderer.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBNativeVideoAdRenderer.h" -#import "MPNativeAdRendererConfiguration.h" -#import "MPNativeAdRenderer.h" -#import "MPNativeAdRendering.h" -#import "MPNativeAdAdapter.h" -#import "MPNativeAdConstants.h" -#import "MPNativeAdError.h" -#import "MPNativeAdRendererImageHandler.h" -#import "MPTimer.h" -#import "MPGlobal.h" -#import "MPLogging.h" -#import "MOPUBNativeVideoAdRendererSettings.h" -#import "MOPUBFullscreenPlayerViewController.h" -#import "MOPUBPlayerManager.h" -#import "MOPUBNativeVideoAdAdapter.h" -#import "MPVASTTracking.h" -#import "MPVideoConfig.h" -#import "MOPUBNativeVideoAdConfigValues.h" -#import "MOPUBNativeVideoImpressionAgent.h" -#import "MOPUBPlayerViewController.h" -#import "MPNativeAdRenderingImageLoader.h" -#import "MPURLRequest.h" -#import "MPHTTPNetworkSession.h" -#import "MPMemoryCache.h" - -static const CGFloat kAutoPlayTimerInterval = 0.25f; - -@interface MOPUBNativeVideoAdRenderer () - -@property (nonatomic) UIView *adView; -@property (nonatomic) MOPUBNativeVideoAdAdapter *adapter; -@property (nonatomic) BOOL adViewInViewHierarchy; -@property (nonatomic) Class renderingViewClass; -@property (nonatomic) MPNativeAdRendererImageHandler *rendererImageHandler; - -@property (nonatomic, weak) MOPUBPlayerViewController *videoController; -@property (nonatomic) MPTimer *autoPlayTimer; -@property (nonatomic) MPVideoConfig *videoConfig; -@property (nonatomic) MPVASTTracking *vastTracking; -@property (nonatomic) MOPUBNativeVideoAdConfigValues *nativeVideoAdConfig; -@property (nonatomic) MOPUBNativeVideoImpressionAgent *trackingAgent; -@property (nonatomic) BOOL trackingImpressionFired; - -@end - -@implementation MOPUBNativeVideoAdRenderer - -+ (MPNativeAdRendererConfiguration *)rendererConfigurationWithRendererSettings:(id)rendererSettings -{ - MPNativeAdRendererConfiguration *config = [[MPNativeAdRendererConfiguration alloc] init]; - config.rendererClass = [self class]; - config.rendererSettings = rendererSettings; - config.supportedCustomEvents = @[@"MOPUBNativeVideoCustomEvent"]; - - return config; -} - -- (instancetype)initWithRendererSettings:(id)rendererSettings -{ - if (self = [super init]) { - MOPUBNativeVideoAdRendererSettings *settings = (MOPUBNativeVideoAdRendererSettings *)rendererSettings; - _renderingViewClass = settings.renderingViewClass; - _viewSizeHandler = [settings.viewSizeHandler copy]; - _rendererImageHandler = [MPNativeAdRendererImageHandler new]; - _rendererImageHandler.delegate = self; - } - - return self; -} - -- (void)dealloc -{ - [_autoPlayTimer invalidate]; - _autoPlayTimer = nil; - - // free the video memory - [[MOPUBPlayerManager sharedInstance] disposePlayerViewController]; -} - -- (UIView *)retrieveViewWithAdapter:(MOPUBNativeVideoAdAdapter *)adapter error:(NSError **)error -{ - if (!adapter) { - if (error) { - *error = MPNativeAdNSErrorForRenderValueTypeError(); - } - - return nil; - } - - self.adapter = adapter; - - [self initAdView]; - [self setupVideoView]; - - self.adView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - - // We only load text here. We delay loading of images until the view is added to the view hierarchy - // so we don't unnecessarily load images from the cache if the user is scrolling fast. So we will - // just store the image URLs for now. - if ([self.adView respondsToSelector:@selector(nativeMainTextLabel)]) { - self.adView.nativeMainTextLabel.text = [adapter.properties objectForKey:kAdTextKey]; - } - - if ([self.adView respondsToSelector:@selector(nativeTitleTextLabel)]) { - self.adView.nativeTitleTextLabel.text = [adapter.properties objectForKey:kAdTitleKey]; - } - - if ([self.adView respondsToSelector:@selector(nativeCallToActionTextLabel)] && self.adView.nativeCallToActionTextLabel) { - self.adView.nativeCallToActionTextLabel.text = [adapter.properties objectForKey:kAdCTATextKey]; - } - - if ([self.adView respondsToSelector:@selector(nativePrivacyInformationIconImageView)]) { - UIImage *privacyIconImage = [adapter.properties objectForKey:kAdPrivacyIconUIImageKey]; - NSString *privacyIconImageUrl = [adapter.properties objectForKey:kAdPrivacyIconImageUrlKey]; - // A cached privacy information icon image exists; it should be used. - if (privacyIconImage != nil) { - UIImageView *imageView = self.adView.nativePrivacyInformationIconImageView; - imageView.hidden = NO; - imageView.image = privacyIconImage; - - // Attach a gesture recognizer to handle loading the privacy icon URL. - UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onPrivacyIconTapped)]; - imageView.userInteractionEnabled = YES; - [imageView addGestureRecognizer:tapRecognizer]; - } - // No cached privacy information icon image was cached, but there is a URL for the - // icon. Go fetch the icon and populate the UIImageView when complete. - else if (privacyIconImageUrl != nil) { - NSURL *iconUrl = [NSURL URLWithString:privacyIconImageUrl]; - MPURLRequest *imageRequest = [MPURLRequest requestWithURL:iconUrl]; - - __weak __typeof__(self) weakSelf = self; - [MPHTTPNetworkSession startTaskWithHttpRequest:imageRequest responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - // Cache the successfully retrieved icon image - [MPMemoryCache.sharedInstance setData:data forKey:privacyIconImageUrl]; - - // Populate the image view - __typeof__(self) strongSelf = weakSelf; - UIImageView *imageView = strongSelf.adView.nativePrivacyInformationIconImageView; - imageView.hidden = NO; - imageView.image = [UIImage imageWithData:data]; - - // Attach a gesture recognizer to handle loading the privacy icon URL. - UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:strongSelf action:@selector(onPrivacyIconTapped)]; - imageView.userInteractionEnabled = YES; - [imageView addGestureRecognizer:tapRecognizer]; - } errorHandler:^(NSError * _Nonnull error) { - MPLogInfo(@"Failed to retrieve privacy icon from %@", privacyIconImageUrl); - }]; - } - // The ad network may provide its own view for its privacy information icon. - // We assume the ad handles the tap on the icon as well. - else if ([adapter respondsToSelector:@selector(privacyInformationIconView)]) { - UIView *privacyIconAdView = [adapter privacyInformationIconView]; - privacyIconAdView.frame = self.adView.nativePrivacyInformationIconImageView.bounds; - privacyIconAdView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - self.adView.nativePrivacyInformationIconImageView.userInteractionEnabled = YES; - [self.adView.nativePrivacyInformationIconImageView addSubview:privacyIconAdView]; - self.adView.nativePrivacyInformationIconImageView.hidden = NO; - } - // No privacy icon - else { - self.adView.nativePrivacyInformationIconImageView.userInteractionEnabled = NO; - self.adView.nativePrivacyInformationIconImageView.hidden = YES; - } - } - - if ([self hasIconView]) { - UIView *iconView = [self.adapter iconMediaView]; - UIView *iconImageView = [self.adView nativeIconImageView]; - - iconView.frame = iconImageView.bounds; - iconView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - iconImageView.userInteractionEnabled = YES; - - [iconImageView addSubview:iconView]; - } - - if ([self shouldLoadMediaView]) { - UIView *mediaView = [self.adapter mainMediaView]; - UIView *mainImageView = [self.adView nativeMainImageView]; - - mediaView.frame = mainImageView.bounds; - mediaView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; - mediaView.userInteractionEnabled = YES; - mainImageView.userInteractionEnabled = YES; - - [mainImageView addSubview:mediaView]; - } - - // See if the ad contains a star rating and notify the view if it does. - if ([self.adView respondsToSelector:@selector(layoutStarRating:)]) { - NSNumber *starRatingNum = [adapter.properties objectForKey:kAdStarRatingKey]; - - if ([starRatingNum isKindOfClass:[NSNumber class]] && starRatingNum.floatValue >= kStarRatingMinValue && starRatingNum.floatValue <= kStarRatingMaxValue) { - [self.adView layoutStarRating:starRatingNum]; - } - } - - return self.adView; -} - -- (BOOL)shouldLoadMediaView -{ - return [self.adapter respondsToSelector:@selector(mainMediaView)] - && [self.adapter mainMediaView] - && [self.adView respondsToSelector:@selector(nativeMainImageView)]; -} - -- (BOOL)hasIconView -{ - return [self.adapter respondsToSelector:@selector(iconMediaView)] - && [self.adapter iconMediaView] - && [self.adView respondsToSelector:@selector(nativeIconImageView)]; -} - -- (void)onPrivacyIconTapped -{ - if ([self.adapter respondsToSelector:@selector(displayContentForDAAIconTap)]) { - [self.adapter displayContentForDAAIconTap]; - } -} - -- (void)adViewWillMoveToSuperview:(UIView *)superview -{ - self.adViewInViewHierarchy = (superview != nil); - - if (superview) { - // Only handle the loading of the icon image if the adapter doesn't already have a view for it. - if (![self hasIconView] && [self.adapter.properties objectForKey:kAdIconImageKey] && [self.adView respondsToSelector:@selector(nativeIconImageView)]) { - [self.rendererImageHandler loadImageForURL:[NSURL URLWithString:[self.adapter.properties objectForKey:kAdIconImageKey]] intoImageView:self.adView.nativeIconImageView]; - } - - // Only handle the loading of the main image if the adapter doesn't already have a view for it. - if (!([self.adapter respondsToSelector:@selector(mainMediaView)] && [self.adapter mainMediaView])) { - if ([self.adapter.properties objectForKey:kAdMainImageKey] && [self.adView respondsToSelector:@selector(nativeMainImageView)]) { - [self.rendererImageHandler loadImageForURL:[NSURL URLWithString:[self.adapter.properties objectForKey:kAdMainImageKey]] intoImageView:self.adView.nativeMainImageView]; - } - } - - // Layout custom assets here as the custom assets may contain images that need to be loaded. - if ([self.adView respondsToSelector:@selector(layoutCustomAssetsWithProperties:imageLoader:)]) { - // Create a simplified image loader for the ad view to use. - MPNativeAdRenderingImageLoader *imageLoader = [[MPNativeAdRenderingImageLoader alloc] initWithImageHandler:self.rendererImageHandler]; - [self.adView layoutCustomAssetsWithProperties:self.adapter.properties imageLoader:imageLoader]; - } - } -} - -- (void)tick:(MPTimer *)timer -{ - if (self.videoController) { - BOOL playVisible = MPViewIntersectsParentWindowWithPercent(self.videoController.playerView, self.nativeVideoAdConfig.playVisiblePercent/100.0f); - if (playVisible) { - // start new - if ([self.videoController shouldStartNewPlayer]) { - [self.videoController loadAndPlayVideo]; - } - - // resume play - if ([self.videoController shouldResumePlayer]) { - [self.videoController resume]; - } - } - - // pause video - BOOL pauseVisible = !MPViewIntersectsParentWindowWithPercent(self.videoController.playerView, self.nativeVideoAdConfig.pauseVisiblePercent/100.0f); - if (pauseVisible) { - if ([self.videoController shouldPausePlayer]) { - [self.videoController pause]; - } - } - } -} - -#pragma mark - MOPUBPlayerViewControllerDelegate - -- (void)willEnterFullscreen:(MOPUBPlayerViewController *)viewController -{ - [self enterFullscreen:[[self.adapter delegate] viewControllerForPresentingModalView]]; -} - -- (void)playerDidProgressToTime:(NSTimeInterval)playbackTime -{ - [self.adapter handleVideoHasProgressedToTime:playbackTime]; - - // Only the first impression is tracked. - if (!self.trackingImpressionFired && [self.trackingAgent shouldTrackImpressionWithCurrentPlaybackTime:playbackTime]) { - self.trackingImpressionFired = YES; - - // Fire MoPub impression tracking - [self.adapter handleVideoViewImpression]; - // Fire VAST Impression Tracking - [self.vastTracking handleVideoEvent:MPVideoEventTypeImpression - videoTimeOffset:playbackTime]; - } - [self.vastTracking handleVideoEvent:MPVideoEventTypeTimeUpdate videoTimeOffset:playbackTime]; -} - -- (void)ctaTapped:(MOPUBFullscreenPlayerViewController *)viewController -{ - // MoPub video CTA button clicked. Only the first click is tracked. The check is handled in MPNativeAd. - [self.adapter handleVideoViewClick]; - [self.vastTracking handleVideoEvent:MPVideoEventTypeClick - videoTimeOffset:self.videoController.avPlayer.currentPlaybackTime]; -} - -- (void)fullscreenPlayerWillLeaveApplication:(MOPUBFullscreenPlayerViewController *)viewController -{ - if ([self.adapter.delegate respondsToSelector:@selector(nativeAdWillLeaveApplicationFromAdapter:)]) { - [self.adapter.delegate nativeAdWillLeaveApplicationFromAdapter:self.adapter]; - } -} - -// being called from MPNativeAd -- (void)nativeAdTapped -{ - [self.vastTracking handleVideoEvent:MPVideoEventTypeClick - videoTimeOffset:self.videoController.avPlayer.currentPlaybackTime]; -} - -#pragma mark - MPNativeAdRendererImageHandlerDelegate - -- (BOOL)nativeAdViewInViewHierarchy -{ - return self.adViewInViewHierarchy; -} - -#pragma mark - Internal -- (void)enterFullscreen:(UIViewController *)fromViewController -{ - MOPUBFullscreenPlayerViewController *vc = [[MOPUBFullscreenPlayerViewController alloc] initWithVideoPlayer:self.videoController nativeAdProperties:self.adapter.properties dismissBlock:^(UIView *originalParentView) { - self.videoController.view.frame = originalParentView.bounds; - self.videoController.delegate = self; - [self.videoController willExitFullscreen]; - if ([self.adapter.delegate respondsToSelector:@selector(nativeAdDidDismissModalForAdapter:)]) { - [self.adapter.delegate nativeAdDidDismissModalForAdapter:self.adapter]; - } - [originalParentView addSubview:self.videoController.playerView]; - }]; - vc.delegate = self; - if ([self.adapter.delegate respondsToSelector:@selector(nativeAdWillPresentModalForAdapter:)]) { - [self.adapter.delegate nativeAdWillPresentModalForAdapter:self.adapter]; - } - [fromViewController presentViewController:vc animated:NO completion:nil]; -} - -- (void)initAdView -{ - if (!self.videoController) { - if ([self.renderingViewClass respondsToSelector:@selector(nibForAd)]) { - self.adView = (UIView *)[[[self.renderingViewClass nibForAd] instantiateWithOwner:nil options:nil] firstObject]; - } else { - self.adView = [[self.renderingViewClass alloc] init]; - } - } -} - -- (void)setupVideoView -{ - // If a video controller is nil or it's already been disposed, create/recreate the videoController - if ([self.adView respondsToSelector:(@selector(nativeVideoView))]) { - BOOL createdNewVideoController = NO; - self.videoConfig = [self.adapter.properties objectForKey:kVideoConfigKey]; - self.nativeVideoAdConfig = [self.adapter.properties objectForKey:kNativeAdConfigKey]; - - if (!self.videoController || self.videoController.disposed) { - createdNewVideoController = YES; - self.videoController = [[MOPUBPlayerManager sharedInstance] playerViewControllerWithVideoConfig:self.videoConfig - nativeVideoAdConfig:self.nativeVideoAdConfig]; - self.videoController.defaultActionURL = self.adapter.defaultActionURL; - self.videoController.displayMode = MOPUBPlayerDisplayModeInline; - self.videoController.delegate = self; - self.videoController.view.frame = self.adView.nativeVideoView.bounds; - [self.adView.nativeVideoView addSubview:self.videoController.view]; - [self.adView bringSubviewToFront:self.adView.nativeVideoView]; - - if (!self.autoPlayTimer) { - self.autoPlayTimer = [MPTimer timerWithTimeInterval:kAutoPlayTimerInterval target:self selector:@selector(tick:) repeats:YES]; - self.autoPlayTimer.runLoopMode = NSRunLoopCommonModes; - [self.autoPlayTimer scheduleNow]; - } - - self.trackingAgent = [[MOPUBNativeVideoImpressionAgent alloc] initWithVideoView:self.videoController.playerView - requiredVisibilityPercentage:self.nativeVideoAdConfig.impressionMinVisiblePercent/100.0f - requiredPlaybackDuration:self.nativeVideoAdConfig.impressionMinVisibleSeconds]; - } - // Lazy load vast tracking. It must be created after we know the video controller has been initialized. - // If we created a new video controller, we must ensure the vast tracking has the new view. - if (!self.vastTracking) { - self.vastTracking = [[MPVASTTracking alloc] initWithMPVideoConfig:self.videoConfig videoView:self.videoController.playerView]; - } else if (createdNewVideoController) { - [self.vastTracking handleNewVideoView:self.videoController.playerView]; - } - // Always set the videoControllers vast tracking object to be the current renderer's - self.videoController.vastTracking = self.vastTracking; - } -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.h deleted file mode 100644 index 4cc3a81fc..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// MOPUBNativeVideoAdRendererSettings.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPNativeAdRendererSettings.h" -#import "MPNativeAdRenderer.h" - -@interface MOPUBNativeVideoAdRendererSettings : NSObject - -/** - * A rendering class that must be a UIView that implements the MPNativeAdRendering protocol. - * The ad will be rendered to a view of this class type. - */ -@property (nonatomic, assign) Class renderingViewClass; - -/** - * A block that returns the size of the view given a maximum width. This needs to be set when - * used in conjunction with ad placer classes so the ad placers can correctly size the cells - * that contain the ads. - * - * viewSizeHandler is not used for manual native ad integration. You must set the - * frame of your manually integrated native ad view. - */ -@property (nonatomic, readwrite, copy) MPNativeViewSizeHandler viewSizeHandler; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.m deleted file mode 100644 index 2e4b65a29..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/NativeVideo/MOPUBNativeVideoAdRendererSettings.m +++ /dev/null @@ -1,13 +0,0 @@ -// -// MOPUBNativeVideoAdRendererSettings.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MOPUBNativeVideoAdRendererSettings.h" - -@implementation MOPUBNativeVideoAdRendererSettings - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn.png b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn.png deleted file mode 100644 index c96fa8086..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@2x.png b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@2x.png deleted file mode 100644 index b87f96b22..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@2x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@3x.png b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@3x.png deleted file mode 100644 index 42e927b2a..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@3x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX.png b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX.png deleted file mode 100644 index ca4fa2981..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@2x.png b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@2x.png deleted file mode 100644 index 85e39a31b..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@2x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@3x.png b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@3x.png deleted file mode 100644 index c6e5df439..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@3x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCountdownTimer.html b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCountdownTimer.html deleted file mode 100644 index 70a496a26..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPCountdownTimer.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - -
-
- -
-
- - diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon.png b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon.png deleted file mode 100644 index 3443a8617..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@2x.png b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@2x.png deleted file mode 100644 index e09e34bef..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@2x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@3x.png b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@3x.png deleted file mode 100644 index 22a01abd0..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@3x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn.png b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn.png deleted file mode 100644 index fe63b365e..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@2x.png b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@2x.png deleted file mode 100644 index d6443f02c..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@2x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@3x.png b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@3x.png deleted file mode 100644 index 8ccd290a0..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@3x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn.png b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn.png deleted file mode 100644 index ddaca971c..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@2x.png b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@2x.png deleted file mode 100644 index 51c911e22..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@2x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@3x.png b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@3x.png deleted file mode 100644 index 1affb6ec8..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@3x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn.png b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn.png deleted file mode 100644 index a7d52e3b0..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@2x.png b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@2x.png deleted file mode 100644 index 1860e9792..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@2x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@3x.png b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@3x.png deleted file mode 100644 index 6ec3ce688..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@3x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MRAID.bundle/mraid.js b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MRAID.bundle/mraid.js deleted file mode 100644 index 5b0d84b9b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Resources/MRAID.bundle/mraid.js +++ /dev/null @@ -1,916 +0,0 @@ -/* -Do not modify this version of the file. It will be copied over when any of the project's targets are built. -If you wish to modify mraid.js, modify the version located at mopub-sdk-common/mraid/mraid.js. -*/ -(function() { - var isIOS = (/iphone|ipad|ipod/i).test(window.navigator.userAgent.toLowerCase()); - if (isIOS) { - console = {}; - console.log = function(log) { - var iframe = document.createElement('iframe'); - iframe.setAttribute('src', 'ios-log: ' + log); - document.documentElement.appendChild(iframe); - iframe.parentNode.removeChild(iframe); - iframe = null; - }; - console.debug = console.info = console.warn = console.error = console.log; - } -}()); - - -(function() { - var mraid = window.mraid = {}; - - ////////////////////////////////////////////////////////////////////////////////////////////////// - - // Bridge interface to SDK - - var bridge = window.mraidbridge = { - nativeSDKFiredReady: false, - nativeCallQueue: [], - nativeCallInFlight: false, - lastSizeChangeProperties: null - }; - - bridge.fireChangeEvent = function(properties) { - for (var p in properties) { - if (properties.hasOwnProperty(p)) { - // Change handlers defined by MRAID below - var handler = changeHandlers[p]; - handler(properties[p]); - } - } - }; - - bridge.nativeCallComplete = function(command) { - if (this.nativeCallQueue.length === 0) { - this.nativeCallInFlight = false; - return; - } - - var nextCall = this.nativeCallQueue.pop(); - window.location = nextCall; - }; - - bridge.executeNativeCall = function(args) { - var command = args.shift(); - - if (!this.nativeSDKFiredReady) { - console.log('rejecting ' + command + ' because mraid is not ready'); - bridge.notifyErrorEvent('mraid is not ready', command); - return; - } - - var call = 'mraid://' + command; - - var key, value; - var isFirstArgument = true; - - for (var i = 0; i < args.length; i += 2) { - key = args[i]; - value = args[i + 1]; - - if (value === null) continue; - - if (isFirstArgument) { - call += '?'; - isFirstArgument = false; - } else { - call += '&'; - } - - call += encodeURIComponent(key) + '=' + encodeURIComponent(value); - } - - if (this.nativeCallInFlight) { - this.nativeCallQueue.push(call); - } else { - this.nativeCallInFlight = true; - window.location = call; - } - }; - - - bridge.setCurrentPosition = function(x, y, width, height) { - currentPosition = { - x: x, - y: y, - width: width, - height: height - }; - broadcastEvent(EVENTS.INFO, 'Set current position to ' + stringify(currentPosition)); - }; - - bridge.setDefaultPosition = function(x, y, width, height) { - defaultPosition = { - x: x, - y: y, - width: width, - height: height - }; - broadcastEvent(EVENTS.INFO, 'Set default position to ' + stringify(defaultPosition)); - }; - - bridge.setMaxSize = function(width, height) { - maxSize = { - width: width, - height: height - }; - - expandProperties.width = width; - expandProperties.height = height; - - broadcastEvent(EVENTS.INFO, 'Set max size to ' + stringify(maxSize)); - }; - - bridge.setPlacementType = function(_placementType) { - placementType = _placementType; - broadcastEvent(EVENTS.INFO, 'Set placement type to ' + stringify(placementType)); - }; - - bridge.setScreenSize = function(width, height) { - screenSize = { - width: width, - height: height - }; - broadcastEvent(EVENTS.INFO, 'Set screen size to ' + stringify(screenSize)); - }; - - bridge.setState = function(_state) { - state = _state; - broadcastEvent(EVENTS.INFO, 'Set state to ' + stringify(state)); - broadcastEvent(EVENTS.STATECHANGE, state); - }; - - bridge.setIsViewable = function(_isViewable) { - isViewable = _isViewable; - broadcastEvent(EVENTS.INFO, 'Set isViewable to ' + stringify(isViewable)); - broadcastEvent(EVENTS.VIEWABLECHANGE, isViewable); - }; - - bridge.setSupports = function(sms, tel, calendar, storePicture, inlineVideo) { - supportProperties = { - sms: sms, - tel: tel, - calendar: calendar, - storePicture: storePicture, - inlineVideo: inlineVideo - }; - }; - - bridge.notifyReadyEvent = function() { - this.nativeSDKFiredReady = true; - broadcastEvent(EVENTS.READY); - }; - - bridge.notifyErrorEvent = function(message, action) { - broadcastEvent(EVENTS.ERROR, message, action); - }; - - // Temporary aliases while we migrate to the new API - bridge.fireReadyEvent = bridge.notifyReadyEvent; - bridge.fireErrorEvent = bridge.notifyErrorEvent; - - bridge.notifySizeChangeEvent = function(width, height) { - if (this.lastSizeChangeProperties && - width == this.lastSizeChangeProperties.width && height == this.lastSizeChangeProperties.height) { - return; - } - - this.lastSizeChangeProperties = { - width: width, - height: height - }; - broadcastEvent(EVENTS.SIZECHANGE, width, height); - }; - - bridge.notifyStateChangeEvent = function() { - if (state === STATES.LOADING) { - broadcastEvent(EVENTS.INFO, 'Native SDK initialized.'); - } - - broadcastEvent(EVENTS.INFO, 'Set state to ' + stringify(state)); - broadcastEvent(EVENTS.STATECHANGE, state); - }; - - bridge.notifyViewableChangeEvent = function() { - broadcastEvent(EVENTS.INFO, 'Set isViewable to ' + stringify(isViewable)); - broadcastEvent(EVENTS.VIEWABLECHANGE, isViewable); - }; - - - // Constants. //////////////////////////////////////////////////////////////////////////////////// - - var VERSION = mraid.VERSION = '2.0'; - - var STATES = mraid.STATES = { - LOADING: 'loading', - DEFAULT: 'default', - EXPANDED: 'expanded', - HIDDEN: 'hidden', - RESIZED: 'resized' - }; - - var EVENTS = mraid.EVENTS = { - ERROR: 'error', - INFO: 'info', - READY: 'ready', - STATECHANGE: 'stateChange', - VIEWABLECHANGE: 'viewableChange', - SIZECHANGE: 'sizeChange' - }; - - var PLACEMENT_TYPES = mraid.PLACEMENT_TYPES = { - UNKNOWN: 'unknown', - INLINE: 'inline', - INTERSTITIAL: 'interstitial' - }; - - // External MRAID state: may be directly or indirectly modified by the ad JS. //////////////////// - - // Properties which define the behavior of an expandable ad. - var expandProperties = { - width: false, - height: false, - useCustomClose: false, - isModal: true - }; - - var resizeProperties = { - width: false, - height: false, - offsetX: false, - offsetY: false, - customClosePosition: 'top-right', - allowOffscreen: true - }; - - var orientationProperties = { - allowOrientationChange: true, - forceOrientation: "none" - }; - - var supportProperties = { - sms: false, - tel: false, - calendar: false, - storePicture: false, - inlineVideo: false - }; - - // default is undefined so that notifySizeChangeEvent can track changes - var lastSizeChangeProperties; - - var maxSize = {}; - - var currentPosition = {}; - - var defaultPosition = {}; - - var screenSize = {}; - - var hasSetCustomClose = false; - - var listeners = {}; - - // Internal MRAID state. Modified by the native SDK. ///////////////////////////////////////////// - - var state = STATES.LOADING; - - var isViewable = false; - - var placementType = PLACEMENT_TYPES.UNKNOWN; - - var hostSDKVersion = { - 'major': 0, - 'minor': 0, - 'patch': 0 - }; - - ////////////////////////////////////////////////////////////////////////////////////////////////// - - var EventListeners = function(event) { - this.event = event; - this.count = 0; - var listeners = {}; - - this.add = function(func) { - var id = String(func); - if (!listeners[id]) { - listeners[id] = func; - this.count++; - } - }; - - this.remove = function(func) { - var id = String(func); - if (listeners[id]) { - listeners[id] = null; - delete listeners[id]; - this.count--; - return true; - } else { - return false; - } - }; - - this.removeAll = function() { - for (var id in listeners) { - if (listeners.hasOwnProperty(id)) this.remove(listeners[id]); - } - }; - - this.broadcast = function(args) { - for (var id in listeners) { - if (listeners.hasOwnProperty(id)) listeners[id].apply(mraid, args); - } - }; - - this.toString = function() { - var out = [event, ':']; - for (var id in listeners) { - if (listeners.hasOwnProperty(id)) out.push('|', id, '|'); - } - return out.join(''); - }; - }; - - var broadcastEvent = function() { - var args = new Array(arguments.length); - var l = arguments.length; - for (var i = 0; i < l; i++) args[i] = arguments[i]; - var event = args.shift(); - if (listeners[event]) listeners[event].broadcast(args); - }; - - var contains = function(value, array) { - for (var i in array) { - if (array[i] === value) return true; - } - return false; - }; - - var clone = function(obj) { - if (obj === null) return null; - var f = function() {}; - f.prototype = obj; - return new f(); - }; - - var stringify = function(obj) { - if (typeof obj === 'object') { - var out = []; - if (obj.push) { - // Array. - for (var p in obj) out.push(obj[p]); - return '[' + out.join(',') + ']'; - } else { - // Other object. - for (var p in obj) out.push("'" + p + "': " + obj[p]); - return '{' + out.join(',') + '}'; - } - } else return String(obj); - }; - - var trim = function(str) { - return str.replace(/^\s+|\s+$/g, ''); - }; - - // Functions that will be invoked by the native SDK whenever a "change" event occurs. - var changeHandlers = { - state: function(val) { - if (state === STATES.LOADING) { - broadcastEvent(EVENTS.INFO, 'Native SDK initialized.'); - } - state = val; - broadcastEvent(EVENTS.INFO, 'Set state to ' + stringify(val)); - broadcastEvent(EVENTS.STATECHANGE, state); - }, - - viewable: function(val) { - isViewable = val; - broadcastEvent(EVENTS.INFO, 'Set isViewable to ' + stringify(val)); - broadcastEvent(EVENTS.VIEWABLECHANGE, isViewable); - }, - - placementType: function(val) { - broadcastEvent(EVENTS.INFO, 'Set placementType to ' + stringify(val)); - placementType = val; - }, - - sizeChange: function(val) { - broadcastEvent(EVENTS.INFO, 'Set screenSize to ' + stringify(val)); - for (var key in val) { - if (val.hasOwnProperty(key)) screenSize[key] = val[key]; - } - }, - - supports: function(val) { - broadcastEvent(EVENTS.INFO, 'Set supports to ' + stringify(val)); - supportProperties = val; - }, - - hostSDKVersion: function(val) { - // val is expected to be formatted like 'X.Y.Z[-+]identifier'. - var versions = val.split('.').map(function(version) { - return parseInt(version, 10); - }).filter(function(version) { - return version >= 0; - }); - - if (versions.length >= 3) { - hostSDKVersion['major'] = parseInt(versions[0], 10); - hostSDKVersion['minor'] = parseInt(versions[1], 10); - hostSDKVersion['patch'] = parseInt(versions[2], 10); - broadcastEvent(EVENTS.INFO, 'Set hostSDKVersion to ' + stringify(hostSDKVersion)); - } - } - }; - - var validate = function(obj, validators, action, merge) { - if (!merge) { - // Check to see if any required properties are missing. - if (obj === null) { - broadcastEvent(EVENTS.ERROR, 'Required object not provided.', action); - return false; - } else { - for (var i in validators) { - if (validators.hasOwnProperty(i) && obj[i] === undefined) { - broadcastEvent(EVENTS.ERROR, 'Object is missing required property: ' + i, action); - return false; - } - } - } - } - - for (var prop in obj) { - var validator = validators[prop]; - var value = obj[prop]; - if (validator && !validator(value)) { - // Failed validation. - broadcastEvent(EVENTS.ERROR, 'Value of property ' + prop + ' is invalid: ' + value, action); - return false; - } - } - return true; - }; - - var expandPropertyValidators = { - useCustomClose: function(v) { return (typeof v === 'boolean'); }, - }; - - ////////////////////////////////////////////////////////////////////////////////////////////////// - - mraid.addEventListener = function(event, listener) { - if (!event || !listener) { - broadcastEvent(EVENTS.ERROR, 'Both event and listener are required.', 'addEventListener'); - } else if (!contains(event, EVENTS)) { - broadcastEvent(EVENTS.ERROR, 'Unknown MRAID event: ' + event, 'addEventListener'); - } else { - if (!listeners[event]) { - listeners[event] = new EventListeners(event); - } - listeners[event].add(listener); - } - }; - - mraid.close = function() { - if (state === STATES.HIDDEN) { - broadcastEvent(EVENTS.ERROR, 'Ad cannot be closed when it is already hidden.', - 'close'); - } else bridge.executeNativeCall(['close']); - }; - - mraid.expand = function(URL) { - if (!(this.getState() === STATES.DEFAULT || this.getState() === STATES.RESIZED)) { - broadcastEvent(EVENTS.ERROR, 'Ad can only be expanded from the default or resized state.', 'expand'); - } else { - var args = ['expand', - 'shouldUseCustomClose', expandProperties.useCustomClose - ]; - - if (URL) { - args = args.concat(['url', URL]); - } - - bridge.executeNativeCall(args); - } - }; - - mraid.getExpandProperties = function() { - var properties = { - width: expandProperties.width, - height: expandProperties.height, - useCustomClose: expandProperties.useCustomClose, - isModal: expandProperties.isModal - }; - return properties; - }; - - - mraid.getCurrentPosition = function() { - return { - x: currentPosition.x, - y: currentPosition.y, - width: currentPosition.width, - height: currentPosition.height - }; - }; - - mraid.getDefaultPosition = function() { - return { - x: defaultPosition.x, - y: defaultPosition.y, - width: defaultPosition.width, - height: defaultPosition.height - }; - }; - - mraid.getMaxSize = function() { - return { - width: maxSize.width, - height: maxSize.height - }; - }; - - mraid.getPlacementType = function() { - return placementType; - }; - - mraid.getScreenSize = function() { - return { - width: screenSize.width, - height: screenSize.height - }; - }; - - mraid.getState = function() { - return state; - }; - - mraid.isViewable = function() { - return isViewable; - }; - - mraid.getVersion = function() { - return mraid.VERSION; - }; - - mraid.open = function(URL) { - if (!URL) broadcastEvent(EVENTS.ERROR, 'URL is required.', 'open'); - else bridge.executeNativeCall(['open', 'url', URL]); - }; - - mraid.removeEventListener = function(event, listener) { - if (!event) { - broadcastEvent(EVENTS.ERROR, 'Event is required.', 'removeEventListener'); - return; - } - - if (listener) { - // If we have a valid event, we'll try to remove the listener from it. - var success = false; - if (listeners[event]) { - success = listeners[event].remove(listener); - } - - // If we didn't have a valid event or couldn't remove the listener from the event, broadcast an error and return early. - if (!success) { - broadcastEvent(EVENTS.ERROR, 'Listener not currently registered for event.', 'removeEventListener'); - return; - } - - } else if (!listener && listeners[event]) { - listeners[event].removeAll(); - } - - if (listeners[event] && listeners[event].count === 0) { - listeners[event] = null; - delete listeners[event]; - } - }; - - mraid.setExpandProperties = function(properties) { - if (validate(properties, expandPropertyValidators, 'setExpandProperties', true)) { - if (properties.hasOwnProperty('useCustomClose')) { - expandProperties.useCustomClose = properties.useCustomClose; - } - } - }; - - mraid.useCustomClose = function(shouldUseCustomClose) { - expandProperties.useCustomClose = shouldUseCustomClose; - hasSetCustomClose = true; - bridge.executeNativeCall(['usecustomclose', 'shouldUseCustomClose', shouldUseCustomClose]); - }; - - // MRAID 2.0 APIs //////////////////////////////////////////////////////////////////////////////// - - mraid.createCalendarEvent = function(parameters) { - CalendarEventParser.initialize(parameters); - if (CalendarEventParser.parse()) { - bridge.executeNativeCall(CalendarEventParser.arguments); - } else { - broadcastEvent(EVENTS.ERROR, CalendarEventParser.errors[0], 'createCalendarEvent'); - } - }; - - mraid.supports = function(feature) { - return supportProperties[feature]; - }; - - mraid.playVideo = function(uri) { - if (!mraid.isViewable()) { - broadcastEvent(EVENTS.ERROR, 'playVideo cannot be called until the ad is viewable', 'playVideo'); - return; - } - - if (!uri) { - broadcastEvent(EVENTS.ERROR, 'playVideo must be called with a valid URI', 'playVideo'); - } else { - bridge.executeNativeCall(['playVideo', 'uri', uri]); - } - }; - - mraid.storePicture = function(uri) { - if (!mraid.isViewable()) { - broadcastEvent(EVENTS.ERROR, 'storePicture cannot be called until the ad is viewable', 'storePicture'); - return; - } - - if (!uri) { - broadcastEvent(EVENTS.ERROR, 'storePicture must be called with a valid URI', 'storePicture'); - } else { - bridge.executeNativeCall(['storePicture', 'uri', uri]); - } - }; - - - var resizePropertyValidators = { - width: function(v) { - return !isNaN(v) && v > 0; - }, - height: function(v) { - return !isNaN(v) && v > 0; - }, - offsetX: function(v) { - return !isNaN(v); - }, - offsetY: function(v) { - return !isNaN(v); - }, - customClosePosition: function(v) { - return (typeof v === 'string' && - ['top-right', 'bottom-right', 'top-left', 'bottom-left', 'center', 'top-center', 'bottom-center'].indexOf(v) > -1); - }, - allowOffscreen: function(v) { - return (typeof v === 'boolean'); - } - }; - - mraid.setOrientationProperties = function(properties) { - - if (properties.hasOwnProperty('allowOrientationChange')) { - orientationProperties.allowOrientationChange = properties.allowOrientationChange; - } - - if (properties.hasOwnProperty('forceOrientation')) { - orientationProperties.forceOrientation = properties.forceOrientation; - } - - var args = ['setOrientationProperties', - 'allowOrientationChange', orientationProperties.allowOrientationChange, - 'forceOrientation', orientationProperties.forceOrientation - ]; - bridge.executeNativeCall(args); - }; - - mraid.getOrientationProperties = function() { - return { - allowOrientationChange: orientationProperties.allowOrientationChange, - forceOrientation: orientationProperties.forceOrientation - }; - }; - - mraid.resize = function() { - if (!(this.getState() === STATES.DEFAULT || this.getState() === STATES.RESIZED)) { - broadcastEvent(EVENTS.ERROR, 'Ad can only be resized from the default or resized state.', 'resize'); - } else if (!resizeProperties.width || !resizeProperties.height) { - broadcastEvent(EVENTS.ERROR, 'Must set resize properties before calling resize()', 'resize'); - } else { - var args = ['resize', - 'width', resizeProperties.width, - 'height', resizeProperties.height, - 'offsetX', resizeProperties.offsetX || 0, - 'offsetY', resizeProperties.offsetY || 0, - 'customClosePosition', resizeProperties.customClosePosition, - 'allowOffscreen', !!resizeProperties.allowOffscreen - ]; - - bridge.executeNativeCall(args); - } - }; - - mraid.getResizeProperties = function() { - var properties = { - width: resizeProperties.width, - height: resizeProperties.height, - offsetX: resizeProperties.offsetX, - offsetY: resizeProperties.offsetY, - customClosePosition: resizeProperties.customClosePosition, - allowOffscreen: resizeProperties.allowOffscreen - }; - return properties; - }; - - mraid.setResizeProperties = function(properties) { - if (validate(properties, resizePropertyValidators, 'setResizeProperties', true)) { - - var desiredProperties = ['width', 'height', 'offsetX', 'offsetY', 'customClosePosition', 'allowOffscreen']; - - var length = desiredProperties.length; - - for (var i = 0; i < length; i++) { - var propname = desiredProperties[i]; - if (properties.hasOwnProperty(propname)) { - resizeProperties[propname] = properties[propname]; - } - } - } - }; - - // Determining SDK version /////////////////////////////////////////////////////////////////////// - - mraid.getHostSDKVersion = function() { - return hostSDKVersion; - } - - // Calendar helpers ////////////////////////////////////////////////////////////////////////////// - - var CalendarEventParser = { - initialize: function(parameters) { - this.parameters = parameters; - this.errors = []; - this.arguments = ['createCalendarEvent']; - }, - - parse: function() { - if (!this.parameters) { - this.errors.push('The object passed to createCalendarEvent cannot be null.'); - } else { - this.parseDescription(); - this.parseLocation(); - this.parseSummary(); - this.parseStartAndEndDates(); - this.parseReminder(); - this.parseRecurrence(); - this.parseTransparency(); - } - - var errorCount = this.errors.length; - if (errorCount) { - this.arguments.length = 0; - } - - return (errorCount === 0); - }, - - parseDescription: function() { - this._processStringValue('description'); - }, - - parseLocation: function() { - this._processStringValue('location'); - }, - - parseSummary: function() { - this._processStringValue('summary'); - }, - - parseStartAndEndDates: function() { - this._processDateValue('start'); - this._processDateValue('end'); - }, - - parseReminder: function() { - var reminder = this._getParameter('reminder'); - if (!reminder) { - return; - } - - if (reminder < 0) { - this.arguments.push('relativeReminder'); - this.arguments.push(parseInt(reminder) / 1000); - } else { - this.arguments.push('absoluteReminder'); - this.arguments.push(reminder); - } - }, - - parseRecurrence: function() { - var recurrenceDict = this._getParameter('recurrence'); - if (!recurrenceDict) { - return; - } - - this.parseRecurrenceInterval(recurrenceDict); - this.parseRecurrenceFrequency(recurrenceDict); - this.parseRecurrenceEndDate(recurrenceDict); - this.parseRecurrenceArrayValue(recurrenceDict, 'daysInWeek'); - this.parseRecurrenceArrayValue(recurrenceDict, 'daysInMonth'); - this.parseRecurrenceArrayValue(recurrenceDict, 'daysInYear'); - this.parseRecurrenceArrayValue(recurrenceDict, 'monthsInYear'); - }, - - parseTransparency: function() { - var validValues = ['opaque', 'transparent']; - - if (this.parameters.hasOwnProperty('transparency')) { - var transparency = this.parameters.transparency; - if (contains(transparency, validValues)) { - this.arguments.push('transparency'); - this.arguments.push(transparency); - } else { - this.errors.push('transparency must be opaque or transparent'); - } - } - }, - - parseRecurrenceArrayValue: function(recurrenceDict, kind) { - if (recurrenceDict.hasOwnProperty(kind)) { - var array = recurrenceDict[kind]; - if (!array || !(array instanceof Array)) { - this.errors.push(kind + ' must be an array.'); - } else { - var arrayStr = array.join(','); - this.arguments.push(kind); - this.arguments.push(arrayStr); - } - } - }, - - parseRecurrenceInterval: function(recurrenceDict) { - if (recurrenceDict.hasOwnProperty('interval')) { - var interval = recurrenceDict.interval; - if (!interval) { - this.errors.push('Recurrence interval cannot be null.'); - } else { - this.arguments.push('interval'); - this.arguments.push(interval); - } - } else { - // If a recurrence rule was specified without an interval, use a default value of 1. - this.arguments.push('interval'); - this.arguments.push(1); - } - }, - - parseRecurrenceFrequency: function(recurrenceDict) { - if (recurrenceDict.hasOwnProperty('frequency')) { - var frequency = recurrenceDict.frequency; - var validFrequencies = ['daily', 'weekly', 'monthly', 'yearly']; - if (contains(frequency, validFrequencies)) { - this.arguments.push('frequency'); - this.arguments.push(frequency); - } else { - this.errors.push('Recurrence frequency must be one of: "daily", "weekly", "monthly", "yearly".'); - } - } - }, - - parseRecurrenceEndDate: function(recurrenceDict) { - var expires = recurrenceDict.expires; - - if (!expires) { - return; - } - - this.arguments.push('expires'); - this.arguments.push(expires); - }, - - _getParameter: function(key) { - if (this.parameters.hasOwnProperty(key)) { - return this.parameters[key]; - } - - return null; - }, - - _processStringValue: function(kind) { - if (this.parameters.hasOwnProperty(kind)) { - var value = this.parameters[kind]; - this.arguments.push(kind); - this.arguments.push(value); - } - }, - - _processDateValue: function(kind) { - if (this.parameters.hasOwnProperty(kind)) { - var dateString = this._getParameter(kind); - this.arguments.push(kind); - this.arguments.push(dateString); - } - } - }; -}()); \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.h deleted file mode 100644 index bdc90dc51..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MPMoPubRewardedPlayableCustomEvent.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideoCustomEvent.h" -#import "MPPrivateRewardedVideoCustomEventDelegate.h" - -@interface MPMoPubRewardedPlayableCustomEvent : MPRewardedVideoCustomEvent -@property (nonatomic, readonly) NSTimeInterval countdownDuration; - -@property (nonatomic, weak) id delegate; -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.m deleted file mode 100644 index e35a29549..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedPlayableCustomEvent.m +++ /dev/null @@ -1,173 +0,0 @@ -// -// MPMoPubRewardedPlayableCustomEvent.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMoPubRewardedPlayableCustomEvent.h" -#import "MPMRAIDInterstitialViewController.h" -#import "MPAdConfiguration.h" -#import "MPLogging.h" -#import "MPRewardedVideoError.h" -#import "MPCountdownTimerView.h" - -const NSTimeInterval kDefaultCountdownTimerIntervalInSeconds = 30; - -@interface MPMoPubRewardedPlayableCustomEvent() -@property (nonatomic, assign) BOOL adAvailable; -@property (nonatomic, strong) MPMRAIDInterstitialViewController *interstitial; -@property (nonatomic, strong) MPCountdownTimerView *timerView; -@property (nonatomic, assign) BOOL userRewarded; -@end - -@implementation MPMoPubRewardedPlayableCustomEvent - -- (void)dealloc { - [_timerView stopAndSignalCompletion:NO]; -} - -// Lazy initialization property for the MRAID interstitial. -- (MPMRAIDInterstitialViewController *)interstitial { - if (_interstitial == nil) { - _interstitial = [[MPMRAIDInterstitialViewController alloc] initWithAdConfiguration:self.delegate.configuration]; - } - - return _interstitial; -} - -// Retrieves a valid countdown duration to use for the timer. In the event that `rewardedPlayableDuration` -// from `MPAdConfiguration` is less than zero, the default value `kDefaultCountdownTimerIntervalInSeconds` -// will be used instead. -- (NSTimeInterval)countdownDuration { - NSTimeInterval duration = self.delegate.configuration.rewardedPlayableDuration; - if (duration <= 0) { - duration = kDefaultCountdownTimerIntervalInSeconds; - } - - return duration; -} - -// Shows the native close button and deallocates the countdown timer since it will no -// longer be used. -- (void)showCloseButton { - [self.interstitial setCloseButtonStyle:MPInterstitialCloseButtonStyleAlwaysVisible]; - [self.timerView removeFromSuperview]; - self.timerView = nil; -} - -// Only reward the user once; either by countdown timer elapsing or rewarding on click -// (if configured). -- (void)rewardUserWithConfiguration:(MPAdConfiguration *)configuration timerHasElapsed:(BOOL)hasElasped { - if (!self.userRewarded && (hasElasped || configuration.rewardedPlayableShouldRewardOnClick)) { - MPLogInfo(@"MoPub rewarded playable user rewarded."); - - [self.delegate rewardedVideoShouldRewardUserForCustomEvent:self reward:configuration.selectedReward]; - self.userRewarded = YES; - } -} - -#pragma mark - MPRewardedVideoCustomEvent - -@dynamic delegate; - -- (void)requestRewardedVideoWithCustomEventInfo:(NSDictionary *)info { - MPLogInfo(@"Loading MoPub rewarded playable"); - self.interstitial.delegate = self; - - [self.interstitial setCloseButtonStyle:MPInterstitialCloseButtonStyleAlwaysHidden]; - [self.interstitial startLoading]; -} - -- (BOOL)hasAdAvailable { - return self.adAvailable; -} - -- (void)handleAdPlayedForCustomEventNetwork { - // no-op -} - -- (void)handleCustomEventInvalidated { - // no-op -} - -- (void)presentRewardedVideoFromViewController:(UIViewController *)viewController { - if (self.hasAdAvailable) { - // Add the countdown timer to the interstitial and start the timer. - self.timerView = [[MPCountdownTimerView alloc] initWithFrame:viewController.view.bounds duration:self.countdownDuration]; - [self.interstitial.view addSubview:self.timerView]; - - __weak __typeof__(self) weakSelf = self; - [self.timerView startWithTimerCompletion:^(BOOL hasElapsed) { - [weakSelf rewardUserWithConfiguration:self.configuration timerHasElapsed:hasElapsed]; - [weakSelf showCloseButton]; - }]; - - [self.interstitial presentInterstitialFromViewController:viewController]; - } - else { - MPLogInfo(@"Failed to show MoPub rewarded playable"); - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorNoAdsAvailable userInfo:nil]; - [self.delegate rewardedVideoDidFailToPlayForCustomEvent:self error:error]; - [self showCloseButton]; - } -} - -#pragma mark - MPInterstitialViewControllerDelegate - -- (void)interstitialDidLoadAd:(MPInterstitialViewController *)interstitial { - MPLogInfo(@"MoPub rewarded playable did load"); - self.adAvailable = YES; - [self.delegate rewardedVideoDidLoadAdForCustomEvent:self]; -} - -- (void)interstitialDidAppear:(MPInterstitialViewController *)interstitial { - MPLogInfo(@"MoPub rewarded playable did appear"); - [self.delegate rewardedVideoDidAppearForCustomEvent:self]; -} - -- (void)interstitialWillAppear:(MPInterstitialViewController *)interstitial { - MPLogInfo(@"MoPub rewarded playable will appear"); - [self.delegate rewardedVideoWillAppearForCustomEvent:self]; -} - -- (void)interstitialDidFailToLoadAd:(MPInterstitialViewController *)interstitial { - MPLogInfo(@"MoPub rewarded playable failed to load"); - self.adAvailable = NO; - [self.delegate rewardedVideoDidFailToLoadAdForCustomEvent:self error:nil]; -} - -- (void)interstitialWillDisappear:(MPInterstitialViewController *)interstitial { - [self.delegate rewardedVideoWillDisappearForCustomEvent:self]; -} - -- (void)interstitialDidDisappear:(MPInterstitialViewController *)interstitial { - self.adAvailable = NO; - [self.timerView stopAndSignalCompletion:NO]; - [self.delegate rewardedVideoDidDisappearForCustomEvent:self]; - - // Get rid of the interstitial view controller when done with it so we don't hold on longer than needed - self.interstitial = nil; -} - -- (void)interstitialDidReceiveTapEvent:(MPInterstitialViewController *)interstitial { - [self rewardUserWithConfiguration:self.configuration timerHasElapsed:NO]; - [self.delegate rewardedVideoDidReceiveTapEventForCustomEvent:self]; -} - -- (void)interstitialWillLeaveApplication:(MPInterstitialViewController *)interstitial { - [self.delegate rewardedVideoWillLeaveApplicationForCustomEvent:self]; -} - -#pragma mark - MPPrivateRewardedVideoCustomEventDelegate - -- (NSString *)adUnitId { - return [self.delegate adUnitId]; -} - -- (MPAdConfiguration *)configuration { - return [self.delegate configuration]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.h deleted file mode 100644 index 469932adb..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPMoPubRewardedVideoCustomEvent.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -// Copyright (c) 2015 MoPub. All rights reserved. -// - -#import "MPRewardedVideoCustomEvent.h" -#import "MPPrivateRewardedVideoCustomEventDelegate.h" - -@interface MPMoPubRewardedVideoCustomEvent : MPRewardedVideoCustomEvent - -@property (nonatomic, weak) id delegate; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.m deleted file mode 100644 index f7841397f..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPMoPubRewardedVideoCustomEvent.m +++ /dev/null @@ -1,134 +0,0 @@ -// -// MPMoPubRewardedVideoCustomEvent.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPMoPubRewardedVideoCustomEvent.h" -#import "MPMRAIDInterstitialViewController.h" -#import "MPLogging.h" -#import "MPRewardedVideoReward.h" -#import "MPAdConfiguration.h" -#import "MPRewardedVideoAdapter.h" -#import "MPRewardedVideoReward.h" -#import "MPRewardedVideoError.h" - -@interface MPMoPubRewardedVideoCustomEvent() - -@property (nonatomic) MPMRAIDInterstitialViewController *interstitial; -@property (nonatomic) BOOL adAvailable; - -@end - -@implementation MPMoPubRewardedVideoCustomEvent - -@dynamic delegate; - -- (void)requestRewardedVideoWithCustomEventInfo:(NSDictionary *)info -{ - MPLogInfo(@"Loading MoPub rewarded video"); - self.interstitial = [[MPMRAIDInterstitialViewController alloc] initWithAdConfiguration:[self.delegate configuration]]; - self.interstitial.delegate = self; - - [self.interstitial setCloseButtonStyle:MPInterstitialCloseButtonStyleAlwaysHidden]; - [self.interstitial startLoading]; -} - -- (BOOL)hasAdAvailable -{ - return self.adAvailable; -} - -- (void)handleAdPlayedForCustomEventNetwork -{ - // no-op -} - -- (void)handleCustomEventInvalidated -{ - // no-op -} - -- (void)presentRewardedVideoFromViewController:(UIViewController *)viewController -{ - if ([self hasAdAvailable]) { - [self.interstitial presentInterstitialFromViewController:viewController]; - } else { - MPLogInfo(@"Failed to show MoPub rewarded video"); - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorNoAdsAvailable userInfo:nil]; - [self.delegate rewardedVideoDidFailToPlayForCustomEvent:self error:error]; - } -} - -#pragma mark - MPMRAIDInterstitialViewControllerDelegate - -- (void)interstitialDidLoadAd:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub rewarded video did load"); - self.adAvailable = YES; - [self.delegate rewardedVideoDidLoadAdForCustomEvent:self]; -} - -- (void)interstitialDidAppear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub rewarded video did appear"); - [self.delegate rewardedVideoDidAppearForCustomEvent:self]; -} - -- (void)interstitialWillAppear:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub rewarded video will appear"); - [self.delegate rewardedVideoWillAppearForCustomEvent:self]; -} - -- (void)interstitialDidFailToLoadAd:(MPInterstitialViewController *)interstitial -{ - MPLogInfo(@"MoPub rewarded video failed to load"); - self.adAvailable = NO; - [self.delegate rewardedVideoDidFailToLoadAdForCustomEvent:self error:nil]; -} - -- (void)interstitialWillDisappear:(MPInterstitialViewController *)interstitial -{ - [self.delegate rewardedVideoWillDisappearForCustomEvent:self]; -} - -- (void)interstitialDidDisappear:(MPInterstitialViewController *)interstitial -{ - self.adAvailable = NO; - [self.delegate rewardedVideoDidDisappearForCustomEvent:self]; - - // Get rid of the interstitial view controller when done with it so we don't hold on longer than needed - self.interstitial = nil; -} - -- (void)interstitialDidReceiveTapEvent:(MPInterstitialViewController *)interstitial -{ - [self.delegate rewardedVideoDidReceiveTapEventForCustomEvent:self]; -} - -- (void)interstitialWillLeaveApplication:(MPInterstitialViewController *)interstitial -{ - [self.delegate rewardedVideoWillLeaveApplicationForCustomEvent:self]; -} - -- (void)interstitialRewardedVideoEnded -{ - MPLogInfo(@"MoPub rewarded video finished playing."); - [self.delegate rewardedVideoShouldRewardUserForCustomEvent:self reward:[self configuration].selectedReward]; -} - -#pragma mark - MPPrivateRewardedVideoCustomEventDelegate -- (NSString *)adUnitId -{ - return [self.delegate adUnitId]; -} - -- (MPAdConfiguration *)configuration -{ - return [self.delegate configuration]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPPrivateRewardedVideoCustomEventDelegate.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPPrivateRewardedVideoCustomEventDelegate.h deleted file mode 100644 index cb2a9253e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPPrivateRewardedVideoCustomEventDelegate.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPPrivateRewardedVideoCustomEventDelegate.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideoCustomEvent.h" - -@class MPAdConfiguration; -@class CLLocation; - -@protocol MPPrivateRewardedVideoCustomEventDelegate - -- (NSString *)adUnitId; -- (MPAdConfiguration *)configuration; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideo+Internal.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideo+Internal.h deleted file mode 100644 index c38ae4515..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideo+Internal.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// MPRewardedVideo+Internal.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideo.h" - -@interface MPRewardedVideo (Internal) - -+ (MPRewardedVideo *)sharedInstance; -- (void)startRewardedVideoConnectionWithUrl:(NSURL *)url; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.h deleted file mode 100644 index ca6097c3d..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.h +++ /dev/null @@ -1,94 +0,0 @@ -// -// MPRewardedVideoAdManager.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPAdTargeting.h" - -@class MPRewardedVideoReward; -@protocol MPRewardedVideoAdManagerDelegate; - -/** - * `MPRewardedVideoAdManager` represents a rewarded video for a single ad unit ID. This is the object that - * `MPRewardedVideo` uses to load and present the ad. - */ -@interface MPRewardedVideoAdManager : NSObject - -@property (nonatomic, weak) id delegate; -@property (nonatomic, readonly) NSString *adUnitID; -@property (nonatomic, strong) NSArray *mediationSettings; -@property (nonatomic, copy) NSString *customerId; -@property (nonatomic, strong) MPAdTargeting *targeting; - -/** - * An array of rewards that are available for the rewarded ad that can be selected when presenting the ad. - */ -@property (nonatomic, readonly) NSArray *availableRewards; - -/** - * The currently selected reward that will be awarded to the user upon completion of the ad. By default, - * this corresponds to the first reward in `availableRewards`. - */ -@property (nonatomic, readonly) MPRewardedVideoReward *selectedReward; - -- (instancetype)initWithAdUnitID:(NSString *)adUnitID delegate:(id)delegate; - -/** - * Returns the custom event class type. - */ -- (Class)customEventClass; - -/** - * Loads a rewarded video ad with the ad manager's ad unit ID. - * - * @param customerId The user's id within the app. - * @param targeting Optional ad targeting parameters. - * - * However, if an ad has been played for the last time a load was issued and load is called again, the method will request a new ad. - */ -- (void)loadRewardedVideoAdWithCustomerId:(NSString *)customerId targeting:(MPAdTargeting *)targeting; - -/** - * Tells the caller whether the underlying ad network currently has an ad available for presentation. - */ -- (BOOL)hasAdAvailable; - -/** - * Plays a rewarded video ad. - * - * @param viewController Presents the rewarded video ad from viewController. - * @param reward A reward chosen from `availableRewards` to award the user upon completion. - * This value should not be `nil`. If the reward that is passed in did not come from `availableRewards`, - * this method will not present the rewarded ad and invoke `rewardedVideoDidFailToPlayForAdManager:error:`. - * @param customData Optional custom data string to include in the server-to-server callback. If a server-to-server callback - * is not used, or if the ad unit is configured for local rewarding, this value will not be persisted. - */ -- (void)presentRewardedVideoAdFromViewController:(UIViewController *)viewController withReward:(MPRewardedVideoReward *)reward customData:(NSString *)customData; - -/** - * This method is called when another ad unit has played a rewarded video from the same network this ad manager's custom event - * represents. - */ -- (void)handleAdPlayedForCustomEventNetwork; - -@end - -@protocol MPRewardedVideoAdManagerDelegate - -- (void)rewardedVideoDidLoadForAdManager:(MPRewardedVideoAdManager *)manager; -- (void)rewardedVideoDidFailToLoadForAdManager:(MPRewardedVideoAdManager *)manager error:(NSError *)error; -- (void)rewardedVideoDidExpireForAdManager:(MPRewardedVideoAdManager *)manager; -- (void)rewardedVideoDidFailToPlayForAdManager:(MPRewardedVideoAdManager *)manager error:(NSError *)error; -- (void)rewardedVideoWillAppearForAdManager:(MPRewardedVideoAdManager *)manager; -- (void)rewardedVideoDidAppearForAdManager:(MPRewardedVideoAdManager *)manager; -- (void)rewardedVideoWillDisappearForAdManager:(MPRewardedVideoAdManager *)manager; -- (void)rewardedVideoDidDisappearForAdManager:(MPRewardedVideoAdManager *)manager; -- (void)rewardedVideoDidReceiveTapEventForAdManager:(MPRewardedVideoAdManager *)manager; -- (void)rewardedVideoWillLeaveApplicationForAdManager:(MPRewardedVideoAdManager *)manager; -- (void)rewardedVideoShouldRewardUserForAdManager:(MPRewardedVideoAdManager *)manager reward:(MPRewardedVideoReward *)reward; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.m deleted file mode 100644 index 1d2b9cfe5..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdManager.m +++ /dev/null @@ -1,356 +0,0 @@ -// -// MPRewardedVideoAdManager.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideoAdManager.h" - -#import "MPAdServerCommunicator.h" -#import "MPAdServerURLBuilder.h" -#import "MPRewardedVideoAdapter.h" -#import "MPCoreInstanceProvider.h" -#import "MPRewardedVideoError.h" -#import "MPLogging.h" -#import "MoPub.h" -#import "NSMutableArray+MPAdditions.h" -#import "NSDate+MPAdditions.h" -#import "NSError+MPAdditions.h" - -@interface MPRewardedVideoAdManager () - -@property (nonatomic, strong) MPRewardedVideoAdapter *adapter; -@property (nonatomic, strong) MPAdServerCommunicator *communicator; -@property (nonatomic, strong) MPAdConfiguration *configuration; -@property (nonatomic, strong) NSMutableArray *remainingConfigurations; -@property (nonatomic, assign) BOOL loading; -@property (nonatomic, assign) BOOL playedAd; -@property (nonatomic, assign) BOOL ready; -@property (nonatomic, assign) NSTimeInterval adapterLoadStartTimestamp; - -@end - -@implementation MPRewardedVideoAdManager - -- (instancetype)initWithAdUnitID:(NSString *)adUnitID delegate:(id)delegate -{ - if (self = [super init]) { - _adUnitID = [adUnitID copy]; - _communicator = [[MPAdServerCommunicator alloc] initWithDelegate:self]; - _delegate = delegate; - } - - return self; -} - -- (void)dealloc -{ - [_communicator cancel]; -} - -- (NSArray *)availableRewards -{ - return self.configuration.availableRewards; -} - -- (MPRewardedVideoReward *)selectedReward -{ - return self.configuration.selectedReward; -} - -- (Class)customEventClass -{ - return self.configuration.customEventClass; -} - -- (BOOL)hasAdAvailable -{ - //An Ad is not ready or has expired. - if (!self.ready) { - return NO; - } - - // If we've already played an ad, return NO since we allow one play per load. - if (self.playedAd) { - return NO; - } - return [self.adapter hasAdAvailable]; -} - -- (void)loadRewardedVideoAdWithCustomerId:(NSString *)customerId targeting:(MPAdTargeting *)targeting -{ - // We will just tell the delegate that we have loaded an ad if we already have one ready. However, if we have already - // played a video for this ad manager, we will go ahead and request another ad from the server so we aren't potentially - // stuck playing ads from the same network for a prolonged period of time which could be unoptimal with respect to the waterfall. - if (self.ready && !self.playedAd) { - // If we already have an ad, do not set the customerId. We'll leave the customerId as the old one since the ad we currently have - // may be tied to an older customerId. - [self.delegate rewardedVideoDidLoadForAdManager:self]; - } else { - // This has multiple behaviors. For ads that require us to set the customID: (outside of load), this will overwrite the ad's previously - // set customerId. Other ads require customerId on presentation in which we will use this new id coming in when presenting the ad. - self.customerId = customerId; - self.targeting = targeting; - [self loadAdWithURL:[MPAdServerURLBuilder URLWithAdUnitID:self.adUnitID - keywords:targeting.keywords - userDataKeywords:targeting.userDataKeywords - location:targeting.location]]; - } -} - -- (void)presentRewardedVideoAdFromViewController:(UIViewController *)viewController withReward:(MPRewardedVideoReward *)reward customData:(NSString *)customData -{ - // Don't allow the ad to be shown if it isn't ready. - if (!self.ready) { - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorNoAdReady userInfo:@{ NSLocalizedDescriptionKey: @"Rewarded video ad view is not ready to be shown"}]; - - // We don't want to remotely log this event -- it's simply for publisher troubleshooting -- so use NSLog - // rather than MPLog. - NSLog(@"%@", error.localizedDescription); - [self.delegate rewardedVideoDidFailToPlayForAdManager:self error:error]; - return; - } - - // If we've already played an ad, don't allow playing of another since we allow one play per load. - if (self.playedAd) { - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorAdAlreadyPlayed userInfo:nil]; - [self.delegate rewardedVideoDidFailToPlayForAdManager:self error:error]; - return; - } - - // No reward is specified - if (reward == nil) { - // Only a single currency; It should automatically select the only currency available. - if (self.availableRewards.count == 1) { - MPRewardedVideoReward * defaultReward = self.availableRewards[0]; - self.configuration.selectedReward = defaultReward; - } - // Unspecified rewards in a multicurrency situation are not allowed. - else { - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorNoRewardSelected userInfo:nil]; - [self.delegate rewardedVideoDidFailToPlayForAdManager:self error:error]; - return; - } - } - // Reward is specified - else { - // Verify that the reward exists in the list of available rewards. If it doesn't, fail to play the ad. - if (![self.availableRewards containsObject:reward]) { - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorInvalidReward userInfo:nil]; - [self.delegate rewardedVideoDidFailToPlayForAdManager:self error:error]; - return; - } - // Reward passes validation, set it as selected. - else { - self.configuration.selectedReward = reward; - } - } - - [self.adapter presentRewardedVideoFromViewController:viewController customData:customData]; -} - -- (void)handleAdPlayedForCustomEventNetwork -{ - // We only need to notify the backing ad network if the ad is marked ready for display. - if (self.ready) { - [self.adapter handleAdPlayedForCustomEventNetwork]; - } -} - -#pragma mark - Private - -- (void)loadAdWithURL:(NSURL *)URL -{ - self.playedAd = NO; - - if (self.loading) { - MPLogWarn(@"Rewarded video manager is already loading an ad. " - @"Wait for previous load to finish."); - return; - } - - self.loading = YES; - [self.communicator loadURL:URL]; -} - -- (void)fetchAdWithConfiguration:(MPAdConfiguration *)configuration { - MPLogInfo(@"Rewarded video ad is fetching ad network type: %@", configuration.networkType); - - if (configuration.adUnitWarmingUp) { - MPLogInfo(kMPWarmingUpErrorLogFormatWithAdUnitID, self.adUnitID); - self.loading = NO; - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorAdUnitWarmingUp userInfo:nil]; - [self.delegate rewardedVideoDidFailToLoadForAdManager:self error:error]; - return; - } - - if ([configuration.networkType isEqualToString:kAdTypeClear]) { - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.adUnitID); - self.loading = NO; - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorNoAdsAvailable userInfo:nil]; - [self.delegate rewardedVideoDidFailToLoadForAdManager:self error:error]; - return; - } - - // Notify Ad Server of the adapter load. This is fire and forget. - [self.communicator sendBeforeLoadUrlWithConfiguration:configuration]; - - // Record the start time of the adapter load. - self.adapterLoadStartTimestamp = NSDate.now.timeIntervalSince1970; - - MPRewardedVideoAdapter *adapter = [[MPRewardedVideoAdapter alloc] initWithDelegate:self]; - - if (adapter == nil) { - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorUnknown userInfo:nil]; - [self rewardedVideoDidFailToLoadForAdapter:nil error:error]; - return; - } - - self.adapter = adapter; - [self.adapter getAdWithConfiguration:configuration targeting:self.targeting]; -} - -#pragma mark - MPAdServerCommunicatorDelegate - -- (void)communicatorDidReceiveAdConfigurations:(NSArray *)configurations -{ - self.remainingConfigurations = [configurations mutableCopy]; - self.configuration = [self.remainingConfigurations removeFirst]; - - // There are no configurations to try. Consider this a clear response by the server. - if (self.remainingConfigurations.count == 0 && self.configuration == nil) { - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.adUnitID); - self.loading = NO; - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorNoAdsAvailable userInfo:nil]; - [self.delegate rewardedVideoDidFailToLoadForAdManager:self error:error]; - return; - } - - [self fetchAdWithConfiguration:self.configuration]; -} - -- (void)communicatorDidFailWithError:(NSError *)error -{ - self.ready = NO; - self.loading = NO; - - [self.delegate rewardedVideoDidFailToLoadForAdManager:self error:error]; -} - -#pragma mark - MPRewardedVideoAdapterDelegate - -- (id)instanceMediationSettingsForClass:(Class)aClass -{ - for (id settings in self.mediationSettings) { - if ([settings isKindOfClass:aClass]) { - return settings; - } - } - - return nil; -} - -- (void)rewardedVideoDidLoadForAdapter:(MPRewardedVideoAdapter *)adapter -{ - self.remainingConfigurations = nil; - self.ready = YES; - self.loading = NO; - - // Record the end of the adapter load and send off the fire and forget after-load-url tracker. - NSTimeInterval duration = NSDate.now.timeIntervalSince1970 - self.adapterLoadStartTimestamp; - [self.communicator sendAfterLoadUrlWithConfiguration:self.configuration adapterLoadDuration:duration adapterLoadResult:MPAfterLoadResultAdLoaded]; - - [self.delegate rewardedVideoDidLoadForAdManager:self]; -} - -- (void)rewardedVideoDidFailToLoadForAdapter:(MPRewardedVideoAdapter *)adapter error:(NSError *)error -{ - // Record the end of the adapter load and send off the fire and forget after-load-url tracker - // with the appropriate error code result. - NSTimeInterval duration = NSDate.now.timeIntervalSince1970 - self.adapterLoadStartTimestamp; - MPAfterLoadResult result = (error.isAdRequestTimedOutError ? MPAfterLoadResultTimeout : (adapter == nil ? MPAfterLoadResultMissingAdapter : MPAfterLoadResultError)); - [self.communicator sendAfterLoadUrlWithConfiguration:self.configuration adapterLoadDuration:duration adapterLoadResult:result]; - - // There are more ad configurations to try. - if (self.remainingConfigurations.count > 0) { - self.configuration = [self.remainingConfigurations removeFirst]; - [self fetchAdWithConfiguration:self.configuration]; - } - // No more configurations to try. Send new request to Ads server to get more Ads. - else if (self.configuration.nextURL != nil) { - self.ready = NO; - self.loading = NO; - [self loadAdWithURL:self.configuration.nextURL]; - } - // No more configurations to try and no more pages to load. - else { - self.ready = NO; - self.loading = NO; - - MPLogInfo(kMPClearErrorLogFormatWithAdUnitID, self.adUnitID); - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorNoAdsAvailable userInfo:nil]; - [self.delegate rewardedVideoDidFailToLoadForAdManager:self error:error]; - } -} - -- (void)rewardedVideoDidExpireForAdapter:(MPRewardedVideoAdapter *)adapter -{ - self.ready = NO; - [self.delegate rewardedVideoDidExpireForAdManager:self]; -} - -- (void)rewardedVideoDidFailToPlayForAdapter:(MPRewardedVideoAdapter *)adapter error:(NSError *)error -{ - [self.delegate rewardedVideoDidFailToPlayForAdManager:self error:error]; -} - -- (void)rewardedVideoWillAppearForAdapter:(MPRewardedVideoAdapter *)adapter -{ - [self.delegate rewardedVideoWillAppearForAdManager:self]; -} - -- (void)rewardedVideoDidAppearForAdapter:(MPRewardedVideoAdapter *)adapter -{ - [self.delegate rewardedVideoDidAppearForAdManager:self]; -} - -- (void)rewardedVideoWillDisappearForAdapter:(MPRewardedVideoAdapter *)adapter -{ - [self.delegate rewardedVideoWillDisappearForAdManager:self]; -} - -- (void)rewardedVideoDidDisappearForAdapter:(MPRewardedVideoAdapter *)adapter -{ - self.ready = NO; - self.playedAd = YES; - [self.delegate rewardedVideoDidDisappearForAdManager:self]; -} - -- (void)rewardedVideoDidReceiveTapEventForAdapter:(MPRewardedVideoAdapter *)adapter -{ - [self.delegate rewardedVideoDidReceiveTapEventForAdManager:self]; -} - -- (void)rewardedVideoWillLeaveApplicationForAdapter:(MPRewardedVideoAdapter *)adapter -{ - [self.delegate rewardedVideoWillLeaveApplicationForAdManager:self]; -} - -- (void)rewardedVideoShouldRewardUserForAdapter:(MPRewardedVideoAdapter *)adapter reward:(MPRewardedVideoReward *)reward -{ - [self.delegate rewardedVideoShouldRewardUserForAdManager:self reward:reward]; -} - -- (NSString *)rewardedVideoAdUnitId -{ - return self.adUnitID; -} - -- (NSString *)rewardedVideoCustomerId -{ - return self.customerId; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.h deleted file mode 100644 index 50a3bea8e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.h +++ /dev/null @@ -1,83 +0,0 @@ -// -// MPRewardedVideoAdapter.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPPrivateRewardedVideoCustomEventDelegate.h" - -@class MPAdConfiguration; -@class MPAdTargeting; -@class MPRewardedVideoReward; - -@protocol MPRewardedVideoAdapterDelegate; -@protocol MPMediationSettingsProtocol; - -/** - * `MPRewardedVideoAdapter` directly communicates with the appropriate custom event to - * load and show a rewarded video. It is also the class that handles impression - * and click tracking. Finally, the class will report a failure to load an ad if the ad - * takes too long to load. - */ -@interface MPRewardedVideoAdapter : NSObject - -@property (nonatomic, weak) id delegate; - -- (instancetype)initWithDelegate:(id)delegate; - -/** - * Called to retrieve an ad once we get a response from the server. - * - * @param configuration Contains the details about the ad we are loading. - 8 @param targeting Optional ad targeting details for the ad we are loading. - */ -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting; - -/** - * Tells the caller whether the underlying ad network currently has an ad available for presentation. - */ -- (BOOL)hasAdAvailable; - -/** - * Plays a rewarded video ad. - * - * @param viewController Presents the rewarded video ad from viewController. - * @param customData Optional custom data string to include in the server-to-server callback. If a server-to-server callback - * is not used, or if the ad unit is configured for local rewarding, this value will not be persisted. - */ -- (void)presentRewardedVideoFromViewController:(UIViewController *)viewController customData:(NSString *)customData; - -/** - * This method is called when another ad unit has played a rewarded video from the same network this adapter's custom event - * represents. - */ -- (void)handleAdPlayedForCustomEventNetwork; - -@end - -@protocol MPRewardedVideoAdapterDelegate - -- (id)instanceMediationSettingsForClass:(Class)aClass; - -- (void)rewardedVideoDidLoadForAdapter:(MPRewardedVideoAdapter *)adapter; -- (void)rewardedVideoDidFailToLoadForAdapter:(MPRewardedVideoAdapter *)adapter error:(NSError *)error; -- (void)rewardedVideoDidExpireForAdapter:(MPRewardedVideoAdapter *)adapter; -- (void)rewardedVideoDidFailToPlayForAdapter:(MPRewardedVideoAdapter *)adapter error:(NSError *)error; -- (void)rewardedVideoWillAppearForAdapter:(MPRewardedVideoAdapter *)adapter; -- (void)rewardedVideoDidAppearForAdapter:(MPRewardedVideoAdapter *)adapter; -- (void)rewardedVideoWillDisappearForAdapter:(MPRewardedVideoAdapter *)adapter; -- (void)rewardedVideoDidDisappearForAdapter:(MPRewardedVideoAdapter *)adapter; -- (void)rewardedVideoDidReceiveTapEventForAdapter:(MPRewardedVideoAdapter *)adapter; -- (void)rewardedVideoWillLeaveApplicationForAdapter:(MPRewardedVideoAdapter *)adapter; -- (void)rewardedVideoShouldRewardUserForAdapter:(MPRewardedVideoAdapter *)adapter reward:(MPRewardedVideoReward *)reward; - -@optional -- (NSString *)rewardedVideoAdUnitId; -- (NSString *)rewardedVideoCustomerId; -- (MPAdConfiguration *)configuration; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.m deleted file mode 100644 index 9d21d0696..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoAdapter.m +++ /dev/null @@ -1,325 +0,0 @@ -// -// MPRewardedVideoAdapter.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideoAdapter.h" - -#import "MPAdConfiguration.h" -#import "MPAdServerURLBuilder.h" -#import "MPAdTargeting.h" -#import "MPAnalyticsTracker.h" -#import "MPCoreInstanceProvider.h" -#import "MPError.h" -#import "MPRewardedVideoError.h" -#import "MPRewardedVideoCustomEvent.h" -#import "MPLogging.h" -#import "MPTimer.h" -#import "MPRewardedVideoReward.h" -#import "MPRewardedVideo+Internal.h" -#import "MPConstants.h" -#import "MPMoPubRewardedVideoCustomEvent.h" -#import "MPMoPubRewardedPlayableCustomEvent.h" -#import "MPRealTimeTimer.h" -#import "NSString+MPAdditions.h" - -static const NSUInteger kExcessiveCustomDataLength = 8196; - -@interface MPRewardedVideoAdapter () - -@property (nonatomic, strong) MPRewardedVideoCustomEvent *rewardedVideoCustomEvent; -@property (nonatomic, strong) MPAdConfiguration *configuration; -@property (nonatomic, strong) MPTimer *timeoutTimer; -@property (nonatomic, assign) BOOL hasTrackedImpression; -@property (nonatomic, assign) BOOL hasTrackedClick; -// Once an ad successfully loads, we want to block sending more successful load events. -@property (nonatomic, assign) BOOL hasSuccessfullyLoaded; -// Since we only notify the application of one success per load, we also only notify the application of one expiration per success. -@property (nonatomic, assign) BOOL hasExpired; -@property (nonatomic, strong) MPRealTimeTimer *expirationTimer; -@property (nonatomic, copy) NSString * customData; - -@end - -@implementation MPRewardedVideoAdapter - -- (instancetype)initWithDelegate:(id)delegate -{ - if (self = [super init]) { - _delegate = delegate; - } - - return self; -} - -- (void)dealloc -{ - // The rewarded video system now no longer holds references to the custom event. The custom event may have a system - // that holds extra references to the custom event. Let's tell the custom event that we no longer need it. - [_rewardedVideoCustomEvent handleCustomEventInvalidated]; - - [_timeoutTimer invalidate]; - - // Make sure the custom event isn't released synchronously as objects owned by the custom event - // may do additional work after a callback that results in dealloc being called - [[MPCoreInstanceProvider sharedProvider] keepObjectAliveForCurrentRunLoopIteration:_rewardedVideoCustomEvent]; -} - -- (void)getAdWithConfiguration:(MPAdConfiguration *)configuration targeting:(MPAdTargeting *)targeting -{ - MPLogInfo(@"Looking for custom event class named %@.", configuration.customEventClass); - - self.configuration = configuration; - MPRewardedVideoCustomEvent *customEvent = [[configuration.customEventClass alloc] init]; - if (![customEvent isKindOfClass:[MPRewardedVideoCustomEvent class]]) { - MPLogError(@"**** Custom Event Class: %@ does not extend MPRewardedVideoCustomEvent ****", NSStringFromClass(configuration.customEventClass)); - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorInvalidCustomEvent userInfo:nil]; - [self.delegate rewardedVideoDidFailToLoadForAdapter:nil error:error]; - return; - } - customEvent.delegate = self; - customEvent.localExtras = targeting.localExtras; - - self.rewardedVideoCustomEvent = customEvent; - [self startTimeoutTimer]; - [self.rewardedVideoCustomEvent requestRewardedVideoWithCustomEventInfo:configuration.customEventClassData adMarkup:configuration.advancedBidPayload]; -} - -- (BOOL)hasAdAvailable -{ - return [self.rewardedVideoCustomEvent hasAdAvailable]; -} - -- (void)presentRewardedVideoFromViewController:(UIViewController *)viewController customData:(NSString *)customData -{ - NSUInteger customDataLength = customData.length; - // Only persist the custom data field if it's non-empty and there is a server-to-server - // callback URL. The persisted custom data will be url encoded. - if (customDataLength > 0 && self.configuration.rewardedVideoCompletionUrl != nil) { - // Warn about excessive custom data length, but allow the custom data to be sent anyway - if (customDataLength > kExcessiveCustomDataLength) { - MPLogWarn(@"Custom data length %ld exceeds the receommended maximum length of %ld characters.", customDataLength, kExcessiveCustomDataLength); - } - - self.customData = customData; - } - - [self.rewardedVideoCustomEvent presentRewardedVideoFromViewController:viewController]; -} - -- (void)handleAdPlayedForCustomEventNetwork -{ - [self.rewardedVideoCustomEvent handleAdPlayedForCustomEventNetwork]; -} - -#pragma mark - Private - -- (void)startTimeoutTimer -{ - NSTimeInterval timeInterval = (self.configuration && self.configuration.adTimeoutInterval >= 0) ? - self.configuration.adTimeoutInterval : REWARDED_VIDEO_TIMEOUT_INTERVAL; - - if (timeInterval > 0) { - self.timeoutTimer = [[MPCoreInstanceProvider sharedProvider] buildMPTimerWithTimeInterval:timeInterval - target:self - selector:@selector(timeout) - repeats:NO]; - - [self.timeoutTimer scheduleNow]; - } -} - -- (void)timeout -{ - NSError * error = [MOPUBError errorWithCode:MOPUBErrorAdRequestTimedOut localizedDescription:@"Rewarded video ad request timed out"]; - [self.delegate rewardedVideoDidFailToLoadForAdapter:self error:error]; - self.delegate = nil; -} - -- (void)didStopLoading -{ - [self.timeoutTimer invalidate]; -} - -- (NSURL *)rewardedVideoCompletionUrlByAppendingClientParams -{ - NSString * sourceCompletionUrl = self.configuration.rewardedVideoCompletionUrl; - NSString * customerId = ([self.delegate respondsToSelector:@selector(rewardedVideoCustomerId)] ? [self.delegate rewardedVideoCustomerId] : nil); - MPRewardedVideoReward * reward = (self.configuration.selectedReward != nil && ![self.configuration.selectedReward.currencyType isEqualToString:kMPRewardedVideoRewardCurrencyTypeUnspecified] ? self.configuration.selectedReward : nil); - NSString * customEventName = NSStringFromClass([self.rewardedVideoCustomEvent class]); - - return [MPAdServerURLBuilder rewardedCompletionUrl:sourceCompletionUrl - withCustomerId:customerId - rewardType:reward.currencyType - rewardAmount:reward.amount - customEventName:customEventName - additionalData:self.customData]; -} - -#pragma mark - Metrics - -- (void)trackImpression -{ - [[MPAnalyticsTracker sharedTracker] trackImpressionForConfiguration:self.configuration]; - self.hasTrackedImpression = YES; - [self.expirationTimer invalidate]; -} - -- (void)trackClick -{ - [[MPAnalyticsTracker sharedTracker] trackClickForConfiguration:self.configuration]; -} - -#pragma mark - MPRewardedVideoCustomEventDelegate - -- (id)instanceMediationSettingsForClass:(Class)aClass -{ - return [self.delegate instanceMediationSettingsForClass:aClass]; -} - -- (void)rewardedVideoDidLoadAdForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent -{ - // Don't report multiple successful loads. Backing ad networks may replenish their caches triggering multiple successful load - // callbacks. - if (self.hasSuccessfullyLoaded) { - return; - } - - self.hasSuccessfullyLoaded = YES; - [self didStopLoading]; - [self.delegate rewardedVideoDidLoadForAdapter:self]; - - // Check for MoPub-specific custom events before setting the timer - if ([customEvent isKindOfClass:[MPMoPubRewardedVideoCustomEvent class]] - || [customEvent isKindOfClass:[MPMoPubRewardedPlayableCustomEvent class]]) { - // Set up timer for expiration - __weak __typeof__(self) weakSelf = self; - self.expirationTimer = [[MPRealTimeTimer alloc] initWithInterval:[MPConstants adsExpirationInterval] block:^(MPRealTimeTimer *timer){ - __strong __typeof__(weakSelf) strongSelf = weakSelf; - if (strongSelf && !strongSelf.hasTrackedImpression) { - [strongSelf rewardedVideoDidExpireForCustomEvent:strongSelf.rewardedVideoCustomEvent]; - } - [strongSelf.expirationTimer invalidate]; - }]; - [self.expirationTimer scheduleNow]; - } -} - -- (void)rewardedVideoDidFailToLoadAdForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent error:(NSError *)error -{ - // Detach the custom event from the adapter. An ad *may* end up, after some time, loading successfully - // from the underlying network, but we don't want to bubble up the event to the application since we - // are reporting a timeout here. - [self.rewardedVideoCustomEvent handleCustomEventInvalidated]; - self.rewardedVideoCustomEvent = nil; - - [self didStopLoading]; - [self.delegate rewardedVideoDidFailToLoadForAdapter:self error:error]; -} - -- (void)rewardedVideoDidExpireForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent -{ - // Only allow one expire per custom event to match up with one successful load callback per custom event. - if (self.hasExpired) { - return; - } - - self.hasExpired = YES; - [self.delegate rewardedVideoDidExpireForAdapter:self]; -} - -- (void)rewardedVideoDidFailToPlayForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent error:(NSError *)error -{ - [self.delegate rewardedVideoDidFailToPlayForAdapter:self error:error]; -} - -- (void)rewardedVideoWillAppearForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent -{ - [self.delegate rewardedVideoWillAppearForAdapter:self]; -} - -- (void)rewardedVideoDidAppearForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent -{ - if ([self.rewardedVideoCustomEvent enableAutomaticImpressionAndClickTracking] && !self.hasTrackedImpression) { - [self trackImpression]; - } - - [self.delegate rewardedVideoDidAppearForAdapter:self]; -} - -- (void)rewardedVideoWillDisappearForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent -{ - [self.delegate rewardedVideoWillDisappearForAdapter:self]; -} - -- (void)rewardedVideoDidDisappearForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent -{ - [self.delegate rewardedVideoDidDisappearForAdapter:self]; -} - -- (void)rewardedVideoWillLeaveApplicationForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent -{ - [self.delegate rewardedVideoWillLeaveApplicationForAdapter:self]; -} - -- (void)rewardedVideoDidReceiveTapEventForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent -{ - if ([self.rewardedVideoCustomEvent enableAutomaticImpressionAndClickTracking] && !self.hasTrackedClick) { - self.hasTrackedClick = YES; - [self trackClick]; - } - - [self.delegate rewardedVideoDidReceiveTapEventForAdapter:self]; -} - -- (void)rewardedVideoShouldRewardUserForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent reward:(MPRewardedVideoReward *)reward -{ - if (self.configuration) { - // Send server to server callback if available - if (self.configuration.rewardedVideoCompletionUrl) { - [[MPRewardedVideo sharedInstance] startRewardedVideoConnectionWithUrl:[self rewardedVideoCompletionUrlByAppendingClientParams]]; - } - - MPRewardedVideoReward *mopubConfiguredReward = self.configuration.selectedReward; - - // If reward is set in adConfig, use reward that's set in adConfig. - // Currency type has to be defined in mopubConfiguredReward in order to use mopubConfiguredReward. - if (mopubConfiguredReward && ![mopubConfiguredReward.currencyType isEqualToString:kMPRewardedVideoRewardCurrencyTypeUnspecified]) { - reward = mopubConfiguredReward; - } - } - - // Notify client with the reward if present. - if (reward) { - [self.delegate rewardedVideoShouldRewardUserForAdapter:self reward:reward]; - } -} - -- (NSString *)customerIdForRewardedVideoCustomEvent:(MPRewardedVideoCustomEvent *)customEvent -{ - if ([self.delegate respondsToSelector:@selector(rewardedVideoCustomerId)]) { - return [self.delegate rewardedVideoCustomerId]; - } - - return nil; -} - -#pragma mark - MPPrivateRewardedVideoCustomEventDelegate - -- (NSString *)adUnitId -{ - if ([self.delegate respondsToSelector:@selector(rewardedVideoAdUnitId)]) { - return [self.delegate rewardedVideoAdUnitId]; - } - return nil; -} - -- (MPAdConfiguration *)configuration -{ - return _configuration; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.h deleted file mode 100644 index 5d28a62b1..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// MPRewardedVideoConnection.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -@class MPRewardedVideoConnection; - -@protocol MPRewardedVideoConnectionDelegate - -- (void)rewardedVideoConnectionCompleted:(MPRewardedVideoConnection *)connection url:(NSURL *)url; - -@end - -@interface MPRewardedVideoConnection : NSObject - -- (instancetype)initWithUrl:(NSURL *)url delegate:(id)delegate; -- (void)sendRewardedVideoCompletionRequest; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.m deleted file mode 100644 index 4e58f8708..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/Internal/MPRewardedVideoConnection.m +++ /dev/null @@ -1,100 +0,0 @@ -// -// MPRewardedVideoConnection.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -// Copyright © 2016 MoPub. All rights reserved. -// - -#import -#import "MPRewardedVideoConnection.h" -#import "MPHTTPNetworkSession.h" -#import "MPURLRequest.h" - -static const NSTimeInterval kMaximumRequestRetryInterval = 900.0; // 15 mins -static const NSTimeInterval kMinimumRequestRetryInterval = 5.0; -static const NSTimeInterval kMaximumBackoffTime = 60.0; -static const CGFloat kRetryIntervalBackoffMultiplier = 2.0; - -@interface MPRewardedVideoConnection() - -@property (nonatomic, strong) NSURLSessionTask *task; -@property (nonatomic) NSURL *url; -@property (nonatomic) NSUInteger retryCount; -@property (nonatomic) NSTimeInterval accumulatedRetryInterval; -@property (nonatomic, weak) id delegate; - -@end - -@implementation MPRewardedVideoConnection - -- (instancetype)initWithUrl:(NSURL *)url delegate:(id)delegate -{ - if (self = [super init]) { - _url = url; - _delegate = delegate; - } - return self; -} - -- (void)sendRewardedVideoCompletionRequest -{ - MPURLRequest *request = [MPURLRequest requestWithURL:self.url]; - [self.task cancel]; - - __weak __typeof__(self) weakSelf = self; - self.task = [MPHTTPNetworkSession startTaskWithHttpRequest:request responseHandler:^(NSData * _Nonnull data, NSHTTPURLResponse * _Nonnull response) { - __typeof__(self) strongSelf = weakSelf; - - NSInteger statusCode = response.statusCode; - - // only retry on 5xx - if (statusCode >= 500 && statusCode <= 599) { - [strongSelf retryRewardedVideoCompletionRequest]; - } else { - [strongSelf.delegate rewardedVideoConnectionCompleted:strongSelf url:strongSelf.url]; - } - } errorHandler:^(NSError * _Nonnull error) { - __typeof__(self) strongSelf = weakSelf; - - if (error.code == NSURLErrorTimedOut || - error.code == NSURLErrorNetworkConnectionLost || - error.code == NSURLErrorNotConnectedToInternet) { - [strongSelf retryRewardedVideoCompletionRequest]; - } else { - [strongSelf.delegate rewardedVideoConnectionCompleted:strongSelf url:strongSelf.url]; - } - }]; -} - -- (void)retryRewardedVideoCompletionRequest -{ - NSTimeInterval retryInterval = [self backoffTime:self.retryCount]; - - self.accumulatedRetryInterval += retryInterval; - - if (self.accumulatedRetryInterval < kMaximumRequestRetryInterval) { - [self performSelector:@selector(sendRewardedVideoCompletionRequest) withObject:nil afterDelay:retryInterval]; - } else { - [self.delegate rewardedVideoConnectionCompleted:self url:self.url]; - [self.task cancel]; - } - self.retryCount++; -} - -- (NSTimeInterval)backoffTime:(NSUInteger)retryCount -{ - NSTimeInterval interval = pow(kRetryIntervalBackoffMultiplier, retryCount) * kMinimumRequestRetryInterval; - - // If interval > kMaximumBackoffTime, we'll retry every kMaximumBackoffTime seconds to ensure retry happens - // often enough. - if (interval > kMaximumBackoffTime) { - interval = kMaximumBackoffTime; - } - return interval; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideo.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideo.h deleted file mode 100644 index 99e58cac3..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideo.h +++ /dev/null @@ -1,258 +0,0 @@ -// -// MPRewardedVideo.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import - -@class MPRewardedVideoReward; -@class CLLocation; -@protocol MPRewardedVideoDelegate; - -/** - * `MPRewardedVideo` allows you to load and play rewarded video ads. All ad events are - * reported, with an ad unit ID, to the delegate allowing the application to respond to the events - * for the corresponding ad. - * - * **Important**: You must call `[initializeRewardedVideoWithGlobalMediationSettings:delegate:][MoPub initializeRewardedVideoWithGlobalMediationSettings:delegate:]` - * to initialize the rewarded video system. - */ -@interface MPRewardedVideo : NSObject - -/** - * Sets the delegate that will be the receiver of rewarded video events for the given - * ad unit ID. - * @remark A weak reference to the delegate will be held. - * @param delegate Delegate that will recieve rewarded video events for the ad unit ID. - * @param adUnitId Ad unit ID - */ -+ (void)setDelegate:(id)delegate forAdUnitId:(NSString *)adUnitId; - -/** - * Removes the delegate as a receiver of rewarded video events for all available ad unit IDs. - * @param delegate Reference to the delegate to remove as a listener. - */ -+ (void)removeDelegate:(id)delegate; - -/** - * Removes the rewarded video delegate that is associated with the ad unit ID. - * @param adUnitId Ad unit ID of the delegate to remove. - */ -+ (void)removeDelegateForAdUnitId:(NSString *)adUnitId; - -/** - * Loads a rewarded video ad for the given ad unit ID. - * - * The mediation settings array should contain ad network specific objects for networks that may be loaded for the given ad unit ID. - * You should set the properties on these objects to determine how the underlying ad network should behave. You only need to supply - * objects for the networks you wish to configure. If you do not want your network to behave differently from its default behavior, do - * not pass in an mediation settings object for that network. - * - * @param adUnitID The ad unit ID that ads should be loaded from. - * @param mediationSettings An array of mediation settings objects that map to networks that may show ads for the ad unit ID. This array - * should only contain objects for networks you wish to configure. This can be nil. - */ -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID withMediationSettings:(NSArray *)mediationSettings; - -/** - * Loads a rewarded video ad for the given ad unit ID. - * - * The mediation settings array should contain ad network specific objects for networks that may be loaded for the given ad unit ID. - * You should set the properties on these objects to determine how the underlying ad network should behave. You only need to supply - * objects for the networks you wish to configure. If you do not want your network to behave differently from its default behavior, do - * not pass in an mediation settings object for that network. - * - * @param adUnitID The ad unit ID that ads should be loaded from. - * @param keywords A string representing a set of non-personally identifiable keywords that should be passed to the MoPub ad server to receive more relevant advertising. - * @param userDataKeywords A string representing a set of personally identifiable keywords that should be passed to the MoPub ad server to receive - * more relevant advertising. - * @param location Latitude/Longitude that are passed to the MoPub ad server - * @param mediationSettings An array of mediation settings objects that map to networks that may show ads for the ad unit ID. This array - * should only contain objects for networks you wish to configure. This can be nil. - - * Note: If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain consent from the user, "keywords" will be sent to the server but "userDataKeywords" will be excluded. - */ -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords location:(CLLocation *)location mediationSettings:(NSArray *)mediationSettings; - -/** - * Loads a rewarded video ad for the given ad unit ID. - * - * The mediation settings array should contain ad network specific objects for networks that may be loaded for the given ad unit ID. - * You should set the properties on these objects to determine how the underlying ad network should behave. You only need to supply - * objects for the networks you wish to configure. If you do not want your network to behave differently from its default behavior, do - * not pass in an mediation settings object for that network. - * - * @param adUnitID The ad unit ID that ads should be loaded from. - * @param keywords A string representing a set of non-personally identifiable keywords that should be passed to the MoPub ad server to receive more relevant advertising. - * @param userDataKeywords A string representing a set of personally identifiable keywords that should be passed to the MoPub ad server to receive - * more relevant advertising. - * @param location Latitude/Longitude that are passed to the MoPub ad server - * @param customerId This is the ID given to the user by the publisher to identify them in their app - * @param mediationSettings An array of mediation settings objects that map to networks that may show ads for the ad unit ID. This array - * should only contain objects for networks you wish to configure. This can be nil. - - * Note: If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain consent from the user, "keywords" will be sent to the server but "userDataKeywords" will be excluded. - */ -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords location:(CLLocation *)location customerId:(NSString *)customerId mediationSettings:(NSArray *)mediationSettings; - -/** - * Loads a rewarded video ad for the given ad unit ID. - * - * The mediation settings array should contain ad network specific objects for networks that may be loaded for the given ad unit ID. - * You should set the properties on these objects to determine how the underlying ad network should behave. You only need to supply - * objects for the networks you wish to configure. If you do not want your network to behave differently from its default behavior, do - * not pass in an mediation settings object for that network. - * - * @param adUnitID The ad unit ID that ads should be loaded from. - * @param keywords A string representing a set of non-personally identifiable keywords that should be passed to the MoPub ad server to receive more relevant advertising. - * @param userDataKeywords A string representing a set of personally identifiable keywords that should be passed to the MoPub ad server to receive - * more relevant advertising. - * @param location Latitude/Longitude that are passed to the MoPub ad server - * @param customerId This is the ID given to the user by the publisher to identify them in their app - * @param mediationSettings An array of mediation settings objects that map to networks that may show ads for the ad unit ID. This array - * should only contain objects for networks you wish to configure. This can be nil. - * @param localExtras An optional dictionary containing extra local data. - - * Note: If a user is in General Data Protection Regulation (GDPR) region and MoPub doesn't obtain consent from the user, "keywords" will be sent to the server but "userDataKeywords" will be excluded. - */ -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords location:(CLLocation *)location customerId:(NSString *)customerId mediationSettings:(NSArray *)mediationSettings localExtras:(NSDictionary *)localExtras; - -/** - * Returns whether or not an ad is available for the given ad unit ID. - * - * @param adUnitID The ad unit ID associated with the ad you want to retrieve the availability for. - */ -+ (BOOL)hasAdAvailableForAdUnitID:(NSString *)adUnitID; - -/** - * Returns an array of rewards that are available for the given ad unit ID. - */ -+ (NSArray *)availableRewardsForAdUnitID:(NSString *)adUnitID; - -/** - * The currently selected reward that will be awarded to the user upon completion of the ad. By default, - * this corresponds to the first reward in `availableRewardsForAdUnitID:`. - */ -+ (MPRewardedVideoReward *)selectedRewardForAdUnitID:(NSString *)adUnitID; - -/** - * Plays a rewarded video ad. - * - * @param adUnitID The ad unit ID associated with the video ad you wish to play. - * @param viewController The view controller that will present the rewarded video ad. - * @param reward A reward selected from `availableRewardsForAdUnitID:` to award the user upon successful completion of the ad. - * This value should not be `nil`. - * - * @warning **Important**: You should not attempt to play the rewarded video unless `+hasAdAvailableForAdUnitID:` indicates that an - * ad is available for playing or you have received the `[-rewardedVideoAdDidLoadForAdUnitID:]([MPRewardedVideoDelegate rewardedVideoAdDidLoadForAdUnitID:])` - * message. - */ -+ (void)presentRewardedVideoAdForAdUnitID:(NSString *)adUnitID fromViewController:(UIViewController *)viewController withReward:(MPRewardedVideoReward *)reward; - -/** - * Plays a rewarded video ad. - * - * @param adUnitID The ad unit ID associated with the video ad you wish to play. - * @param viewController The view controller that will present the rewarded video ad. - * @param reward A reward selected from `availableRewardsForAdUnitID:` to award the user upon successful completion of the ad. - * This value should not be `nil`. - * @param customData Optional custom data string to include in the server-to-server callback. If a server-to-server callback - * is not used, or if the ad unit is configured for local rewarding, this value will not be persisted. - * - * @warning **Important**: You should not attempt to play the rewarded video unless `+hasAdAvailableForAdUnitID:` indicates that an - * ad is available for playing or you have received the `[-rewardedVideoAdDidLoadForAdUnitID:]([MPRewardedVideoDelegate rewardedVideoAdDidLoadForAdUnitID:])` - * message. - */ -+ (void)presentRewardedVideoAdForAdUnitID:(NSString *)adUnitID fromViewController:(UIViewController *)viewController withReward:(MPRewardedVideoReward *)reward customData:(NSString *)customData; - -@end - -@protocol MPRewardedVideoDelegate - -@optional - -/** - * This method is called after an ad loads successfully. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - */ -- (void)rewardedVideoAdDidLoadForAdUnitID:(NSString *)adUnitID; - -/** - * This method is called after an ad fails to load. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - * @param error An error indicating why the ad failed to load. - */ -- (void)rewardedVideoAdDidFailToLoadForAdUnitID:(NSString *)adUnitID error:(NSError *)error; - -/** - * This method is called when a previously loaded rewarded video is no longer eligible for presentation. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - */ -- (void)rewardedVideoAdDidExpireForAdUnitID:(NSString *)adUnitID; - -/** - * This method is called when an attempt to play a rewarded video fails. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - * @param error An error describing why the video couldn't play. - */ -- (void)rewardedVideoAdDidFailToPlayForAdUnitID:(NSString *)adUnitID error:(NSError *)error; - -/** - * This method is called when a rewarded video ad is about to appear. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - */ -- (void)rewardedVideoAdWillAppearForAdUnitID:(NSString *)adUnitID; - -/** - * This method is called when a rewarded video ad has appeared. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - */ -- (void)rewardedVideoAdDidAppearForAdUnitID:(NSString *)adUnitID; - -/** - * This method is called when a rewarded video ad will be dismissed. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - */ -- (void)rewardedVideoAdWillDisappearForAdUnitID:(NSString *)adUnitID; - -/** - * This method is called when a rewarded video ad has been dismissed. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - */ -- (void)rewardedVideoAdDidDisappearForAdUnitID:(NSString *)adUnitID; - -/** - * This method is called when the user taps on the ad. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - */ -- (void)rewardedVideoAdDidReceiveTapEventForAdUnitID:(NSString *)adUnitID; - -/** - * This method is called when a rewarded video ad will cause the user to leave the application. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - */ -- (void)rewardedVideoAdWillLeaveApplicationForAdUnitID:(NSString *)adUnitID; - -/** - * This method is called when the user should be rewarded for watching a rewarded video ad. - * - * @param adUnitID The ad unit ID of the ad associated with the event. - * @param reward The object that contains all the information regarding how much you should reward the user. - */ -- (void)rewardedVideoAdShouldRewardForAdUnitID:(NSString *)adUnitID reward:(MPRewardedVideoReward *)reward; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideo.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideo.m deleted file mode 100644 index 616260172..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideo.m +++ /dev/null @@ -1,317 +0,0 @@ -// -// MPRewardedVideo.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideo.h" -#import "MPAdTargeting.h" -#import "MPLogging.h" -#import "MPRewardedVideoAdManager.h" -#import "MPRewardedVideoError.h" -#import "MPRewardedVideoConnection.h" -#import "MPRewardedVideoCustomEvent.h" -#import "MPRewardedVideoCustomEvent+Caching.h" - -static MPRewardedVideo *gSharedInstance = nil; - -@interface MPRewardedVideo () - -@property (nonatomic, strong) NSMutableDictionary *rewardedVideoAdManagers; -@property (nonatomic) NSMutableArray *rewardedVideoConnections; -@property (nonatomic, strong) NSMapTable> * delegateTable; - -+ (MPRewardedVideo *)sharedInstance; - -@end - -@implementation MPRewardedVideo - -- (instancetype)init -{ - if (self = [super init]) { - _rewardedVideoAdManagers = [[NSMutableDictionary alloc] init]; - _rewardedVideoConnections = [NSMutableArray new]; - - // Keys (ad unit ID) are strong, values (delegates) are weak. - _delegateTable = [NSMapTable strongToWeakObjectsMapTable]; - } - - return self; -} - -+ (void)setDelegate:(id)delegate forAdUnitId:(NSString *)adUnitId -{ - if (adUnitId == nil) { - return; - } - - [[[self class] sharedInstance].delegateTable setObject:delegate forKey:adUnitId]; -} - -+ (void)removeDelegate:(id)delegate -{ - if (delegate == nil) { - return; - } - - NSMapTable * mapTable = [[self class] sharedInstance].delegateTable; - - // Find all keys that contain the delegate - NSMutableArray * keys = [NSMutableArray array]; - for (NSString * key in mapTable) { - if ([mapTable objectForKey:key] == delegate) { - [keys addObject:key]; - } - } - - // Remove all of the found keys - for (NSString * key in keys) { - [mapTable removeObjectForKey:key]; - } -} - -+ (void)removeDelegateForAdUnitId:(NSString *)adUnitId -{ - if (adUnitId == nil) { - return; - } - - [[[self class] sharedInstance].delegateTable removeObjectForKey:adUnitId]; -} - -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID withMediationSettings:(NSArray *)mediationSettings -{ - [MPRewardedVideo loadRewardedVideoAdWithAdUnitID:adUnitID keywords:nil userDataKeywords:nil location:nil mediationSettings:mediationSettings]; -} - -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords location:(CLLocation *)location mediationSettings:(NSArray *)mediationSettings -{ - [self loadRewardedVideoAdWithAdUnitID:adUnitID keywords:keywords userDataKeywords:userDataKeywords location:location customerId:nil mediationSettings:mediationSettings]; -} - -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords location:(CLLocation *)location customerId:(NSString *)customerId mediationSettings:(NSArray *)mediationSettings -{ - [self loadRewardedVideoAdWithAdUnitID:adUnitID keywords:keywords userDataKeywords:userDataKeywords location:location customerId:customerId mediationSettings:mediationSettings localExtras:nil]; -} - -+ (void)loadRewardedVideoAdWithAdUnitID:(NSString *)adUnitID keywords:(NSString *)keywords userDataKeywords:(NSString *)userDataKeywords location:(CLLocation *)location customerId:(NSString *)customerId mediationSettings:(NSArray *)mediationSettings localExtras:(NSDictionary *)localExtras -{ - MPRewardedVideo *sharedInstance = [[self class] sharedInstance]; - - if (![adUnitID length]) { - NSError *error = [NSError errorWithDomain:MoPubRewardedVideoAdsSDKDomain code:MPRewardedVideoAdErrorInvalidAdUnitID userInfo:nil]; - id delegate = [sharedInstance.delegateTable objectForKey:adUnitID]; - [delegate rewardedVideoAdDidFailToLoadForAdUnitID:adUnitID error:error]; - return; - } - - MPRewardedVideoAdManager *adManager = sharedInstance.rewardedVideoAdManagers[adUnitID]; - - if (!adManager) { - adManager = [[MPRewardedVideoAdManager alloc] initWithAdUnitID:adUnitID delegate:sharedInstance]; - sharedInstance.rewardedVideoAdManagers[adUnitID] = adManager; - } - - adManager.mediationSettings = mediationSettings; - - // Ad targeting options - MPAdTargeting * targeting = [[MPAdTargeting alloc] init]; - targeting.keywords = keywords; - targeting.location = location; - targeting.localExtras = localExtras; - targeting.userDataKeywords = userDataKeywords; - - [adManager loadRewardedVideoAdWithCustomerId:customerId targeting:targeting]; -} - -+ (BOOL)hasAdAvailableForAdUnitID:(NSString *)adUnitID -{ - MPRewardedVideo *sharedInstance = [[self class] sharedInstance]; - MPRewardedVideoAdManager *adManager = sharedInstance.rewardedVideoAdManagers[adUnitID]; - - return [adManager hasAdAvailable]; -} - -+ (NSArray *)availableRewardsForAdUnitID:(NSString *)adUnitID -{ - MPRewardedVideo *sharedInstance = [[self class] sharedInstance]; - MPRewardedVideoAdManager *adManager = sharedInstance.rewardedVideoAdManagers[adUnitID]; - - return adManager.availableRewards; -} - -+ (MPRewardedVideoReward *)selectedRewardForAdUnitID:(NSString *)adUnitID -{ - MPRewardedVideo *sharedInstance = [[self class] sharedInstance]; - MPRewardedVideoAdManager *adManager = sharedInstance.rewardedVideoAdManagers[adUnitID]; - - return adManager.selectedReward; -} - -+ (void)presentRewardedVideoAdForAdUnitID:(NSString *)adUnitID fromViewController:(UIViewController *)viewController withReward:(MPRewardedVideoReward *)reward customData:(NSString *)customData -{ - MPRewardedVideo *sharedInstance = [[self class] sharedInstance]; - MPRewardedVideoAdManager *adManager = sharedInstance.rewardedVideoAdManagers[adUnitID]; - - if (!adManager) { - MPLogWarn(@"The rewarded video could not be shown: " - @"no ads have been loaded for adUnitID: %@", adUnitID); - - return; - } - - if (!viewController) { - MPLogWarn(@"The rewarded video could not be shown: " - @"a nil view controller was passed to -presentRewardedVideoAdForAdUnitID:fromViewController:."); - - return; - } - - if (![viewController.view.window isKeyWindow]) { - MPLogWarn(@"Attempting to present a rewarded video ad in non-key window. The ad may not render properly."); - } - - [adManager presentRewardedVideoAdFromViewController:viewController withReward:reward customData:customData]; -} - -+ (void)presentRewardedVideoAdForAdUnitID:(NSString *)adUnitID fromViewController:(UIViewController *)viewController withReward:(MPRewardedVideoReward *)reward -{ - [MPRewardedVideo presentRewardedVideoAdForAdUnitID:adUnitID fromViewController:viewController withReward:reward customData:nil]; -} - -#pragma mark - Private - -+ (MPRewardedVideo *)sharedInstance -{ - static dispatch_once_t once; - - dispatch_once(&once, ^{ - gSharedInstance = [[self alloc] init]; - }); - - return gSharedInstance; -} - -#pragma mark - MPRewardedVideoAdManagerDelegate - -- (void)rewardedVideoDidLoadForAdManager:(MPRewardedVideoAdManager *)manager -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitID]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdDidLoadForAdUnitID:)]) { - [delegate rewardedVideoAdDidLoadForAdUnitID:manager.adUnitID]; - } -} - -- (void)rewardedVideoDidFailToLoadForAdManager:(MPRewardedVideoAdManager *)manager error:(NSError *)error -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitID]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdDidFailToLoadForAdUnitID:error:)]) { - [delegate rewardedVideoAdDidFailToLoadForAdUnitID:manager.adUnitID error:error]; - } -} - -- (void)rewardedVideoDidExpireForAdManager:(MPRewardedVideoAdManager *)manager -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitID]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdDidExpireForAdUnitID:)]) { - [delegate rewardedVideoAdDidExpireForAdUnitID:manager.adUnitID]; - } -} - -- (void)rewardedVideoDidFailToPlayForAdManager:(MPRewardedVideoAdManager *)manager error:(NSError *)error -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitID]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdDidFailToPlayForAdUnitID:error:)]) { - [delegate rewardedVideoAdDidFailToPlayForAdUnitID:manager.adUnitID error:error]; - } -} - -- (void)rewardedVideoWillAppearForAdManager:(MPRewardedVideoAdManager *)manager -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitID]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdWillAppearForAdUnitID:)]) { - [delegate rewardedVideoAdWillAppearForAdUnitID:manager.adUnitID]; - } -} - -- (void)rewardedVideoDidAppearForAdManager:(MPRewardedVideoAdManager *)manager -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitID]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdDidAppearForAdUnitID:)]) { - [delegate rewardedVideoAdDidAppearForAdUnitID:manager.adUnitID]; - } -} - -- (void)rewardedVideoWillDisappearForAdManager:(MPRewardedVideoAdManager *)manager -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitID]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdWillDisappearForAdUnitID:)]) { - [delegate rewardedVideoAdWillDisappearForAdUnitID:manager.adUnitID]; - } -} - -- (void)rewardedVideoDidDisappearForAdManager:(MPRewardedVideoAdManager *)manager -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitID]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdDidDisappearForAdUnitID:)]) { - [delegate rewardedVideoAdDidDisappearForAdUnitID:manager.adUnitID]; - } - - // Since multiple ad units may be attached to the same network, we should notify the custom events (which should then notify the application) - // that their ads may not be available anymore since another ad unit might have "played" their ad. We go through and notify all ad managers - // that are of the type of ad that is playing now. - Class customEventClass = manager.customEventClass; - - for (id key in self.rewardedVideoAdManagers) { - MPRewardedVideoAdManager *adManager = self.rewardedVideoAdManagers[key]; - - if (adManager != manager && adManager.customEventClass == customEventClass) { - [adManager handleAdPlayedForCustomEventNetwork]; - } - } -} - -- (void)rewardedVideoDidReceiveTapEventForAdManager:(MPRewardedVideoAdManager *)manager -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitID]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdDidReceiveTapEventForAdUnitID:)]) { - [delegate rewardedVideoAdDidReceiveTapEventForAdUnitID:manager.adUnitID]; - } -} - -- (void)rewardedVideoWillLeaveApplicationForAdManager:(MPRewardedVideoAdManager *)manager -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitID]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdWillLeaveApplicationForAdUnitID:)]) { - [delegate rewardedVideoAdWillLeaveApplicationForAdUnitID:manager.adUnitID]; - } -} - -- (void)rewardedVideoShouldRewardUserForAdManager:(MPRewardedVideoAdManager *)manager reward:(MPRewardedVideoReward *)reward -{ - id delegate = [self.delegateTable objectForKey:manager.adUnitID]; - if ([delegate respondsToSelector:@selector(rewardedVideoAdShouldRewardForAdUnitID:reward:)]) { - [delegate rewardedVideoAdShouldRewardForAdUnitID:manager.adUnitID reward:reward]; - } -} - -#pragma mark - rewarded video server to server callback - -- (void)startRewardedVideoConnectionWithUrl:(NSURL *)url -{ - MPRewardedVideoConnection *connection = [[MPRewardedVideoConnection alloc] initWithUrl:url delegate:self]; - [self.rewardedVideoConnections addObject:connection]; - [connection sendRewardedVideoCompletionRequest]; -} - -#pragma mark - MPRewardedVideoConnectionDelegate - -- (void)rewardedVideoConnectionCompleted:(MPRewardedVideoConnection *)connection url:(NSURL *)url -{ - [self.rewardedVideoConnections removeObject:connection]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent+Caching.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent+Caching.h deleted file mode 100644 index 8da897876..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent+Caching.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// MPRewardedVideoCustomEvent+Caching.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideoCustomEvent.h" - -/** - * Provides caching support for network SDK initialization parameters. - */ -@interface MPRewardedVideoCustomEvent (Caching) - -/** - * Updates the initialization parameters for the current network. - * @param params New set of initialization parameters. Nothing will be done if `nil` is passed in. - */ -- (void)setCachedInitializationParameters:(NSDictionary * _Nullable)params; - -/** - * Retrieves the initialization parameters for the current network (if any). - * @return The cached initialization parameters for the network. This may be `nil` if not parameters were found. - */ -- (NSDictionary * _Nullable)cachedInitializationParameters; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent+Caching.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent+Caching.m deleted file mode 100644 index 6bf53bcdc..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent+Caching.m +++ /dev/null @@ -1,23 +0,0 @@ -// -// MPRewardedVideoCustomEvent+Caching.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideoCustomEvent+Caching.h" -#import "MPLogging.h" -#import "MPMediationManager.h" - -@implementation MPRewardedVideoCustomEvent (Caching) - -- (void)setCachedInitializationParameters:(NSDictionary * _Nullable)params { - [MPMediationManager.sharedManager setCachedInitializationParameters:params forNetwork:[self class]]; -} - -- (NSDictionary * _Nullable)cachedInitializationParameters { - return [MPMediationManager.sharedManager cachedInitializationParametersForNetwork:[self class]]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.h deleted file mode 100644 index 3fb5b91e7..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.h +++ /dev/null @@ -1,347 +0,0 @@ -// -// MPRewardedVideoCustomEvent.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import -#import "MPMediationSdkInitializable.h" - -@protocol MPRewardedVideoCustomEventDelegate; -@protocol MPMediationSettingsProtocol; - -@class MPRewardedVideoReward; - -/** - * The MoPub iOS SDK mediates third party Ad Networks using custom events. The custom events are - * responsible for instantiating and manipulating objects in the third party SDK and translating - * and communicating events from those objects back to the MoPub SDK by notifying a delegate. - * - * `MPRewardedVideoCustomEvent` is a base class for custom events that support full-screen rewarded video ads. - * By implementing subclasses of `MPRewardedVideoCustomEvent` you can enable the MoPub SDK to - * natively support a wide variety of third-party ad networks. - * - * At runtime, the MoPub SDK will find and instantiate an `MPRewardedVideoCustomEvent` subclass as needed and - * invoke its `-requestRewardedVideoWithCustomEventInfo:` method and `+initializeSdkWithParameters:` method. - */ - -@interface MPRewardedVideoCustomEvent : NSObject - -/** - * An optional dictionary containing extra local data. - */ -@property (nonatomic, copy) NSDictionary * localExtras; - -@property (nonatomic, weak) id delegate; - -/** @name Requesting and Displaying a Rewarded Video Ad */ - -/** - * Called when the MoPub SDK requires the underlying network SDK to be initialized. - * - * This method may be invoked either at SDK initialization time or on-demand when - * `requestRewardedVideoWithCustomEventInfo:` is invoked. - * - * The default implementation of this method does nothing. Subclasses must override this method and implement - * code to initialize the underlying SDK here. - * - * This method may be called multiple times during the lifetime of the app. As such - * it is recommended that the implementation is encapsulated by a `dispatch_once` - * block. - * - * @param parameters A dictionary containing any SDK-specific information needed for initialization, - * such as app IDs. - */ -- (void)initializeSdkWithParameters:(NSDictionary *)parameters; - -/** - * Called when the MoPub SDK requires a new rewarded video ad. - * - * When the MoPub SDK receives a response indicating it should load a custom event, it will send - * this message to your custom event class. Your implementation of this method should load an - * rewarded video ad from a third-party ad network. It must also notify the - * `MPRewardedVideoCustomEventDelegate` of certain lifecycle events. - * - * The default implementation of this method does nothing. Subclasses must override this method and implement code to load a rewarded video here. - * - * **Important**: The application may provide a mediation settings object containing properties that you should use to configure how you use - * the ad network's APIs. Call `[-mediationSettingsForClass:]([MPRewardedVideoCustomEventDelegate mediationSettingsForClass:])` - * specifying a specific class that your custom event uses to retrieve the mediation settings object if it exists. You define - * the mediation settings class and the properties it supports for your custom event. - * - * @param info A dictionary containing additional custom data associated with a given custom event - * request. This data is configurable on the MoPub website, and may be used to pass dynamic information, such as publisher IDs. - */ -- (void)requestRewardedVideoWithCustomEventInfo:(NSDictionary *)info; - -/** - * Called when the MoPub SDK requires a new rewarded video ad. - * - * When the MoPub SDK receives a response indicating it should load a custom event, it will send - * this message to your custom event class. Your implementation of this method should load an - * rewarded video ad from a third-party ad network. It must also notify the - * `MPRewardedVideoCustomEventDelegate` of certain lifecycle events. - * - * The default implementation of this method does nothing. Subclasses must override this method and implement code to load a rewarded video here. - * - * **Important**: The application may provide a mediation settings object containing properties that you should use to configure how you use - * the ad network's APIs. Call `[-mediationSettingsForClass:]([MPRewardedVideoCustomEventDelegate mediationSettingsForClass:])` - * specifying a specific class that your custom event uses to retrieve the mediation settings object if it exists. You define - * the mediation settings class and the properties it supports for your custom event. - * - * @param info A dictionary containing additional custom data associated with a given custom event - * request. This data is configurable on the MoPub website, and may be used to pass dynamic information, such as publisher IDs. - * @param adMarkup An optional ad markup to use. - */ -- (void)requestRewardedVideoWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup; - -/** - * Called when the MoPubSDK wants to know if an ad is currently available for the ad network. - * - * This call is typically invoked when the application wants to check whether an ad unit has an ad ready to display. - * - * Subclasses must override this method and implement coheck whether or not a rewarded vidoe ad is available for presentation. - * - */ -- (BOOL)hasAdAvailable; - -/** - * Called when the rewarded video should be displayed. - * - * This message is sent sometime after a rewarded video has been successfully loaded, as a result - * of your code calling `-[MPRewardedVideo presentRewardedVideoAdForAdUnitID:fromViewController:]`. Your implementation - * of this method should present the rewarded video ad from the specified view controller. - * - * The default implementation of this method does nothing. Subclasses must override this method and implement code to display a rewarded video here. - * - * If you decide to [opt out of automatic impression tracking](enableAutomaticImpressionAndClickTracking), you should place your - * manual calls to [-trackImpression]([MPRewardedVideoCustomEventDelegate trackImpression]) in this method to ensure correct metrics. - * - * @param viewController The controller to use to present the rewarded video modally. - */ -- (void)presentRewardedVideoFromViewController:(UIViewController *)viewController; - -/** @name Impression and Click Tracking */ - -/** - * Override to opt out of automatic impression and click tracking. - * - * By default, the MPRewardedVideoCustomEventDelegate will automatically record impressions and clicks in - * response to the appropriate callbacks. You may override this behavior by implementing this method - * to return `NO`. - * - * @warning **Important**: If you do this, you are responsible for calling the `[-trackImpression]([MPRewardedVideoCustomEventDelegate trackImpression])` and - * `[-trackClick]([MPRewardedVideoCustomEventDelegate trackClick])` methods on the custom event delegate. Additionally, you should make sure that these - * methods are only called **once** per ad. - */ -- (BOOL)enableAutomaticImpressionAndClickTracking; - -/** - * Override this method to handle when an ad was played for this custom event's network, but under a different ad unit ID. - * - * Due to the way ad mediation works, two ad units may load the same ad network for displaying ads. When one ad unit plays - * an ad, the other ad unit may need to update its state and notify the application an ad may no longer be available as it - * may have already played. If an ad becomes unavailable for this custom event, call - * `[-rewardedVideoDidExpireForCustomEvent:]([MPRewardedVideoCustomEventDelegate rewardedVideoDidExpireForCustomEvent:])` - * to notify the application that an ad is no longer available. - * - * This method will only be called if your custom event has reported that an ad had successfully loaded. The default implementation of this method does nothing. - * Subclasses must override this method and implement code to handle when the custom event is no longer needed by the rewarded video system. - */ -- (void)handleAdPlayedForCustomEventNetwork; - -/** - * Override this method to handle when the custom event is no longer needed by the rewarded video system. - * - * This method is called once the rewarded video system no longer references your custom event. This method - * is provided as you may have a centralized object holding onto this custom event. If that is the case and your - * centralized object no longer needs the custom event, then you should remove the custom event from the centralized - * object in this method causing the custom event to deallocate. See `MPAdColonyRewardedVideoCustomEvent` for an - * example of how and why this method is used. - * - * Implementation of this method is not necessary if you do not hold any extra references to it. `-dealloc` will still - * be called. However, it is expected you will need to override this method to prevent memory leaks. It is safe to override with nothing - * if you believe you will not leak memory. - */ -- (void)handleCustomEventInvalidated; - -@end - -@protocol MPRewardedVideoCustomEventDelegate - -/** @name Rewarded Video Ad Mediation Settings */ - -/** - * Call this method to retrieve a mediation settings object (if one is provided by the application) for this instance - * of your ad. - * - * @param aClass The specific mediation settings class your custom event uses to configure itself for its ad network. - */ -- (id)instanceMediationSettingsForClass:(Class)aClass; - -/** @name Rewarded Video Ad Event Callbacks - Fetching Ads */ - -/** - * Call this method immediately after an ad loads succesfully. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: Your custom event subclass **must** call this method when it successfully loads an ad. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - */ -- (void)rewardedVideoDidLoadAdForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent; - -/** - * Call this method immediately after an ad fails to load. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @param error (*optional*) You may pass an error describing the failure. - * - * @warning **Important**: Your custom event subclass **must** call this method when it fails to load an ad. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - */ -- (void)rewardedVideoDidFailToLoadAdForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent error:(NSError *)error; - -/** - * Call this method if a previously loaded rewarded video should no longer be eligible for presentation. - * - * Some third-party networks will mark rewarded videos as expired (indicating they should not be - * presented) *after* they have loaded. You may use this method to inform the MoPub SDK that a - * previously loaded rewarded video has expired and that a new rewarded video should be obtained. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - */ -- (void)rewardedVideoDidExpireForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent; - -/** - * Call this method when the application has attempted to play a rewarded video and it cannot be played. - * - * A common usage of this delegate method is when the application tries to play an ad and an ad is not available for play. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @param error The error describing why the video couldn't play. - */ -- (void)rewardedVideoDidFailToPlayForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent error:(NSError *)error; - -/** - * Call this method when an ad is about to appear. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: Your custom event subclass **must** call this method when it is about to present the rewarded video. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - */ -- (void)rewardedVideoWillAppearForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent; - -/** - * Call this method when an ad has finished appearing. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: Your custom event subclass **must** call this method when it is finished presenting the rewarded video. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - * - * **Note**: If it is not possible to know when the rewarded video *finished* appearing, you should call - * this immediately after calling `-rewardedVideoWillAppearForCustomEvent:`. - */ -- (void)rewardedVideoDidAppearForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent; - -/** - * Call this method when an ad is about to disappear. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: Your custom event subclass **must** call this method when it is about to dismiss the rewarded video. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - */ -- (void)rewardedVideoWillDisappearForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent; - -/** - * Call this method when an ad has finished disappearing. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @warning **Important**: Your custom event subclass **must** call this method when it is finished with dismissing the rewarded video. - * Failure to do so will disrupt the mediation waterfall and cause future ad requests to stall. - * - * **Note**: if it is not possible to know when the rewarded video *finished* dismissing, you should call - * this immediately after calling `-rewardedVideoWillDisappearForCustomEvent:`. - */ -- (void)rewardedVideoDidDisappearForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent; - -/** - * Call this method when the rewarded video ad will cause the user to leave the application. - * - * For example, the user may have tapped on the video which redirects the user to the App Store or Safari. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - */ -- (void)rewardedVideoWillLeaveApplicationForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent; - -/** - * Call this method when the user taps on the rewarded video ad. - * - * This method is optional. When automatic click and impression tracking are enabled (the default) - * this method will track a click (the click is guaranteed to only be tracked once per ad). - * - * **Note**: some third-party networks provide a "will leave application" callback instead of/in - * addition to a "user did click" callback. You should call this method in response to either of - * those callbacks (since leaving the application is generally an indicator of a user tap). - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - */ -- (void)rewardedVideoDidReceiveTapEventForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent; - -/** - * Call this method when the user should be rewarded for watching the rewarded video. - * - * @param customEvent You should pass `self` to allow the MoPub SDK to associate this event with the correct - * instance of your custom event. - * - * @param reward The reward object that contains the currency type as well as the amount that should be rewarded to - * the user. If the concept of currency type doesn't exist for your ad network, set the reward's currency type as - * kMPRewardedVideoRewardCurrencyTypeUnspecified. - */ -- (void)rewardedVideoShouldRewardUserForCustomEvent:(MPRewardedVideoCustomEvent *)customEvent reward:(MPRewardedVideoReward *)reward; - -/** - * Call this method to get the customer ID associated with this custom event. - * - * @return The user's customer ID. - */ -- (NSString *)customerIdForRewardedVideoCustomEvent:(MPRewardedVideoCustomEvent *)customEvent; - -/** @name Impression and Click Tracking */ - -/** - * Call this method to track an impression. - * - * @warning **Important**: You should **only** call this method if you have [opted out of automatic click and impression tracking]([MPRewardedVideoCustomEvent enableAutomaticImpressionAndClickTracking]). - * By default the MoPub SDK automatically tracks impressions. - */ -- (void)trackImpression; - -/** - * Call this method to track a click. - * - * @warning **Important**: You should **only** call this method if you have [opted out of automatic click and impression tracking]([MPRewardedVideoCustomEvent enableAutomaticImpressionAndClickTracking]). - * By default the MoPub SDK automatically tracks clicks. - */ -- (void)trackClick; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.m deleted file mode 100644 index b65f9bff6..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoCustomEvent.m +++ /dev/null @@ -1,66 +0,0 @@ -// -// MPRewardedVideoCustomEvent.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideoCustomEvent.h" -#import - -@implementation MPRewardedVideoCustomEvent - -- (void)initializeSdkWithParameters:(NSDictionary *)parameters -{ - // The default implementation of this method does nothing. Subclasses must override this method - // and implement code to initialize the underlying SDK here. -} - -- (void)requestRewardedVideoWithCustomEventInfo:(NSDictionary *)info -{ - // The default implementation of this method does nothing. Subclasses must override this method - // and implement code to load a rewarded video here. -} - -- (void)requestRewardedVideoWithCustomEventInfo:(NSDictionary *)info adMarkup:(NSString *)adMarkup -{ - // By default, the original requestRewardedVideoWithCustomEventInfo: method will be called. - // Otherwise subclasses must override this method and implement code to load a banner here. - [self requestRewardedVideoWithCustomEventInfo:info]; -} - -- (BOOL)hasAdAvailable -{ - // Subclasses must override this method and implement coheck whether or not a rewarded vidoe ad - // is available for presentation. - - return NO; -} - -- (void)presentRewardedVideoFromViewController:(UIViewController *)viewController -{ - // The default implementation of this method does nothing. Subclasses must override this method - // and implement code to display a rewarded video here. -} - -- (BOOL)enableAutomaticImpressionAndClickTracking -{ - // Subclasses may override this method to return NO to perform impression and click tracking - // manually. - return YES; -} - -- (void)handleAdPlayedForCustomEventNetwork -{ - // The default implementation of this method does nothing. Subclasses must override this method - // and implement code to handle when another ad unit plays an ad for the same ad network this custom event is representing. -} - -- (void)handleCustomEventInvalidated -{ - // The default implementation of this method does nothing. Subclasses must override this method - // and implement code to handle when the custom event is no longer needed by the rewarded video system. -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoError.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoError.h deleted file mode 100644 index c2ec0c663..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoError.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MPRewardedVideoError.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -typedef enum { - MPRewardedVideoAdErrorUnknown = -1, - - MPRewardedVideoAdErrorTimeout = -1000, - MPRewardedVideoAdErrorAdUnitWarmingUp = -1001, - MPRewardedVideoAdErrorNoAdsAvailable = -1100, - MPRewardedVideoAdErrorInvalidCustomEvent = -1200, - MPRewardedVideoAdErrorMismatchingAdTypes = -1300, - MPRewardedVideoAdErrorAdAlreadyPlayed = -1400, - MPRewardedVideoAdErrorNoAdReady = -1401, - MPRewardedVideoAdErrorInvalidAdUnitID = -1500, - MPRewardedVideoAdErrorInvalidReward = -1600, - MPRewardedVideoAdErrorNoRewardSelected = -1601, -} MPRewardedVideoErrorCode; - -extern NSString * const MoPubRewardedVideoAdsSDKDomain; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoError.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoError.m deleted file mode 100644 index 5b683f409..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoError.m +++ /dev/null @@ -1,11 +0,0 @@ -// -// MPRewardedVideoError.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideoError.h" - -NSString * const MoPubRewardedVideoAdsSDKDomain = @"MoPubRewardedVideoAdsSDKDomain"; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoReward.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoReward.h deleted file mode 100644 index aa61a8e40..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoReward.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// MPRewardedVideoReward.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -/** - * A constant that indicates that no currency type was specified with the reward. - */ -extern NSString *const kMPRewardedVideoRewardCurrencyTypeUnspecified; - -/** - * A constant that indicates that no currency amount was specified with the reward. - */ -extern NSInteger const kMPRewardedVideoRewardCurrencyAmountUnspecified; - - -/** - * `MPRewardedVideoReward` contains all the information needed to reward the user for watching - * a rewarded video ad. The class provides a currency amount and currency type. - */ - -@interface MPRewardedVideoReward : NSObject - -/** - * The type of currency that should be rewarded to the user. - * - * An undefined currency type should be specified as `kMPRewardedVideoRewardCurrencyTypeUnspecified`. - */ -@property (nonatomic, readonly) NSString *currencyType; - -/** - * The amount of currency to reward to the user. - * - * An undefined currency amount should be specified as `kMPRewardedVideoRewardCurrencyAmountUnspecified` - * wrapped as an NSNumber. - */ -@property (nonatomic, readonly) NSNumber *amount; - -/** - * Initializes the object with an undefined currency type (`kMPRewardedVideoRewardCurrencyTypeUnspecified`) and - * the amount passed in. - * - * @param amount The amount of currency the user is receiving. - */ -- (instancetype)initWithCurrencyAmount:(NSNumber *)amount; - -/** - * Initializes the object's properties with the currencyType and amount. - * - * @param currencyType The type of currency the user is receiving. - * @param amount The amount of currency the user is receiving. - */ -- (instancetype)initWithCurrencyType:(NSString *)currencyType amount:(NSNumber *)amount; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoReward.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoReward.m deleted file mode 100644 index 0806cad22..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/RewardedVideo/MPRewardedVideoReward.m +++ /dev/null @@ -1,31 +0,0 @@ -// -// MPRewardedVideoReward.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPRewardedVideoReward.h" - -NSString *const kMPRewardedVideoRewardCurrencyTypeUnspecified = @"MPMoPubRewardedVideoRewardCurrencyTypeUnspecified"; -NSInteger const kMPRewardedVideoRewardCurrencyAmountUnspecified = 0; - -@implementation MPRewardedVideoReward - -- (instancetype)initWithCurrencyType:(NSString *)currencyType amount:(NSNumber *)amount -{ - if (self = [super init]) { - _currencyType = currencyType; - _amount = amount; - } - - return self; -} - -- (instancetype)initWithCurrencyAmount:(NSNumber *)amount -{ - return [self initWithCurrencyType:kMPRewardedVideoRewardCurrencyTypeUnspecified amount:amount]; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.h deleted file mode 100644 index 5be8efe15..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MPViewabilityAdapterAvid.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#if __has_include() -#import -#elif __has_include() -#import -#else -#import "MPViewabilityAdapter.h" -#endif - -__attribute__((weak_import)) @interface MPViewabilityAdapterAvid : NSObject -@property (nonatomic, readonly) BOOL isTracking; - -- (instancetype)initWithAdView:(UIView *)webView isVideo:(BOOL)isVideo startTrackingImmediately:(BOOL)startTracking; -- (void)startTracking; -- (void)stopTracking; -- (void)registerFriendlyObstructionView:(UIView *)view; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.m deleted file mode 100644 index ed8306fac..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MPViewabilityAdapterAvid.m +++ /dev/null @@ -1,91 +0,0 @@ -// -// MPViewabilityAdapterAvid.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#if __has_include("MoPub.h") -#import "MoPub.h" -#import "MPLogging.h" -#endif - -#import "MPViewabilityAdapterAvid.h" - -#if __has_include("MoPub_Avid.h") -#import "MoPub_Avid.h" -#define __HAS_AVID_LIB_ -#endif - -@interface MPViewabilityAdapterAvid() -@property (nonatomic, readwrite) BOOL isTracking; - -#ifdef __HAS_AVID_LIB_ -@property (nonatomic, strong) MoPub_AbstractAvidAdSession * avidAdSession; -#endif -@end - -@implementation MPViewabilityAdapterAvid - -- (instancetype)initWithAdView:(UIView *)webView isVideo:(BOOL)isVideo startTrackingImmediately:(BOOL)startTracking { - if (self = [super init]) { - _isTracking = NO; - -#ifdef __HAS_AVID_LIB_ - MoPub_ExternalAvidAdSessionContext * avidAdSessionContext = [MoPub_ExternalAvidAdSessionContext contextWithPartnerVersion:[[MoPub sharedInstance] version] isDeferred:!startTracking]; - if (isVideo) { - _avidAdSession = [MoPub_AvidAdSessionManager startAvidVideoAdSessionWithContext:avidAdSessionContext]; - } - else { - _avidAdSession = [MoPub_AvidAdSessionManager startAvidDisplayAdSessionWithContext:avidAdSessionContext]; - } - - [_avidAdSession registerAdView:webView]; - - if (startTracking) { - _isTracking = YES; - MPLogInfo(@"[Viewability] IAS tracking started"); - } -#endif - } - - return self; -} - -- (void)startTracking { -#ifdef __HAS_AVID_LIB_ - // Only start tracking if: - // 1. Avid is not already tracking - // 2. Avid session is valid - if (!self.isTracking && self.avidAdSession != nil) { - [self.avidAdSession.avidDeferredAdSessionListener recordReadyEvent]; - self.isTracking = YES; - MPLogInfo(@"[Viewability] IAS tracking started"); - } -#endif -} - -- (void)stopTracking { -#ifdef __HAS_AVID_LIB_ - // Only stop tracking if: - // 1. IAS is already tracking - if (self.isTracking) { - [self.avidAdSession endSession]; - if (self.avidAdSession) { - MPLogInfo(@"[Viewability] IAS tracking stopped"); - } - } - - // Mark IAS as not tracking - self.isTracking = NO; -#endif -} - -- (void)registerFriendlyObstructionView:(UIView *)view { -#ifdef __HAS_AVID_LIB_ - [self.avidAdSession registerFriendlyObstruction:view]; -#endif -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AbstractAvidAdSession.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AbstractAvidAdSession.h deleted file mode 100644 index b7d2088d6..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AbstractAvidAdSession.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// AbstractAvidAdSession.h -// AppVerificationLibrary -// -// Created by Daria Sukhonosova on 05/04/16. -// Copyright © 2016 Integral. All rights reserved. -// - -#import -#import "MoPub_AvidDeferredAdSessionListener.h" - -@class UIView; - -@interface MoPub_AbstractAvidAdSession : NSObject - -@property(nonatomic, readonly) NSString *avidAdSessionId; -@property(nonatomic, readonly) id avidDeferredAdSessionListener; - -- (void)registerAdView:(UIView *)view; -- (void)unregisterAdView:(UIView *)view; -- (void)endSession; -- (void)registerFriendlyObstruction:(UIView *)friendlyObstruction; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AbstractAvidManagedAdSession.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AbstractAvidManagedAdSession.h deleted file mode 100644 index 072c4556e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AbstractAvidManagedAdSession.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// Created by Daria Sukhonosova on 11/05/16. -// Copyright (c) 2016 Integral. All rights reserved. -// - -#import -#import "MoPub_AbstractAvidAdSession.h" - -@interface MoPub_AbstractAvidManagedAdSession : MoPub_AbstractAvidAdSession - -- (void)injectJavaScriptResource:(NSString *)javaScriptResource; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_Avid.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_Avid.h deleted file mode 100644 index 5b616eaa2..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_Avid.h +++ /dev/null @@ -1,10 +0,0 @@ -#import "MoPub_AvidAdSessionManager.h" -#import "MoPub_AbstractAvidAdSession.h" -#import "MoPub_AbstractAvidManagedAdSession.h" -#import "MoPub_AvidDisplayAdSession.h" -#import "MoPub_AvidVideoAdSession.h" -#import "MoPub_AvidManagedDisplayAdSession.h" -#import "MoPub_AvidManagedVideoAdSession.h" -#import "MoPub_AvidVideoPlaybackListener.h" -#import "MoPub_ExternalAvidAdSessionContext.h" -#import "MoPub_AvidDeferredAdSessionListener.h" diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidAdSessionManager.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidAdSessionManager.h deleted file mode 100644 index 2793fe3b4..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidAdSessionManager.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// AvidAdSessionManager.h -// AppVerificationLibrary -// -// Created by Daria Sukhonosova on 05/04/16. -// Copyright © 2016 Integral. All rights reserved. -// - -#import -#import "MoPub_AvidDisplayAdSession.h" -#import "MoPub_AvidManagedDisplayAdSession.h" -#import "MoPub_AvidVideoAdSession.h" -#import "MoPub_AvidManagedVideoAdSession.h" -#import "MoPub_ExternalAvidAdSessionContext.h" - -@interface MoPub_AvidAdSessionManager : NSObject - -+ (NSString *)version; -+ (NSString *)releaseDate; - -+ (MoPub_AvidVideoAdSession *)startAvidVideoAdSessionWithContext:(MoPub_ExternalAvidAdSessionContext *)avidAdSessionContext; -+ (MoPub_AvidDisplayAdSession *)startAvidDisplayAdSessionWithContext:(MoPub_ExternalAvidAdSessionContext *)avidAdSessionContext; -+ (MoPub_AvidManagedVideoAdSession *)startAvidManagedVideoAdSessionWithContext:(MoPub_ExternalAvidAdSessionContext *)avidAdSessionContext; -+ (MoPub_AvidManagedDisplayAdSession *)startAvidManagedDisplayAdSessionWithContext:(MoPub_ExternalAvidAdSessionContext *)avidAdSessionContext; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidDeferredAdSessionListener.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidDeferredAdSessionListener.h deleted file mode 100644 index c300c426e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidDeferredAdSessionListener.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// AvidDeferredAdSessionListener.h -// AppVerificationLibrary -// -// Created by Evgeniy Gubin on 22.06.16. -// Copyright © 2016 Integral. All rights reserved. -// - -#import - -@protocol MoPub_AvidDeferredAdSessionListener - -- (void)recordReadyEvent; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidDisplayAdSession.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidDisplayAdSession.h deleted file mode 100644 index 65548cd8d..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidDisplayAdSession.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// AvidDisplayAdSession.h -// AppVerificationLibrary -// -// Created by Daria Sukhonosova on 05/04/16. -// Copyright © 2016 Integral. All rights reserved. -// - -#import "MoPub_AbstractAvidAdSession.h" - -@interface MoPub_AvidDisplayAdSession : MoPub_AbstractAvidAdSession - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidManagedDisplayAdSession.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidManagedDisplayAdSession.h deleted file mode 100644 index 87b762a16..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidManagedDisplayAdSession.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// AvidManagedDisplayAdSession.h -// AppVerificationLibrary -// -// Created by Daria Sukhonosova on 05/04/16. -// Copyright © 2016 Integral. All rights reserved. -// - -#import "MoPub_AbstractAvidManagedAdSession.h" - -@interface MoPub_AvidManagedDisplayAdSession : MoPub_AbstractAvidManagedAdSession - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidManagedVideoAdSession.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidManagedVideoAdSession.h deleted file mode 100644 index 487873846..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidManagedVideoAdSession.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// AvidManagedVideoAdSession.h -// AppVerificationLibrary -// -// Created by Daria Sukhonosova on 05/04/16. -// Copyright © 2016 Integral. All rights reserved. -// - -#import "MoPub_AbstractAvidManagedAdSession.h" -#import "MoPub_AvidVideoPlaybackListener.h" - -@interface MoPub_AvidManagedVideoAdSession : MoPub_AbstractAvidManagedAdSession - -@property(nonatomic, readonly) id avidVideoPlaybackListener; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidVideoAdSession.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidVideoAdSession.h deleted file mode 100644 index bbd4a9548..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidVideoAdSession.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// AvidVideoAdSession.h -// AppVerificationLibrary -// -// Created by Evgeniy Gubin on 17.06.16. -// Copyright © 2016 Integral. All rights reserved. -// - -#import "MoPub_AbstractAvidAdSession.h" - -@interface MoPub_AvidVideoAdSession : MoPub_AbstractAvidAdSession - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidVideoPlaybackListener.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidVideoPlaybackListener.h deleted file mode 100644 index 887aaa6dd..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_AvidVideoPlaybackListener.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// AvidVideoPlaybackListener.h -// AppVerificationLibrary -// -// Created by Evgeniy Gubin on 22.06.16. -// Copyright © 2016 Integral. All rights reserved. -// - -#import - -@protocol MoPub_AvidVideoPlaybackListener - -- (void)recordAdImpressionEvent; -- (void)recordAdStartedEvent; -- (void)recordAdLoadedEvent; -- (void)recordAdVideoStartEvent; -- (void)recordAdStoppedEvent; -- (void)recordAdCompleteEvent; -- (void)recordAdClickThruEvent; -- (void)recordAdVideoFirstQuartileEvent; -- (void)recordAdVideoMidpointEvent; -- (void)recordAdVideoThirdQuartileEvent; -- (void)recordAdPausedEvent; -- (void)recordAdPlayingEvent; -- (void)recordAdExpandedChangeEvent; -- (void)recordAdUserMinimizeEvent; -- (void)recordAdUserAcceptInvitationEvent; -- (void)recordAdUserCloseEvent; -- (void)recordAdSkippedEvent; -- (void)recordAdVolumeChangeEvent:(NSInteger)volume; -- (void)recordAdEnteredFullscreenEvent; -- (void)recordAdExitedFullscreenEvent; -- (void)recordAdDurationChangeEvent:(NSString *)adDuration adRemainingTime:(NSString *)adRemainingTime; -- (void)recordAdErrorWithMessage:(NSString *)message; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_ExternalAvidAdSessionContext.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_ExternalAvidAdSessionContext.h deleted file mode 100644 index c09821c4e..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/MoPub_ExternalAvidAdSessionContext.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// ExternalAvidAdSessionContext.h -// AppVerificationLibrary -// -// Created by Daria Sukhonosova on 18/04/16. -// Copyright © 2016 Integral. All rights reserved. -// - -#import - -@interface MoPub_ExternalAvidAdSessionContext : NSObject - -@property(nonatomic, readonly) NSString *partnerVersion; -@property(nonatomic, readonly) BOOL isDeferred; - -+ (instancetype)contextWithPartnerVersion:(NSString *)partnerVersion; -+ (instancetype)contextWithPartnerVersion:(NSString *)partnerVersion isDeferred:(BOOL)isDeferred; - -- (instancetype)initWithPartnerVersion:(NSString *)partnerVersion; -- (instancetype)initWithPartnerVersion:(NSString *)partnerVersion isDeferred:(BOOL)isDeferred; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/libAvid-mopub-3.6.1.a b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/libAvid-mopub-3.6.1.a deleted file mode 100644 index 033b0d796..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/Avid/libAvid-mopub-3.6.1.a and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Headers b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Headers deleted file mode 120000 index a177d2a6b..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/MPUBMoatMobileAppKit b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/MPUBMoatMobileAppKit deleted file mode 120000 index 43a761f94..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/MPUBMoatMobileAppKit +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/MPUBMoatMobileAppKit \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatAnalytics.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatAnalytics.h deleted file mode 100644 index 16f43ed73..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatAnalytics.h +++ /dev/null @@ -1,33 +0,0 @@ -// -// MPUBMoatAnalytics.h -// MPUBMoatMobileAppKit -// -// Created by Moat on 6/2/16. -// Copyright © 2016 Moat. All rights reserved. -// - -#import -#import -#import "MPUBMoatWebTracker.h" -#import "MPUBMoatNativeDisplayTracker.h" -#import "MPUBMoatVideoTracker.h" - -@interface MPUBMoatOptions : NSObject - -@property BOOL locationServicesEnabled; -@property BOOL debugLoggingEnabled; -@property BOOL IDFACollectionEnabled; - -@end - -@interface MPUBMoatAnalytics : NSObject - -+ (instancetype)sharedInstance; - -- (void)start; - -- (void)startWithOptions:(MPUBMoatOptions *)options; - -- (void)prepareNativeDisplayTracking:(NSString *)partnerCode; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatBaseTracker.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatBaseTracker.h deleted file mode 100644 index 44d8dd7db..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatBaseTracker.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// MPUBMoatBaseTracker.h -// MPUBMoatMobileAppKit -// -// Created by Moat on 7/27/16. -// Copyright © 2016 Moat. All rights reserved. -// - -#import -#import - -@interface MPUBMoatBaseTracker : NSObject -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatMobileAppKit.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatMobileAppKit.h deleted file mode 100644 index 155b050a8..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatMobileAppKit.h +++ /dev/null @@ -1,14 +0,0 @@ -// -// MoatMobileAppKit.h -// MoatMobileAppKit -// -// Created by Moat on 12/31/14. -// Copyright © 2016 Moat. All rights reserved. -// - -#import -#import "MPUBMoatAnalytics.h" - -@interface MPUBMoatMobileAppKit : NSObject - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatNativeDisplayTracker.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatNativeDisplayTracker.h deleted file mode 100644 index cbb05d4f2..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatNativeDisplayTracker.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// Created by Moat on 2/24/15. -// Copyright © 2016 Moat. All rights reserved. -// -// This class is used to track native ads -- ads that are rendered using native UI elements rather than a WebView. -// The class creates an internally managed WebView instance, loads our JavaScript tag into it, and then dispatches -// viewability-related signals (pertaining to the native ad it is tracking) into that WebView. - -#import -#import "MPUBMoatBaseTracker.h" - -@interface MPUBMoatNativeDisplayTracker : MPUBMoatBaseTracker - -// Use this to track ads that can't run JavaScript. This method accepts any UIView. -// Web-based ads, including "opaque" web containers (Google's DFPBannerView, etc.) are best tracked using MoatWebTracker instead. -+ (MPUBMoatNativeDisplayTracker *)trackerWithAdView:(UIView *)adView withAdIds:(NSDictionary *)adIds; - -- (void)startTracking; - -// Call to stop tracking the current ad. -- (void)stopTracking; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatVideoTracker.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatVideoTracker.h deleted file mode 100644 index fb4c4209c..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatVideoTracker.h +++ /dev/null @@ -1,34 +0,0 @@ -// -// MoatVideoTracker.h -// MoatMobileAppKit -// -// Created by Moat on 2/20/15. -// Copyright © 2016 Moat. All rights reserved. -// -// This class is used for tracking AVPlayer and MPMoviePlayerController based ads. - -#import -#import -#import -#import - -#import "MPUBMoatBaseTracker.h" - -@interface MPUBMoatVideoTracker : MPUBMoatBaseTracker - -+ (MPUBMoatVideoTracker *)trackerWithPartnerCode:(NSString *)partnerCode; - -- (bool)trackVideoAd:(NSDictionary *)adIds - usingMPMoviePlayer:(MPMoviePlayerController *)player; - -- (bool)trackVideoAd:(NSDictionary *)adIds - usingAVMoviePlayer:(AVPlayer *)player - withLayer:(CALayer *)layer - withContainingView:(UIView *)view; - -- (void)changeTargetLayer:(CALayer *)newLayer - withContainingView:(UIView *)view; - -- (void)stopTracking; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatWebTracker.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatWebTracker.h deleted file mode 100644 index 3f1c4a5e8..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/Headers/MPUBMoatWebTracker.h +++ /dev/null @@ -1,24 +0,0 @@ -// -// MPUBMoatWebTracker.h -// MPUBMoatMobileAppKit -// -// Created by Moat on 6/2/16. -// Copyright © 2016 Moat. All rights reserved. -// - -#import -#import -#import "MPUBMoatBaseTracker.h" - -@interface MPUBMoatWebTracker : MPUBMoatBaseTracker - -+ (MPUBMoatWebTracker *)trackerWithWebComponent:(UIView *)webViewOrWebViewContainer; - -// Use this to track hybrid, two-view ads that consist both of a native UIView and a web-based component. -+ (MPUBMoatWebTracker *)trackerWithAdView:(UIView *)adView withWebComponent:(UIView *)webViewOrWebViewContainer; - -- (bool)startTracking; - -- (void)stopTracking; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/MPUBMoatMobileAppKit b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/MPUBMoatMobileAppKit deleted file mode 100644 index 132ab8ee5..000000000 Binary files a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/A/MPUBMoatMobileAppKit and /dev/null differ diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/Current b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/Current deleted file mode 120000 index 8c7e5a667..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPUBMoatMobileAppKit.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.h deleted file mode 100644 index 811f322e7..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// MPViewabilityAdapterMoat.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#if __has_include() -#import -#elif __has_include() -#import -#else -#import "MPViewabilityAdapter.h" -#endif - -__attribute__((weak_import)) @interface MPViewabilityAdapterMoat : NSObject -@property (nonatomic, readonly) BOOL isTracking; - -- (instancetype)initWithAdView:(UIView *)webView isVideo:(BOOL)isVideo startTrackingImmediately:(BOOL)startTracking; -- (void)startTracking; -- (void)stopTracking; -- (void)registerFriendlyObstructionView:(UIView *)view; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.m deleted file mode 100644 index 18f34a421..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MOAT/MPViewabilityAdapterMoat.m +++ /dev/null @@ -1,126 +0,0 @@ -// -// MPViewabilityAdapterMoat.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#if __has_include("MoPub.h") -#import "MPLogging.h" -#endif - -#import "MPViewabilityAdapterMoat.h" -#import - -#if __has_include() -#import -#define __HAS_MOAT_FRAMEWORK_ -#endif - -#ifdef __HAS_MOAT_FRAMEWORK_ -static NSString *const kMOATSendAdStoppedJavascript = @"MoTracker.sendMoatAdStoppedEvent()"; -#endif - -@interface MPViewabilityAdapterMoat() -@property (nonatomic, readwrite) BOOL isTracking; - -#ifdef __HAS_MOAT_FRAMEWORK_ -@property (nonatomic, strong) MPUBMoatWebTracker * moatWebTracker; -@property (nonatomic, strong) UIView *webView; -@property (nonatomic, assign) BOOL isVideo; -#endif -@end - -@implementation MPViewabilityAdapterMoat - -- (instancetype)initWithAdView:(UIView *)webView isVideo:(BOOL)isVideo startTrackingImmediately:(BOOL)startTracking { - if (self = [super init]) { - _isTracking = NO; - -#ifdef __HAS_MOAT_FRAMEWORK_ - static dispatch_once_t sMoatSharedInstanceStarted; - dispatch_once(&sMoatSharedInstanceStarted, ^{ - // explicitly disable location tracking and IDFA tracking - MPUBMoatOptions *options = [[MPUBMoatOptions alloc] init]; - options.locationServicesEnabled = NO; - options.IDFACollectionEnabled = NO; - options.debugLoggingEnabled = NO; - - // start with options - [[MPUBMoatAnalytics sharedInstance] startWithOptions:options]; - }); - - _moatWebTracker = [MPUBMoatWebTracker trackerWithWebComponent:webView]; - _webView = webView; - _isVideo = isVideo; - if (_moatWebTracker == nil) { - NSString * adViewClassName = NSStringFromClass([webView class]); - MPLogError(@"Couldn't attach Moat to %@.", adViewClassName); - } - - if (startTracking) { - [_moatWebTracker startTracking]; - _isTracking = YES; - MPLogInfo(@"[Viewability] MOAT tracking started"); - } -#endif - } - - return self; -} - -- (void)startTracking { -#ifdef __HAS_MOAT_FRAMEWORK_ - // Only start tracking if: - // 1. Moat is not already tracking - // 2. Moat is allocated - if (!self.isTracking && self.moatWebTracker != nil) { - [self.moatWebTracker startTracking]; - self.isTracking = YES; - MPLogInfo(@"[Viewability] MOAT tracking started"); - } -#endif -} - -- (void)stopTracking { -#ifdef __HAS_MOAT_FRAMEWORK_ - // Only stop tracking if: - // 1. Moat is currently tracking - if (self.isTracking) { - void (^moatEndTrackingBlock)(void) = ^{ - [self.moatWebTracker stopTracking]; - if (self.moatWebTracker) { - MPLogInfo(@"[Viewability] MOAT tracking stopped"); - } - }; - // If video, as a safeguard, dispatch `AdStopped` event before we stop tracking. - // (MoTracker makes sure AdStopped is only dispatched once no matter how many times - // this function is called) - if (self.isVideo) { - if ([self.webView isKindOfClass:[WKWebView class]]) { - WKWebView *typedWebView = (WKWebView *)self.webView; - [typedWebView evaluateJavaScript:kMOATSendAdStoppedJavascript - completionHandler:^(id result, NSError *error){ - moatEndTrackingBlock(); - }]; - } else if ([self.webView isKindOfClass:[UIWebView class]]) { - UIWebView *typedWebView = (UIWebView *)self.webView; - [typedWebView stringByEvaluatingJavaScriptFromString:kMOATSendAdStoppedJavascript]; - moatEndTrackingBlock(); - } - } else { - moatEndTrackingBlock(); - } - - // Mark Moat as not tracking - self.isTracking = NO; - } -#endif -} - -- (void)registerFriendlyObstructionView:(UIView *)view { - // Nothing to do -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityAdapter.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityAdapter.h deleted file mode 100644 index f3b75c035..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityAdapter.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPViewabilityAdapter.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import - -@protocol MPViewabilityAdapter -@property (nonatomic, readonly) BOOL isTracking; - -- (instancetype)initWithAdView:(UIView *)webView isVideo:(BOOL)isVideo startTrackingImmediately:(BOOL)startTracking; -- (void)startTracking; -- (void)stopTracking; -- (void)registerFriendlyObstructionView:(UIView *)view; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityOption.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityOption.h deleted file mode 100644 index 34bf3b7b7..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityOption.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// MPViewabilityOption.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -/** - * Available viewability options - * @remark Any changes made to this bitmask should also be reflected in `MPViewabilityTracker` - * `+ (void)initialize` method. - */ -typedef NS_OPTIONS(NSInteger, MPViewabilityOption) { - MPViewabilityOptionNone = 0, - MPViewabilityOptionIAS = 1 << 0, - MPViewabilityOptionMoat = 1 << 1, - MPViewabilityOptionAll = ((MPViewabilityOptionMoat << 1) - 1) -}; diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityTracker.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityTracker.h deleted file mode 100644 index a8f551d21..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityTracker.h +++ /dev/null @@ -1,77 +0,0 @@ -// -// MPViewabilityTracker.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import -#import "MPViewabilityOption.h" - -@class MPWebView; - -/** - * Notification that is fired when at least one viewability vendor is disabled. - */ -extern NSString *const kDisableViewabilityTrackerNotification; - -/** - * Key for accessing the disabled viewability vendors bitmask in the `userInfo` of - * `kDisableViewabilityTrackerNotification`. - */ -extern NSString *const kDisabledViewabilityTrackers; - -/** - * Provides viewability tracking of an ad view. - * Tracking will automatically be stopped upon deallocation. - */ -@interface MPViewabilityTracker : NSObject - -/** - * Returns a bit mask indicating which viewability libraries are included and enabled. A value - * of `MPViewabilityOptionNone` represents that no viewability vendors are enabled or included. - */ -+ (MPViewabilityOption)enabledViewabilityVendors; - -/** - * Disables viewability tracking for the specified vendors for the duration of the session. - * @remark Viewability cannot be re-enabled for a vendor once it has been disabled. - * @param vendors Vendors to stop viewability tracking - */ -+ (void)disableViewability:(MPViewabilityOption)vendors; - -/** - * Initializes a viewability tracker that tracks ads rendered by a web view. - * @param webView The ad web view that should be tracked. - * @param isVideo Flag indicating that the ad being tracked is a video. - * @param startTracking Flag indicating that viewability tracking should start immediately. - * @return A viewability tracker instance. - */ -- (instancetype)initWithAdView:(MPWebView *)webView - isVideo:(BOOL)isVideo - startTrackingImmediately:(BOOL)startTracking NS_DESIGNATED_INITIALIZER; - -/** - * Starts viewability tracking. This will do nothing if it is currently tracking. - */ -- (void)startTracking; - -/** - * Stops viewability tracking. This will do nothing if it is not currently tracking. - */ -- (void)stopTracking; - -/** - * Use this method to register views that appear over the web view but that are supposed to be present (e.g., - * interstitial close buttons) - * @param view The view obstructing the ad view - */ -- (void)registerFriendlyObstructionView:(UIView *)view; - -/** - * `init` is not available. - */ -- (instancetype)init __attribute__((unavailable("init not available"))); - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityTracker.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityTracker.m deleted file mode 100644 index 1516cfcff..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPViewabilityTracker.m +++ /dev/null @@ -1,185 +0,0 @@ -// -// MPViewabilityTracker.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MoPub.h" -#import "MPLogging.h" -#import "MPViewabilityAdapter.h" -#import "MPViewabilityTracker.h" -#import "MPWebView+Viewability.h" - -/** - * Macro that queries if a bitmask value is currently in the given bitmask - * Examples: - * bitmask = 0x0110 - * value_1 = 0x0001 - * value_2 = 0x0100 - * value_3 = 0x0111 - * - * OptionsHasValue(bitmask, value_1) // returns NO - * OptionsHasValue(bitmask, value_2) // returns YES - * OptionsHasValue(bitmask, value_3) // returns NO - */ -#define OptionsHasValue(options, value) (((options) & (value)) == (value)) - -static MPViewabilityOption sEnabledViewabilityVendors = 0; -static NSDictionary * sSupportedAdapters = nil; -NSString *const kDisableViewabilityTrackerNotification = @"com.mopub.mopub-ios-sdk.viewability.disabletracking"; -NSString *const kDisabledViewabilityTrackers = @"disableViewabilityTrackers"; - -@interface MPViewabilityTracker() -// Map of `MPViewabilityOption`: `id` -@property (nonatomic, strong) NSDictionary> * trackers; -@end - -@implementation MPViewabilityTracker - -+ (void)initialize { - if (self == [MPViewabilityTracker class]) { - // Initialize the current mapping of viewability vendors to their - // associated adapter class names. - // This map should be updated when there are changes to `MPViewabilityOption`. - sSupportedAdapters = @{ @(MPViewabilityOptionMoat): @"MPViewabilityAdapterMoat", - @(MPViewabilityOptionIAS): @"MPViewabilityAdapterAvid", - }; - - // Initial population of the enabled viewability vendors. - for (NSInteger index = 1; index < MPViewabilityOptionAll; index = index << 1) { - NSString * adapterClassName = sSupportedAdapters[@(index)]; - if (NSClassFromString(adapterClassName)) { - sEnabledViewabilityVendors |= index; - MPLogInfo(@"[Viewability] %@ was found.", adapterClassName); - } - } - } -} - -- (instancetype)initWithAdView:(MPWebView *)webView - isVideo:(BOOL)isVideo - startTrackingImmediately:(BOOL)startTracking { - if (self = [super init]) { - // While the viewability SDKs have features that allow the developer to pass in a container view, WKWebView is - // not always in MPWebView's view hierarchy. Pass in the contained web view to be safe, as we don't know for - // sure *how* or *when* MPWebView is traversed. - UIView *view = webView.containedWebView; - - // Invalid ad view - if (view == nil) { - MPLogError(@"nil ad view passed into %s", __PRETTY_FUNCTION__); - return nil; - } - - // Register handler for disabling of viewability tracking. - [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onDisableViewabilityTrackingForNotification:) name:kDisableViewabilityTrackerNotification object:nil]; - - // Initialize all known and enabled viewability trackers. - NSMutableDictionary> * trackers = [NSMutableDictionary dictionary]; - for (NSInteger index = 1; index < MPViewabilityOptionAll; index = index << 1) { - NSString * className = sSupportedAdapters[@(index)]; - id tracker = [self initializeTrackerWithClassName:className forViewabilityOption:index withAdView:view isVideo:isVideo startTrackingImmediately:startTracking]; - if (tracker != nil) { - trackers[@(index)] = tracker; - } - } - - _trackers = trackers; - } - - return self; -} - -- (id)initializeTrackerWithClassName:(NSString *)className - forViewabilityOption:(MPViewabilityOption)option - withAdView:(UIView *)webView - isVideo:(BOOL)isVideo - startTrackingImmediately:(BOOL)startTracking { - // Ignore invalid options and empty class name - if (option == MPViewabilityOptionNone || option == MPViewabilityOptionAll || className.length == 0) { - return nil; - } - - // Check if the tracker class exists in the runtime and if it is enabled before - // attempting to initialize it. - Class adapterClass = NSClassFromString(className); - if (adapterClass && OptionsHasValue(sEnabledViewabilityVendors, option)) { - id tracker = [[adapterClass alloc] initWithAdView:webView isVideo:isVideo startTrackingImmediately:startTracking]; - return tracker; - } - - return nil; -} - -- (void)dealloc { - [[NSNotificationCenter defaultCenter] removeObserver:self]; - [self stopTracking]; -} - -- (void)startTracking { - [self.trackers.allValues makeObjectsPerformSelector:@selector(startTracking)]; -} - -- (void)stopTracking:(MPViewabilityOption)vendors { - for (NSInteger index = 1; index < MPViewabilityOptionAll; index = index << 1) { - if (OptionsHasValue(vendors, index) && self.trackers[@(index)] != nil) { - id tracker = self.trackers[@(index)]; - [tracker stopTracking]; - } - } -} - -- (void)stopTracking { - [self stopTracking:MPViewabilityOptionAll]; -} - -- (void)registerFriendlyObstructionView:(UIView *)view { - [self.trackers.allValues makeObjectsPerformSelector:@selector(registerFriendlyObstructionView:) withObject:view]; -} - -+ (MPViewabilityOption)enabledViewabilityVendors { - return sEnabledViewabilityVendors; -} - -+ (void)disableViewability:(MPViewabilityOption)vendors { - // Keep around the old viewability bitmask for comparing if the - // state has changed. - MPViewabilityOption oldEnabledVendors = sEnabledViewabilityVendors; - - // Disable specified vendors - for (NSInteger index = 1; index < MPViewabilityOptionAll; index = index << 1) { - if (OptionsHasValue(vendors, index)) { - sEnabledViewabilityVendors &= ~index; - } - } - - // Broadcast that some viewability tracking has been disabled. - if (vendors != MPViewabilityOptionNone && oldEnabledVendors != sEnabledViewabilityVendors) { - [[NSNotificationCenter defaultCenter] postNotificationName:kDisableViewabilityTrackerNotification object:nil userInfo:@{kDisabledViewabilityTrackers: @(vendors)}]; - } -} - -#pragma mark - Notification Handlers - -- (void)onDisableViewabilityTrackingForNotification:(NSNotification *)notification { - MPViewabilityOption disabledTrackers = MPViewabilityOptionNone; - if (notification.userInfo != nil && [notification.userInfo objectForKey:kDisabledViewabilityTrackers] != nil) { - disabledTrackers = (MPViewabilityOption)[[notification.userInfo objectForKey:kDisabledViewabilityTrackers] integerValue]; - } - - // Immediately stop all tracking for the disabled viewability vendors. - [self stopTracking:disabledTrackers]; - - // Remove the disabled trackers - NSMutableDictionary> * updatedTrackers = [self.trackers mutableCopy]; - for (NSInteger index = 1; index < MPViewabilityOptionAll; index = index << 1) { - if (OptionsHasValue(disabledTrackers, index) && self.trackers[@(index)] != nil) { - [updatedTrackers removeObjectForKey:@(index)]; - } - } - self.trackers = updatedTrackers; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPWebView+Viewability.h b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPWebView+Viewability.h deleted file mode 100644 index 0a817b9e2..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPWebView+Viewability.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// MPWebView+Viewability.h -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPWebView.h" - -@interface MPWebView (Viewability) - -// Returns the UIWebView or WKWebView instance attached to this MPWebView. If using WKWebView, this property will return -// the WKWebView instance regardless of if it's currently in the view hierarchy of this MPWebView. Exposed for the -// purpose of having a reliable way to attach viewability SDKs to a web view. -// -// Note: Please do not alter the hierarchy of this view (i.e., don't ever call it with `addSubview` or -// `removeFromSuperview`). Call those methods on the MPWebView instance instead. -@property (nonatomic, readonly) UIView *containedWebView; - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPWebView+Viewability.m b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPWebView+Viewability.m deleted file mode 100644 index a37e1b4fc..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/MoPubSDK/Viewability/MPWebView+Viewability.m +++ /dev/null @@ -1,25 +0,0 @@ -// -// MPWebView+Viewability.m -// -// Copyright 2018 Twitter, Inc. -// Licensed under the MoPub SDK License Agreement -// http://www.mopub.com/legal/sdk-license-agreement/ -// - -#import "MPWebView+Viewability.h" -#import - -@interface MPWebView () - -- (UIWebView *)uiWebView; -- (WKWebView *)wkWebView; - -@end - -@implementation MPWebView (Viewability) - -- (UIView *)containedWebView { - return self.uiWebView ? self.uiWebView : self.wkWebView; -} - -@end diff --git a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/README.md b/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/README.md deleted file mode 100644 index 461f22173..000000000 --- a/examples/PrebidMobileDemo/Pods/mopub-ios-sdk/README.md +++ /dev/null @@ -1,126 +0,0 @@ -# MoPub iOS SDK - -Thanks for taking a look at MoPub! We take pride in having an easy-to-use, flexible monetization solution that works across multiple platforms. - -Sign up for an account at [http://app.mopub.com/](http://app.mopub.com/). - -## Need Help? - -You can find integration documentation on our [wiki](https://github.com/mopub/mopub-ios-sdk/wiki/Getting-Started) and additional help documentation on our [developer help site](https://www.mopub.com/resources/docs). - -To file an issue with our team, email [support@mopub.com](mailto:support@mopub.com). - -**Please Note: We no longer accept GitHub Issues** - -## New Pull Requests? - -Thank you for submitting pull requests to the MoPub iOS GitHub repository. Our team regularly monitors and investigates all submissions for inclusion in our official SDK releases. Please note that MoPub does not directly merge these pull requests at this time. Please reach out to your account team or [support@mopub.com](mailto:support@mopub.com) if you have further questions. - -## Disclosure -MoPub SDK 4.16 and above integrates technology from our partners Integral Ad Science, Inc. (“IAS”) and Moat, Inc. (“Moat”) in order to support viewability measurement and other proprietary reporting that [IAS](https://integralads.com/capabilities/viewability/) and [Moat](https://moat.com/analytics) provide to their advertiser and publisher clients. You have the option to remove or disable this technology by following the opt-out instructions [below](#disableViewability). - -If you do not remove or disable IAS's and/or Moat’s technology in accordance with these instructions, you agree that IAS's [privacy policy](https://integralads.com/privacy-policy/) and [license](https://integralads.com/sdk-license-agreement) and Moat’s [privacy policy](https://moat.com/privacy), [terms](https://moat.com/terms), and [license](https://moat.com/sdklicense.txt), respectively, apply to your integration of these partners' technologies into your application. - -## Installation - -The MoPub SDK supports multiple methods for installing the library in a project. - -The current version of the SDK is 5.4.0 - -### Installation with CocoaPods - -[CocoaPods](https://cocoapods.org/) is a dependency manager for Swift and Objective-C Cocoa projects, which automates and simplifies the process of using 3rd-party libraries like the MoPub SDK in your projects. You can install it with the following command: - -``` -$ gem install cocoapods -``` - -**Podfile** -To integrate MoPub SDK into your Xcode project using CocoaPods, specify it in your Podfile: - -``` -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '8.0' -use_frameworks! - -target 'MyApp' do - pod 'mopub-ios-sdk', '~> 5.0' -end -``` - -Then, run the following command: - -``` -$ pod install -``` - -### Manual Integration with Dynamic Framework - -MoPub provides a prepackaged archive of the dynamic framework: - -- **[MoPub SDK Framework.zip](http://bit.ly/2OV5fiw)** - - Includes everything you need to serve HTML, MRAID, and Native MoPub advertisements. Third party ad networks are not included. - -Add the dynamic framework to the target's Embedded Binaries section of the General tab. - -### Manual Integration with Source Code - -MoPub provides two prepackaged archives of source code: - -- **[MoPub Base SDK.zip](http://bit.ly/2bH8ObO)** - - Includes everything you need to serve HTML, MRAID, and Native MoPub advertisements. Third party ad networks are not included. - -- **[MoPub Base SDK Excluding Native.zip](http://bit.ly/2bCCgRw)** - - Includes everything you need to serve HTML and MRAID advertisements. Third party ad networks and Native MoPub advertisements are not included. - -## Integrate - -Integration instructions are available on the [wiki](https://github.com/mopub/mopub-ios-sdk/wiki/Getting-Started). - -## New in this Version - -Please view the [changelog](https://github.com/mopub/mopub-ios-sdk/blob/master/CHANGELOG.md) for details. - -- **Features** - - SDK distribution as a dynamic framework is now available. - - Local extras are now supported for all ad formats. - -- **Bug Fixes** - - HTTP error codes now include the localized error description. - - Added missing mraid.js file protections when showing MRAID ads. - - Fixed native video crash. - - Fixed native ad timeout timer invalidation. - -See the [Getting Started Guide](https://github.com/mopub/mopub-ios-sdk/wiki/Getting-Started#app-transport-security-settings) for instructions on setting up ATS in your app. - -## Upgrading to SDK 5.0 - -Please see the [Getting Started Guide](https://developers.mopub.com/docs/ios/getting-started/) for instructions on upgrading from SDK 4.X to SDK 5.0. - -For GDPR-specific upgrading instructions, also see the [GDPR Integration Guide](https://developers.mopub.com/docs/publisher/gdpr). - -### Disabling Viewability Measurement -There are a few options for opting out of viewability measurement: -##### Opting Out in a Manual Integration -Before dragging the MoPubSDK folder into your Xcode project, simply delete the “Moat” folder to opt out of Moat or the “Avid” folder to opt out of IAS in MoPubSDK/Viewability/. If you would like to opt out of both, delete both folders. -##### Opting Out in a CocoaPods Integration -Including `pod 'mopub-ios-sdk'` in your Podfile will include both IAS and Moat SDKs, as well as the MoPub SDK. In order to opt out: -- `pod 'mopub-ios-sdk/Avid'` will include the IAS SDK, but not the Moat SDK, as well as the MoPub SDK. -- `pod 'mopub-ios-sdk/Moat'` will include the Moat SDK, but not the IAS SDK, as well as the MoPub SDK. -- `pod 'mopub-ios-sdk/Core'` will only include the MoPub SDK, with viewability measurement totally disabled. - -Make sure to run `pod update` once your Podfile is set up to your preferences. -##### Software Disable -If you would like to opt out of viewability measurement but do not want to modify the MoPub SDK, a function is provided for your convenience. As soon as possible after calling `- (void)initializeSdkWithConfiguration:completion:`, call `[[MoPub sharedInstance] disableViewability:(vendors)]`. In place of “(vendors)”, `MPViewabilityOptionIAS` will disable IAS but leave Moat enabled, `MPViewabilityOptionMoat` will disable Moat but leave IAS enabled, and `MPViewabilityOptionAll` will disable all viewability measurement. - -## Requirements - -- iOS 8.0 and up -- Xcode 9.0 and up - -## License - -We have launched a new license as of version 3.2.0. To view the full license, visit [http://www.mopub.com/legal/sdk-license-agreement/](http://www.mopub.com/legal/sdk-license-agreement/) diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo.xcodeproj/project.pbxproj b/examples/PrebidMobileDemo/PrebidMobileDemo.xcodeproj/project.pbxproj deleted file mode 100644 index 78dfe082e..000000000 --- a/examples/PrebidMobileDemo/PrebidMobileDemo.xcodeproj/project.pbxproj +++ /dev/null @@ -1,921 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 98DE194CD419CB43DF2EEE9F /* libPods-PrebidMobileDemo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BFB505B67305B895820CE279 /* libPods-PrebidMobileDemo.a */; }; - C23386CB1EE5DAC9002FD404 /* PrebidMobile.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C23386CA1EE5DAA7002FD404 /* PrebidMobile.framework */; }; - C268CA911EA65FD7008656F2 /* pbm_basic.feature in Resources */ = {isa = PBXBuildFile; fileRef = C268CA871EA65FD7008656F2 /* pbm_basic.feature */; }; - C268CA921EA65FD7008656F2 /* pbm_basic.rb in Resources */ = {isa = PBXBuildFile; fileRef = C268CA891EA65FD7008656F2 /* pbm_basic.rb */; }; - C268CA931EA65FD7008656F2 /* 01_launch.rb in Resources */ = {isa = PBXBuildFile; fileRef = C268CA8B1EA65FD7008656F2 /* 01_launch.rb */; }; - C268CA941EA65FD7008656F2 /* dry_run.rb in Resources */ = {isa = PBXBuildFile; fileRef = C268CA8C1EA65FD7008656F2 /* dry_run.rb */; }; - C268CA951EA65FD7008656F2 /* env.rb in Resources */ = {isa = PBXBuildFile; fileRef = C268CA8D1EA65FD7008656F2 /* env.rb */; }; - C268CA961EA65FD7008656F2 /* cucumber.rb in Resources */ = {isa = PBXBuildFile; fileRef = C268CA8F1EA65FD7008656F2 /* cucumber.rb */; }; - C273C80A1E82DAAD003EF1AB /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = C273C8091E82DAAD003EF1AB /* main.m */; }; - C273C80D1E82DAAD003EF1AB /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = C273C80C1E82DAAD003EF1AB /* AppDelegate.m */; }; - C273C8131E82DAAE003EF1AB /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C273C8111E82DAAE003EF1AB /* Main.storyboard */; }; - C273C8151E82DAAE003EF1AB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C273C8141E82DAAE003EF1AB /* Assets.xcassets */; }; - C273C8181E82DAAE003EF1AB /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C273C8161E82DAAE003EF1AB /* LaunchScreen.storyboard */; }; - C273C8231E82DAAE003EF1AB /* PrebidMobileDemoTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C273C8221E82DAAE003EF1AB /* PrebidMobileDemoTests.m */; }; - C273CA861E8313F3003EF1AB /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA851E8313F3003EF1AB /* CoreBluetooth.framework */; }; - C273CA8D1E831404003EF1AB /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA871E831404003EF1AB /* CoreFoundation.framework */; }; - C273CA8E1E831404003EF1AB /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA881E831404003EF1AB /* CoreGraphics.framework */; }; - C273CA8F1E831404003EF1AB /* CoreImage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA891E831404003EF1AB /* CoreImage.framework */; }; - C273CA901E831404003EF1AB /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA8A1E831404003EF1AB /* CoreLocation.framework */; }; - C273CA911E831404003EF1AB /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA8B1E831404003EF1AB /* CoreMedia.framework */; }; - C273CA921E831404003EF1AB /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA8C1E831404003EF1AB /* CoreTelephony.framework */; }; - C273CAA01E831442003EF1AB /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA931E831442003EF1AB /* AdSupport.framework */; }; - C273CAA11E831442003EF1AB /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA941E831442003EF1AB /* AudioToolbox.framework */; }; - C273CAA21E831442003EF1AB /* EventKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA951E831442003EF1AB /* EventKit.framework */; }; - C273CAA31E831442003EF1AB /* EventKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA961E831442003EF1AB /* EventKitUI.framework */; }; - C273CAA41E831442003EF1AB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA971E831442003EF1AB /* Foundation.framework */; }; - C273CAA51E831442003EF1AB /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA981E831442003EF1AB /* MediaPlayer.framework */; }; - C273CAA61E831442003EF1AB /* MediaToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA991E831442003EF1AB /* MediaToolbox.framework */; }; - C273CAA71E831442003EF1AB /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA9A1E831442003EF1AB /* MessageUI.framework */; }; - C273CAA81E831442003EF1AB /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA9B1E831442003EF1AB /* QuartzCore.framework */; }; - C273CAA91E831442003EF1AB /* SafariServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA9C1E831442003EF1AB /* SafariServices.framework */; }; - C273CAAA1E831442003EF1AB /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA9D1E831442003EF1AB /* StoreKit.framework */; }; - C273CAAB1E831442003EF1AB /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA9E1E831442003EF1AB /* SystemConfiguration.framework */; }; - C273CAAC1E831442003EF1AB /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CA9F1E831442003EF1AB /* UIKit.framework */; }; - C273CAAE1E83146F003EF1AB /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CAAD1E83146F003EF1AB /* CoreMotion.framework */; }; - C273CAB01E831487003EF1AB /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CAAF1E831486003EF1AB /* GLKit.framework */; }; - C273CAB21E83149D003EF1AB /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C273CAB11E83149D003EF1AB /* MobileCoreServices.framework */; }; - C273CAB61E83175A003EF1AB /* BannerTestsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C273CAB51E83175A003EF1AB /* BannerTestsViewController.m */; }; - C273CABC1E832451003EF1AB /* InterstitialTestsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C273CABB1E832451003EF1AB /* InterstitialTestsViewController.m */; }; - C273CABF1E832479003EF1AB /* NativeTestsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C273CABE1E832479003EF1AB /* NativeTestsViewController.m */; }; - C273CAC21E832494003EF1AB /* VideoTestsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C273CAC11E832494003EF1AB /* VideoTestsViewController.m */; }; - C2E809731E95425D00DC7732 /* SettingsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C2E809721E95425D00DC7732 /* SettingsViewController.m */; }; - C2E8097D1E95899800DC7732 /* Constants.m in Sources */ = {isa = PBXBuildFile; fileRef = C2E8097C1E95899800DC7732 /* Constants.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 606A126620C72B2100B5DB32 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 606A126220C72B2100B5DB32 /* CMPReference.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = 0E1B938920B6103A00949400; - remoteInfo = CMPReference; - }; - 606A126920C7302A00B5DB32 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 606A126220C72B2100B5DB32 /* CMPReference.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = 0E1B938820B6103A00949400; - remoteInfo = CMPReference; - }; - C23386C91EE5DAA7002FD404 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C23386C51EE5DAA7002FD404 /* PrebidMobile.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C2B16E1B1EE1BE69006304C0; - remoteInfo = PrebidMobile; - }; - C23386CD1EE5DAC9002FD404 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C23386C51EE5DAA7002FD404 /* PrebidMobile.xcodeproj */; - proxyType = 1; - remoteGlobalIDString = C2B16E1A1EE1BE69006304C0; - remoteInfo = PrebidMobile; - }; - C255C5B01F4489180089CB41 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C23386C51EE5DAA7002FD404 /* PrebidMobile.xcodeproj */; - proxyType = 2; - remoteGlobalIDString = C281E17C1EE5EAF700F2F4A9; - remoteInfo = PrebidMobileTests; - }; - C273C81F1E82DAAE003EF1AB /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C273C7FD1E82DAAD003EF1AB /* Project object */; - proxyType = 1; - remoteGlobalIDString = C273C8041E82DAAD003EF1AB; - remoteInfo = PrebidMobileDemo; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXCopyFilesBuildPhase section */ - C23386CF1EE5DAC9002FD404 /* Embed Frameworks */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 10; - files = ( - ); - name = "Embed Frameworks"; - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXCopyFilesBuildPhase section */ - -/* Begin PBXFileReference section */ - 171395FED98D8A0665F34125 /* Pods-PrebidMobileDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PrebidMobileDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo.debug.xcconfig"; sourceTree = ""; }; - 606A126220C72B2100B5DB32 /* CMPReference.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = CMPReference.xcodeproj; path = ../../tools/CMPReference/CMPReference.xcodeproj; sourceTree = ""; }; - A1ECD3D3DF1C659CA6E60DDD /* Pods-PrebidMobileDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PrebidMobileDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo.release.xcconfig"; sourceTree = ""; }; - BFB505B67305B895820CE279 /* libPods-PrebidMobileDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-PrebidMobileDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - C23386C51EE5DAA7002FD404 /* PrebidMobile.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PrebidMobile.xcodeproj; path = ../../sdk/PrebidMobile.xcodeproj; sourceTree = ""; }; - C268CA871EA65FD7008656F2 /* pbm_basic.feature */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = pbm_basic.feature; sourceTree = ""; }; - C268CA891EA65FD7008656F2 /* pbm_basic.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = pbm_basic.rb; sourceTree = ""; }; - C268CA8B1EA65FD7008656F2 /* 01_launch.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = 01_launch.rb; sourceTree = ""; }; - C268CA8C1EA65FD7008656F2 /* dry_run.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = dry_run.rb; sourceTree = ""; }; - C268CA8D1EA65FD7008656F2 /* env.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = env.rb; sourceTree = ""; }; - C268CA8F1EA65FD7008656F2 /* cucumber.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = cucumber.rb; sourceTree = ""; }; - C273C8051E82DAAD003EF1AB /* PrebidMobileDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PrebidMobileDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; - C273C8091E82DAAD003EF1AB /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - C273C80B1E82DAAD003EF1AB /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - C273C80C1E82DAAD003EF1AB /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - C273C8121E82DAAE003EF1AB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; - C273C8141E82DAAE003EF1AB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; - C273C8171E82DAAE003EF1AB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; - C273C8191E82DAAE003EF1AB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C273C81E1E82DAAE003EF1AB /* PrebidMobileDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PrebidMobileDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - C273C8221E82DAAE003EF1AB /* PrebidMobileDemoTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PrebidMobileDemoTests.m; sourceTree = ""; }; - C273C8241E82DAAE003EF1AB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C273CA851E8313F3003EF1AB /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = System/Library/Frameworks/CoreBluetooth.framework; sourceTree = SDKROOT; }; - C273CA871E831404003EF1AB /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; - C273CA881E831404003EF1AB /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - C273CA891E831404003EF1AB /* CoreImage.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreImage.framework; path = System/Library/Frameworks/CoreImage.framework; sourceTree = SDKROOT; }; - C273CA8A1E831404003EF1AB /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; - C273CA8B1E831404003EF1AB /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; }; - C273CA8C1E831404003EF1AB /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; - C273CA931E831442003EF1AB /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; }; - C273CA941E831442003EF1AB /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - C273CA951E831442003EF1AB /* EventKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = EventKit.framework; path = System/Library/Frameworks/EventKit.framework; sourceTree = SDKROOT; }; - C273CA961E831442003EF1AB /* EventKitUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = EventKitUI.framework; path = System/Library/Frameworks/EventKitUI.framework; sourceTree = SDKROOT; }; - C273CA971E831442003EF1AB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - C273CA981E831442003EF1AB /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; }; - C273CA991E831442003EF1AB /* MediaToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaToolbox.framework; path = System/Library/Frameworks/MediaToolbox.framework; sourceTree = SDKROOT; }; - C273CA9A1E831442003EF1AB /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; }; - C273CA9B1E831442003EF1AB /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - C273CA9C1E831442003EF1AB /* SafariServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SafariServices.framework; path = System/Library/Frameworks/SafariServices.framework; sourceTree = SDKROOT; }; - C273CA9D1E831442003EF1AB /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; - C273CA9E1E831442003EF1AB /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; - C273CA9F1E831442003EF1AB /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - C273CAAD1E83146F003EF1AB /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; }; - C273CAAF1E831486003EF1AB /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; }; - C273CAB11E83149D003EF1AB /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; - C273CAB41E83175A003EF1AB /* BannerTestsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BannerTestsViewController.h; sourceTree = ""; }; - C273CAB51E83175A003EF1AB /* BannerTestsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BannerTestsViewController.m; sourceTree = ""; }; - C273CABA1E832451003EF1AB /* InterstitialTestsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InterstitialTestsViewController.h; sourceTree = ""; }; - C273CABB1E832451003EF1AB /* InterstitialTestsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InterstitialTestsViewController.m; sourceTree = ""; }; - C273CABD1E832479003EF1AB /* NativeTestsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NativeTestsViewController.h; sourceTree = ""; }; - C273CABE1E832479003EF1AB /* NativeTestsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NativeTestsViewController.m; sourceTree = ""; }; - C273CAC01E832494003EF1AB /* VideoTestsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoTestsViewController.h; sourceTree = ""; }; - C273CAC11E832494003EF1AB /* VideoTestsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VideoTestsViewController.m; sourceTree = ""; }; - C2E809711E95425D00DC7732 /* SettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsViewController.h; sourceTree = ""; }; - C2E809721E95425D00DC7732 /* SettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SettingsViewController.m; sourceTree = ""; }; - C2E8097B1E95899800DC7732 /* Constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Constants.h; sourceTree = ""; }; - C2E8097C1E95899800DC7732 /* Constants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Constants.m; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - C273C8021E82DAAD003EF1AB /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C273CAB21E83149D003EF1AB /* MobileCoreServices.framework in Frameworks */, - C273CAB01E831487003EF1AB /* GLKit.framework in Frameworks */, - C273CAAE1E83146F003EF1AB /* CoreMotion.framework in Frameworks */, - C273CAA01E831442003EF1AB /* AdSupport.framework in Frameworks */, - C273CAA11E831442003EF1AB /* AudioToolbox.framework in Frameworks */, - C273CAA21E831442003EF1AB /* EventKit.framework in Frameworks */, - C273CAA31E831442003EF1AB /* EventKitUI.framework in Frameworks */, - C273CAA41E831442003EF1AB /* Foundation.framework in Frameworks */, - C23386CB1EE5DAC9002FD404 /* PrebidMobile.framework in Frameworks */, - C273CAA51E831442003EF1AB /* MediaPlayer.framework in Frameworks */, - C273CAA61E831442003EF1AB /* MediaToolbox.framework in Frameworks */, - C273CAA71E831442003EF1AB /* MessageUI.framework in Frameworks */, - C273CAA81E831442003EF1AB /* QuartzCore.framework in Frameworks */, - C273CAA91E831442003EF1AB /* SafariServices.framework in Frameworks */, - C273CAAA1E831442003EF1AB /* StoreKit.framework in Frameworks */, - C273CAAB1E831442003EF1AB /* SystemConfiguration.framework in Frameworks */, - C273CAAC1E831442003EF1AB /* UIKit.framework in Frameworks */, - C273CA8D1E831404003EF1AB /* CoreFoundation.framework in Frameworks */, - C273CA8E1E831404003EF1AB /* CoreGraphics.framework in Frameworks */, - C273CA8F1E831404003EF1AB /* CoreImage.framework in Frameworks */, - C273CA901E831404003EF1AB /* CoreLocation.framework in Frameworks */, - C273CA911E831404003EF1AB /* CoreMedia.framework in Frameworks */, - C273CA921E831404003EF1AB /* CoreTelephony.framework in Frameworks */, - C273CA861E8313F3003EF1AB /* CoreBluetooth.framework in Frameworks */, - 98DE194CD419CB43DF2EEE9F /* libPods-PrebidMobileDemo.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C273C81B1E82DAAE003EF1AB /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 08AA719FD7B712EEB12D7083 /* Pods */ = { - isa = PBXGroup; - children = ( - 171395FED98D8A0665F34125 /* Pods-PrebidMobileDemo.debug.xcconfig */, - A1ECD3D3DF1C659CA6E60DDD /* Pods-PrebidMobileDemo.release.xcconfig */, - ); - name = Pods; - sourceTree = ""; - }; - 606A126320C72B2100B5DB32 /* Products */ = { - isa = PBXGroup; - children = ( - 606A126720C72B2100B5DB32 /* CMPReference.framework */, - ); - name = Products; - sourceTree = ""; - }; - C23386C61EE5DAA7002FD404 /* Products */ = { - isa = PBXGroup; - children = ( - C23386CA1EE5DAA7002FD404 /* PrebidMobile.framework */, - C255C5B11F4489180089CB41 /* PrebidMobileTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - C268CA861EA65FD7008656F2 /* features */ = { - isa = PBXGroup; - children = ( - C268CA881EA65FD7008656F2 /* steps */, - C268CA8A1EA65FD7008656F2 /* support */, - C268CA871EA65FD7008656F2 /* pbm_basic.feature */, - ); - path = features; - sourceTree = ""; - }; - C268CA881EA65FD7008656F2 /* steps */ = { - isa = PBXGroup; - children = ( - C268CA891EA65FD7008656F2 /* pbm_basic.rb */, - ); - path = steps; - sourceTree = ""; - }; - C268CA8A1EA65FD7008656F2 /* support */ = { - isa = PBXGroup; - children = ( - C268CA8E1EA65FD7008656F2 /* patches */, - C268CA8B1EA65FD7008656F2 /* 01_launch.rb */, - C268CA8C1EA65FD7008656F2 /* dry_run.rb */, - C268CA8D1EA65FD7008656F2 /* env.rb */, - ); - path = support; - sourceTree = ""; - }; - C268CA8E1EA65FD7008656F2 /* patches */ = { - isa = PBXGroup; - children = ( - C268CA8F1EA65FD7008656F2 /* cucumber.rb */, - ); - path = patches; - sourceTree = ""; - }; - C273C7FC1E82DAAD003EF1AB = { - isa = PBXGroup; - children = ( - 606A126220C72B2100B5DB32 /* CMPReference.xcodeproj */, - C273C8071E82DAAD003EF1AB /* PrebidMobileDemo */, - C273C8211E82DAAE003EF1AB /* PrebidMobileDemoTests */, - C273C84F1E831300003EF1AB /* Frameworks */, - C273C8061E82DAAD003EF1AB /* Products */, - C268CA861EA65FD7008656F2 /* features */, - C23386C51EE5DAA7002FD404 /* PrebidMobile.xcodeproj */, - 08AA719FD7B712EEB12D7083 /* Pods */, - ); - sourceTree = ""; - }; - C273C8061E82DAAD003EF1AB /* Products */ = { - isa = PBXGroup; - children = ( - C273C8051E82DAAD003EF1AB /* PrebidMobileDemo.app */, - C273C81E1E82DAAE003EF1AB /* PrebidMobileDemoTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - C273C8071E82DAAD003EF1AB /* PrebidMobileDemo */ = { - isa = PBXGroup; - children = ( - C273CAB31E83168B003EF1AB /* BannerViewControllers */, - C273CAB71E83242B003EF1AB /* IntersitialViewControllers */, - C273CAB81E832435003EF1AB /* NativeViewControllers */, - C273C8081E82DAAD003EF1AB /* Supporting Files */, - C273CAB91E832440003EF1AB /* VideoViewControllers */, - C273C80B1E82DAAD003EF1AB /* AppDelegate.h */, - C273C80C1E82DAAD003EF1AB /* AppDelegate.m */, - C273C8141E82DAAE003EF1AB /* Assets.xcassets */, - C2E8097B1E95899800DC7732 /* Constants.h */, - C2E8097C1E95899800DC7732 /* Constants.m */, - C273C8191E82DAAE003EF1AB /* Info.plist */, - C273C8161E82DAAE003EF1AB /* LaunchScreen.storyboard */, - C273C8111E82DAAE003EF1AB /* Main.storyboard */, - C2E809711E95425D00DC7732 /* SettingsViewController.h */, - C2E809721E95425D00DC7732 /* SettingsViewController.m */, - ); - path = PrebidMobileDemo; - sourceTree = ""; - }; - C273C8081E82DAAD003EF1AB /* Supporting Files */ = { - isa = PBXGroup; - children = ( - C273C8091E82DAAD003EF1AB /* main.m */, - ); - path = "Supporting Files"; - sourceTree = ""; - }; - C273C8211E82DAAE003EF1AB /* PrebidMobileDemoTests */ = { - isa = PBXGroup; - children = ( - C273C8241E82DAAE003EF1AB /* Info.plist */, - C273C8221E82DAAE003EF1AB /* PrebidMobileDemoTests.m */, - ); - path = PrebidMobileDemoTests; - sourceTree = ""; - }; - C273C84F1E831300003EF1AB /* Frameworks */ = { - isa = PBXGroup; - children = ( - C273CAB11E83149D003EF1AB /* MobileCoreServices.framework */, - C273CAAF1E831486003EF1AB /* GLKit.framework */, - C273CAAD1E83146F003EF1AB /* CoreMotion.framework */, - C273CA931E831442003EF1AB /* AdSupport.framework */, - C273CA941E831442003EF1AB /* AudioToolbox.framework */, - C273CA951E831442003EF1AB /* EventKit.framework */, - C273CA961E831442003EF1AB /* EventKitUI.framework */, - C273CA971E831442003EF1AB /* Foundation.framework */, - C273CA981E831442003EF1AB /* MediaPlayer.framework */, - C273CA991E831442003EF1AB /* MediaToolbox.framework */, - C273CA9A1E831442003EF1AB /* MessageUI.framework */, - C273CA9B1E831442003EF1AB /* QuartzCore.framework */, - C273CA9C1E831442003EF1AB /* SafariServices.framework */, - C273CA9D1E831442003EF1AB /* StoreKit.framework */, - C273CA9E1E831442003EF1AB /* SystemConfiguration.framework */, - C273CA9F1E831442003EF1AB /* UIKit.framework */, - C273CA871E831404003EF1AB /* CoreFoundation.framework */, - C273CA881E831404003EF1AB /* CoreGraphics.framework */, - C273CA891E831404003EF1AB /* CoreImage.framework */, - C273CA8A1E831404003EF1AB /* CoreLocation.framework */, - C273CA8B1E831404003EF1AB /* CoreMedia.framework */, - C273CA8C1E831404003EF1AB /* CoreTelephony.framework */, - C273CA851E8313F3003EF1AB /* CoreBluetooth.framework */, - BFB505B67305B895820CE279 /* libPods-PrebidMobileDemo.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - C273CAB31E83168B003EF1AB /* BannerViewControllers */ = { - isa = PBXGroup; - children = ( - C273CAB41E83175A003EF1AB /* BannerTestsViewController.h */, - C273CAB51E83175A003EF1AB /* BannerTestsViewController.m */, - ); - path = BannerViewControllers; - sourceTree = ""; - }; - C273CAB71E83242B003EF1AB /* IntersitialViewControllers */ = { - isa = PBXGroup; - children = ( - C273CABA1E832451003EF1AB /* InterstitialTestsViewController.h */, - C273CABB1E832451003EF1AB /* InterstitialTestsViewController.m */, - ); - path = IntersitialViewControllers; - sourceTree = ""; - }; - C273CAB81E832435003EF1AB /* NativeViewControllers */ = { - isa = PBXGroup; - children = ( - C273CABD1E832479003EF1AB /* NativeTestsViewController.h */, - C273CABE1E832479003EF1AB /* NativeTestsViewController.m */, - ); - path = NativeViewControllers; - sourceTree = ""; - }; - C273CAB91E832440003EF1AB /* VideoViewControllers */ = { - isa = PBXGroup; - children = ( - C273CAC01E832494003EF1AB /* VideoTestsViewController.h */, - C273CAC11E832494003EF1AB /* VideoTestsViewController.m */, - ); - path = VideoViewControllers; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - C273C8041E82DAAD003EF1AB /* PrebidMobileDemo */ = { - isa = PBXNativeTarget; - buildConfigurationList = C273C8271E82DAAE003EF1AB /* Build configuration list for PBXNativeTarget "PrebidMobileDemo" */; - buildPhases = ( - F50F7C340E70812CE7F317AE /* [CP] Check Pods Manifest.lock */, - C273C8011E82DAAD003EF1AB /* Sources */, - C273C8021E82DAAD003EF1AB /* Frameworks */, - C273C8031E82DAAD003EF1AB /* Resources */, - C23386CF1EE5DAC9002FD404 /* Embed Frameworks */, - 2DD0B09C41622022A4A69457 /* [CP] Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - 606A126A20C7302A00B5DB32 /* PBXTargetDependency */, - C23386CE1EE5DAC9002FD404 /* PBXTargetDependency */, - ); - name = PrebidMobileDemo; - productName = PrebidMobileDemo; - productReference = C273C8051E82DAAD003EF1AB /* PrebidMobileDemo.app */; - productType = "com.apple.product-type.application"; - }; - C273C81D1E82DAAE003EF1AB /* PrebidMobileDemoTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = C273C82A1E82DAAE003EF1AB /* Build configuration list for PBXNativeTarget "PrebidMobileDemoTests" */; - buildPhases = ( - C273C81A1E82DAAE003EF1AB /* Sources */, - C273C81B1E82DAAE003EF1AB /* Frameworks */, - C273C81C1E82DAAE003EF1AB /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - C273C8201E82DAAE003EF1AB /* PBXTargetDependency */, - ); - name = PrebidMobileDemoTests; - productName = PrebidMobileDemoTests; - productReference = C273C81E1E82DAAE003EF1AB /* PrebidMobileDemoTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - C273C7FD1E82DAAD003EF1AB /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0940; - ORGANIZATIONNAME = "Nicole Hedley"; - TargetAttributes = { - C273C8041E82DAAD003EF1AB = { - CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = HR94J6TSB3; - ProvisioningStyle = Automatic; - }; - C273C81D1E82DAAE003EF1AB = { - CreatedOnToolsVersion = 8.2.1; - DevelopmentTeam = HR94J6TSB3; - ProvisioningStyle = Automatic; - TestTargetID = C273C8041E82DAAD003EF1AB; - }; - }; - }; - buildConfigurationList = C273C8001E82DAAD003EF1AB /* Build configuration list for PBXProject "PrebidMobileDemo" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = C273C7FC1E82DAAD003EF1AB; - productRefGroup = C273C8061E82DAAD003EF1AB /* Products */; - projectDirPath = ""; - projectReferences = ( - { - ProductGroup = 606A126320C72B2100B5DB32 /* Products */; - ProjectRef = 606A126220C72B2100B5DB32 /* CMPReference.xcodeproj */; - }, - { - ProductGroup = C23386C61EE5DAA7002FD404 /* Products */; - ProjectRef = C23386C51EE5DAA7002FD404 /* PrebidMobile.xcodeproj */; - }, - ); - projectRoot = ""; - targets = ( - C273C8041E82DAAD003EF1AB /* PrebidMobileDemo */, - C273C81D1E82DAAE003EF1AB /* PrebidMobileDemoTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXReferenceProxy section */ - 606A126720C72B2100B5DB32 /* CMPReference.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = CMPReference.framework; - remoteRef = 606A126620C72B2100B5DB32 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C23386CA1EE5DAA7002FD404 /* PrebidMobile.framework */ = { - isa = PBXReferenceProxy; - fileType = wrapper.framework; - path = PrebidMobile.framework; - remoteRef = C23386C91EE5DAA7002FD404 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; - C255C5B11F4489180089CB41 /* PrebidMobileTests.xctest */ = { - isa = PBXReferenceProxy; - fileType = wrapper.cfbundle; - path = PrebidMobileTests.xctest; - remoteRef = C255C5B01F4489180089CB41 /* PBXContainerItemProxy */; - sourceTree = BUILT_PRODUCTS_DIR; - }; -/* End PBXReferenceProxy section */ - -/* Begin PBXResourcesBuildPhase section */ - C273C8031E82DAAD003EF1AB /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C268CA961EA65FD7008656F2 /* cucumber.rb in Resources */, - C273C8181E82DAAE003EF1AB /* LaunchScreen.storyboard in Resources */, - C273C8151E82DAAE003EF1AB /* Assets.xcassets in Resources */, - C268CA911EA65FD7008656F2 /* pbm_basic.feature in Resources */, - C268CA951EA65FD7008656F2 /* env.rb in Resources */, - C268CA931EA65FD7008656F2 /* 01_launch.rb in Resources */, - C273C8131E82DAAE003EF1AB /* Main.storyboard in Resources */, - C268CA921EA65FD7008656F2 /* pbm_basic.rb in Resources */, - C268CA941EA65FD7008656F2 /* dry_run.rb in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C273C81C1E82DAAE003EF1AB /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 2DD0B09C41622022A4A69457 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${SRCROOT}/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo-resources.sh", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Internal/Common/MPAdBrowserController.xib", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn.png", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@2x.png", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseBtn@3x.png", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX.png", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@2x.png", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCloseButtonX@3x.png", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPCountdownTimer.html", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon.png", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@2x.png", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPDAAIcon@3x.png", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn.png", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@2x.png", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPMutedBtn@3x.png", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn.png", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@2x.png", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPPlayBtn@3x.png", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn.png", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@2x.png", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@3x.png", - "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MRAID.bundle", - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPAdBrowserController.nib", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseBtn.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseBtn@2x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseBtn@3x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButtonX.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButtonX@2x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCloseButtonX@3x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPCountdownTimer.html", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDAAIcon.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDAAIcon@2x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPDAAIcon@3x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPMutedBtn.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPMutedBtn@2x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPMutedBtn@3x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPPlayBtn.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPPlayBtn@2x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPPlayBtn@3x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPUnmutedBtn.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPUnmutedBtn@2x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPUnmutedBtn@3x.png", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MRAID.bundle", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-PrebidMobileDemo/Pods-PrebidMobileDemo-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - F50F7C340E70812CE7F317AE /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-PrebidMobileDemo-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - C273C8011E82DAAD003EF1AB /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C273CABC1E832451003EF1AB /* InterstitialTestsViewController.m in Sources */, - C273C80D1E82DAAD003EF1AB /* AppDelegate.m in Sources */, - C2E809731E95425D00DC7732 /* SettingsViewController.m in Sources */, - C273CABF1E832479003EF1AB /* NativeTestsViewController.m in Sources */, - C273CAB61E83175A003EF1AB /* BannerTestsViewController.m in Sources */, - C273C80A1E82DAAD003EF1AB /* main.m in Sources */, - C273CAC21E832494003EF1AB /* VideoTestsViewController.m in Sources */, - C2E8097D1E95899800DC7732 /* Constants.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C273C81A1E82DAAE003EF1AB /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C273C8231E82DAAE003EF1AB /* PrebidMobileDemoTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 606A126A20C7302A00B5DB32 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = CMPReference; - targetProxy = 606A126920C7302A00B5DB32 /* PBXContainerItemProxy */; - }; - C23386CE1EE5DAC9002FD404 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = PrebidMobile; - targetProxy = C23386CD1EE5DAC9002FD404 /* PBXContainerItemProxy */; - }; - C273C8201E82DAAE003EF1AB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = C273C8041E82DAAD003EF1AB /* PrebidMobileDemo */; - targetProxy = C273C81F1E82DAAE003EF1AB /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - C273C8111E82DAAE003EF1AB /* Main.storyboard */ = { - isa = PBXVariantGroup; - children = ( - C273C8121E82DAAE003EF1AB /* Base */, - ); - name = Main.storyboard; - path = .; - sourceTree = ""; - }; - C273C8161E82DAAE003EF1AB /* LaunchScreen.storyboard */ = { - isa = PBXVariantGroup; - children = ( - C273C8171E82DAAE003EF1AB /* Base */, - ); - name = LaunchScreen.storyboard; - path = .; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - C273C8251E82DAAE003EF1AB /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALID_ARCHS = "arm64 armv7"; - }; - name = Debug; - }; - C273C8261E82DAAE003EF1AB /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.1; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VALID_ARCHS = "arm64 armv7"; - }; - name = Release; - }; - C273C8281E82DAAE003EF1AB /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 171395FED98D8A0665F34125 /* Pods-PrebidMobileDemo.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEVELOPMENT_TEAM = HR94J6TSB3; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)", - ); - HEADER_SEARCH_PATHS = "$(inherited)"; - INFOPLIST_FILE = PrebidMobileDemo/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/MoPubSDK", - "$(PROJECT_DIR)/../../sdk/**", - ); - OTHER_LDFLAGS = ( - "-ObjC", - "-force_load", - "\"$(SOURCE_ROOT)/calabash.framework/calabash\"", - "-framework", - CFNetwork, - "$(inherited)", - ); - PRODUCT_BUNDLE_IDENTIFIER = AppNexus.PrebidMobileDemo; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - C273C8291E82DAAE003EF1AB /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A1ECD3D3DF1C659CA6E60DDD /* Pods-PrebidMobileDemo.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - DEVELOPMENT_TEAM = HR94J6TSB3; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)", - ); - HEADER_SEARCH_PATHS = "$(inherited)"; - INFOPLIST_FILE = PrebidMobileDemo/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/MoPubSDK", - "$(PROJECT_DIR)/../../sdk/**", - ); - OTHER_LDFLAGS = "-ObjC"; - PRODUCT_BUNDLE_IDENTIFIER = AppNexus.PrebidMobileDemo; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; - C273C82B1E82DAAE003EF1AB /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - DEVELOPMENT_TEAM = HR94J6TSB3; - INFOPLIST_FILE = PrebidMobileDemoTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = AppNexus.PrebidMobileDemoTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/PrebidMobileDemo.app/PrebidMobileDemo"; - }; - name = Debug; - }; - C273C82C1E82DAAE003EF1AB /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(TEST_HOST)"; - DEVELOPMENT_TEAM = HR94J6TSB3; - INFOPLIST_FILE = PrebidMobileDemoTests/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = AppNexus.PrebidMobileDemoTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUILT_PRODUCTS_DIR)/PrebidMobileDemo.app/PrebidMobileDemo"; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - C273C8001E82DAAD003EF1AB /* Build configuration list for PBXProject "PrebidMobileDemo" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C273C8251E82DAAE003EF1AB /* Debug */, - C273C8261E82DAAE003EF1AB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C273C8271E82DAAE003EF1AB /* Build configuration list for PBXNativeTarget "PrebidMobileDemo" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C273C8281E82DAAE003EF1AB /* Debug */, - C273C8291E82DAAE003EF1AB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C273C82A1E82DAAE003EF1AB /* Build configuration list for PBXNativeTarget "PrebidMobileDemoTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C273C82B1E82DAAE003EF1AB /* Debug */, - C273C82C1E82DAAE003EF1AB /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = C273C7FD1E82DAAD003EF1AB /* Project object */; -} diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/AppDelegate.m b/examples/PrebidMobileDemo/PrebidMobileDemo/AppDelegate.m deleted file mode 100644 index d4ccf22c3..000000000 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/AppDelegate.m +++ /dev/null @@ -1,133 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "AppDelegate.h" - -#import -#import -#import -#import -#import -#import -#import "Constants.h" -#import "SettingsViewController.h" -#import - -@interface AppDelegate () - -@property (strong, nonatomic) UITabBarController *tabBarController; - -@end - -@implementation AppDelegate - - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - [self enablePrebidLogs]; - [self setupPrebidAndRegisterAdUnits]; - - SettingsViewController *settingsViewController = [[SettingsViewController alloc] init]; - settingsViewController.title = @"Ad Settings"; - UINavigationController *settingsNavController = [[UINavigationController alloc] initWithRootViewController:settingsViewController]; - - self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - self.window.backgroundColor = [UIColor whiteColor]; - self.window.rootViewController = settingsNavController; - [self.window makeKeyAndVisible]; - - // Override point for customization after application launch. - return YES; -} - -- (void)enablePrebidLogs { - [PBLogManager setPBLogLevel:PBLogLevelAll]; -} - -- (BOOL)setupPrebidAndRegisterAdUnits { - @try { - // Prebid Mobile setup! - [self setupPrebidLocationManager]; - - PBBannerAdUnit *__nullable adUnit1 = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:kAdUnit1Id andConfigId:kAdUnit1ConfigId]; - PBInterstitialAdUnit *__nullable adUnit2 = [[PBInterstitialAdUnit alloc] initWithAdUnitIdentifier:kAdUnit2Id andConfigId:kAdUnit2ConfigId]; - [adUnit1 addSize:CGSizeMake(300, 250)]; - - [self setPrebidTargetingParams]; - - [PrebidMobile registerAdUnits:@[adUnit1, adUnit2] withAccountId:kAccountId withHost:kPBServerHost andPrimaryAdServer:PBPrimaryAdServerDFP]; - } @catch (PBException *ex) { - NSLog(@"%@",[ex reason]); - } @finally { - return YES; - } -} - -- (void)setupPrebidLocationManager { - self.locationManager = [[CLLocationManager alloc] init]; - self.locationManager.delegate = self; - self.locationManager.distanceFilter = kCLDistanceFilterNone; - self.locationManager.desiredAccuracy = kCLLocationAccuracyKilometer; - // Check for iOS 8. Without this guard the code will crash with "unknown selector" on iOS 7. - if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { - [self.locationManager requestWhenInUseAuthorization]; - } - [self.locationManager startUpdatingLocation]; -} - -- (void)setPrebidTargetingParams { - [[PBTargetingParams sharedInstance] setAge:25]; - [[PBTargetingParams sharedInstance] setGender:PBTargetingParamsGenderFemale]; - CMPStorage *consentStorageVC = [[CMPStorage alloc] init]; - - if(consentStorageVC.cmpPresent && consentStorageVC.consentString.length != 0){ - [[PBTargetingParams sharedInstance] setSubjectToGDPR:YES]; - [[PBTargetingParams sharedInstance] setGdprConsentString:consentStorageVC.consentString]; - } -} - -// Location Manager Delegate Methods -- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { - [[PBTargetingParams sharedInstance] setLocation:[locations lastObject]]; -} - - -- (void)applicationWillResignActive:(UIApplication *)application { - // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. - // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. -} - - -- (void)applicationDidEnterBackground:(UIApplication *)application { - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. - // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. -} - - -- (void)applicationWillEnterForeground:(UIApplication *)application { - // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. -} - - -- (void)applicationDidBecomeActive:(UIApplication *)application { - // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. -} - - -- (void)applicationWillTerminate:(UIApplication *)application { - // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. -} - - -@end diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-1024pt-@1x.png b/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-1024pt-@1x.png deleted file mode 100644 index 86125c9bb..000000000 Binary files a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-1024pt-@1x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-20pt-@2x.png b/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-20pt-@2x.png deleted file mode 100644 index 3dc874386..000000000 Binary files a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-20pt-@2x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-20pt-@3x.png b/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-20pt-@3x.png deleted file mode 100644 index a2a8ea29f..000000000 Binary files a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-20pt-@3x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-29pt-@2x.png b/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-29pt-@2x.png deleted file mode 100644 index 067293564..000000000 Binary files a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-29pt-@2x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-29pt-@3x.png b/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-29pt-@3x.png deleted file mode 100644 index 1f6c2a4e9..000000000 Binary files a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-29pt-@3x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-40pt-@2x.png b/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-40pt-@2x.png deleted file mode 100644 index 28fe6d993..000000000 Binary files a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-40pt-@2x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-40pt-@3x.png b/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-40pt-@3x.png deleted file mode 100644 index bf4cb6064..000000000 Binary files a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-40pt-@3x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-60pt-@2x.png b/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-60pt-@2x.png deleted file mode 100644 index f289bbcea..000000000 Binary files a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-60pt-@2x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-60pt-@3x.png b/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-60pt-@3x.png deleted file mode 100644 index 6af6697f8..000000000 Binary files a/examples/PrebidMobileDemo/PrebidMobileDemo/Assets.xcassets/AppIcon.appiconset/AppNexus-Prebid-60pt-@3x.png and /dev/null differ diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/BannerViewControllers/BannerTestsViewController.m b/examples/PrebidMobileDemo/PrebidMobileDemo/BannerViewControllers/BannerTestsViewController.m deleted file mode 100644 index eaa22db36..000000000 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/BannerViewControllers/BannerTestsViewController.m +++ /dev/null @@ -1,112 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "BannerTestsViewController.h" -#import "Constants.h" -#import -#import "MPAdView.h" -#import "PrebidMobile/PrebidMobile.h" - - -@interface BannerTestsViewController () - -@property (strong, nonatomic) MPAdView *mopubAdView; -@property (strong, nonatomic) DFPBannerView *dfpAdView; -@property (strong, nonatomic) UIView *adContainerView; -@property (strong, nonatomic) NSDictionary *settings; - -@end - -@implementation BannerTestsViewController - -- (instancetype)initWithSettings:(NSDictionary *)settings { - self = [super init]; - _settings = settings; - return self; -} - -- (void)viewDidLoad { - [super viewDidLoad]; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - NSString *adServer = [self.settings objectForKey:kAdServer]; - self.title = [adServer stringByAppendingString:@" Banner"]; - - NSString *size = [self.settings objectForKey:kSize]; - NSArray *widthHeight = [size componentsSeparatedByString:@"x"]; - double width = [widthHeight[0] doubleValue]; - double height = [widthHeight[1] doubleValue]; - - _adContainerView = [[UIView alloc] initWithFrame:CGRectMake(([[UIScreen mainScreen] bounds].size.width - width) / 2, 100, width, height)]; - [self.view addSubview:_adContainerView]; - - - if ([adServer isEqualToString:kMoPubAdServer]) { - _mopubAdView = [[MPAdView alloc] initWithAdUnitId:kMoPubBannerAdUnitId - size:CGSizeMake(width, height)]; - _mopubAdView.delegate = self; - [_adContainerView addSubview:_mopubAdView]; - - [PrebidMobile setBidKeywordsOnAdObject:self.mopubAdView withAdUnitId:kAdUnit1Id withTimeout:600 completionHandler:^{ - [self.mopubAdView loadAd]; - }]; - } else if ([adServer isEqualToString:kDFPAdServer]) { - _dfpAdView = [[DFPBannerView alloc] initWithAdSize:GADAdSizeFromCGSize(CGSizeMake(width, height))]; - _dfpAdView.adUnitID = kDFPBannerAdUnitId; - _dfpAdView.rootViewController = self; - _dfpAdView.delegate = self; - - [_adContainerView addSubview:_dfpAdView]; - - [PrebidMobile setBidKeywordsOnAdObject:_dfpAdView withAdUnitId:kAdUnit1Id withTimeout:600 completionHandler:^{ - [self.dfpAdView loadRequest:[DFPRequest request]]; - }]; - } -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -#pragma mark - GADBannerViewDelegate methods - -- (void)adViewDidReceiveAd:(DFPBannerView *)view { - NSLog(@"DFP: %@", NSStringFromSelector(_cmd)); -} - -- (void)adView:(DFPBannerView *)view didFailToReceiveAdWithError:(GADRequestError *)error { - NSLog(@"DFP: %@", NSStringFromSelector(_cmd)); -} - -#pragma mark MPAdViewDelegate - -- (UIViewController *)viewControllerForPresentingModalView { - return self; -} - -/* -#pragma mark - Navigation - -// In a storyboard-based application, you will often want to do a little preparation before navigation -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. -} -*/ - -@end diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/Constants.h b/examples/PrebidMobileDemo/PrebidMobileDemo/Constants.h deleted file mode 100644 index 9f3225b92..000000000 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/Constants.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import - -@interface Constants : NSObject - -extern NSString *const kAdServer; -extern NSString *const kAdType; -extern NSString *const kPlacementId; -extern NSString *const kSize; -extern NSString *const kGDPRString; - -extern NSString *const kDefaultPlacementId; -extern NSString *const kDefaultSize; - -extern NSString *const kBanner; -extern NSString *const kInterstitial; -extern NSString *const kNative; -extern NSString *const kVideo; - -#pragma mark - MoPub constants -extern NSString *const kMoPubAdServer; -extern NSString *const kMoPubBannerAdUnitId; -extern NSString *const kMoPubInterstitialAdUnitId; - -#pragma mark - DFP constants -extern NSString *const kDFPAdServer; -extern NSString *const kDFPBannerAdUnitId; -extern NSString *const kDFPInterstitialAdUnitId; - -#pragma mark - Prebid Mobile constants -extern NSString *const kAccountId; -extern NSString *const kAdUnit1ConfigId; -extern NSString *const kAdUnit2ConfigId; -extern NSUInteger const kPBServerHost; - -extern NSString *const kAdUnit1Id; -extern NSString *const kAdUnit2Id; - -@end diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/Constants.m b/examples/PrebidMobileDemo/PrebidMobileDemo/Constants.m deleted file mode 100644 index b1e08c96b..000000000 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/Constants.m +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "Constants.h" -#import - -@implementation Constants - -NSString *const kAdServer = @"Ad Server"; -NSString *const kAdType = @"Ad Type"; -NSString *const kPlacementId = @"Placement ID"; -NSString *const kSize = @"Size"; - -NSString *const kGDPRString = @"gdprConsentString"; - -NSString *const kDefaultPlacementId = @"9373413"; -NSString *const kDefaultSize = @"300x250"; - -NSString *const kBanner = @"Banner"; -NSString *const kInterstitial = @"Interstitial"; -NSString *const kNative = @"Native"; -NSString *const kVideo = @"Video"; - -#pragma mark - MoPub constants -NSString *const kMoPubAdServer = @"MoPub"; -NSString *const kMoPubBannerAdUnitId = @"a935eac11acd416f92640411234fbba6"; -NSString *const kMoPubInterstitialAdUnitId = @"b75185a84336479c94eb22e5c0ca67db"; - -#pragma mark - DFP constants -NSString *const kDFPAdServer = @"DFP"; -NSString *const kDFPBannerAdUnitId = @"/19968336/PriceCheck_300x250"; -NSString *const kDFPInterstitialAdUnitId = @"/19968336/PriceCheck_Interstitial"; - -#pragma mark - Prebid Mobile constants -NSString *const kAccountId = @"bfa84af2-bd16-4d35-96ad-31c6bb888df0"; -NSString *const kAdUnit1ConfigId = @"6ace8c7d-88c0-4623-8117-75bc3f0a2e45"; -NSString *const kAdUnit2ConfigId = @"625c6125-f19e-4d5b-95c5-55501526b2a4"; -NSUInteger const kPBServerHost = PBServerHostAppNexus; - -NSString *const kAdUnit1Id = @"HomeScreen"; -NSString *const kAdUnit2Id = @"NavScreen"; - -@end diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/IntersitialViewControllers/InterstitialTestsViewController.m b/examples/PrebidMobileDemo/PrebidMobileDemo/IntersitialViewControllers/InterstitialTestsViewController.m deleted file mode 100644 index be95cb930..000000000 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/IntersitialViewControllers/InterstitialTestsViewController.m +++ /dev/null @@ -1,101 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "Constants.h" -#import -#import "InterstitialTestsViewController.h" -#import "MPInterstitialAdController.h" -#import - -@interface InterstitialTestsViewController () - -@property (nonatomic, strong) MPInterstitialAdController *moPubInterstitial; -@property (nonatomic, strong) DFPInterstitial *dfpInterstitial; -@property (strong, nonatomic) NSDictionary *settings; - -@end - -@implementation InterstitialTestsViewController - -- (instancetype)initWithSettings:(NSDictionary *)settings { - self = [super init]; - _settings = settings; - return self; -} - - -- (void)viewDidLoad { - [super viewDidLoad]; - NSString *adServer = [self.settings objectForKey:kAdServer]; - self.title = [adServer stringByAppendingString:@" Interstitial"]; - - if ([adServer isEqualToString:kMoPubAdServer]) { - _moPubInterstitial = [MPInterstitialAdController interstitialAdControllerForAdUnitId:kMoPubInterstitialAdUnitId]; - _moPubInterstitial.delegate = self; - [PrebidMobile setBidKeywordsOnAdObject:self.moPubInterstitial withAdUnitId:kAdUnit2Id withTimeout:600 completionHandler:^{ - [self.moPubInterstitial loadAd]; - }]; - } - else if ([adServer isEqualToString:kDFPAdServer]) { - self.dfpInterstitial = [[DFPInterstitial alloc] initWithAdUnitID:kDFPInterstitialAdUnitId]; - self.dfpInterstitial.delegate = self; - - [PrebidMobile setBidKeywordsOnAdObject:self.dfpInterstitial withAdUnitId:kAdUnit2Id withTimeout:600 completionHandler:^{ - [self.dfpInterstitial loadRequest:[DFPRequest request]]; - }]; - } - -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -#pragma mark - MPInterstitialAdControllerDelegate - -- (void)interstitialDidLoadAd:(MPInterstitialAdController *)interstitial { - [self.moPubInterstitial showFromViewController:self]; -} - -- (void)interstitialDidFailToLoadAd:(MPInterstitialAdController *)interstitial { - -} - -- (void)interstitialDidExpire:(MPInterstitialAdController *)interstitial { - -} - -#pragma mark - GADInterstitialDelegate - -- (void)interstitialDidReceiveAd:(GADInterstitial *)ad { - if(self.dfpInterstitial.isReady){ - [self.dfpInterstitial presentFromRootViewController:self]; - }else { - NSLog(@"Ad wasn't ready"); - } -} - -/* -#pragma mark - Navigation - -// In a storyboard-based application, you will often want to do a little preparation before navigation -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. -} -*/ - -@end diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/NativeViewControllers/NativeTestsViewController.m b/examples/PrebidMobileDemo/PrebidMobileDemo/NativeViewControllers/NativeTestsViewController.m deleted file mode 100644 index d78e5bad4..000000000 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/NativeViewControllers/NativeTestsViewController.m +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "NativeTestsViewController.h" - -@interface NativeTestsViewController () - -@end - -@implementation NativeTestsViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view. -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -/* -#pragma mark - Navigation - -// In a storyboard-based application, you will often want to do a little preparation before navigation -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. -} -*/ - -@end diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/SettingsViewController.m b/examples/PrebidMobileDemo/PrebidMobileDemo/SettingsViewController.m deleted file mode 100644 index 4159cff6c..000000000 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/SettingsViewController.m +++ /dev/null @@ -1,262 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "BannerTestsViewController.h" -#import "Constants.h" -#import "InterstitialTestsViewController.h" -#import "SettingsViewController.h" -#import "VideoTestsViewController.h" - -#import -#import -#import -#import -#import -#import -#import - -static NSString *const kSeeAdButtonTitle = @"See Ad"; -static NSString *const kAdSettingsTableViewReuseId = @"AdSettingsTableItem"; - -static CGFloat const kRightMargin = 15; - -@interface SettingsViewController () - -@property (strong, nonatomic) UITableView *settingsTableView; -@property (strong, nonatomic) NSArray *generalSettingsData; -@property (strong, nonatomic) NSArray *sectionHeaders; -@property (strong, nonatomic) NSMutableDictionary *generalSettingsFields; -@property (strong) CMPStorage *consentStorageVC; - -@property (strong) UIButton *nextButton; -@end - -@implementation SettingsViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - _settingsTableView = [[UITableView alloc] initWithFrame:self.view.frame style:UITableViewStyleGrouped]; - _settingsTableView.dataSource = self; - _settingsTableView.delegate = self; - - [self.view addSubview:_settingsTableView]; - _generalSettingsData = @[kAdServer, kAdType, kSize]; - [self initializeGeneralSettingsFields]; - - _sectionHeaders = @[@"General"];//, @"Targeting", @"Custom Keywords"]; - - UIBarButtonItem *previewAdButton = [[UIBarButtonItem alloc] initWithTitle:kSeeAdButtonTitle style:UIBarButtonItemStylePlain target:self action:@selector(previewAdButtonClicked:)]; - - self.navigationItem.rightBarButtonItem = previewAdButton; - - _consentStorageVC = [[CMPStorage alloc] init]; - - if(_consentStorageVC.cmpPresent == NO){ - UIBarButtonItem *consentButton = [[UIBarButtonItem alloc] initWithTitle:@"Get Consent" style:UIBarButtonItemStylePlain target:self action:@selector(didPressNext:)]; - - self.navigationItem.leftBarButtonItem = consentButton; - } - - -} - --(void) viewWillAppear:(BOOL)animated{ - [super viewWillAppear:YES]; -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -- (void)initializeGeneralSettingsFields { - _generalSettingsFields = [[NSMutableDictionary alloc] init]; - - UISegmentedControl *adServerSegControl = [[UISegmentedControl alloc] initWithItems:@[kDFPAdServer, kMoPubAdServer]]; - adServerSegControl.selectedSegmentIndex = 0; - [adServerSegControl addTarget:self - action:@selector(adServerClicked:) - forControlEvents:UIControlEventValueChanged]; - UISegmentedControl *adTypeSegControl = [[UISegmentedControl alloc] initWithItems:@[kBanner, kInterstitial]]; - adTypeSegControl.selectedSegmentIndex = 0; - - UITextField *placementIdTextField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 120, 50)]; - placementIdTextField.placeholder = kDefaultPlacementId; - placementIdTextField.text = kDefaultPlacementId; - placementIdTextField.textAlignment = NSTextAlignmentRight; - - UITextField *sizeTextField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 120, 50)]; - sizeTextField.placeholder = kDefaultSize; - sizeTextField.text = kDefaultSize; - sizeTextField.textAlignment = NSTextAlignmentRight; - - [_generalSettingsFields setObject:adServerSegControl forKey:kAdServer]; - [_generalSettingsFields setObject:adTypeSegControl forKey:kAdType]; - [_generalSettingsFields setObject:placementIdTextField forKey:kPlacementId]; - [_generalSettingsFields setObject:sizeTextField forKey:kSize]; -} - -- (void)previewAdButtonClicked:(id)sender { - UISegmentedControl *adServerSegControl = [self.generalSettingsFields objectForKey:kAdServer]; - UISegmentedControl *adTypeSegControl = [self.generalSettingsFields objectForKey:kAdType]; - UITextField *placementIdField = [self.generalSettingsFields objectForKey:kPlacementId]; - UITextField *sizeIdField = [self.generalSettingsFields objectForKey:kSize]; - - NSString *adType =[adTypeSegControl titleForSegmentAtIndex:[adTypeSegControl selectedSegmentIndex]]; - - NSDictionary *settings = @{kAdServer : [adServerSegControl titleForSegmentAtIndex:[adServerSegControl selectedSegmentIndex]], - kPlacementId : [placementIdField text], - kSize : [sizeIdField text], kGDPRString :self.consentStorageVC.consentString}; - - UIViewController *vcToPush; - if ([adType isEqualToString:kBanner]) { - vcToPush = [[BannerTestsViewController alloc] initWithSettings:settings]; - } else if ([adType isEqualToString:kInterstitial]) { - vcToPush = [[InterstitialTestsViewController alloc] initWithSettings:settings]; - } else if ([adType isEqualToString:kVideo]) { - vcToPush = [[VideoTestsViewController alloc] init]; - } - - if (vcToPush != nil) { - vcToPush.hidesBottomBarWhenPushed = YES; - [self.navigationController pushViewController:vcToPush animated:NO]; - } -} - -- (void)adServerClicked:(id)sender { - UISegmentedControl *adServerSegControl = (UISegmentedControl *)sender; - NSString *adServer = [adServerSegControl titleForSegmentAtIndex:[adServerSegControl selectedSegmentIndex]]; - PBPrimaryAdServerType primaryAdServer = PBPrimaryAdServerUnknown; - if ([adServer isEqualToString:kDFPAdServer]) { - primaryAdServer = PBPrimaryAdServerDFP; - } else if ([adServer isEqualToString:kMoPubAdServer]) { - primaryAdServer = PBPrimaryAdServerMoPub; - } - [self setupPrebidAndRegisterAdUnitsWithAdServer:primaryAdServer]; -} - -- (BOOL)setupPrebidAndRegisterAdUnitsWithAdServer:(PBPrimaryAdServerType)adServer { - @try { - PBBannerAdUnit *__nullable adUnit1 = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:kAdUnit1Id andConfigId:kAdUnit1ConfigId]; - PBInterstitialAdUnit *__nullable adUnit2 = [[PBInterstitialAdUnit alloc] initWithAdUnitIdentifier:kAdUnit2Id andConfigId:kAdUnit2ConfigId]; - [adUnit1 addSize:CGSizeMake(300, 250)]; - - [PrebidMobile shouldLoadOverSecureConnection:YES]; - - [PrebidMobile registerAdUnits:@[adUnit1, adUnit2] withAccountId:kAccountId withHost:kPBServerHost andPrimaryAdServer:adServer]; - - } @catch (PBException *ex) { - NSLog(@"%@",[ex reason]); - } @finally { - return YES; - } -} - -#pragma mark UITableViewDataSource methods - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return self.sectionHeaders.count; -} - -- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { - return [self.sectionHeaders objectAtIndex:section]; -} - -- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return self.generalSettingsData.count; -} - -//- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { -// if(section == 0){ -// return 40.0f; -// } -// else { -// return 20.0f; -// } -//} - -- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { - NSString *simpleTableIdentifier = kAdSettingsTableViewReuseId; - - UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; - - if (cell == nil) { - cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; - } - UIView *rightContentView = [self.generalSettingsFields objectForKey:[self.generalSettingsData objectAtIndex:indexPath.row]]; - - switch (indexPath.section) { - case 0: - cell.textLabel.text = [self.generalSettingsData objectAtIndex:indexPath.row]; - rightContentView.frame = CGRectMake([[UIScreen mainScreen] bounds].size.width - rightContentView.frame.size.width - kRightMargin, - (cell.contentView.frame.size.height - rightContentView.frame.size.height) / 2, - rightContentView.frame.size.width, - rightContentView.frame.size.height); - [cell.contentView addSubview:rightContentView]; - break; - default: - break; - } - return cell; -} - -- (void)didPressNext:(id)sender { - CMPConsentViewController *consentToolVC = [[CMPConsentViewController alloc] init]; - // Both the Android and iOS versions are implemented as a wrapper around modified Web CMP reference. - // Instruction on how to install and configure the WebCMP JS reference can be found inside the reference folder of this repo. - // This example uses a demo page setup using the same instructions. - consentToolVC.cmpSettings.cmpURL = @"https://acdn.adnxs.com/mobile/democmp/docs/mobilecomplete.html"; - consentToolVC.cmpSettings.subjectToGDPR = @"1"; - consentToolVC.cmpSettings.cmpPresent = YES; - consentToolVC.delegate = self; - consentToolVC.modalPresentationStyle = UIModalPresentationOverCurrentContext; - [self presentViewController:consentToolVC animated:YES completion:nil]; -} - -#pragma mark CMPConsentToolViewController delegate --(void)consentToolViewController:(CMPConsentViewController *)consentToolViewController didReceiveConsentString:(NSString *)consentString { - [consentToolViewController dismissViewControllerAnimated:YES completion:nil]; - - UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"GDPR Consent" - message:consentString - preferredStyle:UIAlertControllerStyleAlert]; - - UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleCancel - handler:^(UIAlertAction * action) { - NSLog(@"my text"); - [[PBTargetingParams sharedInstance] setSubjectToGDPR:YES]; - [[PBTargetingParams sharedInstance] setGdprConsentString:consentString]; - self.navigationItem.leftBarButtonItem = nil; - - }]; - - [alert addAction:defaultAction]; - [self presentViewController:alert animated:NO completion:nil]; -} - -- (void)consentToolViewController:(CMPConsentViewController *)consentToolViewController didReceiveURL:(NSURL *)url{ - - UIApplication *application = [UIApplication sharedApplication]; - if (@available(iOS 10.0, *)) { - [application openURL:url options:@{} completionHandler:nil]; - } else { - // Fallback on earlier versions - [[UIApplication sharedApplication] openURL:url]; - - } -} - -@end diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/Supporting Files/main.m b/examples/PrebidMobileDemo/PrebidMobileDemo/Supporting Files/main.m deleted file mode 100644 index 6f66c855c..000000000 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/Supporting Files/main.m +++ /dev/null @@ -1,16 +0,0 @@ -// -// main.m -// PrebidMobileDemo -// -// Created by Nicole Hedley on 3/22/17. -// Copyright © 2017 Nicole Hedley. All rights reserved. -// - -#import -#import "AppDelegate.h" - -int main(int argc, char * argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/VideoViewControllers/VideoTestsViewController.h b/examples/PrebidMobileDemo/PrebidMobileDemo/VideoViewControllers/VideoTestsViewController.h deleted file mode 100644 index 67b68581d..000000000 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/VideoViewControllers/VideoTestsViewController.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import - -@interface VideoTestsViewController : UIViewController - -@end diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/VideoViewControllers/VideoTestsViewController.m b/examples/PrebidMobileDemo/PrebidMobileDemo/VideoViewControllers/VideoTestsViewController.m deleted file mode 100644 index 48b8e5bba..000000000 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/VideoViewControllers/VideoTestsViewController.m +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "VideoTestsViewController.h" - -@interface VideoTestsViewController () - -@end - -@implementation VideoTestsViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - // Do any additional setup after loading the view. -} - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -/* -#pragma mark - Navigation - -// In a storyboard-based application, you will often want to do a little preparation before navigation -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. -} -*/ - -@end diff --git a/examples/PrebidMobileDemo/PrebidMobileDemoTests/PrebidMobileDemoTests.m b/examples/PrebidMobileDemo/PrebidMobileDemoTests/PrebidMobileDemoTests.m deleted file mode 100644 index 2d96fff78..000000000 --- a/examples/PrebidMobileDemo/PrebidMobileDemoTests/PrebidMobileDemoTests.m +++ /dev/null @@ -1,39 +0,0 @@ -// -// PrebidMobileDemoTests.m -// PrebidMobileDemoTests -// -// Created by Nicole Hedley on 3/22/17. -// Copyright © 2017 Nicole Hedley. All rights reserved. -// - -#import - -@interface PrebidMobileDemoTests : XCTestCase - -@end - -@implementation PrebidMobileDemoTests - -- (void)setUp { - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown { - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -- (void)testExample { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. -} - -- (void)testPerformanceExample { - // This is an example of a performance test case. - [self measureBlock:^{ - // Put the code you want to measure the time of here. - }]; -} - -@end diff --git a/examples/PrebidMobileDemo/bin/make/ipa.sh b/examples/PrebidMobileDemo/bin/make/ipa.sh deleted file mode 100755 index 8c724274d..000000000 --- a/examples/PrebidMobileDemo/bin/make/ipa.sh +++ /dev/null @@ -1,130 +0,0 @@ -#!/usr/bin/env bash - -function info { - echo "$(tput setaf 2)INFO: $1$(tput sgr0)" -} - -function error { - echo "$(tput setaf 1)ERROR: $1$(tput sgr0)" -} - -function banner { - echo "" - echo "$(tput setaf 5)######## $1 #######$(tput sgr0)" - echo "" -} - -function ditto_or_exit { - ditto "${1}" "${2}" - if [ "$?" != 0 ]; then - error "Could not copy:" - error " source: ${1}" - error " target: ${2}" - if [ ! -e "${1}" ]; then - error "The source file does not exist" - error "Did a previous xcodebuild step fail?" - fi - error "Exiting 1" - exit 1 - fi -} - -banner "Preparing" - -if [ "${XCPRETTY}" = "0" ]; then - USE_XCPRETTY= -else - USE_XCPRETTY=`which xcpretty | tr -d '\n'` -fi - -if [ ! -z ${USE_XCPRETTY} ]; then - XC_PIPE='xcpretty -c' -else - XC_PIPE='cat' -fi - -XC_TARGET="PrebidMobileDemo" -XC_PROJECT="PrebidMobileDemo.xcodeproj" -XC_SCHEME="${XC_TARGET}" -XC_CONFIG=Debug - -XC_BUILD_DIR="build/ipa" -INSTALL_DIR="Products/ipa" - -APP="${XC_TARGET}.app" -DSYM="${APP}.dSYM" -IPA="${XC_TARGET}.ipa" - -INSTALLED_APP="${INSTALL_DIR}/${APP}" -INSTALLED_DSYM="${INSTALL_DIR}/${DSYM}" -INSTALLED_IPA="${INSTALL_DIR}/${IPA}" - -rm -rf "${INSTALL_DIR}" -mkdir -p "${INSTALL_DIR}" - -info "Prepared install directory ${INSTALL_DIR}" - -BUILD_PRODUCTS_DIR="${XC_BUILD_DIR}/Build/Products/${XC_CONFIG}-iphoneos" -BUILD_PRODUCTS_APP="${BUILD_PRODUCTS_DIR}/${APP}" -BUILD_PRODUCTS_DSYM="${BUILD_PRODUCTS_DIR}/${DSYM}" - -rm -rf "${BUILD_PRODUCTS_APP}" -rm -rf "${BUILD_PRODUCTS_DSYM}" - -info "Prepared archive directory" - -banner "Building ${IPA}" - -if [ -z "${CODE_SIGN_IDENTITY}" ]; then - COMMAND_LINE_BUILD=1 xcrun xcodebuild \ - -SYMROOT="${XC_BUILD_DIR}" \ - -derivedDataPath "${XC_BUILD_DIR}" \ - -project "${XC_PROJECT}" \ - -scheme "${XC_TARGET}" \ - -configuration "${XC_CONFIG}" \ - -sdk iphoneos \ - ARCHS="armv7 arm64" \ - VALID_ARCHS="armv7 arm64" \ - ONLY_ACTIVE_ARCH=NO \ - build | $XC_PIPE -else - COMMAND_LINE_BUILD=1 xcrun xcodebuild \ - CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" \ - -SYMROOT="${XC_BUILD_DIR}" \ - -derivedDataPath "${XC_BUILD_DIR}" \ - -project "${XC_PROJECT}" \ - -scheme "${XC_TARGET}" \ - -configuration "${XC_CONFIG}" \ - -sdk iphoneos \ - ARCHS="armv7 arm64" \ - VALID_ARCHS="armv7 arm64" \ - ONLY_ACTIVE_ARCH=NO \ - build | $XC_PIPE -fi - -EXIT_CODE=${PIPESTATUS[0]} - -if [ $EXIT_CODE != 0 ]; then - error "Building ipa failed." - exit $EXIT_CODE -else - info "Building ipa succeeded." -fi - -banner "Installing" - -ditto_or_exit "${BUILD_PRODUCTS_APP}" "${INSTALLED_APP}" -info "Installed ${INSTALLED_APP}" - -PAYLOAD_DIR="${INSTALL_DIR}/Payload" -mkdir -p "${PAYLOAD_DIR}" - -ditto_or_exit "${INSTALLED_APP}" "${PAYLOAD_DIR}/${APP}" - -xcrun ditto -ck --rsrc --sequesterRsrc --keepParent \ - "${PAYLOAD_DIR}" \ - "${INSTALLED_IPA}" - -info "Installed ${INSTALLED_IPA}" - -info "Done!" diff --git a/examples/PrebidMobileDemo/calabash.framework/Headers b/examples/PrebidMobileDemo/calabash.framework/Headers deleted file mode 120000 index a177d2a6b..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/examples/PrebidMobileDemo/calabash.framework/Resources b/examples/PrebidMobileDemo/calabash.framework/Resources deleted file mode 120000 index 953ee36f3..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/examples/PrebidMobileDemo/calabash.framework/Versions/0.20.4 b/examples/PrebidMobileDemo/calabash.framework/Versions/0.20.4 deleted file mode 120000 index 8c7e5a667..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/Versions/0.20.4 +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/CalabashServer.h b/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/CalabashServer.h deleted file mode 100644 index 97bb25ba3..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/CalabashServer.h +++ /dev/null @@ -1,14 +0,0 @@ -// Created by Karl Krukow on 11/08/11. -// Copyright 2011 LessPainful. All rights reserved. - -#import - -@class LPHTTPServer; - -@interface CalabashServer : NSObject { - LPHTTPServer *_httpServer; -} - -+ (void) start; - -@end diff --git a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPCORSResponse.h b/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPCORSResponse.h deleted file mode 100644 index e5b6343a4..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPCORSResponse.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// LPCORSResponse.h -// LPSimpleExample -// -// Created by Karl Krukow on 3/3/14. -// Copyright (c) 2014 Xamarin. All rights reserved. -// - -#import -#import "LPHTTPResponse.h" -#import "LPHTTPDataResponse.h" - - -@interface LPCORSResponse : LPHTTPDataResponse - -@end diff --git a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPHTTPAsyncFileResponse.h b/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPHTTPAsyncFileResponse.h deleted file mode 100644 index 1f2db9979..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPHTTPAsyncFileResponse.h +++ /dev/null @@ -1,75 +0,0 @@ -#import -#import "LPHTTPResponse.h" - -@class LPHTTPConnection; - -/** - * This is an asynchronous version of LPHTTPFileResponse. - * It reads data from the given file asynchronously via GCD. - * - * It may be overridden to allow custom post-processing of the data that has been read from the file. - * An example of this is the HTTPDynamicFileResponse class. - **/ - -@interface LPHTTPAsyncFileResponse : NSObject { - LPHTTPConnection *connection; - - NSString *filePath; - UInt64 fileLength; - UInt64 fileOffset; // File offset as pertains to data given to connection - UInt64 readOffset; // File offset as pertains to data read from file (but maybe not returned to connection) - - BOOL aborted; - - NSData *data; - - int fileFD; - void *readBuffer; - NSUInteger readBufferSize; // Malloced size of readBuffer - NSUInteger readBufferOffset; // Offset within readBuffer where the end of existing data is - NSUInteger readRequestLength; - dispatch_queue_t readQueue; - dispatch_source_t readSource; - BOOL readSourceSuspended; -} - -- (id)initWithFilePath:(NSString *)filePath forConnection:(LPHTTPConnection *)connection; - -- (NSString *)filePath; - -@end - -/** - * Explanation of Variables (excluding those that are obvious) - * - * fileOffset - * This is the number of bytes that have been returned to the connection via the readDataOfLength method. - * If 1KB of data has been read from the file, but none of that data has yet been returned to the connection, - * then the fileOffset variable remains at zero. - * This variable is used in the calculation of the isDone method. - * Only after all data has been returned to the connection are we actually done. - * - * readOffset - * Represents the offset of the file descriptor. - * In other words, the file position indicator for our read stream. - * It might be easy to think of it as the total number of bytes that have been read from the file. - * However, this isn't entirely accurate, as the setOffset: method may have caused us to - * jump ahead in the file (lseek). - * - * readBuffer - * Malloc'd buffer to hold data read from the file. - * - * readBufferSize - * Total allocation size of malloc'd buffer. - * - * readBufferOffset - * Represents the position in the readBuffer where we should store new bytes. - * - * readRequestLength - * The total number of bytes that were requested from the connection. - * It's OK if we return a lesser number of bytes to the connection. - * It's NOT OK if we return a greater number of bytes to the connection. - * Doing so would disrupt proper support for range requests. - * If, however, the response is chunked then we don't need to worry about this. - * Chunked responses inheritly don't support range requests. - **/ diff --git a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPHTTPDataResponse.h b/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPHTTPDataResponse.h deleted file mode 100644 index a03e61256..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPHTTPDataResponse.h +++ /dev/null @@ -1,12 +0,0 @@ -#import -#import "LPHTTPResponse.h" - - -@interface LPHTTPDataResponse : NSObject { - NSUInteger offset; - NSData *data; -} - -- (id)initWithData:(NSData *)data; - -@end diff --git a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPHTTPDynamicFileResponse.h b/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPHTTPDynamicFileResponse.h deleted file mode 100644 index 6566247a3..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPHTTPDynamicFileResponse.h +++ /dev/null @@ -1,52 +0,0 @@ -#import -#import "LPHTTPResponse.h" -#import "LPHTTPAsyncFileResponse.h" - -@class LPHTTPConnection; -/** - * This class is designed to assist with dynamic content. - * Imagine you have a file that you want to make dynamic: - * - * - * - *

ComputerName Control Panel

- * ... - *
  • System Time: SysTime
  • - * - * - * - * Now you could generate the entire file in Objective-C, - * but this would be a horribly tedious process. - * Beside, you want to design the file with professional tools to make it look pretty. - * - * So all you have to do is escape your dynamic content like this: - * - * ... - *

    %%ComputerName%% Control Panel

    - * ... - *
  • System Time: %%SysTime%%
  • - * - * And then you create an instance of this class with: - * - * - separator = @"%%" - * - replacementDictionary = { "ComputerName"="Black MacBook", "SysTime"="2010-04-30 03:18:24" } - * - * This class will then perform the replacements for you, on the fly, as it reads the file data. - * This class is also asynchronous, so it will perform the file IO using its own GCD queue. - * - * All keys for the replacementDictionary must be NSString's. - * Values for the replacementDictionary may be NSString's, or any object that - * returns what you want when its description method is invoked. - **/ - -@interface LPHTTPDynamicFileResponse : LPHTTPAsyncFileResponse { - NSData *separator; - NSDictionary *replacementDict; -} - -- (id)initWithFilePath:(NSString *)filePath - forConnection:(LPHTTPConnection *)connection - separator:(NSString *)separatorStr - replacementDictionary:(NSDictionary *)dictionary; - -@end diff --git a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPHTTPFileResponse.h b/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPHTTPFileResponse.h deleted file mode 100644 index 70f6efee6..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPHTTPFileResponse.h +++ /dev/null @@ -1,25 +0,0 @@ -#import -#import "LPHTTPResponse.h" - -@class LPHTTPConnection; - - -@interface LPHTTPFileResponse : NSObject { - LPHTTPConnection *connection; - - NSString *filePath; - UInt64 fileLength; - UInt64 fileOffset; - - BOOL aborted; - - int fileFD; - void *buffer; - NSUInteger bufferSize; -} - -- (id)initWithFilePath:(NSString *)filePath forConnection:(LPHTTPConnection *)connection; - -- (NSString *)filePath; - -@end diff --git a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPHTTPResponse.h b/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPHTTPResponse.h deleted file mode 100644 index 682810327..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPHTTPResponse.h +++ /dev/null @@ -1,162 +0,0 @@ -#import - - -@protocol LPHTTPResponse - -/** Returns the length of the data in bytes. If you don't know the length in - * advance, implement the isChunked method and have it return YES. - **/ -- (UInt64)contentLength; - -/** The HTTP server supports range requests in order to allow things like file - * download resumption and optimized streaming on mobile devices. - **/ -- (UInt64)offset; - -- (void)setOffset:(UInt64)offset; - -/** Returns the data for the response. You do not have to return data of the - * exact length that is given. You may optionally return data of a lesser - * length. However, you must never return data of a greater length than - * requested. Doing so could disrupt proper support for range requests. - * - * To support asynchronous responses, read the discussion at the bottom of this - * header. - **/ -- (NSData *)readDataOfLength:(NSUInteger)length; - -/** Should only return YES after the HTTPConnection has read all available data. - * That is, all data for the response has been returned to the HTTPConnection - * via the readDataOfLength method. - **/ -- (BOOL)isDone; - -@optional - -/** If you need time to calculate any part of the HTTP response headers (status - * code or header fields), this method allows you to delay sending the headers - * so that you may asynchronously execute the calculations. Simply implement - * this method and return YES until you have everything you need concerning the - * headers. - * - * This method ties into the asynchronous response architecture of the - * HTTPConnection. You should read the full discussion at the bottom of this - * header. - * - * If you return YES from this method, the HTTPConnection will wait for you to - * invoke the responseHasAvailableData method. After you do, the HTTPConnection - * will again invoke this method to see if the response is ready to send the - * headers. - * - * You should only delay sending the headers until you have everything you need - * concerning just the headers. Asynchronously generating the body of the - * response is not an excuse to delay sending the headers. Instead you should - * tie into the asynchronous response architecture, and use techniques such as - * the isChunked method. - * - * Important: You should read the discussion at the bottom of this header. - **/ -- (BOOL)delayResponseHeaders; - -/** Status code for response. Allows for responses such as redirect (301), etc. - **/ -- (NSInteger)status; - -/** If you want to add any extra HTTP headers to the response, simply return - * them in a dictionary in this method. - **/ -- (NSDictionary *)httpHeaders; - -/** If you don't know the content-length in advance, implement this method in - * your custom response class and return YES. - * - * Important: You should read the discussion at the bottom of this header. - **/ -- (BOOL)isChunked; - -/** This method is called from the HTTPConnection class when the connection is - * closed, or when the connection is finished with the response. If your - * response is asynchronous, you should implement this method so you know not to - * invoke any methods on the HTTPConnection after this method is called (as the - * connection may be deallocated). - **/ -- (void)connectionDidClose; - -@end - - -/** Important notice to those implementing custom asynchronous and/or chunked - * responses: - * - * HTTPConnection supports asynchronous responses. All you have to do in your - * custom response class is asynchronously generate the response, and invoke - * HTTPConnection's responseHasAvailableData method. You don't have to wait - * until you have all of the response ready to invoke this method. For example, - * if you generate the response in incremental chunks, you could call - * responseHasAvailableData after generating each chunk. Please see the - * HTTPAsyncFileResponse class for an example of how to do this. - * - * The normal flow of events for an HTTPConnection while responding to a request - * is like this: - Send http response headers - Get data from response via - * readDataOfLength method. - Add data to asyncSocket's write queue. - Wait - * for asyncSocket to notify it that the data has been sent. - Get more data - * from response via readDataOfLength method. - ... continue this cycle until - * the entire response has been sent. - * - * With an asynchronous response, the flow is a little different. - * - * First the LPHTTPResponse is given the opportunity to postpone sending the - * HTTP response headers. This allows the response to asynchronously execute - * any code needed to calculate a part of the header. An example might be the - * response needs to generate some custom header fields, or perhaps the response - * needs to look for a resource on network-attached storage. Since the - * network-attached storage may be slow, the response doesn't know whether to - * send a 200 or 404 yet. In situations such as this, the LPHTTPResponse simply - * implements the delayResponseHeaders method and returns YES. After returning - * YES from this method, the HTTPConnection will wait until the response invokes - * its responseHasAvailableData method. After this occurs, the HTTPConnection - * will again query the delayResponseHeaders method to see if the response is - * ready to send the headers. This cycle will continue until the - * delayResponseHeaders method returns NO. - * - * You should only delay sending the response headers until you have everything - * you need concerning just the headers. Asynchronously generating the body of - * the response is not an excuse to delay sending the headers. - * - * After the response headers have been sent, the HTTPConnection calls your - * readDataOfLength method. You may or may not have any available data at this - * point. If you don't, then simply return nil. You should later invoke - * HTTPConnection's responseHasAvailableData when you have data to send. - * - * You don't have to keep track of when you return nil in the readDataOfLength - * method, or how many times you've invoked responseHasAvailableData. Just - * simply call responseHasAvailableData whenever you've generated new data, and - * return nil in your readDataOfLength whenever you don't have any available - * data in the requested range. HTTPConnection will automatically detect when - * it should be requesting new data and will act appropriately. - * - * It's important that you also keep in mind that the HTTP server supports range - * requests. The setOffset method is mandatory, and should not be ignored. - * Make sure you take into account the offset within the readDataOfLength - * method. You should also be aware that the HTTPConnection automatically sorts - * any range requests. So if your setOffset method is called with a value of - * 100, then you can safely release bytes 0-99. - * - * HTTPConnection can also help you keep your memory footprint small. Imagine - * you're dynamically generating a 10 MB response. You probably don't want to - * load all this data into RAM, and sit around waiting for HTTPConnection to - * slowly send it out over the network. All you need to do is pay attention to - * when HTTPConnection requests more data via readDataOfLength. This is because - * HTTPConnection will never allow asyncSocket's write queue to get much bigger - * than READ_CHUNKSIZE bytes. You should consider how you might be able to take - * advantage of this fact to generate your asynchronous response on demand, - * while at the same time keeping your memory footprint small, and your - * application lightning fast. - * - * If you don't know the content-length in advanced, you should also implement - * the isChunked method. This means the response will not include a - * Content-Length header, and will instead use "Transfer-Encoding: chunked". - * There's a good chance that if your response is asynchronous and dynamic, it's - * also chunked. If your response is chunked, you don't need to worry about - * range requests. - **/ diff --git a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPRoute.h b/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPRoute.h deleted file mode 100644 index ec8b95ed2..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPRoute.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// LPRoute.h -// -// Created by Karl Krukow on 13/08/11. -// Copyright 2011 LessPainful. All rights reserved. -// - -#import - -@class LPHTTPConnection; - -@protocol LPRoute - -@optional -- (void) setParameters:(NSDictionary *) parameters; - -- (void) setConnection:(LPHTTPConnection *) connection; - -- (BOOL) supportsMethod:(NSString *) method atPath:(NSString *) path; - -- (NSDictionary *) JSONResponseForMethod:(NSString *) method - URI:(NSString *) path - data:(NSDictionary *) data; - -@end diff --git a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPRouter.h b/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPRouter.h deleted file mode 100644 index 1a8f11d6a..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPRouter.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// LPRouter.h -// Created by Karl Krukow on 13/08/11. -// Copyright 2011 LessPainful. All rights reserved. - -#import "LPHTTPConnection.h" -#import "LPRoute.h" - -@interface LPRouter : LPHTTPConnection - -- (NSData *) postData; - -+ (void) addRoute:(id ) route forPath:(NSString *) path; - -@end diff --git a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPVersionRoute.h b/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPVersionRoute.h deleted file mode 100644 index 9de75b4d3..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPVersionRoute.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// LPVersionRoute.h -// calabash -// -// Created by Karl Krukow on 22/06/12. -// Copyright (c) 2012 LessPainful. All rights reserved. -// - -#import -#import "LPRoute.h" - -/*** UNEXPECTED *** - We have tools that search the strings in the compiled binary for a match on - 'CALABASH VERSION'. - - eg. $ strings Briar-cal.app/Briar-cal | grep -E 'CALABASH VERSION' - - We use this information to determine the version of the server that is compiled - into binary. - - Do not change the 'CALABASH VERSION' portion of the following constant without - updating the ruby API. - ******************/ -#define kLPCALABASHVERSION @"CALABASH VERSION: 0.20.4" - -@interface LPVersionRoute : NSObject - -@end diff --git a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPWebQuery.h b/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPWebQuery.h deleted file mode 100644 index da990ec1e..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPWebQuery.h +++ /dev/null @@ -1,32 +0,0 @@ -// -// LPWebQuery.h -// CalabashJS -// -// Created by Karl Krukow on 27/06/12. -// Copyright (c) 2012 Xamarin. All rights reserved. -// - -#import -#import -#import "LPWebViewProtocol.h" -#import "UIWebView+LPWebView.h" - -static NSString *const LP_QUERY_JS = @"(function(){function isHostMethod(object,property){var t=typeof object[property];return t==='function'||(!!(t==='object'&&object[property]))||t==='unknown';}var NODE_TYPES={1:'ELEMENT_NODE',2:'ATTRIBUTE_NODE',3:'TEXT_NODE',9:'DOCUMENT_NODE'};function boundingClientRect(object){var rect=null,jsonRect=null;if(isHostMethod(object,'getBoundingClientRect')){rect=object.getBoundingClientRect(),jsonRect={left:rect.left,top:rect.top,width:rect.width,height:rect.height,x:rect.left+Math.floor(rect.width/2),y:rect.top+Math.floor(rect.height/2)};}return jsonRect;}function computeRectForNode(object,fullDump){var res={};res.rect=boundingClientRect(object);res.nodeType=NODE_TYPES[object.nodeType]||res.nodeType+' (Unexpected)';res.nodeName=object.nodeName;res.id=object.id||'';res['class']=object.className||'';if(object.href){res.href=object.href;}if(object.hasOwnProperty('value')){res.value=object.value||'';}if(fullDump||object.nodeType==3){res.textContent=object.textContent;}return res;}function toJSON(object,fullDump,queryFrame,queryWindow){var res,i,N,spanEl,parentEl;if(typeof object==='undefined'){throw {message:'Calling toJSON with undefined'};}else{if(object instanceof queryWindow.Text){parentEl=object.parentElement;if(parentEl){spanEl=queryFrame.createElement('calabash');spanEl.style.display='inline';spanEl.innerHTML=object.textContent;parentEl.replaceChild(spanEl,object);res=computeRectForNode(spanEl,fullDump);res.nodeType=NODE_TYPES[object.nodeType];res.textContent=object.textContent;delete res.nodeName;delete res.id;delete res['class'];parentEl.replaceChild(object,spanEl);}else{res=object;}}else{if(object instanceof queryWindow.Node){res=computeRectForNode(object,fullDump);}else{if(object instanceof queryWindow.NodeList||(typeof object=='object'&&object&&typeof object.length==='number'&&object.length>0&&typeof object[0]!=='undefined')){res=[];for(i=0,N=object.length;i *) webView - includeInvisible:(BOOL) includeInvisible; - -+ (NSDictionary *) dictionaryOfViewsInWebView:(UIView *) webView; - -@end diff --git a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPWebViewProtocol.h b/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPWebViewProtocol.h deleted file mode 100644 index e755884c3..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPWebViewProtocol.h +++ /dev/null @@ -1,13 +0,0 @@ -#import - -@protocol LPWebViewProtocol - -@required - -// The bridge between UIWebView and WKWebKit. -- (NSString *) calabashStringByEvaluatingJavaScript:(NSString *) javascript; - -- (BOOL) pointInside:(CGPoint) point withEvent:(UIEvent *) event; -- (UIScrollView *) scrollView; - -@end diff --git a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPWebViewUtils.h b/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPWebViewUtils.h deleted file mode 100644 index 956de81a3..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/LPWebViewUtils.h +++ /dev/null @@ -1,8 +0,0 @@ -#import - -@interface LPWebViewUtils : NSObject - -+ (BOOL) isWebView:(id) object; -+ (BOOL) isIFrameResult:(NSDictionary *)result; - -@end diff --git a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/UIWebView+LPWebView.h b/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/UIWebView+LPWebView.h deleted file mode 100644 index 9840ea7ad..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Headers/UIWebView+LPWebView.h +++ /dev/null @@ -1,6 +0,0 @@ -#import -#import "LPWebViewProtocol.h" - -@interface UIWebView (UIWebView_LPWebView) - -@end diff --git a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Resources/version b/examples/PrebidMobileDemo/calabash.framework/Versions/A/Resources/version deleted file mode 100755 index b6b94674a..000000000 Binary files a/examples/PrebidMobileDemo/calabash.framework/Versions/A/Resources/version and /dev/null differ diff --git a/examples/PrebidMobileDemo/calabash.framework/Versions/A/calabash b/examples/PrebidMobileDemo/calabash.framework/Versions/A/calabash deleted file mode 100644 index eb781141a..000000000 Binary files a/examples/PrebidMobileDemo/calabash.framework/Versions/A/calabash and /dev/null differ diff --git a/examples/PrebidMobileDemo/calabash.framework/Versions/Current b/examples/PrebidMobileDemo/calabash.framework/Versions/Current deleted file mode 120000 index 8c7e5a667..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/examples/PrebidMobileDemo/calabash.framework/calabash b/examples/PrebidMobileDemo/calabash.framework/calabash deleted file mode 120000 index bccada38d..000000000 --- a/examples/PrebidMobileDemo/calabash.framework/calabash +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/calabash \ No newline at end of file diff --git a/examples/PrebidMobileDemo/features/pbm_basic.feature b/examples/PrebidMobileDemo/features/pbm_basic.feature deleted file mode 100644 index 6f119e448..000000000 --- a/examples/PrebidMobileDemo/features/pbm_basic.feature +++ /dev/null @@ -1,17 +0,0 @@ -Feature: Prebid Mobile - -Scenario: Test DFP Scenarios - Given the app has launched - When I touch "DFP" - And I touch "Banner" - And I touch the "See Ad" button - And I wait for 4 seconds - Then I should see an AppNexus ad - -Scenario: Test MoPub Scenarios - Given the app has launched - When I touch "MoPub" - And I touch "Banner" - And I touch the "See Ad" button - And I wait for 4 seconds - Then I should see an AppNexus ad in WKWebView diff --git a/examples/PrebidMobileDemo/features/steps/pbm_basic.rb b/examples/PrebidMobileDemo/features/steps/pbm_basic.rb deleted file mode 100644 index 7fe81dc99..000000000 --- a/examples/PrebidMobileDemo/features/steps/pbm_basic.rb +++ /dev/null @@ -1,54 +0,0 @@ -Given(/^the app has launched$/) do - wait_for do - !query("*").empty? - end -end - -And(/^I have done a specific thing$/) do - # Example: Given I am logged in - # wait_for do - # !query("* marked:'username'").empty? - # end - # - # touch("* marked:'username'") - # wait_for_keyboard - # keyboard_enter_text("cleveruser27") - # - # touch("* marked:'password'") - # wait_for_keyboard - # keyboard_enter_text("pa$$w0rd") - # - # wait_for_element_exists("* marked:'Login'") - # touch("* marked:'Login'") - - # Remember: any Ruby is allowed in your step definitions - did_something = true - - unless did_something - fail 'Expected to have done something' - end -end - -When(/^I do something$/) do - # Example: When I create a new entry - # tap("* marked:'new_entry'") - # wait_for_keyboard - # keyboard_enter_text("* marked:'entry_title'", 'My Entry') - # - # tap("* marked:'submit'") -end - -Then(/^something should happen$/) do - # Example: Then I should see the entry on my home page - # wait_for_element_exists("* text:'My Entry'") -end - -Then(/^I should see an AppNexus ad$/) do - res = query("webView css:'body'") - expect(res[0]["textContent"].include? "showAdFromCacheId").to be_truthy -end - -Then(/^I should see an AppNexus ad in WKWebView$/) do - res = query("WKWebView css:'body'") - expect(res[0]["textContent"].include? "showAdFromCacheId").to be_truthy -end diff --git a/examples/PrebidMobileDemo/features/support/01_launch.rb b/examples/PrebidMobileDemo/features/support/01_launch.rb deleted file mode 100644 index ed233eea7..000000000 --- a/examples/PrebidMobileDemo/features/support/01_launch.rb +++ /dev/null @@ -1,43 +0,0 @@ -require 'calabash-cucumber/launcher' - -# You can find examples of more complicated launch hooks in these -# two repositories: -# -# https://github.com/calabash/ios-smoke-test-app/blob/master/CalSmokeApp/features/support/01_launch.rb -# https://github.com/calabash/ios-webview-test-app/blob/master/CalWebViewApp/features/support/01_launch.rb - -module Calabash::Launcher - @@launcher = nil - - def self.launcher - @@launcher ||= Calabash::Cucumber::Launcher.new - end - - def self.launcher=(launcher) - @@launcher = launcher - end -end - -Before do |scenario| - launcher = Calabash::Launcher.launcher - options = { - # Add launch options here. - } - - launcher.relaunch(options) -end - -After do |scenario| - # Calabash can shutdown the app cleanly by calling the app life cycle methods - # in the UIApplicationDelegate. This is really nice for CI environments, but - # not so good for local development. - # - # See the documentation for QUIT_APP_AFTER_SCENARIO for a nice debugging workflow - # - # http://calabashapi.xamarin.com/ios/file.ENVIRONMENT_VARIABLES.html#label-QUIT_APP_AFTER_SCENARIO - # http://calabashapi.xamarin.com/ios/Calabash/Cucumber/Core.html#console_attach-instance_method - if launcher.quit_app_after_scenario? - calabash_exit - end -end - diff --git a/examples/PrebidMobileDemo/features/support/dry_run.rb b/examples/PrebidMobileDemo/features/support/dry_run.rb deleted file mode 100644 index b3c4649d3..000000000 --- a/examples/PrebidMobileDemo/features/support/dry_run.rb +++ /dev/null @@ -1,19 +0,0 @@ -require "calabash-cucumber" - -# Cucumber -d must pass, but support/env.rb is not eval'd on dry runs. -# We must detect that the user wants to use pre-defined steps. -dir = File.expand_path(File.dirname(__FILE__)) -env = File.join(dir, "env.rb") - -contents = File.read(env).force_encoding("UTF-8") - -contents.split($-0).each do |line| - - # Skip comments. - next if line.chars[0] == "#" - - if line[/calabash-cucumber\/cucumber/, 0] - require "calabash-cucumber/calabash_steps" - break - end -end diff --git a/examples/PrebidMobileDemo/features/support/env.rb b/examples/PrebidMobileDemo/features/support/env.rb deleted file mode 100644 index 20a70b485..000000000 --- a/examples/PrebidMobileDemo/features/support/env.rb +++ /dev/null @@ -1,13 +0,0 @@ -# Requiring this file will import: -# * the Calabash Cucumber API, -# * the Calabash Cucumber predefined Steps, -# * and the Calabash::Formatters::Html cucumber formatter. -require "calabash-cucumber/cucumber" - -# To use Calabash without the predefined Calabash Steps, uncomment these -# three lines and delete the require above. -require "calabash-cucumber/wait_helpers" -require "calabash-cucumber/operations" -World(Calabash::Cucumber::Operations) - -require 'rspec' diff --git a/examples/PrebidMobileDemo/features/support/patches/cucumber.rb b/examples/PrebidMobileDemo/features/support/patches/cucumber.rb deleted file mode 100644 index aec5d8f4d..000000000 --- a/examples/PrebidMobileDemo/features/support/patches/cucumber.rb +++ /dev/null @@ -1,15 +0,0 @@ -# override cucumber pending on the XTC -if ENV['XAMARIN_TEST_CLOUD'] == '1' - module Cucumber - module RbSupport - def pending(message = 'TODO') - raise "PENDING: #{message}" - end - - def ask(message, _) - raise "Cannot ask: '#{message}'; User interaction is not allowed on the XTC" - end - end - end - World(Cucumber::RbSupport) -end diff --git a/scripts/buildPrebidMobile.sh b/scripts/buildPrebidMobile.sh index 903ab7a4f..496480d59 100755 --- a/scripts/buildPrebidMobile.sh +++ b/scripts/buildPrebidMobile.sh @@ -9,8 +9,12 @@ set -e # 2 # Setup some constants for use later on. + + +cd ../src/PrebidMobile/ + FRAMEWORK_NAME="PrebidMobile" -LOGDIR=../build/out/log +LOGDIR=../../build/out/log mkdir -p "$LOGDIR" # 3 @@ -19,16 +23,16 @@ if [ -d "build" ]; then rm -rf "build" fi -cd ../sdk/ LOGFILE="$LOGDIR"/prebid_mobile_build.log touch "$LOGFILE" + # 4 # Build the framework for device and for simulator (using # all needed architectures). -xcodebuild -target "${FRAMEWORK_NAME}" -configuration Release -arch arm64 -arch armv7 -arch armv7s only_active_arch=no defines_module=yes -sdk "iphoneos" > "$LOGFILE" 2>&1 || { echo "Error in build check log "$LOGFILE""; exit;} +xcodebuild -target "${FRAMEWORK_NAME}" -configuration Release -arch arm64 -arch -arch only_active_arch=yes defines_module=yes -sdk "iphoneos" > "$LOGFILE" 2>&1 || { echo "Error in build check log "$LOGFILE""; exit;} -xcodebuild -target "${FRAMEWORK_NAME}" -configuration Release -arch x86_64 -arch i386 only_active_arch=no defines_module=yes -sdk "iphonesimulator" > "$LOGFILE" 2>&1 || { echo "Error in build check log "$LOGFILE""; exit;} +xcodebuild -target "${FRAMEWORK_NAME}" -configuration Release -arch x86_64 -arch i386 only_active_arch=yes defines_module=yes -sdk "iphonesimulator" > "$LOGFILE" 2>&1 || { echo "Error in build check log "$LOGFILE""; exit;} # 5 # Remove .framework file if exists on Desktop from previous run. diff --git a/scripts/testPrebidMobile.sh b/scripts/testPrebidMobile.sh index db2522f6d..83720cfb6 100755 --- a/scripts/testPrebidMobile.sh +++ b/scripts/testPrebidMobile.sh @@ -2,14 +2,16 @@ if [ -d "scripts" ]; then cd scripts/ fi -cd ../sdk/ - +cd ../src/PrebidMobile/ +echo $PWD echo "Running unit tests" gem install xcpretty -xcodebuild test -project PrebidMobile.xcodeproj -scheme "PrebidMobileTests" -destination 'platform=iOS Simulator,name=iPhone 7,OS=10.0' | xcpretty +xcodebuild test -project PrebidMobile.xcodeproj -scheme "PrebidMobileTests" -destination 'platform=iOS Simulator,name=iPhone 8 Plus,OS=11.0.1' | xcpretty -echo "Building ipa" -cd ../examples/PrebidMobileDemo/ +#echo "Running integration tests" +cd ../../example/Swift/PrebidDemo/ +echo $PWD +xcodebuild -workspace PrebidDemo.xcworkspace test -scheme "PrebidDemoTests" -destination 'platform=iOS Simulator,name=iPhone 8 Plus,OS=12.1' | xcpretty # Make the keychain the default so identities are found security default-keychain -s ios-build.keychain @@ -20,14 +22,3 @@ security unlock-keychain -p travis ios-build.keychain # Set keychain locking timeout to 3600 seconds security set-keychain-settings -t 3600 -u ios-build.keychain -make ipa - -echo "Running integration tests" - -gem install xamarin-test-cloud -if [ "$TRAVIS_EVENT_TYPE" == "pull_request" ]; then -test-cloud submit Products/ipa/PrebidMobileDemo.ipa 435c130f3f6ff5256d19a790c21dd653 --devices "$XAMARIN_DEVICES_ID_PR" --series "master" --locale "en_US" --app-name "AppNexus.PrebidMobileDemo" --user nhedley@appnexus.com -fi -if [ "$TRAVIS_EVENT_TYPE" == "cron" ]; then -test-cloud submit Products/ipa/PrebidMobileDemo.ipa 435c130f3f6ff5256d19a790c21dd653 --devices "$XAMARIN_DEVICES_ID_CRON" --series "master" --locale "en_US" --app-name "AppNexus.PrebidMobileDemo" --user nhedley@appnexus.com -fi diff --git a/sdk/PrebidMobile.xcodeproj/project.pbxproj b/sdk/PrebidMobile.xcodeproj/project.pbxproj deleted file mode 100644 index 8c7c918b7..000000000 --- a/sdk/PrebidMobile.xcodeproj/project.pbxproj +++ /dev/null @@ -1,807 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 601FC302216BF01300C7B60F /* PrebidMobile-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 606A4352202BC98100492433 /* PrebidMobile-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 606A4299202005C400492433 /* ReadMe.md in Resources */ = {isa = PBXBuildFile; fileRef = 606A4298202005C400492433 /* ReadMe.md */; }; - 606A42A42020FD4600492433 /* PBServerRequestBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 606A42A22020FD4600492433 /* PBServerRequestBuilder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 606A42A52020FD4600492433 /* PBServerRequestBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 606A42A32020FD4600492433 /* PBServerRequestBuilder.m */; }; - 606A42A62020FD4600492433 /* PBServerRequestBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 606A42A32020FD4600492433 /* PBServerRequestBuilder.m */; }; - 60CEC02C2084DF3A00CA104B /* PBConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 60CEC02A2084DF3A00CA104B /* PBConstants.h */; }; - 60CEC02D2084DF3A00CA104B /* PBConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 60CEC02B2084DF3A00CA104B /* PBConstants.m */; }; - B40B92AF1FCCC5E300A676A8 /* PBHost.h in Headers */ = {isa = PBXBuildFile; fileRef = B40B92AD1FCCC5E300A676A8 /* PBHost.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B455F9011FE460E3005D6261 /* PBBidManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B16E281EE1BEA6006304C0 /* PBBidManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C210FE381FC3375D0010B588 /* PrebidCache.h in Headers */ = {isa = PBXBuildFile; fileRef = C210FE361FC3375D0010B588 /* PrebidCache.h */; }; - C210FE391FC3375D0010B588 /* PrebidCache.m in Sources */ = {isa = PBXBuildFile; fileRef = C210FE371FC3375D0010B588 /* PrebidCache.m */; }; - C22E7CE61EE70E19007B31F4 /* NSTimer+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = C2B16E501EE1BEC4006304C0 /* NSTimer+Extension.m */; }; - C23386D21EE5DBFB002FD404 /* PrebidMobile.h in Headers */ = {isa = PBXBuildFile; fileRef = C23386D01EE5DBFB002FD404 /* PrebidMobile.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C23386D31EE5DBFB002FD404 /* PrebidMobile.m in Sources */ = {isa = PBXBuildFile; fileRef = C23386D11EE5DBFB002FD404 /* PrebidMobile.m */; }; - C23386D61EE5DC95002FD404 /* PBAdUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = C23386D41EE5DC95002FD404 /* PBAdUnit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C23386D71EE5DC95002FD404 /* PBAdUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = C23386D51EE5DC95002FD404 /* PBAdUnit.m */; }; - C23386DA1EE5DCDB002FD404 /* PBServerAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = C23386D81EE5DCDB002FD404 /* PBServerAdapter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C23386DB1EE5DCDB002FD404 /* PBServerAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = C23386D91EE5DCDB002FD404 /* PBServerAdapter.m */; }; - C23FCCEA1EE5E3F500CFFEF0 /* PBLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = C23FCCE81EE5E3F500CFFEF0 /* PBLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C23FCCEB1EE5E3F500CFFEF0 /* PBLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = C23FCCE91EE5E3F500CFFEF0 /* PBLogging.m */; }; - C23FCCEE1EE5E41E00CFFEF0 /* PBLogManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C23FCCEC1EE5E41E00CFFEF0 /* PBLogManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C23FCCEF1EE5E41E00CFFEF0 /* PBLogManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C23FCCED1EE5E41E00CFFEF0 /* PBLogManager.m */; }; - C24B78C41EE7467E0045B454 /* NSObject+Prebid.h in Headers */ = {isa = PBXBuildFile; fileRef = C24B78C21EE7467E0045B454 /* NSObject+Prebid.h */; }; - C24B78C51EE7467E0045B454 /* NSObject+Prebid.m in Sources */ = {isa = PBXBuildFile; fileRef = C24B78C31EE7467E0045B454 /* NSObject+Prebid.m */; }; - C281E1811EE5EAF700F2F4A9 /* PrebidMobile.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2B16E1B1EE1BE69006304C0 /* PrebidMobile.framework */; }; - C281E1991EE5F2AD00F2F4A9 /* PBAdUnitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C281E1941EE5F2AD00F2F4A9 /* PBAdUnitTests.m */; }; - C281E19A1EE5F2AD00F2F4A9 /* PBBidManagerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C281E1951EE5F2AD00F2F4A9 /* PBBidManagerTests.m */; }; - C281E19B1EE5F2AD00F2F4A9 /* PBBidResponseTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C281E1961EE5F2AD00F2F4A9 /* PBBidResponseTests.m */; }; - C281E19D1EE5F2AD00F2F4A9 /* PBTargetingParamsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C281E1981EE5F2AD00F2F4A9 /* PBTargetingParamsTests.m */; }; - C281E1A91EE5F2DA00F2F4A9 /* pbs_request.json in Resources */ = {isa = PBXBuildFile; fileRef = C281E19F1EE5F2DA00F2F4A9 /* pbs_request.json */; }; - C281E1AA1EE5F2DA00F2F4A9 /* pbs_response.json in Resources */ = {isa = PBXBuildFile; fileRef = C281E1A01EE5F2DA00F2F4A9 /* pbs_response.json */; }; - C281E1AB1EE5F2DA00F2F4A9 /* PCKeywordsManagerPriceIntervals.txt in Resources */ = {isa = PBXBuildFile; fileRef = C281E1A11EE5F2DA00F2F4A9 /* PCKeywordsManagerPriceIntervals.txt */; }; - C281E1AC1EE5F2DA00F2F4A9 /* ANHTTPStubbingManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C281E1A41EE5F2DA00F2F4A9 /* ANHTTPStubbingManager.m */; }; - C281E1AD1EE5F2DA00F2F4A9 /* ANHTTPStubURLProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = C281E1A61EE5F2DA00F2F4A9 /* ANHTTPStubURLProtocol.m */; }; - C281E1AE1EE5F2DA00F2F4A9 /* ANURLConnectionStub.m in Sources */ = {isa = PBXBuildFile; fileRef = C281E1A81EE5F2DA00F2F4A9 /* ANURLConnectionStub.m */; }; - C281E1B21EE5F2E500F2F4A9 /* PBMockServerAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = C281E1B11EE5F2E500F2F4A9 /* PBMockServerAdapter.m */; }; - C29238D91F3E38D100217075 /* PBServerAdapterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C29238D81F3E38D100217075 /* PBServerAdapterTests.m */; }; - C2B16E341EE1BEA6006304C0 /* PBBannerAdUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B16E261EE1BEA6006304C0 /* PBBannerAdUnit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C2B16E351EE1BEA6006304C0 /* PBBannerAdUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = C2B16E271EE1BEA6006304C0 /* PBBannerAdUnit.m */; }; - C2B16E371EE1BEA6006304C0 /* PBBidManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C2B16E291EE1BEA6006304C0 /* PBBidManager.m */; }; - C2B16E381EE1BEA6006304C0 /* PBBidResponseDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B16E2A1EE1BEA6006304C0 /* PBBidResponseDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C2B16E391EE1BEA6006304C0 /* PBException.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B16E2B1EE1BEA6006304C0 /* PBException.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C2B16E3A1EE1BEA6006304C0 /* PBException.m in Sources */ = {isa = PBXBuildFile; fileRef = C2B16E2C1EE1BEA6006304C0 /* PBException.m */; }; - C2B16E3B1EE1BEA6006304C0 /* PBInterstitialAdUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B16E2D1EE1BEA6006304C0 /* PBInterstitialAdUnit.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C2B16E3C1EE1BEA6006304C0 /* PBInterstitialAdUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = C2B16E2E1EE1BEA6006304C0 /* PBInterstitialAdUnit.m */; }; - C2B16E3D1EE1BEA6006304C0 /* PBKeywordsManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B16E2F1EE1BEA6006304C0 /* PBKeywordsManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C2B16E3E1EE1BEA6006304C0 /* PBKeywordsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C2B16E301EE1BEA6006304C0 /* PBKeywordsManager.m */; }; - C2B16E3F1EE1BEA6006304C0 /* PBTargetingParams.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B16E311EE1BEA6006304C0 /* PBTargetingParams.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C2B16E401EE1BEA6006304C0 /* PBTargetingParams.m in Sources */ = {isa = PBXBuildFile; fileRef = C2B16E321EE1BEA6006304C0 /* PBTargetingParams.m */; }; - C2B16E481EE1BEB6006304C0 /* PBBidResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B16E441EE1BEB6006304C0 /* PBBidResponse.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C2B16E491EE1BEB6006304C0 /* PBBidResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = C2B16E451EE1BEB6006304C0 /* PBBidResponse.m */; }; - C2B16E561EE1BEC4006304C0 /* NSDictionary+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = C2B16E4C1EE1BEC4006304C0 /* NSDictionary+Extension.m */; }; - C2B16E581EE1BEC4006304C0 /* NSString+Extension.m in Sources */ = {isa = PBXBuildFile; fileRef = C2B16E4E1EE1BEC4006304C0 /* NSString+Extension.m */; }; - C2B16E981EE1BF1A006304C0 /* PBServerFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B16E8C1EE1BF1A006304C0 /* PBServerFetcher.h */; }; - C2B16E991EE1BF1A006304C0 /* PBServerFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = C2B16E8D1EE1BF1A006304C0 /* PBServerFetcher.m */; }; - C2B16E9B1EE1BF1A006304C0 /* PBServerGlobal.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B16E8F1EE1BF1A006304C0 /* PBServerGlobal.h */; }; - C2B16E9C1EE1BF1A006304C0 /* PBServerGlobal.m in Sources */ = {isa = PBXBuildFile; fileRef = C2B16E901EE1BF1A006304C0 /* PBServerGlobal.m */; }; - C2B16E9D1EE1BF1A006304C0 /* PBServerLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B16E911EE1BF1A006304C0 /* PBServerLocation.h */; }; - C2B16E9E1EE1BF1A006304C0 /* PBServerLocation.m in Sources */ = {isa = PBXBuildFile; fileRef = C2B16E921EE1BF1A006304C0 /* PBServerLocation.m */; }; - C2B16E9F1EE1BF1A006304C0 /* PBServerReachability.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B16E931EE1BF1A006304C0 /* PBServerReachability.h */; }; - C2B16EA01EE1BF1A006304C0 /* PBServerReachability.m in Sources */ = {isa = PBXBuildFile; fileRef = C2B16E941EE1BF1A006304C0 /* PBServerReachability.m */; }; - C2B174711EE1E3AC006304C0 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2B1746D1EE1E3AC006304C0 /* CoreGraphics.framework */; }; - C2B174721EE1E3AC006304C0 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2B1746E1EE1E3AC006304C0 /* CoreLocation.framework */; }; - C2B174731EE1E3AC006304C0 /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2B1746F1EE1E3AC006304C0 /* CoreMedia.framework */; }; - C2B174741EE1E3AC006304C0 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2B174701EE1E3AC006304C0 /* CoreTelephony.framework */; }; - C2B174761EE1E3B6006304C0 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2B174751EE1E3B6006304C0 /* Foundation.framework */; }; - C2B174781EE1E3BC006304C0 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2B174771EE1E3BC006304C0 /* MediaPlayer.framework */; }; - C2B1747A1EE1E3C3006304C0 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2B174791EE1E3C3006304C0 /* UIKit.framework */; }; - C2B1747C1EE1E3C9006304C0 /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2B1747B1EE1E3C9006304C0 /* SystemConfiguration.framework */; }; - C2B1747E1EE1E3CE006304C0 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2B1747D1EE1E3CE006304C0 /* QuartzCore.framework */; }; - F576AEF420D1B1FF00D41FBC /* PBPrebidCacheTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F576AEF320D1B1FF00D41FBC /* PBPrebidCacheTests.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - C281E1821EE5EAF700F2F4A9 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = C2B16E121EE1BE69006304C0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = C2B16E1A1EE1BE69006304C0; - remoteInfo = PrebidMobile; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 606A4298202005C400492433 /* ReadMe.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = ReadMe.md; sourceTree = ""; }; - 606A42A22020FD4600492433 /* PBServerRequestBuilder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBServerRequestBuilder.h; sourceTree = ""; }; - 606A42A32020FD4600492433 /* PBServerRequestBuilder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBServerRequestBuilder.m; sourceTree = ""; }; - 606A4352202BC98100492433 /* PrebidMobile-umbrella.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "PrebidMobile-umbrella.h"; sourceTree = ""; }; - 60CEC02A2084DF3A00CA104B /* PBConstants.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBConstants.h; sourceTree = ""; }; - 60CEC02B2084DF3A00CA104B /* PBConstants.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBConstants.m; sourceTree = ""; }; - B40B92AD1FCCC5E300A676A8 /* PBHost.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PBHost.h; sourceTree = ""; }; - C210FE361FC3375D0010B588 /* PrebidCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PrebidCache.h; sourceTree = ""; }; - C210FE371FC3375D0010B588 /* PrebidCache.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PrebidCache.m; sourceTree = ""; }; - C23386D01EE5DBFB002FD404 /* PrebidMobile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrebidMobile.h; sourceTree = ""; }; - C23386D11EE5DBFB002FD404 /* PrebidMobile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PrebidMobile.m; sourceTree = ""; }; - C23386D41EE5DC95002FD404 /* PBAdUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBAdUnit.h; sourceTree = ""; }; - C23386D51EE5DC95002FD404 /* PBAdUnit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBAdUnit.m; sourceTree = ""; }; - C23386D81EE5DCDB002FD404 /* PBServerAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBServerAdapter.h; sourceTree = ""; }; - C23386D91EE5DCDB002FD404 /* PBServerAdapter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBServerAdapter.m; sourceTree = ""; }; - C23FCCE81EE5E3F500CFFEF0 /* PBLogging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBLogging.h; sourceTree = ""; }; - C23FCCE91EE5E3F500CFFEF0 /* PBLogging.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBLogging.m; sourceTree = ""; }; - C23FCCEC1EE5E41E00CFFEF0 /* PBLogManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBLogManager.h; sourceTree = ""; }; - C23FCCED1EE5E41E00CFFEF0 /* PBLogManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBLogManager.m; sourceTree = ""; }; - C23FCD501EE5EA6D00CFFEF0 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Platforms/iPhoneOS.platform/Developer/Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - C24B78C21EE7467E0045B454 /* NSObject+Prebid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+Prebid.h"; sourceTree = ""; }; - C24B78C31EE7467E0045B454 /* NSObject+Prebid.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+Prebid.m"; sourceTree = ""; }; - C281E17C1EE5EAF700F2F4A9 /* PrebidMobileTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PrebidMobileTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - C281E1941EE5F2AD00F2F4A9 /* PBAdUnitTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBAdUnitTests.m; sourceTree = ""; }; - C281E1951EE5F2AD00F2F4A9 /* PBBidManagerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBBidManagerTests.m; sourceTree = ""; }; - C281E1961EE5F2AD00F2F4A9 /* PBBidResponseTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBBidResponseTests.m; sourceTree = ""; }; - C281E1981EE5F2AD00F2F4A9 /* PBTargetingParamsTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBTargetingParamsTests.m; sourceTree = ""; }; - C281E19F1EE5F2DA00F2F4A9 /* pbs_request.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = pbs_request.json; sourceTree = ""; }; - C281E1A01EE5F2DA00F2F4A9 /* pbs_response.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = pbs_response.json; sourceTree = ""; }; - C281E1A11EE5F2DA00F2F4A9 /* PCKeywordsManagerPriceIntervals.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = PCKeywordsManagerPriceIntervals.txt; sourceTree = ""; }; - C281E1A31EE5F2DA00F2F4A9 /* ANHTTPStubbingManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANHTTPStubbingManager.h; sourceTree = ""; }; - C281E1A41EE5F2DA00F2F4A9 /* ANHTTPStubbingManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANHTTPStubbingManager.m; sourceTree = ""; }; - C281E1A51EE5F2DA00F2F4A9 /* ANHTTPStubURLProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANHTTPStubURLProtocol.h; sourceTree = ""; }; - C281E1A61EE5F2DA00F2F4A9 /* ANHTTPStubURLProtocol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANHTTPStubURLProtocol.m; sourceTree = ""; }; - C281E1A71EE5F2DA00F2F4A9 /* ANURLConnectionStub.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ANURLConnectionStub.h; sourceTree = ""; }; - C281E1A81EE5F2DA00F2F4A9 /* ANURLConnectionStub.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANURLConnectionStub.m; sourceTree = ""; }; - C281E1B01EE5F2E500F2F4A9 /* PBMockServerAdapter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBMockServerAdapter.h; sourceTree = ""; }; - C281E1B11EE5F2E500F2F4A9 /* PBMockServerAdapter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBMockServerAdapter.m; sourceTree = ""; }; - C29238D81F3E38D100217075 /* PBServerAdapterTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBServerAdapterTests.m; sourceTree = ""; }; - C2B16E1B1EE1BE69006304C0 /* PrebidMobile.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PrebidMobile.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - C2B16E1F1EE1BE69006304C0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C2B16E261EE1BEA6006304C0 /* PBBannerAdUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBBannerAdUnit.h; sourceTree = ""; }; - C2B16E271EE1BEA6006304C0 /* PBBannerAdUnit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBBannerAdUnit.m; sourceTree = ""; }; - C2B16E281EE1BEA6006304C0 /* PBBidManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBBidManager.h; sourceTree = ""; }; - C2B16E291EE1BEA6006304C0 /* PBBidManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBBidManager.m; sourceTree = ""; }; - C2B16E2A1EE1BEA6006304C0 /* PBBidResponseDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBBidResponseDelegate.h; sourceTree = ""; }; - C2B16E2B1EE1BEA6006304C0 /* PBException.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBException.h; sourceTree = ""; }; - C2B16E2C1EE1BEA6006304C0 /* PBException.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBException.m; sourceTree = ""; }; - C2B16E2D1EE1BEA6006304C0 /* PBInterstitialAdUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBInterstitialAdUnit.h; sourceTree = ""; }; - C2B16E2E1EE1BEA6006304C0 /* PBInterstitialAdUnit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBInterstitialAdUnit.m; sourceTree = ""; }; - C2B16E2F1EE1BEA6006304C0 /* PBKeywordsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBKeywordsManager.h; sourceTree = ""; }; - C2B16E301EE1BEA6006304C0 /* PBKeywordsManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBKeywordsManager.m; sourceTree = ""; }; - C2B16E311EE1BEA6006304C0 /* PBTargetingParams.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBTargetingParams.h; sourceTree = ""; }; - C2B16E321EE1BEA6006304C0 /* PBTargetingParams.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBTargetingParams.m; sourceTree = ""; }; - C2B16E441EE1BEB6006304C0 /* PBBidResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBBidResponse.h; sourceTree = ""; }; - C2B16E451EE1BEB6006304C0 /* PBBidResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBBidResponse.m; sourceTree = ""; }; - C2B16E4B1EE1BEC4006304C0 /* NSDictionary+Extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+Extension.h"; sourceTree = ""; }; - C2B16E4C1EE1BEC4006304C0 /* NSDictionary+Extension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+Extension.m"; sourceTree = ""; }; - C2B16E4D1EE1BEC4006304C0 /* NSString+Extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+Extension.h"; sourceTree = ""; }; - C2B16E4E1EE1BEC4006304C0 /* NSString+Extension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+Extension.m"; sourceTree = ""; }; - C2B16E4F1EE1BEC4006304C0 /* NSTimer+Extension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSTimer+Extension.h"; sourceTree = ""; }; - C2B16E501EE1BEC4006304C0 /* NSTimer+Extension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSTimer+Extension.m"; sourceTree = ""; }; - C2B16E8C1EE1BF1A006304C0 /* PBServerFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBServerFetcher.h; sourceTree = ""; }; - C2B16E8D1EE1BF1A006304C0 /* PBServerFetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBServerFetcher.m; sourceTree = ""; }; - C2B16E8F1EE1BF1A006304C0 /* PBServerGlobal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBServerGlobal.h; sourceTree = ""; }; - C2B16E901EE1BF1A006304C0 /* PBServerGlobal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBServerGlobal.m; sourceTree = ""; }; - C2B16E911EE1BF1A006304C0 /* PBServerLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBServerLocation.h; sourceTree = ""; }; - C2B16E921EE1BF1A006304C0 /* PBServerLocation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBServerLocation.m; sourceTree = ""; }; - C2B16E931EE1BF1A006304C0 /* PBServerReachability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBServerReachability.h; sourceTree = ""; }; - C2B16E941EE1BF1A006304C0 /* PBServerReachability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBServerReachability.m; sourceTree = ""; }; - C2B1746D1EE1E3AC006304C0 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - C2B1746E1EE1E3AC006304C0 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; - C2B1746F1EE1E3AC006304C0 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; }; - C2B174701EE1E3AC006304C0 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; - C2B174751EE1E3B6006304C0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - C2B174771EE1E3BC006304C0 /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; }; - C2B174791EE1E3C3006304C0 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - C2B1747B1EE1E3C9006304C0 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; - C2B1747D1EE1E3CE006304C0 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; - E6BF995E1F7167B0001016FD /* PrebidMobile-umbrella.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "PrebidMobile-umbrella.h"; sourceTree = ""; }; - EFD3C940519B957467FE94E6 /* libPods-PrebidMobile.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-PrebidMobile.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - F576AEF320D1B1FF00D41FBC /* PBPrebidCacheTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PBPrebidCacheTests.m; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - C281E1791EE5EAF700F2F4A9 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C281E1811EE5EAF700F2F4A9 /* PrebidMobile.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C2B16E171EE1BE69006304C0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - C2B1747E1EE1E3CE006304C0 /* QuartzCore.framework in Frameworks */, - C2B1747C1EE1E3C9006304C0 /* SystemConfiguration.framework in Frameworks */, - C2B1747A1EE1E3C3006304C0 /* UIKit.framework in Frameworks */, - C2B174781EE1E3BC006304C0 /* MediaPlayer.framework in Frameworks */, - C2B174761EE1E3B6006304C0 /* Foundation.framework in Frameworks */, - C2B174711EE1E3AC006304C0 /* CoreGraphics.framework in Frameworks */, - C2B174721EE1E3AC006304C0 /* CoreLocation.framework in Frameworks */, - C2B174731EE1E3AC006304C0 /* CoreMedia.framework in Frameworks */, - C2B174741EE1E3AC006304C0 /* CoreTelephony.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 606A4351202BC90800492433 /* Recovered References */ = { - isa = PBXGroup; - children = ( - E6BF995E1F7167B0001016FD /* PrebidMobile-umbrella.h */, - ); - name = "Recovered References"; - sourceTree = ""; - }; - C281E17D1EE5EAF700F2F4A9 /* PrebidMobileTests */ = { - isa = PBXGroup; - children = ( - C281E1931EE5F2AD00F2F4A9 /* PrebidMobileCoreTests */, - C281E1AF1EE5F2E500F2F4A9 /* MockObjects */, - C281E19E1EE5F2DA00F2F4A9 /* Resources */, - C281E1A21EE5F2DA00F2F4A9 /* Stubbing */, - ); - path = PrebidMobileTests; - sourceTree = ""; - }; - C281E1931EE5F2AD00F2F4A9 /* PrebidMobileCoreTests */ = { - isa = PBXGroup; - children = ( - C281E1941EE5F2AD00F2F4A9 /* PBAdUnitTests.m */, - C281E1951EE5F2AD00F2F4A9 /* PBBidManagerTests.m */, - C281E1961EE5F2AD00F2F4A9 /* PBBidResponseTests.m */, - C281E1981EE5F2AD00F2F4A9 /* PBTargetingParamsTests.m */, - C29238D81F3E38D100217075 /* PBServerAdapterTests.m */, - F576AEF320D1B1FF00D41FBC /* PBPrebidCacheTests.m */, - ); - path = PrebidMobileCoreTests; - sourceTree = ""; - }; - C281E19E1EE5F2DA00F2F4A9 /* Resources */ = { - isa = PBXGroup; - children = ( - C281E19F1EE5F2DA00F2F4A9 /* pbs_request.json */, - C281E1A01EE5F2DA00F2F4A9 /* pbs_response.json */, - C281E1A11EE5F2DA00F2F4A9 /* PCKeywordsManagerPriceIntervals.txt */, - ); - path = Resources; - sourceTree = ""; - }; - C281E1A21EE5F2DA00F2F4A9 /* Stubbing */ = { - isa = PBXGroup; - children = ( - C281E1A31EE5F2DA00F2F4A9 /* ANHTTPStubbingManager.h */, - C281E1A41EE5F2DA00F2F4A9 /* ANHTTPStubbingManager.m */, - C281E1A51EE5F2DA00F2F4A9 /* ANHTTPStubURLProtocol.h */, - C281E1A61EE5F2DA00F2F4A9 /* ANHTTPStubURLProtocol.m */, - C281E1A71EE5F2DA00F2F4A9 /* ANURLConnectionStub.h */, - C281E1A81EE5F2DA00F2F4A9 /* ANURLConnectionStub.m */, - ); - path = Stubbing; - sourceTree = ""; - }; - C281E1AF1EE5F2E500F2F4A9 /* MockObjects */ = { - isa = PBXGroup; - children = ( - C281E1B01EE5F2E500F2F4A9 /* PBMockServerAdapter.h */, - C281E1B11EE5F2E500F2F4A9 /* PBMockServerAdapter.m */, - ); - path = MockObjects; - sourceTree = ""; - }; - C2B16E111EE1BE69006304C0 = { - isa = PBXGroup; - children = ( - C2B16E1D1EE1BE69006304C0 /* PrebidMobile */, - C2B16E881EE1BF1A006304C0 /* PrebidServerAdapter */, - C281E17D1EE5EAF700F2F4A9 /* PrebidMobileTests */, - C2B16EA21EE1BF8A006304C0 /* Frameworks */, - C2B16E1C1EE1BE69006304C0 /* Products */, - 606A4351202BC90800492433 /* Recovered References */, - ); - sourceTree = ""; - }; - C2B16E1C1EE1BE69006304C0 /* Products */ = { - isa = PBXGroup; - children = ( - C2B16E1B1EE1BE69006304C0 /* PrebidMobile.framework */, - C281E17C1EE5EAF700F2F4A9 /* PrebidMobileTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - C2B16E1D1EE1BE69006304C0 /* PrebidMobile */ = { - isa = PBXGroup; - children = ( - 60CEC02A2084DF3A00CA104B /* PBConstants.h */, - 60CEC02B2084DF3A00CA104B /* PBConstants.m */, - 606A4352202BC98100492433 /* PrebidMobile-umbrella.h */, - C2B16E4A1EE1BEC4006304C0 /* Categories */, - C2B16E5F1EE1BECA006304C0 /* Logging */, - C2B16E1F1EE1BE69006304C0 /* Info.plist */, - C23386D41EE5DC95002FD404 /* PBAdUnit.h */, - C23386D51EE5DC95002FD404 /* PBAdUnit.m */, - C2B16E261EE1BEA6006304C0 /* PBBannerAdUnit.h */, - C2B16E271EE1BEA6006304C0 /* PBBannerAdUnit.m */, - C2B16E281EE1BEA6006304C0 /* PBBidManager.h */, - C2B16E291EE1BEA6006304C0 /* PBBidManager.m */, - C2B16E441EE1BEB6006304C0 /* PBBidResponse.h */, - C2B16E451EE1BEB6006304C0 /* PBBidResponse.m */, - C2B16E2A1EE1BEA6006304C0 /* PBBidResponseDelegate.h */, - C2B16E2B1EE1BEA6006304C0 /* PBException.h */, - C2B16E2C1EE1BEA6006304C0 /* PBException.m */, - C2B16E2D1EE1BEA6006304C0 /* PBInterstitialAdUnit.h */, - C2B16E2E1EE1BEA6006304C0 /* PBInterstitialAdUnit.m */, - C2B16E2F1EE1BEA6006304C0 /* PBKeywordsManager.h */, - C2B16E301EE1BEA6006304C0 /* PBKeywordsManager.m */, - C2B16E311EE1BEA6006304C0 /* PBTargetingParams.h */, - C2B16E321EE1BEA6006304C0 /* PBTargetingParams.m */, - B40B92AD1FCCC5E300A676A8 /* PBHost.h */, - C23386D01EE5DBFB002FD404 /* PrebidMobile.h */, - C23386D11EE5DBFB002FD404 /* PrebidMobile.m */, - C210FE361FC3375D0010B588 /* PrebidCache.h */, - C210FE371FC3375D0010B588 /* PrebidCache.m */, - ); - path = PrebidMobile; - sourceTree = ""; - }; - C2B16E4A1EE1BEC4006304C0 /* Categories */ = { - isa = PBXGroup; - children = ( - C2B16E4B1EE1BEC4006304C0 /* NSDictionary+Extension.h */, - C2B16E4C1EE1BEC4006304C0 /* NSDictionary+Extension.m */, - C2B16E4D1EE1BEC4006304C0 /* NSString+Extension.h */, - C2B16E4E1EE1BEC4006304C0 /* NSString+Extension.m */, - C2B16E4F1EE1BEC4006304C0 /* NSTimer+Extension.h */, - C2B16E501EE1BEC4006304C0 /* NSTimer+Extension.m */, - C24B78C21EE7467E0045B454 /* NSObject+Prebid.h */, - C24B78C31EE7467E0045B454 /* NSObject+Prebid.m */, - ); - path = Categories; - sourceTree = ""; - }; - C2B16E5F1EE1BECA006304C0 /* Logging */ = { - isa = PBXGroup; - children = ( - C23FCCEC1EE5E41E00CFFEF0 /* PBLogManager.h */, - C23FCCED1EE5E41E00CFFEF0 /* PBLogManager.m */, - C23FCCE81EE5E3F500CFFEF0 /* PBLogging.h */, - C23FCCE91EE5E3F500CFFEF0 /* PBLogging.m */, - ); - path = Logging; - sourceTree = ""; - }; - C2B16E881EE1BF1A006304C0 /* PrebidServerAdapter */ = { - isa = PBXGroup; - children = ( - C2B16EA11EE1BF4A006304C0 /* PrebidServerModule */, - C23386D81EE5DCDB002FD404 /* PBServerAdapter.h */, - C23386D91EE5DCDB002FD404 /* PBServerAdapter.m */, - 606A4298202005C400492433 /* ReadMe.md */, - ); - path = PrebidServerAdapter; - sourceTree = ""; - }; - C2B16EA11EE1BF4A006304C0 /* PrebidServerModule */ = { - isa = PBXGroup; - children = ( - C2B16E8C1EE1BF1A006304C0 /* PBServerFetcher.h */, - C2B16E8D1EE1BF1A006304C0 /* PBServerFetcher.m */, - C2B16E8F1EE1BF1A006304C0 /* PBServerGlobal.h */, - C2B16E901EE1BF1A006304C0 /* PBServerGlobal.m */, - C2B16E911EE1BF1A006304C0 /* PBServerLocation.h */, - C2B16E921EE1BF1A006304C0 /* PBServerLocation.m */, - C2B16E931EE1BF1A006304C0 /* PBServerReachability.h */, - C2B16E941EE1BF1A006304C0 /* PBServerReachability.m */, - 606A42A22020FD4600492433 /* PBServerRequestBuilder.h */, - 606A42A32020FD4600492433 /* PBServerRequestBuilder.m */, - ); - path = PrebidServerModule; - sourceTree = ""; - }; - C2B16EA21EE1BF8A006304C0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - C23FCD501EE5EA6D00CFFEF0 /* XCTest.framework */, - C2B1747D1EE1E3CE006304C0 /* QuartzCore.framework */, - C2B1747B1EE1E3C9006304C0 /* SystemConfiguration.framework */, - C2B174791EE1E3C3006304C0 /* UIKit.framework */, - C2B174771EE1E3BC006304C0 /* MediaPlayer.framework */, - C2B174751EE1E3B6006304C0 /* Foundation.framework */, - C2B1746D1EE1E3AC006304C0 /* CoreGraphics.framework */, - C2B1746E1EE1E3AC006304C0 /* CoreLocation.framework */, - C2B1746F1EE1E3AC006304C0 /* CoreMedia.framework */, - C2B174701EE1E3AC006304C0 /* CoreTelephony.framework */, - EFD3C940519B957467FE94E6 /* libPods-PrebidMobile.a */, - ); - name = Frameworks; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - C2B16E181EE1BE69006304C0 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 601FC302216BF01300C7B60F /* PrebidMobile-umbrella.h in Headers */, - 60CEC02C2084DF3A00CA104B /* PBConstants.h in Headers */, - C2B16E391EE1BEA6006304C0 /* PBException.h in Headers */, - C2B16E341EE1BEA6006304C0 /* PBBannerAdUnit.h in Headers */, - C2B16E481EE1BEB6006304C0 /* PBBidResponse.h in Headers */, - C2B16E381EE1BEA6006304C0 /* PBBidResponseDelegate.h in Headers */, - C2B16E3F1EE1BEA6006304C0 /* PBTargetingParams.h in Headers */, - C23FCCEA1EE5E3F500CFFEF0 /* PBLogging.h in Headers */, - 606A42A42020FD4600492433 /* PBServerRequestBuilder.h in Headers */, - B455F9011FE460E3005D6261 /* PBBidManager.h in Headers */, - C23386D61EE5DC95002FD404 /* PBAdUnit.h in Headers */, - B40B92AF1FCCC5E300A676A8 /* PBHost.h in Headers */, - C2B16E3D1EE1BEA6006304C0 /* PBKeywordsManager.h in Headers */, - C23FCCEE1EE5E41E00CFFEF0 /* PBLogManager.h in Headers */, - C23386DA1EE5DCDB002FD404 /* PBServerAdapter.h in Headers */, - C23386D21EE5DBFB002FD404 /* PrebidMobile.h in Headers */, - C24B78C41EE7467E0045B454 /* NSObject+Prebid.h in Headers */, - C2B16E3B1EE1BEA6006304C0 /* PBInterstitialAdUnit.h in Headers */, - C2B16E9B1EE1BF1A006304C0 /* PBServerGlobal.h in Headers */, - C2B16E9F1EE1BF1A006304C0 /* PBServerReachability.h in Headers */, - C2B16E9D1EE1BF1A006304C0 /* PBServerLocation.h in Headers */, - C2B16E981EE1BF1A006304C0 /* PBServerFetcher.h in Headers */, - C210FE381FC3375D0010B588 /* PrebidCache.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - C281E17B1EE5EAF700F2F4A9 /* PrebidMobileTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = C281E1861EE5EAF700F2F4A9 /* Build configuration list for PBXNativeTarget "PrebidMobileTests" */; - buildPhases = ( - C281E1781EE5EAF700F2F4A9 /* Sources */, - C281E1791EE5EAF700F2F4A9 /* Frameworks */, - C281E17A1EE5EAF700F2F4A9 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - C281E1831EE5EAF700F2F4A9 /* PBXTargetDependency */, - ); - name = PrebidMobileTests; - productName = PrebidMobileTests; - productReference = C281E17C1EE5EAF700F2F4A9 /* PrebidMobileTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - C2B16E1A1EE1BE69006304C0 /* PrebidMobile */ = { - isa = PBXNativeTarget; - buildConfigurationList = C2B16E231EE1BE69006304C0 /* Build configuration list for PBXNativeTarget "PrebidMobile" */; - buildPhases = ( - C2B16E161EE1BE69006304C0 /* Sources */, - C2B16E171EE1BE69006304C0 /* Frameworks */, - C2B16E181EE1BE69006304C0 /* Headers */, - C2B16E191EE1BE69006304C0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = PrebidMobile; - productName = PrebidMobile; - productReference = C2B16E1B1EE1BE69006304C0 /* PrebidMobile.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - C2B16E121EE1BE69006304C0 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0940; - ORGANIZATIONNAME = "Nicole Hedley"; - TargetAttributes = { - C281E17B1EE5EAF700F2F4A9 = { - CreatedOnToolsVersion = 8.3.2; - DevelopmentTeam = HR94J6TSB3; - ProvisioningStyle = Automatic; - }; - C2B16E1A1EE1BE69006304C0 = { - CreatedOnToolsVersion = 8.3.2; - DevelopmentTeam = HR94J6TSB3; - ProvisioningStyle = Automatic; - }; - }; - }; - buildConfigurationList = C2B16E151EE1BE69006304C0 /* Build configuration list for PBXProject "PrebidMobile" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - ); - mainGroup = C2B16E111EE1BE69006304C0; - productRefGroup = C2B16E1C1EE1BE69006304C0 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - C2B16E1A1EE1BE69006304C0 /* PrebidMobile */, - C281E17B1EE5EAF700F2F4A9 /* PrebidMobileTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - C281E17A1EE5EAF700F2F4A9 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C281E1AB1EE5F2DA00F2F4A9 /* PCKeywordsManagerPriceIntervals.txt in Resources */, - C281E1AA1EE5F2DA00F2F4A9 /* pbs_response.json in Resources */, - C281E1A91EE5F2DA00F2F4A9 /* pbs_request.json in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C2B16E191EE1BE69006304C0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 606A4299202005C400492433 /* ReadMe.md in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - C281E1781EE5EAF700F2F4A9 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 606A42A62020FD4600492433 /* PBServerRequestBuilder.m in Sources */, - C281E1AE1EE5F2DA00F2F4A9 /* ANURLConnectionStub.m in Sources */, - C281E1AD1EE5F2DA00F2F4A9 /* ANHTTPStubURLProtocol.m in Sources */, - C281E1B21EE5F2E500F2F4A9 /* PBMockServerAdapter.m in Sources */, - C281E19B1EE5F2AD00F2F4A9 /* PBBidResponseTests.m in Sources */, - C29238D91F3E38D100217075 /* PBServerAdapterTests.m in Sources */, - C281E19D1EE5F2AD00F2F4A9 /* PBTargetingParamsTests.m in Sources */, - F576AEF420D1B1FF00D41FBC /* PBPrebidCacheTests.m in Sources */, - C281E1991EE5F2AD00F2F4A9 /* PBAdUnitTests.m in Sources */, - C281E19A1EE5F2AD00F2F4A9 /* PBBidManagerTests.m in Sources */, - C281E1AC1EE5F2DA00F2F4A9 /* ANHTTPStubbingManager.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C2B16E161EE1BE69006304C0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C22E7CE61EE70E19007B31F4 /* NSTimer+Extension.m in Sources */, - C23386D31EE5DBFB002FD404 /* PrebidMobile.m in Sources */, - C2B16EA01EE1BF1A006304C0 /* PBServerReachability.m in Sources */, - C2B16E561EE1BEC4006304C0 /* NSDictionary+Extension.m in Sources */, - C23386DB1EE5DCDB002FD404 /* PBServerAdapter.m in Sources */, - C2B16E9C1EE1BF1A006304C0 /* PBServerGlobal.m in Sources */, - C2B16E3C1EE1BEA6006304C0 /* PBInterstitialAdUnit.m in Sources */, - C23FCCEB1EE5E3F500CFFEF0 /* PBLogging.m in Sources */, - C210FE391FC3375D0010B588 /* PrebidCache.m in Sources */, - C2B16E401EE1BEA6006304C0 /* PBTargetingParams.m in Sources */, - C2B16E9E1EE1BF1A006304C0 /* PBServerLocation.m in Sources */, - C2B16E351EE1BEA6006304C0 /* PBBannerAdUnit.m in Sources */, - C23386D71EE5DC95002FD404 /* PBAdUnit.m in Sources */, - 606A42A52020FD4600492433 /* PBServerRequestBuilder.m in Sources */, - C24B78C51EE7467E0045B454 /* NSObject+Prebid.m in Sources */, - C2B16E581EE1BEC4006304C0 /* NSString+Extension.m in Sources */, - C2B16E3A1EE1BEA6006304C0 /* PBException.m in Sources */, - C2B16E491EE1BEB6006304C0 /* PBBidResponse.m in Sources */, - C23FCCEF1EE5E41E00CFFEF0 /* PBLogManager.m in Sources */, - C2B16E371EE1BEA6006304C0 /* PBBidManager.m in Sources */, - C2B16E3E1EE1BEA6006304C0 /* PBKeywordsManager.m in Sources */, - C2B16E991EE1BF1A006304C0 /* PBServerFetcher.m in Sources */, - 60CEC02D2084DF3A00CA104B /* PBConstants.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - C281E1831EE5EAF700F2F4A9 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = C2B16E1A1EE1BE69006304C0 /* PrebidMobile */; - targetProxy = C281E1821EE5EAF700F2F4A9 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - C281E1841EE5EAF700F2F4A9 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEVELOPMENT_TEAM = HR94J6TSB3; - INFOPLIST_FILE = PrebidMobile/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = AppNexus.PrebidMobileTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Debug; - }; - C281E1851EE5EAF700F2F4A9 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - DEVELOPMENT_TEAM = HR94J6TSB3; - INFOPLIST_FILE = PrebidMobile/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - PRODUCT_BUNDLE_IDENTIFIER = AppNexus.PrebidMobileTests; - PRODUCT_NAME = "$(TARGET_NAME)"; - }; - name = Release; - }; - C2B16E211EE1BE69006304C0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.3; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - C2B16E221EE1BE69006304C0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - CURRENT_PROJECT_VERSION = 1; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 10.3; - MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - C2B16E241EE1BE69006304C0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = HR94J6TSB3; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREPROCESSOR_DEFINITIONS = ""; - INFOPLIST_FILE = PrebidMobile/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks $(PROJECT_DIR)/lib/DFPSDK $(PROJECT_DIR)/lib/MoPubSDK"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "$(PROJECT)/PrebidMobile.modulemap"; - PRODUCT_BUNDLE_IDENTIFIER = AppNexus.PrebidMobile; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - }; - name = Debug; - }; - C2B16E251EE1BE69006304C0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - DEFINES_MODULE = YES; - DEVELOPMENT_TEAM = HR94J6TSB3; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREPROCESSOR_DEFINITIONS = ""; - INFOPLIST_FILE = PrebidMobile/Info.plist; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks $(PROJECT_DIR)/lib/DFPSDK $(PROJECT_DIR)/lib/MoPubSDK"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "$(PROJECT)/PrebidMobile.modulemap"; - PRODUCT_BUNDLE_IDENTIFIER = AppNexus.PrebidMobile; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - C281E1861EE5EAF700F2F4A9 /* Build configuration list for PBXNativeTarget "PrebidMobileTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C281E1841EE5EAF700F2F4A9 /* Debug */, - C281E1851EE5EAF700F2F4A9 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C2B16E151EE1BE69006304C0 /* Build configuration list for PBXProject "PrebidMobile" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C2B16E211EE1BE69006304C0 /* Debug */, - C2B16E221EE1BE69006304C0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C2B16E231EE1BE69006304C0 /* Build configuration list for PBXNativeTarget "PrebidMobile" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - C2B16E241EE1BE69006304C0 /* Debug */, - C2B16E251EE1BE69006304C0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = C2B16E121EE1BE69006304C0 /* Project object */; -} diff --git a/sdk/PrebidMobile/Categories/NSDictionary+Extension.h b/sdk/PrebidMobile/Categories/NSDictionary+Extension.h deleted file mode 100644 index f80708804..000000000 --- a/sdk/PrebidMobile/Categories/NSDictionary+Extension.h +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface NSDictionary (Extension) - -+ (nonnull instancetype)dictionaryWithString:(nonnull NSString *)string - withKeyValueSeparatedByString:(nonnull NSString *)keyValueSeparator - andKeyValuePairSeparatedByString:(nonnull NSString *)keyValuePairSeparator; - -- (nonnull instancetype)initWithString:(nonnull NSString *)string - keyValueSeparatedByString:(nonnull NSString *)keyValueSeparator - andKeyValuePairSeparatedByString:(nonnull NSString *)keyValuePairSeparator; - -- (nonnull NSArray *)arrayRepresentationOfKeyValueSeparatedByString:(nonnull NSString *)keyValueSeparator; - -- (nonnull NSString *)stringRepresentationOfKeyValueSeparatedByString:(nonnull NSString *)keyValueSeparator - andKeyValuePairSeparatedByString:(nonnull NSString *)keyValuePairSeparator; - -@end - -NS_ASSUME_NONNULL_END diff --git a/sdk/PrebidMobile/Categories/NSDictionary+Extension.m b/sdk/PrebidMobile/Categories/NSDictionary+Extension.m deleted file mode 100644 index cc1482ecd..000000000 --- a/sdk/PrebidMobile/Categories/NSDictionary+Extension.m +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "NSDictionary+Extension.h" - -@implementation NSDictionary (Extension) - -+ (instancetype)dictionaryWithString:(NSString *)string - withKeyValueSeparatedByString:(NSString *)keyValueSeparator - andKeyValuePairSeparatedByString:(NSString *)keyValuePairSeparator { - NSDictionary *newDictionary = [[NSDictionary alloc] initWithString:string - keyValueSeparatedByString:keyValueSeparator - andKeyValuePairSeparatedByString:keyValuePairSeparator]; - return (newDictionary); -} - -- (instancetype)initWithString:(NSString *)string - keyValueSeparatedByString:(NSString *)keyValueSeparator - andKeyValuePairSeparatedByString:(NSString *)keyValuePairSeparator { - NSArray *__nonnull keyValueStrings = [string componentsSeparatedByString:@","]; - NSMutableArray *__nonnull keys = [[NSMutableArray alloc] initWithCapacity:[keyValueStrings count]]; - NSMutableArray *__nonnull values = [[NSMutableArray alloc] initWithCapacity:[keyValueStrings count]]; - - for (NSString *keyValueString in keyValueStrings) { - NSArray *__nonnull keyValuePair = [keyValueString componentsSeparatedByString:@":"]; - NSString *__nonnull key = keyValuePair[0]; - NSString *__nonnull value = keyValuePair[1]; - - [keys addObject:key]; - [values addObject:value]; - } - if ((self = [self initWithObjects:values forKeys:keys])) { - } - - return (self); -} - -- (NSArray *)arrayRepresentationOfKeyValueSeparatedByString:(NSString *)keyValueSeparator { - NSMutableArray *__nullable keyValueStrings = [[NSMutableArray alloc] initWithCapacity:[self count]]; - - for (NSString *__nonnull key in [self allKeys]) { - NSString *__nonnull value = self[key]; - NSString *__nonnull keyValueString = [[NSString alloc] initWithFormat:@"%@%@%@", key, keyValueSeparator, value]; - - [keyValueStrings addObject:keyValueString]; - } - return (keyValueStrings); -} - -- (NSString *)stringRepresentationOfKeyValueSeparatedByString:(NSString *)keyValueSeparator - andKeyValuePairSeparatedByString:(NSString *)keyValuePairSeparator { - NSArray *__nonnull keyValueStringArray = [self arrayRepresentationOfKeyValueSeparatedByString:keyValueSeparator]; - - return ([keyValueStringArray componentsJoinedByString:keyValuePairSeparator]); -} - -@end diff --git a/sdk/PrebidMobile/Categories/NSObject+Prebid.h b/sdk/PrebidMobile/Categories/NSObject+Prebid.h deleted file mode 100644 index 45c70f6c0..000000000 --- a/sdk/PrebidMobile/Categories/NSObject+Prebid.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import -#import "PBAdUnit.h" - -@interface NSObject (Prebid) - -@property (nonatomic) PBAdUnit *pb_identifier; - -@end diff --git a/sdk/PrebidMobile/Categories/NSObject+Prebid.m b/sdk/PrebidMobile/Categories/NSObject+Prebid.m deleted file mode 100644 index c0a1fec87..000000000 --- a/sdk/PrebidMobile/Categories/NSObject+Prebid.m +++ /dev/null @@ -1,214 +0,0 @@ - -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import -#import "PBBidManager.h" -#import "NSObject+Prebid.h" -#import "NSString+Extension.h" -#import - -@implementation NSObject (Prebid) - -@dynamic pb_identifier; - -+ (void)load { - static dispatch_once_t loadToken; - dispatch_once(&loadToken, ^{ - dispatch_async(dispatch_get_main_queue(), ^{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wundeclared-selector" - if (NSClassFromString(@"GADSlot") == nil) { - [NSClassFromString(@"GADOSlot") pb_swizzleInstanceSelector:@selector(requestParameters) - withSelector:@selector(pb_requestParameters)]; - } else { - [NSClassFromString(@"GADSlot") pb_swizzleInstanceSelector:@selector(requestParameters) - withSelector:@selector(pb_requestParameters)]; - } - if (NSClassFromString(@"MPBannerAdManager") != nil && [NSClassFromString(@"MPBannerAdManager") instancesRespondToSelector:@selector(loadAd)] ) { - [NSClassFromString(@"MPBannerAdManager") pb_swizzleInstanceSelector:@selector(loadAd) - withSelector:@selector(pb_loadAd)]; - [NSClassFromString(@"MPBannerAdManager") pb_swizzleInstanceSelector:@selector(forceRefreshAd) - withSelector:@selector(pb_forceRefreshAd)]; - [NSClassFromString(@"MPBannerAdManager") pb_swizzleInstanceSelector:@selector(applicationWillEnterForeground) - withSelector:@selector(pb_applicationWillEnterForeground)]; - [NSClassFromString(@"MPInterstitialAdManager") pb_swizzleInstanceSelector:@selector(loadInterstitialWithAdUnitID:keywords:location:testing:) - withSelector:@selector(pb_loadInterstitialWithAdUnitID:keywords:location:testing:)]; - } else { - [NSClassFromString(@"MPAdView") pb_swizzleInstanceSelector:@selector(loadAd) - withSelector:@selector(pb_new_loadAd)]; - [NSClassFromString(@"MPAdView") pb_swizzleInstanceSelector:@selector(forceRefreshAd) - withSelector:@selector(pb_new_forceRefreshAd)]; - [NSClassFromString(@"MPInterstitialAdController") pb_swizzleInstanceSelector:@selector(loadAd) - withSelector:@selector(pb_new_loadAd_interstitial)]; - } - -#pragma clang diagnostic pop - }); - }); -} - -+ (void)pb_swizzleInstanceSelector:(SEL)originalSelector - withSelector:(SEL)swizzledSelector { - Class class = [self class]; - - Method originalMethod = class_getInstanceMethod(class, originalSelector); - Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); - - BOOL didAddMethod = class_addMethod(class, - originalSelector, - method_getImplementation(swizzledMethod), - method_getTypeEncoding(swizzledMethod)); - if (didAddMethod) { - class_replaceMethod(class, - swizzledSelector, - method_getImplementation(originalMethod), - method_getTypeEncoding(originalMethod)); - } else { - method_exchangeImplementations(originalMethod, swizzledMethod); - } -} - -// dfp ad slot -- (id)pb_requestParameters { - __block id requestParameters = [self pb_requestParameters]; - - SEL adEventDelegateSel = NSSelectorFromString(@"adEventDelegate"); - if ([self respondsToSelector:adEventDelegateSel]) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - id adEventDelegate = [self performSelector:adEventDelegateSel]; - NSDictionary *keywordsPairs; - - SEL getPb_identifier = NSSelectorFromString(@"pb_identifier"); - if ([adEventDelegate respondsToSelector:getPb_identifier]) { - PBAdUnit *adUnit = (PBAdUnit *)[adEventDelegate performSelector:getPb_identifier]; -#pragma clang diagnostic pop - - if (adUnit) { - keywordsPairs = [[PBBidManager sharedInstance] keywordsForWinningBidForAdUnit:adUnit]; - requestParameters = [[PBBidManager sharedInstance] addPrebidParameters:requestParameters withKeywords:keywordsPairs]; - } - } - } - return requestParameters; -} - -// mopub banner -- (void)pb_applicationWillEnterForeground { - SEL getDelegate = NSSelectorFromString(@"delegate"); - if ([self respondsToSelector:getDelegate]) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - id delegate = [self performSelector:getDelegate]; - SEL getBannerAd = NSSelectorFromString(@"banner"); - if ([delegate respondsToSelector:getBannerAd]) { - NSObject *adView = [delegate performSelector:getBannerAd]; -#pragma clang diagnostic pop - [[PBBidManager sharedInstance] setBidOnAdObject:adView]; - [self pb_applicationWillEnterForeground]; - [[PBBidManager sharedInstance] clearBidOnAdObject:adView]; - } - }; -} - -- (void)pb_loadAd { - SEL getDelegate = NSSelectorFromString(@"delegate"); - if ([self respondsToSelector:getDelegate]) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - id delegate = [self performSelector:getDelegate]; - SEL getBannerAd = NSSelectorFromString(@"banner"); - if ([delegate respondsToSelector:getBannerAd]) { - NSObject *adView = [delegate performSelector:getBannerAd]; -#pragma clang diagnostic pop - [[PBBidManager sharedInstance] setBidOnAdObject:adView]; - [self pb_loadAd]; - [[PBBidManager sharedInstance] clearBidOnAdObject:adView]; - } - }; -} - -- (void)pb_new_loadAd { - [[PBBidManager sharedInstance] setBidOnAdObject:self]; - [self pb_new_loadAd]; - [[PBBidManager sharedInstance] clearBidOnAdObject:self]; -} - -- (void)pb_forceRefreshAd { - SEL getDelegate = NSSelectorFromString(@"delegate"); - if ([self respondsToSelector:getDelegate]) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - id delegate = [self performSelector:getDelegate]; - SEL getBannerAd = NSSelectorFromString(@"banner"); - if ([delegate respondsToSelector:getBannerAd]) { - NSObject *adView = [delegate performSelector:getBannerAd]; -#pragma clang diagnostic pop - [[PBBidManager sharedInstance] setBidOnAdObject:adView]; - [self pb_forceRefreshAd]; - [[PBBidManager sharedInstance] clearBidOnAdObject:adView]; - } - }; -} - -- (void)pb_new_forceRefreshAd { - [[PBBidManager sharedInstance] setBidOnAdObject:self]; - [self pb_new_forceRefreshAd]; - [[PBBidManager sharedInstance] clearBidOnAdObject:self]; -} - - -- (void)pb_new_loadAd_interstitial { - [[PBBidManager sharedInstance] setBidOnAdObject:self]; - [self pb_new_loadAd_interstitial]; - [[PBBidManager sharedInstance] clearBidOnAdObject:self]; -} -// mopub interstitial -- (void)pb_loadInterstitialWithAdUnitID:(NSString *)ID keywords:(NSString *)keywords location:(CLLocation *)location testing:(BOOL)testing { - SEL getDelegate = NSSelectorFromString(@"delegate"); - if ([self respondsToSelector:getDelegate]) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - id delegate = [self performSelector:getDelegate]; - SEL getInterstitialAd = NSSelectorFromString(@"interstitialAdController"); - if ([delegate respondsToSelector:getInterstitialAd]) { - NSObject *interstitialAd = [delegate performSelector:getInterstitialAd]; - SEL getAdUnitId = NSSelectorFromString(@"adUnitId"); - SEL getKeywords = NSSelectorFromString(@"keywords"); - SEL getLocation = NSSelectorFromString(@"location"); - if ([delegate respondsToSelector:getAdUnitId] && [delegate respondsToSelector:getKeywords] && [delegate respondsToSelector:getLocation]) { - NSString *adUnitId = (NSString *)[interstitialAd performSelector:getAdUnitId]; - CLLocation *location = (CLLocation *)[interstitialAd performSelector:getLocation]; - [[PBBidManager sharedInstance] setBidOnAdObject:interstitialAd]; - NSString *keywords = (NSString *)[interstitialAd performSelector:getKeywords]; - [self pb_loadInterstitialWithAdUnitID:adUnitId keywords:keywords location:location testing:testing]; -#pragma clang diagnostic pop - [[PBBidManager sharedInstance] clearBidOnAdObject:interstitialAd]; - } - } - }; -} - -- (void)setPb_identifier:(PBAdUnit *)pb_identifier { - objc_setAssociatedObject(self, @selector(pb_identifier), pb_identifier, - OBJC_ASSOCIATION_RETAIN_NONATOMIC); -} - -- (PBAdUnit *)pb_identifier { - return objc_getAssociatedObject(self, @selector(pb_identifier)); -} - -@end diff --git a/sdk/PrebidMobile/Categories/NSString+Extension.h b/sdk/PrebidMobile/Categories/NSString+Extension.h deleted file mode 100644 index c1eecc39a..000000000 --- a/sdk/PrebidMobile/Categories/NSString+Extension.h +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import - -@interface NSString (Extension) - -- (NSString *)urlencode; -- (NSString *)urldecode; - -@end diff --git a/sdk/PrebidMobile/Categories/NSString+Extension.m b/sdk/PrebidMobile/Categories/NSString+Extension.m deleted file mode 100644 index 0824b49ce..000000000 --- a/sdk/PrebidMobile/Categories/NSString+Extension.m +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "NSString+Extension.h" - -@implementation NSString (Extension) - -- (NSString *)urlencode { - - NSMutableString *output = [NSMutableString string]; - const unsigned char *source = (const unsigned char *)[self UTF8String]; - int sourceLen = (int)strlen((const char *)source); - for (int i = 0; i < sourceLen; ++i) { - const unsigned char thisChar = source[i]; - if (thisChar == ' ') { - [output appendString:@"+"]; - } else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' || - (thisChar >= 'a' && thisChar <= 'z') || - (thisChar >= 'A' && thisChar <= 'Z') || - (thisChar >= '0' && thisChar <= '9')) { - [output appendFormat:@"%c", thisChar]; - } else { - [output appendFormat:@"%%%02X", thisChar]; - } - } - return output; -} - -- (NSString *)urldecode { - NSString *result = [(NSString *)self stringByReplacingOccurrencesOfString:@"+" withString:@" "]; - result = [result stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; - return result; -} - -@end diff --git a/sdk/PrebidMobile/Categories/NSTimer+Extension.h b/sdk/PrebidMobile/Categories/NSTimer+Extension.h deleted file mode 100644 index 3a7e34e6c..000000000 --- a/sdk/PrebidMobile/Categories/NSTimer+Extension.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import - -@interface NSTimer (Extension) - -+ (NSTimer *)pb_scheduledTimerWithTimeInterval:(NSTimeInterval)interval - block:(void(^)(void))block - repeats:(BOOL)repeats; - -@end diff --git a/sdk/PrebidMobile/Categories/NSTimer+Extension.m b/sdk/PrebidMobile/Categories/NSTimer+Extension.m deleted file mode 100644 index 747c217c5..000000000 --- a/sdk/PrebidMobile/Categories/NSTimer+Extension.m +++ /dev/null @@ -1,37 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "NSTimer+Extension.h" - -@implementation NSTimer (Extension) - -+ (NSTimer *)pb_scheduledTimerWithTimeInterval:(NSTimeInterval)interval - block:(void(^)(void))block - repeats:(BOOL)repeats { - return [self scheduledTimerWithTimeInterval:interval - target:self - selector:@selector(pb_blockInvoke:) - userInfo:[block copy] - repeats:repeats]; -} - -+ (void)pb_blockInvoke:(NSTimer *)timer { - if([timer userInfo]) { - void (^block)(void) = (void (^)(void))[timer userInfo]; - block(); - } -} - -@end diff --git a/sdk/PrebidMobile/Logging/PBLogManager.h b/sdk/PrebidMobile/Logging/PBLogManager.h deleted file mode 100644 index 0b59332d5..000000000 --- a/sdk/PrebidMobile/Logging/PBLogManager.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ -/** - The lower the filter level, the more logs will be shown. - For example, `PBLogLevelInfo` will display messages from - `PBLogLevelInfo,` `PBLogLevelWarn,` and `PBLogLevelError.` - The default level is `PBLogLevelWarn` - */ - -#import - -typedef NS_ENUM(NSUInteger, PBLogLevel) { - PBLogLevelAll = 0, - PBLogLevelTrace = 10, - PBLogLevelDebug = 20, - PBLogLevelInfo = 30, - PBLogLevelWarn = 40, - PBLogLevelError = 50, - PBLogLevelOff = 60 -}; - -/** - Use the `PBLogManager` methods to set the desired level of log filter. - */ -@interface PBLogManager : NSObject - -/** - Gets the current log filter level. - */ -+ (PBLogLevel)getPBLogLevel; - -/** - Sets the log filter level. - */ -+ (void)setPBLogLevel:(PBLogLevel)level; - -@end diff --git a/sdk/PrebidMobile/Logging/PBLogging.h b/sdk/PrebidMobile/Logging/PBLogging.h deleted file mode 100644 index 3148e19a2..000000000 --- a/sdk/PrebidMobile/Logging/PBLogging.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBLogManager.h" - -#define PB_DEBUG_MODE 1 - -/** - * the message that is logged by the logging module - */ -extern NSString *const kPBLogMessageKey; - -/** - * specifies if the information provided by the message is a info or warning or error - */ -extern NSString *const kPBLogMessageLevelKey; - -#if PB_DEBUG_MODE -void _PBLog(PBLogLevel level, NSString *format, ...) NS_FORMAT_FUNCTION(2, 3); -#define PBLogTrace(...) _PBLog(PBLogLevelTrace, __VA_ARGS__) -#define PBLogDebug(...) _PBLog(PBLogLevelDebug, __VA_ARGS__) -#define PBLogInfo(...) _PBLog(PBLogLevelInfo, __VA_ARGS__) -#define PBLogWarn(...) _PBLog(PBLogLevelWarn, __VA_ARGS__) -#define PBLogError(...) _PBLog(PBLogLevelError, __VA_ARGS__) - -#else - -#define PCLogTrace(...) \ -{} -#define PCLogDebug(...) \ -{} -#define PCLogInfo(...) \ -{} -#define PCLogWarn(...) \ -{} -#define PCLogError(...) \ -{} - -#endif diff --git a/sdk/PrebidMobile/Logging/PBLogging.m b/sdk/PrebidMobile/Logging/PBLogging.m deleted file mode 100644 index 0995f8e36..000000000 --- a/sdk/PrebidMobile/Logging/PBLogging.m +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBLogging.h" - -NSString *const kPBLoggingNotification = @"kPBLoggingNotification"; -NSString *const kPBLogMessageKey = @"kPBLogMessageKey"; -NSString *const kPBLogMessageLevelKey = @"kPBLogMessageLevelKey"; - -void _PBLog(PBLogLevel level, NSString *format, ...) { - if ([PBLogManager getPBLogLevel] <= level) { - format = [NSString stringWithFormat:@"Prebid: %@", format]; - va_list args; - va_start(args, format); - NSString *fullString = [[NSString alloc] initWithFormat:format - arguments:args]; - va_end(args); - NSLog(@"%@", fullString); - } -} diff --git a/sdk/PrebidMobile/PBAdUnit.h b/sdk/PrebidMobile/PBAdUnit.h deleted file mode 100644 index 0ed692733..000000000 --- a/sdk/PrebidMobile/PBAdUnit.h +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import - -@protocol CGSize; - -/** - * A generic ad unit object that the user creates to configure the ad sizes. These are passed to the - * prebid server adapter and ads are fetched for each ad unit - */ -@interface PBAdUnit : NSObject - -/** - * uuid is a auto generated id for each of the ad unit created. - */ -@property (nonatomic, readonly) NSString *__nullable uuid; - -/** - * identifier is the developer identity for an ad unit. identifier needs to be unique for each ad unit. - */ -@property (nonatomic, readonly) NSString *__nullable identifier; - -/** - * configId is the prebid server config id for an ad unit. configId needs to be unique for each ad unit. - */ -@property (nonatomic, readonly) NSString *__nullable configId; - -/** - * adSizes is a list of CGSizes (widths & heights) that needs to be fetched for the ad unit. - */ -@property (nonatomic, readonly) NSArray *__nullable adSizes; - -/** - * An enumeration object that holds different types of ad units available to be configured for - * the ad units can be configured only for banner, interstitial or native ads - */ -typedef NS_ENUM(NSInteger, PBAdUnitType) { - PBAdUnitTypeBanner, - PBAdUnitTypeInterstitial, - PBAdUnitTypeNative -}; - -@property (nonatomic, readonly) PBAdUnitType adType; - -/** - * initializes the PBAdUnit object with the identifier & the adUnit type - * @param identifier : identifier is the developer identity for the ad unit - * @param type : type of adUnit created. Can be banner, interstitial or native - * @param configId : config id for demand sources from prebid server - */ -- (nonnull instancetype)initWithIdentifier:(nonnull NSString *)identifier andAdType:(PBAdUnitType)type andConfigId:(nonnull NSString *)configId; - -/** - * addSize adds the size object to the adUnit object created - * @param adSize : width & height of the ad that needs to be fetched - */ -- (void)addSize:(CGSize)adSize; - -/** - * generatesUUID generates a new uuid on the ad unit - */ -- (void)generateUUID; - -/** - * shouldExpireAllBids returns a boolean if the adUnit should expire all bids given a time - * @param time : time is the current time - */ -- (BOOL)shouldExpireAllBids:(NSTimeInterval)time; - -/** - * setTimeIntervalToExpireAllBids sets the expiryTime for all bids on this ad unit - * @param expiryTime : expiryTime is the time that the bids will all expire - */ -- (void)setTimeIntervalToExpireAllBids:(NSTimeInterval)expiryTime; - -/** - * isEqualToAdUnit tests for equality to another adUnit. - * two ad units are considered equal if their identifiers are equal - */ -- (BOOL)isEqualToAdUnit:(nonnull PBAdUnit *)otherAdUnit; - -@end diff --git a/sdk/PrebidMobile/PBAdUnit.m b/sdk/PrebidMobile/PBAdUnit.m deleted file mode 100644 index 30dee0fa9..000000000 --- a/sdk/PrebidMobile/PBAdUnit.m +++ /dev/null @@ -1,79 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBAdUnit.h" - -@interface PBAdUnit () - -#pragma mark Properties -@property (nonatomic, readwrite, strong) NSString *__nonnull uuid; -@property (nonatomic, readwrite, strong) NSString *__nonnull identifier; -@property (nonatomic, readwrite, strong) NSString *__nonnull configId; -@property (nonatomic, readwrite, strong) NSMutableArray *__nullable adSizes; - -@property (nonatomic, assign) PBAdUnitType adType; -@property (nonatomic, assign) NSTimeInterval timeToExpireAllBids; - -@end - -@implementation PBAdUnit - -#pragma mark Initialization -- (nonnull instancetype)initWithIdentifier:(nonnull NSString *)identifier andAdType:(PBAdUnitType)type andConfigId:(nonnull NSString *)configId { - if ((self = [super init])) { - [self generateUUID]; - _identifier = [identifier copy]; - _adType = type; - _timeToExpireAllBids = 0; - _configId = configId; - } - return (self); -} - -#pragma mark Methods -- (NSArray *)adSizes { - return _adSizes; -} - -- (void)addSize:(CGSize)adSize { - if (_adSizes == nil) { - _adSizes = [[NSMutableArray alloc] init]; - } - [_adSizes addObject:[NSValue valueWithCGSize:adSize]]; -} - -- (void)setAdUnitType:(PBAdUnitType)type { - _adType = type; -} - -- (void)generateUUID { - _uuid = [[NSUUID UUID] UUIDString]; -} - -- (BOOL)shouldExpireAllBids:(NSTimeInterval)currentTime { - return currentTime > self.timeToExpireAllBids; -} - -- (void)setTimeIntervalToExpireAllBids:(NSTimeInterval)expiryTime { - if (expiryTime > self.timeToExpireAllBids) { - self.timeToExpireAllBids = expiryTime; - } -} - -- (BOOL)isEqualToAdUnit:(PBAdUnit *)otherAdUnit { - return [self.identifier isEqualToString:otherAdUnit.identifier]; -} - -@end diff --git a/sdk/PrebidMobile/PBBannerAdUnit.h b/sdk/PrebidMobile/PBBannerAdUnit.h deleted file mode 100644 index 6bb52b1cb..000000000 --- a/sdk/PrebidMobile/PBBannerAdUnit.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBAdUnit.h" - -@interface PBBannerAdUnit : PBAdUnit - -/** - * Initializes the BannerAdUnit with an identifier - * @param identifier : the identifier is a developer specific identity given for each of the ad unit created - * @param configId : the config id with the demand sources from prebid server - */ -- (nonnull instancetype)initWithAdUnitIdentifier:(nonnull NSString *)identifier andConfigId:(nonnull NSString *)configId; - -/** - * addSize adds the size object to the BannerAdUnit object created - * @param adSize : width & height of the ad that needs to be fetched - */ -- (void)addSize:(CGSize)adSize; - -@end diff --git a/sdk/PrebidMobile/PBBidManager.h b/sdk/PrebidMobile/PBBidManager.h deleted file mode 100644 index 22bca4133..000000000 --- a/sdk/PrebidMobile/PBBidManager.h +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBAdUnit.h" -#import "PBHost.h" - -@class PBBidResponse; - -static int const kPCAttachTopBidTimeoutIntervalMS = 50; -static int const kPCAttachTopBidMaxTimeoutMS = 1500; - -@interface PBBidManager : NSObject - -/** - * shared instance of the PBBidManager class - */ -+ (nonnull instancetype)sharedInstance; - -#ifdef DEBUG -+ (void)resetSharedInstance; -#endif - -typedef NS_ENUM(NSInteger, PBPrimaryAdServerType) { - PBPrimaryAdServerUnknown, - PBPrimaryAdServerDFP, - PBPrimaryAdServerMoPub -}; - -/** - * Registers all the ad units with the prebid server account id, host, and primary ad server and starts the auction for each ad unit - */ -- (void)registerAdUnits:(nonnull NSArray *)adUnits - withAccountId:(nonnull NSString *)accountId - withHost:(PBServerHost)host - andPrimaryAdServer:(PBPrimaryAdServerType)adServer; - -/** - * Returns the ad unit for the string identifier - */ -- (nullable PBAdUnit *)adUnitByIdentifier:(nonnull NSString *)identifier; - -/** - * asserts that the AdUnit is registered before the bidding takes place - * @param identifier : the ad unit identity specified by the developer - */ -- (void)assertAdUnitRegistered:(nonnull NSString *)identifier; - -/** - * Returns the keywords pairs for the top bid of an adUnit - */ -- (nullable NSDictionary *)keywordsForWinningBidForAdUnit:(nonnull PBAdUnit *)adUnit; - -- (nonnull NSDictionary *)addPrebidParameters:(nonnull NSDictionary *)requestParameters - withKeywords:(nonnull NSDictionary *)keywordsPairs; - -/** - * helper method for ad server adapter attachTopBid method - * @param adUnitIdentifier : the ad unit id - * @param timeoutInMS : the timeout in milliseconds to wait for a bid - * @param handler : the code to be executed upon timeout or successful bid - */ -- (void)attachTopBidHelperForAdUnitId:(nonnull NSString *)adUnitIdentifier - andTimeout:(int)timeoutInMS - completionHandler:(nullable void (^)(void))handler; - -- (void)setBidOnAdObject:(nonnull NSObject *)adObject; -- (void)clearBidOnAdObject:(nonnull NSObject *)adObject; - --(void) loadOnSecureConnection:(BOOL) secureConnection; - -@end diff --git a/sdk/PrebidMobile/PBBidManager.m b/sdk/PrebidMobile/PBBidManager.m deleted file mode 100644 index bcb98f5fa..000000000 --- a/sdk/PrebidMobile/PBBidManager.m +++ /dev/null @@ -1,363 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "NSObject+Prebid.h" -#import "NSString+Extension.h" -#import "NSTimer+Extension.h" -#import "PBBidManager.h" -#import "PBBidResponse.h" -#import "PBBidResponseDelegate.h" -#import "PBException.h" -#import "PBKeywordsManager.h" -#import "PBLogging.h" -#import "PBServerAdapter.h" - -static NSTimeInterval const kBidExpiryTimerInterval = 30; - -@interface PBBidManager () - -@property id delegate; -- (void)saveBidResponses:(nonnull NSArray *)bidResponse; - -@property (nonatomic, assign) NSTimeInterval topBidExpiryTime; -@property (nonatomic, strong) PBServerAdapter *demandAdapter; - -@property (nonatomic, strong) NSMutableSet *adUnits; -@property (nonatomic, strong) NSMutableDictionary *> *__nullable bidsMap; - -@property (nonatomic, assign) PBPrimaryAdServerType adServer; - -@end - -#pragma mark PBBidResponseDelegate Implementation - -@interface PBBidResponseDelegateImplementation : NSObject - -@end - -@implementation PBBidResponseDelegateImplementation - -- (void)didReceiveSuccessResponse:(nonnull NSArray *)bids { - [[PBBidManager sharedInstance] saveBidResponses:bids]; -} - -- (void)didCompleteWithError:(nonnull NSError *)error { - if (error) { - PBLogDebug(@"Bid Failure: %@", [error localizedDescription]); - } -} - -@end - -@implementation PBBidManager - -@synthesize delegate; - -static PBBidManager *sharedInstance = nil; -static dispatch_once_t onceToken; - -#pragma mark Public API Methods - -+ (instancetype)sharedInstance { - dispatch_once(&onceToken, ^{ - sharedInstance = [[self alloc] init]; - [sharedInstance setDelegate:[[PBBidResponseDelegateImplementation alloc] init]]; - }); - return sharedInstance; -} - -+ (void)resetSharedInstance { - onceToken = 0; - sharedInstance = nil; -} -- (void)registerAdUnits:(nonnull NSArray *)adUnits - withAccountId:(nonnull NSString *)accountId - withHost:(PBServerHost)host - andPrimaryAdServer:(PBPrimaryAdServerType)adServer { - if (_adUnits == nil) { - _adUnits = [[NSMutableSet alloc] init]; - } - _bidsMap = [[NSMutableDictionary alloc] init]; - - self.adServer = adServer; - - _demandAdapter = [[PBServerAdapter alloc] initWithAccountId:accountId andHost:host andAdServer:adServer] ; - - for (id adUnit in adUnits) { - [self registerAdUnit:adUnit]; - } - [self startPollingBidsExpiryTimer]; - [self requestBidsForAdUnits:adUnits]; -} - -- (nullable PBAdUnit *)adUnitByIdentifier:(nonnull NSString *)identifier { - NSArray *adUnits = [_adUnits allObjects]; - for (PBAdUnit *adUnit in adUnits) { - if ([[adUnit identifier] isEqualToString:identifier]) { - return adUnit; - } - } - return nil; -} - -- (void)assertAdUnitRegistered:(NSString *)identifier { - PBAdUnit *adUnit = [self adUnitByIdentifier:identifier]; - if (adUnit == nil) { - // If there is no registered ad unit we can't complete the bidding - // so throw an exception - @throw [PBException exceptionWithName:PBAdUnitNotRegisteredException]; - } -} - -- (nullable NSDictionary *)keywordsForWinningBidForAdUnit:(nonnull PBAdUnit *)adUnit { - NSArray *bids = [self getBids:adUnit]; - [self resetAdUnit:adUnit]; - [self requestBidsForAdUnits:@[adUnit]]; - if (bids) { - PBLogDebug(@"Bids available to create keywords"); - NSMutableDictionary *keywords = [[NSMutableDictionary alloc] init]; - for (PBBidResponse *bidResp in bids) { - [keywords addEntriesFromDictionary:bidResp.customKeywords]; - } - return keywords; - } - PBLogDebug(@"No bid available to create keywords"); - return nil; -} - -- (NSDictionary *)addPrebidParameters:(NSDictionary *)requestParameters - withKeywords:(NSDictionary *)keywordsPairs { - NSDictionary *existingExtras = requestParameters[@"extras"]; - if (keywordsPairs) { - NSMutableDictionary *mutableRequestParameters = [requestParameters mutableCopy]; - NSMutableDictionary *mutableExtras = [[NSMutableDictionary alloc] init]; - if (existingExtras) { - mutableExtras = [existingExtras mutableCopy]; - } - for (id key in keywordsPairs) { - id value = [keywordsPairs objectForKey:key]; - if (value) { - mutableExtras[key] = value; - } - } - mutableRequestParameters[@"extras"] = [mutableExtras copy]; - requestParameters = [mutableRequestParameters copy]; - } - return requestParameters; -} - -- (void)attachTopBidHelperForAdUnitId:(nonnull NSString *)adUnitIdentifier - andTimeout:(int)timeoutInMS - completionHandler:(nullable void (^)(void))handler { - [self assertAdUnitRegistered:adUnitIdentifier]; - if (timeoutInMS > kPCAttachTopBidMaxTimeoutMS) { - timeoutInMS = kPCAttachTopBidMaxTimeoutMS; - } - if ([self isBidReady:adUnitIdentifier]) { - dispatch_async(dispatch_get_main_queue(), ^{ - PBLogDebug(@"Calling completionHandler on attachTopBidWhenReady"); - handler(); - }); - } else { - timeoutInMS = timeoutInMS - kPCAttachTopBidTimeoutIntervalMS; - if (timeoutInMS > 0) { - dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_MSEC * kPCAttachTopBidTimeoutIntervalMS); - dispatch_after(delay, dispatch_get_main_queue(), ^(void) { - [self attachTopBidHelperForAdUnitId:adUnitIdentifier - andTimeout:timeoutInMS - completionHandler:handler]; - }); - } else { - PBLogDebug(@"Attempting to attach cached bid for ad unit %@", adUnitIdentifier); - PBLogDebug(@"Calling completionHandler on attachTopBidWhenReady"); - handler(); - } - } -} - --(void) loadOnSecureConnection:(BOOL) secureConnection { - if(self.adServer == PBPrimaryAdServerMoPub){ - self.demandAdapter.isSecure = secureConnection; - } -} - -#pragma mark Internal Methods - -- (void)registerAdUnit:(PBAdUnit *)adUnit { - // Throw exceptions if size or demand source is not specified - if (adUnit.adSizes == nil && adUnit.adType == PBAdUnitTypeBanner) { - @throw [PBException exceptionWithName:PBAdUnitNoSizeException]; - } - - // Check if ad unit already exists, if so remove it - NSMutableArray *adUnitsToRemove = [[NSMutableArray alloc] init]; - for (PBAdUnit *existingAdUnit in _adUnits) { - if ([existingAdUnit.identifier isEqualToString:adUnit.identifier]) { - [adUnitsToRemove addObject:existingAdUnit]; - } - } - for (PBAdUnit *adUnit in adUnitsToRemove) { - [_adUnits removeObject:adUnit]; - } - - // Finish registration of ad unit by adding it to adUnits - [_adUnits addObject:adUnit]; - PBLogDebug(@"AdUnit %@ is registered with Prebid Mobile", adUnit.identifier); -} - -- (void)requestBidsForAdUnits:(NSArray *)adUnits { - [_demandAdapter requestBidsWithAdUnits:adUnits withDelegate:[self delegate]]; -} - -- (void)resetAdUnit:(PBAdUnit *)adUnit { - [adUnit generateUUID]; - [_bidsMap removeObjectForKey:adUnit.identifier]; -} - -- (void)saveBidResponses:(NSArray *)bidResponses { - if ([bidResponses count] > 0) { - PBBidResponse *bid = (PBBidResponse *)bidResponses[0]; - [_bidsMap setObject:[bidResponses mutableCopy] forKey:bid.adUnitId]; - - // TODO: if prebid server returns expiry time for bids we need to change this implementation - NSTimeInterval timeToExpire = bid.timeToExpireAfter + [[NSDate date] timeIntervalSince1970]; - PBAdUnit *adUnit = [self adUnitByIdentifier:bid.adUnitId]; - [adUnit setTimeIntervalToExpireAllBids:timeToExpire]; - } -} - -// Poll every 30 seconds to check for expired bids -- (void)startPollingBidsExpiryTimer { - __weak PBBidManager *weakSelf = self; - if ([[NSTimer class] respondsToSelector:@selector(pb_scheduledTimerWithTimeInterval:block:repeats:)]) { - [NSTimer pb_scheduledTimerWithTimeInterval:kBidExpiryTimerInterval - block:^{ - PBBidManager *strongSelf = weakSelf; - [strongSelf checkForBidsExpired]; - } - repeats:YES]; - } -} - -- (void)checkForBidsExpired { - if (_adUnits != nil && _adUnits.count > 0) { - NSTimeInterval currentTime = [[NSDate date] timeIntervalSince1970]; - NSMutableArray *adUnitsToRequest = [[NSMutableArray alloc] init]; - for (PBAdUnit *adUnit in _adUnits) { - NSMutableArray *bids = [_bidsMap objectForKey:adUnit.identifier]; - if (bids && [bids count] > 0 && [adUnit shouldExpireAllBids:currentTime]) { - [adUnitsToRequest addObject:adUnit]; - [self resetAdUnit:adUnit]; - } - } - if ([adUnitsToRequest count] > 0) { - [self requestBidsForAdUnits:adUnitsToRequest]; - } - } -} - -- (nullable NSArray *)getBids:(PBAdUnit *)adUnit { - NSMutableArray *bids = [_bidsMap objectForKey:adUnit.identifier]; - if (bids && [bids count] > 0) { - return bids; - } - PBLogDebug(@"Bids for adunit not available"); - return nil; -} - -- (BOOL)isBidReady:(NSString *)identifier { - if ([_bidsMap objectForKey:identifier] != nil && - [[_bidsMap objectForKey:identifier] count] > 0) { - PBLogDebug(@"Bid is ready for ad unit with identifier %@", identifier); - return YES; - } - return NO; -} - -- (void)setBidOnAdObject:(NSObject *)adObject { - - - if (adObject.pb_identifier) { - - [self clearBidOnAdObject:adObject]; - - NSMutableArray *mutableKeywords; - NSString *keywords = @""; - SEL getKeywords = NSSelectorFromString(@"keywords"); - if ([adObject respondsToSelector:getKeywords]) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - keywords = (NSString *)[adObject performSelector:getKeywords]; - } - if (keywords.length) { - mutableKeywords = [[keywords componentsSeparatedByString:@","] mutableCopy]; - } - if (!mutableKeywords) { - mutableKeywords = [[NSMutableArray alloc] init]; - } - PBAdUnit *adUnit = adObject.pb_identifier; - NSDictionary *keywordsPairs = [self keywordsForWinningBidForAdUnit:adUnit]; - for (id key in keywordsPairs) { - id value = [keywordsPairs objectForKey:key]; - if (value) { - [mutableKeywords addObject:[NSString stringWithFormat:@"%@:%@", key, value]]; - } - } - if ([[mutableKeywords componentsJoinedByString:@","] length] > 4000) { - PBLogDebug(@"Bid to MoPub is too long"); - } else { - SEL setKeywords = NSSelectorFromString(@"setKeywords:"); - if ([adObject respondsToSelector:setKeywords]) { - NSString *keywordsToSet = [mutableKeywords componentsJoinedByString:@","]; - [adObject performSelector:setKeywords withObject:keywordsToSet]; -#pragma clang diagnostic pop - } - } - } else { - PBLogDebug(@"No bid available to pass to MoPub"); - } -} - -/// -// bids should not be cleared n set to nil as setting to nil will remove all publisher keywords too -// so just remove all bids thats related to prebid... Prebid targeting starts as "hb_" -/// -- (void)clearBidOnAdObject:(NSObject *)adObject { - NSString *keywordsString = @""; - SEL getKeywords = NSSelectorFromString(@"keywords"); - if ([adObject respondsToSelector:getKeywords]) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - keywordsString = (NSString *)[adObject performSelector:getKeywords]; - } - if (keywordsString.length) { - - NSArray *keywords = [keywordsString componentsSeparatedByString:@","]; - NSMutableArray *mutableKeywords = [keywords mutableCopy]; - [keywords enumerateObjectsUsingBlock:^(NSString *keyword, NSUInteger idx, BOOL *stop) { - if ([keyword hasPrefix:@"hb_"]) { - [mutableKeywords removeObject:keyword]; - } - }]; - - SEL setKeywords = NSSelectorFromString(@"setKeywords:"); - if ([adObject respondsToSelector:setKeywords]) { - [adObject performSelector:setKeywords withObject:[mutableKeywords componentsJoinedByString:@","]]; -#pragma clang diagnostic pop - } - } -} - -@end diff --git a/sdk/PrebidMobile/PBBidResponse.h b/sdk/PrebidMobile/PBBidResponse.h deleted file mode 100644 index fe5b20155..000000000 --- a/sdk/PrebidMobile/PBBidResponse.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import - -@interface PBBidResponse : NSObject - -/** - * the adUnitId is the adUnit identifier that the bid response corresponds to - */ -@property (nonatomic, readonly) NSString *__nullable adUnitId; - -/** - * customKeywords is a dictionary of all the response objects returned by the demand source that can be used in future - */ -@property (nonatomic, readonly) NSDictionary *__nullable customKeywords; - -/** - * the time within which the bid value should be used else will expire & the developer has to fetch new value from the source - */ -@property (nonatomic, assign) NSTimeInterval timeToExpireAfter; - -/** - * initialize method is to create BidResponse Object with the hbpb, cacheId, & adUnitId. - */ -+ (nonnull instancetype)bidResponseWithAdUnitId:(nonnull NSString *)adUnitId - adServerTargeting:(nonnull NSDictionary *)adServerTargeting; - -/** - * all the server response json objects are added as dictionary objects to the bid response object - */ -- (void)addCustomKeywordWithKey:(nonnull NSString *)key - value:(nonnull NSString *)value; - -/** - * method to check if the bid has expired or not. returns boolean true or false - */ -- (BOOL)isExpired; - -@end diff --git a/sdk/PrebidMobile/PBBidResponse.m b/sdk/PrebidMobile/PBBidResponse.m deleted file mode 100644 index ca3fb57a5..000000000 --- a/sdk/PrebidMobile/PBBidResponse.m +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBBidResponse.h" - -@interface PBBidResponse () - -@property (nonatomic, assign) NSTimeInterval createdTime; -@property (nonatomic, readwrite) NSMutableDictionary *__nullable customKeywords; - -@end - -static NSTimeInterval const kDefaultBidExpiryTime = 270; - - -@implementation PBBidResponse - -#pragma mark Class Methods - -+ (nonnull instancetype)bidResponseWithAdUnitId:(nonnull NSString *)adUnitId - adServerTargeting:(nonnull NSDictionary *)adServerTargeting { - PBBidResponse *newBidResponse = [[PBBidResponse alloc] initWithAdUnitId:adUnitId - adServerTargeting:adServerTargeting]; - return (newBidResponse); -} - -#pragma mark Instance Methods - -- (nonnull instancetype)initWithAdUnitId:(nonnull NSString *)adUnitId - adServerTargeting:(nonnull NSDictionary *)adServerTargeting { - if ((self = [super init])) { - _adUnitId = [adUnitId copy]; - _customKeywords = [adServerTargeting copy]; - - // Setting the default bid expiration time to be 4 minutes 30 seconds - _timeToExpireAfter = kDefaultBidExpiryTime; - _createdTime = [[NSDate date] timeIntervalSince1970]; - } - - return (self); -} - -- (void)addCustomKeywordWithKey:(NSString *)key value:(NSString *)value { - if (_customKeywords == nil) { - _customKeywords = [[NSMutableDictionary alloc] init]; - } - [_customKeywords setObject:value forKey:key]; -} - -- (BOOL)isExpired { - return ([[NSDate date] timeIntervalSince1970] - self.createdTime > self.timeToExpireAfter); -} - -@end diff --git a/sdk/PrebidMobile/PBBidResponseDelegate.h b/sdk/PrebidMobile/PBBidResponseDelegate.h deleted file mode 100644 index 45eb58a67..000000000 --- a/sdk/PrebidMobile/PBBidResponseDelegate.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -@class PBAdUnit; -@class PBBidResponse; - -@protocol PBBidResponseDelegate - -/** - * didReceiveSuccessResponse delegate method that returns a successful bid response with either an active bid or no bid - * @param bid : the BidResponse object that has the bid parameters - */ -- (void)didReceiveSuccessResponse:(nonnull NSArray *)bid; - -/** - * didCompleteWithError delegate method that sends the error object for the bid request failure - * @param error : NSError object that contains the details as to why the request failed - */ -- (void)didCompleteWithError:(nonnull NSError *)error; - -@end diff --git a/sdk/PrebidMobile/PBConstants.h b/sdk/PrebidMobile/PBConstants.h deleted file mode 100644 index 69fc8d115..000000000 --- a/sdk/PrebidMobile/PBConstants.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import - -extern NSString * const PB_GDPR_SubjectToConsent; -extern NSString * const PB_GDPR_ConsentString; - -extern NSString * const IAB_GDPR_SubjectToConsent; -extern NSString * const IAB_GDPR_ConsentString; - -@interface PBConstants : NSObject - -@end diff --git a/sdk/PrebidMobile/PBConstants.m b/sdk/PrebidMobile/PBConstants.m deleted file mode 100644 index aee82a39e..000000000 --- a/sdk/PrebidMobile/PBConstants.m +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBConstants.h" - -NSString * const PB_GDPR_SubjectToConsent = @"kPBGdprSubjectToConsent"; -NSString * const PB_GDPR_ConsentString = @"kPBGDPRConsentString"; - -NSString * const IAB_GDPR_SubjectToConsent = @"IABConsent_SubjectToGDPR"; -NSString * const IAB_GDPR_ConsentString = @"IABConsent_ConsentString"; - -@implementation PBConstants - -@end diff --git a/sdk/PrebidMobile/PBException.h b/sdk/PrebidMobile/PBException.h deleted file mode 100644 index 519da89ae..000000000 --- a/sdk/PrebidMobile/PBException.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import - -@interface PBException : NSException - -/** - * implement price check exception handling. Currently price check will throw exception if the user fails to provide the size - * or demand source in the adunits. Additionally of the user has already registered the adunit & trying to register again - * then an exception is raised. - */ - -typedef enum PBRaiseException { - PBAdUnitNoSizeException, - PBAdUnitNoDemandConfigException, - PBAdUnitAlreadyRegisteredException, - PBAdUnitNotRegisteredException, - PBHostInvalidException, -} PBRaiseException; - -+ (NSException *)exceptionWithName:(enum PBRaiseException)exceptionName; - -@end diff --git a/sdk/PrebidMobile/PBException.m b/sdk/PrebidMobile/PBException.m deleted file mode 100644 index dc82d9e73..000000000 --- a/sdk/PrebidMobile/PBException.m +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBException.h" - -@implementation PBException - -+ (NSException *)exceptionWithName:(enum PBRaiseException)exceptionName { - switch (exceptionName) { - case PBAdUnitNoSizeException: - return ([super exceptionWithName:@"PBAdUnitNoSizeException" reason:@"Ad unit size object is not specified." userInfo:nil]); - break; - case PBAdUnitNoDemandConfigException: - return ([super exceptionWithName:@"PBAdUnitNoDemandConfigException" reason:@"Ad unit config id is not set in prebid server." userInfo:nil]); - break; - case PBAdUnitAlreadyRegisteredException: - return ([super exceptionWithName:@"PBAdUnitAlreadyRegisteredException" reason:@"Ad unit is already registered." userInfo:nil]); - break; - case PBAdUnitNotRegisteredException: - return ([super exceptionWithName:@"PBAdUnitNotRegisteredException" reason:@"Ad unit is not registered." userInfo:nil]); - break; - case PBHostInvalidException: - return ([super exceptionWithName:@"PBHostInvalidException" reason:@"Prebid server host not valid." userInfo:nil]); - break; - default: - return ([super exceptionWithName:@"PrebidException" reason:@"" userInfo:nil]); - break; - } -} - -+ (nonnull NSException *)initWithName:(nonnull NSString *)aName reason:(nullable NSString *)aReason userInfo:(nullable NSDictionary *)aUserInfo { - - return ([super exceptionWithName:aName reason:aReason userInfo:aUserInfo]); -} - -@end diff --git a/sdk/PrebidMobile/PBInterstitialAdUnit.h b/sdk/PrebidMobile/PBInterstitialAdUnit.h deleted file mode 100644 index c4f1aa952..000000000 --- a/sdk/PrebidMobile/PBInterstitialAdUnit.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBAdUnit.h" - -@interface PBInterstitialAdUnit : PBAdUnit - -/** - * Initializes the Interstitial AdUnit with an identifier - * @param identifier : the identifier is a developer specific identity given for each of the ad unit created - * @param configId : the config id with the demand sources from prebid server - */ -- (nonnull instancetype)initWithAdUnitIdentifier:(nonnull NSString *)identifier andConfigId:(nonnull NSString *)configId; - -@end diff --git a/sdk/PrebidMobile/PBInterstitialAdUnit.m b/sdk/PrebidMobile/PBInterstitialAdUnit.m deleted file mode 100644 index 9921005f2..000000000 --- a/sdk/PrebidMobile/PBInterstitialAdUnit.m +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBInterstitialAdUnit.h" - -static NSInteger const kNumSizes = 11; -static NSInteger const kSizeXY = 2; - -@implementation PBInterstitialAdUnit - -- (nonnull instancetype)initWithAdUnitIdentifier:(nonnull NSString *)identifier andConfigId:(nonnull NSString *)configId { - PBInterstitialAdUnit *interstitialAdUnit = [super initWithIdentifier:identifier andAdType:PBAdUnitTypeInterstitial andConfigId:configId]; - [self addSizesToInterstitialAdUnit:interstitialAdUnit]; - return interstitialAdUnit; -} - -- (void)addSizesToInterstitialAdUnit:(PBInterstitialAdUnit *)adUnit { - CGRect screenSize = [[UIScreen mainScreen] bounds]; - int size[kNumSizes][kSizeXY] = {{300, 250}, {300, 600}, {320, 250}, {254, 133}, {580, 400}, {320, 320}, {320, 160}, {320, 480}, {336, 280}, {320, 400}, {1, 1}}; - - for (int i = 0; i < kNumSizes; i++) { - CGSize sizeObj = CGSizeMake(size[i][0], size[i][1]); - if (sizeObj.width <= screenSize.size.width && sizeObj.height <= screenSize.size.height) { - [adUnit addSize:sizeObj]; - } - } -} - -@end diff --git a/sdk/PrebidMobile/PBKeywordsManager.h b/sdk/PrebidMobile/PBKeywordsManager.h deleted file mode 100644 index 85ea8ea51..000000000 --- a/sdk/PrebidMobile/PBKeywordsManager.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import - -@class PBBidResponse; - -/** - Keywords manager that can parse bid response to string pairs of keywords - */ - -@interface PBKeywordsManager : NSObject - -/** - * This method provides the list of keywords that prebid will pass values by default - */ -+ (nonnull NSArray *)reservedKeys; - -@end diff --git a/sdk/PrebidMobile/PBKeywordsManager.m b/sdk/PrebidMobile/PBKeywordsManager.m deleted file mode 100644 index f522b1740..000000000 --- a/sdk/PrebidMobile/PBKeywordsManager.m +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBBidResponse.h" -#import "PBKeywordsManager.h" - -#pragma mark Constants -NSString *__nonnull const PBKeywordsManagerPreBidBidderCodeKey = @"hb_bidder"; -NSString *__nonnull const PBKeywordsManagerPreBidCacheIdKey = @"hb_cache_id"; -NSString *__nonnull const PBKeywordsManagerPriceHbpbKey = @"hb_pb"; - -#pragma mark - -@implementation PBKeywordsManager - -+ (NSArray *)reservedKeys { - static dispatch_once_t reservedKeysToken; - static NSArray *keys; - dispatch_once(&reservedKeysToken, ^{ - keys = @[PBKeywordsManagerPreBidBidderCodeKey, - PBKeywordsManagerPriceHbpbKey, - PBKeywordsManagerPreBidCacheIdKey]; - }); - return keys; -} - -@end diff --git a/sdk/PrebidMobile/PBTargetingParams.h b/sdk/PrebidMobile/PBTargetingParams.h deleted file mode 100644 index c6e8230fe..000000000 --- a/sdk/PrebidMobile/PBTargetingParams.h +++ /dev/null @@ -1,128 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import - -/** - * Gender selection enumerator to be passed in by the user - */ -typedef NS_ENUM(NSUInteger, PBTargetingParamsGender) { - PBTargetingParamsGenderUnknown = 0, - PBTargetingParamsGenderFemale, - PBTargetingParamsGenderMale -}; - -@interface PBTargetingParams : NSObject - -+ (nonnull instancetype)sharedInstance; - -#ifdef DEBUG -+ (void)resetSharedInstance; -#endif - -/** - * This property gets the age value set by the application developer - */ -@property (nonatomic, assign, readwrite) NSInteger age; - -/** - * This property gets the gender enum passed set by the developer - */ -@property (nonatomic, assign, readwrite) PBTargetingParamsGender gender; - -/** - * The application location for targeting - */ -@property (nonatomic, readwrite) CLLocation *__nullable location; - -/** - * The application location precision for targeting - */ -@property (nonatomic, readwrite) NSInteger locationPrecision; - -/** - * The itunes app id for targeting - */ -@property (nonatomic, readwrite) NSString *__nullable itunesID; - -/** - * The consent string for sending the GDPR consent - */ -@property (nonatomic, readwrite) NSString *__nullable gdprConsentString; - -/** - * The boolean value set by the user to collect user data - */ -@property (nonatomic, readwrite) BOOL subjectToGDPR; - -/** - * Boolean value which is set if subject to GDPR - */ - -@property (nonatomic, readonly, assign) BOOL isGDPREnabled; - -/** - * This property stores the set of custom keywords that prebid provides for targeting - */ -@property (nonatomic, strong, readonly) NSDictionary *__nullable customKeywords DEPRECATED_ATTRIBUTE; - -/** - * This method obtains the custom keyword & value for targeting framed by the developer - */ -- (void)setCustomTargeting:(nonnull NSString *)key - withValue:(nonnull NSString *)value __deprecated; -/** - * This method obtains the custom keyword & value set for targeting framed by the developer - */ -- (void)setCustomTargeting:(nonnull NSString *)key - withValues:(nonnull NSArray *)values __deprecated; - -/** - * This method allows the developer to remove all the custom keywords set for targeting - */ -- (void)removeCustomKeywords __deprecated; - -/** - * This method allows the developer to remove specific custom keyword & value set from targeting - */ -- (void)removeCustomKeywordWithKey:(nonnull NSString *)key __deprecated; - -/** - * This property stores the set of user keywords that openRTB provides for targeting - */ -@property (nonatomic, strong, readonly) NSDictionary *__nullable userKeywords; - -/** - * This method obtains the user keyword & value for targeting framed by the developer - */ -- (void)setUserKeywords:(nonnull NSString *)key - withValue:(NSString *_Nullable)value; -/** - * This method obtains the user keyword & value set for targeting framed by the developer - */ -- (void)setUserKeywords:(nonnull NSString *)key - withValues:(NSArray *_Nullable)values; - -/** - * This method allows the developer to remove all the user keywords set for targeting - */ -- (void)removeUserKeywords; - -/** - * This method allows the developer to remove specific user keyword & value set from targeting - */ -- (void)removeUserKeywordWithKey:(nonnull NSString *)key; - -@end diff --git a/sdk/PrebidMobile/PBTargetingParams.m b/sdk/PrebidMobile/PBTargetingParams.m deleted file mode 100644 index ecec0a217..000000000 --- a/sdk/PrebidMobile/PBTargetingParams.m +++ /dev/null @@ -1,200 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBTargetingParams.h" -#import "PBConstants.h" - -@interface PBTargetingParams () - -@property (nonatomic, strong, readwrite) NSMutableDictionary *__nullable customKeywords; -@property (nonatomic, strong, readwrite) NSMutableDictionary *__nullable userKeywords; - -@property (nonatomic, readwrite) BOOL isGDPREnabledHere; - -@end - -@implementation PBTargetingParams - - -- (instancetype)init { - if (self = [super init]) { - _locationPrecision = (NSInteger)-1; - - _customKeywords = [[NSMutableDictionary alloc] init]; - _userKeywords = [[NSMutableDictionary alloc] init]; - _isGDPREnabledHere = NO; - - } - return self; -} - -static PBTargetingParams *sharedInstance = nil; -static dispatch_once_t onceToken; - -+ (instancetype)sharedInstance { - dispatch_once(&onceToken, ^{ - sharedInstance = [[self alloc] init]; - }); - return sharedInstance; -} - -+ (void)resetSharedInstance { - onceToken = 0; - sharedInstance = nil; -} - -- (void)setCustomTargeting:(nonnull NSString *)key - withValue:(nonnull NSString *)value { - if (_customKeywords == nil) { - return; - } - - NSArray *valueArray = [NSArray arrayWithObject:value]; - _customKeywords[key] = valueArray; -} - -- (void)setCustomTargeting:(nonnull NSString *)key - withValues:(nonnull NSArray *)values { - if (_customKeywords == nil) { - return; - } - - // remove duplicate values from the array - NSArray *valueArray = [[NSSet setWithArray:values] allObjects]; - _customKeywords[key] = valueArray; -} - -- (nullable NSDictionary *)customKeywords { - return _customKeywords; -} - -- (void)removeCustomKeywords { - if (_customKeywords != nil) { - [_customKeywords removeAllObjects]; - _customKeywords = nil; - } -} - -- (void)removeCustomKeywordWithKey:(NSString *)key { - if (_customKeywords != nil) { - if (_customKeywords[key] != nil) { - [_customKeywords removeObjectForKey:key]; - } - if ([_customKeywords count] == 0) { - _customKeywords = nil; - } - } -} - -#pragma mark User Keywords - -- (void)setUserKeywords:(nonnull NSString *)key - withValue:(NSString * _Nullable)value { - if (_userKeywords == nil) { - return; - } - - if(value == nil || value == NULL){ - value = @""; - } - - NSArray *valueArray = [NSArray arrayWithObject:value]; - _userKeywords[key] = valueArray; -} - -- (void)setUserKeywords:(nonnull NSString *)key - withValues:(NSArray * _Nullable)values { - if (_userKeywords == nil) { - return; - } - - - // remove duplicate values from the array - NSArray *valueArray = [[NSSet setWithArray:values] allObjects]; - _userKeywords[key] = valueArray; -} - -- (nullable NSDictionary *)userKeywords { - return _userKeywords; -} - -- (void)removeUserKeywords { - if (_userKeywords != nil) { - [_userKeywords removeAllObjects]; - _userKeywords = nil; - } -} - -- (void)removeUserKeywordWithKey:(NSString *)key { - if (_userKeywords != nil) { - if (_userKeywords[key] != nil) { - [_userKeywords removeObjectForKey:key]; - } - if ([_userKeywords count] == 0) { - _userKeywords = nil; - } - } -} - -#pragma end - -- (void)setLocation:(CLLocation *)location { - _location = location; -} - -- (void)setLocationPrecision:(NSInteger)locationPrecision { - _locationPrecision = locationPrecision; -} - -- (void)setItunesID:(NSString *)itunesID { - _itunesID = itunesID; -} - --(void) setSubjectToGDPR:(BOOL)subjectToGDPR{ - [[NSUserDefaults standardUserDefaults] setBool:subjectToGDPR forKey:PB_GDPR_SubjectToConsent]; - self.isGDPREnabledHere = YES; -} - --(void) setGdprConsentString:(NSString *)gdprConsentString{ - - [[NSUserDefaults standardUserDefaults] setObject:gdprConsentString forKey:PB_GDPR_ConsentString]; - self.isGDPREnabledHere = YES; -} - --(BOOL) subjectToGDPR { - BOOL savedGDPR = YES; - if([[NSUserDefaults standardUserDefaults] objectForKey:PB_GDPR_SubjectToConsent] != nil){ - - savedGDPR = [[NSUserDefaults standardUserDefaults] boolForKey:PB_GDPR_SubjectToConsent]; - } else if([[NSUserDefaults standardUserDefaults] objectForKey:IAB_GDPR_SubjectToConsent] != nil){ - NSString *stringValue = [[NSUserDefaults standardUserDefaults] objectForKey:IAB_GDPR_SubjectToConsent]; - savedGDPR = [stringValue boolValue]; - } - return savedGDPR; -} - --(BOOL) isGDPREnabled { - return self.isGDPREnabledHere; -} - --(NSString *) gdprConsentString{ - if(self.isGDPREnabled){ - NSString *savedConsent = [[NSUserDefaults standardUserDefaults] objectForKey:PB_GDPR_ConsentString] ? [[NSUserDefaults standardUserDefaults] objectForKey:PB_GDPR_ConsentString] : [[NSUserDefaults standardUserDefaults] objectForKey:IAB_GDPR_ConsentString]; - return savedConsent; - } - return nil; -} - -@end diff --git a/sdk/PrebidMobile/PrebidCache.h b/sdk/PrebidMobile/PrebidCache.h deleted file mode 100644 index 513b84cbb..000000000 --- a/sdk/PrebidMobile/PrebidCache.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import -#import "PBBidManager.h" - -@interface PrebidCache : NSObject - -+ (nonnull instancetype)globalCache; - -- (void) cacheContents: (NSArray *) contents forAdserver:(PBPrimaryAdServerType) adserver withCompletionBlock: (void (^)(NSArray *))completionBlock; -@end diff --git a/sdk/PrebidMobile/PrebidCache.m b/sdk/PrebidMobile/PrebidCache.m deleted file mode 100644 index 7267e712f..000000000 --- a/sdk/PrebidMobile/PrebidCache.m +++ /dev/null @@ -1,216 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PrebidCache.h" -#import "PBLogging.h" -#import - -static NSInteger expireCacheMilliSeconds = 270000; // expire bids cached longer than 4.5 minutes (console stores them for the same time...) - -static NSString *const kPBAppTransportSecurityDictionaryKey = @"NSAppTransportSecurity"; -static NSString *const kPBAppTransportSecurityAllowsArbitraryLoadsKey = @"NSAllowsArbitraryLoads"; - -@interface PrebidCacheOperation : NSOperation -{ - BOOL executing; - BOOL finished; -} - -@property NSInteger loadingCount; - -@property NSURL *httpsHost; - -@property UIWebView *uiwebviewCache; -@property WKWebView *wkwebviewCache; - - -@property NSString* htmlToLoad; - -- (instancetype)initWithHTMLLoad: (NSString *) htmlToLoad withAdserver: (PBPrimaryAdServerType) adserver; -@end - -@implementation PrebidCacheOperation -- (instancetype)initWithHTMLLoad:(NSString *)htmlToLoad withAdserver: (PBPrimaryAdServerType) adserver -{ - if (self = [super init]) { - self.htmlToLoad = htmlToLoad; - executing = NO; - finished = NO; - - if(adserver == PBPrimaryAdServerDFP){ - // We need UIWebView only for Mopub & not for DFP - _uiwebviewCache = [[UIWebView alloc] init]; - _uiwebviewCache.frame = CGRectZero; - _uiwebviewCache.delegate = self; - } - _wkwebviewCache = [[WKWebView alloc] init]; - _wkwebviewCache.frame = CGRectZero; - _wkwebviewCache.navigationDelegate = self; - - if (adserver == PBPrimaryAdServerDFP) { - _httpsHost = [NSURL URLWithString:@"https://pubads.g.doubleclick.net"]; - _loadingCount = 2; - } else if (adserver == PBPrimaryAdServerMoPub){ - // Grab the ATS dictionary from the Info.plist - NSDictionary *atsSettingsDictionary = [NSBundle mainBundle].infoDictionary[kPBAppTransportSecurityDictionaryKey]; - if ([atsSettingsDictionary[kPBAppTransportSecurityAllowsArbitraryLoadsKey] boolValue]) { - _httpsHost = [NSURL URLWithString:@"http://ads.mopub.com"]; - } else { - _httpsHost = [NSURL URLWithString:@"https://ads.mopub.com"]; - } - _loadingCount = 1; - } else { - [self finishAndChangeState]; // TODO: check for a proper handling here - } - } - return self; -} - --(void)start -{ - if ([self isCancelled]) - { - // Must move the operation to the finished state if it is canceled. - [self willChangeValueForKey:@"isFinished"]; - finished = YES; - [self didChangeValueForKey:@"isFinished"]; - return; - } - // If the operation is not canceled, begin executing the task. - [self willChangeValueForKey:@"isExecuting"]; - [NSThread detachNewThreadSelector:@selector(main) toTarget:self withObject:nil]; - executing = YES; - [self didChangeValueForKey:@"isExecuting"]; -} - --(void)main -{ - @try { - dispatch_async(dispatch_get_main_queue(), ^{ - [self.wkwebviewCache removeFromSuperview]; - UIWindow *window = [[UIApplication sharedApplication] keyWindow]; - [window addSubview:self.wkwebviewCache]; - if(self.uiwebviewCache != nil){ - [self.uiwebviewCache loadHTMLString:self.htmlToLoad baseURL:self.httpsHost]; - } - [self.wkwebviewCache loadHTMLString:self.htmlToLoad baseURL:self.httpsHost]; - }); - } - @catch (NSException *exception) { - PBLogDebug(@"Catch the exception %@",[exception description]); - } - @finally { - PBLogDebug(@"Cache Operation - Main Method - Finally block"); - } -} - --(BOOL)isConcurrent -{ - return YES; //Default is NO so overriding it to return YES; -} - --(BOOL)isExecuting{ - return executing; -} - --(BOOL)isFinished{ - return finished; -} - -- (void)webViewDidFinishLoad:(UIWebView *)webView -{ - self.loadingCount--; - if (self.loadingCount == 0) { - [self finishAndChangeState]; - } -} - -- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation -{ - self.loadingCount--; - if (self.loadingCount == 0) { - [self finishAndChangeState]; - } -} - -- (void) finishAndChangeState -{ - __weak PrebidCacheOperation *weakSelf = self; - dispatch_async(dispatch_get_main_queue(), ^{ - __strong PrebidCacheOperation *strongSelf = weakSelf; - - [strongSelf.wkwebviewCache setNavigationDelegate:nil]; - [strongSelf.wkwebviewCache setUIDelegate:nil]; - - [strongSelf.wkwebviewCache removeFromSuperview]; - strongSelf.wkwebviewCache = nil; - - [strongSelf willChangeValueForKey:@"isExecuting"]; - strongSelf->executing = NO; - [strongSelf didChangeValueForKey:@"isExecuting"]; - [strongSelf willChangeValueForKey:@"isFinished"]; - strongSelf->finished = YES; - [strongSelf didChangeValueForKey:@"isFinished"]; - - }); -} - -@end - -@interface PrebidCache () -@property NSOperationQueue *cacheQueue; -@end - -@implementation PrebidCache - -+ (instancetype)globalCache { - static id instance; - - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - instance = [[[self class] alloc] init]; - [instance setupQueue]; - }); - - return instance; -} - --(void) setupQueue -{ - self.cacheQueue = [NSOperationQueue new]; -} - -- (void) cacheContents:(NSArray *)contents forAdserver:(PBPrimaryAdServerType)adserver withCompletionBlock:(void (^)(NSArray *))completionBlock -{ - long long milliseconds = (long long)([[NSDate date] timeIntervalSince1970] * 1000.0); - NSMutableString *htmlToLoad = [[NSMutableString alloc] init]; - [htmlToLoad appendString:@""]; - NSString *scriptString = [NSString stringWithFormat:@"", milliseconds, (long) expireCacheMilliSeconds]; - [htmlToLoad appendString:scriptString]; - NSMutableArray *cacheIds = [[NSMutableArray alloc] init]; - for (NSString *content in contents) { - NSString *cacheId = [NSString stringWithFormat:@"Prebid_%@_%lld", [NSString stringWithFormat:@"%08X", arc4random()], milliseconds]; - [cacheIds addObject:cacheId]; - [htmlToLoad appendString:[NSString stringWithFormat:@"", cacheId, content]]; - } - [htmlToLoad appendString:@""]; - PrebidCacheOperation *cacheOperation = [[PrebidCacheOperation alloc] initWithHTMLLoad:htmlToLoad withAdserver:adserver]; - cacheOperation.completionBlock = ^{ completionBlock(cacheIds);}; - [self.cacheQueue addOperation:cacheOperation]; -} - - - -@end diff --git a/sdk/PrebidMobile/PrebidMobile-umbrella.h b/sdk/PrebidMobile/PrebidMobile-umbrella.h deleted file mode 100644 index 63e5233e2..000000000 --- a/sdk/PrebidMobile/PrebidMobile-umbrella.h +++ /dev/null @@ -1,14 +0,0 @@ -#import "PBLogManager.h" -#import "PBLogging.h" -#import "PBHost.h" -#import "PrebidMobile.h" -#import "PBAdUnit.h" -#import "PBBannerAdUnit.h" -#import "PBBidManager.h" -#import "PBBidResponse.h" -#import "PBBidResponseDelegate.h" -#import "PBException.h" -#import "PBInterstitialAdUnit.h" -#import "PBKeywordsManager.h" -#import "PBTargetingParams.h" -#import "PBServerAdapter.h" diff --git a/sdk/PrebidMobile/PrebidMobile.h b/sdk/PrebidMobile/PrebidMobile.h deleted file mode 100644 index bbb5e9077..000000000 --- a/sdk/PrebidMobile/PrebidMobile.h +++ /dev/null @@ -1,46 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBBidManager.h" -#import "PBHost.h" -#import -@import Foundation.NSString; - -@class PBAdUnit; - -@interface PrebidMobile : NSObject - -/** - * This method allows the developer to register the ad units created for Prebid Mobile - * @param adUnits : Array of AdUnits that can be registered - * @param accountId : Prebid server accountId - * @param host : Prebid server host - * @param adServer : Primary ad server - needed to determine optimal bid caching - */ -+ (void)registerAdUnits:(nonnull NSArray *)adUnits - withAccountId:(nonnull NSString *)accountId - withHost:(PBServerHost)host - andPrimaryAdServer:(PBPrimaryAdServerType)adServer; - -+ (void)setBidKeywordsOnAdObject:(nonnull id)adObject withAdUnitId:(nonnull NSString *)adUnitId; - -+ (void)setBidKeywordsOnAdObject:(nonnull id)adObject - withAdUnitId:(nonnull NSString *)adUnitIdentifier - withTimeout:(int)timeoutInMilliseconds - completionHandler:(nullable void (^)(void))handler; - -+ (void) shouldLoadOverSecureConnection:(BOOL) secureConnection; - -@end diff --git a/sdk/PrebidMobile/PrebidMobile.m b/sdk/PrebidMobile/PrebidMobile.m deleted file mode 100644 index 94e5c3e41..000000000 --- a/sdk/PrebidMobile/PrebidMobile.m +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PrebidMobile.h" -#import "PBLogging.h" - -@implementation PrebidMobile - -+ (void)registerAdUnits:(nonnull NSArray *)adUnits - withAccountId:(nonnull NSString *)accountId - withHost:(PBServerHost)host - andPrimaryAdServer:(PBPrimaryAdServerType)adServer { - [[PBBidManager sharedInstance] registerAdUnits:adUnits withAccountId:accountId withHost:host andPrimaryAdServer:adServer]; -} - -+ (void)setBidKeywordsOnAdObject:(nonnull id)adObject - withAdUnitId:(nonnull NSString *)adUnitId { - PBLogDebug(@"Set bid keywords on ad object for ad unit %@", adUnitId); - PBAdUnit *__nullable adUnit = [[PBBidManager sharedInstance] adUnitByIdentifier:adUnitId]; - [[PBBidManager sharedInstance] assertAdUnitRegistered:adUnitId]; - - SEL setPbIdentifier = NSSelectorFromString(@"setPb_identifier:"); - if ([adObject respondsToSelector:setPbIdentifier]) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Warc-performSelector-leaks" - [adObject performSelector:setPbIdentifier withObject:adUnit]; -#pragma clang diagnostic pop - } -} - -+ (void)setBidKeywordsOnAdObject:(id)adObject - withAdUnitId:(NSString *)adUnitIdentifier - withTimeout:(int)timeoutInMilliseconds - completionHandler:(void (^)(void))handler { - void (^completionHandler)(void) = ^{ - [self setBidKeywordsOnAdObject:adObject withAdUnitId:adUnitIdentifier]; - handler(); - }; - [[PBBidManager sharedInstance] attachTopBidHelperForAdUnitId:adUnitIdentifier - andTimeout:timeoutInMilliseconds - completionHandler:completionHandler]; -} - -+ (void) shouldLoadOverSecureConnection:(BOOL) secureConnection { - [[PBBidManager sharedInstance] loadOnSecureConnection:secureConnection]; -} - -@end diff --git a/sdk/PrebidMobile/PrebidMobile.modulemap b/sdk/PrebidMobile/PrebidMobile.modulemap deleted file mode 100644 index 84db2687b..000000000 --- a/sdk/PrebidMobile/PrebidMobile.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module PrebidMobile { - umbrella header "../PrebidMobile-umbrella.h" - - export * - module * { export * } -} diff --git a/sdk/PrebidMobileTests/MockObjects/PBMockServerAdapter.h b/sdk/PrebidMobileTests/MockObjects/PBMockServerAdapter.h deleted file mode 100644 index b36d87f24..000000000 --- a/sdk/PrebidMobileTests/MockObjects/PBMockServerAdapter.h +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import - -@interface PBMockServerAdapter : NSObject - -@end diff --git a/sdk/PrebidMobileTests/MockObjects/PBMockServerAdapter.m b/sdk/PrebidMobileTests/MockObjects/PBMockServerAdapter.m deleted file mode 100644 index e5636fbb8..000000000 --- a/sdk/PrebidMobileTests/MockObjects/PBMockServerAdapter.m +++ /dev/null @@ -1,29 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBAdUnit.h" -#import "PBBidResponseDelegate.h" -#import "PBMockServerAdapter.h" - -@implementation PBMockServerAdapter - -- (void)requestBidsWithAdUnits:(nullable NSArray *)adUnits - withDelegate:(nonnull id)delegate { - // mock any conditions necessary for testing - //[delegate bidSuccessful:bidResponse forAdUnit:adUnit]; - NSLog(@"mock server adapter request bids called"); -} - -@end diff --git a/sdk/PrebidMobileTests/PrebidMobileCoreTests/PBAdUnitTests.m b/sdk/PrebidMobileTests/PrebidMobileCoreTests/PBAdUnitTests.m deleted file mode 100644 index 2dfce94e3..000000000 --- a/sdk/PrebidMobileTests/PrebidMobileCoreTests/PBAdUnitTests.m +++ /dev/null @@ -1,125 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import -#import "PBAdUnit.h" -#import "PBBannerAdUnit.h" -#import "PBInterstitialAdUnit.h" -#import - -NSString *const kTestAdUnitId = @"TestAdUnit"; -NSString *const kTestBannerAdUnitId = @"TestBannerAdUnit"; -NSString *const kTestInterstitialAdUnitId = @"TestInterstitialAdUnit"; -NSString *const kTestConfigId = @"testconfigid"; - -@interface PCAdUnitTests : XCTestCase - -@end - -@implementation PCAdUnitTests - -- (void)setUp { - [super setUp]; -} - -- (void)tearDown { - [super tearDown]; -} - -- (void)testBannerAdCreation { - PBBannerAdUnit *bannerAdUnit = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:kTestBannerAdUnitId andConfigId:kTestConfigId]; - XCTAssertTrue(bannerAdUnit.adType == PBAdUnitTypeBanner); - XCTAssertTrue([kTestBannerAdUnitId isEqualToString:bannerAdUnit.identifier]); -} - -- (void)testInterstitialAdCreation { - PBInterstitialAdUnit *interstitialAdUnit = [[PBInterstitialAdUnit alloc] initWithAdUnitIdentifier:kTestInterstitialAdUnitId andConfigId:kTestConfigId]; - XCTAssertTrue(interstitialAdUnit.adType == PBAdUnitTypeInterstitial); - XCTAssertTrue([kTestInterstitialAdUnitId isEqualToString:interstitialAdUnit.identifier]); - - NSMutableArray *expectedSizeArray = [[NSMutableArray alloc] init]; - CGRect screenSize = [[UIScreen mainScreen] bounds]; - int size[11][2] = {{300, 250}, {300, 600}, {320, 250}, {254, 133}, {580, 400}, {320, 320}, {320, 160}, {320, 480}, {336, 280}, {320, 400}, {1, 1}}; - for (int i = 0; i < 11; i++) { - CGSize sizeObj = CGSizeMake(size[i][0], size[i][1]); - if (sizeObj.width <= screenSize.size.width && sizeObj.height <= screenSize.size.height) { - [expectedSizeArray addObject:[NSValue valueWithCGSize:sizeObj]]; - } - } - XCTAssertTrue([interstitialAdUnit.adSizes isEqualToArray:expectedSizeArray]); -} - -- (void)testAddSizeToAdUnit { - PBAdUnit *adUnit = [[PBAdUnit alloc] initWithIdentifier:kTestAdUnitId andAdType:PBAdUnitTypeBanner andConfigId:kTestConfigId]; - - CGSize bannerSize = CGSizeMake(320, 50); - [adUnit addSize:bannerSize]; - - XCTAssertTrue(adUnit.adSizes.count == 1); - XCTAssertTrue([adUnit.adSizes containsObject:[NSValue valueWithCGSize:bannerSize]]); -} - -- (void)testAddMultipleSizesToAdUnit { - PBAdUnit *adUnit = [[PBAdUnit alloc] initWithIdentifier:kTestAdUnitId andAdType:PBAdUnitTypeBanner andConfigId:kTestConfigId]; - - CGSize bannerSize = CGSizeMake(320, 50); - CGSize bannerSize2 = CGSizeMake(320, 250); - [adUnit addSize:bannerSize]; - [adUnit addSize:bannerSize2]; - - XCTAssertTrue(adUnit.adSizes.count == 2); - XCTAssertTrue([adUnit.adSizes containsObject:[NSValue valueWithCGSize:bannerSize]]); - XCTAssertTrue([adUnit.adSizes containsObject:[NSValue valueWithCGSize:bannerSize2]]); -} - -- (void)testGenerateUUIDForAdUnit { - PBAdUnit *adUnit = [[PBAdUnit alloc] initWithIdentifier:kTestAdUnitId andAdType:PBAdUnitTypeBanner andConfigId:kTestConfigId]; - NSString *adUnitUUIDOriginal = adUnit.uuid; - - [adUnit generateUUID]; - XCTAssertFalse([adUnitUUIDOriginal isEqualToString:adUnit.uuid]); -} - -- (void)testIsEqualToAdUnit { - PBBannerAdUnit *bannerAdUnit1 = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:kTestBannerAdUnitId andConfigId:kTestConfigId]; - PBBannerAdUnit *bannerAdUnit2 = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:kTestBannerAdUnitId andConfigId:kTestConfigId]; - XCTAssertTrue([bannerAdUnit1 isEqualToAdUnit:bannerAdUnit2]); -} - -- (void)testShouldExpireAllBidsInitialAdUnit { - PBAdUnit *adUnit = [[PBAdUnit alloc] initWithIdentifier:kTestAdUnitId andAdType:PBAdUnitTypeBanner andConfigId:kTestConfigId]; - XCTAssertTrue([adUnit shouldExpireAllBids:[NSDate date].timeIntervalSince1970]); -} - -- (void)testShouldExpireAllBidsAdUnitWithSetTimeToExpire { - PBAdUnit *adUnit = [[PBAdUnit alloc] initWithIdentifier:kTestAdUnitId andAdType:PBAdUnitTypeBanner andConfigId:kTestConfigId]; - [adUnit setTimeIntervalToExpireAllBids:[NSDate dateWithTimeIntervalSinceNow:5].timeIntervalSince1970]; - XCTAssertFalse([adUnit shouldExpireAllBids:[NSDate date].timeIntervalSince1970]); -} - -- (void)testAdUnitSetTimeToExpireUsesLongerTimeToExpire { - PBAdUnit *adUnit = [[PBAdUnit alloc] initWithIdentifier:kTestAdUnitId andAdType:PBAdUnitTypeBanner andConfigId:kTestConfigId]; - - NSTimeInterval longTimeToExpire = [NSDate dateWithTimeIntervalSinceNow:270].timeIntervalSince1970; - NSTimeInterval shortTimeToExpire = [NSDate dateWithTimeIntervalSinceNow:2].timeIntervalSince1970; - NSTimeInterval timeInBetween = [NSDate dateWithTimeIntervalSinceNow:50].timeIntervalSince1970; - - [adUnit setTimeIntervalToExpireAllBids:longTimeToExpire]; - [adUnit setTimeIntervalToExpireAllBids:shortTimeToExpire]; - - XCTAssertFalse([adUnit shouldExpireAllBids:timeInBetween]); -} - -@end diff --git a/sdk/PrebidMobileTests/PrebidMobileCoreTests/PBBidManagerTests.m b/sdk/PrebidMobileTests/PrebidMobileCoreTests/PBBidManagerTests.m deleted file mode 100644 index 61d932a66..000000000 --- a/sdk/PrebidMobileTests/PrebidMobileCoreTests/PBBidManagerTests.m +++ /dev/null @@ -1,346 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBServerAdapter.h" -#import "PBAdUnit.h" -#import "PBBannerAdUnit.h" -#import "PBBidManager.h" -#import "PBBidResponse.h" -#import "PBException.h" -#import "PBInterstitialAdUnit.h" -#import "PBMockServerAdapter.h" -#import - -NSString *const kBidManagerTestAdUnitId = @"TestAdUnitId"; - -@interface PBBidManager (Testing) - -@property (nonatomic, strong) NSMutableSet *adUnits; -@property (nonatomic, strong) NSMutableDictionary *__nullable bidsMap; -@property (nonatomic, strong) PBServerAdapter *demandAdapter; -- (void)resetAdUnit:(PBAdUnit *)adUnit; -- (void)saveBidResponses:(nonnull NSArray *)bidResponse; -- (void)checkForBidsExpired; -- (void)registerAdUnit:(PBAdUnit *)adUnit; -- (NSArray *)getBids:(PBAdUnit *)adUnit; - -@end - -@interface PBBidManagerTests : XCTestCase - -@property (nonatomic, strong) NSString *accountId; - -@end - -@implementation PBBidManagerTests - -- (void)setUp { - self.accountId = @"aecd6ef7-b992-4e99-9bb8-65e2d984e1dd"; - [super setUp]; -} - -- (void)tearDown { - [PBBidManager resetSharedInstance]; - [super tearDown]; -} - -#pragma mark - Test register ad units tests - -- (void)testRegisterBannerAdUnit { - PBAdUnit *returnedUnit = nil; - PBAdUnit *bannerAdUnit = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:@"bmt1" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - [bannerAdUnit addSize:CGSizeMake(320, 50)]; - - [[PBBidManager sharedInstance] registerAdUnits:@[bannerAdUnit] withAccountId:self.accountId withHost:PBServerHostAppNexus andPrimaryAdServer:PBPrimaryAdServerMoPub]; - returnedUnit = [[PBBidManager sharedInstance] adUnitByIdentifier:[bannerAdUnit identifier]]; - - XCTAssertNotNil(returnedUnit); - XCTAssertEqualObjects(returnedUnit.identifier, bannerAdUnit.identifier); -} - -- (void)testRegisterInterstitialAdUnit { - PBAdUnit *returnedUnit = nil; - PBAdUnit *interstitialAdUnit = [[PBInterstitialAdUnit alloc] initWithAdUnitIdentifier:@"bmt2" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - - [[PBBidManager sharedInstance] registerAdUnits:@[interstitialAdUnit] withAccountId:self.accountId withHost:PBServerHostAppNexus andPrimaryAdServer:PBPrimaryAdServerMoPub]; - returnedUnit = [[PBBidManager sharedInstance] adUnitByIdentifier:[interstitialAdUnit identifier]]; - - XCTAssertNotNil(returnedUnit); - XCTAssertEqualObjects(returnedUnit.identifier, interstitialAdUnit.identifier); -} - -- (void)testRegisterMultipleAdUnits { - PBAdUnit *returnedAdUnit = nil; - PBAdUnit *returnedInterstitialAdUnit = nil; - PBAdUnit *bannerAdUnit = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:@"bmt3" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - [bannerAdUnit addSize:CGSizeMake(320, 50)]; - PBAdUnit *interstitialAdUnit = [[PBInterstitialAdUnit alloc] initWithAdUnitIdentifier:@"bmt4" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - - [[PBBidManager sharedInstance] registerAdUnits:@[bannerAdUnit, interstitialAdUnit] withAccountId:self.accountId withHost:PBServerHostAppNexus andPrimaryAdServer:PBPrimaryAdServerMoPub]; - returnedAdUnit = [[PBBidManager sharedInstance] adUnitByIdentifier:[bannerAdUnit identifier]]; - returnedInterstitialAdUnit = [[PBBidManager sharedInstance] adUnitByIdentifier:[interstitialAdUnit identifier]]; - - XCTAssertNotNil(returnedAdUnit); - XCTAssertEqualObjects(returnedAdUnit.identifier, bannerAdUnit.identifier); - XCTAssertNotNil(returnedInterstitialAdUnit); - XCTAssertEqualObjects(returnedInterstitialAdUnit.identifier, interstitialAdUnit.identifier); -} - -- (void)testRegisterBannerAdUnitNoSizeException { - PBBannerAdUnit *bannerAdUnit = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:@"bmt4" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - @try { - [[PBBidManager sharedInstance] registerAdUnits:@[bannerAdUnit] withAccountId:self.accountId withHost:PBServerHostAppNexus andPrimaryAdServer:PBPrimaryAdServerMoPub]; - } @catch (PBException *exception) { - NSExceptionName expectedException = @"PBAdUnitNoSizeException"; - XCTAssertNotNil(exception); - XCTAssertEqual(exception.name, expectedException); - } - PBAdUnit *returnedAdUnit = [[PBBidManager sharedInstance] adUnitByIdentifier:[bannerAdUnit identifier]]; - XCTAssertNil(returnedAdUnit); -} - -- (void)testRegisterAdUnitWithSameIdentifier { - PBAdUnit *returnedUnit = nil; - PBAdUnit *bannerAdUnit1 = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:@"sameid" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - [bannerAdUnit1 addSize:CGSizeMake(320, 50)]; - PBAdUnit *bannerAdUnit2 = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:@"sameid" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - [bannerAdUnit2 addSize:CGSizeMake(320, 50)]; - - [[PBBidManager sharedInstance] registerAdUnits:@[bannerAdUnit1, bannerAdUnit2] withAccountId:self.accountId withHost:PBServerHostAppNexus andPrimaryAdServer:PBPrimaryAdServerMoPub]; - returnedUnit = [[PBBidManager sharedInstance] adUnitByIdentifier:[bannerAdUnit1 identifier]]; - - XCTAssertNotNil(returnedUnit); - // Test that the second banner ad unit is the one that is registered, not the first banner ad unit - XCTAssertEqualObjects(returnedUnit, bannerAdUnit2); -} - -#pragma mark - Test winning bid for ad unit - -- (void)testWinningBidForAdUnit { - PBAdUnit *bannerAdUnit = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:@"bmt45" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - [bannerAdUnit addSize:CGSizeMake(320, 50)]; - [[PBBidManager sharedInstance] registerAdUnits:@[bannerAdUnit] withAccountId:self.accountId withHost:PBServerHostAppNexus andPrimaryAdServer:PBPrimaryAdServerMoPub]; - - NSDictionary *testAdServerTargeting = @{@"hb_pb":@"4.14", @"hb_cache_id":@"0000-0000-000-0000"}; - PBBidResponse *bidResponse = [PBBidResponse bidResponseWithAdUnitId:bannerAdUnit.identifier adServerTargeting:testAdServerTargeting]; - NSDictionary *testAdServerTargeting2 = @{@"hb_pb_appnexus":@"0.14", @"hb_cache_id_appnexus":@"0000-0000-000-0000"}; - PBBidResponse *bidResponse2 = [PBBidResponse bidResponseWithAdUnitId:bannerAdUnit.identifier adServerTargeting:testAdServerTargeting2]; - [[PBBidManager sharedInstance] saveBidResponses:@[bidResponse, bidResponse2]]; - - NSArray *bids = [[PBBidManager sharedInstance] getBids:bannerAdUnit]; - PBBidResponse *topBid = [bids firstObject]; - XCTAssertEqual([bids count], 2); - XCTAssertEqual(topBid.customKeywords[@"hb_pb"], @"4.14"); -} - -#pragma mark - Test keywords for winning bid for ad unit tests - -- (void)testKeywordsForWinningBidForAdUnit { - PBAdUnit *bannerAdUnit = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:@"bmt5" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - [bannerAdUnit addSize:CGSizeMake(320, 50)]; - [[PBBidManager sharedInstance] registerAdUnits:@[bannerAdUnit] withAccountId:self.accountId withHost:PBServerHostAppNexus andPrimaryAdServer:PBPrimaryAdServerMoPub]; - - NSDictionary *testAdServerTargeting = @{@"hb_pb":@"4.14", @"hb_cache_id":@"0000-0000-000-0000", @"hb_bidder": @"appnexus"}; - PBBidResponse *bidResponse = [PBBidResponse bidResponseWithAdUnitId:bannerAdUnit.identifier adServerTargeting:testAdServerTargeting]; - [[PBBidManager sharedInstance] saveBidResponses:@[bidResponse]]; - - NSDictionary *keywords = [[PBBidManager sharedInstance] keywordsForWinningBidForAdUnit:bannerAdUnit]; - NSDictionary *expectedKeywords = @{@"hb_pb": @"4.14", - @"hb_cache_id" : @"0000-0000-000-0000", - @"hb_bidder" : @"appnexus"}; - XCTAssertTrue([keywords isEqualToDictionary:expectedKeywords]); -} - -#pragma mark - Test assert ad unit registered tests - -- (void)testAssertAdUnitRegistered { - PBAdUnit *bannerAdUnit = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:@"bmt6" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - [bannerAdUnit addSize:CGSizeMake(320, 50)]; - [[PBBidManager sharedInstance] registerAdUnits:@[bannerAdUnit] withAccountId:self.accountId withHost:PBServerHostAppNexus andPrimaryAdServer:PBPrimaryAdServerMoPub]; - [[PBBidManager sharedInstance] assertAdUnitRegistered:bannerAdUnit.identifier]; -} - -- (void)testAssertAdUnitNotRegistered { - PBAdUnit *bannerAdUnit = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:@"bmt7" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - [bannerAdUnit addSize:CGSizeMake(320, 50)]; - @try { - [[PBBidManager sharedInstance] assertAdUnitRegistered:bannerAdUnit.identifier]; - } @catch (PBException *exception) { - NSExceptionName expectedException = @"PBAdUnitNotRegisteredException"; - XCTAssertNotNil(exception); - XCTAssertEqual(exception.name, expectedException); - } - PBAdUnit *returnedAdUnit = [[PBBidManager sharedInstance] adUnitByIdentifier:[bannerAdUnit identifier]]; - XCTAssertNil(returnedAdUnit); -} - -#pragma mark - Test attach top bid helper tests - -- (void)testAttachTopBidHelperPassThroughAllKeywords { - XCTestExpectation *expectation = [self expectationWithDescription:NSStringFromSelector(_cmd)]; - PBAdUnit *adUnit = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:@"bmt8" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - [adUnit addSize:CGSizeMake(320, 50)]; - [[PBBidManager sharedInstance] registerAdUnits:@[adUnit] withAccountId:self.accountId withHost:PBServerHostAppNexus andPrimaryAdServer:PBPrimaryAdServerMoPub]; - - NSDictionary *testAdServerTargeting1 = @{@"hb_pb":@"0.50", @"hb_cache_id":@"Prebid_123_456",@"hb_cache_id_appnexus": @"Prebid_123_456", @"hb_bidder": @"appnexus"}; - PBBidResponse *bidResponse1 = [PBBidResponse bidResponseWithAdUnitId:adUnit.identifier adServerTargeting:testAdServerTargeting1]; - NSDictionary *testAdServerTargeting2 = @{@"hb_pb_rubicon":@"0.40", @"hb_cache_id_rubicon": @"Prebid_789_101", @"hb_bidder_rubicon": @"rubicon"}; - PBBidResponse *bidResponse2 = [PBBidResponse bidResponseWithAdUnitId:adUnit.identifier adServerTargeting:testAdServerTargeting2]; - [[PBBidManager sharedInstance] saveBidResponses:@[bidResponse2, bidResponse1]]; - - [[PBBidManager sharedInstance] attachTopBidHelperForAdUnitId:adUnit.identifier andTimeout:500 completionHandler:^{ - NSDictionary *bidKeywords = [[PBBidManager sharedInstance] keywordsForWinningBidForAdUnit:adUnit]; - XCTAssertNotNil(bidKeywords); - XCTAssertTrue(bidKeywords.allKeys.count == 7); - XCTAssertTrue([bidKeywords.allKeys containsObject:@"hb_pb"]); - XCTAssertEqual(@"0.50", [bidKeywords objectForKey:@"hb_pb"]); - XCTAssertTrue([bidKeywords.allKeys containsObject:@"hb_cache_id"]); - XCTAssertEqual(@"Prebid_123_456", [bidKeywords objectForKey:@"hb_cache_id"]); - XCTAssertTrue([bidKeywords.allKeys containsObject:@"hb_cache_id_appnexus"]); - XCTAssertEqual(@"Prebid_123_456", [bidKeywords objectForKey:@"hb_cache_id_appnexus"]); - XCTAssertTrue([bidKeywords.allKeys containsObject:@"hb_bidder"]); - XCTAssertEqual(@"appnexus", [bidKeywords objectForKey:@"hb_bidder"]); - XCTAssertTrue([bidKeywords.allKeys containsObject:@"hb_pb_rubicon"]); - XCTAssertEqual(@"0.40", [bidKeywords objectForKey:@"hb_pb_rubicon"]); - XCTAssertTrue([bidKeywords.allKeys containsObject:@"hb_cache_id_rubicon"]); - XCTAssertEqual(@"Prebid_789_101", [bidKeywords objectForKey:@"hb_cache_id_rubicon"]); - XCTAssertTrue([bidKeywords.allKeys containsObject:@"hb_bidder_rubicon"]); - XCTAssertEqual(@"rubicon", [bidKeywords objectForKey:@"hb_bidder_rubicon"]); - [expectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:1 handler:nil]; -} - -- (void)testAttachTopBidHelperWithReadyBid { - XCTestExpectation *expectation = [self expectationWithDescription:NSStringFromSelector(_cmd)]; - PBAdUnit *adUnit = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:@"bmt8" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - [adUnit addSize:CGSizeMake(320, 50)]; - [[PBBidManager sharedInstance] registerAdUnits:@[adUnit] withAccountId:self.accountId withHost:PBServerHostAppNexus andPrimaryAdServer:PBPrimaryAdServerMoPub]; - - NSDictionary *testAdServerTargeting = @{@"hb_pb":@"4.14", @"hb_cache_id":@"0000-0000-000-0000", @"hb_bidder": @"appnexus"}; - PBBidResponse *bidResponse = [PBBidResponse bidResponseWithAdUnitId:adUnit.identifier adServerTargeting:testAdServerTargeting]; - [[PBBidManager sharedInstance] saveBidResponses:@[bidResponse]]; - - [[PBBidManager sharedInstance] attachTopBidHelperForAdUnitId:adUnit.identifier andTimeout:500 completionHandler:^{ - NSDictionary *bidKeywords = [[PBBidManager sharedInstance] keywordsForWinningBidForAdUnit:adUnit]; - XCTAssertNotNil(bidKeywords); - [expectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:1 handler:nil]; -} - -- (void)testAttachTopBidHelperWithReadyBidAfterSomeTime { - XCTestExpectation *expectation = [self expectationWithDescription:NSStringFromSelector(_cmd)]; - PBAdUnit *adUnit = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:@"bmt9" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - [adUnit addSize:CGSizeMake(320, 50)]; - [[PBBidManager sharedInstance] registerAdUnits:@[adUnit] withAccountId:self.accountId withHost:PBServerHostAppNexus andPrimaryAdServer:PBPrimaryAdServerMoPub]; - - // Save a bid after 200 milliseconds - before the timeout of 500 ms but not immediately - NSDictionary *testAdServerTargeting = @{@"hb_pb":@"4.14", @"hb_cache_id":@"0000-0000-000-0000", @"hb_bidder": @"appnexus"}; - PBBidResponse *bidResponse = [PBBidResponse bidResponseWithAdUnitId:adUnit.identifier adServerTargeting:testAdServerTargeting]; - NSArray *array = [NSArray arrayWithObjects:bidResponse, nil]; - [[PBBidManager sharedInstance] performSelector:@selector(saveBidResponses:) withObject:array afterDelay:0.2]; - - [[PBBidManager sharedInstance] attachTopBidHelperForAdUnitId:adUnit.identifier andTimeout:500 completionHandler:^{ - NSDictionary *bidKeywords = [[PBBidManager sharedInstance] keywordsForWinningBidForAdUnit:adUnit]; - XCTAssertNotNil(bidKeywords); - [expectation fulfill]; - }]; - // Wait for the expectation for 1 second - [self waitForExpectationsWithTimeout:1 handler:nil]; -} - -- (void)testAttachTopBidHelperWithNoReadyBid { - XCTestExpectation *expectation = [self expectationWithDescription:NSStringFromSelector(_cmd)]; - PBAdUnit *adUnit = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:@"bmt10" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - [adUnit addSize:CGSizeMake(320, 50)]; - [[PBBidManager sharedInstance] registerAdUnits:@[adUnit] withAccountId:self.accountId withHost:PBServerHostAppNexus andPrimaryAdServer:PBPrimaryAdServerMoPub]; - - [[PBBidManager sharedInstance] attachTopBidHelperForAdUnitId:adUnit.identifier andTimeout:50 completionHandler:^{ - NSDictionary *bidKeywords = [[PBBidManager sharedInstance] keywordsForWinningBidForAdUnit:adUnit]; - XCTAssertNil(bidKeywords); - [expectation fulfill]; - }]; - // Wait for the expectation for 1 second - [self waitForExpectationsWithTimeout:1 handler:nil]; -} - -#pragma mark - Test start new auction tests - -- (void)testResetAdUnit { - PBAdUnit *adUnit = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:@"bmt11" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - [adUnit addSize:CGSizeMake(320, 50)]; - NSString *originalUUID = adUnit.uuid; - [[PBBidManager sharedInstance] registerAdUnits:@[adUnit] withAccountId:self.accountId withHost:PBServerHostAppNexus andPrimaryAdServer:PBPrimaryAdServerMoPub]; - - NSDictionary *testAdServerTargeting = @{@"hb_pb":@"4.14", @"hb_cache_id":@"0000-0000-000-0000", @"hb_bidder": @"appnexus"}; - PBBidResponse *bidResponse = [PBBidResponse bidResponseWithAdUnitId:adUnit.identifier adServerTargeting:testAdServerTargeting]; - [[PBBidManager sharedInstance] saveBidResponses:@[bidResponse]]; - - XCTAssertNotNil([[[PBBidManager sharedInstance] bidsMap] objectForKey:adUnit.identifier]); - - [[PBBidManager sharedInstance] resetAdUnit:adUnit]; - - XCTAssertNil([[[PBBidManager sharedInstance] bidsMap] objectForKey:adUnit.identifier]); - XCTAssertFalse([originalUUID isEqualToString:adUnit.uuid]); -} - -#pragma mark - Test bids expired tests - -- (void)testCheckForBidsExpired { - XCTestExpectation *expectation = [self expectationWithDescription:NSStringFromSelector(_cmd)]; - // This test is a bit confusing. The first ad unit is registered to initialize Prebid and the ad units set using the public API. - PBAdUnit *adUnitTest = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:@"bmt21" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - [adUnitTest addSize:CGSizeMake(320, 50)]; - [[PBBidManager sharedInstance] registerAdUnits:@[adUnitTest] withAccountId:self.accountId withHost:PBServerHostAppNexus andPrimaryAdServer:PBPrimaryAdServerMoPub]; - - // We initialize this ad unit using the private function to ensure a request doesn't go out and the timeToExpireAfter doesn't get reset - // to 4 min and 30 seconds instead of 1 second for testing. - PBAdUnit *adUnit = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:@"bmt12" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - [adUnit addSize:CGSizeMake(320, 50)]; - [[PBBidManager sharedInstance] registerAdUnit:adUnit]; - - NSDictionary *testAdServerTargeting = @{@"hb_pb":@"4.14", @"hb_cache_id":@"0000-0000-000-0000", @"hb_bidder": @"appnexus"}; - PBBidResponse *bidResponse = [PBBidResponse bidResponseWithAdUnitId:adUnit.identifier adServerTargeting:testAdServerTargeting]; - bidResponse.timeToExpireAfter = 1; - [[PBBidManager sharedInstance] saveBidResponses:@[bidResponse]]; - - NSString *originalUUID = adUnit.uuid; - - double delayInSeconds = 2; - dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); - dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ - [[PBBidManager sharedInstance] checkForBidsExpired]; - [expectation fulfill]; - }); - - [self waitForExpectationsWithTimeout:3 handler:^(NSError *error){ - XCTAssertFalse([originalUUID isEqualToString:adUnit.uuid]); - }]; -} - -- (void)testCheckForBidsExpiredNoBid { - PBAdUnit *adUnit = [[PBBannerAdUnit alloc] initWithAdUnitIdentifier:@"bmt13" andConfigId:@"0b33e7ae-cf61-4003-8404-0711eea6e673"]; - [adUnit addSize:CGSizeMake(320, 50)]; - [[PBBidManager sharedInstance] registerAdUnits:@[adUnit] withAccountId:self.accountId withHost:PBServerHostAppNexus andPrimaryAdServer:PBPrimaryAdServerMoPub]; - - // On no bid response bids should not be considered expired - NSString *originalUUID = adUnit.uuid; - - [[PBBidManager sharedInstance] checkForBidsExpired]; - XCTAssertTrue([originalUUID isEqualToString:adUnit.uuid]); -} - -@end diff --git a/sdk/PrebidMobileTests/PrebidMobileCoreTests/PBBidResponseTests.m b/sdk/PrebidMobileTests/PrebidMobileCoreTests/PBBidResponseTests.m deleted file mode 100644 index eb7c0cab0..000000000 --- a/sdk/PrebidMobileTests/PrebidMobileCoreTests/PBBidResponseTests.m +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBBidResponse.h" -#import - -@interface PBBidResponseTests : XCTestCase - -@end - -@implementation PBBidResponseTests - -- (void)setUp { - [super setUp]; -} - -- (void)tearDown { - [super tearDown]; -} - -- (void)testBidResponseObject { - NSDictionary *testAdServerTargeting = @{@"hb_pb":@"3.14", @"hb_cache_id":@"0000-0000-000-0000"}; - PBBidResponse *response = [PBBidResponse bidResponseWithAdUnitId:@"testAdUnitID" adServerTargeting:testAdServerTargeting]; - XCTAssertNotNil(response); -} - -- (void)testBidResponseExpired { - NSDictionary *testAdServerTargeting = @{@"hb_pb":@"3.14", @"hb_cache_id":@"0000-0000-000-0000"}; - PBBidResponse *response = [PBBidResponse bidResponseWithAdUnitId:@"testAdUnitID" adServerTargeting:testAdServerTargeting]; - XCTAssertFalse([response isExpired]); - response.timeToExpireAfter = 1; - [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:2]]; - XCTAssertTrue([response isExpired]); -} - -@end diff --git a/sdk/PrebidMobileTests/PrebidMobileCoreTests/PBPrebidCacheTests.m b/sdk/PrebidMobileTests/PrebidMobileCoreTests/PBPrebidCacheTests.m deleted file mode 100644 index 5e64fee0b..000000000 --- a/sdk/PrebidMobileTests/PrebidMobileCoreTests/PBPrebidCacheTests.m +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import -#import -#import "PrebidCache.h" -#import - -@interface PBPrebidCacheTests : XCTestCase -@property void (^uiwebviewCompletionHandler)(void); -@property void (^wkwebviewCompletionHandler)(void); -@end - -@implementation PBPrebidCacheTests - -- (void) testPrebidCacheReturnedCorrectIdsForDFP -{ - NSArray *contents = @[@"0", @"1", @"2"]; - XCTestExpectation *expectation1 = [self expectationWithDescription:@"UIWebView expectation"]; - XCTestExpectation *expectation2 = [self expectationWithDescription:@"WkWebView expectation"]; - [[PrebidCache globalCache] cacheContents:contents forAdserver:PBPrimaryAdServerDFP withCompletionBlock:^(NSArray *cacheIds) { - //use cacheIds[0] should retrieve content 0 - //use cacheIds[1] should retrieve content 1 - //use cacheIds[2] should retrieve content 2 - XCTAssertTrue(cacheIds.count == 3); - NSURL *host = [NSURL URLWithString:@"https://pubads.g.doubleclick.net"]; - dispatch_async(dispatch_get_main_queue(), ^{ - UIWebView *uiwebview = [[UIWebView alloc] init]; - uiwebview.delegate = self; - [uiwebview loadRequest:[NSURLRequest requestWithURL:host]]; - __weak PBPrebidCacheTests *weakSelf = self; - weakSelf.uiwebviewCompletionHandler = ^{ - NSString *result =[uiwebview stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"localStorage.getItem('%@')", cacheIds[0]]]; - XCTAssertEqualObjects(@"0", result); - result =[uiwebview stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"localStorage.getItem('%@')", cacheIds[1]]]; - XCTAssertEqualObjects(@"1", result); - result =[uiwebview stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"localStorage.getItem('%@')", cacheIds[2]]]; - XCTAssertEqualObjects(@"2", result); - [expectation1 fulfill]; - }; - WKWebView *wkwebview = [[WKWebView alloc] init]; - wkwebview.navigationDelegate = self; - [wkwebview loadRequest:[NSURLRequest requestWithURL:host]]; - weakSelf.wkwebviewCompletionHandler = ^{ - [wkwebview evaluateJavaScript:[NSString stringWithFormat:@"localStorage.getItem('%@')", cacheIds[0]] completionHandler:^(id _Nullable result, NSError * _Nullable error) { - XCTAssertEqualObjects(@"0", result); - [wkwebview evaluateJavaScript:[NSString stringWithFormat:@"localStorage.getItem('%@')", cacheIds[1]] completionHandler:^(id _Nullable result, NSError * _Nullable error) { - XCTAssertEqualObjects(@"1", result); - [wkwebview evaluateJavaScript:[NSString stringWithFormat:@"localStorage.getItem('%@')", cacheIds[2]] completionHandler:^(id _Nullable result, NSError * _Nullable error) { - XCTAssertEqualObjects(@"2", result); - [expectation2 fulfill]; - }]; - }]; - }]; - }; - }); - }]; - [self waitForExpectationsWithTimeout:20.0 handler:nil]; -} - -- (void) testPrebidCacheReturnedCorrectIdsForMoPub -{ - NSArray *contents = @[@"0", @"1", @"2"]; - XCTestExpectation *expectation2 = [self expectationWithDescription:@"WkWebView expectation"]; - [[PrebidCache globalCache] cacheContents:contents forAdserver:PBPrimaryAdServerMoPub withCompletionBlock:^(NSArray *cacheIds) { - //use cacheIds[0] should retrieve content 0 - //use cacheIds[1] should retrieve content 1 - //use cacheIds[2] should retrieve content 2 - XCTAssertTrue(cacheIds.count == 3); - NSURL *host = [NSURL URLWithString:@"https://ads.mopub.com"]; - dispatch_async(dispatch_get_main_queue(), ^{ - WKWebView *wkwebview = [[WKWebView alloc] init]; - wkwebview.navigationDelegate = self; - [wkwebview loadRequest:[NSURLRequest requestWithURL:host]]; - __weak PBPrebidCacheTests *weakSelf = self; - weakSelf.wkwebviewCompletionHandler = ^{ - [wkwebview evaluateJavaScript:[NSString stringWithFormat:@"localStorage.getItem('%@')", cacheIds[0]] completionHandler:^(id _Nullable result, NSError * _Nullable error) { - XCTAssertEqualObjects(@"0", result); - [wkwebview evaluateJavaScript:[NSString stringWithFormat:@"localStorage.getItem('%@')", cacheIds[1]] completionHandler:^(id _Nullable result, NSError * _Nullable error) { - XCTAssertEqualObjects(@"1", result); - [wkwebview evaluateJavaScript:[NSString stringWithFormat:@"localStorage.getItem('%@')", cacheIds[2]] completionHandler:^(id _Nullable result, NSError * _Nullable error) { - XCTAssertEqualObjects(@"2", result); - [expectation2 fulfill]; - }]; - }]; - }]; - }; - }); - }]; - [self waitForExpectationsWithTimeout:20.0 handler:nil]; -} - -- (void)webViewDidFinishLoad:(UIWebView *)webView -{ - self.uiwebviewCompletionHandler(); -} - -- (void) webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation -{ - self.wkwebviewCompletionHandler(); -} -@end diff --git a/sdk/PrebidMobileTests/PrebidMobileCoreTests/PBServerAdapterTests.m b/sdk/PrebidMobileTests/PrebidMobileCoreTests/PBServerAdapterTests.m deleted file mode 100644 index fb2c62c44..000000000 --- a/sdk/PrebidMobileTests/PrebidMobileCoreTests/PBServerAdapterTests.m +++ /dev/null @@ -1,305 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import -#import "PBServerRequestBuilder.h" -#import "PBTargetingParams.h" -#import "PBServerAdapter.h" -#import "PBException.h" -#import "PBHost.h" -#import "PBBidResponse.h" - -static NSString *const kPrebidMobileVersion = @"0.1.1"; -static NSString *const kAPNPrebidServerUrl = @"https://prebid.adnxs.com/pbs/v1/openrtb2/auction"; -static NSString *const kRPPrebidServerUrl = @"https://prebid-server.rubiconproject.com/auction"; -static NSString *testResponse = @""; - -@interface PBTestProtocol: NSURLProtocol -@end - -@implementation PBTestProtocol -+ (BOOL)canInitWithRequest:(NSURLRequest *)request { - if ([NSURLProtocol propertyForKey:@"PrebidURLProtocolHandledKey" inRequest:request]) { - return NO; - } - if ([request.URL.absoluteString containsString:kAPNPrebidServerUrl]) { - return YES; - } - return NO; -} - -+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request { - return request; -} - -+ (BOOL)requestIsCacheEquivalent:(NSURLRequest *)a toRequest:(NSURLRequest *)b { - return [super requestIsCacheEquivalent:a toRequest:b]; -} - -- (void)startLoading { - NSMutableURLRequest *newRequest = [self.request mutableCopy]; - [NSURLProtocol setProperty:@YES forKey:@"PrebidURLProtocolHandledKey" inRequest:newRequest]; - - NSData *data = [testResponse dataUsingEncoding:NSUTF8StringEncoding]; - if (data) { - NSURLResponse* response = [[NSHTTPURLResponse alloc] initWithURL:[self.request URL] statusCode:200 HTTPVersion:@"HTTP/1.1" headerFields:@{@"Access-Control-Allow-Origin": kAPNPrebidServerUrl, @"Access-Control-Allow-Credentials" : @"true"}]; - [self.client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed]; - [self.client URLProtocol:self didLoadData:data]; - [self.client URLProtocolDidFinishLoading:self]; - } - -} - -- (void)stopLoading -{ - -} - -@end - -@interface PBServerAdapterTests : XCTestCase -@property void (^completionHandler)(NSArray *bids, NSError *error); -@property (nonatomic, strong) NSArray *adUnits; -@end - -@implementation PBServerAdapterTests - -- (void)setUp { - [super setUp]; - PBAdUnit *adUnit = [[PBAdUnit alloc] initWithIdentifier:@"test_identifier" andAdType:PBAdUnitTypeBanner andConfigId:@"test_config_id"]; - [adUnit addSize:CGSizeMake(250, 300)]; - self.adUnits = @[adUnit]; -} - -- (void)tearDown { - self.adUnits = nil; - [super tearDown]; -} - -#pragma mark - PBServerAdapter Delegate -- (void)didCompleteWithError:(nonnull NSError *)error { - if (self.completionHandler) { - self.completionHandler(nil, error); - } - -} - -- (void)didReceiveSuccessResponse:(nonnull NSArray *)bid { - if (self.completionHandler) { - self.completionHandler(bid, nil); - } -} - -#pragma mark - Tests --(void)testOnlySaveBidsWithTargetingKeysFromServer -{ - // This test response contains 3 bids, two top ones from each bidder has targeting keys, the lower bid does not - testResponse = @"{\"id\":\"3dc76667-a500-4e01-a43b-368e36d6c7cc\",\"seatbid\":[{\"bid\":[{\"id\":\"3829649260126183529\",\"impid\":\"Banner_300x250\",\"price\":15,\"adm\":\"hello\",\"adid\":\"68501584\",\"adomain\":[\"peugeot.com\"],\"iurl\":\"https:\/\/nym1-ib.adnxs.com\/cr?id=68501584\",\"cid\":\"958\",\"crid\":\"68501584\",\"cat\":[\"IAB2-3\"],\"w\":300,\"h\":250,\"ext\":{\"prebid\":{\"targeting\":{\"hb_bidder\":\"appnexus\",\"hb_bidder_appnexus\":\"appnexus\",\"hb_cache_id\":\"123\",\"hb_cache_id_appnexus\":\"123\",\"hb_creative_loadtype\":\"html\",\"hb_env\":\"mobile-app\",\"hb_env_appnexus\":\"mobile-app\",\"hb_pb\":\"15.00\",\"hb_pb_appnexus\":\"15.00\",\"hb_size\":\"300x250\",\"hb_size_appnexus\":\"300x250\"},\"type\":\"banner\"},\"bidder\":{\"appnexus\":{\"brand_id\":3264,\"auction_id\":8160292782530908000,\"bidder_id\":2,\"bid_ad_type\":0}}}},{\"id\":\"1389685956420146597\",\"impid\":\"Banner_300x250\",\"price\":3.21,\"adm\":\"hello\",\"adid\":\"28477710\",\"adomain\":[\"appnexus.com\"],\"iurl\":\"https:\/\/nym1-ib.adnxs.com\/cr?id=28477710\",\"cid\":\"958\",\"crid\":\"28477710\",\"w\":300,\"h\":250,\"ext\":{\"prebid\":{\"type\":\"banner\"},\"bidder\":{\"appnexus\":{\"brand_id\":1,\"auction_id\":8160292782530908000,\"bidder_id\":2,\"bid_ad_type\":0}}}},{\"id\":\"1106673435110511367\",\"impid\":\"Banner_300x250\",\"price\":0.033505,\"adm\":\"hello\",\"adid\":\"103077040\",\"adomain\":[\"audible.com\"],\"iurl\":\"https:\/\/nym1-ib.adnxs.com\/cr?id=103077040\",\"cid\":\"1437\",\"crid\":\"103077040\",\"cat\":[\"IAB22-4\",\"IAB22\"],\"w\":300,\"h\":250,\"ext\":{\"prebid\":{\"type\":\"banner\"},\"bidder\":{\"appnexus\":{\"brand_id\":12,\"auction_id\":8160292782530908000,\"bidder_id\":101,\"bid_ad_type\":0}}}}],\"seat\":\"appnexus\"},{\"bid\":[{\"id\":\"3829649260126183529\",\"impid\":\"Banner_300x250\",\"price\":14,\"adm\":\"hello\",\"adid\":\"68501584\",\"adomain\":[\"peugeot.com\"],\"iurl\":\"https:\/\/nym1-ib.adnxs.com\/cr?id=68501584\",\"cid\":\"958\",\"crid\":\"68501584\",\"cat\":[\"IAB2-3\"],\"w\":300,\"h\":250,\"ext\":{\"prebid\":{\"targeting\":{\"hb_bidder_rubicon\":\"rubicon\",\"hb_cache_id_rubicon\":\"456\",\"hb_creative_loadtype\":\"html\",\"hb_env_rubicon\":\"mobile-app\",\"hb_pb_rubicon\":\"14.00\",\"hb_size_rubicon\":\"300x250\"},\"type\":\"banner\"},\"bidder\":{\"appnexus\":{\"brand_id\":3264,\"auction_id\":8160292782530908000,\"bidder_id\":2,\"bid_ad_type\":0}}}}],\"seat\":\"rubicon\"}],\"ext\":{\"responsetimemillis\":{\"appnexus\":258}}}"; - [NSURLProtocol registerClass:[PBTestProtocol class]]; - XCTestExpectation *expectation = [self expectationWithDescription:@"Dummy Expectation"]; - PBAdUnit *adUnit1 = [[PBAdUnit alloc] initWithIdentifier:@"ad1" andAdType:PBAdUnitTypeBanner andConfigId:@"test_config_id1"]; - [adUnit1 addSize:CGSizeMake(250, 300)]; - PBAdUnit *adUnit2 = [[PBAdUnit alloc] initWithIdentifier:@"ad2" andAdType:PBAdUnitTypeBanner andConfigId:@"test_config_id2"]; - [adUnit2 addSize:CGSizeMake(250, 300)]; - self.adUnits = @[adUnit1, adUnit2]; - PBServerAdapter *serverAdapter = [[PBServerAdapter alloc] initWithAccountId:@"test_account_id" andHost:PBServerHostAppNexus andAdServer:PBPrimaryAdServerDFP]; - [serverAdapter requestBidsWithAdUnits:self.adUnits withDelegate:self]; - __weak PBServerAdapterTests *weakSelf = self; - weakSelf.completionHandler = ^(NSArray *bids, NSError *error){ - if (error) { - XCTFail(@"This should never happen."); - [expectation fulfill]; - } - // veryfy that all bids has a cache id - // veryfy that only top bid has hb_cache_id - // verify cache_id is truncated after 20 characters - XCTAssertTrue(bids.count == 2); - for(PBBidResponse *bid in bids){ - XCTAssertNotNil(bid.customKeywords); - BOOL isTopBid = NO; - NSLog(@"Bid keywords: %@", bid.customKeywords); - for (NSString *key in bid.customKeywords.allKeys) { - if ([key isEqualToString:@"hb_bidder"]) { - isTopBid = YES; - } - } - if (isTopBid) { - XCTAssertTrue([bid.customKeywords.allKeys containsObject:@"hb_cache_id"]); - XCTAssertTrue([@"15.00" isEqualToString:[bid.customKeywords objectForKey:@"hb_pb"]] ); - } else { - XCTAssertTrue(![bid.customKeywords.allKeys containsObject:@"hb_cahce_id"]); - XCTAssertTrue([@"14.00" isEqualToString:[bid.customKeywords objectForKey:@"hb_pb_rubicon"]] ); - - } - } - [expectation fulfill]; - }; - [self waitForExpectationsWithTimeout:20.0 handler:nil]; -} - --(void)testNoCacheIdFromServer -{ - // This test response contains 1 bid, but no cache id is in the response - testResponse = @"{\"id\":\"3dc76667-a500-4e01-a43b-368e36d6c7cc\",\"seatbid\":[{\"bid\":[{\"id\":\"3829649260126183529\",\"impid\":\"Banner_300x250\",\"price\":15,\"adm\":\"hello\",\"adid\":\"68501584\",\"adomain\":[\"peugeot.com\"],\"iurl\":\"https:\/\/nym1-ib.adnxs.com\/cr?id=68501584\",\"cid\":\"958\",\"crid\":\"68501584\",\"cat\":[\"IAB2-3\"],\"w\":300,\"h\":250,\"ext\":{\"prebid\":{\"targeting\":{\"hb_bidder\":\"appnexus\",\"hb_bidder_appnexus\":\"appnexus\",\"hb_creative_loadtype\":\"html\",\"hb_env\":\"mobile-app\",\"hb_env_appnexus\":\"mobile-app\",\"hb_pb\":\"15.00\",\"hb_pb_appnexus\":\"15.00\",\"hb_size\":\"300x250\",\"hb_size_appnexus\":\"300x250\"},\"type\":\"banner\"},\"bidder\":{\"appnexus\":{\"brand_id\":3264,\"auction_id\":8160292782530908000,\"bidder_id\":2,\"bid_ad_type\":0}}}}],\"seat\":\"appnexus\"}],\"ext\":{\"responsetimemillis\":{\"appnexus\":258}}}"; - [NSURLProtocol registerClass:[PBTestProtocol class]]; - XCTestExpectation *expectation = [self expectationWithDescription:@"Dummy Expectation"]; - PBAdUnit *adUnit1 = [[PBAdUnit alloc] initWithIdentifier:@"ad1" andAdType:PBAdUnitTypeBanner andConfigId:@"test_config_id1"]; - [adUnit1 addSize:CGSizeMake(250, 300)]; - PBAdUnit *adUnit2 = [[PBAdUnit alloc] initWithIdentifier:@"ad2" andAdType:PBAdUnitTypeBanner andConfigId:@"test_config_id2"]; - [adUnit2 addSize:CGSizeMake(250, 300)]; - self.adUnits = @[adUnit1, adUnit2]; - PBServerAdapter *serverAdapter = [[PBServerAdapter alloc] initWithAccountId:@"test_account_id" andHost:PBServerHostAppNexus andAdServer:PBPrimaryAdServerDFP]; - [serverAdapter requestBidsWithAdUnits:self.adUnits withDelegate:self]; - __weak PBServerAdapterTests *weakSelf = self; - weakSelf.completionHandler = ^(NSArray *bids, NSError *error){ - XCTAssertNil(bids); - XCTAssertNotNil(error); - XCTAssertEqual(@"prebid.org", error.domain); - XCTAssertEqual(0, error.code); - [expectation fulfill]; - }; - [self waitForExpectationsWithTimeout:20.0 handler:nil]; -} - -- (void)testRequestBodyForAdUnit { - - [[PBTargetingParams sharedInstance] setUserKeywords:@"targeting1" withValue:@"value1"]; - [[PBTargetingParams sharedInstance] setUserKeywords:@"targeting2" withValue:@"value2"]; - - NSURL *hostURL = [NSURL URLWithString:kAPNPrebidServerUrl]; - - [[PBServerRequestBuilder sharedInstance] setHostURL: hostURL]; - NSURLRequest *request = [[PBServerRequestBuilder sharedInstance] buildRequest:self.adUnits withAccountId:@"account_id" withSecureParams:NO]; - XCTestExpectation *expectation = [self expectationWithDescription:@"Dummy expectation"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - - - - NSError* error; - NSDictionary* requestBody = [NSJSONSerialization JSONObjectWithData:[request HTTPBody] - options:kNilOptions - error:&error]; - - XCTAssertNotNil(requestBody); - - XCTAssertEqualObjects(requestBody[@"app"][@"publisher"][@"id"], @"account_id"); - XCTAssertEqualObjects(requestBody[@"ext"][@"prebid"][@"storedrequest"][@"id"], @"account_id"); - NSDictionary *targeting = requestBody[@"ext"][@"prebid"][@"targeting"]; - XCTAssertNotNil(targeting); - NSDictionary *cache = requestBody[@"ext"][@"prebid"][@"cache"]; - XCTAssertNotNil(cache); - NSDictionary *cacheBids = cache[@"bids"]; - XCTAssertNotNil(cacheBids); - XCTAssertTrue(cacheBids.count == 0); - - NSDictionary *app = requestBody[@"app"][@"ext"][@"prebid"]; - XCTAssertNotNil(app[@"version"]); - - XCTAssertEqualObjects(app[@"source"], @"prebid-mobile"); - - NSString *targetingParams = requestBody[@"user"][@"keywords"]; - - XCTAssertNotNil(targetingParams); - XCTAssertTrue([targetingParams containsString:@"targeting1=value1"]); - XCTAssertTrue([targetingParams containsString:@"targeting2=value2"]); - - NSDictionary *device = requestBody[@"device"]; - XCTAssertEqualObjects(device[@"os"], @"iOS"); - XCTAssertEqualObjects(device[@"make"], @"Apple"); - - [expectation fulfill]; - }); - [self waitForExpectationsWithTimeout:20.0 handler:nil]; -} - -- (void)testBuildRequestForAdUnitsInvalidHost { - PBServerAdapter *serverAdapter = [[PBServerAdapter alloc] initWithAccountId:@"test_account_id" andHost:PBServerHostAppNexus andAdServer:PBPrimaryAdServerDFP]; - @try { - [serverAdapter requestBidsWithAdUnits:self.adUnits withDelegate:self]; - } @catch (PBException *exception) { - NSExceptionName expectedException = @"PBHostInvalidException"; - XCTAssertNotNil(exception); - XCTAssertEqual(exception.name, expectedException); - } -} - -- (void)testBuildRequestForAdUnitsValidHost { - - NSURL *hostURL = [NSURL URLWithString:kRPPrebidServerUrl]; - - [[PBServerRequestBuilder sharedInstance] setHostURL: hostURL]; - NSURLRequest *request = [[PBServerRequestBuilder sharedInstance] buildRequest:self.adUnits withAccountId:@"account_id" withSecureParams:NO]; - XCTestExpectation *expectation = [self expectationWithDescription:@"Dummy expectation"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - - - XCTAssertEqualObjects(request.URL, [NSURL URLWithString:kRPPrebidServerUrl]); - - [expectation fulfill]; - }); - [self waitForExpectationsWithTimeout:20.0 handler:nil]; - -} - --(void) testBatchRequestBidsWithAdUnits{ - PBAdUnit *adUnit1 = [[PBAdUnit alloc] initWithIdentifier:@"test1" andAdType:PBAdUnitTypeBanner andConfigId:@"config1"]; - [adUnit1 addSize:CGSizeMake(250, 300)]; - - PBAdUnit *adUnit2 = [[PBAdUnit alloc] initWithIdentifier:@"test2" andAdType:PBAdUnitTypeBanner andConfigId:@"config2"]; - [adUnit2 addSize:CGSizeMake(250, 300)]; - - PBAdUnit *adUnit3 = [[PBAdUnit alloc] initWithIdentifier:@"test3" andAdType:PBAdUnitTypeBanner andConfigId:@"config3"]; - [adUnit3 addSize:CGSizeMake(250, 300)]; - - PBAdUnit *adUnit4 = [[PBAdUnit alloc] initWithIdentifier:@"test4" andAdType:PBAdUnitTypeBanner andConfigId:@"config4"]; - [adUnit4 addSize:CGSizeMake(250, 300)]; - - PBAdUnit *adUnit5 = [[PBAdUnit alloc] initWithIdentifier:@"test5" andAdType:PBAdUnitTypeBanner andConfigId:@"config5"]; - [adUnit5 addSize:CGSizeMake(250, 300)]; - - PBAdUnit *adUnit6 = [[PBAdUnit alloc] initWithIdentifier:@"test6" andAdType:PBAdUnitTypeBanner andConfigId:@"config6"]; - [adUnit6 addSize:CGSizeMake(250, 300)]; - - PBAdUnit *adUnit7 = [[PBAdUnit alloc] initWithIdentifier:@"test7" andAdType:PBAdUnitTypeBanner andConfigId:@"config7"]; - [adUnit7 addSize:CGSizeMake(250, 300)]; - - PBAdUnit *adUnit8 = [[PBAdUnit alloc] initWithIdentifier:@"test8" andAdType:PBAdUnitTypeBanner andConfigId:@"config8"]; - [adUnit8 addSize:CGSizeMake(250, 300)]; - - PBAdUnit *adUnit9 = [[PBAdUnit alloc] initWithIdentifier:@"test9" andAdType:PBAdUnitTypeBanner andConfigId:@"config9"]; - [adUnit9 addSize:CGSizeMake(250, 300)]; - - PBAdUnit *adUnit10 = [[PBAdUnit alloc] initWithIdentifier:@"test10" andAdType:PBAdUnitTypeBanner andConfigId:@"config10"]; - [adUnit10 addSize:CGSizeMake(250, 300)]; - - PBAdUnit *adUnit11 = [[PBAdUnit alloc] initWithIdentifier:@"test11" andAdType:PBAdUnitTypeBanner andConfigId:@"config11"]; - [adUnit11 addSize:CGSizeMake(250, 300)]; - - PBAdUnit *adUnit12 = [[PBAdUnit alloc] initWithIdentifier:@"test12" andAdType:PBAdUnitTypeBanner andConfigId:@"config12"]; - [adUnit12 addSize:CGSizeMake(250, 300)]; - - NSArray *adUnitsArray = @[adUnit1,adUnit2,adUnit3,adUnit4,adUnit5,adUnit6,adUnit7,adUnit8,adUnit9,adUnit10, adUnit11, adUnit12]; - - PBServerAdapter *serverAdapter = [[PBServerAdapter alloc] initWithAccountId:@"test_account_id" andHost:PBServerHostAppNexus andAdServer:PBPrimaryAdServerDFP]; - @try { - [serverAdapter requestBidsWithAdUnits:adUnitsArray withDelegate:self]; - } @catch (PBException *exception) { - NSExceptionName expectedException = @"PBHostInvalidException"; - XCTAssertNotNil(exception); - XCTAssertEqual(exception.name, expectedException); - } -} - -@end diff --git a/sdk/PrebidMobileTests/PrebidMobileCoreTests/PBTargetingParamsTests.m b/sdk/PrebidMobileTests/PrebidMobileCoreTests/PBTargetingParamsTests.m deleted file mode 100644 index 1b3ee6bae..000000000 --- a/sdk/PrebidMobileTests/PrebidMobileCoreTests/PBTargetingParamsTests.m +++ /dev/null @@ -1,111 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBTargetingParams.h" -#import - -@interface PBTargetingParamsTests : XCTestCase - -@end - -@implementation PBTargetingParamsTests - -- (void)setUp { - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown { - [PBTargetingParams resetSharedInstance]; - [super tearDown]; -} - -- (void)testSetGenderTargeting { - // Test default gender is unknown - XCTAssertEqual(PBTargetingParamsGenderUnknown, [[PBTargetingParams sharedInstance] gender]); - - [[PBTargetingParams sharedInstance] setGender:PBTargetingParamsGenderFemale]; - XCTAssertEqual(PBTargetingParamsGenderFemale, [[PBTargetingParams sharedInstance] gender]); - [[PBTargetingParams sharedInstance] setGender:PBTargetingParamsGenderMale]; - XCTAssertEqual(PBTargetingParamsGenderMale, [[PBTargetingParams sharedInstance] gender]); - [[PBTargetingParams sharedInstance] setGender:PBTargetingParamsGenderUnknown]; - XCTAssertEqual(PBTargetingParamsGenderUnknown, [[PBTargetingParams sharedInstance] gender]); -} - -- (void)testSetLocationTargeting { - CLLocation *location = [[CLLocation alloc] initWithLatitude:100.0 longitude:100.0]; - [[PBTargetingParams sharedInstance] setLocation:location]; - [[PBTargetingParams sharedInstance] setLocationPrecision:2]; - XCTAssertEqual(location, [[PBTargetingParams sharedInstance] location]); - XCTAssertEqual(2, [[PBTargetingParams sharedInstance] locationPrecision]); -} - -- (void)testSetUserKeywordsWithValue { - [[PBTargetingParams sharedInstance] setUserKeywords:@"targeting1" withValue:@"value1"]; - [[PBTargetingParams sharedInstance] setUserKeywords:@"targeting2" withValue:@"value2"]; - NSDictionary *customKeywords = [[PBTargetingParams sharedInstance] userKeywords]; - NSDictionary *expectedCustomKeywords = @{@"targeting1" : @[@"value1"], @"targeting2" : @[@"value2"]}; - XCTAssertTrue([customKeywords isEqualToDictionary:expectedCustomKeywords]); -} - -- (void)testSetUserKeywordsWithMultipleValues { - [[PBTargetingParams sharedInstance] setUserKeywords:@"targeting1" withValues:@[@"value1", @"value2", @"value3"]]; - [[PBTargetingParams sharedInstance] setUserKeywords:@"targeting2" withValue:@"value2"]; - NSDictionary *customKeywords = [[PBTargetingParams sharedInstance] userKeywords]; - NSDictionary *expectedCustomKeywords = @{@"targeting1" : @[@"value2", @"value1", @"value3"], @"targeting2" : @[@"value2"]}; - XCTAssertTrue([customKeywords isEqualToDictionary:expectedCustomKeywords]); -} - -- (void)testSetUserKeywordsWithDuplicateValues { - [[PBTargetingParams sharedInstance] setUserKeywords:@"targeting1" withValues:@[@"value2", @"value1", @"value3"]]; - [[PBTargetingParams sharedInstance] setUserKeywords:@"targeting1" withValue:@"value2"]; - NSDictionary *customKeywords = [[PBTargetingParams sharedInstance] userKeywords]; - NSDictionary *expectedCustomKeywords = @{@"targeting1" : @[@"value2"]}; - XCTAssertTrue([customKeywords isEqualToDictionary:expectedCustomKeywords]); -} - -- (void)testRemoveUserKeywordWithKey { - [[PBTargetingParams sharedInstance] setUserKeywords:@"targeting1" withValue:@"value1"]; - [[PBTargetingParams sharedInstance] setUserKeywords:@"targeting2" withValue:@"value2"]; - [[PBTargetingParams sharedInstance] removeUserKeywordWithKey:@"targeting2"]; - NSDictionary *customKeywords = [[PBTargetingParams sharedInstance] userKeywords]; - NSDictionary *expectedCustomKeywords = @{@"targeting1" : @[@"value1"]}; - XCTAssertTrue([customKeywords isEqualToDictionary:expectedCustomKeywords]); -} - -- (void)testRemoveUserKeywords { - [[PBTargetingParams sharedInstance] setUserKeywords:@"targeting1" withValue:@"value1"]; - [[PBTargetingParams sharedInstance] setUserKeywords:@"targeting2" withValue:@"value2"]; - XCTAssertNotNil([[PBTargetingParams sharedInstance] userKeywords]); - [[PBTargetingParams sharedInstance] removeUserKeywords]; - XCTAssertNil([[PBTargetingParams sharedInstance] userKeywords]); -} - --(void) testGDPRConsentString { - [[PBTargetingParams sharedInstance] setGdprConsentString:@"testconsent"]; - XCTAssertNotNil([[PBTargetingParams sharedInstance] gdprConsentString]); - NSString *value = [[PBTargetingParams sharedInstance] gdprConsentString]; - - XCTAssertTrue([value isEqualToString:@"testconsent"]); -} - --(void) testGDPREnable { - [[PBTargetingParams sharedInstance] setSubjectToGDPR:FALSE]; - BOOL testGDPR = [[PBTargetingParams sharedInstance] subjectToGDPR]; - - XCTAssertFalse(testGDPR); -} - -@end diff --git a/sdk/PrebidMobileTests/Resources/PCKeywordsManagerPriceIntervals.txt b/sdk/PrebidMobileTests/Resources/PCKeywordsManagerPriceIntervals.txt deleted file mode 100644 index 74bde15be..000000000 --- a/sdk/PrebidMobileTests/Resources/PCKeywordsManagerPriceIntervals.txt +++ /dev/null @@ -1,90002 +0,0 @@ -Test keywords dictionaries for PCKeywordsManagerTests - -0.00 -pb_1c : 0.00 -pb_5c : 0.00 -pb_10c : 0.00 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.01 -pb_1c : 0.01 -pb_5c : 0.00 -pb_10c : 0.00 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.02 -pb_1c : 0.02 -pb_5c : 0.00 -pb_10c : 0.00 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.03 -pb_1c : 0.03 -pb_5c : 0.00 -pb_10c : 0.00 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.04 -pb_1c : 0.04 -pb_5c : 0.00 -pb_10c : 0.00 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.05 -pb_1c : 0.05 -pb_5c : 0.05 -pb_10c : 0.00 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.06 -pb_1c : 0.06 -pb_5c : 0.05 -pb_10c : 0.00 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.07 -pb_1c : 0.07 -pb_5c : 0.05 -pb_10c : 0.00 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.08 -pb_1c : 0.08 -pb_5c : 0.05 -pb_10c : 0.00 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.09 -pb_1c : 0.09 -pb_5c : 0.05 -pb_10c : 0.00 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.10 -pb_1c : 0.10 -pb_5c : 0.10 -pb_10c : 0.10 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.11 -pb_1c : 0.11 -pb_5c : 0.10 -pb_10c : 0.10 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.12 -pb_1c : 0.12 -pb_5c : 0.10 -pb_10c : 0.10 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.13 -pb_1c : 0.13 -pb_5c : 0.10 -pb_10c : 0.10 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.14 -pb_1c : 0.14 -pb_5c : 0.10 -pb_10c : 0.10 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.15 -pb_1c : 0.15 -pb_5c : 0.15 -pb_10c : 0.10 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.16 -pb_1c : 0.16 -pb_5c : 0.15 -pb_10c : 0.10 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.17 -pb_1c : 0.17 -pb_5c : 0.15 -pb_10c : 0.10 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.18 -pb_1c : 0.18 -pb_5c : 0.15 -pb_10c : 0.10 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.19 -pb_1c : 0.19 -pb_5c : 0.15 -pb_10c : 0.10 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.20 -pb_1c : 0.20 -pb_5c : 0.20 -pb_10c : 0.20 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.21 -pb_1c : 0.21 -pb_5c : 0.20 -pb_10c : 0.20 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.22 -pb_1c : 0.22 -pb_5c : 0.20 -pb_10c : 0.20 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.23 -pb_1c : 0.23 -pb_5c : 0.20 -pb_10c : 0.20 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.24 -pb_1c : 0.24 -pb_5c : 0.20 -pb_10c : 0.20 -pb_25c : 0.00 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.25 -pb_1c : 0.25 -pb_5c : 0.25 -pb_10c : 0.20 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.26 -pb_1c : 0.26 -pb_5c : 0.25 -pb_10c : 0.20 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.27 -pb_1c : 0.27 -pb_5c : 0.25 -pb_10c : 0.20 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.28 -pb_1c : 0.28 -pb_5c : 0.25 -pb_10c : 0.20 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.29 -pb_1c : 0.29 -pb_5c : 0.25 -pb_10c : 0.20 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.30 -pb_1c : 0.30 -pb_5c : 0.30 -pb_10c : 0.30 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.31 -pb_1c : 0.31 -pb_5c : 0.30 -pb_10c : 0.30 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.32 -pb_1c : 0.32 -pb_5c : 0.30 -pb_10c : 0.30 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.33 -pb_1c : 0.33 -pb_5c : 0.30 -pb_10c : 0.30 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.34 -pb_1c : 0.34 -pb_5c : 0.30 -pb_10c : 0.30 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.35 -pb_1c : 0.35 -pb_5c : 0.35 -pb_10c : 0.30 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.36 -pb_1c : 0.36 -pb_5c : 0.35 -pb_10c : 0.30 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.37 -pb_1c : 0.37 -pb_5c : 0.35 -pb_10c : 0.30 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.38 -pb_1c : 0.38 -pb_5c : 0.35 -pb_10c : 0.30 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.39 -pb_1c : 0.39 -pb_5c : 0.35 -pb_10c : 0.30 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.40 -pb_1c : 0.40 -pb_5c : 0.40 -pb_10c : 0.40 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.41 -pb_1c : 0.41 -pb_5c : 0.40 -pb_10c : 0.40 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.42 -pb_1c : 0.42 -pb_5c : 0.40 -pb_10c : 0.40 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.43 -pb_1c : 0.43 -pb_5c : 0.40 -pb_10c : 0.40 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.44 -pb_1c : 0.44 -pb_5c : 0.40 -pb_10c : 0.40 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.45 -pb_1c : 0.45 -pb_5c : 0.45 -pb_10c : 0.40 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.46 -pb_1c : 0.46 -pb_5c : 0.45 -pb_10c : 0.40 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.47 -pb_1c : 0.47 -pb_5c : 0.45 -pb_10c : 0.40 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.48 -pb_1c : 0.48 -pb_5c : 0.45 -pb_10c : 0.40 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.49 -pb_1c : 0.49 -pb_5c : 0.45 -pb_10c : 0.40 -pb_25c : 0.25 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.50 -pb_1c : 0.50 -pb_5c : 0.50 -pb_10c : 0.50 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.51 -pb_1c : 0.51 -pb_5c : 0.50 -pb_10c : 0.50 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.52 -pb_1c : 0.52 -pb_5c : 0.50 -pb_10c : 0.50 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.53 -pb_1c : 0.53 -pb_5c : 0.50 -pb_10c : 0.50 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.54 -pb_1c : 0.54 -pb_5c : 0.50 -pb_10c : 0.50 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.55 -pb_1c : 0.55 -pb_5c : 0.55 -pb_10c : 0.50 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.56 -pb_1c : 0.56 -pb_5c : 0.55 -pb_10c : 0.50 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.57 -pb_1c : 0.57 -pb_5c : 0.55 -pb_10c : 0.50 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.58 -pb_1c : 0.58 -pb_5c : 0.55 -pb_10c : 0.50 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.59 -pb_1c : 0.59 -pb_5c : 0.55 -pb_10c : 0.50 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.60 -pb_1c : 0.60 -pb_5c : 0.60 -pb_10c : 0.60 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.61 -pb_1c : 0.61 -pb_5c : 0.60 -pb_10c : 0.60 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.62 -pb_1c : 0.62 -pb_5c : 0.60 -pb_10c : 0.60 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.63 -pb_1c : 0.63 -pb_5c : 0.60 -pb_10c : 0.60 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.64 -pb_1c : 0.64 -pb_5c : 0.60 -pb_10c : 0.60 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.65 -pb_1c : 0.65 -pb_5c : 0.65 -pb_10c : 0.60 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.66 -pb_1c : 0.66 -pb_5c : 0.65 -pb_10c : 0.60 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.67 -pb_1c : 0.67 -pb_5c : 0.65 -pb_10c : 0.60 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.68 -pb_1c : 0.68 -pb_5c : 0.65 -pb_10c : 0.60 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.69 -pb_1c : 0.69 -pb_5c : 0.65 -pb_10c : 0.60 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.70 -pb_1c : 0.70 -pb_5c : 0.70 -pb_10c : 0.70 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.71 -pb_1c : 0.71 -pb_5c : 0.70 -pb_10c : 0.70 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.72 -pb_1c : 0.72 -pb_5c : 0.70 -pb_10c : 0.70 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.73 -pb_1c : 0.73 -pb_5c : 0.70 -pb_10c : 0.70 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.74 -pb_1c : 0.74 -pb_5c : 0.70 -pb_10c : 0.70 -pb_25c : 0.50 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.75 -pb_1c : 0.75 -pb_5c : 0.75 -pb_10c : 0.70 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.76 -pb_1c : 0.76 -pb_5c : 0.75 -pb_10c : 0.70 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.77 -pb_1c : 0.77 -pb_5c : 0.75 -pb_10c : 0.70 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.78 -pb_1c : 0.78 -pb_5c : 0.75 -pb_10c : 0.70 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.79 -pb_1c : 0.79 -pb_5c : 0.75 -pb_10c : 0.70 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.80 -pb_1c : 0.80 -pb_5c : 0.80 -pb_10c : 0.80 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.81 -pb_1c : 0.81 -pb_5c : 0.80 -pb_10c : 0.80 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.82 -pb_1c : 0.82 -pb_5c : 0.80 -pb_10c : 0.80 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.83 -pb_1c : 0.83 -pb_5c : 0.80 -pb_10c : 0.80 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.84 -pb_1c : 0.84 -pb_5c : 0.80 -pb_10c : 0.80 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.85 -pb_1c : 0.85 -pb_5c : 0.85 -pb_10c : 0.80 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.86 -pb_1c : 0.86 -pb_5c : 0.85 -pb_10c : 0.80 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.87 -pb_1c : 0.87 -pb_5c : 0.85 -pb_10c : 0.80 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.88 -pb_1c : 0.88 -pb_5c : 0.85 -pb_10c : 0.80 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.89 -pb_1c : 0.89 -pb_5c : 0.85 -pb_10c : 0.80 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.90 -pb_1c : 0.90 -pb_5c : 0.90 -pb_10c : 0.90 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.91 -pb_1c : 0.91 -pb_5c : 0.90 -pb_10c : 0.90 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.92 -pb_1c : 0.92 -pb_5c : 0.90 -pb_10c : 0.90 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.93 -pb_1c : 0.93 -pb_5c : 0.90 -pb_10c : 0.90 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.94 -pb_1c : 0.94 -pb_5c : 0.90 -pb_10c : 0.90 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.95 -pb_1c : 0.95 -pb_5c : 0.95 -pb_10c : 0.90 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.96 -pb_1c : 0.96 -pb_5c : 0.95 -pb_10c : 0.90 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.97 -pb_1c : 0.97 -pb_5c : 0.95 -pb_10c : 0.90 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.98 -pb_1c : 0.98 -pb_5c : 0.95 -pb_10c : 0.90 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -0.99 -pb_1c : 0.99 -pb_5c : 0.95 -pb_10c : 0.90 -pb_25c : 0.75 -pb_1d : 0.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.00 -pb_1c : 1.00 -pb_5c : 1.00 -pb_10c : 1.00 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.01 -pb_1c : 1.01 -pb_5c : 1.00 -pb_10c : 1.00 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.02 -pb_1c : 1.02 -pb_5c : 1.00 -pb_10c : 1.00 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.03 -pb_1c : 1.03 -pb_5c : 1.00 -pb_10c : 1.00 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.04 -pb_1c : 1.04 -pb_5c : 1.00 -pb_10c : 1.00 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.05 -pb_1c : 1.05 -pb_5c : 1.05 -pb_10c : 1.00 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.06 -pb_1c : 1.06 -pb_5c : 1.05 -pb_10c : 1.00 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.07 -pb_1c : 1.07 -pb_5c : 1.05 -pb_10c : 1.00 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.08 -pb_1c : 1.08 -pb_5c : 1.05 -pb_10c : 1.00 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.09 -pb_1c : 1.09 -pb_5c : 1.05 -pb_10c : 1.00 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.10 -pb_1c : 1.10 -pb_5c : 1.10 -pb_10c : 1.10 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.11 -pb_1c : 1.11 -pb_5c : 1.10 -pb_10c : 1.10 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.12 -pb_1c : 1.12 -pb_5c : 1.10 -pb_10c : 1.10 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.13 -pb_1c : 1.13 -pb_5c : 1.10 -pb_10c : 1.10 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.14 -pb_1c : 1.14 -pb_5c : 1.10 -pb_10c : 1.10 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.15 -pb_1c : 1.15 -pb_5c : 1.15 -pb_10c : 1.10 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.16 -pb_1c : 1.16 -pb_5c : 1.15 -pb_10c : 1.10 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.17 -pb_1c : 1.17 -pb_5c : 1.15 -pb_10c : 1.10 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.18 -pb_1c : 1.18 -pb_5c : 1.15 -pb_10c : 1.10 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.19 -pb_1c : 1.19 -pb_5c : 1.15 -pb_10c : 1.10 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.20 -pb_1c : 1.20 -pb_5c : 1.20 -pb_10c : 1.20 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.21 -pb_1c : 1.21 -pb_5c : 1.20 -pb_10c : 1.20 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.22 -pb_1c : 1.22 -pb_5c : 1.20 -pb_10c : 1.20 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.23 -pb_1c : 1.23 -pb_5c : 1.20 -pb_10c : 1.20 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.24 -pb_1c : 1.24 -pb_5c : 1.20 -pb_10c : 1.20 -pb_25c : 1.00 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.25 -pb_1c : 1.25 -pb_5c : 1.25 -pb_10c : 1.20 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.26 -pb_1c : 1.26 -pb_5c : 1.25 -pb_10c : 1.20 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.27 -pb_1c : 1.27 -pb_5c : 1.25 -pb_10c : 1.20 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.28 -pb_1c : 1.28 -pb_5c : 1.25 -pb_10c : 1.20 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.29 -pb_1c : 1.29 -pb_5c : 1.25 -pb_10c : 1.20 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.30 -pb_1c : 1.30 -pb_5c : 1.30 -pb_10c : 1.30 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.31 -pb_1c : 1.31 -pb_5c : 1.30 -pb_10c : 1.30 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.32 -pb_1c : 1.32 -pb_5c : 1.30 -pb_10c : 1.30 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.33 -pb_1c : 1.33 -pb_5c : 1.30 -pb_10c : 1.30 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.34 -pb_1c : 1.34 -pb_5c : 1.30 -pb_10c : 1.30 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.35 -pb_1c : 1.35 -pb_5c : 1.35 -pb_10c : 1.30 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.36 -pb_1c : 1.36 -pb_5c : 1.35 -pb_10c : 1.30 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.37 -pb_1c : 1.37 -pb_5c : 1.35 -pb_10c : 1.30 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.38 -pb_1c : 1.38 -pb_5c : 1.35 -pb_10c : 1.30 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.39 -pb_1c : 1.39 -pb_5c : 1.35 -pb_10c : 1.30 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.40 -pb_1c : 1.40 -pb_5c : 1.40 -pb_10c : 1.40 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.41 -pb_1c : 1.41 -pb_5c : 1.40 -pb_10c : 1.40 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.42 -pb_1c : 1.42 -pb_5c : 1.40 -pb_10c : 1.40 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.43 -pb_1c : 1.43 -pb_5c : 1.40 -pb_10c : 1.40 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.44 -pb_1c : 1.44 -pb_5c : 1.40 -pb_10c : 1.40 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.45 -pb_1c : 1.45 -pb_5c : 1.45 -pb_10c : 1.40 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.46 -pb_1c : 1.46 -pb_5c : 1.45 -pb_10c : 1.40 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.47 -pb_1c : 1.47 -pb_5c : 1.45 -pb_10c : 1.40 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.48 -pb_1c : 1.48 -pb_5c : 1.45 -pb_10c : 1.40 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.49 -pb_1c : 1.49 -pb_5c : 1.45 -pb_10c : 1.40 -pb_25c : 1.25 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.50 -pb_1c : 1.50 -pb_5c : 1.50 -pb_10c : 1.50 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.51 -pb_1c : 1.51 -pb_5c : 1.50 -pb_10c : 1.50 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.52 -pb_1c : 1.52 -pb_5c : 1.50 -pb_10c : 1.50 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.53 -pb_1c : 1.53 -pb_5c : 1.50 -pb_10c : 1.50 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.54 -pb_1c : 1.54 -pb_5c : 1.50 -pb_10c : 1.50 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.55 -pb_1c : 1.55 -pb_5c : 1.55 -pb_10c : 1.50 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.56 -pb_1c : 1.56 -pb_5c : 1.55 -pb_10c : 1.50 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.57 -pb_1c : 1.57 -pb_5c : 1.55 -pb_10c : 1.50 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.58 -pb_1c : 1.58 -pb_5c : 1.55 -pb_10c : 1.50 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.59 -pb_1c : 1.59 -pb_5c : 1.55 -pb_10c : 1.50 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.60 -pb_1c : 1.60 -pb_5c : 1.60 -pb_10c : 1.60 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.61 -pb_1c : 1.61 -pb_5c : 1.60 -pb_10c : 1.60 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.62 -pb_1c : 1.62 -pb_5c : 1.60 -pb_10c : 1.60 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.63 -pb_1c : 1.63 -pb_5c : 1.60 -pb_10c : 1.60 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.64 -pb_1c : 1.64 -pb_5c : 1.60 -pb_10c : 1.60 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.65 -pb_1c : 1.65 -pb_5c : 1.65 -pb_10c : 1.60 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.66 -pb_1c : 1.66 -pb_5c : 1.65 -pb_10c : 1.60 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.67 -pb_1c : 1.67 -pb_5c : 1.65 -pb_10c : 1.60 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.68 -pb_1c : 1.68 -pb_5c : 1.65 -pb_10c : 1.60 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.69 -pb_1c : 1.69 -pb_5c : 1.65 -pb_10c : 1.60 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.70 -pb_1c : 1.70 -pb_5c : 1.70 -pb_10c : 1.70 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.71 -pb_1c : 1.71 -pb_5c : 1.70 -pb_10c : 1.70 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.72 -pb_1c : 1.72 -pb_5c : 1.70 -pb_10c : 1.70 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.73 -pb_1c : 1.73 -pb_5c : 1.70 -pb_10c : 1.70 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.74 -pb_1c : 1.74 -pb_5c : 1.70 -pb_10c : 1.70 -pb_25c : 1.50 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.75 -pb_1c : 1.75 -pb_5c : 1.75 -pb_10c : 1.70 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.76 -pb_1c : 1.76 -pb_5c : 1.75 -pb_10c : 1.70 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.77 -pb_1c : 1.77 -pb_5c : 1.75 -pb_10c : 1.70 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.78 -pb_1c : 1.78 -pb_5c : 1.75 -pb_10c : 1.70 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.79 -pb_1c : 1.79 -pb_5c : 1.75 -pb_10c : 1.70 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.80 -pb_1c : 1.80 -pb_5c : 1.80 -pb_10c : 1.80 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.81 -pb_1c : 1.81 -pb_5c : 1.80 -pb_10c : 1.80 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.82 -pb_1c : 1.82 -pb_5c : 1.80 -pb_10c : 1.80 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.83 -pb_1c : 1.83 -pb_5c : 1.80 -pb_10c : 1.80 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.84 -pb_1c : 1.84 -pb_5c : 1.80 -pb_10c : 1.80 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.85 -pb_1c : 1.85 -pb_5c : 1.85 -pb_10c : 1.80 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.86 -pb_1c : 1.86 -pb_5c : 1.85 -pb_10c : 1.80 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.87 -pb_1c : 1.87 -pb_5c : 1.85 -pb_10c : 1.80 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.88 -pb_1c : 1.88 -pb_5c : 1.85 -pb_10c : 1.80 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.89 -pb_1c : 1.89 -pb_5c : 1.85 -pb_10c : 1.80 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.90 -pb_1c : 1.90 -pb_5c : 1.90 -pb_10c : 1.90 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.91 -pb_1c : 1.91 -pb_5c : 1.90 -pb_10c : 1.90 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.92 -pb_1c : 1.92 -pb_5c : 1.90 -pb_10c : 1.90 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.93 -pb_1c : 1.93 -pb_5c : 1.90 -pb_10c : 1.90 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.94 -pb_1c : 1.94 -pb_5c : 1.90 -pb_10c : 1.90 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.95 -pb_1c : 1.95 -pb_5c : 1.95 -pb_10c : 1.90 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.96 -pb_1c : 1.96 -pb_5c : 1.95 -pb_10c : 1.90 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.97 -pb_1c : 1.97 -pb_5c : 1.95 -pb_10c : 1.90 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.98 -pb_1c : 1.98 -pb_5c : 1.95 -pb_10c : 1.90 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -1.99 -pb_1c : 1.99 -pb_5c : 1.95 -pb_10c : 1.90 -pb_25c : 1.75 -pb_1d : 1.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.00 -pb_1c : 2.00 -pb_5c : 2.00 -pb_10c : 2.00 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.01 -pb_1c : 2.01 -pb_5c : 2.00 -pb_10c : 2.00 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.02 -pb_1c : 2.02 -pb_5c : 2.00 -pb_10c : 2.00 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.03 -pb_1c : 2.03 -pb_5c : 2.00 -pb_10c : 2.00 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.04 -pb_1c : 2.04 -pb_5c : 2.00 -pb_10c : 2.00 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.05 -pb_1c : 2.05 -pb_5c : 2.05 -pb_10c : 2.00 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.06 -pb_1c : 2.06 -pb_5c : 2.05 -pb_10c : 2.00 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.07 -pb_1c : 2.07 -pb_5c : 2.05 -pb_10c : 2.00 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.08 -pb_1c : 2.08 -pb_5c : 2.05 -pb_10c : 2.00 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.09 -pb_1c : 2.09 -pb_5c : 2.05 -pb_10c : 2.00 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.10 -pb_1c : 2.10 -pb_5c : 2.10 -pb_10c : 2.10 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.11 -pb_1c : 2.11 -pb_5c : 2.10 -pb_10c : 2.10 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.12 -pb_1c : 2.12 -pb_5c : 2.10 -pb_10c : 2.10 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.13 -pb_1c : 2.13 -pb_5c : 2.10 -pb_10c : 2.10 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.14 -pb_1c : 2.14 -pb_5c : 2.10 -pb_10c : 2.10 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.15 -pb_1c : 2.15 -pb_5c : 2.15 -pb_10c : 2.10 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.16 -pb_1c : 2.16 -pb_5c : 2.15 -pb_10c : 2.10 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.17 -pb_1c : 2.17 -pb_5c : 2.15 -pb_10c : 2.10 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.18 -pb_1c : 2.18 -pb_5c : 2.15 -pb_10c : 2.10 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.19 -pb_1c : 2.19 -pb_5c : 2.15 -pb_10c : 2.10 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.20 -pb_1c : 2.20 -pb_5c : 2.20 -pb_10c : 2.20 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.21 -pb_1c : 2.21 -pb_5c : 2.20 -pb_10c : 2.20 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.22 -pb_1c : 2.22 -pb_5c : 2.20 -pb_10c : 2.20 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.23 -pb_1c : 2.23 -pb_5c : 2.20 -pb_10c : 2.20 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.24 -pb_1c : 2.24 -pb_5c : 2.20 -pb_10c : 2.20 -pb_25c : 2.00 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.25 -pb_1c : 2.25 -pb_5c : 2.25 -pb_10c : 2.20 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.26 -pb_1c : 2.26 -pb_5c : 2.25 -pb_10c : 2.20 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.27 -pb_1c : 2.27 -pb_5c : 2.25 -pb_10c : 2.20 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.28 -pb_1c : 2.28 -pb_5c : 2.25 -pb_10c : 2.20 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.29 -pb_1c : 2.29 -pb_5c : 2.25 -pb_10c : 2.20 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.30 -pb_1c : 2.30 -pb_5c : 2.30 -pb_10c : 2.30 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.31 -pb_1c : 2.31 -pb_5c : 2.30 -pb_10c : 2.30 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.32 -pb_1c : 2.32 -pb_5c : 2.30 -pb_10c : 2.30 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.33 -pb_1c : 2.33 -pb_5c : 2.30 -pb_10c : 2.30 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.34 -pb_1c : 2.34 -pb_5c : 2.30 -pb_10c : 2.30 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.35 -pb_1c : 2.35 -pb_5c : 2.35 -pb_10c : 2.30 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.36 -pb_1c : 2.36 -pb_5c : 2.35 -pb_10c : 2.30 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.37 -pb_1c : 2.37 -pb_5c : 2.35 -pb_10c : 2.30 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.38 -pb_1c : 2.38 -pb_5c : 2.35 -pb_10c : 2.30 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.39 -pb_1c : 2.39 -pb_5c : 2.35 -pb_10c : 2.30 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.40 -pb_1c : 2.40 -pb_5c : 2.40 -pb_10c : 2.40 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.41 -pb_1c : 2.41 -pb_5c : 2.40 -pb_10c : 2.40 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.42 -pb_1c : 2.42 -pb_5c : 2.40 -pb_10c : 2.40 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.43 -pb_1c : 2.43 -pb_5c : 2.40 -pb_10c : 2.40 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.44 -pb_1c : 2.44 -pb_5c : 2.40 -pb_10c : 2.40 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.45 -pb_1c : 2.45 -pb_5c : 2.45 -pb_10c : 2.40 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.46 -pb_1c : 2.46 -pb_5c : 2.45 -pb_10c : 2.40 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.47 -pb_1c : 2.47 -pb_5c : 2.45 -pb_10c : 2.40 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.48 -pb_1c : 2.48 -pb_5c : 2.45 -pb_10c : 2.40 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.49 -pb_1c : 2.49 -pb_5c : 2.45 -pb_10c : 2.40 -pb_25c : 2.25 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.50 -pb_1c : 2.50 -pb_5c : 2.50 -pb_10c : 2.50 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.51 -pb_1c : 2.51 -pb_5c : 2.50 -pb_10c : 2.50 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.52 -pb_1c : 2.52 -pb_5c : 2.50 -pb_10c : 2.50 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.53 -pb_1c : 2.53 -pb_5c : 2.50 -pb_10c : 2.50 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.54 -pb_1c : 2.54 -pb_5c : 2.50 -pb_10c : 2.50 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.55 -pb_1c : 2.55 -pb_5c : 2.55 -pb_10c : 2.50 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.56 -pb_1c : 2.56 -pb_5c : 2.55 -pb_10c : 2.50 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.57 -pb_1c : 2.57 -pb_5c : 2.55 -pb_10c : 2.50 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.58 -pb_1c : 2.58 -pb_5c : 2.55 -pb_10c : 2.50 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.59 -pb_1c : 2.59 -pb_5c : 2.55 -pb_10c : 2.50 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.60 -pb_1c : 2.60 -pb_5c : 2.60 -pb_10c : 2.60 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.61 -pb_1c : 2.61 -pb_5c : 2.60 -pb_10c : 2.60 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.62 -pb_1c : 2.62 -pb_5c : 2.60 -pb_10c : 2.60 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.63 -pb_1c : 2.63 -pb_5c : 2.60 -pb_10c : 2.60 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.64 -pb_1c : 2.64 -pb_5c : 2.60 -pb_10c : 2.60 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.65 -pb_1c : 2.65 -pb_5c : 2.65 -pb_10c : 2.60 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.66 -pb_1c : 2.66 -pb_5c : 2.65 -pb_10c : 2.60 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.67 -pb_1c : 2.67 -pb_5c : 2.65 -pb_10c : 2.60 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.68 -pb_1c : 2.68 -pb_5c : 2.65 -pb_10c : 2.60 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.69 -pb_1c : 2.69 -pb_5c : 2.65 -pb_10c : 2.60 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.70 -pb_1c : 2.70 -pb_5c : 2.70 -pb_10c : 2.70 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.71 -pb_1c : 2.71 -pb_5c : 2.70 -pb_10c : 2.70 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.72 -pb_1c : 2.72 -pb_5c : 2.70 -pb_10c : 2.70 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.73 -pb_1c : 2.73 -pb_5c : 2.70 -pb_10c : 2.70 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.74 -pb_1c : 2.74 -pb_5c : 2.70 -pb_10c : 2.70 -pb_25c : 2.50 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.75 -pb_1c : 2.75 -pb_5c : 2.75 -pb_10c : 2.70 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.76 -pb_1c : 2.76 -pb_5c : 2.75 -pb_10c : 2.70 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.77 -pb_1c : 2.77 -pb_5c : 2.75 -pb_10c : 2.70 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.78 -pb_1c : 2.78 -pb_5c : 2.75 -pb_10c : 2.70 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.79 -pb_1c : 2.79 -pb_5c : 2.75 -pb_10c : 2.70 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.80 -pb_1c : 2.80 -pb_5c : 2.80 -pb_10c : 2.80 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.81 -pb_1c : 2.81 -pb_5c : 2.80 -pb_10c : 2.80 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.82 -pb_1c : 2.82 -pb_5c : 2.80 -pb_10c : 2.80 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.83 -pb_1c : 2.83 -pb_5c : 2.80 -pb_10c : 2.80 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.84 -pb_1c : 2.84 -pb_5c : 2.80 -pb_10c : 2.80 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.85 -pb_1c : 2.85 -pb_5c : 2.85 -pb_10c : 2.80 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.86 -pb_1c : 2.86 -pb_5c : 2.85 -pb_10c : 2.80 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.87 -pb_1c : 2.87 -pb_5c : 2.85 -pb_10c : 2.80 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.88 -pb_1c : 2.88 -pb_5c : 2.85 -pb_10c : 2.80 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.89 -pb_1c : 2.89 -pb_5c : 2.85 -pb_10c : 2.80 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.90 -pb_1c : 2.90 -pb_5c : 2.90 -pb_10c : 2.90 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.91 -pb_1c : 2.91 -pb_5c : 2.90 -pb_10c : 2.90 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.92 -pb_1c : 2.92 -pb_5c : 2.90 -pb_10c : 2.90 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.93 -pb_1c : 2.93 -pb_5c : 2.90 -pb_10c : 2.90 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.94 -pb_1c : 2.94 -pb_5c : 2.90 -pb_10c : 2.90 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.95 -pb_1c : 2.95 -pb_5c : 2.95 -pb_10c : 2.90 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.96 -pb_1c : 2.96 -pb_5c : 2.95 -pb_10c : 2.90 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.97 -pb_1c : 2.97 -pb_5c : 2.95 -pb_10c : 2.90 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.98 -pb_1c : 2.98 -pb_5c : 2.95 -pb_10c : 2.90 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -2.99 -pb_1c : 2.99 -pb_5c : 2.95 -pb_10c : 2.90 -pb_25c : 2.75 -pb_1d : 2.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.00 -pb_1c : 3.00 -pb_5c : 3.00 -pb_10c : 3.00 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.01 -pb_1c : 3.01 -pb_5c : 3.00 -pb_10c : 3.00 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.02 -pb_1c : 3.02 -pb_5c : 3.00 -pb_10c : 3.00 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.03 -pb_1c : 3.03 -pb_5c : 3.00 -pb_10c : 3.00 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.04 -pb_1c : 3.04 -pb_5c : 3.00 -pb_10c : 3.00 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.05 -pb_1c : 3.05 -pb_5c : 3.05 -pb_10c : 3.00 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.06 -pb_1c : 3.06 -pb_5c : 3.05 -pb_10c : 3.00 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.07 -pb_1c : 3.07 -pb_5c : 3.05 -pb_10c : 3.00 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.08 -pb_1c : 3.08 -pb_5c : 3.05 -pb_10c : 3.00 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.09 -pb_1c : 3.09 -pb_5c : 3.05 -pb_10c : 3.00 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.10 -pb_1c : 3.10 -pb_5c : 3.10 -pb_10c : 3.10 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.11 -pb_1c : 3.11 -pb_5c : 3.10 -pb_10c : 3.10 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.12 -pb_1c : 3.12 -pb_5c : 3.10 -pb_10c : 3.10 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.13 -pb_1c : 3.13 -pb_5c : 3.10 -pb_10c : 3.10 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.14 -pb_1c : 3.14 -pb_5c : 3.10 -pb_10c : 3.10 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.15 -pb_1c : 3.15 -pb_5c : 3.15 -pb_10c : 3.10 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.16 -pb_1c : 3.16 -pb_5c : 3.15 -pb_10c : 3.10 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.17 -pb_1c : 3.17 -pb_5c : 3.15 -pb_10c : 3.10 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.18 -pb_1c : 3.18 -pb_5c : 3.15 -pb_10c : 3.10 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.19 -pb_1c : 3.19 -pb_5c : 3.15 -pb_10c : 3.10 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.20 -pb_1c : 3.20 -pb_5c : 3.20 -pb_10c : 3.20 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.21 -pb_1c : 3.21 -pb_5c : 3.20 -pb_10c : 3.20 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.22 -pb_1c : 3.22 -pb_5c : 3.20 -pb_10c : 3.20 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.23 -pb_1c : 3.23 -pb_5c : 3.20 -pb_10c : 3.20 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.24 -pb_1c : 3.24 -pb_5c : 3.20 -pb_10c : 3.20 -pb_25c : 3.00 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.25 -pb_1c : 3.25 -pb_5c : 3.25 -pb_10c : 3.20 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.26 -pb_1c : 3.26 -pb_5c : 3.25 -pb_10c : 3.20 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.27 -pb_1c : 3.27 -pb_5c : 3.25 -pb_10c : 3.20 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.28 -pb_1c : 3.28 -pb_5c : 3.25 -pb_10c : 3.20 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.29 -pb_1c : 3.29 -pb_5c : 3.25 -pb_10c : 3.20 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.30 -pb_1c : 3.30 -pb_5c : 3.30 -pb_10c : 3.30 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.31 -pb_1c : 3.31 -pb_5c : 3.30 -pb_10c : 3.30 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.32 -pb_1c : 3.32 -pb_5c : 3.30 -pb_10c : 3.30 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.33 -pb_1c : 3.33 -pb_5c : 3.30 -pb_10c : 3.30 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.34 -pb_1c : 3.34 -pb_5c : 3.30 -pb_10c : 3.30 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.35 -pb_1c : 3.35 -pb_5c : 3.35 -pb_10c : 3.30 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.36 -pb_1c : 3.36 -pb_5c : 3.35 -pb_10c : 3.30 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.37 -pb_1c : 3.37 -pb_5c : 3.35 -pb_10c : 3.30 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.38 -pb_1c : 3.38 -pb_5c : 3.35 -pb_10c : 3.30 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.39 -pb_1c : 3.39 -pb_5c : 3.35 -pb_10c : 3.30 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.40 -pb_1c : 3.40 -pb_5c : 3.40 -pb_10c : 3.40 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.41 -pb_1c : 3.41 -pb_5c : 3.40 -pb_10c : 3.40 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.42 -pb_1c : 3.42 -pb_5c : 3.40 -pb_10c : 3.40 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.43 -pb_1c : 3.43 -pb_5c : 3.40 -pb_10c : 3.40 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.44 -pb_1c : 3.44 -pb_5c : 3.40 -pb_10c : 3.40 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.45 -pb_1c : 3.45 -pb_5c : 3.45 -pb_10c : 3.40 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.46 -pb_1c : 3.46 -pb_5c : 3.45 -pb_10c : 3.40 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.47 -pb_1c : 3.47 -pb_5c : 3.45 -pb_10c : 3.40 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.48 -pb_1c : 3.48 -pb_5c : 3.45 -pb_10c : 3.40 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.49 -pb_1c : 3.49 -pb_5c : 3.45 -pb_10c : 3.40 -pb_25c : 3.25 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.50 -pb_1c : 3.50 -pb_5c : 3.50 -pb_10c : 3.50 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.51 -pb_1c : 3.51 -pb_5c : 3.50 -pb_10c : 3.50 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.52 -pb_1c : 3.52 -pb_5c : 3.50 -pb_10c : 3.50 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.53 -pb_1c : 3.53 -pb_5c : 3.50 -pb_10c : 3.50 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.54 -pb_1c : 3.54 -pb_5c : 3.50 -pb_10c : 3.50 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.55 -pb_1c : 3.55 -pb_5c : 3.55 -pb_10c : 3.50 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.56 -pb_1c : 3.56 -pb_5c : 3.55 -pb_10c : 3.50 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.57 -pb_1c : 3.57 -pb_5c : 3.55 -pb_10c : 3.50 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.58 -pb_1c : 3.58 -pb_5c : 3.55 -pb_10c : 3.50 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.59 -pb_1c : 3.59 -pb_5c : 3.55 -pb_10c : 3.50 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.60 -pb_1c : 3.60 -pb_5c : 3.60 -pb_10c : 3.60 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.61 -pb_1c : 3.61 -pb_5c : 3.60 -pb_10c : 3.60 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.62 -pb_1c : 3.62 -pb_5c : 3.60 -pb_10c : 3.60 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.63 -pb_1c : 3.63 -pb_5c : 3.60 -pb_10c : 3.60 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.64 -pb_1c : 3.64 -pb_5c : 3.60 -pb_10c : 3.60 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.65 -pb_1c : 3.65 -pb_5c : 3.65 -pb_10c : 3.60 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.66 -pb_1c : 3.66 -pb_5c : 3.65 -pb_10c : 3.60 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.67 -pb_1c : 3.67 -pb_5c : 3.65 -pb_10c : 3.60 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.68 -pb_1c : 3.68 -pb_5c : 3.65 -pb_10c : 3.60 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.69 -pb_1c : 3.69 -pb_5c : 3.65 -pb_10c : 3.60 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.70 -pb_1c : 3.70 -pb_5c : 3.70 -pb_10c : 3.70 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.71 -pb_1c : 3.71 -pb_5c : 3.70 -pb_10c : 3.70 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.72 -pb_1c : 3.72 -pb_5c : 3.70 -pb_10c : 3.70 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.73 -pb_1c : 3.73 -pb_5c : 3.70 -pb_10c : 3.70 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.74 -pb_1c : 3.74 -pb_5c : 3.70 -pb_10c : 3.70 -pb_25c : 3.50 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.75 -pb_1c : 3.75 -pb_5c : 3.75 -pb_10c : 3.70 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.76 -pb_1c : 3.76 -pb_5c : 3.75 -pb_10c : 3.70 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.77 -pb_1c : 3.77 -pb_5c : 3.75 -pb_10c : 3.70 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.78 -pb_1c : 3.78 -pb_5c : 3.75 -pb_10c : 3.70 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.79 -pb_1c : 3.79 -pb_5c : 3.75 -pb_10c : 3.70 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.80 -pb_1c : 3.80 -pb_5c : 3.80 -pb_10c : 3.80 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.81 -pb_1c : 3.81 -pb_5c : 3.80 -pb_10c : 3.80 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.82 -pb_1c : 3.82 -pb_5c : 3.80 -pb_10c : 3.80 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.83 -pb_1c : 3.83 -pb_5c : 3.80 -pb_10c : 3.80 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.84 -pb_1c : 3.84 -pb_5c : 3.80 -pb_10c : 3.80 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.85 -pb_1c : 3.85 -pb_5c : 3.85 -pb_10c : 3.80 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.86 -pb_1c : 3.86 -pb_5c : 3.85 -pb_10c : 3.80 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.87 -pb_1c : 3.87 -pb_5c : 3.85 -pb_10c : 3.80 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.88 -pb_1c : 3.88 -pb_5c : 3.85 -pb_10c : 3.80 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.89 -pb_1c : 3.89 -pb_5c : 3.85 -pb_10c : 3.80 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.90 -pb_1c : 3.90 -pb_5c : 3.90 -pb_10c : 3.90 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.91 -pb_1c : 3.91 -pb_5c : 3.90 -pb_10c : 3.90 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.92 -pb_1c : 3.92 -pb_5c : 3.90 -pb_10c : 3.90 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.93 -pb_1c : 3.93 -pb_5c : 3.90 -pb_10c : 3.90 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.94 -pb_1c : 3.94 -pb_5c : 3.90 -pb_10c : 3.90 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.95 -pb_1c : 3.95 -pb_5c : 3.95 -pb_10c : 3.90 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.96 -pb_1c : 3.96 -pb_5c : 3.95 -pb_10c : 3.90 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.97 -pb_1c : 3.97 -pb_5c : 3.95 -pb_10c : 3.90 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.98 -pb_1c : 3.98 -pb_5c : 3.95 -pb_10c : 3.90 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -3.99 -pb_1c : 3.99 -pb_5c : 3.95 -pb_10c : 3.90 -pb_25c : 3.75 -pb_1d : 3.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.00 -pb_1c : 4.00 -pb_5c : 4.00 -pb_10c : 4.00 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.01 -pb_1c : 4.01 -pb_5c : 4.00 -pb_10c : 4.00 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.02 -pb_1c : 4.02 -pb_5c : 4.00 -pb_10c : 4.00 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.03 -pb_1c : 4.03 -pb_5c : 4.00 -pb_10c : 4.00 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.04 -pb_1c : 4.04 -pb_5c : 4.00 -pb_10c : 4.00 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.05 -pb_1c : 4.05 -pb_5c : 4.05 -pb_10c : 4.00 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.06 -pb_1c : 4.06 -pb_5c : 4.05 -pb_10c : 4.00 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.07 -pb_1c : 4.07 -pb_5c : 4.05 -pb_10c : 4.00 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.08 -pb_1c : 4.08 -pb_5c : 4.05 -pb_10c : 4.00 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.09 -pb_1c : 4.09 -pb_5c : 4.05 -pb_10c : 4.00 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.10 -pb_1c : 4.10 -pb_5c : 4.10 -pb_10c : 4.10 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.11 -pb_1c : 4.11 -pb_5c : 4.10 -pb_10c : 4.10 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.12 -pb_1c : 4.12 -pb_5c : 4.10 -pb_10c : 4.10 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.13 -pb_1c : 4.13 -pb_5c : 4.10 -pb_10c : 4.10 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.14 -pb_1c : 4.14 -pb_5c : 4.10 -pb_10c : 4.10 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.15 -pb_1c : 4.15 -pb_5c : 4.15 -pb_10c : 4.10 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.16 -pb_1c : 4.16 -pb_5c : 4.15 -pb_10c : 4.10 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.17 -pb_1c : 4.17 -pb_5c : 4.15 -pb_10c : 4.10 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.18 -pb_1c : 4.18 -pb_5c : 4.15 -pb_10c : 4.10 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.19 -pb_1c : 4.19 -pb_5c : 4.15 -pb_10c : 4.10 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.20 -pb_1c : 4.20 -pb_5c : 4.20 -pb_10c : 4.20 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.21 -pb_1c : 4.21 -pb_5c : 4.20 -pb_10c : 4.20 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.22 -pb_1c : 4.22 -pb_5c : 4.20 -pb_10c : 4.20 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.23 -pb_1c : 4.23 -pb_5c : 4.20 -pb_10c : 4.20 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.24 -pb_1c : 4.24 -pb_5c : 4.20 -pb_10c : 4.20 -pb_25c : 4.00 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.25 -pb_1c : 4.25 -pb_5c : 4.25 -pb_10c : 4.20 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.26 -pb_1c : 4.26 -pb_5c : 4.25 -pb_10c : 4.20 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.27 -pb_1c : 4.27 -pb_5c : 4.25 -pb_10c : 4.20 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.28 -pb_1c : 4.28 -pb_5c : 4.25 -pb_10c : 4.20 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.29 -pb_1c : 4.29 -pb_5c : 4.25 -pb_10c : 4.20 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.30 -pb_1c : 4.30 -pb_5c : 4.30 -pb_10c : 4.30 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.31 -pb_1c : 4.31 -pb_5c : 4.30 -pb_10c : 4.30 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.32 -pb_1c : 4.32 -pb_5c : 4.30 -pb_10c : 4.30 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.33 -pb_1c : 4.33 -pb_5c : 4.30 -pb_10c : 4.30 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.34 -pb_1c : 4.34 -pb_5c : 4.30 -pb_10c : 4.30 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.35 -pb_1c : 4.35 -pb_5c : 4.35 -pb_10c : 4.30 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.36 -pb_1c : 4.36 -pb_5c : 4.35 -pb_10c : 4.30 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.37 -pb_1c : 4.37 -pb_5c : 4.35 -pb_10c : 4.30 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.38 -pb_1c : 4.38 -pb_5c : 4.35 -pb_10c : 4.30 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.39 -pb_1c : 4.39 -pb_5c : 4.35 -pb_10c : 4.30 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.40 -pb_1c : 4.40 -pb_5c : 4.40 -pb_10c : 4.40 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.41 -pb_1c : 4.41 -pb_5c : 4.40 -pb_10c : 4.40 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.42 -pb_1c : 4.42 -pb_5c : 4.40 -pb_10c : 4.40 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.43 -pb_1c : 4.43 -pb_5c : 4.40 -pb_10c : 4.40 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.44 -pb_1c : 4.44 -pb_5c : 4.40 -pb_10c : 4.40 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.45 -pb_1c : 4.45 -pb_5c : 4.45 -pb_10c : 4.40 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.46 -pb_1c : 4.46 -pb_5c : 4.45 -pb_10c : 4.40 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.47 -pb_1c : 4.47 -pb_5c : 4.45 -pb_10c : 4.40 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.48 -pb_1c : 4.48 -pb_5c : 4.45 -pb_10c : 4.40 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.49 -pb_1c : 4.49 -pb_5c : 4.45 -pb_10c : 4.40 -pb_25c : 4.25 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.50 -pb_1c : 4.50 -pb_5c : 4.50 -pb_10c : 4.50 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.51 -pb_1c : 4.51 -pb_5c : 4.50 -pb_10c : 4.50 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.52 -pb_1c : 4.52 -pb_5c : 4.50 -pb_10c : 4.50 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.53 -pb_1c : 4.53 -pb_5c : 4.50 -pb_10c : 4.50 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.54 -pb_1c : 4.54 -pb_5c : 4.50 -pb_10c : 4.50 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.55 -pb_1c : 4.55 -pb_5c : 4.55 -pb_10c : 4.50 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.56 -pb_1c : 4.56 -pb_5c : 4.55 -pb_10c : 4.50 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.57 -pb_1c : 4.57 -pb_5c : 4.55 -pb_10c : 4.50 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.58 -pb_1c : 4.58 -pb_5c : 4.55 -pb_10c : 4.50 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.59 -pb_1c : 4.59 -pb_5c : 4.55 -pb_10c : 4.50 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.60 -pb_1c : 4.60 -pb_5c : 4.60 -pb_10c : 4.60 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.61 -pb_1c : 4.61 -pb_5c : 4.60 -pb_10c : 4.60 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.62 -pb_1c : 4.62 -pb_5c : 4.60 -pb_10c : 4.60 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.63 -pb_1c : 4.63 -pb_5c : 4.60 -pb_10c : 4.60 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.64 -pb_1c : 4.64 -pb_5c : 4.60 -pb_10c : 4.60 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.65 -pb_1c : 4.65 -pb_5c : 4.65 -pb_10c : 4.60 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.66 -pb_1c : 4.66 -pb_5c : 4.65 -pb_10c : 4.60 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.67 -pb_1c : 4.67 -pb_5c : 4.65 -pb_10c : 4.60 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.68 -pb_1c : 4.68 -pb_5c : 4.65 -pb_10c : 4.60 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.69 -pb_1c : 4.69 -pb_5c : 4.65 -pb_10c : 4.60 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.70 -pb_1c : 4.70 -pb_5c : 4.70 -pb_10c : 4.70 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.71 -pb_1c : 4.71 -pb_5c : 4.70 -pb_10c : 4.70 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.72 -pb_1c : 4.72 -pb_5c : 4.70 -pb_10c : 4.70 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.73 -pb_1c : 4.73 -pb_5c : 4.70 -pb_10c : 4.70 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.74 -pb_1c : 4.74 -pb_5c : 4.70 -pb_10c : 4.70 -pb_25c : 4.50 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.75 -pb_1c : 4.75 -pb_5c : 4.75 -pb_10c : 4.70 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.76 -pb_1c : 4.76 -pb_5c : 4.75 -pb_10c : 4.70 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.77 -pb_1c : 4.77 -pb_5c : 4.75 -pb_10c : 4.70 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.78 -pb_1c : 4.78 -pb_5c : 4.75 -pb_10c : 4.70 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.79 -pb_1c : 4.79 -pb_5c : 4.75 -pb_10c : 4.70 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.80 -pb_1c : 4.80 -pb_5c : 4.80 -pb_10c : 4.80 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.81 -pb_1c : 4.81 -pb_5c : 4.80 -pb_10c : 4.80 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.82 -pb_1c : 4.82 -pb_5c : 4.80 -pb_10c : 4.80 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.83 -pb_1c : 4.83 -pb_5c : 4.80 -pb_10c : 4.80 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.84 -pb_1c : 4.84 -pb_5c : 4.80 -pb_10c : 4.80 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.85 -pb_1c : 4.85 -pb_5c : 4.85 -pb_10c : 4.80 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.86 -pb_1c : 4.86 -pb_5c : 4.85 -pb_10c : 4.80 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.87 -pb_1c : 4.87 -pb_5c : 4.85 -pb_10c : 4.80 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.88 -pb_1c : 4.88 -pb_5c : 4.85 -pb_10c : 4.80 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.89 -pb_1c : 4.89 -pb_5c : 4.85 -pb_10c : 4.80 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.90 -pb_1c : 4.90 -pb_5c : 4.90 -pb_10c : 4.90 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.91 -pb_1c : 4.91 -pb_5c : 4.90 -pb_10c : 4.90 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.92 -pb_1c : 4.92 -pb_5c : 4.90 -pb_10c : 4.90 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.93 -pb_1c : 4.93 -pb_5c : 4.90 -pb_10c : 4.90 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.94 -pb_1c : 4.94 -pb_5c : 4.90 -pb_10c : 4.90 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.95 -pb_1c : 4.95 -pb_5c : 4.95 -pb_10c : 4.90 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.96 -pb_1c : 4.96 -pb_5c : 4.95 -pb_10c : 4.90 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.97 -pb_1c : 4.97 -pb_5c : 4.95 -pb_10c : 4.90 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.98 -pb_1c : 4.98 -pb_5c : 4.95 -pb_10c : 4.90 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -4.99 -pb_1c : 4.99 -pb_5c : 4.95 -pb_10c : 4.90 -pb_25c : 4.75 -pb_1d : 4.00 -pb_5d : 0.00 -pb_10d : 0.00 - -5.00 -pb_1c : 5.00 -pb_5c : 5.00 -pb_10c : 5.00 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.01 -pb_1c : 5.01 -pb_5c : 5.00 -pb_10c : 5.00 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.02 -pb_1c : 5.02 -pb_5c : 5.00 -pb_10c : 5.00 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.03 -pb_1c : 5.03 -pb_5c : 5.00 -pb_10c : 5.00 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.04 -pb_1c : 5.04 -pb_5c : 5.00 -pb_10c : 5.00 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.05 -pb_1c : 5.05 -pb_5c : 5.05 -pb_10c : 5.00 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.06 -pb_1c : 5.06 -pb_5c : 5.05 -pb_10c : 5.00 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.07 -pb_1c : 5.07 -pb_5c : 5.05 -pb_10c : 5.00 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.08 -pb_1c : 5.08 -pb_5c : 5.05 -pb_10c : 5.00 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.09 -pb_1c : 5.09 -pb_5c : 5.05 -pb_10c : 5.00 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.10 -pb_1c : 5.10 -pb_5c : 5.10 -pb_10c : 5.10 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.11 -pb_1c : 5.11 -pb_5c : 5.10 -pb_10c : 5.10 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.12 -pb_1c : 5.12 -pb_5c : 5.10 -pb_10c : 5.10 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.13 -pb_1c : 5.13 -pb_5c : 5.10 -pb_10c : 5.10 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.14 -pb_1c : 5.14 -pb_5c : 5.10 -pb_10c : 5.10 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.15 -pb_1c : 5.15 -pb_5c : 5.15 -pb_10c : 5.10 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.16 -pb_1c : 5.16 -pb_5c : 5.15 -pb_10c : 5.10 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.17 -pb_1c : 5.17 -pb_5c : 5.15 -pb_10c : 5.10 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.18 -pb_1c : 5.18 -pb_5c : 5.15 -pb_10c : 5.10 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.19 -pb_1c : 5.19 -pb_5c : 5.15 -pb_10c : 5.10 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.20 -pb_1c : 5.20 -pb_5c : 5.20 -pb_10c : 5.20 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.21 -pb_1c : 5.21 -pb_5c : 5.20 -pb_10c : 5.20 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.22 -pb_1c : 5.22 -pb_5c : 5.20 -pb_10c : 5.20 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.23 -pb_1c : 5.23 -pb_5c : 5.20 -pb_10c : 5.20 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.24 -pb_1c : 5.24 -pb_5c : 5.20 -pb_10c : 5.20 -pb_25c : 5.00 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.25 -pb_1c : 5.25 -pb_5c : 5.25 -pb_10c : 5.20 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.26 -pb_1c : 5.26 -pb_5c : 5.25 -pb_10c : 5.20 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.27 -pb_1c : 5.27 -pb_5c : 5.25 -pb_10c : 5.20 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.28 -pb_1c : 5.28 -pb_5c : 5.25 -pb_10c : 5.20 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.29 -pb_1c : 5.29 -pb_5c : 5.25 -pb_10c : 5.20 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.30 -pb_1c : 5.30 -pb_5c : 5.30 -pb_10c : 5.30 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.31 -pb_1c : 5.31 -pb_5c : 5.30 -pb_10c : 5.30 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.32 -pb_1c : 5.32 -pb_5c : 5.30 -pb_10c : 5.30 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.33 -pb_1c : 5.33 -pb_5c : 5.30 -pb_10c : 5.30 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.34 -pb_1c : 5.34 -pb_5c : 5.30 -pb_10c : 5.30 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.35 -pb_1c : 5.35 -pb_5c : 5.35 -pb_10c : 5.30 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.36 -pb_1c : 5.36 -pb_5c : 5.35 -pb_10c : 5.30 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.37 -pb_1c : 5.37 -pb_5c : 5.35 -pb_10c : 5.30 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.38 -pb_1c : 5.38 -pb_5c : 5.35 -pb_10c : 5.30 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.39 -pb_1c : 5.39 -pb_5c : 5.35 -pb_10c : 5.30 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.40 -pb_1c : 5.40 -pb_5c : 5.40 -pb_10c : 5.40 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.41 -pb_1c : 5.41 -pb_5c : 5.40 -pb_10c : 5.40 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.42 -pb_1c : 5.42 -pb_5c : 5.40 -pb_10c : 5.40 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.43 -pb_1c : 5.43 -pb_5c : 5.40 -pb_10c : 5.40 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.44 -pb_1c : 5.44 -pb_5c : 5.40 -pb_10c : 5.40 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.45 -pb_1c : 5.45 -pb_5c : 5.45 -pb_10c : 5.40 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.46 -pb_1c : 5.46 -pb_5c : 5.45 -pb_10c : 5.40 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.47 -pb_1c : 5.47 -pb_5c : 5.45 -pb_10c : 5.40 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.48 -pb_1c : 5.48 -pb_5c : 5.45 -pb_10c : 5.40 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.49 -pb_1c : 5.49 -pb_5c : 5.45 -pb_10c : 5.40 -pb_25c : 5.25 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.50 -pb_1c : 5.50 -pb_5c : 5.50 -pb_10c : 5.50 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.51 -pb_1c : 5.51 -pb_5c : 5.50 -pb_10c : 5.50 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.52 -pb_1c : 5.52 -pb_5c : 5.50 -pb_10c : 5.50 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.53 -pb_1c : 5.53 -pb_5c : 5.50 -pb_10c : 5.50 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.54 -pb_1c : 5.54 -pb_5c : 5.50 -pb_10c : 5.50 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.55 -pb_1c : 5.55 -pb_5c : 5.55 -pb_10c : 5.50 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.56 -pb_1c : 5.56 -pb_5c : 5.55 -pb_10c : 5.50 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.57 -pb_1c : 5.57 -pb_5c : 5.55 -pb_10c : 5.50 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.58 -pb_1c : 5.58 -pb_5c : 5.55 -pb_10c : 5.50 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.59 -pb_1c : 5.59 -pb_5c : 5.55 -pb_10c : 5.50 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.60 -pb_1c : 5.60 -pb_5c : 5.60 -pb_10c : 5.60 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.61 -pb_1c : 5.61 -pb_5c : 5.60 -pb_10c : 5.60 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.62 -pb_1c : 5.62 -pb_5c : 5.60 -pb_10c : 5.60 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.63 -pb_1c : 5.63 -pb_5c : 5.60 -pb_10c : 5.60 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.64 -pb_1c : 5.64 -pb_5c : 5.60 -pb_10c : 5.60 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.65 -pb_1c : 5.65 -pb_5c : 5.65 -pb_10c : 5.60 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.66 -pb_1c : 5.66 -pb_5c : 5.65 -pb_10c : 5.60 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.67 -pb_1c : 5.67 -pb_5c : 5.65 -pb_10c : 5.60 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.68 -pb_1c : 5.68 -pb_5c : 5.65 -pb_10c : 5.60 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.69 -pb_1c : 5.69 -pb_5c : 5.65 -pb_10c : 5.60 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.70 -pb_1c : 5.70 -pb_5c : 5.70 -pb_10c : 5.70 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.71 -pb_1c : 5.71 -pb_5c : 5.70 -pb_10c : 5.70 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.72 -pb_1c : 5.72 -pb_5c : 5.70 -pb_10c : 5.70 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.73 -pb_1c : 5.73 -pb_5c : 5.70 -pb_10c : 5.70 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.74 -pb_1c : 5.74 -pb_5c : 5.70 -pb_10c : 5.70 -pb_25c : 5.50 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.75 -pb_1c : 5.75 -pb_5c : 5.75 -pb_10c : 5.70 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.76 -pb_1c : 5.76 -pb_5c : 5.75 -pb_10c : 5.70 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.77 -pb_1c : 5.77 -pb_5c : 5.75 -pb_10c : 5.70 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.78 -pb_1c : 5.78 -pb_5c : 5.75 -pb_10c : 5.70 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.79 -pb_1c : 5.79 -pb_5c : 5.75 -pb_10c : 5.70 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.80 -pb_1c : 5.80 -pb_5c : 5.80 -pb_10c : 5.80 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.81 -pb_1c : 5.81 -pb_5c : 5.80 -pb_10c : 5.80 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.82 -pb_1c : 5.82 -pb_5c : 5.80 -pb_10c : 5.80 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.83 -pb_1c : 5.83 -pb_5c : 5.80 -pb_10c : 5.80 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.84 -pb_1c : 5.84 -pb_5c : 5.80 -pb_10c : 5.80 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.85 -pb_1c : 5.85 -pb_5c : 5.85 -pb_10c : 5.80 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.86 -pb_1c : 5.86 -pb_5c : 5.85 -pb_10c : 5.80 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.87 -pb_1c : 5.87 -pb_5c : 5.85 -pb_10c : 5.80 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.88 -pb_1c : 5.88 -pb_5c : 5.85 -pb_10c : 5.80 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.89 -pb_1c : 5.89 -pb_5c : 5.85 -pb_10c : 5.80 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.90 -pb_1c : 5.90 -pb_5c : 5.90 -pb_10c : 5.90 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.91 -pb_1c : 5.91 -pb_5c : 5.90 -pb_10c : 5.90 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.92 -pb_1c : 5.92 -pb_5c : 5.90 -pb_10c : 5.90 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.93 -pb_1c : 5.93 -pb_5c : 5.90 -pb_10c : 5.90 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.94 -pb_1c : 5.94 -pb_5c : 5.90 -pb_10c : 5.90 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.95 -pb_1c : 5.95 -pb_5c : 5.95 -pb_10c : 5.90 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.96 -pb_1c : 5.96 -pb_5c : 5.95 -pb_10c : 5.90 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.97 -pb_1c : 5.97 -pb_5c : 5.95 -pb_10c : 5.90 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.98 -pb_1c : 5.98 -pb_5c : 5.95 -pb_10c : 5.90 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -5.99 -pb_1c : 5.99 -pb_5c : 5.95 -pb_10c : 5.90 -pb_25c : 5.75 -pb_1d : 5.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.00 -pb_1c : 6.00 -pb_5c : 6.00 -pb_10c : 6.00 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.01 -pb_1c : 6.01 -pb_5c : 6.00 -pb_10c : 6.00 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.02 -pb_1c : 6.02 -pb_5c : 6.00 -pb_10c : 6.00 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.03 -pb_1c : 6.03 -pb_5c : 6.00 -pb_10c : 6.00 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.04 -pb_1c : 6.04 -pb_5c : 6.00 -pb_10c : 6.00 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.05 -pb_1c : 6.05 -pb_5c : 6.05 -pb_10c : 6.00 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.06 -pb_1c : 6.06 -pb_5c : 6.05 -pb_10c : 6.00 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.07 -pb_1c : 6.07 -pb_5c : 6.05 -pb_10c : 6.00 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.08 -pb_1c : 6.08 -pb_5c : 6.05 -pb_10c : 6.00 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.09 -pb_1c : 6.09 -pb_5c : 6.05 -pb_10c : 6.00 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.10 -pb_1c : 6.10 -pb_5c : 6.10 -pb_10c : 6.10 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.11 -pb_1c : 6.11 -pb_5c : 6.10 -pb_10c : 6.10 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.12 -pb_1c : 6.12 -pb_5c : 6.10 -pb_10c : 6.10 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.13 -pb_1c : 6.13 -pb_5c : 6.10 -pb_10c : 6.10 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.14 -pb_1c : 6.14 -pb_5c : 6.10 -pb_10c : 6.10 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.15 -pb_1c : 6.15 -pb_5c : 6.15 -pb_10c : 6.10 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.16 -pb_1c : 6.16 -pb_5c : 6.15 -pb_10c : 6.10 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.17 -pb_1c : 6.17 -pb_5c : 6.15 -pb_10c : 6.10 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.18 -pb_1c : 6.18 -pb_5c : 6.15 -pb_10c : 6.10 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.19 -pb_1c : 6.19 -pb_5c : 6.15 -pb_10c : 6.10 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.20 -pb_1c : 6.20 -pb_5c : 6.20 -pb_10c : 6.20 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.21 -pb_1c : 6.21 -pb_5c : 6.20 -pb_10c : 6.20 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.22 -pb_1c : 6.22 -pb_5c : 6.20 -pb_10c : 6.20 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.23 -pb_1c : 6.23 -pb_5c : 6.20 -pb_10c : 6.20 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.24 -pb_1c : 6.24 -pb_5c : 6.20 -pb_10c : 6.20 -pb_25c : 6.00 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.25 -pb_1c : 6.25 -pb_5c : 6.25 -pb_10c : 6.20 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.26 -pb_1c : 6.26 -pb_5c : 6.25 -pb_10c : 6.20 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.27 -pb_1c : 6.27 -pb_5c : 6.25 -pb_10c : 6.20 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.28 -pb_1c : 6.28 -pb_5c : 6.25 -pb_10c : 6.20 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.29 -pb_1c : 6.29 -pb_5c : 6.25 -pb_10c : 6.20 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.30 -pb_1c : 6.30 -pb_5c : 6.30 -pb_10c : 6.30 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.31 -pb_1c : 6.31 -pb_5c : 6.30 -pb_10c : 6.30 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.32 -pb_1c : 6.32 -pb_5c : 6.30 -pb_10c : 6.30 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.33 -pb_1c : 6.33 -pb_5c : 6.30 -pb_10c : 6.30 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.34 -pb_1c : 6.34 -pb_5c : 6.30 -pb_10c : 6.30 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.35 -pb_1c : 6.35 -pb_5c : 6.35 -pb_10c : 6.30 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.36 -pb_1c : 6.36 -pb_5c : 6.35 -pb_10c : 6.30 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.37 -pb_1c : 6.37 -pb_5c : 6.35 -pb_10c : 6.30 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.38 -pb_1c : 6.38 -pb_5c : 6.35 -pb_10c : 6.30 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.39 -pb_1c : 6.39 -pb_5c : 6.35 -pb_10c : 6.30 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.40 -pb_1c : 6.40 -pb_5c : 6.40 -pb_10c : 6.40 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.41 -pb_1c : 6.41 -pb_5c : 6.40 -pb_10c : 6.40 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.42 -pb_1c : 6.42 -pb_5c : 6.40 -pb_10c : 6.40 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.43 -pb_1c : 6.43 -pb_5c : 6.40 -pb_10c : 6.40 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.44 -pb_1c : 6.44 -pb_5c : 6.40 -pb_10c : 6.40 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.45 -pb_1c : 6.45 -pb_5c : 6.45 -pb_10c : 6.40 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.46 -pb_1c : 6.46 -pb_5c : 6.45 -pb_10c : 6.40 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.47 -pb_1c : 6.47 -pb_5c : 6.45 -pb_10c : 6.40 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.48 -pb_1c : 6.48 -pb_5c : 6.45 -pb_10c : 6.40 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.49 -pb_1c : 6.49 -pb_5c : 6.45 -pb_10c : 6.40 -pb_25c : 6.25 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.50 -pb_1c : 6.50 -pb_5c : 6.50 -pb_10c : 6.50 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.51 -pb_1c : 6.51 -pb_5c : 6.50 -pb_10c : 6.50 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.52 -pb_1c : 6.52 -pb_5c : 6.50 -pb_10c : 6.50 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.53 -pb_1c : 6.53 -pb_5c : 6.50 -pb_10c : 6.50 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.54 -pb_1c : 6.54 -pb_5c : 6.50 -pb_10c : 6.50 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.55 -pb_1c : 6.55 -pb_5c : 6.55 -pb_10c : 6.50 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.56 -pb_1c : 6.56 -pb_5c : 6.55 -pb_10c : 6.50 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.57 -pb_1c : 6.57 -pb_5c : 6.55 -pb_10c : 6.50 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.58 -pb_1c : 6.58 -pb_5c : 6.55 -pb_10c : 6.50 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.59 -pb_1c : 6.59 -pb_5c : 6.55 -pb_10c : 6.50 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.60 -pb_1c : 6.60 -pb_5c : 6.60 -pb_10c : 6.60 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.61 -pb_1c : 6.61 -pb_5c : 6.60 -pb_10c : 6.60 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.62 -pb_1c : 6.62 -pb_5c : 6.60 -pb_10c : 6.60 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.63 -pb_1c : 6.63 -pb_5c : 6.60 -pb_10c : 6.60 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.64 -pb_1c : 6.64 -pb_5c : 6.60 -pb_10c : 6.60 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.65 -pb_1c : 6.65 -pb_5c : 6.65 -pb_10c : 6.60 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.66 -pb_1c : 6.66 -pb_5c : 6.65 -pb_10c : 6.60 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.67 -pb_1c : 6.67 -pb_5c : 6.65 -pb_10c : 6.60 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.68 -pb_1c : 6.68 -pb_5c : 6.65 -pb_10c : 6.60 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.69 -pb_1c : 6.69 -pb_5c : 6.65 -pb_10c : 6.60 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.70 -pb_1c : 6.70 -pb_5c : 6.70 -pb_10c : 6.70 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.71 -pb_1c : 6.71 -pb_5c : 6.70 -pb_10c : 6.70 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.72 -pb_1c : 6.72 -pb_5c : 6.70 -pb_10c : 6.70 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.73 -pb_1c : 6.73 -pb_5c : 6.70 -pb_10c : 6.70 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.74 -pb_1c : 6.74 -pb_5c : 6.70 -pb_10c : 6.70 -pb_25c : 6.50 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.75 -pb_1c : 6.75 -pb_5c : 6.75 -pb_10c : 6.70 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.76 -pb_1c : 6.76 -pb_5c : 6.75 -pb_10c : 6.70 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.77 -pb_1c : 6.77 -pb_5c : 6.75 -pb_10c : 6.70 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.78 -pb_1c : 6.78 -pb_5c : 6.75 -pb_10c : 6.70 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.79 -pb_1c : 6.79 -pb_5c : 6.75 -pb_10c : 6.70 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.80 -pb_1c : 6.80 -pb_5c : 6.80 -pb_10c : 6.80 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.81 -pb_1c : 6.81 -pb_5c : 6.80 -pb_10c : 6.80 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.82 -pb_1c : 6.82 -pb_5c : 6.80 -pb_10c : 6.80 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.83 -pb_1c : 6.83 -pb_5c : 6.80 -pb_10c : 6.80 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.84 -pb_1c : 6.84 -pb_5c : 6.80 -pb_10c : 6.80 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.85 -pb_1c : 6.85 -pb_5c : 6.85 -pb_10c : 6.80 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.86 -pb_1c : 6.86 -pb_5c : 6.85 -pb_10c : 6.80 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.87 -pb_1c : 6.87 -pb_5c : 6.85 -pb_10c : 6.80 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.88 -pb_1c : 6.88 -pb_5c : 6.85 -pb_10c : 6.80 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.89 -pb_1c : 6.89 -pb_5c : 6.85 -pb_10c : 6.80 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.90 -pb_1c : 6.90 -pb_5c : 6.90 -pb_10c : 6.90 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.91 -pb_1c : 6.91 -pb_5c : 6.90 -pb_10c : 6.90 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.92 -pb_1c : 6.92 -pb_5c : 6.90 -pb_10c : 6.90 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.93 -pb_1c : 6.93 -pb_5c : 6.90 -pb_10c : 6.90 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.94 -pb_1c : 6.94 -pb_5c : 6.90 -pb_10c : 6.90 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.95 -pb_1c : 6.95 -pb_5c : 6.95 -pb_10c : 6.90 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.96 -pb_1c : 6.96 -pb_5c : 6.95 -pb_10c : 6.90 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.97 -pb_1c : 6.97 -pb_5c : 6.95 -pb_10c : 6.90 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.98 -pb_1c : 6.98 -pb_5c : 6.95 -pb_10c : 6.90 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -6.99 -pb_1c : 6.99 -pb_5c : 6.95 -pb_10c : 6.90 -pb_25c : 6.75 -pb_1d : 6.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.00 -pb_1c : 7.00 -pb_5c : 7.00 -pb_10c : 7.00 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.01 -pb_1c : 7.01 -pb_5c : 7.00 -pb_10c : 7.00 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.02 -pb_1c : 7.02 -pb_5c : 7.00 -pb_10c : 7.00 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.03 -pb_1c : 7.03 -pb_5c : 7.00 -pb_10c : 7.00 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.04 -pb_1c : 7.04 -pb_5c : 7.00 -pb_10c : 7.00 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.05 -pb_1c : 7.05 -pb_5c : 7.05 -pb_10c : 7.00 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.06 -pb_1c : 7.06 -pb_5c : 7.05 -pb_10c : 7.00 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.07 -pb_1c : 7.07 -pb_5c : 7.05 -pb_10c : 7.00 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.08 -pb_1c : 7.08 -pb_5c : 7.05 -pb_10c : 7.00 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.09 -pb_1c : 7.09 -pb_5c : 7.05 -pb_10c : 7.00 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.10 -pb_1c : 7.10 -pb_5c : 7.10 -pb_10c : 7.10 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.11 -pb_1c : 7.11 -pb_5c : 7.10 -pb_10c : 7.10 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.12 -pb_1c : 7.12 -pb_5c : 7.10 -pb_10c : 7.10 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.13 -pb_1c : 7.13 -pb_5c : 7.10 -pb_10c : 7.10 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.14 -pb_1c : 7.14 -pb_5c : 7.10 -pb_10c : 7.10 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.15 -pb_1c : 7.15 -pb_5c : 7.15 -pb_10c : 7.10 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.16 -pb_1c : 7.16 -pb_5c : 7.15 -pb_10c : 7.10 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.17 -pb_1c : 7.17 -pb_5c : 7.15 -pb_10c : 7.10 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.18 -pb_1c : 7.18 -pb_5c : 7.15 -pb_10c : 7.10 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.19 -pb_1c : 7.19 -pb_5c : 7.15 -pb_10c : 7.10 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.20 -pb_1c : 7.20 -pb_5c : 7.20 -pb_10c : 7.20 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.21 -pb_1c : 7.21 -pb_5c : 7.20 -pb_10c : 7.20 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.22 -pb_1c : 7.22 -pb_5c : 7.20 -pb_10c : 7.20 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.23 -pb_1c : 7.23 -pb_5c : 7.20 -pb_10c : 7.20 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.24 -pb_1c : 7.24 -pb_5c : 7.20 -pb_10c : 7.20 -pb_25c : 7.00 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.25 -pb_1c : 7.25 -pb_5c : 7.25 -pb_10c : 7.20 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.26 -pb_1c : 7.26 -pb_5c : 7.25 -pb_10c : 7.20 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.27 -pb_1c : 7.27 -pb_5c : 7.25 -pb_10c : 7.20 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.28 -pb_1c : 7.28 -pb_5c : 7.25 -pb_10c : 7.20 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.29 -pb_1c : 7.29 -pb_5c : 7.25 -pb_10c : 7.20 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.30 -pb_1c : 7.30 -pb_5c : 7.30 -pb_10c : 7.30 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.31 -pb_1c : 7.31 -pb_5c : 7.30 -pb_10c : 7.30 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.32 -pb_1c : 7.32 -pb_5c : 7.30 -pb_10c : 7.30 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.33 -pb_1c : 7.33 -pb_5c : 7.30 -pb_10c : 7.30 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.34 -pb_1c : 7.34 -pb_5c : 7.30 -pb_10c : 7.30 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.35 -pb_1c : 7.35 -pb_5c : 7.35 -pb_10c : 7.30 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.36 -pb_1c : 7.36 -pb_5c : 7.35 -pb_10c : 7.30 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.37 -pb_1c : 7.37 -pb_5c : 7.35 -pb_10c : 7.30 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.38 -pb_1c : 7.38 -pb_5c : 7.35 -pb_10c : 7.30 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.39 -pb_1c : 7.39 -pb_5c : 7.35 -pb_10c : 7.30 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.40 -pb_1c : 7.40 -pb_5c : 7.40 -pb_10c : 7.40 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.41 -pb_1c : 7.41 -pb_5c : 7.40 -pb_10c : 7.40 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.42 -pb_1c : 7.42 -pb_5c : 7.40 -pb_10c : 7.40 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.43 -pb_1c : 7.43 -pb_5c : 7.40 -pb_10c : 7.40 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.44 -pb_1c : 7.44 -pb_5c : 7.40 -pb_10c : 7.40 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.45 -pb_1c : 7.45 -pb_5c : 7.45 -pb_10c : 7.40 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.46 -pb_1c : 7.46 -pb_5c : 7.45 -pb_10c : 7.40 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.47 -pb_1c : 7.47 -pb_5c : 7.45 -pb_10c : 7.40 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.48 -pb_1c : 7.48 -pb_5c : 7.45 -pb_10c : 7.40 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.49 -pb_1c : 7.49 -pb_5c : 7.45 -pb_10c : 7.40 -pb_25c : 7.25 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.50 -pb_1c : 7.50 -pb_5c : 7.50 -pb_10c : 7.50 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.51 -pb_1c : 7.51 -pb_5c : 7.50 -pb_10c : 7.50 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.52 -pb_1c : 7.52 -pb_5c : 7.50 -pb_10c : 7.50 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.53 -pb_1c : 7.53 -pb_5c : 7.50 -pb_10c : 7.50 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.54 -pb_1c : 7.54 -pb_5c : 7.50 -pb_10c : 7.50 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.55 -pb_1c : 7.55 -pb_5c : 7.55 -pb_10c : 7.50 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.56 -pb_1c : 7.56 -pb_5c : 7.55 -pb_10c : 7.50 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.57 -pb_1c : 7.57 -pb_5c : 7.55 -pb_10c : 7.50 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.58 -pb_1c : 7.58 -pb_5c : 7.55 -pb_10c : 7.50 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.59 -pb_1c : 7.59 -pb_5c : 7.55 -pb_10c : 7.50 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.60 -pb_1c : 7.60 -pb_5c : 7.60 -pb_10c : 7.60 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.61 -pb_1c : 7.61 -pb_5c : 7.60 -pb_10c : 7.60 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.62 -pb_1c : 7.62 -pb_5c : 7.60 -pb_10c : 7.60 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.63 -pb_1c : 7.63 -pb_5c : 7.60 -pb_10c : 7.60 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.64 -pb_1c : 7.64 -pb_5c : 7.60 -pb_10c : 7.60 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.65 -pb_1c : 7.65 -pb_5c : 7.65 -pb_10c : 7.60 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.66 -pb_1c : 7.66 -pb_5c : 7.65 -pb_10c : 7.60 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.67 -pb_1c : 7.67 -pb_5c : 7.65 -pb_10c : 7.60 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.68 -pb_1c : 7.68 -pb_5c : 7.65 -pb_10c : 7.60 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.69 -pb_1c : 7.69 -pb_5c : 7.65 -pb_10c : 7.60 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.70 -pb_1c : 7.70 -pb_5c : 7.70 -pb_10c : 7.70 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.71 -pb_1c : 7.71 -pb_5c : 7.70 -pb_10c : 7.70 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.72 -pb_1c : 7.72 -pb_5c : 7.70 -pb_10c : 7.70 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.73 -pb_1c : 7.73 -pb_5c : 7.70 -pb_10c : 7.70 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.74 -pb_1c : 7.74 -pb_5c : 7.70 -pb_10c : 7.70 -pb_25c : 7.50 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.75 -pb_1c : 7.75 -pb_5c : 7.75 -pb_10c : 7.70 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.76 -pb_1c : 7.76 -pb_5c : 7.75 -pb_10c : 7.70 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.77 -pb_1c : 7.77 -pb_5c : 7.75 -pb_10c : 7.70 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.78 -pb_1c : 7.78 -pb_5c : 7.75 -pb_10c : 7.70 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.79 -pb_1c : 7.79 -pb_5c : 7.75 -pb_10c : 7.70 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.80 -pb_1c : 7.80 -pb_5c : 7.80 -pb_10c : 7.80 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.81 -pb_1c : 7.81 -pb_5c : 7.80 -pb_10c : 7.80 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.82 -pb_1c : 7.82 -pb_5c : 7.80 -pb_10c : 7.80 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.83 -pb_1c : 7.83 -pb_5c : 7.80 -pb_10c : 7.80 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.84 -pb_1c : 7.84 -pb_5c : 7.80 -pb_10c : 7.80 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.85 -pb_1c : 7.85 -pb_5c : 7.85 -pb_10c : 7.80 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.86 -pb_1c : 7.86 -pb_5c : 7.85 -pb_10c : 7.80 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.87 -pb_1c : 7.87 -pb_5c : 7.85 -pb_10c : 7.80 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.88 -pb_1c : 7.88 -pb_5c : 7.85 -pb_10c : 7.80 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.89 -pb_1c : 7.89 -pb_5c : 7.85 -pb_10c : 7.80 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.90 -pb_1c : 7.90 -pb_5c : 7.90 -pb_10c : 7.90 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.91 -pb_1c : 7.91 -pb_5c : 7.90 -pb_10c : 7.90 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.92 -pb_1c : 7.92 -pb_5c : 7.90 -pb_10c : 7.90 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.93 -pb_1c : 7.93 -pb_5c : 7.90 -pb_10c : 7.90 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.94 -pb_1c : 7.94 -pb_5c : 7.90 -pb_10c : 7.90 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.95 -pb_1c : 7.95 -pb_5c : 7.95 -pb_10c : 7.90 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.96 -pb_1c : 7.96 -pb_5c : 7.95 -pb_10c : 7.90 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.97 -pb_1c : 7.97 -pb_5c : 7.95 -pb_10c : 7.90 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.98 -pb_1c : 7.98 -pb_5c : 7.95 -pb_10c : 7.90 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -7.99 -pb_1c : 7.99 -pb_5c : 7.95 -pb_10c : 7.90 -pb_25c : 7.75 -pb_1d : 7.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.00 -pb_1c : 8.00 -pb_5c : 8.00 -pb_10c : 8.00 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.01 -pb_1c : 8.01 -pb_5c : 8.00 -pb_10c : 8.00 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.02 -pb_1c : 8.02 -pb_5c : 8.00 -pb_10c : 8.00 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.03 -pb_1c : 8.03 -pb_5c : 8.00 -pb_10c : 8.00 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.04 -pb_1c : 8.04 -pb_5c : 8.00 -pb_10c : 8.00 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.05 -pb_1c : 8.05 -pb_5c : 8.05 -pb_10c : 8.00 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.06 -pb_1c : 8.06 -pb_5c : 8.05 -pb_10c : 8.00 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.07 -pb_1c : 8.07 -pb_5c : 8.05 -pb_10c : 8.00 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.08 -pb_1c : 8.08 -pb_5c : 8.05 -pb_10c : 8.00 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.09 -pb_1c : 8.09 -pb_5c : 8.05 -pb_10c : 8.00 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.10 -pb_1c : 8.10 -pb_5c : 8.10 -pb_10c : 8.10 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.11 -pb_1c : 8.11 -pb_5c : 8.10 -pb_10c : 8.10 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.12 -pb_1c : 8.12 -pb_5c : 8.10 -pb_10c : 8.10 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.13 -pb_1c : 8.13 -pb_5c : 8.10 -pb_10c : 8.10 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.14 -pb_1c : 8.14 -pb_5c : 8.10 -pb_10c : 8.10 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.15 -pb_1c : 8.15 -pb_5c : 8.15 -pb_10c : 8.10 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.16 -pb_1c : 8.16 -pb_5c : 8.15 -pb_10c : 8.10 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.17 -pb_1c : 8.17 -pb_5c : 8.15 -pb_10c : 8.10 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.18 -pb_1c : 8.18 -pb_5c : 8.15 -pb_10c : 8.10 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.19 -pb_1c : 8.19 -pb_5c : 8.15 -pb_10c : 8.10 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.20 -pb_1c : 8.20 -pb_5c : 8.20 -pb_10c : 8.20 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.21 -pb_1c : 8.21 -pb_5c : 8.20 -pb_10c : 8.20 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.22 -pb_1c : 8.22 -pb_5c : 8.20 -pb_10c : 8.20 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.23 -pb_1c : 8.23 -pb_5c : 8.20 -pb_10c : 8.20 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.24 -pb_1c : 8.24 -pb_5c : 8.20 -pb_10c : 8.20 -pb_25c : 8.00 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.25 -pb_1c : 8.25 -pb_5c : 8.25 -pb_10c : 8.20 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.26 -pb_1c : 8.26 -pb_5c : 8.25 -pb_10c : 8.20 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.27 -pb_1c : 8.27 -pb_5c : 8.25 -pb_10c : 8.20 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.28 -pb_1c : 8.28 -pb_5c : 8.25 -pb_10c : 8.20 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.29 -pb_1c : 8.29 -pb_5c : 8.25 -pb_10c : 8.20 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.30 -pb_1c : 8.30 -pb_5c : 8.30 -pb_10c : 8.30 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.31 -pb_1c : 8.31 -pb_5c : 8.30 -pb_10c : 8.30 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.32 -pb_1c : 8.32 -pb_5c : 8.30 -pb_10c : 8.30 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.33 -pb_1c : 8.33 -pb_5c : 8.30 -pb_10c : 8.30 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.34 -pb_1c : 8.34 -pb_5c : 8.30 -pb_10c : 8.30 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.35 -pb_1c : 8.35 -pb_5c : 8.35 -pb_10c : 8.30 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.36 -pb_1c : 8.36 -pb_5c : 8.35 -pb_10c : 8.30 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.37 -pb_1c : 8.37 -pb_5c : 8.35 -pb_10c : 8.30 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.38 -pb_1c : 8.38 -pb_5c : 8.35 -pb_10c : 8.30 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.39 -pb_1c : 8.39 -pb_5c : 8.35 -pb_10c : 8.30 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.40 -pb_1c : 8.40 -pb_5c : 8.40 -pb_10c : 8.40 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.41 -pb_1c : 8.41 -pb_5c : 8.40 -pb_10c : 8.40 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.42 -pb_1c : 8.42 -pb_5c : 8.40 -pb_10c : 8.40 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.43 -pb_1c : 8.43 -pb_5c : 8.40 -pb_10c : 8.40 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.44 -pb_1c : 8.44 -pb_5c : 8.40 -pb_10c : 8.40 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.45 -pb_1c : 8.45 -pb_5c : 8.45 -pb_10c : 8.40 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.46 -pb_1c : 8.46 -pb_5c : 8.45 -pb_10c : 8.40 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.47 -pb_1c : 8.47 -pb_5c : 8.45 -pb_10c : 8.40 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.48 -pb_1c : 8.48 -pb_5c : 8.45 -pb_10c : 8.40 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.49 -pb_1c : 8.49 -pb_5c : 8.45 -pb_10c : 8.40 -pb_25c : 8.25 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.50 -pb_1c : 8.50 -pb_5c : 8.50 -pb_10c : 8.50 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.51 -pb_1c : 8.51 -pb_5c : 8.50 -pb_10c : 8.50 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.52 -pb_1c : 8.52 -pb_5c : 8.50 -pb_10c : 8.50 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.53 -pb_1c : 8.53 -pb_5c : 8.50 -pb_10c : 8.50 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.54 -pb_1c : 8.54 -pb_5c : 8.50 -pb_10c : 8.50 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.55 -pb_1c : 8.55 -pb_5c : 8.55 -pb_10c : 8.50 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.56 -pb_1c : 8.56 -pb_5c : 8.55 -pb_10c : 8.50 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.57 -pb_1c : 8.57 -pb_5c : 8.55 -pb_10c : 8.50 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.58 -pb_1c : 8.58 -pb_5c : 8.55 -pb_10c : 8.50 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.59 -pb_1c : 8.59 -pb_5c : 8.55 -pb_10c : 8.50 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.60 -pb_1c : 8.60 -pb_5c : 8.60 -pb_10c : 8.60 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.61 -pb_1c : 8.61 -pb_5c : 8.60 -pb_10c : 8.60 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.62 -pb_1c : 8.62 -pb_5c : 8.60 -pb_10c : 8.60 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.63 -pb_1c : 8.63 -pb_5c : 8.60 -pb_10c : 8.60 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.64 -pb_1c : 8.64 -pb_5c : 8.60 -pb_10c : 8.60 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.65 -pb_1c : 8.65 -pb_5c : 8.65 -pb_10c : 8.60 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.66 -pb_1c : 8.66 -pb_5c : 8.65 -pb_10c : 8.60 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.67 -pb_1c : 8.67 -pb_5c : 8.65 -pb_10c : 8.60 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.68 -pb_1c : 8.68 -pb_5c : 8.65 -pb_10c : 8.60 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.69 -pb_1c : 8.69 -pb_5c : 8.65 -pb_10c : 8.60 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.70 -pb_1c : 8.70 -pb_5c : 8.70 -pb_10c : 8.70 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.71 -pb_1c : 8.71 -pb_5c : 8.70 -pb_10c : 8.70 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.72 -pb_1c : 8.72 -pb_5c : 8.70 -pb_10c : 8.70 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.73 -pb_1c : 8.73 -pb_5c : 8.70 -pb_10c : 8.70 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.74 -pb_1c : 8.74 -pb_5c : 8.70 -pb_10c : 8.70 -pb_25c : 8.50 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.75 -pb_1c : 8.75 -pb_5c : 8.75 -pb_10c : 8.70 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.76 -pb_1c : 8.76 -pb_5c : 8.75 -pb_10c : 8.70 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.77 -pb_1c : 8.77 -pb_5c : 8.75 -pb_10c : 8.70 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.78 -pb_1c : 8.78 -pb_5c : 8.75 -pb_10c : 8.70 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.79 -pb_1c : 8.79 -pb_5c : 8.75 -pb_10c : 8.70 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.80 -pb_1c : 8.80 -pb_5c : 8.80 -pb_10c : 8.80 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.81 -pb_1c : 8.81 -pb_5c : 8.80 -pb_10c : 8.80 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.82 -pb_1c : 8.82 -pb_5c : 8.80 -pb_10c : 8.80 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.83 -pb_1c : 8.83 -pb_5c : 8.80 -pb_10c : 8.80 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.84 -pb_1c : 8.84 -pb_5c : 8.80 -pb_10c : 8.80 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.85 -pb_1c : 8.85 -pb_5c : 8.85 -pb_10c : 8.80 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.86 -pb_1c : 8.86 -pb_5c : 8.85 -pb_10c : 8.80 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.87 -pb_1c : 8.87 -pb_5c : 8.85 -pb_10c : 8.80 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.88 -pb_1c : 8.88 -pb_5c : 8.85 -pb_10c : 8.80 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.89 -pb_1c : 8.89 -pb_5c : 8.85 -pb_10c : 8.80 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.90 -pb_1c : 8.90 -pb_5c : 8.90 -pb_10c : 8.90 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.91 -pb_1c : 8.91 -pb_5c : 8.90 -pb_10c : 8.90 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.92 -pb_1c : 8.92 -pb_5c : 8.90 -pb_10c : 8.90 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.93 -pb_1c : 8.93 -pb_5c : 8.90 -pb_10c : 8.90 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.94 -pb_1c : 8.94 -pb_5c : 8.90 -pb_10c : 8.90 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.95 -pb_1c : 8.95 -pb_5c : 8.95 -pb_10c : 8.90 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.96 -pb_1c : 8.96 -pb_5c : 8.95 -pb_10c : 8.90 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.97 -pb_1c : 8.97 -pb_5c : 8.95 -pb_10c : 8.90 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.98 -pb_1c : 8.98 -pb_5c : 8.95 -pb_10c : 8.90 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -8.99 -pb_1c : 8.99 -pb_5c : 8.95 -pb_10c : 8.90 -pb_25c : 8.75 -pb_1d : 8.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.00 -pb_1c : 9.00 -pb_5c : 9.00 -pb_10c : 9.00 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.01 -pb_1c : 9.01 -pb_5c : 9.00 -pb_10c : 9.00 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.02 -pb_1c : 9.02 -pb_5c : 9.00 -pb_10c : 9.00 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.03 -pb_1c : 9.03 -pb_5c : 9.00 -pb_10c : 9.00 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.04 -pb_1c : 9.04 -pb_5c : 9.00 -pb_10c : 9.00 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.05 -pb_1c : 9.05 -pb_5c : 9.05 -pb_10c : 9.00 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.06 -pb_1c : 9.06 -pb_5c : 9.05 -pb_10c : 9.00 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.07 -pb_1c : 9.07 -pb_5c : 9.05 -pb_10c : 9.00 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.08 -pb_1c : 9.08 -pb_5c : 9.05 -pb_10c : 9.00 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.09 -pb_1c : 9.09 -pb_5c : 9.05 -pb_10c : 9.00 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.10 -pb_1c : 9.10 -pb_5c : 9.10 -pb_10c : 9.10 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.11 -pb_1c : 9.11 -pb_5c : 9.10 -pb_10c : 9.10 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.12 -pb_1c : 9.12 -pb_5c : 9.10 -pb_10c : 9.10 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.13 -pb_1c : 9.13 -pb_5c : 9.10 -pb_10c : 9.10 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.14 -pb_1c : 9.14 -pb_5c : 9.10 -pb_10c : 9.10 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.15 -pb_1c : 9.15 -pb_5c : 9.15 -pb_10c : 9.10 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.16 -pb_1c : 9.16 -pb_5c : 9.15 -pb_10c : 9.10 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.17 -pb_1c : 9.17 -pb_5c : 9.15 -pb_10c : 9.10 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.18 -pb_1c : 9.18 -pb_5c : 9.15 -pb_10c : 9.10 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.19 -pb_1c : 9.19 -pb_5c : 9.15 -pb_10c : 9.10 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.20 -pb_1c : 9.20 -pb_5c : 9.20 -pb_10c : 9.20 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.21 -pb_1c : 9.21 -pb_5c : 9.20 -pb_10c : 9.20 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.22 -pb_1c : 9.22 -pb_5c : 9.20 -pb_10c : 9.20 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.23 -pb_1c : 9.23 -pb_5c : 9.20 -pb_10c : 9.20 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.24 -pb_1c : 9.24 -pb_5c : 9.20 -pb_10c : 9.20 -pb_25c : 9.00 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.25 -pb_1c : 9.25 -pb_5c : 9.25 -pb_10c : 9.20 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.26 -pb_1c : 9.26 -pb_5c : 9.25 -pb_10c : 9.20 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.27 -pb_1c : 9.27 -pb_5c : 9.25 -pb_10c : 9.20 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.28 -pb_1c : 9.28 -pb_5c : 9.25 -pb_10c : 9.20 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.29 -pb_1c : 9.29 -pb_5c : 9.25 -pb_10c : 9.20 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.30 -pb_1c : 9.30 -pb_5c : 9.30 -pb_10c : 9.30 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.31 -pb_1c : 9.31 -pb_5c : 9.30 -pb_10c : 9.30 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.32 -pb_1c : 9.32 -pb_5c : 9.30 -pb_10c : 9.30 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.33 -pb_1c : 9.33 -pb_5c : 9.30 -pb_10c : 9.30 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.34 -pb_1c : 9.34 -pb_5c : 9.30 -pb_10c : 9.30 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.35 -pb_1c : 9.35 -pb_5c : 9.35 -pb_10c : 9.30 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.36 -pb_1c : 9.36 -pb_5c : 9.35 -pb_10c : 9.30 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.37 -pb_1c : 9.37 -pb_5c : 9.35 -pb_10c : 9.30 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.38 -pb_1c : 9.38 -pb_5c : 9.35 -pb_10c : 9.30 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.39 -pb_1c : 9.39 -pb_5c : 9.35 -pb_10c : 9.30 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.40 -pb_1c : 9.40 -pb_5c : 9.40 -pb_10c : 9.40 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.41 -pb_1c : 9.41 -pb_5c : 9.40 -pb_10c : 9.40 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.42 -pb_1c : 9.42 -pb_5c : 9.40 -pb_10c : 9.40 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.43 -pb_1c : 9.43 -pb_5c : 9.40 -pb_10c : 9.40 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.44 -pb_1c : 9.44 -pb_5c : 9.40 -pb_10c : 9.40 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.45 -pb_1c : 9.45 -pb_5c : 9.45 -pb_10c : 9.40 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.46 -pb_1c : 9.46 -pb_5c : 9.45 -pb_10c : 9.40 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.47 -pb_1c : 9.47 -pb_5c : 9.45 -pb_10c : 9.40 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.48 -pb_1c : 9.48 -pb_5c : 9.45 -pb_10c : 9.40 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.49 -pb_1c : 9.49 -pb_5c : 9.45 -pb_10c : 9.40 -pb_25c : 9.25 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.50 -pb_1c : 9.50 -pb_5c : 9.50 -pb_10c : 9.50 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.51 -pb_1c : 9.51 -pb_5c : 9.50 -pb_10c : 9.50 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.52 -pb_1c : 9.52 -pb_5c : 9.50 -pb_10c : 9.50 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.53 -pb_1c : 9.53 -pb_5c : 9.50 -pb_10c : 9.50 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.54 -pb_1c : 9.54 -pb_5c : 9.50 -pb_10c : 9.50 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.55 -pb_1c : 9.55 -pb_5c : 9.55 -pb_10c : 9.50 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.56 -pb_1c : 9.56 -pb_5c : 9.55 -pb_10c : 9.50 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.57 -pb_1c : 9.57 -pb_5c : 9.55 -pb_10c : 9.50 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.58 -pb_1c : 9.58 -pb_5c : 9.55 -pb_10c : 9.50 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.59 -pb_1c : 9.59 -pb_5c : 9.55 -pb_10c : 9.50 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.60 -pb_1c : 9.60 -pb_5c : 9.60 -pb_10c : 9.60 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.61 -pb_1c : 9.61 -pb_5c : 9.60 -pb_10c : 9.60 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.62 -pb_1c : 9.62 -pb_5c : 9.60 -pb_10c : 9.60 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.63 -pb_1c : 9.63 -pb_5c : 9.60 -pb_10c : 9.60 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.64 -pb_1c : 9.64 -pb_5c : 9.60 -pb_10c : 9.60 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.65 -pb_1c : 9.65 -pb_5c : 9.65 -pb_10c : 9.60 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.66 -pb_1c : 9.66 -pb_5c : 9.65 -pb_10c : 9.60 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.67 -pb_1c : 9.67 -pb_5c : 9.65 -pb_10c : 9.60 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.68 -pb_1c : 9.68 -pb_5c : 9.65 -pb_10c : 9.60 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.69 -pb_1c : 9.69 -pb_5c : 9.65 -pb_10c : 9.60 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.70 -pb_1c : 9.70 -pb_5c : 9.70 -pb_10c : 9.70 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.71 -pb_1c : 9.71 -pb_5c : 9.70 -pb_10c : 9.70 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.72 -pb_1c : 9.72 -pb_5c : 9.70 -pb_10c : 9.70 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.73 -pb_1c : 9.73 -pb_5c : 9.70 -pb_10c : 9.70 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.74 -pb_1c : 9.74 -pb_5c : 9.70 -pb_10c : 9.70 -pb_25c : 9.50 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.75 -pb_1c : 9.75 -pb_5c : 9.75 -pb_10c : 9.70 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.76 -pb_1c : 9.76 -pb_5c : 9.75 -pb_10c : 9.70 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.77 -pb_1c : 9.77 -pb_5c : 9.75 -pb_10c : 9.70 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.78 -pb_1c : 9.78 -pb_5c : 9.75 -pb_10c : 9.70 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.79 -pb_1c : 9.79 -pb_5c : 9.75 -pb_10c : 9.70 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.80 -pb_1c : 9.80 -pb_5c : 9.80 -pb_10c : 9.80 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.81 -pb_1c : 9.81 -pb_5c : 9.80 -pb_10c : 9.80 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.82 -pb_1c : 9.82 -pb_5c : 9.80 -pb_10c : 9.80 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.83 -pb_1c : 9.83 -pb_5c : 9.80 -pb_10c : 9.80 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.84 -pb_1c : 9.84 -pb_5c : 9.80 -pb_10c : 9.80 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.85 -pb_1c : 9.85 -pb_5c : 9.85 -pb_10c : 9.80 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.86 -pb_1c : 9.86 -pb_5c : 9.85 -pb_10c : 9.80 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.87 -pb_1c : 9.87 -pb_5c : 9.85 -pb_10c : 9.80 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.88 -pb_1c : 9.88 -pb_5c : 9.85 -pb_10c : 9.80 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.89 -pb_1c : 9.89 -pb_5c : 9.85 -pb_10c : 9.80 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.90 -pb_1c : 9.90 -pb_5c : 9.90 -pb_10c : 9.90 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.91 -pb_1c : 9.91 -pb_5c : 9.90 -pb_10c : 9.90 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.92 -pb_1c : 9.92 -pb_5c : 9.90 -pb_10c : 9.90 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.93 -pb_1c : 9.93 -pb_5c : 9.90 -pb_10c : 9.90 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.94 -pb_1c : 9.94 -pb_5c : 9.90 -pb_10c : 9.90 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.95 -pb_1c : 9.95 -pb_5c : 9.95 -pb_10c : 9.90 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.96 -pb_1c : 9.96 -pb_5c : 9.95 -pb_10c : 9.90 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.97 -pb_1c : 9.97 -pb_5c : 9.95 -pb_10c : 9.90 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.98 -pb_1c : 9.98 -pb_5c : 9.95 -pb_10c : 9.90 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -9.99 -pb_1c : 9.99 -pb_5c : 9.95 -pb_10c : 9.90 -pb_25c : 9.75 -pb_1d : 9.00 -pb_5d : 5.00 -pb_10d : 0.00 - -10.00 -pb_1c : 10.00 -pb_5c : 10.00 -pb_10c : 10.00 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.01 -pb_1c : 10.01 -pb_5c : 10.00 -pb_10c : 10.00 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.02 -pb_1c : 10.02 -pb_5c : 10.00 -pb_10c : 10.00 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.03 -pb_1c : 10.03 -pb_5c : 10.00 -pb_10c : 10.00 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.04 -pb_1c : 10.04 -pb_5c : 10.00 -pb_10c : 10.00 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.05 -pb_1c : 10.05 -pb_5c : 10.05 -pb_10c : 10.00 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.06 -pb_1c : 10.06 -pb_5c : 10.05 -pb_10c : 10.00 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.07 -pb_1c : 10.07 -pb_5c : 10.05 -pb_10c : 10.00 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.08 -pb_1c : 10.08 -pb_5c : 10.05 -pb_10c : 10.00 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.09 -pb_1c : 10.09 -pb_5c : 10.05 -pb_10c : 10.00 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.10 -pb_1c : 10.10 -pb_5c : 10.10 -pb_10c : 10.10 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.11 -pb_1c : 10.11 -pb_5c : 10.10 -pb_10c : 10.10 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.12 -pb_1c : 10.12 -pb_5c : 10.10 -pb_10c : 10.10 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.13 -pb_1c : 10.13 -pb_5c : 10.10 -pb_10c : 10.10 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.14 -pb_1c : 10.14 -pb_5c : 10.10 -pb_10c : 10.10 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.15 -pb_1c : 10.15 -pb_5c : 10.15 -pb_10c : 10.10 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.16 -pb_1c : 10.16 -pb_5c : 10.15 -pb_10c : 10.10 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.17 -pb_1c : 10.17 -pb_5c : 10.15 -pb_10c : 10.10 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.18 -pb_1c : 10.18 -pb_5c : 10.15 -pb_10c : 10.10 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.19 -pb_1c : 10.19 -pb_5c : 10.15 -pb_10c : 10.10 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.20 -pb_1c : 10.20 -pb_5c : 10.20 -pb_10c : 10.20 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.21 -pb_1c : 10.21 -pb_5c : 10.20 -pb_10c : 10.20 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.22 -pb_1c : 10.22 -pb_5c : 10.20 -pb_10c : 10.20 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.23 -pb_1c : 10.23 -pb_5c : 10.20 -pb_10c : 10.20 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.24 -pb_1c : 10.24 -pb_5c : 10.20 -pb_10c : 10.20 -pb_25c : 10.00 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.25 -pb_1c : 10.25 -pb_5c : 10.25 -pb_10c : 10.20 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.26 -pb_1c : 10.26 -pb_5c : 10.25 -pb_10c : 10.20 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.27 -pb_1c : 10.27 -pb_5c : 10.25 -pb_10c : 10.20 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.28 -pb_1c : 10.28 -pb_5c : 10.25 -pb_10c : 10.20 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.29 -pb_1c : 10.29 -pb_5c : 10.25 -pb_10c : 10.20 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.30 -pb_1c : 10.30 -pb_5c : 10.30 -pb_10c : 10.30 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.31 -pb_1c : 10.31 -pb_5c : 10.30 -pb_10c : 10.30 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.32 -pb_1c : 10.32 -pb_5c : 10.30 -pb_10c : 10.30 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.33 -pb_1c : 10.33 -pb_5c : 10.30 -pb_10c : 10.30 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.34 -pb_1c : 10.34 -pb_5c : 10.30 -pb_10c : 10.30 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.35 -pb_1c : 10.35 -pb_5c : 10.35 -pb_10c : 10.30 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.36 -pb_1c : 10.36 -pb_5c : 10.35 -pb_10c : 10.30 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.37 -pb_1c : 10.37 -pb_5c : 10.35 -pb_10c : 10.30 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.38 -pb_1c : 10.38 -pb_5c : 10.35 -pb_10c : 10.30 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.39 -pb_1c : 10.39 -pb_5c : 10.35 -pb_10c : 10.30 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.40 -pb_1c : 10.40 -pb_5c : 10.40 -pb_10c : 10.40 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.41 -pb_1c : 10.41 -pb_5c : 10.40 -pb_10c : 10.40 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.42 -pb_1c : 10.42 -pb_5c : 10.40 -pb_10c : 10.40 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.43 -pb_1c : 10.43 -pb_5c : 10.40 -pb_10c : 10.40 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.44 -pb_1c : 10.44 -pb_5c : 10.40 -pb_10c : 10.40 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.45 -pb_1c : 10.45 -pb_5c : 10.45 -pb_10c : 10.40 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.46 -pb_1c : 10.46 -pb_5c : 10.45 -pb_10c : 10.40 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.47 -pb_1c : 10.47 -pb_5c : 10.45 -pb_10c : 10.40 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.48 -pb_1c : 10.48 -pb_5c : 10.45 -pb_10c : 10.40 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.49 -pb_1c : 10.49 -pb_5c : 10.45 -pb_10c : 10.40 -pb_25c : 10.25 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.50 -pb_1c : 10.50 -pb_5c : 10.50 -pb_10c : 10.50 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.51 -pb_1c : 10.51 -pb_5c : 10.50 -pb_10c : 10.50 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.52 -pb_1c : 10.52 -pb_5c : 10.50 -pb_10c : 10.50 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.53 -pb_1c : 10.53 -pb_5c : 10.50 -pb_10c : 10.50 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.54 -pb_1c : 10.54 -pb_5c : 10.50 -pb_10c : 10.50 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.55 -pb_1c : 10.55 -pb_5c : 10.55 -pb_10c : 10.50 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.56 -pb_1c : 10.56 -pb_5c : 10.55 -pb_10c : 10.50 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.57 -pb_1c : 10.57 -pb_5c : 10.55 -pb_10c : 10.50 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.58 -pb_1c : 10.58 -pb_5c : 10.55 -pb_10c : 10.50 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.59 -pb_1c : 10.59 -pb_5c : 10.55 -pb_10c : 10.50 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.60 -pb_1c : 10.60 -pb_5c : 10.60 -pb_10c : 10.60 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.61 -pb_1c : 10.61 -pb_5c : 10.60 -pb_10c : 10.60 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.62 -pb_1c : 10.62 -pb_5c : 10.60 -pb_10c : 10.60 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.63 -pb_1c : 10.63 -pb_5c : 10.60 -pb_10c : 10.60 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.64 -pb_1c : 10.64 -pb_5c : 10.60 -pb_10c : 10.60 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.65 -pb_1c : 10.65 -pb_5c : 10.65 -pb_10c : 10.60 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.66 -pb_1c : 10.66 -pb_5c : 10.65 -pb_10c : 10.60 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.67 -pb_1c : 10.67 -pb_5c : 10.65 -pb_10c : 10.60 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.68 -pb_1c : 10.68 -pb_5c : 10.65 -pb_10c : 10.60 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.69 -pb_1c : 10.69 -pb_5c : 10.65 -pb_10c : 10.60 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.70 -pb_1c : 10.70 -pb_5c : 10.70 -pb_10c : 10.70 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.71 -pb_1c : 10.71 -pb_5c : 10.70 -pb_10c : 10.70 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.72 -pb_1c : 10.72 -pb_5c : 10.70 -pb_10c : 10.70 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.73 -pb_1c : 10.73 -pb_5c : 10.70 -pb_10c : 10.70 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.74 -pb_1c : 10.74 -pb_5c : 10.70 -pb_10c : 10.70 -pb_25c : 10.50 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.75 -pb_1c : 10.75 -pb_5c : 10.75 -pb_10c : 10.70 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.76 -pb_1c : 10.76 -pb_5c : 10.75 -pb_10c : 10.70 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.77 -pb_1c : 10.77 -pb_5c : 10.75 -pb_10c : 10.70 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.78 -pb_1c : 10.78 -pb_5c : 10.75 -pb_10c : 10.70 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.79 -pb_1c : 10.79 -pb_5c : 10.75 -pb_10c : 10.70 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.80 -pb_1c : 10.80 -pb_5c : 10.80 -pb_10c : 10.80 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.81 -pb_1c : 10.81 -pb_5c : 10.80 -pb_10c : 10.80 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.82 -pb_1c : 10.82 -pb_5c : 10.80 -pb_10c : 10.80 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.83 -pb_1c : 10.83 -pb_5c : 10.80 -pb_10c : 10.80 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.84 -pb_1c : 10.84 -pb_5c : 10.80 -pb_10c : 10.80 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.85 -pb_1c : 10.85 -pb_5c : 10.85 -pb_10c : 10.80 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.86 -pb_1c : 10.86 -pb_5c : 10.85 -pb_10c : 10.80 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.87 -pb_1c : 10.87 -pb_5c : 10.85 -pb_10c : 10.80 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.88 -pb_1c : 10.88 -pb_5c : 10.85 -pb_10c : 10.80 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.89 -pb_1c : 10.89 -pb_5c : 10.85 -pb_10c : 10.80 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.90 -pb_1c : 10.90 -pb_5c : 10.90 -pb_10c : 10.90 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.91 -pb_1c : 10.91 -pb_5c : 10.90 -pb_10c : 10.90 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.92 -pb_1c : 10.92 -pb_5c : 10.90 -pb_10c : 10.90 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.93 -pb_1c : 10.93 -pb_5c : 10.90 -pb_10c : 10.90 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.94 -pb_1c : 10.94 -pb_5c : 10.90 -pb_10c : 10.90 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.95 -pb_1c : 10.95 -pb_5c : 10.95 -pb_10c : 10.90 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.96 -pb_1c : 10.96 -pb_5c : 10.95 -pb_10c : 10.90 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.97 -pb_1c : 10.97 -pb_5c : 10.95 -pb_10c : 10.90 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.98 -pb_1c : 10.98 -pb_5c : 10.95 -pb_10c : 10.90 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -10.99 -pb_1c : 10.99 -pb_5c : 10.95 -pb_10c : 10.90 -pb_25c : 10.75 -pb_1d : 10.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.00 -pb_1c : 11.00 -pb_5c : 11.00 -pb_10c : 11.00 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.01 -pb_1c : 11.01 -pb_5c : 11.00 -pb_10c : 11.00 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.02 -pb_1c : 11.02 -pb_5c : 11.00 -pb_10c : 11.00 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.03 -pb_1c : 11.03 -pb_5c : 11.00 -pb_10c : 11.00 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.04 -pb_1c : 11.04 -pb_5c : 11.00 -pb_10c : 11.00 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.05 -pb_1c : 11.05 -pb_5c : 11.05 -pb_10c : 11.00 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.06 -pb_1c : 11.06 -pb_5c : 11.05 -pb_10c : 11.00 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.07 -pb_1c : 11.07 -pb_5c : 11.05 -pb_10c : 11.00 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.08 -pb_1c : 11.08 -pb_5c : 11.05 -pb_10c : 11.00 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.09 -pb_1c : 11.09 -pb_5c : 11.05 -pb_10c : 11.00 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.10 -pb_1c : 11.10 -pb_5c : 11.10 -pb_10c : 11.10 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.11 -pb_1c : 11.11 -pb_5c : 11.10 -pb_10c : 11.10 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.12 -pb_1c : 11.12 -pb_5c : 11.10 -pb_10c : 11.10 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.13 -pb_1c : 11.13 -pb_5c : 11.10 -pb_10c : 11.10 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.14 -pb_1c : 11.14 -pb_5c : 11.10 -pb_10c : 11.10 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.15 -pb_1c : 11.15 -pb_5c : 11.15 -pb_10c : 11.10 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.16 -pb_1c : 11.16 -pb_5c : 11.15 -pb_10c : 11.10 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.17 -pb_1c : 11.17 -pb_5c : 11.15 -pb_10c : 11.10 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.18 -pb_1c : 11.18 -pb_5c : 11.15 -pb_10c : 11.10 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.19 -pb_1c : 11.19 -pb_5c : 11.15 -pb_10c : 11.10 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.20 -pb_1c : 11.20 -pb_5c : 11.20 -pb_10c : 11.20 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.21 -pb_1c : 11.21 -pb_5c : 11.20 -pb_10c : 11.20 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.22 -pb_1c : 11.22 -pb_5c : 11.20 -pb_10c : 11.20 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.23 -pb_1c : 11.23 -pb_5c : 11.20 -pb_10c : 11.20 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.24 -pb_1c : 11.24 -pb_5c : 11.20 -pb_10c : 11.20 -pb_25c : 11.00 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.25 -pb_1c : 11.25 -pb_5c : 11.25 -pb_10c : 11.20 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.26 -pb_1c : 11.26 -pb_5c : 11.25 -pb_10c : 11.20 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.27 -pb_1c : 11.27 -pb_5c : 11.25 -pb_10c : 11.20 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.28 -pb_1c : 11.28 -pb_5c : 11.25 -pb_10c : 11.20 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.29 -pb_1c : 11.29 -pb_5c : 11.25 -pb_10c : 11.20 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.30 -pb_1c : 11.30 -pb_5c : 11.30 -pb_10c : 11.30 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.31 -pb_1c : 11.31 -pb_5c : 11.30 -pb_10c : 11.30 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.32 -pb_1c : 11.32 -pb_5c : 11.30 -pb_10c : 11.30 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.33 -pb_1c : 11.33 -pb_5c : 11.30 -pb_10c : 11.30 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.34 -pb_1c : 11.34 -pb_5c : 11.30 -pb_10c : 11.30 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.35 -pb_1c : 11.35 -pb_5c : 11.35 -pb_10c : 11.30 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.36 -pb_1c : 11.36 -pb_5c : 11.35 -pb_10c : 11.30 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.37 -pb_1c : 11.37 -pb_5c : 11.35 -pb_10c : 11.30 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.38 -pb_1c : 11.38 -pb_5c : 11.35 -pb_10c : 11.30 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.39 -pb_1c : 11.39 -pb_5c : 11.35 -pb_10c : 11.30 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.40 -pb_1c : 11.40 -pb_5c : 11.40 -pb_10c : 11.40 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.41 -pb_1c : 11.41 -pb_5c : 11.40 -pb_10c : 11.40 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.42 -pb_1c : 11.42 -pb_5c : 11.40 -pb_10c : 11.40 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.43 -pb_1c : 11.43 -pb_5c : 11.40 -pb_10c : 11.40 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.44 -pb_1c : 11.44 -pb_5c : 11.40 -pb_10c : 11.40 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.45 -pb_1c : 11.45 -pb_5c : 11.45 -pb_10c : 11.40 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.46 -pb_1c : 11.46 -pb_5c : 11.45 -pb_10c : 11.40 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.47 -pb_1c : 11.47 -pb_5c : 11.45 -pb_10c : 11.40 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.48 -pb_1c : 11.48 -pb_5c : 11.45 -pb_10c : 11.40 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.49 -pb_1c : 11.49 -pb_5c : 11.45 -pb_10c : 11.40 -pb_25c : 11.25 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.50 -pb_1c : 11.50 -pb_5c : 11.50 -pb_10c : 11.50 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.51 -pb_1c : 11.51 -pb_5c : 11.50 -pb_10c : 11.50 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.52 -pb_1c : 11.52 -pb_5c : 11.50 -pb_10c : 11.50 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.53 -pb_1c : 11.53 -pb_5c : 11.50 -pb_10c : 11.50 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.54 -pb_1c : 11.54 -pb_5c : 11.50 -pb_10c : 11.50 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.55 -pb_1c : 11.55 -pb_5c : 11.55 -pb_10c : 11.50 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.56 -pb_1c : 11.56 -pb_5c : 11.55 -pb_10c : 11.50 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.57 -pb_1c : 11.57 -pb_5c : 11.55 -pb_10c : 11.50 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.58 -pb_1c : 11.58 -pb_5c : 11.55 -pb_10c : 11.50 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.59 -pb_1c : 11.59 -pb_5c : 11.55 -pb_10c : 11.50 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.60 -pb_1c : 11.60 -pb_5c : 11.60 -pb_10c : 11.60 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.61 -pb_1c : 11.61 -pb_5c : 11.60 -pb_10c : 11.60 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.62 -pb_1c : 11.62 -pb_5c : 11.60 -pb_10c : 11.60 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.63 -pb_1c : 11.63 -pb_5c : 11.60 -pb_10c : 11.60 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.64 -pb_1c : 11.64 -pb_5c : 11.60 -pb_10c : 11.60 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.65 -pb_1c : 11.65 -pb_5c : 11.65 -pb_10c : 11.60 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.66 -pb_1c : 11.66 -pb_5c : 11.65 -pb_10c : 11.60 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.67 -pb_1c : 11.67 -pb_5c : 11.65 -pb_10c : 11.60 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.68 -pb_1c : 11.68 -pb_5c : 11.65 -pb_10c : 11.60 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.69 -pb_1c : 11.69 -pb_5c : 11.65 -pb_10c : 11.60 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.70 -pb_1c : 11.70 -pb_5c : 11.70 -pb_10c : 11.70 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.71 -pb_1c : 11.71 -pb_5c : 11.70 -pb_10c : 11.70 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.72 -pb_1c : 11.72 -pb_5c : 11.70 -pb_10c : 11.70 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.73 -pb_1c : 11.73 -pb_5c : 11.70 -pb_10c : 11.70 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.74 -pb_1c : 11.74 -pb_5c : 11.70 -pb_10c : 11.70 -pb_25c : 11.50 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.75 -pb_1c : 11.75 -pb_5c : 11.75 -pb_10c : 11.70 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.76 -pb_1c : 11.76 -pb_5c : 11.75 -pb_10c : 11.70 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.77 -pb_1c : 11.77 -pb_5c : 11.75 -pb_10c : 11.70 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.78 -pb_1c : 11.78 -pb_5c : 11.75 -pb_10c : 11.70 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.79 -pb_1c : 11.79 -pb_5c : 11.75 -pb_10c : 11.70 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.80 -pb_1c : 11.80 -pb_5c : 11.80 -pb_10c : 11.80 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.81 -pb_1c : 11.81 -pb_5c : 11.80 -pb_10c : 11.80 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.82 -pb_1c : 11.82 -pb_5c : 11.80 -pb_10c : 11.80 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.83 -pb_1c : 11.83 -pb_5c : 11.80 -pb_10c : 11.80 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.84 -pb_1c : 11.84 -pb_5c : 11.80 -pb_10c : 11.80 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.85 -pb_1c : 11.85 -pb_5c : 11.85 -pb_10c : 11.80 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.86 -pb_1c : 11.86 -pb_5c : 11.85 -pb_10c : 11.80 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.87 -pb_1c : 11.87 -pb_5c : 11.85 -pb_10c : 11.80 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.88 -pb_1c : 11.88 -pb_5c : 11.85 -pb_10c : 11.80 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.89 -pb_1c : 11.89 -pb_5c : 11.85 -pb_10c : 11.80 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.90 -pb_1c : 11.90 -pb_5c : 11.90 -pb_10c : 11.90 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.91 -pb_1c : 11.91 -pb_5c : 11.90 -pb_10c : 11.90 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.92 -pb_1c : 11.92 -pb_5c : 11.90 -pb_10c : 11.90 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.93 -pb_1c : 11.93 -pb_5c : 11.90 -pb_10c : 11.90 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.94 -pb_1c : 11.94 -pb_5c : 11.90 -pb_10c : 11.90 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.95 -pb_1c : 11.95 -pb_5c : 11.95 -pb_10c : 11.90 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.96 -pb_1c : 11.96 -pb_5c : 11.95 -pb_10c : 11.90 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.97 -pb_1c : 11.97 -pb_5c : 11.95 -pb_10c : 11.90 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.98 -pb_1c : 11.98 -pb_5c : 11.95 -pb_10c : 11.90 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -11.99 -pb_1c : 11.99 -pb_5c : 11.95 -pb_10c : 11.90 -pb_25c : 11.75 -pb_1d : 11.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.00 -pb_1c : 12.00 -pb_5c : 12.00 -pb_10c : 12.00 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.01 -pb_1c : 12.01 -pb_5c : 12.00 -pb_10c : 12.00 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.02 -pb_1c : 12.02 -pb_5c : 12.00 -pb_10c : 12.00 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.03 -pb_1c : 12.03 -pb_5c : 12.00 -pb_10c : 12.00 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.04 -pb_1c : 12.04 -pb_5c : 12.00 -pb_10c : 12.00 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.05 -pb_1c : 12.05 -pb_5c : 12.05 -pb_10c : 12.00 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.06 -pb_1c : 12.06 -pb_5c : 12.05 -pb_10c : 12.00 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.07 -pb_1c : 12.07 -pb_5c : 12.05 -pb_10c : 12.00 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.08 -pb_1c : 12.08 -pb_5c : 12.05 -pb_10c : 12.00 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.09 -pb_1c : 12.09 -pb_5c : 12.05 -pb_10c : 12.00 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.10 -pb_1c : 12.10 -pb_5c : 12.10 -pb_10c : 12.10 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.11 -pb_1c : 12.11 -pb_5c : 12.10 -pb_10c : 12.10 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.12 -pb_1c : 12.12 -pb_5c : 12.10 -pb_10c : 12.10 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.13 -pb_1c : 12.13 -pb_5c : 12.10 -pb_10c : 12.10 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.14 -pb_1c : 12.14 -pb_5c : 12.10 -pb_10c : 12.10 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.15 -pb_1c : 12.15 -pb_5c : 12.15 -pb_10c : 12.10 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.16 -pb_1c : 12.16 -pb_5c : 12.15 -pb_10c : 12.10 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.17 -pb_1c : 12.17 -pb_5c : 12.15 -pb_10c : 12.10 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.18 -pb_1c : 12.18 -pb_5c : 12.15 -pb_10c : 12.10 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.19 -pb_1c : 12.19 -pb_5c : 12.15 -pb_10c : 12.10 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.20 -pb_1c : 12.20 -pb_5c : 12.20 -pb_10c : 12.20 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.21 -pb_1c : 12.21 -pb_5c : 12.20 -pb_10c : 12.20 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.22 -pb_1c : 12.22 -pb_5c : 12.20 -pb_10c : 12.20 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.23 -pb_1c : 12.23 -pb_5c : 12.20 -pb_10c : 12.20 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.24 -pb_1c : 12.24 -pb_5c : 12.20 -pb_10c : 12.20 -pb_25c : 12.00 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.25 -pb_1c : 12.25 -pb_5c : 12.25 -pb_10c : 12.20 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.26 -pb_1c : 12.26 -pb_5c : 12.25 -pb_10c : 12.20 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.27 -pb_1c : 12.27 -pb_5c : 12.25 -pb_10c : 12.20 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.28 -pb_1c : 12.28 -pb_5c : 12.25 -pb_10c : 12.20 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.29 -pb_1c : 12.29 -pb_5c : 12.25 -pb_10c : 12.20 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.30 -pb_1c : 12.30 -pb_5c : 12.30 -pb_10c : 12.30 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.31 -pb_1c : 12.31 -pb_5c : 12.30 -pb_10c : 12.30 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.32 -pb_1c : 12.32 -pb_5c : 12.30 -pb_10c : 12.30 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.33 -pb_1c : 12.33 -pb_5c : 12.30 -pb_10c : 12.30 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.34 -pb_1c : 12.34 -pb_5c : 12.30 -pb_10c : 12.30 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.35 -pb_1c : 12.35 -pb_5c : 12.35 -pb_10c : 12.30 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.36 -pb_1c : 12.36 -pb_5c : 12.35 -pb_10c : 12.30 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.37 -pb_1c : 12.37 -pb_5c : 12.35 -pb_10c : 12.30 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.38 -pb_1c : 12.38 -pb_5c : 12.35 -pb_10c : 12.30 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.39 -pb_1c : 12.39 -pb_5c : 12.35 -pb_10c : 12.30 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.40 -pb_1c : 12.40 -pb_5c : 12.40 -pb_10c : 12.40 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.41 -pb_1c : 12.41 -pb_5c : 12.40 -pb_10c : 12.40 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.42 -pb_1c : 12.42 -pb_5c : 12.40 -pb_10c : 12.40 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.43 -pb_1c : 12.43 -pb_5c : 12.40 -pb_10c : 12.40 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.44 -pb_1c : 12.44 -pb_5c : 12.40 -pb_10c : 12.40 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.45 -pb_1c : 12.45 -pb_5c : 12.45 -pb_10c : 12.40 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.46 -pb_1c : 12.46 -pb_5c : 12.45 -pb_10c : 12.40 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.47 -pb_1c : 12.47 -pb_5c : 12.45 -pb_10c : 12.40 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.48 -pb_1c : 12.48 -pb_5c : 12.45 -pb_10c : 12.40 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.49 -pb_1c : 12.49 -pb_5c : 12.45 -pb_10c : 12.40 -pb_25c : 12.25 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.50 -pb_1c : 12.50 -pb_5c : 12.50 -pb_10c : 12.50 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.51 -pb_1c : 12.51 -pb_5c : 12.50 -pb_10c : 12.50 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.52 -pb_1c : 12.52 -pb_5c : 12.50 -pb_10c : 12.50 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.53 -pb_1c : 12.53 -pb_5c : 12.50 -pb_10c : 12.50 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.54 -pb_1c : 12.54 -pb_5c : 12.50 -pb_10c : 12.50 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.55 -pb_1c : 12.55 -pb_5c : 12.55 -pb_10c : 12.50 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.56 -pb_1c : 12.56 -pb_5c : 12.55 -pb_10c : 12.50 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.57 -pb_1c : 12.57 -pb_5c : 12.55 -pb_10c : 12.50 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.58 -pb_1c : 12.58 -pb_5c : 12.55 -pb_10c : 12.50 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.59 -pb_1c : 12.59 -pb_5c : 12.55 -pb_10c : 12.50 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.60 -pb_1c : 12.60 -pb_5c : 12.60 -pb_10c : 12.60 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.61 -pb_1c : 12.61 -pb_5c : 12.60 -pb_10c : 12.60 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.62 -pb_1c : 12.62 -pb_5c : 12.60 -pb_10c : 12.60 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.63 -pb_1c : 12.63 -pb_5c : 12.60 -pb_10c : 12.60 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.64 -pb_1c : 12.64 -pb_5c : 12.60 -pb_10c : 12.60 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.65 -pb_1c : 12.65 -pb_5c : 12.65 -pb_10c : 12.60 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.66 -pb_1c : 12.66 -pb_5c : 12.65 -pb_10c : 12.60 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.67 -pb_1c : 12.67 -pb_5c : 12.65 -pb_10c : 12.60 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.68 -pb_1c : 12.68 -pb_5c : 12.65 -pb_10c : 12.60 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.69 -pb_1c : 12.69 -pb_5c : 12.65 -pb_10c : 12.60 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.70 -pb_1c : 12.70 -pb_5c : 12.70 -pb_10c : 12.70 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.71 -pb_1c : 12.71 -pb_5c : 12.70 -pb_10c : 12.70 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.72 -pb_1c : 12.72 -pb_5c : 12.70 -pb_10c : 12.70 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.73 -pb_1c : 12.73 -pb_5c : 12.70 -pb_10c : 12.70 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.74 -pb_1c : 12.74 -pb_5c : 12.70 -pb_10c : 12.70 -pb_25c : 12.50 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.75 -pb_1c : 12.75 -pb_5c : 12.75 -pb_10c : 12.70 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.76 -pb_1c : 12.76 -pb_5c : 12.75 -pb_10c : 12.70 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.77 -pb_1c : 12.77 -pb_5c : 12.75 -pb_10c : 12.70 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.78 -pb_1c : 12.78 -pb_5c : 12.75 -pb_10c : 12.70 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.79 -pb_1c : 12.79 -pb_5c : 12.75 -pb_10c : 12.70 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.80 -pb_1c : 12.80 -pb_5c : 12.80 -pb_10c : 12.80 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.81 -pb_1c : 12.81 -pb_5c : 12.80 -pb_10c : 12.80 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.82 -pb_1c : 12.82 -pb_5c : 12.80 -pb_10c : 12.80 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.83 -pb_1c : 12.83 -pb_5c : 12.80 -pb_10c : 12.80 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.84 -pb_1c : 12.84 -pb_5c : 12.80 -pb_10c : 12.80 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.85 -pb_1c : 12.85 -pb_5c : 12.85 -pb_10c : 12.80 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.86 -pb_1c : 12.86 -pb_5c : 12.85 -pb_10c : 12.80 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.87 -pb_1c : 12.87 -pb_5c : 12.85 -pb_10c : 12.80 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.88 -pb_1c : 12.88 -pb_5c : 12.85 -pb_10c : 12.80 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.89 -pb_1c : 12.89 -pb_5c : 12.85 -pb_10c : 12.80 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.90 -pb_1c : 12.90 -pb_5c : 12.90 -pb_10c : 12.90 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.91 -pb_1c : 12.91 -pb_5c : 12.90 -pb_10c : 12.90 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.92 -pb_1c : 12.92 -pb_5c : 12.90 -pb_10c : 12.90 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.93 -pb_1c : 12.93 -pb_5c : 12.90 -pb_10c : 12.90 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.94 -pb_1c : 12.94 -pb_5c : 12.90 -pb_10c : 12.90 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.95 -pb_1c : 12.95 -pb_5c : 12.95 -pb_10c : 12.90 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.96 -pb_1c : 12.96 -pb_5c : 12.95 -pb_10c : 12.90 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.97 -pb_1c : 12.97 -pb_5c : 12.95 -pb_10c : 12.90 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.98 -pb_1c : 12.98 -pb_5c : 12.95 -pb_10c : 12.90 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -12.99 -pb_1c : 12.99 -pb_5c : 12.95 -pb_10c : 12.90 -pb_25c : 12.75 -pb_1d : 12.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.00 -pb_1c : 13.00 -pb_5c : 13.00 -pb_10c : 13.00 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.01 -pb_1c : 13.01 -pb_5c : 13.00 -pb_10c : 13.00 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.02 -pb_1c : 13.02 -pb_5c : 13.00 -pb_10c : 13.00 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.03 -pb_1c : 13.03 -pb_5c : 13.00 -pb_10c : 13.00 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.04 -pb_1c : 13.04 -pb_5c : 13.00 -pb_10c : 13.00 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.05 -pb_1c : 13.05 -pb_5c : 13.05 -pb_10c : 13.00 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.06 -pb_1c : 13.06 -pb_5c : 13.05 -pb_10c : 13.00 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.07 -pb_1c : 13.07 -pb_5c : 13.05 -pb_10c : 13.00 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.08 -pb_1c : 13.08 -pb_5c : 13.05 -pb_10c : 13.00 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.09 -pb_1c : 13.09 -pb_5c : 13.05 -pb_10c : 13.00 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.10 -pb_1c : 13.10 -pb_5c : 13.10 -pb_10c : 13.10 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.11 -pb_1c : 13.11 -pb_5c : 13.10 -pb_10c : 13.10 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.12 -pb_1c : 13.12 -pb_5c : 13.10 -pb_10c : 13.10 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.13 -pb_1c : 13.13 -pb_5c : 13.10 -pb_10c : 13.10 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.14 -pb_1c : 13.14 -pb_5c : 13.10 -pb_10c : 13.10 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.15 -pb_1c : 13.15 -pb_5c : 13.15 -pb_10c : 13.10 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.16 -pb_1c : 13.16 -pb_5c : 13.15 -pb_10c : 13.10 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.17 -pb_1c : 13.17 -pb_5c : 13.15 -pb_10c : 13.10 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.18 -pb_1c : 13.18 -pb_5c : 13.15 -pb_10c : 13.10 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.19 -pb_1c : 13.19 -pb_5c : 13.15 -pb_10c : 13.10 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.20 -pb_1c : 13.20 -pb_5c : 13.20 -pb_10c : 13.20 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.21 -pb_1c : 13.21 -pb_5c : 13.20 -pb_10c : 13.20 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.22 -pb_1c : 13.22 -pb_5c : 13.20 -pb_10c : 13.20 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.23 -pb_1c : 13.23 -pb_5c : 13.20 -pb_10c : 13.20 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.24 -pb_1c : 13.24 -pb_5c : 13.20 -pb_10c : 13.20 -pb_25c : 13.00 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.25 -pb_1c : 13.25 -pb_5c : 13.25 -pb_10c : 13.20 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.26 -pb_1c : 13.26 -pb_5c : 13.25 -pb_10c : 13.20 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.27 -pb_1c : 13.27 -pb_5c : 13.25 -pb_10c : 13.20 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.28 -pb_1c : 13.28 -pb_5c : 13.25 -pb_10c : 13.20 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.29 -pb_1c : 13.29 -pb_5c : 13.25 -pb_10c : 13.20 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.30 -pb_1c : 13.30 -pb_5c : 13.30 -pb_10c : 13.30 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.31 -pb_1c : 13.31 -pb_5c : 13.30 -pb_10c : 13.30 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.32 -pb_1c : 13.32 -pb_5c : 13.30 -pb_10c : 13.30 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.33 -pb_1c : 13.33 -pb_5c : 13.30 -pb_10c : 13.30 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.34 -pb_1c : 13.34 -pb_5c : 13.30 -pb_10c : 13.30 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.35 -pb_1c : 13.35 -pb_5c : 13.35 -pb_10c : 13.30 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.36 -pb_1c : 13.36 -pb_5c : 13.35 -pb_10c : 13.30 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.37 -pb_1c : 13.37 -pb_5c : 13.35 -pb_10c : 13.30 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.38 -pb_1c : 13.38 -pb_5c : 13.35 -pb_10c : 13.30 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.39 -pb_1c : 13.39 -pb_5c : 13.35 -pb_10c : 13.30 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.40 -pb_1c : 13.40 -pb_5c : 13.40 -pb_10c : 13.40 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.41 -pb_1c : 13.41 -pb_5c : 13.40 -pb_10c : 13.40 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.42 -pb_1c : 13.42 -pb_5c : 13.40 -pb_10c : 13.40 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.43 -pb_1c : 13.43 -pb_5c : 13.40 -pb_10c : 13.40 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.44 -pb_1c : 13.44 -pb_5c : 13.40 -pb_10c : 13.40 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.45 -pb_1c : 13.45 -pb_5c : 13.45 -pb_10c : 13.40 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.46 -pb_1c : 13.46 -pb_5c : 13.45 -pb_10c : 13.40 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.47 -pb_1c : 13.47 -pb_5c : 13.45 -pb_10c : 13.40 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.48 -pb_1c : 13.48 -pb_5c : 13.45 -pb_10c : 13.40 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.49 -pb_1c : 13.49 -pb_5c : 13.45 -pb_10c : 13.40 -pb_25c : 13.25 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.50 -pb_1c : 13.50 -pb_5c : 13.50 -pb_10c : 13.50 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.51 -pb_1c : 13.51 -pb_5c : 13.50 -pb_10c : 13.50 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.52 -pb_1c : 13.52 -pb_5c : 13.50 -pb_10c : 13.50 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.53 -pb_1c : 13.53 -pb_5c : 13.50 -pb_10c : 13.50 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.54 -pb_1c : 13.54 -pb_5c : 13.50 -pb_10c : 13.50 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.55 -pb_1c : 13.55 -pb_5c : 13.55 -pb_10c : 13.50 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.56 -pb_1c : 13.56 -pb_5c : 13.55 -pb_10c : 13.50 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.57 -pb_1c : 13.57 -pb_5c : 13.55 -pb_10c : 13.50 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.58 -pb_1c : 13.58 -pb_5c : 13.55 -pb_10c : 13.50 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.59 -pb_1c : 13.59 -pb_5c : 13.55 -pb_10c : 13.50 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.60 -pb_1c : 13.60 -pb_5c : 13.60 -pb_10c : 13.60 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.61 -pb_1c : 13.61 -pb_5c : 13.60 -pb_10c : 13.60 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.62 -pb_1c : 13.62 -pb_5c : 13.60 -pb_10c : 13.60 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.63 -pb_1c : 13.63 -pb_5c : 13.60 -pb_10c : 13.60 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.64 -pb_1c : 13.64 -pb_5c : 13.60 -pb_10c : 13.60 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.65 -pb_1c : 13.65 -pb_5c : 13.65 -pb_10c : 13.60 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.66 -pb_1c : 13.66 -pb_5c : 13.65 -pb_10c : 13.60 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.67 -pb_1c : 13.67 -pb_5c : 13.65 -pb_10c : 13.60 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.68 -pb_1c : 13.68 -pb_5c : 13.65 -pb_10c : 13.60 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.69 -pb_1c : 13.69 -pb_5c : 13.65 -pb_10c : 13.60 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.70 -pb_1c : 13.70 -pb_5c : 13.70 -pb_10c : 13.70 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.71 -pb_1c : 13.71 -pb_5c : 13.70 -pb_10c : 13.70 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.72 -pb_1c : 13.72 -pb_5c : 13.70 -pb_10c : 13.70 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.73 -pb_1c : 13.73 -pb_5c : 13.70 -pb_10c : 13.70 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.74 -pb_1c : 13.74 -pb_5c : 13.70 -pb_10c : 13.70 -pb_25c : 13.50 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.75 -pb_1c : 13.75 -pb_5c : 13.75 -pb_10c : 13.70 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.76 -pb_1c : 13.76 -pb_5c : 13.75 -pb_10c : 13.70 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.77 -pb_1c : 13.77 -pb_5c : 13.75 -pb_10c : 13.70 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.78 -pb_1c : 13.78 -pb_5c : 13.75 -pb_10c : 13.70 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.79 -pb_1c : 13.79 -pb_5c : 13.75 -pb_10c : 13.70 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.80 -pb_1c : 13.80 -pb_5c : 13.80 -pb_10c : 13.80 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.81 -pb_1c : 13.81 -pb_5c : 13.80 -pb_10c : 13.80 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.82 -pb_1c : 13.82 -pb_5c : 13.80 -pb_10c : 13.80 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.83 -pb_1c : 13.83 -pb_5c : 13.80 -pb_10c : 13.80 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.84 -pb_1c : 13.84 -pb_5c : 13.80 -pb_10c : 13.80 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.85 -pb_1c : 13.85 -pb_5c : 13.85 -pb_10c : 13.80 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.86 -pb_1c : 13.86 -pb_5c : 13.85 -pb_10c : 13.80 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.87 -pb_1c : 13.87 -pb_5c : 13.85 -pb_10c : 13.80 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.88 -pb_1c : 13.88 -pb_5c : 13.85 -pb_10c : 13.80 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.89 -pb_1c : 13.89 -pb_5c : 13.85 -pb_10c : 13.80 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.90 -pb_1c : 13.90 -pb_5c : 13.90 -pb_10c : 13.90 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.91 -pb_1c : 13.91 -pb_5c : 13.90 -pb_10c : 13.90 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.92 -pb_1c : 13.92 -pb_5c : 13.90 -pb_10c : 13.90 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.93 -pb_1c : 13.93 -pb_5c : 13.90 -pb_10c : 13.90 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.94 -pb_1c : 13.94 -pb_5c : 13.90 -pb_10c : 13.90 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.95 -pb_1c : 13.95 -pb_5c : 13.95 -pb_10c : 13.90 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.96 -pb_1c : 13.96 -pb_5c : 13.95 -pb_10c : 13.90 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.97 -pb_1c : 13.97 -pb_5c : 13.95 -pb_10c : 13.90 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.98 -pb_1c : 13.98 -pb_5c : 13.95 -pb_10c : 13.90 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -13.99 -pb_1c : 13.99 -pb_5c : 13.95 -pb_10c : 13.90 -pb_25c : 13.75 -pb_1d : 13.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.00 -pb_1c : 14.00 -pb_5c : 14.00 -pb_10c : 14.00 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.01 -pb_1c : 14.01 -pb_5c : 14.00 -pb_10c : 14.00 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.02 -pb_1c : 14.02 -pb_5c : 14.00 -pb_10c : 14.00 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.03 -pb_1c : 14.03 -pb_5c : 14.00 -pb_10c : 14.00 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.04 -pb_1c : 14.04 -pb_5c : 14.00 -pb_10c : 14.00 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.05 -pb_1c : 14.05 -pb_5c : 14.05 -pb_10c : 14.00 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.06 -pb_1c : 14.06 -pb_5c : 14.05 -pb_10c : 14.00 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.07 -pb_1c : 14.07 -pb_5c : 14.05 -pb_10c : 14.00 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.08 -pb_1c : 14.08 -pb_5c : 14.05 -pb_10c : 14.00 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.09 -pb_1c : 14.09 -pb_5c : 14.05 -pb_10c : 14.00 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.10 -pb_1c : 14.10 -pb_5c : 14.10 -pb_10c : 14.10 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.11 -pb_1c : 14.11 -pb_5c : 14.10 -pb_10c : 14.10 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.12 -pb_1c : 14.12 -pb_5c : 14.10 -pb_10c : 14.10 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.13 -pb_1c : 14.13 -pb_5c : 14.10 -pb_10c : 14.10 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.14 -pb_1c : 14.14 -pb_5c : 14.10 -pb_10c : 14.10 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.15 -pb_1c : 14.15 -pb_5c : 14.15 -pb_10c : 14.10 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.16 -pb_1c : 14.16 -pb_5c : 14.15 -pb_10c : 14.10 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.17 -pb_1c : 14.17 -pb_5c : 14.15 -pb_10c : 14.10 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.18 -pb_1c : 14.18 -pb_5c : 14.15 -pb_10c : 14.10 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.19 -pb_1c : 14.19 -pb_5c : 14.15 -pb_10c : 14.10 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.20 -pb_1c : 14.20 -pb_5c : 14.20 -pb_10c : 14.20 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.21 -pb_1c : 14.21 -pb_5c : 14.20 -pb_10c : 14.20 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.22 -pb_1c : 14.22 -pb_5c : 14.20 -pb_10c : 14.20 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.23 -pb_1c : 14.23 -pb_5c : 14.20 -pb_10c : 14.20 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.24 -pb_1c : 14.24 -pb_5c : 14.20 -pb_10c : 14.20 -pb_25c : 14.00 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.25 -pb_1c : 14.25 -pb_5c : 14.25 -pb_10c : 14.20 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.26 -pb_1c : 14.26 -pb_5c : 14.25 -pb_10c : 14.20 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.27 -pb_1c : 14.27 -pb_5c : 14.25 -pb_10c : 14.20 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.28 -pb_1c : 14.28 -pb_5c : 14.25 -pb_10c : 14.20 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.29 -pb_1c : 14.29 -pb_5c : 14.25 -pb_10c : 14.20 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.30 -pb_1c : 14.30 -pb_5c : 14.30 -pb_10c : 14.30 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.31 -pb_1c : 14.31 -pb_5c : 14.30 -pb_10c : 14.30 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.32 -pb_1c : 14.32 -pb_5c : 14.30 -pb_10c : 14.30 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.33 -pb_1c : 14.33 -pb_5c : 14.30 -pb_10c : 14.30 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.34 -pb_1c : 14.34 -pb_5c : 14.30 -pb_10c : 14.30 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.35 -pb_1c : 14.35 -pb_5c : 14.35 -pb_10c : 14.30 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.36 -pb_1c : 14.36 -pb_5c : 14.35 -pb_10c : 14.30 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.37 -pb_1c : 14.37 -pb_5c : 14.35 -pb_10c : 14.30 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.38 -pb_1c : 14.38 -pb_5c : 14.35 -pb_10c : 14.30 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.39 -pb_1c : 14.39 -pb_5c : 14.35 -pb_10c : 14.30 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.40 -pb_1c : 14.40 -pb_5c : 14.40 -pb_10c : 14.40 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.41 -pb_1c : 14.41 -pb_5c : 14.40 -pb_10c : 14.40 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.42 -pb_1c : 14.42 -pb_5c : 14.40 -pb_10c : 14.40 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.43 -pb_1c : 14.43 -pb_5c : 14.40 -pb_10c : 14.40 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.44 -pb_1c : 14.44 -pb_5c : 14.40 -pb_10c : 14.40 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.45 -pb_1c : 14.45 -pb_5c : 14.45 -pb_10c : 14.40 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.46 -pb_1c : 14.46 -pb_5c : 14.45 -pb_10c : 14.40 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.47 -pb_1c : 14.47 -pb_5c : 14.45 -pb_10c : 14.40 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.48 -pb_1c : 14.48 -pb_5c : 14.45 -pb_10c : 14.40 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.49 -pb_1c : 14.49 -pb_5c : 14.45 -pb_10c : 14.40 -pb_25c : 14.25 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.50 -pb_1c : 14.50 -pb_5c : 14.50 -pb_10c : 14.50 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.51 -pb_1c : 14.51 -pb_5c : 14.50 -pb_10c : 14.50 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.52 -pb_1c : 14.52 -pb_5c : 14.50 -pb_10c : 14.50 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.53 -pb_1c : 14.53 -pb_5c : 14.50 -pb_10c : 14.50 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.54 -pb_1c : 14.54 -pb_5c : 14.50 -pb_10c : 14.50 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.55 -pb_1c : 14.55 -pb_5c : 14.55 -pb_10c : 14.50 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.56 -pb_1c : 14.56 -pb_5c : 14.55 -pb_10c : 14.50 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.57 -pb_1c : 14.57 -pb_5c : 14.55 -pb_10c : 14.50 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.58 -pb_1c : 14.58 -pb_5c : 14.55 -pb_10c : 14.50 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.59 -pb_1c : 14.59 -pb_5c : 14.55 -pb_10c : 14.50 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.60 -pb_1c : 14.60 -pb_5c : 14.60 -pb_10c : 14.60 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.61 -pb_1c : 14.61 -pb_5c : 14.60 -pb_10c : 14.60 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.62 -pb_1c : 14.62 -pb_5c : 14.60 -pb_10c : 14.60 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.63 -pb_1c : 14.63 -pb_5c : 14.60 -pb_10c : 14.60 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.64 -pb_1c : 14.64 -pb_5c : 14.60 -pb_10c : 14.60 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.65 -pb_1c : 14.65 -pb_5c : 14.65 -pb_10c : 14.60 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.66 -pb_1c : 14.66 -pb_5c : 14.65 -pb_10c : 14.60 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.67 -pb_1c : 14.67 -pb_5c : 14.65 -pb_10c : 14.60 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.68 -pb_1c : 14.68 -pb_5c : 14.65 -pb_10c : 14.60 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.69 -pb_1c : 14.69 -pb_5c : 14.65 -pb_10c : 14.60 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.70 -pb_1c : 14.70 -pb_5c : 14.70 -pb_10c : 14.70 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.71 -pb_1c : 14.71 -pb_5c : 14.70 -pb_10c : 14.70 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.72 -pb_1c : 14.72 -pb_5c : 14.70 -pb_10c : 14.70 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.73 -pb_1c : 14.73 -pb_5c : 14.70 -pb_10c : 14.70 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.74 -pb_1c : 14.74 -pb_5c : 14.70 -pb_10c : 14.70 -pb_25c : 14.50 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.75 -pb_1c : 14.75 -pb_5c : 14.75 -pb_10c : 14.70 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.76 -pb_1c : 14.76 -pb_5c : 14.75 -pb_10c : 14.70 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.77 -pb_1c : 14.77 -pb_5c : 14.75 -pb_10c : 14.70 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.78 -pb_1c : 14.78 -pb_5c : 14.75 -pb_10c : 14.70 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.79 -pb_1c : 14.79 -pb_5c : 14.75 -pb_10c : 14.70 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.80 -pb_1c : 14.80 -pb_5c : 14.80 -pb_10c : 14.80 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.81 -pb_1c : 14.81 -pb_5c : 14.80 -pb_10c : 14.80 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.82 -pb_1c : 14.82 -pb_5c : 14.80 -pb_10c : 14.80 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.83 -pb_1c : 14.83 -pb_5c : 14.80 -pb_10c : 14.80 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.84 -pb_1c : 14.84 -pb_5c : 14.80 -pb_10c : 14.80 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.85 -pb_1c : 14.85 -pb_5c : 14.85 -pb_10c : 14.80 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.86 -pb_1c : 14.86 -pb_5c : 14.85 -pb_10c : 14.80 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.87 -pb_1c : 14.87 -pb_5c : 14.85 -pb_10c : 14.80 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.88 -pb_1c : 14.88 -pb_5c : 14.85 -pb_10c : 14.80 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.89 -pb_1c : 14.89 -pb_5c : 14.85 -pb_10c : 14.80 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.90 -pb_1c : 14.90 -pb_5c : 14.90 -pb_10c : 14.90 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.91 -pb_1c : 14.91 -pb_5c : 14.90 -pb_10c : 14.90 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.92 -pb_1c : 14.92 -pb_5c : 14.90 -pb_10c : 14.90 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.93 -pb_1c : 14.93 -pb_5c : 14.90 -pb_10c : 14.90 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.94 -pb_1c : 14.94 -pb_5c : 14.90 -pb_10c : 14.90 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.95 -pb_1c : 14.95 -pb_5c : 14.95 -pb_10c : 14.90 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.96 -pb_1c : 14.96 -pb_5c : 14.95 -pb_10c : 14.90 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.97 -pb_1c : 14.97 -pb_5c : 14.95 -pb_10c : 14.90 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.98 -pb_1c : 14.98 -pb_5c : 14.95 -pb_10c : 14.90 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -14.99 -pb_1c : 14.99 -pb_5c : 14.95 -pb_10c : 14.90 -pb_25c : 14.75 -pb_1d : 14.00 -pb_5d : 10.00 -pb_10d : 10.00 - -15.00 -pb_1c : 15.00 -pb_5c : 15.00 -pb_10c : 15.00 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.01 -pb_1c : 15.01 -pb_5c : 15.00 -pb_10c : 15.00 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.02 -pb_1c : 15.02 -pb_5c : 15.00 -pb_10c : 15.00 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.03 -pb_1c : 15.03 -pb_5c : 15.00 -pb_10c : 15.00 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.04 -pb_1c : 15.04 -pb_5c : 15.00 -pb_10c : 15.00 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.05 -pb_1c : 15.05 -pb_5c : 15.05 -pb_10c : 15.00 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.06 -pb_1c : 15.06 -pb_5c : 15.05 -pb_10c : 15.00 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.07 -pb_1c : 15.07 -pb_5c : 15.05 -pb_10c : 15.00 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.08 -pb_1c : 15.08 -pb_5c : 15.05 -pb_10c : 15.00 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.09 -pb_1c : 15.09 -pb_5c : 15.05 -pb_10c : 15.00 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.10 -pb_1c : 15.10 -pb_5c : 15.10 -pb_10c : 15.10 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.11 -pb_1c : 15.11 -pb_5c : 15.10 -pb_10c : 15.10 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.12 -pb_1c : 15.12 -pb_5c : 15.10 -pb_10c : 15.10 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.13 -pb_1c : 15.13 -pb_5c : 15.10 -pb_10c : 15.10 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.14 -pb_1c : 15.14 -pb_5c : 15.10 -pb_10c : 15.10 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.15 -pb_1c : 15.15 -pb_5c : 15.15 -pb_10c : 15.10 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.16 -pb_1c : 15.16 -pb_5c : 15.15 -pb_10c : 15.10 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.17 -pb_1c : 15.17 -pb_5c : 15.15 -pb_10c : 15.10 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.18 -pb_1c : 15.18 -pb_5c : 15.15 -pb_10c : 15.10 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.19 -pb_1c : 15.19 -pb_5c : 15.15 -pb_10c : 15.10 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.20 -pb_1c : 15.20 -pb_5c : 15.20 -pb_10c : 15.20 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.21 -pb_1c : 15.21 -pb_5c : 15.20 -pb_10c : 15.20 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.22 -pb_1c : 15.22 -pb_5c : 15.20 -pb_10c : 15.20 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.23 -pb_1c : 15.23 -pb_5c : 15.20 -pb_10c : 15.20 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.24 -pb_1c : 15.24 -pb_5c : 15.20 -pb_10c : 15.20 -pb_25c : 15.00 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.25 -pb_1c : 15.25 -pb_5c : 15.25 -pb_10c : 15.20 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.26 -pb_1c : 15.26 -pb_5c : 15.25 -pb_10c : 15.20 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.27 -pb_1c : 15.27 -pb_5c : 15.25 -pb_10c : 15.20 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.28 -pb_1c : 15.28 -pb_5c : 15.25 -pb_10c : 15.20 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.29 -pb_1c : 15.29 -pb_5c : 15.25 -pb_10c : 15.20 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.30 -pb_1c : 15.30 -pb_5c : 15.30 -pb_10c : 15.30 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.31 -pb_1c : 15.31 -pb_5c : 15.30 -pb_10c : 15.30 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.32 -pb_1c : 15.32 -pb_5c : 15.30 -pb_10c : 15.30 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.33 -pb_1c : 15.33 -pb_5c : 15.30 -pb_10c : 15.30 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.34 -pb_1c : 15.34 -pb_5c : 15.30 -pb_10c : 15.30 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.35 -pb_1c : 15.35 -pb_5c : 15.35 -pb_10c : 15.30 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.36 -pb_1c : 15.36 -pb_5c : 15.35 -pb_10c : 15.30 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.37 -pb_1c : 15.37 -pb_5c : 15.35 -pb_10c : 15.30 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.38 -pb_1c : 15.38 -pb_5c : 15.35 -pb_10c : 15.30 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.39 -pb_1c : 15.39 -pb_5c : 15.35 -pb_10c : 15.30 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.40 -pb_1c : 15.40 -pb_5c : 15.40 -pb_10c : 15.40 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.41 -pb_1c : 15.41 -pb_5c : 15.40 -pb_10c : 15.40 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.42 -pb_1c : 15.42 -pb_5c : 15.40 -pb_10c : 15.40 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.43 -pb_1c : 15.43 -pb_5c : 15.40 -pb_10c : 15.40 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.44 -pb_1c : 15.44 -pb_5c : 15.40 -pb_10c : 15.40 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.45 -pb_1c : 15.45 -pb_5c : 15.45 -pb_10c : 15.40 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.46 -pb_1c : 15.46 -pb_5c : 15.45 -pb_10c : 15.40 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.47 -pb_1c : 15.47 -pb_5c : 15.45 -pb_10c : 15.40 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.48 -pb_1c : 15.48 -pb_5c : 15.45 -pb_10c : 15.40 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.49 -pb_1c : 15.49 -pb_5c : 15.45 -pb_10c : 15.40 -pb_25c : 15.25 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.50 -pb_1c : 15.50 -pb_5c : 15.50 -pb_10c : 15.50 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.51 -pb_1c : 15.51 -pb_5c : 15.50 -pb_10c : 15.50 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.52 -pb_1c : 15.52 -pb_5c : 15.50 -pb_10c : 15.50 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.53 -pb_1c : 15.53 -pb_5c : 15.50 -pb_10c : 15.50 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.54 -pb_1c : 15.54 -pb_5c : 15.50 -pb_10c : 15.50 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.55 -pb_1c : 15.55 -pb_5c : 15.55 -pb_10c : 15.50 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.56 -pb_1c : 15.56 -pb_5c : 15.55 -pb_10c : 15.50 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.57 -pb_1c : 15.57 -pb_5c : 15.55 -pb_10c : 15.50 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.58 -pb_1c : 15.58 -pb_5c : 15.55 -pb_10c : 15.50 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.59 -pb_1c : 15.59 -pb_5c : 15.55 -pb_10c : 15.50 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.60 -pb_1c : 15.60 -pb_5c : 15.60 -pb_10c : 15.60 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.61 -pb_1c : 15.61 -pb_5c : 15.60 -pb_10c : 15.60 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.62 -pb_1c : 15.62 -pb_5c : 15.60 -pb_10c : 15.60 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.63 -pb_1c : 15.63 -pb_5c : 15.60 -pb_10c : 15.60 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.64 -pb_1c : 15.64 -pb_5c : 15.60 -pb_10c : 15.60 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.65 -pb_1c : 15.65 -pb_5c : 15.65 -pb_10c : 15.60 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.66 -pb_1c : 15.66 -pb_5c : 15.65 -pb_10c : 15.60 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.67 -pb_1c : 15.67 -pb_5c : 15.65 -pb_10c : 15.60 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.68 -pb_1c : 15.68 -pb_5c : 15.65 -pb_10c : 15.60 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.69 -pb_1c : 15.69 -pb_5c : 15.65 -pb_10c : 15.60 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.70 -pb_1c : 15.70 -pb_5c : 15.70 -pb_10c : 15.70 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.71 -pb_1c : 15.71 -pb_5c : 15.70 -pb_10c : 15.70 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.72 -pb_1c : 15.72 -pb_5c : 15.70 -pb_10c : 15.70 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.73 -pb_1c : 15.73 -pb_5c : 15.70 -pb_10c : 15.70 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.74 -pb_1c : 15.74 -pb_5c : 15.70 -pb_10c : 15.70 -pb_25c : 15.50 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.75 -pb_1c : 15.75 -pb_5c : 15.75 -pb_10c : 15.70 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.76 -pb_1c : 15.76 -pb_5c : 15.75 -pb_10c : 15.70 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.77 -pb_1c : 15.77 -pb_5c : 15.75 -pb_10c : 15.70 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.78 -pb_1c : 15.78 -pb_5c : 15.75 -pb_10c : 15.70 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.79 -pb_1c : 15.79 -pb_5c : 15.75 -pb_10c : 15.70 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.80 -pb_1c : 15.80 -pb_5c : 15.80 -pb_10c : 15.80 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.81 -pb_1c : 15.81 -pb_5c : 15.80 -pb_10c : 15.80 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.82 -pb_1c : 15.82 -pb_5c : 15.80 -pb_10c : 15.80 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.83 -pb_1c : 15.83 -pb_5c : 15.80 -pb_10c : 15.80 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.84 -pb_1c : 15.84 -pb_5c : 15.80 -pb_10c : 15.80 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.85 -pb_1c : 15.85 -pb_5c : 15.85 -pb_10c : 15.80 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.86 -pb_1c : 15.86 -pb_5c : 15.85 -pb_10c : 15.80 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.87 -pb_1c : 15.87 -pb_5c : 15.85 -pb_10c : 15.80 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.88 -pb_1c : 15.88 -pb_5c : 15.85 -pb_10c : 15.80 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.89 -pb_1c : 15.89 -pb_5c : 15.85 -pb_10c : 15.80 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.90 -pb_1c : 15.90 -pb_5c : 15.90 -pb_10c : 15.90 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.91 -pb_1c : 15.91 -pb_5c : 15.90 -pb_10c : 15.90 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.92 -pb_1c : 15.92 -pb_5c : 15.90 -pb_10c : 15.90 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.93 -pb_1c : 15.93 -pb_5c : 15.90 -pb_10c : 15.90 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.94 -pb_1c : 15.94 -pb_5c : 15.90 -pb_10c : 15.90 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.95 -pb_1c : 15.95 -pb_5c : 15.95 -pb_10c : 15.90 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.96 -pb_1c : 15.96 -pb_5c : 15.95 -pb_10c : 15.90 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.97 -pb_1c : 15.97 -pb_5c : 15.95 -pb_10c : 15.90 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.98 -pb_1c : 15.98 -pb_5c : 15.95 -pb_10c : 15.90 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -15.99 -pb_1c : 15.99 -pb_5c : 15.95 -pb_10c : 15.90 -pb_25c : 15.75 -pb_1d : 15.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.00 -pb_1c : 16.00 -pb_5c : 16.00 -pb_10c : 16.00 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.01 -pb_1c : 16.01 -pb_5c : 16.00 -pb_10c : 16.00 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.02 -pb_1c : 16.02 -pb_5c : 16.00 -pb_10c : 16.00 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.03 -pb_1c : 16.03 -pb_5c : 16.00 -pb_10c : 16.00 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.04 -pb_1c : 16.04 -pb_5c : 16.00 -pb_10c : 16.00 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.05 -pb_1c : 16.05 -pb_5c : 16.05 -pb_10c : 16.00 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.06 -pb_1c : 16.06 -pb_5c : 16.05 -pb_10c : 16.00 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.07 -pb_1c : 16.07 -pb_5c : 16.05 -pb_10c : 16.00 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.08 -pb_1c : 16.08 -pb_5c : 16.05 -pb_10c : 16.00 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.09 -pb_1c : 16.09 -pb_5c : 16.05 -pb_10c : 16.00 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.10 -pb_1c : 16.10 -pb_5c : 16.10 -pb_10c : 16.10 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.11 -pb_1c : 16.11 -pb_5c : 16.10 -pb_10c : 16.10 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.12 -pb_1c : 16.12 -pb_5c : 16.10 -pb_10c : 16.10 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.13 -pb_1c : 16.13 -pb_5c : 16.10 -pb_10c : 16.10 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.14 -pb_1c : 16.14 -pb_5c : 16.10 -pb_10c : 16.10 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.15 -pb_1c : 16.15 -pb_5c : 16.15 -pb_10c : 16.10 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.16 -pb_1c : 16.16 -pb_5c : 16.15 -pb_10c : 16.10 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.17 -pb_1c : 16.17 -pb_5c : 16.15 -pb_10c : 16.10 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.18 -pb_1c : 16.18 -pb_5c : 16.15 -pb_10c : 16.10 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.19 -pb_1c : 16.19 -pb_5c : 16.15 -pb_10c : 16.10 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.20 -pb_1c : 16.20 -pb_5c : 16.20 -pb_10c : 16.20 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.21 -pb_1c : 16.21 -pb_5c : 16.20 -pb_10c : 16.20 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.22 -pb_1c : 16.22 -pb_5c : 16.20 -pb_10c : 16.20 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.23 -pb_1c : 16.23 -pb_5c : 16.20 -pb_10c : 16.20 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.24 -pb_1c : 16.24 -pb_5c : 16.20 -pb_10c : 16.20 -pb_25c : 16.00 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.25 -pb_1c : 16.25 -pb_5c : 16.25 -pb_10c : 16.20 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.26 -pb_1c : 16.26 -pb_5c : 16.25 -pb_10c : 16.20 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.27 -pb_1c : 16.27 -pb_5c : 16.25 -pb_10c : 16.20 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.28 -pb_1c : 16.28 -pb_5c : 16.25 -pb_10c : 16.20 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.29 -pb_1c : 16.29 -pb_5c : 16.25 -pb_10c : 16.20 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.30 -pb_1c : 16.30 -pb_5c : 16.30 -pb_10c : 16.30 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.31 -pb_1c : 16.31 -pb_5c : 16.30 -pb_10c : 16.30 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.32 -pb_1c : 16.32 -pb_5c : 16.30 -pb_10c : 16.30 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.33 -pb_1c : 16.33 -pb_5c : 16.30 -pb_10c : 16.30 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.34 -pb_1c : 16.34 -pb_5c : 16.30 -pb_10c : 16.30 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.35 -pb_1c : 16.35 -pb_5c : 16.35 -pb_10c : 16.30 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.36 -pb_1c : 16.36 -pb_5c : 16.35 -pb_10c : 16.30 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.37 -pb_1c : 16.37 -pb_5c : 16.35 -pb_10c : 16.30 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.38 -pb_1c : 16.38 -pb_5c : 16.35 -pb_10c : 16.30 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.39 -pb_1c : 16.39 -pb_5c : 16.35 -pb_10c : 16.30 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.40 -pb_1c : 16.40 -pb_5c : 16.40 -pb_10c : 16.40 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.41 -pb_1c : 16.41 -pb_5c : 16.40 -pb_10c : 16.40 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.42 -pb_1c : 16.42 -pb_5c : 16.40 -pb_10c : 16.40 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.43 -pb_1c : 16.43 -pb_5c : 16.40 -pb_10c : 16.40 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.44 -pb_1c : 16.44 -pb_5c : 16.40 -pb_10c : 16.40 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.45 -pb_1c : 16.45 -pb_5c : 16.45 -pb_10c : 16.40 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.46 -pb_1c : 16.46 -pb_5c : 16.45 -pb_10c : 16.40 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.47 -pb_1c : 16.47 -pb_5c : 16.45 -pb_10c : 16.40 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.48 -pb_1c : 16.48 -pb_5c : 16.45 -pb_10c : 16.40 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.49 -pb_1c : 16.49 -pb_5c : 16.45 -pb_10c : 16.40 -pb_25c : 16.25 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.50 -pb_1c : 16.50 -pb_5c : 16.50 -pb_10c : 16.50 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.51 -pb_1c : 16.51 -pb_5c : 16.50 -pb_10c : 16.50 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.52 -pb_1c : 16.52 -pb_5c : 16.50 -pb_10c : 16.50 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.53 -pb_1c : 16.53 -pb_5c : 16.50 -pb_10c : 16.50 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.54 -pb_1c : 16.54 -pb_5c : 16.50 -pb_10c : 16.50 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.55 -pb_1c : 16.55 -pb_5c : 16.55 -pb_10c : 16.50 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.56 -pb_1c : 16.56 -pb_5c : 16.55 -pb_10c : 16.50 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.57 -pb_1c : 16.57 -pb_5c : 16.55 -pb_10c : 16.50 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.58 -pb_1c : 16.58 -pb_5c : 16.55 -pb_10c : 16.50 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.59 -pb_1c : 16.59 -pb_5c : 16.55 -pb_10c : 16.50 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.60 -pb_1c : 16.60 -pb_5c : 16.60 -pb_10c : 16.60 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.61 -pb_1c : 16.61 -pb_5c : 16.60 -pb_10c : 16.60 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.62 -pb_1c : 16.62 -pb_5c : 16.60 -pb_10c : 16.60 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.63 -pb_1c : 16.63 -pb_5c : 16.60 -pb_10c : 16.60 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.64 -pb_1c : 16.64 -pb_5c : 16.60 -pb_10c : 16.60 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.65 -pb_1c : 16.65 -pb_5c : 16.65 -pb_10c : 16.60 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.66 -pb_1c : 16.66 -pb_5c : 16.65 -pb_10c : 16.60 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.67 -pb_1c : 16.67 -pb_5c : 16.65 -pb_10c : 16.60 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.68 -pb_1c : 16.68 -pb_5c : 16.65 -pb_10c : 16.60 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.69 -pb_1c : 16.69 -pb_5c : 16.65 -pb_10c : 16.60 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.70 -pb_1c : 16.70 -pb_5c : 16.70 -pb_10c : 16.70 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.71 -pb_1c : 16.71 -pb_5c : 16.70 -pb_10c : 16.70 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.72 -pb_1c : 16.72 -pb_5c : 16.70 -pb_10c : 16.70 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.73 -pb_1c : 16.73 -pb_5c : 16.70 -pb_10c : 16.70 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.74 -pb_1c : 16.74 -pb_5c : 16.70 -pb_10c : 16.70 -pb_25c : 16.50 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.75 -pb_1c : 16.75 -pb_5c : 16.75 -pb_10c : 16.70 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.76 -pb_1c : 16.76 -pb_5c : 16.75 -pb_10c : 16.70 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.77 -pb_1c : 16.77 -pb_5c : 16.75 -pb_10c : 16.70 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.78 -pb_1c : 16.78 -pb_5c : 16.75 -pb_10c : 16.70 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.79 -pb_1c : 16.79 -pb_5c : 16.75 -pb_10c : 16.70 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.80 -pb_1c : 16.80 -pb_5c : 16.80 -pb_10c : 16.80 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.81 -pb_1c : 16.81 -pb_5c : 16.80 -pb_10c : 16.80 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.82 -pb_1c : 16.82 -pb_5c : 16.80 -pb_10c : 16.80 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.83 -pb_1c : 16.83 -pb_5c : 16.80 -pb_10c : 16.80 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.84 -pb_1c : 16.84 -pb_5c : 16.80 -pb_10c : 16.80 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.85 -pb_1c : 16.85 -pb_5c : 16.85 -pb_10c : 16.80 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.86 -pb_1c : 16.86 -pb_5c : 16.85 -pb_10c : 16.80 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.87 -pb_1c : 16.87 -pb_5c : 16.85 -pb_10c : 16.80 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.88 -pb_1c : 16.88 -pb_5c : 16.85 -pb_10c : 16.80 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.89 -pb_1c : 16.89 -pb_5c : 16.85 -pb_10c : 16.80 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.90 -pb_1c : 16.90 -pb_5c : 16.90 -pb_10c : 16.90 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.91 -pb_1c : 16.91 -pb_5c : 16.90 -pb_10c : 16.90 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.92 -pb_1c : 16.92 -pb_5c : 16.90 -pb_10c : 16.90 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.93 -pb_1c : 16.93 -pb_5c : 16.90 -pb_10c : 16.90 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.94 -pb_1c : 16.94 -pb_5c : 16.90 -pb_10c : 16.90 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.95 -pb_1c : 16.95 -pb_5c : 16.95 -pb_10c : 16.90 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.96 -pb_1c : 16.96 -pb_5c : 16.95 -pb_10c : 16.90 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.97 -pb_1c : 16.97 -pb_5c : 16.95 -pb_10c : 16.90 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.98 -pb_1c : 16.98 -pb_5c : 16.95 -pb_10c : 16.90 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -16.99 -pb_1c : 16.99 -pb_5c : 16.95 -pb_10c : 16.90 -pb_25c : 16.75 -pb_1d : 16.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.00 -pb_1c : 17.00 -pb_5c : 17.00 -pb_10c : 17.00 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.01 -pb_1c : 17.01 -pb_5c : 17.00 -pb_10c : 17.00 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.02 -pb_1c : 17.02 -pb_5c : 17.00 -pb_10c : 17.00 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.03 -pb_1c : 17.03 -pb_5c : 17.00 -pb_10c : 17.00 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.04 -pb_1c : 17.04 -pb_5c : 17.00 -pb_10c : 17.00 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.05 -pb_1c : 17.05 -pb_5c : 17.05 -pb_10c : 17.00 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.06 -pb_1c : 17.06 -pb_5c : 17.05 -pb_10c : 17.00 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.07 -pb_1c : 17.07 -pb_5c : 17.05 -pb_10c : 17.00 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.08 -pb_1c : 17.08 -pb_5c : 17.05 -pb_10c : 17.00 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.09 -pb_1c : 17.09 -pb_5c : 17.05 -pb_10c : 17.00 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.10 -pb_1c : 17.10 -pb_5c : 17.10 -pb_10c : 17.10 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.11 -pb_1c : 17.11 -pb_5c : 17.10 -pb_10c : 17.10 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.12 -pb_1c : 17.12 -pb_5c : 17.10 -pb_10c : 17.10 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.13 -pb_1c : 17.13 -pb_5c : 17.10 -pb_10c : 17.10 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.14 -pb_1c : 17.14 -pb_5c : 17.10 -pb_10c : 17.10 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.15 -pb_1c : 17.15 -pb_5c : 17.15 -pb_10c : 17.10 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.16 -pb_1c : 17.16 -pb_5c : 17.15 -pb_10c : 17.10 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.17 -pb_1c : 17.17 -pb_5c : 17.15 -pb_10c : 17.10 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.18 -pb_1c : 17.18 -pb_5c : 17.15 -pb_10c : 17.10 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.19 -pb_1c : 17.19 -pb_5c : 17.15 -pb_10c : 17.10 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.20 -pb_1c : 17.20 -pb_5c : 17.20 -pb_10c : 17.20 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.21 -pb_1c : 17.21 -pb_5c : 17.20 -pb_10c : 17.20 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.22 -pb_1c : 17.22 -pb_5c : 17.20 -pb_10c : 17.20 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.23 -pb_1c : 17.23 -pb_5c : 17.20 -pb_10c : 17.20 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.24 -pb_1c : 17.24 -pb_5c : 17.20 -pb_10c : 17.20 -pb_25c : 17.00 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.25 -pb_1c : 17.25 -pb_5c : 17.25 -pb_10c : 17.20 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.26 -pb_1c : 17.26 -pb_5c : 17.25 -pb_10c : 17.20 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.27 -pb_1c : 17.27 -pb_5c : 17.25 -pb_10c : 17.20 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.28 -pb_1c : 17.28 -pb_5c : 17.25 -pb_10c : 17.20 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.29 -pb_1c : 17.29 -pb_5c : 17.25 -pb_10c : 17.20 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.30 -pb_1c : 17.30 -pb_5c : 17.30 -pb_10c : 17.30 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.31 -pb_1c : 17.31 -pb_5c : 17.30 -pb_10c : 17.30 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.32 -pb_1c : 17.32 -pb_5c : 17.30 -pb_10c : 17.30 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.33 -pb_1c : 17.33 -pb_5c : 17.30 -pb_10c : 17.30 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.34 -pb_1c : 17.34 -pb_5c : 17.30 -pb_10c : 17.30 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.35 -pb_1c : 17.35 -pb_5c : 17.35 -pb_10c : 17.30 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.36 -pb_1c : 17.36 -pb_5c : 17.35 -pb_10c : 17.30 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.37 -pb_1c : 17.37 -pb_5c : 17.35 -pb_10c : 17.30 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.38 -pb_1c : 17.38 -pb_5c : 17.35 -pb_10c : 17.30 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.39 -pb_1c : 17.39 -pb_5c : 17.35 -pb_10c : 17.30 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.40 -pb_1c : 17.40 -pb_5c : 17.40 -pb_10c : 17.40 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.41 -pb_1c : 17.41 -pb_5c : 17.40 -pb_10c : 17.40 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.42 -pb_1c : 17.42 -pb_5c : 17.40 -pb_10c : 17.40 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.43 -pb_1c : 17.43 -pb_5c : 17.40 -pb_10c : 17.40 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.44 -pb_1c : 17.44 -pb_5c : 17.40 -pb_10c : 17.40 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.45 -pb_1c : 17.45 -pb_5c : 17.45 -pb_10c : 17.40 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.46 -pb_1c : 17.46 -pb_5c : 17.45 -pb_10c : 17.40 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.47 -pb_1c : 17.47 -pb_5c : 17.45 -pb_10c : 17.40 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.48 -pb_1c : 17.48 -pb_5c : 17.45 -pb_10c : 17.40 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.49 -pb_1c : 17.49 -pb_5c : 17.45 -pb_10c : 17.40 -pb_25c : 17.25 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.50 -pb_1c : 17.50 -pb_5c : 17.50 -pb_10c : 17.50 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.51 -pb_1c : 17.51 -pb_5c : 17.50 -pb_10c : 17.50 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.52 -pb_1c : 17.52 -pb_5c : 17.50 -pb_10c : 17.50 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.53 -pb_1c : 17.53 -pb_5c : 17.50 -pb_10c : 17.50 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.54 -pb_1c : 17.54 -pb_5c : 17.50 -pb_10c : 17.50 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.55 -pb_1c : 17.55 -pb_5c : 17.55 -pb_10c : 17.50 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.56 -pb_1c : 17.56 -pb_5c : 17.55 -pb_10c : 17.50 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.57 -pb_1c : 17.57 -pb_5c : 17.55 -pb_10c : 17.50 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.58 -pb_1c : 17.58 -pb_5c : 17.55 -pb_10c : 17.50 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.59 -pb_1c : 17.59 -pb_5c : 17.55 -pb_10c : 17.50 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.60 -pb_1c : 17.60 -pb_5c : 17.60 -pb_10c : 17.60 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.61 -pb_1c : 17.61 -pb_5c : 17.60 -pb_10c : 17.60 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.62 -pb_1c : 17.62 -pb_5c : 17.60 -pb_10c : 17.60 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.63 -pb_1c : 17.63 -pb_5c : 17.60 -pb_10c : 17.60 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.64 -pb_1c : 17.64 -pb_5c : 17.60 -pb_10c : 17.60 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.65 -pb_1c : 17.65 -pb_5c : 17.65 -pb_10c : 17.60 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.66 -pb_1c : 17.66 -pb_5c : 17.65 -pb_10c : 17.60 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.67 -pb_1c : 17.67 -pb_5c : 17.65 -pb_10c : 17.60 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.68 -pb_1c : 17.68 -pb_5c : 17.65 -pb_10c : 17.60 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.69 -pb_1c : 17.69 -pb_5c : 17.65 -pb_10c : 17.60 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.70 -pb_1c : 17.70 -pb_5c : 17.70 -pb_10c : 17.70 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.71 -pb_1c : 17.71 -pb_5c : 17.70 -pb_10c : 17.70 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.72 -pb_1c : 17.72 -pb_5c : 17.70 -pb_10c : 17.70 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.73 -pb_1c : 17.73 -pb_5c : 17.70 -pb_10c : 17.70 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.74 -pb_1c : 17.74 -pb_5c : 17.70 -pb_10c : 17.70 -pb_25c : 17.50 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.75 -pb_1c : 17.75 -pb_5c : 17.75 -pb_10c : 17.70 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.76 -pb_1c : 17.76 -pb_5c : 17.75 -pb_10c : 17.70 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.77 -pb_1c : 17.77 -pb_5c : 17.75 -pb_10c : 17.70 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.78 -pb_1c : 17.78 -pb_5c : 17.75 -pb_10c : 17.70 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.79 -pb_1c : 17.79 -pb_5c : 17.75 -pb_10c : 17.70 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.80 -pb_1c : 17.80 -pb_5c : 17.80 -pb_10c : 17.80 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.81 -pb_1c : 17.81 -pb_5c : 17.80 -pb_10c : 17.80 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.82 -pb_1c : 17.82 -pb_5c : 17.80 -pb_10c : 17.80 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.83 -pb_1c : 17.83 -pb_5c : 17.80 -pb_10c : 17.80 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.84 -pb_1c : 17.84 -pb_5c : 17.80 -pb_10c : 17.80 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.85 -pb_1c : 17.85 -pb_5c : 17.85 -pb_10c : 17.80 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.86 -pb_1c : 17.86 -pb_5c : 17.85 -pb_10c : 17.80 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.87 -pb_1c : 17.87 -pb_5c : 17.85 -pb_10c : 17.80 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.88 -pb_1c : 17.88 -pb_5c : 17.85 -pb_10c : 17.80 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.89 -pb_1c : 17.89 -pb_5c : 17.85 -pb_10c : 17.80 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.90 -pb_1c : 17.90 -pb_5c : 17.90 -pb_10c : 17.90 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.91 -pb_1c : 17.91 -pb_5c : 17.90 -pb_10c : 17.90 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.92 -pb_1c : 17.92 -pb_5c : 17.90 -pb_10c : 17.90 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.93 -pb_1c : 17.93 -pb_5c : 17.90 -pb_10c : 17.90 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.94 -pb_1c : 17.94 -pb_5c : 17.90 -pb_10c : 17.90 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.95 -pb_1c : 17.95 -pb_5c : 17.95 -pb_10c : 17.90 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.96 -pb_1c : 17.96 -pb_5c : 17.95 -pb_10c : 17.90 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.97 -pb_1c : 17.97 -pb_5c : 17.95 -pb_10c : 17.90 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.98 -pb_1c : 17.98 -pb_5c : 17.95 -pb_10c : 17.90 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -17.99 -pb_1c : 17.99 -pb_5c : 17.95 -pb_10c : 17.90 -pb_25c : 17.75 -pb_1d : 17.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.00 -pb_1c : 18.00 -pb_5c : 18.00 -pb_10c : 18.00 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.01 -pb_1c : 18.01 -pb_5c : 18.00 -pb_10c : 18.00 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.02 -pb_1c : 18.02 -pb_5c : 18.00 -pb_10c : 18.00 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.03 -pb_1c : 18.03 -pb_5c : 18.00 -pb_10c : 18.00 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.04 -pb_1c : 18.04 -pb_5c : 18.00 -pb_10c : 18.00 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.05 -pb_1c : 18.05 -pb_5c : 18.05 -pb_10c : 18.00 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.06 -pb_1c : 18.06 -pb_5c : 18.05 -pb_10c : 18.00 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.07 -pb_1c : 18.07 -pb_5c : 18.05 -pb_10c : 18.00 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.08 -pb_1c : 18.08 -pb_5c : 18.05 -pb_10c : 18.00 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.09 -pb_1c : 18.09 -pb_5c : 18.05 -pb_10c : 18.00 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.10 -pb_1c : 18.10 -pb_5c : 18.10 -pb_10c : 18.10 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.11 -pb_1c : 18.11 -pb_5c : 18.10 -pb_10c : 18.10 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.12 -pb_1c : 18.12 -pb_5c : 18.10 -pb_10c : 18.10 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.13 -pb_1c : 18.13 -pb_5c : 18.10 -pb_10c : 18.10 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.14 -pb_1c : 18.14 -pb_5c : 18.10 -pb_10c : 18.10 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.15 -pb_1c : 18.15 -pb_5c : 18.15 -pb_10c : 18.10 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.16 -pb_1c : 18.16 -pb_5c : 18.15 -pb_10c : 18.10 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.17 -pb_1c : 18.17 -pb_5c : 18.15 -pb_10c : 18.10 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.18 -pb_1c : 18.18 -pb_5c : 18.15 -pb_10c : 18.10 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.19 -pb_1c : 18.19 -pb_5c : 18.15 -pb_10c : 18.10 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.20 -pb_1c : 18.20 -pb_5c : 18.20 -pb_10c : 18.20 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.21 -pb_1c : 18.21 -pb_5c : 18.20 -pb_10c : 18.20 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.22 -pb_1c : 18.22 -pb_5c : 18.20 -pb_10c : 18.20 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.23 -pb_1c : 18.23 -pb_5c : 18.20 -pb_10c : 18.20 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.24 -pb_1c : 18.24 -pb_5c : 18.20 -pb_10c : 18.20 -pb_25c : 18.00 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.25 -pb_1c : 18.25 -pb_5c : 18.25 -pb_10c : 18.20 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.26 -pb_1c : 18.26 -pb_5c : 18.25 -pb_10c : 18.20 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.27 -pb_1c : 18.27 -pb_5c : 18.25 -pb_10c : 18.20 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.28 -pb_1c : 18.28 -pb_5c : 18.25 -pb_10c : 18.20 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.29 -pb_1c : 18.29 -pb_5c : 18.25 -pb_10c : 18.20 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.30 -pb_1c : 18.30 -pb_5c : 18.30 -pb_10c : 18.30 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.31 -pb_1c : 18.31 -pb_5c : 18.30 -pb_10c : 18.30 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.32 -pb_1c : 18.32 -pb_5c : 18.30 -pb_10c : 18.30 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.33 -pb_1c : 18.33 -pb_5c : 18.30 -pb_10c : 18.30 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.34 -pb_1c : 18.34 -pb_5c : 18.30 -pb_10c : 18.30 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.35 -pb_1c : 18.35 -pb_5c : 18.35 -pb_10c : 18.30 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.36 -pb_1c : 18.36 -pb_5c : 18.35 -pb_10c : 18.30 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.37 -pb_1c : 18.37 -pb_5c : 18.35 -pb_10c : 18.30 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.38 -pb_1c : 18.38 -pb_5c : 18.35 -pb_10c : 18.30 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.39 -pb_1c : 18.39 -pb_5c : 18.35 -pb_10c : 18.30 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.40 -pb_1c : 18.40 -pb_5c : 18.40 -pb_10c : 18.40 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.41 -pb_1c : 18.41 -pb_5c : 18.40 -pb_10c : 18.40 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.42 -pb_1c : 18.42 -pb_5c : 18.40 -pb_10c : 18.40 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.43 -pb_1c : 18.43 -pb_5c : 18.40 -pb_10c : 18.40 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.44 -pb_1c : 18.44 -pb_5c : 18.40 -pb_10c : 18.40 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.45 -pb_1c : 18.45 -pb_5c : 18.45 -pb_10c : 18.40 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.46 -pb_1c : 18.46 -pb_5c : 18.45 -pb_10c : 18.40 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.47 -pb_1c : 18.47 -pb_5c : 18.45 -pb_10c : 18.40 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.48 -pb_1c : 18.48 -pb_5c : 18.45 -pb_10c : 18.40 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.49 -pb_1c : 18.49 -pb_5c : 18.45 -pb_10c : 18.40 -pb_25c : 18.25 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.50 -pb_1c : 18.50 -pb_5c : 18.50 -pb_10c : 18.50 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.51 -pb_1c : 18.51 -pb_5c : 18.50 -pb_10c : 18.50 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.52 -pb_1c : 18.52 -pb_5c : 18.50 -pb_10c : 18.50 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.53 -pb_1c : 18.53 -pb_5c : 18.50 -pb_10c : 18.50 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.54 -pb_1c : 18.54 -pb_5c : 18.50 -pb_10c : 18.50 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.55 -pb_1c : 18.55 -pb_5c : 18.55 -pb_10c : 18.50 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.56 -pb_1c : 18.56 -pb_5c : 18.55 -pb_10c : 18.50 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.57 -pb_1c : 18.57 -pb_5c : 18.55 -pb_10c : 18.50 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.58 -pb_1c : 18.58 -pb_5c : 18.55 -pb_10c : 18.50 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.59 -pb_1c : 18.59 -pb_5c : 18.55 -pb_10c : 18.50 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.60 -pb_1c : 18.60 -pb_5c : 18.60 -pb_10c : 18.60 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.61 -pb_1c : 18.61 -pb_5c : 18.60 -pb_10c : 18.60 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.62 -pb_1c : 18.62 -pb_5c : 18.60 -pb_10c : 18.60 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.63 -pb_1c : 18.63 -pb_5c : 18.60 -pb_10c : 18.60 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.64 -pb_1c : 18.64 -pb_5c : 18.60 -pb_10c : 18.60 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.65 -pb_1c : 18.65 -pb_5c : 18.65 -pb_10c : 18.60 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.66 -pb_1c : 18.66 -pb_5c : 18.65 -pb_10c : 18.60 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.67 -pb_1c : 18.67 -pb_5c : 18.65 -pb_10c : 18.60 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.68 -pb_1c : 18.68 -pb_5c : 18.65 -pb_10c : 18.60 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.69 -pb_1c : 18.69 -pb_5c : 18.65 -pb_10c : 18.60 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.70 -pb_1c : 18.70 -pb_5c : 18.70 -pb_10c : 18.70 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.71 -pb_1c : 18.71 -pb_5c : 18.70 -pb_10c : 18.70 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.72 -pb_1c : 18.72 -pb_5c : 18.70 -pb_10c : 18.70 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.73 -pb_1c : 18.73 -pb_5c : 18.70 -pb_10c : 18.70 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.74 -pb_1c : 18.74 -pb_5c : 18.70 -pb_10c : 18.70 -pb_25c : 18.50 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.75 -pb_1c : 18.75 -pb_5c : 18.75 -pb_10c : 18.70 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.76 -pb_1c : 18.76 -pb_5c : 18.75 -pb_10c : 18.70 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.77 -pb_1c : 18.77 -pb_5c : 18.75 -pb_10c : 18.70 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.78 -pb_1c : 18.78 -pb_5c : 18.75 -pb_10c : 18.70 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.79 -pb_1c : 18.79 -pb_5c : 18.75 -pb_10c : 18.70 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.80 -pb_1c : 18.80 -pb_5c : 18.80 -pb_10c : 18.80 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.81 -pb_1c : 18.81 -pb_5c : 18.80 -pb_10c : 18.80 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.82 -pb_1c : 18.82 -pb_5c : 18.80 -pb_10c : 18.80 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.83 -pb_1c : 18.83 -pb_5c : 18.80 -pb_10c : 18.80 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.84 -pb_1c : 18.84 -pb_5c : 18.80 -pb_10c : 18.80 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.85 -pb_1c : 18.85 -pb_5c : 18.85 -pb_10c : 18.80 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.86 -pb_1c : 18.86 -pb_5c : 18.85 -pb_10c : 18.80 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.87 -pb_1c : 18.87 -pb_5c : 18.85 -pb_10c : 18.80 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.88 -pb_1c : 18.88 -pb_5c : 18.85 -pb_10c : 18.80 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.89 -pb_1c : 18.89 -pb_5c : 18.85 -pb_10c : 18.80 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.90 -pb_1c : 18.90 -pb_5c : 18.90 -pb_10c : 18.90 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.91 -pb_1c : 18.91 -pb_5c : 18.90 -pb_10c : 18.90 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.92 -pb_1c : 18.92 -pb_5c : 18.90 -pb_10c : 18.90 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.93 -pb_1c : 18.93 -pb_5c : 18.90 -pb_10c : 18.90 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.94 -pb_1c : 18.94 -pb_5c : 18.90 -pb_10c : 18.90 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.95 -pb_1c : 18.95 -pb_5c : 18.95 -pb_10c : 18.90 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.96 -pb_1c : 18.96 -pb_5c : 18.95 -pb_10c : 18.90 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.97 -pb_1c : 18.97 -pb_5c : 18.95 -pb_10c : 18.90 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.98 -pb_1c : 18.98 -pb_5c : 18.95 -pb_10c : 18.90 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -18.99 -pb_1c : 18.99 -pb_5c : 18.95 -pb_10c : 18.90 -pb_25c : 18.75 -pb_1d : 18.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.00 -pb_1c : 19.00 -pb_5c : 19.00 -pb_10c : 19.00 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.01 -pb_1c : 19.01 -pb_5c : 19.00 -pb_10c : 19.00 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.02 -pb_1c : 19.02 -pb_5c : 19.00 -pb_10c : 19.00 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.03 -pb_1c : 19.03 -pb_5c : 19.00 -pb_10c : 19.00 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.04 -pb_1c : 19.04 -pb_5c : 19.00 -pb_10c : 19.00 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.05 -pb_1c : 19.05 -pb_5c : 19.05 -pb_10c : 19.00 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.06 -pb_1c : 19.06 -pb_5c : 19.05 -pb_10c : 19.00 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.07 -pb_1c : 19.07 -pb_5c : 19.05 -pb_10c : 19.00 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.08 -pb_1c : 19.08 -pb_5c : 19.05 -pb_10c : 19.00 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.09 -pb_1c : 19.09 -pb_5c : 19.05 -pb_10c : 19.00 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.10 -pb_1c : 19.10 -pb_5c : 19.10 -pb_10c : 19.10 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.11 -pb_1c : 19.11 -pb_5c : 19.10 -pb_10c : 19.10 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.12 -pb_1c : 19.12 -pb_5c : 19.10 -pb_10c : 19.10 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.13 -pb_1c : 19.13 -pb_5c : 19.10 -pb_10c : 19.10 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.14 -pb_1c : 19.14 -pb_5c : 19.10 -pb_10c : 19.10 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.15 -pb_1c : 19.15 -pb_5c : 19.15 -pb_10c : 19.10 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.16 -pb_1c : 19.16 -pb_5c : 19.15 -pb_10c : 19.10 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.17 -pb_1c : 19.17 -pb_5c : 19.15 -pb_10c : 19.10 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.18 -pb_1c : 19.18 -pb_5c : 19.15 -pb_10c : 19.10 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.19 -pb_1c : 19.19 -pb_5c : 19.15 -pb_10c : 19.10 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.20 -pb_1c : 19.20 -pb_5c : 19.20 -pb_10c : 19.20 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.21 -pb_1c : 19.21 -pb_5c : 19.20 -pb_10c : 19.20 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.22 -pb_1c : 19.22 -pb_5c : 19.20 -pb_10c : 19.20 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.23 -pb_1c : 19.23 -pb_5c : 19.20 -pb_10c : 19.20 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.24 -pb_1c : 19.24 -pb_5c : 19.20 -pb_10c : 19.20 -pb_25c : 19.00 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.25 -pb_1c : 19.25 -pb_5c : 19.25 -pb_10c : 19.20 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.26 -pb_1c : 19.26 -pb_5c : 19.25 -pb_10c : 19.20 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.27 -pb_1c : 19.27 -pb_5c : 19.25 -pb_10c : 19.20 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.28 -pb_1c : 19.28 -pb_5c : 19.25 -pb_10c : 19.20 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.29 -pb_1c : 19.29 -pb_5c : 19.25 -pb_10c : 19.20 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.30 -pb_1c : 19.30 -pb_5c : 19.30 -pb_10c : 19.30 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.31 -pb_1c : 19.31 -pb_5c : 19.30 -pb_10c : 19.30 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.32 -pb_1c : 19.32 -pb_5c : 19.30 -pb_10c : 19.30 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.33 -pb_1c : 19.33 -pb_5c : 19.30 -pb_10c : 19.30 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.34 -pb_1c : 19.34 -pb_5c : 19.30 -pb_10c : 19.30 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.35 -pb_1c : 19.35 -pb_5c : 19.35 -pb_10c : 19.30 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.36 -pb_1c : 19.36 -pb_5c : 19.35 -pb_10c : 19.30 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.37 -pb_1c : 19.37 -pb_5c : 19.35 -pb_10c : 19.30 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.38 -pb_1c : 19.38 -pb_5c : 19.35 -pb_10c : 19.30 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.39 -pb_1c : 19.39 -pb_5c : 19.35 -pb_10c : 19.30 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.40 -pb_1c : 19.40 -pb_5c : 19.40 -pb_10c : 19.40 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.41 -pb_1c : 19.41 -pb_5c : 19.40 -pb_10c : 19.40 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.42 -pb_1c : 19.42 -pb_5c : 19.40 -pb_10c : 19.40 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.43 -pb_1c : 19.43 -pb_5c : 19.40 -pb_10c : 19.40 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.44 -pb_1c : 19.44 -pb_5c : 19.40 -pb_10c : 19.40 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.45 -pb_1c : 19.45 -pb_5c : 19.45 -pb_10c : 19.40 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.46 -pb_1c : 19.46 -pb_5c : 19.45 -pb_10c : 19.40 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.47 -pb_1c : 19.47 -pb_5c : 19.45 -pb_10c : 19.40 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.48 -pb_1c : 19.48 -pb_5c : 19.45 -pb_10c : 19.40 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.49 -pb_1c : 19.49 -pb_5c : 19.45 -pb_10c : 19.40 -pb_25c : 19.25 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.50 -pb_1c : 19.50 -pb_5c : 19.50 -pb_10c : 19.50 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.51 -pb_1c : 19.51 -pb_5c : 19.50 -pb_10c : 19.50 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.52 -pb_1c : 19.52 -pb_5c : 19.50 -pb_10c : 19.50 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.53 -pb_1c : 19.53 -pb_5c : 19.50 -pb_10c : 19.50 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.54 -pb_1c : 19.54 -pb_5c : 19.50 -pb_10c : 19.50 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.55 -pb_1c : 19.55 -pb_5c : 19.55 -pb_10c : 19.50 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.56 -pb_1c : 19.56 -pb_5c : 19.55 -pb_10c : 19.50 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.57 -pb_1c : 19.57 -pb_5c : 19.55 -pb_10c : 19.50 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.58 -pb_1c : 19.58 -pb_5c : 19.55 -pb_10c : 19.50 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.59 -pb_1c : 19.59 -pb_5c : 19.55 -pb_10c : 19.50 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.60 -pb_1c : 19.60 -pb_5c : 19.60 -pb_10c : 19.60 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.61 -pb_1c : 19.61 -pb_5c : 19.60 -pb_10c : 19.60 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.62 -pb_1c : 19.62 -pb_5c : 19.60 -pb_10c : 19.60 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.63 -pb_1c : 19.63 -pb_5c : 19.60 -pb_10c : 19.60 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.64 -pb_1c : 19.64 -pb_5c : 19.60 -pb_10c : 19.60 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.65 -pb_1c : 19.65 -pb_5c : 19.65 -pb_10c : 19.60 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.66 -pb_1c : 19.66 -pb_5c : 19.65 -pb_10c : 19.60 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.67 -pb_1c : 19.67 -pb_5c : 19.65 -pb_10c : 19.60 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.68 -pb_1c : 19.68 -pb_5c : 19.65 -pb_10c : 19.60 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.69 -pb_1c : 19.69 -pb_5c : 19.65 -pb_10c : 19.60 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.70 -pb_1c : 19.70 -pb_5c : 19.70 -pb_10c : 19.70 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.71 -pb_1c : 19.71 -pb_5c : 19.70 -pb_10c : 19.70 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.72 -pb_1c : 19.72 -pb_5c : 19.70 -pb_10c : 19.70 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.73 -pb_1c : 19.73 -pb_5c : 19.70 -pb_10c : 19.70 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.74 -pb_1c : 19.74 -pb_5c : 19.70 -pb_10c : 19.70 -pb_25c : 19.50 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.75 -pb_1c : 19.75 -pb_5c : 19.75 -pb_10c : 19.70 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.76 -pb_1c : 19.76 -pb_5c : 19.75 -pb_10c : 19.70 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.77 -pb_1c : 19.77 -pb_5c : 19.75 -pb_10c : 19.70 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.78 -pb_1c : 19.78 -pb_5c : 19.75 -pb_10c : 19.70 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.79 -pb_1c : 19.79 -pb_5c : 19.75 -pb_10c : 19.70 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.80 -pb_1c : 19.80 -pb_5c : 19.80 -pb_10c : 19.80 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.81 -pb_1c : 19.81 -pb_5c : 19.80 -pb_10c : 19.80 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.82 -pb_1c : 19.82 -pb_5c : 19.80 -pb_10c : 19.80 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.83 -pb_1c : 19.83 -pb_5c : 19.80 -pb_10c : 19.80 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.84 -pb_1c : 19.84 -pb_5c : 19.80 -pb_10c : 19.80 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.85 -pb_1c : 19.85 -pb_5c : 19.85 -pb_10c : 19.80 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.86 -pb_1c : 19.86 -pb_5c : 19.85 -pb_10c : 19.80 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.87 -pb_1c : 19.87 -pb_5c : 19.85 -pb_10c : 19.80 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.88 -pb_1c : 19.88 -pb_5c : 19.85 -pb_10c : 19.80 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.89 -pb_1c : 19.89 -pb_5c : 19.85 -pb_10c : 19.80 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.90 -pb_1c : 19.90 -pb_5c : 19.90 -pb_10c : 19.90 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.91 -pb_1c : 19.91 -pb_5c : 19.90 -pb_10c : 19.90 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.92 -pb_1c : 19.92 -pb_5c : 19.90 -pb_10c : 19.90 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.93 -pb_1c : 19.93 -pb_5c : 19.90 -pb_10c : 19.90 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.94 -pb_1c : 19.94 -pb_5c : 19.90 -pb_10c : 19.90 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.95 -pb_1c : 19.95 -pb_5c : 19.95 -pb_10c : 19.90 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.96 -pb_1c : 19.96 -pb_5c : 19.95 -pb_10c : 19.90 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.97 -pb_1c : 19.97 -pb_5c : 19.95 -pb_10c : 19.90 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.98 -pb_1c : 19.98 -pb_5c : 19.95 -pb_10c : 19.90 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -19.99 -pb_1c : 19.99 -pb_5c : 19.95 -pb_10c : 19.90 -pb_25c : 19.75 -pb_1d : 19.00 -pb_5d : 15.00 -pb_10d : 10.00 - -20.00 -pb_1c : 20.00 -pb_5c : 20.00 -pb_10c : 20.00 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.01 -pb_1c : 20.01 -pb_5c : 20.00 -pb_10c : 20.00 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.02 -pb_1c : 20.02 -pb_5c : 20.00 -pb_10c : 20.00 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.03 -pb_1c : 20.03 -pb_5c : 20.00 -pb_10c : 20.00 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.04 -pb_1c : 20.04 -pb_5c : 20.00 -pb_10c : 20.00 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.05 -pb_1c : 20.05 -pb_5c : 20.05 -pb_10c : 20.00 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.06 -pb_1c : 20.06 -pb_5c : 20.05 -pb_10c : 20.00 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.07 -pb_1c : 20.07 -pb_5c : 20.05 -pb_10c : 20.00 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.08 -pb_1c : 20.08 -pb_5c : 20.05 -pb_10c : 20.00 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.09 -pb_1c : 20.09 -pb_5c : 20.05 -pb_10c : 20.00 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.10 -pb_1c : 20.10 -pb_5c : 20.10 -pb_10c : 20.10 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.11 -pb_1c : 20.11 -pb_5c : 20.10 -pb_10c : 20.10 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.12 -pb_1c : 20.12 -pb_5c : 20.10 -pb_10c : 20.10 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.13 -pb_1c : 20.13 -pb_5c : 20.10 -pb_10c : 20.10 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.14 -pb_1c : 20.14 -pb_5c : 20.10 -pb_10c : 20.10 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.15 -pb_1c : 20.15 -pb_5c : 20.15 -pb_10c : 20.10 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.16 -pb_1c : 20.16 -pb_5c : 20.15 -pb_10c : 20.10 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.17 -pb_1c : 20.17 -pb_5c : 20.15 -pb_10c : 20.10 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.18 -pb_1c : 20.18 -pb_5c : 20.15 -pb_10c : 20.10 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.19 -pb_1c : 20.19 -pb_5c : 20.15 -pb_10c : 20.10 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.20 -pb_1c : 20.20 -pb_5c : 20.20 -pb_10c : 20.20 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.21 -pb_1c : 20.21 -pb_5c : 20.20 -pb_10c : 20.20 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.22 -pb_1c : 20.22 -pb_5c : 20.20 -pb_10c : 20.20 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.23 -pb_1c : 20.23 -pb_5c : 20.20 -pb_10c : 20.20 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.24 -pb_1c : 20.24 -pb_5c : 20.20 -pb_10c : 20.20 -pb_25c : 20.00 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.25 -pb_1c : 20.25 -pb_5c : 20.25 -pb_10c : 20.20 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.26 -pb_1c : 20.26 -pb_5c : 20.25 -pb_10c : 20.20 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.27 -pb_1c : 20.27 -pb_5c : 20.25 -pb_10c : 20.20 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.28 -pb_1c : 20.28 -pb_5c : 20.25 -pb_10c : 20.20 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.29 -pb_1c : 20.29 -pb_5c : 20.25 -pb_10c : 20.20 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.30 -pb_1c : 20.30 -pb_5c : 20.30 -pb_10c : 20.30 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.31 -pb_1c : 20.31 -pb_5c : 20.30 -pb_10c : 20.30 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.32 -pb_1c : 20.32 -pb_5c : 20.30 -pb_10c : 20.30 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.33 -pb_1c : 20.33 -pb_5c : 20.30 -pb_10c : 20.30 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.34 -pb_1c : 20.34 -pb_5c : 20.30 -pb_10c : 20.30 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.35 -pb_1c : 20.35 -pb_5c : 20.35 -pb_10c : 20.30 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.36 -pb_1c : 20.36 -pb_5c : 20.35 -pb_10c : 20.30 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.37 -pb_1c : 20.37 -pb_5c : 20.35 -pb_10c : 20.30 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.38 -pb_1c : 20.38 -pb_5c : 20.35 -pb_10c : 20.30 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.39 -pb_1c : 20.39 -pb_5c : 20.35 -pb_10c : 20.30 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.40 -pb_1c : 20.40 -pb_5c : 20.40 -pb_10c : 20.40 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.41 -pb_1c : 20.41 -pb_5c : 20.40 -pb_10c : 20.40 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.42 -pb_1c : 20.42 -pb_5c : 20.40 -pb_10c : 20.40 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.43 -pb_1c : 20.43 -pb_5c : 20.40 -pb_10c : 20.40 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.44 -pb_1c : 20.44 -pb_5c : 20.40 -pb_10c : 20.40 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.45 -pb_1c : 20.45 -pb_5c : 20.45 -pb_10c : 20.40 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.46 -pb_1c : 20.46 -pb_5c : 20.45 -pb_10c : 20.40 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.47 -pb_1c : 20.47 -pb_5c : 20.45 -pb_10c : 20.40 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.48 -pb_1c : 20.48 -pb_5c : 20.45 -pb_10c : 20.40 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.49 -pb_1c : 20.49 -pb_5c : 20.45 -pb_10c : 20.40 -pb_25c : 20.25 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.50 -pb_1c : 20.50 -pb_5c : 20.50 -pb_10c : 20.50 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.51 -pb_1c : 20.51 -pb_5c : 20.50 -pb_10c : 20.50 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.52 -pb_1c : 20.52 -pb_5c : 20.50 -pb_10c : 20.50 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.53 -pb_1c : 20.53 -pb_5c : 20.50 -pb_10c : 20.50 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.54 -pb_1c : 20.54 -pb_5c : 20.50 -pb_10c : 20.50 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.55 -pb_1c : 20.55 -pb_5c : 20.55 -pb_10c : 20.50 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.56 -pb_1c : 20.56 -pb_5c : 20.55 -pb_10c : 20.50 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.57 -pb_1c : 20.57 -pb_5c : 20.55 -pb_10c : 20.50 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.58 -pb_1c : 20.58 -pb_5c : 20.55 -pb_10c : 20.50 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.59 -pb_1c : 20.59 -pb_5c : 20.55 -pb_10c : 20.50 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.60 -pb_1c : 20.60 -pb_5c : 20.60 -pb_10c : 20.60 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.61 -pb_1c : 20.61 -pb_5c : 20.60 -pb_10c : 20.60 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.62 -pb_1c : 20.62 -pb_5c : 20.60 -pb_10c : 20.60 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.63 -pb_1c : 20.63 -pb_5c : 20.60 -pb_10c : 20.60 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.64 -pb_1c : 20.64 -pb_5c : 20.60 -pb_10c : 20.60 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.65 -pb_1c : 20.65 -pb_5c : 20.65 -pb_10c : 20.60 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.66 -pb_1c : 20.66 -pb_5c : 20.65 -pb_10c : 20.60 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.67 -pb_1c : 20.67 -pb_5c : 20.65 -pb_10c : 20.60 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.68 -pb_1c : 20.68 -pb_5c : 20.65 -pb_10c : 20.60 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.69 -pb_1c : 20.69 -pb_5c : 20.65 -pb_10c : 20.60 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.70 -pb_1c : 20.70 -pb_5c : 20.70 -pb_10c : 20.70 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.71 -pb_1c : 20.71 -pb_5c : 20.70 -pb_10c : 20.70 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.72 -pb_1c : 20.72 -pb_5c : 20.70 -pb_10c : 20.70 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.73 -pb_1c : 20.73 -pb_5c : 20.70 -pb_10c : 20.70 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.74 -pb_1c : 20.74 -pb_5c : 20.70 -pb_10c : 20.70 -pb_25c : 20.50 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.75 -pb_1c : 20.75 -pb_5c : 20.75 -pb_10c : 20.70 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.76 -pb_1c : 20.76 -pb_5c : 20.75 -pb_10c : 20.70 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.77 -pb_1c : 20.77 -pb_5c : 20.75 -pb_10c : 20.70 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.78 -pb_1c : 20.78 -pb_5c : 20.75 -pb_10c : 20.70 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.79 -pb_1c : 20.79 -pb_5c : 20.75 -pb_10c : 20.70 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.80 -pb_1c : 20.80 -pb_5c : 20.80 -pb_10c : 20.80 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.81 -pb_1c : 20.81 -pb_5c : 20.80 -pb_10c : 20.80 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.82 -pb_1c : 20.82 -pb_5c : 20.80 -pb_10c : 20.80 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.83 -pb_1c : 20.83 -pb_5c : 20.80 -pb_10c : 20.80 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.84 -pb_1c : 20.84 -pb_5c : 20.80 -pb_10c : 20.80 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.85 -pb_1c : 20.85 -pb_5c : 20.85 -pb_10c : 20.80 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.86 -pb_1c : 20.86 -pb_5c : 20.85 -pb_10c : 20.80 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.87 -pb_1c : 20.87 -pb_5c : 20.85 -pb_10c : 20.80 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.88 -pb_1c : 20.88 -pb_5c : 20.85 -pb_10c : 20.80 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.89 -pb_1c : 20.89 -pb_5c : 20.85 -pb_10c : 20.80 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.90 -pb_1c : 20.90 -pb_5c : 20.90 -pb_10c : 20.90 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.91 -pb_1c : 20.91 -pb_5c : 20.90 -pb_10c : 20.90 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.92 -pb_1c : 20.92 -pb_5c : 20.90 -pb_10c : 20.90 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.93 -pb_1c : 20.93 -pb_5c : 20.90 -pb_10c : 20.90 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.94 -pb_1c : 20.94 -pb_5c : 20.90 -pb_10c : 20.90 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.95 -pb_1c : 20.95 -pb_5c : 20.95 -pb_10c : 20.90 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.96 -pb_1c : 20.96 -pb_5c : 20.95 -pb_10c : 20.90 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.97 -pb_1c : 20.97 -pb_5c : 20.95 -pb_10c : 20.90 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.98 -pb_1c : 20.98 -pb_5c : 20.95 -pb_10c : 20.90 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -20.99 -pb_1c : 20.99 -pb_5c : 20.95 -pb_10c : 20.90 -pb_25c : 20.75 -pb_1d : 20.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.00 -pb_1c : 21.00 -pb_5c : 21.00 -pb_10c : 21.00 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.01 -pb_1c : 21.01 -pb_5c : 21.00 -pb_10c : 21.00 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.02 -pb_1c : 21.02 -pb_5c : 21.00 -pb_10c : 21.00 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.03 -pb_1c : 21.03 -pb_5c : 21.00 -pb_10c : 21.00 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.04 -pb_1c : 21.04 -pb_5c : 21.00 -pb_10c : 21.00 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.05 -pb_1c : 21.05 -pb_5c : 21.05 -pb_10c : 21.00 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.06 -pb_1c : 21.06 -pb_5c : 21.05 -pb_10c : 21.00 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.07 -pb_1c : 21.07 -pb_5c : 21.05 -pb_10c : 21.00 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.08 -pb_1c : 21.08 -pb_5c : 21.05 -pb_10c : 21.00 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.09 -pb_1c : 21.09 -pb_5c : 21.05 -pb_10c : 21.00 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.10 -pb_1c : 21.10 -pb_5c : 21.10 -pb_10c : 21.10 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.11 -pb_1c : 21.11 -pb_5c : 21.10 -pb_10c : 21.10 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.12 -pb_1c : 21.12 -pb_5c : 21.10 -pb_10c : 21.10 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.13 -pb_1c : 21.13 -pb_5c : 21.10 -pb_10c : 21.10 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.14 -pb_1c : 21.14 -pb_5c : 21.10 -pb_10c : 21.10 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.15 -pb_1c : 21.15 -pb_5c : 21.15 -pb_10c : 21.10 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.16 -pb_1c : 21.16 -pb_5c : 21.15 -pb_10c : 21.10 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.17 -pb_1c : 21.17 -pb_5c : 21.15 -pb_10c : 21.10 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.18 -pb_1c : 21.18 -pb_5c : 21.15 -pb_10c : 21.10 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.19 -pb_1c : 21.19 -pb_5c : 21.15 -pb_10c : 21.10 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.20 -pb_1c : 21.20 -pb_5c : 21.20 -pb_10c : 21.20 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.21 -pb_1c : 21.21 -pb_5c : 21.20 -pb_10c : 21.20 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.22 -pb_1c : 21.22 -pb_5c : 21.20 -pb_10c : 21.20 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.23 -pb_1c : 21.23 -pb_5c : 21.20 -pb_10c : 21.20 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.24 -pb_1c : 21.24 -pb_5c : 21.20 -pb_10c : 21.20 -pb_25c : 21.00 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.25 -pb_1c : 21.25 -pb_5c : 21.25 -pb_10c : 21.20 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.26 -pb_1c : 21.26 -pb_5c : 21.25 -pb_10c : 21.20 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.27 -pb_1c : 21.27 -pb_5c : 21.25 -pb_10c : 21.20 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.28 -pb_1c : 21.28 -pb_5c : 21.25 -pb_10c : 21.20 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.29 -pb_1c : 21.29 -pb_5c : 21.25 -pb_10c : 21.20 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.30 -pb_1c : 21.30 -pb_5c : 21.30 -pb_10c : 21.30 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.31 -pb_1c : 21.31 -pb_5c : 21.30 -pb_10c : 21.30 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.32 -pb_1c : 21.32 -pb_5c : 21.30 -pb_10c : 21.30 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.33 -pb_1c : 21.33 -pb_5c : 21.30 -pb_10c : 21.30 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.34 -pb_1c : 21.34 -pb_5c : 21.30 -pb_10c : 21.30 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.35 -pb_1c : 21.35 -pb_5c : 21.35 -pb_10c : 21.30 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.36 -pb_1c : 21.36 -pb_5c : 21.35 -pb_10c : 21.30 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.37 -pb_1c : 21.37 -pb_5c : 21.35 -pb_10c : 21.30 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.38 -pb_1c : 21.38 -pb_5c : 21.35 -pb_10c : 21.30 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.39 -pb_1c : 21.39 -pb_5c : 21.35 -pb_10c : 21.30 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.40 -pb_1c : 21.40 -pb_5c : 21.40 -pb_10c : 21.40 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.41 -pb_1c : 21.41 -pb_5c : 21.40 -pb_10c : 21.40 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.42 -pb_1c : 21.42 -pb_5c : 21.40 -pb_10c : 21.40 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.43 -pb_1c : 21.43 -pb_5c : 21.40 -pb_10c : 21.40 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.44 -pb_1c : 21.44 -pb_5c : 21.40 -pb_10c : 21.40 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.45 -pb_1c : 21.45 -pb_5c : 21.45 -pb_10c : 21.40 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.46 -pb_1c : 21.46 -pb_5c : 21.45 -pb_10c : 21.40 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.47 -pb_1c : 21.47 -pb_5c : 21.45 -pb_10c : 21.40 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.48 -pb_1c : 21.48 -pb_5c : 21.45 -pb_10c : 21.40 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.49 -pb_1c : 21.49 -pb_5c : 21.45 -pb_10c : 21.40 -pb_25c : 21.25 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.50 -pb_1c : 21.50 -pb_5c : 21.50 -pb_10c : 21.50 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.51 -pb_1c : 21.51 -pb_5c : 21.50 -pb_10c : 21.50 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.52 -pb_1c : 21.52 -pb_5c : 21.50 -pb_10c : 21.50 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.53 -pb_1c : 21.53 -pb_5c : 21.50 -pb_10c : 21.50 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.54 -pb_1c : 21.54 -pb_5c : 21.50 -pb_10c : 21.50 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.55 -pb_1c : 21.55 -pb_5c : 21.55 -pb_10c : 21.50 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.56 -pb_1c : 21.56 -pb_5c : 21.55 -pb_10c : 21.50 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.57 -pb_1c : 21.57 -pb_5c : 21.55 -pb_10c : 21.50 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.58 -pb_1c : 21.58 -pb_5c : 21.55 -pb_10c : 21.50 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.59 -pb_1c : 21.59 -pb_5c : 21.55 -pb_10c : 21.50 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.60 -pb_1c : 21.60 -pb_5c : 21.60 -pb_10c : 21.60 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.61 -pb_1c : 21.61 -pb_5c : 21.60 -pb_10c : 21.60 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.62 -pb_1c : 21.62 -pb_5c : 21.60 -pb_10c : 21.60 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.63 -pb_1c : 21.63 -pb_5c : 21.60 -pb_10c : 21.60 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.64 -pb_1c : 21.64 -pb_5c : 21.60 -pb_10c : 21.60 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.65 -pb_1c : 21.65 -pb_5c : 21.65 -pb_10c : 21.60 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.66 -pb_1c : 21.66 -pb_5c : 21.65 -pb_10c : 21.60 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.67 -pb_1c : 21.67 -pb_5c : 21.65 -pb_10c : 21.60 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.68 -pb_1c : 21.68 -pb_5c : 21.65 -pb_10c : 21.60 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.69 -pb_1c : 21.69 -pb_5c : 21.65 -pb_10c : 21.60 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.70 -pb_1c : 21.70 -pb_5c : 21.70 -pb_10c : 21.70 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.71 -pb_1c : 21.71 -pb_5c : 21.70 -pb_10c : 21.70 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.72 -pb_1c : 21.72 -pb_5c : 21.70 -pb_10c : 21.70 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.73 -pb_1c : 21.73 -pb_5c : 21.70 -pb_10c : 21.70 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.74 -pb_1c : 21.74 -pb_5c : 21.70 -pb_10c : 21.70 -pb_25c : 21.50 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.75 -pb_1c : 21.75 -pb_5c : 21.75 -pb_10c : 21.70 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.76 -pb_1c : 21.76 -pb_5c : 21.75 -pb_10c : 21.70 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.77 -pb_1c : 21.77 -pb_5c : 21.75 -pb_10c : 21.70 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.78 -pb_1c : 21.78 -pb_5c : 21.75 -pb_10c : 21.70 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.79 -pb_1c : 21.79 -pb_5c : 21.75 -pb_10c : 21.70 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.80 -pb_1c : 21.80 -pb_5c : 21.80 -pb_10c : 21.80 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.81 -pb_1c : 21.81 -pb_5c : 21.80 -pb_10c : 21.80 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.82 -pb_1c : 21.82 -pb_5c : 21.80 -pb_10c : 21.80 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.83 -pb_1c : 21.83 -pb_5c : 21.80 -pb_10c : 21.80 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.84 -pb_1c : 21.84 -pb_5c : 21.80 -pb_10c : 21.80 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.85 -pb_1c : 21.85 -pb_5c : 21.85 -pb_10c : 21.80 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.86 -pb_1c : 21.86 -pb_5c : 21.85 -pb_10c : 21.80 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.87 -pb_1c : 21.87 -pb_5c : 21.85 -pb_10c : 21.80 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.88 -pb_1c : 21.88 -pb_5c : 21.85 -pb_10c : 21.80 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.89 -pb_1c : 21.89 -pb_5c : 21.85 -pb_10c : 21.80 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.90 -pb_1c : 21.90 -pb_5c : 21.90 -pb_10c : 21.90 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.91 -pb_1c : 21.91 -pb_5c : 21.90 -pb_10c : 21.90 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.92 -pb_1c : 21.92 -pb_5c : 21.90 -pb_10c : 21.90 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.93 -pb_1c : 21.93 -pb_5c : 21.90 -pb_10c : 21.90 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.94 -pb_1c : 21.94 -pb_5c : 21.90 -pb_10c : 21.90 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.95 -pb_1c : 21.95 -pb_5c : 21.95 -pb_10c : 21.90 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.96 -pb_1c : 21.96 -pb_5c : 21.95 -pb_10c : 21.90 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.97 -pb_1c : 21.97 -pb_5c : 21.95 -pb_10c : 21.90 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.98 -pb_1c : 21.98 -pb_5c : 21.95 -pb_10c : 21.90 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -21.99 -pb_1c : 21.99 -pb_5c : 21.95 -pb_10c : 21.90 -pb_25c : 21.75 -pb_1d : 21.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.00 -pb_1c : 22.00 -pb_5c : 22.00 -pb_10c : 22.00 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.01 -pb_1c : 22.01 -pb_5c : 22.00 -pb_10c : 22.00 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.02 -pb_1c : 22.02 -pb_5c : 22.00 -pb_10c : 22.00 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.03 -pb_1c : 22.03 -pb_5c : 22.00 -pb_10c : 22.00 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.04 -pb_1c : 22.04 -pb_5c : 22.00 -pb_10c : 22.00 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.05 -pb_1c : 22.05 -pb_5c : 22.05 -pb_10c : 22.00 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.06 -pb_1c : 22.06 -pb_5c : 22.05 -pb_10c : 22.00 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.07 -pb_1c : 22.07 -pb_5c : 22.05 -pb_10c : 22.00 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.08 -pb_1c : 22.08 -pb_5c : 22.05 -pb_10c : 22.00 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.09 -pb_1c : 22.09 -pb_5c : 22.05 -pb_10c : 22.00 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.10 -pb_1c : 22.10 -pb_5c : 22.10 -pb_10c : 22.10 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.11 -pb_1c : 22.11 -pb_5c : 22.10 -pb_10c : 22.10 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.12 -pb_1c : 22.12 -pb_5c : 22.10 -pb_10c : 22.10 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.13 -pb_1c : 22.13 -pb_5c : 22.10 -pb_10c : 22.10 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.14 -pb_1c : 22.14 -pb_5c : 22.10 -pb_10c : 22.10 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.15 -pb_1c : 22.15 -pb_5c : 22.15 -pb_10c : 22.10 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.16 -pb_1c : 22.16 -pb_5c : 22.15 -pb_10c : 22.10 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.17 -pb_1c : 22.17 -pb_5c : 22.15 -pb_10c : 22.10 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.18 -pb_1c : 22.18 -pb_5c : 22.15 -pb_10c : 22.10 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.19 -pb_1c : 22.19 -pb_5c : 22.15 -pb_10c : 22.10 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.20 -pb_1c : 22.20 -pb_5c : 22.20 -pb_10c : 22.20 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.21 -pb_1c : 22.21 -pb_5c : 22.20 -pb_10c : 22.20 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.22 -pb_1c : 22.22 -pb_5c : 22.20 -pb_10c : 22.20 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.23 -pb_1c : 22.23 -pb_5c : 22.20 -pb_10c : 22.20 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.24 -pb_1c : 22.24 -pb_5c : 22.20 -pb_10c : 22.20 -pb_25c : 22.00 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.25 -pb_1c : 22.25 -pb_5c : 22.25 -pb_10c : 22.20 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.26 -pb_1c : 22.26 -pb_5c : 22.25 -pb_10c : 22.20 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.27 -pb_1c : 22.27 -pb_5c : 22.25 -pb_10c : 22.20 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.28 -pb_1c : 22.28 -pb_5c : 22.25 -pb_10c : 22.20 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.29 -pb_1c : 22.29 -pb_5c : 22.25 -pb_10c : 22.20 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.30 -pb_1c : 22.30 -pb_5c : 22.30 -pb_10c : 22.30 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.31 -pb_1c : 22.31 -pb_5c : 22.30 -pb_10c : 22.30 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.32 -pb_1c : 22.32 -pb_5c : 22.30 -pb_10c : 22.30 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.33 -pb_1c : 22.33 -pb_5c : 22.30 -pb_10c : 22.30 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.34 -pb_1c : 22.34 -pb_5c : 22.30 -pb_10c : 22.30 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.35 -pb_1c : 22.35 -pb_5c : 22.35 -pb_10c : 22.30 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.36 -pb_1c : 22.36 -pb_5c : 22.35 -pb_10c : 22.30 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.37 -pb_1c : 22.37 -pb_5c : 22.35 -pb_10c : 22.30 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.38 -pb_1c : 22.38 -pb_5c : 22.35 -pb_10c : 22.30 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.39 -pb_1c : 22.39 -pb_5c : 22.35 -pb_10c : 22.30 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.40 -pb_1c : 22.40 -pb_5c : 22.40 -pb_10c : 22.40 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.41 -pb_1c : 22.41 -pb_5c : 22.40 -pb_10c : 22.40 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.42 -pb_1c : 22.42 -pb_5c : 22.40 -pb_10c : 22.40 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.43 -pb_1c : 22.43 -pb_5c : 22.40 -pb_10c : 22.40 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.44 -pb_1c : 22.44 -pb_5c : 22.40 -pb_10c : 22.40 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.45 -pb_1c : 22.45 -pb_5c : 22.45 -pb_10c : 22.40 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.46 -pb_1c : 22.46 -pb_5c : 22.45 -pb_10c : 22.40 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.47 -pb_1c : 22.47 -pb_5c : 22.45 -pb_10c : 22.40 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.48 -pb_1c : 22.48 -pb_5c : 22.45 -pb_10c : 22.40 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.49 -pb_1c : 22.49 -pb_5c : 22.45 -pb_10c : 22.40 -pb_25c : 22.25 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.50 -pb_1c : 22.50 -pb_5c : 22.50 -pb_10c : 22.50 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.51 -pb_1c : 22.51 -pb_5c : 22.50 -pb_10c : 22.50 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.52 -pb_1c : 22.52 -pb_5c : 22.50 -pb_10c : 22.50 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.53 -pb_1c : 22.53 -pb_5c : 22.50 -pb_10c : 22.50 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.54 -pb_1c : 22.54 -pb_5c : 22.50 -pb_10c : 22.50 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.55 -pb_1c : 22.55 -pb_5c : 22.55 -pb_10c : 22.50 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.56 -pb_1c : 22.56 -pb_5c : 22.55 -pb_10c : 22.50 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.57 -pb_1c : 22.57 -pb_5c : 22.55 -pb_10c : 22.50 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.58 -pb_1c : 22.58 -pb_5c : 22.55 -pb_10c : 22.50 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.59 -pb_1c : 22.59 -pb_5c : 22.55 -pb_10c : 22.50 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.60 -pb_1c : 22.60 -pb_5c : 22.60 -pb_10c : 22.60 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.61 -pb_1c : 22.61 -pb_5c : 22.60 -pb_10c : 22.60 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.62 -pb_1c : 22.62 -pb_5c : 22.60 -pb_10c : 22.60 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.63 -pb_1c : 22.63 -pb_5c : 22.60 -pb_10c : 22.60 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.64 -pb_1c : 22.64 -pb_5c : 22.60 -pb_10c : 22.60 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.65 -pb_1c : 22.65 -pb_5c : 22.65 -pb_10c : 22.60 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.66 -pb_1c : 22.66 -pb_5c : 22.65 -pb_10c : 22.60 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.67 -pb_1c : 22.67 -pb_5c : 22.65 -pb_10c : 22.60 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.68 -pb_1c : 22.68 -pb_5c : 22.65 -pb_10c : 22.60 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.69 -pb_1c : 22.69 -pb_5c : 22.65 -pb_10c : 22.60 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.70 -pb_1c : 22.70 -pb_5c : 22.70 -pb_10c : 22.70 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.71 -pb_1c : 22.71 -pb_5c : 22.70 -pb_10c : 22.70 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.72 -pb_1c : 22.72 -pb_5c : 22.70 -pb_10c : 22.70 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.73 -pb_1c : 22.73 -pb_5c : 22.70 -pb_10c : 22.70 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.74 -pb_1c : 22.74 -pb_5c : 22.70 -pb_10c : 22.70 -pb_25c : 22.50 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.75 -pb_1c : 22.75 -pb_5c : 22.75 -pb_10c : 22.70 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.76 -pb_1c : 22.76 -pb_5c : 22.75 -pb_10c : 22.70 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.77 -pb_1c : 22.77 -pb_5c : 22.75 -pb_10c : 22.70 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.78 -pb_1c : 22.78 -pb_5c : 22.75 -pb_10c : 22.70 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.79 -pb_1c : 22.79 -pb_5c : 22.75 -pb_10c : 22.70 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.80 -pb_1c : 22.80 -pb_5c : 22.80 -pb_10c : 22.80 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.81 -pb_1c : 22.81 -pb_5c : 22.80 -pb_10c : 22.80 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.82 -pb_1c : 22.82 -pb_5c : 22.80 -pb_10c : 22.80 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.83 -pb_1c : 22.83 -pb_5c : 22.80 -pb_10c : 22.80 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.84 -pb_1c : 22.84 -pb_5c : 22.80 -pb_10c : 22.80 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.85 -pb_1c : 22.85 -pb_5c : 22.85 -pb_10c : 22.80 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.86 -pb_1c : 22.86 -pb_5c : 22.85 -pb_10c : 22.80 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.87 -pb_1c : 22.87 -pb_5c : 22.85 -pb_10c : 22.80 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.88 -pb_1c : 22.88 -pb_5c : 22.85 -pb_10c : 22.80 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.89 -pb_1c : 22.89 -pb_5c : 22.85 -pb_10c : 22.80 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.90 -pb_1c : 22.90 -pb_5c : 22.90 -pb_10c : 22.90 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.91 -pb_1c : 22.91 -pb_5c : 22.90 -pb_10c : 22.90 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.92 -pb_1c : 22.92 -pb_5c : 22.90 -pb_10c : 22.90 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.93 -pb_1c : 22.93 -pb_5c : 22.90 -pb_10c : 22.90 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.94 -pb_1c : 22.94 -pb_5c : 22.90 -pb_10c : 22.90 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.95 -pb_1c : 22.95 -pb_5c : 22.95 -pb_10c : 22.90 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.96 -pb_1c : 22.96 -pb_5c : 22.95 -pb_10c : 22.90 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.97 -pb_1c : 22.97 -pb_5c : 22.95 -pb_10c : 22.90 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.98 -pb_1c : 22.98 -pb_5c : 22.95 -pb_10c : 22.90 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -22.99 -pb_1c : 22.99 -pb_5c : 22.95 -pb_10c : 22.90 -pb_25c : 22.75 -pb_1d : 22.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.00 -pb_1c : 23.00 -pb_5c : 23.00 -pb_10c : 23.00 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.01 -pb_1c : 23.01 -pb_5c : 23.00 -pb_10c : 23.00 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.02 -pb_1c : 23.02 -pb_5c : 23.00 -pb_10c : 23.00 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.03 -pb_1c : 23.03 -pb_5c : 23.00 -pb_10c : 23.00 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.04 -pb_1c : 23.04 -pb_5c : 23.00 -pb_10c : 23.00 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.05 -pb_1c : 23.05 -pb_5c : 23.05 -pb_10c : 23.00 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.06 -pb_1c : 23.06 -pb_5c : 23.05 -pb_10c : 23.00 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.07 -pb_1c : 23.07 -pb_5c : 23.05 -pb_10c : 23.00 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.08 -pb_1c : 23.08 -pb_5c : 23.05 -pb_10c : 23.00 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.09 -pb_1c : 23.09 -pb_5c : 23.05 -pb_10c : 23.00 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.10 -pb_1c : 23.10 -pb_5c : 23.10 -pb_10c : 23.10 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.11 -pb_1c : 23.11 -pb_5c : 23.10 -pb_10c : 23.10 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.12 -pb_1c : 23.12 -pb_5c : 23.10 -pb_10c : 23.10 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.13 -pb_1c : 23.13 -pb_5c : 23.10 -pb_10c : 23.10 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.14 -pb_1c : 23.14 -pb_5c : 23.10 -pb_10c : 23.10 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.15 -pb_1c : 23.15 -pb_5c : 23.15 -pb_10c : 23.10 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.16 -pb_1c : 23.16 -pb_5c : 23.15 -pb_10c : 23.10 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.17 -pb_1c : 23.17 -pb_5c : 23.15 -pb_10c : 23.10 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.18 -pb_1c : 23.18 -pb_5c : 23.15 -pb_10c : 23.10 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.19 -pb_1c : 23.19 -pb_5c : 23.15 -pb_10c : 23.10 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.20 -pb_1c : 23.20 -pb_5c : 23.20 -pb_10c : 23.20 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.21 -pb_1c : 23.21 -pb_5c : 23.20 -pb_10c : 23.20 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.22 -pb_1c : 23.22 -pb_5c : 23.20 -pb_10c : 23.20 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.23 -pb_1c : 23.23 -pb_5c : 23.20 -pb_10c : 23.20 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.24 -pb_1c : 23.24 -pb_5c : 23.20 -pb_10c : 23.20 -pb_25c : 23.00 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.25 -pb_1c : 23.25 -pb_5c : 23.25 -pb_10c : 23.20 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.26 -pb_1c : 23.26 -pb_5c : 23.25 -pb_10c : 23.20 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.27 -pb_1c : 23.27 -pb_5c : 23.25 -pb_10c : 23.20 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.28 -pb_1c : 23.28 -pb_5c : 23.25 -pb_10c : 23.20 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.29 -pb_1c : 23.29 -pb_5c : 23.25 -pb_10c : 23.20 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.30 -pb_1c : 23.30 -pb_5c : 23.30 -pb_10c : 23.30 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.31 -pb_1c : 23.31 -pb_5c : 23.30 -pb_10c : 23.30 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.32 -pb_1c : 23.32 -pb_5c : 23.30 -pb_10c : 23.30 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.33 -pb_1c : 23.33 -pb_5c : 23.30 -pb_10c : 23.30 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.34 -pb_1c : 23.34 -pb_5c : 23.30 -pb_10c : 23.30 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.35 -pb_1c : 23.35 -pb_5c : 23.35 -pb_10c : 23.30 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.36 -pb_1c : 23.36 -pb_5c : 23.35 -pb_10c : 23.30 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.37 -pb_1c : 23.37 -pb_5c : 23.35 -pb_10c : 23.30 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.38 -pb_1c : 23.38 -pb_5c : 23.35 -pb_10c : 23.30 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.39 -pb_1c : 23.39 -pb_5c : 23.35 -pb_10c : 23.30 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.40 -pb_1c : 23.40 -pb_5c : 23.40 -pb_10c : 23.40 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.41 -pb_1c : 23.41 -pb_5c : 23.40 -pb_10c : 23.40 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.42 -pb_1c : 23.42 -pb_5c : 23.40 -pb_10c : 23.40 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.43 -pb_1c : 23.43 -pb_5c : 23.40 -pb_10c : 23.40 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.44 -pb_1c : 23.44 -pb_5c : 23.40 -pb_10c : 23.40 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.45 -pb_1c : 23.45 -pb_5c : 23.45 -pb_10c : 23.40 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.46 -pb_1c : 23.46 -pb_5c : 23.45 -pb_10c : 23.40 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.47 -pb_1c : 23.47 -pb_5c : 23.45 -pb_10c : 23.40 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.48 -pb_1c : 23.48 -pb_5c : 23.45 -pb_10c : 23.40 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.49 -pb_1c : 23.49 -pb_5c : 23.45 -pb_10c : 23.40 -pb_25c : 23.25 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.50 -pb_1c : 23.50 -pb_5c : 23.50 -pb_10c : 23.50 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.51 -pb_1c : 23.51 -pb_5c : 23.50 -pb_10c : 23.50 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.52 -pb_1c : 23.52 -pb_5c : 23.50 -pb_10c : 23.50 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.53 -pb_1c : 23.53 -pb_5c : 23.50 -pb_10c : 23.50 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.54 -pb_1c : 23.54 -pb_5c : 23.50 -pb_10c : 23.50 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.55 -pb_1c : 23.55 -pb_5c : 23.55 -pb_10c : 23.50 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.56 -pb_1c : 23.56 -pb_5c : 23.55 -pb_10c : 23.50 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.57 -pb_1c : 23.57 -pb_5c : 23.55 -pb_10c : 23.50 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.58 -pb_1c : 23.58 -pb_5c : 23.55 -pb_10c : 23.50 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.59 -pb_1c : 23.59 -pb_5c : 23.55 -pb_10c : 23.50 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.60 -pb_1c : 23.60 -pb_5c : 23.60 -pb_10c : 23.60 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.61 -pb_1c : 23.61 -pb_5c : 23.60 -pb_10c : 23.60 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.62 -pb_1c : 23.62 -pb_5c : 23.60 -pb_10c : 23.60 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.63 -pb_1c : 23.63 -pb_5c : 23.60 -pb_10c : 23.60 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.64 -pb_1c : 23.64 -pb_5c : 23.60 -pb_10c : 23.60 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.65 -pb_1c : 23.65 -pb_5c : 23.65 -pb_10c : 23.60 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.66 -pb_1c : 23.66 -pb_5c : 23.65 -pb_10c : 23.60 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.67 -pb_1c : 23.67 -pb_5c : 23.65 -pb_10c : 23.60 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.68 -pb_1c : 23.68 -pb_5c : 23.65 -pb_10c : 23.60 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.69 -pb_1c : 23.69 -pb_5c : 23.65 -pb_10c : 23.60 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.70 -pb_1c : 23.70 -pb_5c : 23.70 -pb_10c : 23.70 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.71 -pb_1c : 23.71 -pb_5c : 23.70 -pb_10c : 23.70 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.72 -pb_1c : 23.72 -pb_5c : 23.70 -pb_10c : 23.70 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.73 -pb_1c : 23.73 -pb_5c : 23.70 -pb_10c : 23.70 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.74 -pb_1c : 23.74 -pb_5c : 23.70 -pb_10c : 23.70 -pb_25c : 23.50 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.75 -pb_1c : 23.75 -pb_5c : 23.75 -pb_10c : 23.70 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.76 -pb_1c : 23.76 -pb_5c : 23.75 -pb_10c : 23.70 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.77 -pb_1c : 23.77 -pb_5c : 23.75 -pb_10c : 23.70 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.78 -pb_1c : 23.78 -pb_5c : 23.75 -pb_10c : 23.70 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.79 -pb_1c : 23.79 -pb_5c : 23.75 -pb_10c : 23.70 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.80 -pb_1c : 23.80 -pb_5c : 23.80 -pb_10c : 23.80 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.81 -pb_1c : 23.81 -pb_5c : 23.80 -pb_10c : 23.80 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.82 -pb_1c : 23.82 -pb_5c : 23.80 -pb_10c : 23.80 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.83 -pb_1c : 23.83 -pb_5c : 23.80 -pb_10c : 23.80 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.84 -pb_1c : 23.84 -pb_5c : 23.80 -pb_10c : 23.80 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.85 -pb_1c : 23.85 -pb_5c : 23.85 -pb_10c : 23.80 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.86 -pb_1c : 23.86 -pb_5c : 23.85 -pb_10c : 23.80 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.87 -pb_1c : 23.87 -pb_5c : 23.85 -pb_10c : 23.80 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.88 -pb_1c : 23.88 -pb_5c : 23.85 -pb_10c : 23.80 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.89 -pb_1c : 23.89 -pb_5c : 23.85 -pb_10c : 23.80 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.90 -pb_1c : 23.90 -pb_5c : 23.90 -pb_10c : 23.90 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.91 -pb_1c : 23.91 -pb_5c : 23.90 -pb_10c : 23.90 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.92 -pb_1c : 23.92 -pb_5c : 23.90 -pb_10c : 23.90 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.93 -pb_1c : 23.93 -pb_5c : 23.90 -pb_10c : 23.90 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.94 -pb_1c : 23.94 -pb_5c : 23.90 -pb_10c : 23.90 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.95 -pb_1c : 23.95 -pb_5c : 23.95 -pb_10c : 23.90 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.96 -pb_1c : 23.96 -pb_5c : 23.95 -pb_10c : 23.90 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.97 -pb_1c : 23.97 -pb_5c : 23.95 -pb_10c : 23.90 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.98 -pb_1c : 23.98 -pb_5c : 23.95 -pb_10c : 23.90 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -23.99 -pb_1c : 23.99 -pb_5c : 23.95 -pb_10c : 23.90 -pb_25c : 23.75 -pb_1d : 23.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.00 -pb_1c : 24.00 -pb_5c : 24.00 -pb_10c : 24.00 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.01 -pb_1c : 24.01 -pb_5c : 24.00 -pb_10c : 24.00 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.02 -pb_1c : 24.02 -pb_5c : 24.00 -pb_10c : 24.00 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.03 -pb_1c : 24.03 -pb_5c : 24.00 -pb_10c : 24.00 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.04 -pb_1c : 24.04 -pb_5c : 24.00 -pb_10c : 24.00 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.05 -pb_1c : 24.05 -pb_5c : 24.05 -pb_10c : 24.00 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.06 -pb_1c : 24.06 -pb_5c : 24.05 -pb_10c : 24.00 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.07 -pb_1c : 24.07 -pb_5c : 24.05 -pb_10c : 24.00 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.08 -pb_1c : 24.08 -pb_5c : 24.05 -pb_10c : 24.00 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.09 -pb_1c : 24.09 -pb_5c : 24.05 -pb_10c : 24.00 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.10 -pb_1c : 24.10 -pb_5c : 24.10 -pb_10c : 24.10 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.11 -pb_1c : 24.11 -pb_5c : 24.10 -pb_10c : 24.10 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.12 -pb_1c : 24.12 -pb_5c : 24.10 -pb_10c : 24.10 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.13 -pb_1c : 24.13 -pb_5c : 24.10 -pb_10c : 24.10 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.14 -pb_1c : 24.14 -pb_5c : 24.10 -pb_10c : 24.10 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.15 -pb_1c : 24.15 -pb_5c : 24.15 -pb_10c : 24.10 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.16 -pb_1c : 24.16 -pb_5c : 24.15 -pb_10c : 24.10 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.17 -pb_1c : 24.17 -pb_5c : 24.15 -pb_10c : 24.10 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.18 -pb_1c : 24.18 -pb_5c : 24.15 -pb_10c : 24.10 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.19 -pb_1c : 24.19 -pb_5c : 24.15 -pb_10c : 24.10 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.20 -pb_1c : 24.20 -pb_5c : 24.20 -pb_10c : 24.20 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.21 -pb_1c : 24.21 -pb_5c : 24.20 -pb_10c : 24.20 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.22 -pb_1c : 24.22 -pb_5c : 24.20 -pb_10c : 24.20 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.23 -pb_1c : 24.23 -pb_5c : 24.20 -pb_10c : 24.20 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.24 -pb_1c : 24.24 -pb_5c : 24.20 -pb_10c : 24.20 -pb_25c : 24.00 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.25 -pb_1c : 24.25 -pb_5c : 24.25 -pb_10c : 24.20 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.26 -pb_1c : 24.26 -pb_5c : 24.25 -pb_10c : 24.20 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.27 -pb_1c : 24.27 -pb_5c : 24.25 -pb_10c : 24.20 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.28 -pb_1c : 24.28 -pb_5c : 24.25 -pb_10c : 24.20 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.29 -pb_1c : 24.29 -pb_5c : 24.25 -pb_10c : 24.20 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.30 -pb_1c : 24.30 -pb_5c : 24.30 -pb_10c : 24.30 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.31 -pb_1c : 24.31 -pb_5c : 24.30 -pb_10c : 24.30 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.32 -pb_1c : 24.32 -pb_5c : 24.30 -pb_10c : 24.30 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.33 -pb_1c : 24.33 -pb_5c : 24.30 -pb_10c : 24.30 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.34 -pb_1c : 24.34 -pb_5c : 24.30 -pb_10c : 24.30 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.35 -pb_1c : 24.35 -pb_5c : 24.35 -pb_10c : 24.30 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.36 -pb_1c : 24.36 -pb_5c : 24.35 -pb_10c : 24.30 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.37 -pb_1c : 24.37 -pb_5c : 24.35 -pb_10c : 24.30 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.38 -pb_1c : 24.38 -pb_5c : 24.35 -pb_10c : 24.30 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.39 -pb_1c : 24.39 -pb_5c : 24.35 -pb_10c : 24.30 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.40 -pb_1c : 24.40 -pb_5c : 24.40 -pb_10c : 24.40 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.41 -pb_1c : 24.41 -pb_5c : 24.40 -pb_10c : 24.40 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.42 -pb_1c : 24.42 -pb_5c : 24.40 -pb_10c : 24.40 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.43 -pb_1c : 24.43 -pb_5c : 24.40 -pb_10c : 24.40 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.44 -pb_1c : 24.44 -pb_5c : 24.40 -pb_10c : 24.40 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.45 -pb_1c : 24.45 -pb_5c : 24.45 -pb_10c : 24.40 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.46 -pb_1c : 24.46 -pb_5c : 24.45 -pb_10c : 24.40 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.47 -pb_1c : 24.47 -pb_5c : 24.45 -pb_10c : 24.40 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.48 -pb_1c : 24.48 -pb_5c : 24.45 -pb_10c : 24.40 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.49 -pb_1c : 24.49 -pb_5c : 24.45 -pb_10c : 24.40 -pb_25c : 24.25 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.50 -pb_1c : 24.50 -pb_5c : 24.50 -pb_10c : 24.50 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.51 -pb_1c : 24.51 -pb_5c : 24.50 -pb_10c : 24.50 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.52 -pb_1c : 24.52 -pb_5c : 24.50 -pb_10c : 24.50 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.53 -pb_1c : 24.53 -pb_5c : 24.50 -pb_10c : 24.50 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.54 -pb_1c : 24.54 -pb_5c : 24.50 -pb_10c : 24.50 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.55 -pb_1c : 24.55 -pb_5c : 24.55 -pb_10c : 24.50 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.56 -pb_1c : 24.56 -pb_5c : 24.55 -pb_10c : 24.50 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.57 -pb_1c : 24.57 -pb_5c : 24.55 -pb_10c : 24.50 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.58 -pb_1c : 24.58 -pb_5c : 24.55 -pb_10c : 24.50 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.59 -pb_1c : 24.59 -pb_5c : 24.55 -pb_10c : 24.50 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.60 -pb_1c : 24.60 -pb_5c : 24.60 -pb_10c : 24.60 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.61 -pb_1c : 24.61 -pb_5c : 24.60 -pb_10c : 24.60 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.62 -pb_1c : 24.62 -pb_5c : 24.60 -pb_10c : 24.60 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.63 -pb_1c : 24.63 -pb_5c : 24.60 -pb_10c : 24.60 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.64 -pb_1c : 24.64 -pb_5c : 24.60 -pb_10c : 24.60 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.65 -pb_1c : 24.65 -pb_5c : 24.65 -pb_10c : 24.60 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.66 -pb_1c : 24.66 -pb_5c : 24.65 -pb_10c : 24.60 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.67 -pb_1c : 24.67 -pb_5c : 24.65 -pb_10c : 24.60 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.68 -pb_1c : 24.68 -pb_5c : 24.65 -pb_10c : 24.60 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.69 -pb_1c : 24.69 -pb_5c : 24.65 -pb_10c : 24.60 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.70 -pb_1c : 24.70 -pb_5c : 24.70 -pb_10c : 24.70 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.71 -pb_1c : 24.71 -pb_5c : 24.70 -pb_10c : 24.70 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.72 -pb_1c : 24.72 -pb_5c : 24.70 -pb_10c : 24.70 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.73 -pb_1c : 24.73 -pb_5c : 24.70 -pb_10c : 24.70 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.74 -pb_1c : 24.74 -pb_5c : 24.70 -pb_10c : 24.70 -pb_25c : 24.50 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.75 -pb_1c : 24.75 -pb_5c : 24.75 -pb_10c : 24.70 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.76 -pb_1c : 24.76 -pb_5c : 24.75 -pb_10c : 24.70 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.77 -pb_1c : 24.77 -pb_5c : 24.75 -pb_10c : 24.70 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.78 -pb_1c : 24.78 -pb_5c : 24.75 -pb_10c : 24.70 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.79 -pb_1c : 24.79 -pb_5c : 24.75 -pb_10c : 24.70 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.80 -pb_1c : 24.80 -pb_5c : 24.80 -pb_10c : 24.80 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.81 -pb_1c : 24.81 -pb_5c : 24.80 -pb_10c : 24.80 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.82 -pb_1c : 24.82 -pb_5c : 24.80 -pb_10c : 24.80 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.83 -pb_1c : 24.83 -pb_5c : 24.80 -pb_10c : 24.80 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.84 -pb_1c : 24.84 -pb_5c : 24.80 -pb_10c : 24.80 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.85 -pb_1c : 24.85 -pb_5c : 24.85 -pb_10c : 24.80 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.86 -pb_1c : 24.86 -pb_5c : 24.85 -pb_10c : 24.80 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.87 -pb_1c : 24.87 -pb_5c : 24.85 -pb_10c : 24.80 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.88 -pb_1c : 24.88 -pb_5c : 24.85 -pb_10c : 24.80 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.89 -pb_1c : 24.89 -pb_5c : 24.85 -pb_10c : 24.80 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.90 -pb_1c : 24.90 -pb_5c : 24.90 -pb_10c : 24.90 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.91 -pb_1c : 24.91 -pb_5c : 24.90 -pb_10c : 24.90 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.92 -pb_1c : 24.92 -pb_5c : 24.90 -pb_10c : 24.90 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.93 -pb_1c : 24.93 -pb_5c : 24.90 -pb_10c : 24.90 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.94 -pb_1c : 24.94 -pb_5c : 24.90 -pb_10c : 24.90 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.95 -pb_1c : 24.95 -pb_5c : 24.95 -pb_10c : 24.90 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.96 -pb_1c : 24.96 -pb_5c : 24.95 -pb_10c : 24.90 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.97 -pb_1c : 24.97 -pb_5c : 24.95 -pb_10c : 24.90 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.98 -pb_1c : 24.98 -pb_5c : 24.95 -pb_10c : 24.90 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -24.99 -pb_1c : 24.99 -pb_5c : 24.95 -pb_10c : 24.90 -pb_25c : 24.75 -pb_1d : 24.00 -pb_5d : 20.00 -pb_10d : 20.00 - -25.00 -pb_1c : 25.00 -pb_5c : 25.00 -pb_10c : 25.00 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.01 -pb_1c : 25.01 -pb_5c : 25.00 -pb_10c : 25.00 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.02 -pb_1c : 25.02 -pb_5c : 25.00 -pb_10c : 25.00 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.03 -pb_1c : 25.03 -pb_5c : 25.00 -pb_10c : 25.00 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.04 -pb_1c : 25.04 -pb_5c : 25.00 -pb_10c : 25.00 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.05 -pb_1c : 25.05 -pb_5c : 25.05 -pb_10c : 25.00 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.06 -pb_1c : 25.06 -pb_5c : 25.05 -pb_10c : 25.00 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.07 -pb_1c : 25.07 -pb_5c : 25.05 -pb_10c : 25.00 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.08 -pb_1c : 25.08 -pb_5c : 25.05 -pb_10c : 25.00 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.09 -pb_1c : 25.09 -pb_5c : 25.05 -pb_10c : 25.00 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.10 -pb_1c : 25.10 -pb_5c : 25.10 -pb_10c : 25.10 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.11 -pb_1c : 25.11 -pb_5c : 25.10 -pb_10c : 25.10 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.12 -pb_1c : 25.12 -pb_5c : 25.10 -pb_10c : 25.10 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.13 -pb_1c : 25.13 -pb_5c : 25.10 -pb_10c : 25.10 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.14 -pb_1c : 25.14 -pb_5c : 25.10 -pb_10c : 25.10 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.15 -pb_1c : 25.15 -pb_5c : 25.15 -pb_10c : 25.10 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.16 -pb_1c : 25.16 -pb_5c : 25.15 -pb_10c : 25.10 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.17 -pb_1c : 25.17 -pb_5c : 25.15 -pb_10c : 25.10 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.18 -pb_1c : 25.18 -pb_5c : 25.15 -pb_10c : 25.10 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.19 -pb_1c : 25.19 -pb_5c : 25.15 -pb_10c : 25.10 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.20 -pb_1c : 25.20 -pb_5c : 25.20 -pb_10c : 25.20 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.21 -pb_1c : 25.21 -pb_5c : 25.20 -pb_10c : 25.20 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.22 -pb_1c : 25.22 -pb_5c : 25.20 -pb_10c : 25.20 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.23 -pb_1c : 25.23 -pb_5c : 25.20 -pb_10c : 25.20 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.24 -pb_1c : 25.24 -pb_5c : 25.20 -pb_10c : 25.20 -pb_25c : 25.00 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.25 -pb_1c : 25.25 -pb_5c : 25.25 -pb_10c : 25.20 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.26 -pb_1c : 25.26 -pb_5c : 25.25 -pb_10c : 25.20 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.27 -pb_1c : 25.27 -pb_5c : 25.25 -pb_10c : 25.20 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.28 -pb_1c : 25.28 -pb_5c : 25.25 -pb_10c : 25.20 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.29 -pb_1c : 25.29 -pb_5c : 25.25 -pb_10c : 25.20 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.30 -pb_1c : 25.30 -pb_5c : 25.30 -pb_10c : 25.30 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.31 -pb_1c : 25.31 -pb_5c : 25.30 -pb_10c : 25.30 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.32 -pb_1c : 25.32 -pb_5c : 25.30 -pb_10c : 25.30 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.33 -pb_1c : 25.33 -pb_5c : 25.30 -pb_10c : 25.30 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.34 -pb_1c : 25.34 -pb_5c : 25.30 -pb_10c : 25.30 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.35 -pb_1c : 25.35 -pb_5c : 25.35 -pb_10c : 25.30 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.36 -pb_1c : 25.36 -pb_5c : 25.35 -pb_10c : 25.30 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.37 -pb_1c : 25.37 -pb_5c : 25.35 -pb_10c : 25.30 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.38 -pb_1c : 25.38 -pb_5c : 25.35 -pb_10c : 25.30 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.39 -pb_1c : 25.39 -pb_5c : 25.35 -pb_10c : 25.30 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.40 -pb_1c : 25.40 -pb_5c : 25.40 -pb_10c : 25.40 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.41 -pb_1c : 25.41 -pb_5c : 25.40 -pb_10c : 25.40 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.42 -pb_1c : 25.42 -pb_5c : 25.40 -pb_10c : 25.40 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.43 -pb_1c : 25.43 -pb_5c : 25.40 -pb_10c : 25.40 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.44 -pb_1c : 25.44 -pb_5c : 25.40 -pb_10c : 25.40 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.45 -pb_1c : 25.45 -pb_5c : 25.45 -pb_10c : 25.40 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.46 -pb_1c : 25.46 -pb_5c : 25.45 -pb_10c : 25.40 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.47 -pb_1c : 25.47 -pb_5c : 25.45 -pb_10c : 25.40 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.48 -pb_1c : 25.48 -pb_5c : 25.45 -pb_10c : 25.40 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.49 -pb_1c : 25.49 -pb_5c : 25.45 -pb_10c : 25.40 -pb_25c : 25.25 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.50 -pb_1c : 25.50 -pb_5c : 25.50 -pb_10c : 25.50 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.51 -pb_1c : 25.51 -pb_5c : 25.50 -pb_10c : 25.50 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.52 -pb_1c : 25.52 -pb_5c : 25.50 -pb_10c : 25.50 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.53 -pb_1c : 25.53 -pb_5c : 25.50 -pb_10c : 25.50 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.54 -pb_1c : 25.54 -pb_5c : 25.50 -pb_10c : 25.50 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.55 -pb_1c : 25.55 -pb_5c : 25.55 -pb_10c : 25.50 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.56 -pb_1c : 25.56 -pb_5c : 25.55 -pb_10c : 25.50 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.57 -pb_1c : 25.57 -pb_5c : 25.55 -pb_10c : 25.50 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.58 -pb_1c : 25.58 -pb_5c : 25.55 -pb_10c : 25.50 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.59 -pb_1c : 25.59 -pb_5c : 25.55 -pb_10c : 25.50 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.60 -pb_1c : 25.60 -pb_5c : 25.60 -pb_10c : 25.60 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.61 -pb_1c : 25.61 -pb_5c : 25.60 -pb_10c : 25.60 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.62 -pb_1c : 25.62 -pb_5c : 25.60 -pb_10c : 25.60 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.63 -pb_1c : 25.63 -pb_5c : 25.60 -pb_10c : 25.60 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.64 -pb_1c : 25.64 -pb_5c : 25.60 -pb_10c : 25.60 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.65 -pb_1c : 25.65 -pb_5c : 25.65 -pb_10c : 25.60 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.66 -pb_1c : 25.66 -pb_5c : 25.65 -pb_10c : 25.60 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.67 -pb_1c : 25.67 -pb_5c : 25.65 -pb_10c : 25.60 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.68 -pb_1c : 25.68 -pb_5c : 25.65 -pb_10c : 25.60 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.69 -pb_1c : 25.69 -pb_5c : 25.65 -pb_10c : 25.60 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.70 -pb_1c : 25.70 -pb_5c : 25.70 -pb_10c : 25.70 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.71 -pb_1c : 25.71 -pb_5c : 25.70 -pb_10c : 25.70 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.72 -pb_1c : 25.72 -pb_5c : 25.70 -pb_10c : 25.70 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.73 -pb_1c : 25.73 -pb_5c : 25.70 -pb_10c : 25.70 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.74 -pb_1c : 25.74 -pb_5c : 25.70 -pb_10c : 25.70 -pb_25c : 25.50 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.75 -pb_1c : 25.75 -pb_5c : 25.75 -pb_10c : 25.70 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.76 -pb_1c : 25.76 -pb_5c : 25.75 -pb_10c : 25.70 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.77 -pb_1c : 25.77 -pb_5c : 25.75 -pb_10c : 25.70 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.78 -pb_1c : 25.78 -pb_5c : 25.75 -pb_10c : 25.70 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.79 -pb_1c : 25.79 -pb_5c : 25.75 -pb_10c : 25.70 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.80 -pb_1c : 25.80 -pb_5c : 25.80 -pb_10c : 25.80 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.81 -pb_1c : 25.81 -pb_5c : 25.80 -pb_10c : 25.80 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.82 -pb_1c : 25.82 -pb_5c : 25.80 -pb_10c : 25.80 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.83 -pb_1c : 25.83 -pb_5c : 25.80 -pb_10c : 25.80 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.84 -pb_1c : 25.84 -pb_5c : 25.80 -pb_10c : 25.80 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.85 -pb_1c : 25.85 -pb_5c : 25.85 -pb_10c : 25.80 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.86 -pb_1c : 25.86 -pb_5c : 25.85 -pb_10c : 25.80 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.87 -pb_1c : 25.87 -pb_5c : 25.85 -pb_10c : 25.80 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.88 -pb_1c : 25.88 -pb_5c : 25.85 -pb_10c : 25.80 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.89 -pb_1c : 25.89 -pb_5c : 25.85 -pb_10c : 25.80 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.90 -pb_1c : 25.90 -pb_5c : 25.90 -pb_10c : 25.90 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.91 -pb_1c : 25.91 -pb_5c : 25.90 -pb_10c : 25.90 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.92 -pb_1c : 25.92 -pb_5c : 25.90 -pb_10c : 25.90 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.93 -pb_1c : 25.93 -pb_5c : 25.90 -pb_10c : 25.90 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.94 -pb_1c : 25.94 -pb_5c : 25.90 -pb_10c : 25.90 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.95 -pb_1c : 25.95 -pb_5c : 25.95 -pb_10c : 25.90 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.96 -pb_1c : 25.96 -pb_5c : 25.95 -pb_10c : 25.90 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.97 -pb_1c : 25.97 -pb_5c : 25.95 -pb_10c : 25.90 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.98 -pb_1c : 25.98 -pb_5c : 25.95 -pb_10c : 25.90 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -25.99 -pb_1c : 25.99 -pb_5c : 25.95 -pb_10c : 25.90 -pb_25c : 25.75 -pb_1d : 25.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.00 -pb_1c : 26.00 -pb_5c : 26.00 -pb_10c : 26.00 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.01 -pb_1c : 26.01 -pb_5c : 26.00 -pb_10c : 26.00 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.02 -pb_1c : 26.02 -pb_5c : 26.00 -pb_10c : 26.00 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.03 -pb_1c : 26.03 -pb_5c : 26.00 -pb_10c : 26.00 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.04 -pb_1c : 26.04 -pb_5c : 26.00 -pb_10c : 26.00 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.05 -pb_1c : 26.05 -pb_5c : 26.05 -pb_10c : 26.00 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.06 -pb_1c : 26.06 -pb_5c : 26.05 -pb_10c : 26.00 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.07 -pb_1c : 26.07 -pb_5c : 26.05 -pb_10c : 26.00 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.08 -pb_1c : 26.08 -pb_5c : 26.05 -pb_10c : 26.00 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.09 -pb_1c : 26.09 -pb_5c : 26.05 -pb_10c : 26.00 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.10 -pb_1c : 26.10 -pb_5c : 26.10 -pb_10c : 26.10 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.11 -pb_1c : 26.11 -pb_5c : 26.10 -pb_10c : 26.10 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.12 -pb_1c : 26.12 -pb_5c : 26.10 -pb_10c : 26.10 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.13 -pb_1c : 26.13 -pb_5c : 26.10 -pb_10c : 26.10 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.14 -pb_1c : 26.14 -pb_5c : 26.10 -pb_10c : 26.10 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.15 -pb_1c : 26.15 -pb_5c : 26.15 -pb_10c : 26.10 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.16 -pb_1c : 26.16 -pb_5c : 26.15 -pb_10c : 26.10 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.17 -pb_1c : 26.17 -pb_5c : 26.15 -pb_10c : 26.10 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.18 -pb_1c : 26.18 -pb_5c : 26.15 -pb_10c : 26.10 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.19 -pb_1c : 26.19 -pb_5c : 26.15 -pb_10c : 26.10 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.20 -pb_1c : 26.20 -pb_5c : 26.20 -pb_10c : 26.20 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.21 -pb_1c : 26.21 -pb_5c : 26.20 -pb_10c : 26.20 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.22 -pb_1c : 26.22 -pb_5c : 26.20 -pb_10c : 26.20 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.23 -pb_1c : 26.23 -pb_5c : 26.20 -pb_10c : 26.20 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.24 -pb_1c : 26.24 -pb_5c : 26.20 -pb_10c : 26.20 -pb_25c : 26.00 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.25 -pb_1c : 26.25 -pb_5c : 26.25 -pb_10c : 26.20 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.26 -pb_1c : 26.26 -pb_5c : 26.25 -pb_10c : 26.20 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.27 -pb_1c : 26.27 -pb_5c : 26.25 -pb_10c : 26.20 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.28 -pb_1c : 26.28 -pb_5c : 26.25 -pb_10c : 26.20 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.29 -pb_1c : 26.29 -pb_5c : 26.25 -pb_10c : 26.20 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.30 -pb_1c : 26.30 -pb_5c : 26.30 -pb_10c : 26.30 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.31 -pb_1c : 26.31 -pb_5c : 26.30 -pb_10c : 26.30 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.32 -pb_1c : 26.32 -pb_5c : 26.30 -pb_10c : 26.30 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.33 -pb_1c : 26.33 -pb_5c : 26.30 -pb_10c : 26.30 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.34 -pb_1c : 26.34 -pb_5c : 26.30 -pb_10c : 26.30 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.35 -pb_1c : 26.35 -pb_5c : 26.35 -pb_10c : 26.30 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.36 -pb_1c : 26.36 -pb_5c : 26.35 -pb_10c : 26.30 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.37 -pb_1c : 26.37 -pb_5c : 26.35 -pb_10c : 26.30 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.38 -pb_1c : 26.38 -pb_5c : 26.35 -pb_10c : 26.30 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.39 -pb_1c : 26.39 -pb_5c : 26.35 -pb_10c : 26.30 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.40 -pb_1c : 26.40 -pb_5c : 26.40 -pb_10c : 26.40 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.41 -pb_1c : 26.41 -pb_5c : 26.40 -pb_10c : 26.40 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.42 -pb_1c : 26.42 -pb_5c : 26.40 -pb_10c : 26.40 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.43 -pb_1c : 26.43 -pb_5c : 26.40 -pb_10c : 26.40 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.44 -pb_1c : 26.44 -pb_5c : 26.40 -pb_10c : 26.40 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.45 -pb_1c : 26.45 -pb_5c : 26.45 -pb_10c : 26.40 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.46 -pb_1c : 26.46 -pb_5c : 26.45 -pb_10c : 26.40 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.47 -pb_1c : 26.47 -pb_5c : 26.45 -pb_10c : 26.40 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.48 -pb_1c : 26.48 -pb_5c : 26.45 -pb_10c : 26.40 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.49 -pb_1c : 26.49 -pb_5c : 26.45 -pb_10c : 26.40 -pb_25c : 26.25 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.50 -pb_1c : 26.50 -pb_5c : 26.50 -pb_10c : 26.50 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.51 -pb_1c : 26.51 -pb_5c : 26.50 -pb_10c : 26.50 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.52 -pb_1c : 26.52 -pb_5c : 26.50 -pb_10c : 26.50 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.53 -pb_1c : 26.53 -pb_5c : 26.50 -pb_10c : 26.50 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.54 -pb_1c : 26.54 -pb_5c : 26.50 -pb_10c : 26.50 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.55 -pb_1c : 26.55 -pb_5c : 26.55 -pb_10c : 26.50 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.56 -pb_1c : 26.56 -pb_5c : 26.55 -pb_10c : 26.50 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.57 -pb_1c : 26.57 -pb_5c : 26.55 -pb_10c : 26.50 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.58 -pb_1c : 26.58 -pb_5c : 26.55 -pb_10c : 26.50 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.59 -pb_1c : 26.59 -pb_5c : 26.55 -pb_10c : 26.50 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.60 -pb_1c : 26.60 -pb_5c : 26.60 -pb_10c : 26.60 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.61 -pb_1c : 26.61 -pb_5c : 26.60 -pb_10c : 26.60 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.62 -pb_1c : 26.62 -pb_5c : 26.60 -pb_10c : 26.60 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.63 -pb_1c : 26.63 -pb_5c : 26.60 -pb_10c : 26.60 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.64 -pb_1c : 26.64 -pb_5c : 26.60 -pb_10c : 26.60 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.65 -pb_1c : 26.65 -pb_5c : 26.65 -pb_10c : 26.60 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.66 -pb_1c : 26.66 -pb_5c : 26.65 -pb_10c : 26.60 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.67 -pb_1c : 26.67 -pb_5c : 26.65 -pb_10c : 26.60 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.68 -pb_1c : 26.68 -pb_5c : 26.65 -pb_10c : 26.60 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.69 -pb_1c : 26.69 -pb_5c : 26.65 -pb_10c : 26.60 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.70 -pb_1c : 26.70 -pb_5c : 26.70 -pb_10c : 26.70 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.71 -pb_1c : 26.71 -pb_5c : 26.70 -pb_10c : 26.70 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.72 -pb_1c : 26.72 -pb_5c : 26.70 -pb_10c : 26.70 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.73 -pb_1c : 26.73 -pb_5c : 26.70 -pb_10c : 26.70 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.74 -pb_1c : 26.74 -pb_5c : 26.70 -pb_10c : 26.70 -pb_25c : 26.50 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.75 -pb_1c : 26.75 -pb_5c : 26.75 -pb_10c : 26.70 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.76 -pb_1c : 26.76 -pb_5c : 26.75 -pb_10c : 26.70 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.77 -pb_1c : 26.77 -pb_5c : 26.75 -pb_10c : 26.70 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.78 -pb_1c : 26.78 -pb_5c : 26.75 -pb_10c : 26.70 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.79 -pb_1c : 26.79 -pb_5c : 26.75 -pb_10c : 26.70 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.80 -pb_1c : 26.80 -pb_5c : 26.80 -pb_10c : 26.80 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.81 -pb_1c : 26.81 -pb_5c : 26.80 -pb_10c : 26.80 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.82 -pb_1c : 26.82 -pb_5c : 26.80 -pb_10c : 26.80 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.83 -pb_1c : 26.83 -pb_5c : 26.80 -pb_10c : 26.80 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.84 -pb_1c : 26.84 -pb_5c : 26.80 -pb_10c : 26.80 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.85 -pb_1c : 26.85 -pb_5c : 26.85 -pb_10c : 26.80 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.86 -pb_1c : 26.86 -pb_5c : 26.85 -pb_10c : 26.80 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.87 -pb_1c : 26.87 -pb_5c : 26.85 -pb_10c : 26.80 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.88 -pb_1c : 26.88 -pb_5c : 26.85 -pb_10c : 26.80 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.89 -pb_1c : 26.89 -pb_5c : 26.85 -pb_10c : 26.80 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.90 -pb_1c : 26.90 -pb_5c : 26.90 -pb_10c : 26.90 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.91 -pb_1c : 26.91 -pb_5c : 26.90 -pb_10c : 26.90 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.92 -pb_1c : 26.92 -pb_5c : 26.90 -pb_10c : 26.90 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.93 -pb_1c : 26.93 -pb_5c : 26.90 -pb_10c : 26.90 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.94 -pb_1c : 26.94 -pb_5c : 26.90 -pb_10c : 26.90 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.95 -pb_1c : 26.95 -pb_5c : 26.95 -pb_10c : 26.90 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.96 -pb_1c : 26.96 -pb_5c : 26.95 -pb_10c : 26.90 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.97 -pb_1c : 26.97 -pb_5c : 26.95 -pb_10c : 26.90 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.98 -pb_1c : 26.98 -pb_5c : 26.95 -pb_10c : 26.90 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -26.99 -pb_1c : 26.99 -pb_5c : 26.95 -pb_10c : 26.90 -pb_25c : 26.75 -pb_1d : 26.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.00 -pb_1c : 27.00 -pb_5c : 27.00 -pb_10c : 27.00 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.01 -pb_1c : 27.01 -pb_5c : 27.00 -pb_10c : 27.00 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.02 -pb_1c : 27.02 -pb_5c : 27.00 -pb_10c : 27.00 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.03 -pb_1c : 27.03 -pb_5c : 27.00 -pb_10c : 27.00 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.04 -pb_1c : 27.04 -pb_5c : 27.00 -pb_10c : 27.00 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.05 -pb_1c : 27.05 -pb_5c : 27.05 -pb_10c : 27.00 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.06 -pb_1c : 27.06 -pb_5c : 27.05 -pb_10c : 27.00 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.07 -pb_1c : 27.07 -pb_5c : 27.05 -pb_10c : 27.00 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.08 -pb_1c : 27.08 -pb_5c : 27.05 -pb_10c : 27.00 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.09 -pb_1c : 27.09 -pb_5c : 27.05 -pb_10c : 27.00 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.10 -pb_1c : 27.10 -pb_5c : 27.10 -pb_10c : 27.10 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.11 -pb_1c : 27.11 -pb_5c : 27.10 -pb_10c : 27.10 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.12 -pb_1c : 27.12 -pb_5c : 27.10 -pb_10c : 27.10 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.13 -pb_1c : 27.13 -pb_5c : 27.10 -pb_10c : 27.10 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.14 -pb_1c : 27.14 -pb_5c : 27.10 -pb_10c : 27.10 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.15 -pb_1c : 27.15 -pb_5c : 27.15 -pb_10c : 27.10 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.16 -pb_1c : 27.16 -pb_5c : 27.15 -pb_10c : 27.10 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.17 -pb_1c : 27.17 -pb_5c : 27.15 -pb_10c : 27.10 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.18 -pb_1c : 27.18 -pb_5c : 27.15 -pb_10c : 27.10 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.19 -pb_1c : 27.19 -pb_5c : 27.15 -pb_10c : 27.10 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.20 -pb_1c : 27.20 -pb_5c : 27.20 -pb_10c : 27.20 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.21 -pb_1c : 27.21 -pb_5c : 27.20 -pb_10c : 27.20 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.22 -pb_1c : 27.22 -pb_5c : 27.20 -pb_10c : 27.20 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.23 -pb_1c : 27.23 -pb_5c : 27.20 -pb_10c : 27.20 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.24 -pb_1c : 27.24 -pb_5c : 27.20 -pb_10c : 27.20 -pb_25c : 27.00 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.25 -pb_1c : 27.25 -pb_5c : 27.25 -pb_10c : 27.20 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.26 -pb_1c : 27.26 -pb_5c : 27.25 -pb_10c : 27.20 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.27 -pb_1c : 27.27 -pb_5c : 27.25 -pb_10c : 27.20 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.28 -pb_1c : 27.28 -pb_5c : 27.25 -pb_10c : 27.20 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.29 -pb_1c : 27.29 -pb_5c : 27.25 -pb_10c : 27.20 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.30 -pb_1c : 27.30 -pb_5c : 27.30 -pb_10c : 27.30 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.31 -pb_1c : 27.31 -pb_5c : 27.30 -pb_10c : 27.30 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.32 -pb_1c : 27.32 -pb_5c : 27.30 -pb_10c : 27.30 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.33 -pb_1c : 27.33 -pb_5c : 27.30 -pb_10c : 27.30 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.34 -pb_1c : 27.34 -pb_5c : 27.30 -pb_10c : 27.30 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.35 -pb_1c : 27.35 -pb_5c : 27.35 -pb_10c : 27.30 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.36 -pb_1c : 27.36 -pb_5c : 27.35 -pb_10c : 27.30 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.37 -pb_1c : 27.37 -pb_5c : 27.35 -pb_10c : 27.30 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.38 -pb_1c : 27.38 -pb_5c : 27.35 -pb_10c : 27.30 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.39 -pb_1c : 27.39 -pb_5c : 27.35 -pb_10c : 27.30 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.40 -pb_1c : 27.40 -pb_5c : 27.40 -pb_10c : 27.40 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.41 -pb_1c : 27.41 -pb_5c : 27.40 -pb_10c : 27.40 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.42 -pb_1c : 27.42 -pb_5c : 27.40 -pb_10c : 27.40 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.43 -pb_1c : 27.43 -pb_5c : 27.40 -pb_10c : 27.40 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.44 -pb_1c : 27.44 -pb_5c : 27.40 -pb_10c : 27.40 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.45 -pb_1c : 27.45 -pb_5c : 27.45 -pb_10c : 27.40 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.46 -pb_1c : 27.46 -pb_5c : 27.45 -pb_10c : 27.40 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.47 -pb_1c : 27.47 -pb_5c : 27.45 -pb_10c : 27.40 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.48 -pb_1c : 27.48 -pb_5c : 27.45 -pb_10c : 27.40 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.49 -pb_1c : 27.49 -pb_5c : 27.45 -pb_10c : 27.40 -pb_25c : 27.25 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.50 -pb_1c : 27.50 -pb_5c : 27.50 -pb_10c : 27.50 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.51 -pb_1c : 27.51 -pb_5c : 27.50 -pb_10c : 27.50 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.52 -pb_1c : 27.52 -pb_5c : 27.50 -pb_10c : 27.50 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.53 -pb_1c : 27.53 -pb_5c : 27.50 -pb_10c : 27.50 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.54 -pb_1c : 27.54 -pb_5c : 27.50 -pb_10c : 27.50 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.55 -pb_1c : 27.55 -pb_5c : 27.55 -pb_10c : 27.50 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.56 -pb_1c : 27.56 -pb_5c : 27.55 -pb_10c : 27.50 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.57 -pb_1c : 27.57 -pb_5c : 27.55 -pb_10c : 27.50 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.58 -pb_1c : 27.58 -pb_5c : 27.55 -pb_10c : 27.50 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.59 -pb_1c : 27.59 -pb_5c : 27.55 -pb_10c : 27.50 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.60 -pb_1c : 27.60 -pb_5c : 27.60 -pb_10c : 27.60 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.61 -pb_1c : 27.61 -pb_5c : 27.60 -pb_10c : 27.60 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.62 -pb_1c : 27.62 -pb_5c : 27.60 -pb_10c : 27.60 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.63 -pb_1c : 27.63 -pb_5c : 27.60 -pb_10c : 27.60 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.64 -pb_1c : 27.64 -pb_5c : 27.60 -pb_10c : 27.60 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.65 -pb_1c : 27.65 -pb_5c : 27.65 -pb_10c : 27.60 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.66 -pb_1c : 27.66 -pb_5c : 27.65 -pb_10c : 27.60 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.67 -pb_1c : 27.67 -pb_5c : 27.65 -pb_10c : 27.60 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.68 -pb_1c : 27.68 -pb_5c : 27.65 -pb_10c : 27.60 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.69 -pb_1c : 27.69 -pb_5c : 27.65 -pb_10c : 27.60 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.70 -pb_1c : 27.70 -pb_5c : 27.70 -pb_10c : 27.70 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.71 -pb_1c : 27.71 -pb_5c : 27.70 -pb_10c : 27.70 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.72 -pb_1c : 27.72 -pb_5c : 27.70 -pb_10c : 27.70 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.73 -pb_1c : 27.73 -pb_5c : 27.70 -pb_10c : 27.70 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.74 -pb_1c : 27.74 -pb_5c : 27.70 -pb_10c : 27.70 -pb_25c : 27.50 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.75 -pb_1c : 27.75 -pb_5c : 27.75 -pb_10c : 27.70 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.76 -pb_1c : 27.76 -pb_5c : 27.75 -pb_10c : 27.70 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.77 -pb_1c : 27.77 -pb_5c : 27.75 -pb_10c : 27.70 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.78 -pb_1c : 27.78 -pb_5c : 27.75 -pb_10c : 27.70 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.79 -pb_1c : 27.79 -pb_5c : 27.75 -pb_10c : 27.70 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.80 -pb_1c : 27.80 -pb_5c : 27.80 -pb_10c : 27.80 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.81 -pb_1c : 27.81 -pb_5c : 27.80 -pb_10c : 27.80 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.82 -pb_1c : 27.82 -pb_5c : 27.80 -pb_10c : 27.80 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.83 -pb_1c : 27.83 -pb_5c : 27.80 -pb_10c : 27.80 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.84 -pb_1c : 27.84 -pb_5c : 27.80 -pb_10c : 27.80 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.85 -pb_1c : 27.85 -pb_5c : 27.85 -pb_10c : 27.80 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.86 -pb_1c : 27.86 -pb_5c : 27.85 -pb_10c : 27.80 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.87 -pb_1c : 27.87 -pb_5c : 27.85 -pb_10c : 27.80 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.88 -pb_1c : 27.88 -pb_5c : 27.85 -pb_10c : 27.80 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.89 -pb_1c : 27.89 -pb_5c : 27.85 -pb_10c : 27.80 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.90 -pb_1c : 27.90 -pb_5c : 27.90 -pb_10c : 27.90 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.91 -pb_1c : 27.91 -pb_5c : 27.90 -pb_10c : 27.90 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.92 -pb_1c : 27.92 -pb_5c : 27.90 -pb_10c : 27.90 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.93 -pb_1c : 27.93 -pb_5c : 27.90 -pb_10c : 27.90 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.94 -pb_1c : 27.94 -pb_5c : 27.90 -pb_10c : 27.90 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.95 -pb_1c : 27.95 -pb_5c : 27.95 -pb_10c : 27.90 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.96 -pb_1c : 27.96 -pb_5c : 27.95 -pb_10c : 27.90 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.97 -pb_1c : 27.97 -pb_5c : 27.95 -pb_10c : 27.90 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.98 -pb_1c : 27.98 -pb_5c : 27.95 -pb_10c : 27.90 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -27.99 -pb_1c : 27.99 -pb_5c : 27.95 -pb_10c : 27.90 -pb_25c : 27.75 -pb_1d : 27.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.00 -pb_1c : 28.00 -pb_5c : 28.00 -pb_10c : 28.00 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.01 -pb_1c : 28.01 -pb_5c : 28.00 -pb_10c : 28.00 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.02 -pb_1c : 28.02 -pb_5c : 28.00 -pb_10c : 28.00 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.03 -pb_1c : 28.03 -pb_5c : 28.00 -pb_10c : 28.00 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.04 -pb_1c : 28.04 -pb_5c : 28.00 -pb_10c : 28.00 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.05 -pb_1c : 28.05 -pb_5c : 28.05 -pb_10c : 28.00 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.06 -pb_1c : 28.06 -pb_5c : 28.05 -pb_10c : 28.00 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.07 -pb_1c : 28.07 -pb_5c : 28.05 -pb_10c : 28.00 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.08 -pb_1c : 28.08 -pb_5c : 28.05 -pb_10c : 28.00 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.09 -pb_1c : 28.09 -pb_5c : 28.05 -pb_10c : 28.00 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.10 -pb_1c : 28.10 -pb_5c : 28.10 -pb_10c : 28.10 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.11 -pb_1c : 28.11 -pb_5c : 28.10 -pb_10c : 28.10 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.12 -pb_1c : 28.12 -pb_5c : 28.10 -pb_10c : 28.10 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.13 -pb_1c : 28.13 -pb_5c : 28.10 -pb_10c : 28.10 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.14 -pb_1c : 28.14 -pb_5c : 28.10 -pb_10c : 28.10 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.15 -pb_1c : 28.15 -pb_5c : 28.15 -pb_10c : 28.10 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.16 -pb_1c : 28.16 -pb_5c : 28.15 -pb_10c : 28.10 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.17 -pb_1c : 28.17 -pb_5c : 28.15 -pb_10c : 28.10 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.18 -pb_1c : 28.18 -pb_5c : 28.15 -pb_10c : 28.10 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.19 -pb_1c : 28.19 -pb_5c : 28.15 -pb_10c : 28.10 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.20 -pb_1c : 28.20 -pb_5c : 28.20 -pb_10c : 28.20 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.21 -pb_1c : 28.21 -pb_5c : 28.20 -pb_10c : 28.20 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.22 -pb_1c : 28.22 -pb_5c : 28.20 -pb_10c : 28.20 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.23 -pb_1c : 28.23 -pb_5c : 28.20 -pb_10c : 28.20 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.24 -pb_1c : 28.24 -pb_5c : 28.20 -pb_10c : 28.20 -pb_25c : 28.00 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.25 -pb_1c : 28.25 -pb_5c : 28.25 -pb_10c : 28.20 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.26 -pb_1c : 28.26 -pb_5c : 28.25 -pb_10c : 28.20 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.27 -pb_1c : 28.27 -pb_5c : 28.25 -pb_10c : 28.20 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.28 -pb_1c : 28.28 -pb_5c : 28.25 -pb_10c : 28.20 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.29 -pb_1c : 28.29 -pb_5c : 28.25 -pb_10c : 28.20 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.30 -pb_1c : 28.30 -pb_5c : 28.30 -pb_10c : 28.30 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.31 -pb_1c : 28.31 -pb_5c : 28.30 -pb_10c : 28.30 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.32 -pb_1c : 28.32 -pb_5c : 28.30 -pb_10c : 28.30 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.33 -pb_1c : 28.33 -pb_5c : 28.30 -pb_10c : 28.30 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.34 -pb_1c : 28.34 -pb_5c : 28.30 -pb_10c : 28.30 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.35 -pb_1c : 28.35 -pb_5c : 28.35 -pb_10c : 28.30 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.36 -pb_1c : 28.36 -pb_5c : 28.35 -pb_10c : 28.30 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.37 -pb_1c : 28.37 -pb_5c : 28.35 -pb_10c : 28.30 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.38 -pb_1c : 28.38 -pb_5c : 28.35 -pb_10c : 28.30 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.39 -pb_1c : 28.39 -pb_5c : 28.35 -pb_10c : 28.30 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.40 -pb_1c : 28.40 -pb_5c : 28.40 -pb_10c : 28.40 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.41 -pb_1c : 28.41 -pb_5c : 28.40 -pb_10c : 28.40 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.42 -pb_1c : 28.42 -pb_5c : 28.40 -pb_10c : 28.40 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.43 -pb_1c : 28.43 -pb_5c : 28.40 -pb_10c : 28.40 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.44 -pb_1c : 28.44 -pb_5c : 28.40 -pb_10c : 28.40 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.45 -pb_1c : 28.45 -pb_5c : 28.45 -pb_10c : 28.40 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.46 -pb_1c : 28.46 -pb_5c : 28.45 -pb_10c : 28.40 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.47 -pb_1c : 28.47 -pb_5c : 28.45 -pb_10c : 28.40 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.48 -pb_1c : 28.48 -pb_5c : 28.45 -pb_10c : 28.40 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.49 -pb_1c : 28.49 -pb_5c : 28.45 -pb_10c : 28.40 -pb_25c : 28.25 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.50 -pb_1c : 28.50 -pb_5c : 28.50 -pb_10c : 28.50 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.51 -pb_1c : 28.51 -pb_5c : 28.50 -pb_10c : 28.50 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.52 -pb_1c : 28.52 -pb_5c : 28.50 -pb_10c : 28.50 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.53 -pb_1c : 28.53 -pb_5c : 28.50 -pb_10c : 28.50 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.54 -pb_1c : 28.54 -pb_5c : 28.50 -pb_10c : 28.50 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.55 -pb_1c : 28.55 -pb_5c : 28.55 -pb_10c : 28.50 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.56 -pb_1c : 28.56 -pb_5c : 28.55 -pb_10c : 28.50 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.57 -pb_1c : 28.57 -pb_5c : 28.55 -pb_10c : 28.50 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.58 -pb_1c : 28.58 -pb_5c : 28.55 -pb_10c : 28.50 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.59 -pb_1c : 28.59 -pb_5c : 28.55 -pb_10c : 28.50 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.60 -pb_1c : 28.60 -pb_5c : 28.60 -pb_10c : 28.60 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.61 -pb_1c : 28.61 -pb_5c : 28.60 -pb_10c : 28.60 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.62 -pb_1c : 28.62 -pb_5c : 28.60 -pb_10c : 28.60 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.63 -pb_1c : 28.63 -pb_5c : 28.60 -pb_10c : 28.60 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.64 -pb_1c : 28.64 -pb_5c : 28.60 -pb_10c : 28.60 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.65 -pb_1c : 28.65 -pb_5c : 28.65 -pb_10c : 28.60 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.66 -pb_1c : 28.66 -pb_5c : 28.65 -pb_10c : 28.60 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.67 -pb_1c : 28.67 -pb_5c : 28.65 -pb_10c : 28.60 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.68 -pb_1c : 28.68 -pb_5c : 28.65 -pb_10c : 28.60 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.69 -pb_1c : 28.69 -pb_5c : 28.65 -pb_10c : 28.60 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.70 -pb_1c : 28.70 -pb_5c : 28.70 -pb_10c : 28.70 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.71 -pb_1c : 28.71 -pb_5c : 28.70 -pb_10c : 28.70 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.72 -pb_1c : 28.72 -pb_5c : 28.70 -pb_10c : 28.70 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.73 -pb_1c : 28.73 -pb_5c : 28.70 -pb_10c : 28.70 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.74 -pb_1c : 28.74 -pb_5c : 28.70 -pb_10c : 28.70 -pb_25c : 28.50 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.75 -pb_1c : 28.75 -pb_5c : 28.75 -pb_10c : 28.70 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.76 -pb_1c : 28.76 -pb_5c : 28.75 -pb_10c : 28.70 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.77 -pb_1c : 28.77 -pb_5c : 28.75 -pb_10c : 28.70 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.78 -pb_1c : 28.78 -pb_5c : 28.75 -pb_10c : 28.70 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.79 -pb_1c : 28.79 -pb_5c : 28.75 -pb_10c : 28.70 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.80 -pb_1c : 28.80 -pb_5c : 28.80 -pb_10c : 28.80 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.81 -pb_1c : 28.81 -pb_5c : 28.80 -pb_10c : 28.80 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.82 -pb_1c : 28.82 -pb_5c : 28.80 -pb_10c : 28.80 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.83 -pb_1c : 28.83 -pb_5c : 28.80 -pb_10c : 28.80 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.84 -pb_1c : 28.84 -pb_5c : 28.80 -pb_10c : 28.80 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.85 -pb_1c : 28.85 -pb_5c : 28.85 -pb_10c : 28.80 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.86 -pb_1c : 28.86 -pb_5c : 28.85 -pb_10c : 28.80 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.87 -pb_1c : 28.87 -pb_5c : 28.85 -pb_10c : 28.80 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.88 -pb_1c : 28.88 -pb_5c : 28.85 -pb_10c : 28.80 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.89 -pb_1c : 28.89 -pb_5c : 28.85 -pb_10c : 28.80 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.90 -pb_1c : 28.90 -pb_5c : 28.90 -pb_10c : 28.90 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.91 -pb_1c : 28.91 -pb_5c : 28.90 -pb_10c : 28.90 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.92 -pb_1c : 28.92 -pb_5c : 28.90 -pb_10c : 28.90 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.93 -pb_1c : 28.93 -pb_5c : 28.90 -pb_10c : 28.90 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.94 -pb_1c : 28.94 -pb_5c : 28.90 -pb_10c : 28.90 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.95 -pb_1c : 28.95 -pb_5c : 28.95 -pb_10c : 28.90 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.96 -pb_1c : 28.96 -pb_5c : 28.95 -pb_10c : 28.90 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.97 -pb_1c : 28.97 -pb_5c : 28.95 -pb_10c : 28.90 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.98 -pb_1c : 28.98 -pb_5c : 28.95 -pb_10c : 28.90 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -28.99 -pb_1c : 28.99 -pb_5c : 28.95 -pb_10c : 28.90 -pb_25c : 28.75 -pb_1d : 28.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.00 -pb_1c : 29.00 -pb_5c : 29.00 -pb_10c : 29.00 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.01 -pb_1c : 29.01 -pb_5c : 29.00 -pb_10c : 29.00 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.02 -pb_1c : 29.02 -pb_5c : 29.00 -pb_10c : 29.00 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.03 -pb_1c : 29.03 -pb_5c : 29.00 -pb_10c : 29.00 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.04 -pb_1c : 29.04 -pb_5c : 29.00 -pb_10c : 29.00 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.05 -pb_1c : 29.05 -pb_5c : 29.05 -pb_10c : 29.00 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.06 -pb_1c : 29.06 -pb_5c : 29.05 -pb_10c : 29.00 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.07 -pb_1c : 29.07 -pb_5c : 29.05 -pb_10c : 29.00 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.08 -pb_1c : 29.08 -pb_5c : 29.05 -pb_10c : 29.00 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.09 -pb_1c : 29.09 -pb_5c : 29.05 -pb_10c : 29.00 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.10 -pb_1c : 29.10 -pb_5c : 29.10 -pb_10c : 29.10 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.11 -pb_1c : 29.11 -pb_5c : 29.10 -pb_10c : 29.10 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.12 -pb_1c : 29.12 -pb_5c : 29.10 -pb_10c : 29.10 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.13 -pb_1c : 29.13 -pb_5c : 29.10 -pb_10c : 29.10 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.14 -pb_1c : 29.14 -pb_5c : 29.10 -pb_10c : 29.10 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.15 -pb_1c : 29.15 -pb_5c : 29.15 -pb_10c : 29.10 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.16 -pb_1c : 29.16 -pb_5c : 29.15 -pb_10c : 29.10 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.17 -pb_1c : 29.17 -pb_5c : 29.15 -pb_10c : 29.10 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.18 -pb_1c : 29.18 -pb_5c : 29.15 -pb_10c : 29.10 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.19 -pb_1c : 29.19 -pb_5c : 29.15 -pb_10c : 29.10 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.20 -pb_1c : 29.20 -pb_5c : 29.20 -pb_10c : 29.20 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.21 -pb_1c : 29.21 -pb_5c : 29.20 -pb_10c : 29.20 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.22 -pb_1c : 29.22 -pb_5c : 29.20 -pb_10c : 29.20 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.23 -pb_1c : 29.23 -pb_5c : 29.20 -pb_10c : 29.20 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.24 -pb_1c : 29.24 -pb_5c : 29.20 -pb_10c : 29.20 -pb_25c : 29.00 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.25 -pb_1c : 29.25 -pb_5c : 29.25 -pb_10c : 29.20 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.26 -pb_1c : 29.26 -pb_5c : 29.25 -pb_10c : 29.20 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.27 -pb_1c : 29.27 -pb_5c : 29.25 -pb_10c : 29.20 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.28 -pb_1c : 29.28 -pb_5c : 29.25 -pb_10c : 29.20 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.29 -pb_1c : 29.29 -pb_5c : 29.25 -pb_10c : 29.20 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.30 -pb_1c : 29.30 -pb_5c : 29.30 -pb_10c : 29.30 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.31 -pb_1c : 29.31 -pb_5c : 29.30 -pb_10c : 29.30 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.32 -pb_1c : 29.32 -pb_5c : 29.30 -pb_10c : 29.30 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.33 -pb_1c : 29.33 -pb_5c : 29.30 -pb_10c : 29.30 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.34 -pb_1c : 29.34 -pb_5c : 29.30 -pb_10c : 29.30 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.35 -pb_1c : 29.35 -pb_5c : 29.35 -pb_10c : 29.30 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.36 -pb_1c : 29.36 -pb_5c : 29.35 -pb_10c : 29.30 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.37 -pb_1c : 29.37 -pb_5c : 29.35 -pb_10c : 29.30 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.38 -pb_1c : 29.38 -pb_5c : 29.35 -pb_10c : 29.30 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.39 -pb_1c : 29.39 -pb_5c : 29.35 -pb_10c : 29.30 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.40 -pb_1c : 29.40 -pb_5c : 29.40 -pb_10c : 29.40 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.41 -pb_1c : 29.41 -pb_5c : 29.40 -pb_10c : 29.40 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.42 -pb_1c : 29.42 -pb_5c : 29.40 -pb_10c : 29.40 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.43 -pb_1c : 29.43 -pb_5c : 29.40 -pb_10c : 29.40 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.44 -pb_1c : 29.44 -pb_5c : 29.40 -pb_10c : 29.40 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.45 -pb_1c : 29.45 -pb_5c : 29.45 -pb_10c : 29.40 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.46 -pb_1c : 29.46 -pb_5c : 29.45 -pb_10c : 29.40 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.47 -pb_1c : 29.47 -pb_5c : 29.45 -pb_10c : 29.40 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.48 -pb_1c : 29.48 -pb_5c : 29.45 -pb_10c : 29.40 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.49 -pb_1c : 29.49 -pb_5c : 29.45 -pb_10c : 29.40 -pb_25c : 29.25 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.50 -pb_1c : 29.50 -pb_5c : 29.50 -pb_10c : 29.50 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.51 -pb_1c : 29.51 -pb_5c : 29.50 -pb_10c : 29.50 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.52 -pb_1c : 29.52 -pb_5c : 29.50 -pb_10c : 29.50 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.53 -pb_1c : 29.53 -pb_5c : 29.50 -pb_10c : 29.50 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.54 -pb_1c : 29.54 -pb_5c : 29.50 -pb_10c : 29.50 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.55 -pb_1c : 29.55 -pb_5c : 29.55 -pb_10c : 29.50 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.56 -pb_1c : 29.56 -pb_5c : 29.55 -pb_10c : 29.50 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.57 -pb_1c : 29.57 -pb_5c : 29.55 -pb_10c : 29.50 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.58 -pb_1c : 29.58 -pb_5c : 29.55 -pb_10c : 29.50 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.59 -pb_1c : 29.59 -pb_5c : 29.55 -pb_10c : 29.50 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.60 -pb_1c : 29.60 -pb_5c : 29.60 -pb_10c : 29.60 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.61 -pb_1c : 29.61 -pb_5c : 29.60 -pb_10c : 29.60 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.62 -pb_1c : 29.62 -pb_5c : 29.60 -pb_10c : 29.60 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.63 -pb_1c : 29.63 -pb_5c : 29.60 -pb_10c : 29.60 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.64 -pb_1c : 29.64 -pb_5c : 29.60 -pb_10c : 29.60 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.65 -pb_1c : 29.65 -pb_5c : 29.65 -pb_10c : 29.60 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.66 -pb_1c : 29.66 -pb_5c : 29.65 -pb_10c : 29.60 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.67 -pb_1c : 29.67 -pb_5c : 29.65 -pb_10c : 29.60 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.68 -pb_1c : 29.68 -pb_5c : 29.65 -pb_10c : 29.60 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.69 -pb_1c : 29.69 -pb_5c : 29.65 -pb_10c : 29.60 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.70 -pb_1c : 29.70 -pb_5c : 29.70 -pb_10c : 29.70 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.71 -pb_1c : 29.71 -pb_5c : 29.70 -pb_10c : 29.70 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.72 -pb_1c : 29.72 -pb_5c : 29.70 -pb_10c : 29.70 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.73 -pb_1c : 29.73 -pb_5c : 29.70 -pb_10c : 29.70 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.74 -pb_1c : 29.74 -pb_5c : 29.70 -pb_10c : 29.70 -pb_25c : 29.50 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.75 -pb_1c : 29.75 -pb_5c : 29.75 -pb_10c : 29.70 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.76 -pb_1c : 29.76 -pb_5c : 29.75 -pb_10c : 29.70 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.77 -pb_1c : 29.77 -pb_5c : 29.75 -pb_10c : 29.70 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.78 -pb_1c : 29.78 -pb_5c : 29.75 -pb_10c : 29.70 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.79 -pb_1c : 29.79 -pb_5c : 29.75 -pb_10c : 29.70 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.80 -pb_1c : 29.80 -pb_5c : 29.80 -pb_10c : 29.80 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.81 -pb_1c : 29.81 -pb_5c : 29.80 -pb_10c : 29.80 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.82 -pb_1c : 29.82 -pb_5c : 29.80 -pb_10c : 29.80 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.83 -pb_1c : 29.83 -pb_5c : 29.80 -pb_10c : 29.80 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.84 -pb_1c : 29.84 -pb_5c : 29.80 -pb_10c : 29.80 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.85 -pb_1c : 29.85 -pb_5c : 29.85 -pb_10c : 29.80 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.86 -pb_1c : 29.86 -pb_5c : 29.85 -pb_10c : 29.80 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.87 -pb_1c : 29.87 -pb_5c : 29.85 -pb_10c : 29.80 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.88 -pb_1c : 29.88 -pb_5c : 29.85 -pb_10c : 29.80 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.89 -pb_1c : 29.89 -pb_5c : 29.85 -pb_10c : 29.80 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.90 -pb_1c : 29.90 -pb_5c : 29.90 -pb_10c : 29.90 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.91 -pb_1c : 29.91 -pb_5c : 29.90 -pb_10c : 29.90 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.92 -pb_1c : 29.92 -pb_5c : 29.90 -pb_10c : 29.90 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.93 -pb_1c : 29.93 -pb_5c : 29.90 -pb_10c : 29.90 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.94 -pb_1c : 29.94 -pb_5c : 29.90 -pb_10c : 29.90 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.95 -pb_1c : 29.95 -pb_5c : 29.95 -pb_10c : 29.90 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.96 -pb_1c : 29.96 -pb_5c : 29.95 -pb_10c : 29.90 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.97 -pb_1c : 29.97 -pb_5c : 29.95 -pb_10c : 29.90 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.98 -pb_1c : 29.98 -pb_5c : 29.95 -pb_10c : 29.90 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -29.99 -pb_1c : 29.99 -pb_5c : 29.95 -pb_10c : 29.90 -pb_25c : 29.75 -pb_1d : 29.00 -pb_5d : 25.00 -pb_10d : 20.00 - -30.00 -pb_1c : 30.00 -pb_5c : 30.00 -pb_10c : 30.00 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.01 -pb_1c : 30.01 -pb_5c : 30.00 -pb_10c : 30.00 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.02 -pb_1c : 30.02 -pb_5c : 30.00 -pb_10c : 30.00 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.03 -pb_1c : 30.03 -pb_5c : 30.00 -pb_10c : 30.00 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.04 -pb_1c : 30.04 -pb_5c : 30.00 -pb_10c : 30.00 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.05 -pb_1c : 30.05 -pb_5c : 30.05 -pb_10c : 30.00 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.06 -pb_1c : 30.06 -pb_5c : 30.05 -pb_10c : 30.00 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.07 -pb_1c : 30.07 -pb_5c : 30.05 -pb_10c : 30.00 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.08 -pb_1c : 30.08 -pb_5c : 30.05 -pb_10c : 30.00 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.09 -pb_1c : 30.09 -pb_5c : 30.05 -pb_10c : 30.00 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.10 -pb_1c : 30.10 -pb_5c : 30.10 -pb_10c : 30.10 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.11 -pb_1c : 30.11 -pb_5c : 30.10 -pb_10c : 30.10 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.12 -pb_1c : 30.12 -pb_5c : 30.10 -pb_10c : 30.10 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.13 -pb_1c : 30.13 -pb_5c : 30.10 -pb_10c : 30.10 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.14 -pb_1c : 30.14 -pb_5c : 30.10 -pb_10c : 30.10 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.15 -pb_1c : 30.15 -pb_5c : 30.15 -pb_10c : 30.10 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.16 -pb_1c : 30.16 -pb_5c : 30.15 -pb_10c : 30.10 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.17 -pb_1c : 30.17 -pb_5c : 30.15 -pb_10c : 30.10 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.18 -pb_1c : 30.18 -pb_5c : 30.15 -pb_10c : 30.10 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.19 -pb_1c : 30.19 -pb_5c : 30.15 -pb_10c : 30.10 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.20 -pb_1c : 30.20 -pb_5c : 30.20 -pb_10c : 30.20 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.21 -pb_1c : 30.21 -pb_5c : 30.20 -pb_10c : 30.20 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.22 -pb_1c : 30.22 -pb_5c : 30.20 -pb_10c : 30.20 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.23 -pb_1c : 30.23 -pb_5c : 30.20 -pb_10c : 30.20 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.24 -pb_1c : 30.24 -pb_5c : 30.20 -pb_10c : 30.20 -pb_25c : 30.00 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.25 -pb_1c : 30.25 -pb_5c : 30.25 -pb_10c : 30.20 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.26 -pb_1c : 30.26 -pb_5c : 30.25 -pb_10c : 30.20 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.27 -pb_1c : 30.27 -pb_5c : 30.25 -pb_10c : 30.20 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.28 -pb_1c : 30.28 -pb_5c : 30.25 -pb_10c : 30.20 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.29 -pb_1c : 30.29 -pb_5c : 30.25 -pb_10c : 30.20 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.30 -pb_1c : 30.30 -pb_5c : 30.30 -pb_10c : 30.30 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.31 -pb_1c : 30.31 -pb_5c : 30.30 -pb_10c : 30.30 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.32 -pb_1c : 30.32 -pb_5c : 30.30 -pb_10c : 30.30 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.33 -pb_1c : 30.33 -pb_5c : 30.30 -pb_10c : 30.30 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.34 -pb_1c : 30.34 -pb_5c : 30.30 -pb_10c : 30.30 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.35 -pb_1c : 30.35 -pb_5c : 30.35 -pb_10c : 30.30 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.36 -pb_1c : 30.36 -pb_5c : 30.35 -pb_10c : 30.30 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.37 -pb_1c : 30.37 -pb_5c : 30.35 -pb_10c : 30.30 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.38 -pb_1c : 30.38 -pb_5c : 30.35 -pb_10c : 30.30 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.39 -pb_1c : 30.39 -pb_5c : 30.35 -pb_10c : 30.30 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.40 -pb_1c : 30.40 -pb_5c : 30.40 -pb_10c : 30.40 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.41 -pb_1c : 30.41 -pb_5c : 30.40 -pb_10c : 30.40 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.42 -pb_1c : 30.42 -pb_5c : 30.40 -pb_10c : 30.40 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.43 -pb_1c : 30.43 -pb_5c : 30.40 -pb_10c : 30.40 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.44 -pb_1c : 30.44 -pb_5c : 30.40 -pb_10c : 30.40 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.45 -pb_1c : 30.45 -pb_5c : 30.45 -pb_10c : 30.40 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.46 -pb_1c : 30.46 -pb_5c : 30.45 -pb_10c : 30.40 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.47 -pb_1c : 30.47 -pb_5c : 30.45 -pb_10c : 30.40 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.48 -pb_1c : 30.48 -pb_5c : 30.45 -pb_10c : 30.40 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.49 -pb_1c : 30.49 -pb_5c : 30.45 -pb_10c : 30.40 -pb_25c : 30.25 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.50 -pb_1c : 30.50 -pb_5c : 30.50 -pb_10c : 30.50 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.51 -pb_1c : 30.51 -pb_5c : 30.50 -pb_10c : 30.50 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.52 -pb_1c : 30.52 -pb_5c : 30.50 -pb_10c : 30.50 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.53 -pb_1c : 30.53 -pb_5c : 30.50 -pb_10c : 30.50 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.54 -pb_1c : 30.54 -pb_5c : 30.50 -pb_10c : 30.50 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.55 -pb_1c : 30.55 -pb_5c : 30.55 -pb_10c : 30.50 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.56 -pb_1c : 30.56 -pb_5c : 30.55 -pb_10c : 30.50 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.57 -pb_1c : 30.57 -pb_5c : 30.55 -pb_10c : 30.50 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.58 -pb_1c : 30.58 -pb_5c : 30.55 -pb_10c : 30.50 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.59 -pb_1c : 30.59 -pb_5c : 30.55 -pb_10c : 30.50 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.60 -pb_1c : 30.60 -pb_5c : 30.60 -pb_10c : 30.60 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.61 -pb_1c : 30.61 -pb_5c : 30.60 -pb_10c : 30.60 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.62 -pb_1c : 30.62 -pb_5c : 30.60 -pb_10c : 30.60 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.63 -pb_1c : 30.63 -pb_5c : 30.60 -pb_10c : 30.60 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.64 -pb_1c : 30.64 -pb_5c : 30.60 -pb_10c : 30.60 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.65 -pb_1c : 30.65 -pb_5c : 30.65 -pb_10c : 30.60 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.66 -pb_1c : 30.66 -pb_5c : 30.65 -pb_10c : 30.60 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.67 -pb_1c : 30.67 -pb_5c : 30.65 -pb_10c : 30.60 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.68 -pb_1c : 30.68 -pb_5c : 30.65 -pb_10c : 30.60 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.69 -pb_1c : 30.69 -pb_5c : 30.65 -pb_10c : 30.60 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.70 -pb_1c : 30.70 -pb_5c : 30.70 -pb_10c : 30.70 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.71 -pb_1c : 30.71 -pb_5c : 30.70 -pb_10c : 30.70 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.72 -pb_1c : 30.72 -pb_5c : 30.70 -pb_10c : 30.70 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.73 -pb_1c : 30.73 -pb_5c : 30.70 -pb_10c : 30.70 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.74 -pb_1c : 30.74 -pb_5c : 30.70 -pb_10c : 30.70 -pb_25c : 30.50 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.75 -pb_1c : 30.75 -pb_5c : 30.75 -pb_10c : 30.70 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.76 -pb_1c : 30.76 -pb_5c : 30.75 -pb_10c : 30.70 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.77 -pb_1c : 30.77 -pb_5c : 30.75 -pb_10c : 30.70 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.78 -pb_1c : 30.78 -pb_5c : 30.75 -pb_10c : 30.70 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.79 -pb_1c : 30.79 -pb_5c : 30.75 -pb_10c : 30.70 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.80 -pb_1c : 30.80 -pb_5c : 30.80 -pb_10c : 30.80 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.81 -pb_1c : 30.81 -pb_5c : 30.80 -pb_10c : 30.80 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.82 -pb_1c : 30.82 -pb_5c : 30.80 -pb_10c : 30.80 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.83 -pb_1c : 30.83 -pb_5c : 30.80 -pb_10c : 30.80 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.84 -pb_1c : 30.84 -pb_5c : 30.80 -pb_10c : 30.80 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.85 -pb_1c : 30.85 -pb_5c : 30.85 -pb_10c : 30.80 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.86 -pb_1c : 30.86 -pb_5c : 30.85 -pb_10c : 30.80 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.87 -pb_1c : 30.87 -pb_5c : 30.85 -pb_10c : 30.80 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.88 -pb_1c : 30.88 -pb_5c : 30.85 -pb_10c : 30.80 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.89 -pb_1c : 30.89 -pb_5c : 30.85 -pb_10c : 30.80 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.90 -pb_1c : 30.90 -pb_5c : 30.90 -pb_10c : 30.90 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.91 -pb_1c : 30.91 -pb_5c : 30.90 -pb_10c : 30.90 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.92 -pb_1c : 30.92 -pb_5c : 30.90 -pb_10c : 30.90 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.93 -pb_1c : 30.93 -pb_5c : 30.90 -pb_10c : 30.90 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.94 -pb_1c : 30.94 -pb_5c : 30.90 -pb_10c : 30.90 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.95 -pb_1c : 30.95 -pb_5c : 30.95 -pb_10c : 30.90 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.96 -pb_1c : 30.96 -pb_5c : 30.95 -pb_10c : 30.90 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.97 -pb_1c : 30.97 -pb_5c : 30.95 -pb_10c : 30.90 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.98 -pb_1c : 30.98 -pb_5c : 30.95 -pb_10c : 30.90 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -30.99 -pb_1c : 30.99 -pb_5c : 30.95 -pb_10c : 30.90 -pb_25c : 30.75 -pb_1d : 30.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.00 -pb_1c : 31.00 -pb_5c : 31.00 -pb_10c : 31.00 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.01 -pb_1c : 31.01 -pb_5c : 31.00 -pb_10c : 31.00 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.02 -pb_1c : 31.02 -pb_5c : 31.00 -pb_10c : 31.00 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.03 -pb_1c : 31.03 -pb_5c : 31.00 -pb_10c : 31.00 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.04 -pb_1c : 31.04 -pb_5c : 31.00 -pb_10c : 31.00 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.05 -pb_1c : 31.05 -pb_5c : 31.05 -pb_10c : 31.00 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.06 -pb_1c : 31.06 -pb_5c : 31.05 -pb_10c : 31.00 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.07 -pb_1c : 31.07 -pb_5c : 31.05 -pb_10c : 31.00 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.08 -pb_1c : 31.08 -pb_5c : 31.05 -pb_10c : 31.00 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.09 -pb_1c : 31.09 -pb_5c : 31.05 -pb_10c : 31.00 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.10 -pb_1c : 31.10 -pb_5c : 31.10 -pb_10c : 31.10 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.11 -pb_1c : 31.11 -pb_5c : 31.10 -pb_10c : 31.10 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.12 -pb_1c : 31.12 -pb_5c : 31.10 -pb_10c : 31.10 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.13 -pb_1c : 31.13 -pb_5c : 31.10 -pb_10c : 31.10 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.14 -pb_1c : 31.14 -pb_5c : 31.10 -pb_10c : 31.10 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.15 -pb_1c : 31.15 -pb_5c : 31.15 -pb_10c : 31.10 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.16 -pb_1c : 31.16 -pb_5c : 31.15 -pb_10c : 31.10 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.17 -pb_1c : 31.17 -pb_5c : 31.15 -pb_10c : 31.10 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.18 -pb_1c : 31.18 -pb_5c : 31.15 -pb_10c : 31.10 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.19 -pb_1c : 31.19 -pb_5c : 31.15 -pb_10c : 31.10 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.20 -pb_1c : 31.20 -pb_5c : 31.20 -pb_10c : 31.20 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.21 -pb_1c : 31.21 -pb_5c : 31.20 -pb_10c : 31.20 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.22 -pb_1c : 31.22 -pb_5c : 31.20 -pb_10c : 31.20 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.23 -pb_1c : 31.23 -pb_5c : 31.20 -pb_10c : 31.20 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.24 -pb_1c : 31.24 -pb_5c : 31.20 -pb_10c : 31.20 -pb_25c : 31.00 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.25 -pb_1c : 31.25 -pb_5c : 31.25 -pb_10c : 31.20 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.26 -pb_1c : 31.26 -pb_5c : 31.25 -pb_10c : 31.20 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.27 -pb_1c : 31.27 -pb_5c : 31.25 -pb_10c : 31.20 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.28 -pb_1c : 31.28 -pb_5c : 31.25 -pb_10c : 31.20 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.29 -pb_1c : 31.29 -pb_5c : 31.25 -pb_10c : 31.20 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.30 -pb_1c : 31.30 -pb_5c : 31.30 -pb_10c : 31.30 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.31 -pb_1c : 31.31 -pb_5c : 31.30 -pb_10c : 31.30 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.32 -pb_1c : 31.32 -pb_5c : 31.30 -pb_10c : 31.30 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.33 -pb_1c : 31.33 -pb_5c : 31.30 -pb_10c : 31.30 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.34 -pb_1c : 31.34 -pb_5c : 31.30 -pb_10c : 31.30 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.35 -pb_1c : 31.35 -pb_5c : 31.35 -pb_10c : 31.30 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.36 -pb_1c : 31.36 -pb_5c : 31.35 -pb_10c : 31.30 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.37 -pb_1c : 31.37 -pb_5c : 31.35 -pb_10c : 31.30 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.38 -pb_1c : 31.38 -pb_5c : 31.35 -pb_10c : 31.30 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.39 -pb_1c : 31.39 -pb_5c : 31.35 -pb_10c : 31.30 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.40 -pb_1c : 31.40 -pb_5c : 31.40 -pb_10c : 31.40 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.41 -pb_1c : 31.41 -pb_5c : 31.40 -pb_10c : 31.40 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.42 -pb_1c : 31.42 -pb_5c : 31.40 -pb_10c : 31.40 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.43 -pb_1c : 31.43 -pb_5c : 31.40 -pb_10c : 31.40 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.44 -pb_1c : 31.44 -pb_5c : 31.40 -pb_10c : 31.40 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.45 -pb_1c : 31.45 -pb_5c : 31.45 -pb_10c : 31.40 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.46 -pb_1c : 31.46 -pb_5c : 31.45 -pb_10c : 31.40 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.47 -pb_1c : 31.47 -pb_5c : 31.45 -pb_10c : 31.40 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.48 -pb_1c : 31.48 -pb_5c : 31.45 -pb_10c : 31.40 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.49 -pb_1c : 31.49 -pb_5c : 31.45 -pb_10c : 31.40 -pb_25c : 31.25 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.50 -pb_1c : 31.50 -pb_5c : 31.50 -pb_10c : 31.50 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.51 -pb_1c : 31.51 -pb_5c : 31.50 -pb_10c : 31.50 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.52 -pb_1c : 31.52 -pb_5c : 31.50 -pb_10c : 31.50 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.53 -pb_1c : 31.53 -pb_5c : 31.50 -pb_10c : 31.50 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.54 -pb_1c : 31.54 -pb_5c : 31.50 -pb_10c : 31.50 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.55 -pb_1c : 31.55 -pb_5c : 31.55 -pb_10c : 31.50 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.56 -pb_1c : 31.56 -pb_5c : 31.55 -pb_10c : 31.50 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.57 -pb_1c : 31.57 -pb_5c : 31.55 -pb_10c : 31.50 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.58 -pb_1c : 31.58 -pb_5c : 31.55 -pb_10c : 31.50 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.59 -pb_1c : 31.59 -pb_5c : 31.55 -pb_10c : 31.50 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.60 -pb_1c : 31.60 -pb_5c : 31.60 -pb_10c : 31.60 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.61 -pb_1c : 31.61 -pb_5c : 31.60 -pb_10c : 31.60 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.62 -pb_1c : 31.62 -pb_5c : 31.60 -pb_10c : 31.60 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.63 -pb_1c : 31.63 -pb_5c : 31.60 -pb_10c : 31.60 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.64 -pb_1c : 31.64 -pb_5c : 31.60 -pb_10c : 31.60 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.65 -pb_1c : 31.65 -pb_5c : 31.65 -pb_10c : 31.60 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.66 -pb_1c : 31.66 -pb_5c : 31.65 -pb_10c : 31.60 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.67 -pb_1c : 31.67 -pb_5c : 31.65 -pb_10c : 31.60 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.68 -pb_1c : 31.68 -pb_5c : 31.65 -pb_10c : 31.60 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.69 -pb_1c : 31.69 -pb_5c : 31.65 -pb_10c : 31.60 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.70 -pb_1c : 31.70 -pb_5c : 31.70 -pb_10c : 31.70 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.71 -pb_1c : 31.71 -pb_5c : 31.70 -pb_10c : 31.70 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.72 -pb_1c : 31.72 -pb_5c : 31.70 -pb_10c : 31.70 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.73 -pb_1c : 31.73 -pb_5c : 31.70 -pb_10c : 31.70 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.74 -pb_1c : 31.74 -pb_5c : 31.70 -pb_10c : 31.70 -pb_25c : 31.50 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.75 -pb_1c : 31.75 -pb_5c : 31.75 -pb_10c : 31.70 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.76 -pb_1c : 31.76 -pb_5c : 31.75 -pb_10c : 31.70 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.77 -pb_1c : 31.77 -pb_5c : 31.75 -pb_10c : 31.70 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.78 -pb_1c : 31.78 -pb_5c : 31.75 -pb_10c : 31.70 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.79 -pb_1c : 31.79 -pb_5c : 31.75 -pb_10c : 31.70 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.80 -pb_1c : 31.80 -pb_5c : 31.80 -pb_10c : 31.80 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.81 -pb_1c : 31.81 -pb_5c : 31.80 -pb_10c : 31.80 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.82 -pb_1c : 31.82 -pb_5c : 31.80 -pb_10c : 31.80 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.83 -pb_1c : 31.83 -pb_5c : 31.80 -pb_10c : 31.80 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.84 -pb_1c : 31.84 -pb_5c : 31.80 -pb_10c : 31.80 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.85 -pb_1c : 31.85 -pb_5c : 31.85 -pb_10c : 31.80 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.86 -pb_1c : 31.86 -pb_5c : 31.85 -pb_10c : 31.80 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.87 -pb_1c : 31.87 -pb_5c : 31.85 -pb_10c : 31.80 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.88 -pb_1c : 31.88 -pb_5c : 31.85 -pb_10c : 31.80 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.89 -pb_1c : 31.89 -pb_5c : 31.85 -pb_10c : 31.80 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.90 -pb_1c : 31.90 -pb_5c : 31.90 -pb_10c : 31.90 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.91 -pb_1c : 31.91 -pb_5c : 31.90 -pb_10c : 31.90 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.92 -pb_1c : 31.92 -pb_5c : 31.90 -pb_10c : 31.90 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.93 -pb_1c : 31.93 -pb_5c : 31.90 -pb_10c : 31.90 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.94 -pb_1c : 31.94 -pb_5c : 31.90 -pb_10c : 31.90 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.95 -pb_1c : 31.95 -pb_5c : 31.95 -pb_10c : 31.90 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.96 -pb_1c : 31.96 -pb_5c : 31.95 -pb_10c : 31.90 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.97 -pb_1c : 31.97 -pb_5c : 31.95 -pb_10c : 31.90 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.98 -pb_1c : 31.98 -pb_5c : 31.95 -pb_10c : 31.90 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -31.99 -pb_1c : 31.99 -pb_5c : 31.95 -pb_10c : 31.90 -pb_25c : 31.75 -pb_1d : 31.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.00 -pb_1c : 32.00 -pb_5c : 32.00 -pb_10c : 32.00 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.01 -pb_1c : 32.01 -pb_5c : 32.00 -pb_10c : 32.00 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.02 -pb_1c : 32.02 -pb_5c : 32.00 -pb_10c : 32.00 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.03 -pb_1c : 32.03 -pb_5c : 32.00 -pb_10c : 32.00 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.04 -pb_1c : 32.04 -pb_5c : 32.00 -pb_10c : 32.00 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.05 -pb_1c : 32.05 -pb_5c : 32.05 -pb_10c : 32.00 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.06 -pb_1c : 32.06 -pb_5c : 32.05 -pb_10c : 32.00 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.07 -pb_1c : 32.07 -pb_5c : 32.05 -pb_10c : 32.00 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.08 -pb_1c : 32.08 -pb_5c : 32.05 -pb_10c : 32.00 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.09 -pb_1c : 32.09 -pb_5c : 32.05 -pb_10c : 32.00 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.10 -pb_1c : 32.10 -pb_5c : 32.10 -pb_10c : 32.10 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.11 -pb_1c : 32.11 -pb_5c : 32.10 -pb_10c : 32.10 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.12 -pb_1c : 32.12 -pb_5c : 32.10 -pb_10c : 32.10 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.13 -pb_1c : 32.13 -pb_5c : 32.10 -pb_10c : 32.10 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.14 -pb_1c : 32.14 -pb_5c : 32.10 -pb_10c : 32.10 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.15 -pb_1c : 32.15 -pb_5c : 32.15 -pb_10c : 32.10 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.16 -pb_1c : 32.16 -pb_5c : 32.15 -pb_10c : 32.10 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.17 -pb_1c : 32.17 -pb_5c : 32.15 -pb_10c : 32.10 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.18 -pb_1c : 32.18 -pb_5c : 32.15 -pb_10c : 32.10 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.19 -pb_1c : 32.19 -pb_5c : 32.15 -pb_10c : 32.10 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.20 -pb_1c : 32.20 -pb_5c : 32.20 -pb_10c : 32.20 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.21 -pb_1c : 32.21 -pb_5c : 32.20 -pb_10c : 32.20 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.22 -pb_1c : 32.22 -pb_5c : 32.20 -pb_10c : 32.20 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.23 -pb_1c : 32.23 -pb_5c : 32.20 -pb_10c : 32.20 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.24 -pb_1c : 32.24 -pb_5c : 32.20 -pb_10c : 32.20 -pb_25c : 32.00 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.25 -pb_1c : 32.25 -pb_5c : 32.25 -pb_10c : 32.20 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.26 -pb_1c : 32.26 -pb_5c : 32.25 -pb_10c : 32.20 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.27 -pb_1c : 32.27 -pb_5c : 32.25 -pb_10c : 32.20 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.28 -pb_1c : 32.28 -pb_5c : 32.25 -pb_10c : 32.20 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.29 -pb_1c : 32.29 -pb_5c : 32.25 -pb_10c : 32.20 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.30 -pb_1c : 32.30 -pb_5c : 32.30 -pb_10c : 32.30 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.31 -pb_1c : 32.31 -pb_5c : 32.30 -pb_10c : 32.30 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.32 -pb_1c : 32.32 -pb_5c : 32.30 -pb_10c : 32.30 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.33 -pb_1c : 32.33 -pb_5c : 32.30 -pb_10c : 32.30 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.34 -pb_1c : 32.34 -pb_5c : 32.30 -pb_10c : 32.30 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.35 -pb_1c : 32.35 -pb_5c : 32.35 -pb_10c : 32.30 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.36 -pb_1c : 32.36 -pb_5c : 32.35 -pb_10c : 32.30 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.37 -pb_1c : 32.37 -pb_5c : 32.35 -pb_10c : 32.30 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.38 -pb_1c : 32.38 -pb_5c : 32.35 -pb_10c : 32.30 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.39 -pb_1c : 32.39 -pb_5c : 32.35 -pb_10c : 32.30 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.40 -pb_1c : 32.40 -pb_5c : 32.40 -pb_10c : 32.40 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.41 -pb_1c : 32.41 -pb_5c : 32.40 -pb_10c : 32.40 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.42 -pb_1c : 32.42 -pb_5c : 32.40 -pb_10c : 32.40 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.43 -pb_1c : 32.43 -pb_5c : 32.40 -pb_10c : 32.40 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.44 -pb_1c : 32.44 -pb_5c : 32.40 -pb_10c : 32.40 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.45 -pb_1c : 32.45 -pb_5c : 32.45 -pb_10c : 32.40 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.46 -pb_1c : 32.46 -pb_5c : 32.45 -pb_10c : 32.40 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.47 -pb_1c : 32.47 -pb_5c : 32.45 -pb_10c : 32.40 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.48 -pb_1c : 32.48 -pb_5c : 32.45 -pb_10c : 32.40 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.49 -pb_1c : 32.49 -pb_5c : 32.45 -pb_10c : 32.40 -pb_25c : 32.25 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.50 -pb_1c : 32.50 -pb_5c : 32.50 -pb_10c : 32.50 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.51 -pb_1c : 32.51 -pb_5c : 32.50 -pb_10c : 32.50 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.52 -pb_1c : 32.52 -pb_5c : 32.50 -pb_10c : 32.50 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.53 -pb_1c : 32.53 -pb_5c : 32.50 -pb_10c : 32.50 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.54 -pb_1c : 32.54 -pb_5c : 32.50 -pb_10c : 32.50 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.55 -pb_1c : 32.55 -pb_5c : 32.55 -pb_10c : 32.50 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.56 -pb_1c : 32.56 -pb_5c : 32.55 -pb_10c : 32.50 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.57 -pb_1c : 32.57 -pb_5c : 32.55 -pb_10c : 32.50 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.58 -pb_1c : 32.58 -pb_5c : 32.55 -pb_10c : 32.50 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.59 -pb_1c : 32.59 -pb_5c : 32.55 -pb_10c : 32.50 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.60 -pb_1c : 32.60 -pb_5c : 32.60 -pb_10c : 32.60 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.61 -pb_1c : 32.61 -pb_5c : 32.60 -pb_10c : 32.60 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.62 -pb_1c : 32.62 -pb_5c : 32.60 -pb_10c : 32.60 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.63 -pb_1c : 32.63 -pb_5c : 32.60 -pb_10c : 32.60 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.64 -pb_1c : 32.64 -pb_5c : 32.60 -pb_10c : 32.60 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.65 -pb_1c : 32.65 -pb_5c : 32.65 -pb_10c : 32.60 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.66 -pb_1c : 32.66 -pb_5c : 32.65 -pb_10c : 32.60 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.67 -pb_1c : 32.67 -pb_5c : 32.65 -pb_10c : 32.60 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.68 -pb_1c : 32.68 -pb_5c : 32.65 -pb_10c : 32.60 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.69 -pb_1c : 32.69 -pb_5c : 32.65 -pb_10c : 32.60 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.70 -pb_1c : 32.70 -pb_5c : 32.70 -pb_10c : 32.70 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.71 -pb_1c : 32.71 -pb_5c : 32.70 -pb_10c : 32.70 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.72 -pb_1c : 32.72 -pb_5c : 32.70 -pb_10c : 32.70 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.73 -pb_1c : 32.73 -pb_5c : 32.70 -pb_10c : 32.70 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.74 -pb_1c : 32.74 -pb_5c : 32.70 -pb_10c : 32.70 -pb_25c : 32.50 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.75 -pb_1c : 32.75 -pb_5c : 32.75 -pb_10c : 32.70 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.76 -pb_1c : 32.76 -pb_5c : 32.75 -pb_10c : 32.70 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.77 -pb_1c : 32.77 -pb_5c : 32.75 -pb_10c : 32.70 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.78 -pb_1c : 32.78 -pb_5c : 32.75 -pb_10c : 32.70 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.79 -pb_1c : 32.79 -pb_5c : 32.75 -pb_10c : 32.70 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.80 -pb_1c : 32.80 -pb_5c : 32.80 -pb_10c : 32.80 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.81 -pb_1c : 32.81 -pb_5c : 32.80 -pb_10c : 32.80 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.82 -pb_1c : 32.82 -pb_5c : 32.80 -pb_10c : 32.80 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.83 -pb_1c : 32.83 -pb_5c : 32.80 -pb_10c : 32.80 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.84 -pb_1c : 32.84 -pb_5c : 32.80 -pb_10c : 32.80 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.85 -pb_1c : 32.85 -pb_5c : 32.85 -pb_10c : 32.80 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.86 -pb_1c : 32.86 -pb_5c : 32.85 -pb_10c : 32.80 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.87 -pb_1c : 32.87 -pb_5c : 32.85 -pb_10c : 32.80 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.88 -pb_1c : 32.88 -pb_5c : 32.85 -pb_10c : 32.80 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.89 -pb_1c : 32.89 -pb_5c : 32.85 -pb_10c : 32.80 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.90 -pb_1c : 32.90 -pb_5c : 32.90 -pb_10c : 32.90 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.91 -pb_1c : 32.91 -pb_5c : 32.90 -pb_10c : 32.90 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.92 -pb_1c : 32.92 -pb_5c : 32.90 -pb_10c : 32.90 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.93 -pb_1c : 32.93 -pb_5c : 32.90 -pb_10c : 32.90 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.94 -pb_1c : 32.94 -pb_5c : 32.90 -pb_10c : 32.90 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.95 -pb_1c : 32.95 -pb_5c : 32.95 -pb_10c : 32.90 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.96 -pb_1c : 32.96 -pb_5c : 32.95 -pb_10c : 32.90 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.97 -pb_1c : 32.97 -pb_5c : 32.95 -pb_10c : 32.90 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.98 -pb_1c : 32.98 -pb_5c : 32.95 -pb_10c : 32.90 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -32.99 -pb_1c : 32.99 -pb_5c : 32.95 -pb_10c : 32.90 -pb_25c : 32.75 -pb_1d : 32.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.00 -pb_1c : 33.00 -pb_5c : 33.00 -pb_10c : 33.00 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.01 -pb_1c : 33.01 -pb_5c : 33.00 -pb_10c : 33.00 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.02 -pb_1c : 33.02 -pb_5c : 33.00 -pb_10c : 33.00 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.03 -pb_1c : 33.03 -pb_5c : 33.00 -pb_10c : 33.00 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.04 -pb_1c : 33.04 -pb_5c : 33.00 -pb_10c : 33.00 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.05 -pb_1c : 33.05 -pb_5c : 33.05 -pb_10c : 33.00 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.06 -pb_1c : 33.06 -pb_5c : 33.05 -pb_10c : 33.00 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.07 -pb_1c : 33.07 -pb_5c : 33.05 -pb_10c : 33.00 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.08 -pb_1c : 33.08 -pb_5c : 33.05 -pb_10c : 33.00 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.09 -pb_1c : 33.09 -pb_5c : 33.05 -pb_10c : 33.00 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.10 -pb_1c : 33.10 -pb_5c : 33.10 -pb_10c : 33.10 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.11 -pb_1c : 33.11 -pb_5c : 33.10 -pb_10c : 33.10 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.12 -pb_1c : 33.12 -pb_5c : 33.10 -pb_10c : 33.10 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.13 -pb_1c : 33.13 -pb_5c : 33.10 -pb_10c : 33.10 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.14 -pb_1c : 33.14 -pb_5c : 33.10 -pb_10c : 33.10 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.15 -pb_1c : 33.15 -pb_5c : 33.15 -pb_10c : 33.10 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.16 -pb_1c : 33.16 -pb_5c : 33.15 -pb_10c : 33.10 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.17 -pb_1c : 33.17 -pb_5c : 33.15 -pb_10c : 33.10 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.18 -pb_1c : 33.18 -pb_5c : 33.15 -pb_10c : 33.10 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.19 -pb_1c : 33.19 -pb_5c : 33.15 -pb_10c : 33.10 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.20 -pb_1c : 33.20 -pb_5c : 33.20 -pb_10c : 33.20 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.21 -pb_1c : 33.21 -pb_5c : 33.20 -pb_10c : 33.20 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.22 -pb_1c : 33.22 -pb_5c : 33.20 -pb_10c : 33.20 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.23 -pb_1c : 33.23 -pb_5c : 33.20 -pb_10c : 33.20 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.24 -pb_1c : 33.24 -pb_5c : 33.20 -pb_10c : 33.20 -pb_25c : 33.00 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.25 -pb_1c : 33.25 -pb_5c : 33.25 -pb_10c : 33.20 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.26 -pb_1c : 33.26 -pb_5c : 33.25 -pb_10c : 33.20 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.27 -pb_1c : 33.27 -pb_5c : 33.25 -pb_10c : 33.20 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.28 -pb_1c : 33.28 -pb_5c : 33.25 -pb_10c : 33.20 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.29 -pb_1c : 33.29 -pb_5c : 33.25 -pb_10c : 33.20 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.30 -pb_1c : 33.30 -pb_5c : 33.30 -pb_10c : 33.30 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.31 -pb_1c : 33.31 -pb_5c : 33.30 -pb_10c : 33.30 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.32 -pb_1c : 33.32 -pb_5c : 33.30 -pb_10c : 33.30 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.33 -pb_1c : 33.33 -pb_5c : 33.30 -pb_10c : 33.30 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.34 -pb_1c : 33.34 -pb_5c : 33.30 -pb_10c : 33.30 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.35 -pb_1c : 33.35 -pb_5c : 33.35 -pb_10c : 33.30 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.36 -pb_1c : 33.36 -pb_5c : 33.35 -pb_10c : 33.30 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.37 -pb_1c : 33.37 -pb_5c : 33.35 -pb_10c : 33.30 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.38 -pb_1c : 33.38 -pb_5c : 33.35 -pb_10c : 33.30 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.39 -pb_1c : 33.39 -pb_5c : 33.35 -pb_10c : 33.30 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.40 -pb_1c : 33.40 -pb_5c : 33.40 -pb_10c : 33.40 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.41 -pb_1c : 33.41 -pb_5c : 33.40 -pb_10c : 33.40 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.42 -pb_1c : 33.42 -pb_5c : 33.40 -pb_10c : 33.40 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.43 -pb_1c : 33.43 -pb_5c : 33.40 -pb_10c : 33.40 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.44 -pb_1c : 33.44 -pb_5c : 33.40 -pb_10c : 33.40 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.45 -pb_1c : 33.45 -pb_5c : 33.45 -pb_10c : 33.40 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.46 -pb_1c : 33.46 -pb_5c : 33.45 -pb_10c : 33.40 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.47 -pb_1c : 33.47 -pb_5c : 33.45 -pb_10c : 33.40 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.48 -pb_1c : 33.48 -pb_5c : 33.45 -pb_10c : 33.40 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.49 -pb_1c : 33.49 -pb_5c : 33.45 -pb_10c : 33.40 -pb_25c : 33.25 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.50 -pb_1c : 33.50 -pb_5c : 33.50 -pb_10c : 33.50 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.51 -pb_1c : 33.51 -pb_5c : 33.50 -pb_10c : 33.50 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.52 -pb_1c : 33.52 -pb_5c : 33.50 -pb_10c : 33.50 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.53 -pb_1c : 33.53 -pb_5c : 33.50 -pb_10c : 33.50 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.54 -pb_1c : 33.54 -pb_5c : 33.50 -pb_10c : 33.50 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.55 -pb_1c : 33.55 -pb_5c : 33.55 -pb_10c : 33.50 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.56 -pb_1c : 33.56 -pb_5c : 33.55 -pb_10c : 33.50 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.57 -pb_1c : 33.57 -pb_5c : 33.55 -pb_10c : 33.50 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.58 -pb_1c : 33.58 -pb_5c : 33.55 -pb_10c : 33.50 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.59 -pb_1c : 33.59 -pb_5c : 33.55 -pb_10c : 33.50 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.60 -pb_1c : 33.60 -pb_5c : 33.60 -pb_10c : 33.60 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.61 -pb_1c : 33.61 -pb_5c : 33.60 -pb_10c : 33.60 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.62 -pb_1c : 33.62 -pb_5c : 33.60 -pb_10c : 33.60 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.63 -pb_1c : 33.63 -pb_5c : 33.60 -pb_10c : 33.60 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.64 -pb_1c : 33.64 -pb_5c : 33.60 -pb_10c : 33.60 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.65 -pb_1c : 33.65 -pb_5c : 33.65 -pb_10c : 33.60 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.66 -pb_1c : 33.66 -pb_5c : 33.65 -pb_10c : 33.60 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.67 -pb_1c : 33.67 -pb_5c : 33.65 -pb_10c : 33.60 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.68 -pb_1c : 33.68 -pb_5c : 33.65 -pb_10c : 33.60 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.69 -pb_1c : 33.69 -pb_5c : 33.65 -pb_10c : 33.60 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.70 -pb_1c : 33.70 -pb_5c : 33.70 -pb_10c : 33.70 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.71 -pb_1c : 33.71 -pb_5c : 33.70 -pb_10c : 33.70 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.72 -pb_1c : 33.72 -pb_5c : 33.70 -pb_10c : 33.70 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.73 -pb_1c : 33.73 -pb_5c : 33.70 -pb_10c : 33.70 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.74 -pb_1c : 33.74 -pb_5c : 33.70 -pb_10c : 33.70 -pb_25c : 33.50 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.75 -pb_1c : 33.75 -pb_5c : 33.75 -pb_10c : 33.70 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.76 -pb_1c : 33.76 -pb_5c : 33.75 -pb_10c : 33.70 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.77 -pb_1c : 33.77 -pb_5c : 33.75 -pb_10c : 33.70 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.78 -pb_1c : 33.78 -pb_5c : 33.75 -pb_10c : 33.70 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.79 -pb_1c : 33.79 -pb_5c : 33.75 -pb_10c : 33.70 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.80 -pb_1c : 33.80 -pb_5c : 33.80 -pb_10c : 33.80 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.81 -pb_1c : 33.81 -pb_5c : 33.80 -pb_10c : 33.80 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.82 -pb_1c : 33.82 -pb_5c : 33.80 -pb_10c : 33.80 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.83 -pb_1c : 33.83 -pb_5c : 33.80 -pb_10c : 33.80 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.84 -pb_1c : 33.84 -pb_5c : 33.80 -pb_10c : 33.80 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.85 -pb_1c : 33.85 -pb_5c : 33.85 -pb_10c : 33.80 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.86 -pb_1c : 33.86 -pb_5c : 33.85 -pb_10c : 33.80 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.87 -pb_1c : 33.87 -pb_5c : 33.85 -pb_10c : 33.80 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.88 -pb_1c : 33.88 -pb_5c : 33.85 -pb_10c : 33.80 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.89 -pb_1c : 33.89 -pb_5c : 33.85 -pb_10c : 33.80 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.90 -pb_1c : 33.90 -pb_5c : 33.90 -pb_10c : 33.90 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.91 -pb_1c : 33.91 -pb_5c : 33.90 -pb_10c : 33.90 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.92 -pb_1c : 33.92 -pb_5c : 33.90 -pb_10c : 33.90 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.93 -pb_1c : 33.93 -pb_5c : 33.90 -pb_10c : 33.90 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.94 -pb_1c : 33.94 -pb_5c : 33.90 -pb_10c : 33.90 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.95 -pb_1c : 33.95 -pb_5c : 33.95 -pb_10c : 33.90 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.96 -pb_1c : 33.96 -pb_5c : 33.95 -pb_10c : 33.90 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.97 -pb_1c : 33.97 -pb_5c : 33.95 -pb_10c : 33.90 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.98 -pb_1c : 33.98 -pb_5c : 33.95 -pb_10c : 33.90 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -33.99 -pb_1c : 33.99 -pb_5c : 33.95 -pb_10c : 33.90 -pb_25c : 33.75 -pb_1d : 33.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.00 -pb_1c : 34.00 -pb_5c : 34.00 -pb_10c : 34.00 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.01 -pb_1c : 34.01 -pb_5c : 34.00 -pb_10c : 34.00 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.02 -pb_1c : 34.02 -pb_5c : 34.00 -pb_10c : 34.00 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.03 -pb_1c : 34.03 -pb_5c : 34.00 -pb_10c : 34.00 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.04 -pb_1c : 34.04 -pb_5c : 34.00 -pb_10c : 34.00 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.05 -pb_1c : 34.05 -pb_5c : 34.05 -pb_10c : 34.00 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.06 -pb_1c : 34.06 -pb_5c : 34.05 -pb_10c : 34.00 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.07 -pb_1c : 34.07 -pb_5c : 34.05 -pb_10c : 34.00 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.08 -pb_1c : 34.08 -pb_5c : 34.05 -pb_10c : 34.00 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.09 -pb_1c : 34.09 -pb_5c : 34.05 -pb_10c : 34.00 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.10 -pb_1c : 34.10 -pb_5c : 34.10 -pb_10c : 34.10 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.11 -pb_1c : 34.11 -pb_5c : 34.10 -pb_10c : 34.10 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.12 -pb_1c : 34.12 -pb_5c : 34.10 -pb_10c : 34.10 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.13 -pb_1c : 34.13 -pb_5c : 34.10 -pb_10c : 34.10 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.14 -pb_1c : 34.14 -pb_5c : 34.10 -pb_10c : 34.10 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.15 -pb_1c : 34.15 -pb_5c : 34.15 -pb_10c : 34.10 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.16 -pb_1c : 34.16 -pb_5c : 34.15 -pb_10c : 34.10 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.17 -pb_1c : 34.17 -pb_5c : 34.15 -pb_10c : 34.10 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.18 -pb_1c : 34.18 -pb_5c : 34.15 -pb_10c : 34.10 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.19 -pb_1c : 34.19 -pb_5c : 34.15 -pb_10c : 34.10 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.20 -pb_1c : 34.20 -pb_5c : 34.20 -pb_10c : 34.20 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.21 -pb_1c : 34.21 -pb_5c : 34.20 -pb_10c : 34.20 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.22 -pb_1c : 34.22 -pb_5c : 34.20 -pb_10c : 34.20 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.23 -pb_1c : 34.23 -pb_5c : 34.20 -pb_10c : 34.20 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.24 -pb_1c : 34.24 -pb_5c : 34.20 -pb_10c : 34.20 -pb_25c : 34.00 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.25 -pb_1c : 34.25 -pb_5c : 34.25 -pb_10c : 34.20 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.26 -pb_1c : 34.26 -pb_5c : 34.25 -pb_10c : 34.20 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.27 -pb_1c : 34.27 -pb_5c : 34.25 -pb_10c : 34.20 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.28 -pb_1c : 34.28 -pb_5c : 34.25 -pb_10c : 34.20 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.29 -pb_1c : 34.29 -pb_5c : 34.25 -pb_10c : 34.20 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.30 -pb_1c : 34.30 -pb_5c : 34.30 -pb_10c : 34.30 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.31 -pb_1c : 34.31 -pb_5c : 34.30 -pb_10c : 34.30 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.32 -pb_1c : 34.32 -pb_5c : 34.30 -pb_10c : 34.30 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.33 -pb_1c : 34.33 -pb_5c : 34.30 -pb_10c : 34.30 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.34 -pb_1c : 34.34 -pb_5c : 34.30 -pb_10c : 34.30 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.35 -pb_1c : 34.35 -pb_5c : 34.35 -pb_10c : 34.30 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.36 -pb_1c : 34.36 -pb_5c : 34.35 -pb_10c : 34.30 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.37 -pb_1c : 34.37 -pb_5c : 34.35 -pb_10c : 34.30 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.38 -pb_1c : 34.38 -pb_5c : 34.35 -pb_10c : 34.30 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.39 -pb_1c : 34.39 -pb_5c : 34.35 -pb_10c : 34.30 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.40 -pb_1c : 34.40 -pb_5c : 34.40 -pb_10c : 34.40 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.41 -pb_1c : 34.41 -pb_5c : 34.40 -pb_10c : 34.40 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.42 -pb_1c : 34.42 -pb_5c : 34.40 -pb_10c : 34.40 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.43 -pb_1c : 34.43 -pb_5c : 34.40 -pb_10c : 34.40 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.44 -pb_1c : 34.44 -pb_5c : 34.40 -pb_10c : 34.40 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.45 -pb_1c : 34.45 -pb_5c : 34.45 -pb_10c : 34.40 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.46 -pb_1c : 34.46 -pb_5c : 34.45 -pb_10c : 34.40 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.47 -pb_1c : 34.47 -pb_5c : 34.45 -pb_10c : 34.40 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.48 -pb_1c : 34.48 -pb_5c : 34.45 -pb_10c : 34.40 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.49 -pb_1c : 34.49 -pb_5c : 34.45 -pb_10c : 34.40 -pb_25c : 34.25 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.50 -pb_1c : 34.50 -pb_5c : 34.50 -pb_10c : 34.50 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.51 -pb_1c : 34.51 -pb_5c : 34.50 -pb_10c : 34.50 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.52 -pb_1c : 34.52 -pb_5c : 34.50 -pb_10c : 34.50 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.53 -pb_1c : 34.53 -pb_5c : 34.50 -pb_10c : 34.50 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.54 -pb_1c : 34.54 -pb_5c : 34.50 -pb_10c : 34.50 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.55 -pb_1c : 34.55 -pb_5c : 34.55 -pb_10c : 34.50 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.56 -pb_1c : 34.56 -pb_5c : 34.55 -pb_10c : 34.50 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.57 -pb_1c : 34.57 -pb_5c : 34.55 -pb_10c : 34.50 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.58 -pb_1c : 34.58 -pb_5c : 34.55 -pb_10c : 34.50 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.59 -pb_1c : 34.59 -pb_5c : 34.55 -pb_10c : 34.50 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.60 -pb_1c : 34.60 -pb_5c : 34.60 -pb_10c : 34.60 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.61 -pb_1c : 34.61 -pb_5c : 34.60 -pb_10c : 34.60 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.62 -pb_1c : 34.62 -pb_5c : 34.60 -pb_10c : 34.60 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.63 -pb_1c : 34.63 -pb_5c : 34.60 -pb_10c : 34.60 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.64 -pb_1c : 34.64 -pb_5c : 34.60 -pb_10c : 34.60 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.65 -pb_1c : 34.65 -pb_5c : 34.65 -pb_10c : 34.60 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.66 -pb_1c : 34.66 -pb_5c : 34.65 -pb_10c : 34.60 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.67 -pb_1c : 34.67 -pb_5c : 34.65 -pb_10c : 34.60 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.68 -pb_1c : 34.68 -pb_5c : 34.65 -pb_10c : 34.60 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.69 -pb_1c : 34.69 -pb_5c : 34.65 -pb_10c : 34.60 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.70 -pb_1c : 34.70 -pb_5c : 34.70 -pb_10c : 34.70 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.71 -pb_1c : 34.71 -pb_5c : 34.70 -pb_10c : 34.70 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.72 -pb_1c : 34.72 -pb_5c : 34.70 -pb_10c : 34.70 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.73 -pb_1c : 34.73 -pb_5c : 34.70 -pb_10c : 34.70 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.74 -pb_1c : 34.74 -pb_5c : 34.70 -pb_10c : 34.70 -pb_25c : 34.50 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.75 -pb_1c : 34.75 -pb_5c : 34.75 -pb_10c : 34.70 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.76 -pb_1c : 34.76 -pb_5c : 34.75 -pb_10c : 34.70 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.77 -pb_1c : 34.77 -pb_5c : 34.75 -pb_10c : 34.70 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.78 -pb_1c : 34.78 -pb_5c : 34.75 -pb_10c : 34.70 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.79 -pb_1c : 34.79 -pb_5c : 34.75 -pb_10c : 34.70 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.80 -pb_1c : 34.80 -pb_5c : 34.80 -pb_10c : 34.80 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.81 -pb_1c : 34.81 -pb_5c : 34.80 -pb_10c : 34.80 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.82 -pb_1c : 34.82 -pb_5c : 34.80 -pb_10c : 34.80 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.83 -pb_1c : 34.83 -pb_5c : 34.80 -pb_10c : 34.80 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.84 -pb_1c : 34.84 -pb_5c : 34.80 -pb_10c : 34.80 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.85 -pb_1c : 34.85 -pb_5c : 34.85 -pb_10c : 34.80 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.86 -pb_1c : 34.86 -pb_5c : 34.85 -pb_10c : 34.80 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.87 -pb_1c : 34.87 -pb_5c : 34.85 -pb_10c : 34.80 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.88 -pb_1c : 34.88 -pb_5c : 34.85 -pb_10c : 34.80 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.89 -pb_1c : 34.89 -pb_5c : 34.85 -pb_10c : 34.80 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.90 -pb_1c : 34.90 -pb_5c : 34.90 -pb_10c : 34.90 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.91 -pb_1c : 34.91 -pb_5c : 34.90 -pb_10c : 34.90 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.92 -pb_1c : 34.92 -pb_5c : 34.90 -pb_10c : 34.90 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.93 -pb_1c : 34.93 -pb_5c : 34.90 -pb_10c : 34.90 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.94 -pb_1c : 34.94 -pb_5c : 34.90 -pb_10c : 34.90 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.95 -pb_1c : 34.95 -pb_5c : 34.95 -pb_10c : 34.90 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.96 -pb_1c : 34.96 -pb_5c : 34.95 -pb_10c : 34.90 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.97 -pb_1c : 34.97 -pb_5c : 34.95 -pb_10c : 34.90 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.98 -pb_1c : 34.98 -pb_5c : 34.95 -pb_10c : 34.90 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -34.99 -pb_1c : 34.99 -pb_5c : 34.95 -pb_10c : 34.90 -pb_25c : 34.75 -pb_1d : 34.00 -pb_5d : 30.00 -pb_10d : 30.00 - -35.00 -pb_1c : 35.00 -pb_5c : 35.00 -pb_10c : 35.00 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.01 -pb_1c : 35.01 -pb_5c : 35.00 -pb_10c : 35.00 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.02 -pb_1c : 35.02 -pb_5c : 35.00 -pb_10c : 35.00 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.03 -pb_1c : 35.03 -pb_5c : 35.00 -pb_10c : 35.00 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.04 -pb_1c : 35.04 -pb_5c : 35.00 -pb_10c : 35.00 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.05 -pb_1c : 35.05 -pb_5c : 35.05 -pb_10c : 35.00 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.06 -pb_1c : 35.06 -pb_5c : 35.05 -pb_10c : 35.00 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.07 -pb_1c : 35.07 -pb_5c : 35.05 -pb_10c : 35.00 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.08 -pb_1c : 35.08 -pb_5c : 35.05 -pb_10c : 35.00 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.09 -pb_1c : 35.09 -pb_5c : 35.05 -pb_10c : 35.00 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.10 -pb_1c : 35.10 -pb_5c : 35.10 -pb_10c : 35.10 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.11 -pb_1c : 35.11 -pb_5c : 35.10 -pb_10c : 35.10 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.12 -pb_1c : 35.12 -pb_5c : 35.10 -pb_10c : 35.10 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.13 -pb_1c : 35.13 -pb_5c : 35.10 -pb_10c : 35.10 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.14 -pb_1c : 35.14 -pb_5c : 35.10 -pb_10c : 35.10 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.15 -pb_1c : 35.15 -pb_5c : 35.15 -pb_10c : 35.10 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.16 -pb_1c : 35.16 -pb_5c : 35.15 -pb_10c : 35.10 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.17 -pb_1c : 35.17 -pb_5c : 35.15 -pb_10c : 35.10 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.18 -pb_1c : 35.18 -pb_5c : 35.15 -pb_10c : 35.10 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.19 -pb_1c : 35.19 -pb_5c : 35.15 -pb_10c : 35.10 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.20 -pb_1c : 35.20 -pb_5c : 35.20 -pb_10c : 35.20 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.21 -pb_1c : 35.21 -pb_5c : 35.20 -pb_10c : 35.20 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.22 -pb_1c : 35.22 -pb_5c : 35.20 -pb_10c : 35.20 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.23 -pb_1c : 35.23 -pb_5c : 35.20 -pb_10c : 35.20 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.24 -pb_1c : 35.24 -pb_5c : 35.20 -pb_10c : 35.20 -pb_25c : 35.00 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.25 -pb_1c : 35.25 -pb_5c : 35.25 -pb_10c : 35.20 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.26 -pb_1c : 35.26 -pb_5c : 35.25 -pb_10c : 35.20 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.27 -pb_1c : 35.27 -pb_5c : 35.25 -pb_10c : 35.20 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.28 -pb_1c : 35.28 -pb_5c : 35.25 -pb_10c : 35.20 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.29 -pb_1c : 35.29 -pb_5c : 35.25 -pb_10c : 35.20 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.30 -pb_1c : 35.30 -pb_5c : 35.30 -pb_10c : 35.30 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.31 -pb_1c : 35.31 -pb_5c : 35.30 -pb_10c : 35.30 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.32 -pb_1c : 35.32 -pb_5c : 35.30 -pb_10c : 35.30 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.33 -pb_1c : 35.33 -pb_5c : 35.30 -pb_10c : 35.30 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.34 -pb_1c : 35.34 -pb_5c : 35.30 -pb_10c : 35.30 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.35 -pb_1c : 35.35 -pb_5c : 35.35 -pb_10c : 35.30 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.36 -pb_1c : 35.36 -pb_5c : 35.35 -pb_10c : 35.30 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.37 -pb_1c : 35.37 -pb_5c : 35.35 -pb_10c : 35.30 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.38 -pb_1c : 35.38 -pb_5c : 35.35 -pb_10c : 35.30 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.39 -pb_1c : 35.39 -pb_5c : 35.35 -pb_10c : 35.30 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.40 -pb_1c : 35.40 -pb_5c : 35.40 -pb_10c : 35.40 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.41 -pb_1c : 35.41 -pb_5c : 35.40 -pb_10c : 35.40 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.42 -pb_1c : 35.42 -pb_5c : 35.40 -pb_10c : 35.40 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.43 -pb_1c : 35.43 -pb_5c : 35.40 -pb_10c : 35.40 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.44 -pb_1c : 35.44 -pb_5c : 35.40 -pb_10c : 35.40 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.45 -pb_1c : 35.45 -pb_5c : 35.45 -pb_10c : 35.40 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.46 -pb_1c : 35.46 -pb_5c : 35.45 -pb_10c : 35.40 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.47 -pb_1c : 35.47 -pb_5c : 35.45 -pb_10c : 35.40 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.48 -pb_1c : 35.48 -pb_5c : 35.45 -pb_10c : 35.40 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.49 -pb_1c : 35.49 -pb_5c : 35.45 -pb_10c : 35.40 -pb_25c : 35.25 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.50 -pb_1c : 35.50 -pb_5c : 35.50 -pb_10c : 35.50 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.51 -pb_1c : 35.51 -pb_5c : 35.50 -pb_10c : 35.50 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.52 -pb_1c : 35.52 -pb_5c : 35.50 -pb_10c : 35.50 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.53 -pb_1c : 35.53 -pb_5c : 35.50 -pb_10c : 35.50 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.54 -pb_1c : 35.54 -pb_5c : 35.50 -pb_10c : 35.50 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.55 -pb_1c : 35.55 -pb_5c : 35.55 -pb_10c : 35.50 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.56 -pb_1c : 35.56 -pb_5c : 35.55 -pb_10c : 35.50 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.57 -pb_1c : 35.57 -pb_5c : 35.55 -pb_10c : 35.50 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.58 -pb_1c : 35.58 -pb_5c : 35.55 -pb_10c : 35.50 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.59 -pb_1c : 35.59 -pb_5c : 35.55 -pb_10c : 35.50 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.60 -pb_1c : 35.60 -pb_5c : 35.60 -pb_10c : 35.60 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.61 -pb_1c : 35.61 -pb_5c : 35.60 -pb_10c : 35.60 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.62 -pb_1c : 35.62 -pb_5c : 35.60 -pb_10c : 35.60 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.63 -pb_1c : 35.63 -pb_5c : 35.60 -pb_10c : 35.60 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.64 -pb_1c : 35.64 -pb_5c : 35.60 -pb_10c : 35.60 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.65 -pb_1c : 35.65 -pb_5c : 35.65 -pb_10c : 35.60 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.66 -pb_1c : 35.66 -pb_5c : 35.65 -pb_10c : 35.60 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.67 -pb_1c : 35.67 -pb_5c : 35.65 -pb_10c : 35.60 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.68 -pb_1c : 35.68 -pb_5c : 35.65 -pb_10c : 35.60 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.69 -pb_1c : 35.69 -pb_5c : 35.65 -pb_10c : 35.60 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.70 -pb_1c : 35.70 -pb_5c : 35.70 -pb_10c : 35.70 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.71 -pb_1c : 35.71 -pb_5c : 35.70 -pb_10c : 35.70 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.72 -pb_1c : 35.72 -pb_5c : 35.70 -pb_10c : 35.70 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.73 -pb_1c : 35.73 -pb_5c : 35.70 -pb_10c : 35.70 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.74 -pb_1c : 35.74 -pb_5c : 35.70 -pb_10c : 35.70 -pb_25c : 35.50 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.75 -pb_1c : 35.75 -pb_5c : 35.75 -pb_10c : 35.70 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.76 -pb_1c : 35.76 -pb_5c : 35.75 -pb_10c : 35.70 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.77 -pb_1c : 35.77 -pb_5c : 35.75 -pb_10c : 35.70 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.78 -pb_1c : 35.78 -pb_5c : 35.75 -pb_10c : 35.70 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.79 -pb_1c : 35.79 -pb_5c : 35.75 -pb_10c : 35.70 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.80 -pb_1c : 35.80 -pb_5c : 35.80 -pb_10c : 35.80 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.81 -pb_1c : 35.81 -pb_5c : 35.80 -pb_10c : 35.80 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.82 -pb_1c : 35.82 -pb_5c : 35.80 -pb_10c : 35.80 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.83 -pb_1c : 35.83 -pb_5c : 35.80 -pb_10c : 35.80 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.84 -pb_1c : 35.84 -pb_5c : 35.80 -pb_10c : 35.80 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.85 -pb_1c : 35.85 -pb_5c : 35.85 -pb_10c : 35.80 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.86 -pb_1c : 35.86 -pb_5c : 35.85 -pb_10c : 35.80 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.87 -pb_1c : 35.87 -pb_5c : 35.85 -pb_10c : 35.80 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.88 -pb_1c : 35.88 -pb_5c : 35.85 -pb_10c : 35.80 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.89 -pb_1c : 35.89 -pb_5c : 35.85 -pb_10c : 35.80 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.90 -pb_1c : 35.90 -pb_5c : 35.90 -pb_10c : 35.90 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.91 -pb_1c : 35.91 -pb_5c : 35.90 -pb_10c : 35.90 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.92 -pb_1c : 35.92 -pb_5c : 35.90 -pb_10c : 35.90 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.93 -pb_1c : 35.93 -pb_5c : 35.90 -pb_10c : 35.90 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.94 -pb_1c : 35.94 -pb_5c : 35.90 -pb_10c : 35.90 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.95 -pb_1c : 35.95 -pb_5c : 35.95 -pb_10c : 35.90 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.96 -pb_1c : 35.96 -pb_5c : 35.95 -pb_10c : 35.90 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.97 -pb_1c : 35.97 -pb_5c : 35.95 -pb_10c : 35.90 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.98 -pb_1c : 35.98 -pb_5c : 35.95 -pb_10c : 35.90 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -35.99 -pb_1c : 35.99 -pb_5c : 35.95 -pb_10c : 35.90 -pb_25c : 35.75 -pb_1d : 35.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.00 -pb_1c : 36.00 -pb_5c : 36.00 -pb_10c : 36.00 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.01 -pb_1c : 36.01 -pb_5c : 36.00 -pb_10c : 36.00 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.02 -pb_1c : 36.02 -pb_5c : 36.00 -pb_10c : 36.00 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.03 -pb_1c : 36.03 -pb_5c : 36.00 -pb_10c : 36.00 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.04 -pb_1c : 36.04 -pb_5c : 36.00 -pb_10c : 36.00 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.05 -pb_1c : 36.05 -pb_5c : 36.05 -pb_10c : 36.00 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.06 -pb_1c : 36.06 -pb_5c : 36.05 -pb_10c : 36.00 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.07 -pb_1c : 36.07 -pb_5c : 36.05 -pb_10c : 36.00 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.08 -pb_1c : 36.08 -pb_5c : 36.05 -pb_10c : 36.00 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.09 -pb_1c : 36.09 -pb_5c : 36.05 -pb_10c : 36.00 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.10 -pb_1c : 36.10 -pb_5c : 36.10 -pb_10c : 36.10 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.11 -pb_1c : 36.11 -pb_5c : 36.10 -pb_10c : 36.10 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.12 -pb_1c : 36.12 -pb_5c : 36.10 -pb_10c : 36.10 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.13 -pb_1c : 36.13 -pb_5c : 36.10 -pb_10c : 36.10 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.14 -pb_1c : 36.14 -pb_5c : 36.10 -pb_10c : 36.10 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.15 -pb_1c : 36.15 -pb_5c : 36.15 -pb_10c : 36.10 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.16 -pb_1c : 36.16 -pb_5c : 36.15 -pb_10c : 36.10 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.17 -pb_1c : 36.17 -pb_5c : 36.15 -pb_10c : 36.10 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.18 -pb_1c : 36.18 -pb_5c : 36.15 -pb_10c : 36.10 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.19 -pb_1c : 36.19 -pb_5c : 36.15 -pb_10c : 36.10 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.20 -pb_1c : 36.20 -pb_5c : 36.20 -pb_10c : 36.20 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.21 -pb_1c : 36.21 -pb_5c : 36.20 -pb_10c : 36.20 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.22 -pb_1c : 36.22 -pb_5c : 36.20 -pb_10c : 36.20 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.23 -pb_1c : 36.23 -pb_5c : 36.20 -pb_10c : 36.20 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.24 -pb_1c : 36.24 -pb_5c : 36.20 -pb_10c : 36.20 -pb_25c : 36.00 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.25 -pb_1c : 36.25 -pb_5c : 36.25 -pb_10c : 36.20 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.26 -pb_1c : 36.26 -pb_5c : 36.25 -pb_10c : 36.20 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.27 -pb_1c : 36.27 -pb_5c : 36.25 -pb_10c : 36.20 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.28 -pb_1c : 36.28 -pb_5c : 36.25 -pb_10c : 36.20 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.29 -pb_1c : 36.29 -pb_5c : 36.25 -pb_10c : 36.20 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.30 -pb_1c : 36.30 -pb_5c : 36.30 -pb_10c : 36.30 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.31 -pb_1c : 36.31 -pb_5c : 36.30 -pb_10c : 36.30 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.32 -pb_1c : 36.32 -pb_5c : 36.30 -pb_10c : 36.30 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.33 -pb_1c : 36.33 -pb_5c : 36.30 -pb_10c : 36.30 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.34 -pb_1c : 36.34 -pb_5c : 36.30 -pb_10c : 36.30 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.35 -pb_1c : 36.35 -pb_5c : 36.35 -pb_10c : 36.30 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.36 -pb_1c : 36.36 -pb_5c : 36.35 -pb_10c : 36.30 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.37 -pb_1c : 36.37 -pb_5c : 36.35 -pb_10c : 36.30 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.38 -pb_1c : 36.38 -pb_5c : 36.35 -pb_10c : 36.30 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.39 -pb_1c : 36.39 -pb_5c : 36.35 -pb_10c : 36.30 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.40 -pb_1c : 36.40 -pb_5c : 36.40 -pb_10c : 36.40 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.41 -pb_1c : 36.41 -pb_5c : 36.40 -pb_10c : 36.40 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.42 -pb_1c : 36.42 -pb_5c : 36.40 -pb_10c : 36.40 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.43 -pb_1c : 36.43 -pb_5c : 36.40 -pb_10c : 36.40 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.44 -pb_1c : 36.44 -pb_5c : 36.40 -pb_10c : 36.40 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.45 -pb_1c : 36.45 -pb_5c : 36.45 -pb_10c : 36.40 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.46 -pb_1c : 36.46 -pb_5c : 36.45 -pb_10c : 36.40 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.47 -pb_1c : 36.47 -pb_5c : 36.45 -pb_10c : 36.40 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.48 -pb_1c : 36.48 -pb_5c : 36.45 -pb_10c : 36.40 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.49 -pb_1c : 36.49 -pb_5c : 36.45 -pb_10c : 36.40 -pb_25c : 36.25 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.50 -pb_1c : 36.50 -pb_5c : 36.50 -pb_10c : 36.50 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.51 -pb_1c : 36.51 -pb_5c : 36.50 -pb_10c : 36.50 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.52 -pb_1c : 36.52 -pb_5c : 36.50 -pb_10c : 36.50 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.53 -pb_1c : 36.53 -pb_5c : 36.50 -pb_10c : 36.50 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.54 -pb_1c : 36.54 -pb_5c : 36.50 -pb_10c : 36.50 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.55 -pb_1c : 36.55 -pb_5c : 36.55 -pb_10c : 36.50 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.56 -pb_1c : 36.56 -pb_5c : 36.55 -pb_10c : 36.50 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.57 -pb_1c : 36.57 -pb_5c : 36.55 -pb_10c : 36.50 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.58 -pb_1c : 36.58 -pb_5c : 36.55 -pb_10c : 36.50 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.59 -pb_1c : 36.59 -pb_5c : 36.55 -pb_10c : 36.50 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.60 -pb_1c : 36.60 -pb_5c : 36.60 -pb_10c : 36.60 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.61 -pb_1c : 36.61 -pb_5c : 36.60 -pb_10c : 36.60 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.62 -pb_1c : 36.62 -pb_5c : 36.60 -pb_10c : 36.60 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.63 -pb_1c : 36.63 -pb_5c : 36.60 -pb_10c : 36.60 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.64 -pb_1c : 36.64 -pb_5c : 36.60 -pb_10c : 36.60 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.65 -pb_1c : 36.65 -pb_5c : 36.65 -pb_10c : 36.60 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.66 -pb_1c : 36.66 -pb_5c : 36.65 -pb_10c : 36.60 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.67 -pb_1c : 36.67 -pb_5c : 36.65 -pb_10c : 36.60 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.68 -pb_1c : 36.68 -pb_5c : 36.65 -pb_10c : 36.60 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.69 -pb_1c : 36.69 -pb_5c : 36.65 -pb_10c : 36.60 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.70 -pb_1c : 36.70 -pb_5c : 36.70 -pb_10c : 36.70 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.71 -pb_1c : 36.71 -pb_5c : 36.70 -pb_10c : 36.70 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.72 -pb_1c : 36.72 -pb_5c : 36.70 -pb_10c : 36.70 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.73 -pb_1c : 36.73 -pb_5c : 36.70 -pb_10c : 36.70 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.74 -pb_1c : 36.74 -pb_5c : 36.70 -pb_10c : 36.70 -pb_25c : 36.50 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.75 -pb_1c : 36.75 -pb_5c : 36.75 -pb_10c : 36.70 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.76 -pb_1c : 36.76 -pb_5c : 36.75 -pb_10c : 36.70 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.77 -pb_1c : 36.77 -pb_5c : 36.75 -pb_10c : 36.70 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.78 -pb_1c : 36.78 -pb_5c : 36.75 -pb_10c : 36.70 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.79 -pb_1c : 36.79 -pb_5c : 36.75 -pb_10c : 36.70 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.80 -pb_1c : 36.80 -pb_5c : 36.80 -pb_10c : 36.80 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.81 -pb_1c : 36.81 -pb_5c : 36.80 -pb_10c : 36.80 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.82 -pb_1c : 36.82 -pb_5c : 36.80 -pb_10c : 36.80 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.83 -pb_1c : 36.83 -pb_5c : 36.80 -pb_10c : 36.80 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.84 -pb_1c : 36.84 -pb_5c : 36.80 -pb_10c : 36.80 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.85 -pb_1c : 36.85 -pb_5c : 36.85 -pb_10c : 36.80 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.86 -pb_1c : 36.86 -pb_5c : 36.85 -pb_10c : 36.80 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.87 -pb_1c : 36.87 -pb_5c : 36.85 -pb_10c : 36.80 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.88 -pb_1c : 36.88 -pb_5c : 36.85 -pb_10c : 36.80 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.89 -pb_1c : 36.89 -pb_5c : 36.85 -pb_10c : 36.80 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.90 -pb_1c : 36.90 -pb_5c : 36.90 -pb_10c : 36.90 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.91 -pb_1c : 36.91 -pb_5c : 36.90 -pb_10c : 36.90 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.92 -pb_1c : 36.92 -pb_5c : 36.90 -pb_10c : 36.90 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.93 -pb_1c : 36.93 -pb_5c : 36.90 -pb_10c : 36.90 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.94 -pb_1c : 36.94 -pb_5c : 36.90 -pb_10c : 36.90 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.95 -pb_1c : 36.95 -pb_5c : 36.95 -pb_10c : 36.90 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.96 -pb_1c : 36.96 -pb_5c : 36.95 -pb_10c : 36.90 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.97 -pb_1c : 36.97 -pb_5c : 36.95 -pb_10c : 36.90 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.98 -pb_1c : 36.98 -pb_5c : 36.95 -pb_10c : 36.90 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -36.99 -pb_1c : 36.99 -pb_5c : 36.95 -pb_10c : 36.90 -pb_25c : 36.75 -pb_1d : 36.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.00 -pb_1c : 37.00 -pb_5c : 37.00 -pb_10c : 37.00 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.01 -pb_1c : 37.01 -pb_5c : 37.00 -pb_10c : 37.00 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.02 -pb_1c : 37.02 -pb_5c : 37.00 -pb_10c : 37.00 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.03 -pb_1c : 37.03 -pb_5c : 37.00 -pb_10c : 37.00 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.04 -pb_1c : 37.04 -pb_5c : 37.00 -pb_10c : 37.00 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.05 -pb_1c : 37.05 -pb_5c : 37.05 -pb_10c : 37.00 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.06 -pb_1c : 37.06 -pb_5c : 37.05 -pb_10c : 37.00 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.07 -pb_1c : 37.07 -pb_5c : 37.05 -pb_10c : 37.00 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.08 -pb_1c : 37.08 -pb_5c : 37.05 -pb_10c : 37.00 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.09 -pb_1c : 37.09 -pb_5c : 37.05 -pb_10c : 37.00 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.10 -pb_1c : 37.10 -pb_5c : 37.10 -pb_10c : 37.10 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.11 -pb_1c : 37.11 -pb_5c : 37.10 -pb_10c : 37.10 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.12 -pb_1c : 37.12 -pb_5c : 37.10 -pb_10c : 37.10 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.13 -pb_1c : 37.13 -pb_5c : 37.10 -pb_10c : 37.10 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.14 -pb_1c : 37.14 -pb_5c : 37.10 -pb_10c : 37.10 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.15 -pb_1c : 37.15 -pb_5c : 37.15 -pb_10c : 37.10 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.16 -pb_1c : 37.16 -pb_5c : 37.15 -pb_10c : 37.10 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.17 -pb_1c : 37.17 -pb_5c : 37.15 -pb_10c : 37.10 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.18 -pb_1c : 37.18 -pb_5c : 37.15 -pb_10c : 37.10 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.19 -pb_1c : 37.19 -pb_5c : 37.15 -pb_10c : 37.10 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.20 -pb_1c : 37.20 -pb_5c : 37.20 -pb_10c : 37.20 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.21 -pb_1c : 37.21 -pb_5c : 37.20 -pb_10c : 37.20 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.22 -pb_1c : 37.22 -pb_5c : 37.20 -pb_10c : 37.20 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.23 -pb_1c : 37.23 -pb_5c : 37.20 -pb_10c : 37.20 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.24 -pb_1c : 37.24 -pb_5c : 37.20 -pb_10c : 37.20 -pb_25c : 37.00 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.25 -pb_1c : 37.25 -pb_5c : 37.25 -pb_10c : 37.20 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.26 -pb_1c : 37.26 -pb_5c : 37.25 -pb_10c : 37.20 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.27 -pb_1c : 37.27 -pb_5c : 37.25 -pb_10c : 37.20 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.28 -pb_1c : 37.28 -pb_5c : 37.25 -pb_10c : 37.20 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.29 -pb_1c : 37.29 -pb_5c : 37.25 -pb_10c : 37.20 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.30 -pb_1c : 37.30 -pb_5c : 37.30 -pb_10c : 37.30 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.31 -pb_1c : 37.31 -pb_5c : 37.30 -pb_10c : 37.30 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.32 -pb_1c : 37.32 -pb_5c : 37.30 -pb_10c : 37.30 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.33 -pb_1c : 37.33 -pb_5c : 37.30 -pb_10c : 37.30 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.34 -pb_1c : 37.34 -pb_5c : 37.30 -pb_10c : 37.30 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.35 -pb_1c : 37.35 -pb_5c : 37.35 -pb_10c : 37.30 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.36 -pb_1c : 37.36 -pb_5c : 37.35 -pb_10c : 37.30 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.37 -pb_1c : 37.37 -pb_5c : 37.35 -pb_10c : 37.30 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.38 -pb_1c : 37.38 -pb_5c : 37.35 -pb_10c : 37.30 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.39 -pb_1c : 37.39 -pb_5c : 37.35 -pb_10c : 37.30 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.40 -pb_1c : 37.40 -pb_5c : 37.40 -pb_10c : 37.40 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.41 -pb_1c : 37.41 -pb_5c : 37.40 -pb_10c : 37.40 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.42 -pb_1c : 37.42 -pb_5c : 37.40 -pb_10c : 37.40 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.43 -pb_1c : 37.43 -pb_5c : 37.40 -pb_10c : 37.40 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.44 -pb_1c : 37.44 -pb_5c : 37.40 -pb_10c : 37.40 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.45 -pb_1c : 37.45 -pb_5c : 37.45 -pb_10c : 37.40 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.46 -pb_1c : 37.46 -pb_5c : 37.45 -pb_10c : 37.40 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.47 -pb_1c : 37.47 -pb_5c : 37.45 -pb_10c : 37.40 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.48 -pb_1c : 37.48 -pb_5c : 37.45 -pb_10c : 37.40 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.49 -pb_1c : 37.49 -pb_5c : 37.45 -pb_10c : 37.40 -pb_25c : 37.25 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.50 -pb_1c : 37.50 -pb_5c : 37.50 -pb_10c : 37.50 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.51 -pb_1c : 37.51 -pb_5c : 37.50 -pb_10c : 37.50 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.52 -pb_1c : 37.52 -pb_5c : 37.50 -pb_10c : 37.50 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.53 -pb_1c : 37.53 -pb_5c : 37.50 -pb_10c : 37.50 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.54 -pb_1c : 37.54 -pb_5c : 37.50 -pb_10c : 37.50 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.55 -pb_1c : 37.55 -pb_5c : 37.55 -pb_10c : 37.50 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.56 -pb_1c : 37.56 -pb_5c : 37.55 -pb_10c : 37.50 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.57 -pb_1c : 37.57 -pb_5c : 37.55 -pb_10c : 37.50 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.58 -pb_1c : 37.58 -pb_5c : 37.55 -pb_10c : 37.50 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.59 -pb_1c : 37.59 -pb_5c : 37.55 -pb_10c : 37.50 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.60 -pb_1c : 37.60 -pb_5c : 37.60 -pb_10c : 37.60 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.61 -pb_1c : 37.61 -pb_5c : 37.60 -pb_10c : 37.60 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.62 -pb_1c : 37.62 -pb_5c : 37.60 -pb_10c : 37.60 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.63 -pb_1c : 37.63 -pb_5c : 37.60 -pb_10c : 37.60 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.64 -pb_1c : 37.64 -pb_5c : 37.60 -pb_10c : 37.60 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.65 -pb_1c : 37.65 -pb_5c : 37.65 -pb_10c : 37.60 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.66 -pb_1c : 37.66 -pb_5c : 37.65 -pb_10c : 37.60 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.67 -pb_1c : 37.67 -pb_5c : 37.65 -pb_10c : 37.60 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.68 -pb_1c : 37.68 -pb_5c : 37.65 -pb_10c : 37.60 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.69 -pb_1c : 37.69 -pb_5c : 37.65 -pb_10c : 37.60 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.70 -pb_1c : 37.70 -pb_5c : 37.70 -pb_10c : 37.70 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.71 -pb_1c : 37.71 -pb_5c : 37.70 -pb_10c : 37.70 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.72 -pb_1c : 37.72 -pb_5c : 37.70 -pb_10c : 37.70 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.73 -pb_1c : 37.73 -pb_5c : 37.70 -pb_10c : 37.70 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.74 -pb_1c : 37.74 -pb_5c : 37.70 -pb_10c : 37.70 -pb_25c : 37.50 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.75 -pb_1c : 37.75 -pb_5c : 37.75 -pb_10c : 37.70 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.76 -pb_1c : 37.76 -pb_5c : 37.75 -pb_10c : 37.70 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.77 -pb_1c : 37.77 -pb_5c : 37.75 -pb_10c : 37.70 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.78 -pb_1c : 37.78 -pb_5c : 37.75 -pb_10c : 37.70 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.79 -pb_1c : 37.79 -pb_5c : 37.75 -pb_10c : 37.70 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.80 -pb_1c : 37.80 -pb_5c : 37.80 -pb_10c : 37.80 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.81 -pb_1c : 37.81 -pb_5c : 37.80 -pb_10c : 37.80 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.82 -pb_1c : 37.82 -pb_5c : 37.80 -pb_10c : 37.80 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.83 -pb_1c : 37.83 -pb_5c : 37.80 -pb_10c : 37.80 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.84 -pb_1c : 37.84 -pb_5c : 37.80 -pb_10c : 37.80 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.85 -pb_1c : 37.85 -pb_5c : 37.85 -pb_10c : 37.80 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.86 -pb_1c : 37.86 -pb_5c : 37.85 -pb_10c : 37.80 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.87 -pb_1c : 37.87 -pb_5c : 37.85 -pb_10c : 37.80 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.88 -pb_1c : 37.88 -pb_5c : 37.85 -pb_10c : 37.80 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.89 -pb_1c : 37.89 -pb_5c : 37.85 -pb_10c : 37.80 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.90 -pb_1c : 37.90 -pb_5c : 37.90 -pb_10c : 37.90 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.91 -pb_1c : 37.91 -pb_5c : 37.90 -pb_10c : 37.90 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.92 -pb_1c : 37.92 -pb_5c : 37.90 -pb_10c : 37.90 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.93 -pb_1c : 37.93 -pb_5c : 37.90 -pb_10c : 37.90 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.94 -pb_1c : 37.94 -pb_5c : 37.90 -pb_10c : 37.90 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.95 -pb_1c : 37.95 -pb_5c : 37.95 -pb_10c : 37.90 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.96 -pb_1c : 37.96 -pb_5c : 37.95 -pb_10c : 37.90 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.97 -pb_1c : 37.97 -pb_5c : 37.95 -pb_10c : 37.90 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.98 -pb_1c : 37.98 -pb_5c : 37.95 -pb_10c : 37.90 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -37.99 -pb_1c : 37.99 -pb_5c : 37.95 -pb_10c : 37.90 -pb_25c : 37.75 -pb_1d : 37.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.00 -pb_1c : 38.00 -pb_5c : 38.00 -pb_10c : 38.00 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.01 -pb_1c : 38.01 -pb_5c : 38.00 -pb_10c : 38.00 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.02 -pb_1c : 38.02 -pb_5c : 38.00 -pb_10c : 38.00 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.03 -pb_1c : 38.03 -pb_5c : 38.00 -pb_10c : 38.00 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.04 -pb_1c : 38.04 -pb_5c : 38.00 -pb_10c : 38.00 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.05 -pb_1c : 38.05 -pb_5c : 38.05 -pb_10c : 38.00 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.06 -pb_1c : 38.06 -pb_5c : 38.05 -pb_10c : 38.00 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.07 -pb_1c : 38.07 -pb_5c : 38.05 -pb_10c : 38.00 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.08 -pb_1c : 38.08 -pb_5c : 38.05 -pb_10c : 38.00 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.09 -pb_1c : 38.09 -pb_5c : 38.05 -pb_10c : 38.00 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.10 -pb_1c : 38.10 -pb_5c : 38.10 -pb_10c : 38.10 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.11 -pb_1c : 38.11 -pb_5c : 38.10 -pb_10c : 38.10 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.12 -pb_1c : 38.12 -pb_5c : 38.10 -pb_10c : 38.10 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.13 -pb_1c : 38.13 -pb_5c : 38.10 -pb_10c : 38.10 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.14 -pb_1c : 38.14 -pb_5c : 38.10 -pb_10c : 38.10 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.15 -pb_1c : 38.15 -pb_5c : 38.15 -pb_10c : 38.10 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.16 -pb_1c : 38.16 -pb_5c : 38.15 -pb_10c : 38.10 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.17 -pb_1c : 38.17 -pb_5c : 38.15 -pb_10c : 38.10 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.18 -pb_1c : 38.18 -pb_5c : 38.15 -pb_10c : 38.10 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.19 -pb_1c : 38.19 -pb_5c : 38.15 -pb_10c : 38.10 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.20 -pb_1c : 38.20 -pb_5c : 38.20 -pb_10c : 38.20 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.21 -pb_1c : 38.21 -pb_5c : 38.20 -pb_10c : 38.20 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.22 -pb_1c : 38.22 -pb_5c : 38.20 -pb_10c : 38.20 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.23 -pb_1c : 38.23 -pb_5c : 38.20 -pb_10c : 38.20 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.24 -pb_1c : 38.24 -pb_5c : 38.20 -pb_10c : 38.20 -pb_25c : 38.00 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.25 -pb_1c : 38.25 -pb_5c : 38.25 -pb_10c : 38.20 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.26 -pb_1c : 38.26 -pb_5c : 38.25 -pb_10c : 38.20 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.27 -pb_1c : 38.27 -pb_5c : 38.25 -pb_10c : 38.20 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.28 -pb_1c : 38.28 -pb_5c : 38.25 -pb_10c : 38.20 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.29 -pb_1c : 38.29 -pb_5c : 38.25 -pb_10c : 38.20 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.30 -pb_1c : 38.30 -pb_5c : 38.30 -pb_10c : 38.30 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.31 -pb_1c : 38.31 -pb_5c : 38.30 -pb_10c : 38.30 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.32 -pb_1c : 38.32 -pb_5c : 38.30 -pb_10c : 38.30 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.33 -pb_1c : 38.33 -pb_5c : 38.30 -pb_10c : 38.30 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.34 -pb_1c : 38.34 -pb_5c : 38.30 -pb_10c : 38.30 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.35 -pb_1c : 38.35 -pb_5c : 38.35 -pb_10c : 38.30 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.36 -pb_1c : 38.36 -pb_5c : 38.35 -pb_10c : 38.30 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.37 -pb_1c : 38.37 -pb_5c : 38.35 -pb_10c : 38.30 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.38 -pb_1c : 38.38 -pb_5c : 38.35 -pb_10c : 38.30 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.39 -pb_1c : 38.39 -pb_5c : 38.35 -pb_10c : 38.30 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.40 -pb_1c : 38.40 -pb_5c : 38.40 -pb_10c : 38.40 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.41 -pb_1c : 38.41 -pb_5c : 38.40 -pb_10c : 38.40 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.42 -pb_1c : 38.42 -pb_5c : 38.40 -pb_10c : 38.40 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.43 -pb_1c : 38.43 -pb_5c : 38.40 -pb_10c : 38.40 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.44 -pb_1c : 38.44 -pb_5c : 38.40 -pb_10c : 38.40 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.45 -pb_1c : 38.45 -pb_5c : 38.45 -pb_10c : 38.40 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.46 -pb_1c : 38.46 -pb_5c : 38.45 -pb_10c : 38.40 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.47 -pb_1c : 38.47 -pb_5c : 38.45 -pb_10c : 38.40 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.48 -pb_1c : 38.48 -pb_5c : 38.45 -pb_10c : 38.40 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.49 -pb_1c : 38.49 -pb_5c : 38.45 -pb_10c : 38.40 -pb_25c : 38.25 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.50 -pb_1c : 38.50 -pb_5c : 38.50 -pb_10c : 38.50 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.51 -pb_1c : 38.51 -pb_5c : 38.50 -pb_10c : 38.50 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.52 -pb_1c : 38.52 -pb_5c : 38.50 -pb_10c : 38.50 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.53 -pb_1c : 38.53 -pb_5c : 38.50 -pb_10c : 38.50 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.54 -pb_1c : 38.54 -pb_5c : 38.50 -pb_10c : 38.50 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.55 -pb_1c : 38.55 -pb_5c : 38.55 -pb_10c : 38.50 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.56 -pb_1c : 38.56 -pb_5c : 38.55 -pb_10c : 38.50 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.57 -pb_1c : 38.57 -pb_5c : 38.55 -pb_10c : 38.50 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.58 -pb_1c : 38.58 -pb_5c : 38.55 -pb_10c : 38.50 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.59 -pb_1c : 38.59 -pb_5c : 38.55 -pb_10c : 38.50 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.60 -pb_1c : 38.60 -pb_5c : 38.60 -pb_10c : 38.60 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.61 -pb_1c : 38.61 -pb_5c : 38.60 -pb_10c : 38.60 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.62 -pb_1c : 38.62 -pb_5c : 38.60 -pb_10c : 38.60 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.63 -pb_1c : 38.63 -pb_5c : 38.60 -pb_10c : 38.60 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.64 -pb_1c : 38.64 -pb_5c : 38.60 -pb_10c : 38.60 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.65 -pb_1c : 38.65 -pb_5c : 38.65 -pb_10c : 38.60 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.66 -pb_1c : 38.66 -pb_5c : 38.65 -pb_10c : 38.60 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.67 -pb_1c : 38.67 -pb_5c : 38.65 -pb_10c : 38.60 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.68 -pb_1c : 38.68 -pb_5c : 38.65 -pb_10c : 38.60 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.69 -pb_1c : 38.69 -pb_5c : 38.65 -pb_10c : 38.60 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.70 -pb_1c : 38.70 -pb_5c : 38.70 -pb_10c : 38.70 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.71 -pb_1c : 38.71 -pb_5c : 38.70 -pb_10c : 38.70 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.72 -pb_1c : 38.72 -pb_5c : 38.70 -pb_10c : 38.70 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.73 -pb_1c : 38.73 -pb_5c : 38.70 -pb_10c : 38.70 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.74 -pb_1c : 38.74 -pb_5c : 38.70 -pb_10c : 38.70 -pb_25c : 38.50 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.75 -pb_1c : 38.75 -pb_5c : 38.75 -pb_10c : 38.70 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.76 -pb_1c : 38.76 -pb_5c : 38.75 -pb_10c : 38.70 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.77 -pb_1c : 38.77 -pb_5c : 38.75 -pb_10c : 38.70 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.78 -pb_1c : 38.78 -pb_5c : 38.75 -pb_10c : 38.70 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.79 -pb_1c : 38.79 -pb_5c : 38.75 -pb_10c : 38.70 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.80 -pb_1c : 38.80 -pb_5c : 38.80 -pb_10c : 38.80 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.81 -pb_1c : 38.81 -pb_5c : 38.80 -pb_10c : 38.80 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.82 -pb_1c : 38.82 -pb_5c : 38.80 -pb_10c : 38.80 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.83 -pb_1c : 38.83 -pb_5c : 38.80 -pb_10c : 38.80 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.84 -pb_1c : 38.84 -pb_5c : 38.80 -pb_10c : 38.80 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.85 -pb_1c : 38.85 -pb_5c : 38.85 -pb_10c : 38.80 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.86 -pb_1c : 38.86 -pb_5c : 38.85 -pb_10c : 38.80 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.87 -pb_1c : 38.87 -pb_5c : 38.85 -pb_10c : 38.80 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.88 -pb_1c : 38.88 -pb_5c : 38.85 -pb_10c : 38.80 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.89 -pb_1c : 38.89 -pb_5c : 38.85 -pb_10c : 38.80 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.90 -pb_1c : 38.90 -pb_5c : 38.90 -pb_10c : 38.90 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.91 -pb_1c : 38.91 -pb_5c : 38.90 -pb_10c : 38.90 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.92 -pb_1c : 38.92 -pb_5c : 38.90 -pb_10c : 38.90 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.93 -pb_1c : 38.93 -pb_5c : 38.90 -pb_10c : 38.90 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.94 -pb_1c : 38.94 -pb_5c : 38.90 -pb_10c : 38.90 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.95 -pb_1c : 38.95 -pb_5c : 38.95 -pb_10c : 38.90 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.96 -pb_1c : 38.96 -pb_5c : 38.95 -pb_10c : 38.90 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.97 -pb_1c : 38.97 -pb_5c : 38.95 -pb_10c : 38.90 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.98 -pb_1c : 38.98 -pb_5c : 38.95 -pb_10c : 38.90 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -38.99 -pb_1c : 38.99 -pb_5c : 38.95 -pb_10c : 38.90 -pb_25c : 38.75 -pb_1d : 38.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.00 -pb_1c : 39.00 -pb_5c : 39.00 -pb_10c : 39.00 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.01 -pb_1c : 39.01 -pb_5c : 39.00 -pb_10c : 39.00 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.02 -pb_1c : 39.02 -pb_5c : 39.00 -pb_10c : 39.00 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.03 -pb_1c : 39.03 -pb_5c : 39.00 -pb_10c : 39.00 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.04 -pb_1c : 39.04 -pb_5c : 39.00 -pb_10c : 39.00 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.05 -pb_1c : 39.05 -pb_5c : 39.05 -pb_10c : 39.00 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.06 -pb_1c : 39.06 -pb_5c : 39.05 -pb_10c : 39.00 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.07 -pb_1c : 39.07 -pb_5c : 39.05 -pb_10c : 39.00 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.08 -pb_1c : 39.08 -pb_5c : 39.05 -pb_10c : 39.00 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.09 -pb_1c : 39.09 -pb_5c : 39.05 -pb_10c : 39.00 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.10 -pb_1c : 39.10 -pb_5c : 39.10 -pb_10c : 39.10 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.11 -pb_1c : 39.11 -pb_5c : 39.10 -pb_10c : 39.10 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.12 -pb_1c : 39.12 -pb_5c : 39.10 -pb_10c : 39.10 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.13 -pb_1c : 39.13 -pb_5c : 39.10 -pb_10c : 39.10 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.14 -pb_1c : 39.14 -pb_5c : 39.10 -pb_10c : 39.10 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.15 -pb_1c : 39.15 -pb_5c : 39.15 -pb_10c : 39.10 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.16 -pb_1c : 39.16 -pb_5c : 39.15 -pb_10c : 39.10 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.17 -pb_1c : 39.17 -pb_5c : 39.15 -pb_10c : 39.10 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.18 -pb_1c : 39.18 -pb_5c : 39.15 -pb_10c : 39.10 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.19 -pb_1c : 39.19 -pb_5c : 39.15 -pb_10c : 39.10 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.20 -pb_1c : 39.20 -pb_5c : 39.20 -pb_10c : 39.20 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.21 -pb_1c : 39.21 -pb_5c : 39.20 -pb_10c : 39.20 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.22 -pb_1c : 39.22 -pb_5c : 39.20 -pb_10c : 39.20 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.23 -pb_1c : 39.23 -pb_5c : 39.20 -pb_10c : 39.20 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.24 -pb_1c : 39.24 -pb_5c : 39.20 -pb_10c : 39.20 -pb_25c : 39.00 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.25 -pb_1c : 39.25 -pb_5c : 39.25 -pb_10c : 39.20 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.26 -pb_1c : 39.26 -pb_5c : 39.25 -pb_10c : 39.20 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.27 -pb_1c : 39.27 -pb_5c : 39.25 -pb_10c : 39.20 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.28 -pb_1c : 39.28 -pb_5c : 39.25 -pb_10c : 39.20 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.29 -pb_1c : 39.29 -pb_5c : 39.25 -pb_10c : 39.20 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.30 -pb_1c : 39.30 -pb_5c : 39.30 -pb_10c : 39.30 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.31 -pb_1c : 39.31 -pb_5c : 39.30 -pb_10c : 39.30 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.32 -pb_1c : 39.32 -pb_5c : 39.30 -pb_10c : 39.30 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.33 -pb_1c : 39.33 -pb_5c : 39.30 -pb_10c : 39.30 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.34 -pb_1c : 39.34 -pb_5c : 39.30 -pb_10c : 39.30 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.35 -pb_1c : 39.35 -pb_5c : 39.35 -pb_10c : 39.30 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.36 -pb_1c : 39.36 -pb_5c : 39.35 -pb_10c : 39.30 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.37 -pb_1c : 39.37 -pb_5c : 39.35 -pb_10c : 39.30 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.38 -pb_1c : 39.38 -pb_5c : 39.35 -pb_10c : 39.30 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.39 -pb_1c : 39.39 -pb_5c : 39.35 -pb_10c : 39.30 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.40 -pb_1c : 39.40 -pb_5c : 39.40 -pb_10c : 39.40 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.41 -pb_1c : 39.41 -pb_5c : 39.40 -pb_10c : 39.40 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.42 -pb_1c : 39.42 -pb_5c : 39.40 -pb_10c : 39.40 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.43 -pb_1c : 39.43 -pb_5c : 39.40 -pb_10c : 39.40 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.44 -pb_1c : 39.44 -pb_5c : 39.40 -pb_10c : 39.40 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.45 -pb_1c : 39.45 -pb_5c : 39.45 -pb_10c : 39.40 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.46 -pb_1c : 39.46 -pb_5c : 39.45 -pb_10c : 39.40 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.47 -pb_1c : 39.47 -pb_5c : 39.45 -pb_10c : 39.40 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.48 -pb_1c : 39.48 -pb_5c : 39.45 -pb_10c : 39.40 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.49 -pb_1c : 39.49 -pb_5c : 39.45 -pb_10c : 39.40 -pb_25c : 39.25 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.50 -pb_1c : 39.50 -pb_5c : 39.50 -pb_10c : 39.50 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.51 -pb_1c : 39.51 -pb_5c : 39.50 -pb_10c : 39.50 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.52 -pb_1c : 39.52 -pb_5c : 39.50 -pb_10c : 39.50 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.53 -pb_1c : 39.53 -pb_5c : 39.50 -pb_10c : 39.50 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.54 -pb_1c : 39.54 -pb_5c : 39.50 -pb_10c : 39.50 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.55 -pb_1c : 39.55 -pb_5c : 39.55 -pb_10c : 39.50 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.56 -pb_1c : 39.56 -pb_5c : 39.55 -pb_10c : 39.50 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.57 -pb_1c : 39.57 -pb_5c : 39.55 -pb_10c : 39.50 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.58 -pb_1c : 39.58 -pb_5c : 39.55 -pb_10c : 39.50 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.59 -pb_1c : 39.59 -pb_5c : 39.55 -pb_10c : 39.50 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.60 -pb_1c : 39.60 -pb_5c : 39.60 -pb_10c : 39.60 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.61 -pb_1c : 39.61 -pb_5c : 39.60 -pb_10c : 39.60 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.62 -pb_1c : 39.62 -pb_5c : 39.60 -pb_10c : 39.60 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.63 -pb_1c : 39.63 -pb_5c : 39.60 -pb_10c : 39.60 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.64 -pb_1c : 39.64 -pb_5c : 39.60 -pb_10c : 39.60 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.65 -pb_1c : 39.65 -pb_5c : 39.65 -pb_10c : 39.60 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.66 -pb_1c : 39.66 -pb_5c : 39.65 -pb_10c : 39.60 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.67 -pb_1c : 39.67 -pb_5c : 39.65 -pb_10c : 39.60 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.68 -pb_1c : 39.68 -pb_5c : 39.65 -pb_10c : 39.60 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.69 -pb_1c : 39.69 -pb_5c : 39.65 -pb_10c : 39.60 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.70 -pb_1c : 39.70 -pb_5c : 39.70 -pb_10c : 39.70 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.71 -pb_1c : 39.71 -pb_5c : 39.70 -pb_10c : 39.70 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.72 -pb_1c : 39.72 -pb_5c : 39.70 -pb_10c : 39.70 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.73 -pb_1c : 39.73 -pb_5c : 39.70 -pb_10c : 39.70 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.74 -pb_1c : 39.74 -pb_5c : 39.70 -pb_10c : 39.70 -pb_25c : 39.50 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.75 -pb_1c : 39.75 -pb_5c : 39.75 -pb_10c : 39.70 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.76 -pb_1c : 39.76 -pb_5c : 39.75 -pb_10c : 39.70 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.77 -pb_1c : 39.77 -pb_5c : 39.75 -pb_10c : 39.70 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.78 -pb_1c : 39.78 -pb_5c : 39.75 -pb_10c : 39.70 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.79 -pb_1c : 39.79 -pb_5c : 39.75 -pb_10c : 39.70 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.80 -pb_1c : 39.80 -pb_5c : 39.80 -pb_10c : 39.80 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.81 -pb_1c : 39.81 -pb_5c : 39.80 -pb_10c : 39.80 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.82 -pb_1c : 39.82 -pb_5c : 39.80 -pb_10c : 39.80 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.83 -pb_1c : 39.83 -pb_5c : 39.80 -pb_10c : 39.80 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.84 -pb_1c : 39.84 -pb_5c : 39.80 -pb_10c : 39.80 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.85 -pb_1c : 39.85 -pb_5c : 39.85 -pb_10c : 39.80 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.86 -pb_1c : 39.86 -pb_5c : 39.85 -pb_10c : 39.80 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.87 -pb_1c : 39.87 -pb_5c : 39.85 -pb_10c : 39.80 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.88 -pb_1c : 39.88 -pb_5c : 39.85 -pb_10c : 39.80 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.89 -pb_1c : 39.89 -pb_5c : 39.85 -pb_10c : 39.80 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.90 -pb_1c : 39.90 -pb_5c : 39.90 -pb_10c : 39.90 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.91 -pb_1c : 39.91 -pb_5c : 39.90 -pb_10c : 39.90 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.92 -pb_1c : 39.92 -pb_5c : 39.90 -pb_10c : 39.90 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.93 -pb_1c : 39.93 -pb_5c : 39.90 -pb_10c : 39.90 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.94 -pb_1c : 39.94 -pb_5c : 39.90 -pb_10c : 39.90 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.95 -pb_1c : 39.95 -pb_5c : 39.95 -pb_10c : 39.90 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.96 -pb_1c : 39.96 -pb_5c : 39.95 -pb_10c : 39.90 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.97 -pb_1c : 39.97 -pb_5c : 39.95 -pb_10c : 39.90 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.98 -pb_1c : 39.98 -pb_5c : 39.95 -pb_10c : 39.90 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -39.99 -pb_1c : 39.99 -pb_5c : 39.95 -pb_10c : 39.90 -pb_25c : 39.75 -pb_1d : 39.00 -pb_5d : 35.00 -pb_10d : 30.00 - -40.00 -pb_1c : 40.00 -pb_5c : 40.00 -pb_10c : 40.00 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.01 -pb_1c : 40.01 -pb_5c : 40.00 -pb_10c : 40.00 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.02 -pb_1c : 40.02 -pb_5c : 40.00 -pb_10c : 40.00 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.03 -pb_1c : 40.03 -pb_5c : 40.00 -pb_10c : 40.00 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.04 -pb_1c : 40.04 -pb_5c : 40.00 -pb_10c : 40.00 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.05 -pb_1c : 40.05 -pb_5c : 40.05 -pb_10c : 40.00 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.06 -pb_1c : 40.06 -pb_5c : 40.05 -pb_10c : 40.00 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.07 -pb_1c : 40.07 -pb_5c : 40.05 -pb_10c : 40.00 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.08 -pb_1c : 40.08 -pb_5c : 40.05 -pb_10c : 40.00 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.09 -pb_1c : 40.09 -pb_5c : 40.05 -pb_10c : 40.00 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.10 -pb_1c : 40.10 -pb_5c : 40.10 -pb_10c : 40.10 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.11 -pb_1c : 40.11 -pb_5c : 40.10 -pb_10c : 40.10 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.12 -pb_1c : 40.12 -pb_5c : 40.10 -pb_10c : 40.10 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.13 -pb_1c : 40.13 -pb_5c : 40.10 -pb_10c : 40.10 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.14 -pb_1c : 40.14 -pb_5c : 40.10 -pb_10c : 40.10 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.15 -pb_1c : 40.15 -pb_5c : 40.15 -pb_10c : 40.10 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.16 -pb_1c : 40.16 -pb_5c : 40.15 -pb_10c : 40.10 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.17 -pb_1c : 40.17 -pb_5c : 40.15 -pb_10c : 40.10 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.18 -pb_1c : 40.18 -pb_5c : 40.15 -pb_10c : 40.10 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.19 -pb_1c : 40.19 -pb_5c : 40.15 -pb_10c : 40.10 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.20 -pb_1c : 40.20 -pb_5c : 40.20 -pb_10c : 40.20 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.21 -pb_1c : 40.21 -pb_5c : 40.20 -pb_10c : 40.20 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.22 -pb_1c : 40.22 -pb_5c : 40.20 -pb_10c : 40.20 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.23 -pb_1c : 40.23 -pb_5c : 40.20 -pb_10c : 40.20 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.24 -pb_1c : 40.24 -pb_5c : 40.20 -pb_10c : 40.20 -pb_25c : 40.00 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.25 -pb_1c : 40.25 -pb_5c : 40.25 -pb_10c : 40.20 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.26 -pb_1c : 40.26 -pb_5c : 40.25 -pb_10c : 40.20 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.27 -pb_1c : 40.27 -pb_5c : 40.25 -pb_10c : 40.20 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.28 -pb_1c : 40.28 -pb_5c : 40.25 -pb_10c : 40.20 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.29 -pb_1c : 40.29 -pb_5c : 40.25 -pb_10c : 40.20 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.30 -pb_1c : 40.30 -pb_5c : 40.30 -pb_10c : 40.30 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.31 -pb_1c : 40.31 -pb_5c : 40.30 -pb_10c : 40.30 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.32 -pb_1c : 40.32 -pb_5c : 40.30 -pb_10c : 40.30 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.33 -pb_1c : 40.33 -pb_5c : 40.30 -pb_10c : 40.30 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.34 -pb_1c : 40.34 -pb_5c : 40.30 -pb_10c : 40.30 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.35 -pb_1c : 40.35 -pb_5c : 40.35 -pb_10c : 40.30 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.36 -pb_1c : 40.36 -pb_5c : 40.35 -pb_10c : 40.30 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.37 -pb_1c : 40.37 -pb_5c : 40.35 -pb_10c : 40.30 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.38 -pb_1c : 40.38 -pb_5c : 40.35 -pb_10c : 40.30 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.39 -pb_1c : 40.39 -pb_5c : 40.35 -pb_10c : 40.30 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.40 -pb_1c : 40.40 -pb_5c : 40.40 -pb_10c : 40.40 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.41 -pb_1c : 40.41 -pb_5c : 40.40 -pb_10c : 40.40 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.42 -pb_1c : 40.42 -pb_5c : 40.40 -pb_10c : 40.40 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.43 -pb_1c : 40.43 -pb_5c : 40.40 -pb_10c : 40.40 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.44 -pb_1c : 40.44 -pb_5c : 40.40 -pb_10c : 40.40 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.45 -pb_1c : 40.45 -pb_5c : 40.45 -pb_10c : 40.40 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.46 -pb_1c : 40.46 -pb_5c : 40.45 -pb_10c : 40.40 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.47 -pb_1c : 40.47 -pb_5c : 40.45 -pb_10c : 40.40 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.48 -pb_1c : 40.48 -pb_5c : 40.45 -pb_10c : 40.40 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.49 -pb_1c : 40.49 -pb_5c : 40.45 -pb_10c : 40.40 -pb_25c : 40.25 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.50 -pb_1c : 40.50 -pb_5c : 40.50 -pb_10c : 40.50 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.51 -pb_1c : 40.51 -pb_5c : 40.50 -pb_10c : 40.50 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.52 -pb_1c : 40.52 -pb_5c : 40.50 -pb_10c : 40.50 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.53 -pb_1c : 40.53 -pb_5c : 40.50 -pb_10c : 40.50 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.54 -pb_1c : 40.54 -pb_5c : 40.50 -pb_10c : 40.50 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.55 -pb_1c : 40.55 -pb_5c : 40.55 -pb_10c : 40.50 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.56 -pb_1c : 40.56 -pb_5c : 40.55 -pb_10c : 40.50 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.57 -pb_1c : 40.57 -pb_5c : 40.55 -pb_10c : 40.50 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.58 -pb_1c : 40.58 -pb_5c : 40.55 -pb_10c : 40.50 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.59 -pb_1c : 40.59 -pb_5c : 40.55 -pb_10c : 40.50 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.60 -pb_1c : 40.60 -pb_5c : 40.60 -pb_10c : 40.60 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.61 -pb_1c : 40.61 -pb_5c : 40.60 -pb_10c : 40.60 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.62 -pb_1c : 40.62 -pb_5c : 40.60 -pb_10c : 40.60 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.63 -pb_1c : 40.63 -pb_5c : 40.60 -pb_10c : 40.60 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.64 -pb_1c : 40.64 -pb_5c : 40.60 -pb_10c : 40.60 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.65 -pb_1c : 40.65 -pb_5c : 40.65 -pb_10c : 40.60 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.66 -pb_1c : 40.66 -pb_5c : 40.65 -pb_10c : 40.60 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.67 -pb_1c : 40.67 -pb_5c : 40.65 -pb_10c : 40.60 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.68 -pb_1c : 40.68 -pb_5c : 40.65 -pb_10c : 40.60 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.69 -pb_1c : 40.69 -pb_5c : 40.65 -pb_10c : 40.60 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.70 -pb_1c : 40.70 -pb_5c : 40.70 -pb_10c : 40.70 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.71 -pb_1c : 40.71 -pb_5c : 40.70 -pb_10c : 40.70 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.72 -pb_1c : 40.72 -pb_5c : 40.70 -pb_10c : 40.70 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.73 -pb_1c : 40.73 -pb_5c : 40.70 -pb_10c : 40.70 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.74 -pb_1c : 40.74 -pb_5c : 40.70 -pb_10c : 40.70 -pb_25c : 40.50 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.75 -pb_1c : 40.75 -pb_5c : 40.75 -pb_10c : 40.70 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.76 -pb_1c : 40.76 -pb_5c : 40.75 -pb_10c : 40.70 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.77 -pb_1c : 40.77 -pb_5c : 40.75 -pb_10c : 40.70 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.78 -pb_1c : 40.78 -pb_5c : 40.75 -pb_10c : 40.70 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.79 -pb_1c : 40.79 -pb_5c : 40.75 -pb_10c : 40.70 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.80 -pb_1c : 40.80 -pb_5c : 40.80 -pb_10c : 40.80 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.81 -pb_1c : 40.81 -pb_5c : 40.80 -pb_10c : 40.80 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.82 -pb_1c : 40.82 -pb_5c : 40.80 -pb_10c : 40.80 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.83 -pb_1c : 40.83 -pb_5c : 40.80 -pb_10c : 40.80 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.84 -pb_1c : 40.84 -pb_5c : 40.80 -pb_10c : 40.80 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.85 -pb_1c : 40.85 -pb_5c : 40.85 -pb_10c : 40.80 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.86 -pb_1c : 40.86 -pb_5c : 40.85 -pb_10c : 40.80 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.87 -pb_1c : 40.87 -pb_5c : 40.85 -pb_10c : 40.80 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.88 -pb_1c : 40.88 -pb_5c : 40.85 -pb_10c : 40.80 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.89 -pb_1c : 40.89 -pb_5c : 40.85 -pb_10c : 40.80 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.90 -pb_1c : 40.90 -pb_5c : 40.90 -pb_10c : 40.90 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.91 -pb_1c : 40.91 -pb_5c : 40.90 -pb_10c : 40.90 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.92 -pb_1c : 40.92 -pb_5c : 40.90 -pb_10c : 40.90 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.93 -pb_1c : 40.93 -pb_5c : 40.90 -pb_10c : 40.90 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.94 -pb_1c : 40.94 -pb_5c : 40.90 -pb_10c : 40.90 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.95 -pb_1c : 40.95 -pb_5c : 40.95 -pb_10c : 40.90 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.96 -pb_1c : 40.96 -pb_5c : 40.95 -pb_10c : 40.90 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.97 -pb_1c : 40.97 -pb_5c : 40.95 -pb_10c : 40.90 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.98 -pb_1c : 40.98 -pb_5c : 40.95 -pb_10c : 40.90 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -40.99 -pb_1c : 40.99 -pb_5c : 40.95 -pb_10c : 40.90 -pb_25c : 40.75 -pb_1d : 40.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.00 -pb_1c : 41.00 -pb_5c : 41.00 -pb_10c : 41.00 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.01 -pb_1c : 41.01 -pb_5c : 41.00 -pb_10c : 41.00 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.02 -pb_1c : 41.02 -pb_5c : 41.00 -pb_10c : 41.00 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.03 -pb_1c : 41.03 -pb_5c : 41.00 -pb_10c : 41.00 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.04 -pb_1c : 41.04 -pb_5c : 41.00 -pb_10c : 41.00 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.05 -pb_1c : 41.05 -pb_5c : 41.05 -pb_10c : 41.00 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.06 -pb_1c : 41.06 -pb_5c : 41.05 -pb_10c : 41.00 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.07 -pb_1c : 41.07 -pb_5c : 41.05 -pb_10c : 41.00 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.08 -pb_1c : 41.08 -pb_5c : 41.05 -pb_10c : 41.00 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.09 -pb_1c : 41.09 -pb_5c : 41.05 -pb_10c : 41.00 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.10 -pb_1c : 41.10 -pb_5c : 41.10 -pb_10c : 41.10 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.11 -pb_1c : 41.11 -pb_5c : 41.10 -pb_10c : 41.10 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.12 -pb_1c : 41.12 -pb_5c : 41.10 -pb_10c : 41.10 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.13 -pb_1c : 41.13 -pb_5c : 41.10 -pb_10c : 41.10 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.14 -pb_1c : 41.14 -pb_5c : 41.10 -pb_10c : 41.10 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.15 -pb_1c : 41.15 -pb_5c : 41.15 -pb_10c : 41.10 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.16 -pb_1c : 41.16 -pb_5c : 41.15 -pb_10c : 41.10 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.17 -pb_1c : 41.17 -pb_5c : 41.15 -pb_10c : 41.10 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.18 -pb_1c : 41.18 -pb_5c : 41.15 -pb_10c : 41.10 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.19 -pb_1c : 41.19 -pb_5c : 41.15 -pb_10c : 41.10 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.20 -pb_1c : 41.20 -pb_5c : 41.20 -pb_10c : 41.20 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.21 -pb_1c : 41.21 -pb_5c : 41.20 -pb_10c : 41.20 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.22 -pb_1c : 41.22 -pb_5c : 41.20 -pb_10c : 41.20 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.23 -pb_1c : 41.23 -pb_5c : 41.20 -pb_10c : 41.20 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.24 -pb_1c : 41.24 -pb_5c : 41.20 -pb_10c : 41.20 -pb_25c : 41.00 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.25 -pb_1c : 41.25 -pb_5c : 41.25 -pb_10c : 41.20 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.26 -pb_1c : 41.26 -pb_5c : 41.25 -pb_10c : 41.20 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.27 -pb_1c : 41.27 -pb_5c : 41.25 -pb_10c : 41.20 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.28 -pb_1c : 41.28 -pb_5c : 41.25 -pb_10c : 41.20 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.29 -pb_1c : 41.29 -pb_5c : 41.25 -pb_10c : 41.20 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.30 -pb_1c : 41.30 -pb_5c : 41.30 -pb_10c : 41.30 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.31 -pb_1c : 41.31 -pb_5c : 41.30 -pb_10c : 41.30 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.32 -pb_1c : 41.32 -pb_5c : 41.30 -pb_10c : 41.30 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.33 -pb_1c : 41.33 -pb_5c : 41.30 -pb_10c : 41.30 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.34 -pb_1c : 41.34 -pb_5c : 41.30 -pb_10c : 41.30 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.35 -pb_1c : 41.35 -pb_5c : 41.35 -pb_10c : 41.30 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.36 -pb_1c : 41.36 -pb_5c : 41.35 -pb_10c : 41.30 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.37 -pb_1c : 41.37 -pb_5c : 41.35 -pb_10c : 41.30 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.38 -pb_1c : 41.38 -pb_5c : 41.35 -pb_10c : 41.30 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.39 -pb_1c : 41.39 -pb_5c : 41.35 -pb_10c : 41.30 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.40 -pb_1c : 41.40 -pb_5c : 41.40 -pb_10c : 41.40 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.41 -pb_1c : 41.41 -pb_5c : 41.40 -pb_10c : 41.40 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.42 -pb_1c : 41.42 -pb_5c : 41.40 -pb_10c : 41.40 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.43 -pb_1c : 41.43 -pb_5c : 41.40 -pb_10c : 41.40 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.44 -pb_1c : 41.44 -pb_5c : 41.40 -pb_10c : 41.40 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.45 -pb_1c : 41.45 -pb_5c : 41.45 -pb_10c : 41.40 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.46 -pb_1c : 41.46 -pb_5c : 41.45 -pb_10c : 41.40 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.47 -pb_1c : 41.47 -pb_5c : 41.45 -pb_10c : 41.40 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.48 -pb_1c : 41.48 -pb_5c : 41.45 -pb_10c : 41.40 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.49 -pb_1c : 41.49 -pb_5c : 41.45 -pb_10c : 41.40 -pb_25c : 41.25 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.50 -pb_1c : 41.50 -pb_5c : 41.50 -pb_10c : 41.50 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.51 -pb_1c : 41.51 -pb_5c : 41.50 -pb_10c : 41.50 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.52 -pb_1c : 41.52 -pb_5c : 41.50 -pb_10c : 41.50 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.53 -pb_1c : 41.53 -pb_5c : 41.50 -pb_10c : 41.50 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.54 -pb_1c : 41.54 -pb_5c : 41.50 -pb_10c : 41.50 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.55 -pb_1c : 41.55 -pb_5c : 41.55 -pb_10c : 41.50 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.56 -pb_1c : 41.56 -pb_5c : 41.55 -pb_10c : 41.50 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.57 -pb_1c : 41.57 -pb_5c : 41.55 -pb_10c : 41.50 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.58 -pb_1c : 41.58 -pb_5c : 41.55 -pb_10c : 41.50 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.59 -pb_1c : 41.59 -pb_5c : 41.55 -pb_10c : 41.50 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.60 -pb_1c : 41.60 -pb_5c : 41.60 -pb_10c : 41.60 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.61 -pb_1c : 41.61 -pb_5c : 41.60 -pb_10c : 41.60 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.62 -pb_1c : 41.62 -pb_5c : 41.60 -pb_10c : 41.60 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.63 -pb_1c : 41.63 -pb_5c : 41.60 -pb_10c : 41.60 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.64 -pb_1c : 41.64 -pb_5c : 41.60 -pb_10c : 41.60 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.65 -pb_1c : 41.65 -pb_5c : 41.65 -pb_10c : 41.60 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.66 -pb_1c : 41.66 -pb_5c : 41.65 -pb_10c : 41.60 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.67 -pb_1c : 41.67 -pb_5c : 41.65 -pb_10c : 41.60 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.68 -pb_1c : 41.68 -pb_5c : 41.65 -pb_10c : 41.60 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.69 -pb_1c : 41.69 -pb_5c : 41.65 -pb_10c : 41.60 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.70 -pb_1c : 41.70 -pb_5c : 41.70 -pb_10c : 41.70 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.71 -pb_1c : 41.71 -pb_5c : 41.70 -pb_10c : 41.70 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.72 -pb_1c : 41.72 -pb_5c : 41.70 -pb_10c : 41.70 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.73 -pb_1c : 41.73 -pb_5c : 41.70 -pb_10c : 41.70 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.74 -pb_1c : 41.74 -pb_5c : 41.70 -pb_10c : 41.70 -pb_25c : 41.50 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.75 -pb_1c : 41.75 -pb_5c : 41.75 -pb_10c : 41.70 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.76 -pb_1c : 41.76 -pb_5c : 41.75 -pb_10c : 41.70 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.77 -pb_1c : 41.77 -pb_5c : 41.75 -pb_10c : 41.70 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.78 -pb_1c : 41.78 -pb_5c : 41.75 -pb_10c : 41.70 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.79 -pb_1c : 41.79 -pb_5c : 41.75 -pb_10c : 41.70 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.80 -pb_1c : 41.80 -pb_5c : 41.80 -pb_10c : 41.80 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.81 -pb_1c : 41.81 -pb_5c : 41.80 -pb_10c : 41.80 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.82 -pb_1c : 41.82 -pb_5c : 41.80 -pb_10c : 41.80 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.83 -pb_1c : 41.83 -pb_5c : 41.80 -pb_10c : 41.80 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.84 -pb_1c : 41.84 -pb_5c : 41.80 -pb_10c : 41.80 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.85 -pb_1c : 41.85 -pb_5c : 41.85 -pb_10c : 41.80 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.86 -pb_1c : 41.86 -pb_5c : 41.85 -pb_10c : 41.80 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.87 -pb_1c : 41.87 -pb_5c : 41.85 -pb_10c : 41.80 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.88 -pb_1c : 41.88 -pb_5c : 41.85 -pb_10c : 41.80 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.89 -pb_1c : 41.89 -pb_5c : 41.85 -pb_10c : 41.80 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.90 -pb_1c : 41.90 -pb_5c : 41.90 -pb_10c : 41.90 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.91 -pb_1c : 41.91 -pb_5c : 41.90 -pb_10c : 41.90 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.92 -pb_1c : 41.92 -pb_5c : 41.90 -pb_10c : 41.90 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.93 -pb_1c : 41.93 -pb_5c : 41.90 -pb_10c : 41.90 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.94 -pb_1c : 41.94 -pb_5c : 41.90 -pb_10c : 41.90 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.95 -pb_1c : 41.95 -pb_5c : 41.95 -pb_10c : 41.90 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.96 -pb_1c : 41.96 -pb_5c : 41.95 -pb_10c : 41.90 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.97 -pb_1c : 41.97 -pb_5c : 41.95 -pb_10c : 41.90 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.98 -pb_1c : 41.98 -pb_5c : 41.95 -pb_10c : 41.90 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -41.99 -pb_1c : 41.99 -pb_5c : 41.95 -pb_10c : 41.90 -pb_25c : 41.75 -pb_1d : 41.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.00 -pb_1c : 42.00 -pb_5c : 42.00 -pb_10c : 42.00 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.01 -pb_1c : 42.01 -pb_5c : 42.00 -pb_10c : 42.00 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.02 -pb_1c : 42.02 -pb_5c : 42.00 -pb_10c : 42.00 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.03 -pb_1c : 42.03 -pb_5c : 42.00 -pb_10c : 42.00 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.04 -pb_1c : 42.04 -pb_5c : 42.00 -pb_10c : 42.00 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.05 -pb_1c : 42.05 -pb_5c : 42.05 -pb_10c : 42.00 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.06 -pb_1c : 42.06 -pb_5c : 42.05 -pb_10c : 42.00 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.07 -pb_1c : 42.07 -pb_5c : 42.05 -pb_10c : 42.00 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.08 -pb_1c : 42.08 -pb_5c : 42.05 -pb_10c : 42.00 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.09 -pb_1c : 42.09 -pb_5c : 42.05 -pb_10c : 42.00 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.10 -pb_1c : 42.10 -pb_5c : 42.10 -pb_10c : 42.10 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.11 -pb_1c : 42.11 -pb_5c : 42.10 -pb_10c : 42.10 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.12 -pb_1c : 42.12 -pb_5c : 42.10 -pb_10c : 42.10 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.13 -pb_1c : 42.13 -pb_5c : 42.10 -pb_10c : 42.10 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.14 -pb_1c : 42.14 -pb_5c : 42.10 -pb_10c : 42.10 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.15 -pb_1c : 42.15 -pb_5c : 42.15 -pb_10c : 42.10 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.16 -pb_1c : 42.16 -pb_5c : 42.15 -pb_10c : 42.10 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.17 -pb_1c : 42.17 -pb_5c : 42.15 -pb_10c : 42.10 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.18 -pb_1c : 42.18 -pb_5c : 42.15 -pb_10c : 42.10 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.19 -pb_1c : 42.19 -pb_5c : 42.15 -pb_10c : 42.10 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.20 -pb_1c : 42.20 -pb_5c : 42.20 -pb_10c : 42.20 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.21 -pb_1c : 42.21 -pb_5c : 42.20 -pb_10c : 42.20 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.22 -pb_1c : 42.22 -pb_5c : 42.20 -pb_10c : 42.20 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.23 -pb_1c : 42.23 -pb_5c : 42.20 -pb_10c : 42.20 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.24 -pb_1c : 42.24 -pb_5c : 42.20 -pb_10c : 42.20 -pb_25c : 42.00 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.25 -pb_1c : 42.25 -pb_5c : 42.25 -pb_10c : 42.20 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.26 -pb_1c : 42.26 -pb_5c : 42.25 -pb_10c : 42.20 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.27 -pb_1c : 42.27 -pb_5c : 42.25 -pb_10c : 42.20 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.28 -pb_1c : 42.28 -pb_5c : 42.25 -pb_10c : 42.20 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.29 -pb_1c : 42.29 -pb_5c : 42.25 -pb_10c : 42.20 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.30 -pb_1c : 42.30 -pb_5c : 42.30 -pb_10c : 42.30 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.31 -pb_1c : 42.31 -pb_5c : 42.30 -pb_10c : 42.30 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.32 -pb_1c : 42.32 -pb_5c : 42.30 -pb_10c : 42.30 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.33 -pb_1c : 42.33 -pb_5c : 42.30 -pb_10c : 42.30 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.34 -pb_1c : 42.34 -pb_5c : 42.30 -pb_10c : 42.30 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.35 -pb_1c : 42.35 -pb_5c : 42.35 -pb_10c : 42.30 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.36 -pb_1c : 42.36 -pb_5c : 42.35 -pb_10c : 42.30 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.37 -pb_1c : 42.37 -pb_5c : 42.35 -pb_10c : 42.30 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.38 -pb_1c : 42.38 -pb_5c : 42.35 -pb_10c : 42.30 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.39 -pb_1c : 42.39 -pb_5c : 42.35 -pb_10c : 42.30 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.40 -pb_1c : 42.40 -pb_5c : 42.40 -pb_10c : 42.40 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.41 -pb_1c : 42.41 -pb_5c : 42.40 -pb_10c : 42.40 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.42 -pb_1c : 42.42 -pb_5c : 42.40 -pb_10c : 42.40 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.43 -pb_1c : 42.43 -pb_5c : 42.40 -pb_10c : 42.40 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.44 -pb_1c : 42.44 -pb_5c : 42.40 -pb_10c : 42.40 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.45 -pb_1c : 42.45 -pb_5c : 42.45 -pb_10c : 42.40 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.46 -pb_1c : 42.46 -pb_5c : 42.45 -pb_10c : 42.40 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.47 -pb_1c : 42.47 -pb_5c : 42.45 -pb_10c : 42.40 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.48 -pb_1c : 42.48 -pb_5c : 42.45 -pb_10c : 42.40 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.49 -pb_1c : 42.49 -pb_5c : 42.45 -pb_10c : 42.40 -pb_25c : 42.25 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.50 -pb_1c : 42.50 -pb_5c : 42.50 -pb_10c : 42.50 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.51 -pb_1c : 42.51 -pb_5c : 42.50 -pb_10c : 42.50 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.52 -pb_1c : 42.52 -pb_5c : 42.50 -pb_10c : 42.50 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.53 -pb_1c : 42.53 -pb_5c : 42.50 -pb_10c : 42.50 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.54 -pb_1c : 42.54 -pb_5c : 42.50 -pb_10c : 42.50 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.55 -pb_1c : 42.55 -pb_5c : 42.55 -pb_10c : 42.50 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.56 -pb_1c : 42.56 -pb_5c : 42.55 -pb_10c : 42.50 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.57 -pb_1c : 42.57 -pb_5c : 42.55 -pb_10c : 42.50 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.58 -pb_1c : 42.58 -pb_5c : 42.55 -pb_10c : 42.50 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.59 -pb_1c : 42.59 -pb_5c : 42.55 -pb_10c : 42.50 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.60 -pb_1c : 42.60 -pb_5c : 42.60 -pb_10c : 42.60 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.61 -pb_1c : 42.61 -pb_5c : 42.60 -pb_10c : 42.60 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.62 -pb_1c : 42.62 -pb_5c : 42.60 -pb_10c : 42.60 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.63 -pb_1c : 42.63 -pb_5c : 42.60 -pb_10c : 42.60 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.64 -pb_1c : 42.64 -pb_5c : 42.60 -pb_10c : 42.60 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.65 -pb_1c : 42.65 -pb_5c : 42.65 -pb_10c : 42.60 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.66 -pb_1c : 42.66 -pb_5c : 42.65 -pb_10c : 42.60 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.67 -pb_1c : 42.67 -pb_5c : 42.65 -pb_10c : 42.60 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.68 -pb_1c : 42.68 -pb_5c : 42.65 -pb_10c : 42.60 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.69 -pb_1c : 42.69 -pb_5c : 42.65 -pb_10c : 42.60 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.70 -pb_1c : 42.70 -pb_5c : 42.70 -pb_10c : 42.70 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.71 -pb_1c : 42.71 -pb_5c : 42.70 -pb_10c : 42.70 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.72 -pb_1c : 42.72 -pb_5c : 42.70 -pb_10c : 42.70 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.73 -pb_1c : 42.73 -pb_5c : 42.70 -pb_10c : 42.70 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.74 -pb_1c : 42.74 -pb_5c : 42.70 -pb_10c : 42.70 -pb_25c : 42.50 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.75 -pb_1c : 42.75 -pb_5c : 42.75 -pb_10c : 42.70 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.76 -pb_1c : 42.76 -pb_5c : 42.75 -pb_10c : 42.70 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.77 -pb_1c : 42.77 -pb_5c : 42.75 -pb_10c : 42.70 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.78 -pb_1c : 42.78 -pb_5c : 42.75 -pb_10c : 42.70 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.79 -pb_1c : 42.79 -pb_5c : 42.75 -pb_10c : 42.70 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.80 -pb_1c : 42.80 -pb_5c : 42.80 -pb_10c : 42.80 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.81 -pb_1c : 42.81 -pb_5c : 42.80 -pb_10c : 42.80 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.82 -pb_1c : 42.82 -pb_5c : 42.80 -pb_10c : 42.80 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.83 -pb_1c : 42.83 -pb_5c : 42.80 -pb_10c : 42.80 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.84 -pb_1c : 42.84 -pb_5c : 42.80 -pb_10c : 42.80 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.85 -pb_1c : 42.85 -pb_5c : 42.85 -pb_10c : 42.80 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.86 -pb_1c : 42.86 -pb_5c : 42.85 -pb_10c : 42.80 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.87 -pb_1c : 42.87 -pb_5c : 42.85 -pb_10c : 42.80 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.88 -pb_1c : 42.88 -pb_5c : 42.85 -pb_10c : 42.80 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.89 -pb_1c : 42.89 -pb_5c : 42.85 -pb_10c : 42.80 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.90 -pb_1c : 42.90 -pb_5c : 42.90 -pb_10c : 42.90 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.91 -pb_1c : 42.91 -pb_5c : 42.90 -pb_10c : 42.90 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.92 -pb_1c : 42.92 -pb_5c : 42.90 -pb_10c : 42.90 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.93 -pb_1c : 42.93 -pb_5c : 42.90 -pb_10c : 42.90 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.94 -pb_1c : 42.94 -pb_5c : 42.90 -pb_10c : 42.90 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.95 -pb_1c : 42.95 -pb_5c : 42.95 -pb_10c : 42.90 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.96 -pb_1c : 42.96 -pb_5c : 42.95 -pb_10c : 42.90 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.97 -pb_1c : 42.97 -pb_5c : 42.95 -pb_10c : 42.90 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.98 -pb_1c : 42.98 -pb_5c : 42.95 -pb_10c : 42.90 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -42.99 -pb_1c : 42.99 -pb_5c : 42.95 -pb_10c : 42.90 -pb_25c : 42.75 -pb_1d : 42.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.00 -pb_1c : 43.00 -pb_5c : 43.00 -pb_10c : 43.00 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.01 -pb_1c : 43.01 -pb_5c : 43.00 -pb_10c : 43.00 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.02 -pb_1c : 43.02 -pb_5c : 43.00 -pb_10c : 43.00 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.03 -pb_1c : 43.03 -pb_5c : 43.00 -pb_10c : 43.00 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.04 -pb_1c : 43.04 -pb_5c : 43.00 -pb_10c : 43.00 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.05 -pb_1c : 43.05 -pb_5c : 43.05 -pb_10c : 43.00 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.06 -pb_1c : 43.06 -pb_5c : 43.05 -pb_10c : 43.00 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.07 -pb_1c : 43.07 -pb_5c : 43.05 -pb_10c : 43.00 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.08 -pb_1c : 43.08 -pb_5c : 43.05 -pb_10c : 43.00 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.09 -pb_1c : 43.09 -pb_5c : 43.05 -pb_10c : 43.00 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.10 -pb_1c : 43.10 -pb_5c : 43.10 -pb_10c : 43.10 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.11 -pb_1c : 43.11 -pb_5c : 43.10 -pb_10c : 43.10 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.12 -pb_1c : 43.12 -pb_5c : 43.10 -pb_10c : 43.10 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.13 -pb_1c : 43.13 -pb_5c : 43.10 -pb_10c : 43.10 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.14 -pb_1c : 43.14 -pb_5c : 43.10 -pb_10c : 43.10 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.15 -pb_1c : 43.15 -pb_5c : 43.15 -pb_10c : 43.10 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.16 -pb_1c : 43.16 -pb_5c : 43.15 -pb_10c : 43.10 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.17 -pb_1c : 43.17 -pb_5c : 43.15 -pb_10c : 43.10 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.18 -pb_1c : 43.18 -pb_5c : 43.15 -pb_10c : 43.10 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.19 -pb_1c : 43.19 -pb_5c : 43.15 -pb_10c : 43.10 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.20 -pb_1c : 43.20 -pb_5c : 43.20 -pb_10c : 43.20 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.21 -pb_1c : 43.21 -pb_5c : 43.20 -pb_10c : 43.20 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.22 -pb_1c : 43.22 -pb_5c : 43.20 -pb_10c : 43.20 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.23 -pb_1c : 43.23 -pb_5c : 43.20 -pb_10c : 43.20 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.24 -pb_1c : 43.24 -pb_5c : 43.20 -pb_10c : 43.20 -pb_25c : 43.00 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.25 -pb_1c : 43.25 -pb_5c : 43.25 -pb_10c : 43.20 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.26 -pb_1c : 43.26 -pb_5c : 43.25 -pb_10c : 43.20 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.27 -pb_1c : 43.27 -pb_5c : 43.25 -pb_10c : 43.20 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.28 -pb_1c : 43.28 -pb_5c : 43.25 -pb_10c : 43.20 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.29 -pb_1c : 43.29 -pb_5c : 43.25 -pb_10c : 43.20 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.30 -pb_1c : 43.30 -pb_5c : 43.30 -pb_10c : 43.30 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.31 -pb_1c : 43.31 -pb_5c : 43.30 -pb_10c : 43.30 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.32 -pb_1c : 43.32 -pb_5c : 43.30 -pb_10c : 43.30 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.33 -pb_1c : 43.33 -pb_5c : 43.30 -pb_10c : 43.30 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.34 -pb_1c : 43.34 -pb_5c : 43.30 -pb_10c : 43.30 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.35 -pb_1c : 43.35 -pb_5c : 43.35 -pb_10c : 43.30 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.36 -pb_1c : 43.36 -pb_5c : 43.35 -pb_10c : 43.30 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.37 -pb_1c : 43.37 -pb_5c : 43.35 -pb_10c : 43.30 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.38 -pb_1c : 43.38 -pb_5c : 43.35 -pb_10c : 43.30 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.39 -pb_1c : 43.39 -pb_5c : 43.35 -pb_10c : 43.30 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.40 -pb_1c : 43.40 -pb_5c : 43.40 -pb_10c : 43.40 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.41 -pb_1c : 43.41 -pb_5c : 43.40 -pb_10c : 43.40 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.42 -pb_1c : 43.42 -pb_5c : 43.40 -pb_10c : 43.40 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.43 -pb_1c : 43.43 -pb_5c : 43.40 -pb_10c : 43.40 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.44 -pb_1c : 43.44 -pb_5c : 43.40 -pb_10c : 43.40 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.45 -pb_1c : 43.45 -pb_5c : 43.45 -pb_10c : 43.40 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.46 -pb_1c : 43.46 -pb_5c : 43.45 -pb_10c : 43.40 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.47 -pb_1c : 43.47 -pb_5c : 43.45 -pb_10c : 43.40 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.48 -pb_1c : 43.48 -pb_5c : 43.45 -pb_10c : 43.40 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.49 -pb_1c : 43.49 -pb_5c : 43.45 -pb_10c : 43.40 -pb_25c : 43.25 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.50 -pb_1c : 43.50 -pb_5c : 43.50 -pb_10c : 43.50 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.51 -pb_1c : 43.51 -pb_5c : 43.50 -pb_10c : 43.50 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.52 -pb_1c : 43.52 -pb_5c : 43.50 -pb_10c : 43.50 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.53 -pb_1c : 43.53 -pb_5c : 43.50 -pb_10c : 43.50 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.54 -pb_1c : 43.54 -pb_5c : 43.50 -pb_10c : 43.50 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.55 -pb_1c : 43.55 -pb_5c : 43.55 -pb_10c : 43.50 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.56 -pb_1c : 43.56 -pb_5c : 43.55 -pb_10c : 43.50 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.57 -pb_1c : 43.57 -pb_5c : 43.55 -pb_10c : 43.50 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.58 -pb_1c : 43.58 -pb_5c : 43.55 -pb_10c : 43.50 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.59 -pb_1c : 43.59 -pb_5c : 43.55 -pb_10c : 43.50 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.60 -pb_1c : 43.60 -pb_5c : 43.60 -pb_10c : 43.60 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.61 -pb_1c : 43.61 -pb_5c : 43.60 -pb_10c : 43.60 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.62 -pb_1c : 43.62 -pb_5c : 43.60 -pb_10c : 43.60 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.63 -pb_1c : 43.63 -pb_5c : 43.60 -pb_10c : 43.60 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.64 -pb_1c : 43.64 -pb_5c : 43.60 -pb_10c : 43.60 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.65 -pb_1c : 43.65 -pb_5c : 43.65 -pb_10c : 43.60 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.66 -pb_1c : 43.66 -pb_5c : 43.65 -pb_10c : 43.60 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.67 -pb_1c : 43.67 -pb_5c : 43.65 -pb_10c : 43.60 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.68 -pb_1c : 43.68 -pb_5c : 43.65 -pb_10c : 43.60 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.69 -pb_1c : 43.69 -pb_5c : 43.65 -pb_10c : 43.60 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.70 -pb_1c : 43.70 -pb_5c : 43.70 -pb_10c : 43.70 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.71 -pb_1c : 43.71 -pb_5c : 43.70 -pb_10c : 43.70 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.72 -pb_1c : 43.72 -pb_5c : 43.70 -pb_10c : 43.70 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.73 -pb_1c : 43.73 -pb_5c : 43.70 -pb_10c : 43.70 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.74 -pb_1c : 43.74 -pb_5c : 43.70 -pb_10c : 43.70 -pb_25c : 43.50 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.75 -pb_1c : 43.75 -pb_5c : 43.75 -pb_10c : 43.70 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.76 -pb_1c : 43.76 -pb_5c : 43.75 -pb_10c : 43.70 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.77 -pb_1c : 43.77 -pb_5c : 43.75 -pb_10c : 43.70 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.78 -pb_1c : 43.78 -pb_5c : 43.75 -pb_10c : 43.70 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.79 -pb_1c : 43.79 -pb_5c : 43.75 -pb_10c : 43.70 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.80 -pb_1c : 43.80 -pb_5c : 43.80 -pb_10c : 43.80 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.81 -pb_1c : 43.81 -pb_5c : 43.80 -pb_10c : 43.80 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.82 -pb_1c : 43.82 -pb_5c : 43.80 -pb_10c : 43.80 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.83 -pb_1c : 43.83 -pb_5c : 43.80 -pb_10c : 43.80 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.84 -pb_1c : 43.84 -pb_5c : 43.80 -pb_10c : 43.80 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.85 -pb_1c : 43.85 -pb_5c : 43.85 -pb_10c : 43.80 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.86 -pb_1c : 43.86 -pb_5c : 43.85 -pb_10c : 43.80 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.87 -pb_1c : 43.87 -pb_5c : 43.85 -pb_10c : 43.80 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.88 -pb_1c : 43.88 -pb_5c : 43.85 -pb_10c : 43.80 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.89 -pb_1c : 43.89 -pb_5c : 43.85 -pb_10c : 43.80 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.90 -pb_1c : 43.90 -pb_5c : 43.90 -pb_10c : 43.90 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.91 -pb_1c : 43.91 -pb_5c : 43.90 -pb_10c : 43.90 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.92 -pb_1c : 43.92 -pb_5c : 43.90 -pb_10c : 43.90 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.93 -pb_1c : 43.93 -pb_5c : 43.90 -pb_10c : 43.90 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.94 -pb_1c : 43.94 -pb_5c : 43.90 -pb_10c : 43.90 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.95 -pb_1c : 43.95 -pb_5c : 43.95 -pb_10c : 43.90 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.96 -pb_1c : 43.96 -pb_5c : 43.95 -pb_10c : 43.90 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.97 -pb_1c : 43.97 -pb_5c : 43.95 -pb_10c : 43.90 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.98 -pb_1c : 43.98 -pb_5c : 43.95 -pb_10c : 43.90 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -43.99 -pb_1c : 43.99 -pb_5c : 43.95 -pb_10c : 43.90 -pb_25c : 43.75 -pb_1d : 43.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.00 -pb_1c : 44.00 -pb_5c : 44.00 -pb_10c : 44.00 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.01 -pb_1c : 44.01 -pb_5c : 44.00 -pb_10c : 44.00 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.02 -pb_1c : 44.02 -pb_5c : 44.00 -pb_10c : 44.00 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.03 -pb_1c : 44.03 -pb_5c : 44.00 -pb_10c : 44.00 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.04 -pb_1c : 44.04 -pb_5c : 44.00 -pb_10c : 44.00 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.05 -pb_1c : 44.05 -pb_5c : 44.05 -pb_10c : 44.00 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.06 -pb_1c : 44.06 -pb_5c : 44.05 -pb_10c : 44.00 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.07 -pb_1c : 44.07 -pb_5c : 44.05 -pb_10c : 44.00 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.08 -pb_1c : 44.08 -pb_5c : 44.05 -pb_10c : 44.00 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.09 -pb_1c : 44.09 -pb_5c : 44.05 -pb_10c : 44.00 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.10 -pb_1c : 44.10 -pb_5c : 44.10 -pb_10c : 44.10 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.11 -pb_1c : 44.11 -pb_5c : 44.10 -pb_10c : 44.10 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.12 -pb_1c : 44.12 -pb_5c : 44.10 -pb_10c : 44.10 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.13 -pb_1c : 44.13 -pb_5c : 44.10 -pb_10c : 44.10 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.14 -pb_1c : 44.14 -pb_5c : 44.10 -pb_10c : 44.10 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.15 -pb_1c : 44.15 -pb_5c : 44.15 -pb_10c : 44.10 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.16 -pb_1c : 44.16 -pb_5c : 44.15 -pb_10c : 44.10 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.17 -pb_1c : 44.17 -pb_5c : 44.15 -pb_10c : 44.10 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.18 -pb_1c : 44.18 -pb_5c : 44.15 -pb_10c : 44.10 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.19 -pb_1c : 44.19 -pb_5c : 44.15 -pb_10c : 44.10 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.20 -pb_1c : 44.20 -pb_5c : 44.20 -pb_10c : 44.20 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.21 -pb_1c : 44.21 -pb_5c : 44.20 -pb_10c : 44.20 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.22 -pb_1c : 44.22 -pb_5c : 44.20 -pb_10c : 44.20 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.23 -pb_1c : 44.23 -pb_5c : 44.20 -pb_10c : 44.20 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.24 -pb_1c : 44.24 -pb_5c : 44.20 -pb_10c : 44.20 -pb_25c : 44.00 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.25 -pb_1c : 44.25 -pb_5c : 44.25 -pb_10c : 44.20 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.26 -pb_1c : 44.26 -pb_5c : 44.25 -pb_10c : 44.20 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.27 -pb_1c : 44.27 -pb_5c : 44.25 -pb_10c : 44.20 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.28 -pb_1c : 44.28 -pb_5c : 44.25 -pb_10c : 44.20 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.29 -pb_1c : 44.29 -pb_5c : 44.25 -pb_10c : 44.20 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.30 -pb_1c : 44.30 -pb_5c : 44.30 -pb_10c : 44.30 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.31 -pb_1c : 44.31 -pb_5c : 44.30 -pb_10c : 44.30 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.32 -pb_1c : 44.32 -pb_5c : 44.30 -pb_10c : 44.30 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.33 -pb_1c : 44.33 -pb_5c : 44.30 -pb_10c : 44.30 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.34 -pb_1c : 44.34 -pb_5c : 44.30 -pb_10c : 44.30 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.35 -pb_1c : 44.35 -pb_5c : 44.35 -pb_10c : 44.30 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.36 -pb_1c : 44.36 -pb_5c : 44.35 -pb_10c : 44.30 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.37 -pb_1c : 44.37 -pb_5c : 44.35 -pb_10c : 44.30 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.38 -pb_1c : 44.38 -pb_5c : 44.35 -pb_10c : 44.30 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.39 -pb_1c : 44.39 -pb_5c : 44.35 -pb_10c : 44.30 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.40 -pb_1c : 44.40 -pb_5c : 44.40 -pb_10c : 44.40 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.41 -pb_1c : 44.41 -pb_5c : 44.40 -pb_10c : 44.40 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.42 -pb_1c : 44.42 -pb_5c : 44.40 -pb_10c : 44.40 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.43 -pb_1c : 44.43 -pb_5c : 44.40 -pb_10c : 44.40 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.44 -pb_1c : 44.44 -pb_5c : 44.40 -pb_10c : 44.40 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.45 -pb_1c : 44.45 -pb_5c : 44.45 -pb_10c : 44.40 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.46 -pb_1c : 44.46 -pb_5c : 44.45 -pb_10c : 44.40 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.47 -pb_1c : 44.47 -pb_5c : 44.45 -pb_10c : 44.40 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.48 -pb_1c : 44.48 -pb_5c : 44.45 -pb_10c : 44.40 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.49 -pb_1c : 44.49 -pb_5c : 44.45 -pb_10c : 44.40 -pb_25c : 44.25 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.50 -pb_1c : 44.50 -pb_5c : 44.50 -pb_10c : 44.50 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.51 -pb_1c : 44.51 -pb_5c : 44.50 -pb_10c : 44.50 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.52 -pb_1c : 44.52 -pb_5c : 44.50 -pb_10c : 44.50 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.53 -pb_1c : 44.53 -pb_5c : 44.50 -pb_10c : 44.50 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.54 -pb_1c : 44.54 -pb_5c : 44.50 -pb_10c : 44.50 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.55 -pb_1c : 44.55 -pb_5c : 44.55 -pb_10c : 44.50 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.56 -pb_1c : 44.56 -pb_5c : 44.55 -pb_10c : 44.50 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.57 -pb_1c : 44.57 -pb_5c : 44.55 -pb_10c : 44.50 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.58 -pb_1c : 44.58 -pb_5c : 44.55 -pb_10c : 44.50 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.59 -pb_1c : 44.59 -pb_5c : 44.55 -pb_10c : 44.50 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.60 -pb_1c : 44.60 -pb_5c : 44.60 -pb_10c : 44.60 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.61 -pb_1c : 44.61 -pb_5c : 44.60 -pb_10c : 44.60 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.62 -pb_1c : 44.62 -pb_5c : 44.60 -pb_10c : 44.60 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.63 -pb_1c : 44.63 -pb_5c : 44.60 -pb_10c : 44.60 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.64 -pb_1c : 44.64 -pb_5c : 44.60 -pb_10c : 44.60 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.65 -pb_1c : 44.65 -pb_5c : 44.65 -pb_10c : 44.60 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.66 -pb_1c : 44.66 -pb_5c : 44.65 -pb_10c : 44.60 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.67 -pb_1c : 44.67 -pb_5c : 44.65 -pb_10c : 44.60 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.68 -pb_1c : 44.68 -pb_5c : 44.65 -pb_10c : 44.60 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.69 -pb_1c : 44.69 -pb_5c : 44.65 -pb_10c : 44.60 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.70 -pb_1c : 44.70 -pb_5c : 44.70 -pb_10c : 44.70 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.71 -pb_1c : 44.71 -pb_5c : 44.70 -pb_10c : 44.70 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.72 -pb_1c : 44.72 -pb_5c : 44.70 -pb_10c : 44.70 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.73 -pb_1c : 44.73 -pb_5c : 44.70 -pb_10c : 44.70 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.74 -pb_1c : 44.74 -pb_5c : 44.70 -pb_10c : 44.70 -pb_25c : 44.50 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.75 -pb_1c : 44.75 -pb_5c : 44.75 -pb_10c : 44.70 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.76 -pb_1c : 44.76 -pb_5c : 44.75 -pb_10c : 44.70 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.77 -pb_1c : 44.77 -pb_5c : 44.75 -pb_10c : 44.70 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.78 -pb_1c : 44.78 -pb_5c : 44.75 -pb_10c : 44.70 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.79 -pb_1c : 44.79 -pb_5c : 44.75 -pb_10c : 44.70 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.80 -pb_1c : 44.80 -pb_5c : 44.80 -pb_10c : 44.80 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.81 -pb_1c : 44.81 -pb_5c : 44.80 -pb_10c : 44.80 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.82 -pb_1c : 44.82 -pb_5c : 44.80 -pb_10c : 44.80 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.83 -pb_1c : 44.83 -pb_5c : 44.80 -pb_10c : 44.80 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.84 -pb_1c : 44.84 -pb_5c : 44.80 -pb_10c : 44.80 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.85 -pb_1c : 44.85 -pb_5c : 44.85 -pb_10c : 44.80 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.86 -pb_1c : 44.86 -pb_5c : 44.85 -pb_10c : 44.80 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.87 -pb_1c : 44.87 -pb_5c : 44.85 -pb_10c : 44.80 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.88 -pb_1c : 44.88 -pb_5c : 44.85 -pb_10c : 44.80 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.89 -pb_1c : 44.89 -pb_5c : 44.85 -pb_10c : 44.80 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.90 -pb_1c : 44.90 -pb_5c : 44.90 -pb_10c : 44.90 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.91 -pb_1c : 44.91 -pb_5c : 44.90 -pb_10c : 44.90 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.92 -pb_1c : 44.92 -pb_5c : 44.90 -pb_10c : 44.90 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.93 -pb_1c : 44.93 -pb_5c : 44.90 -pb_10c : 44.90 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.94 -pb_1c : 44.94 -pb_5c : 44.90 -pb_10c : 44.90 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.95 -pb_1c : 44.95 -pb_5c : 44.95 -pb_10c : 44.90 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.96 -pb_1c : 44.96 -pb_5c : 44.95 -pb_10c : 44.90 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.97 -pb_1c : 44.97 -pb_5c : 44.95 -pb_10c : 44.90 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.98 -pb_1c : 44.98 -pb_5c : 44.95 -pb_10c : 44.90 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -44.99 -pb_1c : 44.99 -pb_5c : 44.95 -pb_10c : 44.90 -pb_25c : 44.75 -pb_1d : 44.00 -pb_5d : 40.00 -pb_10d : 40.00 - -45.00 -pb_1c : 45.00 -pb_5c : 45.00 -pb_10c : 45.00 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.01 -pb_1c : 45.01 -pb_5c : 45.00 -pb_10c : 45.00 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.02 -pb_1c : 45.02 -pb_5c : 45.00 -pb_10c : 45.00 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.03 -pb_1c : 45.03 -pb_5c : 45.00 -pb_10c : 45.00 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.04 -pb_1c : 45.04 -pb_5c : 45.00 -pb_10c : 45.00 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.05 -pb_1c : 45.05 -pb_5c : 45.05 -pb_10c : 45.00 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.06 -pb_1c : 45.06 -pb_5c : 45.05 -pb_10c : 45.00 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.07 -pb_1c : 45.07 -pb_5c : 45.05 -pb_10c : 45.00 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.08 -pb_1c : 45.08 -pb_5c : 45.05 -pb_10c : 45.00 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.09 -pb_1c : 45.09 -pb_5c : 45.05 -pb_10c : 45.00 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.10 -pb_1c : 45.10 -pb_5c : 45.10 -pb_10c : 45.10 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.11 -pb_1c : 45.11 -pb_5c : 45.10 -pb_10c : 45.10 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.12 -pb_1c : 45.12 -pb_5c : 45.10 -pb_10c : 45.10 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.13 -pb_1c : 45.13 -pb_5c : 45.10 -pb_10c : 45.10 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.14 -pb_1c : 45.14 -pb_5c : 45.10 -pb_10c : 45.10 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.15 -pb_1c : 45.15 -pb_5c : 45.15 -pb_10c : 45.10 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.16 -pb_1c : 45.16 -pb_5c : 45.15 -pb_10c : 45.10 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.17 -pb_1c : 45.17 -pb_5c : 45.15 -pb_10c : 45.10 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.18 -pb_1c : 45.18 -pb_5c : 45.15 -pb_10c : 45.10 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.19 -pb_1c : 45.19 -pb_5c : 45.15 -pb_10c : 45.10 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.20 -pb_1c : 45.20 -pb_5c : 45.20 -pb_10c : 45.20 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.21 -pb_1c : 45.21 -pb_5c : 45.20 -pb_10c : 45.20 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.22 -pb_1c : 45.22 -pb_5c : 45.20 -pb_10c : 45.20 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.23 -pb_1c : 45.23 -pb_5c : 45.20 -pb_10c : 45.20 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.24 -pb_1c : 45.24 -pb_5c : 45.20 -pb_10c : 45.20 -pb_25c : 45.00 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.25 -pb_1c : 45.25 -pb_5c : 45.25 -pb_10c : 45.20 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.26 -pb_1c : 45.26 -pb_5c : 45.25 -pb_10c : 45.20 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.27 -pb_1c : 45.27 -pb_5c : 45.25 -pb_10c : 45.20 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.28 -pb_1c : 45.28 -pb_5c : 45.25 -pb_10c : 45.20 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.29 -pb_1c : 45.29 -pb_5c : 45.25 -pb_10c : 45.20 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.30 -pb_1c : 45.30 -pb_5c : 45.30 -pb_10c : 45.30 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.31 -pb_1c : 45.31 -pb_5c : 45.30 -pb_10c : 45.30 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.32 -pb_1c : 45.32 -pb_5c : 45.30 -pb_10c : 45.30 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.33 -pb_1c : 45.33 -pb_5c : 45.30 -pb_10c : 45.30 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.34 -pb_1c : 45.34 -pb_5c : 45.30 -pb_10c : 45.30 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.35 -pb_1c : 45.35 -pb_5c : 45.35 -pb_10c : 45.30 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.36 -pb_1c : 45.36 -pb_5c : 45.35 -pb_10c : 45.30 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.37 -pb_1c : 45.37 -pb_5c : 45.35 -pb_10c : 45.30 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.38 -pb_1c : 45.38 -pb_5c : 45.35 -pb_10c : 45.30 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.39 -pb_1c : 45.39 -pb_5c : 45.35 -pb_10c : 45.30 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.40 -pb_1c : 45.40 -pb_5c : 45.40 -pb_10c : 45.40 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.41 -pb_1c : 45.41 -pb_5c : 45.40 -pb_10c : 45.40 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.42 -pb_1c : 45.42 -pb_5c : 45.40 -pb_10c : 45.40 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.43 -pb_1c : 45.43 -pb_5c : 45.40 -pb_10c : 45.40 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.44 -pb_1c : 45.44 -pb_5c : 45.40 -pb_10c : 45.40 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.45 -pb_1c : 45.45 -pb_5c : 45.45 -pb_10c : 45.40 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.46 -pb_1c : 45.46 -pb_5c : 45.45 -pb_10c : 45.40 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.47 -pb_1c : 45.47 -pb_5c : 45.45 -pb_10c : 45.40 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.48 -pb_1c : 45.48 -pb_5c : 45.45 -pb_10c : 45.40 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.49 -pb_1c : 45.49 -pb_5c : 45.45 -pb_10c : 45.40 -pb_25c : 45.25 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.50 -pb_1c : 45.50 -pb_5c : 45.50 -pb_10c : 45.50 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.51 -pb_1c : 45.51 -pb_5c : 45.50 -pb_10c : 45.50 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.52 -pb_1c : 45.52 -pb_5c : 45.50 -pb_10c : 45.50 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.53 -pb_1c : 45.53 -pb_5c : 45.50 -pb_10c : 45.50 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.54 -pb_1c : 45.54 -pb_5c : 45.50 -pb_10c : 45.50 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.55 -pb_1c : 45.55 -pb_5c : 45.55 -pb_10c : 45.50 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.56 -pb_1c : 45.56 -pb_5c : 45.55 -pb_10c : 45.50 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.57 -pb_1c : 45.57 -pb_5c : 45.55 -pb_10c : 45.50 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.58 -pb_1c : 45.58 -pb_5c : 45.55 -pb_10c : 45.50 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.59 -pb_1c : 45.59 -pb_5c : 45.55 -pb_10c : 45.50 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.60 -pb_1c : 45.60 -pb_5c : 45.60 -pb_10c : 45.60 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.61 -pb_1c : 45.61 -pb_5c : 45.60 -pb_10c : 45.60 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.62 -pb_1c : 45.62 -pb_5c : 45.60 -pb_10c : 45.60 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.63 -pb_1c : 45.63 -pb_5c : 45.60 -pb_10c : 45.60 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.64 -pb_1c : 45.64 -pb_5c : 45.60 -pb_10c : 45.60 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.65 -pb_1c : 45.65 -pb_5c : 45.65 -pb_10c : 45.60 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.66 -pb_1c : 45.66 -pb_5c : 45.65 -pb_10c : 45.60 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.67 -pb_1c : 45.67 -pb_5c : 45.65 -pb_10c : 45.60 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.68 -pb_1c : 45.68 -pb_5c : 45.65 -pb_10c : 45.60 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.69 -pb_1c : 45.69 -pb_5c : 45.65 -pb_10c : 45.60 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.70 -pb_1c : 45.70 -pb_5c : 45.70 -pb_10c : 45.70 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.71 -pb_1c : 45.71 -pb_5c : 45.70 -pb_10c : 45.70 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.72 -pb_1c : 45.72 -pb_5c : 45.70 -pb_10c : 45.70 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.73 -pb_1c : 45.73 -pb_5c : 45.70 -pb_10c : 45.70 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.74 -pb_1c : 45.74 -pb_5c : 45.70 -pb_10c : 45.70 -pb_25c : 45.50 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.75 -pb_1c : 45.75 -pb_5c : 45.75 -pb_10c : 45.70 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.76 -pb_1c : 45.76 -pb_5c : 45.75 -pb_10c : 45.70 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.77 -pb_1c : 45.77 -pb_5c : 45.75 -pb_10c : 45.70 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.78 -pb_1c : 45.78 -pb_5c : 45.75 -pb_10c : 45.70 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.79 -pb_1c : 45.79 -pb_5c : 45.75 -pb_10c : 45.70 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.80 -pb_1c : 45.80 -pb_5c : 45.80 -pb_10c : 45.80 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.81 -pb_1c : 45.81 -pb_5c : 45.80 -pb_10c : 45.80 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.82 -pb_1c : 45.82 -pb_5c : 45.80 -pb_10c : 45.80 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.83 -pb_1c : 45.83 -pb_5c : 45.80 -pb_10c : 45.80 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.84 -pb_1c : 45.84 -pb_5c : 45.80 -pb_10c : 45.80 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.85 -pb_1c : 45.85 -pb_5c : 45.85 -pb_10c : 45.80 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.86 -pb_1c : 45.86 -pb_5c : 45.85 -pb_10c : 45.80 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.87 -pb_1c : 45.87 -pb_5c : 45.85 -pb_10c : 45.80 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.88 -pb_1c : 45.88 -pb_5c : 45.85 -pb_10c : 45.80 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.89 -pb_1c : 45.89 -pb_5c : 45.85 -pb_10c : 45.80 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.90 -pb_1c : 45.90 -pb_5c : 45.90 -pb_10c : 45.90 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.91 -pb_1c : 45.91 -pb_5c : 45.90 -pb_10c : 45.90 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.92 -pb_1c : 45.92 -pb_5c : 45.90 -pb_10c : 45.90 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.93 -pb_1c : 45.93 -pb_5c : 45.90 -pb_10c : 45.90 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.94 -pb_1c : 45.94 -pb_5c : 45.90 -pb_10c : 45.90 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.95 -pb_1c : 45.95 -pb_5c : 45.95 -pb_10c : 45.90 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.96 -pb_1c : 45.96 -pb_5c : 45.95 -pb_10c : 45.90 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.97 -pb_1c : 45.97 -pb_5c : 45.95 -pb_10c : 45.90 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.98 -pb_1c : 45.98 -pb_5c : 45.95 -pb_10c : 45.90 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -45.99 -pb_1c : 45.99 -pb_5c : 45.95 -pb_10c : 45.90 -pb_25c : 45.75 -pb_1d : 45.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.00 -pb_1c : 46.00 -pb_5c : 46.00 -pb_10c : 46.00 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.01 -pb_1c : 46.01 -pb_5c : 46.00 -pb_10c : 46.00 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.02 -pb_1c : 46.02 -pb_5c : 46.00 -pb_10c : 46.00 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.03 -pb_1c : 46.03 -pb_5c : 46.00 -pb_10c : 46.00 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.04 -pb_1c : 46.04 -pb_5c : 46.00 -pb_10c : 46.00 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.05 -pb_1c : 46.05 -pb_5c : 46.05 -pb_10c : 46.00 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.06 -pb_1c : 46.06 -pb_5c : 46.05 -pb_10c : 46.00 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.07 -pb_1c : 46.07 -pb_5c : 46.05 -pb_10c : 46.00 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.08 -pb_1c : 46.08 -pb_5c : 46.05 -pb_10c : 46.00 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.09 -pb_1c : 46.09 -pb_5c : 46.05 -pb_10c : 46.00 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.10 -pb_1c : 46.10 -pb_5c : 46.10 -pb_10c : 46.10 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.11 -pb_1c : 46.11 -pb_5c : 46.10 -pb_10c : 46.10 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.12 -pb_1c : 46.12 -pb_5c : 46.10 -pb_10c : 46.10 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.13 -pb_1c : 46.13 -pb_5c : 46.10 -pb_10c : 46.10 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.14 -pb_1c : 46.14 -pb_5c : 46.10 -pb_10c : 46.10 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.15 -pb_1c : 46.15 -pb_5c : 46.15 -pb_10c : 46.10 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.16 -pb_1c : 46.16 -pb_5c : 46.15 -pb_10c : 46.10 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.17 -pb_1c : 46.17 -pb_5c : 46.15 -pb_10c : 46.10 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.18 -pb_1c : 46.18 -pb_5c : 46.15 -pb_10c : 46.10 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.19 -pb_1c : 46.19 -pb_5c : 46.15 -pb_10c : 46.10 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.20 -pb_1c : 46.20 -pb_5c : 46.20 -pb_10c : 46.20 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.21 -pb_1c : 46.21 -pb_5c : 46.20 -pb_10c : 46.20 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.22 -pb_1c : 46.22 -pb_5c : 46.20 -pb_10c : 46.20 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.23 -pb_1c : 46.23 -pb_5c : 46.20 -pb_10c : 46.20 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.24 -pb_1c : 46.24 -pb_5c : 46.20 -pb_10c : 46.20 -pb_25c : 46.00 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.25 -pb_1c : 46.25 -pb_5c : 46.25 -pb_10c : 46.20 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.26 -pb_1c : 46.26 -pb_5c : 46.25 -pb_10c : 46.20 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.27 -pb_1c : 46.27 -pb_5c : 46.25 -pb_10c : 46.20 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.28 -pb_1c : 46.28 -pb_5c : 46.25 -pb_10c : 46.20 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.29 -pb_1c : 46.29 -pb_5c : 46.25 -pb_10c : 46.20 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.30 -pb_1c : 46.30 -pb_5c : 46.30 -pb_10c : 46.30 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.31 -pb_1c : 46.31 -pb_5c : 46.30 -pb_10c : 46.30 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.32 -pb_1c : 46.32 -pb_5c : 46.30 -pb_10c : 46.30 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.33 -pb_1c : 46.33 -pb_5c : 46.30 -pb_10c : 46.30 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.34 -pb_1c : 46.34 -pb_5c : 46.30 -pb_10c : 46.30 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.35 -pb_1c : 46.35 -pb_5c : 46.35 -pb_10c : 46.30 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.36 -pb_1c : 46.36 -pb_5c : 46.35 -pb_10c : 46.30 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.37 -pb_1c : 46.37 -pb_5c : 46.35 -pb_10c : 46.30 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.38 -pb_1c : 46.38 -pb_5c : 46.35 -pb_10c : 46.30 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.39 -pb_1c : 46.39 -pb_5c : 46.35 -pb_10c : 46.30 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.40 -pb_1c : 46.40 -pb_5c : 46.40 -pb_10c : 46.40 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.41 -pb_1c : 46.41 -pb_5c : 46.40 -pb_10c : 46.40 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.42 -pb_1c : 46.42 -pb_5c : 46.40 -pb_10c : 46.40 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.43 -pb_1c : 46.43 -pb_5c : 46.40 -pb_10c : 46.40 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.44 -pb_1c : 46.44 -pb_5c : 46.40 -pb_10c : 46.40 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.45 -pb_1c : 46.45 -pb_5c : 46.45 -pb_10c : 46.40 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.46 -pb_1c : 46.46 -pb_5c : 46.45 -pb_10c : 46.40 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.47 -pb_1c : 46.47 -pb_5c : 46.45 -pb_10c : 46.40 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.48 -pb_1c : 46.48 -pb_5c : 46.45 -pb_10c : 46.40 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.49 -pb_1c : 46.49 -pb_5c : 46.45 -pb_10c : 46.40 -pb_25c : 46.25 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.50 -pb_1c : 46.50 -pb_5c : 46.50 -pb_10c : 46.50 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.51 -pb_1c : 46.51 -pb_5c : 46.50 -pb_10c : 46.50 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.52 -pb_1c : 46.52 -pb_5c : 46.50 -pb_10c : 46.50 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.53 -pb_1c : 46.53 -pb_5c : 46.50 -pb_10c : 46.50 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.54 -pb_1c : 46.54 -pb_5c : 46.50 -pb_10c : 46.50 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.55 -pb_1c : 46.55 -pb_5c : 46.55 -pb_10c : 46.50 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.56 -pb_1c : 46.56 -pb_5c : 46.55 -pb_10c : 46.50 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.57 -pb_1c : 46.57 -pb_5c : 46.55 -pb_10c : 46.50 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.58 -pb_1c : 46.58 -pb_5c : 46.55 -pb_10c : 46.50 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.59 -pb_1c : 46.59 -pb_5c : 46.55 -pb_10c : 46.50 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.60 -pb_1c : 46.60 -pb_5c : 46.60 -pb_10c : 46.60 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.61 -pb_1c : 46.61 -pb_5c : 46.60 -pb_10c : 46.60 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.62 -pb_1c : 46.62 -pb_5c : 46.60 -pb_10c : 46.60 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.63 -pb_1c : 46.63 -pb_5c : 46.60 -pb_10c : 46.60 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.64 -pb_1c : 46.64 -pb_5c : 46.60 -pb_10c : 46.60 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.65 -pb_1c : 46.65 -pb_5c : 46.65 -pb_10c : 46.60 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.66 -pb_1c : 46.66 -pb_5c : 46.65 -pb_10c : 46.60 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.67 -pb_1c : 46.67 -pb_5c : 46.65 -pb_10c : 46.60 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.68 -pb_1c : 46.68 -pb_5c : 46.65 -pb_10c : 46.60 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.69 -pb_1c : 46.69 -pb_5c : 46.65 -pb_10c : 46.60 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.70 -pb_1c : 46.70 -pb_5c : 46.70 -pb_10c : 46.70 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.71 -pb_1c : 46.71 -pb_5c : 46.70 -pb_10c : 46.70 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.72 -pb_1c : 46.72 -pb_5c : 46.70 -pb_10c : 46.70 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.73 -pb_1c : 46.73 -pb_5c : 46.70 -pb_10c : 46.70 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.74 -pb_1c : 46.74 -pb_5c : 46.70 -pb_10c : 46.70 -pb_25c : 46.50 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.75 -pb_1c : 46.75 -pb_5c : 46.75 -pb_10c : 46.70 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.76 -pb_1c : 46.76 -pb_5c : 46.75 -pb_10c : 46.70 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.77 -pb_1c : 46.77 -pb_5c : 46.75 -pb_10c : 46.70 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.78 -pb_1c : 46.78 -pb_5c : 46.75 -pb_10c : 46.70 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.79 -pb_1c : 46.79 -pb_5c : 46.75 -pb_10c : 46.70 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.80 -pb_1c : 46.80 -pb_5c : 46.80 -pb_10c : 46.80 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.81 -pb_1c : 46.81 -pb_5c : 46.80 -pb_10c : 46.80 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.82 -pb_1c : 46.82 -pb_5c : 46.80 -pb_10c : 46.80 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.83 -pb_1c : 46.83 -pb_5c : 46.80 -pb_10c : 46.80 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.84 -pb_1c : 46.84 -pb_5c : 46.80 -pb_10c : 46.80 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.85 -pb_1c : 46.85 -pb_5c : 46.85 -pb_10c : 46.80 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.86 -pb_1c : 46.86 -pb_5c : 46.85 -pb_10c : 46.80 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.87 -pb_1c : 46.87 -pb_5c : 46.85 -pb_10c : 46.80 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.88 -pb_1c : 46.88 -pb_5c : 46.85 -pb_10c : 46.80 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.89 -pb_1c : 46.89 -pb_5c : 46.85 -pb_10c : 46.80 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.90 -pb_1c : 46.90 -pb_5c : 46.90 -pb_10c : 46.90 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.91 -pb_1c : 46.91 -pb_5c : 46.90 -pb_10c : 46.90 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.92 -pb_1c : 46.92 -pb_5c : 46.90 -pb_10c : 46.90 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.93 -pb_1c : 46.93 -pb_5c : 46.90 -pb_10c : 46.90 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.94 -pb_1c : 46.94 -pb_5c : 46.90 -pb_10c : 46.90 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.95 -pb_1c : 46.95 -pb_5c : 46.95 -pb_10c : 46.90 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.96 -pb_1c : 46.96 -pb_5c : 46.95 -pb_10c : 46.90 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.97 -pb_1c : 46.97 -pb_5c : 46.95 -pb_10c : 46.90 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.98 -pb_1c : 46.98 -pb_5c : 46.95 -pb_10c : 46.90 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -46.99 -pb_1c : 46.99 -pb_5c : 46.95 -pb_10c : 46.90 -pb_25c : 46.75 -pb_1d : 46.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.00 -pb_1c : 47.00 -pb_5c : 47.00 -pb_10c : 47.00 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.01 -pb_1c : 47.01 -pb_5c : 47.00 -pb_10c : 47.00 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.02 -pb_1c : 47.02 -pb_5c : 47.00 -pb_10c : 47.00 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.03 -pb_1c : 47.03 -pb_5c : 47.00 -pb_10c : 47.00 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.04 -pb_1c : 47.04 -pb_5c : 47.00 -pb_10c : 47.00 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.05 -pb_1c : 47.05 -pb_5c : 47.05 -pb_10c : 47.00 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.06 -pb_1c : 47.06 -pb_5c : 47.05 -pb_10c : 47.00 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.07 -pb_1c : 47.07 -pb_5c : 47.05 -pb_10c : 47.00 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.08 -pb_1c : 47.08 -pb_5c : 47.05 -pb_10c : 47.00 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.09 -pb_1c : 47.09 -pb_5c : 47.05 -pb_10c : 47.00 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.10 -pb_1c : 47.10 -pb_5c : 47.10 -pb_10c : 47.10 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.11 -pb_1c : 47.11 -pb_5c : 47.10 -pb_10c : 47.10 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.12 -pb_1c : 47.12 -pb_5c : 47.10 -pb_10c : 47.10 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.13 -pb_1c : 47.13 -pb_5c : 47.10 -pb_10c : 47.10 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.14 -pb_1c : 47.14 -pb_5c : 47.10 -pb_10c : 47.10 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.15 -pb_1c : 47.15 -pb_5c : 47.15 -pb_10c : 47.10 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.16 -pb_1c : 47.16 -pb_5c : 47.15 -pb_10c : 47.10 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.17 -pb_1c : 47.17 -pb_5c : 47.15 -pb_10c : 47.10 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.18 -pb_1c : 47.18 -pb_5c : 47.15 -pb_10c : 47.10 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.19 -pb_1c : 47.19 -pb_5c : 47.15 -pb_10c : 47.10 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.20 -pb_1c : 47.20 -pb_5c : 47.20 -pb_10c : 47.20 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.21 -pb_1c : 47.21 -pb_5c : 47.20 -pb_10c : 47.20 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.22 -pb_1c : 47.22 -pb_5c : 47.20 -pb_10c : 47.20 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.23 -pb_1c : 47.23 -pb_5c : 47.20 -pb_10c : 47.20 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.24 -pb_1c : 47.24 -pb_5c : 47.20 -pb_10c : 47.20 -pb_25c : 47.00 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.25 -pb_1c : 47.25 -pb_5c : 47.25 -pb_10c : 47.20 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.26 -pb_1c : 47.26 -pb_5c : 47.25 -pb_10c : 47.20 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.27 -pb_1c : 47.27 -pb_5c : 47.25 -pb_10c : 47.20 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.28 -pb_1c : 47.28 -pb_5c : 47.25 -pb_10c : 47.20 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.29 -pb_1c : 47.29 -pb_5c : 47.25 -pb_10c : 47.20 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.30 -pb_1c : 47.30 -pb_5c : 47.30 -pb_10c : 47.30 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.31 -pb_1c : 47.31 -pb_5c : 47.30 -pb_10c : 47.30 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.32 -pb_1c : 47.32 -pb_5c : 47.30 -pb_10c : 47.30 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.33 -pb_1c : 47.33 -pb_5c : 47.30 -pb_10c : 47.30 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.34 -pb_1c : 47.34 -pb_5c : 47.30 -pb_10c : 47.30 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.35 -pb_1c : 47.35 -pb_5c : 47.35 -pb_10c : 47.30 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.36 -pb_1c : 47.36 -pb_5c : 47.35 -pb_10c : 47.30 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.37 -pb_1c : 47.37 -pb_5c : 47.35 -pb_10c : 47.30 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.38 -pb_1c : 47.38 -pb_5c : 47.35 -pb_10c : 47.30 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.39 -pb_1c : 47.39 -pb_5c : 47.35 -pb_10c : 47.30 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.40 -pb_1c : 47.40 -pb_5c : 47.40 -pb_10c : 47.40 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.41 -pb_1c : 47.41 -pb_5c : 47.40 -pb_10c : 47.40 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.42 -pb_1c : 47.42 -pb_5c : 47.40 -pb_10c : 47.40 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.43 -pb_1c : 47.43 -pb_5c : 47.40 -pb_10c : 47.40 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.44 -pb_1c : 47.44 -pb_5c : 47.40 -pb_10c : 47.40 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.45 -pb_1c : 47.45 -pb_5c : 47.45 -pb_10c : 47.40 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.46 -pb_1c : 47.46 -pb_5c : 47.45 -pb_10c : 47.40 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.47 -pb_1c : 47.47 -pb_5c : 47.45 -pb_10c : 47.40 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.48 -pb_1c : 47.48 -pb_5c : 47.45 -pb_10c : 47.40 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.49 -pb_1c : 47.49 -pb_5c : 47.45 -pb_10c : 47.40 -pb_25c : 47.25 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.50 -pb_1c : 47.50 -pb_5c : 47.50 -pb_10c : 47.50 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.51 -pb_1c : 47.51 -pb_5c : 47.50 -pb_10c : 47.50 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.52 -pb_1c : 47.52 -pb_5c : 47.50 -pb_10c : 47.50 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.53 -pb_1c : 47.53 -pb_5c : 47.50 -pb_10c : 47.50 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.54 -pb_1c : 47.54 -pb_5c : 47.50 -pb_10c : 47.50 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.55 -pb_1c : 47.55 -pb_5c : 47.55 -pb_10c : 47.50 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.56 -pb_1c : 47.56 -pb_5c : 47.55 -pb_10c : 47.50 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.57 -pb_1c : 47.57 -pb_5c : 47.55 -pb_10c : 47.50 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.58 -pb_1c : 47.58 -pb_5c : 47.55 -pb_10c : 47.50 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.59 -pb_1c : 47.59 -pb_5c : 47.55 -pb_10c : 47.50 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.60 -pb_1c : 47.60 -pb_5c : 47.60 -pb_10c : 47.60 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.61 -pb_1c : 47.61 -pb_5c : 47.60 -pb_10c : 47.60 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.62 -pb_1c : 47.62 -pb_5c : 47.60 -pb_10c : 47.60 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.63 -pb_1c : 47.63 -pb_5c : 47.60 -pb_10c : 47.60 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.64 -pb_1c : 47.64 -pb_5c : 47.60 -pb_10c : 47.60 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.65 -pb_1c : 47.65 -pb_5c : 47.65 -pb_10c : 47.60 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.66 -pb_1c : 47.66 -pb_5c : 47.65 -pb_10c : 47.60 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.67 -pb_1c : 47.67 -pb_5c : 47.65 -pb_10c : 47.60 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.68 -pb_1c : 47.68 -pb_5c : 47.65 -pb_10c : 47.60 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.69 -pb_1c : 47.69 -pb_5c : 47.65 -pb_10c : 47.60 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.70 -pb_1c : 47.70 -pb_5c : 47.70 -pb_10c : 47.70 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.71 -pb_1c : 47.71 -pb_5c : 47.70 -pb_10c : 47.70 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.72 -pb_1c : 47.72 -pb_5c : 47.70 -pb_10c : 47.70 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.73 -pb_1c : 47.73 -pb_5c : 47.70 -pb_10c : 47.70 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.74 -pb_1c : 47.74 -pb_5c : 47.70 -pb_10c : 47.70 -pb_25c : 47.50 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.75 -pb_1c : 47.75 -pb_5c : 47.75 -pb_10c : 47.70 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.76 -pb_1c : 47.76 -pb_5c : 47.75 -pb_10c : 47.70 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.77 -pb_1c : 47.77 -pb_5c : 47.75 -pb_10c : 47.70 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.78 -pb_1c : 47.78 -pb_5c : 47.75 -pb_10c : 47.70 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.79 -pb_1c : 47.79 -pb_5c : 47.75 -pb_10c : 47.70 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.80 -pb_1c : 47.80 -pb_5c : 47.80 -pb_10c : 47.80 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.81 -pb_1c : 47.81 -pb_5c : 47.80 -pb_10c : 47.80 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.82 -pb_1c : 47.82 -pb_5c : 47.80 -pb_10c : 47.80 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.83 -pb_1c : 47.83 -pb_5c : 47.80 -pb_10c : 47.80 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.84 -pb_1c : 47.84 -pb_5c : 47.80 -pb_10c : 47.80 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.85 -pb_1c : 47.85 -pb_5c : 47.85 -pb_10c : 47.80 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.86 -pb_1c : 47.86 -pb_5c : 47.85 -pb_10c : 47.80 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.87 -pb_1c : 47.87 -pb_5c : 47.85 -pb_10c : 47.80 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.88 -pb_1c : 47.88 -pb_5c : 47.85 -pb_10c : 47.80 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.89 -pb_1c : 47.89 -pb_5c : 47.85 -pb_10c : 47.80 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.90 -pb_1c : 47.90 -pb_5c : 47.90 -pb_10c : 47.90 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.91 -pb_1c : 47.91 -pb_5c : 47.90 -pb_10c : 47.90 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.92 -pb_1c : 47.92 -pb_5c : 47.90 -pb_10c : 47.90 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.93 -pb_1c : 47.93 -pb_5c : 47.90 -pb_10c : 47.90 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.94 -pb_1c : 47.94 -pb_5c : 47.90 -pb_10c : 47.90 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.95 -pb_1c : 47.95 -pb_5c : 47.95 -pb_10c : 47.90 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.96 -pb_1c : 47.96 -pb_5c : 47.95 -pb_10c : 47.90 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.97 -pb_1c : 47.97 -pb_5c : 47.95 -pb_10c : 47.90 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.98 -pb_1c : 47.98 -pb_5c : 47.95 -pb_10c : 47.90 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -47.99 -pb_1c : 47.99 -pb_5c : 47.95 -pb_10c : 47.90 -pb_25c : 47.75 -pb_1d : 47.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.00 -pb_1c : 48.00 -pb_5c : 48.00 -pb_10c : 48.00 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.01 -pb_1c : 48.01 -pb_5c : 48.00 -pb_10c : 48.00 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.02 -pb_1c : 48.02 -pb_5c : 48.00 -pb_10c : 48.00 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.03 -pb_1c : 48.03 -pb_5c : 48.00 -pb_10c : 48.00 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.04 -pb_1c : 48.04 -pb_5c : 48.00 -pb_10c : 48.00 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.05 -pb_1c : 48.05 -pb_5c : 48.05 -pb_10c : 48.00 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.06 -pb_1c : 48.06 -pb_5c : 48.05 -pb_10c : 48.00 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.07 -pb_1c : 48.07 -pb_5c : 48.05 -pb_10c : 48.00 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.08 -pb_1c : 48.08 -pb_5c : 48.05 -pb_10c : 48.00 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.09 -pb_1c : 48.09 -pb_5c : 48.05 -pb_10c : 48.00 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.10 -pb_1c : 48.10 -pb_5c : 48.10 -pb_10c : 48.10 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.11 -pb_1c : 48.11 -pb_5c : 48.10 -pb_10c : 48.10 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.12 -pb_1c : 48.12 -pb_5c : 48.10 -pb_10c : 48.10 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.13 -pb_1c : 48.13 -pb_5c : 48.10 -pb_10c : 48.10 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.14 -pb_1c : 48.14 -pb_5c : 48.10 -pb_10c : 48.10 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.15 -pb_1c : 48.15 -pb_5c : 48.15 -pb_10c : 48.10 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.16 -pb_1c : 48.16 -pb_5c : 48.15 -pb_10c : 48.10 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.17 -pb_1c : 48.17 -pb_5c : 48.15 -pb_10c : 48.10 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.18 -pb_1c : 48.18 -pb_5c : 48.15 -pb_10c : 48.10 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.19 -pb_1c : 48.19 -pb_5c : 48.15 -pb_10c : 48.10 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.20 -pb_1c : 48.20 -pb_5c : 48.20 -pb_10c : 48.20 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.21 -pb_1c : 48.21 -pb_5c : 48.20 -pb_10c : 48.20 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.22 -pb_1c : 48.22 -pb_5c : 48.20 -pb_10c : 48.20 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.23 -pb_1c : 48.23 -pb_5c : 48.20 -pb_10c : 48.20 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.24 -pb_1c : 48.24 -pb_5c : 48.20 -pb_10c : 48.20 -pb_25c : 48.00 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.25 -pb_1c : 48.25 -pb_5c : 48.25 -pb_10c : 48.20 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.26 -pb_1c : 48.26 -pb_5c : 48.25 -pb_10c : 48.20 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.27 -pb_1c : 48.27 -pb_5c : 48.25 -pb_10c : 48.20 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.28 -pb_1c : 48.28 -pb_5c : 48.25 -pb_10c : 48.20 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.29 -pb_1c : 48.29 -pb_5c : 48.25 -pb_10c : 48.20 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.30 -pb_1c : 48.30 -pb_5c : 48.30 -pb_10c : 48.30 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.31 -pb_1c : 48.31 -pb_5c : 48.30 -pb_10c : 48.30 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.32 -pb_1c : 48.32 -pb_5c : 48.30 -pb_10c : 48.30 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.33 -pb_1c : 48.33 -pb_5c : 48.30 -pb_10c : 48.30 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.34 -pb_1c : 48.34 -pb_5c : 48.30 -pb_10c : 48.30 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.35 -pb_1c : 48.35 -pb_5c : 48.35 -pb_10c : 48.30 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.36 -pb_1c : 48.36 -pb_5c : 48.35 -pb_10c : 48.30 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.37 -pb_1c : 48.37 -pb_5c : 48.35 -pb_10c : 48.30 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.38 -pb_1c : 48.38 -pb_5c : 48.35 -pb_10c : 48.30 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.39 -pb_1c : 48.39 -pb_5c : 48.35 -pb_10c : 48.30 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.40 -pb_1c : 48.40 -pb_5c : 48.40 -pb_10c : 48.40 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.41 -pb_1c : 48.41 -pb_5c : 48.40 -pb_10c : 48.40 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.42 -pb_1c : 48.42 -pb_5c : 48.40 -pb_10c : 48.40 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.43 -pb_1c : 48.43 -pb_5c : 48.40 -pb_10c : 48.40 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.44 -pb_1c : 48.44 -pb_5c : 48.40 -pb_10c : 48.40 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.45 -pb_1c : 48.45 -pb_5c : 48.45 -pb_10c : 48.40 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.46 -pb_1c : 48.46 -pb_5c : 48.45 -pb_10c : 48.40 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.47 -pb_1c : 48.47 -pb_5c : 48.45 -pb_10c : 48.40 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.48 -pb_1c : 48.48 -pb_5c : 48.45 -pb_10c : 48.40 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.49 -pb_1c : 48.49 -pb_5c : 48.45 -pb_10c : 48.40 -pb_25c : 48.25 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.50 -pb_1c : 48.50 -pb_5c : 48.50 -pb_10c : 48.50 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.51 -pb_1c : 48.51 -pb_5c : 48.50 -pb_10c : 48.50 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.52 -pb_1c : 48.52 -pb_5c : 48.50 -pb_10c : 48.50 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.53 -pb_1c : 48.53 -pb_5c : 48.50 -pb_10c : 48.50 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.54 -pb_1c : 48.54 -pb_5c : 48.50 -pb_10c : 48.50 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.55 -pb_1c : 48.55 -pb_5c : 48.55 -pb_10c : 48.50 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.56 -pb_1c : 48.56 -pb_5c : 48.55 -pb_10c : 48.50 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.57 -pb_1c : 48.57 -pb_5c : 48.55 -pb_10c : 48.50 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.58 -pb_1c : 48.58 -pb_5c : 48.55 -pb_10c : 48.50 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.59 -pb_1c : 48.59 -pb_5c : 48.55 -pb_10c : 48.50 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.60 -pb_1c : 48.60 -pb_5c : 48.60 -pb_10c : 48.60 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.61 -pb_1c : 48.61 -pb_5c : 48.60 -pb_10c : 48.60 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.62 -pb_1c : 48.62 -pb_5c : 48.60 -pb_10c : 48.60 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.63 -pb_1c : 48.63 -pb_5c : 48.60 -pb_10c : 48.60 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.64 -pb_1c : 48.64 -pb_5c : 48.60 -pb_10c : 48.60 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.65 -pb_1c : 48.65 -pb_5c : 48.65 -pb_10c : 48.60 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.66 -pb_1c : 48.66 -pb_5c : 48.65 -pb_10c : 48.60 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.67 -pb_1c : 48.67 -pb_5c : 48.65 -pb_10c : 48.60 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.68 -pb_1c : 48.68 -pb_5c : 48.65 -pb_10c : 48.60 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.69 -pb_1c : 48.69 -pb_5c : 48.65 -pb_10c : 48.60 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.70 -pb_1c : 48.70 -pb_5c : 48.70 -pb_10c : 48.70 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.71 -pb_1c : 48.71 -pb_5c : 48.70 -pb_10c : 48.70 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.72 -pb_1c : 48.72 -pb_5c : 48.70 -pb_10c : 48.70 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.73 -pb_1c : 48.73 -pb_5c : 48.70 -pb_10c : 48.70 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.74 -pb_1c : 48.74 -pb_5c : 48.70 -pb_10c : 48.70 -pb_25c : 48.50 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.75 -pb_1c : 48.75 -pb_5c : 48.75 -pb_10c : 48.70 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.76 -pb_1c : 48.76 -pb_5c : 48.75 -pb_10c : 48.70 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.77 -pb_1c : 48.77 -pb_5c : 48.75 -pb_10c : 48.70 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.78 -pb_1c : 48.78 -pb_5c : 48.75 -pb_10c : 48.70 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.79 -pb_1c : 48.79 -pb_5c : 48.75 -pb_10c : 48.70 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.80 -pb_1c : 48.80 -pb_5c : 48.80 -pb_10c : 48.80 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.81 -pb_1c : 48.81 -pb_5c : 48.80 -pb_10c : 48.80 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.82 -pb_1c : 48.82 -pb_5c : 48.80 -pb_10c : 48.80 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.83 -pb_1c : 48.83 -pb_5c : 48.80 -pb_10c : 48.80 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.84 -pb_1c : 48.84 -pb_5c : 48.80 -pb_10c : 48.80 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.85 -pb_1c : 48.85 -pb_5c : 48.85 -pb_10c : 48.80 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.86 -pb_1c : 48.86 -pb_5c : 48.85 -pb_10c : 48.80 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.87 -pb_1c : 48.87 -pb_5c : 48.85 -pb_10c : 48.80 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.88 -pb_1c : 48.88 -pb_5c : 48.85 -pb_10c : 48.80 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.89 -pb_1c : 48.89 -pb_5c : 48.85 -pb_10c : 48.80 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.90 -pb_1c : 48.90 -pb_5c : 48.90 -pb_10c : 48.90 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.91 -pb_1c : 48.91 -pb_5c : 48.90 -pb_10c : 48.90 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.92 -pb_1c : 48.92 -pb_5c : 48.90 -pb_10c : 48.90 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.93 -pb_1c : 48.93 -pb_5c : 48.90 -pb_10c : 48.90 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.94 -pb_1c : 48.94 -pb_5c : 48.90 -pb_10c : 48.90 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.95 -pb_1c : 48.95 -pb_5c : 48.95 -pb_10c : 48.90 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.96 -pb_1c : 48.96 -pb_5c : 48.95 -pb_10c : 48.90 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.97 -pb_1c : 48.97 -pb_5c : 48.95 -pb_10c : 48.90 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.98 -pb_1c : 48.98 -pb_5c : 48.95 -pb_10c : 48.90 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -48.99 -pb_1c : 48.99 -pb_5c : 48.95 -pb_10c : 48.90 -pb_25c : 48.75 -pb_1d : 48.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.00 -pb_1c : 49.00 -pb_5c : 49.00 -pb_10c : 49.00 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.01 -pb_1c : 49.01 -pb_5c : 49.00 -pb_10c : 49.00 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.02 -pb_1c : 49.02 -pb_5c : 49.00 -pb_10c : 49.00 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.03 -pb_1c : 49.03 -pb_5c : 49.00 -pb_10c : 49.00 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.04 -pb_1c : 49.04 -pb_5c : 49.00 -pb_10c : 49.00 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.05 -pb_1c : 49.05 -pb_5c : 49.05 -pb_10c : 49.00 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.06 -pb_1c : 49.06 -pb_5c : 49.05 -pb_10c : 49.00 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.07 -pb_1c : 49.07 -pb_5c : 49.05 -pb_10c : 49.00 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.08 -pb_1c : 49.08 -pb_5c : 49.05 -pb_10c : 49.00 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.09 -pb_1c : 49.09 -pb_5c : 49.05 -pb_10c : 49.00 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.10 -pb_1c : 49.10 -pb_5c : 49.10 -pb_10c : 49.10 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.11 -pb_1c : 49.11 -pb_5c : 49.10 -pb_10c : 49.10 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.12 -pb_1c : 49.12 -pb_5c : 49.10 -pb_10c : 49.10 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.13 -pb_1c : 49.13 -pb_5c : 49.10 -pb_10c : 49.10 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.14 -pb_1c : 49.14 -pb_5c : 49.10 -pb_10c : 49.10 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.15 -pb_1c : 49.15 -pb_5c : 49.15 -pb_10c : 49.10 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.16 -pb_1c : 49.16 -pb_5c : 49.15 -pb_10c : 49.10 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.17 -pb_1c : 49.17 -pb_5c : 49.15 -pb_10c : 49.10 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.18 -pb_1c : 49.18 -pb_5c : 49.15 -pb_10c : 49.10 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.19 -pb_1c : 49.19 -pb_5c : 49.15 -pb_10c : 49.10 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.20 -pb_1c : 49.20 -pb_5c : 49.20 -pb_10c : 49.20 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.21 -pb_1c : 49.21 -pb_5c : 49.20 -pb_10c : 49.20 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.22 -pb_1c : 49.22 -pb_5c : 49.20 -pb_10c : 49.20 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.23 -pb_1c : 49.23 -pb_5c : 49.20 -pb_10c : 49.20 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.24 -pb_1c : 49.24 -pb_5c : 49.20 -pb_10c : 49.20 -pb_25c : 49.00 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.25 -pb_1c : 49.25 -pb_5c : 49.25 -pb_10c : 49.20 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.26 -pb_1c : 49.26 -pb_5c : 49.25 -pb_10c : 49.20 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.27 -pb_1c : 49.27 -pb_5c : 49.25 -pb_10c : 49.20 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.28 -pb_1c : 49.28 -pb_5c : 49.25 -pb_10c : 49.20 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.29 -pb_1c : 49.29 -pb_5c : 49.25 -pb_10c : 49.20 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.30 -pb_1c : 49.30 -pb_5c : 49.30 -pb_10c : 49.30 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.31 -pb_1c : 49.31 -pb_5c : 49.30 -pb_10c : 49.30 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.32 -pb_1c : 49.32 -pb_5c : 49.30 -pb_10c : 49.30 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.33 -pb_1c : 49.33 -pb_5c : 49.30 -pb_10c : 49.30 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.34 -pb_1c : 49.34 -pb_5c : 49.30 -pb_10c : 49.30 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.35 -pb_1c : 49.35 -pb_5c : 49.35 -pb_10c : 49.30 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.36 -pb_1c : 49.36 -pb_5c : 49.35 -pb_10c : 49.30 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.37 -pb_1c : 49.37 -pb_5c : 49.35 -pb_10c : 49.30 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.38 -pb_1c : 49.38 -pb_5c : 49.35 -pb_10c : 49.30 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.39 -pb_1c : 49.39 -pb_5c : 49.35 -pb_10c : 49.30 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.40 -pb_1c : 49.40 -pb_5c : 49.40 -pb_10c : 49.40 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.41 -pb_1c : 49.41 -pb_5c : 49.40 -pb_10c : 49.40 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.42 -pb_1c : 49.42 -pb_5c : 49.40 -pb_10c : 49.40 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.43 -pb_1c : 49.43 -pb_5c : 49.40 -pb_10c : 49.40 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.44 -pb_1c : 49.44 -pb_5c : 49.40 -pb_10c : 49.40 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.45 -pb_1c : 49.45 -pb_5c : 49.45 -pb_10c : 49.40 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.46 -pb_1c : 49.46 -pb_5c : 49.45 -pb_10c : 49.40 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.47 -pb_1c : 49.47 -pb_5c : 49.45 -pb_10c : 49.40 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.48 -pb_1c : 49.48 -pb_5c : 49.45 -pb_10c : 49.40 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.49 -pb_1c : 49.49 -pb_5c : 49.45 -pb_10c : 49.40 -pb_25c : 49.25 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.50 -pb_1c : 49.50 -pb_5c : 49.50 -pb_10c : 49.50 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.51 -pb_1c : 49.51 -pb_5c : 49.50 -pb_10c : 49.50 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.52 -pb_1c : 49.52 -pb_5c : 49.50 -pb_10c : 49.50 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.53 -pb_1c : 49.53 -pb_5c : 49.50 -pb_10c : 49.50 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.54 -pb_1c : 49.54 -pb_5c : 49.50 -pb_10c : 49.50 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.55 -pb_1c : 49.55 -pb_5c : 49.55 -pb_10c : 49.50 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.56 -pb_1c : 49.56 -pb_5c : 49.55 -pb_10c : 49.50 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.57 -pb_1c : 49.57 -pb_5c : 49.55 -pb_10c : 49.50 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.58 -pb_1c : 49.58 -pb_5c : 49.55 -pb_10c : 49.50 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.59 -pb_1c : 49.59 -pb_5c : 49.55 -pb_10c : 49.50 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.60 -pb_1c : 49.60 -pb_5c : 49.60 -pb_10c : 49.60 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.61 -pb_1c : 49.61 -pb_5c : 49.60 -pb_10c : 49.60 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.62 -pb_1c : 49.62 -pb_5c : 49.60 -pb_10c : 49.60 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.63 -pb_1c : 49.63 -pb_5c : 49.60 -pb_10c : 49.60 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.64 -pb_1c : 49.64 -pb_5c : 49.60 -pb_10c : 49.60 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.65 -pb_1c : 49.65 -pb_5c : 49.65 -pb_10c : 49.60 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.66 -pb_1c : 49.66 -pb_5c : 49.65 -pb_10c : 49.60 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.67 -pb_1c : 49.67 -pb_5c : 49.65 -pb_10c : 49.60 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.68 -pb_1c : 49.68 -pb_5c : 49.65 -pb_10c : 49.60 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.69 -pb_1c : 49.69 -pb_5c : 49.65 -pb_10c : 49.60 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.70 -pb_1c : 49.70 -pb_5c : 49.70 -pb_10c : 49.70 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.71 -pb_1c : 49.71 -pb_5c : 49.70 -pb_10c : 49.70 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.72 -pb_1c : 49.72 -pb_5c : 49.70 -pb_10c : 49.70 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.73 -pb_1c : 49.73 -pb_5c : 49.70 -pb_10c : 49.70 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.74 -pb_1c : 49.74 -pb_5c : 49.70 -pb_10c : 49.70 -pb_25c : 49.50 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.75 -pb_1c : 49.75 -pb_5c : 49.75 -pb_10c : 49.70 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.76 -pb_1c : 49.76 -pb_5c : 49.75 -pb_10c : 49.70 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.77 -pb_1c : 49.77 -pb_5c : 49.75 -pb_10c : 49.70 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.78 -pb_1c : 49.78 -pb_5c : 49.75 -pb_10c : 49.70 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.79 -pb_1c : 49.79 -pb_5c : 49.75 -pb_10c : 49.70 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.80 -pb_1c : 49.80 -pb_5c : 49.80 -pb_10c : 49.80 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.81 -pb_1c : 49.81 -pb_5c : 49.80 -pb_10c : 49.80 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.82 -pb_1c : 49.82 -pb_5c : 49.80 -pb_10c : 49.80 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.83 -pb_1c : 49.83 -pb_5c : 49.80 -pb_10c : 49.80 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.84 -pb_1c : 49.84 -pb_5c : 49.80 -pb_10c : 49.80 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.85 -pb_1c : 49.85 -pb_5c : 49.85 -pb_10c : 49.80 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.86 -pb_1c : 49.86 -pb_5c : 49.85 -pb_10c : 49.80 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.87 -pb_1c : 49.87 -pb_5c : 49.85 -pb_10c : 49.80 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.88 -pb_1c : 49.88 -pb_5c : 49.85 -pb_10c : 49.80 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.89 -pb_1c : 49.89 -pb_5c : 49.85 -pb_10c : 49.80 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.90 -pb_1c : 49.90 -pb_5c : 49.90 -pb_10c : 49.90 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.91 -pb_1c : 49.91 -pb_5c : 49.90 -pb_10c : 49.90 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.92 -pb_1c : 49.92 -pb_5c : 49.90 -pb_10c : 49.90 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.93 -pb_1c : 49.93 -pb_5c : 49.90 -pb_10c : 49.90 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.94 -pb_1c : 49.94 -pb_5c : 49.90 -pb_10c : 49.90 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.95 -pb_1c : 49.95 -pb_5c : 49.95 -pb_10c : 49.90 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.96 -pb_1c : 49.96 -pb_5c : 49.95 -pb_10c : 49.90 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.97 -pb_1c : 49.97 -pb_5c : 49.95 -pb_10c : 49.90 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.98 -pb_1c : 49.98 -pb_5c : 49.95 -pb_10c : 49.90 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -49.99 -pb_1c : 49.99 -pb_5c : 49.95 -pb_10c : 49.90 -pb_25c : 49.75 -pb_1d : 49.00 -pb_5d : 45.00 -pb_10d : 40.00 - -50.00 -pb_1c : 50.00 -pb_5c : 50.00 -pb_10c : 50.00 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.01 -pb_1c : 50.01 -pb_5c : 50.00 -pb_10c : 50.00 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.02 -pb_1c : 50.02 -pb_5c : 50.00 -pb_10c : 50.00 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.03 -pb_1c : 50.03 -pb_5c : 50.00 -pb_10c : 50.00 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.04 -pb_1c : 50.04 -pb_5c : 50.00 -pb_10c : 50.00 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.05 -pb_1c : 50.05 -pb_5c : 50.05 -pb_10c : 50.00 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.06 -pb_1c : 50.06 -pb_5c : 50.05 -pb_10c : 50.00 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.07 -pb_1c : 50.07 -pb_5c : 50.05 -pb_10c : 50.00 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.08 -pb_1c : 50.08 -pb_5c : 50.05 -pb_10c : 50.00 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.09 -pb_1c : 50.09 -pb_5c : 50.05 -pb_10c : 50.00 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.10 -pb_1c : 50.10 -pb_5c : 50.10 -pb_10c : 50.10 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.11 -pb_1c : 50.11 -pb_5c : 50.10 -pb_10c : 50.10 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.12 -pb_1c : 50.12 -pb_5c : 50.10 -pb_10c : 50.10 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.13 -pb_1c : 50.13 -pb_5c : 50.10 -pb_10c : 50.10 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.14 -pb_1c : 50.14 -pb_5c : 50.10 -pb_10c : 50.10 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.15 -pb_1c : 50.15 -pb_5c : 50.15 -pb_10c : 50.10 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.16 -pb_1c : 50.16 -pb_5c : 50.15 -pb_10c : 50.10 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.17 -pb_1c : 50.17 -pb_5c : 50.15 -pb_10c : 50.10 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.18 -pb_1c : 50.18 -pb_5c : 50.15 -pb_10c : 50.10 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.19 -pb_1c : 50.19 -pb_5c : 50.15 -pb_10c : 50.10 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.20 -pb_1c : 50.20 -pb_5c : 50.20 -pb_10c : 50.20 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.21 -pb_1c : 50.21 -pb_5c : 50.20 -pb_10c : 50.20 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.22 -pb_1c : 50.22 -pb_5c : 50.20 -pb_10c : 50.20 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.23 -pb_1c : 50.23 -pb_5c : 50.20 -pb_10c : 50.20 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.24 -pb_1c : 50.24 -pb_5c : 50.20 -pb_10c : 50.20 -pb_25c : 50.00 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.25 -pb_1c : 50.25 -pb_5c : 50.25 -pb_10c : 50.20 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.26 -pb_1c : 50.26 -pb_5c : 50.25 -pb_10c : 50.20 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.27 -pb_1c : 50.27 -pb_5c : 50.25 -pb_10c : 50.20 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.28 -pb_1c : 50.28 -pb_5c : 50.25 -pb_10c : 50.20 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.29 -pb_1c : 50.29 -pb_5c : 50.25 -pb_10c : 50.20 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.30 -pb_1c : 50.30 -pb_5c : 50.30 -pb_10c : 50.30 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.31 -pb_1c : 50.31 -pb_5c : 50.30 -pb_10c : 50.30 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.32 -pb_1c : 50.32 -pb_5c : 50.30 -pb_10c : 50.30 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.33 -pb_1c : 50.33 -pb_5c : 50.30 -pb_10c : 50.30 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.34 -pb_1c : 50.34 -pb_5c : 50.30 -pb_10c : 50.30 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.35 -pb_1c : 50.35 -pb_5c : 50.35 -pb_10c : 50.30 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.36 -pb_1c : 50.36 -pb_5c : 50.35 -pb_10c : 50.30 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.37 -pb_1c : 50.37 -pb_5c : 50.35 -pb_10c : 50.30 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.38 -pb_1c : 50.38 -pb_5c : 50.35 -pb_10c : 50.30 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.39 -pb_1c : 50.39 -pb_5c : 50.35 -pb_10c : 50.30 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.40 -pb_1c : 50.40 -pb_5c : 50.40 -pb_10c : 50.40 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.41 -pb_1c : 50.41 -pb_5c : 50.40 -pb_10c : 50.40 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.42 -pb_1c : 50.42 -pb_5c : 50.40 -pb_10c : 50.40 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.43 -pb_1c : 50.43 -pb_5c : 50.40 -pb_10c : 50.40 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.44 -pb_1c : 50.44 -pb_5c : 50.40 -pb_10c : 50.40 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.45 -pb_1c : 50.45 -pb_5c : 50.45 -pb_10c : 50.40 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.46 -pb_1c : 50.46 -pb_5c : 50.45 -pb_10c : 50.40 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.47 -pb_1c : 50.47 -pb_5c : 50.45 -pb_10c : 50.40 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.48 -pb_1c : 50.48 -pb_5c : 50.45 -pb_10c : 50.40 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.49 -pb_1c : 50.49 -pb_5c : 50.45 -pb_10c : 50.40 -pb_25c : 50.25 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.50 -pb_1c : 50.50 -pb_5c : 50.50 -pb_10c : 50.50 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.51 -pb_1c : 50.51 -pb_5c : 50.50 -pb_10c : 50.50 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.52 -pb_1c : 50.52 -pb_5c : 50.50 -pb_10c : 50.50 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.53 -pb_1c : 50.53 -pb_5c : 50.50 -pb_10c : 50.50 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.54 -pb_1c : 50.54 -pb_5c : 50.50 -pb_10c : 50.50 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.55 -pb_1c : 50.55 -pb_5c : 50.55 -pb_10c : 50.50 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.56 -pb_1c : 50.56 -pb_5c : 50.55 -pb_10c : 50.50 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.57 -pb_1c : 50.57 -pb_5c : 50.55 -pb_10c : 50.50 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.58 -pb_1c : 50.58 -pb_5c : 50.55 -pb_10c : 50.50 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.59 -pb_1c : 50.59 -pb_5c : 50.55 -pb_10c : 50.50 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.60 -pb_1c : 50.60 -pb_5c : 50.60 -pb_10c : 50.60 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.61 -pb_1c : 50.61 -pb_5c : 50.60 -pb_10c : 50.60 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.62 -pb_1c : 50.62 -pb_5c : 50.60 -pb_10c : 50.60 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.63 -pb_1c : 50.63 -pb_5c : 50.60 -pb_10c : 50.60 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.64 -pb_1c : 50.64 -pb_5c : 50.60 -pb_10c : 50.60 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.65 -pb_1c : 50.65 -pb_5c : 50.65 -pb_10c : 50.60 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.66 -pb_1c : 50.66 -pb_5c : 50.65 -pb_10c : 50.60 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.67 -pb_1c : 50.67 -pb_5c : 50.65 -pb_10c : 50.60 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.68 -pb_1c : 50.68 -pb_5c : 50.65 -pb_10c : 50.60 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.69 -pb_1c : 50.69 -pb_5c : 50.65 -pb_10c : 50.60 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.70 -pb_1c : 50.70 -pb_5c : 50.70 -pb_10c : 50.70 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.71 -pb_1c : 50.71 -pb_5c : 50.70 -pb_10c : 50.70 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.72 -pb_1c : 50.72 -pb_5c : 50.70 -pb_10c : 50.70 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.73 -pb_1c : 50.73 -pb_5c : 50.70 -pb_10c : 50.70 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.74 -pb_1c : 50.74 -pb_5c : 50.70 -pb_10c : 50.70 -pb_25c : 50.50 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.75 -pb_1c : 50.75 -pb_5c : 50.75 -pb_10c : 50.70 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.76 -pb_1c : 50.76 -pb_5c : 50.75 -pb_10c : 50.70 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.77 -pb_1c : 50.77 -pb_5c : 50.75 -pb_10c : 50.70 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.78 -pb_1c : 50.78 -pb_5c : 50.75 -pb_10c : 50.70 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.79 -pb_1c : 50.79 -pb_5c : 50.75 -pb_10c : 50.70 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.80 -pb_1c : 50.80 -pb_5c : 50.80 -pb_10c : 50.80 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.81 -pb_1c : 50.81 -pb_5c : 50.80 -pb_10c : 50.80 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.82 -pb_1c : 50.82 -pb_5c : 50.80 -pb_10c : 50.80 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.83 -pb_1c : 50.83 -pb_5c : 50.80 -pb_10c : 50.80 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.84 -pb_1c : 50.84 -pb_5c : 50.80 -pb_10c : 50.80 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.85 -pb_1c : 50.85 -pb_5c : 50.85 -pb_10c : 50.80 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.86 -pb_1c : 50.86 -pb_5c : 50.85 -pb_10c : 50.80 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.87 -pb_1c : 50.87 -pb_5c : 50.85 -pb_10c : 50.80 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.88 -pb_1c : 50.88 -pb_5c : 50.85 -pb_10c : 50.80 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.89 -pb_1c : 50.89 -pb_5c : 50.85 -pb_10c : 50.80 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.90 -pb_1c : 50.90 -pb_5c : 50.90 -pb_10c : 50.90 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.91 -pb_1c : 50.91 -pb_5c : 50.90 -pb_10c : 50.90 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.92 -pb_1c : 50.92 -pb_5c : 50.90 -pb_10c : 50.90 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.93 -pb_1c : 50.93 -pb_5c : 50.90 -pb_10c : 50.90 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.94 -pb_1c : 50.94 -pb_5c : 50.90 -pb_10c : 50.90 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.95 -pb_1c : 50.95 -pb_5c : 50.95 -pb_10c : 50.90 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.96 -pb_1c : 50.96 -pb_5c : 50.95 -pb_10c : 50.90 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.97 -pb_1c : 50.97 -pb_5c : 50.95 -pb_10c : 50.90 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.98 -pb_1c : 50.98 -pb_5c : 50.95 -pb_10c : 50.90 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -50.99 -pb_1c : 50.99 -pb_5c : 50.95 -pb_10c : 50.90 -pb_25c : 50.75 -pb_1d : 50.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.00 -pb_1c : 51.00 -pb_5c : 51.00 -pb_10c : 51.00 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.01 -pb_1c : 51.01 -pb_5c : 51.00 -pb_10c : 51.00 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.02 -pb_1c : 51.02 -pb_5c : 51.00 -pb_10c : 51.00 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.03 -pb_1c : 51.03 -pb_5c : 51.00 -pb_10c : 51.00 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.04 -pb_1c : 51.04 -pb_5c : 51.00 -pb_10c : 51.00 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.05 -pb_1c : 51.05 -pb_5c : 51.05 -pb_10c : 51.00 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.06 -pb_1c : 51.06 -pb_5c : 51.05 -pb_10c : 51.00 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.07 -pb_1c : 51.07 -pb_5c : 51.05 -pb_10c : 51.00 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.08 -pb_1c : 51.08 -pb_5c : 51.05 -pb_10c : 51.00 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.09 -pb_1c : 51.09 -pb_5c : 51.05 -pb_10c : 51.00 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.10 -pb_1c : 51.10 -pb_5c : 51.10 -pb_10c : 51.10 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.11 -pb_1c : 51.11 -pb_5c : 51.10 -pb_10c : 51.10 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.12 -pb_1c : 51.12 -pb_5c : 51.10 -pb_10c : 51.10 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.13 -pb_1c : 51.13 -pb_5c : 51.10 -pb_10c : 51.10 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.14 -pb_1c : 51.14 -pb_5c : 51.10 -pb_10c : 51.10 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.15 -pb_1c : 51.15 -pb_5c : 51.15 -pb_10c : 51.10 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.16 -pb_1c : 51.16 -pb_5c : 51.15 -pb_10c : 51.10 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.17 -pb_1c : 51.17 -pb_5c : 51.15 -pb_10c : 51.10 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.18 -pb_1c : 51.18 -pb_5c : 51.15 -pb_10c : 51.10 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.19 -pb_1c : 51.19 -pb_5c : 51.15 -pb_10c : 51.10 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.20 -pb_1c : 51.20 -pb_5c : 51.20 -pb_10c : 51.20 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.21 -pb_1c : 51.21 -pb_5c : 51.20 -pb_10c : 51.20 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.22 -pb_1c : 51.22 -pb_5c : 51.20 -pb_10c : 51.20 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.23 -pb_1c : 51.23 -pb_5c : 51.20 -pb_10c : 51.20 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.24 -pb_1c : 51.24 -pb_5c : 51.20 -pb_10c : 51.20 -pb_25c : 51.00 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.25 -pb_1c : 51.25 -pb_5c : 51.25 -pb_10c : 51.20 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.26 -pb_1c : 51.26 -pb_5c : 51.25 -pb_10c : 51.20 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.27 -pb_1c : 51.27 -pb_5c : 51.25 -pb_10c : 51.20 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.28 -pb_1c : 51.28 -pb_5c : 51.25 -pb_10c : 51.20 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.29 -pb_1c : 51.29 -pb_5c : 51.25 -pb_10c : 51.20 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.30 -pb_1c : 51.30 -pb_5c : 51.30 -pb_10c : 51.30 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.31 -pb_1c : 51.31 -pb_5c : 51.30 -pb_10c : 51.30 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.32 -pb_1c : 51.32 -pb_5c : 51.30 -pb_10c : 51.30 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.33 -pb_1c : 51.33 -pb_5c : 51.30 -pb_10c : 51.30 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.34 -pb_1c : 51.34 -pb_5c : 51.30 -pb_10c : 51.30 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.35 -pb_1c : 51.35 -pb_5c : 51.35 -pb_10c : 51.30 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.36 -pb_1c : 51.36 -pb_5c : 51.35 -pb_10c : 51.30 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.37 -pb_1c : 51.37 -pb_5c : 51.35 -pb_10c : 51.30 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.38 -pb_1c : 51.38 -pb_5c : 51.35 -pb_10c : 51.30 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.39 -pb_1c : 51.39 -pb_5c : 51.35 -pb_10c : 51.30 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.40 -pb_1c : 51.40 -pb_5c : 51.40 -pb_10c : 51.40 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.41 -pb_1c : 51.41 -pb_5c : 51.40 -pb_10c : 51.40 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.42 -pb_1c : 51.42 -pb_5c : 51.40 -pb_10c : 51.40 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.43 -pb_1c : 51.43 -pb_5c : 51.40 -pb_10c : 51.40 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.44 -pb_1c : 51.44 -pb_5c : 51.40 -pb_10c : 51.40 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.45 -pb_1c : 51.45 -pb_5c : 51.45 -pb_10c : 51.40 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.46 -pb_1c : 51.46 -pb_5c : 51.45 -pb_10c : 51.40 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.47 -pb_1c : 51.47 -pb_5c : 51.45 -pb_10c : 51.40 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.48 -pb_1c : 51.48 -pb_5c : 51.45 -pb_10c : 51.40 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.49 -pb_1c : 51.49 -pb_5c : 51.45 -pb_10c : 51.40 -pb_25c : 51.25 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.50 -pb_1c : 51.50 -pb_5c : 51.50 -pb_10c : 51.50 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.51 -pb_1c : 51.51 -pb_5c : 51.50 -pb_10c : 51.50 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.52 -pb_1c : 51.52 -pb_5c : 51.50 -pb_10c : 51.50 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.53 -pb_1c : 51.53 -pb_5c : 51.50 -pb_10c : 51.50 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.54 -pb_1c : 51.54 -pb_5c : 51.50 -pb_10c : 51.50 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.55 -pb_1c : 51.55 -pb_5c : 51.55 -pb_10c : 51.50 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.56 -pb_1c : 51.56 -pb_5c : 51.55 -pb_10c : 51.50 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.57 -pb_1c : 51.57 -pb_5c : 51.55 -pb_10c : 51.50 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.58 -pb_1c : 51.58 -pb_5c : 51.55 -pb_10c : 51.50 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.59 -pb_1c : 51.59 -pb_5c : 51.55 -pb_10c : 51.50 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.60 -pb_1c : 51.60 -pb_5c : 51.60 -pb_10c : 51.60 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.61 -pb_1c : 51.61 -pb_5c : 51.60 -pb_10c : 51.60 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.62 -pb_1c : 51.62 -pb_5c : 51.60 -pb_10c : 51.60 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.63 -pb_1c : 51.63 -pb_5c : 51.60 -pb_10c : 51.60 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.64 -pb_1c : 51.64 -pb_5c : 51.60 -pb_10c : 51.60 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.65 -pb_1c : 51.65 -pb_5c : 51.65 -pb_10c : 51.60 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.66 -pb_1c : 51.66 -pb_5c : 51.65 -pb_10c : 51.60 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.67 -pb_1c : 51.67 -pb_5c : 51.65 -pb_10c : 51.60 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.68 -pb_1c : 51.68 -pb_5c : 51.65 -pb_10c : 51.60 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.69 -pb_1c : 51.69 -pb_5c : 51.65 -pb_10c : 51.60 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.70 -pb_1c : 51.70 -pb_5c : 51.70 -pb_10c : 51.70 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.71 -pb_1c : 51.71 -pb_5c : 51.70 -pb_10c : 51.70 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.72 -pb_1c : 51.72 -pb_5c : 51.70 -pb_10c : 51.70 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.73 -pb_1c : 51.73 -pb_5c : 51.70 -pb_10c : 51.70 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.74 -pb_1c : 51.74 -pb_5c : 51.70 -pb_10c : 51.70 -pb_25c : 51.50 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.75 -pb_1c : 51.75 -pb_5c : 51.75 -pb_10c : 51.70 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.76 -pb_1c : 51.76 -pb_5c : 51.75 -pb_10c : 51.70 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.77 -pb_1c : 51.77 -pb_5c : 51.75 -pb_10c : 51.70 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.78 -pb_1c : 51.78 -pb_5c : 51.75 -pb_10c : 51.70 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.79 -pb_1c : 51.79 -pb_5c : 51.75 -pb_10c : 51.70 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.80 -pb_1c : 51.80 -pb_5c : 51.80 -pb_10c : 51.80 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.81 -pb_1c : 51.81 -pb_5c : 51.80 -pb_10c : 51.80 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.82 -pb_1c : 51.82 -pb_5c : 51.80 -pb_10c : 51.80 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.83 -pb_1c : 51.83 -pb_5c : 51.80 -pb_10c : 51.80 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.84 -pb_1c : 51.84 -pb_5c : 51.80 -pb_10c : 51.80 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.85 -pb_1c : 51.85 -pb_5c : 51.85 -pb_10c : 51.80 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.86 -pb_1c : 51.86 -pb_5c : 51.85 -pb_10c : 51.80 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.87 -pb_1c : 51.87 -pb_5c : 51.85 -pb_10c : 51.80 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.88 -pb_1c : 51.88 -pb_5c : 51.85 -pb_10c : 51.80 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.89 -pb_1c : 51.89 -pb_5c : 51.85 -pb_10c : 51.80 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.90 -pb_1c : 51.90 -pb_5c : 51.90 -pb_10c : 51.90 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.91 -pb_1c : 51.91 -pb_5c : 51.90 -pb_10c : 51.90 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.92 -pb_1c : 51.92 -pb_5c : 51.90 -pb_10c : 51.90 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.93 -pb_1c : 51.93 -pb_5c : 51.90 -pb_10c : 51.90 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.94 -pb_1c : 51.94 -pb_5c : 51.90 -pb_10c : 51.90 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.95 -pb_1c : 51.95 -pb_5c : 51.95 -pb_10c : 51.90 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.96 -pb_1c : 51.96 -pb_5c : 51.95 -pb_10c : 51.90 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.97 -pb_1c : 51.97 -pb_5c : 51.95 -pb_10c : 51.90 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.98 -pb_1c : 51.98 -pb_5c : 51.95 -pb_10c : 51.90 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -51.99 -pb_1c : 51.99 -pb_5c : 51.95 -pb_10c : 51.90 -pb_25c : 51.75 -pb_1d : 51.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.00 -pb_1c : 52.00 -pb_5c : 52.00 -pb_10c : 52.00 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.01 -pb_1c : 52.01 -pb_5c : 52.00 -pb_10c : 52.00 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.02 -pb_1c : 52.02 -pb_5c : 52.00 -pb_10c : 52.00 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.03 -pb_1c : 52.03 -pb_5c : 52.00 -pb_10c : 52.00 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.04 -pb_1c : 52.04 -pb_5c : 52.00 -pb_10c : 52.00 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.05 -pb_1c : 52.05 -pb_5c : 52.05 -pb_10c : 52.00 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.06 -pb_1c : 52.06 -pb_5c : 52.05 -pb_10c : 52.00 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.07 -pb_1c : 52.07 -pb_5c : 52.05 -pb_10c : 52.00 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.08 -pb_1c : 52.08 -pb_5c : 52.05 -pb_10c : 52.00 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.09 -pb_1c : 52.09 -pb_5c : 52.05 -pb_10c : 52.00 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.10 -pb_1c : 52.10 -pb_5c : 52.10 -pb_10c : 52.10 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.11 -pb_1c : 52.11 -pb_5c : 52.10 -pb_10c : 52.10 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.12 -pb_1c : 52.12 -pb_5c : 52.10 -pb_10c : 52.10 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.13 -pb_1c : 52.13 -pb_5c : 52.10 -pb_10c : 52.10 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.14 -pb_1c : 52.14 -pb_5c : 52.10 -pb_10c : 52.10 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.15 -pb_1c : 52.15 -pb_5c : 52.15 -pb_10c : 52.10 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.16 -pb_1c : 52.16 -pb_5c : 52.15 -pb_10c : 52.10 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.17 -pb_1c : 52.17 -pb_5c : 52.15 -pb_10c : 52.10 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.18 -pb_1c : 52.18 -pb_5c : 52.15 -pb_10c : 52.10 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.19 -pb_1c : 52.19 -pb_5c : 52.15 -pb_10c : 52.10 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.20 -pb_1c : 52.20 -pb_5c : 52.20 -pb_10c : 52.20 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.21 -pb_1c : 52.21 -pb_5c : 52.20 -pb_10c : 52.20 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.22 -pb_1c : 52.22 -pb_5c : 52.20 -pb_10c : 52.20 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.23 -pb_1c : 52.23 -pb_5c : 52.20 -pb_10c : 52.20 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.24 -pb_1c : 52.24 -pb_5c : 52.20 -pb_10c : 52.20 -pb_25c : 52.00 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.25 -pb_1c : 52.25 -pb_5c : 52.25 -pb_10c : 52.20 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.26 -pb_1c : 52.26 -pb_5c : 52.25 -pb_10c : 52.20 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.27 -pb_1c : 52.27 -pb_5c : 52.25 -pb_10c : 52.20 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.28 -pb_1c : 52.28 -pb_5c : 52.25 -pb_10c : 52.20 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.29 -pb_1c : 52.29 -pb_5c : 52.25 -pb_10c : 52.20 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.30 -pb_1c : 52.30 -pb_5c : 52.30 -pb_10c : 52.30 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.31 -pb_1c : 52.31 -pb_5c : 52.30 -pb_10c : 52.30 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.32 -pb_1c : 52.32 -pb_5c : 52.30 -pb_10c : 52.30 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.33 -pb_1c : 52.33 -pb_5c : 52.30 -pb_10c : 52.30 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.34 -pb_1c : 52.34 -pb_5c : 52.30 -pb_10c : 52.30 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.35 -pb_1c : 52.35 -pb_5c : 52.35 -pb_10c : 52.30 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.36 -pb_1c : 52.36 -pb_5c : 52.35 -pb_10c : 52.30 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.37 -pb_1c : 52.37 -pb_5c : 52.35 -pb_10c : 52.30 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.38 -pb_1c : 52.38 -pb_5c : 52.35 -pb_10c : 52.30 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.39 -pb_1c : 52.39 -pb_5c : 52.35 -pb_10c : 52.30 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.40 -pb_1c : 52.40 -pb_5c : 52.40 -pb_10c : 52.40 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.41 -pb_1c : 52.41 -pb_5c : 52.40 -pb_10c : 52.40 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.42 -pb_1c : 52.42 -pb_5c : 52.40 -pb_10c : 52.40 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.43 -pb_1c : 52.43 -pb_5c : 52.40 -pb_10c : 52.40 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.44 -pb_1c : 52.44 -pb_5c : 52.40 -pb_10c : 52.40 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.45 -pb_1c : 52.45 -pb_5c : 52.45 -pb_10c : 52.40 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.46 -pb_1c : 52.46 -pb_5c : 52.45 -pb_10c : 52.40 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.47 -pb_1c : 52.47 -pb_5c : 52.45 -pb_10c : 52.40 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.48 -pb_1c : 52.48 -pb_5c : 52.45 -pb_10c : 52.40 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.49 -pb_1c : 52.49 -pb_5c : 52.45 -pb_10c : 52.40 -pb_25c : 52.25 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.50 -pb_1c : 52.50 -pb_5c : 52.50 -pb_10c : 52.50 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.51 -pb_1c : 52.51 -pb_5c : 52.50 -pb_10c : 52.50 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.52 -pb_1c : 52.52 -pb_5c : 52.50 -pb_10c : 52.50 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.53 -pb_1c : 52.53 -pb_5c : 52.50 -pb_10c : 52.50 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.54 -pb_1c : 52.54 -pb_5c : 52.50 -pb_10c : 52.50 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.55 -pb_1c : 52.55 -pb_5c : 52.55 -pb_10c : 52.50 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.56 -pb_1c : 52.56 -pb_5c : 52.55 -pb_10c : 52.50 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.57 -pb_1c : 52.57 -pb_5c : 52.55 -pb_10c : 52.50 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.58 -pb_1c : 52.58 -pb_5c : 52.55 -pb_10c : 52.50 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.59 -pb_1c : 52.59 -pb_5c : 52.55 -pb_10c : 52.50 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.60 -pb_1c : 52.60 -pb_5c : 52.60 -pb_10c : 52.60 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.61 -pb_1c : 52.61 -pb_5c : 52.60 -pb_10c : 52.60 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.62 -pb_1c : 52.62 -pb_5c : 52.60 -pb_10c : 52.60 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.63 -pb_1c : 52.63 -pb_5c : 52.60 -pb_10c : 52.60 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.64 -pb_1c : 52.64 -pb_5c : 52.60 -pb_10c : 52.60 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.65 -pb_1c : 52.65 -pb_5c : 52.65 -pb_10c : 52.60 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.66 -pb_1c : 52.66 -pb_5c : 52.65 -pb_10c : 52.60 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.67 -pb_1c : 52.67 -pb_5c : 52.65 -pb_10c : 52.60 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.68 -pb_1c : 52.68 -pb_5c : 52.65 -pb_10c : 52.60 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.69 -pb_1c : 52.69 -pb_5c : 52.65 -pb_10c : 52.60 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.70 -pb_1c : 52.70 -pb_5c : 52.70 -pb_10c : 52.70 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.71 -pb_1c : 52.71 -pb_5c : 52.70 -pb_10c : 52.70 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.72 -pb_1c : 52.72 -pb_5c : 52.70 -pb_10c : 52.70 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.73 -pb_1c : 52.73 -pb_5c : 52.70 -pb_10c : 52.70 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.74 -pb_1c : 52.74 -pb_5c : 52.70 -pb_10c : 52.70 -pb_25c : 52.50 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.75 -pb_1c : 52.75 -pb_5c : 52.75 -pb_10c : 52.70 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.76 -pb_1c : 52.76 -pb_5c : 52.75 -pb_10c : 52.70 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.77 -pb_1c : 52.77 -pb_5c : 52.75 -pb_10c : 52.70 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.78 -pb_1c : 52.78 -pb_5c : 52.75 -pb_10c : 52.70 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.79 -pb_1c : 52.79 -pb_5c : 52.75 -pb_10c : 52.70 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.80 -pb_1c : 52.80 -pb_5c : 52.80 -pb_10c : 52.80 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.81 -pb_1c : 52.81 -pb_5c : 52.80 -pb_10c : 52.80 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.82 -pb_1c : 52.82 -pb_5c : 52.80 -pb_10c : 52.80 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.83 -pb_1c : 52.83 -pb_5c : 52.80 -pb_10c : 52.80 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.84 -pb_1c : 52.84 -pb_5c : 52.80 -pb_10c : 52.80 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.85 -pb_1c : 52.85 -pb_5c : 52.85 -pb_10c : 52.80 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.86 -pb_1c : 52.86 -pb_5c : 52.85 -pb_10c : 52.80 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.87 -pb_1c : 52.87 -pb_5c : 52.85 -pb_10c : 52.80 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.88 -pb_1c : 52.88 -pb_5c : 52.85 -pb_10c : 52.80 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.89 -pb_1c : 52.89 -pb_5c : 52.85 -pb_10c : 52.80 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.90 -pb_1c : 52.90 -pb_5c : 52.90 -pb_10c : 52.90 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.91 -pb_1c : 52.91 -pb_5c : 52.90 -pb_10c : 52.90 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.92 -pb_1c : 52.92 -pb_5c : 52.90 -pb_10c : 52.90 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.93 -pb_1c : 52.93 -pb_5c : 52.90 -pb_10c : 52.90 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.94 -pb_1c : 52.94 -pb_5c : 52.90 -pb_10c : 52.90 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.95 -pb_1c : 52.95 -pb_5c : 52.95 -pb_10c : 52.90 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.96 -pb_1c : 52.96 -pb_5c : 52.95 -pb_10c : 52.90 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.97 -pb_1c : 52.97 -pb_5c : 52.95 -pb_10c : 52.90 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.98 -pb_1c : 52.98 -pb_5c : 52.95 -pb_10c : 52.90 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -52.99 -pb_1c : 52.99 -pb_5c : 52.95 -pb_10c : 52.90 -pb_25c : 52.75 -pb_1d : 52.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.00 -pb_1c : 53.00 -pb_5c : 53.00 -pb_10c : 53.00 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.01 -pb_1c : 53.01 -pb_5c : 53.00 -pb_10c : 53.00 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.02 -pb_1c : 53.02 -pb_5c : 53.00 -pb_10c : 53.00 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.03 -pb_1c : 53.03 -pb_5c : 53.00 -pb_10c : 53.00 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.04 -pb_1c : 53.04 -pb_5c : 53.00 -pb_10c : 53.00 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.05 -pb_1c : 53.05 -pb_5c : 53.05 -pb_10c : 53.00 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.06 -pb_1c : 53.06 -pb_5c : 53.05 -pb_10c : 53.00 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.07 -pb_1c : 53.07 -pb_5c : 53.05 -pb_10c : 53.00 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.08 -pb_1c : 53.08 -pb_5c : 53.05 -pb_10c : 53.00 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.09 -pb_1c : 53.09 -pb_5c : 53.05 -pb_10c : 53.00 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.10 -pb_1c : 53.10 -pb_5c : 53.10 -pb_10c : 53.10 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.11 -pb_1c : 53.11 -pb_5c : 53.10 -pb_10c : 53.10 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.12 -pb_1c : 53.12 -pb_5c : 53.10 -pb_10c : 53.10 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.13 -pb_1c : 53.13 -pb_5c : 53.10 -pb_10c : 53.10 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.14 -pb_1c : 53.14 -pb_5c : 53.10 -pb_10c : 53.10 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.15 -pb_1c : 53.15 -pb_5c : 53.15 -pb_10c : 53.10 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.16 -pb_1c : 53.16 -pb_5c : 53.15 -pb_10c : 53.10 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.17 -pb_1c : 53.17 -pb_5c : 53.15 -pb_10c : 53.10 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.18 -pb_1c : 53.18 -pb_5c : 53.15 -pb_10c : 53.10 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.19 -pb_1c : 53.19 -pb_5c : 53.15 -pb_10c : 53.10 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.20 -pb_1c : 53.20 -pb_5c : 53.20 -pb_10c : 53.20 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.21 -pb_1c : 53.21 -pb_5c : 53.20 -pb_10c : 53.20 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.22 -pb_1c : 53.22 -pb_5c : 53.20 -pb_10c : 53.20 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.23 -pb_1c : 53.23 -pb_5c : 53.20 -pb_10c : 53.20 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.24 -pb_1c : 53.24 -pb_5c : 53.20 -pb_10c : 53.20 -pb_25c : 53.00 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.25 -pb_1c : 53.25 -pb_5c : 53.25 -pb_10c : 53.20 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.26 -pb_1c : 53.26 -pb_5c : 53.25 -pb_10c : 53.20 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.27 -pb_1c : 53.27 -pb_5c : 53.25 -pb_10c : 53.20 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.28 -pb_1c : 53.28 -pb_5c : 53.25 -pb_10c : 53.20 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.29 -pb_1c : 53.29 -pb_5c : 53.25 -pb_10c : 53.20 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.30 -pb_1c : 53.30 -pb_5c : 53.30 -pb_10c : 53.30 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.31 -pb_1c : 53.31 -pb_5c : 53.30 -pb_10c : 53.30 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.32 -pb_1c : 53.32 -pb_5c : 53.30 -pb_10c : 53.30 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.33 -pb_1c : 53.33 -pb_5c : 53.30 -pb_10c : 53.30 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.34 -pb_1c : 53.34 -pb_5c : 53.30 -pb_10c : 53.30 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.35 -pb_1c : 53.35 -pb_5c : 53.35 -pb_10c : 53.30 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.36 -pb_1c : 53.36 -pb_5c : 53.35 -pb_10c : 53.30 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.37 -pb_1c : 53.37 -pb_5c : 53.35 -pb_10c : 53.30 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.38 -pb_1c : 53.38 -pb_5c : 53.35 -pb_10c : 53.30 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.39 -pb_1c : 53.39 -pb_5c : 53.35 -pb_10c : 53.30 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.40 -pb_1c : 53.40 -pb_5c : 53.40 -pb_10c : 53.40 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.41 -pb_1c : 53.41 -pb_5c : 53.40 -pb_10c : 53.40 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.42 -pb_1c : 53.42 -pb_5c : 53.40 -pb_10c : 53.40 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.43 -pb_1c : 53.43 -pb_5c : 53.40 -pb_10c : 53.40 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.44 -pb_1c : 53.44 -pb_5c : 53.40 -pb_10c : 53.40 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.45 -pb_1c : 53.45 -pb_5c : 53.45 -pb_10c : 53.40 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.46 -pb_1c : 53.46 -pb_5c : 53.45 -pb_10c : 53.40 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.47 -pb_1c : 53.47 -pb_5c : 53.45 -pb_10c : 53.40 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.48 -pb_1c : 53.48 -pb_5c : 53.45 -pb_10c : 53.40 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.49 -pb_1c : 53.49 -pb_5c : 53.45 -pb_10c : 53.40 -pb_25c : 53.25 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.50 -pb_1c : 53.50 -pb_5c : 53.50 -pb_10c : 53.50 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.51 -pb_1c : 53.51 -pb_5c : 53.50 -pb_10c : 53.50 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.52 -pb_1c : 53.52 -pb_5c : 53.50 -pb_10c : 53.50 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.53 -pb_1c : 53.53 -pb_5c : 53.50 -pb_10c : 53.50 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.54 -pb_1c : 53.54 -pb_5c : 53.50 -pb_10c : 53.50 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.55 -pb_1c : 53.55 -pb_5c : 53.55 -pb_10c : 53.50 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.56 -pb_1c : 53.56 -pb_5c : 53.55 -pb_10c : 53.50 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.57 -pb_1c : 53.57 -pb_5c : 53.55 -pb_10c : 53.50 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.58 -pb_1c : 53.58 -pb_5c : 53.55 -pb_10c : 53.50 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.59 -pb_1c : 53.59 -pb_5c : 53.55 -pb_10c : 53.50 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.60 -pb_1c : 53.60 -pb_5c : 53.60 -pb_10c : 53.60 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.61 -pb_1c : 53.61 -pb_5c : 53.60 -pb_10c : 53.60 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.62 -pb_1c : 53.62 -pb_5c : 53.60 -pb_10c : 53.60 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.63 -pb_1c : 53.63 -pb_5c : 53.60 -pb_10c : 53.60 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.64 -pb_1c : 53.64 -pb_5c : 53.60 -pb_10c : 53.60 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.65 -pb_1c : 53.65 -pb_5c : 53.65 -pb_10c : 53.60 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.66 -pb_1c : 53.66 -pb_5c : 53.65 -pb_10c : 53.60 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.67 -pb_1c : 53.67 -pb_5c : 53.65 -pb_10c : 53.60 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.68 -pb_1c : 53.68 -pb_5c : 53.65 -pb_10c : 53.60 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.69 -pb_1c : 53.69 -pb_5c : 53.65 -pb_10c : 53.60 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.70 -pb_1c : 53.70 -pb_5c : 53.70 -pb_10c : 53.70 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.71 -pb_1c : 53.71 -pb_5c : 53.70 -pb_10c : 53.70 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.72 -pb_1c : 53.72 -pb_5c : 53.70 -pb_10c : 53.70 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.73 -pb_1c : 53.73 -pb_5c : 53.70 -pb_10c : 53.70 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.74 -pb_1c : 53.74 -pb_5c : 53.70 -pb_10c : 53.70 -pb_25c : 53.50 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.75 -pb_1c : 53.75 -pb_5c : 53.75 -pb_10c : 53.70 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.76 -pb_1c : 53.76 -pb_5c : 53.75 -pb_10c : 53.70 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.77 -pb_1c : 53.77 -pb_5c : 53.75 -pb_10c : 53.70 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.78 -pb_1c : 53.78 -pb_5c : 53.75 -pb_10c : 53.70 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.79 -pb_1c : 53.79 -pb_5c : 53.75 -pb_10c : 53.70 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.80 -pb_1c : 53.80 -pb_5c : 53.80 -pb_10c : 53.80 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.81 -pb_1c : 53.81 -pb_5c : 53.80 -pb_10c : 53.80 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.82 -pb_1c : 53.82 -pb_5c : 53.80 -pb_10c : 53.80 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.83 -pb_1c : 53.83 -pb_5c : 53.80 -pb_10c : 53.80 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.84 -pb_1c : 53.84 -pb_5c : 53.80 -pb_10c : 53.80 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.85 -pb_1c : 53.85 -pb_5c : 53.85 -pb_10c : 53.80 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.86 -pb_1c : 53.86 -pb_5c : 53.85 -pb_10c : 53.80 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.87 -pb_1c : 53.87 -pb_5c : 53.85 -pb_10c : 53.80 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.88 -pb_1c : 53.88 -pb_5c : 53.85 -pb_10c : 53.80 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.89 -pb_1c : 53.89 -pb_5c : 53.85 -pb_10c : 53.80 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.90 -pb_1c : 53.90 -pb_5c : 53.90 -pb_10c : 53.90 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.91 -pb_1c : 53.91 -pb_5c : 53.90 -pb_10c : 53.90 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.92 -pb_1c : 53.92 -pb_5c : 53.90 -pb_10c : 53.90 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.93 -pb_1c : 53.93 -pb_5c : 53.90 -pb_10c : 53.90 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.94 -pb_1c : 53.94 -pb_5c : 53.90 -pb_10c : 53.90 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.95 -pb_1c : 53.95 -pb_5c : 53.95 -pb_10c : 53.90 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.96 -pb_1c : 53.96 -pb_5c : 53.95 -pb_10c : 53.90 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.97 -pb_1c : 53.97 -pb_5c : 53.95 -pb_10c : 53.90 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.98 -pb_1c : 53.98 -pb_5c : 53.95 -pb_10c : 53.90 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -53.99 -pb_1c : 53.99 -pb_5c : 53.95 -pb_10c : 53.90 -pb_25c : 53.75 -pb_1d : 53.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.00 -pb_1c : 54.00 -pb_5c : 54.00 -pb_10c : 54.00 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.01 -pb_1c : 54.01 -pb_5c : 54.00 -pb_10c : 54.00 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.02 -pb_1c : 54.02 -pb_5c : 54.00 -pb_10c : 54.00 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.03 -pb_1c : 54.03 -pb_5c : 54.00 -pb_10c : 54.00 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.04 -pb_1c : 54.04 -pb_5c : 54.00 -pb_10c : 54.00 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.05 -pb_1c : 54.05 -pb_5c : 54.05 -pb_10c : 54.00 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.06 -pb_1c : 54.06 -pb_5c : 54.05 -pb_10c : 54.00 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.07 -pb_1c : 54.07 -pb_5c : 54.05 -pb_10c : 54.00 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.08 -pb_1c : 54.08 -pb_5c : 54.05 -pb_10c : 54.00 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.09 -pb_1c : 54.09 -pb_5c : 54.05 -pb_10c : 54.00 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.10 -pb_1c : 54.10 -pb_5c : 54.10 -pb_10c : 54.10 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.11 -pb_1c : 54.11 -pb_5c : 54.10 -pb_10c : 54.10 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.12 -pb_1c : 54.12 -pb_5c : 54.10 -pb_10c : 54.10 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.13 -pb_1c : 54.13 -pb_5c : 54.10 -pb_10c : 54.10 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.14 -pb_1c : 54.14 -pb_5c : 54.10 -pb_10c : 54.10 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.15 -pb_1c : 54.15 -pb_5c : 54.15 -pb_10c : 54.10 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.16 -pb_1c : 54.16 -pb_5c : 54.15 -pb_10c : 54.10 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.17 -pb_1c : 54.17 -pb_5c : 54.15 -pb_10c : 54.10 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.18 -pb_1c : 54.18 -pb_5c : 54.15 -pb_10c : 54.10 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.19 -pb_1c : 54.19 -pb_5c : 54.15 -pb_10c : 54.10 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.20 -pb_1c : 54.20 -pb_5c : 54.20 -pb_10c : 54.20 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.21 -pb_1c : 54.21 -pb_5c : 54.20 -pb_10c : 54.20 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.22 -pb_1c : 54.22 -pb_5c : 54.20 -pb_10c : 54.20 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.23 -pb_1c : 54.23 -pb_5c : 54.20 -pb_10c : 54.20 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.24 -pb_1c : 54.24 -pb_5c : 54.20 -pb_10c : 54.20 -pb_25c : 54.00 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.25 -pb_1c : 54.25 -pb_5c : 54.25 -pb_10c : 54.20 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.26 -pb_1c : 54.26 -pb_5c : 54.25 -pb_10c : 54.20 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.27 -pb_1c : 54.27 -pb_5c : 54.25 -pb_10c : 54.20 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.28 -pb_1c : 54.28 -pb_5c : 54.25 -pb_10c : 54.20 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.29 -pb_1c : 54.29 -pb_5c : 54.25 -pb_10c : 54.20 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.30 -pb_1c : 54.30 -pb_5c : 54.30 -pb_10c : 54.30 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.31 -pb_1c : 54.31 -pb_5c : 54.30 -pb_10c : 54.30 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.32 -pb_1c : 54.32 -pb_5c : 54.30 -pb_10c : 54.30 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.33 -pb_1c : 54.33 -pb_5c : 54.30 -pb_10c : 54.30 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.34 -pb_1c : 54.34 -pb_5c : 54.30 -pb_10c : 54.30 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.35 -pb_1c : 54.35 -pb_5c : 54.35 -pb_10c : 54.30 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.36 -pb_1c : 54.36 -pb_5c : 54.35 -pb_10c : 54.30 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.37 -pb_1c : 54.37 -pb_5c : 54.35 -pb_10c : 54.30 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.38 -pb_1c : 54.38 -pb_5c : 54.35 -pb_10c : 54.30 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.39 -pb_1c : 54.39 -pb_5c : 54.35 -pb_10c : 54.30 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.40 -pb_1c : 54.40 -pb_5c : 54.40 -pb_10c : 54.40 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.41 -pb_1c : 54.41 -pb_5c : 54.40 -pb_10c : 54.40 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.42 -pb_1c : 54.42 -pb_5c : 54.40 -pb_10c : 54.40 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.43 -pb_1c : 54.43 -pb_5c : 54.40 -pb_10c : 54.40 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.44 -pb_1c : 54.44 -pb_5c : 54.40 -pb_10c : 54.40 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.45 -pb_1c : 54.45 -pb_5c : 54.45 -pb_10c : 54.40 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.46 -pb_1c : 54.46 -pb_5c : 54.45 -pb_10c : 54.40 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.47 -pb_1c : 54.47 -pb_5c : 54.45 -pb_10c : 54.40 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.48 -pb_1c : 54.48 -pb_5c : 54.45 -pb_10c : 54.40 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.49 -pb_1c : 54.49 -pb_5c : 54.45 -pb_10c : 54.40 -pb_25c : 54.25 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.50 -pb_1c : 54.50 -pb_5c : 54.50 -pb_10c : 54.50 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.51 -pb_1c : 54.51 -pb_5c : 54.50 -pb_10c : 54.50 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.52 -pb_1c : 54.52 -pb_5c : 54.50 -pb_10c : 54.50 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.53 -pb_1c : 54.53 -pb_5c : 54.50 -pb_10c : 54.50 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.54 -pb_1c : 54.54 -pb_5c : 54.50 -pb_10c : 54.50 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.55 -pb_1c : 54.55 -pb_5c : 54.55 -pb_10c : 54.50 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.56 -pb_1c : 54.56 -pb_5c : 54.55 -pb_10c : 54.50 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.57 -pb_1c : 54.57 -pb_5c : 54.55 -pb_10c : 54.50 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.58 -pb_1c : 54.58 -pb_5c : 54.55 -pb_10c : 54.50 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.59 -pb_1c : 54.59 -pb_5c : 54.55 -pb_10c : 54.50 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.60 -pb_1c : 54.60 -pb_5c : 54.60 -pb_10c : 54.60 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.61 -pb_1c : 54.61 -pb_5c : 54.60 -pb_10c : 54.60 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.62 -pb_1c : 54.62 -pb_5c : 54.60 -pb_10c : 54.60 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.63 -pb_1c : 54.63 -pb_5c : 54.60 -pb_10c : 54.60 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.64 -pb_1c : 54.64 -pb_5c : 54.60 -pb_10c : 54.60 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.65 -pb_1c : 54.65 -pb_5c : 54.65 -pb_10c : 54.60 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.66 -pb_1c : 54.66 -pb_5c : 54.65 -pb_10c : 54.60 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.67 -pb_1c : 54.67 -pb_5c : 54.65 -pb_10c : 54.60 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.68 -pb_1c : 54.68 -pb_5c : 54.65 -pb_10c : 54.60 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.69 -pb_1c : 54.69 -pb_5c : 54.65 -pb_10c : 54.60 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.70 -pb_1c : 54.70 -pb_5c : 54.70 -pb_10c : 54.70 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.71 -pb_1c : 54.71 -pb_5c : 54.70 -pb_10c : 54.70 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.72 -pb_1c : 54.72 -pb_5c : 54.70 -pb_10c : 54.70 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.73 -pb_1c : 54.73 -pb_5c : 54.70 -pb_10c : 54.70 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.74 -pb_1c : 54.74 -pb_5c : 54.70 -pb_10c : 54.70 -pb_25c : 54.50 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.75 -pb_1c : 54.75 -pb_5c : 54.75 -pb_10c : 54.70 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.76 -pb_1c : 54.76 -pb_5c : 54.75 -pb_10c : 54.70 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.77 -pb_1c : 54.77 -pb_5c : 54.75 -pb_10c : 54.70 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.78 -pb_1c : 54.78 -pb_5c : 54.75 -pb_10c : 54.70 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.79 -pb_1c : 54.79 -pb_5c : 54.75 -pb_10c : 54.70 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.80 -pb_1c : 54.80 -pb_5c : 54.80 -pb_10c : 54.80 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.81 -pb_1c : 54.81 -pb_5c : 54.80 -pb_10c : 54.80 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.82 -pb_1c : 54.82 -pb_5c : 54.80 -pb_10c : 54.80 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.83 -pb_1c : 54.83 -pb_5c : 54.80 -pb_10c : 54.80 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.84 -pb_1c : 54.84 -pb_5c : 54.80 -pb_10c : 54.80 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.85 -pb_1c : 54.85 -pb_5c : 54.85 -pb_10c : 54.80 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.86 -pb_1c : 54.86 -pb_5c : 54.85 -pb_10c : 54.80 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.87 -pb_1c : 54.87 -pb_5c : 54.85 -pb_10c : 54.80 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.88 -pb_1c : 54.88 -pb_5c : 54.85 -pb_10c : 54.80 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.89 -pb_1c : 54.89 -pb_5c : 54.85 -pb_10c : 54.80 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.90 -pb_1c : 54.90 -pb_5c : 54.90 -pb_10c : 54.90 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.91 -pb_1c : 54.91 -pb_5c : 54.90 -pb_10c : 54.90 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.92 -pb_1c : 54.92 -pb_5c : 54.90 -pb_10c : 54.90 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.93 -pb_1c : 54.93 -pb_5c : 54.90 -pb_10c : 54.90 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.94 -pb_1c : 54.94 -pb_5c : 54.90 -pb_10c : 54.90 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.95 -pb_1c : 54.95 -pb_5c : 54.95 -pb_10c : 54.90 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.96 -pb_1c : 54.96 -pb_5c : 54.95 -pb_10c : 54.90 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.97 -pb_1c : 54.97 -pb_5c : 54.95 -pb_10c : 54.90 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.98 -pb_1c : 54.98 -pb_5c : 54.95 -pb_10c : 54.90 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -54.99 -pb_1c : 54.99 -pb_5c : 54.95 -pb_10c : 54.90 -pb_25c : 54.75 -pb_1d : 54.00 -pb_5d : 50.00 -pb_10d : 50.00 - -55.00 -pb_1c : 55.00 -pb_5c : 55.00 -pb_10c : 55.00 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.01 -pb_1c : 55.01 -pb_5c : 55.00 -pb_10c : 55.00 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.02 -pb_1c : 55.02 -pb_5c : 55.00 -pb_10c : 55.00 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.03 -pb_1c : 55.03 -pb_5c : 55.00 -pb_10c : 55.00 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.04 -pb_1c : 55.04 -pb_5c : 55.00 -pb_10c : 55.00 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.05 -pb_1c : 55.05 -pb_5c : 55.05 -pb_10c : 55.00 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.06 -pb_1c : 55.06 -pb_5c : 55.05 -pb_10c : 55.00 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.07 -pb_1c : 55.07 -pb_5c : 55.05 -pb_10c : 55.00 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.08 -pb_1c : 55.08 -pb_5c : 55.05 -pb_10c : 55.00 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.09 -pb_1c : 55.09 -pb_5c : 55.05 -pb_10c : 55.00 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.10 -pb_1c : 55.10 -pb_5c : 55.10 -pb_10c : 55.10 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.11 -pb_1c : 55.11 -pb_5c : 55.10 -pb_10c : 55.10 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.12 -pb_1c : 55.12 -pb_5c : 55.10 -pb_10c : 55.10 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.13 -pb_1c : 55.13 -pb_5c : 55.10 -pb_10c : 55.10 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.14 -pb_1c : 55.14 -pb_5c : 55.10 -pb_10c : 55.10 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.15 -pb_1c : 55.15 -pb_5c : 55.15 -pb_10c : 55.10 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.16 -pb_1c : 55.16 -pb_5c : 55.15 -pb_10c : 55.10 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.17 -pb_1c : 55.17 -pb_5c : 55.15 -pb_10c : 55.10 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.18 -pb_1c : 55.18 -pb_5c : 55.15 -pb_10c : 55.10 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.19 -pb_1c : 55.19 -pb_5c : 55.15 -pb_10c : 55.10 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.20 -pb_1c : 55.20 -pb_5c : 55.20 -pb_10c : 55.20 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.21 -pb_1c : 55.21 -pb_5c : 55.20 -pb_10c : 55.20 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.22 -pb_1c : 55.22 -pb_5c : 55.20 -pb_10c : 55.20 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.23 -pb_1c : 55.23 -pb_5c : 55.20 -pb_10c : 55.20 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.24 -pb_1c : 55.24 -pb_5c : 55.20 -pb_10c : 55.20 -pb_25c : 55.00 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.25 -pb_1c : 55.25 -pb_5c : 55.25 -pb_10c : 55.20 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.26 -pb_1c : 55.26 -pb_5c : 55.25 -pb_10c : 55.20 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.27 -pb_1c : 55.27 -pb_5c : 55.25 -pb_10c : 55.20 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.28 -pb_1c : 55.28 -pb_5c : 55.25 -pb_10c : 55.20 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.29 -pb_1c : 55.29 -pb_5c : 55.25 -pb_10c : 55.20 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.30 -pb_1c : 55.30 -pb_5c : 55.30 -pb_10c : 55.30 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.31 -pb_1c : 55.31 -pb_5c : 55.30 -pb_10c : 55.30 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.32 -pb_1c : 55.32 -pb_5c : 55.30 -pb_10c : 55.30 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.33 -pb_1c : 55.33 -pb_5c : 55.30 -pb_10c : 55.30 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.34 -pb_1c : 55.34 -pb_5c : 55.30 -pb_10c : 55.30 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.35 -pb_1c : 55.35 -pb_5c : 55.35 -pb_10c : 55.30 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.36 -pb_1c : 55.36 -pb_5c : 55.35 -pb_10c : 55.30 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.37 -pb_1c : 55.37 -pb_5c : 55.35 -pb_10c : 55.30 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.38 -pb_1c : 55.38 -pb_5c : 55.35 -pb_10c : 55.30 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.39 -pb_1c : 55.39 -pb_5c : 55.35 -pb_10c : 55.30 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.40 -pb_1c : 55.40 -pb_5c : 55.40 -pb_10c : 55.40 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.41 -pb_1c : 55.41 -pb_5c : 55.40 -pb_10c : 55.40 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.42 -pb_1c : 55.42 -pb_5c : 55.40 -pb_10c : 55.40 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.43 -pb_1c : 55.43 -pb_5c : 55.40 -pb_10c : 55.40 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.44 -pb_1c : 55.44 -pb_5c : 55.40 -pb_10c : 55.40 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.45 -pb_1c : 55.45 -pb_5c : 55.45 -pb_10c : 55.40 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.46 -pb_1c : 55.46 -pb_5c : 55.45 -pb_10c : 55.40 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.47 -pb_1c : 55.47 -pb_5c : 55.45 -pb_10c : 55.40 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.48 -pb_1c : 55.48 -pb_5c : 55.45 -pb_10c : 55.40 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.49 -pb_1c : 55.49 -pb_5c : 55.45 -pb_10c : 55.40 -pb_25c : 55.25 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.50 -pb_1c : 55.50 -pb_5c : 55.50 -pb_10c : 55.50 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.51 -pb_1c : 55.51 -pb_5c : 55.50 -pb_10c : 55.50 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.52 -pb_1c : 55.52 -pb_5c : 55.50 -pb_10c : 55.50 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.53 -pb_1c : 55.53 -pb_5c : 55.50 -pb_10c : 55.50 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.54 -pb_1c : 55.54 -pb_5c : 55.50 -pb_10c : 55.50 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.55 -pb_1c : 55.55 -pb_5c : 55.55 -pb_10c : 55.50 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.56 -pb_1c : 55.56 -pb_5c : 55.55 -pb_10c : 55.50 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.57 -pb_1c : 55.57 -pb_5c : 55.55 -pb_10c : 55.50 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.58 -pb_1c : 55.58 -pb_5c : 55.55 -pb_10c : 55.50 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.59 -pb_1c : 55.59 -pb_5c : 55.55 -pb_10c : 55.50 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.60 -pb_1c : 55.60 -pb_5c : 55.60 -pb_10c : 55.60 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.61 -pb_1c : 55.61 -pb_5c : 55.60 -pb_10c : 55.60 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.62 -pb_1c : 55.62 -pb_5c : 55.60 -pb_10c : 55.60 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.63 -pb_1c : 55.63 -pb_5c : 55.60 -pb_10c : 55.60 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.64 -pb_1c : 55.64 -pb_5c : 55.60 -pb_10c : 55.60 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.65 -pb_1c : 55.65 -pb_5c : 55.65 -pb_10c : 55.60 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.66 -pb_1c : 55.66 -pb_5c : 55.65 -pb_10c : 55.60 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.67 -pb_1c : 55.67 -pb_5c : 55.65 -pb_10c : 55.60 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.68 -pb_1c : 55.68 -pb_5c : 55.65 -pb_10c : 55.60 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.69 -pb_1c : 55.69 -pb_5c : 55.65 -pb_10c : 55.60 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.70 -pb_1c : 55.70 -pb_5c : 55.70 -pb_10c : 55.70 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.71 -pb_1c : 55.71 -pb_5c : 55.70 -pb_10c : 55.70 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.72 -pb_1c : 55.72 -pb_5c : 55.70 -pb_10c : 55.70 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.73 -pb_1c : 55.73 -pb_5c : 55.70 -pb_10c : 55.70 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.74 -pb_1c : 55.74 -pb_5c : 55.70 -pb_10c : 55.70 -pb_25c : 55.50 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.75 -pb_1c : 55.75 -pb_5c : 55.75 -pb_10c : 55.70 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.76 -pb_1c : 55.76 -pb_5c : 55.75 -pb_10c : 55.70 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.77 -pb_1c : 55.77 -pb_5c : 55.75 -pb_10c : 55.70 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.78 -pb_1c : 55.78 -pb_5c : 55.75 -pb_10c : 55.70 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.79 -pb_1c : 55.79 -pb_5c : 55.75 -pb_10c : 55.70 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.80 -pb_1c : 55.80 -pb_5c : 55.80 -pb_10c : 55.80 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.81 -pb_1c : 55.81 -pb_5c : 55.80 -pb_10c : 55.80 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.82 -pb_1c : 55.82 -pb_5c : 55.80 -pb_10c : 55.80 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.83 -pb_1c : 55.83 -pb_5c : 55.80 -pb_10c : 55.80 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.84 -pb_1c : 55.84 -pb_5c : 55.80 -pb_10c : 55.80 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.85 -pb_1c : 55.85 -pb_5c : 55.85 -pb_10c : 55.80 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.86 -pb_1c : 55.86 -pb_5c : 55.85 -pb_10c : 55.80 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.87 -pb_1c : 55.87 -pb_5c : 55.85 -pb_10c : 55.80 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.88 -pb_1c : 55.88 -pb_5c : 55.85 -pb_10c : 55.80 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.89 -pb_1c : 55.89 -pb_5c : 55.85 -pb_10c : 55.80 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.90 -pb_1c : 55.90 -pb_5c : 55.90 -pb_10c : 55.90 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.91 -pb_1c : 55.91 -pb_5c : 55.90 -pb_10c : 55.90 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.92 -pb_1c : 55.92 -pb_5c : 55.90 -pb_10c : 55.90 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.93 -pb_1c : 55.93 -pb_5c : 55.90 -pb_10c : 55.90 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.94 -pb_1c : 55.94 -pb_5c : 55.90 -pb_10c : 55.90 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.95 -pb_1c : 55.95 -pb_5c : 55.95 -pb_10c : 55.90 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.96 -pb_1c : 55.96 -pb_5c : 55.95 -pb_10c : 55.90 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.97 -pb_1c : 55.97 -pb_5c : 55.95 -pb_10c : 55.90 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.98 -pb_1c : 55.98 -pb_5c : 55.95 -pb_10c : 55.90 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -55.99 -pb_1c : 55.99 -pb_5c : 55.95 -pb_10c : 55.90 -pb_25c : 55.75 -pb_1d : 55.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.00 -pb_1c : 56.00 -pb_5c : 56.00 -pb_10c : 56.00 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.01 -pb_1c : 56.01 -pb_5c : 56.00 -pb_10c : 56.00 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.02 -pb_1c : 56.02 -pb_5c : 56.00 -pb_10c : 56.00 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.03 -pb_1c : 56.03 -pb_5c : 56.00 -pb_10c : 56.00 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.04 -pb_1c : 56.04 -pb_5c : 56.00 -pb_10c : 56.00 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.05 -pb_1c : 56.05 -pb_5c : 56.05 -pb_10c : 56.00 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.06 -pb_1c : 56.06 -pb_5c : 56.05 -pb_10c : 56.00 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.07 -pb_1c : 56.07 -pb_5c : 56.05 -pb_10c : 56.00 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.08 -pb_1c : 56.08 -pb_5c : 56.05 -pb_10c : 56.00 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.09 -pb_1c : 56.09 -pb_5c : 56.05 -pb_10c : 56.00 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.10 -pb_1c : 56.10 -pb_5c : 56.10 -pb_10c : 56.10 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.11 -pb_1c : 56.11 -pb_5c : 56.10 -pb_10c : 56.10 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.12 -pb_1c : 56.12 -pb_5c : 56.10 -pb_10c : 56.10 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.13 -pb_1c : 56.13 -pb_5c : 56.10 -pb_10c : 56.10 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.14 -pb_1c : 56.14 -pb_5c : 56.10 -pb_10c : 56.10 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.15 -pb_1c : 56.15 -pb_5c : 56.15 -pb_10c : 56.10 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.16 -pb_1c : 56.16 -pb_5c : 56.15 -pb_10c : 56.10 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.17 -pb_1c : 56.17 -pb_5c : 56.15 -pb_10c : 56.10 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.18 -pb_1c : 56.18 -pb_5c : 56.15 -pb_10c : 56.10 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.19 -pb_1c : 56.19 -pb_5c : 56.15 -pb_10c : 56.10 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.20 -pb_1c : 56.20 -pb_5c : 56.20 -pb_10c : 56.20 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.21 -pb_1c : 56.21 -pb_5c : 56.20 -pb_10c : 56.20 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.22 -pb_1c : 56.22 -pb_5c : 56.20 -pb_10c : 56.20 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.23 -pb_1c : 56.23 -pb_5c : 56.20 -pb_10c : 56.20 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.24 -pb_1c : 56.24 -pb_5c : 56.20 -pb_10c : 56.20 -pb_25c : 56.00 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.25 -pb_1c : 56.25 -pb_5c : 56.25 -pb_10c : 56.20 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.26 -pb_1c : 56.26 -pb_5c : 56.25 -pb_10c : 56.20 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.27 -pb_1c : 56.27 -pb_5c : 56.25 -pb_10c : 56.20 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.28 -pb_1c : 56.28 -pb_5c : 56.25 -pb_10c : 56.20 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.29 -pb_1c : 56.29 -pb_5c : 56.25 -pb_10c : 56.20 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.30 -pb_1c : 56.30 -pb_5c : 56.30 -pb_10c : 56.30 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.31 -pb_1c : 56.31 -pb_5c : 56.30 -pb_10c : 56.30 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.32 -pb_1c : 56.32 -pb_5c : 56.30 -pb_10c : 56.30 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.33 -pb_1c : 56.33 -pb_5c : 56.30 -pb_10c : 56.30 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.34 -pb_1c : 56.34 -pb_5c : 56.30 -pb_10c : 56.30 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.35 -pb_1c : 56.35 -pb_5c : 56.35 -pb_10c : 56.30 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.36 -pb_1c : 56.36 -pb_5c : 56.35 -pb_10c : 56.30 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.37 -pb_1c : 56.37 -pb_5c : 56.35 -pb_10c : 56.30 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.38 -pb_1c : 56.38 -pb_5c : 56.35 -pb_10c : 56.30 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.39 -pb_1c : 56.39 -pb_5c : 56.35 -pb_10c : 56.30 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.40 -pb_1c : 56.40 -pb_5c : 56.40 -pb_10c : 56.40 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.41 -pb_1c : 56.41 -pb_5c : 56.40 -pb_10c : 56.40 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.42 -pb_1c : 56.42 -pb_5c : 56.40 -pb_10c : 56.40 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.43 -pb_1c : 56.43 -pb_5c : 56.40 -pb_10c : 56.40 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.44 -pb_1c : 56.44 -pb_5c : 56.40 -pb_10c : 56.40 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.45 -pb_1c : 56.45 -pb_5c : 56.45 -pb_10c : 56.40 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.46 -pb_1c : 56.46 -pb_5c : 56.45 -pb_10c : 56.40 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.47 -pb_1c : 56.47 -pb_5c : 56.45 -pb_10c : 56.40 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.48 -pb_1c : 56.48 -pb_5c : 56.45 -pb_10c : 56.40 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.49 -pb_1c : 56.49 -pb_5c : 56.45 -pb_10c : 56.40 -pb_25c : 56.25 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.50 -pb_1c : 56.50 -pb_5c : 56.50 -pb_10c : 56.50 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.51 -pb_1c : 56.51 -pb_5c : 56.50 -pb_10c : 56.50 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.52 -pb_1c : 56.52 -pb_5c : 56.50 -pb_10c : 56.50 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.53 -pb_1c : 56.53 -pb_5c : 56.50 -pb_10c : 56.50 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.54 -pb_1c : 56.54 -pb_5c : 56.50 -pb_10c : 56.50 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.55 -pb_1c : 56.55 -pb_5c : 56.55 -pb_10c : 56.50 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.56 -pb_1c : 56.56 -pb_5c : 56.55 -pb_10c : 56.50 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.57 -pb_1c : 56.57 -pb_5c : 56.55 -pb_10c : 56.50 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.58 -pb_1c : 56.58 -pb_5c : 56.55 -pb_10c : 56.50 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.59 -pb_1c : 56.59 -pb_5c : 56.55 -pb_10c : 56.50 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.60 -pb_1c : 56.60 -pb_5c : 56.60 -pb_10c : 56.60 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.61 -pb_1c : 56.61 -pb_5c : 56.60 -pb_10c : 56.60 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.62 -pb_1c : 56.62 -pb_5c : 56.60 -pb_10c : 56.60 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.63 -pb_1c : 56.63 -pb_5c : 56.60 -pb_10c : 56.60 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.64 -pb_1c : 56.64 -pb_5c : 56.60 -pb_10c : 56.60 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.65 -pb_1c : 56.65 -pb_5c : 56.65 -pb_10c : 56.60 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.66 -pb_1c : 56.66 -pb_5c : 56.65 -pb_10c : 56.60 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.67 -pb_1c : 56.67 -pb_5c : 56.65 -pb_10c : 56.60 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.68 -pb_1c : 56.68 -pb_5c : 56.65 -pb_10c : 56.60 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.69 -pb_1c : 56.69 -pb_5c : 56.65 -pb_10c : 56.60 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.70 -pb_1c : 56.70 -pb_5c : 56.70 -pb_10c : 56.70 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.71 -pb_1c : 56.71 -pb_5c : 56.70 -pb_10c : 56.70 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.72 -pb_1c : 56.72 -pb_5c : 56.70 -pb_10c : 56.70 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.73 -pb_1c : 56.73 -pb_5c : 56.70 -pb_10c : 56.70 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.74 -pb_1c : 56.74 -pb_5c : 56.70 -pb_10c : 56.70 -pb_25c : 56.50 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.75 -pb_1c : 56.75 -pb_5c : 56.75 -pb_10c : 56.70 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.76 -pb_1c : 56.76 -pb_5c : 56.75 -pb_10c : 56.70 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.77 -pb_1c : 56.77 -pb_5c : 56.75 -pb_10c : 56.70 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.78 -pb_1c : 56.78 -pb_5c : 56.75 -pb_10c : 56.70 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.79 -pb_1c : 56.79 -pb_5c : 56.75 -pb_10c : 56.70 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.80 -pb_1c : 56.80 -pb_5c : 56.80 -pb_10c : 56.80 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.81 -pb_1c : 56.81 -pb_5c : 56.80 -pb_10c : 56.80 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.82 -pb_1c : 56.82 -pb_5c : 56.80 -pb_10c : 56.80 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.83 -pb_1c : 56.83 -pb_5c : 56.80 -pb_10c : 56.80 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.84 -pb_1c : 56.84 -pb_5c : 56.80 -pb_10c : 56.80 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.85 -pb_1c : 56.85 -pb_5c : 56.85 -pb_10c : 56.80 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.86 -pb_1c : 56.86 -pb_5c : 56.85 -pb_10c : 56.80 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.87 -pb_1c : 56.87 -pb_5c : 56.85 -pb_10c : 56.80 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.88 -pb_1c : 56.88 -pb_5c : 56.85 -pb_10c : 56.80 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.89 -pb_1c : 56.89 -pb_5c : 56.85 -pb_10c : 56.80 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.90 -pb_1c : 56.90 -pb_5c : 56.90 -pb_10c : 56.90 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.91 -pb_1c : 56.91 -pb_5c : 56.90 -pb_10c : 56.90 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.92 -pb_1c : 56.92 -pb_5c : 56.90 -pb_10c : 56.90 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.93 -pb_1c : 56.93 -pb_5c : 56.90 -pb_10c : 56.90 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.94 -pb_1c : 56.94 -pb_5c : 56.90 -pb_10c : 56.90 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.95 -pb_1c : 56.95 -pb_5c : 56.95 -pb_10c : 56.90 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.96 -pb_1c : 56.96 -pb_5c : 56.95 -pb_10c : 56.90 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.97 -pb_1c : 56.97 -pb_5c : 56.95 -pb_10c : 56.90 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.98 -pb_1c : 56.98 -pb_5c : 56.95 -pb_10c : 56.90 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -56.99 -pb_1c : 56.99 -pb_5c : 56.95 -pb_10c : 56.90 -pb_25c : 56.75 -pb_1d : 56.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.00 -pb_1c : 57.00 -pb_5c : 57.00 -pb_10c : 57.00 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.01 -pb_1c : 57.01 -pb_5c : 57.00 -pb_10c : 57.00 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.02 -pb_1c : 57.02 -pb_5c : 57.00 -pb_10c : 57.00 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.03 -pb_1c : 57.03 -pb_5c : 57.00 -pb_10c : 57.00 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.04 -pb_1c : 57.04 -pb_5c : 57.00 -pb_10c : 57.00 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.05 -pb_1c : 57.05 -pb_5c : 57.05 -pb_10c : 57.00 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.06 -pb_1c : 57.06 -pb_5c : 57.05 -pb_10c : 57.00 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.07 -pb_1c : 57.07 -pb_5c : 57.05 -pb_10c : 57.00 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.08 -pb_1c : 57.08 -pb_5c : 57.05 -pb_10c : 57.00 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.09 -pb_1c : 57.09 -pb_5c : 57.05 -pb_10c : 57.00 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.10 -pb_1c : 57.10 -pb_5c : 57.10 -pb_10c : 57.10 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.11 -pb_1c : 57.11 -pb_5c : 57.10 -pb_10c : 57.10 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.12 -pb_1c : 57.12 -pb_5c : 57.10 -pb_10c : 57.10 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.13 -pb_1c : 57.13 -pb_5c : 57.10 -pb_10c : 57.10 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.14 -pb_1c : 57.14 -pb_5c : 57.10 -pb_10c : 57.10 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.15 -pb_1c : 57.15 -pb_5c : 57.15 -pb_10c : 57.10 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.16 -pb_1c : 57.16 -pb_5c : 57.15 -pb_10c : 57.10 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.17 -pb_1c : 57.17 -pb_5c : 57.15 -pb_10c : 57.10 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.18 -pb_1c : 57.18 -pb_5c : 57.15 -pb_10c : 57.10 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.19 -pb_1c : 57.19 -pb_5c : 57.15 -pb_10c : 57.10 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.20 -pb_1c : 57.20 -pb_5c : 57.20 -pb_10c : 57.20 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.21 -pb_1c : 57.21 -pb_5c : 57.20 -pb_10c : 57.20 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.22 -pb_1c : 57.22 -pb_5c : 57.20 -pb_10c : 57.20 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.23 -pb_1c : 57.23 -pb_5c : 57.20 -pb_10c : 57.20 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.24 -pb_1c : 57.24 -pb_5c : 57.20 -pb_10c : 57.20 -pb_25c : 57.00 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.25 -pb_1c : 57.25 -pb_5c : 57.25 -pb_10c : 57.20 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.26 -pb_1c : 57.26 -pb_5c : 57.25 -pb_10c : 57.20 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.27 -pb_1c : 57.27 -pb_5c : 57.25 -pb_10c : 57.20 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.28 -pb_1c : 57.28 -pb_5c : 57.25 -pb_10c : 57.20 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.29 -pb_1c : 57.29 -pb_5c : 57.25 -pb_10c : 57.20 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.30 -pb_1c : 57.30 -pb_5c : 57.30 -pb_10c : 57.30 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.31 -pb_1c : 57.31 -pb_5c : 57.30 -pb_10c : 57.30 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.32 -pb_1c : 57.32 -pb_5c : 57.30 -pb_10c : 57.30 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.33 -pb_1c : 57.33 -pb_5c : 57.30 -pb_10c : 57.30 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.34 -pb_1c : 57.34 -pb_5c : 57.30 -pb_10c : 57.30 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.35 -pb_1c : 57.35 -pb_5c : 57.35 -pb_10c : 57.30 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.36 -pb_1c : 57.36 -pb_5c : 57.35 -pb_10c : 57.30 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.37 -pb_1c : 57.37 -pb_5c : 57.35 -pb_10c : 57.30 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.38 -pb_1c : 57.38 -pb_5c : 57.35 -pb_10c : 57.30 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.39 -pb_1c : 57.39 -pb_5c : 57.35 -pb_10c : 57.30 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.40 -pb_1c : 57.40 -pb_5c : 57.40 -pb_10c : 57.40 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.41 -pb_1c : 57.41 -pb_5c : 57.40 -pb_10c : 57.40 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.42 -pb_1c : 57.42 -pb_5c : 57.40 -pb_10c : 57.40 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.43 -pb_1c : 57.43 -pb_5c : 57.40 -pb_10c : 57.40 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.44 -pb_1c : 57.44 -pb_5c : 57.40 -pb_10c : 57.40 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.45 -pb_1c : 57.45 -pb_5c : 57.45 -pb_10c : 57.40 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.46 -pb_1c : 57.46 -pb_5c : 57.45 -pb_10c : 57.40 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.47 -pb_1c : 57.47 -pb_5c : 57.45 -pb_10c : 57.40 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.48 -pb_1c : 57.48 -pb_5c : 57.45 -pb_10c : 57.40 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.49 -pb_1c : 57.49 -pb_5c : 57.45 -pb_10c : 57.40 -pb_25c : 57.25 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.50 -pb_1c : 57.50 -pb_5c : 57.50 -pb_10c : 57.50 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.51 -pb_1c : 57.51 -pb_5c : 57.50 -pb_10c : 57.50 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.52 -pb_1c : 57.52 -pb_5c : 57.50 -pb_10c : 57.50 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.53 -pb_1c : 57.53 -pb_5c : 57.50 -pb_10c : 57.50 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.54 -pb_1c : 57.54 -pb_5c : 57.50 -pb_10c : 57.50 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.55 -pb_1c : 57.55 -pb_5c : 57.55 -pb_10c : 57.50 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.56 -pb_1c : 57.56 -pb_5c : 57.55 -pb_10c : 57.50 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.57 -pb_1c : 57.57 -pb_5c : 57.55 -pb_10c : 57.50 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.58 -pb_1c : 57.58 -pb_5c : 57.55 -pb_10c : 57.50 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.59 -pb_1c : 57.59 -pb_5c : 57.55 -pb_10c : 57.50 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.60 -pb_1c : 57.60 -pb_5c : 57.60 -pb_10c : 57.60 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.61 -pb_1c : 57.61 -pb_5c : 57.60 -pb_10c : 57.60 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.62 -pb_1c : 57.62 -pb_5c : 57.60 -pb_10c : 57.60 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.63 -pb_1c : 57.63 -pb_5c : 57.60 -pb_10c : 57.60 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.64 -pb_1c : 57.64 -pb_5c : 57.60 -pb_10c : 57.60 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.65 -pb_1c : 57.65 -pb_5c : 57.65 -pb_10c : 57.60 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.66 -pb_1c : 57.66 -pb_5c : 57.65 -pb_10c : 57.60 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.67 -pb_1c : 57.67 -pb_5c : 57.65 -pb_10c : 57.60 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.68 -pb_1c : 57.68 -pb_5c : 57.65 -pb_10c : 57.60 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.69 -pb_1c : 57.69 -pb_5c : 57.65 -pb_10c : 57.60 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.70 -pb_1c : 57.70 -pb_5c : 57.70 -pb_10c : 57.70 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.71 -pb_1c : 57.71 -pb_5c : 57.70 -pb_10c : 57.70 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.72 -pb_1c : 57.72 -pb_5c : 57.70 -pb_10c : 57.70 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.73 -pb_1c : 57.73 -pb_5c : 57.70 -pb_10c : 57.70 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.74 -pb_1c : 57.74 -pb_5c : 57.70 -pb_10c : 57.70 -pb_25c : 57.50 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.75 -pb_1c : 57.75 -pb_5c : 57.75 -pb_10c : 57.70 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.76 -pb_1c : 57.76 -pb_5c : 57.75 -pb_10c : 57.70 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.77 -pb_1c : 57.77 -pb_5c : 57.75 -pb_10c : 57.70 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.78 -pb_1c : 57.78 -pb_5c : 57.75 -pb_10c : 57.70 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.79 -pb_1c : 57.79 -pb_5c : 57.75 -pb_10c : 57.70 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.80 -pb_1c : 57.80 -pb_5c : 57.80 -pb_10c : 57.80 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.81 -pb_1c : 57.81 -pb_5c : 57.80 -pb_10c : 57.80 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.82 -pb_1c : 57.82 -pb_5c : 57.80 -pb_10c : 57.80 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.83 -pb_1c : 57.83 -pb_5c : 57.80 -pb_10c : 57.80 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.84 -pb_1c : 57.84 -pb_5c : 57.80 -pb_10c : 57.80 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.85 -pb_1c : 57.85 -pb_5c : 57.85 -pb_10c : 57.80 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.86 -pb_1c : 57.86 -pb_5c : 57.85 -pb_10c : 57.80 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.87 -pb_1c : 57.87 -pb_5c : 57.85 -pb_10c : 57.80 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.88 -pb_1c : 57.88 -pb_5c : 57.85 -pb_10c : 57.80 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.89 -pb_1c : 57.89 -pb_5c : 57.85 -pb_10c : 57.80 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.90 -pb_1c : 57.90 -pb_5c : 57.90 -pb_10c : 57.90 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.91 -pb_1c : 57.91 -pb_5c : 57.90 -pb_10c : 57.90 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.92 -pb_1c : 57.92 -pb_5c : 57.90 -pb_10c : 57.90 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.93 -pb_1c : 57.93 -pb_5c : 57.90 -pb_10c : 57.90 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.94 -pb_1c : 57.94 -pb_5c : 57.90 -pb_10c : 57.90 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.95 -pb_1c : 57.95 -pb_5c : 57.95 -pb_10c : 57.90 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.96 -pb_1c : 57.96 -pb_5c : 57.95 -pb_10c : 57.90 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.97 -pb_1c : 57.97 -pb_5c : 57.95 -pb_10c : 57.90 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.98 -pb_1c : 57.98 -pb_5c : 57.95 -pb_10c : 57.90 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -57.99 -pb_1c : 57.99 -pb_5c : 57.95 -pb_10c : 57.90 -pb_25c : 57.75 -pb_1d : 57.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.00 -pb_1c : 58.00 -pb_5c : 58.00 -pb_10c : 58.00 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.01 -pb_1c : 58.01 -pb_5c : 58.00 -pb_10c : 58.00 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.02 -pb_1c : 58.02 -pb_5c : 58.00 -pb_10c : 58.00 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.03 -pb_1c : 58.03 -pb_5c : 58.00 -pb_10c : 58.00 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.04 -pb_1c : 58.04 -pb_5c : 58.00 -pb_10c : 58.00 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.05 -pb_1c : 58.05 -pb_5c : 58.05 -pb_10c : 58.00 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.06 -pb_1c : 58.06 -pb_5c : 58.05 -pb_10c : 58.00 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.07 -pb_1c : 58.07 -pb_5c : 58.05 -pb_10c : 58.00 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.08 -pb_1c : 58.08 -pb_5c : 58.05 -pb_10c : 58.00 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.09 -pb_1c : 58.09 -pb_5c : 58.05 -pb_10c : 58.00 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.10 -pb_1c : 58.10 -pb_5c : 58.10 -pb_10c : 58.10 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.11 -pb_1c : 58.11 -pb_5c : 58.10 -pb_10c : 58.10 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.12 -pb_1c : 58.12 -pb_5c : 58.10 -pb_10c : 58.10 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.13 -pb_1c : 58.13 -pb_5c : 58.10 -pb_10c : 58.10 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.14 -pb_1c : 58.14 -pb_5c : 58.10 -pb_10c : 58.10 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.15 -pb_1c : 58.15 -pb_5c : 58.15 -pb_10c : 58.10 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.16 -pb_1c : 58.16 -pb_5c : 58.15 -pb_10c : 58.10 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.17 -pb_1c : 58.17 -pb_5c : 58.15 -pb_10c : 58.10 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.18 -pb_1c : 58.18 -pb_5c : 58.15 -pb_10c : 58.10 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.19 -pb_1c : 58.19 -pb_5c : 58.15 -pb_10c : 58.10 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.20 -pb_1c : 58.20 -pb_5c : 58.20 -pb_10c : 58.20 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.21 -pb_1c : 58.21 -pb_5c : 58.20 -pb_10c : 58.20 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.22 -pb_1c : 58.22 -pb_5c : 58.20 -pb_10c : 58.20 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.23 -pb_1c : 58.23 -pb_5c : 58.20 -pb_10c : 58.20 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.24 -pb_1c : 58.24 -pb_5c : 58.20 -pb_10c : 58.20 -pb_25c : 58.00 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.25 -pb_1c : 58.25 -pb_5c : 58.25 -pb_10c : 58.20 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.26 -pb_1c : 58.26 -pb_5c : 58.25 -pb_10c : 58.20 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.27 -pb_1c : 58.27 -pb_5c : 58.25 -pb_10c : 58.20 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.28 -pb_1c : 58.28 -pb_5c : 58.25 -pb_10c : 58.20 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.29 -pb_1c : 58.29 -pb_5c : 58.25 -pb_10c : 58.20 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.30 -pb_1c : 58.30 -pb_5c : 58.30 -pb_10c : 58.30 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.31 -pb_1c : 58.31 -pb_5c : 58.30 -pb_10c : 58.30 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.32 -pb_1c : 58.32 -pb_5c : 58.30 -pb_10c : 58.30 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.33 -pb_1c : 58.33 -pb_5c : 58.30 -pb_10c : 58.30 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.34 -pb_1c : 58.34 -pb_5c : 58.30 -pb_10c : 58.30 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.35 -pb_1c : 58.35 -pb_5c : 58.35 -pb_10c : 58.30 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.36 -pb_1c : 58.36 -pb_5c : 58.35 -pb_10c : 58.30 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.37 -pb_1c : 58.37 -pb_5c : 58.35 -pb_10c : 58.30 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.38 -pb_1c : 58.38 -pb_5c : 58.35 -pb_10c : 58.30 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.39 -pb_1c : 58.39 -pb_5c : 58.35 -pb_10c : 58.30 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.40 -pb_1c : 58.40 -pb_5c : 58.40 -pb_10c : 58.40 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.41 -pb_1c : 58.41 -pb_5c : 58.40 -pb_10c : 58.40 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.42 -pb_1c : 58.42 -pb_5c : 58.40 -pb_10c : 58.40 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.43 -pb_1c : 58.43 -pb_5c : 58.40 -pb_10c : 58.40 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.44 -pb_1c : 58.44 -pb_5c : 58.40 -pb_10c : 58.40 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.45 -pb_1c : 58.45 -pb_5c : 58.45 -pb_10c : 58.40 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.46 -pb_1c : 58.46 -pb_5c : 58.45 -pb_10c : 58.40 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.47 -pb_1c : 58.47 -pb_5c : 58.45 -pb_10c : 58.40 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.48 -pb_1c : 58.48 -pb_5c : 58.45 -pb_10c : 58.40 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.49 -pb_1c : 58.49 -pb_5c : 58.45 -pb_10c : 58.40 -pb_25c : 58.25 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.50 -pb_1c : 58.50 -pb_5c : 58.50 -pb_10c : 58.50 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.51 -pb_1c : 58.51 -pb_5c : 58.50 -pb_10c : 58.50 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.52 -pb_1c : 58.52 -pb_5c : 58.50 -pb_10c : 58.50 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.53 -pb_1c : 58.53 -pb_5c : 58.50 -pb_10c : 58.50 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.54 -pb_1c : 58.54 -pb_5c : 58.50 -pb_10c : 58.50 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.55 -pb_1c : 58.55 -pb_5c : 58.55 -pb_10c : 58.50 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.56 -pb_1c : 58.56 -pb_5c : 58.55 -pb_10c : 58.50 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.57 -pb_1c : 58.57 -pb_5c : 58.55 -pb_10c : 58.50 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.58 -pb_1c : 58.58 -pb_5c : 58.55 -pb_10c : 58.50 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.59 -pb_1c : 58.59 -pb_5c : 58.55 -pb_10c : 58.50 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.60 -pb_1c : 58.60 -pb_5c : 58.60 -pb_10c : 58.60 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.61 -pb_1c : 58.61 -pb_5c : 58.60 -pb_10c : 58.60 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.62 -pb_1c : 58.62 -pb_5c : 58.60 -pb_10c : 58.60 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.63 -pb_1c : 58.63 -pb_5c : 58.60 -pb_10c : 58.60 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.64 -pb_1c : 58.64 -pb_5c : 58.60 -pb_10c : 58.60 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.65 -pb_1c : 58.65 -pb_5c : 58.65 -pb_10c : 58.60 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.66 -pb_1c : 58.66 -pb_5c : 58.65 -pb_10c : 58.60 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.67 -pb_1c : 58.67 -pb_5c : 58.65 -pb_10c : 58.60 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.68 -pb_1c : 58.68 -pb_5c : 58.65 -pb_10c : 58.60 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.69 -pb_1c : 58.69 -pb_5c : 58.65 -pb_10c : 58.60 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.70 -pb_1c : 58.70 -pb_5c : 58.70 -pb_10c : 58.70 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.71 -pb_1c : 58.71 -pb_5c : 58.70 -pb_10c : 58.70 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.72 -pb_1c : 58.72 -pb_5c : 58.70 -pb_10c : 58.70 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.73 -pb_1c : 58.73 -pb_5c : 58.70 -pb_10c : 58.70 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.74 -pb_1c : 58.74 -pb_5c : 58.70 -pb_10c : 58.70 -pb_25c : 58.50 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.75 -pb_1c : 58.75 -pb_5c : 58.75 -pb_10c : 58.70 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.76 -pb_1c : 58.76 -pb_5c : 58.75 -pb_10c : 58.70 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.77 -pb_1c : 58.77 -pb_5c : 58.75 -pb_10c : 58.70 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.78 -pb_1c : 58.78 -pb_5c : 58.75 -pb_10c : 58.70 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.79 -pb_1c : 58.79 -pb_5c : 58.75 -pb_10c : 58.70 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.80 -pb_1c : 58.80 -pb_5c : 58.80 -pb_10c : 58.80 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.81 -pb_1c : 58.81 -pb_5c : 58.80 -pb_10c : 58.80 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.82 -pb_1c : 58.82 -pb_5c : 58.80 -pb_10c : 58.80 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.83 -pb_1c : 58.83 -pb_5c : 58.80 -pb_10c : 58.80 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.84 -pb_1c : 58.84 -pb_5c : 58.80 -pb_10c : 58.80 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.85 -pb_1c : 58.85 -pb_5c : 58.85 -pb_10c : 58.80 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.86 -pb_1c : 58.86 -pb_5c : 58.85 -pb_10c : 58.80 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.87 -pb_1c : 58.87 -pb_5c : 58.85 -pb_10c : 58.80 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.88 -pb_1c : 58.88 -pb_5c : 58.85 -pb_10c : 58.80 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.89 -pb_1c : 58.89 -pb_5c : 58.85 -pb_10c : 58.80 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.90 -pb_1c : 58.90 -pb_5c : 58.90 -pb_10c : 58.90 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.91 -pb_1c : 58.91 -pb_5c : 58.90 -pb_10c : 58.90 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.92 -pb_1c : 58.92 -pb_5c : 58.90 -pb_10c : 58.90 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.93 -pb_1c : 58.93 -pb_5c : 58.90 -pb_10c : 58.90 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.94 -pb_1c : 58.94 -pb_5c : 58.90 -pb_10c : 58.90 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.95 -pb_1c : 58.95 -pb_5c : 58.95 -pb_10c : 58.90 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.96 -pb_1c : 58.96 -pb_5c : 58.95 -pb_10c : 58.90 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.97 -pb_1c : 58.97 -pb_5c : 58.95 -pb_10c : 58.90 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.98 -pb_1c : 58.98 -pb_5c : 58.95 -pb_10c : 58.90 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -58.99 -pb_1c : 58.99 -pb_5c : 58.95 -pb_10c : 58.90 -pb_25c : 58.75 -pb_1d : 58.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.00 -pb_1c : 59.00 -pb_5c : 59.00 -pb_10c : 59.00 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.01 -pb_1c : 59.01 -pb_5c : 59.00 -pb_10c : 59.00 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.02 -pb_1c : 59.02 -pb_5c : 59.00 -pb_10c : 59.00 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.03 -pb_1c : 59.03 -pb_5c : 59.00 -pb_10c : 59.00 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.04 -pb_1c : 59.04 -pb_5c : 59.00 -pb_10c : 59.00 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.05 -pb_1c : 59.05 -pb_5c : 59.05 -pb_10c : 59.00 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.06 -pb_1c : 59.06 -pb_5c : 59.05 -pb_10c : 59.00 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.07 -pb_1c : 59.07 -pb_5c : 59.05 -pb_10c : 59.00 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.08 -pb_1c : 59.08 -pb_5c : 59.05 -pb_10c : 59.00 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.09 -pb_1c : 59.09 -pb_5c : 59.05 -pb_10c : 59.00 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.10 -pb_1c : 59.10 -pb_5c : 59.10 -pb_10c : 59.10 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.11 -pb_1c : 59.11 -pb_5c : 59.10 -pb_10c : 59.10 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.12 -pb_1c : 59.12 -pb_5c : 59.10 -pb_10c : 59.10 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.13 -pb_1c : 59.13 -pb_5c : 59.10 -pb_10c : 59.10 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.14 -pb_1c : 59.14 -pb_5c : 59.10 -pb_10c : 59.10 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.15 -pb_1c : 59.15 -pb_5c : 59.15 -pb_10c : 59.10 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.16 -pb_1c : 59.16 -pb_5c : 59.15 -pb_10c : 59.10 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.17 -pb_1c : 59.17 -pb_5c : 59.15 -pb_10c : 59.10 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.18 -pb_1c : 59.18 -pb_5c : 59.15 -pb_10c : 59.10 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.19 -pb_1c : 59.19 -pb_5c : 59.15 -pb_10c : 59.10 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.20 -pb_1c : 59.20 -pb_5c : 59.20 -pb_10c : 59.20 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.21 -pb_1c : 59.21 -pb_5c : 59.20 -pb_10c : 59.20 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.22 -pb_1c : 59.22 -pb_5c : 59.20 -pb_10c : 59.20 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.23 -pb_1c : 59.23 -pb_5c : 59.20 -pb_10c : 59.20 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.24 -pb_1c : 59.24 -pb_5c : 59.20 -pb_10c : 59.20 -pb_25c : 59.00 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.25 -pb_1c : 59.25 -pb_5c : 59.25 -pb_10c : 59.20 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.26 -pb_1c : 59.26 -pb_5c : 59.25 -pb_10c : 59.20 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.27 -pb_1c : 59.27 -pb_5c : 59.25 -pb_10c : 59.20 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.28 -pb_1c : 59.28 -pb_5c : 59.25 -pb_10c : 59.20 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.29 -pb_1c : 59.29 -pb_5c : 59.25 -pb_10c : 59.20 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.30 -pb_1c : 59.30 -pb_5c : 59.30 -pb_10c : 59.30 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.31 -pb_1c : 59.31 -pb_5c : 59.30 -pb_10c : 59.30 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.32 -pb_1c : 59.32 -pb_5c : 59.30 -pb_10c : 59.30 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.33 -pb_1c : 59.33 -pb_5c : 59.30 -pb_10c : 59.30 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.34 -pb_1c : 59.34 -pb_5c : 59.30 -pb_10c : 59.30 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.35 -pb_1c : 59.35 -pb_5c : 59.35 -pb_10c : 59.30 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.36 -pb_1c : 59.36 -pb_5c : 59.35 -pb_10c : 59.30 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.37 -pb_1c : 59.37 -pb_5c : 59.35 -pb_10c : 59.30 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.38 -pb_1c : 59.38 -pb_5c : 59.35 -pb_10c : 59.30 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.39 -pb_1c : 59.39 -pb_5c : 59.35 -pb_10c : 59.30 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.40 -pb_1c : 59.40 -pb_5c : 59.40 -pb_10c : 59.40 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.41 -pb_1c : 59.41 -pb_5c : 59.40 -pb_10c : 59.40 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.42 -pb_1c : 59.42 -pb_5c : 59.40 -pb_10c : 59.40 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.43 -pb_1c : 59.43 -pb_5c : 59.40 -pb_10c : 59.40 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.44 -pb_1c : 59.44 -pb_5c : 59.40 -pb_10c : 59.40 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.45 -pb_1c : 59.45 -pb_5c : 59.45 -pb_10c : 59.40 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.46 -pb_1c : 59.46 -pb_5c : 59.45 -pb_10c : 59.40 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.47 -pb_1c : 59.47 -pb_5c : 59.45 -pb_10c : 59.40 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.48 -pb_1c : 59.48 -pb_5c : 59.45 -pb_10c : 59.40 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.49 -pb_1c : 59.49 -pb_5c : 59.45 -pb_10c : 59.40 -pb_25c : 59.25 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.50 -pb_1c : 59.50 -pb_5c : 59.50 -pb_10c : 59.50 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.51 -pb_1c : 59.51 -pb_5c : 59.50 -pb_10c : 59.50 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.52 -pb_1c : 59.52 -pb_5c : 59.50 -pb_10c : 59.50 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.53 -pb_1c : 59.53 -pb_5c : 59.50 -pb_10c : 59.50 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.54 -pb_1c : 59.54 -pb_5c : 59.50 -pb_10c : 59.50 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.55 -pb_1c : 59.55 -pb_5c : 59.55 -pb_10c : 59.50 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.56 -pb_1c : 59.56 -pb_5c : 59.55 -pb_10c : 59.50 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.57 -pb_1c : 59.57 -pb_5c : 59.55 -pb_10c : 59.50 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.58 -pb_1c : 59.58 -pb_5c : 59.55 -pb_10c : 59.50 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.59 -pb_1c : 59.59 -pb_5c : 59.55 -pb_10c : 59.50 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.60 -pb_1c : 59.60 -pb_5c : 59.60 -pb_10c : 59.60 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.61 -pb_1c : 59.61 -pb_5c : 59.60 -pb_10c : 59.60 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.62 -pb_1c : 59.62 -pb_5c : 59.60 -pb_10c : 59.60 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.63 -pb_1c : 59.63 -pb_5c : 59.60 -pb_10c : 59.60 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.64 -pb_1c : 59.64 -pb_5c : 59.60 -pb_10c : 59.60 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.65 -pb_1c : 59.65 -pb_5c : 59.65 -pb_10c : 59.60 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.66 -pb_1c : 59.66 -pb_5c : 59.65 -pb_10c : 59.60 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.67 -pb_1c : 59.67 -pb_5c : 59.65 -pb_10c : 59.60 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.68 -pb_1c : 59.68 -pb_5c : 59.65 -pb_10c : 59.60 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.69 -pb_1c : 59.69 -pb_5c : 59.65 -pb_10c : 59.60 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.70 -pb_1c : 59.70 -pb_5c : 59.70 -pb_10c : 59.70 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.71 -pb_1c : 59.71 -pb_5c : 59.70 -pb_10c : 59.70 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.72 -pb_1c : 59.72 -pb_5c : 59.70 -pb_10c : 59.70 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.73 -pb_1c : 59.73 -pb_5c : 59.70 -pb_10c : 59.70 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.74 -pb_1c : 59.74 -pb_5c : 59.70 -pb_10c : 59.70 -pb_25c : 59.50 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.75 -pb_1c : 59.75 -pb_5c : 59.75 -pb_10c : 59.70 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.76 -pb_1c : 59.76 -pb_5c : 59.75 -pb_10c : 59.70 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.77 -pb_1c : 59.77 -pb_5c : 59.75 -pb_10c : 59.70 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.78 -pb_1c : 59.78 -pb_5c : 59.75 -pb_10c : 59.70 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.79 -pb_1c : 59.79 -pb_5c : 59.75 -pb_10c : 59.70 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.80 -pb_1c : 59.80 -pb_5c : 59.80 -pb_10c : 59.80 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.81 -pb_1c : 59.81 -pb_5c : 59.80 -pb_10c : 59.80 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.82 -pb_1c : 59.82 -pb_5c : 59.80 -pb_10c : 59.80 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.83 -pb_1c : 59.83 -pb_5c : 59.80 -pb_10c : 59.80 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.84 -pb_1c : 59.84 -pb_5c : 59.80 -pb_10c : 59.80 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.85 -pb_1c : 59.85 -pb_5c : 59.85 -pb_10c : 59.80 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.86 -pb_1c : 59.86 -pb_5c : 59.85 -pb_10c : 59.80 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.87 -pb_1c : 59.87 -pb_5c : 59.85 -pb_10c : 59.80 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.88 -pb_1c : 59.88 -pb_5c : 59.85 -pb_10c : 59.80 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.89 -pb_1c : 59.89 -pb_5c : 59.85 -pb_10c : 59.80 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.90 -pb_1c : 59.90 -pb_5c : 59.90 -pb_10c : 59.90 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.91 -pb_1c : 59.91 -pb_5c : 59.90 -pb_10c : 59.90 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.92 -pb_1c : 59.92 -pb_5c : 59.90 -pb_10c : 59.90 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.93 -pb_1c : 59.93 -pb_5c : 59.90 -pb_10c : 59.90 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.94 -pb_1c : 59.94 -pb_5c : 59.90 -pb_10c : 59.90 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.95 -pb_1c : 59.95 -pb_5c : 59.95 -pb_10c : 59.90 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.96 -pb_1c : 59.96 -pb_5c : 59.95 -pb_10c : 59.90 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.97 -pb_1c : 59.97 -pb_5c : 59.95 -pb_10c : 59.90 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.98 -pb_1c : 59.98 -pb_5c : 59.95 -pb_10c : 59.90 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -59.99 -pb_1c : 59.99 -pb_5c : 59.95 -pb_10c : 59.90 -pb_25c : 59.75 -pb_1d : 59.00 -pb_5d : 55.00 -pb_10d : 50.00 - -60.00 -pb_1c : 60.00 -pb_5c : 60.00 -pb_10c : 60.00 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.01 -pb_1c : 60.01 -pb_5c : 60.00 -pb_10c : 60.00 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.02 -pb_1c : 60.02 -pb_5c : 60.00 -pb_10c : 60.00 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.03 -pb_1c : 60.03 -pb_5c : 60.00 -pb_10c : 60.00 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.04 -pb_1c : 60.04 -pb_5c : 60.00 -pb_10c : 60.00 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.05 -pb_1c : 60.05 -pb_5c : 60.05 -pb_10c : 60.00 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.06 -pb_1c : 60.06 -pb_5c : 60.05 -pb_10c : 60.00 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.07 -pb_1c : 60.07 -pb_5c : 60.05 -pb_10c : 60.00 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.08 -pb_1c : 60.08 -pb_5c : 60.05 -pb_10c : 60.00 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.09 -pb_1c : 60.09 -pb_5c : 60.05 -pb_10c : 60.00 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.10 -pb_1c : 60.10 -pb_5c : 60.10 -pb_10c : 60.10 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.11 -pb_1c : 60.11 -pb_5c : 60.10 -pb_10c : 60.10 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.12 -pb_1c : 60.12 -pb_5c : 60.10 -pb_10c : 60.10 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.13 -pb_1c : 60.13 -pb_5c : 60.10 -pb_10c : 60.10 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.14 -pb_1c : 60.14 -pb_5c : 60.10 -pb_10c : 60.10 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.15 -pb_1c : 60.15 -pb_5c : 60.15 -pb_10c : 60.10 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.16 -pb_1c : 60.16 -pb_5c : 60.15 -pb_10c : 60.10 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.17 -pb_1c : 60.17 -pb_5c : 60.15 -pb_10c : 60.10 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.18 -pb_1c : 60.18 -pb_5c : 60.15 -pb_10c : 60.10 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.19 -pb_1c : 60.19 -pb_5c : 60.15 -pb_10c : 60.10 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.20 -pb_1c : 60.20 -pb_5c : 60.20 -pb_10c : 60.20 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.21 -pb_1c : 60.21 -pb_5c : 60.20 -pb_10c : 60.20 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.22 -pb_1c : 60.22 -pb_5c : 60.20 -pb_10c : 60.20 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.23 -pb_1c : 60.23 -pb_5c : 60.20 -pb_10c : 60.20 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.24 -pb_1c : 60.24 -pb_5c : 60.20 -pb_10c : 60.20 -pb_25c : 60.00 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.25 -pb_1c : 60.25 -pb_5c : 60.25 -pb_10c : 60.20 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.26 -pb_1c : 60.26 -pb_5c : 60.25 -pb_10c : 60.20 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.27 -pb_1c : 60.27 -pb_5c : 60.25 -pb_10c : 60.20 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.28 -pb_1c : 60.28 -pb_5c : 60.25 -pb_10c : 60.20 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.29 -pb_1c : 60.29 -pb_5c : 60.25 -pb_10c : 60.20 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.30 -pb_1c : 60.30 -pb_5c : 60.30 -pb_10c : 60.30 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.31 -pb_1c : 60.31 -pb_5c : 60.30 -pb_10c : 60.30 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.32 -pb_1c : 60.32 -pb_5c : 60.30 -pb_10c : 60.30 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.33 -pb_1c : 60.33 -pb_5c : 60.30 -pb_10c : 60.30 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.34 -pb_1c : 60.34 -pb_5c : 60.30 -pb_10c : 60.30 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.35 -pb_1c : 60.35 -pb_5c : 60.35 -pb_10c : 60.30 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.36 -pb_1c : 60.36 -pb_5c : 60.35 -pb_10c : 60.30 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.37 -pb_1c : 60.37 -pb_5c : 60.35 -pb_10c : 60.30 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.38 -pb_1c : 60.38 -pb_5c : 60.35 -pb_10c : 60.30 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.39 -pb_1c : 60.39 -pb_5c : 60.35 -pb_10c : 60.30 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.40 -pb_1c : 60.40 -pb_5c : 60.40 -pb_10c : 60.40 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.41 -pb_1c : 60.41 -pb_5c : 60.40 -pb_10c : 60.40 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.42 -pb_1c : 60.42 -pb_5c : 60.40 -pb_10c : 60.40 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.43 -pb_1c : 60.43 -pb_5c : 60.40 -pb_10c : 60.40 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.44 -pb_1c : 60.44 -pb_5c : 60.40 -pb_10c : 60.40 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.45 -pb_1c : 60.45 -pb_5c : 60.45 -pb_10c : 60.40 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.46 -pb_1c : 60.46 -pb_5c : 60.45 -pb_10c : 60.40 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.47 -pb_1c : 60.47 -pb_5c : 60.45 -pb_10c : 60.40 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.48 -pb_1c : 60.48 -pb_5c : 60.45 -pb_10c : 60.40 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.49 -pb_1c : 60.49 -pb_5c : 60.45 -pb_10c : 60.40 -pb_25c : 60.25 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.50 -pb_1c : 60.50 -pb_5c : 60.50 -pb_10c : 60.50 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.51 -pb_1c : 60.51 -pb_5c : 60.50 -pb_10c : 60.50 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.52 -pb_1c : 60.52 -pb_5c : 60.50 -pb_10c : 60.50 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.53 -pb_1c : 60.53 -pb_5c : 60.50 -pb_10c : 60.50 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.54 -pb_1c : 60.54 -pb_5c : 60.50 -pb_10c : 60.50 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.55 -pb_1c : 60.55 -pb_5c : 60.55 -pb_10c : 60.50 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.56 -pb_1c : 60.56 -pb_5c : 60.55 -pb_10c : 60.50 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.57 -pb_1c : 60.57 -pb_5c : 60.55 -pb_10c : 60.50 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.58 -pb_1c : 60.58 -pb_5c : 60.55 -pb_10c : 60.50 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.59 -pb_1c : 60.59 -pb_5c : 60.55 -pb_10c : 60.50 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.60 -pb_1c : 60.60 -pb_5c : 60.60 -pb_10c : 60.60 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.61 -pb_1c : 60.61 -pb_5c : 60.60 -pb_10c : 60.60 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.62 -pb_1c : 60.62 -pb_5c : 60.60 -pb_10c : 60.60 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.63 -pb_1c : 60.63 -pb_5c : 60.60 -pb_10c : 60.60 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.64 -pb_1c : 60.64 -pb_5c : 60.60 -pb_10c : 60.60 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.65 -pb_1c : 60.65 -pb_5c : 60.65 -pb_10c : 60.60 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.66 -pb_1c : 60.66 -pb_5c : 60.65 -pb_10c : 60.60 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.67 -pb_1c : 60.67 -pb_5c : 60.65 -pb_10c : 60.60 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.68 -pb_1c : 60.68 -pb_5c : 60.65 -pb_10c : 60.60 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.69 -pb_1c : 60.69 -pb_5c : 60.65 -pb_10c : 60.60 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.70 -pb_1c : 60.70 -pb_5c : 60.70 -pb_10c : 60.70 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.71 -pb_1c : 60.71 -pb_5c : 60.70 -pb_10c : 60.70 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.72 -pb_1c : 60.72 -pb_5c : 60.70 -pb_10c : 60.70 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.73 -pb_1c : 60.73 -pb_5c : 60.70 -pb_10c : 60.70 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.74 -pb_1c : 60.74 -pb_5c : 60.70 -pb_10c : 60.70 -pb_25c : 60.50 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.75 -pb_1c : 60.75 -pb_5c : 60.75 -pb_10c : 60.70 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.76 -pb_1c : 60.76 -pb_5c : 60.75 -pb_10c : 60.70 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.77 -pb_1c : 60.77 -pb_5c : 60.75 -pb_10c : 60.70 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.78 -pb_1c : 60.78 -pb_5c : 60.75 -pb_10c : 60.70 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.79 -pb_1c : 60.79 -pb_5c : 60.75 -pb_10c : 60.70 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.80 -pb_1c : 60.80 -pb_5c : 60.80 -pb_10c : 60.80 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.81 -pb_1c : 60.81 -pb_5c : 60.80 -pb_10c : 60.80 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.82 -pb_1c : 60.82 -pb_5c : 60.80 -pb_10c : 60.80 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.83 -pb_1c : 60.83 -pb_5c : 60.80 -pb_10c : 60.80 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.84 -pb_1c : 60.84 -pb_5c : 60.80 -pb_10c : 60.80 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.85 -pb_1c : 60.85 -pb_5c : 60.85 -pb_10c : 60.80 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.86 -pb_1c : 60.86 -pb_5c : 60.85 -pb_10c : 60.80 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.87 -pb_1c : 60.87 -pb_5c : 60.85 -pb_10c : 60.80 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.88 -pb_1c : 60.88 -pb_5c : 60.85 -pb_10c : 60.80 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.89 -pb_1c : 60.89 -pb_5c : 60.85 -pb_10c : 60.80 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.90 -pb_1c : 60.90 -pb_5c : 60.90 -pb_10c : 60.90 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.91 -pb_1c : 60.91 -pb_5c : 60.90 -pb_10c : 60.90 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.92 -pb_1c : 60.92 -pb_5c : 60.90 -pb_10c : 60.90 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.93 -pb_1c : 60.93 -pb_5c : 60.90 -pb_10c : 60.90 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.94 -pb_1c : 60.94 -pb_5c : 60.90 -pb_10c : 60.90 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.95 -pb_1c : 60.95 -pb_5c : 60.95 -pb_10c : 60.90 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.96 -pb_1c : 60.96 -pb_5c : 60.95 -pb_10c : 60.90 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.97 -pb_1c : 60.97 -pb_5c : 60.95 -pb_10c : 60.90 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.98 -pb_1c : 60.98 -pb_5c : 60.95 -pb_10c : 60.90 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -60.99 -pb_1c : 60.99 -pb_5c : 60.95 -pb_10c : 60.90 -pb_25c : 60.75 -pb_1d : 60.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.00 -pb_1c : 61.00 -pb_5c : 61.00 -pb_10c : 61.00 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.01 -pb_1c : 61.01 -pb_5c : 61.00 -pb_10c : 61.00 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.02 -pb_1c : 61.02 -pb_5c : 61.00 -pb_10c : 61.00 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.03 -pb_1c : 61.03 -pb_5c : 61.00 -pb_10c : 61.00 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.04 -pb_1c : 61.04 -pb_5c : 61.00 -pb_10c : 61.00 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.05 -pb_1c : 61.05 -pb_5c : 61.05 -pb_10c : 61.00 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.06 -pb_1c : 61.06 -pb_5c : 61.05 -pb_10c : 61.00 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.07 -pb_1c : 61.07 -pb_5c : 61.05 -pb_10c : 61.00 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.08 -pb_1c : 61.08 -pb_5c : 61.05 -pb_10c : 61.00 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.09 -pb_1c : 61.09 -pb_5c : 61.05 -pb_10c : 61.00 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.10 -pb_1c : 61.10 -pb_5c : 61.10 -pb_10c : 61.10 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.11 -pb_1c : 61.11 -pb_5c : 61.10 -pb_10c : 61.10 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.12 -pb_1c : 61.12 -pb_5c : 61.10 -pb_10c : 61.10 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.13 -pb_1c : 61.13 -pb_5c : 61.10 -pb_10c : 61.10 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.14 -pb_1c : 61.14 -pb_5c : 61.10 -pb_10c : 61.10 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.15 -pb_1c : 61.15 -pb_5c : 61.15 -pb_10c : 61.10 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.16 -pb_1c : 61.16 -pb_5c : 61.15 -pb_10c : 61.10 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.17 -pb_1c : 61.17 -pb_5c : 61.15 -pb_10c : 61.10 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.18 -pb_1c : 61.18 -pb_5c : 61.15 -pb_10c : 61.10 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.19 -pb_1c : 61.19 -pb_5c : 61.15 -pb_10c : 61.10 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.20 -pb_1c : 61.20 -pb_5c : 61.20 -pb_10c : 61.20 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.21 -pb_1c : 61.21 -pb_5c : 61.20 -pb_10c : 61.20 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.22 -pb_1c : 61.22 -pb_5c : 61.20 -pb_10c : 61.20 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.23 -pb_1c : 61.23 -pb_5c : 61.20 -pb_10c : 61.20 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.24 -pb_1c : 61.24 -pb_5c : 61.20 -pb_10c : 61.20 -pb_25c : 61.00 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.25 -pb_1c : 61.25 -pb_5c : 61.25 -pb_10c : 61.20 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.26 -pb_1c : 61.26 -pb_5c : 61.25 -pb_10c : 61.20 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.27 -pb_1c : 61.27 -pb_5c : 61.25 -pb_10c : 61.20 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.28 -pb_1c : 61.28 -pb_5c : 61.25 -pb_10c : 61.20 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.29 -pb_1c : 61.29 -pb_5c : 61.25 -pb_10c : 61.20 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.30 -pb_1c : 61.30 -pb_5c : 61.30 -pb_10c : 61.30 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.31 -pb_1c : 61.31 -pb_5c : 61.30 -pb_10c : 61.30 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.32 -pb_1c : 61.32 -pb_5c : 61.30 -pb_10c : 61.30 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.33 -pb_1c : 61.33 -pb_5c : 61.30 -pb_10c : 61.30 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.34 -pb_1c : 61.34 -pb_5c : 61.30 -pb_10c : 61.30 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.35 -pb_1c : 61.35 -pb_5c : 61.35 -pb_10c : 61.30 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.36 -pb_1c : 61.36 -pb_5c : 61.35 -pb_10c : 61.30 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.37 -pb_1c : 61.37 -pb_5c : 61.35 -pb_10c : 61.30 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.38 -pb_1c : 61.38 -pb_5c : 61.35 -pb_10c : 61.30 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.39 -pb_1c : 61.39 -pb_5c : 61.35 -pb_10c : 61.30 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.40 -pb_1c : 61.40 -pb_5c : 61.40 -pb_10c : 61.40 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.41 -pb_1c : 61.41 -pb_5c : 61.40 -pb_10c : 61.40 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.42 -pb_1c : 61.42 -pb_5c : 61.40 -pb_10c : 61.40 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.43 -pb_1c : 61.43 -pb_5c : 61.40 -pb_10c : 61.40 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.44 -pb_1c : 61.44 -pb_5c : 61.40 -pb_10c : 61.40 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.45 -pb_1c : 61.45 -pb_5c : 61.45 -pb_10c : 61.40 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.46 -pb_1c : 61.46 -pb_5c : 61.45 -pb_10c : 61.40 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.47 -pb_1c : 61.47 -pb_5c : 61.45 -pb_10c : 61.40 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.48 -pb_1c : 61.48 -pb_5c : 61.45 -pb_10c : 61.40 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.49 -pb_1c : 61.49 -pb_5c : 61.45 -pb_10c : 61.40 -pb_25c : 61.25 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.50 -pb_1c : 61.50 -pb_5c : 61.50 -pb_10c : 61.50 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.51 -pb_1c : 61.51 -pb_5c : 61.50 -pb_10c : 61.50 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.52 -pb_1c : 61.52 -pb_5c : 61.50 -pb_10c : 61.50 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.53 -pb_1c : 61.53 -pb_5c : 61.50 -pb_10c : 61.50 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.54 -pb_1c : 61.54 -pb_5c : 61.50 -pb_10c : 61.50 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.55 -pb_1c : 61.55 -pb_5c : 61.55 -pb_10c : 61.50 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.56 -pb_1c : 61.56 -pb_5c : 61.55 -pb_10c : 61.50 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.57 -pb_1c : 61.57 -pb_5c : 61.55 -pb_10c : 61.50 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.58 -pb_1c : 61.58 -pb_5c : 61.55 -pb_10c : 61.50 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.59 -pb_1c : 61.59 -pb_5c : 61.55 -pb_10c : 61.50 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.60 -pb_1c : 61.60 -pb_5c : 61.60 -pb_10c : 61.60 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.61 -pb_1c : 61.61 -pb_5c : 61.60 -pb_10c : 61.60 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.62 -pb_1c : 61.62 -pb_5c : 61.60 -pb_10c : 61.60 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.63 -pb_1c : 61.63 -pb_5c : 61.60 -pb_10c : 61.60 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.64 -pb_1c : 61.64 -pb_5c : 61.60 -pb_10c : 61.60 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.65 -pb_1c : 61.65 -pb_5c : 61.65 -pb_10c : 61.60 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.66 -pb_1c : 61.66 -pb_5c : 61.65 -pb_10c : 61.60 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.67 -pb_1c : 61.67 -pb_5c : 61.65 -pb_10c : 61.60 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.68 -pb_1c : 61.68 -pb_5c : 61.65 -pb_10c : 61.60 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.69 -pb_1c : 61.69 -pb_5c : 61.65 -pb_10c : 61.60 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.70 -pb_1c : 61.70 -pb_5c : 61.70 -pb_10c : 61.70 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.71 -pb_1c : 61.71 -pb_5c : 61.70 -pb_10c : 61.70 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.72 -pb_1c : 61.72 -pb_5c : 61.70 -pb_10c : 61.70 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.73 -pb_1c : 61.73 -pb_5c : 61.70 -pb_10c : 61.70 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.74 -pb_1c : 61.74 -pb_5c : 61.70 -pb_10c : 61.70 -pb_25c : 61.50 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.75 -pb_1c : 61.75 -pb_5c : 61.75 -pb_10c : 61.70 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.76 -pb_1c : 61.76 -pb_5c : 61.75 -pb_10c : 61.70 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.77 -pb_1c : 61.77 -pb_5c : 61.75 -pb_10c : 61.70 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.78 -pb_1c : 61.78 -pb_5c : 61.75 -pb_10c : 61.70 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.79 -pb_1c : 61.79 -pb_5c : 61.75 -pb_10c : 61.70 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.80 -pb_1c : 61.80 -pb_5c : 61.80 -pb_10c : 61.80 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.81 -pb_1c : 61.81 -pb_5c : 61.80 -pb_10c : 61.80 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.82 -pb_1c : 61.82 -pb_5c : 61.80 -pb_10c : 61.80 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.83 -pb_1c : 61.83 -pb_5c : 61.80 -pb_10c : 61.80 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.84 -pb_1c : 61.84 -pb_5c : 61.80 -pb_10c : 61.80 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.85 -pb_1c : 61.85 -pb_5c : 61.85 -pb_10c : 61.80 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.86 -pb_1c : 61.86 -pb_5c : 61.85 -pb_10c : 61.80 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.87 -pb_1c : 61.87 -pb_5c : 61.85 -pb_10c : 61.80 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.88 -pb_1c : 61.88 -pb_5c : 61.85 -pb_10c : 61.80 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.89 -pb_1c : 61.89 -pb_5c : 61.85 -pb_10c : 61.80 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.90 -pb_1c : 61.90 -pb_5c : 61.90 -pb_10c : 61.90 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.91 -pb_1c : 61.91 -pb_5c : 61.90 -pb_10c : 61.90 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.92 -pb_1c : 61.92 -pb_5c : 61.90 -pb_10c : 61.90 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.93 -pb_1c : 61.93 -pb_5c : 61.90 -pb_10c : 61.90 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.94 -pb_1c : 61.94 -pb_5c : 61.90 -pb_10c : 61.90 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.95 -pb_1c : 61.95 -pb_5c : 61.95 -pb_10c : 61.90 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.96 -pb_1c : 61.96 -pb_5c : 61.95 -pb_10c : 61.90 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.97 -pb_1c : 61.97 -pb_5c : 61.95 -pb_10c : 61.90 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.98 -pb_1c : 61.98 -pb_5c : 61.95 -pb_10c : 61.90 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -61.99 -pb_1c : 61.99 -pb_5c : 61.95 -pb_10c : 61.90 -pb_25c : 61.75 -pb_1d : 61.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.00 -pb_1c : 62.00 -pb_5c : 62.00 -pb_10c : 62.00 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.01 -pb_1c : 62.01 -pb_5c : 62.00 -pb_10c : 62.00 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.02 -pb_1c : 62.02 -pb_5c : 62.00 -pb_10c : 62.00 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.03 -pb_1c : 62.03 -pb_5c : 62.00 -pb_10c : 62.00 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.04 -pb_1c : 62.04 -pb_5c : 62.00 -pb_10c : 62.00 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.05 -pb_1c : 62.05 -pb_5c : 62.05 -pb_10c : 62.00 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.06 -pb_1c : 62.06 -pb_5c : 62.05 -pb_10c : 62.00 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.07 -pb_1c : 62.07 -pb_5c : 62.05 -pb_10c : 62.00 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.08 -pb_1c : 62.08 -pb_5c : 62.05 -pb_10c : 62.00 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.09 -pb_1c : 62.09 -pb_5c : 62.05 -pb_10c : 62.00 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.10 -pb_1c : 62.10 -pb_5c : 62.10 -pb_10c : 62.10 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.11 -pb_1c : 62.11 -pb_5c : 62.10 -pb_10c : 62.10 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.12 -pb_1c : 62.12 -pb_5c : 62.10 -pb_10c : 62.10 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.13 -pb_1c : 62.13 -pb_5c : 62.10 -pb_10c : 62.10 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.14 -pb_1c : 62.14 -pb_5c : 62.10 -pb_10c : 62.10 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.15 -pb_1c : 62.15 -pb_5c : 62.15 -pb_10c : 62.10 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.16 -pb_1c : 62.16 -pb_5c : 62.15 -pb_10c : 62.10 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.17 -pb_1c : 62.17 -pb_5c : 62.15 -pb_10c : 62.10 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.18 -pb_1c : 62.18 -pb_5c : 62.15 -pb_10c : 62.10 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.19 -pb_1c : 62.19 -pb_5c : 62.15 -pb_10c : 62.10 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.20 -pb_1c : 62.20 -pb_5c : 62.20 -pb_10c : 62.20 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.21 -pb_1c : 62.21 -pb_5c : 62.20 -pb_10c : 62.20 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.22 -pb_1c : 62.22 -pb_5c : 62.20 -pb_10c : 62.20 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.23 -pb_1c : 62.23 -pb_5c : 62.20 -pb_10c : 62.20 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.24 -pb_1c : 62.24 -pb_5c : 62.20 -pb_10c : 62.20 -pb_25c : 62.00 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.25 -pb_1c : 62.25 -pb_5c : 62.25 -pb_10c : 62.20 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.26 -pb_1c : 62.26 -pb_5c : 62.25 -pb_10c : 62.20 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.27 -pb_1c : 62.27 -pb_5c : 62.25 -pb_10c : 62.20 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.28 -pb_1c : 62.28 -pb_5c : 62.25 -pb_10c : 62.20 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.29 -pb_1c : 62.29 -pb_5c : 62.25 -pb_10c : 62.20 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.30 -pb_1c : 62.30 -pb_5c : 62.30 -pb_10c : 62.30 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.31 -pb_1c : 62.31 -pb_5c : 62.30 -pb_10c : 62.30 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.32 -pb_1c : 62.32 -pb_5c : 62.30 -pb_10c : 62.30 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.33 -pb_1c : 62.33 -pb_5c : 62.30 -pb_10c : 62.30 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.34 -pb_1c : 62.34 -pb_5c : 62.30 -pb_10c : 62.30 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.35 -pb_1c : 62.35 -pb_5c : 62.35 -pb_10c : 62.30 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.36 -pb_1c : 62.36 -pb_5c : 62.35 -pb_10c : 62.30 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.37 -pb_1c : 62.37 -pb_5c : 62.35 -pb_10c : 62.30 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.38 -pb_1c : 62.38 -pb_5c : 62.35 -pb_10c : 62.30 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.39 -pb_1c : 62.39 -pb_5c : 62.35 -pb_10c : 62.30 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.40 -pb_1c : 62.40 -pb_5c : 62.40 -pb_10c : 62.40 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.41 -pb_1c : 62.41 -pb_5c : 62.40 -pb_10c : 62.40 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.42 -pb_1c : 62.42 -pb_5c : 62.40 -pb_10c : 62.40 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.43 -pb_1c : 62.43 -pb_5c : 62.40 -pb_10c : 62.40 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.44 -pb_1c : 62.44 -pb_5c : 62.40 -pb_10c : 62.40 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.45 -pb_1c : 62.45 -pb_5c : 62.45 -pb_10c : 62.40 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.46 -pb_1c : 62.46 -pb_5c : 62.45 -pb_10c : 62.40 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.47 -pb_1c : 62.47 -pb_5c : 62.45 -pb_10c : 62.40 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.48 -pb_1c : 62.48 -pb_5c : 62.45 -pb_10c : 62.40 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.49 -pb_1c : 62.49 -pb_5c : 62.45 -pb_10c : 62.40 -pb_25c : 62.25 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.50 -pb_1c : 62.50 -pb_5c : 62.50 -pb_10c : 62.50 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.51 -pb_1c : 62.51 -pb_5c : 62.50 -pb_10c : 62.50 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.52 -pb_1c : 62.52 -pb_5c : 62.50 -pb_10c : 62.50 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.53 -pb_1c : 62.53 -pb_5c : 62.50 -pb_10c : 62.50 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.54 -pb_1c : 62.54 -pb_5c : 62.50 -pb_10c : 62.50 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.55 -pb_1c : 62.55 -pb_5c : 62.55 -pb_10c : 62.50 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.56 -pb_1c : 62.56 -pb_5c : 62.55 -pb_10c : 62.50 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.57 -pb_1c : 62.57 -pb_5c : 62.55 -pb_10c : 62.50 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.58 -pb_1c : 62.58 -pb_5c : 62.55 -pb_10c : 62.50 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.59 -pb_1c : 62.59 -pb_5c : 62.55 -pb_10c : 62.50 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.60 -pb_1c : 62.60 -pb_5c : 62.60 -pb_10c : 62.60 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.61 -pb_1c : 62.61 -pb_5c : 62.60 -pb_10c : 62.60 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.62 -pb_1c : 62.62 -pb_5c : 62.60 -pb_10c : 62.60 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.63 -pb_1c : 62.63 -pb_5c : 62.60 -pb_10c : 62.60 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.64 -pb_1c : 62.64 -pb_5c : 62.60 -pb_10c : 62.60 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.65 -pb_1c : 62.65 -pb_5c : 62.65 -pb_10c : 62.60 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.66 -pb_1c : 62.66 -pb_5c : 62.65 -pb_10c : 62.60 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.67 -pb_1c : 62.67 -pb_5c : 62.65 -pb_10c : 62.60 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.68 -pb_1c : 62.68 -pb_5c : 62.65 -pb_10c : 62.60 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.69 -pb_1c : 62.69 -pb_5c : 62.65 -pb_10c : 62.60 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.70 -pb_1c : 62.70 -pb_5c : 62.70 -pb_10c : 62.70 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.71 -pb_1c : 62.71 -pb_5c : 62.70 -pb_10c : 62.70 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.72 -pb_1c : 62.72 -pb_5c : 62.70 -pb_10c : 62.70 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.73 -pb_1c : 62.73 -pb_5c : 62.70 -pb_10c : 62.70 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.74 -pb_1c : 62.74 -pb_5c : 62.70 -pb_10c : 62.70 -pb_25c : 62.50 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.75 -pb_1c : 62.75 -pb_5c : 62.75 -pb_10c : 62.70 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.76 -pb_1c : 62.76 -pb_5c : 62.75 -pb_10c : 62.70 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.77 -pb_1c : 62.77 -pb_5c : 62.75 -pb_10c : 62.70 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.78 -pb_1c : 62.78 -pb_5c : 62.75 -pb_10c : 62.70 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.79 -pb_1c : 62.79 -pb_5c : 62.75 -pb_10c : 62.70 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.80 -pb_1c : 62.80 -pb_5c : 62.80 -pb_10c : 62.80 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.81 -pb_1c : 62.81 -pb_5c : 62.80 -pb_10c : 62.80 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.82 -pb_1c : 62.82 -pb_5c : 62.80 -pb_10c : 62.80 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.83 -pb_1c : 62.83 -pb_5c : 62.80 -pb_10c : 62.80 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.84 -pb_1c : 62.84 -pb_5c : 62.80 -pb_10c : 62.80 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.85 -pb_1c : 62.85 -pb_5c : 62.85 -pb_10c : 62.80 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.86 -pb_1c : 62.86 -pb_5c : 62.85 -pb_10c : 62.80 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.87 -pb_1c : 62.87 -pb_5c : 62.85 -pb_10c : 62.80 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.88 -pb_1c : 62.88 -pb_5c : 62.85 -pb_10c : 62.80 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.89 -pb_1c : 62.89 -pb_5c : 62.85 -pb_10c : 62.80 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.90 -pb_1c : 62.90 -pb_5c : 62.90 -pb_10c : 62.90 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.91 -pb_1c : 62.91 -pb_5c : 62.90 -pb_10c : 62.90 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.92 -pb_1c : 62.92 -pb_5c : 62.90 -pb_10c : 62.90 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.93 -pb_1c : 62.93 -pb_5c : 62.90 -pb_10c : 62.90 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.94 -pb_1c : 62.94 -pb_5c : 62.90 -pb_10c : 62.90 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.95 -pb_1c : 62.95 -pb_5c : 62.95 -pb_10c : 62.90 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.96 -pb_1c : 62.96 -pb_5c : 62.95 -pb_10c : 62.90 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.97 -pb_1c : 62.97 -pb_5c : 62.95 -pb_10c : 62.90 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.98 -pb_1c : 62.98 -pb_5c : 62.95 -pb_10c : 62.90 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -62.99 -pb_1c : 62.99 -pb_5c : 62.95 -pb_10c : 62.90 -pb_25c : 62.75 -pb_1d : 62.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.00 -pb_1c : 63.00 -pb_5c : 63.00 -pb_10c : 63.00 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.01 -pb_1c : 63.01 -pb_5c : 63.00 -pb_10c : 63.00 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.02 -pb_1c : 63.02 -pb_5c : 63.00 -pb_10c : 63.00 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.03 -pb_1c : 63.03 -pb_5c : 63.00 -pb_10c : 63.00 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.04 -pb_1c : 63.04 -pb_5c : 63.00 -pb_10c : 63.00 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.05 -pb_1c : 63.05 -pb_5c : 63.05 -pb_10c : 63.00 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.06 -pb_1c : 63.06 -pb_5c : 63.05 -pb_10c : 63.00 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.07 -pb_1c : 63.07 -pb_5c : 63.05 -pb_10c : 63.00 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.08 -pb_1c : 63.08 -pb_5c : 63.05 -pb_10c : 63.00 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.09 -pb_1c : 63.09 -pb_5c : 63.05 -pb_10c : 63.00 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.10 -pb_1c : 63.10 -pb_5c : 63.10 -pb_10c : 63.10 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.11 -pb_1c : 63.11 -pb_5c : 63.10 -pb_10c : 63.10 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.12 -pb_1c : 63.12 -pb_5c : 63.10 -pb_10c : 63.10 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.13 -pb_1c : 63.13 -pb_5c : 63.10 -pb_10c : 63.10 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.14 -pb_1c : 63.14 -pb_5c : 63.10 -pb_10c : 63.10 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.15 -pb_1c : 63.15 -pb_5c : 63.15 -pb_10c : 63.10 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.16 -pb_1c : 63.16 -pb_5c : 63.15 -pb_10c : 63.10 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.17 -pb_1c : 63.17 -pb_5c : 63.15 -pb_10c : 63.10 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.18 -pb_1c : 63.18 -pb_5c : 63.15 -pb_10c : 63.10 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.19 -pb_1c : 63.19 -pb_5c : 63.15 -pb_10c : 63.10 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.20 -pb_1c : 63.20 -pb_5c : 63.20 -pb_10c : 63.20 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.21 -pb_1c : 63.21 -pb_5c : 63.20 -pb_10c : 63.20 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.22 -pb_1c : 63.22 -pb_5c : 63.20 -pb_10c : 63.20 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.23 -pb_1c : 63.23 -pb_5c : 63.20 -pb_10c : 63.20 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.24 -pb_1c : 63.24 -pb_5c : 63.20 -pb_10c : 63.20 -pb_25c : 63.00 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.25 -pb_1c : 63.25 -pb_5c : 63.25 -pb_10c : 63.20 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.26 -pb_1c : 63.26 -pb_5c : 63.25 -pb_10c : 63.20 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.27 -pb_1c : 63.27 -pb_5c : 63.25 -pb_10c : 63.20 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.28 -pb_1c : 63.28 -pb_5c : 63.25 -pb_10c : 63.20 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.29 -pb_1c : 63.29 -pb_5c : 63.25 -pb_10c : 63.20 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.30 -pb_1c : 63.30 -pb_5c : 63.30 -pb_10c : 63.30 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.31 -pb_1c : 63.31 -pb_5c : 63.30 -pb_10c : 63.30 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.32 -pb_1c : 63.32 -pb_5c : 63.30 -pb_10c : 63.30 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.33 -pb_1c : 63.33 -pb_5c : 63.30 -pb_10c : 63.30 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.34 -pb_1c : 63.34 -pb_5c : 63.30 -pb_10c : 63.30 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.35 -pb_1c : 63.35 -pb_5c : 63.35 -pb_10c : 63.30 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.36 -pb_1c : 63.36 -pb_5c : 63.35 -pb_10c : 63.30 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.37 -pb_1c : 63.37 -pb_5c : 63.35 -pb_10c : 63.30 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.38 -pb_1c : 63.38 -pb_5c : 63.35 -pb_10c : 63.30 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.39 -pb_1c : 63.39 -pb_5c : 63.35 -pb_10c : 63.30 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.40 -pb_1c : 63.40 -pb_5c : 63.40 -pb_10c : 63.40 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.41 -pb_1c : 63.41 -pb_5c : 63.40 -pb_10c : 63.40 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.42 -pb_1c : 63.42 -pb_5c : 63.40 -pb_10c : 63.40 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.43 -pb_1c : 63.43 -pb_5c : 63.40 -pb_10c : 63.40 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.44 -pb_1c : 63.44 -pb_5c : 63.40 -pb_10c : 63.40 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.45 -pb_1c : 63.45 -pb_5c : 63.45 -pb_10c : 63.40 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.46 -pb_1c : 63.46 -pb_5c : 63.45 -pb_10c : 63.40 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.47 -pb_1c : 63.47 -pb_5c : 63.45 -pb_10c : 63.40 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.48 -pb_1c : 63.48 -pb_5c : 63.45 -pb_10c : 63.40 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.49 -pb_1c : 63.49 -pb_5c : 63.45 -pb_10c : 63.40 -pb_25c : 63.25 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.50 -pb_1c : 63.50 -pb_5c : 63.50 -pb_10c : 63.50 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.51 -pb_1c : 63.51 -pb_5c : 63.50 -pb_10c : 63.50 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.52 -pb_1c : 63.52 -pb_5c : 63.50 -pb_10c : 63.50 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.53 -pb_1c : 63.53 -pb_5c : 63.50 -pb_10c : 63.50 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.54 -pb_1c : 63.54 -pb_5c : 63.50 -pb_10c : 63.50 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.55 -pb_1c : 63.55 -pb_5c : 63.55 -pb_10c : 63.50 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.56 -pb_1c : 63.56 -pb_5c : 63.55 -pb_10c : 63.50 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.57 -pb_1c : 63.57 -pb_5c : 63.55 -pb_10c : 63.50 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.58 -pb_1c : 63.58 -pb_5c : 63.55 -pb_10c : 63.50 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.59 -pb_1c : 63.59 -pb_5c : 63.55 -pb_10c : 63.50 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.60 -pb_1c : 63.60 -pb_5c : 63.60 -pb_10c : 63.60 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.61 -pb_1c : 63.61 -pb_5c : 63.60 -pb_10c : 63.60 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.62 -pb_1c : 63.62 -pb_5c : 63.60 -pb_10c : 63.60 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.63 -pb_1c : 63.63 -pb_5c : 63.60 -pb_10c : 63.60 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.64 -pb_1c : 63.64 -pb_5c : 63.60 -pb_10c : 63.60 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.65 -pb_1c : 63.65 -pb_5c : 63.65 -pb_10c : 63.60 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.66 -pb_1c : 63.66 -pb_5c : 63.65 -pb_10c : 63.60 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.67 -pb_1c : 63.67 -pb_5c : 63.65 -pb_10c : 63.60 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.68 -pb_1c : 63.68 -pb_5c : 63.65 -pb_10c : 63.60 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.69 -pb_1c : 63.69 -pb_5c : 63.65 -pb_10c : 63.60 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.70 -pb_1c : 63.70 -pb_5c : 63.70 -pb_10c : 63.70 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.71 -pb_1c : 63.71 -pb_5c : 63.70 -pb_10c : 63.70 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.72 -pb_1c : 63.72 -pb_5c : 63.70 -pb_10c : 63.70 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.73 -pb_1c : 63.73 -pb_5c : 63.70 -pb_10c : 63.70 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.74 -pb_1c : 63.74 -pb_5c : 63.70 -pb_10c : 63.70 -pb_25c : 63.50 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.75 -pb_1c : 63.75 -pb_5c : 63.75 -pb_10c : 63.70 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.76 -pb_1c : 63.76 -pb_5c : 63.75 -pb_10c : 63.70 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.77 -pb_1c : 63.77 -pb_5c : 63.75 -pb_10c : 63.70 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.78 -pb_1c : 63.78 -pb_5c : 63.75 -pb_10c : 63.70 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.79 -pb_1c : 63.79 -pb_5c : 63.75 -pb_10c : 63.70 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.80 -pb_1c : 63.80 -pb_5c : 63.80 -pb_10c : 63.80 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.81 -pb_1c : 63.81 -pb_5c : 63.80 -pb_10c : 63.80 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.82 -pb_1c : 63.82 -pb_5c : 63.80 -pb_10c : 63.80 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.83 -pb_1c : 63.83 -pb_5c : 63.80 -pb_10c : 63.80 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.84 -pb_1c : 63.84 -pb_5c : 63.80 -pb_10c : 63.80 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.85 -pb_1c : 63.85 -pb_5c : 63.85 -pb_10c : 63.80 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.86 -pb_1c : 63.86 -pb_5c : 63.85 -pb_10c : 63.80 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.87 -pb_1c : 63.87 -pb_5c : 63.85 -pb_10c : 63.80 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.88 -pb_1c : 63.88 -pb_5c : 63.85 -pb_10c : 63.80 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.89 -pb_1c : 63.89 -pb_5c : 63.85 -pb_10c : 63.80 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.90 -pb_1c : 63.90 -pb_5c : 63.90 -pb_10c : 63.90 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.91 -pb_1c : 63.91 -pb_5c : 63.90 -pb_10c : 63.90 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.92 -pb_1c : 63.92 -pb_5c : 63.90 -pb_10c : 63.90 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.93 -pb_1c : 63.93 -pb_5c : 63.90 -pb_10c : 63.90 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.94 -pb_1c : 63.94 -pb_5c : 63.90 -pb_10c : 63.90 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.95 -pb_1c : 63.95 -pb_5c : 63.95 -pb_10c : 63.90 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.96 -pb_1c : 63.96 -pb_5c : 63.95 -pb_10c : 63.90 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.97 -pb_1c : 63.97 -pb_5c : 63.95 -pb_10c : 63.90 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.98 -pb_1c : 63.98 -pb_5c : 63.95 -pb_10c : 63.90 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -63.99 -pb_1c : 63.99 -pb_5c : 63.95 -pb_10c : 63.90 -pb_25c : 63.75 -pb_1d : 63.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.00 -pb_1c : 64.00 -pb_5c : 64.00 -pb_10c : 64.00 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.01 -pb_1c : 64.01 -pb_5c : 64.00 -pb_10c : 64.00 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.02 -pb_1c : 64.02 -pb_5c : 64.00 -pb_10c : 64.00 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.03 -pb_1c : 64.03 -pb_5c : 64.00 -pb_10c : 64.00 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.04 -pb_1c : 64.04 -pb_5c : 64.00 -pb_10c : 64.00 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.05 -pb_1c : 64.05 -pb_5c : 64.05 -pb_10c : 64.00 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.06 -pb_1c : 64.06 -pb_5c : 64.05 -pb_10c : 64.00 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.07 -pb_1c : 64.07 -pb_5c : 64.05 -pb_10c : 64.00 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.08 -pb_1c : 64.08 -pb_5c : 64.05 -pb_10c : 64.00 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.09 -pb_1c : 64.09 -pb_5c : 64.05 -pb_10c : 64.00 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.10 -pb_1c : 64.10 -pb_5c : 64.10 -pb_10c : 64.10 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.11 -pb_1c : 64.11 -pb_5c : 64.10 -pb_10c : 64.10 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.12 -pb_1c : 64.12 -pb_5c : 64.10 -pb_10c : 64.10 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.13 -pb_1c : 64.13 -pb_5c : 64.10 -pb_10c : 64.10 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.14 -pb_1c : 64.14 -pb_5c : 64.10 -pb_10c : 64.10 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.15 -pb_1c : 64.15 -pb_5c : 64.15 -pb_10c : 64.10 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.16 -pb_1c : 64.16 -pb_5c : 64.15 -pb_10c : 64.10 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.17 -pb_1c : 64.17 -pb_5c : 64.15 -pb_10c : 64.10 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.18 -pb_1c : 64.18 -pb_5c : 64.15 -pb_10c : 64.10 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.19 -pb_1c : 64.19 -pb_5c : 64.15 -pb_10c : 64.10 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.20 -pb_1c : 64.20 -pb_5c : 64.20 -pb_10c : 64.20 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.21 -pb_1c : 64.21 -pb_5c : 64.20 -pb_10c : 64.20 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.22 -pb_1c : 64.22 -pb_5c : 64.20 -pb_10c : 64.20 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.23 -pb_1c : 64.23 -pb_5c : 64.20 -pb_10c : 64.20 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.24 -pb_1c : 64.24 -pb_5c : 64.20 -pb_10c : 64.20 -pb_25c : 64.00 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.25 -pb_1c : 64.25 -pb_5c : 64.25 -pb_10c : 64.20 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.26 -pb_1c : 64.26 -pb_5c : 64.25 -pb_10c : 64.20 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.27 -pb_1c : 64.27 -pb_5c : 64.25 -pb_10c : 64.20 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.28 -pb_1c : 64.28 -pb_5c : 64.25 -pb_10c : 64.20 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.29 -pb_1c : 64.29 -pb_5c : 64.25 -pb_10c : 64.20 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.30 -pb_1c : 64.30 -pb_5c : 64.30 -pb_10c : 64.30 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.31 -pb_1c : 64.31 -pb_5c : 64.30 -pb_10c : 64.30 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.32 -pb_1c : 64.32 -pb_5c : 64.30 -pb_10c : 64.30 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.33 -pb_1c : 64.33 -pb_5c : 64.30 -pb_10c : 64.30 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.34 -pb_1c : 64.34 -pb_5c : 64.30 -pb_10c : 64.30 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.35 -pb_1c : 64.35 -pb_5c : 64.35 -pb_10c : 64.30 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.36 -pb_1c : 64.36 -pb_5c : 64.35 -pb_10c : 64.30 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.37 -pb_1c : 64.37 -pb_5c : 64.35 -pb_10c : 64.30 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.38 -pb_1c : 64.38 -pb_5c : 64.35 -pb_10c : 64.30 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.39 -pb_1c : 64.39 -pb_5c : 64.35 -pb_10c : 64.30 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.40 -pb_1c : 64.40 -pb_5c : 64.40 -pb_10c : 64.40 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.41 -pb_1c : 64.41 -pb_5c : 64.40 -pb_10c : 64.40 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.42 -pb_1c : 64.42 -pb_5c : 64.40 -pb_10c : 64.40 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.43 -pb_1c : 64.43 -pb_5c : 64.40 -pb_10c : 64.40 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.44 -pb_1c : 64.44 -pb_5c : 64.40 -pb_10c : 64.40 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.45 -pb_1c : 64.45 -pb_5c : 64.45 -pb_10c : 64.40 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.46 -pb_1c : 64.46 -pb_5c : 64.45 -pb_10c : 64.40 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.47 -pb_1c : 64.47 -pb_5c : 64.45 -pb_10c : 64.40 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.48 -pb_1c : 64.48 -pb_5c : 64.45 -pb_10c : 64.40 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.49 -pb_1c : 64.49 -pb_5c : 64.45 -pb_10c : 64.40 -pb_25c : 64.25 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.50 -pb_1c : 64.50 -pb_5c : 64.50 -pb_10c : 64.50 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.51 -pb_1c : 64.51 -pb_5c : 64.50 -pb_10c : 64.50 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.52 -pb_1c : 64.52 -pb_5c : 64.50 -pb_10c : 64.50 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.53 -pb_1c : 64.53 -pb_5c : 64.50 -pb_10c : 64.50 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.54 -pb_1c : 64.54 -pb_5c : 64.50 -pb_10c : 64.50 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.55 -pb_1c : 64.55 -pb_5c : 64.55 -pb_10c : 64.50 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.56 -pb_1c : 64.56 -pb_5c : 64.55 -pb_10c : 64.50 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.57 -pb_1c : 64.57 -pb_5c : 64.55 -pb_10c : 64.50 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.58 -pb_1c : 64.58 -pb_5c : 64.55 -pb_10c : 64.50 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.59 -pb_1c : 64.59 -pb_5c : 64.55 -pb_10c : 64.50 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.60 -pb_1c : 64.60 -pb_5c : 64.60 -pb_10c : 64.60 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.61 -pb_1c : 64.61 -pb_5c : 64.60 -pb_10c : 64.60 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.62 -pb_1c : 64.62 -pb_5c : 64.60 -pb_10c : 64.60 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.63 -pb_1c : 64.63 -pb_5c : 64.60 -pb_10c : 64.60 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.64 -pb_1c : 64.64 -pb_5c : 64.60 -pb_10c : 64.60 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.65 -pb_1c : 64.65 -pb_5c : 64.65 -pb_10c : 64.60 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.66 -pb_1c : 64.66 -pb_5c : 64.65 -pb_10c : 64.60 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.67 -pb_1c : 64.67 -pb_5c : 64.65 -pb_10c : 64.60 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.68 -pb_1c : 64.68 -pb_5c : 64.65 -pb_10c : 64.60 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.69 -pb_1c : 64.69 -pb_5c : 64.65 -pb_10c : 64.60 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.70 -pb_1c : 64.70 -pb_5c : 64.70 -pb_10c : 64.70 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.71 -pb_1c : 64.71 -pb_5c : 64.70 -pb_10c : 64.70 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.72 -pb_1c : 64.72 -pb_5c : 64.70 -pb_10c : 64.70 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.73 -pb_1c : 64.73 -pb_5c : 64.70 -pb_10c : 64.70 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.74 -pb_1c : 64.74 -pb_5c : 64.70 -pb_10c : 64.70 -pb_25c : 64.50 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.75 -pb_1c : 64.75 -pb_5c : 64.75 -pb_10c : 64.70 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.76 -pb_1c : 64.76 -pb_5c : 64.75 -pb_10c : 64.70 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.77 -pb_1c : 64.77 -pb_5c : 64.75 -pb_10c : 64.70 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.78 -pb_1c : 64.78 -pb_5c : 64.75 -pb_10c : 64.70 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.79 -pb_1c : 64.79 -pb_5c : 64.75 -pb_10c : 64.70 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.80 -pb_1c : 64.80 -pb_5c : 64.80 -pb_10c : 64.80 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.81 -pb_1c : 64.81 -pb_5c : 64.80 -pb_10c : 64.80 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.82 -pb_1c : 64.82 -pb_5c : 64.80 -pb_10c : 64.80 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.83 -pb_1c : 64.83 -pb_5c : 64.80 -pb_10c : 64.80 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.84 -pb_1c : 64.84 -pb_5c : 64.80 -pb_10c : 64.80 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.85 -pb_1c : 64.85 -pb_5c : 64.85 -pb_10c : 64.80 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.86 -pb_1c : 64.86 -pb_5c : 64.85 -pb_10c : 64.80 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.87 -pb_1c : 64.87 -pb_5c : 64.85 -pb_10c : 64.80 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.88 -pb_1c : 64.88 -pb_5c : 64.85 -pb_10c : 64.80 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.89 -pb_1c : 64.89 -pb_5c : 64.85 -pb_10c : 64.80 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.90 -pb_1c : 64.90 -pb_5c : 64.90 -pb_10c : 64.90 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.91 -pb_1c : 64.91 -pb_5c : 64.90 -pb_10c : 64.90 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.92 -pb_1c : 64.92 -pb_5c : 64.90 -pb_10c : 64.90 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.93 -pb_1c : 64.93 -pb_5c : 64.90 -pb_10c : 64.90 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.94 -pb_1c : 64.94 -pb_5c : 64.90 -pb_10c : 64.90 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.95 -pb_1c : 64.95 -pb_5c : 64.95 -pb_10c : 64.90 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.96 -pb_1c : 64.96 -pb_5c : 64.95 -pb_10c : 64.90 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.97 -pb_1c : 64.97 -pb_5c : 64.95 -pb_10c : 64.90 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.98 -pb_1c : 64.98 -pb_5c : 64.95 -pb_10c : 64.90 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -64.99 -pb_1c : 64.99 -pb_5c : 64.95 -pb_10c : 64.90 -pb_25c : 64.75 -pb_1d : 64.00 -pb_5d : 60.00 -pb_10d : 60.00 - -65.00 -pb_1c : 65.00 -pb_5c : 65.00 -pb_10c : 65.00 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.01 -pb_1c : 65.01 -pb_5c : 65.00 -pb_10c : 65.00 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.02 -pb_1c : 65.02 -pb_5c : 65.00 -pb_10c : 65.00 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.03 -pb_1c : 65.03 -pb_5c : 65.00 -pb_10c : 65.00 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.04 -pb_1c : 65.04 -pb_5c : 65.00 -pb_10c : 65.00 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.05 -pb_1c : 65.05 -pb_5c : 65.05 -pb_10c : 65.00 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.06 -pb_1c : 65.06 -pb_5c : 65.05 -pb_10c : 65.00 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.07 -pb_1c : 65.07 -pb_5c : 65.05 -pb_10c : 65.00 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.08 -pb_1c : 65.08 -pb_5c : 65.05 -pb_10c : 65.00 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.09 -pb_1c : 65.09 -pb_5c : 65.05 -pb_10c : 65.00 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.10 -pb_1c : 65.10 -pb_5c : 65.10 -pb_10c : 65.10 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.11 -pb_1c : 65.11 -pb_5c : 65.10 -pb_10c : 65.10 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.12 -pb_1c : 65.12 -pb_5c : 65.10 -pb_10c : 65.10 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.13 -pb_1c : 65.13 -pb_5c : 65.10 -pb_10c : 65.10 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.14 -pb_1c : 65.14 -pb_5c : 65.10 -pb_10c : 65.10 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.15 -pb_1c : 65.15 -pb_5c : 65.15 -pb_10c : 65.10 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.16 -pb_1c : 65.16 -pb_5c : 65.15 -pb_10c : 65.10 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.17 -pb_1c : 65.17 -pb_5c : 65.15 -pb_10c : 65.10 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.18 -pb_1c : 65.18 -pb_5c : 65.15 -pb_10c : 65.10 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.19 -pb_1c : 65.19 -pb_5c : 65.15 -pb_10c : 65.10 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.20 -pb_1c : 65.20 -pb_5c : 65.20 -pb_10c : 65.20 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.21 -pb_1c : 65.21 -pb_5c : 65.20 -pb_10c : 65.20 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.22 -pb_1c : 65.22 -pb_5c : 65.20 -pb_10c : 65.20 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.23 -pb_1c : 65.23 -pb_5c : 65.20 -pb_10c : 65.20 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.24 -pb_1c : 65.24 -pb_5c : 65.20 -pb_10c : 65.20 -pb_25c : 65.00 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.25 -pb_1c : 65.25 -pb_5c : 65.25 -pb_10c : 65.20 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.26 -pb_1c : 65.26 -pb_5c : 65.25 -pb_10c : 65.20 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.27 -pb_1c : 65.27 -pb_5c : 65.25 -pb_10c : 65.20 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.28 -pb_1c : 65.28 -pb_5c : 65.25 -pb_10c : 65.20 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.29 -pb_1c : 65.29 -pb_5c : 65.25 -pb_10c : 65.20 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.30 -pb_1c : 65.30 -pb_5c : 65.30 -pb_10c : 65.30 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.31 -pb_1c : 65.31 -pb_5c : 65.30 -pb_10c : 65.30 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.32 -pb_1c : 65.32 -pb_5c : 65.30 -pb_10c : 65.30 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.33 -pb_1c : 65.33 -pb_5c : 65.30 -pb_10c : 65.30 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.34 -pb_1c : 65.34 -pb_5c : 65.30 -pb_10c : 65.30 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.35 -pb_1c : 65.35 -pb_5c : 65.35 -pb_10c : 65.30 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.36 -pb_1c : 65.36 -pb_5c : 65.35 -pb_10c : 65.30 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.37 -pb_1c : 65.37 -pb_5c : 65.35 -pb_10c : 65.30 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.38 -pb_1c : 65.38 -pb_5c : 65.35 -pb_10c : 65.30 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.39 -pb_1c : 65.39 -pb_5c : 65.35 -pb_10c : 65.30 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.40 -pb_1c : 65.40 -pb_5c : 65.40 -pb_10c : 65.40 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.41 -pb_1c : 65.41 -pb_5c : 65.40 -pb_10c : 65.40 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.42 -pb_1c : 65.42 -pb_5c : 65.40 -pb_10c : 65.40 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.43 -pb_1c : 65.43 -pb_5c : 65.40 -pb_10c : 65.40 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.44 -pb_1c : 65.44 -pb_5c : 65.40 -pb_10c : 65.40 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.45 -pb_1c : 65.45 -pb_5c : 65.45 -pb_10c : 65.40 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.46 -pb_1c : 65.46 -pb_5c : 65.45 -pb_10c : 65.40 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.47 -pb_1c : 65.47 -pb_5c : 65.45 -pb_10c : 65.40 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.48 -pb_1c : 65.48 -pb_5c : 65.45 -pb_10c : 65.40 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.49 -pb_1c : 65.49 -pb_5c : 65.45 -pb_10c : 65.40 -pb_25c : 65.25 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.50 -pb_1c : 65.50 -pb_5c : 65.50 -pb_10c : 65.50 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.51 -pb_1c : 65.51 -pb_5c : 65.50 -pb_10c : 65.50 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.52 -pb_1c : 65.52 -pb_5c : 65.50 -pb_10c : 65.50 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.53 -pb_1c : 65.53 -pb_5c : 65.50 -pb_10c : 65.50 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.54 -pb_1c : 65.54 -pb_5c : 65.50 -pb_10c : 65.50 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.55 -pb_1c : 65.55 -pb_5c : 65.55 -pb_10c : 65.50 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.56 -pb_1c : 65.56 -pb_5c : 65.55 -pb_10c : 65.50 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.57 -pb_1c : 65.57 -pb_5c : 65.55 -pb_10c : 65.50 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.58 -pb_1c : 65.58 -pb_5c : 65.55 -pb_10c : 65.50 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.59 -pb_1c : 65.59 -pb_5c : 65.55 -pb_10c : 65.50 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.60 -pb_1c : 65.60 -pb_5c : 65.60 -pb_10c : 65.60 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.61 -pb_1c : 65.61 -pb_5c : 65.60 -pb_10c : 65.60 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.62 -pb_1c : 65.62 -pb_5c : 65.60 -pb_10c : 65.60 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.63 -pb_1c : 65.63 -pb_5c : 65.60 -pb_10c : 65.60 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.64 -pb_1c : 65.64 -pb_5c : 65.60 -pb_10c : 65.60 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.65 -pb_1c : 65.65 -pb_5c : 65.65 -pb_10c : 65.60 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.66 -pb_1c : 65.66 -pb_5c : 65.65 -pb_10c : 65.60 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.67 -pb_1c : 65.67 -pb_5c : 65.65 -pb_10c : 65.60 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.68 -pb_1c : 65.68 -pb_5c : 65.65 -pb_10c : 65.60 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.69 -pb_1c : 65.69 -pb_5c : 65.65 -pb_10c : 65.60 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.70 -pb_1c : 65.70 -pb_5c : 65.70 -pb_10c : 65.70 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.71 -pb_1c : 65.71 -pb_5c : 65.70 -pb_10c : 65.70 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.72 -pb_1c : 65.72 -pb_5c : 65.70 -pb_10c : 65.70 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.73 -pb_1c : 65.73 -pb_5c : 65.70 -pb_10c : 65.70 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.74 -pb_1c : 65.74 -pb_5c : 65.70 -pb_10c : 65.70 -pb_25c : 65.50 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.75 -pb_1c : 65.75 -pb_5c : 65.75 -pb_10c : 65.70 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.76 -pb_1c : 65.76 -pb_5c : 65.75 -pb_10c : 65.70 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.77 -pb_1c : 65.77 -pb_5c : 65.75 -pb_10c : 65.70 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.78 -pb_1c : 65.78 -pb_5c : 65.75 -pb_10c : 65.70 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.79 -pb_1c : 65.79 -pb_5c : 65.75 -pb_10c : 65.70 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.80 -pb_1c : 65.80 -pb_5c : 65.80 -pb_10c : 65.80 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.81 -pb_1c : 65.81 -pb_5c : 65.80 -pb_10c : 65.80 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.82 -pb_1c : 65.82 -pb_5c : 65.80 -pb_10c : 65.80 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.83 -pb_1c : 65.83 -pb_5c : 65.80 -pb_10c : 65.80 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.84 -pb_1c : 65.84 -pb_5c : 65.80 -pb_10c : 65.80 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.85 -pb_1c : 65.85 -pb_5c : 65.85 -pb_10c : 65.80 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.86 -pb_1c : 65.86 -pb_5c : 65.85 -pb_10c : 65.80 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.87 -pb_1c : 65.87 -pb_5c : 65.85 -pb_10c : 65.80 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.88 -pb_1c : 65.88 -pb_5c : 65.85 -pb_10c : 65.80 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.89 -pb_1c : 65.89 -pb_5c : 65.85 -pb_10c : 65.80 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.90 -pb_1c : 65.90 -pb_5c : 65.90 -pb_10c : 65.90 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.91 -pb_1c : 65.91 -pb_5c : 65.90 -pb_10c : 65.90 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.92 -pb_1c : 65.92 -pb_5c : 65.90 -pb_10c : 65.90 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.93 -pb_1c : 65.93 -pb_5c : 65.90 -pb_10c : 65.90 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.94 -pb_1c : 65.94 -pb_5c : 65.90 -pb_10c : 65.90 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.95 -pb_1c : 65.95 -pb_5c : 65.95 -pb_10c : 65.90 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.96 -pb_1c : 65.96 -pb_5c : 65.95 -pb_10c : 65.90 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.97 -pb_1c : 65.97 -pb_5c : 65.95 -pb_10c : 65.90 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.98 -pb_1c : 65.98 -pb_5c : 65.95 -pb_10c : 65.90 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -65.99 -pb_1c : 65.99 -pb_5c : 65.95 -pb_10c : 65.90 -pb_25c : 65.75 -pb_1d : 65.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.00 -pb_1c : 66.00 -pb_5c : 66.00 -pb_10c : 66.00 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.01 -pb_1c : 66.01 -pb_5c : 66.00 -pb_10c : 66.00 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.02 -pb_1c : 66.02 -pb_5c : 66.00 -pb_10c : 66.00 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.03 -pb_1c : 66.03 -pb_5c : 66.00 -pb_10c : 66.00 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.04 -pb_1c : 66.04 -pb_5c : 66.00 -pb_10c : 66.00 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.05 -pb_1c : 66.05 -pb_5c : 66.05 -pb_10c : 66.00 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.06 -pb_1c : 66.06 -pb_5c : 66.05 -pb_10c : 66.00 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.07 -pb_1c : 66.07 -pb_5c : 66.05 -pb_10c : 66.00 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.08 -pb_1c : 66.08 -pb_5c : 66.05 -pb_10c : 66.00 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.09 -pb_1c : 66.09 -pb_5c : 66.05 -pb_10c : 66.00 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.10 -pb_1c : 66.10 -pb_5c : 66.10 -pb_10c : 66.10 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.11 -pb_1c : 66.11 -pb_5c : 66.10 -pb_10c : 66.10 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.12 -pb_1c : 66.12 -pb_5c : 66.10 -pb_10c : 66.10 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.13 -pb_1c : 66.13 -pb_5c : 66.10 -pb_10c : 66.10 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.14 -pb_1c : 66.14 -pb_5c : 66.10 -pb_10c : 66.10 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.15 -pb_1c : 66.15 -pb_5c : 66.15 -pb_10c : 66.10 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.16 -pb_1c : 66.16 -pb_5c : 66.15 -pb_10c : 66.10 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.17 -pb_1c : 66.17 -pb_5c : 66.15 -pb_10c : 66.10 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.18 -pb_1c : 66.18 -pb_5c : 66.15 -pb_10c : 66.10 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.19 -pb_1c : 66.19 -pb_5c : 66.15 -pb_10c : 66.10 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.20 -pb_1c : 66.20 -pb_5c : 66.20 -pb_10c : 66.20 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.21 -pb_1c : 66.21 -pb_5c : 66.20 -pb_10c : 66.20 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.22 -pb_1c : 66.22 -pb_5c : 66.20 -pb_10c : 66.20 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.23 -pb_1c : 66.23 -pb_5c : 66.20 -pb_10c : 66.20 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.24 -pb_1c : 66.24 -pb_5c : 66.20 -pb_10c : 66.20 -pb_25c : 66.00 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.25 -pb_1c : 66.25 -pb_5c : 66.25 -pb_10c : 66.20 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.26 -pb_1c : 66.26 -pb_5c : 66.25 -pb_10c : 66.20 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.27 -pb_1c : 66.27 -pb_5c : 66.25 -pb_10c : 66.20 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.28 -pb_1c : 66.28 -pb_5c : 66.25 -pb_10c : 66.20 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.29 -pb_1c : 66.29 -pb_5c : 66.25 -pb_10c : 66.20 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.30 -pb_1c : 66.30 -pb_5c : 66.30 -pb_10c : 66.30 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.31 -pb_1c : 66.31 -pb_5c : 66.30 -pb_10c : 66.30 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.32 -pb_1c : 66.32 -pb_5c : 66.30 -pb_10c : 66.30 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.33 -pb_1c : 66.33 -pb_5c : 66.30 -pb_10c : 66.30 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.34 -pb_1c : 66.34 -pb_5c : 66.30 -pb_10c : 66.30 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.35 -pb_1c : 66.35 -pb_5c : 66.35 -pb_10c : 66.30 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.36 -pb_1c : 66.36 -pb_5c : 66.35 -pb_10c : 66.30 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.37 -pb_1c : 66.37 -pb_5c : 66.35 -pb_10c : 66.30 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.38 -pb_1c : 66.38 -pb_5c : 66.35 -pb_10c : 66.30 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.39 -pb_1c : 66.39 -pb_5c : 66.35 -pb_10c : 66.30 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.40 -pb_1c : 66.40 -pb_5c : 66.40 -pb_10c : 66.40 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.41 -pb_1c : 66.41 -pb_5c : 66.40 -pb_10c : 66.40 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.42 -pb_1c : 66.42 -pb_5c : 66.40 -pb_10c : 66.40 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.43 -pb_1c : 66.43 -pb_5c : 66.40 -pb_10c : 66.40 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.44 -pb_1c : 66.44 -pb_5c : 66.40 -pb_10c : 66.40 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.45 -pb_1c : 66.45 -pb_5c : 66.45 -pb_10c : 66.40 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.46 -pb_1c : 66.46 -pb_5c : 66.45 -pb_10c : 66.40 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.47 -pb_1c : 66.47 -pb_5c : 66.45 -pb_10c : 66.40 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.48 -pb_1c : 66.48 -pb_5c : 66.45 -pb_10c : 66.40 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.49 -pb_1c : 66.49 -pb_5c : 66.45 -pb_10c : 66.40 -pb_25c : 66.25 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.50 -pb_1c : 66.50 -pb_5c : 66.50 -pb_10c : 66.50 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.51 -pb_1c : 66.51 -pb_5c : 66.50 -pb_10c : 66.50 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.52 -pb_1c : 66.52 -pb_5c : 66.50 -pb_10c : 66.50 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.53 -pb_1c : 66.53 -pb_5c : 66.50 -pb_10c : 66.50 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.54 -pb_1c : 66.54 -pb_5c : 66.50 -pb_10c : 66.50 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.55 -pb_1c : 66.55 -pb_5c : 66.55 -pb_10c : 66.50 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.56 -pb_1c : 66.56 -pb_5c : 66.55 -pb_10c : 66.50 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.57 -pb_1c : 66.57 -pb_5c : 66.55 -pb_10c : 66.50 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.58 -pb_1c : 66.58 -pb_5c : 66.55 -pb_10c : 66.50 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.59 -pb_1c : 66.59 -pb_5c : 66.55 -pb_10c : 66.50 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.60 -pb_1c : 66.60 -pb_5c : 66.60 -pb_10c : 66.60 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.61 -pb_1c : 66.61 -pb_5c : 66.60 -pb_10c : 66.60 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.62 -pb_1c : 66.62 -pb_5c : 66.60 -pb_10c : 66.60 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.63 -pb_1c : 66.63 -pb_5c : 66.60 -pb_10c : 66.60 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.64 -pb_1c : 66.64 -pb_5c : 66.60 -pb_10c : 66.60 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.65 -pb_1c : 66.65 -pb_5c : 66.65 -pb_10c : 66.60 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.66 -pb_1c : 66.66 -pb_5c : 66.65 -pb_10c : 66.60 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.67 -pb_1c : 66.67 -pb_5c : 66.65 -pb_10c : 66.60 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.68 -pb_1c : 66.68 -pb_5c : 66.65 -pb_10c : 66.60 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.69 -pb_1c : 66.69 -pb_5c : 66.65 -pb_10c : 66.60 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.70 -pb_1c : 66.70 -pb_5c : 66.70 -pb_10c : 66.70 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.71 -pb_1c : 66.71 -pb_5c : 66.70 -pb_10c : 66.70 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.72 -pb_1c : 66.72 -pb_5c : 66.70 -pb_10c : 66.70 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.73 -pb_1c : 66.73 -pb_5c : 66.70 -pb_10c : 66.70 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.74 -pb_1c : 66.74 -pb_5c : 66.70 -pb_10c : 66.70 -pb_25c : 66.50 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.75 -pb_1c : 66.75 -pb_5c : 66.75 -pb_10c : 66.70 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.76 -pb_1c : 66.76 -pb_5c : 66.75 -pb_10c : 66.70 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.77 -pb_1c : 66.77 -pb_5c : 66.75 -pb_10c : 66.70 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.78 -pb_1c : 66.78 -pb_5c : 66.75 -pb_10c : 66.70 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.79 -pb_1c : 66.79 -pb_5c : 66.75 -pb_10c : 66.70 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.80 -pb_1c : 66.80 -pb_5c : 66.80 -pb_10c : 66.80 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.81 -pb_1c : 66.81 -pb_5c : 66.80 -pb_10c : 66.80 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.82 -pb_1c : 66.82 -pb_5c : 66.80 -pb_10c : 66.80 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.83 -pb_1c : 66.83 -pb_5c : 66.80 -pb_10c : 66.80 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.84 -pb_1c : 66.84 -pb_5c : 66.80 -pb_10c : 66.80 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.85 -pb_1c : 66.85 -pb_5c : 66.85 -pb_10c : 66.80 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.86 -pb_1c : 66.86 -pb_5c : 66.85 -pb_10c : 66.80 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.87 -pb_1c : 66.87 -pb_5c : 66.85 -pb_10c : 66.80 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.88 -pb_1c : 66.88 -pb_5c : 66.85 -pb_10c : 66.80 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.89 -pb_1c : 66.89 -pb_5c : 66.85 -pb_10c : 66.80 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.90 -pb_1c : 66.90 -pb_5c : 66.90 -pb_10c : 66.90 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.91 -pb_1c : 66.91 -pb_5c : 66.90 -pb_10c : 66.90 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.92 -pb_1c : 66.92 -pb_5c : 66.90 -pb_10c : 66.90 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.93 -pb_1c : 66.93 -pb_5c : 66.90 -pb_10c : 66.90 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.94 -pb_1c : 66.94 -pb_5c : 66.90 -pb_10c : 66.90 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.95 -pb_1c : 66.95 -pb_5c : 66.95 -pb_10c : 66.90 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.96 -pb_1c : 66.96 -pb_5c : 66.95 -pb_10c : 66.90 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.97 -pb_1c : 66.97 -pb_5c : 66.95 -pb_10c : 66.90 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.98 -pb_1c : 66.98 -pb_5c : 66.95 -pb_10c : 66.90 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -66.99 -pb_1c : 66.99 -pb_5c : 66.95 -pb_10c : 66.90 -pb_25c : 66.75 -pb_1d : 66.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.00 -pb_1c : 67.00 -pb_5c : 67.00 -pb_10c : 67.00 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.01 -pb_1c : 67.01 -pb_5c : 67.00 -pb_10c : 67.00 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.02 -pb_1c : 67.02 -pb_5c : 67.00 -pb_10c : 67.00 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.03 -pb_1c : 67.03 -pb_5c : 67.00 -pb_10c : 67.00 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.04 -pb_1c : 67.04 -pb_5c : 67.00 -pb_10c : 67.00 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.05 -pb_1c : 67.05 -pb_5c : 67.05 -pb_10c : 67.00 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.06 -pb_1c : 67.06 -pb_5c : 67.05 -pb_10c : 67.00 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.07 -pb_1c : 67.07 -pb_5c : 67.05 -pb_10c : 67.00 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.08 -pb_1c : 67.08 -pb_5c : 67.05 -pb_10c : 67.00 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.09 -pb_1c : 67.09 -pb_5c : 67.05 -pb_10c : 67.00 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.10 -pb_1c : 67.10 -pb_5c : 67.10 -pb_10c : 67.10 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.11 -pb_1c : 67.11 -pb_5c : 67.10 -pb_10c : 67.10 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.12 -pb_1c : 67.12 -pb_5c : 67.10 -pb_10c : 67.10 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.13 -pb_1c : 67.13 -pb_5c : 67.10 -pb_10c : 67.10 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.14 -pb_1c : 67.14 -pb_5c : 67.10 -pb_10c : 67.10 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.15 -pb_1c : 67.15 -pb_5c : 67.15 -pb_10c : 67.10 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.16 -pb_1c : 67.16 -pb_5c : 67.15 -pb_10c : 67.10 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.17 -pb_1c : 67.17 -pb_5c : 67.15 -pb_10c : 67.10 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.18 -pb_1c : 67.18 -pb_5c : 67.15 -pb_10c : 67.10 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.19 -pb_1c : 67.19 -pb_5c : 67.15 -pb_10c : 67.10 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.20 -pb_1c : 67.20 -pb_5c : 67.20 -pb_10c : 67.20 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.21 -pb_1c : 67.21 -pb_5c : 67.20 -pb_10c : 67.20 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.22 -pb_1c : 67.22 -pb_5c : 67.20 -pb_10c : 67.20 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.23 -pb_1c : 67.23 -pb_5c : 67.20 -pb_10c : 67.20 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.24 -pb_1c : 67.24 -pb_5c : 67.20 -pb_10c : 67.20 -pb_25c : 67.00 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.25 -pb_1c : 67.25 -pb_5c : 67.25 -pb_10c : 67.20 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.26 -pb_1c : 67.26 -pb_5c : 67.25 -pb_10c : 67.20 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.27 -pb_1c : 67.27 -pb_5c : 67.25 -pb_10c : 67.20 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.28 -pb_1c : 67.28 -pb_5c : 67.25 -pb_10c : 67.20 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.29 -pb_1c : 67.29 -pb_5c : 67.25 -pb_10c : 67.20 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.30 -pb_1c : 67.30 -pb_5c : 67.30 -pb_10c : 67.30 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.31 -pb_1c : 67.31 -pb_5c : 67.30 -pb_10c : 67.30 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.32 -pb_1c : 67.32 -pb_5c : 67.30 -pb_10c : 67.30 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.33 -pb_1c : 67.33 -pb_5c : 67.30 -pb_10c : 67.30 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.34 -pb_1c : 67.34 -pb_5c : 67.30 -pb_10c : 67.30 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.35 -pb_1c : 67.35 -pb_5c : 67.35 -pb_10c : 67.30 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.36 -pb_1c : 67.36 -pb_5c : 67.35 -pb_10c : 67.30 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.37 -pb_1c : 67.37 -pb_5c : 67.35 -pb_10c : 67.30 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.38 -pb_1c : 67.38 -pb_5c : 67.35 -pb_10c : 67.30 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.39 -pb_1c : 67.39 -pb_5c : 67.35 -pb_10c : 67.30 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.40 -pb_1c : 67.40 -pb_5c : 67.40 -pb_10c : 67.40 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.41 -pb_1c : 67.41 -pb_5c : 67.40 -pb_10c : 67.40 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.42 -pb_1c : 67.42 -pb_5c : 67.40 -pb_10c : 67.40 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.43 -pb_1c : 67.43 -pb_5c : 67.40 -pb_10c : 67.40 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.44 -pb_1c : 67.44 -pb_5c : 67.40 -pb_10c : 67.40 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.45 -pb_1c : 67.45 -pb_5c : 67.45 -pb_10c : 67.40 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.46 -pb_1c : 67.46 -pb_5c : 67.45 -pb_10c : 67.40 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.47 -pb_1c : 67.47 -pb_5c : 67.45 -pb_10c : 67.40 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.48 -pb_1c : 67.48 -pb_5c : 67.45 -pb_10c : 67.40 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.49 -pb_1c : 67.49 -pb_5c : 67.45 -pb_10c : 67.40 -pb_25c : 67.25 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.50 -pb_1c : 67.50 -pb_5c : 67.50 -pb_10c : 67.50 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.51 -pb_1c : 67.51 -pb_5c : 67.50 -pb_10c : 67.50 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.52 -pb_1c : 67.52 -pb_5c : 67.50 -pb_10c : 67.50 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.53 -pb_1c : 67.53 -pb_5c : 67.50 -pb_10c : 67.50 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.54 -pb_1c : 67.54 -pb_5c : 67.50 -pb_10c : 67.50 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.55 -pb_1c : 67.55 -pb_5c : 67.55 -pb_10c : 67.50 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.56 -pb_1c : 67.56 -pb_5c : 67.55 -pb_10c : 67.50 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.57 -pb_1c : 67.57 -pb_5c : 67.55 -pb_10c : 67.50 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.58 -pb_1c : 67.58 -pb_5c : 67.55 -pb_10c : 67.50 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.59 -pb_1c : 67.59 -pb_5c : 67.55 -pb_10c : 67.50 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.60 -pb_1c : 67.60 -pb_5c : 67.60 -pb_10c : 67.60 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.61 -pb_1c : 67.61 -pb_5c : 67.60 -pb_10c : 67.60 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.62 -pb_1c : 67.62 -pb_5c : 67.60 -pb_10c : 67.60 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.63 -pb_1c : 67.63 -pb_5c : 67.60 -pb_10c : 67.60 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.64 -pb_1c : 67.64 -pb_5c : 67.60 -pb_10c : 67.60 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.65 -pb_1c : 67.65 -pb_5c : 67.65 -pb_10c : 67.60 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.66 -pb_1c : 67.66 -pb_5c : 67.65 -pb_10c : 67.60 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.67 -pb_1c : 67.67 -pb_5c : 67.65 -pb_10c : 67.60 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.68 -pb_1c : 67.68 -pb_5c : 67.65 -pb_10c : 67.60 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.69 -pb_1c : 67.69 -pb_5c : 67.65 -pb_10c : 67.60 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.70 -pb_1c : 67.70 -pb_5c : 67.70 -pb_10c : 67.70 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.71 -pb_1c : 67.71 -pb_5c : 67.70 -pb_10c : 67.70 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.72 -pb_1c : 67.72 -pb_5c : 67.70 -pb_10c : 67.70 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.73 -pb_1c : 67.73 -pb_5c : 67.70 -pb_10c : 67.70 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.74 -pb_1c : 67.74 -pb_5c : 67.70 -pb_10c : 67.70 -pb_25c : 67.50 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.75 -pb_1c : 67.75 -pb_5c : 67.75 -pb_10c : 67.70 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.76 -pb_1c : 67.76 -pb_5c : 67.75 -pb_10c : 67.70 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.77 -pb_1c : 67.77 -pb_5c : 67.75 -pb_10c : 67.70 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.78 -pb_1c : 67.78 -pb_5c : 67.75 -pb_10c : 67.70 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.79 -pb_1c : 67.79 -pb_5c : 67.75 -pb_10c : 67.70 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.80 -pb_1c : 67.80 -pb_5c : 67.80 -pb_10c : 67.80 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.81 -pb_1c : 67.81 -pb_5c : 67.80 -pb_10c : 67.80 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.82 -pb_1c : 67.82 -pb_5c : 67.80 -pb_10c : 67.80 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.83 -pb_1c : 67.83 -pb_5c : 67.80 -pb_10c : 67.80 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.84 -pb_1c : 67.84 -pb_5c : 67.80 -pb_10c : 67.80 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.85 -pb_1c : 67.85 -pb_5c : 67.85 -pb_10c : 67.80 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.86 -pb_1c : 67.86 -pb_5c : 67.85 -pb_10c : 67.80 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.87 -pb_1c : 67.87 -pb_5c : 67.85 -pb_10c : 67.80 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.88 -pb_1c : 67.88 -pb_5c : 67.85 -pb_10c : 67.80 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.89 -pb_1c : 67.89 -pb_5c : 67.85 -pb_10c : 67.80 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.90 -pb_1c : 67.90 -pb_5c : 67.90 -pb_10c : 67.90 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.91 -pb_1c : 67.91 -pb_5c : 67.90 -pb_10c : 67.90 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.92 -pb_1c : 67.92 -pb_5c : 67.90 -pb_10c : 67.90 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.93 -pb_1c : 67.93 -pb_5c : 67.90 -pb_10c : 67.90 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.94 -pb_1c : 67.94 -pb_5c : 67.90 -pb_10c : 67.90 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.95 -pb_1c : 67.95 -pb_5c : 67.95 -pb_10c : 67.90 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.96 -pb_1c : 67.96 -pb_5c : 67.95 -pb_10c : 67.90 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.97 -pb_1c : 67.97 -pb_5c : 67.95 -pb_10c : 67.90 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.98 -pb_1c : 67.98 -pb_5c : 67.95 -pb_10c : 67.90 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -67.99 -pb_1c : 67.99 -pb_5c : 67.95 -pb_10c : 67.90 -pb_25c : 67.75 -pb_1d : 67.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.00 -pb_1c : 68.00 -pb_5c : 68.00 -pb_10c : 68.00 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.01 -pb_1c : 68.01 -pb_5c : 68.00 -pb_10c : 68.00 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.02 -pb_1c : 68.02 -pb_5c : 68.00 -pb_10c : 68.00 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.03 -pb_1c : 68.03 -pb_5c : 68.00 -pb_10c : 68.00 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.04 -pb_1c : 68.04 -pb_5c : 68.00 -pb_10c : 68.00 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.05 -pb_1c : 68.05 -pb_5c : 68.05 -pb_10c : 68.00 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.06 -pb_1c : 68.06 -pb_5c : 68.05 -pb_10c : 68.00 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.07 -pb_1c : 68.07 -pb_5c : 68.05 -pb_10c : 68.00 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.08 -pb_1c : 68.08 -pb_5c : 68.05 -pb_10c : 68.00 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.09 -pb_1c : 68.09 -pb_5c : 68.05 -pb_10c : 68.00 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.10 -pb_1c : 68.10 -pb_5c : 68.10 -pb_10c : 68.10 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.11 -pb_1c : 68.11 -pb_5c : 68.10 -pb_10c : 68.10 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.12 -pb_1c : 68.12 -pb_5c : 68.10 -pb_10c : 68.10 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.13 -pb_1c : 68.13 -pb_5c : 68.10 -pb_10c : 68.10 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.14 -pb_1c : 68.14 -pb_5c : 68.10 -pb_10c : 68.10 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.15 -pb_1c : 68.15 -pb_5c : 68.15 -pb_10c : 68.10 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.16 -pb_1c : 68.16 -pb_5c : 68.15 -pb_10c : 68.10 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.17 -pb_1c : 68.17 -pb_5c : 68.15 -pb_10c : 68.10 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.18 -pb_1c : 68.18 -pb_5c : 68.15 -pb_10c : 68.10 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.19 -pb_1c : 68.19 -pb_5c : 68.15 -pb_10c : 68.10 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.20 -pb_1c : 68.20 -pb_5c : 68.20 -pb_10c : 68.20 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.21 -pb_1c : 68.21 -pb_5c : 68.20 -pb_10c : 68.20 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.22 -pb_1c : 68.22 -pb_5c : 68.20 -pb_10c : 68.20 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.23 -pb_1c : 68.23 -pb_5c : 68.20 -pb_10c : 68.20 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.24 -pb_1c : 68.24 -pb_5c : 68.20 -pb_10c : 68.20 -pb_25c : 68.00 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.25 -pb_1c : 68.25 -pb_5c : 68.25 -pb_10c : 68.20 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.26 -pb_1c : 68.26 -pb_5c : 68.25 -pb_10c : 68.20 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.27 -pb_1c : 68.27 -pb_5c : 68.25 -pb_10c : 68.20 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.28 -pb_1c : 68.28 -pb_5c : 68.25 -pb_10c : 68.20 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.29 -pb_1c : 68.29 -pb_5c : 68.25 -pb_10c : 68.20 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.30 -pb_1c : 68.30 -pb_5c : 68.30 -pb_10c : 68.30 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.31 -pb_1c : 68.31 -pb_5c : 68.30 -pb_10c : 68.30 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.32 -pb_1c : 68.32 -pb_5c : 68.30 -pb_10c : 68.30 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.33 -pb_1c : 68.33 -pb_5c : 68.30 -pb_10c : 68.30 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.34 -pb_1c : 68.34 -pb_5c : 68.30 -pb_10c : 68.30 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.35 -pb_1c : 68.35 -pb_5c : 68.35 -pb_10c : 68.30 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.36 -pb_1c : 68.36 -pb_5c : 68.35 -pb_10c : 68.30 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.37 -pb_1c : 68.37 -pb_5c : 68.35 -pb_10c : 68.30 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.38 -pb_1c : 68.38 -pb_5c : 68.35 -pb_10c : 68.30 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.39 -pb_1c : 68.39 -pb_5c : 68.35 -pb_10c : 68.30 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.40 -pb_1c : 68.40 -pb_5c : 68.40 -pb_10c : 68.40 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.41 -pb_1c : 68.41 -pb_5c : 68.40 -pb_10c : 68.40 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.42 -pb_1c : 68.42 -pb_5c : 68.40 -pb_10c : 68.40 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.43 -pb_1c : 68.43 -pb_5c : 68.40 -pb_10c : 68.40 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.44 -pb_1c : 68.44 -pb_5c : 68.40 -pb_10c : 68.40 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.45 -pb_1c : 68.45 -pb_5c : 68.45 -pb_10c : 68.40 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.46 -pb_1c : 68.46 -pb_5c : 68.45 -pb_10c : 68.40 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.47 -pb_1c : 68.47 -pb_5c : 68.45 -pb_10c : 68.40 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.48 -pb_1c : 68.48 -pb_5c : 68.45 -pb_10c : 68.40 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.49 -pb_1c : 68.49 -pb_5c : 68.45 -pb_10c : 68.40 -pb_25c : 68.25 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.50 -pb_1c : 68.50 -pb_5c : 68.50 -pb_10c : 68.50 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.51 -pb_1c : 68.51 -pb_5c : 68.50 -pb_10c : 68.50 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.52 -pb_1c : 68.52 -pb_5c : 68.50 -pb_10c : 68.50 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.53 -pb_1c : 68.53 -pb_5c : 68.50 -pb_10c : 68.50 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.54 -pb_1c : 68.54 -pb_5c : 68.50 -pb_10c : 68.50 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.55 -pb_1c : 68.55 -pb_5c : 68.55 -pb_10c : 68.50 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.56 -pb_1c : 68.56 -pb_5c : 68.55 -pb_10c : 68.50 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.57 -pb_1c : 68.57 -pb_5c : 68.55 -pb_10c : 68.50 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.58 -pb_1c : 68.58 -pb_5c : 68.55 -pb_10c : 68.50 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.59 -pb_1c : 68.59 -pb_5c : 68.55 -pb_10c : 68.50 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.60 -pb_1c : 68.60 -pb_5c : 68.60 -pb_10c : 68.60 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.61 -pb_1c : 68.61 -pb_5c : 68.60 -pb_10c : 68.60 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.62 -pb_1c : 68.62 -pb_5c : 68.60 -pb_10c : 68.60 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.63 -pb_1c : 68.63 -pb_5c : 68.60 -pb_10c : 68.60 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.64 -pb_1c : 68.64 -pb_5c : 68.60 -pb_10c : 68.60 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.65 -pb_1c : 68.65 -pb_5c : 68.65 -pb_10c : 68.60 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.66 -pb_1c : 68.66 -pb_5c : 68.65 -pb_10c : 68.60 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.67 -pb_1c : 68.67 -pb_5c : 68.65 -pb_10c : 68.60 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.68 -pb_1c : 68.68 -pb_5c : 68.65 -pb_10c : 68.60 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.69 -pb_1c : 68.69 -pb_5c : 68.65 -pb_10c : 68.60 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.70 -pb_1c : 68.70 -pb_5c : 68.70 -pb_10c : 68.70 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.71 -pb_1c : 68.71 -pb_5c : 68.70 -pb_10c : 68.70 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.72 -pb_1c : 68.72 -pb_5c : 68.70 -pb_10c : 68.70 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.73 -pb_1c : 68.73 -pb_5c : 68.70 -pb_10c : 68.70 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.74 -pb_1c : 68.74 -pb_5c : 68.70 -pb_10c : 68.70 -pb_25c : 68.50 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.75 -pb_1c : 68.75 -pb_5c : 68.75 -pb_10c : 68.70 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.76 -pb_1c : 68.76 -pb_5c : 68.75 -pb_10c : 68.70 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.77 -pb_1c : 68.77 -pb_5c : 68.75 -pb_10c : 68.70 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.78 -pb_1c : 68.78 -pb_5c : 68.75 -pb_10c : 68.70 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.79 -pb_1c : 68.79 -pb_5c : 68.75 -pb_10c : 68.70 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.80 -pb_1c : 68.80 -pb_5c : 68.80 -pb_10c : 68.80 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.81 -pb_1c : 68.81 -pb_5c : 68.80 -pb_10c : 68.80 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.82 -pb_1c : 68.82 -pb_5c : 68.80 -pb_10c : 68.80 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.83 -pb_1c : 68.83 -pb_5c : 68.80 -pb_10c : 68.80 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.84 -pb_1c : 68.84 -pb_5c : 68.80 -pb_10c : 68.80 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.85 -pb_1c : 68.85 -pb_5c : 68.85 -pb_10c : 68.80 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.86 -pb_1c : 68.86 -pb_5c : 68.85 -pb_10c : 68.80 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.87 -pb_1c : 68.87 -pb_5c : 68.85 -pb_10c : 68.80 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.88 -pb_1c : 68.88 -pb_5c : 68.85 -pb_10c : 68.80 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.89 -pb_1c : 68.89 -pb_5c : 68.85 -pb_10c : 68.80 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.90 -pb_1c : 68.90 -pb_5c : 68.90 -pb_10c : 68.90 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.91 -pb_1c : 68.91 -pb_5c : 68.90 -pb_10c : 68.90 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.92 -pb_1c : 68.92 -pb_5c : 68.90 -pb_10c : 68.90 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.93 -pb_1c : 68.93 -pb_5c : 68.90 -pb_10c : 68.90 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.94 -pb_1c : 68.94 -pb_5c : 68.90 -pb_10c : 68.90 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.95 -pb_1c : 68.95 -pb_5c : 68.95 -pb_10c : 68.90 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.96 -pb_1c : 68.96 -pb_5c : 68.95 -pb_10c : 68.90 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.97 -pb_1c : 68.97 -pb_5c : 68.95 -pb_10c : 68.90 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.98 -pb_1c : 68.98 -pb_5c : 68.95 -pb_10c : 68.90 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -68.99 -pb_1c : 68.99 -pb_5c : 68.95 -pb_10c : 68.90 -pb_25c : 68.75 -pb_1d : 68.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.00 -pb_1c : 69.00 -pb_5c : 69.00 -pb_10c : 69.00 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.01 -pb_1c : 69.01 -pb_5c : 69.00 -pb_10c : 69.00 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.02 -pb_1c : 69.02 -pb_5c : 69.00 -pb_10c : 69.00 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.03 -pb_1c : 69.03 -pb_5c : 69.00 -pb_10c : 69.00 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.04 -pb_1c : 69.04 -pb_5c : 69.00 -pb_10c : 69.00 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.05 -pb_1c : 69.05 -pb_5c : 69.05 -pb_10c : 69.00 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.06 -pb_1c : 69.06 -pb_5c : 69.05 -pb_10c : 69.00 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.07 -pb_1c : 69.07 -pb_5c : 69.05 -pb_10c : 69.00 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.08 -pb_1c : 69.08 -pb_5c : 69.05 -pb_10c : 69.00 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.09 -pb_1c : 69.09 -pb_5c : 69.05 -pb_10c : 69.00 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.10 -pb_1c : 69.10 -pb_5c : 69.10 -pb_10c : 69.10 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.11 -pb_1c : 69.11 -pb_5c : 69.10 -pb_10c : 69.10 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.12 -pb_1c : 69.12 -pb_5c : 69.10 -pb_10c : 69.10 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.13 -pb_1c : 69.13 -pb_5c : 69.10 -pb_10c : 69.10 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.14 -pb_1c : 69.14 -pb_5c : 69.10 -pb_10c : 69.10 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.15 -pb_1c : 69.15 -pb_5c : 69.15 -pb_10c : 69.10 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.16 -pb_1c : 69.16 -pb_5c : 69.15 -pb_10c : 69.10 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.17 -pb_1c : 69.17 -pb_5c : 69.15 -pb_10c : 69.10 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.18 -pb_1c : 69.18 -pb_5c : 69.15 -pb_10c : 69.10 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.19 -pb_1c : 69.19 -pb_5c : 69.15 -pb_10c : 69.10 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.20 -pb_1c : 69.20 -pb_5c : 69.20 -pb_10c : 69.20 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.21 -pb_1c : 69.21 -pb_5c : 69.20 -pb_10c : 69.20 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.22 -pb_1c : 69.22 -pb_5c : 69.20 -pb_10c : 69.20 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.23 -pb_1c : 69.23 -pb_5c : 69.20 -pb_10c : 69.20 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.24 -pb_1c : 69.24 -pb_5c : 69.20 -pb_10c : 69.20 -pb_25c : 69.00 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.25 -pb_1c : 69.25 -pb_5c : 69.25 -pb_10c : 69.20 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.26 -pb_1c : 69.26 -pb_5c : 69.25 -pb_10c : 69.20 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.27 -pb_1c : 69.27 -pb_5c : 69.25 -pb_10c : 69.20 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.28 -pb_1c : 69.28 -pb_5c : 69.25 -pb_10c : 69.20 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.29 -pb_1c : 69.29 -pb_5c : 69.25 -pb_10c : 69.20 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.30 -pb_1c : 69.30 -pb_5c : 69.30 -pb_10c : 69.30 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.31 -pb_1c : 69.31 -pb_5c : 69.30 -pb_10c : 69.30 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.32 -pb_1c : 69.32 -pb_5c : 69.30 -pb_10c : 69.30 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.33 -pb_1c : 69.33 -pb_5c : 69.30 -pb_10c : 69.30 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.34 -pb_1c : 69.34 -pb_5c : 69.30 -pb_10c : 69.30 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.35 -pb_1c : 69.35 -pb_5c : 69.35 -pb_10c : 69.30 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.36 -pb_1c : 69.36 -pb_5c : 69.35 -pb_10c : 69.30 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.37 -pb_1c : 69.37 -pb_5c : 69.35 -pb_10c : 69.30 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.38 -pb_1c : 69.38 -pb_5c : 69.35 -pb_10c : 69.30 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.39 -pb_1c : 69.39 -pb_5c : 69.35 -pb_10c : 69.30 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.40 -pb_1c : 69.40 -pb_5c : 69.40 -pb_10c : 69.40 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.41 -pb_1c : 69.41 -pb_5c : 69.40 -pb_10c : 69.40 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.42 -pb_1c : 69.42 -pb_5c : 69.40 -pb_10c : 69.40 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.43 -pb_1c : 69.43 -pb_5c : 69.40 -pb_10c : 69.40 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.44 -pb_1c : 69.44 -pb_5c : 69.40 -pb_10c : 69.40 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.45 -pb_1c : 69.45 -pb_5c : 69.45 -pb_10c : 69.40 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.46 -pb_1c : 69.46 -pb_5c : 69.45 -pb_10c : 69.40 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.47 -pb_1c : 69.47 -pb_5c : 69.45 -pb_10c : 69.40 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.48 -pb_1c : 69.48 -pb_5c : 69.45 -pb_10c : 69.40 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.49 -pb_1c : 69.49 -pb_5c : 69.45 -pb_10c : 69.40 -pb_25c : 69.25 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.50 -pb_1c : 69.50 -pb_5c : 69.50 -pb_10c : 69.50 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.51 -pb_1c : 69.51 -pb_5c : 69.50 -pb_10c : 69.50 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.52 -pb_1c : 69.52 -pb_5c : 69.50 -pb_10c : 69.50 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.53 -pb_1c : 69.53 -pb_5c : 69.50 -pb_10c : 69.50 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.54 -pb_1c : 69.54 -pb_5c : 69.50 -pb_10c : 69.50 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.55 -pb_1c : 69.55 -pb_5c : 69.55 -pb_10c : 69.50 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.56 -pb_1c : 69.56 -pb_5c : 69.55 -pb_10c : 69.50 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.57 -pb_1c : 69.57 -pb_5c : 69.55 -pb_10c : 69.50 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.58 -pb_1c : 69.58 -pb_5c : 69.55 -pb_10c : 69.50 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.59 -pb_1c : 69.59 -pb_5c : 69.55 -pb_10c : 69.50 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.60 -pb_1c : 69.60 -pb_5c : 69.60 -pb_10c : 69.60 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.61 -pb_1c : 69.61 -pb_5c : 69.60 -pb_10c : 69.60 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.62 -pb_1c : 69.62 -pb_5c : 69.60 -pb_10c : 69.60 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.63 -pb_1c : 69.63 -pb_5c : 69.60 -pb_10c : 69.60 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.64 -pb_1c : 69.64 -pb_5c : 69.60 -pb_10c : 69.60 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.65 -pb_1c : 69.65 -pb_5c : 69.65 -pb_10c : 69.60 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.66 -pb_1c : 69.66 -pb_5c : 69.65 -pb_10c : 69.60 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.67 -pb_1c : 69.67 -pb_5c : 69.65 -pb_10c : 69.60 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.68 -pb_1c : 69.68 -pb_5c : 69.65 -pb_10c : 69.60 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.69 -pb_1c : 69.69 -pb_5c : 69.65 -pb_10c : 69.60 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.70 -pb_1c : 69.70 -pb_5c : 69.70 -pb_10c : 69.70 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.71 -pb_1c : 69.71 -pb_5c : 69.70 -pb_10c : 69.70 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.72 -pb_1c : 69.72 -pb_5c : 69.70 -pb_10c : 69.70 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.73 -pb_1c : 69.73 -pb_5c : 69.70 -pb_10c : 69.70 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.74 -pb_1c : 69.74 -pb_5c : 69.70 -pb_10c : 69.70 -pb_25c : 69.50 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.75 -pb_1c : 69.75 -pb_5c : 69.75 -pb_10c : 69.70 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.76 -pb_1c : 69.76 -pb_5c : 69.75 -pb_10c : 69.70 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.77 -pb_1c : 69.77 -pb_5c : 69.75 -pb_10c : 69.70 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.78 -pb_1c : 69.78 -pb_5c : 69.75 -pb_10c : 69.70 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.79 -pb_1c : 69.79 -pb_5c : 69.75 -pb_10c : 69.70 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.80 -pb_1c : 69.80 -pb_5c : 69.80 -pb_10c : 69.80 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.81 -pb_1c : 69.81 -pb_5c : 69.80 -pb_10c : 69.80 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.82 -pb_1c : 69.82 -pb_5c : 69.80 -pb_10c : 69.80 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.83 -pb_1c : 69.83 -pb_5c : 69.80 -pb_10c : 69.80 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.84 -pb_1c : 69.84 -pb_5c : 69.80 -pb_10c : 69.80 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.85 -pb_1c : 69.85 -pb_5c : 69.85 -pb_10c : 69.80 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.86 -pb_1c : 69.86 -pb_5c : 69.85 -pb_10c : 69.80 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.87 -pb_1c : 69.87 -pb_5c : 69.85 -pb_10c : 69.80 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.88 -pb_1c : 69.88 -pb_5c : 69.85 -pb_10c : 69.80 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.89 -pb_1c : 69.89 -pb_5c : 69.85 -pb_10c : 69.80 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.90 -pb_1c : 69.90 -pb_5c : 69.90 -pb_10c : 69.90 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.91 -pb_1c : 69.91 -pb_5c : 69.90 -pb_10c : 69.90 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.92 -pb_1c : 69.92 -pb_5c : 69.90 -pb_10c : 69.90 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.93 -pb_1c : 69.93 -pb_5c : 69.90 -pb_10c : 69.90 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.94 -pb_1c : 69.94 -pb_5c : 69.90 -pb_10c : 69.90 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.95 -pb_1c : 69.95 -pb_5c : 69.95 -pb_10c : 69.90 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.96 -pb_1c : 69.96 -pb_5c : 69.95 -pb_10c : 69.90 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.97 -pb_1c : 69.97 -pb_5c : 69.95 -pb_10c : 69.90 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.98 -pb_1c : 69.98 -pb_5c : 69.95 -pb_10c : 69.90 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -69.99 -pb_1c : 69.99 -pb_5c : 69.95 -pb_10c : 69.90 -pb_25c : 69.75 -pb_1d : 69.00 -pb_5d : 65.00 -pb_10d : 60.00 - -70.00 -pb_1c : 70.00 -pb_5c : 70.00 -pb_10c : 70.00 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.01 -pb_1c : 70.01 -pb_5c : 70.00 -pb_10c : 70.00 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.02 -pb_1c : 70.02 -pb_5c : 70.00 -pb_10c : 70.00 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.03 -pb_1c : 70.03 -pb_5c : 70.00 -pb_10c : 70.00 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.04 -pb_1c : 70.04 -pb_5c : 70.00 -pb_10c : 70.00 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.05 -pb_1c : 70.05 -pb_5c : 70.05 -pb_10c : 70.00 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.06 -pb_1c : 70.06 -pb_5c : 70.05 -pb_10c : 70.00 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.07 -pb_1c : 70.07 -pb_5c : 70.05 -pb_10c : 70.00 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.08 -pb_1c : 70.08 -pb_5c : 70.05 -pb_10c : 70.00 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.09 -pb_1c : 70.09 -pb_5c : 70.05 -pb_10c : 70.00 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.10 -pb_1c : 70.10 -pb_5c : 70.10 -pb_10c : 70.10 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.11 -pb_1c : 70.11 -pb_5c : 70.10 -pb_10c : 70.10 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.12 -pb_1c : 70.12 -pb_5c : 70.10 -pb_10c : 70.10 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.13 -pb_1c : 70.13 -pb_5c : 70.10 -pb_10c : 70.10 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.14 -pb_1c : 70.14 -pb_5c : 70.10 -pb_10c : 70.10 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.15 -pb_1c : 70.15 -pb_5c : 70.15 -pb_10c : 70.10 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.16 -pb_1c : 70.16 -pb_5c : 70.15 -pb_10c : 70.10 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.17 -pb_1c : 70.17 -pb_5c : 70.15 -pb_10c : 70.10 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.18 -pb_1c : 70.18 -pb_5c : 70.15 -pb_10c : 70.10 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.19 -pb_1c : 70.19 -pb_5c : 70.15 -pb_10c : 70.10 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.20 -pb_1c : 70.20 -pb_5c : 70.20 -pb_10c : 70.20 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.21 -pb_1c : 70.21 -pb_5c : 70.20 -pb_10c : 70.20 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.22 -pb_1c : 70.22 -pb_5c : 70.20 -pb_10c : 70.20 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.23 -pb_1c : 70.23 -pb_5c : 70.20 -pb_10c : 70.20 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.24 -pb_1c : 70.24 -pb_5c : 70.20 -pb_10c : 70.20 -pb_25c : 70.00 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.25 -pb_1c : 70.25 -pb_5c : 70.25 -pb_10c : 70.20 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.26 -pb_1c : 70.26 -pb_5c : 70.25 -pb_10c : 70.20 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.27 -pb_1c : 70.27 -pb_5c : 70.25 -pb_10c : 70.20 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.28 -pb_1c : 70.28 -pb_5c : 70.25 -pb_10c : 70.20 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.29 -pb_1c : 70.29 -pb_5c : 70.25 -pb_10c : 70.20 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.30 -pb_1c : 70.30 -pb_5c : 70.30 -pb_10c : 70.30 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.31 -pb_1c : 70.31 -pb_5c : 70.30 -pb_10c : 70.30 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.32 -pb_1c : 70.32 -pb_5c : 70.30 -pb_10c : 70.30 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.33 -pb_1c : 70.33 -pb_5c : 70.30 -pb_10c : 70.30 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.34 -pb_1c : 70.34 -pb_5c : 70.30 -pb_10c : 70.30 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.35 -pb_1c : 70.35 -pb_5c : 70.35 -pb_10c : 70.30 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.36 -pb_1c : 70.36 -pb_5c : 70.35 -pb_10c : 70.30 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.37 -pb_1c : 70.37 -pb_5c : 70.35 -pb_10c : 70.30 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.38 -pb_1c : 70.38 -pb_5c : 70.35 -pb_10c : 70.30 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.39 -pb_1c : 70.39 -pb_5c : 70.35 -pb_10c : 70.30 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.40 -pb_1c : 70.40 -pb_5c : 70.40 -pb_10c : 70.40 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.41 -pb_1c : 70.41 -pb_5c : 70.40 -pb_10c : 70.40 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.42 -pb_1c : 70.42 -pb_5c : 70.40 -pb_10c : 70.40 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.43 -pb_1c : 70.43 -pb_5c : 70.40 -pb_10c : 70.40 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.44 -pb_1c : 70.44 -pb_5c : 70.40 -pb_10c : 70.40 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.45 -pb_1c : 70.45 -pb_5c : 70.45 -pb_10c : 70.40 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.46 -pb_1c : 70.46 -pb_5c : 70.45 -pb_10c : 70.40 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.47 -pb_1c : 70.47 -pb_5c : 70.45 -pb_10c : 70.40 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.48 -pb_1c : 70.48 -pb_5c : 70.45 -pb_10c : 70.40 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.49 -pb_1c : 70.49 -pb_5c : 70.45 -pb_10c : 70.40 -pb_25c : 70.25 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.50 -pb_1c : 70.50 -pb_5c : 70.50 -pb_10c : 70.50 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.51 -pb_1c : 70.51 -pb_5c : 70.50 -pb_10c : 70.50 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.52 -pb_1c : 70.52 -pb_5c : 70.50 -pb_10c : 70.50 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.53 -pb_1c : 70.53 -pb_5c : 70.50 -pb_10c : 70.50 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.54 -pb_1c : 70.54 -pb_5c : 70.50 -pb_10c : 70.50 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.55 -pb_1c : 70.55 -pb_5c : 70.55 -pb_10c : 70.50 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.56 -pb_1c : 70.56 -pb_5c : 70.55 -pb_10c : 70.50 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.57 -pb_1c : 70.57 -pb_5c : 70.55 -pb_10c : 70.50 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.58 -pb_1c : 70.58 -pb_5c : 70.55 -pb_10c : 70.50 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.59 -pb_1c : 70.59 -pb_5c : 70.55 -pb_10c : 70.50 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.60 -pb_1c : 70.60 -pb_5c : 70.60 -pb_10c : 70.60 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.61 -pb_1c : 70.61 -pb_5c : 70.60 -pb_10c : 70.60 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.62 -pb_1c : 70.62 -pb_5c : 70.60 -pb_10c : 70.60 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.63 -pb_1c : 70.63 -pb_5c : 70.60 -pb_10c : 70.60 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.64 -pb_1c : 70.64 -pb_5c : 70.60 -pb_10c : 70.60 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.65 -pb_1c : 70.65 -pb_5c : 70.65 -pb_10c : 70.60 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.66 -pb_1c : 70.66 -pb_5c : 70.65 -pb_10c : 70.60 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.67 -pb_1c : 70.67 -pb_5c : 70.65 -pb_10c : 70.60 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.68 -pb_1c : 70.68 -pb_5c : 70.65 -pb_10c : 70.60 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.69 -pb_1c : 70.69 -pb_5c : 70.65 -pb_10c : 70.60 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.70 -pb_1c : 70.70 -pb_5c : 70.70 -pb_10c : 70.70 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.71 -pb_1c : 70.71 -pb_5c : 70.70 -pb_10c : 70.70 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.72 -pb_1c : 70.72 -pb_5c : 70.70 -pb_10c : 70.70 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.73 -pb_1c : 70.73 -pb_5c : 70.70 -pb_10c : 70.70 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.74 -pb_1c : 70.74 -pb_5c : 70.70 -pb_10c : 70.70 -pb_25c : 70.50 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.75 -pb_1c : 70.75 -pb_5c : 70.75 -pb_10c : 70.70 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.76 -pb_1c : 70.76 -pb_5c : 70.75 -pb_10c : 70.70 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.77 -pb_1c : 70.77 -pb_5c : 70.75 -pb_10c : 70.70 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.78 -pb_1c : 70.78 -pb_5c : 70.75 -pb_10c : 70.70 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.79 -pb_1c : 70.79 -pb_5c : 70.75 -pb_10c : 70.70 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.80 -pb_1c : 70.80 -pb_5c : 70.80 -pb_10c : 70.80 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.81 -pb_1c : 70.81 -pb_5c : 70.80 -pb_10c : 70.80 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.82 -pb_1c : 70.82 -pb_5c : 70.80 -pb_10c : 70.80 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.83 -pb_1c : 70.83 -pb_5c : 70.80 -pb_10c : 70.80 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.84 -pb_1c : 70.84 -pb_5c : 70.80 -pb_10c : 70.80 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.85 -pb_1c : 70.85 -pb_5c : 70.85 -pb_10c : 70.80 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.86 -pb_1c : 70.86 -pb_5c : 70.85 -pb_10c : 70.80 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.87 -pb_1c : 70.87 -pb_5c : 70.85 -pb_10c : 70.80 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.88 -pb_1c : 70.88 -pb_5c : 70.85 -pb_10c : 70.80 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.89 -pb_1c : 70.89 -pb_5c : 70.85 -pb_10c : 70.80 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.90 -pb_1c : 70.90 -pb_5c : 70.90 -pb_10c : 70.90 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.91 -pb_1c : 70.91 -pb_5c : 70.90 -pb_10c : 70.90 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.92 -pb_1c : 70.92 -pb_5c : 70.90 -pb_10c : 70.90 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.93 -pb_1c : 70.93 -pb_5c : 70.90 -pb_10c : 70.90 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.94 -pb_1c : 70.94 -pb_5c : 70.90 -pb_10c : 70.90 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.95 -pb_1c : 70.95 -pb_5c : 70.95 -pb_10c : 70.90 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.96 -pb_1c : 70.96 -pb_5c : 70.95 -pb_10c : 70.90 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.97 -pb_1c : 70.97 -pb_5c : 70.95 -pb_10c : 70.90 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.98 -pb_1c : 70.98 -pb_5c : 70.95 -pb_10c : 70.90 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -70.99 -pb_1c : 70.99 -pb_5c : 70.95 -pb_10c : 70.90 -pb_25c : 70.75 -pb_1d : 70.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.00 -pb_1c : 71.00 -pb_5c : 71.00 -pb_10c : 71.00 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.01 -pb_1c : 71.01 -pb_5c : 71.00 -pb_10c : 71.00 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.02 -pb_1c : 71.02 -pb_5c : 71.00 -pb_10c : 71.00 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.03 -pb_1c : 71.03 -pb_5c : 71.00 -pb_10c : 71.00 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.04 -pb_1c : 71.04 -pb_5c : 71.00 -pb_10c : 71.00 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.05 -pb_1c : 71.05 -pb_5c : 71.05 -pb_10c : 71.00 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.06 -pb_1c : 71.06 -pb_5c : 71.05 -pb_10c : 71.00 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.07 -pb_1c : 71.07 -pb_5c : 71.05 -pb_10c : 71.00 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.08 -pb_1c : 71.08 -pb_5c : 71.05 -pb_10c : 71.00 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.09 -pb_1c : 71.09 -pb_5c : 71.05 -pb_10c : 71.00 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.10 -pb_1c : 71.10 -pb_5c : 71.10 -pb_10c : 71.10 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.11 -pb_1c : 71.11 -pb_5c : 71.10 -pb_10c : 71.10 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.12 -pb_1c : 71.12 -pb_5c : 71.10 -pb_10c : 71.10 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.13 -pb_1c : 71.13 -pb_5c : 71.10 -pb_10c : 71.10 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.14 -pb_1c : 71.14 -pb_5c : 71.10 -pb_10c : 71.10 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.15 -pb_1c : 71.15 -pb_5c : 71.15 -pb_10c : 71.10 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.16 -pb_1c : 71.16 -pb_5c : 71.15 -pb_10c : 71.10 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.17 -pb_1c : 71.17 -pb_5c : 71.15 -pb_10c : 71.10 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.18 -pb_1c : 71.18 -pb_5c : 71.15 -pb_10c : 71.10 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.19 -pb_1c : 71.19 -pb_5c : 71.15 -pb_10c : 71.10 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.20 -pb_1c : 71.20 -pb_5c : 71.20 -pb_10c : 71.20 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.21 -pb_1c : 71.21 -pb_5c : 71.20 -pb_10c : 71.20 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.22 -pb_1c : 71.22 -pb_5c : 71.20 -pb_10c : 71.20 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.23 -pb_1c : 71.23 -pb_5c : 71.20 -pb_10c : 71.20 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.24 -pb_1c : 71.24 -pb_5c : 71.20 -pb_10c : 71.20 -pb_25c : 71.00 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.25 -pb_1c : 71.25 -pb_5c : 71.25 -pb_10c : 71.20 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.26 -pb_1c : 71.26 -pb_5c : 71.25 -pb_10c : 71.20 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.27 -pb_1c : 71.27 -pb_5c : 71.25 -pb_10c : 71.20 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.28 -pb_1c : 71.28 -pb_5c : 71.25 -pb_10c : 71.20 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.29 -pb_1c : 71.29 -pb_5c : 71.25 -pb_10c : 71.20 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.30 -pb_1c : 71.30 -pb_5c : 71.30 -pb_10c : 71.30 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.31 -pb_1c : 71.31 -pb_5c : 71.30 -pb_10c : 71.30 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.32 -pb_1c : 71.32 -pb_5c : 71.30 -pb_10c : 71.30 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.33 -pb_1c : 71.33 -pb_5c : 71.30 -pb_10c : 71.30 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.34 -pb_1c : 71.34 -pb_5c : 71.30 -pb_10c : 71.30 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.35 -pb_1c : 71.35 -pb_5c : 71.35 -pb_10c : 71.30 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.36 -pb_1c : 71.36 -pb_5c : 71.35 -pb_10c : 71.30 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.37 -pb_1c : 71.37 -pb_5c : 71.35 -pb_10c : 71.30 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.38 -pb_1c : 71.38 -pb_5c : 71.35 -pb_10c : 71.30 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.39 -pb_1c : 71.39 -pb_5c : 71.35 -pb_10c : 71.30 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.40 -pb_1c : 71.40 -pb_5c : 71.40 -pb_10c : 71.40 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.41 -pb_1c : 71.41 -pb_5c : 71.40 -pb_10c : 71.40 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.42 -pb_1c : 71.42 -pb_5c : 71.40 -pb_10c : 71.40 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.43 -pb_1c : 71.43 -pb_5c : 71.40 -pb_10c : 71.40 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.44 -pb_1c : 71.44 -pb_5c : 71.40 -pb_10c : 71.40 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.45 -pb_1c : 71.45 -pb_5c : 71.45 -pb_10c : 71.40 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.46 -pb_1c : 71.46 -pb_5c : 71.45 -pb_10c : 71.40 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.47 -pb_1c : 71.47 -pb_5c : 71.45 -pb_10c : 71.40 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.48 -pb_1c : 71.48 -pb_5c : 71.45 -pb_10c : 71.40 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.49 -pb_1c : 71.49 -pb_5c : 71.45 -pb_10c : 71.40 -pb_25c : 71.25 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.50 -pb_1c : 71.50 -pb_5c : 71.50 -pb_10c : 71.50 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.51 -pb_1c : 71.51 -pb_5c : 71.50 -pb_10c : 71.50 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.52 -pb_1c : 71.52 -pb_5c : 71.50 -pb_10c : 71.50 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.53 -pb_1c : 71.53 -pb_5c : 71.50 -pb_10c : 71.50 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.54 -pb_1c : 71.54 -pb_5c : 71.50 -pb_10c : 71.50 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.55 -pb_1c : 71.55 -pb_5c : 71.55 -pb_10c : 71.50 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.56 -pb_1c : 71.56 -pb_5c : 71.55 -pb_10c : 71.50 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.57 -pb_1c : 71.57 -pb_5c : 71.55 -pb_10c : 71.50 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.58 -pb_1c : 71.58 -pb_5c : 71.55 -pb_10c : 71.50 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.59 -pb_1c : 71.59 -pb_5c : 71.55 -pb_10c : 71.50 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.60 -pb_1c : 71.60 -pb_5c : 71.60 -pb_10c : 71.60 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.61 -pb_1c : 71.61 -pb_5c : 71.60 -pb_10c : 71.60 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.62 -pb_1c : 71.62 -pb_5c : 71.60 -pb_10c : 71.60 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.63 -pb_1c : 71.63 -pb_5c : 71.60 -pb_10c : 71.60 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.64 -pb_1c : 71.64 -pb_5c : 71.60 -pb_10c : 71.60 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.65 -pb_1c : 71.65 -pb_5c : 71.65 -pb_10c : 71.60 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.66 -pb_1c : 71.66 -pb_5c : 71.65 -pb_10c : 71.60 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.67 -pb_1c : 71.67 -pb_5c : 71.65 -pb_10c : 71.60 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.68 -pb_1c : 71.68 -pb_5c : 71.65 -pb_10c : 71.60 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.69 -pb_1c : 71.69 -pb_5c : 71.65 -pb_10c : 71.60 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.70 -pb_1c : 71.70 -pb_5c : 71.70 -pb_10c : 71.70 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.71 -pb_1c : 71.71 -pb_5c : 71.70 -pb_10c : 71.70 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.72 -pb_1c : 71.72 -pb_5c : 71.70 -pb_10c : 71.70 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.73 -pb_1c : 71.73 -pb_5c : 71.70 -pb_10c : 71.70 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.74 -pb_1c : 71.74 -pb_5c : 71.70 -pb_10c : 71.70 -pb_25c : 71.50 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.75 -pb_1c : 71.75 -pb_5c : 71.75 -pb_10c : 71.70 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.76 -pb_1c : 71.76 -pb_5c : 71.75 -pb_10c : 71.70 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.77 -pb_1c : 71.77 -pb_5c : 71.75 -pb_10c : 71.70 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.78 -pb_1c : 71.78 -pb_5c : 71.75 -pb_10c : 71.70 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.79 -pb_1c : 71.79 -pb_5c : 71.75 -pb_10c : 71.70 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.80 -pb_1c : 71.80 -pb_5c : 71.80 -pb_10c : 71.80 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.81 -pb_1c : 71.81 -pb_5c : 71.80 -pb_10c : 71.80 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.82 -pb_1c : 71.82 -pb_5c : 71.80 -pb_10c : 71.80 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.83 -pb_1c : 71.83 -pb_5c : 71.80 -pb_10c : 71.80 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.84 -pb_1c : 71.84 -pb_5c : 71.80 -pb_10c : 71.80 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.85 -pb_1c : 71.85 -pb_5c : 71.85 -pb_10c : 71.80 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.86 -pb_1c : 71.86 -pb_5c : 71.85 -pb_10c : 71.80 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.87 -pb_1c : 71.87 -pb_5c : 71.85 -pb_10c : 71.80 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.88 -pb_1c : 71.88 -pb_5c : 71.85 -pb_10c : 71.80 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.89 -pb_1c : 71.89 -pb_5c : 71.85 -pb_10c : 71.80 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.90 -pb_1c : 71.90 -pb_5c : 71.90 -pb_10c : 71.90 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.91 -pb_1c : 71.91 -pb_5c : 71.90 -pb_10c : 71.90 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.92 -pb_1c : 71.92 -pb_5c : 71.90 -pb_10c : 71.90 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.93 -pb_1c : 71.93 -pb_5c : 71.90 -pb_10c : 71.90 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.94 -pb_1c : 71.94 -pb_5c : 71.90 -pb_10c : 71.90 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.95 -pb_1c : 71.95 -pb_5c : 71.95 -pb_10c : 71.90 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.96 -pb_1c : 71.96 -pb_5c : 71.95 -pb_10c : 71.90 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.97 -pb_1c : 71.97 -pb_5c : 71.95 -pb_10c : 71.90 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.98 -pb_1c : 71.98 -pb_5c : 71.95 -pb_10c : 71.90 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -71.99 -pb_1c : 71.99 -pb_5c : 71.95 -pb_10c : 71.90 -pb_25c : 71.75 -pb_1d : 71.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.00 -pb_1c : 72.00 -pb_5c : 72.00 -pb_10c : 72.00 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.01 -pb_1c : 72.01 -pb_5c : 72.00 -pb_10c : 72.00 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.02 -pb_1c : 72.02 -pb_5c : 72.00 -pb_10c : 72.00 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.03 -pb_1c : 72.03 -pb_5c : 72.00 -pb_10c : 72.00 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.04 -pb_1c : 72.04 -pb_5c : 72.00 -pb_10c : 72.00 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.05 -pb_1c : 72.05 -pb_5c : 72.05 -pb_10c : 72.00 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.06 -pb_1c : 72.06 -pb_5c : 72.05 -pb_10c : 72.00 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.07 -pb_1c : 72.07 -pb_5c : 72.05 -pb_10c : 72.00 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.08 -pb_1c : 72.08 -pb_5c : 72.05 -pb_10c : 72.00 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.09 -pb_1c : 72.09 -pb_5c : 72.05 -pb_10c : 72.00 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.10 -pb_1c : 72.10 -pb_5c : 72.10 -pb_10c : 72.10 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.11 -pb_1c : 72.11 -pb_5c : 72.10 -pb_10c : 72.10 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.12 -pb_1c : 72.12 -pb_5c : 72.10 -pb_10c : 72.10 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.13 -pb_1c : 72.13 -pb_5c : 72.10 -pb_10c : 72.10 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.14 -pb_1c : 72.14 -pb_5c : 72.10 -pb_10c : 72.10 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.15 -pb_1c : 72.15 -pb_5c : 72.15 -pb_10c : 72.10 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.16 -pb_1c : 72.16 -pb_5c : 72.15 -pb_10c : 72.10 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.17 -pb_1c : 72.17 -pb_5c : 72.15 -pb_10c : 72.10 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.18 -pb_1c : 72.18 -pb_5c : 72.15 -pb_10c : 72.10 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.19 -pb_1c : 72.19 -pb_5c : 72.15 -pb_10c : 72.10 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.20 -pb_1c : 72.20 -pb_5c : 72.20 -pb_10c : 72.20 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.21 -pb_1c : 72.21 -pb_5c : 72.20 -pb_10c : 72.20 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.22 -pb_1c : 72.22 -pb_5c : 72.20 -pb_10c : 72.20 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.23 -pb_1c : 72.23 -pb_5c : 72.20 -pb_10c : 72.20 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.24 -pb_1c : 72.24 -pb_5c : 72.20 -pb_10c : 72.20 -pb_25c : 72.00 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.25 -pb_1c : 72.25 -pb_5c : 72.25 -pb_10c : 72.20 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.26 -pb_1c : 72.26 -pb_5c : 72.25 -pb_10c : 72.20 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.27 -pb_1c : 72.27 -pb_5c : 72.25 -pb_10c : 72.20 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.28 -pb_1c : 72.28 -pb_5c : 72.25 -pb_10c : 72.20 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.29 -pb_1c : 72.29 -pb_5c : 72.25 -pb_10c : 72.20 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.30 -pb_1c : 72.30 -pb_5c : 72.30 -pb_10c : 72.30 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.31 -pb_1c : 72.31 -pb_5c : 72.30 -pb_10c : 72.30 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.32 -pb_1c : 72.32 -pb_5c : 72.30 -pb_10c : 72.30 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.33 -pb_1c : 72.33 -pb_5c : 72.30 -pb_10c : 72.30 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.34 -pb_1c : 72.34 -pb_5c : 72.30 -pb_10c : 72.30 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.35 -pb_1c : 72.35 -pb_5c : 72.35 -pb_10c : 72.30 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.36 -pb_1c : 72.36 -pb_5c : 72.35 -pb_10c : 72.30 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.37 -pb_1c : 72.37 -pb_5c : 72.35 -pb_10c : 72.30 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.38 -pb_1c : 72.38 -pb_5c : 72.35 -pb_10c : 72.30 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.39 -pb_1c : 72.39 -pb_5c : 72.35 -pb_10c : 72.30 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.40 -pb_1c : 72.40 -pb_5c : 72.40 -pb_10c : 72.40 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.41 -pb_1c : 72.41 -pb_5c : 72.40 -pb_10c : 72.40 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.42 -pb_1c : 72.42 -pb_5c : 72.40 -pb_10c : 72.40 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.43 -pb_1c : 72.43 -pb_5c : 72.40 -pb_10c : 72.40 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.44 -pb_1c : 72.44 -pb_5c : 72.40 -pb_10c : 72.40 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.45 -pb_1c : 72.45 -pb_5c : 72.45 -pb_10c : 72.40 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.46 -pb_1c : 72.46 -pb_5c : 72.45 -pb_10c : 72.40 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.47 -pb_1c : 72.47 -pb_5c : 72.45 -pb_10c : 72.40 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.48 -pb_1c : 72.48 -pb_5c : 72.45 -pb_10c : 72.40 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.49 -pb_1c : 72.49 -pb_5c : 72.45 -pb_10c : 72.40 -pb_25c : 72.25 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.50 -pb_1c : 72.50 -pb_5c : 72.50 -pb_10c : 72.50 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.51 -pb_1c : 72.51 -pb_5c : 72.50 -pb_10c : 72.50 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.52 -pb_1c : 72.52 -pb_5c : 72.50 -pb_10c : 72.50 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.53 -pb_1c : 72.53 -pb_5c : 72.50 -pb_10c : 72.50 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.54 -pb_1c : 72.54 -pb_5c : 72.50 -pb_10c : 72.50 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.55 -pb_1c : 72.55 -pb_5c : 72.55 -pb_10c : 72.50 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.56 -pb_1c : 72.56 -pb_5c : 72.55 -pb_10c : 72.50 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.57 -pb_1c : 72.57 -pb_5c : 72.55 -pb_10c : 72.50 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.58 -pb_1c : 72.58 -pb_5c : 72.55 -pb_10c : 72.50 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.59 -pb_1c : 72.59 -pb_5c : 72.55 -pb_10c : 72.50 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.60 -pb_1c : 72.60 -pb_5c : 72.60 -pb_10c : 72.60 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.61 -pb_1c : 72.61 -pb_5c : 72.60 -pb_10c : 72.60 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.62 -pb_1c : 72.62 -pb_5c : 72.60 -pb_10c : 72.60 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.63 -pb_1c : 72.63 -pb_5c : 72.60 -pb_10c : 72.60 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.64 -pb_1c : 72.64 -pb_5c : 72.60 -pb_10c : 72.60 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.65 -pb_1c : 72.65 -pb_5c : 72.65 -pb_10c : 72.60 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.66 -pb_1c : 72.66 -pb_5c : 72.65 -pb_10c : 72.60 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.67 -pb_1c : 72.67 -pb_5c : 72.65 -pb_10c : 72.60 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.68 -pb_1c : 72.68 -pb_5c : 72.65 -pb_10c : 72.60 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.69 -pb_1c : 72.69 -pb_5c : 72.65 -pb_10c : 72.60 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.70 -pb_1c : 72.70 -pb_5c : 72.70 -pb_10c : 72.70 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.71 -pb_1c : 72.71 -pb_5c : 72.70 -pb_10c : 72.70 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.72 -pb_1c : 72.72 -pb_5c : 72.70 -pb_10c : 72.70 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.73 -pb_1c : 72.73 -pb_5c : 72.70 -pb_10c : 72.70 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.74 -pb_1c : 72.74 -pb_5c : 72.70 -pb_10c : 72.70 -pb_25c : 72.50 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.75 -pb_1c : 72.75 -pb_5c : 72.75 -pb_10c : 72.70 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.76 -pb_1c : 72.76 -pb_5c : 72.75 -pb_10c : 72.70 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.77 -pb_1c : 72.77 -pb_5c : 72.75 -pb_10c : 72.70 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.78 -pb_1c : 72.78 -pb_5c : 72.75 -pb_10c : 72.70 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.79 -pb_1c : 72.79 -pb_5c : 72.75 -pb_10c : 72.70 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.80 -pb_1c : 72.80 -pb_5c : 72.80 -pb_10c : 72.80 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.81 -pb_1c : 72.81 -pb_5c : 72.80 -pb_10c : 72.80 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.82 -pb_1c : 72.82 -pb_5c : 72.80 -pb_10c : 72.80 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.83 -pb_1c : 72.83 -pb_5c : 72.80 -pb_10c : 72.80 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.84 -pb_1c : 72.84 -pb_5c : 72.80 -pb_10c : 72.80 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.85 -pb_1c : 72.85 -pb_5c : 72.85 -pb_10c : 72.80 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.86 -pb_1c : 72.86 -pb_5c : 72.85 -pb_10c : 72.80 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.87 -pb_1c : 72.87 -pb_5c : 72.85 -pb_10c : 72.80 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.88 -pb_1c : 72.88 -pb_5c : 72.85 -pb_10c : 72.80 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.89 -pb_1c : 72.89 -pb_5c : 72.85 -pb_10c : 72.80 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.90 -pb_1c : 72.90 -pb_5c : 72.90 -pb_10c : 72.90 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.91 -pb_1c : 72.91 -pb_5c : 72.90 -pb_10c : 72.90 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.92 -pb_1c : 72.92 -pb_5c : 72.90 -pb_10c : 72.90 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.93 -pb_1c : 72.93 -pb_5c : 72.90 -pb_10c : 72.90 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.94 -pb_1c : 72.94 -pb_5c : 72.90 -pb_10c : 72.90 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.95 -pb_1c : 72.95 -pb_5c : 72.95 -pb_10c : 72.90 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.96 -pb_1c : 72.96 -pb_5c : 72.95 -pb_10c : 72.90 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.97 -pb_1c : 72.97 -pb_5c : 72.95 -pb_10c : 72.90 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.98 -pb_1c : 72.98 -pb_5c : 72.95 -pb_10c : 72.90 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -72.99 -pb_1c : 72.99 -pb_5c : 72.95 -pb_10c : 72.90 -pb_25c : 72.75 -pb_1d : 72.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.00 -pb_1c : 73.00 -pb_5c : 73.00 -pb_10c : 73.00 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.01 -pb_1c : 73.01 -pb_5c : 73.00 -pb_10c : 73.00 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.02 -pb_1c : 73.02 -pb_5c : 73.00 -pb_10c : 73.00 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.03 -pb_1c : 73.03 -pb_5c : 73.00 -pb_10c : 73.00 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.04 -pb_1c : 73.04 -pb_5c : 73.00 -pb_10c : 73.00 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.05 -pb_1c : 73.05 -pb_5c : 73.05 -pb_10c : 73.00 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.06 -pb_1c : 73.06 -pb_5c : 73.05 -pb_10c : 73.00 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.07 -pb_1c : 73.07 -pb_5c : 73.05 -pb_10c : 73.00 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.08 -pb_1c : 73.08 -pb_5c : 73.05 -pb_10c : 73.00 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.09 -pb_1c : 73.09 -pb_5c : 73.05 -pb_10c : 73.00 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.10 -pb_1c : 73.10 -pb_5c : 73.10 -pb_10c : 73.10 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.11 -pb_1c : 73.11 -pb_5c : 73.10 -pb_10c : 73.10 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.12 -pb_1c : 73.12 -pb_5c : 73.10 -pb_10c : 73.10 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.13 -pb_1c : 73.13 -pb_5c : 73.10 -pb_10c : 73.10 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.14 -pb_1c : 73.14 -pb_5c : 73.10 -pb_10c : 73.10 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.15 -pb_1c : 73.15 -pb_5c : 73.15 -pb_10c : 73.10 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.16 -pb_1c : 73.16 -pb_5c : 73.15 -pb_10c : 73.10 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.17 -pb_1c : 73.17 -pb_5c : 73.15 -pb_10c : 73.10 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.18 -pb_1c : 73.18 -pb_5c : 73.15 -pb_10c : 73.10 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.19 -pb_1c : 73.19 -pb_5c : 73.15 -pb_10c : 73.10 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.20 -pb_1c : 73.20 -pb_5c : 73.20 -pb_10c : 73.20 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.21 -pb_1c : 73.21 -pb_5c : 73.20 -pb_10c : 73.20 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.22 -pb_1c : 73.22 -pb_5c : 73.20 -pb_10c : 73.20 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.23 -pb_1c : 73.23 -pb_5c : 73.20 -pb_10c : 73.20 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.24 -pb_1c : 73.24 -pb_5c : 73.20 -pb_10c : 73.20 -pb_25c : 73.00 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.25 -pb_1c : 73.25 -pb_5c : 73.25 -pb_10c : 73.20 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.26 -pb_1c : 73.26 -pb_5c : 73.25 -pb_10c : 73.20 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.27 -pb_1c : 73.27 -pb_5c : 73.25 -pb_10c : 73.20 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.28 -pb_1c : 73.28 -pb_5c : 73.25 -pb_10c : 73.20 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.29 -pb_1c : 73.29 -pb_5c : 73.25 -pb_10c : 73.20 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.30 -pb_1c : 73.30 -pb_5c : 73.30 -pb_10c : 73.30 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.31 -pb_1c : 73.31 -pb_5c : 73.30 -pb_10c : 73.30 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.32 -pb_1c : 73.32 -pb_5c : 73.30 -pb_10c : 73.30 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.33 -pb_1c : 73.33 -pb_5c : 73.30 -pb_10c : 73.30 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.34 -pb_1c : 73.34 -pb_5c : 73.30 -pb_10c : 73.30 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.35 -pb_1c : 73.35 -pb_5c : 73.35 -pb_10c : 73.30 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.36 -pb_1c : 73.36 -pb_5c : 73.35 -pb_10c : 73.30 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.37 -pb_1c : 73.37 -pb_5c : 73.35 -pb_10c : 73.30 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.38 -pb_1c : 73.38 -pb_5c : 73.35 -pb_10c : 73.30 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.39 -pb_1c : 73.39 -pb_5c : 73.35 -pb_10c : 73.30 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.40 -pb_1c : 73.40 -pb_5c : 73.40 -pb_10c : 73.40 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.41 -pb_1c : 73.41 -pb_5c : 73.40 -pb_10c : 73.40 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.42 -pb_1c : 73.42 -pb_5c : 73.40 -pb_10c : 73.40 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.43 -pb_1c : 73.43 -pb_5c : 73.40 -pb_10c : 73.40 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.44 -pb_1c : 73.44 -pb_5c : 73.40 -pb_10c : 73.40 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.45 -pb_1c : 73.45 -pb_5c : 73.45 -pb_10c : 73.40 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.46 -pb_1c : 73.46 -pb_5c : 73.45 -pb_10c : 73.40 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.47 -pb_1c : 73.47 -pb_5c : 73.45 -pb_10c : 73.40 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.48 -pb_1c : 73.48 -pb_5c : 73.45 -pb_10c : 73.40 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.49 -pb_1c : 73.49 -pb_5c : 73.45 -pb_10c : 73.40 -pb_25c : 73.25 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.50 -pb_1c : 73.50 -pb_5c : 73.50 -pb_10c : 73.50 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.51 -pb_1c : 73.51 -pb_5c : 73.50 -pb_10c : 73.50 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.52 -pb_1c : 73.52 -pb_5c : 73.50 -pb_10c : 73.50 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.53 -pb_1c : 73.53 -pb_5c : 73.50 -pb_10c : 73.50 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.54 -pb_1c : 73.54 -pb_5c : 73.50 -pb_10c : 73.50 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.55 -pb_1c : 73.55 -pb_5c : 73.55 -pb_10c : 73.50 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.56 -pb_1c : 73.56 -pb_5c : 73.55 -pb_10c : 73.50 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.57 -pb_1c : 73.57 -pb_5c : 73.55 -pb_10c : 73.50 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.58 -pb_1c : 73.58 -pb_5c : 73.55 -pb_10c : 73.50 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.59 -pb_1c : 73.59 -pb_5c : 73.55 -pb_10c : 73.50 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.60 -pb_1c : 73.60 -pb_5c : 73.60 -pb_10c : 73.60 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.61 -pb_1c : 73.61 -pb_5c : 73.60 -pb_10c : 73.60 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.62 -pb_1c : 73.62 -pb_5c : 73.60 -pb_10c : 73.60 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.63 -pb_1c : 73.63 -pb_5c : 73.60 -pb_10c : 73.60 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.64 -pb_1c : 73.64 -pb_5c : 73.60 -pb_10c : 73.60 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.65 -pb_1c : 73.65 -pb_5c : 73.65 -pb_10c : 73.60 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.66 -pb_1c : 73.66 -pb_5c : 73.65 -pb_10c : 73.60 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.67 -pb_1c : 73.67 -pb_5c : 73.65 -pb_10c : 73.60 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.68 -pb_1c : 73.68 -pb_5c : 73.65 -pb_10c : 73.60 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.69 -pb_1c : 73.69 -pb_5c : 73.65 -pb_10c : 73.60 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.70 -pb_1c : 73.70 -pb_5c : 73.70 -pb_10c : 73.70 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.71 -pb_1c : 73.71 -pb_5c : 73.70 -pb_10c : 73.70 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.72 -pb_1c : 73.72 -pb_5c : 73.70 -pb_10c : 73.70 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.73 -pb_1c : 73.73 -pb_5c : 73.70 -pb_10c : 73.70 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.74 -pb_1c : 73.74 -pb_5c : 73.70 -pb_10c : 73.70 -pb_25c : 73.50 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.75 -pb_1c : 73.75 -pb_5c : 73.75 -pb_10c : 73.70 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.76 -pb_1c : 73.76 -pb_5c : 73.75 -pb_10c : 73.70 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.77 -pb_1c : 73.77 -pb_5c : 73.75 -pb_10c : 73.70 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.78 -pb_1c : 73.78 -pb_5c : 73.75 -pb_10c : 73.70 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.79 -pb_1c : 73.79 -pb_5c : 73.75 -pb_10c : 73.70 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.80 -pb_1c : 73.80 -pb_5c : 73.80 -pb_10c : 73.80 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.81 -pb_1c : 73.81 -pb_5c : 73.80 -pb_10c : 73.80 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.82 -pb_1c : 73.82 -pb_5c : 73.80 -pb_10c : 73.80 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.83 -pb_1c : 73.83 -pb_5c : 73.80 -pb_10c : 73.80 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.84 -pb_1c : 73.84 -pb_5c : 73.80 -pb_10c : 73.80 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.85 -pb_1c : 73.85 -pb_5c : 73.85 -pb_10c : 73.80 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.86 -pb_1c : 73.86 -pb_5c : 73.85 -pb_10c : 73.80 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.87 -pb_1c : 73.87 -pb_5c : 73.85 -pb_10c : 73.80 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.88 -pb_1c : 73.88 -pb_5c : 73.85 -pb_10c : 73.80 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.89 -pb_1c : 73.89 -pb_5c : 73.85 -pb_10c : 73.80 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.90 -pb_1c : 73.90 -pb_5c : 73.90 -pb_10c : 73.90 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.91 -pb_1c : 73.91 -pb_5c : 73.90 -pb_10c : 73.90 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.92 -pb_1c : 73.92 -pb_5c : 73.90 -pb_10c : 73.90 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.93 -pb_1c : 73.93 -pb_5c : 73.90 -pb_10c : 73.90 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.94 -pb_1c : 73.94 -pb_5c : 73.90 -pb_10c : 73.90 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.95 -pb_1c : 73.95 -pb_5c : 73.95 -pb_10c : 73.90 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.96 -pb_1c : 73.96 -pb_5c : 73.95 -pb_10c : 73.90 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.97 -pb_1c : 73.97 -pb_5c : 73.95 -pb_10c : 73.90 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.98 -pb_1c : 73.98 -pb_5c : 73.95 -pb_10c : 73.90 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -73.99 -pb_1c : 73.99 -pb_5c : 73.95 -pb_10c : 73.90 -pb_25c : 73.75 -pb_1d : 73.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.00 -pb_1c : 74.00 -pb_5c : 74.00 -pb_10c : 74.00 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.01 -pb_1c : 74.01 -pb_5c : 74.00 -pb_10c : 74.00 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.02 -pb_1c : 74.02 -pb_5c : 74.00 -pb_10c : 74.00 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.03 -pb_1c : 74.03 -pb_5c : 74.00 -pb_10c : 74.00 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.04 -pb_1c : 74.04 -pb_5c : 74.00 -pb_10c : 74.00 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.05 -pb_1c : 74.05 -pb_5c : 74.05 -pb_10c : 74.00 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.06 -pb_1c : 74.06 -pb_5c : 74.05 -pb_10c : 74.00 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.07 -pb_1c : 74.07 -pb_5c : 74.05 -pb_10c : 74.00 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.08 -pb_1c : 74.08 -pb_5c : 74.05 -pb_10c : 74.00 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.09 -pb_1c : 74.09 -pb_5c : 74.05 -pb_10c : 74.00 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.10 -pb_1c : 74.10 -pb_5c : 74.10 -pb_10c : 74.10 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.11 -pb_1c : 74.11 -pb_5c : 74.10 -pb_10c : 74.10 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.12 -pb_1c : 74.12 -pb_5c : 74.10 -pb_10c : 74.10 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.13 -pb_1c : 74.13 -pb_5c : 74.10 -pb_10c : 74.10 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.14 -pb_1c : 74.14 -pb_5c : 74.10 -pb_10c : 74.10 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.15 -pb_1c : 74.15 -pb_5c : 74.15 -pb_10c : 74.10 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.16 -pb_1c : 74.16 -pb_5c : 74.15 -pb_10c : 74.10 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.17 -pb_1c : 74.17 -pb_5c : 74.15 -pb_10c : 74.10 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.18 -pb_1c : 74.18 -pb_5c : 74.15 -pb_10c : 74.10 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.19 -pb_1c : 74.19 -pb_5c : 74.15 -pb_10c : 74.10 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.20 -pb_1c : 74.20 -pb_5c : 74.20 -pb_10c : 74.20 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.21 -pb_1c : 74.21 -pb_5c : 74.20 -pb_10c : 74.20 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.22 -pb_1c : 74.22 -pb_5c : 74.20 -pb_10c : 74.20 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.23 -pb_1c : 74.23 -pb_5c : 74.20 -pb_10c : 74.20 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.24 -pb_1c : 74.24 -pb_5c : 74.20 -pb_10c : 74.20 -pb_25c : 74.00 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.25 -pb_1c : 74.25 -pb_5c : 74.25 -pb_10c : 74.20 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.26 -pb_1c : 74.26 -pb_5c : 74.25 -pb_10c : 74.20 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.27 -pb_1c : 74.27 -pb_5c : 74.25 -pb_10c : 74.20 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.28 -pb_1c : 74.28 -pb_5c : 74.25 -pb_10c : 74.20 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.29 -pb_1c : 74.29 -pb_5c : 74.25 -pb_10c : 74.20 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.30 -pb_1c : 74.30 -pb_5c : 74.30 -pb_10c : 74.30 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.31 -pb_1c : 74.31 -pb_5c : 74.30 -pb_10c : 74.30 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.32 -pb_1c : 74.32 -pb_5c : 74.30 -pb_10c : 74.30 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.33 -pb_1c : 74.33 -pb_5c : 74.30 -pb_10c : 74.30 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.34 -pb_1c : 74.34 -pb_5c : 74.30 -pb_10c : 74.30 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.35 -pb_1c : 74.35 -pb_5c : 74.35 -pb_10c : 74.30 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.36 -pb_1c : 74.36 -pb_5c : 74.35 -pb_10c : 74.30 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.37 -pb_1c : 74.37 -pb_5c : 74.35 -pb_10c : 74.30 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.38 -pb_1c : 74.38 -pb_5c : 74.35 -pb_10c : 74.30 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.39 -pb_1c : 74.39 -pb_5c : 74.35 -pb_10c : 74.30 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.40 -pb_1c : 74.40 -pb_5c : 74.40 -pb_10c : 74.40 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.41 -pb_1c : 74.41 -pb_5c : 74.40 -pb_10c : 74.40 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.42 -pb_1c : 74.42 -pb_5c : 74.40 -pb_10c : 74.40 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.43 -pb_1c : 74.43 -pb_5c : 74.40 -pb_10c : 74.40 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.44 -pb_1c : 74.44 -pb_5c : 74.40 -pb_10c : 74.40 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.45 -pb_1c : 74.45 -pb_5c : 74.45 -pb_10c : 74.40 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.46 -pb_1c : 74.46 -pb_5c : 74.45 -pb_10c : 74.40 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.47 -pb_1c : 74.47 -pb_5c : 74.45 -pb_10c : 74.40 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.48 -pb_1c : 74.48 -pb_5c : 74.45 -pb_10c : 74.40 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.49 -pb_1c : 74.49 -pb_5c : 74.45 -pb_10c : 74.40 -pb_25c : 74.25 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.50 -pb_1c : 74.50 -pb_5c : 74.50 -pb_10c : 74.50 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.51 -pb_1c : 74.51 -pb_5c : 74.50 -pb_10c : 74.50 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.52 -pb_1c : 74.52 -pb_5c : 74.50 -pb_10c : 74.50 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.53 -pb_1c : 74.53 -pb_5c : 74.50 -pb_10c : 74.50 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.54 -pb_1c : 74.54 -pb_5c : 74.50 -pb_10c : 74.50 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.55 -pb_1c : 74.55 -pb_5c : 74.55 -pb_10c : 74.50 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.56 -pb_1c : 74.56 -pb_5c : 74.55 -pb_10c : 74.50 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.57 -pb_1c : 74.57 -pb_5c : 74.55 -pb_10c : 74.50 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.58 -pb_1c : 74.58 -pb_5c : 74.55 -pb_10c : 74.50 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.59 -pb_1c : 74.59 -pb_5c : 74.55 -pb_10c : 74.50 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.60 -pb_1c : 74.60 -pb_5c : 74.60 -pb_10c : 74.60 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.61 -pb_1c : 74.61 -pb_5c : 74.60 -pb_10c : 74.60 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.62 -pb_1c : 74.62 -pb_5c : 74.60 -pb_10c : 74.60 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.63 -pb_1c : 74.63 -pb_5c : 74.60 -pb_10c : 74.60 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.64 -pb_1c : 74.64 -pb_5c : 74.60 -pb_10c : 74.60 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.65 -pb_1c : 74.65 -pb_5c : 74.65 -pb_10c : 74.60 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.66 -pb_1c : 74.66 -pb_5c : 74.65 -pb_10c : 74.60 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.67 -pb_1c : 74.67 -pb_5c : 74.65 -pb_10c : 74.60 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.68 -pb_1c : 74.68 -pb_5c : 74.65 -pb_10c : 74.60 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.69 -pb_1c : 74.69 -pb_5c : 74.65 -pb_10c : 74.60 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.70 -pb_1c : 74.70 -pb_5c : 74.70 -pb_10c : 74.70 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.71 -pb_1c : 74.71 -pb_5c : 74.70 -pb_10c : 74.70 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.72 -pb_1c : 74.72 -pb_5c : 74.70 -pb_10c : 74.70 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.73 -pb_1c : 74.73 -pb_5c : 74.70 -pb_10c : 74.70 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.74 -pb_1c : 74.74 -pb_5c : 74.70 -pb_10c : 74.70 -pb_25c : 74.50 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.75 -pb_1c : 74.75 -pb_5c : 74.75 -pb_10c : 74.70 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.76 -pb_1c : 74.76 -pb_5c : 74.75 -pb_10c : 74.70 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.77 -pb_1c : 74.77 -pb_5c : 74.75 -pb_10c : 74.70 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.78 -pb_1c : 74.78 -pb_5c : 74.75 -pb_10c : 74.70 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.79 -pb_1c : 74.79 -pb_5c : 74.75 -pb_10c : 74.70 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.80 -pb_1c : 74.80 -pb_5c : 74.80 -pb_10c : 74.80 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.81 -pb_1c : 74.81 -pb_5c : 74.80 -pb_10c : 74.80 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.82 -pb_1c : 74.82 -pb_5c : 74.80 -pb_10c : 74.80 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.83 -pb_1c : 74.83 -pb_5c : 74.80 -pb_10c : 74.80 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.84 -pb_1c : 74.84 -pb_5c : 74.80 -pb_10c : 74.80 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.85 -pb_1c : 74.85 -pb_5c : 74.85 -pb_10c : 74.80 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.86 -pb_1c : 74.86 -pb_5c : 74.85 -pb_10c : 74.80 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.87 -pb_1c : 74.87 -pb_5c : 74.85 -pb_10c : 74.80 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.88 -pb_1c : 74.88 -pb_5c : 74.85 -pb_10c : 74.80 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.89 -pb_1c : 74.89 -pb_5c : 74.85 -pb_10c : 74.80 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.90 -pb_1c : 74.90 -pb_5c : 74.90 -pb_10c : 74.90 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.91 -pb_1c : 74.91 -pb_5c : 74.90 -pb_10c : 74.90 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.92 -pb_1c : 74.92 -pb_5c : 74.90 -pb_10c : 74.90 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.93 -pb_1c : 74.93 -pb_5c : 74.90 -pb_10c : 74.90 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.94 -pb_1c : 74.94 -pb_5c : 74.90 -pb_10c : 74.90 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.95 -pb_1c : 74.95 -pb_5c : 74.95 -pb_10c : 74.90 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.96 -pb_1c : 74.96 -pb_5c : 74.95 -pb_10c : 74.90 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.97 -pb_1c : 74.97 -pb_5c : 74.95 -pb_10c : 74.90 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.98 -pb_1c : 74.98 -pb_5c : 74.95 -pb_10c : 74.90 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -74.99 -pb_1c : 74.99 -pb_5c : 74.95 -pb_10c : 74.90 -pb_25c : 74.75 -pb_1d : 74.00 -pb_5d : 70.00 -pb_10d : 70.00 - -75.00 -pb_1c : 75.00 -pb_5c : 75.00 -pb_10c : 75.00 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.01 -pb_1c : 75.01 -pb_5c : 75.00 -pb_10c : 75.00 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.02 -pb_1c : 75.02 -pb_5c : 75.00 -pb_10c : 75.00 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.03 -pb_1c : 75.03 -pb_5c : 75.00 -pb_10c : 75.00 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.04 -pb_1c : 75.04 -pb_5c : 75.00 -pb_10c : 75.00 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.05 -pb_1c : 75.05 -pb_5c : 75.05 -pb_10c : 75.00 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.06 -pb_1c : 75.06 -pb_5c : 75.05 -pb_10c : 75.00 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.07 -pb_1c : 75.07 -pb_5c : 75.05 -pb_10c : 75.00 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.08 -pb_1c : 75.08 -pb_5c : 75.05 -pb_10c : 75.00 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.09 -pb_1c : 75.09 -pb_5c : 75.05 -pb_10c : 75.00 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.10 -pb_1c : 75.10 -pb_5c : 75.10 -pb_10c : 75.10 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.11 -pb_1c : 75.11 -pb_5c : 75.10 -pb_10c : 75.10 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.12 -pb_1c : 75.12 -pb_5c : 75.10 -pb_10c : 75.10 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.13 -pb_1c : 75.13 -pb_5c : 75.10 -pb_10c : 75.10 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.14 -pb_1c : 75.14 -pb_5c : 75.10 -pb_10c : 75.10 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.15 -pb_1c : 75.15 -pb_5c : 75.15 -pb_10c : 75.10 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.16 -pb_1c : 75.16 -pb_5c : 75.15 -pb_10c : 75.10 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.17 -pb_1c : 75.17 -pb_5c : 75.15 -pb_10c : 75.10 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.18 -pb_1c : 75.18 -pb_5c : 75.15 -pb_10c : 75.10 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.19 -pb_1c : 75.19 -pb_5c : 75.15 -pb_10c : 75.10 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.20 -pb_1c : 75.20 -pb_5c : 75.20 -pb_10c : 75.20 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.21 -pb_1c : 75.21 -pb_5c : 75.20 -pb_10c : 75.20 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.22 -pb_1c : 75.22 -pb_5c : 75.20 -pb_10c : 75.20 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.23 -pb_1c : 75.23 -pb_5c : 75.20 -pb_10c : 75.20 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.24 -pb_1c : 75.24 -pb_5c : 75.20 -pb_10c : 75.20 -pb_25c : 75.00 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.25 -pb_1c : 75.25 -pb_5c : 75.25 -pb_10c : 75.20 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.26 -pb_1c : 75.26 -pb_5c : 75.25 -pb_10c : 75.20 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.27 -pb_1c : 75.27 -pb_5c : 75.25 -pb_10c : 75.20 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.28 -pb_1c : 75.28 -pb_5c : 75.25 -pb_10c : 75.20 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.29 -pb_1c : 75.29 -pb_5c : 75.25 -pb_10c : 75.20 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.30 -pb_1c : 75.30 -pb_5c : 75.30 -pb_10c : 75.30 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.31 -pb_1c : 75.31 -pb_5c : 75.30 -pb_10c : 75.30 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.32 -pb_1c : 75.32 -pb_5c : 75.30 -pb_10c : 75.30 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.33 -pb_1c : 75.33 -pb_5c : 75.30 -pb_10c : 75.30 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.34 -pb_1c : 75.34 -pb_5c : 75.30 -pb_10c : 75.30 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.35 -pb_1c : 75.35 -pb_5c : 75.35 -pb_10c : 75.30 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.36 -pb_1c : 75.36 -pb_5c : 75.35 -pb_10c : 75.30 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.37 -pb_1c : 75.37 -pb_5c : 75.35 -pb_10c : 75.30 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.38 -pb_1c : 75.38 -pb_5c : 75.35 -pb_10c : 75.30 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.39 -pb_1c : 75.39 -pb_5c : 75.35 -pb_10c : 75.30 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.40 -pb_1c : 75.40 -pb_5c : 75.40 -pb_10c : 75.40 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.41 -pb_1c : 75.41 -pb_5c : 75.40 -pb_10c : 75.40 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.42 -pb_1c : 75.42 -pb_5c : 75.40 -pb_10c : 75.40 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.43 -pb_1c : 75.43 -pb_5c : 75.40 -pb_10c : 75.40 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.44 -pb_1c : 75.44 -pb_5c : 75.40 -pb_10c : 75.40 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.45 -pb_1c : 75.45 -pb_5c : 75.45 -pb_10c : 75.40 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.46 -pb_1c : 75.46 -pb_5c : 75.45 -pb_10c : 75.40 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.47 -pb_1c : 75.47 -pb_5c : 75.45 -pb_10c : 75.40 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.48 -pb_1c : 75.48 -pb_5c : 75.45 -pb_10c : 75.40 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.49 -pb_1c : 75.49 -pb_5c : 75.45 -pb_10c : 75.40 -pb_25c : 75.25 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.50 -pb_1c : 75.50 -pb_5c : 75.50 -pb_10c : 75.50 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.51 -pb_1c : 75.51 -pb_5c : 75.50 -pb_10c : 75.50 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.52 -pb_1c : 75.52 -pb_5c : 75.50 -pb_10c : 75.50 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.53 -pb_1c : 75.53 -pb_5c : 75.50 -pb_10c : 75.50 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.54 -pb_1c : 75.54 -pb_5c : 75.50 -pb_10c : 75.50 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.55 -pb_1c : 75.55 -pb_5c : 75.55 -pb_10c : 75.50 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.56 -pb_1c : 75.56 -pb_5c : 75.55 -pb_10c : 75.50 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.57 -pb_1c : 75.57 -pb_5c : 75.55 -pb_10c : 75.50 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.58 -pb_1c : 75.58 -pb_5c : 75.55 -pb_10c : 75.50 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.59 -pb_1c : 75.59 -pb_5c : 75.55 -pb_10c : 75.50 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.60 -pb_1c : 75.60 -pb_5c : 75.60 -pb_10c : 75.60 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.61 -pb_1c : 75.61 -pb_5c : 75.60 -pb_10c : 75.60 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.62 -pb_1c : 75.62 -pb_5c : 75.60 -pb_10c : 75.60 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.63 -pb_1c : 75.63 -pb_5c : 75.60 -pb_10c : 75.60 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.64 -pb_1c : 75.64 -pb_5c : 75.60 -pb_10c : 75.60 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.65 -pb_1c : 75.65 -pb_5c : 75.65 -pb_10c : 75.60 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.66 -pb_1c : 75.66 -pb_5c : 75.65 -pb_10c : 75.60 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.67 -pb_1c : 75.67 -pb_5c : 75.65 -pb_10c : 75.60 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.68 -pb_1c : 75.68 -pb_5c : 75.65 -pb_10c : 75.60 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.69 -pb_1c : 75.69 -pb_5c : 75.65 -pb_10c : 75.60 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.70 -pb_1c : 75.70 -pb_5c : 75.70 -pb_10c : 75.70 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.71 -pb_1c : 75.71 -pb_5c : 75.70 -pb_10c : 75.70 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.72 -pb_1c : 75.72 -pb_5c : 75.70 -pb_10c : 75.70 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.73 -pb_1c : 75.73 -pb_5c : 75.70 -pb_10c : 75.70 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.74 -pb_1c : 75.74 -pb_5c : 75.70 -pb_10c : 75.70 -pb_25c : 75.50 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.75 -pb_1c : 75.75 -pb_5c : 75.75 -pb_10c : 75.70 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.76 -pb_1c : 75.76 -pb_5c : 75.75 -pb_10c : 75.70 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.77 -pb_1c : 75.77 -pb_5c : 75.75 -pb_10c : 75.70 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.78 -pb_1c : 75.78 -pb_5c : 75.75 -pb_10c : 75.70 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.79 -pb_1c : 75.79 -pb_5c : 75.75 -pb_10c : 75.70 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.80 -pb_1c : 75.80 -pb_5c : 75.80 -pb_10c : 75.80 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.81 -pb_1c : 75.81 -pb_5c : 75.80 -pb_10c : 75.80 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.82 -pb_1c : 75.82 -pb_5c : 75.80 -pb_10c : 75.80 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.83 -pb_1c : 75.83 -pb_5c : 75.80 -pb_10c : 75.80 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.84 -pb_1c : 75.84 -pb_5c : 75.80 -pb_10c : 75.80 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.85 -pb_1c : 75.85 -pb_5c : 75.85 -pb_10c : 75.80 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.86 -pb_1c : 75.86 -pb_5c : 75.85 -pb_10c : 75.80 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.87 -pb_1c : 75.87 -pb_5c : 75.85 -pb_10c : 75.80 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.88 -pb_1c : 75.88 -pb_5c : 75.85 -pb_10c : 75.80 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.89 -pb_1c : 75.89 -pb_5c : 75.85 -pb_10c : 75.80 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.90 -pb_1c : 75.90 -pb_5c : 75.90 -pb_10c : 75.90 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.91 -pb_1c : 75.91 -pb_5c : 75.90 -pb_10c : 75.90 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.92 -pb_1c : 75.92 -pb_5c : 75.90 -pb_10c : 75.90 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.93 -pb_1c : 75.93 -pb_5c : 75.90 -pb_10c : 75.90 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.94 -pb_1c : 75.94 -pb_5c : 75.90 -pb_10c : 75.90 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.95 -pb_1c : 75.95 -pb_5c : 75.95 -pb_10c : 75.90 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.96 -pb_1c : 75.96 -pb_5c : 75.95 -pb_10c : 75.90 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.97 -pb_1c : 75.97 -pb_5c : 75.95 -pb_10c : 75.90 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.98 -pb_1c : 75.98 -pb_5c : 75.95 -pb_10c : 75.90 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -75.99 -pb_1c : 75.99 -pb_5c : 75.95 -pb_10c : 75.90 -pb_25c : 75.75 -pb_1d : 75.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.00 -pb_1c : 76.00 -pb_5c : 76.00 -pb_10c : 76.00 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.01 -pb_1c : 76.01 -pb_5c : 76.00 -pb_10c : 76.00 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.02 -pb_1c : 76.02 -pb_5c : 76.00 -pb_10c : 76.00 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.03 -pb_1c : 76.03 -pb_5c : 76.00 -pb_10c : 76.00 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.04 -pb_1c : 76.04 -pb_5c : 76.00 -pb_10c : 76.00 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.05 -pb_1c : 76.05 -pb_5c : 76.05 -pb_10c : 76.00 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.06 -pb_1c : 76.06 -pb_5c : 76.05 -pb_10c : 76.00 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.07 -pb_1c : 76.07 -pb_5c : 76.05 -pb_10c : 76.00 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.08 -pb_1c : 76.08 -pb_5c : 76.05 -pb_10c : 76.00 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.09 -pb_1c : 76.09 -pb_5c : 76.05 -pb_10c : 76.00 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.10 -pb_1c : 76.10 -pb_5c : 76.10 -pb_10c : 76.10 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.11 -pb_1c : 76.11 -pb_5c : 76.10 -pb_10c : 76.10 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.12 -pb_1c : 76.12 -pb_5c : 76.10 -pb_10c : 76.10 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.13 -pb_1c : 76.13 -pb_5c : 76.10 -pb_10c : 76.10 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.14 -pb_1c : 76.14 -pb_5c : 76.10 -pb_10c : 76.10 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.15 -pb_1c : 76.15 -pb_5c : 76.15 -pb_10c : 76.10 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.16 -pb_1c : 76.16 -pb_5c : 76.15 -pb_10c : 76.10 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.17 -pb_1c : 76.17 -pb_5c : 76.15 -pb_10c : 76.10 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.18 -pb_1c : 76.18 -pb_5c : 76.15 -pb_10c : 76.10 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.19 -pb_1c : 76.19 -pb_5c : 76.15 -pb_10c : 76.10 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.20 -pb_1c : 76.20 -pb_5c : 76.20 -pb_10c : 76.20 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.21 -pb_1c : 76.21 -pb_5c : 76.20 -pb_10c : 76.20 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.22 -pb_1c : 76.22 -pb_5c : 76.20 -pb_10c : 76.20 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.23 -pb_1c : 76.23 -pb_5c : 76.20 -pb_10c : 76.20 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.24 -pb_1c : 76.24 -pb_5c : 76.20 -pb_10c : 76.20 -pb_25c : 76.00 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.25 -pb_1c : 76.25 -pb_5c : 76.25 -pb_10c : 76.20 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.26 -pb_1c : 76.26 -pb_5c : 76.25 -pb_10c : 76.20 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.27 -pb_1c : 76.27 -pb_5c : 76.25 -pb_10c : 76.20 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.28 -pb_1c : 76.28 -pb_5c : 76.25 -pb_10c : 76.20 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.29 -pb_1c : 76.29 -pb_5c : 76.25 -pb_10c : 76.20 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.30 -pb_1c : 76.30 -pb_5c : 76.30 -pb_10c : 76.30 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.31 -pb_1c : 76.31 -pb_5c : 76.30 -pb_10c : 76.30 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.32 -pb_1c : 76.32 -pb_5c : 76.30 -pb_10c : 76.30 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.33 -pb_1c : 76.33 -pb_5c : 76.30 -pb_10c : 76.30 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.34 -pb_1c : 76.34 -pb_5c : 76.30 -pb_10c : 76.30 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.35 -pb_1c : 76.35 -pb_5c : 76.35 -pb_10c : 76.30 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.36 -pb_1c : 76.36 -pb_5c : 76.35 -pb_10c : 76.30 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.37 -pb_1c : 76.37 -pb_5c : 76.35 -pb_10c : 76.30 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.38 -pb_1c : 76.38 -pb_5c : 76.35 -pb_10c : 76.30 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.39 -pb_1c : 76.39 -pb_5c : 76.35 -pb_10c : 76.30 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.40 -pb_1c : 76.40 -pb_5c : 76.40 -pb_10c : 76.40 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.41 -pb_1c : 76.41 -pb_5c : 76.40 -pb_10c : 76.40 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.42 -pb_1c : 76.42 -pb_5c : 76.40 -pb_10c : 76.40 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.43 -pb_1c : 76.43 -pb_5c : 76.40 -pb_10c : 76.40 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.44 -pb_1c : 76.44 -pb_5c : 76.40 -pb_10c : 76.40 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.45 -pb_1c : 76.45 -pb_5c : 76.45 -pb_10c : 76.40 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.46 -pb_1c : 76.46 -pb_5c : 76.45 -pb_10c : 76.40 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.47 -pb_1c : 76.47 -pb_5c : 76.45 -pb_10c : 76.40 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.48 -pb_1c : 76.48 -pb_5c : 76.45 -pb_10c : 76.40 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.49 -pb_1c : 76.49 -pb_5c : 76.45 -pb_10c : 76.40 -pb_25c : 76.25 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.50 -pb_1c : 76.50 -pb_5c : 76.50 -pb_10c : 76.50 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.51 -pb_1c : 76.51 -pb_5c : 76.50 -pb_10c : 76.50 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.52 -pb_1c : 76.52 -pb_5c : 76.50 -pb_10c : 76.50 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.53 -pb_1c : 76.53 -pb_5c : 76.50 -pb_10c : 76.50 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.54 -pb_1c : 76.54 -pb_5c : 76.50 -pb_10c : 76.50 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.55 -pb_1c : 76.55 -pb_5c : 76.55 -pb_10c : 76.50 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.56 -pb_1c : 76.56 -pb_5c : 76.55 -pb_10c : 76.50 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.57 -pb_1c : 76.57 -pb_5c : 76.55 -pb_10c : 76.50 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.58 -pb_1c : 76.58 -pb_5c : 76.55 -pb_10c : 76.50 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.59 -pb_1c : 76.59 -pb_5c : 76.55 -pb_10c : 76.50 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.60 -pb_1c : 76.60 -pb_5c : 76.60 -pb_10c : 76.60 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.61 -pb_1c : 76.61 -pb_5c : 76.60 -pb_10c : 76.60 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.62 -pb_1c : 76.62 -pb_5c : 76.60 -pb_10c : 76.60 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.63 -pb_1c : 76.63 -pb_5c : 76.60 -pb_10c : 76.60 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.64 -pb_1c : 76.64 -pb_5c : 76.60 -pb_10c : 76.60 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.65 -pb_1c : 76.65 -pb_5c : 76.65 -pb_10c : 76.60 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.66 -pb_1c : 76.66 -pb_5c : 76.65 -pb_10c : 76.60 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.67 -pb_1c : 76.67 -pb_5c : 76.65 -pb_10c : 76.60 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.68 -pb_1c : 76.68 -pb_5c : 76.65 -pb_10c : 76.60 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.69 -pb_1c : 76.69 -pb_5c : 76.65 -pb_10c : 76.60 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.70 -pb_1c : 76.70 -pb_5c : 76.70 -pb_10c : 76.70 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.71 -pb_1c : 76.71 -pb_5c : 76.70 -pb_10c : 76.70 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.72 -pb_1c : 76.72 -pb_5c : 76.70 -pb_10c : 76.70 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.73 -pb_1c : 76.73 -pb_5c : 76.70 -pb_10c : 76.70 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.74 -pb_1c : 76.74 -pb_5c : 76.70 -pb_10c : 76.70 -pb_25c : 76.50 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.75 -pb_1c : 76.75 -pb_5c : 76.75 -pb_10c : 76.70 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.76 -pb_1c : 76.76 -pb_5c : 76.75 -pb_10c : 76.70 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.77 -pb_1c : 76.77 -pb_5c : 76.75 -pb_10c : 76.70 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.78 -pb_1c : 76.78 -pb_5c : 76.75 -pb_10c : 76.70 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.79 -pb_1c : 76.79 -pb_5c : 76.75 -pb_10c : 76.70 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.80 -pb_1c : 76.80 -pb_5c : 76.80 -pb_10c : 76.80 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.81 -pb_1c : 76.81 -pb_5c : 76.80 -pb_10c : 76.80 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.82 -pb_1c : 76.82 -pb_5c : 76.80 -pb_10c : 76.80 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.83 -pb_1c : 76.83 -pb_5c : 76.80 -pb_10c : 76.80 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.84 -pb_1c : 76.84 -pb_5c : 76.80 -pb_10c : 76.80 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.85 -pb_1c : 76.85 -pb_5c : 76.85 -pb_10c : 76.80 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.86 -pb_1c : 76.86 -pb_5c : 76.85 -pb_10c : 76.80 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.87 -pb_1c : 76.87 -pb_5c : 76.85 -pb_10c : 76.80 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.88 -pb_1c : 76.88 -pb_5c : 76.85 -pb_10c : 76.80 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.89 -pb_1c : 76.89 -pb_5c : 76.85 -pb_10c : 76.80 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.90 -pb_1c : 76.90 -pb_5c : 76.90 -pb_10c : 76.90 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.91 -pb_1c : 76.91 -pb_5c : 76.90 -pb_10c : 76.90 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.92 -pb_1c : 76.92 -pb_5c : 76.90 -pb_10c : 76.90 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.93 -pb_1c : 76.93 -pb_5c : 76.90 -pb_10c : 76.90 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.94 -pb_1c : 76.94 -pb_5c : 76.90 -pb_10c : 76.90 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.95 -pb_1c : 76.95 -pb_5c : 76.95 -pb_10c : 76.90 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.96 -pb_1c : 76.96 -pb_5c : 76.95 -pb_10c : 76.90 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.97 -pb_1c : 76.97 -pb_5c : 76.95 -pb_10c : 76.90 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.98 -pb_1c : 76.98 -pb_5c : 76.95 -pb_10c : 76.90 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -76.99 -pb_1c : 76.99 -pb_5c : 76.95 -pb_10c : 76.90 -pb_25c : 76.75 -pb_1d : 76.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.00 -pb_1c : 77.00 -pb_5c : 77.00 -pb_10c : 77.00 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.01 -pb_1c : 77.01 -pb_5c : 77.00 -pb_10c : 77.00 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.02 -pb_1c : 77.02 -pb_5c : 77.00 -pb_10c : 77.00 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.03 -pb_1c : 77.03 -pb_5c : 77.00 -pb_10c : 77.00 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.04 -pb_1c : 77.04 -pb_5c : 77.00 -pb_10c : 77.00 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.05 -pb_1c : 77.05 -pb_5c : 77.05 -pb_10c : 77.00 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.06 -pb_1c : 77.06 -pb_5c : 77.05 -pb_10c : 77.00 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.07 -pb_1c : 77.07 -pb_5c : 77.05 -pb_10c : 77.00 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.08 -pb_1c : 77.08 -pb_5c : 77.05 -pb_10c : 77.00 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.09 -pb_1c : 77.09 -pb_5c : 77.05 -pb_10c : 77.00 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.10 -pb_1c : 77.10 -pb_5c : 77.10 -pb_10c : 77.10 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.11 -pb_1c : 77.11 -pb_5c : 77.10 -pb_10c : 77.10 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.12 -pb_1c : 77.12 -pb_5c : 77.10 -pb_10c : 77.10 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.13 -pb_1c : 77.13 -pb_5c : 77.10 -pb_10c : 77.10 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.14 -pb_1c : 77.14 -pb_5c : 77.10 -pb_10c : 77.10 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.15 -pb_1c : 77.15 -pb_5c : 77.15 -pb_10c : 77.10 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.16 -pb_1c : 77.16 -pb_5c : 77.15 -pb_10c : 77.10 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.17 -pb_1c : 77.17 -pb_5c : 77.15 -pb_10c : 77.10 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.18 -pb_1c : 77.18 -pb_5c : 77.15 -pb_10c : 77.10 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.19 -pb_1c : 77.19 -pb_5c : 77.15 -pb_10c : 77.10 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.20 -pb_1c : 77.20 -pb_5c : 77.20 -pb_10c : 77.20 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.21 -pb_1c : 77.21 -pb_5c : 77.20 -pb_10c : 77.20 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.22 -pb_1c : 77.22 -pb_5c : 77.20 -pb_10c : 77.20 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.23 -pb_1c : 77.23 -pb_5c : 77.20 -pb_10c : 77.20 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.24 -pb_1c : 77.24 -pb_5c : 77.20 -pb_10c : 77.20 -pb_25c : 77.00 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.25 -pb_1c : 77.25 -pb_5c : 77.25 -pb_10c : 77.20 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.26 -pb_1c : 77.26 -pb_5c : 77.25 -pb_10c : 77.20 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.27 -pb_1c : 77.27 -pb_5c : 77.25 -pb_10c : 77.20 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.28 -pb_1c : 77.28 -pb_5c : 77.25 -pb_10c : 77.20 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.29 -pb_1c : 77.29 -pb_5c : 77.25 -pb_10c : 77.20 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.30 -pb_1c : 77.30 -pb_5c : 77.30 -pb_10c : 77.30 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.31 -pb_1c : 77.31 -pb_5c : 77.30 -pb_10c : 77.30 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.32 -pb_1c : 77.32 -pb_5c : 77.30 -pb_10c : 77.30 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.33 -pb_1c : 77.33 -pb_5c : 77.30 -pb_10c : 77.30 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.34 -pb_1c : 77.34 -pb_5c : 77.30 -pb_10c : 77.30 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.35 -pb_1c : 77.35 -pb_5c : 77.35 -pb_10c : 77.30 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.36 -pb_1c : 77.36 -pb_5c : 77.35 -pb_10c : 77.30 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.37 -pb_1c : 77.37 -pb_5c : 77.35 -pb_10c : 77.30 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.38 -pb_1c : 77.38 -pb_5c : 77.35 -pb_10c : 77.30 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.39 -pb_1c : 77.39 -pb_5c : 77.35 -pb_10c : 77.30 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.40 -pb_1c : 77.40 -pb_5c : 77.40 -pb_10c : 77.40 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.41 -pb_1c : 77.41 -pb_5c : 77.40 -pb_10c : 77.40 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.42 -pb_1c : 77.42 -pb_5c : 77.40 -pb_10c : 77.40 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.43 -pb_1c : 77.43 -pb_5c : 77.40 -pb_10c : 77.40 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.44 -pb_1c : 77.44 -pb_5c : 77.40 -pb_10c : 77.40 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.45 -pb_1c : 77.45 -pb_5c : 77.45 -pb_10c : 77.40 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.46 -pb_1c : 77.46 -pb_5c : 77.45 -pb_10c : 77.40 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.47 -pb_1c : 77.47 -pb_5c : 77.45 -pb_10c : 77.40 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.48 -pb_1c : 77.48 -pb_5c : 77.45 -pb_10c : 77.40 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.49 -pb_1c : 77.49 -pb_5c : 77.45 -pb_10c : 77.40 -pb_25c : 77.25 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.50 -pb_1c : 77.50 -pb_5c : 77.50 -pb_10c : 77.50 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.51 -pb_1c : 77.51 -pb_5c : 77.50 -pb_10c : 77.50 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.52 -pb_1c : 77.52 -pb_5c : 77.50 -pb_10c : 77.50 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.53 -pb_1c : 77.53 -pb_5c : 77.50 -pb_10c : 77.50 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.54 -pb_1c : 77.54 -pb_5c : 77.50 -pb_10c : 77.50 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.55 -pb_1c : 77.55 -pb_5c : 77.55 -pb_10c : 77.50 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.56 -pb_1c : 77.56 -pb_5c : 77.55 -pb_10c : 77.50 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.57 -pb_1c : 77.57 -pb_5c : 77.55 -pb_10c : 77.50 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.58 -pb_1c : 77.58 -pb_5c : 77.55 -pb_10c : 77.50 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.59 -pb_1c : 77.59 -pb_5c : 77.55 -pb_10c : 77.50 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.60 -pb_1c : 77.60 -pb_5c : 77.60 -pb_10c : 77.60 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.61 -pb_1c : 77.61 -pb_5c : 77.60 -pb_10c : 77.60 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.62 -pb_1c : 77.62 -pb_5c : 77.60 -pb_10c : 77.60 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.63 -pb_1c : 77.63 -pb_5c : 77.60 -pb_10c : 77.60 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.64 -pb_1c : 77.64 -pb_5c : 77.60 -pb_10c : 77.60 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.65 -pb_1c : 77.65 -pb_5c : 77.65 -pb_10c : 77.60 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.66 -pb_1c : 77.66 -pb_5c : 77.65 -pb_10c : 77.60 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.67 -pb_1c : 77.67 -pb_5c : 77.65 -pb_10c : 77.60 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.68 -pb_1c : 77.68 -pb_5c : 77.65 -pb_10c : 77.60 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.69 -pb_1c : 77.69 -pb_5c : 77.65 -pb_10c : 77.60 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.70 -pb_1c : 77.70 -pb_5c : 77.70 -pb_10c : 77.70 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.71 -pb_1c : 77.71 -pb_5c : 77.70 -pb_10c : 77.70 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.72 -pb_1c : 77.72 -pb_5c : 77.70 -pb_10c : 77.70 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.73 -pb_1c : 77.73 -pb_5c : 77.70 -pb_10c : 77.70 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.74 -pb_1c : 77.74 -pb_5c : 77.70 -pb_10c : 77.70 -pb_25c : 77.50 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.75 -pb_1c : 77.75 -pb_5c : 77.75 -pb_10c : 77.70 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.76 -pb_1c : 77.76 -pb_5c : 77.75 -pb_10c : 77.70 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.77 -pb_1c : 77.77 -pb_5c : 77.75 -pb_10c : 77.70 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.78 -pb_1c : 77.78 -pb_5c : 77.75 -pb_10c : 77.70 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.79 -pb_1c : 77.79 -pb_5c : 77.75 -pb_10c : 77.70 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.80 -pb_1c : 77.80 -pb_5c : 77.80 -pb_10c : 77.80 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.81 -pb_1c : 77.81 -pb_5c : 77.80 -pb_10c : 77.80 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.82 -pb_1c : 77.82 -pb_5c : 77.80 -pb_10c : 77.80 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.83 -pb_1c : 77.83 -pb_5c : 77.80 -pb_10c : 77.80 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.84 -pb_1c : 77.84 -pb_5c : 77.80 -pb_10c : 77.80 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.85 -pb_1c : 77.85 -pb_5c : 77.85 -pb_10c : 77.80 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.86 -pb_1c : 77.86 -pb_5c : 77.85 -pb_10c : 77.80 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.87 -pb_1c : 77.87 -pb_5c : 77.85 -pb_10c : 77.80 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.88 -pb_1c : 77.88 -pb_5c : 77.85 -pb_10c : 77.80 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.89 -pb_1c : 77.89 -pb_5c : 77.85 -pb_10c : 77.80 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.90 -pb_1c : 77.90 -pb_5c : 77.90 -pb_10c : 77.90 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.91 -pb_1c : 77.91 -pb_5c : 77.90 -pb_10c : 77.90 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.92 -pb_1c : 77.92 -pb_5c : 77.90 -pb_10c : 77.90 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.93 -pb_1c : 77.93 -pb_5c : 77.90 -pb_10c : 77.90 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.94 -pb_1c : 77.94 -pb_5c : 77.90 -pb_10c : 77.90 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.95 -pb_1c : 77.95 -pb_5c : 77.95 -pb_10c : 77.90 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.96 -pb_1c : 77.96 -pb_5c : 77.95 -pb_10c : 77.90 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.97 -pb_1c : 77.97 -pb_5c : 77.95 -pb_10c : 77.90 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.98 -pb_1c : 77.98 -pb_5c : 77.95 -pb_10c : 77.90 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -77.99 -pb_1c : 77.99 -pb_5c : 77.95 -pb_10c : 77.90 -pb_25c : 77.75 -pb_1d : 77.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.00 -pb_1c : 78.00 -pb_5c : 78.00 -pb_10c : 78.00 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.01 -pb_1c : 78.01 -pb_5c : 78.00 -pb_10c : 78.00 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.02 -pb_1c : 78.02 -pb_5c : 78.00 -pb_10c : 78.00 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.03 -pb_1c : 78.03 -pb_5c : 78.00 -pb_10c : 78.00 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.04 -pb_1c : 78.04 -pb_5c : 78.00 -pb_10c : 78.00 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.05 -pb_1c : 78.05 -pb_5c : 78.05 -pb_10c : 78.00 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.06 -pb_1c : 78.06 -pb_5c : 78.05 -pb_10c : 78.00 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.07 -pb_1c : 78.07 -pb_5c : 78.05 -pb_10c : 78.00 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.08 -pb_1c : 78.08 -pb_5c : 78.05 -pb_10c : 78.00 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.09 -pb_1c : 78.09 -pb_5c : 78.05 -pb_10c : 78.00 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.10 -pb_1c : 78.10 -pb_5c : 78.10 -pb_10c : 78.10 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.11 -pb_1c : 78.11 -pb_5c : 78.10 -pb_10c : 78.10 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.12 -pb_1c : 78.12 -pb_5c : 78.10 -pb_10c : 78.10 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.13 -pb_1c : 78.13 -pb_5c : 78.10 -pb_10c : 78.10 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.14 -pb_1c : 78.14 -pb_5c : 78.10 -pb_10c : 78.10 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.15 -pb_1c : 78.15 -pb_5c : 78.15 -pb_10c : 78.10 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.16 -pb_1c : 78.16 -pb_5c : 78.15 -pb_10c : 78.10 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.17 -pb_1c : 78.17 -pb_5c : 78.15 -pb_10c : 78.10 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.18 -pb_1c : 78.18 -pb_5c : 78.15 -pb_10c : 78.10 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.19 -pb_1c : 78.19 -pb_5c : 78.15 -pb_10c : 78.10 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.20 -pb_1c : 78.20 -pb_5c : 78.20 -pb_10c : 78.20 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.21 -pb_1c : 78.21 -pb_5c : 78.20 -pb_10c : 78.20 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.22 -pb_1c : 78.22 -pb_5c : 78.20 -pb_10c : 78.20 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.23 -pb_1c : 78.23 -pb_5c : 78.20 -pb_10c : 78.20 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.24 -pb_1c : 78.24 -pb_5c : 78.20 -pb_10c : 78.20 -pb_25c : 78.00 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.25 -pb_1c : 78.25 -pb_5c : 78.25 -pb_10c : 78.20 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.26 -pb_1c : 78.26 -pb_5c : 78.25 -pb_10c : 78.20 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.27 -pb_1c : 78.27 -pb_5c : 78.25 -pb_10c : 78.20 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.28 -pb_1c : 78.28 -pb_5c : 78.25 -pb_10c : 78.20 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.29 -pb_1c : 78.29 -pb_5c : 78.25 -pb_10c : 78.20 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.30 -pb_1c : 78.30 -pb_5c : 78.30 -pb_10c : 78.30 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.31 -pb_1c : 78.31 -pb_5c : 78.30 -pb_10c : 78.30 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.32 -pb_1c : 78.32 -pb_5c : 78.30 -pb_10c : 78.30 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.33 -pb_1c : 78.33 -pb_5c : 78.30 -pb_10c : 78.30 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.34 -pb_1c : 78.34 -pb_5c : 78.30 -pb_10c : 78.30 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.35 -pb_1c : 78.35 -pb_5c : 78.35 -pb_10c : 78.30 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.36 -pb_1c : 78.36 -pb_5c : 78.35 -pb_10c : 78.30 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.37 -pb_1c : 78.37 -pb_5c : 78.35 -pb_10c : 78.30 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.38 -pb_1c : 78.38 -pb_5c : 78.35 -pb_10c : 78.30 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.39 -pb_1c : 78.39 -pb_5c : 78.35 -pb_10c : 78.30 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.40 -pb_1c : 78.40 -pb_5c : 78.40 -pb_10c : 78.40 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.41 -pb_1c : 78.41 -pb_5c : 78.40 -pb_10c : 78.40 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.42 -pb_1c : 78.42 -pb_5c : 78.40 -pb_10c : 78.40 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.43 -pb_1c : 78.43 -pb_5c : 78.40 -pb_10c : 78.40 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.44 -pb_1c : 78.44 -pb_5c : 78.40 -pb_10c : 78.40 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.45 -pb_1c : 78.45 -pb_5c : 78.45 -pb_10c : 78.40 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.46 -pb_1c : 78.46 -pb_5c : 78.45 -pb_10c : 78.40 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.47 -pb_1c : 78.47 -pb_5c : 78.45 -pb_10c : 78.40 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.48 -pb_1c : 78.48 -pb_5c : 78.45 -pb_10c : 78.40 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.49 -pb_1c : 78.49 -pb_5c : 78.45 -pb_10c : 78.40 -pb_25c : 78.25 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.50 -pb_1c : 78.50 -pb_5c : 78.50 -pb_10c : 78.50 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.51 -pb_1c : 78.51 -pb_5c : 78.50 -pb_10c : 78.50 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.52 -pb_1c : 78.52 -pb_5c : 78.50 -pb_10c : 78.50 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.53 -pb_1c : 78.53 -pb_5c : 78.50 -pb_10c : 78.50 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.54 -pb_1c : 78.54 -pb_5c : 78.50 -pb_10c : 78.50 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.55 -pb_1c : 78.55 -pb_5c : 78.55 -pb_10c : 78.50 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.56 -pb_1c : 78.56 -pb_5c : 78.55 -pb_10c : 78.50 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.57 -pb_1c : 78.57 -pb_5c : 78.55 -pb_10c : 78.50 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.58 -pb_1c : 78.58 -pb_5c : 78.55 -pb_10c : 78.50 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.59 -pb_1c : 78.59 -pb_5c : 78.55 -pb_10c : 78.50 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.60 -pb_1c : 78.60 -pb_5c : 78.60 -pb_10c : 78.60 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.61 -pb_1c : 78.61 -pb_5c : 78.60 -pb_10c : 78.60 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.62 -pb_1c : 78.62 -pb_5c : 78.60 -pb_10c : 78.60 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.63 -pb_1c : 78.63 -pb_5c : 78.60 -pb_10c : 78.60 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.64 -pb_1c : 78.64 -pb_5c : 78.60 -pb_10c : 78.60 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.65 -pb_1c : 78.65 -pb_5c : 78.65 -pb_10c : 78.60 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.66 -pb_1c : 78.66 -pb_5c : 78.65 -pb_10c : 78.60 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.67 -pb_1c : 78.67 -pb_5c : 78.65 -pb_10c : 78.60 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.68 -pb_1c : 78.68 -pb_5c : 78.65 -pb_10c : 78.60 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.69 -pb_1c : 78.69 -pb_5c : 78.65 -pb_10c : 78.60 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.70 -pb_1c : 78.70 -pb_5c : 78.70 -pb_10c : 78.70 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.71 -pb_1c : 78.71 -pb_5c : 78.70 -pb_10c : 78.70 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.72 -pb_1c : 78.72 -pb_5c : 78.70 -pb_10c : 78.70 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.73 -pb_1c : 78.73 -pb_5c : 78.70 -pb_10c : 78.70 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.74 -pb_1c : 78.74 -pb_5c : 78.70 -pb_10c : 78.70 -pb_25c : 78.50 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.75 -pb_1c : 78.75 -pb_5c : 78.75 -pb_10c : 78.70 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.76 -pb_1c : 78.76 -pb_5c : 78.75 -pb_10c : 78.70 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.77 -pb_1c : 78.77 -pb_5c : 78.75 -pb_10c : 78.70 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.78 -pb_1c : 78.78 -pb_5c : 78.75 -pb_10c : 78.70 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.79 -pb_1c : 78.79 -pb_5c : 78.75 -pb_10c : 78.70 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.80 -pb_1c : 78.80 -pb_5c : 78.80 -pb_10c : 78.80 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.81 -pb_1c : 78.81 -pb_5c : 78.80 -pb_10c : 78.80 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.82 -pb_1c : 78.82 -pb_5c : 78.80 -pb_10c : 78.80 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.83 -pb_1c : 78.83 -pb_5c : 78.80 -pb_10c : 78.80 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.84 -pb_1c : 78.84 -pb_5c : 78.80 -pb_10c : 78.80 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.85 -pb_1c : 78.85 -pb_5c : 78.85 -pb_10c : 78.80 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.86 -pb_1c : 78.86 -pb_5c : 78.85 -pb_10c : 78.80 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.87 -pb_1c : 78.87 -pb_5c : 78.85 -pb_10c : 78.80 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.88 -pb_1c : 78.88 -pb_5c : 78.85 -pb_10c : 78.80 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.89 -pb_1c : 78.89 -pb_5c : 78.85 -pb_10c : 78.80 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.90 -pb_1c : 78.90 -pb_5c : 78.90 -pb_10c : 78.90 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.91 -pb_1c : 78.91 -pb_5c : 78.90 -pb_10c : 78.90 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.92 -pb_1c : 78.92 -pb_5c : 78.90 -pb_10c : 78.90 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.93 -pb_1c : 78.93 -pb_5c : 78.90 -pb_10c : 78.90 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.94 -pb_1c : 78.94 -pb_5c : 78.90 -pb_10c : 78.90 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.95 -pb_1c : 78.95 -pb_5c : 78.95 -pb_10c : 78.90 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.96 -pb_1c : 78.96 -pb_5c : 78.95 -pb_10c : 78.90 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.97 -pb_1c : 78.97 -pb_5c : 78.95 -pb_10c : 78.90 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.98 -pb_1c : 78.98 -pb_5c : 78.95 -pb_10c : 78.90 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -78.99 -pb_1c : 78.99 -pb_5c : 78.95 -pb_10c : 78.90 -pb_25c : 78.75 -pb_1d : 78.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.00 -pb_1c : 79.00 -pb_5c : 79.00 -pb_10c : 79.00 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.01 -pb_1c : 79.01 -pb_5c : 79.00 -pb_10c : 79.00 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.02 -pb_1c : 79.02 -pb_5c : 79.00 -pb_10c : 79.00 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.03 -pb_1c : 79.03 -pb_5c : 79.00 -pb_10c : 79.00 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.04 -pb_1c : 79.04 -pb_5c : 79.00 -pb_10c : 79.00 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.05 -pb_1c : 79.05 -pb_5c : 79.05 -pb_10c : 79.00 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.06 -pb_1c : 79.06 -pb_5c : 79.05 -pb_10c : 79.00 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.07 -pb_1c : 79.07 -pb_5c : 79.05 -pb_10c : 79.00 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.08 -pb_1c : 79.08 -pb_5c : 79.05 -pb_10c : 79.00 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.09 -pb_1c : 79.09 -pb_5c : 79.05 -pb_10c : 79.00 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.10 -pb_1c : 79.10 -pb_5c : 79.10 -pb_10c : 79.10 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.11 -pb_1c : 79.11 -pb_5c : 79.10 -pb_10c : 79.10 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.12 -pb_1c : 79.12 -pb_5c : 79.10 -pb_10c : 79.10 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.13 -pb_1c : 79.13 -pb_5c : 79.10 -pb_10c : 79.10 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.14 -pb_1c : 79.14 -pb_5c : 79.10 -pb_10c : 79.10 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.15 -pb_1c : 79.15 -pb_5c : 79.15 -pb_10c : 79.10 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.16 -pb_1c : 79.16 -pb_5c : 79.15 -pb_10c : 79.10 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.17 -pb_1c : 79.17 -pb_5c : 79.15 -pb_10c : 79.10 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.18 -pb_1c : 79.18 -pb_5c : 79.15 -pb_10c : 79.10 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.19 -pb_1c : 79.19 -pb_5c : 79.15 -pb_10c : 79.10 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.20 -pb_1c : 79.20 -pb_5c : 79.20 -pb_10c : 79.20 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.21 -pb_1c : 79.21 -pb_5c : 79.20 -pb_10c : 79.20 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.22 -pb_1c : 79.22 -pb_5c : 79.20 -pb_10c : 79.20 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.23 -pb_1c : 79.23 -pb_5c : 79.20 -pb_10c : 79.20 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.24 -pb_1c : 79.24 -pb_5c : 79.20 -pb_10c : 79.20 -pb_25c : 79.00 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.25 -pb_1c : 79.25 -pb_5c : 79.25 -pb_10c : 79.20 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.26 -pb_1c : 79.26 -pb_5c : 79.25 -pb_10c : 79.20 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.27 -pb_1c : 79.27 -pb_5c : 79.25 -pb_10c : 79.20 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.28 -pb_1c : 79.28 -pb_5c : 79.25 -pb_10c : 79.20 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.29 -pb_1c : 79.29 -pb_5c : 79.25 -pb_10c : 79.20 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.30 -pb_1c : 79.30 -pb_5c : 79.30 -pb_10c : 79.30 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.31 -pb_1c : 79.31 -pb_5c : 79.30 -pb_10c : 79.30 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.32 -pb_1c : 79.32 -pb_5c : 79.30 -pb_10c : 79.30 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.33 -pb_1c : 79.33 -pb_5c : 79.30 -pb_10c : 79.30 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.34 -pb_1c : 79.34 -pb_5c : 79.30 -pb_10c : 79.30 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.35 -pb_1c : 79.35 -pb_5c : 79.35 -pb_10c : 79.30 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.36 -pb_1c : 79.36 -pb_5c : 79.35 -pb_10c : 79.30 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.37 -pb_1c : 79.37 -pb_5c : 79.35 -pb_10c : 79.30 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.38 -pb_1c : 79.38 -pb_5c : 79.35 -pb_10c : 79.30 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.39 -pb_1c : 79.39 -pb_5c : 79.35 -pb_10c : 79.30 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.40 -pb_1c : 79.40 -pb_5c : 79.40 -pb_10c : 79.40 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.41 -pb_1c : 79.41 -pb_5c : 79.40 -pb_10c : 79.40 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.42 -pb_1c : 79.42 -pb_5c : 79.40 -pb_10c : 79.40 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.43 -pb_1c : 79.43 -pb_5c : 79.40 -pb_10c : 79.40 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.44 -pb_1c : 79.44 -pb_5c : 79.40 -pb_10c : 79.40 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.45 -pb_1c : 79.45 -pb_5c : 79.45 -pb_10c : 79.40 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.46 -pb_1c : 79.46 -pb_5c : 79.45 -pb_10c : 79.40 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.47 -pb_1c : 79.47 -pb_5c : 79.45 -pb_10c : 79.40 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.48 -pb_1c : 79.48 -pb_5c : 79.45 -pb_10c : 79.40 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.49 -pb_1c : 79.49 -pb_5c : 79.45 -pb_10c : 79.40 -pb_25c : 79.25 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.50 -pb_1c : 79.50 -pb_5c : 79.50 -pb_10c : 79.50 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.51 -pb_1c : 79.51 -pb_5c : 79.50 -pb_10c : 79.50 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.52 -pb_1c : 79.52 -pb_5c : 79.50 -pb_10c : 79.50 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.53 -pb_1c : 79.53 -pb_5c : 79.50 -pb_10c : 79.50 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.54 -pb_1c : 79.54 -pb_5c : 79.50 -pb_10c : 79.50 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.55 -pb_1c : 79.55 -pb_5c : 79.55 -pb_10c : 79.50 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.56 -pb_1c : 79.56 -pb_5c : 79.55 -pb_10c : 79.50 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.57 -pb_1c : 79.57 -pb_5c : 79.55 -pb_10c : 79.50 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.58 -pb_1c : 79.58 -pb_5c : 79.55 -pb_10c : 79.50 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.59 -pb_1c : 79.59 -pb_5c : 79.55 -pb_10c : 79.50 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.60 -pb_1c : 79.60 -pb_5c : 79.60 -pb_10c : 79.60 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.61 -pb_1c : 79.61 -pb_5c : 79.60 -pb_10c : 79.60 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.62 -pb_1c : 79.62 -pb_5c : 79.60 -pb_10c : 79.60 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.63 -pb_1c : 79.63 -pb_5c : 79.60 -pb_10c : 79.60 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.64 -pb_1c : 79.64 -pb_5c : 79.60 -pb_10c : 79.60 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.65 -pb_1c : 79.65 -pb_5c : 79.65 -pb_10c : 79.60 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.66 -pb_1c : 79.66 -pb_5c : 79.65 -pb_10c : 79.60 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.67 -pb_1c : 79.67 -pb_5c : 79.65 -pb_10c : 79.60 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.68 -pb_1c : 79.68 -pb_5c : 79.65 -pb_10c : 79.60 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.69 -pb_1c : 79.69 -pb_5c : 79.65 -pb_10c : 79.60 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.70 -pb_1c : 79.70 -pb_5c : 79.70 -pb_10c : 79.70 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.71 -pb_1c : 79.71 -pb_5c : 79.70 -pb_10c : 79.70 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.72 -pb_1c : 79.72 -pb_5c : 79.70 -pb_10c : 79.70 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.73 -pb_1c : 79.73 -pb_5c : 79.70 -pb_10c : 79.70 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.74 -pb_1c : 79.74 -pb_5c : 79.70 -pb_10c : 79.70 -pb_25c : 79.50 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.75 -pb_1c : 79.75 -pb_5c : 79.75 -pb_10c : 79.70 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.76 -pb_1c : 79.76 -pb_5c : 79.75 -pb_10c : 79.70 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.77 -pb_1c : 79.77 -pb_5c : 79.75 -pb_10c : 79.70 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.78 -pb_1c : 79.78 -pb_5c : 79.75 -pb_10c : 79.70 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.79 -pb_1c : 79.79 -pb_5c : 79.75 -pb_10c : 79.70 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.80 -pb_1c : 79.80 -pb_5c : 79.80 -pb_10c : 79.80 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.81 -pb_1c : 79.81 -pb_5c : 79.80 -pb_10c : 79.80 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.82 -pb_1c : 79.82 -pb_5c : 79.80 -pb_10c : 79.80 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.83 -pb_1c : 79.83 -pb_5c : 79.80 -pb_10c : 79.80 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.84 -pb_1c : 79.84 -pb_5c : 79.80 -pb_10c : 79.80 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.85 -pb_1c : 79.85 -pb_5c : 79.85 -pb_10c : 79.80 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.86 -pb_1c : 79.86 -pb_5c : 79.85 -pb_10c : 79.80 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.87 -pb_1c : 79.87 -pb_5c : 79.85 -pb_10c : 79.80 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.88 -pb_1c : 79.88 -pb_5c : 79.85 -pb_10c : 79.80 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.89 -pb_1c : 79.89 -pb_5c : 79.85 -pb_10c : 79.80 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.90 -pb_1c : 79.90 -pb_5c : 79.90 -pb_10c : 79.90 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.91 -pb_1c : 79.91 -pb_5c : 79.90 -pb_10c : 79.90 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.92 -pb_1c : 79.92 -pb_5c : 79.90 -pb_10c : 79.90 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.93 -pb_1c : 79.93 -pb_5c : 79.90 -pb_10c : 79.90 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.94 -pb_1c : 79.94 -pb_5c : 79.90 -pb_10c : 79.90 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.95 -pb_1c : 79.95 -pb_5c : 79.95 -pb_10c : 79.90 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.96 -pb_1c : 79.96 -pb_5c : 79.95 -pb_10c : 79.90 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.97 -pb_1c : 79.97 -pb_5c : 79.95 -pb_10c : 79.90 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.98 -pb_1c : 79.98 -pb_5c : 79.95 -pb_10c : 79.90 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -79.99 -pb_1c : 79.99 -pb_5c : 79.95 -pb_10c : 79.90 -pb_25c : 79.75 -pb_1d : 79.00 -pb_5d : 75.00 -pb_10d : 70.00 - -80.00 -pb_1c : 80.00 -pb_5c : 80.00 -pb_10c : 80.00 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.01 -pb_1c : 80.01 -pb_5c : 80.00 -pb_10c : 80.00 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.02 -pb_1c : 80.02 -pb_5c : 80.00 -pb_10c : 80.00 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.03 -pb_1c : 80.03 -pb_5c : 80.00 -pb_10c : 80.00 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.04 -pb_1c : 80.04 -pb_5c : 80.00 -pb_10c : 80.00 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.05 -pb_1c : 80.05 -pb_5c : 80.05 -pb_10c : 80.00 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.06 -pb_1c : 80.06 -pb_5c : 80.05 -pb_10c : 80.00 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.07 -pb_1c : 80.07 -pb_5c : 80.05 -pb_10c : 80.00 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.08 -pb_1c : 80.08 -pb_5c : 80.05 -pb_10c : 80.00 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.09 -pb_1c : 80.09 -pb_5c : 80.05 -pb_10c : 80.00 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.10 -pb_1c : 80.10 -pb_5c : 80.10 -pb_10c : 80.10 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.11 -pb_1c : 80.11 -pb_5c : 80.10 -pb_10c : 80.10 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.12 -pb_1c : 80.12 -pb_5c : 80.10 -pb_10c : 80.10 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.13 -pb_1c : 80.13 -pb_5c : 80.10 -pb_10c : 80.10 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.14 -pb_1c : 80.14 -pb_5c : 80.10 -pb_10c : 80.10 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.15 -pb_1c : 80.15 -pb_5c : 80.15 -pb_10c : 80.10 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.16 -pb_1c : 80.16 -pb_5c : 80.15 -pb_10c : 80.10 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.17 -pb_1c : 80.17 -pb_5c : 80.15 -pb_10c : 80.10 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.18 -pb_1c : 80.18 -pb_5c : 80.15 -pb_10c : 80.10 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.19 -pb_1c : 80.19 -pb_5c : 80.15 -pb_10c : 80.10 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.20 -pb_1c : 80.20 -pb_5c : 80.20 -pb_10c : 80.20 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.21 -pb_1c : 80.21 -pb_5c : 80.20 -pb_10c : 80.20 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.22 -pb_1c : 80.22 -pb_5c : 80.20 -pb_10c : 80.20 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.23 -pb_1c : 80.23 -pb_5c : 80.20 -pb_10c : 80.20 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.24 -pb_1c : 80.24 -pb_5c : 80.20 -pb_10c : 80.20 -pb_25c : 80.00 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.25 -pb_1c : 80.25 -pb_5c : 80.25 -pb_10c : 80.20 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.26 -pb_1c : 80.26 -pb_5c : 80.25 -pb_10c : 80.20 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.27 -pb_1c : 80.27 -pb_5c : 80.25 -pb_10c : 80.20 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.28 -pb_1c : 80.28 -pb_5c : 80.25 -pb_10c : 80.20 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.29 -pb_1c : 80.29 -pb_5c : 80.25 -pb_10c : 80.20 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.30 -pb_1c : 80.30 -pb_5c : 80.30 -pb_10c : 80.30 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.31 -pb_1c : 80.31 -pb_5c : 80.30 -pb_10c : 80.30 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.32 -pb_1c : 80.32 -pb_5c : 80.30 -pb_10c : 80.30 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.33 -pb_1c : 80.33 -pb_5c : 80.30 -pb_10c : 80.30 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.34 -pb_1c : 80.34 -pb_5c : 80.30 -pb_10c : 80.30 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.35 -pb_1c : 80.35 -pb_5c : 80.35 -pb_10c : 80.30 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.36 -pb_1c : 80.36 -pb_5c : 80.35 -pb_10c : 80.30 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.37 -pb_1c : 80.37 -pb_5c : 80.35 -pb_10c : 80.30 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.38 -pb_1c : 80.38 -pb_5c : 80.35 -pb_10c : 80.30 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.39 -pb_1c : 80.39 -pb_5c : 80.35 -pb_10c : 80.30 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.40 -pb_1c : 80.40 -pb_5c : 80.40 -pb_10c : 80.40 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.41 -pb_1c : 80.41 -pb_5c : 80.40 -pb_10c : 80.40 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.42 -pb_1c : 80.42 -pb_5c : 80.40 -pb_10c : 80.40 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.43 -pb_1c : 80.43 -pb_5c : 80.40 -pb_10c : 80.40 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.44 -pb_1c : 80.44 -pb_5c : 80.40 -pb_10c : 80.40 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.45 -pb_1c : 80.45 -pb_5c : 80.45 -pb_10c : 80.40 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.46 -pb_1c : 80.46 -pb_5c : 80.45 -pb_10c : 80.40 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.47 -pb_1c : 80.47 -pb_5c : 80.45 -pb_10c : 80.40 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.48 -pb_1c : 80.48 -pb_5c : 80.45 -pb_10c : 80.40 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.49 -pb_1c : 80.49 -pb_5c : 80.45 -pb_10c : 80.40 -pb_25c : 80.25 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.50 -pb_1c : 80.50 -pb_5c : 80.50 -pb_10c : 80.50 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.51 -pb_1c : 80.51 -pb_5c : 80.50 -pb_10c : 80.50 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.52 -pb_1c : 80.52 -pb_5c : 80.50 -pb_10c : 80.50 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.53 -pb_1c : 80.53 -pb_5c : 80.50 -pb_10c : 80.50 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.54 -pb_1c : 80.54 -pb_5c : 80.50 -pb_10c : 80.50 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.55 -pb_1c : 80.55 -pb_5c : 80.55 -pb_10c : 80.50 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.56 -pb_1c : 80.56 -pb_5c : 80.55 -pb_10c : 80.50 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.57 -pb_1c : 80.57 -pb_5c : 80.55 -pb_10c : 80.50 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.58 -pb_1c : 80.58 -pb_5c : 80.55 -pb_10c : 80.50 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.59 -pb_1c : 80.59 -pb_5c : 80.55 -pb_10c : 80.50 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.60 -pb_1c : 80.60 -pb_5c : 80.60 -pb_10c : 80.60 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.61 -pb_1c : 80.61 -pb_5c : 80.60 -pb_10c : 80.60 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.62 -pb_1c : 80.62 -pb_5c : 80.60 -pb_10c : 80.60 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.63 -pb_1c : 80.63 -pb_5c : 80.60 -pb_10c : 80.60 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.64 -pb_1c : 80.64 -pb_5c : 80.60 -pb_10c : 80.60 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.65 -pb_1c : 80.65 -pb_5c : 80.65 -pb_10c : 80.60 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.66 -pb_1c : 80.66 -pb_5c : 80.65 -pb_10c : 80.60 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.67 -pb_1c : 80.67 -pb_5c : 80.65 -pb_10c : 80.60 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.68 -pb_1c : 80.68 -pb_5c : 80.65 -pb_10c : 80.60 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.69 -pb_1c : 80.69 -pb_5c : 80.65 -pb_10c : 80.60 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.70 -pb_1c : 80.70 -pb_5c : 80.70 -pb_10c : 80.70 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.71 -pb_1c : 80.71 -pb_5c : 80.70 -pb_10c : 80.70 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.72 -pb_1c : 80.72 -pb_5c : 80.70 -pb_10c : 80.70 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.73 -pb_1c : 80.73 -pb_5c : 80.70 -pb_10c : 80.70 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.74 -pb_1c : 80.74 -pb_5c : 80.70 -pb_10c : 80.70 -pb_25c : 80.50 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.75 -pb_1c : 80.75 -pb_5c : 80.75 -pb_10c : 80.70 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.76 -pb_1c : 80.76 -pb_5c : 80.75 -pb_10c : 80.70 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.77 -pb_1c : 80.77 -pb_5c : 80.75 -pb_10c : 80.70 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.78 -pb_1c : 80.78 -pb_5c : 80.75 -pb_10c : 80.70 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.79 -pb_1c : 80.79 -pb_5c : 80.75 -pb_10c : 80.70 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.80 -pb_1c : 80.80 -pb_5c : 80.80 -pb_10c : 80.80 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.81 -pb_1c : 80.81 -pb_5c : 80.80 -pb_10c : 80.80 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.82 -pb_1c : 80.82 -pb_5c : 80.80 -pb_10c : 80.80 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.83 -pb_1c : 80.83 -pb_5c : 80.80 -pb_10c : 80.80 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.84 -pb_1c : 80.84 -pb_5c : 80.80 -pb_10c : 80.80 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.85 -pb_1c : 80.85 -pb_5c : 80.85 -pb_10c : 80.80 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.86 -pb_1c : 80.86 -pb_5c : 80.85 -pb_10c : 80.80 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.87 -pb_1c : 80.87 -pb_5c : 80.85 -pb_10c : 80.80 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.88 -pb_1c : 80.88 -pb_5c : 80.85 -pb_10c : 80.80 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.89 -pb_1c : 80.89 -pb_5c : 80.85 -pb_10c : 80.80 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.90 -pb_1c : 80.90 -pb_5c : 80.90 -pb_10c : 80.90 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.91 -pb_1c : 80.91 -pb_5c : 80.90 -pb_10c : 80.90 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.92 -pb_1c : 80.92 -pb_5c : 80.90 -pb_10c : 80.90 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.93 -pb_1c : 80.93 -pb_5c : 80.90 -pb_10c : 80.90 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.94 -pb_1c : 80.94 -pb_5c : 80.90 -pb_10c : 80.90 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.95 -pb_1c : 80.95 -pb_5c : 80.95 -pb_10c : 80.90 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.96 -pb_1c : 80.96 -pb_5c : 80.95 -pb_10c : 80.90 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.97 -pb_1c : 80.97 -pb_5c : 80.95 -pb_10c : 80.90 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.98 -pb_1c : 80.98 -pb_5c : 80.95 -pb_10c : 80.90 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -80.99 -pb_1c : 80.99 -pb_5c : 80.95 -pb_10c : 80.90 -pb_25c : 80.75 -pb_1d : 80.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.00 -pb_1c : 81.00 -pb_5c : 81.00 -pb_10c : 81.00 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.01 -pb_1c : 81.01 -pb_5c : 81.00 -pb_10c : 81.00 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.02 -pb_1c : 81.02 -pb_5c : 81.00 -pb_10c : 81.00 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.03 -pb_1c : 81.03 -pb_5c : 81.00 -pb_10c : 81.00 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.04 -pb_1c : 81.04 -pb_5c : 81.00 -pb_10c : 81.00 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.05 -pb_1c : 81.05 -pb_5c : 81.05 -pb_10c : 81.00 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.06 -pb_1c : 81.06 -pb_5c : 81.05 -pb_10c : 81.00 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.07 -pb_1c : 81.07 -pb_5c : 81.05 -pb_10c : 81.00 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.08 -pb_1c : 81.08 -pb_5c : 81.05 -pb_10c : 81.00 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.09 -pb_1c : 81.09 -pb_5c : 81.05 -pb_10c : 81.00 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.10 -pb_1c : 81.10 -pb_5c : 81.10 -pb_10c : 81.10 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.11 -pb_1c : 81.11 -pb_5c : 81.10 -pb_10c : 81.10 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.12 -pb_1c : 81.12 -pb_5c : 81.10 -pb_10c : 81.10 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.13 -pb_1c : 81.13 -pb_5c : 81.10 -pb_10c : 81.10 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.14 -pb_1c : 81.14 -pb_5c : 81.10 -pb_10c : 81.10 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.15 -pb_1c : 81.15 -pb_5c : 81.15 -pb_10c : 81.10 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.16 -pb_1c : 81.16 -pb_5c : 81.15 -pb_10c : 81.10 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.17 -pb_1c : 81.17 -pb_5c : 81.15 -pb_10c : 81.10 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.18 -pb_1c : 81.18 -pb_5c : 81.15 -pb_10c : 81.10 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.19 -pb_1c : 81.19 -pb_5c : 81.15 -pb_10c : 81.10 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.20 -pb_1c : 81.20 -pb_5c : 81.20 -pb_10c : 81.20 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.21 -pb_1c : 81.21 -pb_5c : 81.20 -pb_10c : 81.20 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.22 -pb_1c : 81.22 -pb_5c : 81.20 -pb_10c : 81.20 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.23 -pb_1c : 81.23 -pb_5c : 81.20 -pb_10c : 81.20 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.24 -pb_1c : 81.24 -pb_5c : 81.20 -pb_10c : 81.20 -pb_25c : 81.00 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.25 -pb_1c : 81.25 -pb_5c : 81.25 -pb_10c : 81.20 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.26 -pb_1c : 81.26 -pb_5c : 81.25 -pb_10c : 81.20 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.27 -pb_1c : 81.27 -pb_5c : 81.25 -pb_10c : 81.20 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.28 -pb_1c : 81.28 -pb_5c : 81.25 -pb_10c : 81.20 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.29 -pb_1c : 81.29 -pb_5c : 81.25 -pb_10c : 81.20 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.30 -pb_1c : 81.30 -pb_5c : 81.30 -pb_10c : 81.30 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.31 -pb_1c : 81.31 -pb_5c : 81.30 -pb_10c : 81.30 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.32 -pb_1c : 81.32 -pb_5c : 81.30 -pb_10c : 81.30 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.33 -pb_1c : 81.33 -pb_5c : 81.30 -pb_10c : 81.30 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.34 -pb_1c : 81.34 -pb_5c : 81.30 -pb_10c : 81.30 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.35 -pb_1c : 81.35 -pb_5c : 81.35 -pb_10c : 81.30 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.36 -pb_1c : 81.36 -pb_5c : 81.35 -pb_10c : 81.30 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.37 -pb_1c : 81.37 -pb_5c : 81.35 -pb_10c : 81.30 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.38 -pb_1c : 81.38 -pb_5c : 81.35 -pb_10c : 81.30 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.39 -pb_1c : 81.39 -pb_5c : 81.35 -pb_10c : 81.30 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.40 -pb_1c : 81.40 -pb_5c : 81.40 -pb_10c : 81.40 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.41 -pb_1c : 81.41 -pb_5c : 81.40 -pb_10c : 81.40 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.42 -pb_1c : 81.42 -pb_5c : 81.40 -pb_10c : 81.40 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.43 -pb_1c : 81.43 -pb_5c : 81.40 -pb_10c : 81.40 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.44 -pb_1c : 81.44 -pb_5c : 81.40 -pb_10c : 81.40 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.45 -pb_1c : 81.45 -pb_5c : 81.45 -pb_10c : 81.40 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.46 -pb_1c : 81.46 -pb_5c : 81.45 -pb_10c : 81.40 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.47 -pb_1c : 81.47 -pb_5c : 81.45 -pb_10c : 81.40 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.48 -pb_1c : 81.48 -pb_5c : 81.45 -pb_10c : 81.40 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.49 -pb_1c : 81.49 -pb_5c : 81.45 -pb_10c : 81.40 -pb_25c : 81.25 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.50 -pb_1c : 81.50 -pb_5c : 81.50 -pb_10c : 81.50 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.51 -pb_1c : 81.51 -pb_5c : 81.50 -pb_10c : 81.50 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.52 -pb_1c : 81.52 -pb_5c : 81.50 -pb_10c : 81.50 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.53 -pb_1c : 81.53 -pb_5c : 81.50 -pb_10c : 81.50 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.54 -pb_1c : 81.54 -pb_5c : 81.50 -pb_10c : 81.50 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.55 -pb_1c : 81.55 -pb_5c : 81.55 -pb_10c : 81.50 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.56 -pb_1c : 81.56 -pb_5c : 81.55 -pb_10c : 81.50 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.57 -pb_1c : 81.57 -pb_5c : 81.55 -pb_10c : 81.50 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.58 -pb_1c : 81.58 -pb_5c : 81.55 -pb_10c : 81.50 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.59 -pb_1c : 81.59 -pb_5c : 81.55 -pb_10c : 81.50 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.60 -pb_1c : 81.60 -pb_5c : 81.60 -pb_10c : 81.60 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.61 -pb_1c : 81.61 -pb_5c : 81.60 -pb_10c : 81.60 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.62 -pb_1c : 81.62 -pb_5c : 81.60 -pb_10c : 81.60 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.63 -pb_1c : 81.63 -pb_5c : 81.60 -pb_10c : 81.60 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.64 -pb_1c : 81.64 -pb_5c : 81.60 -pb_10c : 81.60 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.65 -pb_1c : 81.65 -pb_5c : 81.65 -pb_10c : 81.60 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.66 -pb_1c : 81.66 -pb_5c : 81.65 -pb_10c : 81.60 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.67 -pb_1c : 81.67 -pb_5c : 81.65 -pb_10c : 81.60 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.68 -pb_1c : 81.68 -pb_5c : 81.65 -pb_10c : 81.60 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.69 -pb_1c : 81.69 -pb_5c : 81.65 -pb_10c : 81.60 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.70 -pb_1c : 81.70 -pb_5c : 81.70 -pb_10c : 81.70 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.71 -pb_1c : 81.71 -pb_5c : 81.70 -pb_10c : 81.70 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.72 -pb_1c : 81.72 -pb_5c : 81.70 -pb_10c : 81.70 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.73 -pb_1c : 81.73 -pb_5c : 81.70 -pb_10c : 81.70 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.74 -pb_1c : 81.74 -pb_5c : 81.70 -pb_10c : 81.70 -pb_25c : 81.50 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.75 -pb_1c : 81.75 -pb_5c : 81.75 -pb_10c : 81.70 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.76 -pb_1c : 81.76 -pb_5c : 81.75 -pb_10c : 81.70 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.77 -pb_1c : 81.77 -pb_5c : 81.75 -pb_10c : 81.70 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.78 -pb_1c : 81.78 -pb_5c : 81.75 -pb_10c : 81.70 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.79 -pb_1c : 81.79 -pb_5c : 81.75 -pb_10c : 81.70 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.80 -pb_1c : 81.80 -pb_5c : 81.80 -pb_10c : 81.80 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.81 -pb_1c : 81.81 -pb_5c : 81.80 -pb_10c : 81.80 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.82 -pb_1c : 81.82 -pb_5c : 81.80 -pb_10c : 81.80 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.83 -pb_1c : 81.83 -pb_5c : 81.80 -pb_10c : 81.80 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.84 -pb_1c : 81.84 -pb_5c : 81.80 -pb_10c : 81.80 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.85 -pb_1c : 81.85 -pb_5c : 81.85 -pb_10c : 81.80 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.86 -pb_1c : 81.86 -pb_5c : 81.85 -pb_10c : 81.80 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.87 -pb_1c : 81.87 -pb_5c : 81.85 -pb_10c : 81.80 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.88 -pb_1c : 81.88 -pb_5c : 81.85 -pb_10c : 81.80 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.89 -pb_1c : 81.89 -pb_5c : 81.85 -pb_10c : 81.80 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.90 -pb_1c : 81.90 -pb_5c : 81.90 -pb_10c : 81.90 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.91 -pb_1c : 81.91 -pb_5c : 81.90 -pb_10c : 81.90 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.92 -pb_1c : 81.92 -pb_5c : 81.90 -pb_10c : 81.90 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.93 -pb_1c : 81.93 -pb_5c : 81.90 -pb_10c : 81.90 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.94 -pb_1c : 81.94 -pb_5c : 81.90 -pb_10c : 81.90 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.95 -pb_1c : 81.95 -pb_5c : 81.95 -pb_10c : 81.90 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.96 -pb_1c : 81.96 -pb_5c : 81.95 -pb_10c : 81.90 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.97 -pb_1c : 81.97 -pb_5c : 81.95 -pb_10c : 81.90 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.98 -pb_1c : 81.98 -pb_5c : 81.95 -pb_10c : 81.90 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -81.99 -pb_1c : 81.99 -pb_5c : 81.95 -pb_10c : 81.90 -pb_25c : 81.75 -pb_1d : 81.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.00 -pb_1c : 82.00 -pb_5c : 82.00 -pb_10c : 82.00 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.01 -pb_1c : 82.01 -pb_5c : 82.00 -pb_10c : 82.00 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.02 -pb_1c : 82.02 -pb_5c : 82.00 -pb_10c : 82.00 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.03 -pb_1c : 82.03 -pb_5c : 82.00 -pb_10c : 82.00 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.04 -pb_1c : 82.04 -pb_5c : 82.00 -pb_10c : 82.00 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.05 -pb_1c : 82.05 -pb_5c : 82.05 -pb_10c : 82.00 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.06 -pb_1c : 82.06 -pb_5c : 82.05 -pb_10c : 82.00 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.07 -pb_1c : 82.07 -pb_5c : 82.05 -pb_10c : 82.00 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.08 -pb_1c : 82.08 -pb_5c : 82.05 -pb_10c : 82.00 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.09 -pb_1c : 82.09 -pb_5c : 82.05 -pb_10c : 82.00 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.10 -pb_1c : 82.10 -pb_5c : 82.10 -pb_10c : 82.10 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.11 -pb_1c : 82.11 -pb_5c : 82.10 -pb_10c : 82.10 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.12 -pb_1c : 82.12 -pb_5c : 82.10 -pb_10c : 82.10 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.13 -pb_1c : 82.13 -pb_5c : 82.10 -pb_10c : 82.10 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.14 -pb_1c : 82.14 -pb_5c : 82.10 -pb_10c : 82.10 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.15 -pb_1c : 82.15 -pb_5c : 82.15 -pb_10c : 82.10 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.16 -pb_1c : 82.16 -pb_5c : 82.15 -pb_10c : 82.10 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.17 -pb_1c : 82.17 -pb_5c : 82.15 -pb_10c : 82.10 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.18 -pb_1c : 82.18 -pb_5c : 82.15 -pb_10c : 82.10 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.19 -pb_1c : 82.19 -pb_5c : 82.15 -pb_10c : 82.10 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.20 -pb_1c : 82.20 -pb_5c : 82.20 -pb_10c : 82.20 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.21 -pb_1c : 82.21 -pb_5c : 82.20 -pb_10c : 82.20 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.22 -pb_1c : 82.22 -pb_5c : 82.20 -pb_10c : 82.20 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.23 -pb_1c : 82.23 -pb_5c : 82.20 -pb_10c : 82.20 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.24 -pb_1c : 82.24 -pb_5c : 82.20 -pb_10c : 82.20 -pb_25c : 82.00 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.25 -pb_1c : 82.25 -pb_5c : 82.25 -pb_10c : 82.20 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.26 -pb_1c : 82.26 -pb_5c : 82.25 -pb_10c : 82.20 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.27 -pb_1c : 82.27 -pb_5c : 82.25 -pb_10c : 82.20 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.28 -pb_1c : 82.28 -pb_5c : 82.25 -pb_10c : 82.20 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.29 -pb_1c : 82.29 -pb_5c : 82.25 -pb_10c : 82.20 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.30 -pb_1c : 82.30 -pb_5c : 82.30 -pb_10c : 82.30 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.31 -pb_1c : 82.31 -pb_5c : 82.30 -pb_10c : 82.30 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.32 -pb_1c : 82.32 -pb_5c : 82.30 -pb_10c : 82.30 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.33 -pb_1c : 82.33 -pb_5c : 82.30 -pb_10c : 82.30 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.34 -pb_1c : 82.34 -pb_5c : 82.30 -pb_10c : 82.30 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.35 -pb_1c : 82.35 -pb_5c : 82.35 -pb_10c : 82.30 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.36 -pb_1c : 82.36 -pb_5c : 82.35 -pb_10c : 82.30 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.37 -pb_1c : 82.37 -pb_5c : 82.35 -pb_10c : 82.30 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.38 -pb_1c : 82.38 -pb_5c : 82.35 -pb_10c : 82.30 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.39 -pb_1c : 82.39 -pb_5c : 82.35 -pb_10c : 82.30 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.40 -pb_1c : 82.40 -pb_5c : 82.40 -pb_10c : 82.40 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.41 -pb_1c : 82.41 -pb_5c : 82.40 -pb_10c : 82.40 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.42 -pb_1c : 82.42 -pb_5c : 82.40 -pb_10c : 82.40 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.43 -pb_1c : 82.43 -pb_5c : 82.40 -pb_10c : 82.40 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.44 -pb_1c : 82.44 -pb_5c : 82.40 -pb_10c : 82.40 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.45 -pb_1c : 82.45 -pb_5c : 82.45 -pb_10c : 82.40 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.46 -pb_1c : 82.46 -pb_5c : 82.45 -pb_10c : 82.40 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.47 -pb_1c : 82.47 -pb_5c : 82.45 -pb_10c : 82.40 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.48 -pb_1c : 82.48 -pb_5c : 82.45 -pb_10c : 82.40 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.49 -pb_1c : 82.49 -pb_5c : 82.45 -pb_10c : 82.40 -pb_25c : 82.25 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.50 -pb_1c : 82.50 -pb_5c : 82.50 -pb_10c : 82.50 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.51 -pb_1c : 82.51 -pb_5c : 82.50 -pb_10c : 82.50 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.52 -pb_1c : 82.52 -pb_5c : 82.50 -pb_10c : 82.50 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.53 -pb_1c : 82.53 -pb_5c : 82.50 -pb_10c : 82.50 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.54 -pb_1c : 82.54 -pb_5c : 82.50 -pb_10c : 82.50 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.55 -pb_1c : 82.55 -pb_5c : 82.55 -pb_10c : 82.50 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.56 -pb_1c : 82.56 -pb_5c : 82.55 -pb_10c : 82.50 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.57 -pb_1c : 82.57 -pb_5c : 82.55 -pb_10c : 82.50 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.58 -pb_1c : 82.58 -pb_5c : 82.55 -pb_10c : 82.50 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.59 -pb_1c : 82.59 -pb_5c : 82.55 -pb_10c : 82.50 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.60 -pb_1c : 82.60 -pb_5c : 82.60 -pb_10c : 82.60 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.61 -pb_1c : 82.61 -pb_5c : 82.60 -pb_10c : 82.60 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.62 -pb_1c : 82.62 -pb_5c : 82.60 -pb_10c : 82.60 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.63 -pb_1c : 82.63 -pb_5c : 82.60 -pb_10c : 82.60 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.64 -pb_1c : 82.64 -pb_5c : 82.60 -pb_10c : 82.60 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.65 -pb_1c : 82.65 -pb_5c : 82.65 -pb_10c : 82.60 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.66 -pb_1c : 82.66 -pb_5c : 82.65 -pb_10c : 82.60 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.67 -pb_1c : 82.67 -pb_5c : 82.65 -pb_10c : 82.60 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.68 -pb_1c : 82.68 -pb_5c : 82.65 -pb_10c : 82.60 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.69 -pb_1c : 82.69 -pb_5c : 82.65 -pb_10c : 82.60 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.70 -pb_1c : 82.70 -pb_5c : 82.70 -pb_10c : 82.70 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.71 -pb_1c : 82.71 -pb_5c : 82.70 -pb_10c : 82.70 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.72 -pb_1c : 82.72 -pb_5c : 82.70 -pb_10c : 82.70 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.73 -pb_1c : 82.73 -pb_5c : 82.70 -pb_10c : 82.70 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.74 -pb_1c : 82.74 -pb_5c : 82.70 -pb_10c : 82.70 -pb_25c : 82.50 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.75 -pb_1c : 82.75 -pb_5c : 82.75 -pb_10c : 82.70 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.76 -pb_1c : 82.76 -pb_5c : 82.75 -pb_10c : 82.70 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.77 -pb_1c : 82.77 -pb_5c : 82.75 -pb_10c : 82.70 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.78 -pb_1c : 82.78 -pb_5c : 82.75 -pb_10c : 82.70 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.79 -pb_1c : 82.79 -pb_5c : 82.75 -pb_10c : 82.70 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.80 -pb_1c : 82.80 -pb_5c : 82.80 -pb_10c : 82.80 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.81 -pb_1c : 82.81 -pb_5c : 82.80 -pb_10c : 82.80 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.82 -pb_1c : 82.82 -pb_5c : 82.80 -pb_10c : 82.80 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.83 -pb_1c : 82.83 -pb_5c : 82.80 -pb_10c : 82.80 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.84 -pb_1c : 82.84 -pb_5c : 82.80 -pb_10c : 82.80 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.85 -pb_1c : 82.85 -pb_5c : 82.85 -pb_10c : 82.80 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.86 -pb_1c : 82.86 -pb_5c : 82.85 -pb_10c : 82.80 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.87 -pb_1c : 82.87 -pb_5c : 82.85 -pb_10c : 82.80 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.88 -pb_1c : 82.88 -pb_5c : 82.85 -pb_10c : 82.80 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.89 -pb_1c : 82.89 -pb_5c : 82.85 -pb_10c : 82.80 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.90 -pb_1c : 82.90 -pb_5c : 82.90 -pb_10c : 82.90 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.91 -pb_1c : 82.91 -pb_5c : 82.90 -pb_10c : 82.90 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.92 -pb_1c : 82.92 -pb_5c : 82.90 -pb_10c : 82.90 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.93 -pb_1c : 82.93 -pb_5c : 82.90 -pb_10c : 82.90 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.94 -pb_1c : 82.94 -pb_5c : 82.90 -pb_10c : 82.90 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.95 -pb_1c : 82.95 -pb_5c : 82.95 -pb_10c : 82.90 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.96 -pb_1c : 82.96 -pb_5c : 82.95 -pb_10c : 82.90 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.97 -pb_1c : 82.97 -pb_5c : 82.95 -pb_10c : 82.90 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.98 -pb_1c : 82.98 -pb_5c : 82.95 -pb_10c : 82.90 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -82.99 -pb_1c : 82.99 -pb_5c : 82.95 -pb_10c : 82.90 -pb_25c : 82.75 -pb_1d : 82.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.00 -pb_1c : 83.00 -pb_5c : 83.00 -pb_10c : 83.00 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.01 -pb_1c : 83.01 -pb_5c : 83.00 -pb_10c : 83.00 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.02 -pb_1c : 83.02 -pb_5c : 83.00 -pb_10c : 83.00 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.03 -pb_1c : 83.03 -pb_5c : 83.00 -pb_10c : 83.00 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.04 -pb_1c : 83.04 -pb_5c : 83.00 -pb_10c : 83.00 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.05 -pb_1c : 83.05 -pb_5c : 83.05 -pb_10c : 83.00 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.06 -pb_1c : 83.06 -pb_5c : 83.05 -pb_10c : 83.00 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.07 -pb_1c : 83.07 -pb_5c : 83.05 -pb_10c : 83.00 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.08 -pb_1c : 83.08 -pb_5c : 83.05 -pb_10c : 83.00 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.09 -pb_1c : 83.09 -pb_5c : 83.05 -pb_10c : 83.00 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.10 -pb_1c : 83.10 -pb_5c : 83.10 -pb_10c : 83.10 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.11 -pb_1c : 83.11 -pb_5c : 83.10 -pb_10c : 83.10 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.12 -pb_1c : 83.12 -pb_5c : 83.10 -pb_10c : 83.10 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.13 -pb_1c : 83.13 -pb_5c : 83.10 -pb_10c : 83.10 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.14 -pb_1c : 83.14 -pb_5c : 83.10 -pb_10c : 83.10 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.15 -pb_1c : 83.15 -pb_5c : 83.15 -pb_10c : 83.10 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.16 -pb_1c : 83.16 -pb_5c : 83.15 -pb_10c : 83.10 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.17 -pb_1c : 83.17 -pb_5c : 83.15 -pb_10c : 83.10 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.18 -pb_1c : 83.18 -pb_5c : 83.15 -pb_10c : 83.10 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.19 -pb_1c : 83.19 -pb_5c : 83.15 -pb_10c : 83.10 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.20 -pb_1c : 83.20 -pb_5c : 83.20 -pb_10c : 83.20 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.21 -pb_1c : 83.21 -pb_5c : 83.20 -pb_10c : 83.20 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.22 -pb_1c : 83.22 -pb_5c : 83.20 -pb_10c : 83.20 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.23 -pb_1c : 83.23 -pb_5c : 83.20 -pb_10c : 83.20 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.24 -pb_1c : 83.24 -pb_5c : 83.20 -pb_10c : 83.20 -pb_25c : 83.00 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.25 -pb_1c : 83.25 -pb_5c : 83.25 -pb_10c : 83.20 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.26 -pb_1c : 83.26 -pb_5c : 83.25 -pb_10c : 83.20 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.27 -pb_1c : 83.27 -pb_5c : 83.25 -pb_10c : 83.20 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.28 -pb_1c : 83.28 -pb_5c : 83.25 -pb_10c : 83.20 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.29 -pb_1c : 83.29 -pb_5c : 83.25 -pb_10c : 83.20 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.30 -pb_1c : 83.30 -pb_5c : 83.30 -pb_10c : 83.30 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.31 -pb_1c : 83.31 -pb_5c : 83.30 -pb_10c : 83.30 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.32 -pb_1c : 83.32 -pb_5c : 83.30 -pb_10c : 83.30 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.33 -pb_1c : 83.33 -pb_5c : 83.30 -pb_10c : 83.30 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.34 -pb_1c : 83.34 -pb_5c : 83.30 -pb_10c : 83.30 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.35 -pb_1c : 83.35 -pb_5c : 83.35 -pb_10c : 83.30 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.36 -pb_1c : 83.36 -pb_5c : 83.35 -pb_10c : 83.30 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.37 -pb_1c : 83.37 -pb_5c : 83.35 -pb_10c : 83.30 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.38 -pb_1c : 83.38 -pb_5c : 83.35 -pb_10c : 83.30 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.39 -pb_1c : 83.39 -pb_5c : 83.35 -pb_10c : 83.30 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.40 -pb_1c : 83.40 -pb_5c : 83.40 -pb_10c : 83.40 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.41 -pb_1c : 83.41 -pb_5c : 83.40 -pb_10c : 83.40 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.42 -pb_1c : 83.42 -pb_5c : 83.40 -pb_10c : 83.40 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.43 -pb_1c : 83.43 -pb_5c : 83.40 -pb_10c : 83.40 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.44 -pb_1c : 83.44 -pb_5c : 83.40 -pb_10c : 83.40 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.45 -pb_1c : 83.45 -pb_5c : 83.45 -pb_10c : 83.40 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.46 -pb_1c : 83.46 -pb_5c : 83.45 -pb_10c : 83.40 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.47 -pb_1c : 83.47 -pb_5c : 83.45 -pb_10c : 83.40 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.48 -pb_1c : 83.48 -pb_5c : 83.45 -pb_10c : 83.40 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.49 -pb_1c : 83.49 -pb_5c : 83.45 -pb_10c : 83.40 -pb_25c : 83.25 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.50 -pb_1c : 83.50 -pb_5c : 83.50 -pb_10c : 83.50 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.51 -pb_1c : 83.51 -pb_5c : 83.50 -pb_10c : 83.50 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.52 -pb_1c : 83.52 -pb_5c : 83.50 -pb_10c : 83.50 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.53 -pb_1c : 83.53 -pb_5c : 83.50 -pb_10c : 83.50 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.54 -pb_1c : 83.54 -pb_5c : 83.50 -pb_10c : 83.50 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.55 -pb_1c : 83.55 -pb_5c : 83.55 -pb_10c : 83.50 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.56 -pb_1c : 83.56 -pb_5c : 83.55 -pb_10c : 83.50 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.57 -pb_1c : 83.57 -pb_5c : 83.55 -pb_10c : 83.50 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.58 -pb_1c : 83.58 -pb_5c : 83.55 -pb_10c : 83.50 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.59 -pb_1c : 83.59 -pb_5c : 83.55 -pb_10c : 83.50 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.60 -pb_1c : 83.60 -pb_5c : 83.60 -pb_10c : 83.60 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.61 -pb_1c : 83.61 -pb_5c : 83.60 -pb_10c : 83.60 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.62 -pb_1c : 83.62 -pb_5c : 83.60 -pb_10c : 83.60 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.63 -pb_1c : 83.63 -pb_5c : 83.60 -pb_10c : 83.60 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.64 -pb_1c : 83.64 -pb_5c : 83.60 -pb_10c : 83.60 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.65 -pb_1c : 83.65 -pb_5c : 83.65 -pb_10c : 83.60 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.66 -pb_1c : 83.66 -pb_5c : 83.65 -pb_10c : 83.60 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.67 -pb_1c : 83.67 -pb_5c : 83.65 -pb_10c : 83.60 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.68 -pb_1c : 83.68 -pb_5c : 83.65 -pb_10c : 83.60 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.69 -pb_1c : 83.69 -pb_5c : 83.65 -pb_10c : 83.60 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.70 -pb_1c : 83.70 -pb_5c : 83.70 -pb_10c : 83.70 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.71 -pb_1c : 83.71 -pb_5c : 83.70 -pb_10c : 83.70 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.72 -pb_1c : 83.72 -pb_5c : 83.70 -pb_10c : 83.70 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.73 -pb_1c : 83.73 -pb_5c : 83.70 -pb_10c : 83.70 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.74 -pb_1c : 83.74 -pb_5c : 83.70 -pb_10c : 83.70 -pb_25c : 83.50 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.75 -pb_1c : 83.75 -pb_5c : 83.75 -pb_10c : 83.70 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.76 -pb_1c : 83.76 -pb_5c : 83.75 -pb_10c : 83.70 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.77 -pb_1c : 83.77 -pb_5c : 83.75 -pb_10c : 83.70 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.78 -pb_1c : 83.78 -pb_5c : 83.75 -pb_10c : 83.70 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.79 -pb_1c : 83.79 -pb_5c : 83.75 -pb_10c : 83.70 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.80 -pb_1c : 83.80 -pb_5c : 83.80 -pb_10c : 83.80 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.81 -pb_1c : 83.81 -pb_5c : 83.80 -pb_10c : 83.80 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.82 -pb_1c : 83.82 -pb_5c : 83.80 -pb_10c : 83.80 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.83 -pb_1c : 83.83 -pb_5c : 83.80 -pb_10c : 83.80 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.84 -pb_1c : 83.84 -pb_5c : 83.80 -pb_10c : 83.80 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.85 -pb_1c : 83.85 -pb_5c : 83.85 -pb_10c : 83.80 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.86 -pb_1c : 83.86 -pb_5c : 83.85 -pb_10c : 83.80 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.87 -pb_1c : 83.87 -pb_5c : 83.85 -pb_10c : 83.80 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.88 -pb_1c : 83.88 -pb_5c : 83.85 -pb_10c : 83.80 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.89 -pb_1c : 83.89 -pb_5c : 83.85 -pb_10c : 83.80 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.90 -pb_1c : 83.90 -pb_5c : 83.90 -pb_10c : 83.90 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.91 -pb_1c : 83.91 -pb_5c : 83.90 -pb_10c : 83.90 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.92 -pb_1c : 83.92 -pb_5c : 83.90 -pb_10c : 83.90 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.93 -pb_1c : 83.93 -pb_5c : 83.90 -pb_10c : 83.90 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.94 -pb_1c : 83.94 -pb_5c : 83.90 -pb_10c : 83.90 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.95 -pb_1c : 83.95 -pb_5c : 83.95 -pb_10c : 83.90 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.96 -pb_1c : 83.96 -pb_5c : 83.95 -pb_10c : 83.90 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.97 -pb_1c : 83.97 -pb_5c : 83.95 -pb_10c : 83.90 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.98 -pb_1c : 83.98 -pb_5c : 83.95 -pb_10c : 83.90 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -83.99 -pb_1c : 83.99 -pb_5c : 83.95 -pb_10c : 83.90 -pb_25c : 83.75 -pb_1d : 83.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.00 -pb_1c : 84.00 -pb_5c : 84.00 -pb_10c : 84.00 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.01 -pb_1c : 84.01 -pb_5c : 84.00 -pb_10c : 84.00 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.02 -pb_1c : 84.02 -pb_5c : 84.00 -pb_10c : 84.00 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.03 -pb_1c : 84.03 -pb_5c : 84.00 -pb_10c : 84.00 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.04 -pb_1c : 84.04 -pb_5c : 84.00 -pb_10c : 84.00 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.05 -pb_1c : 84.05 -pb_5c : 84.05 -pb_10c : 84.00 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.06 -pb_1c : 84.06 -pb_5c : 84.05 -pb_10c : 84.00 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.07 -pb_1c : 84.07 -pb_5c : 84.05 -pb_10c : 84.00 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.08 -pb_1c : 84.08 -pb_5c : 84.05 -pb_10c : 84.00 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.09 -pb_1c : 84.09 -pb_5c : 84.05 -pb_10c : 84.00 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.10 -pb_1c : 84.10 -pb_5c : 84.10 -pb_10c : 84.10 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.11 -pb_1c : 84.11 -pb_5c : 84.10 -pb_10c : 84.10 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.12 -pb_1c : 84.12 -pb_5c : 84.10 -pb_10c : 84.10 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.13 -pb_1c : 84.13 -pb_5c : 84.10 -pb_10c : 84.10 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.14 -pb_1c : 84.14 -pb_5c : 84.10 -pb_10c : 84.10 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.15 -pb_1c : 84.15 -pb_5c : 84.15 -pb_10c : 84.10 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.16 -pb_1c : 84.16 -pb_5c : 84.15 -pb_10c : 84.10 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.17 -pb_1c : 84.17 -pb_5c : 84.15 -pb_10c : 84.10 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.18 -pb_1c : 84.18 -pb_5c : 84.15 -pb_10c : 84.10 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.19 -pb_1c : 84.19 -pb_5c : 84.15 -pb_10c : 84.10 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.20 -pb_1c : 84.20 -pb_5c : 84.20 -pb_10c : 84.20 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.21 -pb_1c : 84.21 -pb_5c : 84.20 -pb_10c : 84.20 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.22 -pb_1c : 84.22 -pb_5c : 84.20 -pb_10c : 84.20 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.23 -pb_1c : 84.23 -pb_5c : 84.20 -pb_10c : 84.20 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.24 -pb_1c : 84.24 -pb_5c : 84.20 -pb_10c : 84.20 -pb_25c : 84.00 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.25 -pb_1c : 84.25 -pb_5c : 84.25 -pb_10c : 84.20 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.26 -pb_1c : 84.26 -pb_5c : 84.25 -pb_10c : 84.20 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.27 -pb_1c : 84.27 -pb_5c : 84.25 -pb_10c : 84.20 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.28 -pb_1c : 84.28 -pb_5c : 84.25 -pb_10c : 84.20 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.29 -pb_1c : 84.29 -pb_5c : 84.25 -pb_10c : 84.20 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.30 -pb_1c : 84.30 -pb_5c : 84.30 -pb_10c : 84.30 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.31 -pb_1c : 84.31 -pb_5c : 84.30 -pb_10c : 84.30 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.32 -pb_1c : 84.32 -pb_5c : 84.30 -pb_10c : 84.30 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.33 -pb_1c : 84.33 -pb_5c : 84.30 -pb_10c : 84.30 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.34 -pb_1c : 84.34 -pb_5c : 84.30 -pb_10c : 84.30 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.35 -pb_1c : 84.35 -pb_5c : 84.35 -pb_10c : 84.30 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.36 -pb_1c : 84.36 -pb_5c : 84.35 -pb_10c : 84.30 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.37 -pb_1c : 84.37 -pb_5c : 84.35 -pb_10c : 84.30 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.38 -pb_1c : 84.38 -pb_5c : 84.35 -pb_10c : 84.30 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.39 -pb_1c : 84.39 -pb_5c : 84.35 -pb_10c : 84.30 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.40 -pb_1c : 84.40 -pb_5c : 84.40 -pb_10c : 84.40 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.41 -pb_1c : 84.41 -pb_5c : 84.40 -pb_10c : 84.40 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.42 -pb_1c : 84.42 -pb_5c : 84.40 -pb_10c : 84.40 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.43 -pb_1c : 84.43 -pb_5c : 84.40 -pb_10c : 84.40 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.44 -pb_1c : 84.44 -pb_5c : 84.40 -pb_10c : 84.40 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.45 -pb_1c : 84.45 -pb_5c : 84.45 -pb_10c : 84.40 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.46 -pb_1c : 84.46 -pb_5c : 84.45 -pb_10c : 84.40 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.47 -pb_1c : 84.47 -pb_5c : 84.45 -pb_10c : 84.40 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.48 -pb_1c : 84.48 -pb_5c : 84.45 -pb_10c : 84.40 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.49 -pb_1c : 84.49 -pb_5c : 84.45 -pb_10c : 84.40 -pb_25c : 84.25 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.50 -pb_1c : 84.50 -pb_5c : 84.50 -pb_10c : 84.50 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.51 -pb_1c : 84.51 -pb_5c : 84.50 -pb_10c : 84.50 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.52 -pb_1c : 84.52 -pb_5c : 84.50 -pb_10c : 84.50 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.53 -pb_1c : 84.53 -pb_5c : 84.50 -pb_10c : 84.50 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.54 -pb_1c : 84.54 -pb_5c : 84.50 -pb_10c : 84.50 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.55 -pb_1c : 84.55 -pb_5c : 84.55 -pb_10c : 84.50 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.56 -pb_1c : 84.56 -pb_5c : 84.55 -pb_10c : 84.50 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.57 -pb_1c : 84.57 -pb_5c : 84.55 -pb_10c : 84.50 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.58 -pb_1c : 84.58 -pb_5c : 84.55 -pb_10c : 84.50 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.59 -pb_1c : 84.59 -pb_5c : 84.55 -pb_10c : 84.50 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.60 -pb_1c : 84.60 -pb_5c : 84.60 -pb_10c : 84.60 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.61 -pb_1c : 84.61 -pb_5c : 84.60 -pb_10c : 84.60 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.62 -pb_1c : 84.62 -pb_5c : 84.60 -pb_10c : 84.60 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.63 -pb_1c : 84.63 -pb_5c : 84.60 -pb_10c : 84.60 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.64 -pb_1c : 84.64 -pb_5c : 84.60 -pb_10c : 84.60 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.65 -pb_1c : 84.65 -pb_5c : 84.65 -pb_10c : 84.60 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.66 -pb_1c : 84.66 -pb_5c : 84.65 -pb_10c : 84.60 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.67 -pb_1c : 84.67 -pb_5c : 84.65 -pb_10c : 84.60 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.68 -pb_1c : 84.68 -pb_5c : 84.65 -pb_10c : 84.60 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.69 -pb_1c : 84.69 -pb_5c : 84.65 -pb_10c : 84.60 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.70 -pb_1c : 84.70 -pb_5c : 84.70 -pb_10c : 84.70 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.71 -pb_1c : 84.71 -pb_5c : 84.70 -pb_10c : 84.70 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.72 -pb_1c : 84.72 -pb_5c : 84.70 -pb_10c : 84.70 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.73 -pb_1c : 84.73 -pb_5c : 84.70 -pb_10c : 84.70 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.74 -pb_1c : 84.74 -pb_5c : 84.70 -pb_10c : 84.70 -pb_25c : 84.50 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.75 -pb_1c : 84.75 -pb_5c : 84.75 -pb_10c : 84.70 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.76 -pb_1c : 84.76 -pb_5c : 84.75 -pb_10c : 84.70 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.77 -pb_1c : 84.77 -pb_5c : 84.75 -pb_10c : 84.70 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.78 -pb_1c : 84.78 -pb_5c : 84.75 -pb_10c : 84.70 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.79 -pb_1c : 84.79 -pb_5c : 84.75 -pb_10c : 84.70 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.80 -pb_1c : 84.80 -pb_5c : 84.80 -pb_10c : 84.80 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.81 -pb_1c : 84.81 -pb_5c : 84.80 -pb_10c : 84.80 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.82 -pb_1c : 84.82 -pb_5c : 84.80 -pb_10c : 84.80 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.83 -pb_1c : 84.83 -pb_5c : 84.80 -pb_10c : 84.80 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.84 -pb_1c : 84.84 -pb_5c : 84.80 -pb_10c : 84.80 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.85 -pb_1c : 84.85 -pb_5c : 84.85 -pb_10c : 84.80 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.86 -pb_1c : 84.86 -pb_5c : 84.85 -pb_10c : 84.80 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.87 -pb_1c : 84.87 -pb_5c : 84.85 -pb_10c : 84.80 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.88 -pb_1c : 84.88 -pb_5c : 84.85 -pb_10c : 84.80 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.89 -pb_1c : 84.89 -pb_5c : 84.85 -pb_10c : 84.80 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.90 -pb_1c : 84.90 -pb_5c : 84.90 -pb_10c : 84.90 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.91 -pb_1c : 84.91 -pb_5c : 84.90 -pb_10c : 84.90 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.92 -pb_1c : 84.92 -pb_5c : 84.90 -pb_10c : 84.90 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.93 -pb_1c : 84.93 -pb_5c : 84.90 -pb_10c : 84.90 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.94 -pb_1c : 84.94 -pb_5c : 84.90 -pb_10c : 84.90 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.95 -pb_1c : 84.95 -pb_5c : 84.95 -pb_10c : 84.90 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.96 -pb_1c : 84.96 -pb_5c : 84.95 -pb_10c : 84.90 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.97 -pb_1c : 84.97 -pb_5c : 84.95 -pb_10c : 84.90 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.98 -pb_1c : 84.98 -pb_5c : 84.95 -pb_10c : 84.90 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -84.99 -pb_1c : 84.99 -pb_5c : 84.95 -pb_10c : 84.90 -pb_25c : 84.75 -pb_1d : 84.00 -pb_5d : 80.00 -pb_10d : 80.00 - -85.00 -pb_1c : 85.00 -pb_5c : 85.00 -pb_10c : 85.00 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.01 -pb_1c : 85.01 -pb_5c : 85.00 -pb_10c : 85.00 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.02 -pb_1c : 85.02 -pb_5c : 85.00 -pb_10c : 85.00 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.03 -pb_1c : 85.03 -pb_5c : 85.00 -pb_10c : 85.00 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.04 -pb_1c : 85.04 -pb_5c : 85.00 -pb_10c : 85.00 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.05 -pb_1c : 85.05 -pb_5c : 85.05 -pb_10c : 85.00 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.06 -pb_1c : 85.06 -pb_5c : 85.05 -pb_10c : 85.00 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.07 -pb_1c : 85.07 -pb_5c : 85.05 -pb_10c : 85.00 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.08 -pb_1c : 85.08 -pb_5c : 85.05 -pb_10c : 85.00 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.09 -pb_1c : 85.09 -pb_5c : 85.05 -pb_10c : 85.00 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.10 -pb_1c : 85.10 -pb_5c : 85.10 -pb_10c : 85.10 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.11 -pb_1c : 85.11 -pb_5c : 85.10 -pb_10c : 85.10 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.12 -pb_1c : 85.12 -pb_5c : 85.10 -pb_10c : 85.10 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.13 -pb_1c : 85.13 -pb_5c : 85.10 -pb_10c : 85.10 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.14 -pb_1c : 85.14 -pb_5c : 85.10 -pb_10c : 85.10 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.15 -pb_1c : 85.15 -pb_5c : 85.15 -pb_10c : 85.10 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.16 -pb_1c : 85.16 -pb_5c : 85.15 -pb_10c : 85.10 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.17 -pb_1c : 85.17 -pb_5c : 85.15 -pb_10c : 85.10 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.18 -pb_1c : 85.18 -pb_5c : 85.15 -pb_10c : 85.10 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.19 -pb_1c : 85.19 -pb_5c : 85.15 -pb_10c : 85.10 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.20 -pb_1c : 85.20 -pb_5c : 85.20 -pb_10c : 85.20 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.21 -pb_1c : 85.21 -pb_5c : 85.20 -pb_10c : 85.20 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.22 -pb_1c : 85.22 -pb_5c : 85.20 -pb_10c : 85.20 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.23 -pb_1c : 85.23 -pb_5c : 85.20 -pb_10c : 85.20 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.24 -pb_1c : 85.24 -pb_5c : 85.20 -pb_10c : 85.20 -pb_25c : 85.00 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.25 -pb_1c : 85.25 -pb_5c : 85.25 -pb_10c : 85.20 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.26 -pb_1c : 85.26 -pb_5c : 85.25 -pb_10c : 85.20 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.27 -pb_1c : 85.27 -pb_5c : 85.25 -pb_10c : 85.20 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.28 -pb_1c : 85.28 -pb_5c : 85.25 -pb_10c : 85.20 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.29 -pb_1c : 85.29 -pb_5c : 85.25 -pb_10c : 85.20 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.30 -pb_1c : 85.30 -pb_5c : 85.30 -pb_10c : 85.30 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.31 -pb_1c : 85.31 -pb_5c : 85.30 -pb_10c : 85.30 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.32 -pb_1c : 85.32 -pb_5c : 85.30 -pb_10c : 85.30 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.33 -pb_1c : 85.33 -pb_5c : 85.30 -pb_10c : 85.30 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.34 -pb_1c : 85.34 -pb_5c : 85.30 -pb_10c : 85.30 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.35 -pb_1c : 85.35 -pb_5c : 85.35 -pb_10c : 85.30 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.36 -pb_1c : 85.36 -pb_5c : 85.35 -pb_10c : 85.30 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.37 -pb_1c : 85.37 -pb_5c : 85.35 -pb_10c : 85.30 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.38 -pb_1c : 85.38 -pb_5c : 85.35 -pb_10c : 85.30 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.39 -pb_1c : 85.39 -pb_5c : 85.35 -pb_10c : 85.30 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.40 -pb_1c : 85.40 -pb_5c : 85.40 -pb_10c : 85.40 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.41 -pb_1c : 85.41 -pb_5c : 85.40 -pb_10c : 85.40 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.42 -pb_1c : 85.42 -pb_5c : 85.40 -pb_10c : 85.40 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.43 -pb_1c : 85.43 -pb_5c : 85.40 -pb_10c : 85.40 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.44 -pb_1c : 85.44 -pb_5c : 85.40 -pb_10c : 85.40 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.45 -pb_1c : 85.45 -pb_5c : 85.45 -pb_10c : 85.40 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.46 -pb_1c : 85.46 -pb_5c : 85.45 -pb_10c : 85.40 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.47 -pb_1c : 85.47 -pb_5c : 85.45 -pb_10c : 85.40 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.48 -pb_1c : 85.48 -pb_5c : 85.45 -pb_10c : 85.40 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.49 -pb_1c : 85.49 -pb_5c : 85.45 -pb_10c : 85.40 -pb_25c : 85.25 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.50 -pb_1c : 85.50 -pb_5c : 85.50 -pb_10c : 85.50 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.51 -pb_1c : 85.51 -pb_5c : 85.50 -pb_10c : 85.50 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.52 -pb_1c : 85.52 -pb_5c : 85.50 -pb_10c : 85.50 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.53 -pb_1c : 85.53 -pb_5c : 85.50 -pb_10c : 85.50 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.54 -pb_1c : 85.54 -pb_5c : 85.50 -pb_10c : 85.50 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.55 -pb_1c : 85.55 -pb_5c : 85.55 -pb_10c : 85.50 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.56 -pb_1c : 85.56 -pb_5c : 85.55 -pb_10c : 85.50 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.57 -pb_1c : 85.57 -pb_5c : 85.55 -pb_10c : 85.50 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.58 -pb_1c : 85.58 -pb_5c : 85.55 -pb_10c : 85.50 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.59 -pb_1c : 85.59 -pb_5c : 85.55 -pb_10c : 85.50 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.60 -pb_1c : 85.60 -pb_5c : 85.60 -pb_10c : 85.60 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.61 -pb_1c : 85.61 -pb_5c : 85.60 -pb_10c : 85.60 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.62 -pb_1c : 85.62 -pb_5c : 85.60 -pb_10c : 85.60 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.63 -pb_1c : 85.63 -pb_5c : 85.60 -pb_10c : 85.60 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.64 -pb_1c : 85.64 -pb_5c : 85.60 -pb_10c : 85.60 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.65 -pb_1c : 85.65 -pb_5c : 85.65 -pb_10c : 85.60 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.66 -pb_1c : 85.66 -pb_5c : 85.65 -pb_10c : 85.60 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.67 -pb_1c : 85.67 -pb_5c : 85.65 -pb_10c : 85.60 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.68 -pb_1c : 85.68 -pb_5c : 85.65 -pb_10c : 85.60 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.69 -pb_1c : 85.69 -pb_5c : 85.65 -pb_10c : 85.60 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.70 -pb_1c : 85.70 -pb_5c : 85.70 -pb_10c : 85.70 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.71 -pb_1c : 85.71 -pb_5c : 85.70 -pb_10c : 85.70 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.72 -pb_1c : 85.72 -pb_5c : 85.70 -pb_10c : 85.70 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.73 -pb_1c : 85.73 -pb_5c : 85.70 -pb_10c : 85.70 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.74 -pb_1c : 85.74 -pb_5c : 85.70 -pb_10c : 85.70 -pb_25c : 85.50 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.75 -pb_1c : 85.75 -pb_5c : 85.75 -pb_10c : 85.70 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.76 -pb_1c : 85.76 -pb_5c : 85.75 -pb_10c : 85.70 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.77 -pb_1c : 85.77 -pb_5c : 85.75 -pb_10c : 85.70 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.78 -pb_1c : 85.78 -pb_5c : 85.75 -pb_10c : 85.70 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.79 -pb_1c : 85.79 -pb_5c : 85.75 -pb_10c : 85.70 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.80 -pb_1c : 85.80 -pb_5c : 85.80 -pb_10c : 85.80 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.81 -pb_1c : 85.81 -pb_5c : 85.80 -pb_10c : 85.80 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.82 -pb_1c : 85.82 -pb_5c : 85.80 -pb_10c : 85.80 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.83 -pb_1c : 85.83 -pb_5c : 85.80 -pb_10c : 85.80 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.84 -pb_1c : 85.84 -pb_5c : 85.80 -pb_10c : 85.80 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.85 -pb_1c : 85.85 -pb_5c : 85.85 -pb_10c : 85.80 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.86 -pb_1c : 85.86 -pb_5c : 85.85 -pb_10c : 85.80 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.87 -pb_1c : 85.87 -pb_5c : 85.85 -pb_10c : 85.80 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.88 -pb_1c : 85.88 -pb_5c : 85.85 -pb_10c : 85.80 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.89 -pb_1c : 85.89 -pb_5c : 85.85 -pb_10c : 85.80 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.90 -pb_1c : 85.90 -pb_5c : 85.90 -pb_10c : 85.90 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.91 -pb_1c : 85.91 -pb_5c : 85.90 -pb_10c : 85.90 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.92 -pb_1c : 85.92 -pb_5c : 85.90 -pb_10c : 85.90 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.93 -pb_1c : 85.93 -pb_5c : 85.90 -pb_10c : 85.90 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.94 -pb_1c : 85.94 -pb_5c : 85.90 -pb_10c : 85.90 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.95 -pb_1c : 85.95 -pb_5c : 85.95 -pb_10c : 85.90 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.96 -pb_1c : 85.96 -pb_5c : 85.95 -pb_10c : 85.90 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.97 -pb_1c : 85.97 -pb_5c : 85.95 -pb_10c : 85.90 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.98 -pb_1c : 85.98 -pb_5c : 85.95 -pb_10c : 85.90 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -85.99 -pb_1c : 85.99 -pb_5c : 85.95 -pb_10c : 85.90 -pb_25c : 85.75 -pb_1d : 85.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.00 -pb_1c : 86.00 -pb_5c : 86.00 -pb_10c : 86.00 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.01 -pb_1c : 86.01 -pb_5c : 86.00 -pb_10c : 86.00 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.02 -pb_1c : 86.02 -pb_5c : 86.00 -pb_10c : 86.00 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.03 -pb_1c : 86.03 -pb_5c : 86.00 -pb_10c : 86.00 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.04 -pb_1c : 86.04 -pb_5c : 86.00 -pb_10c : 86.00 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.05 -pb_1c : 86.05 -pb_5c : 86.05 -pb_10c : 86.00 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.06 -pb_1c : 86.06 -pb_5c : 86.05 -pb_10c : 86.00 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.07 -pb_1c : 86.07 -pb_5c : 86.05 -pb_10c : 86.00 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.08 -pb_1c : 86.08 -pb_5c : 86.05 -pb_10c : 86.00 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.09 -pb_1c : 86.09 -pb_5c : 86.05 -pb_10c : 86.00 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.10 -pb_1c : 86.10 -pb_5c : 86.10 -pb_10c : 86.10 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.11 -pb_1c : 86.11 -pb_5c : 86.10 -pb_10c : 86.10 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.12 -pb_1c : 86.12 -pb_5c : 86.10 -pb_10c : 86.10 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.13 -pb_1c : 86.13 -pb_5c : 86.10 -pb_10c : 86.10 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.14 -pb_1c : 86.14 -pb_5c : 86.10 -pb_10c : 86.10 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.15 -pb_1c : 86.15 -pb_5c : 86.15 -pb_10c : 86.10 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.16 -pb_1c : 86.16 -pb_5c : 86.15 -pb_10c : 86.10 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.17 -pb_1c : 86.17 -pb_5c : 86.15 -pb_10c : 86.10 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.18 -pb_1c : 86.18 -pb_5c : 86.15 -pb_10c : 86.10 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.19 -pb_1c : 86.19 -pb_5c : 86.15 -pb_10c : 86.10 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.20 -pb_1c : 86.20 -pb_5c : 86.20 -pb_10c : 86.20 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.21 -pb_1c : 86.21 -pb_5c : 86.20 -pb_10c : 86.20 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.22 -pb_1c : 86.22 -pb_5c : 86.20 -pb_10c : 86.20 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.23 -pb_1c : 86.23 -pb_5c : 86.20 -pb_10c : 86.20 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.24 -pb_1c : 86.24 -pb_5c : 86.20 -pb_10c : 86.20 -pb_25c : 86.00 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.25 -pb_1c : 86.25 -pb_5c : 86.25 -pb_10c : 86.20 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.26 -pb_1c : 86.26 -pb_5c : 86.25 -pb_10c : 86.20 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.27 -pb_1c : 86.27 -pb_5c : 86.25 -pb_10c : 86.20 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.28 -pb_1c : 86.28 -pb_5c : 86.25 -pb_10c : 86.20 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.29 -pb_1c : 86.29 -pb_5c : 86.25 -pb_10c : 86.20 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.30 -pb_1c : 86.30 -pb_5c : 86.30 -pb_10c : 86.30 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.31 -pb_1c : 86.31 -pb_5c : 86.30 -pb_10c : 86.30 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.32 -pb_1c : 86.32 -pb_5c : 86.30 -pb_10c : 86.30 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.33 -pb_1c : 86.33 -pb_5c : 86.30 -pb_10c : 86.30 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.34 -pb_1c : 86.34 -pb_5c : 86.30 -pb_10c : 86.30 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.35 -pb_1c : 86.35 -pb_5c : 86.35 -pb_10c : 86.30 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.36 -pb_1c : 86.36 -pb_5c : 86.35 -pb_10c : 86.30 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.37 -pb_1c : 86.37 -pb_5c : 86.35 -pb_10c : 86.30 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.38 -pb_1c : 86.38 -pb_5c : 86.35 -pb_10c : 86.30 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.39 -pb_1c : 86.39 -pb_5c : 86.35 -pb_10c : 86.30 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.40 -pb_1c : 86.40 -pb_5c : 86.40 -pb_10c : 86.40 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.41 -pb_1c : 86.41 -pb_5c : 86.40 -pb_10c : 86.40 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.42 -pb_1c : 86.42 -pb_5c : 86.40 -pb_10c : 86.40 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.43 -pb_1c : 86.43 -pb_5c : 86.40 -pb_10c : 86.40 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.44 -pb_1c : 86.44 -pb_5c : 86.40 -pb_10c : 86.40 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.45 -pb_1c : 86.45 -pb_5c : 86.45 -pb_10c : 86.40 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.46 -pb_1c : 86.46 -pb_5c : 86.45 -pb_10c : 86.40 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.47 -pb_1c : 86.47 -pb_5c : 86.45 -pb_10c : 86.40 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.48 -pb_1c : 86.48 -pb_5c : 86.45 -pb_10c : 86.40 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.49 -pb_1c : 86.49 -pb_5c : 86.45 -pb_10c : 86.40 -pb_25c : 86.25 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.50 -pb_1c : 86.50 -pb_5c : 86.50 -pb_10c : 86.50 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.51 -pb_1c : 86.51 -pb_5c : 86.50 -pb_10c : 86.50 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.52 -pb_1c : 86.52 -pb_5c : 86.50 -pb_10c : 86.50 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.53 -pb_1c : 86.53 -pb_5c : 86.50 -pb_10c : 86.50 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.54 -pb_1c : 86.54 -pb_5c : 86.50 -pb_10c : 86.50 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.55 -pb_1c : 86.55 -pb_5c : 86.55 -pb_10c : 86.50 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.56 -pb_1c : 86.56 -pb_5c : 86.55 -pb_10c : 86.50 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.57 -pb_1c : 86.57 -pb_5c : 86.55 -pb_10c : 86.50 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.58 -pb_1c : 86.58 -pb_5c : 86.55 -pb_10c : 86.50 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.59 -pb_1c : 86.59 -pb_5c : 86.55 -pb_10c : 86.50 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.60 -pb_1c : 86.60 -pb_5c : 86.60 -pb_10c : 86.60 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.61 -pb_1c : 86.61 -pb_5c : 86.60 -pb_10c : 86.60 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.62 -pb_1c : 86.62 -pb_5c : 86.60 -pb_10c : 86.60 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.63 -pb_1c : 86.63 -pb_5c : 86.60 -pb_10c : 86.60 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.64 -pb_1c : 86.64 -pb_5c : 86.60 -pb_10c : 86.60 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.65 -pb_1c : 86.65 -pb_5c : 86.65 -pb_10c : 86.60 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.66 -pb_1c : 86.66 -pb_5c : 86.65 -pb_10c : 86.60 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.67 -pb_1c : 86.67 -pb_5c : 86.65 -pb_10c : 86.60 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.68 -pb_1c : 86.68 -pb_5c : 86.65 -pb_10c : 86.60 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.69 -pb_1c : 86.69 -pb_5c : 86.65 -pb_10c : 86.60 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.70 -pb_1c : 86.70 -pb_5c : 86.70 -pb_10c : 86.70 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.71 -pb_1c : 86.71 -pb_5c : 86.70 -pb_10c : 86.70 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.72 -pb_1c : 86.72 -pb_5c : 86.70 -pb_10c : 86.70 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.73 -pb_1c : 86.73 -pb_5c : 86.70 -pb_10c : 86.70 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.74 -pb_1c : 86.74 -pb_5c : 86.70 -pb_10c : 86.70 -pb_25c : 86.50 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.75 -pb_1c : 86.75 -pb_5c : 86.75 -pb_10c : 86.70 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.76 -pb_1c : 86.76 -pb_5c : 86.75 -pb_10c : 86.70 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.77 -pb_1c : 86.77 -pb_5c : 86.75 -pb_10c : 86.70 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.78 -pb_1c : 86.78 -pb_5c : 86.75 -pb_10c : 86.70 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.79 -pb_1c : 86.79 -pb_5c : 86.75 -pb_10c : 86.70 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.80 -pb_1c : 86.80 -pb_5c : 86.80 -pb_10c : 86.80 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.81 -pb_1c : 86.81 -pb_5c : 86.80 -pb_10c : 86.80 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.82 -pb_1c : 86.82 -pb_5c : 86.80 -pb_10c : 86.80 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.83 -pb_1c : 86.83 -pb_5c : 86.80 -pb_10c : 86.80 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.84 -pb_1c : 86.84 -pb_5c : 86.80 -pb_10c : 86.80 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.85 -pb_1c : 86.85 -pb_5c : 86.85 -pb_10c : 86.80 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.86 -pb_1c : 86.86 -pb_5c : 86.85 -pb_10c : 86.80 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.87 -pb_1c : 86.87 -pb_5c : 86.85 -pb_10c : 86.80 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.88 -pb_1c : 86.88 -pb_5c : 86.85 -pb_10c : 86.80 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.89 -pb_1c : 86.89 -pb_5c : 86.85 -pb_10c : 86.80 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.90 -pb_1c : 86.90 -pb_5c : 86.90 -pb_10c : 86.90 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.91 -pb_1c : 86.91 -pb_5c : 86.90 -pb_10c : 86.90 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.92 -pb_1c : 86.92 -pb_5c : 86.90 -pb_10c : 86.90 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.93 -pb_1c : 86.93 -pb_5c : 86.90 -pb_10c : 86.90 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.94 -pb_1c : 86.94 -pb_5c : 86.90 -pb_10c : 86.90 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.95 -pb_1c : 86.95 -pb_5c : 86.95 -pb_10c : 86.90 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.96 -pb_1c : 86.96 -pb_5c : 86.95 -pb_10c : 86.90 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.97 -pb_1c : 86.97 -pb_5c : 86.95 -pb_10c : 86.90 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.98 -pb_1c : 86.98 -pb_5c : 86.95 -pb_10c : 86.90 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -86.99 -pb_1c : 86.99 -pb_5c : 86.95 -pb_10c : 86.90 -pb_25c : 86.75 -pb_1d : 86.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.00 -pb_1c : 87.00 -pb_5c : 87.00 -pb_10c : 87.00 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.01 -pb_1c : 87.01 -pb_5c : 87.00 -pb_10c : 87.00 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.02 -pb_1c : 87.02 -pb_5c : 87.00 -pb_10c : 87.00 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.03 -pb_1c : 87.03 -pb_5c : 87.00 -pb_10c : 87.00 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.04 -pb_1c : 87.04 -pb_5c : 87.00 -pb_10c : 87.00 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.05 -pb_1c : 87.05 -pb_5c : 87.05 -pb_10c : 87.00 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.06 -pb_1c : 87.06 -pb_5c : 87.05 -pb_10c : 87.00 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.07 -pb_1c : 87.07 -pb_5c : 87.05 -pb_10c : 87.00 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.08 -pb_1c : 87.08 -pb_5c : 87.05 -pb_10c : 87.00 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.09 -pb_1c : 87.09 -pb_5c : 87.05 -pb_10c : 87.00 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.10 -pb_1c : 87.10 -pb_5c : 87.10 -pb_10c : 87.10 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.11 -pb_1c : 87.11 -pb_5c : 87.10 -pb_10c : 87.10 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.12 -pb_1c : 87.12 -pb_5c : 87.10 -pb_10c : 87.10 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.13 -pb_1c : 87.13 -pb_5c : 87.10 -pb_10c : 87.10 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.14 -pb_1c : 87.14 -pb_5c : 87.10 -pb_10c : 87.10 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.15 -pb_1c : 87.15 -pb_5c : 87.15 -pb_10c : 87.10 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.16 -pb_1c : 87.16 -pb_5c : 87.15 -pb_10c : 87.10 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.17 -pb_1c : 87.17 -pb_5c : 87.15 -pb_10c : 87.10 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.18 -pb_1c : 87.18 -pb_5c : 87.15 -pb_10c : 87.10 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.19 -pb_1c : 87.19 -pb_5c : 87.15 -pb_10c : 87.10 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.20 -pb_1c : 87.20 -pb_5c : 87.20 -pb_10c : 87.20 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.21 -pb_1c : 87.21 -pb_5c : 87.20 -pb_10c : 87.20 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.22 -pb_1c : 87.22 -pb_5c : 87.20 -pb_10c : 87.20 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.23 -pb_1c : 87.23 -pb_5c : 87.20 -pb_10c : 87.20 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.24 -pb_1c : 87.24 -pb_5c : 87.20 -pb_10c : 87.20 -pb_25c : 87.00 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.25 -pb_1c : 87.25 -pb_5c : 87.25 -pb_10c : 87.20 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.26 -pb_1c : 87.26 -pb_5c : 87.25 -pb_10c : 87.20 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.27 -pb_1c : 87.27 -pb_5c : 87.25 -pb_10c : 87.20 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.28 -pb_1c : 87.28 -pb_5c : 87.25 -pb_10c : 87.20 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.29 -pb_1c : 87.29 -pb_5c : 87.25 -pb_10c : 87.20 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.30 -pb_1c : 87.30 -pb_5c : 87.30 -pb_10c : 87.30 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.31 -pb_1c : 87.31 -pb_5c : 87.30 -pb_10c : 87.30 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.32 -pb_1c : 87.32 -pb_5c : 87.30 -pb_10c : 87.30 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.33 -pb_1c : 87.33 -pb_5c : 87.30 -pb_10c : 87.30 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.34 -pb_1c : 87.34 -pb_5c : 87.30 -pb_10c : 87.30 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.35 -pb_1c : 87.35 -pb_5c : 87.35 -pb_10c : 87.30 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.36 -pb_1c : 87.36 -pb_5c : 87.35 -pb_10c : 87.30 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.37 -pb_1c : 87.37 -pb_5c : 87.35 -pb_10c : 87.30 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.38 -pb_1c : 87.38 -pb_5c : 87.35 -pb_10c : 87.30 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.39 -pb_1c : 87.39 -pb_5c : 87.35 -pb_10c : 87.30 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.40 -pb_1c : 87.40 -pb_5c : 87.40 -pb_10c : 87.40 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.41 -pb_1c : 87.41 -pb_5c : 87.40 -pb_10c : 87.40 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.42 -pb_1c : 87.42 -pb_5c : 87.40 -pb_10c : 87.40 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.43 -pb_1c : 87.43 -pb_5c : 87.40 -pb_10c : 87.40 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.44 -pb_1c : 87.44 -pb_5c : 87.40 -pb_10c : 87.40 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.45 -pb_1c : 87.45 -pb_5c : 87.45 -pb_10c : 87.40 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.46 -pb_1c : 87.46 -pb_5c : 87.45 -pb_10c : 87.40 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.47 -pb_1c : 87.47 -pb_5c : 87.45 -pb_10c : 87.40 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.48 -pb_1c : 87.48 -pb_5c : 87.45 -pb_10c : 87.40 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.49 -pb_1c : 87.49 -pb_5c : 87.45 -pb_10c : 87.40 -pb_25c : 87.25 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.50 -pb_1c : 87.50 -pb_5c : 87.50 -pb_10c : 87.50 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.51 -pb_1c : 87.51 -pb_5c : 87.50 -pb_10c : 87.50 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.52 -pb_1c : 87.52 -pb_5c : 87.50 -pb_10c : 87.50 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.53 -pb_1c : 87.53 -pb_5c : 87.50 -pb_10c : 87.50 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.54 -pb_1c : 87.54 -pb_5c : 87.50 -pb_10c : 87.50 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.55 -pb_1c : 87.55 -pb_5c : 87.55 -pb_10c : 87.50 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.56 -pb_1c : 87.56 -pb_5c : 87.55 -pb_10c : 87.50 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.57 -pb_1c : 87.57 -pb_5c : 87.55 -pb_10c : 87.50 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.58 -pb_1c : 87.58 -pb_5c : 87.55 -pb_10c : 87.50 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.59 -pb_1c : 87.59 -pb_5c : 87.55 -pb_10c : 87.50 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.60 -pb_1c : 87.60 -pb_5c : 87.60 -pb_10c : 87.60 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.61 -pb_1c : 87.61 -pb_5c : 87.60 -pb_10c : 87.60 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.62 -pb_1c : 87.62 -pb_5c : 87.60 -pb_10c : 87.60 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.63 -pb_1c : 87.63 -pb_5c : 87.60 -pb_10c : 87.60 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.64 -pb_1c : 87.64 -pb_5c : 87.60 -pb_10c : 87.60 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.65 -pb_1c : 87.65 -pb_5c : 87.65 -pb_10c : 87.60 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.66 -pb_1c : 87.66 -pb_5c : 87.65 -pb_10c : 87.60 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.67 -pb_1c : 87.67 -pb_5c : 87.65 -pb_10c : 87.60 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.68 -pb_1c : 87.68 -pb_5c : 87.65 -pb_10c : 87.60 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.69 -pb_1c : 87.69 -pb_5c : 87.65 -pb_10c : 87.60 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.70 -pb_1c : 87.70 -pb_5c : 87.70 -pb_10c : 87.70 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.71 -pb_1c : 87.71 -pb_5c : 87.70 -pb_10c : 87.70 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.72 -pb_1c : 87.72 -pb_5c : 87.70 -pb_10c : 87.70 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.73 -pb_1c : 87.73 -pb_5c : 87.70 -pb_10c : 87.70 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.74 -pb_1c : 87.74 -pb_5c : 87.70 -pb_10c : 87.70 -pb_25c : 87.50 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.75 -pb_1c : 87.75 -pb_5c : 87.75 -pb_10c : 87.70 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.76 -pb_1c : 87.76 -pb_5c : 87.75 -pb_10c : 87.70 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.77 -pb_1c : 87.77 -pb_5c : 87.75 -pb_10c : 87.70 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.78 -pb_1c : 87.78 -pb_5c : 87.75 -pb_10c : 87.70 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.79 -pb_1c : 87.79 -pb_5c : 87.75 -pb_10c : 87.70 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.80 -pb_1c : 87.80 -pb_5c : 87.80 -pb_10c : 87.80 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.81 -pb_1c : 87.81 -pb_5c : 87.80 -pb_10c : 87.80 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.82 -pb_1c : 87.82 -pb_5c : 87.80 -pb_10c : 87.80 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.83 -pb_1c : 87.83 -pb_5c : 87.80 -pb_10c : 87.80 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.84 -pb_1c : 87.84 -pb_5c : 87.80 -pb_10c : 87.80 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.85 -pb_1c : 87.85 -pb_5c : 87.85 -pb_10c : 87.80 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.86 -pb_1c : 87.86 -pb_5c : 87.85 -pb_10c : 87.80 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.87 -pb_1c : 87.87 -pb_5c : 87.85 -pb_10c : 87.80 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.88 -pb_1c : 87.88 -pb_5c : 87.85 -pb_10c : 87.80 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.89 -pb_1c : 87.89 -pb_5c : 87.85 -pb_10c : 87.80 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.90 -pb_1c : 87.90 -pb_5c : 87.90 -pb_10c : 87.90 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.91 -pb_1c : 87.91 -pb_5c : 87.90 -pb_10c : 87.90 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.92 -pb_1c : 87.92 -pb_5c : 87.90 -pb_10c : 87.90 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.93 -pb_1c : 87.93 -pb_5c : 87.90 -pb_10c : 87.90 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.94 -pb_1c : 87.94 -pb_5c : 87.90 -pb_10c : 87.90 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.95 -pb_1c : 87.95 -pb_5c : 87.95 -pb_10c : 87.90 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.96 -pb_1c : 87.96 -pb_5c : 87.95 -pb_10c : 87.90 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.97 -pb_1c : 87.97 -pb_5c : 87.95 -pb_10c : 87.90 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.98 -pb_1c : 87.98 -pb_5c : 87.95 -pb_10c : 87.90 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -87.99 -pb_1c : 87.99 -pb_5c : 87.95 -pb_10c : 87.90 -pb_25c : 87.75 -pb_1d : 87.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.00 -pb_1c : 88.00 -pb_5c : 88.00 -pb_10c : 88.00 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.01 -pb_1c : 88.01 -pb_5c : 88.00 -pb_10c : 88.00 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.02 -pb_1c : 88.02 -pb_5c : 88.00 -pb_10c : 88.00 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.03 -pb_1c : 88.03 -pb_5c : 88.00 -pb_10c : 88.00 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.04 -pb_1c : 88.04 -pb_5c : 88.00 -pb_10c : 88.00 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.05 -pb_1c : 88.05 -pb_5c : 88.05 -pb_10c : 88.00 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.06 -pb_1c : 88.06 -pb_5c : 88.05 -pb_10c : 88.00 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.07 -pb_1c : 88.07 -pb_5c : 88.05 -pb_10c : 88.00 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.08 -pb_1c : 88.08 -pb_5c : 88.05 -pb_10c : 88.00 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.09 -pb_1c : 88.09 -pb_5c : 88.05 -pb_10c : 88.00 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.10 -pb_1c : 88.10 -pb_5c : 88.10 -pb_10c : 88.10 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.11 -pb_1c : 88.11 -pb_5c : 88.10 -pb_10c : 88.10 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.12 -pb_1c : 88.12 -pb_5c : 88.10 -pb_10c : 88.10 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.13 -pb_1c : 88.13 -pb_5c : 88.10 -pb_10c : 88.10 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.14 -pb_1c : 88.14 -pb_5c : 88.10 -pb_10c : 88.10 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.15 -pb_1c : 88.15 -pb_5c : 88.15 -pb_10c : 88.10 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.16 -pb_1c : 88.16 -pb_5c : 88.15 -pb_10c : 88.10 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.17 -pb_1c : 88.17 -pb_5c : 88.15 -pb_10c : 88.10 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.18 -pb_1c : 88.18 -pb_5c : 88.15 -pb_10c : 88.10 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.19 -pb_1c : 88.19 -pb_5c : 88.15 -pb_10c : 88.10 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.20 -pb_1c : 88.20 -pb_5c : 88.20 -pb_10c : 88.20 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.21 -pb_1c : 88.21 -pb_5c : 88.20 -pb_10c : 88.20 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.22 -pb_1c : 88.22 -pb_5c : 88.20 -pb_10c : 88.20 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.23 -pb_1c : 88.23 -pb_5c : 88.20 -pb_10c : 88.20 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.24 -pb_1c : 88.24 -pb_5c : 88.20 -pb_10c : 88.20 -pb_25c : 88.00 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.25 -pb_1c : 88.25 -pb_5c : 88.25 -pb_10c : 88.20 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.26 -pb_1c : 88.26 -pb_5c : 88.25 -pb_10c : 88.20 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.27 -pb_1c : 88.27 -pb_5c : 88.25 -pb_10c : 88.20 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.28 -pb_1c : 88.28 -pb_5c : 88.25 -pb_10c : 88.20 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.29 -pb_1c : 88.29 -pb_5c : 88.25 -pb_10c : 88.20 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.30 -pb_1c : 88.30 -pb_5c : 88.30 -pb_10c : 88.30 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.31 -pb_1c : 88.31 -pb_5c : 88.30 -pb_10c : 88.30 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.32 -pb_1c : 88.32 -pb_5c : 88.30 -pb_10c : 88.30 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.33 -pb_1c : 88.33 -pb_5c : 88.30 -pb_10c : 88.30 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.34 -pb_1c : 88.34 -pb_5c : 88.30 -pb_10c : 88.30 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.35 -pb_1c : 88.35 -pb_5c : 88.35 -pb_10c : 88.30 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.36 -pb_1c : 88.36 -pb_5c : 88.35 -pb_10c : 88.30 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.37 -pb_1c : 88.37 -pb_5c : 88.35 -pb_10c : 88.30 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.38 -pb_1c : 88.38 -pb_5c : 88.35 -pb_10c : 88.30 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.39 -pb_1c : 88.39 -pb_5c : 88.35 -pb_10c : 88.30 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.40 -pb_1c : 88.40 -pb_5c : 88.40 -pb_10c : 88.40 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.41 -pb_1c : 88.41 -pb_5c : 88.40 -pb_10c : 88.40 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.42 -pb_1c : 88.42 -pb_5c : 88.40 -pb_10c : 88.40 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.43 -pb_1c : 88.43 -pb_5c : 88.40 -pb_10c : 88.40 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.44 -pb_1c : 88.44 -pb_5c : 88.40 -pb_10c : 88.40 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.45 -pb_1c : 88.45 -pb_5c : 88.45 -pb_10c : 88.40 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.46 -pb_1c : 88.46 -pb_5c : 88.45 -pb_10c : 88.40 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.47 -pb_1c : 88.47 -pb_5c : 88.45 -pb_10c : 88.40 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.48 -pb_1c : 88.48 -pb_5c : 88.45 -pb_10c : 88.40 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.49 -pb_1c : 88.49 -pb_5c : 88.45 -pb_10c : 88.40 -pb_25c : 88.25 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.50 -pb_1c : 88.50 -pb_5c : 88.50 -pb_10c : 88.50 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.51 -pb_1c : 88.51 -pb_5c : 88.50 -pb_10c : 88.50 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.52 -pb_1c : 88.52 -pb_5c : 88.50 -pb_10c : 88.50 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.53 -pb_1c : 88.53 -pb_5c : 88.50 -pb_10c : 88.50 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.54 -pb_1c : 88.54 -pb_5c : 88.50 -pb_10c : 88.50 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.55 -pb_1c : 88.55 -pb_5c : 88.55 -pb_10c : 88.50 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.56 -pb_1c : 88.56 -pb_5c : 88.55 -pb_10c : 88.50 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.57 -pb_1c : 88.57 -pb_5c : 88.55 -pb_10c : 88.50 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.58 -pb_1c : 88.58 -pb_5c : 88.55 -pb_10c : 88.50 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.59 -pb_1c : 88.59 -pb_5c : 88.55 -pb_10c : 88.50 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.60 -pb_1c : 88.60 -pb_5c : 88.60 -pb_10c : 88.60 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.61 -pb_1c : 88.61 -pb_5c : 88.60 -pb_10c : 88.60 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.62 -pb_1c : 88.62 -pb_5c : 88.60 -pb_10c : 88.60 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.63 -pb_1c : 88.63 -pb_5c : 88.60 -pb_10c : 88.60 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.64 -pb_1c : 88.64 -pb_5c : 88.60 -pb_10c : 88.60 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.65 -pb_1c : 88.65 -pb_5c : 88.65 -pb_10c : 88.60 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.66 -pb_1c : 88.66 -pb_5c : 88.65 -pb_10c : 88.60 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.67 -pb_1c : 88.67 -pb_5c : 88.65 -pb_10c : 88.60 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.68 -pb_1c : 88.68 -pb_5c : 88.65 -pb_10c : 88.60 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.69 -pb_1c : 88.69 -pb_5c : 88.65 -pb_10c : 88.60 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.70 -pb_1c : 88.70 -pb_5c : 88.70 -pb_10c : 88.70 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.71 -pb_1c : 88.71 -pb_5c : 88.70 -pb_10c : 88.70 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.72 -pb_1c : 88.72 -pb_5c : 88.70 -pb_10c : 88.70 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.73 -pb_1c : 88.73 -pb_5c : 88.70 -pb_10c : 88.70 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.74 -pb_1c : 88.74 -pb_5c : 88.70 -pb_10c : 88.70 -pb_25c : 88.50 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.75 -pb_1c : 88.75 -pb_5c : 88.75 -pb_10c : 88.70 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.76 -pb_1c : 88.76 -pb_5c : 88.75 -pb_10c : 88.70 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.77 -pb_1c : 88.77 -pb_5c : 88.75 -pb_10c : 88.70 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.78 -pb_1c : 88.78 -pb_5c : 88.75 -pb_10c : 88.70 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.79 -pb_1c : 88.79 -pb_5c : 88.75 -pb_10c : 88.70 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.80 -pb_1c : 88.80 -pb_5c : 88.80 -pb_10c : 88.80 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.81 -pb_1c : 88.81 -pb_5c : 88.80 -pb_10c : 88.80 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.82 -pb_1c : 88.82 -pb_5c : 88.80 -pb_10c : 88.80 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.83 -pb_1c : 88.83 -pb_5c : 88.80 -pb_10c : 88.80 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.84 -pb_1c : 88.84 -pb_5c : 88.80 -pb_10c : 88.80 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.85 -pb_1c : 88.85 -pb_5c : 88.85 -pb_10c : 88.80 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.86 -pb_1c : 88.86 -pb_5c : 88.85 -pb_10c : 88.80 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.87 -pb_1c : 88.87 -pb_5c : 88.85 -pb_10c : 88.80 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.88 -pb_1c : 88.88 -pb_5c : 88.85 -pb_10c : 88.80 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.89 -pb_1c : 88.89 -pb_5c : 88.85 -pb_10c : 88.80 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.90 -pb_1c : 88.90 -pb_5c : 88.90 -pb_10c : 88.90 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.91 -pb_1c : 88.91 -pb_5c : 88.90 -pb_10c : 88.90 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.92 -pb_1c : 88.92 -pb_5c : 88.90 -pb_10c : 88.90 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.93 -pb_1c : 88.93 -pb_5c : 88.90 -pb_10c : 88.90 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.94 -pb_1c : 88.94 -pb_5c : 88.90 -pb_10c : 88.90 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.95 -pb_1c : 88.95 -pb_5c : 88.95 -pb_10c : 88.90 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.96 -pb_1c : 88.96 -pb_5c : 88.95 -pb_10c : 88.90 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.97 -pb_1c : 88.97 -pb_5c : 88.95 -pb_10c : 88.90 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.98 -pb_1c : 88.98 -pb_5c : 88.95 -pb_10c : 88.90 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -88.99 -pb_1c : 88.99 -pb_5c : 88.95 -pb_10c : 88.90 -pb_25c : 88.75 -pb_1d : 88.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.00 -pb_1c : 89.00 -pb_5c : 89.00 -pb_10c : 89.00 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.01 -pb_1c : 89.01 -pb_5c : 89.00 -pb_10c : 89.00 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.02 -pb_1c : 89.02 -pb_5c : 89.00 -pb_10c : 89.00 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.03 -pb_1c : 89.03 -pb_5c : 89.00 -pb_10c : 89.00 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.04 -pb_1c : 89.04 -pb_5c : 89.00 -pb_10c : 89.00 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.05 -pb_1c : 89.05 -pb_5c : 89.05 -pb_10c : 89.00 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.06 -pb_1c : 89.06 -pb_5c : 89.05 -pb_10c : 89.00 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.07 -pb_1c : 89.07 -pb_5c : 89.05 -pb_10c : 89.00 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.08 -pb_1c : 89.08 -pb_5c : 89.05 -pb_10c : 89.00 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.09 -pb_1c : 89.09 -pb_5c : 89.05 -pb_10c : 89.00 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.10 -pb_1c : 89.10 -pb_5c : 89.10 -pb_10c : 89.10 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.11 -pb_1c : 89.11 -pb_5c : 89.10 -pb_10c : 89.10 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.12 -pb_1c : 89.12 -pb_5c : 89.10 -pb_10c : 89.10 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.13 -pb_1c : 89.13 -pb_5c : 89.10 -pb_10c : 89.10 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.14 -pb_1c : 89.14 -pb_5c : 89.10 -pb_10c : 89.10 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.15 -pb_1c : 89.15 -pb_5c : 89.15 -pb_10c : 89.10 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.16 -pb_1c : 89.16 -pb_5c : 89.15 -pb_10c : 89.10 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.17 -pb_1c : 89.17 -pb_5c : 89.15 -pb_10c : 89.10 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.18 -pb_1c : 89.18 -pb_5c : 89.15 -pb_10c : 89.10 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.19 -pb_1c : 89.19 -pb_5c : 89.15 -pb_10c : 89.10 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.20 -pb_1c : 89.20 -pb_5c : 89.20 -pb_10c : 89.20 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.21 -pb_1c : 89.21 -pb_5c : 89.20 -pb_10c : 89.20 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.22 -pb_1c : 89.22 -pb_5c : 89.20 -pb_10c : 89.20 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.23 -pb_1c : 89.23 -pb_5c : 89.20 -pb_10c : 89.20 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.24 -pb_1c : 89.24 -pb_5c : 89.20 -pb_10c : 89.20 -pb_25c : 89.00 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.25 -pb_1c : 89.25 -pb_5c : 89.25 -pb_10c : 89.20 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.26 -pb_1c : 89.26 -pb_5c : 89.25 -pb_10c : 89.20 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.27 -pb_1c : 89.27 -pb_5c : 89.25 -pb_10c : 89.20 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.28 -pb_1c : 89.28 -pb_5c : 89.25 -pb_10c : 89.20 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.29 -pb_1c : 89.29 -pb_5c : 89.25 -pb_10c : 89.20 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.30 -pb_1c : 89.30 -pb_5c : 89.30 -pb_10c : 89.30 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.31 -pb_1c : 89.31 -pb_5c : 89.30 -pb_10c : 89.30 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.32 -pb_1c : 89.32 -pb_5c : 89.30 -pb_10c : 89.30 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.33 -pb_1c : 89.33 -pb_5c : 89.30 -pb_10c : 89.30 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.34 -pb_1c : 89.34 -pb_5c : 89.30 -pb_10c : 89.30 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.35 -pb_1c : 89.35 -pb_5c : 89.35 -pb_10c : 89.30 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.36 -pb_1c : 89.36 -pb_5c : 89.35 -pb_10c : 89.30 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.37 -pb_1c : 89.37 -pb_5c : 89.35 -pb_10c : 89.30 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.38 -pb_1c : 89.38 -pb_5c : 89.35 -pb_10c : 89.30 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.39 -pb_1c : 89.39 -pb_5c : 89.35 -pb_10c : 89.30 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.40 -pb_1c : 89.40 -pb_5c : 89.40 -pb_10c : 89.40 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.41 -pb_1c : 89.41 -pb_5c : 89.40 -pb_10c : 89.40 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.42 -pb_1c : 89.42 -pb_5c : 89.40 -pb_10c : 89.40 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.43 -pb_1c : 89.43 -pb_5c : 89.40 -pb_10c : 89.40 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.44 -pb_1c : 89.44 -pb_5c : 89.40 -pb_10c : 89.40 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.45 -pb_1c : 89.45 -pb_5c : 89.45 -pb_10c : 89.40 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.46 -pb_1c : 89.46 -pb_5c : 89.45 -pb_10c : 89.40 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.47 -pb_1c : 89.47 -pb_5c : 89.45 -pb_10c : 89.40 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.48 -pb_1c : 89.48 -pb_5c : 89.45 -pb_10c : 89.40 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.49 -pb_1c : 89.49 -pb_5c : 89.45 -pb_10c : 89.40 -pb_25c : 89.25 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.50 -pb_1c : 89.50 -pb_5c : 89.50 -pb_10c : 89.50 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.51 -pb_1c : 89.51 -pb_5c : 89.50 -pb_10c : 89.50 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.52 -pb_1c : 89.52 -pb_5c : 89.50 -pb_10c : 89.50 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.53 -pb_1c : 89.53 -pb_5c : 89.50 -pb_10c : 89.50 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.54 -pb_1c : 89.54 -pb_5c : 89.50 -pb_10c : 89.50 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.55 -pb_1c : 89.55 -pb_5c : 89.55 -pb_10c : 89.50 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.56 -pb_1c : 89.56 -pb_5c : 89.55 -pb_10c : 89.50 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.57 -pb_1c : 89.57 -pb_5c : 89.55 -pb_10c : 89.50 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.58 -pb_1c : 89.58 -pb_5c : 89.55 -pb_10c : 89.50 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.59 -pb_1c : 89.59 -pb_5c : 89.55 -pb_10c : 89.50 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.60 -pb_1c : 89.60 -pb_5c : 89.60 -pb_10c : 89.60 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.61 -pb_1c : 89.61 -pb_5c : 89.60 -pb_10c : 89.60 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.62 -pb_1c : 89.62 -pb_5c : 89.60 -pb_10c : 89.60 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.63 -pb_1c : 89.63 -pb_5c : 89.60 -pb_10c : 89.60 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.64 -pb_1c : 89.64 -pb_5c : 89.60 -pb_10c : 89.60 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.65 -pb_1c : 89.65 -pb_5c : 89.65 -pb_10c : 89.60 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.66 -pb_1c : 89.66 -pb_5c : 89.65 -pb_10c : 89.60 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.67 -pb_1c : 89.67 -pb_5c : 89.65 -pb_10c : 89.60 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.68 -pb_1c : 89.68 -pb_5c : 89.65 -pb_10c : 89.60 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.69 -pb_1c : 89.69 -pb_5c : 89.65 -pb_10c : 89.60 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.70 -pb_1c : 89.70 -pb_5c : 89.70 -pb_10c : 89.70 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.71 -pb_1c : 89.71 -pb_5c : 89.70 -pb_10c : 89.70 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.72 -pb_1c : 89.72 -pb_5c : 89.70 -pb_10c : 89.70 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.73 -pb_1c : 89.73 -pb_5c : 89.70 -pb_10c : 89.70 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.74 -pb_1c : 89.74 -pb_5c : 89.70 -pb_10c : 89.70 -pb_25c : 89.50 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.75 -pb_1c : 89.75 -pb_5c : 89.75 -pb_10c : 89.70 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.76 -pb_1c : 89.76 -pb_5c : 89.75 -pb_10c : 89.70 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.77 -pb_1c : 89.77 -pb_5c : 89.75 -pb_10c : 89.70 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.78 -pb_1c : 89.78 -pb_5c : 89.75 -pb_10c : 89.70 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.79 -pb_1c : 89.79 -pb_5c : 89.75 -pb_10c : 89.70 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.80 -pb_1c : 89.80 -pb_5c : 89.80 -pb_10c : 89.80 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.81 -pb_1c : 89.81 -pb_5c : 89.80 -pb_10c : 89.80 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.82 -pb_1c : 89.82 -pb_5c : 89.80 -pb_10c : 89.80 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.83 -pb_1c : 89.83 -pb_5c : 89.80 -pb_10c : 89.80 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.84 -pb_1c : 89.84 -pb_5c : 89.80 -pb_10c : 89.80 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.85 -pb_1c : 89.85 -pb_5c : 89.85 -pb_10c : 89.80 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.86 -pb_1c : 89.86 -pb_5c : 89.85 -pb_10c : 89.80 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.87 -pb_1c : 89.87 -pb_5c : 89.85 -pb_10c : 89.80 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.88 -pb_1c : 89.88 -pb_5c : 89.85 -pb_10c : 89.80 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.89 -pb_1c : 89.89 -pb_5c : 89.85 -pb_10c : 89.80 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.90 -pb_1c : 89.90 -pb_5c : 89.90 -pb_10c : 89.90 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.91 -pb_1c : 89.91 -pb_5c : 89.90 -pb_10c : 89.90 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.92 -pb_1c : 89.92 -pb_5c : 89.90 -pb_10c : 89.90 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.93 -pb_1c : 89.93 -pb_5c : 89.90 -pb_10c : 89.90 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.94 -pb_1c : 89.94 -pb_5c : 89.90 -pb_10c : 89.90 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.95 -pb_1c : 89.95 -pb_5c : 89.95 -pb_10c : 89.90 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.96 -pb_1c : 89.96 -pb_5c : 89.95 -pb_10c : 89.90 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.97 -pb_1c : 89.97 -pb_5c : 89.95 -pb_10c : 89.90 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.98 -pb_1c : 89.98 -pb_5c : 89.95 -pb_10c : 89.90 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -89.99 -pb_1c : 89.99 -pb_5c : 89.95 -pb_10c : 89.90 -pb_25c : 89.75 -pb_1d : 89.00 -pb_5d : 85.00 -pb_10d : 80.00 - -90.00 -pb_1c : 90.00 -pb_5c : 90.00 -pb_10c : 90.00 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.01 -pb_1c : 90.01 -pb_5c : 90.00 -pb_10c : 90.00 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.02 -pb_1c : 90.02 -pb_5c : 90.00 -pb_10c : 90.00 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.03 -pb_1c : 90.03 -pb_5c : 90.00 -pb_10c : 90.00 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.04 -pb_1c : 90.04 -pb_5c : 90.00 -pb_10c : 90.00 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.05 -pb_1c : 90.05 -pb_5c : 90.05 -pb_10c : 90.00 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.06 -pb_1c : 90.06 -pb_5c : 90.05 -pb_10c : 90.00 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.07 -pb_1c : 90.07 -pb_5c : 90.05 -pb_10c : 90.00 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.08 -pb_1c : 90.08 -pb_5c : 90.05 -pb_10c : 90.00 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.09 -pb_1c : 90.09 -pb_5c : 90.05 -pb_10c : 90.00 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.10 -pb_1c : 90.10 -pb_5c : 90.10 -pb_10c : 90.10 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.11 -pb_1c : 90.11 -pb_5c : 90.10 -pb_10c : 90.10 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.12 -pb_1c : 90.12 -pb_5c : 90.10 -pb_10c : 90.10 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.13 -pb_1c : 90.13 -pb_5c : 90.10 -pb_10c : 90.10 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.14 -pb_1c : 90.14 -pb_5c : 90.10 -pb_10c : 90.10 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.15 -pb_1c : 90.15 -pb_5c : 90.15 -pb_10c : 90.10 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.16 -pb_1c : 90.16 -pb_5c : 90.15 -pb_10c : 90.10 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.17 -pb_1c : 90.17 -pb_5c : 90.15 -pb_10c : 90.10 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.18 -pb_1c : 90.18 -pb_5c : 90.15 -pb_10c : 90.10 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.19 -pb_1c : 90.19 -pb_5c : 90.15 -pb_10c : 90.10 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.20 -pb_1c : 90.20 -pb_5c : 90.20 -pb_10c : 90.20 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.21 -pb_1c : 90.21 -pb_5c : 90.20 -pb_10c : 90.20 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.22 -pb_1c : 90.22 -pb_5c : 90.20 -pb_10c : 90.20 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.23 -pb_1c : 90.23 -pb_5c : 90.20 -pb_10c : 90.20 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.24 -pb_1c : 90.24 -pb_5c : 90.20 -pb_10c : 90.20 -pb_25c : 90.00 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.25 -pb_1c : 90.25 -pb_5c : 90.25 -pb_10c : 90.20 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.26 -pb_1c : 90.26 -pb_5c : 90.25 -pb_10c : 90.20 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.27 -pb_1c : 90.27 -pb_5c : 90.25 -pb_10c : 90.20 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.28 -pb_1c : 90.28 -pb_5c : 90.25 -pb_10c : 90.20 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.29 -pb_1c : 90.29 -pb_5c : 90.25 -pb_10c : 90.20 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.30 -pb_1c : 90.30 -pb_5c : 90.30 -pb_10c : 90.30 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.31 -pb_1c : 90.31 -pb_5c : 90.30 -pb_10c : 90.30 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.32 -pb_1c : 90.32 -pb_5c : 90.30 -pb_10c : 90.30 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.33 -pb_1c : 90.33 -pb_5c : 90.30 -pb_10c : 90.30 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.34 -pb_1c : 90.34 -pb_5c : 90.30 -pb_10c : 90.30 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.35 -pb_1c : 90.35 -pb_5c : 90.35 -pb_10c : 90.30 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.36 -pb_1c : 90.36 -pb_5c : 90.35 -pb_10c : 90.30 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.37 -pb_1c : 90.37 -pb_5c : 90.35 -pb_10c : 90.30 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.38 -pb_1c : 90.38 -pb_5c : 90.35 -pb_10c : 90.30 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.39 -pb_1c : 90.39 -pb_5c : 90.35 -pb_10c : 90.30 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.40 -pb_1c : 90.40 -pb_5c : 90.40 -pb_10c : 90.40 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.41 -pb_1c : 90.41 -pb_5c : 90.40 -pb_10c : 90.40 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.42 -pb_1c : 90.42 -pb_5c : 90.40 -pb_10c : 90.40 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.43 -pb_1c : 90.43 -pb_5c : 90.40 -pb_10c : 90.40 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.44 -pb_1c : 90.44 -pb_5c : 90.40 -pb_10c : 90.40 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.45 -pb_1c : 90.45 -pb_5c : 90.45 -pb_10c : 90.40 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.46 -pb_1c : 90.46 -pb_5c : 90.45 -pb_10c : 90.40 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.47 -pb_1c : 90.47 -pb_5c : 90.45 -pb_10c : 90.40 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.48 -pb_1c : 90.48 -pb_5c : 90.45 -pb_10c : 90.40 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.49 -pb_1c : 90.49 -pb_5c : 90.45 -pb_10c : 90.40 -pb_25c : 90.25 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.50 -pb_1c : 90.50 -pb_5c : 90.50 -pb_10c : 90.50 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.51 -pb_1c : 90.51 -pb_5c : 90.50 -pb_10c : 90.50 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.52 -pb_1c : 90.52 -pb_5c : 90.50 -pb_10c : 90.50 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.53 -pb_1c : 90.53 -pb_5c : 90.50 -pb_10c : 90.50 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.54 -pb_1c : 90.54 -pb_5c : 90.50 -pb_10c : 90.50 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.55 -pb_1c : 90.55 -pb_5c : 90.55 -pb_10c : 90.50 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.56 -pb_1c : 90.56 -pb_5c : 90.55 -pb_10c : 90.50 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.57 -pb_1c : 90.57 -pb_5c : 90.55 -pb_10c : 90.50 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.58 -pb_1c : 90.58 -pb_5c : 90.55 -pb_10c : 90.50 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.59 -pb_1c : 90.59 -pb_5c : 90.55 -pb_10c : 90.50 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.60 -pb_1c : 90.60 -pb_5c : 90.60 -pb_10c : 90.60 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.61 -pb_1c : 90.61 -pb_5c : 90.60 -pb_10c : 90.60 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.62 -pb_1c : 90.62 -pb_5c : 90.60 -pb_10c : 90.60 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.63 -pb_1c : 90.63 -pb_5c : 90.60 -pb_10c : 90.60 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.64 -pb_1c : 90.64 -pb_5c : 90.60 -pb_10c : 90.60 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.65 -pb_1c : 90.65 -pb_5c : 90.65 -pb_10c : 90.60 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.66 -pb_1c : 90.66 -pb_5c : 90.65 -pb_10c : 90.60 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.67 -pb_1c : 90.67 -pb_5c : 90.65 -pb_10c : 90.60 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.68 -pb_1c : 90.68 -pb_5c : 90.65 -pb_10c : 90.60 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.69 -pb_1c : 90.69 -pb_5c : 90.65 -pb_10c : 90.60 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.70 -pb_1c : 90.70 -pb_5c : 90.70 -pb_10c : 90.70 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.71 -pb_1c : 90.71 -pb_5c : 90.70 -pb_10c : 90.70 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.72 -pb_1c : 90.72 -pb_5c : 90.70 -pb_10c : 90.70 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.73 -pb_1c : 90.73 -pb_5c : 90.70 -pb_10c : 90.70 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.74 -pb_1c : 90.74 -pb_5c : 90.70 -pb_10c : 90.70 -pb_25c : 90.50 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.75 -pb_1c : 90.75 -pb_5c : 90.75 -pb_10c : 90.70 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.76 -pb_1c : 90.76 -pb_5c : 90.75 -pb_10c : 90.70 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.77 -pb_1c : 90.77 -pb_5c : 90.75 -pb_10c : 90.70 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.78 -pb_1c : 90.78 -pb_5c : 90.75 -pb_10c : 90.70 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.79 -pb_1c : 90.79 -pb_5c : 90.75 -pb_10c : 90.70 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.80 -pb_1c : 90.80 -pb_5c : 90.80 -pb_10c : 90.80 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.81 -pb_1c : 90.81 -pb_5c : 90.80 -pb_10c : 90.80 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.82 -pb_1c : 90.82 -pb_5c : 90.80 -pb_10c : 90.80 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.83 -pb_1c : 90.83 -pb_5c : 90.80 -pb_10c : 90.80 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.84 -pb_1c : 90.84 -pb_5c : 90.80 -pb_10c : 90.80 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.85 -pb_1c : 90.85 -pb_5c : 90.85 -pb_10c : 90.80 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.86 -pb_1c : 90.86 -pb_5c : 90.85 -pb_10c : 90.80 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.87 -pb_1c : 90.87 -pb_5c : 90.85 -pb_10c : 90.80 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.88 -pb_1c : 90.88 -pb_5c : 90.85 -pb_10c : 90.80 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.89 -pb_1c : 90.89 -pb_5c : 90.85 -pb_10c : 90.80 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.90 -pb_1c : 90.90 -pb_5c : 90.90 -pb_10c : 90.90 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.91 -pb_1c : 90.91 -pb_5c : 90.90 -pb_10c : 90.90 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.92 -pb_1c : 90.92 -pb_5c : 90.90 -pb_10c : 90.90 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.93 -pb_1c : 90.93 -pb_5c : 90.90 -pb_10c : 90.90 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.94 -pb_1c : 90.94 -pb_5c : 90.90 -pb_10c : 90.90 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.95 -pb_1c : 90.95 -pb_5c : 90.95 -pb_10c : 90.90 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.96 -pb_1c : 90.96 -pb_5c : 90.95 -pb_10c : 90.90 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.97 -pb_1c : 90.97 -pb_5c : 90.95 -pb_10c : 90.90 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.98 -pb_1c : 90.98 -pb_5c : 90.95 -pb_10c : 90.90 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -90.99 -pb_1c : 90.99 -pb_5c : 90.95 -pb_10c : 90.90 -pb_25c : 90.75 -pb_1d : 90.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.00 -pb_1c : 91.00 -pb_5c : 91.00 -pb_10c : 91.00 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.01 -pb_1c : 91.01 -pb_5c : 91.00 -pb_10c : 91.00 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.02 -pb_1c : 91.02 -pb_5c : 91.00 -pb_10c : 91.00 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.03 -pb_1c : 91.03 -pb_5c : 91.00 -pb_10c : 91.00 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.04 -pb_1c : 91.04 -pb_5c : 91.00 -pb_10c : 91.00 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.05 -pb_1c : 91.05 -pb_5c : 91.05 -pb_10c : 91.00 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.06 -pb_1c : 91.06 -pb_5c : 91.05 -pb_10c : 91.00 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.07 -pb_1c : 91.07 -pb_5c : 91.05 -pb_10c : 91.00 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.08 -pb_1c : 91.08 -pb_5c : 91.05 -pb_10c : 91.00 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.09 -pb_1c : 91.09 -pb_5c : 91.05 -pb_10c : 91.00 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.10 -pb_1c : 91.10 -pb_5c : 91.10 -pb_10c : 91.10 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.11 -pb_1c : 91.11 -pb_5c : 91.10 -pb_10c : 91.10 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.12 -pb_1c : 91.12 -pb_5c : 91.10 -pb_10c : 91.10 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.13 -pb_1c : 91.13 -pb_5c : 91.10 -pb_10c : 91.10 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.14 -pb_1c : 91.14 -pb_5c : 91.10 -pb_10c : 91.10 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.15 -pb_1c : 91.15 -pb_5c : 91.15 -pb_10c : 91.10 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.16 -pb_1c : 91.16 -pb_5c : 91.15 -pb_10c : 91.10 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.17 -pb_1c : 91.17 -pb_5c : 91.15 -pb_10c : 91.10 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.18 -pb_1c : 91.18 -pb_5c : 91.15 -pb_10c : 91.10 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.19 -pb_1c : 91.19 -pb_5c : 91.15 -pb_10c : 91.10 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.20 -pb_1c : 91.20 -pb_5c : 91.20 -pb_10c : 91.20 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.21 -pb_1c : 91.21 -pb_5c : 91.20 -pb_10c : 91.20 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.22 -pb_1c : 91.22 -pb_5c : 91.20 -pb_10c : 91.20 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.23 -pb_1c : 91.23 -pb_5c : 91.20 -pb_10c : 91.20 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.24 -pb_1c : 91.24 -pb_5c : 91.20 -pb_10c : 91.20 -pb_25c : 91.00 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.25 -pb_1c : 91.25 -pb_5c : 91.25 -pb_10c : 91.20 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.26 -pb_1c : 91.26 -pb_5c : 91.25 -pb_10c : 91.20 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.27 -pb_1c : 91.27 -pb_5c : 91.25 -pb_10c : 91.20 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.28 -pb_1c : 91.28 -pb_5c : 91.25 -pb_10c : 91.20 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.29 -pb_1c : 91.29 -pb_5c : 91.25 -pb_10c : 91.20 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.30 -pb_1c : 91.30 -pb_5c : 91.30 -pb_10c : 91.30 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.31 -pb_1c : 91.31 -pb_5c : 91.30 -pb_10c : 91.30 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.32 -pb_1c : 91.32 -pb_5c : 91.30 -pb_10c : 91.30 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.33 -pb_1c : 91.33 -pb_5c : 91.30 -pb_10c : 91.30 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.34 -pb_1c : 91.34 -pb_5c : 91.30 -pb_10c : 91.30 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.35 -pb_1c : 91.35 -pb_5c : 91.35 -pb_10c : 91.30 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.36 -pb_1c : 91.36 -pb_5c : 91.35 -pb_10c : 91.30 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.37 -pb_1c : 91.37 -pb_5c : 91.35 -pb_10c : 91.30 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.38 -pb_1c : 91.38 -pb_5c : 91.35 -pb_10c : 91.30 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.39 -pb_1c : 91.39 -pb_5c : 91.35 -pb_10c : 91.30 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.40 -pb_1c : 91.40 -pb_5c : 91.40 -pb_10c : 91.40 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.41 -pb_1c : 91.41 -pb_5c : 91.40 -pb_10c : 91.40 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.42 -pb_1c : 91.42 -pb_5c : 91.40 -pb_10c : 91.40 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.43 -pb_1c : 91.43 -pb_5c : 91.40 -pb_10c : 91.40 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.44 -pb_1c : 91.44 -pb_5c : 91.40 -pb_10c : 91.40 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.45 -pb_1c : 91.45 -pb_5c : 91.45 -pb_10c : 91.40 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.46 -pb_1c : 91.46 -pb_5c : 91.45 -pb_10c : 91.40 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.47 -pb_1c : 91.47 -pb_5c : 91.45 -pb_10c : 91.40 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.48 -pb_1c : 91.48 -pb_5c : 91.45 -pb_10c : 91.40 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.49 -pb_1c : 91.49 -pb_5c : 91.45 -pb_10c : 91.40 -pb_25c : 91.25 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.50 -pb_1c : 91.50 -pb_5c : 91.50 -pb_10c : 91.50 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.51 -pb_1c : 91.51 -pb_5c : 91.50 -pb_10c : 91.50 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.52 -pb_1c : 91.52 -pb_5c : 91.50 -pb_10c : 91.50 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.53 -pb_1c : 91.53 -pb_5c : 91.50 -pb_10c : 91.50 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.54 -pb_1c : 91.54 -pb_5c : 91.50 -pb_10c : 91.50 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.55 -pb_1c : 91.55 -pb_5c : 91.55 -pb_10c : 91.50 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.56 -pb_1c : 91.56 -pb_5c : 91.55 -pb_10c : 91.50 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.57 -pb_1c : 91.57 -pb_5c : 91.55 -pb_10c : 91.50 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.58 -pb_1c : 91.58 -pb_5c : 91.55 -pb_10c : 91.50 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.59 -pb_1c : 91.59 -pb_5c : 91.55 -pb_10c : 91.50 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.60 -pb_1c : 91.60 -pb_5c : 91.60 -pb_10c : 91.60 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.61 -pb_1c : 91.61 -pb_5c : 91.60 -pb_10c : 91.60 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.62 -pb_1c : 91.62 -pb_5c : 91.60 -pb_10c : 91.60 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.63 -pb_1c : 91.63 -pb_5c : 91.60 -pb_10c : 91.60 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.64 -pb_1c : 91.64 -pb_5c : 91.60 -pb_10c : 91.60 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.65 -pb_1c : 91.65 -pb_5c : 91.65 -pb_10c : 91.60 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.66 -pb_1c : 91.66 -pb_5c : 91.65 -pb_10c : 91.60 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.67 -pb_1c : 91.67 -pb_5c : 91.65 -pb_10c : 91.60 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.68 -pb_1c : 91.68 -pb_5c : 91.65 -pb_10c : 91.60 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.69 -pb_1c : 91.69 -pb_5c : 91.65 -pb_10c : 91.60 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.70 -pb_1c : 91.70 -pb_5c : 91.70 -pb_10c : 91.70 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.71 -pb_1c : 91.71 -pb_5c : 91.70 -pb_10c : 91.70 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.72 -pb_1c : 91.72 -pb_5c : 91.70 -pb_10c : 91.70 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.73 -pb_1c : 91.73 -pb_5c : 91.70 -pb_10c : 91.70 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.74 -pb_1c : 91.74 -pb_5c : 91.70 -pb_10c : 91.70 -pb_25c : 91.50 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.75 -pb_1c : 91.75 -pb_5c : 91.75 -pb_10c : 91.70 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.76 -pb_1c : 91.76 -pb_5c : 91.75 -pb_10c : 91.70 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.77 -pb_1c : 91.77 -pb_5c : 91.75 -pb_10c : 91.70 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.78 -pb_1c : 91.78 -pb_5c : 91.75 -pb_10c : 91.70 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.79 -pb_1c : 91.79 -pb_5c : 91.75 -pb_10c : 91.70 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.80 -pb_1c : 91.80 -pb_5c : 91.80 -pb_10c : 91.80 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.81 -pb_1c : 91.81 -pb_5c : 91.80 -pb_10c : 91.80 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.82 -pb_1c : 91.82 -pb_5c : 91.80 -pb_10c : 91.80 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.83 -pb_1c : 91.83 -pb_5c : 91.80 -pb_10c : 91.80 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.84 -pb_1c : 91.84 -pb_5c : 91.80 -pb_10c : 91.80 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.85 -pb_1c : 91.85 -pb_5c : 91.85 -pb_10c : 91.80 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.86 -pb_1c : 91.86 -pb_5c : 91.85 -pb_10c : 91.80 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.87 -pb_1c : 91.87 -pb_5c : 91.85 -pb_10c : 91.80 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.88 -pb_1c : 91.88 -pb_5c : 91.85 -pb_10c : 91.80 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.89 -pb_1c : 91.89 -pb_5c : 91.85 -pb_10c : 91.80 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.90 -pb_1c : 91.90 -pb_5c : 91.90 -pb_10c : 91.90 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.91 -pb_1c : 91.91 -pb_5c : 91.90 -pb_10c : 91.90 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.92 -pb_1c : 91.92 -pb_5c : 91.90 -pb_10c : 91.90 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.93 -pb_1c : 91.93 -pb_5c : 91.90 -pb_10c : 91.90 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.94 -pb_1c : 91.94 -pb_5c : 91.90 -pb_10c : 91.90 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.95 -pb_1c : 91.95 -pb_5c : 91.95 -pb_10c : 91.90 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.96 -pb_1c : 91.96 -pb_5c : 91.95 -pb_10c : 91.90 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.97 -pb_1c : 91.97 -pb_5c : 91.95 -pb_10c : 91.90 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.98 -pb_1c : 91.98 -pb_5c : 91.95 -pb_10c : 91.90 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -91.99 -pb_1c : 91.99 -pb_5c : 91.95 -pb_10c : 91.90 -pb_25c : 91.75 -pb_1d : 91.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.00 -pb_1c : 92.00 -pb_5c : 92.00 -pb_10c : 92.00 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.01 -pb_1c : 92.01 -pb_5c : 92.00 -pb_10c : 92.00 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.02 -pb_1c : 92.02 -pb_5c : 92.00 -pb_10c : 92.00 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.03 -pb_1c : 92.03 -pb_5c : 92.00 -pb_10c : 92.00 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.04 -pb_1c : 92.04 -pb_5c : 92.00 -pb_10c : 92.00 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.05 -pb_1c : 92.05 -pb_5c : 92.05 -pb_10c : 92.00 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.06 -pb_1c : 92.06 -pb_5c : 92.05 -pb_10c : 92.00 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.07 -pb_1c : 92.07 -pb_5c : 92.05 -pb_10c : 92.00 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.08 -pb_1c : 92.08 -pb_5c : 92.05 -pb_10c : 92.00 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.09 -pb_1c : 92.09 -pb_5c : 92.05 -pb_10c : 92.00 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.10 -pb_1c : 92.10 -pb_5c : 92.10 -pb_10c : 92.10 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.11 -pb_1c : 92.11 -pb_5c : 92.10 -pb_10c : 92.10 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.12 -pb_1c : 92.12 -pb_5c : 92.10 -pb_10c : 92.10 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.13 -pb_1c : 92.13 -pb_5c : 92.10 -pb_10c : 92.10 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.14 -pb_1c : 92.14 -pb_5c : 92.10 -pb_10c : 92.10 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.15 -pb_1c : 92.15 -pb_5c : 92.15 -pb_10c : 92.10 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.16 -pb_1c : 92.16 -pb_5c : 92.15 -pb_10c : 92.10 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.17 -pb_1c : 92.17 -pb_5c : 92.15 -pb_10c : 92.10 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.18 -pb_1c : 92.18 -pb_5c : 92.15 -pb_10c : 92.10 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.19 -pb_1c : 92.19 -pb_5c : 92.15 -pb_10c : 92.10 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.20 -pb_1c : 92.20 -pb_5c : 92.20 -pb_10c : 92.20 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.21 -pb_1c : 92.21 -pb_5c : 92.20 -pb_10c : 92.20 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.22 -pb_1c : 92.22 -pb_5c : 92.20 -pb_10c : 92.20 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.23 -pb_1c : 92.23 -pb_5c : 92.20 -pb_10c : 92.20 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.24 -pb_1c : 92.24 -pb_5c : 92.20 -pb_10c : 92.20 -pb_25c : 92.00 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.25 -pb_1c : 92.25 -pb_5c : 92.25 -pb_10c : 92.20 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.26 -pb_1c : 92.26 -pb_5c : 92.25 -pb_10c : 92.20 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.27 -pb_1c : 92.27 -pb_5c : 92.25 -pb_10c : 92.20 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.28 -pb_1c : 92.28 -pb_5c : 92.25 -pb_10c : 92.20 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.29 -pb_1c : 92.29 -pb_5c : 92.25 -pb_10c : 92.20 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.30 -pb_1c : 92.30 -pb_5c : 92.30 -pb_10c : 92.30 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.31 -pb_1c : 92.31 -pb_5c : 92.30 -pb_10c : 92.30 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.32 -pb_1c : 92.32 -pb_5c : 92.30 -pb_10c : 92.30 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.33 -pb_1c : 92.33 -pb_5c : 92.30 -pb_10c : 92.30 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.34 -pb_1c : 92.34 -pb_5c : 92.30 -pb_10c : 92.30 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.35 -pb_1c : 92.35 -pb_5c : 92.35 -pb_10c : 92.30 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.36 -pb_1c : 92.36 -pb_5c : 92.35 -pb_10c : 92.30 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.37 -pb_1c : 92.37 -pb_5c : 92.35 -pb_10c : 92.30 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.38 -pb_1c : 92.38 -pb_5c : 92.35 -pb_10c : 92.30 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.39 -pb_1c : 92.39 -pb_5c : 92.35 -pb_10c : 92.30 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.40 -pb_1c : 92.40 -pb_5c : 92.40 -pb_10c : 92.40 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.41 -pb_1c : 92.41 -pb_5c : 92.40 -pb_10c : 92.40 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.42 -pb_1c : 92.42 -pb_5c : 92.40 -pb_10c : 92.40 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.43 -pb_1c : 92.43 -pb_5c : 92.40 -pb_10c : 92.40 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.44 -pb_1c : 92.44 -pb_5c : 92.40 -pb_10c : 92.40 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.45 -pb_1c : 92.45 -pb_5c : 92.45 -pb_10c : 92.40 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.46 -pb_1c : 92.46 -pb_5c : 92.45 -pb_10c : 92.40 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.47 -pb_1c : 92.47 -pb_5c : 92.45 -pb_10c : 92.40 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.48 -pb_1c : 92.48 -pb_5c : 92.45 -pb_10c : 92.40 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.49 -pb_1c : 92.49 -pb_5c : 92.45 -pb_10c : 92.40 -pb_25c : 92.25 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.50 -pb_1c : 92.50 -pb_5c : 92.50 -pb_10c : 92.50 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.51 -pb_1c : 92.51 -pb_5c : 92.50 -pb_10c : 92.50 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.52 -pb_1c : 92.52 -pb_5c : 92.50 -pb_10c : 92.50 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.53 -pb_1c : 92.53 -pb_5c : 92.50 -pb_10c : 92.50 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.54 -pb_1c : 92.54 -pb_5c : 92.50 -pb_10c : 92.50 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.55 -pb_1c : 92.55 -pb_5c : 92.55 -pb_10c : 92.50 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.56 -pb_1c : 92.56 -pb_5c : 92.55 -pb_10c : 92.50 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.57 -pb_1c : 92.57 -pb_5c : 92.55 -pb_10c : 92.50 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.58 -pb_1c : 92.58 -pb_5c : 92.55 -pb_10c : 92.50 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.59 -pb_1c : 92.59 -pb_5c : 92.55 -pb_10c : 92.50 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.60 -pb_1c : 92.60 -pb_5c : 92.60 -pb_10c : 92.60 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.61 -pb_1c : 92.61 -pb_5c : 92.60 -pb_10c : 92.60 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.62 -pb_1c : 92.62 -pb_5c : 92.60 -pb_10c : 92.60 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.63 -pb_1c : 92.63 -pb_5c : 92.60 -pb_10c : 92.60 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.64 -pb_1c : 92.64 -pb_5c : 92.60 -pb_10c : 92.60 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.65 -pb_1c : 92.65 -pb_5c : 92.65 -pb_10c : 92.60 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.66 -pb_1c : 92.66 -pb_5c : 92.65 -pb_10c : 92.60 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.67 -pb_1c : 92.67 -pb_5c : 92.65 -pb_10c : 92.60 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.68 -pb_1c : 92.68 -pb_5c : 92.65 -pb_10c : 92.60 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.69 -pb_1c : 92.69 -pb_5c : 92.65 -pb_10c : 92.60 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.70 -pb_1c : 92.70 -pb_5c : 92.70 -pb_10c : 92.70 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.71 -pb_1c : 92.71 -pb_5c : 92.70 -pb_10c : 92.70 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.72 -pb_1c : 92.72 -pb_5c : 92.70 -pb_10c : 92.70 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.73 -pb_1c : 92.73 -pb_5c : 92.70 -pb_10c : 92.70 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.74 -pb_1c : 92.74 -pb_5c : 92.70 -pb_10c : 92.70 -pb_25c : 92.50 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.75 -pb_1c : 92.75 -pb_5c : 92.75 -pb_10c : 92.70 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.76 -pb_1c : 92.76 -pb_5c : 92.75 -pb_10c : 92.70 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.77 -pb_1c : 92.77 -pb_5c : 92.75 -pb_10c : 92.70 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.78 -pb_1c : 92.78 -pb_5c : 92.75 -pb_10c : 92.70 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.79 -pb_1c : 92.79 -pb_5c : 92.75 -pb_10c : 92.70 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.80 -pb_1c : 92.80 -pb_5c : 92.80 -pb_10c : 92.80 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.81 -pb_1c : 92.81 -pb_5c : 92.80 -pb_10c : 92.80 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.82 -pb_1c : 92.82 -pb_5c : 92.80 -pb_10c : 92.80 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.83 -pb_1c : 92.83 -pb_5c : 92.80 -pb_10c : 92.80 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.84 -pb_1c : 92.84 -pb_5c : 92.80 -pb_10c : 92.80 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.85 -pb_1c : 92.85 -pb_5c : 92.85 -pb_10c : 92.80 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.86 -pb_1c : 92.86 -pb_5c : 92.85 -pb_10c : 92.80 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.87 -pb_1c : 92.87 -pb_5c : 92.85 -pb_10c : 92.80 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.88 -pb_1c : 92.88 -pb_5c : 92.85 -pb_10c : 92.80 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.89 -pb_1c : 92.89 -pb_5c : 92.85 -pb_10c : 92.80 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.90 -pb_1c : 92.90 -pb_5c : 92.90 -pb_10c : 92.90 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.91 -pb_1c : 92.91 -pb_5c : 92.90 -pb_10c : 92.90 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.92 -pb_1c : 92.92 -pb_5c : 92.90 -pb_10c : 92.90 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.93 -pb_1c : 92.93 -pb_5c : 92.90 -pb_10c : 92.90 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.94 -pb_1c : 92.94 -pb_5c : 92.90 -pb_10c : 92.90 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.95 -pb_1c : 92.95 -pb_5c : 92.95 -pb_10c : 92.90 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.96 -pb_1c : 92.96 -pb_5c : 92.95 -pb_10c : 92.90 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.97 -pb_1c : 92.97 -pb_5c : 92.95 -pb_10c : 92.90 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.98 -pb_1c : 92.98 -pb_5c : 92.95 -pb_10c : 92.90 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -92.99 -pb_1c : 92.99 -pb_5c : 92.95 -pb_10c : 92.90 -pb_25c : 92.75 -pb_1d : 92.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.00 -pb_1c : 93.00 -pb_5c : 93.00 -pb_10c : 93.00 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.01 -pb_1c : 93.01 -pb_5c : 93.00 -pb_10c : 93.00 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.02 -pb_1c : 93.02 -pb_5c : 93.00 -pb_10c : 93.00 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.03 -pb_1c : 93.03 -pb_5c : 93.00 -pb_10c : 93.00 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.04 -pb_1c : 93.04 -pb_5c : 93.00 -pb_10c : 93.00 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.05 -pb_1c : 93.05 -pb_5c : 93.05 -pb_10c : 93.00 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.06 -pb_1c : 93.06 -pb_5c : 93.05 -pb_10c : 93.00 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.07 -pb_1c : 93.07 -pb_5c : 93.05 -pb_10c : 93.00 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.08 -pb_1c : 93.08 -pb_5c : 93.05 -pb_10c : 93.00 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.09 -pb_1c : 93.09 -pb_5c : 93.05 -pb_10c : 93.00 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.10 -pb_1c : 93.10 -pb_5c : 93.10 -pb_10c : 93.10 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.11 -pb_1c : 93.11 -pb_5c : 93.10 -pb_10c : 93.10 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.12 -pb_1c : 93.12 -pb_5c : 93.10 -pb_10c : 93.10 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.13 -pb_1c : 93.13 -pb_5c : 93.10 -pb_10c : 93.10 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.14 -pb_1c : 93.14 -pb_5c : 93.10 -pb_10c : 93.10 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.15 -pb_1c : 93.15 -pb_5c : 93.15 -pb_10c : 93.10 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.16 -pb_1c : 93.16 -pb_5c : 93.15 -pb_10c : 93.10 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.17 -pb_1c : 93.17 -pb_5c : 93.15 -pb_10c : 93.10 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.18 -pb_1c : 93.18 -pb_5c : 93.15 -pb_10c : 93.10 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.19 -pb_1c : 93.19 -pb_5c : 93.15 -pb_10c : 93.10 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.20 -pb_1c : 93.20 -pb_5c : 93.20 -pb_10c : 93.20 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.21 -pb_1c : 93.21 -pb_5c : 93.20 -pb_10c : 93.20 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.22 -pb_1c : 93.22 -pb_5c : 93.20 -pb_10c : 93.20 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.23 -pb_1c : 93.23 -pb_5c : 93.20 -pb_10c : 93.20 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.24 -pb_1c : 93.24 -pb_5c : 93.20 -pb_10c : 93.20 -pb_25c : 93.00 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.25 -pb_1c : 93.25 -pb_5c : 93.25 -pb_10c : 93.20 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.26 -pb_1c : 93.26 -pb_5c : 93.25 -pb_10c : 93.20 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.27 -pb_1c : 93.27 -pb_5c : 93.25 -pb_10c : 93.20 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.28 -pb_1c : 93.28 -pb_5c : 93.25 -pb_10c : 93.20 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.29 -pb_1c : 93.29 -pb_5c : 93.25 -pb_10c : 93.20 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.30 -pb_1c : 93.30 -pb_5c : 93.30 -pb_10c : 93.30 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.31 -pb_1c : 93.31 -pb_5c : 93.30 -pb_10c : 93.30 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.32 -pb_1c : 93.32 -pb_5c : 93.30 -pb_10c : 93.30 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.33 -pb_1c : 93.33 -pb_5c : 93.30 -pb_10c : 93.30 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.34 -pb_1c : 93.34 -pb_5c : 93.30 -pb_10c : 93.30 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.35 -pb_1c : 93.35 -pb_5c : 93.35 -pb_10c : 93.30 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.36 -pb_1c : 93.36 -pb_5c : 93.35 -pb_10c : 93.30 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.37 -pb_1c : 93.37 -pb_5c : 93.35 -pb_10c : 93.30 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.38 -pb_1c : 93.38 -pb_5c : 93.35 -pb_10c : 93.30 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.39 -pb_1c : 93.39 -pb_5c : 93.35 -pb_10c : 93.30 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.40 -pb_1c : 93.40 -pb_5c : 93.40 -pb_10c : 93.40 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.41 -pb_1c : 93.41 -pb_5c : 93.40 -pb_10c : 93.40 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.42 -pb_1c : 93.42 -pb_5c : 93.40 -pb_10c : 93.40 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.43 -pb_1c : 93.43 -pb_5c : 93.40 -pb_10c : 93.40 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.44 -pb_1c : 93.44 -pb_5c : 93.40 -pb_10c : 93.40 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.45 -pb_1c : 93.45 -pb_5c : 93.45 -pb_10c : 93.40 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.46 -pb_1c : 93.46 -pb_5c : 93.45 -pb_10c : 93.40 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.47 -pb_1c : 93.47 -pb_5c : 93.45 -pb_10c : 93.40 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.48 -pb_1c : 93.48 -pb_5c : 93.45 -pb_10c : 93.40 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.49 -pb_1c : 93.49 -pb_5c : 93.45 -pb_10c : 93.40 -pb_25c : 93.25 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.50 -pb_1c : 93.50 -pb_5c : 93.50 -pb_10c : 93.50 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.51 -pb_1c : 93.51 -pb_5c : 93.50 -pb_10c : 93.50 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.52 -pb_1c : 93.52 -pb_5c : 93.50 -pb_10c : 93.50 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.53 -pb_1c : 93.53 -pb_5c : 93.50 -pb_10c : 93.50 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.54 -pb_1c : 93.54 -pb_5c : 93.50 -pb_10c : 93.50 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.55 -pb_1c : 93.55 -pb_5c : 93.55 -pb_10c : 93.50 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.56 -pb_1c : 93.56 -pb_5c : 93.55 -pb_10c : 93.50 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.57 -pb_1c : 93.57 -pb_5c : 93.55 -pb_10c : 93.50 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.58 -pb_1c : 93.58 -pb_5c : 93.55 -pb_10c : 93.50 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.59 -pb_1c : 93.59 -pb_5c : 93.55 -pb_10c : 93.50 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.60 -pb_1c : 93.60 -pb_5c : 93.60 -pb_10c : 93.60 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.61 -pb_1c : 93.61 -pb_5c : 93.60 -pb_10c : 93.60 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.62 -pb_1c : 93.62 -pb_5c : 93.60 -pb_10c : 93.60 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.63 -pb_1c : 93.63 -pb_5c : 93.60 -pb_10c : 93.60 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.64 -pb_1c : 93.64 -pb_5c : 93.60 -pb_10c : 93.60 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.65 -pb_1c : 93.65 -pb_5c : 93.65 -pb_10c : 93.60 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.66 -pb_1c : 93.66 -pb_5c : 93.65 -pb_10c : 93.60 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.67 -pb_1c : 93.67 -pb_5c : 93.65 -pb_10c : 93.60 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.68 -pb_1c : 93.68 -pb_5c : 93.65 -pb_10c : 93.60 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.69 -pb_1c : 93.69 -pb_5c : 93.65 -pb_10c : 93.60 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.70 -pb_1c : 93.70 -pb_5c : 93.70 -pb_10c : 93.70 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.71 -pb_1c : 93.71 -pb_5c : 93.70 -pb_10c : 93.70 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.72 -pb_1c : 93.72 -pb_5c : 93.70 -pb_10c : 93.70 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.73 -pb_1c : 93.73 -pb_5c : 93.70 -pb_10c : 93.70 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.74 -pb_1c : 93.74 -pb_5c : 93.70 -pb_10c : 93.70 -pb_25c : 93.50 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.75 -pb_1c : 93.75 -pb_5c : 93.75 -pb_10c : 93.70 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.76 -pb_1c : 93.76 -pb_5c : 93.75 -pb_10c : 93.70 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.77 -pb_1c : 93.77 -pb_5c : 93.75 -pb_10c : 93.70 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.78 -pb_1c : 93.78 -pb_5c : 93.75 -pb_10c : 93.70 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.79 -pb_1c : 93.79 -pb_5c : 93.75 -pb_10c : 93.70 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.80 -pb_1c : 93.80 -pb_5c : 93.80 -pb_10c : 93.80 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.81 -pb_1c : 93.81 -pb_5c : 93.80 -pb_10c : 93.80 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.82 -pb_1c : 93.82 -pb_5c : 93.80 -pb_10c : 93.80 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.83 -pb_1c : 93.83 -pb_5c : 93.80 -pb_10c : 93.80 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.84 -pb_1c : 93.84 -pb_5c : 93.80 -pb_10c : 93.80 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.85 -pb_1c : 93.85 -pb_5c : 93.85 -pb_10c : 93.80 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.86 -pb_1c : 93.86 -pb_5c : 93.85 -pb_10c : 93.80 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.87 -pb_1c : 93.87 -pb_5c : 93.85 -pb_10c : 93.80 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.88 -pb_1c : 93.88 -pb_5c : 93.85 -pb_10c : 93.80 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.89 -pb_1c : 93.89 -pb_5c : 93.85 -pb_10c : 93.80 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.90 -pb_1c : 93.90 -pb_5c : 93.90 -pb_10c : 93.90 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.91 -pb_1c : 93.91 -pb_5c : 93.90 -pb_10c : 93.90 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.92 -pb_1c : 93.92 -pb_5c : 93.90 -pb_10c : 93.90 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.93 -pb_1c : 93.93 -pb_5c : 93.90 -pb_10c : 93.90 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.94 -pb_1c : 93.94 -pb_5c : 93.90 -pb_10c : 93.90 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.95 -pb_1c : 93.95 -pb_5c : 93.95 -pb_10c : 93.90 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.96 -pb_1c : 93.96 -pb_5c : 93.95 -pb_10c : 93.90 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.97 -pb_1c : 93.97 -pb_5c : 93.95 -pb_10c : 93.90 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.98 -pb_1c : 93.98 -pb_5c : 93.95 -pb_10c : 93.90 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -93.99 -pb_1c : 93.99 -pb_5c : 93.95 -pb_10c : 93.90 -pb_25c : 93.75 -pb_1d : 93.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.00 -pb_1c : 94.00 -pb_5c : 94.00 -pb_10c : 94.00 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.01 -pb_1c : 94.01 -pb_5c : 94.00 -pb_10c : 94.00 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.02 -pb_1c : 94.02 -pb_5c : 94.00 -pb_10c : 94.00 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.03 -pb_1c : 94.03 -pb_5c : 94.00 -pb_10c : 94.00 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.04 -pb_1c : 94.04 -pb_5c : 94.00 -pb_10c : 94.00 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.05 -pb_1c : 94.05 -pb_5c : 94.05 -pb_10c : 94.00 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.06 -pb_1c : 94.06 -pb_5c : 94.05 -pb_10c : 94.00 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.07 -pb_1c : 94.07 -pb_5c : 94.05 -pb_10c : 94.00 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.08 -pb_1c : 94.08 -pb_5c : 94.05 -pb_10c : 94.00 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.09 -pb_1c : 94.09 -pb_5c : 94.05 -pb_10c : 94.00 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.10 -pb_1c : 94.10 -pb_5c : 94.10 -pb_10c : 94.10 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.11 -pb_1c : 94.11 -pb_5c : 94.10 -pb_10c : 94.10 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.12 -pb_1c : 94.12 -pb_5c : 94.10 -pb_10c : 94.10 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.13 -pb_1c : 94.13 -pb_5c : 94.10 -pb_10c : 94.10 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.14 -pb_1c : 94.14 -pb_5c : 94.10 -pb_10c : 94.10 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.15 -pb_1c : 94.15 -pb_5c : 94.15 -pb_10c : 94.10 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.16 -pb_1c : 94.16 -pb_5c : 94.15 -pb_10c : 94.10 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.17 -pb_1c : 94.17 -pb_5c : 94.15 -pb_10c : 94.10 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.18 -pb_1c : 94.18 -pb_5c : 94.15 -pb_10c : 94.10 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.19 -pb_1c : 94.19 -pb_5c : 94.15 -pb_10c : 94.10 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.20 -pb_1c : 94.20 -pb_5c : 94.20 -pb_10c : 94.20 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.21 -pb_1c : 94.21 -pb_5c : 94.20 -pb_10c : 94.20 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.22 -pb_1c : 94.22 -pb_5c : 94.20 -pb_10c : 94.20 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.23 -pb_1c : 94.23 -pb_5c : 94.20 -pb_10c : 94.20 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.24 -pb_1c : 94.24 -pb_5c : 94.20 -pb_10c : 94.20 -pb_25c : 94.00 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.25 -pb_1c : 94.25 -pb_5c : 94.25 -pb_10c : 94.20 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.26 -pb_1c : 94.26 -pb_5c : 94.25 -pb_10c : 94.20 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.27 -pb_1c : 94.27 -pb_5c : 94.25 -pb_10c : 94.20 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.28 -pb_1c : 94.28 -pb_5c : 94.25 -pb_10c : 94.20 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.29 -pb_1c : 94.29 -pb_5c : 94.25 -pb_10c : 94.20 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.30 -pb_1c : 94.30 -pb_5c : 94.30 -pb_10c : 94.30 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.31 -pb_1c : 94.31 -pb_5c : 94.30 -pb_10c : 94.30 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.32 -pb_1c : 94.32 -pb_5c : 94.30 -pb_10c : 94.30 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.33 -pb_1c : 94.33 -pb_5c : 94.30 -pb_10c : 94.30 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.34 -pb_1c : 94.34 -pb_5c : 94.30 -pb_10c : 94.30 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.35 -pb_1c : 94.35 -pb_5c : 94.35 -pb_10c : 94.30 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.36 -pb_1c : 94.36 -pb_5c : 94.35 -pb_10c : 94.30 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.37 -pb_1c : 94.37 -pb_5c : 94.35 -pb_10c : 94.30 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.38 -pb_1c : 94.38 -pb_5c : 94.35 -pb_10c : 94.30 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.39 -pb_1c : 94.39 -pb_5c : 94.35 -pb_10c : 94.30 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.40 -pb_1c : 94.40 -pb_5c : 94.40 -pb_10c : 94.40 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.41 -pb_1c : 94.41 -pb_5c : 94.40 -pb_10c : 94.40 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.42 -pb_1c : 94.42 -pb_5c : 94.40 -pb_10c : 94.40 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.43 -pb_1c : 94.43 -pb_5c : 94.40 -pb_10c : 94.40 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.44 -pb_1c : 94.44 -pb_5c : 94.40 -pb_10c : 94.40 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.45 -pb_1c : 94.45 -pb_5c : 94.45 -pb_10c : 94.40 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.46 -pb_1c : 94.46 -pb_5c : 94.45 -pb_10c : 94.40 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.47 -pb_1c : 94.47 -pb_5c : 94.45 -pb_10c : 94.40 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.48 -pb_1c : 94.48 -pb_5c : 94.45 -pb_10c : 94.40 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.49 -pb_1c : 94.49 -pb_5c : 94.45 -pb_10c : 94.40 -pb_25c : 94.25 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.50 -pb_1c : 94.50 -pb_5c : 94.50 -pb_10c : 94.50 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.51 -pb_1c : 94.51 -pb_5c : 94.50 -pb_10c : 94.50 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.52 -pb_1c : 94.52 -pb_5c : 94.50 -pb_10c : 94.50 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.53 -pb_1c : 94.53 -pb_5c : 94.50 -pb_10c : 94.50 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.54 -pb_1c : 94.54 -pb_5c : 94.50 -pb_10c : 94.50 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.55 -pb_1c : 94.55 -pb_5c : 94.55 -pb_10c : 94.50 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.56 -pb_1c : 94.56 -pb_5c : 94.55 -pb_10c : 94.50 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.57 -pb_1c : 94.57 -pb_5c : 94.55 -pb_10c : 94.50 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.58 -pb_1c : 94.58 -pb_5c : 94.55 -pb_10c : 94.50 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.59 -pb_1c : 94.59 -pb_5c : 94.55 -pb_10c : 94.50 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.60 -pb_1c : 94.60 -pb_5c : 94.60 -pb_10c : 94.60 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.61 -pb_1c : 94.61 -pb_5c : 94.60 -pb_10c : 94.60 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.62 -pb_1c : 94.62 -pb_5c : 94.60 -pb_10c : 94.60 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.63 -pb_1c : 94.63 -pb_5c : 94.60 -pb_10c : 94.60 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.64 -pb_1c : 94.64 -pb_5c : 94.60 -pb_10c : 94.60 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.65 -pb_1c : 94.65 -pb_5c : 94.65 -pb_10c : 94.60 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.66 -pb_1c : 94.66 -pb_5c : 94.65 -pb_10c : 94.60 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.67 -pb_1c : 94.67 -pb_5c : 94.65 -pb_10c : 94.60 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.68 -pb_1c : 94.68 -pb_5c : 94.65 -pb_10c : 94.60 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.69 -pb_1c : 94.69 -pb_5c : 94.65 -pb_10c : 94.60 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.70 -pb_1c : 94.70 -pb_5c : 94.70 -pb_10c : 94.70 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.71 -pb_1c : 94.71 -pb_5c : 94.70 -pb_10c : 94.70 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.72 -pb_1c : 94.72 -pb_5c : 94.70 -pb_10c : 94.70 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.73 -pb_1c : 94.73 -pb_5c : 94.70 -pb_10c : 94.70 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.74 -pb_1c : 94.74 -pb_5c : 94.70 -pb_10c : 94.70 -pb_25c : 94.50 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.75 -pb_1c : 94.75 -pb_5c : 94.75 -pb_10c : 94.70 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.76 -pb_1c : 94.76 -pb_5c : 94.75 -pb_10c : 94.70 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.77 -pb_1c : 94.77 -pb_5c : 94.75 -pb_10c : 94.70 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.78 -pb_1c : 94.78 -pb_5c : 94.75 -pb_10c : 94.70 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.79 -pb_1c : 94.79 -pb_5c : 94.75 -pb_10c : 94.70 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.80 -pb_1c : 94.80 -pb_5c : 94.80 -pb_10c : 94.80 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.81 -pb_1c : 94.81 -pb_5c : 94.80 -pb_10c : 94.80 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.82 -pb_1c : 94.82 -pb_5c : 94.80 -pb_10c : 94.80 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.83 -pb_1c : 94.83 -pb_5c : 94.80 -pb_10c : 94.80 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.84 -pb_1c : 94.84 -pb_5c : 94.80 -pb_10c : 94.80 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.85 -pb_1c : 94.85 -pb_5c : 94.85 -pb_10c : 94.80 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.86 -pb_1c : 94.86 -pb_5c : 94.85 -pb_10c : 94.80 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.87 -pb_1c : 94.87 -pb_5c : 94.85 -pb_10c : 94.80 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.88 -pb_1c : 94.88 -pb_5c : 94.85 -pb_10c : 94.80 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.89 -pb_1c : 94.89 -pb_5c : 94.85 -pb_10c : 94.80 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.90 -pb_1c : 94.90 -pb_5c : 94.90 -pb_10c : 94.90 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.91 -pb_1c : 94.91 -pb_5c : 94.90 -pb_10c : 94.90 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.92 -pb_1c : 94.92 -pb_5c : 94.90 -pb_10c : 94.90 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.93 -pb_1c : 94.93 -pb_5c : 94.90 -pb_10c : 94.90 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.94 -pb_1c : 94.94 -pb_5c : 94.90 -pb_10c : 94.90 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.95 -pb_1c : 94.95 -pb_5c : 94.95 -pb_10c : 94.90 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.96 -pb_1c : 94.96 -pb_5c : 94.95 -pb_10c : 94.90 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.97 -pb_1c : 94.97 -pb_5c : 94.95 -pb_10c : 94.90 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.98 -pb_1c : 94.98 -pb_5c : 94.95 -pb_10c : 94.90 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -94.99 -pb_1c : 94.99 -pb_5c : 94.95 -pb_10c : 94.90 -pb_25c : 94.75 -pb_1d : 94.00 -pb_5d : 90.00 -pb_10d : 90.00 - -95.00 -pb_1c : 95.00 -pb_5c : 95.00 -pb_10c : 95.00 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.01 -pb_1c : 95.01 -pb_5c : 95.00 -pb_10c : 95.00 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.02 -pb_1c : 95.02 -pb_5c : 95.00 -pb_10c : 95.00 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.03 -pb_1c : 95.03 -pb_5c : 95.00 -pb_10c : 95.00 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.04 -pb_1c : 95.04 -pb_5c : 95.00 -pb_10c : 95.00 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.05 -pb_1c : 95.05 -pb_5c : 95.05 -pb_10c : 95.00 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.06 -pb_1c : 95.06 -pb_5c : 95.05 -pb_10c : 95.00 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.07 -pb_1c : 95.07 -pb_5c : 95.05 -pb_10c : 95.00 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.08 -pb_1c : 95.08 -pb_5c : 95.05 -pb_10c : 95.00 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.09 -pb_1c : 95.09 -pb_5c : 95.05 -pb_10c : 95.00 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.10 -pb_1c : 95.10 -pb_5c : 95.10 -pb_10c : 95.10 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.11 -pb_1c : 95.11 -pb_5c : 95.10 -pb_10c : 95.10 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.12 -pb_1c : 95.12 -pb_5c : 95.10 -pb_10c : 95.10 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.13 -pb_1c : 95.13 -pb_5c : 95.10 -pb_10c : 95.10 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.14 -pb_1c : 95.14 -pb_5c : 95.10 -pb_10c : 95.10 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.15 -pb_1c : 95.15 -pb_5c : 95.15 -pb_10c : 95.10 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.16 -pb_1c : 95.16 -pb_5c : 95.15 -pb_10c : 95.10 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.17 -pb_1c : 95.17 -pb_5c : 95.15 -pb_10c : 95.10 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.18 -pb_1c : 95.18 -pb_5c : 95.15 -pb_10c : 95.10 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.19 -pb_1c : 95.19 -pb_5c : 95.15 -pb_10c : 95.10 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.20 -pb_1c : 95.20 -pb_5c : 95.20 -pb_10c : 95.20 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.21 -pb_1c : 95.21 -pb_5c : 95.20 -pb_10c : 95.20 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.22 -pb_1c : 95.22 -pb_5c : 95.20 -pb_10c : 95.20 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.23 -pb_1c : 95.23 -pb_5c : 95.20 -pb_10c : 95.20 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.24 -pb_1c : 95.24 -pb_5c : 95.20 -pb_10c : 95.20 -pb_25c : 95.00 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.25 -pb_1c : 95.25 -pb_5c : 95.25 -pb_10c : 95.20 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.26 -pb_1c : 95.26 -pb_5c : 95.25 -pb_10c : 95.20 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.27 -pb_1c : 95.27 -pb_5c : 95.25 -pb_10c : 95.20 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.28 -pb_1c : 95.28 -pb_5c : 95.25 -pb_10c : 95.20 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.29 -pb_1c : 95.29 -pb_5c : 95.25 -pb_10c : 95.20 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.30 -pb_1c : 95.30 -pb_5c : 95.30 -pb_10c : 95.30 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.31 -pb_1c : 95.31 -pb_5c : 95.30 -pb_10c : 95.30 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.32 -pb_1c : 95.32 -pb_5c : 95.30 -pb_10c : 95.30 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.33 -pb_1c : 95.33 -pb_5c : 95.30 -pb_10c : 95.30 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.34 -pb_1c : 95.34 -pb_5c : 95.30 -pb_10c : 95.30 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.35 -pb_1c : 95.35 -pb_5c : 95.35 -pb_10c : 95.30 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.36 -pb_1c : 95.36 -pb_5c : 95.35 -pb_10c : 95.30 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.37 -pb_1c : 95.37 -pb_5c : 95.35 -pb_10c : 95.30 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.38 -pb_1c : 95.38 -pb_5c : 95.35 -pb_10c : 95.30 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.39 -pb_1c : 95.39 -pb_5c : 95.35 -pb_10c : 95.30 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.40 -pb_1c : 95.40 -pb_5c : 95.40 -pb_10c : 95.40 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.41 -pb_1c : 95.41 -pb_5c : 95.40 -pb_10c : 95.40 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.42 -pb_1c : 95.42 -pb_5c : 95.40 -pb_10c : 95.40 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.43 -pb_1c : 95.43 -pb_5c : 95.40 -pb_10c : 95.40 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.44 -pb_1c : 95.44 -pb_5c : 95.40 -pb_10c : 95.40 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.45 -pb_1c : 95.45 -pb_5c : 95.45 -pb_10c : 95.40 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.46 -pb_1c : 95.46 -pb_5c : 95.45 -pb_10c : 95.40 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.47 -pb_1c : 95.47 -pb_5c : 95.45 -pb_10c : 95.40 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.48 -pb_1c : 95.48 -pb_5c : 95.45 -pb_10c : 95.40 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.49 -pb_1c : 95.49 -pb_5c : 95.45 -pb_10c : 95.40 -pb_25c : 95.25 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.50 -pb_1c : 95.50 -pb_5c : 95.50 -pb_10c : 95.50 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.51 -pb_1c : 95.51 -pb_5c : 95.50 -pb_10c : 95.50 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.52 -pb_1c : 95.52 -pb_5c : 95.50 -pb_10c : 95.50 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.53 -pb_1c : 95.53 -pb_5c : 95.50 -pb_10c : 95.50 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.54 -pb_1c : 95.54 -pb_5c : 95.50 -pb_10c : 95.50 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.55 -pb_1c : 95.55 -pb_5c : 95.55 -pb_10c : 95.50 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.56 -pb_1c : 95.56 -pb_5c : 95.55 -pb_10c : 95.50 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.57 -pb_1c : 95.57 -pb_5c : 95.55 -pb_10c : 95.50 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.58 -pb_1c : 95.58 -pb_5c : 95.55 -pb_10c : 95.50 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.59 -pb_1c : 95.59 -pb_5c : 95.55 -pb_10c : 95.50 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.60 -pb_1c : 95.60 -pb_5c : 95.60 -pb_10c : 95.60 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.61 -pb_1c : 95.61 -pb_5c : 95.60 -pb_10c : 95.60 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.62 -pb_1c : 95.62 -pb_5c : 95.60 -pb_10c : 95.60 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.63 -pb_1c : 95.63 -pb_5c : 95.60 -pb_10c : 95.60 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.64 -pb_1c : 95.64 -pb_5c : 95.60 -pb_10c : 95.60 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.65 -pb_1c : 95.65 -pb_5c : 95.65 -pb_10c : 95.60 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.66 -pb_1c : 95.66 -pb_5c : 95.65 -pb_10c : 95.60 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.67 -pb_1c : 95.67 -pb_5c : 95.65 -pb_10c : 95.60 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.68 -pb_1c : 95.68 -pb_5c : 95.65 -pb_10c : 95.60 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.69 -pb_1c : 95.69 -pb_5c : 95.65 -pb_10c : 95.60 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.70 -pb_1c : 95.70 -pb_5c : 95.70 -pb_10c : 95.70 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.71 -pb_1c : 95.71 -pb_5c : 95.70 -pb_10c : 95.70 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.72 -pb_1c : 95.72 -pb_5c : 95.70 -pb_10c : 95.70 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.73 -pb_1c : 95.73 -pb_5c : 95.70 -pb_10c : 95.70 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.74 -pb_1c : 95.74 -pb_5c : 95.70 -pb_10c : 95.70 -pb_25c : 95.50 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.75 -pb_1c : 95.75 -pb_5c : 95.75 -pb_10c : 95.70 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.76 -pb_1c : 95.76 -pb_5c : 95.75 -pb_10c : 95.70 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.77 -pb_1c : 95.77 -pb_5c : 95.75 -pb_10c : 95.70 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.78 -pb_1c : 95.78 -pb_5c : 95.75 -pb_10c : 95.70 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.79 -pb_1c : 95.79 -pb_5c : 95.75 -pb_10c : 95.70 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.80 -pb_1c : 95.80 -pb_5c : 95.80 -pb_10c : 95.80 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.81 -pb_1c : 95.81 -pb_5c : 95.80 -pb_10c : 95.80 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.82 -pb_1c : 95.82 -pb_5c : 95.80 -pb_10c : 95.80 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.83 -pb_1c : 95.83 -pb_5c : 95.80 -pb_10c : 95.80 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.84 -pb_1c : 95.84 -pb_5c : 95.80 -pb_10c : 95.80 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.85 -pb_1c : 95.85 -pb_5c : 95.85 -pb_10c : 95.80 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.86 -pb_1c : 95.86 -pb_5c : 95.85 -pb_10c : 95.80 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.87 -pb_1c : 95.87 -pb_5c : 95.85 -pb_10c : 95.80 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.88 -pb_1c : 95.88 -pb_5c : 95.85 -pb_10c : 95.80 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.89 -pb_1c : 95.89 -pb_5c : 95.85 -pb_10c : 95.80 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.90 -pb_1c : 95.90 -pb_5c : 95.90 -pb_10c : 95.90 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.91 -pb_1c : 95.91 -pb_5c : 95.90 -pb_10c : 95.90 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.92 -pb_1c : 95.92 -pb_5c : 95.90 -pb_10c : 95.90 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.93 -pb_1c : 95.93 -pb_5c : 95.90 -pb_10c : 95.90 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.94 -pb_1c : 95.94 -pb_5c : 95.90 -pb_10c : 95.90 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.95 -pb_1c : 95.95 -pb_5c : 95.95 -pb_10c : 95.90 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.96 -pb_1c : 95.96 -pb_5c : 95.95 -pb_10c : 95.90 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.97 -pb_1c : 95.97 -pb_5c : 95.95 -pb_10c : 95.90 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.98 -pb_1c : 95.98 -pb_5c : 95.95 -pb_10c : 95.90 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -95.99 -pb_1c : 95.99 -pb_5c : 95.95 -pb_10c : 95.90 -pb_25c : 95.75 -pb_1d : 95.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.00 -pb_1c : 96.00 -pb_5c : 96.00 -pb_10c : 96.00 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.01 -pb_1c : 96.01 -pb_5c : 96.00 -pb_10c : 96.00 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.02 -pb_1c : 96.02 -pb_5c : 96.00 -pb_10c : 96.00 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.03 -pb_1c : 96.03 -pb_5c : 96.00 -pb_10c : 96.00 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.04 -pb_1c : 96.04 -pb_5c : 96.00 -pb_10c : 96.00 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.05 -pb_1c : 96.05 -pb_5c : 96.05 -pb_10c : 96.00 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.06 -pb_1c : 96.06 -pb_5c : 96.05 -pb_10c : 96.00 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.07 -pb_1c : 96.07 -pb_5c : 96.05 -pb_10c : 96.00 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.08 -pb_1c : 96.08 -pb_5c : 96.05 -pb_10c : 96.00 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.09 -pb_1c : 96.09 -pb_5c : 96.05 -pb_10c : 96.00 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.10 -pb_1c : 96.10 -pb_5c : 96.10 -pb_10c : 96.10 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.11 -pb_1c : 96.11 -pb_5c : 96.10 -pb_10c : 96.10 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.12 -pb_1c : 96.12 -pb_5c : 96.10 -pb_10c : 96.10 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.13 -pb_1c : 96.13 -pb_5c : 96.10 -pb_10c : 96.10 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.14 -pb_1c : 96.14 -pb_5c : 96.10 -pb_10c : 96.10 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.15 -pb_1c : 96.15 -pb_5c : 96.15 -pb_10c : 96.10 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.16 -pb_1c : 96.16 -pb_5c : 96.15 -pb_10c : 96.10 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.17 -pb_1c : 96.17 -pb_5c : 96.15 -pb_10c : 96.10 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.18 -pb_1c : 96.18 -pb_5c : 96.15 -pb_10c : 96.10 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.19 -pb_1c : 96.19 -pb_5c : 96.15 -pb_10c : 96.10 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.20 -pb_1c : 96.20 -pb_5c : 96.20 -pb_10c : 96.20 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.21 -pb_1c : 96.21 -pb_5c : 96.20 -pb_10c : 96.20 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.22 -pb_1c : 96.22 -pb_5c : 96.20 -pb_10c : 96.20 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.23 -pb_1c : 96.23 -pb_5c : 96.20 -pb_10c : 96.20 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.24 -pb_1c : 96.24 -pb_5c : 96.20 -pb_10c : 96.20 -pb_25c : 96.00 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.25 -pb_1c : 96.25 -pb_5c : 96.25 -pb_10c : 96.20 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.26 -pb_1c : 96.26 -pb_5c : 96.25 -pb_10c : 96.20 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.27 -pb_1c : 96.27 -pb_5c : 96.25 -pb_10c : 96.20 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.28 -pb_1c : 96.28 -pb_5c : 96.25 -pb_10c : 96.20 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.29 -pb_1c : 96.29 -pb_5c : 96.25 -pb_10c : 96.20 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.30 -pb_1c : 96.30 -pb_5c : 96.30 -pb_10c : 96.30 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.31 -pb_1c : 96.31 -pb_5c : 96.30 -pb_10c : 96.30 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.32 -pb_1c : 96.32 -pb_5c : 96.30 -pb_10c : 96.30 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.33 -pb_1c : 96.33 -pb_5c : 96.30 -pb_10c : 96.30 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.34 -pb_1c : 96.34 -pb_5c : 96.30 -pb_10c : 96.30 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.35 -pb_1c : 96.35 -pb_5c : 96.35 -pb_10c : 96.30 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.36 -pb_1c : 96.36 -pb_5c : 96.35 -pb_10c : 96.30 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.37 -pb_1c : 96.37 -pb_5c : 96.35 -pb_10c : 96.30 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.38 -pb_1c : 96.38 -pb_5c : 96.35 -pb_10c : 96.30 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.39 -pb_1c : 96.39 -pb_5c : 96.35 -pb_10c : 96.30 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.40 -pb_1c : 96.40 -pb_5c : 96.40 -pb_10c : 96.40 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.41 -pb_1c : 96.41 -pb_5c : 96.40 -pb_10c : 96.40 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.42 -pb_1c : 96.42 -pb_5c : 96.40 -pb_10c : 96.40 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.43 -pb_1c : 96.43 -pb_5c : 96.40 -pb_10c : 96.40 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.44 -pb_1c : 96.44 -pb_5c : 96.40 -pb_10c : 96.40 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.45 -pb_1c : 96.45 -pb_5c : 96.45 -pb_10c : 96.40 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.46 -pb_1c : 96.46 -pb_5c : 96.45 -pb_10c : 96.40 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.47 -pb_1c : 96.47 -pb_5c : 96.45 -pb_10c : 96.40 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.48 -pb_1c : 96.48 -pb_5c : 96.45 -pb_10c : 96.40 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.49 -pb_1c : 96.49 -pb_5c : 96.45 -pb_10c : 96.40 -pb_25c : 96.25 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.50 -pb_1c : 96.50 -pb_5c : 96.50 -pb_10c : 96.50 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.51 -pb_1c : 96.51 -pb_5c : 96.50 -pb_10c : 96.50 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.52 -pb_1c : 96.52 -pb_5c : 96.50 -pb_10c : 96.50 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.53 -pb_1c : 96.53 -pb_5c : 96.50 -pb_10c : 96.50 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.54 -pb_1c : 96.54 -pb_5c : 96.50 -pb_10c : 96.50 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.55 -pb_1c : 96.55 -pb_5c : 96.55 -pb_10c : 96.50 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.56 -pb_1c : 96.56 -pb_5c : 96.55 -pb_10c : 96.50 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.57 -pb_1c : 96.57 -pb_5c : 96.55 -pb_10c : 96.50 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.58 -pb_1c : 96.58 -pb_5c : 96.55 -pb_10c : 96.50 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.59 -pb_1c : 96.59 -pb_5c : 96.55 -pb_10c : 96.50 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.60 -pb_1c : 96.60 -pb_5c : 96.60 -pb_10c : 96.60 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.61 -pb_1c : 96.61 -pb_5c : 96.60 -pb_10c : 96.60 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.62 -pb_1c : 96.62 -pb_5c : 96.60 -pb_10c : 96.60 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.63 -pb_1c : 96.63 -pb_5c : 96.60 -pb_10c : 96.60 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.64 -pb_1c : 96.64 -pb_5c : 96.60 -pb_10c : 96.60 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.65 -pb_1c : 96.65 -pb_5c : 96.65 -pb_10c : 96.60 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.66 -pb_1c : 96.66 -pb_5c : 96.65 -pb_10c : 96.60 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.67 -pb_1c : 96.67 -pb_5c : 96.65 -pb_10c : 96.60 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.68 -pb_1c : 96.68 -pb_5c : 96.65 -pb_10c : 96.60 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.69 -pb_1c : 96.69 -pb_5c : 96.65 -pb_10c : 96.60 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.70 -pb_1c : 96.70 -pb_5c : 96.70 -pb_10c : 96.70 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.71 -pb_1c : 96.71 -pb_5c : 96.70 -pb_10c : 96.70 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.72 -pb_1c : 96.72 -pb_5c : 96.70 -pb_10c : 96.70 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.73 -pb_1c : 96.73 -pb_5c : 96.70 -pb_10c : 96.70 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.74 -pb_1c : 96.74 -pb_5c : 96.70 -pb_10c : 96.70 -pb_25c : 96.50 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.75 -pb_1c : 96.75 -pb_5c : 96.75 -pb_10c : 96.70 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.76 -pb_1c : 96.76 -pb_5c : 96.75 -pb_10c : 96.70 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.77 -pb_1c : 96.77 -pb_5c : 96.75 -pb_10c : 96.70 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.78 -pb_1c : 96.78 -pb_5c : 96.75 -pb_10c : 96.70 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.79 -pb_1c : 96.79 -pb_5c : 96.75 -pb_10c : 96.70 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.80 -pb_1c : 96.80 -pb_5c : 96.80 -pb_10c : 96.80 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.81 -pb_1c : 96.81 -pb_5c : 96.80 -pb_10c : 96.80 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.82 -pb_1c : 96.82 -pb_5c : 96.80 -pb_10c : 96.80 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.83 -pb_1c : 96.83 -pb_5c : 96.80 -pb_10c : 96.80 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.84 -pb_1c : 96.84 -pb_5c : 96.80 -pb_10c : 96.80 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.85 -pb_1c : 96.85 -pb_5c : 96.85 -pb_10c : 96.80 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.86 -pb_1c : 96.86 -pb_5c : 96.85 -pb_10c : 96.80 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.87 -pb_1c : 96.87 -pb_5c : 96.85 -pb_10c : 96.80 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.88 -pb_1c : 96.88 -pb_5c : 96.85 -pb_10c : 96.80 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.89 -pb_1c : 96.89 -pb_5c : 96.85 -pb_10c : 96.80 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.90 -pb_1c : 96.90 -pb_5c : 96.90 -pb_10c : 96.90 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.91 -pb_1c : 96.91 -pb_5c : 96.90 -pb_10c : 96.90 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.92 -pb_1c : 96.92 -pb_5c : 96.90 -pb_10c : 96.90 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.93 -pb_1c : 96.93 -pb_5c : 96.90 -pb_10c : 96.90 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.94 -pb_1c : 96.94 -pb_5c : 96.90 -pb_10c : 96.90 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.95 -pb_1c : 96.95 -pb_5c : 96.95 -pb_10c : 96.90 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.96 -pb_1c : 96.96 -pb_5c : 96.95 -pb_10c : 96.90 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.97 -pb_1c : 96.97 -pb_5c : 96.95 -pb_10c : 96.90 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.98 -pb_1c : 96.98 -pb_5c : 96.95 -pb_10c : 96.90 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -96.99 -pb_1c : 96.99 -pb_5c : 96.95 -pb_10c : 96.90 -pb_25c : 96.75 -pb_1d : 96.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.00 -pb_1c : 97.00 -pb_5c : 97.00 -pb_10c : 97.00 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.01 -pb_1c : 97.01 -pb_5c : 97.00 -pb_10c : 97.00 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.02 -pb_1c : 97.02 -pb_5c : 97.00 -pb_10c : 97.00 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.03 -pb_1c : 97.03 -pb_5c : 97.00 -pb_10c : 97.00 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.04 -pb_1c : 97.04 -pb_5c : 97.00 -pb_10c : 97.00 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.05 -pb_1c : 97.05 -pb_5c : 97.05 -pb_10c : 97.00 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.06 -pb_1c : 97.06 -pb_5c : 97.05 -pb_10c : 97.00 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.07 -pb_1c : 97.07 -pb_5c : 97.05 -pb_10c : 97.00 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.08 -pb_1c : 97.08 -pb_5c : 97.05 -pb_10c : 97.00 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.09 -pb_1c : 97.09 -pb_5c : 97.05 -pb_10c : 97.00 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.10 -pb_1c : 97.10 -pb_5c : 97.10 -pb_10c : 97.10 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.11 -pb_1c : 97.11 -pb_5c : 97.10 -pb_10c : 97.10 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.12 -pb_1c : 97.12 -pb_5c : 97.10 -pb_10c : 97.10 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.13 -pb_1c : 97.13 -pb_5c : 97.10 -pb_10c : 97.10 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.14 -pb_1c : 97.14 -pb_5c : 97.10 -pb_10c : 97.10 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.15 -pb_1c : 97.15 -pb_5c : 97.15 -pb_10c : 97.10 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.16 -pb_1c : 97.16 -pb_5c : 97.15 -pb_10c : 97.10 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.17 -pb_1c : 97.17 -pb_5c : 97.15 -pb_10c : 97.10 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.18 -pb_1c : 97.18 -pb_5c : 97.15 -pb_10c : 97.10 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.19 -pb_1c : 97.19 -pb_5c : 97.15 -pb_10c : 97.10 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.20 -pb_1c : 97.20 -pb_5c : 97.20 -pb_10c : 97.20 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.21 -pb_1c : 97.21 -pb_5c : 97.20 -pb_10c : 97.20 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.22 -pb_1c : 97.22 -pb_5c : 97.20 -pb_10c : 97.20 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.23 -pb_1c : 97.23 -pb_5c : 97.20 -pb_10c : 97.20 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.24 -pb_1c : 97.24 -pb_5c : 97.20 -pb_10c : 97.20 -pb_25c : 97.00 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.25 -pb_1c : 97.25 -pb_5c : 97.25 -pb_10c : 97.20 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.26 -pb_1c : 97.26 -pb_5c : 97.25 -pb_10c : 97.20 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.27 -pb_1c : 97.27 -pb_5c : 97.25 -pb_10c : 97.20 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.28 -pb_1c : 97.28 -pb_5c : 97.25 -pb_10c : 97.20 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.29 -pb_1c : 97.29 -pb_5c : 97.25 -pb_10c : 97.20 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.30 -pb_1c : 97.30 -pb_5c : 97.30 -pb_10c : 97.30 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.31 -pb_1c : 97.31 -pb_5c : 97.30 -pb_10c : 97.30 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.32 -pb_1c : 97.32 -pb_5c : 97.30 -pb_10c : 97.30 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.33 -pb_1c : 97.33 -pb_5c : 97.30 -pb_10c : 97.30 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.34 -pb_1c : 97.34 -pb_5c : 97.30 -pb_10c : 97.30 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.35 -pb_1c : 97.35 -pb_5c : 97.35 -pb_10c : 97.30 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.36 -pb_1c : 97.36 -pb_5c : 97.35 -pb_10c : 97.30 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.37 -pb_1c : 97.37 -pb_5c : 97.35 -pb_10c : 97.30 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.38 -pb_1c : 97.38 -pb_5c : 97.35 -pb_10c : 97.30 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.39 -pb_1c : 97.39 -pb_5c : 97.35 -pb_10c : 97.30 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.40 -pb_1c : 97.40 -pb_5c : 97.40 -pb_10c : 97.40 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.41 -pb_1c : 97.41 -pb_5c : 97.40 -pb_10c : 97.40 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.42 -pb_1c : 97.42 -pb_5c : 97.40 -pb_10c : 97.40 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.43 -pb_1c : 97.43 -pb_5c : 97.40 -pb_10c : 97.40 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.44 -pb_1c : 97.44 -pb_5c : 97.40 -pb_10c : 97.40 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.45 -pb_1c : 97.45 -pb_5c : 97.45 -pb_10c : 97.40 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.46 -pb_1c : 97.46 -pb_5c : 97.45 -pb_10c : 97.40 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.47 -pb_1c : 97.47 -pb_5c : 97.45 -pb_10c : 97.40 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.48 -pb_1c : 97.48 -pb_5c : 97.45 -pb_10c : 97.40 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.49 -pb_1c : 97.49 -pb_5c : 97.45 -pb_10c : 97.40 -pb_25c : 97.25 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.50 -pb_1c : 97.50 -pb_5c : 97.50 -pb_10c : 97.50 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.51 -pb_1c : 97.51 -pb_5c : 97.50 -pb_10c : 97.50 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.52 -pb_1c : 97.52 -pb_5c : 97.50 -pb_10c : 97.50 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.53 -pb_1c : 97.53 -pb_5c : 97.50 -pb_10c : 97.50 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.54 -pb_1c : 97.54 -pb_5c : 97.50 -pb_10c : 97.50 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.55 -pb_1c : 97.55 -pb_5c : 97.55 -pb_10c : 97.50 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.56 -pb_1c : 97.56 -pb_5c : 97.55 -pb_10c : 97.50 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.57 -pb_1c : 97.57 -pb_5c : 97.55 -pb_10c : 97.50 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.58 -pb_1c : 97.58 -pb_5c : 97.55 -pb_10c : 97.50 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.59 -pb_1c : 97.59 -pb_5c : 97.55 -pb_10c : 97.50 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.60 -pb_1c : 97.60 -pb_5c : 97.60 -pb_10c : 97.60 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.61 -pb_1c : 97.61 -pb_5c : 97.60 -pb_10c : 97.60 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.62 -pb_1c : 97.62 -pb_5c : 97.60 -pb_10c : 97.60 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.63 -pb_1c : 97.63 -pb_5c : 97.60 -pb_10c : 97.60 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.64 -pb_1c : 97.64 -pb_5c : 97.60 -pb_10c : 97.60 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.65 -pb_1c : 97.65 -pb_5c : 97.65 -pb_10c : 97.60 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.66 -pb_1c : 97.66 -pb_5c : 97.65 -pb_10c : 97.60 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.67 -pb_1c : 97.67 -pb_5c : 97.65 -pb_10c : 97.60 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.68 -pb_1c : 97.68 -pb_5c : 97.65 -pb_10c : 97.60 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.69 -pb_1c : 97.69 -pb_5c : 97.65 -pb_10c : 97.60 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.70 -pb_1c : 97.70 -pb_5c : 97.70 -pb_10c : 97.70 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.71 -pb_1c : 97.71 -pb_5c : 97.70 -pb_10c : 97.70 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.72 -pb_1c : 97.72 -pb_5c : 97.70 -pb_10c : 97.70 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.73 -pb_1c : 97.73 -pb_5c : 97.70 -pb_10c : 97.70 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.74 -pb_1c : 97.74 -pb_5c : 97.70 -pb_10c : 97.70 -pb_25c : 97.50 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.75 -pb_1c : 97.75 -pb_5c : 97.75 -pb_10c : 97.70 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.76 -pb_1c : 97.76 -pb_5c : 97.75 -pb_10c : 97.70 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.77 -pb_1c : 97.77 -pb_5c : 97.75 -pb_10c : 97.70 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.78 -pb_1c : 97.78 -pb_5c : 97.75 -pb_10c : 97.70 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.79 -pb_1c : 97.79 -pb_5c : 97.75 -pb_10c : 97.70 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.80 -pb_1c : 97.80 -pb_5c : 97.80 -pb_10c : 97.80 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.81 -pb_1c : 97.81 -pb_5c : 97.80 -pb_10c : 97.80 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.82 -pb_1c : 97.82 -pb_5c : 97.80 -pb_10c : 97.80 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.83 -pb_1c : 97.83 -pb_5c : 97.80 -pb_10c : 97.80 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.84 -pb_1c : 97.84 -pb_5c : 97.80 -pb_10c : 97.80 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.85 -pb_1c : 97.85 -pb_5c : 97.85 -pb_10c : 97.80 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.86 -pb_1c : 97.86 -pb_5c : 97.85 -pb_10c : 97.80 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.87 -pb_1c : 97.87 -pb_5c : 97.85 -pb_10c : 97.80 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.88 -pb_1c : 97.88 -pb_5c : 97.85 -pb_10c : 97.80 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.89 -pb_1c : 97.89 -pb_5c : 97.85 -pb_10c : 97.80 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.90 -pb_1c : 97.90 -pb_5c : 97.90 -pb_10c : 97.90 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.91 -pb_1c : 97.91 -pb_5c : 97.90 -pb_10c : 97.90 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.92 -pb_1c : 97.92 -pb_5c : 97.90 -pb_10c : 97.90 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.93 -pb_1c : 97.93 -pb_5c : 97.90 -pb_10c : 97.90 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.94 -pb_1c : 97.94 -pb_5c : 97.90 -pb_10c : 97.90 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.95 -pb_1c : 97.95 -pb_5c : 97.95 -pb_10c : 97.90 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.96 -pb_1c : 97.96 -pb_5c : 97.95 -pb_10c : 97.90 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.97 -pb_1c : 97.97 -pb_5c : 97.95 -pb_10c : 97.90 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.98 -pb_1c : 97.98 -pb_5c : 97.95 -pb_10c : 97.90 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -97.99 -pb_1c : 97.99 -pb_5c : 97.95 -pb_10c : 97.90 -pb_25c : 97.75 -pb_1d : 97.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.00 -pb_1c : 98.00 -pb_5c : 98.00 -pb_10c : 98.00 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.01 -pb_1c : 98.01 -pb_5c : 98.00 -pb_10c : 98.00 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.02 -pb_1c : 98.02 -pb_5c : 98.00 -pb_10c : 98.00 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.03 -pb_1c : 98.03 -pb_5c : 98.00 -pb_10c : 98.00 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.04 -pb_1c : 98.04 -pb_5c : 98.00 -pb_10c : 98.00 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.05 -pb_1c : 98.05 -pb_5c : 98.05 -pb_10c : 98.00 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.06 -pb_1c : 98.06 -pb_5c : 98.05 -pb_10c : 98.00 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.07 -pb_1c : 98.07 -pb_5c : 98.05 -pb_10c : 98.00 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.08 -pb_1c : 98.08 -pb_5c : 98.05 -pb_10c : 98.00 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.09 -pb_1c : 98.09 -pb_5c : 98.05 -pb_10c : 98.00 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.10 -pb_1c : 98.10 -pb_5c : 98.10 -pb_10c : 98.10 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.11 -pb_1c : 98.11 -pb_5c : 98.10 -pb_10c : 98.10 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.12 -pb_1c : 98.12 -pb_5c : 98.10 -pb_10c : 98.10 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.13 -pb_1c : 98.13 -pb_5c : 98.10 -pb_10c : 98.10 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.14 -pb_1c : 98.14 -pb_5c : 98.10 -pb_10c : 98.10 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.15 -pb_1c : 98.15 -pb_5c : 98.15 -pb_10c : 98.10 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.16 -pb_1c : 98.16 -pb_5c : 98.15 -pb_10c : 98.10 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.17 -pb_1c : 98.17 -pb_5c : 98.15 -pb_10c : 98.10 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.18 -pb_1c : 98.18 -pb_5c : 98.15 -pb_10c : 98.10 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.19 -pb_1c : 98.19 -pb_5c : 98.15 -pb_10c : 98.10 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.20 -pb_1c : 98.20 -pb_5c : 98.20 -pb_10c : 98.20 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.21 -pb_1c : 98.21 -pb_5c : 98.20 -pb_10c : 98.20 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.22 -pb_1c : 98.22 -pb_5c : 98.20 -pb_10c : 98.20 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.23 -pb_1c : 98.23 -pb_5c : 98.20 -pb_10c : 98.20 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.24 -pb_1c : 98.24 -pb_5c : 98.20 -pb_10c : 98.20 -pb_25c : 98.00 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.25 -pb_1c : 98.25 -pb_5c : 98.25 -pb_10c : 98.20 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.26 -pb_1c : 98.26 -pb_5c : 98.25 -pb_10c : 98.20 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.27 -pb_1c : 98.27 -pb_5c : 98.25 -pb_10c : 98.20 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.28 -pb_1c : 98.28 -pb_5c : 98.25 -pb_10c : 98.20 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.29 -pb_1c : 98.29 -pb_5c : 98.25 -pb_10c : 98.20 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.30 -pb_1c : 98.30 -pb_5c : 98.30 -pb_10c : 98.30 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.31 -pb_1c : 98.31 -pb_5c : 98.30 -pb_10c : 98.30 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.32 -pb_1c : 98.32 -pb_5c : 98.30 -pb_10c : 98.30 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.33 -pb_1c : 98.33 -pb_5c : 98.30 -pb_10c : 98.30 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.34 -pb_1c : 98.34 -pb_5c : 98.30 -pb_10c : 98.30 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.35 -pb_1c : 98.35 -pb_5c : 98.35 -pb_10c : 98.30 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.36 -pb_1c : 98.36 -pb_5c : 98.35 -pb_10c : 98.30 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.37 -pb_1c : 98.37 -pb_5c : 98.35 -pb_10c : 98.30 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.38 -pb_1c : 98.38 -pb_5c : 98.35 -pb_10c : 98.30 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.39 -pb_1c : 98.39 -pb_5c : 98.35 -pb_10c : 98.30 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.40 -pb_1c : 98.40 -pb_5c : 98.40 -pb_10c : 98.40 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.41 -pb_1c : 98.41 -pb_5c : 98.40 -pb_10c : 98.40 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.42 -pb_1c : 98.42 -pb_5c : 98.40 -pb_10c : 98.40 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.43 -pb_1c : 98.43 -pb_5c : 98.40 -pb_10c : 98.40 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.44 -pb_1c : 98.44 -pb_5c : 98.40 -pb_10c : 98.40 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.45 -pb_1c : 98.45 -pb_5c : 98.45 -pb_10c : 98.40 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.46 -pb_1c : 98.46 -pb_5c : 98.45 -pb_10c : 98.40 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.47 -pb_1c : 98.47 -pb_5c : 98.45 -pb_10c : 98.40 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.48 -pb_1c : 98.48 -pb_5c : 98.45 -pb_10c : 98.40 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.49 -pb_1c : 98.49 -pb_5c : 98.45 -pb_10c : 98.40 -pb_25c : 98.25 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.50 -pb_1c : 98.50 -pb_5c : 98.50 -pb_10c : 98.50 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.51 -pb_1c : 98.51 -pb_5c : 98.50 -pb_10c : 98.50 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.52 -pb_1c : 98.52 -pb_5c : 98.50 -pb_10c : 98.50 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.53 -pb_1c : 98.53 -pb_5c : 98.50 -pb_10c : 98.50 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.54 -pb_1c : 98.54 -pb_5c : 98.50 -pb_10c : 98.50 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.55 -pb_1c : 98.55 -pb_5c : 98.55 -pb_10c : 98.50 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.56 -pb_1c : 98.56 -pb_5c : 98.55 -pb_10c : 98.50 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.57 -pb_1c : 98.57 -pb_5c : 98.55 -pb_10c : 98.50 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.58 -pb_1c : 98.58 -pb_5c : 98.55 -pb_10c : 98.50 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.59 -pb_1c : 98.59 -pb_5c : 98.55 -pb_10c : 98.50 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.60 -pb_1c : 98.60 -pb_5c : 98.60 -pb_10c : 98.60 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.61 -pb_1c : 98.61 -pb_5c : 98.60 -pb_10c : 98.60 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.62 -pb_1c : 98.62 -pb_5c : 98.60 -pb_10c : 98.60 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.63 -pb_1c : 98.63 -pb_5c : 98.60 -pb_10c : 98.60 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.64 -pb_1c : 98.64 -pb_5c : 98.60 -pb_10c : 98.60 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.65 -pb_1c : 98.65 -pb_5c : 98.65 -pb_10c : 98.60 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.66 -pb_1c : 98.66 -pb_5c : 98.65 -pb_10c : 98.60 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.67 -pb_1c : 98.67 -pb_5c : 98.65 -pb_10c : 98.60 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.68 -pb_1c : 98.68 -pb_5c : 98.65 -pb_10c : 98.60 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.69 -pb_1c : 98.69 -pb_5c : 98.65 -pb_10c : 98.60 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.70 -pb_1c : 98.70 -pb_5c : 98.70 -pb_10c : 98.70 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.71 -pb_1c : 98.71 -pb_5c : 98.70 -pb_10c : 98.70 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.72 -pb_1c : 98.72 -pb_5c : 98.70 -pb_10c : 98.70 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.73 -pb_1c : 98.73 -pb_5c : 98.70 -pb_10c : 98.70 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.74 -pb_1c : 98.74 -pb_5c : 98.70 -pb_10c : 98.70 -pb_25c : 98.50 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.75 -pb_1c : 98.75 -pb_5c : 98.75 -pb_10c : 98.70 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.76 -pb_1c : 98.76 -pb_5c : 98.75 -pb_10c : 98.70 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.77 -pb_1c : 98.77 -pb_5c : 98.75 -pb_10c : 98.70 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.78 -pb_1c : 98.78 -pb_5c : 98.75 -pb_10c : 98.70 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.79 -pb_1c : 98.79 -pb_5c : 98.75 -pb_10c : 98.70 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.80 -pb_1c : 98.80 -pb_5c : 98.80 -pb_10c : 98.80 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.81 -pb_1c : 98.81 -pb_5c : 98.80 -pb_10c : 98.80 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.82 -pb_1c : 98.82 -pb_5c : 98.80 -pb_10c : 98.80 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.83 -pb_1c : 98.83 -pb_5c : 98.80 -pb_10c : 98.80 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.84 -pb_1c : 98.84 -pb_5c : 98.80 -pb_10c : 98.80 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.85 -pb_1c : 98.85 -pb_5c : 98.85 -pb_10c : 98.80 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.86 -pb_1c : 98.86 -pb_5c : 98.85 -pb_10c : 98.80 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.87 -pb_1c : 98.87 -pb_5c : 98.85 -pb_10c : 98.80 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.88 -pb_1c : 98.88 -pb_5c : 98.85 -pb_10c : 98.80 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.89 -pb_1c : 98.89 -pb_5c : 98.85 -pb_10c : 98.80 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.90 -pb_1c : 98.90 -pb_5c : 98.90 -pb_10c : 98.90 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.91 -pb_1c : 98.91 -pb_5c : 98.90 -pb_10c : 98.90 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.92 -pb_1c : 98.92 -pb_5c : 98.90 -pb_10c : 98.90 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.93 -pb_1c : 98.93 -pb_5c : 98.90 -pb_10c : 98.90 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.94 -pb_1c : 98.94 -pb_5c : 98.90 -pb_10c : 98.90 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.95 -pb_1c : 98.95 -pb_5c : 98.95 -pb_10c : 98.90 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.96 -pb_1c : 98.96 -pb_5c : 98.95 -pb_10c : 98.90 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.97 -pb_1c : 98.97 -pb_5c : 98.95 -pb_10c : 98.90 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.98 -pb_1c : 98.98 -pb_5c : 98.95 -pb_10c : 98.90 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -98.99 -pb_1c : 98.99 -pb_5c : 98.95 -pb_10c : 98.90 -pb_25c : 98.75 -pb_1d : 98.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.00 -pb_1c : 99.00 -pb_5c : 99.00 -pb_10c : 99.00 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.01 -pb_1c : 99.01 -pb_5c : 99.00 -pb_10c : 99.00 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.02 -pb_1c : 99.02 -pb_5c : 99.00 -pb_10c : 99.00 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.03 -pb_1c : 99.03 -pb_5c : 99.00 -pb_10c : 99.00 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.04 -pb_1c : 99.04 -pb_5c : 99.00 -pb_10c : 99.00 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.05 -pb_1c : 99.05 -pb_5c : 99.05 -pb_10c : 99.00 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.06 -pb_1c : 99.06 -pb_5c : 99.05 -pb_10c : 99.00 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.07 -pb_1c : 99.07 -pb_5c : 99.05 -pb_10c : 99.00 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.08 -pb_1c : 99.08 -pb_5c : 99.05 -pb_10c : 99.00 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.09 -pb_1c : 99.09 -pb_5c : 99.05 -pb_10c : 99.00 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.10 -pb_1c : 99.10 -pb_5c : 99.10 -pb_10c : 99.10 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.11 -pb_1c : 99.11 -pb_5c : 99.10 -pb_10c : 99.10 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.12 -pb_1c : 99.12 -pb_5c : 99.10 -pb_10c : 99.10 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.13 -pb_1c : 99.13 -pb_5c : 99.10 -pb_10c : 99.10 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.14 -pb_1c : 99.14 -pb_5c : 99.10 -pb_10c : 99.10 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.15 -pb_1c : 99.15 -pb_5c : 99.15 -pb_10c : 99.10 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.16 -pb_1c : 99.16 -pb_5c : 99.15 -pb_10c : 99.10 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.17 -pb_1c : 99.17 -pb_5c : 99.15 -pb_10c : 99.10 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.18 -pb_1c : 99.18 -pb_5c : 99.15 -pb_10c : 99.10 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.19 -pb_1c : 99.19 -pb_5c : 99.15 -pb_10c : 99.10 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.20 -pb_1c : 99.20 -pb_5c : 99.20 -pb_10c : 99.20 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.21 -pb_1c : 99.21 -pb_5c : 99.20 -pb_10c : 99.20 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.22 -pb_1c : 99.22 -pb_5c : 99.20 -pb_10c : 99.20 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.23 -pb_1c : 99.23 -pb_5c : 99.20 -pb_10c : 99.20 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.24 -pb_1c : 99.24 -pb_5c : 99.20 -pb_10c : 99.20 -pb_25c : 99.00 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.25 -pb_1c : 99.25 -pb_5c : 99.25 -pb_10c : 99.20 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.26 -pb_1c : 99.26 -pb_5c : 99.25 -pb_10c : 99.20 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.27 -pb_1c : 99.27 -pb_5c : 99.25 -pb_10c : 99.20 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.28 -pb_1c : 99.28 -pb_5c : 99.25 -pb_10c : 99.20 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.29 -pb_1c : 99.29 -pb_5c : 99.25 -pb_10c : 99.20 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.30 -pb_1c : 99.30 -pb_5c : 99.30 -pb_10c : 99.30 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.31 -pb_1c : 99.31 -pb_5c : 99.30 -pb_10c : 99.30 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.32 -pb_1c : 99.32 -pb_5c : 99.30 -pb_10c : 99.30 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.33 -pb_1c : 99.33 -pb_5c : 99.30 -pb_10c : 99.30 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.34 -pb_1c : 99.34 -pb_5c : 99.30 -pb_10c : 99.30 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.35 -pb_1c : 99.35 -pb_5c : 99.35 -pb_10c : 99.30 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.36 -pb_1c : 99.36 -pb_5c : 99.35 -pb_10c : 99.30 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.37 -pb_1c : 99.37 -pb_5c : 99.35 -pb_10c : 99.30 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.38 -pb_1c : 99.38 -pb_5c : 99.35 -pb_10c : 99.30 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.39 -pb_1c : 99.39 -pb_5c : 99.35 -pb_10c : 99.30 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.40 -pb_1c : 99.40 -pb_5c : 99.40 -pb_10c : 99.40 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.41 -pb_1c : 99.41 -pb_5c : 99.40 -pb_10c : 99.40 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.42 -pb_1c : 99.42 -pb_5c : 99.40 -pb_10c : 99.40 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.43 -pb_1c : 99.43 -pb_5c : 99.40 -pb_10c : 99.40 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.44 -pb_1c : 99.44 -pb_5c : 99.40 -pb_10c : 99.40 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.45 -pb_1c : 99.45 -pb_5c : 99.45 -pb_10c : 99.40 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.46 -pb_1c : 99.46 -pb_5c : 99.45 -pb_10c : 99.40 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.47 -pb_1c : 99.47 -pb_5c : 99.45 -pb_10c : 99.40 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.48 -pb_1c : 99.48 -pb_5c : 99.45 -pb_10c : 99.40 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.49 -pb_1c : 99.49 -pb_5c : 99.45 -pb_10c : 99.40 -pb_25c : 99.25 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.50 -pb_1c : 99.50 -pb_5c : 99.50 -pb_10c : 99.50 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.51 -pb_1c : 99.51 -pb_5c : 99.50 -pb_10c : 99.50 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.52 -pb_1c : 99.52 -pb_5c : 99.50 -pb_10c : 99.50 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.53 -pb_1c : 99.53 -pb_5c : 99.50 -pb_10c : 99.50 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.54 -pb_1c : 99.54 -pb_5c : 99.50 -pb_10c : 99.50 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.55 -pb_1c : 99.55 -pb_5c : 99.55 -pb_10c : 99.50 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.56 -pb_1c : 99.56 -pb_5c : 99.55 -pb_10c : 99.50 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.57 -pb_1c : 99.57 -pb_5c : 99.55 -pb_10c : 99.50 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.58 -pb_1c : 99.58 -pb_5c : 99.55 -pb_10c : 99.50 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.59 -pb_1c : 99.59 -pb_5c : 99.55 -pb_10c : 99.50 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.60 -pb_1c : 99.60 -pb_5c : 99.60 -pb_10c : 99.60 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.61 -pb_1c : 99.61 -pb_5c : 99.60 -pb_10c : 99.60 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.62 -pb_1c : 99.62 -pb_5c : 99.60 -pb_10c : 99.60 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.63 -pb_1c : 99.63 -pb_5c : 99.60 -pb_10c : 99.60 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.64 -pb_1c : 99.64 -pb_5c : 99.60 -pb_10c : 99.60 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.65 -pb_1c : 99.65 -pb_5c : 99.65 -pb_10c : 99.60 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.66 -pb_1c : 99.66 -pb_5c : 99.65 -pb_10c : 99.60 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.67 -pb_1c : 99.67 -pb_5c : 99.65 -pb_10c : 99.60 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.68 -pb_1c : 99.68 -pb_5c : 99.65 -pb_10c : 99.60 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.69 -pb_1c : 99.69 -pb_5c : 99.65 -pb_10c : 99.60 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.70 -pb_1c : 99.70 -pb_5c : 99.70 -pb_10c : 99.70 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.71 -pb_1c : 99.71 -pb_5c : 99.70 -pb_10c : 99.70 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.72 -pb_1c : 99.72 -pb_5c : 99.70 -pb_10c : 99.70 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.73 -pb_1c : 99.73 -pb_5c : 99.70 -pb_10c : 99.70 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.74 -pb_1c : 99.74 -pb_5c : 99.70 -pb_10c : 99.70 -pb_25c : 99.50 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.75 -pb_1c : 99.75 -pb_5c : 99.75 -pb_10c : 99.70 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.76 -pb_1c : 99.76 -pb_5c : 99.75 -pb_10c : 99.70 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.77 -pb_1c : 99.77 -pb_5c : 99.75 -pb_10c : 99.70 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.78 -pb_1c : 99.78 -pb_5c : 99.75 -pb_10c : 99.70 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.79 -pb_1c : 99.79 -pb_5c : 99.75 -pb_10c : 99.70 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.80 -pb_1c : 99.80 -pb_5c : 99.80 -pb_10c : 99.80 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.81 -pb_1c : 99.81 -pb_5c : 99.80 -pb_10c : 99.80 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.82 -pb_1c : 99.82 -pb_5c : 99.80 -pb_10c : 99.80 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.83 -pb_1c : 99.83 -pb_5c : 99.80 -pb_10c : 99.80 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.84 -pb_1c : 99.84 -pb_5c : 99.80 -pb_10c : 99.80 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.85 -pb_1c : 99.85 -pb_5c : 99.85 -pb_10c : 99.80 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.86 -pb_1c : 99.86 -pb_5c : 99.85 -pb_10c : 99.80 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.87 -pb_1c : 99.87 -pb_5c : 99.85 -pb_10c : 99.80 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.88 -pb_1c : 99.88 -pb_5c : 99.85 -pb_10c : 99.80 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.89 -pb_1c : 99.89 -pb_5c : 99.85 -pb_10c : 99.80 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.90 -pb_1c : 99.90 -pb_5c : 99.90 -pb_10c : 99.90 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.91 -pb_1c : 99.91 -pb_5c : 99.90 -pb_10c : 99.90 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.92 -pb_1c : 99.92 -pb_5c : 99.90 -pb_10c : 99.90 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.93 -pb_1c : 99.93 -pb_5c : 99.90 -pb_10c : 99.90 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.94 -pb_1c : 99.94 -pb_5c : 99.90 -pb_10c : 99.90 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.95 -pb_1c : 99.95 -pb_5c : 99.95 -pb_10c : 99.90 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.96 -pb_1c : 99.96 -pb_5c : 99.95 -pb_10c : 99.90 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.97 -pb_1c : 99.97 -pb_5c : 99.95 -pb_10c : 99.90 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.98 -pb_1c : 99.98 -pb_5c : 99.95 -pb_10c : 99.90 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - -99.99 -pb_1c : 99.99 -pb_5c : 99.95 -pb_10c : 99.90 -pb_25c : 99.75 -pb_1d : 99.00 -pb_5d : 95.00 -pb_10d : 90.00 - diff --git a/sdk/PrebidMobileTests/Resources/pbs_request.json b/sdk/PrebidMobileTests/Resources/pbs_request.json deleted file mode 100644 index 03720dbba..000000000 --- a/sdk/PrebidMobileTests/Resources/pbs_request.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "device":{ - "make":"Apple", - "ua":"Mozilla\/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit\/602.1.50 (KHTML, like Gecko) Mobile\/14A345", - "devtime":1495477815, - "connectiontype":1, - "model":"x86_64", - "ifa":"27FB28C2-6821-49C1-9959-D315A1090A6E", - "lmt":0 - }, - "user":{ - "gender":0, - "language":"en" - }, - "prebid_version":"0.21.0-pre", - "app":{ - "bundle":"AppNexus.PrebidMobileDemo" - }, - "ad_units":[ - { - "sizes":[ - { - "w":300, - "h":250 - } - ], - "config_id":"0b33e7ae-cf61-4003-8404-0711eea6e673", - "code":"HomeScreen" - } - ], - "cache_markup":1, - "sort_bids":1, - "max_key_length":20, - "tid":"F3740584-220F-49F7-805C-A4845F22F400", - "account_id":"aecd6ef7-b992-4e99-9bb8-65e2d984e1dd" -} diff --git a/sdk/PrebidMobileTests/Resources/pbs_response.json b/sdk/PrebidMobileTests/Resources/pbs_response.json deleted file mode 100644 index b26c1f271..000000000 --- a/sdk/PrebidMobileTests/Resources/pbs_response.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "tid":"F3740584-220F-49F7-805C-A4845F22F400", - "status":"OK", - "bidder_status":[ - { - "bidder":"appnexus", - "response_time_ms":27, - "num_bids":1 - }, - { - "bidder":"indexExchange", - "ad_unit":"HomeScreen", - "error":"Index doesn't support apps" - }, - { - "bidder":"pubmatic", - "response_time_ms":33, - "no_bid":true - }, - { - "bidder":"rubicon", - "response_time_ms":113 - } - ], - "bids":[ - { - "bid_id":"18e07dee61047f", - "code":"HomeScreen", - "creative_id":"29681110", - "bidder":"appnexus", - "price":0.5, - "width":300, - "height":250, - "cache_id":"2071cf11-085e-4c3c-9eb7-505341634676" - } - ] -} diff --git a/sdk/PrebidMobileTests/Stubbing/ANHTTPStubbingManager.m b/sdk/PrebidMobileTests/Stubbing/ANHTTPStubbingManager.m deleted file mode 100644 index 2e9846b9c..000000000 --- a/sdk/PrebidMobileTests/Stubbing/ANHTTPStubbingManager.m +++ /dev/null @@ -1,82 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "ANHTTPStubbingManager.h" -#import "ANHTTPStubURLProtocol.h" - -@interface ANHTTPStubbingManager () -@property (nonatomic) NSMutableArray *stubs; -@end - -@implementation ANHTTPStubbingManager - -+ (ANHTTPStubbingManager *)sharedStubbingManager { - static dispatch_once_t sharedStubbingManagerToken; - static ANHTTPStubbingManager *manager; - dispatch_once(&sharedStubbingManagerToken, ^{ - manager = [[ANHTTPStubbingManager alloc] init]; - }); - return manager; -} - -- (void)enable { - [NSURLProtocol registerClass:[ANHTTPStubURLProtocol class]]; -} - -- (void)disable { - [NSURLProtocol unregisterClass:[ANHTTPStubURLProtocol class]]; -} - -- (void)addStub:(ANURLConnectionStub *)stub { - [self.stubs addObject:stub]; -} - -- (void)addStubs:(NSArray *)stubs { - [self.stubs addObjectsFromArray:stubs]; -} - -- (void)removeAllStubs { - [self.stubs removeAllObjects]; -} - -- (NSMutableArray *)stubs { - @synchronized(self) { - if (!_stubs) - _stubs = [[NSMutableArray alloc] init]; - return _stubs; - } -} - -- (ANURLConnectionStub *)stubForURLString:(NSString *)URLString { - NSString *requestURLString = URLString; - NSArray *stubArray = self.stubs; - __block ANURLConnectionStub *stubMatch = nil; - [stubArray enumerateObjectsUsingBlock:^(ANURLConnectionStub *stub, NSUInteger idx, BOOL *stop) { - NSString *stubRequestURLString = stub.requestURLRegexPatternString; - NSError *error; - NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:stubRequestURLString - options:NSRegularExpressionDotMatchesLineSeparators - error:&error]; - if ([regex numberOfMatchesInString:requestURLString - options:0 - range:NSMakeRange(0, [requestURLString length])]) { - stubMatch = stub; - *stop = YES; - } - }]; - return stubMatch; -} - -@end diff --git a/sdk/PrebidMobileTests/Stubbing/ANURLConnectionStub.h b/sdk/PrebidMobileTests/Stubbing/ANURLConnectionStub.h deleted file mode 100644 index 778736733..000000000 --- a/sdk/PrebidMobileTests/Stubbing/ANURLConnectionStub.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import - -@interface ANURLConnectionStub : NSObject - -@property (nonatomic, readwrite, strong) NSString *requestURLRegexPatternString; -@property (nonatomic, readwrite, assign) NSInteger responseCode; -@property (nonatomic, readwrite, strong) id responseBody; //can be nsstring or nsdata - -+ (ANURLConnectionStub *)stubForPreBidMobileBannerWithAdSize:(CGSize)adSize - uuid:(NSString *)uuid; -+ (ANURLConnectionStub *)stubForPreBidMobileInterstitialWithUUID:(NSString *)uuid; -+ (ANURLConnectionStub *)stubForPreBidMobileNoBid; - -+ (ANURLConnectionStub *)stubForResource:(NSString *)resource - ofType:(NSString *)type; -+ (ANURLConnectionStub *)stubForResource:(NSString *)resource - ofType:(NSString *)type - withRequestURLRegexPatternString:(NSString *)pattern; -+ (ANURLConnectionStub *)stubForResource:(NSString *)resource - ofType:(NSString *)type - withRequestURLRegexPatternString:(NSString *)pattern - inBundle:(NSBundle *)bundle; - -+ (ANURLConnectionStub *)stubForMraidFile; - -@end diff --git a/sdk/PrebidMobileTests/Stubbing/ANURLConnectionStub.m b/sdk/PrebidMobileTests/Stubbing/ANURLConnectionStub.m deleted file mode 100644 index 187418999..000000000 --- a/sdk/PrebidMobileTests/Stubbing/ANURLConnectionStub.m +++ /dev/null @@ -1,169 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "ANURLConnectionStub.h" - -@implementation ANURLConnectionStub - -- (id)copyWithZone:(NSZone *)zone { - ANURLConnectionStub *newStub = [[ANURLConnectionStub alloc] init]; - newStub.requestURLRegexPatternString = self.requestURLRegexPatternString; - newStub.responseCode = self.responseCode; - newStub.responseBody = self.responseBody; - return newStub; -} - -- (BOOL)isEqual:(ANURLConnectionStub *)object { - BOOL sameRequestURLString = [self.requestURLRegexPatternString isEqualToString:object.requestURLRegexPatternString]; - BOOL sameResponseCode = self.responseCode = object.responseCode; - BOOL sameResponseBody = [self.responseBody isEqualToString:object.responseBody]; - return sameRequestURLString && sameResponseBody && sameResponseCode; -} - -- (NSUInteger)hash { - NSMutableString *description = [[NSMutableString alloc] init]; - [description appendString:self.requestURLRegexPatternString]; - [description appendString:[NSString stringWithFormat:@"%ld", (long)self.responseCode]]; - [description appendString:self.responseBody]; - return [description hash]; -} - -- (NSString *)description { - return [NSString stringWithFormat:@"NSURLConnectionStub: \n\ - Request URL Pattern: %@,\n\ - Response Code: %ld,\n\ - Response Body: %@", - self.requestURLRegexPatternString, (long)self.responseCode, self.responseBody]; -} - -#pragma mark - Pre-Initialized Stubbers - -+ (ANURLConnectionStub *)stubForPreBidMobileBannerWithAdSize:(CGSize)adSize - uuid:(NSString *)uuid { - ANURLConnectionStub *stub = [[ANURLConnectionStub alloc] init]; - stub.requestURLRegexPatternString = [NSString stringWithFormat:@"https://mobile.adnxs.com/ut/v1"]; - stub.responseCode = 200; - stub.responseBody = [NSJSONSerialization dataWithJSONObject:[[self class] responseForStandardBannerWithAdSize:adSize uuid:uuid] - options:0 - error:nil]; - return stub; -} - -+ (ANURLConnectionStub *)stubForPreBidMobileInterstitialWithUUID:(NSString *)uuid { - ANURLConnectionStub *stub = [[ANURLConnectionStub alloc] init]; - stub.requestURLRegexPatternString = [NSString stringWithFormat:@"https://mobile.adnxs.com/ut/v1"]; - stub.responseCode = 200; - stub.responseBody = [NSJSONSerialization dataWithJSONObject:[[self class] responseForStandardInterstitialWithUUID:uuid] - options:0 - error:nil]; - return stub; -} - -+ (ANURLConnectionStub *)stubForPreBidMobileNoBid { - ANURLConnectionStub *stub = [[ANURLConnectionStub alloc] init]; - stub.requestURLRegexPatternString = [NSString stringWithFormat:@"https://mobile.adnxs.com/ut/v1"]; - stub.responseCode = 200; - stub.responseBody = [NSJSONSerialization dataWithJSONObject:[[self class] responseForNoBid] - options:0 - error:nil]; - return stub; -} - -+ (ANURLConnectionStub *)stubForMraidFile { - ANURLConnectionStub *stub = [[ANURLConnectionStub alloc] init]; - stub.requestURLRegexPatternString = [@"http://mediation.adnxs.com/" stringByAppendingString:@"mraid.js"]; - stub.responseBody = @""; - stub.responseCode = 200; - return stub; -} - -+ (ANURLConnectionStub *)stubForResource:(NSString *)resource - ofType:(NSString *)type { - return [ANURLConnectionStub stubForResource:resource - ofType:type - withRequestURLRegexPatternString:resource - inBundle:[NSBundle mainBundle]]; -} - -+ (ANURLConnectionStub *)stubForResource:(NSString *)resource - ofType:(NSString *)type - withRequestURLRegexPatternString:(NSString *)pattern { - return [ANURLConnectionStub stubForResource:resource - ofType:type - withRequestURLRegexPatternString:pattern - inBundle:[NSBundle mainBundle]]; -} - -+ (ANURLConnectionStub *)stubForResource:(NSString *)resource - ofType:(NSString *)type - withRequestURLRegexPatternString:(NSString *)pattern - inBundle:(NSBundle *)bundle { - ANURLConnectionStub *stub = [[ANURLConnectionStub alloc] init]; - stub.responseCode = 200; - stub.requestURLRegexPatternString = pattern; - stub.responseBody = [NSData dataWithContentsOfFile:[bundle pathForResource:resource - ofType:type]]; - return stub; -} - -+ (NSDictionary *)responseForNoBid { - NSMutableDictionary *response = [[NSMutableDictionary alloc] init]; - response[@"status"] = @"ok"; - NSMutableDictionary *adElement = [[NSMutableDictionary alloc] init]; - adElement[@"nobid"] = @"1"; - response[@"tags"] = @[[adElement copy]]; - return [response copy]; -} - -+ (NSDictionary *)responseForStandardInterstitialWithUUID:(NSString *)uuid { - NSMutableDictionary *response = [[NSMutableDictionary alloc] init]; - response[@"status"] = @"ok"; - NSDictionary *adElement = [[self class] adElementForAdType:@"banner" - adSize:CGSizeMake(320.0, 480.0) - uuid:uuid]; - response[@"tags"] = @[adElement]; - return [response copy]; -} - -+ (NSDictionary *)responseForStandardBannerWithAdSize:(CGSize)adSize - uuid:(NSString *)uuid { - NSMutableDictionary *response = [[NSMutableDictionary alloc] init]; - response[@"status"] = @"ok"; - NSDictionary *adElement = [[self class] adElementForAdType:@"banner" - adSize:adSize - uuid:uuid]; - response[@"tags"] = @[adElement]; - return [response copy]; -} - -+ (NSDictionary *)adElementForAdType:(NSString *)type - adSize:(CGSize)adSize - uuid:(NSString *)uuid { - NSMutableDictionary *widthHeightForBanner = [[NSMutableDictionary alloc] init]; - widthHeightForBanner[@"width"] = [@(adSize.width) description]; - widthHeightForBanner[@"height"] = [@(adSize.height) description]; - - NSMutableDictionary *adElement = [[NSMutableDictionary alloc] init]; - adElement[@"banner"] = widthHeightForBanner; - adElement[@"cpm"] = @"1.15"; - - NSMutableDictionary *adElementWrapper = [[NSMutableDictionary alloc] init]; - adElementWrapper[@"ad"] = adElement; - adElementWrapper[@"uuid"] = uuid; - adElementWrapper[@"ut_url"] = @"http://appenxus.com"; - return [adElementWrapper copy]; -} - -@end diff --git a/sdk/PrebidServerAdapter/PBServerAdapter.h b/sdk/PrebidServerAdapter/PBServerAdapter.h deleted file mode 100644 index 064f95ea5..000000000 --- a/sdk/PrebidServerAdapter/PBServerAdapter.h +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import -#import "PBAdUnit.h" -#import "PBHost.h" -#import "PBBidManager.h" -#import "PBBidResponseDelegate.h" - -@interface PBServerAdapter : NSObject - -- (nonnull instancetype)initWithAccountId:(nonnull NSString *)accountId andAdServer:(PBPrimaryAdServerType) adServer; - -- (nonnull instancetype)initWithAccountId:(nonnull NSString *)accountId andHost:(PBServerHost) host andAdServer:(PBPrimaryAdServerType) adServer; - -@property (nonatomic, assign) BOOL isSecure; - - -- (void)requestBidsWithAdUnits:(nullable NSArray *)adUnits - withDelegate:(nonnull id)delegate; - -@end diff --git a/sdk/PrebidServerAdapter/PBServerAdapter.m b/sdk/PrebidServerAdapter/PBServerAdapter.m deleted file mode 100644 index 079c8f1e8..000000000 --- a/sdk/PrebidServerAdapter/PBServerAdapter.m +++ /dev/null @@ -1,186 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import -#import "PrebidCache.h" -#import -#import - -#import "PBBidResponse.h" -#import "PBBidResponseDelegate.h" -#import "PBLogging.h" -#import "PBServerAdapter.h" -#import "PBServerFetcher.h" -#import "PBTargetingParams.h" -#import "PBServerRequestBuilder.h" -#import "PBException.h" - -static NSString *const kAPNAdServerCacheIdKey = @"hb_cache_id"; - -static NSString *const kAPNPrebidServerUrl = @"https://prebid.adnxs.com/pbs/v1/openrtb2/auction"; -static NSString *const kRPPrebidServerUrl = @"https://prebid-server.rubiconproject.com/openrtb2/auction"; -static int const kBatchCount = 10; - -@interface PBServerAdapter () - -@property (nonatomic, strong) NSString *accountId; - -@property (assign) PBPrimaryAdServerType primaryAdServer; - -@property (nonatomic, assign, readwrite) PBServerHost host; - -@end - -@implementation PBServerAdapter - -- (nonnull instancetype)initWithAccountId:(nonnull NSString *)accountId andAdServer:(PBPrimaryAdServerType) adServer{ - if (self = [super init]) { - _accountId = accountId; - _isSecure = TRUE; - _host = PBServerHostAppNexus; - _primaryAdServer = adServer; - } - return self; -} - -- (nonnull instancetype)initWithAccountId:(nonnull NSString *)accountId andHost:(PBServerHost) host andAdServer:(PBPrimaryAdServerType) adServer{ - if (self = [super init]) { - _accountId = accountId; - _isSecure = TRUE; - _host = host; - _primaryAdServer = adServer; - } - return self; -} - -- (void)requestBidsWithAdUnits:(nullable NSArray *)adUnits - withDelegate:(nonnull id)delegate { - - NSURL *hostUrl = [self urlForHost:_host]; - if (hostUrl == nil) { - @throw [PBException exceptionWithName:PBHostInvalidException]; - } - - [[PBServerRequestBuilder sharedInstance] setHostURL:hostUrl]; - - //batch the adunits to group of 10 & send to the server instead of this bulk request - int adUnitsRemaining = (int)[adUnits count]; - int j = 0; - - while(adUnitsRemaining) { - NSRange range = NSMakeRange(j, MIN(kBatchCount, adUnitsRemaining)); - NSArray *subAdUnitArray = [adUnits subarrayWithRange:range]; - adUnitsRemaining-=range.length; - j+=range.length; - - NSURLRequest *request = [[PBServerRequestBuilder sharedInstance] buildRequest:subAdUnitArray withAccountId:self.accountId withSecureParams:self.isSecure]; - - [[PBServerFetcher sharedInstance] makeBidRequest:request withCompletionHandler:^(NSDictionary *adUnitToBidsMap, NSError *error) { - if (error) { - [delegate didCompleteWithError:error]; - return; - } - for (NSString *adUnitId in [adUnitToBidsMap allKeys]) { - NSArray *bidsArray = (NSArray *)[adUnitToBidsMap objectForKey:adUnitId]; - NSMutableArray *bidResponsesArray = [[NSMutableArray alloc] init]; - NSMutableArray * contentsToCache = [[NSMutableArray alloc] init]; - for (NSDictionary *bid in bidsArray) { - NSString *escapedBid = [self escapeJsonString:[self jsonStringFromDictionary:bid]]; - [contentsToCache addObject:escapedBid]; - } - for (int i = 0; i< bidsArray.count; i++) { - NSMutableDictionary *adServerTargetingCopy = [bidsArray[i][@"ext"][@"prebid"][@"targeting"] mutableCopy]; - if (adServerTargetingCopy != nil) { - // Check if resposne has cache id, since prebid server cache would fail for some reason and not set cache id on the response - // If cache id is not present, we do not pass the bid back - bool hasCacheID = NO; - for (NSString *key in adServerTargetingCopy.allKeys) { - if ([key containsString:@"hb_cache_id"]) { - hasCacheID = YES; - } - } - if (hasCacheID) { - PBBidResponse *bidResponse = [PBBidResponse bidResponseWithAdUnitId:adUnitId adServerTargeting:adServerTargetingCopy]; - PBLogDebug(@"Bid Successful with rounded bid targeting keys are %@ for adUnit id is %@", [bidResponse.customKeywords description], adUnitId); - [bidResponsesArray addObject:bidResponse]; - } - } - } - if (bidResponsesArray.count == 0) { - // use code 0 to represent the no bid case for now - [delegate didCompleteWithError:[NSError errorWithDomain:@"prebid.org" code:0 userInfo:nil] ]; - } else { - [delegate didReceiveSuccessResponse:bidResponsesArray]; - } - } - }]; - - } -} - -- (NSString *)jsonStringFromDictionary: (NSDictionary *) dict -{ - //strip all the extra lines in the creative before converting to escaped json string - start - NSMutableDictionary *copiedDict = [[NSMutableDictionary alloc] initWithDictionary:dict]; - - NSString *copiedAdm = (NSString *)copiedDict[@"adm"]; - - NSString *strippedTextLine = [copiedAdm stringByReplacingOccurrencesOfString:@"\n" withString:@""]; - - copiedDict[@"adm"] = strippedTextLine; - //end - do not remove this - NSError *error; - NSData *jsonData = [NSJSONSerialization dataWithJSONObject:copiedDict - options:0 - error:&error]; - if (!jsonData) { - NSLog(@"%s: error: %@", __func__, error.localizedDescription); - return @"{}"; - } else { - return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; - } -} - -- (NSString *) escapeJsonString: (NSString *) aString -{ - NSMutableString *s = [NSMutableString stringWithString:aString]; - - [s replaceOccurrencesOfString:@"\"" withString:@"\\\"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])]; - [s replaceOccurrencesOfString:@"/" withString:@"\\/" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])]; - [s replaceOccurrencesOfString:@"\n" withString:@"\\n" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])]; - [s replaceOccurrencesOfString:@"\b" withString:@"\\b" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])]; - [s replaceOccurrencesOfString:@"\f" withString:@"\\f" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])]; - [s replaceOccurrencesOfString:@"\r" withString:@"\\r" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])]; - [s replaceOccurrencesOfString:@"\t" withString:@"\\t" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [s length])]; - return [NSString stringWithString:s]; -} - -- (NSURL *)urlForHost:(PBServerHost)host { - NSURL *url; - switch (host) { - case PBServerHostAppNexus: - url = [NSURL URLWithString:kAPNPrebidServerUrl]; - break; - case PBServerHostRubicon: - url = [NSURL URLWithString:kRPPrebidServerUrl]; - break; - default: - url = nil; - break; - } - - return url; -} -@end diff --git a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerFetcher.h b/sdk/PrebidServerAdapter/PrebidServerModule/PBServerFetcher.h deleted file mode 100644 index ce6029ace..000000000 --- a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerFetcher.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import - -@interface PBServerFetcher : NSObject - -+ (instancetype)sharedInstance; - -- (void)makeBidRequest:(NSURLRequest *)request withCompletionHandler:(void (^)(NSDictionary *, NSError *))completionHandler; - -@end diff --git a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerFetcher.m b/sdk/PrebidServerAdapter/PrebidServerModule/PBServerFetcher.m deleted file mode 100644 index 0dae7dbe8..000000000 --- a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerFetcher.m +++ /dev/null @@ -1,182 +0,0 @@ - -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBLogging.h" -#import "PBServerFetcher.h" - -@interface PBServerFetcher () - -@property (nonatomic, strong) NSMutableArray *requestTIDs; - -@end - -@implementation PBServerFetcher - -+ (instancetype)sharedInstance { - static dispatch_once_t _dispatchHandle = 0; - static PBServerFetcher *_sharedInstance = nil; - - dispatch_once(&_dispatchHandle, ^{ - if (_sharedInstance == nil) - _sharedInstance = [[PBServerFetcher alloc] init]; - - }); - return _sharedInstance; -} - -- (void)makeBidRequest:(NSURLRequest *)request withCompletionHandler:(void (^)(NSDictionary *, NSError *))completionHandler { - PBLogDebug(@"Bid request to Prebid Server: %@ params: %@", request.URL.absoluteString, [[NSString alloc] initWithData:[request HTTPBody] encoding:NSUTF8StringEncoding]); - NSDictionary *params = [NSJSONSerialization JSONObjectWithData:[request HTTPBody] - options:kNilOptions - error:nil]; - // Map request tids to ad unit codes to check to make sure response lines up - if (self.requestTIDs == nil) { - self.requestTIDs = [[NSMutableArray alloc] init]; - } - @synchronized(self.requestTIDs) { - if(params[@"tid"] != nil){ - [self.requestTIDs addObject:params[@"tid"]]; - } - } - - [NSURLConnection sendAsynchronousRequest:request - queue:[[NSOperationQueue alloc] init] - completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { - if (response != nil && data.length > 0) { - PBLogDebug(@"Bid response from Prebid Server: %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]); - //NSDictionary *adUnitToBids = [self processData:data]; - NSDictionary *openRTBAdUnitBidMap = [self processOpenRTBData:data]; - dispatch_async(dispatch_get_main_queue(), ^{ - completionHandler(openRTBAdUnitBidMap, nil); - }); - } else { - dispatch_async(dispatch_get_main_queue(), ^{ - completionHandler(nil, error); - }); - } - }]; -} - -- (NSDictionary *)processOpenRTBData:(NSData *)data { - NSError *error; - id object = [NSJSONSerialization JSONObjectWithData:data - options:kNilOptions - error:&error]; - if (error) { - PBLogError(@"Error parsing ad server response"); - return [[NSMutableDictionary alloc] init]; - } - if (!object) { - return [[NSMutableDictionary alloc] init]; - } - NSMutableDictionary *adUnitToBidsMap = [[NSMutableDictionary alloc] init]; - if ([object isKindOfClass:[NSDictionary class]]) { - NSDictionary *response = (NSDictionary *)object; - if ([[response objectForKey:@"seatbid"] isKindOfClass:[NSArray class]]) { - NSArray *seatbids = (NSArray *)[response objectForKey:@"seatbid"]; - for (id seatbid in seatbids) { - if ([seatbid isKindOfClass:[NSDictionary class]]) { - NSDictionary *seatbidDict = (NSDictionary *)seatbid; - if ([[seatbidDict objectForKey:@"bid"] isKindOfClass:[NSArray class]]) { - NSArray *bids = (NSArray *)[seatbidDict objectForKey:@"bid"]; - for (id bid in bids) { - if ([bid isKindOfClass:[NSDictionary class]]) { - NSMutableDictionary *bidDict = [[NSMutableDictionary alloc] initWithDictionary:(NSDictionary *)bid]; - [bidDict setObject:seatbid[@"seat"] forKey:@"seat"]; - NSMutableArray *adUnitBids = [[NSMutableArray alloc] init]; - if ([adUnitToBidsMap objectForKey:bidDict[@"impid"]] != nil) { - adUnitBids = [adUnitToBidsMap objectForKey:bidDict[@"impid"]]; - } - [adUnitBids addObject:bidDict]; - [adUnitToBidsMap setObject:adUnitBids forKey:bidDict[@"impid"]]; - } - } - } - } - } - } - } - return adUnitToBidsMap; -} - -// now need to handle OpenRTB response -- (NSDictionary *)processData:(NSData *)data { - NSDictionary *bidMap = [[NSDictionary alloc] init]; - NSError *error; - id object = [NSJSONSerialization JSONObjectWithData:data - options:kNilOptions - error:&error]; - if (error) { - PBLogError(@"Error parsing ad server response"); - return [[NSMutableDictionary alloc] init]; - } - if (!object) { - return [[NSMutableDictionary alloc] init]; - } - if ([object isKindOfClass:[NSDictionary class]]) { - NSDictionary *response = (NSDictionary *)object; - if ([[response objectForKey:@"status"] isKindOfClass:[NSString class]]) { - NSString *status = (NSString *)[response objectForKey:@"status"]; - if ([status isEqualToString:@"OK"]) { - // check to make sure the request tid matches the response tid - NSString *responseTID = (NSString *)[response objectForKey:@"tid"]; - NSMutableArray *requestTIDsToDelete = [NSMutableArray array]; - @synchronized (self.requestTIDs) { - if ([self.requestTIDs containsObject:responseTID]) { - [requestTIDsToDelete addObject:responseTID]; - bidMap = [self mapBidsToAdUnits:response]; - } else { - PBLogError(@"Response tid did not match request tid %@", response); - } - [self.requestTIDs removeObjectsInArray:requestTIDsToDelete]; - } - } - else { - PBLogError(@"Received bad status response from the ad server %@", response); - } - } - } else { - PBLogError(@"Unexpected response structure received from ad server %@", object); - } - return bidMap; -} - -- (NSDictionary *)mapBidsToAdUnits:(NSDictionary *)responseDict { - NSDictionary *response = (NSDictionary *)responseDict; - - NSMutableDictionary *adUnitToBidsMap = [[NSMutableDictionary alloc] init]; - if ([[response objectForKey:@"bids"] isKindOfClass:[NSArray class]]) { - NSArray *bids = (NSArray *)[response objectForKey:@"bids"]; - [bids enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - if ([obj isKindOfClass:[NSDictionary class]]) { - NSDictionary *bid = (NSDictionary *)obj; - NSMutableArray *bidsArray = [adUnitToBidsMap objectForKey:bid[@"code"]]; - if (bidsArray) { - [bidsArray addObject:bid]; - [adUnitToBidsMap setObject:bidsArray forKey:bid[@"code"]]; - } else { - NSMutableArray *newBidsArray = [[NSMutableArray alloc] initWithArray:@[bid]]; - [adUnitToBidsMap setObject:newBidsArray forKey:bid[@"code"]]; - } - } - }]; - return adUnitToBidsMap; - } - - return [[NSMutableDictionary alloc] init]; -} - -@end diff --git a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerGlobal.h b/sdk/PrebidServerAdapter/PrebidServerModule/PBServerGlobal.h deleted file mode 100644 index 28cd14051..000000000 --- a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerGlobal.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import - -#pragma mark Global Methods -NSString *PBSUserAgent(void); -NSString *PBSDeviceModel(void); - -BOOL PBSAdvertisingTrackingEnabled(void); - -NSString *PBSUDID(void); -NSString *PBSConvertToNSString(id value); -NSArray *PBSConvertToNSArray(id value); - -@interface PBServerGlobal : NSObject - -@end diff --git a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerGlobal.m b/sdk/PrebidServerAdapter/PrebidServerModule/PBServerGlobal.m deleted file mode 100644 index 234ae3f14..000000000 --- a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerGlobal.m +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBServerGlobal.h" -#import -#import -#import - -static NSString *const kIFASentinelValue = @"00000000-0000-0000-0000-000000000000"; - -NSString *PBSUserAgent() { - static NSString *userAgent = nil; - if (userAgent == nil) { - dispatch_async(dispatch_get_main_queue(), ^{ - UIWebView *webview = [[UIWebView alloc] init]; - userAgent = [[webview stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"] copy]; - webview.delegate = nil; - [webview stopLoading]; - }); - } - return userAgent; -} - -NSString *PBSDeviceModel() { - struct utsname systemInfo; - uname(&systemInfo); - - return @(systemInfo.machine); -} - - -NSString *PBSUDID() { - static NSString *udidComponent = @""; - if ([udidComponent isEqualToString:@""]) { - NSString *advertisingIdentifier = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString]; - if (advertisingIdentifier && ![advertisingIdentifier isEqualToString:kIFASentinelValue]) { - udidComponent = advertisingIdentifier; - } - } - return udidComponent; -} - -BOOL PBSAdvertisingTrackingEnabled() { - // If a user does turn this off, use the unique identifier *only* for the - // following: - // - Frequency capping - // - Conversion events - // - Estimating number of unique users - // - Security and fraud detection - // - Debugging - return [ASIdentifierManager sharedManager].isAdvertisingTrackingEnabled; -} - -NSArray *PBSConvertToNSArray(id value) { - if ([value isKindOfClass:[NSArray class]]) - return value; - if ([value respondsToSelector:@selector(stringValue)]) { - return [value array]; - } - return nil; -} - -NSString *PBSConvertToNSString(id value) { - if ([value isKindOfClass:[NSString class]]) - return value; - if ([value respondsToSelector:@selector(stringValue)]) { - return [value stringValue]; - } - return nil; -} - -@implementation PBServerGlobal - -+ (void)load { - PBSUserAgent(); -} - -@end diff --git a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerLocation.h b/sdk/PrebidServerAdapter/PrebidServerModule/PBServerLocation.h deleted file mode 100644 index d170e7322..000000000 --- a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerLocation.h +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import - -@interface PBServerLocation : NSObject - -/** - The latitude of the user's location. This must be a valid - latitude, i.e., between -90.0 and 90.0. - */ -@property (nonatomic, readwrite, assign) CGFloat latitude; - -/** - The longitude of the user's location. This must be a valid - longitude, i.e., between -180.0 and 180.0. - */ -@property (nonatomic, readwrite, assign) CGFloat longitude; - -/** - The time when the user was in this location. If nil, defaults to - the current time. - */ -@property (nonatomic, readwrite, strong) NSDate *timestamp; - -/** - Determines the size of one side of the ``rectangle'' inside which - the user is located. If 0, defaults to 100 meters. If negative, - the location will be invalidated. - */ -@property (nonatomic, readwrite, assign) CGFloat horizontalAccuracy; - -/** - The precision of the location. Returns -1 if the location has unlimited - precision. - */ -@property (nonatomic, readonly, assign) NSInteger precision; - -/** - Returns an PBServerLocation instance generated from a user's location. It is - expected that the latitude, longitude, timestamp, and horizontal accuracy - parameters will be passed from a CLLocation instance. - - Returns nil if invalid location data is passed in (see - the property definitions above for what constitutes invalid data). - */ -+ (PBServerLocation *)getLocationWithLatitude:(CGFloat)latitude - longitude:(CGFloat)longitude - timestamp:(NSDate *)timestamp - horizontalAccuracy:(CGFloat)horizontalAccuracy; - -/** - Returns an PBServerLocation instance with latitude and longitude values rounded to the - number of decimal places specified in precision. It is expected that the latitude, - longitude, timestamp, and horizontal accuracy parameters will be passed directly - from a CLLocation instance. - - Returns nil if invalid location data is passed in (see the property definitions - above for what constitutes invalid data). In addition, if the precision is: - - ** Equal to -1, no rounding will occur. - - ** Greater than 6, the latitude & longitude values will be rounded to 6 decimal places. - */ -+ (PBServerLocation *)getLocationWithLatitude:(CGFloat)latitude - longitude:(CGFloat)longitude - timestamp:(NSDate *)timestamp - horizontalAccuracy:(CGFloat)horizontalAccuracy - precision:(NSInteger)precision; - -@end diff --git a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerLocation.m b/sdk/PrebidServerAdapter/PrebidServerModule/PBServerLocation.m deleted file mode 100644 index 40acefbe2..000000000 --- a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerLocation.m +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright 2017 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import "PBServerLocation.h" - -static NSInteger const kPBSLocationMaxLocationPrecision = 6; -static NSInteger const kPBSLocationDefaultHorizontalAccuracy = 100; - -@interface PBServerLocation () - -@property (nonatomic, readwrite, assign) NSInteger precision; - -@end - -@implementation PBServerLocation - -+ (PBServerLocation *)getLocationWithLatitude:(CGFloat)latitude - longitude:(CGFloat)longitude - timestamp:(NSDate *)timestamp - horizontalAccuracy:(CGFloat)horizontalAccuracy { - return [PBServerLocation getLocationWithLatitude:latitude - longitude:longitude - timestamp:timestamp - horizontalAccuracy:horizontalAccuracy - precision:-1]; -} - -+ (PBServerLocation *)getLocationWithLatitude:(CGFloat)latitude - longitude:(CGFloat)longitude - timestamp:(NSDate *)timestamp - horizontalAccuracy:(CGFloat)horizontalAccuracy - precision:(NSInteger)precision { - BOOL invalidLatitude = latitude < -90 || latitude > 90; - BOOL invalidLongitude = longitude < -180 || longitude > 180; - BOOL invalidHorizontalAccuracy = horizontalAccuracy < 0; - if (invalidLatitude || invalidLongitude || invalidHorizontalAccuracy) { - return nil; - } - - BOOL invalidPrecision = precision < -1; - if (invalidPrecision) { - //Log - } - - if (horizontalAccuracy == 0) - horizontalAccuracy = kPBSLocationDefaultHorizontalAccuracy; - - if (timestamp == nil) - timestamp = [NSDate date]; - - PBServerLocation *location = [[PBServerLocation alloc] init]; - if (precision <= -1) { - location.latitude = latitude; - location.longitude = longitude; - location.precision = -1; - } else { - NSInteger effectivePrecision = precision; - if (precision > kPBSLocationMaxLocationPrecision) { - effectivePrecision = kPBSLocationMaxLocationPrecision; - } - - CGFloat precisionFloat = powf(10, effectivePrecision); - location.latitude = roundf(latitude * precisionFloat) / precisionFloat; - location.longitude = roundf(longitude * precisionFloat) / precisionFloat; - location.precision = effectivePrecision; - } - location.timestamp = timestamp; - location.horizontalAccuracy = horizontalAccuracy; - return location; -} - -@end diff --git a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerReachability.h b/sdk/PrebidServerAdapter/PrebidServerModule/PBServerReachability.h deleted file mode 100644 index a2caf1045..000000000 --- a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerReachability.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - File: Reachability.h - Abstract: Basic demonstration of how to use the SystemConfiguration Reachablity - APIs. - Version: 3.5 - - Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple - Inc. ("Apple") in consideration of your agreement to the following - terms, and your use, installation, modification or redistribution of - this Apple software constitutes acceptance of these terms. If you do - not agree with these terms, please do not use, install, modify or - redistribute this Apple software. - - In consideration of your agreement to abide by the following terms, and - subject to these terms, Apple grants you a personal, non-exclusive - license, under Apple's copyrights in this original Apple software (the - "Apple Software"), to use, reproduce, modify and redistribute the Apple - Software, with or without modifications, in source and/or binary forms; - provided that if you redistribute the Apple Software in its entirety and - without modifications, you must retain this notice and the following - text and disclaimers in all such redistributions of the Apple Software. - Neither the name, trademarks, service marks or logos of Apple Inc. may - be used to endorse or promote products derived from the Apple Software - without specific prior written permission from Apple. Except as - expressly stated in this notice, no other rights or licenses, express or - implied, are granted by Apple herein, including but not limited to any - patent rights that may be infringed by your derivative works or by other - works in which the Apple Software may be incorporated. - - The Apple Software is provided by Apple on an "AS IS" basis. APPLE - MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION - THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND - OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. - - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, - MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED - AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), - STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2014 Apple Inc. All Rights Reserved. - - */ -#import -#import -#import - -typedef enum : NSInteger { - PBSNetworkStatusNotReachable = 0, - PBSNetworkStatusReachableViaWiFi, - PBSNetworkStatusReachableViaWWAN -} PBSNetworkStatus; - -extern NSString *kPBSReachabilityChangedNotification; - -@interface PBServerReachability : NSObject - -/*! - * Use to check the reachability of a given host name. - */ -+ (instancetype)reachabilityWithHostName:(NSString *)hostName; - -/*! - * Use to check the reachability of a given IP address. - */ -+ (instancetype)reachabilityWithAddress:(const struct sockaddr_in *)hostAddress; - -/*! - * Checks whether the default route is available. Should be used by applications - * that do not connect to a particular host. - */ -+ (instancetype)reachabilityForInternetConnection; - -/*! - * Checks whether a local WiFi connection is available. - */ -+ (instancetype)reachabilityForLocalWiFi; - -/*! - * Start listening for reachability notifications on the current run loop. - */ -- (BOOL)startNotifier; -- (void)stopNotifier; - -- (PBSNetworkStatus)currentReachabilityStatus; - -/*! - * WWAN may be available, but not active until a connection has been - * established. WiFi may require a connection for VPN on Demand. - */ -- (BOOL)connectionRequired; - -@end diff --git a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerReachability.m b/sdk/PrebidServerAdapter/PrebidServerModule/PBServerReachability.m deleted file mode 100644 index 2aa84c344..000000000 --- a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerReachability.m +++ /dev/null @@ -1,272 +0,0 @@ -/* - File: Reachability.m - Abstract: Basic demonstration of how to use the SystemConfiguration Reachablity - APIs. - Version: 3.5 - - Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple - Inc. ("Apple") in consideration of your agreement to the following - terms, and your use, installation, modification or redistribution of - this Apple software constitutes acceptance of these terms. If you do - not agree with these terms, please do not use, install, modify or - redistribute this Apple software. - - In consideration of your agreement to abide by the following terms, and - subject to these terms, Apple grants you a personal, non-exclusive - license, under Apple's copyrights in this original Apple software (the - "Apple Software"), to use, reproduce, modify and redistribute the Apple - Software, with or without modifications, in source and/or binary forms; - provided that if you redistribute the Apple Software in its entirety and - without modifications, you must retain this notice and the following - text and disclaimers in all such redistributions of the Apple Software. - Neither the name, trademarks, service marks or logos of Apple Inc. may - be used to endorse or promote products derived from the Apple Software - without specific prior written permission from Apple. Except as - expressly stated in this notice, no other rights or licenses, express or - implied, are granted by Apple herein, including but not limited to any - patent rights that may be infringed by your derivative works or by other - works in which the Apple Software may be incorporated. - - The Apple Software is provided by Apple on an "AS IS" basis. APPLE - MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION - THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS - FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND - OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. - - IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL - OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, - MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED - AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), - STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - Copyright (C) 2014 Apple Inc. All Rights Reserved. - - */ - -#import -#import -#import -#import - -#import - -#import "PBServerReachability.h" - -NSString *kPBSReachabilityChangedNotification = @"kPBSNetworkReachabilityChangedNotification"; - -#pragma mark - Supporting functions - -#define kShouldPrintReachabilityFlags 0 - -static void PrintReachabilityFlags(SCNetworkReachabilityFlags flags, - const char *comment) { -#if kShouldPrintReachabilityFlags - - NSLog(@"Reachability Flag Status: %c%c %c%c%c%c%c%c%c %s\n", - (flags & kSCNetworkReachabilityFlagsIsWWAN) ? 'W' : '-', - (flags & kSCNetworkReachabilityFlagsReachable) ? 'R' : '-', - - (flags & kSCNetworkReachabilityFlagsTransientConnection) ? 't' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionRequired) ? 'c' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) ? 'C' : '-', - (flags & kSCNetworkReachabilityFlagsInterventionRequired) ? 'i' : '-', - (flags & kSCNetworkReachabilityFlagsConnectionOnDemand) ? 'D' : '-', - (flags & kSCNetworkReachabilityFlagsIsLocalAddress) ? 'l' : '-', - (flags & kSCNetworkReachabilityFlagsIsDirect) ? 'd' : '-', comment); -#endif -} - -static void ReachabilityCallback(SCNetworkReachabilityRef target, - SCNetworkReachabilityFlags flags, void *info) { -#pragma unused(target, flags) - NSCAssert(info != NULL, @"info was NULL in ReachabilityCallback"); - NSCAssert([(__bridge NSObject *)info isKindOfClass:[PBServerReachability class]], - @"info was wrong class in ReachabilityCallback"); - - PBServerReachability *noteObject = (__bridge PBServerReachability *)info; - // Post a notification to notify the client that the network reachability - // changed. - [[NSNotificationCenter defaultCenter] postNotificationName:kPBSReachabilityChangedNotification - object:noteObject]; -} - -#pragma mark - Reachability implementation - -@implementation PBServerReachability { - BOOL _alwaysReturnLocalWiFiStatus; // default is NO - SCNetworkReachabilityRef _reachabilityRef; -} - -+ (instancetype)reachabilityWithHostName:(NSString *)hostName { - PBServerReachability *returnValue = NULL; - SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithName(NULL, [hostName UTF8String]); - if (reachability != NULL) { - returnValue = [[self alloc] init]; - if (returnValue != NULL) { - returnValue->_reachabilityRef = reachability; - returnValue->_alwaysReturnLocalWiFiStatus = NO; - } - } - return returnValue; -} - -+ (instancetype)reachabilityWithAddress:(const struct sockaddr_in *)hostAddress { - SCNetworkReachabilityRef reachability = SCNetworkReachabilityCreateWithAddress(kCFAllocatorDefault, (const struct sockaddr *)hostAddress); - - PBServerReachability *returnValue = NULL; - - if (reachability != NULL) { - returnValue = [[self alloc] init]; - if (returnValue != NULL) { - returnValue->_reachabilityRef = reachability; - returnValue->_alwaysReturnLocalWiFiStatus = NO; - } - } - return returnValue; -} - -+ (instancetype)reachabilityForInternetConnection { - struct sockaddr_in zeroAddress; - bzero(&zeroAddress, sizeof(zeroAddress)); - zeroAddress.sin_len = sizeof(zeroAddress); - zeroAddress.sin_family = AF_INET; - - return [self reachabilityWithAddress:&zeroAddress]; -} - -+ (instancetype)reachabilityForLocalWiFi { - struct sockaddr_in localWifiAddress; - bzero(&localWifiAddress, sizeof(localWifiAddress)); - localWifiAddress.sin_len = sizeof(localWifiAddress); - localWifiAddress.sin_family = AF_INET; - - // IN_LINKLOCALNETNUM is defined in as 169.254.0.0. - localWifiAddress.sin_addr.s_addr = htonl(IN_LINKLOCALNETNUM); - - PBServerReachability *returnValue = [self reachabilityWithAddress:&localWifiAddress]; - if (returnValue != NULL) { - returnValue->_alwaysReturnLocalWiFiStatus = YES; - } - - return returnValue; -} - -#pragma mark - Start and stop notifier - -- (BOOL)startNotifier { - BOOL returnValue = NO; - SCNetworkReachabilityContext context = {0, (__bridge void *)(self), NULL, - NULL, NULL}; - - if (SCNetworkReachabilitySetCallback(_reachabilityRef, ReachabilityCallback, &context)) { - if (SCNetworkReachabilityScheduleWithRunLoop(_reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode)) { - returnValue = YES; - } - } - - return returnValue; -} - -- (void)stopNotifier { - if (_reachabilityRef != NULL) { - SCNetworkReachabilityUnscheduleFromRunLoop(_reachabilityRef, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); - } -} - -- (void)dealloc { - [self stopNotifier]; - if (_reachabilityRef != NULL) { - CFRelease(_reachabilityRef); - } -} - -#pragma mark - Network Flag Handling - -- (PBSNetworkStatus)localWiFiStatusForFlags:(SCNetworkReachabilityFlags)flags { - PrintReachabilityFlags(flags, "localWiFiStatusForFlags"); - PBSNetworkStatus returnValue = PBSNetworkStatusNotReachable; - - if ((flags & kSCNetworkReachabilityFlagsReachable) && - (flags & kSCNetworkReachabilityFlagsIsDirect)) { - returnValue = PBSNetworkStatusReachableViaWiFi; - } - - return returnValue; -} - -- (PBSNetworkStatus)networkStatusForFlags:(SCNetworkReachabilityFlags)flags { - PrintReachabilityFlags(flags, "networkStatusForFlags"); - if ((flags & kSCNetworkReachabilityFlagsReachable) == 0) { - // The target host is not reachable. - return PBSNetworkStatusNotReachable; - } - - PBSNetworkStatus returnValue = PBSNetworkStatusNotReachable; - - if ((flags & kSCNetworkReachabilityFlagsConnectionRequired) == 0) { - /* - If the target host is reachable and no connection is required then we'll assume - (for now) that you're on Wi-Fi... - */ - returnValue = PBSNetworkStatusReachableViaWiFi; - } - - if ((((flags & kSCNetworkReachabilityFlagsConnectionOnDemand) != 0) || - (flags & kSCNetworkReachabilityFlagsConnectionOnTraffic) != 0)) { - /* - ... and the connection is on-demand (or on-traffic) if the calling - application is using the CFSocketStream or higher APIs... - */ - - if ((flags & kSCNetworkReachabilityFlagsInterventionRequired) == 0) { - /* - ... and no [user] intervention is needed... - */ - returnValue = PBSNetworkStatusReachableViaWiFi; - } - } - - if ((flags & kSCNetworkReachabilityFlagsIsWWAN) == kSCNetworkReachabilityFlagsIsWWAN) { - /* - ... but WWAN connections are OK if the calling application is using the - CFNetwork APIs. - */ - returnValue = PBSNetworkStatusReachableViaWWAN; - } - - return returnValue; -} - -- (BOOL)connectionRequired { - NSAssert(_reachabilityRef != NULL, - @"connectionRequired called with NULL reachabilityRef"); - SCNetworkReachabilityFlags flags; - - if (SCNetworkReachabilityGetFlags(_reachabilityRef, &flags)) { - return (flags & kSCNetworkReachabilityFlagsConnectionRequired); - } - - return NO; -} - -- (PBSNetworkStatus)currentReachabilityStatus { - NSAssert(_reachabilityRef != NULL, - @"currentNetworkStatus called with NULL SCNetworkReachabilityRef"); - PBSNetworkStatus returnValue = PBSNetworkStatusNotReachable; - SCNetworkReachabilityFlags flags; - - if (SCNetworkReachabilityGetFlags(_reachabilityRef, &flags)) { - if (_alwaysReturnLocalWiFiStatus) { - returnValue = [self localWiFiStatusForFlags:flags]; - } else { - returnValue = [self networkStatusForFlags:flags]; - } - } - - return returnValue; -} - -@end diff --git a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerRequestBuilder.h b/sdk/PrebidServerAdapter/PrebidServerModule/PBServerRequestBuilder.h deleted file mode 100644 index 81003f2b4..000000000 --- a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerRequestBuilder.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright 2018 Prebid.org, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#import -#import "PBAdUnit.h" - -@interface PBServerRequestBuilder : NSObject - -@property (nonatomic, assign, readwrite) NSURL * _Nonnull hostURL; - -+ (instancetype _Nullable )sharedInstance; - - -- (NSURLRequest *_Nullable)buildRequest:(nullable NSArray *)adUnits withAccountId:(NSString *_Nullable) accountID withSecureParams:(BOOL) isSecure; - -@end diff --git a/sdk/PrebidServerAdapter/ReadMe.md b/sdk/PrebidServerAdapter/ReadMe.md deleted file mode 100644 index cc70a5cf8..000000000 --- a/sdk/PrebidServerAdapter/ReadMe.md +++ /dev/null @@ -1,70 +0,0 @@ -# A sample Open RTB 2.5 spec compliant request that Prebid Server Adapter would send out is as following: -``` -{ - "device": { - "w": 375, - "h": 667, - "ifa": "9F8C747A-E09B-424F-8397-99390B75D2E1", - "devtime": 1517414136, - "osv": "10.2", - "lmt": 0, - "connectiontype": 1, - "os": "iOS", - "pxratio": 2, - "make": "Apple", - "ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 10_2 like Mac OS X) AppleWebKit/602.3.12 (KHTML, like Gecko) Mobile/14C89", - "model": "x86_64" - }, - "source": { - "tid": "123" - }, - "app": { - "bundle": "AppNexus.PrebidMobileDemo", - "ext": { - "prebid": { - "version": "0.1.1", - "source": "prebid-mobile" - } - }, - "publisher": { - "id": "aecd6ef7-b992-4e99-9bb8-65e2d984e1dd" - }, - "ver": "1.0" - }, - "id": "D80D182A-5984-4503-B16F-1CC358A37C59", - "imp": [ - { - "id": "HomeScreen", - "ext": { - "prebid": { - "storedrequest": { - "id": "eebc307d-7f76-45d6-a7a7-68985169b138" - } - } - }, - "secure": 1, - "banner": { - "format": [ - { - "w": 300, - "h": 250 - } - ] - } - } - ], - "ext": { - "prebid": { - "targeting": { - "pricegranularity": "medium", - "lengthmax": 20 - } - } - }, - "user": { - "yob": 1993, - "gender": "F" - } -} - -``` diff --git a/src/PrebidMobile/PrebidMobile.xcodeproj/project.pbxproj b/src/PrebidMobile/PrebidMobile.xcodeproj/project.pbxproj new file mode 100644 index 000000000..ad394e9b1 --- /dev/null +++ b/src/PrebidMobile/PrebidMobile.xcodeproj/project.pbxproj @@ -0,0 +1,765 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + 600072FF21BAFD2F00F4738B /* Dispatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 600072FE21BAFD2F00F4738B /* Dispatcher.swift */; }; + 600CF0702208963500C95176 /* UtilsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 600CF06F2208963500C95176 /* UtilsTests.swift */; }; + 600CF13E220CDFA700C95176 /* responseinvalidSize.json in Resources */ = {isa = PBXBuildFile; fileRef = 600CF13D220CDFA700C95176 /* responseinvalidSize.json */; }; + 6013E3F22214A4CA00FEE2B1 /* Location.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6013E3F12214A4CA00FEE2B1 /* Location.swift */; }; + 6013E3F82215C82900FEE2B1 /* CLLocationManager+Swizzle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6013E3F72215C82900FEE2B1 /* CLLocationManager+Swizzle.swift */; }; + 6013E3FA2215C92C00FEE2B1 /* MockCLLocationManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6013E3F92215C92C00FEE2B1 /* MockCLLocationManager.swift */; }; + 6062B19C218243FA00CE1BA3 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6062B19B218243FA00CE1BA3 /* CoreLocation.framework */; }; + 6062B1A421835DF300CE1BA3 /* Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6062B1A321835DF300CE1BA3 /* Logging.swift */; }; + 6062B1AC21878CFB00CE1BA3 /* AdUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6062B1AB21878CFB00CE1BA3 /* AdUnit.swift */; }; + 6062B1AE2188783B00CE1BA3 /* InterstitialAdUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6062B1AD2188783B00CE1BA3 /* InterstitialAdUnit.swift */; }; + 6062B1B021889EC600CE1BA3 /* Global.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6062B1AF21889EC600CE1BA3 /* Global.swift */; }; + 6062B1B82188EF8300CE1BA3 /* BidManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6062B1B72188EF8300CE1BA3 /* BidManager.swift */; }; + 6062B1BC2188F6C200CE1BA3 /* RequestBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6062B1BB2188F6C200CE1BA3 /* RequestBuilder.swift */; }; + 6062B1C3218BFC7A00CE1BA3 /* Reachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6062B1C2218BFC7A00CE1BA3 /* Reachability.swift */; }; + 606FAC2621FFB20A008EAE5E /* TargetingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 606FAC2521FFB20A008EAE5E /* TargetingTests.swift */; }; + 606FAC282200AD2C008EAE5E /* PrebidTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 606FAC272200AD2C008EAE5E /* PrebidTests.swift */; }; + 606FAC4A2201F248008EAE5E /* AdUnitTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 606FAC492201F248008EAE5E /* AdUnitTests.swift */; }; + 606FAC5222022932008EAE5E /* ExAdUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 606FAC5122022932008EAE5E /* ExAdUnit.swift */; }; + 607B047A2194AC79000C0879 /* BidResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607B04792194AC79000C0879 /* BidResponse.swift */; }; + 60C038192204AF5D0082B32C /* NSObject+Swizzling.m in Sources */ = {isa = PBXBuildFile; fileRef = 979177D72201F40300E624CE /* NSObject+Swizzling.m */; }; + 60C0381A2204AF5D0082B32C /* PBTestGlobal.m in Sources */ = {isa = PBXBuildFile; fileRef = 979177D62201F40300E624CE /* PBTestGlobal.m */; }; + 60C0381B2204AF5D0082B32C /* NSURLRequest+HTTPBodyTesting.m in Sources */ = {isa = PBXBuildFile; fileRef = 979177D22201F3EE00E624CE /* NSURLRequest+HTTPBodyTesting.m */; }; + 60C0381C2204AF5D0082B32C /* PBHTTPStubbingManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 979177CD2201F3E500E624CE /* PBHTTPStubbingManager.m */; }; + 60C0381D2204AF5D0082B32C /* PBHTTPStubURLProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = 979177C72201F3E500E624CE /* PBHTTPStubURLProtocol.m */; }; + 60C0381E2204AF5D0082B32C /* PBURLConnectionStub.m in Sources */ = {isa = PBXBuildFile; fileRef = 979177CC2201F3E500E624CE /* PBURLConnectionStub.m */; }; + 60C0381F2204AF5D0082B32C /* DispatcherTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 979177962201AF5F00E624CE /* DispatcherTests.swift */; }; + 60C038202204AF5D0082B32C /* BidManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9791779A2201B32200E624CE /* BidManagerTests.swift */; }; + 60C038212204AF5D0082B32C /* RequestBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 606FAC1E21FFAF46008EAE5E /* RequestBuilderTests.swift */; }; + 60C038242204AF5D0082B32C /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97826AA621FB4F1B001E2C05 /* Constants.swift */; }; + 60C038252204AFA90082B32C /* PBURLConnectionStub+NSURLSessionConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 979177C92201F3E500E624CE /* PBURLConnectionStub+NSURLSessionConfiguration.m */; }; + 60C038262204AFE20082B32C /* BannerAdUnitTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97F29999220056D10072E0C0 /* BannerAdUnitTests.swift */; }; + 60C038272204AFE50082B32C /* InterstItialAdUnitTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9757A984220076CF00A3F8F8 /* InterstItialAdUnitTests.swift */; }; + 60C038342204F02C0082B32C /* responseIncorrectFormat.json in Resources */ = {isa = PBXBuildFile; fileRef = 97EE4C6722035E57006FEFA2 /* responseIncorrectFormat.json */; }; + 60C038352204F02C0082B32C /* responseInvalidAccountId.json in Resources */ = {isa = PBXBuildFile; fileRef = 97EE4C6322035DD1006FEFA2 /* responseInvalidAccountId.json */; }; + 60C038362204F02C0082B32C /* responseInvalidConfigId.json in Resources */ = {isa = PBXBuildFile; fileRef = 97EE4C6422035DD1006FEFA2 /* responseInvalidConfigId.json */; }; + 60C038372204F02C0082B32C /* noBidResponse.json in Resources */ = {isa = PBXBuildFile; fileRef = 979C2F9922030606001F1FCC /* noBidResponse.json */; }; + 60C038382204F02C0082B32C /* requestPBM.json in Resources */ = {isa = PBXBuildFile; fileRef = 979177A22201B43300E624CE /* requestPBM.json */; }; + 60C038392204F02C0082B32C /* responsePBM.json in Resources */ = {isa = PBXBuildFile; fileRef = 979177A12201B43300E624CE /* responsePBM.json */; }; + 60D792FC217E229B0080F428 /* PrebidMobile.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60D792F2217E229A0080F428 /* PrebidMobile.framework */; }; + 60D79301217E229B0080F428 /* PrebidMobileTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60D79300217E229B0080F428 /* PrebidMobileTests.swift */; }; + 60D79303217E229B0080F428 /* PrebidMobile.h in Headers */ = {isa = PBXBuildFile; fileRef = 60D792F5217E229A0080F428 /* PrebidMobile.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 60D7930D217E23F90080F428 /* Prebid.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60D7930C217E23F90080F428 /* Prebid.swift */; }; + 60D79310217E27960080F428 /* Host.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60D7930F217E27960080F428 /* Host.swift */; }; + 60D79312217E2CF20080F428 /* BannerAdUnit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60D79311217E2CF20080F428 /* BannerAdUnit.swift */; }; + 60D79314217E31150080F428 /* ResultCode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60D79313217E31150080F428 /* ResultCode.swift */; }; + 60D79316217E39D90080F428 /* Targeting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60D79315217E39D90080F428 /* Targeting.swift */; }; + 60D79318217F7F3E0080F428 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60D79317217F7F3E0080F428 /* Constants.swift */; }; + 60EE7B0621F26329000B12A8 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60EE7B0521F26329000B12A8 /* Utils.swift */; }; + F5400CB22209E8210018F6B1 /* responseInvalidResponseWithoutCacheId.json in Resources */ = {isa = PBXBuildFile; fileRef = F5400CB12209E8210018F6B1 /* responseInvalidResponseWithoutCacheId.json */; }; + F5400CB42209E9B40018F6B1 /* PrebidServerOneBidFromAppNexusOneBidFromRubicon.json in Resources */ = {isa = PBXBuildFile; fileRef = F5400CB32209E9B40018F6B1 /* PrebidServerOneBidFromAppNexusOneBidFromRubicon.json */; }; + F5400CB62209EBF50018F6B1 /* PrebidServerValidResponseAppNexusNoCacheIdAndRunbiconHasCacheId.json in Resources */ = {isa = PBXBuildFile; fileRef = F5400CB52209EBF50018F6B1 /* PrebidServerValidResponseAppNexusNoCacheIdAndRunbiconHasCacheId.json */; }; + F5400CB82209F19B0018F6B1 /* responseInvalidNoTopCacheId.json in Resources */ = {isa = PBXBuildFile; fileRef = F5400CB72209F19B0018F6B1 /* responseInvalidNoTopCacheId.json */; }; + F543D52F220E101B00F1EF8F /* responseValidTwoBidsOnTheSameSeat.json in Resources */ = {isa = PBXBuildFile; fileRef = F543D52E220E101A00F1EF8F /* responseValidTwoBidsOnTheSameSeat.json */; }; + F543D532220E193200F1EF8F /* noBidResponseTmaxTooLarge.json in Resources */ = {isa = PBXBuildFile; fileRef = F543D530220E193200F1EF8F /* noBidResponseTmaxTooLarge.json */; }; + F543D533220E193200F1EF8F /* noBidResponseNoTmax.json in Resources */ = {isa = PBXBuildFile; fileRef = F543D531220E193200F1EF8F /* noBidResponseNoTmax.json */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 60D792FD217E229B0080F428 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 60D792E9217E229A0080F428 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 60D792F1217E229A0080F428; + remoteInfo = PrebidMobile; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 600072FE21BAFD2F00F4738B /* Dispatcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dispatcher.swift; sourceTree = ""; }; + 600CF06F2208963500C95176 /* UtilsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UtilsTests.swift; sourceTree = ""; }; + 600CF13D220CDFA700C95176 /* responseinvalidSize.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = responseinvalidSize.json; sourceTree = ""; }; + 6013E3F12214A4CA00FEE2B1 /* Location.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Location.swift; sourceTree = ""; }; + 6013E3F72215C82900FEE2B1 /* CLLocationManager+Swizzle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CLLocationManager+Swizzle.swift"; sourceTree = ""; }; + 6013E3F92215C92C00FEE2B1 /* MockCLLocationManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockCLLocationManager.swift; sourceTree = ""; }; + 6062B19B218243FA00CE1BA3 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; + 6062B1A321835DF300CE1BA3 /* Logging.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logging.swift; sourceTree = ""; }; + 6062B1AB21878CFB00CE1BA3 /* AdUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdUnit.swift; sourceTree = ""; }; + 6062B1AD2188783B00CE1BA3 /* InterstitialAdUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterstitialAdUnit.swift; sourceTree = ""; }; + 6062B1AF21889EC600CE1BA3 /* Global.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Global.swift; sourceTree = ""; }; + 6062B1B72188EF8300CE1BA3 /* BidManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = BidManager.swift; path = PrebidMobile/BidManager.swift; sourceTree = SOURCE_ROOT; }; + 6062B1BB2188F6C200CE1BA3 /* RequestBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestBuilder.swift; sourceTree = ""; }; + 6062B1C2218BFC7A00CE1BA3 /* Reachability.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Reachability.swift; sourceTree = ""; }; + 606FAC1E21FFAF46008EAE5E /* RequestBuilderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestBuilderTests.swift; sourceTree = ""; }; + 606FAC2521FFB20A008EAE5E /* TargetingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TargetingTests.swift; sourceTree = ""; }; + 606FAC272200AD2C008EAE5E /* PrebidTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrebidTests.swift; sourceTree = ""; }; + 606FAC492201F248008EAE5E /* AdUnitTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdUnitTests.swift; sourceTree = ""; }; + 606FAC5122022932008EAE5E /* ExAdUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExAdUnit.swift; sourceTree = ""; }; + 607B04792194AC79000C0879 /* BidResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BidResponse.swift; sourceTree = ""; }; + 60C0382B2204BB190082B32C /* PrebidMobileTest-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "PrebidMobileTest-Bridging-Header.h"; sourceTree = ""; }; + 60D792F2217E229A0080F428 /* PrebidMobile.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PrebidMobile.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 60D792F5217E229A0080F428 /* PrebidMobile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PrebidMobile.h; sourceTree = ""; }; + 60D792F6217E229A0080F428 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 60D792FB217E229B0080F428 /* PrebidMobileTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PrebidMobileTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 60D79300217E229B0080F428 /* PrebidMobileTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrebidMobileTests.swift; sourceTree = ""; }; + 60D79302217E229B0080F428 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 60D7930C217E23F90080F428 /* Prebid.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Prebid.swift; sourceTree = ""; }; + 60D7930F217E27960080F428 /* Host.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Host.swift; sourceTree = ""; }; + 60D79311217E2CF20080F428 /* BannerAdUnit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BannerAdUnit.swift; sourceTree = ""; }; + 60D79313217E31150080F428 /* ResultCode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResultCode.swift; sourceTree = ""; }; + 60D79315217E39D90080F428 /* Targeting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Targeting.swift; sourceTree = ""; }; + 60D79317217F7F3E0080F428 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; + 60EE7B0521F26329000B12A8 /* Utils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utils.swift; sourceTree = ""; }; + 9757A984220076CF00A3F8F8 /* InterstItialAdUnitTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterstItialAdUnitTests.swift; sourceTree = ""; }; + 97826A8621FB4514001E2C05 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 97826AA621FB4F1B001E2C05 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; + 9791778F2201AF4700E624CE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 979177962201AF5F00E624CE /* DispatcherTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DispatcherTests.swift; sourceTree = ""; }; + 9791779A2201B32200E624CE /* BidManagerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BidManagerTests.swift; sourceTree = ""; }; + 979177A12201B43300E624CE /* responsePBM.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = responsePBM.json; sourceTree = ""; }; + 979177A22201B43300E624CE /* requestPBM.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = requestPBM.json; sourceTree = ""; }; + 979177C72201F3E500E624CE /* PBHTTPStubURLProtocol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBHTTPStubURLProtocol.m; sourceTree = ""; }; + 979177C82201F3E500E624CE /* PBHTTPStubbingManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBHTTPStubbingManager.h; sourceTree = ""; }; + 979177C92201F3E500E624CE /* PBURLConnectionStub+NSURLSessionConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "PBURLConnectionStub+NSURLSessionConfiguration.m"; sourceTree = ""; }; + 979177CA2201F3E500E624CE /* PBHTTPStubURLProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBHTTPStubURLProtocol.h; sourceTree = ""; }; + 979177CB2201F3E500E624CE /* PBURLConnectionStub.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBURLConnectionStub.h; sourceTree = ""; }; + 979177CC2201F3E500E624CE /* PBURLConnectionStub.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBURLConnectionStub.m; sourceTree = ""; }; + 979177CD2201F3E500E624CE /* PBHTTPStubbingManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBHTTPStubbingManager.m; sourceTree = ""; }; + 979177D22201F3EE00E624CE /* NSURLRequest+HTTPBodyTesting.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSURLRequest+HTTPBodyTesting.m"; sourceTree = ""; }; + 979177D32201F3EE00E624CE /* NSURLRequest+HTTPBodyTesting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSURLRequest+HTTPBodyTesting.h"; sourceTree = ""; }; + 979177D52201F40300E624CE /* NSObject+Swizzling.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+Swizzling.h"; sourceTree = ""; }; + 979177D62201F40300E624CE /* PBTestGlobal.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBTestGlobal.m; sourceTree = ""; }; + 979177D72201F40300E624CE /* NSObject+Swizzling.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSObject+Swizzling.m"; sourceTree = ""; }; + 979177D82201F40300E624CE /* PBTestGlobal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBTestGlobal.h; sourceTree = ""; }; + 979C2F9922030606001F1FCC /* noBidResponse.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = noBidResponse.json; sourceTree = ""; }; + 97EE4C6322035DD1006FEFA2 /* responseInvalidAccountId.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = responseInvalidAccountId.json; sourceTree = ""; }; + 97EE4C6422035DD1006FEFA2 /* responseInvalidConfigId.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = responseInvalidConfigId.json; sourceTree = ""; }; + 97EE4C6722035E57006FEFA2 /* responseIncorrectFormat.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = responseIncorrectFormat.json; sourceTree = ""; }; + 97F29999220056D10072E0C0 /* BannerAdUnitTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BannerAdUnitTests.swift; sourceTree = ""; }; + F5400CB12209E8210018F6B1 /* responseInvalidResponseWithoutCacheId.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = responseInvalidResponseWithoutCacheId.json; sourceTree = ""; }; + F5400CB32209E9B40018F6B1 /* PrebidServerOneBidFromAppNexusOneBidFromRubicon.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = PrebidServerOneBidFromAppNexusOneBidFromRubicon.json; sourceTree = ""; }; + F5400CB52209EBF50018F6B1 /* PrebidServerValidResponseAppNexusNoCacheIdAndRunbiconHasCacheId.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = PrebidServerValidResponseAppNexusNoCacheIdAndRunbiconHasCacheId.json; sourceTree = ""; }; + F5400CB72209F19B0018F6B1 /* responseInvalidNoTopCacheId.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = responseInvalidNoTopCacheId.json; sourceTree = ""; }; + F543D52E220E101A00F1EF8F /* responseValidTwoBidsOnTheSameSeat.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = responseValidTwoBidsOnTheSameSeat.json; sourceTree = ""; }; + F543D530220E193200F1EF8F /* noBidResponseTmaxTooLarge.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = noBidResponseTmaxTooLarge.json; sourceTree = ""; }; + F543D531220E193200F1EF8F /* noBidResponseNoTmax.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = noBidResponseNoTmax.json; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 60D792EE217E229A0080F428 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 6062B19C218243FA00CE1BA3 /* CoreLocation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 60D792F8217E229B0080F428 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 60D792FC217E229B0080F428 /* PrebidMobile.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 6062B19A218243FA00CE1BA3 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 6062B19B218243FA00CE1BA3 /* CoreLocation.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 6062B1B42188C20600CE1BA3 /* AdUnits */ = { + isa = PBXGroup; + children = ( + 60D79311217E2CF20080F428 /* BannerAdUnit.swift */, + 6062B1AB21878CFB00CE1BA3 /* AdUnit.swift */, + 6062B1AD2188783B00CE1BA3 /* InterstitialAdUnit.swift */, + 60EE7B0521F26329000B12A8 /* Utils.swift */, + ); + path = AdUnits; + sourceTree = ""; + }; + 60D792E8217E229A0080F428 = { + isa = PBXGroup; + children = ( + 60D792F4217E229A0080F428 /* PrebidMobile */, + 60D792FF217E229B0080F428 /* PrebidMobileTests */, + 60D792F3217E229A0080F428 /* Products */, + 6062B19A218243FA00CE1BA3 /* Frameworks */, + ); + sourceTree = ""; + }; + 60D792F3217E229A0080F428 /* Products */ = { + isa = PBXGroup; + children = ( + 60D792F2217E229A0080F428 /* PrebidMobile.framework */, + 60D792FB217E229B0080F428 /* PrebidMobileTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 60D792F4217E229A0080F428 /* PrebidMobile */ = { + isa = PBXGroup; + children = ( + 6062B1B72188EF8300CE1BA3 /* BidManager.swift */, + 6062B1B42188C20600CE1BA3 /* AdUnits */, + 6062B1A321835DF300CE1BA3 /* Logging.swift */, + 60D792F5217E229A0080F428 /* PrebidMobile.h */, + 60D792F6217E229A0080F428 /* Info.plist */, + 60D7930C217E23F90080F428 /* Prebid.swift */, + 60D7930F217E27960080F428 /* Host.swift */, + 60D79313217E31150080F428 /* ResultCode.swift */, + 60D79315217E39D90080F428 /* Targeting.swift */, + 60D79317217F7F3E0080F428 /* Constants.swift */, + 6062B1AF21889EC600CE1BA3 /* Global.swift */, + 6062B1BB2188F6C200CE1BA3 /* RequestBuilder.swift */, + 6062B1C2218BFC7A00CE1BA3 /* Reachability.swift */, + 607B04792194AC79000C0879 /* BidResponse.swift */, + 600072FE21BAFD2F00F4738B /* Dispatcher.swift */, + 6013E3F12214A4CA00FEE2B1 /* Location.swift */, + ); + path = PrebidMobile; + sourceTree = ""; + }; + 60D792FF217E229B0080F428 /* PrebidMobileTests */ = { + isa = PBXGroup; + children = ( + 9791778C2201AF4600E624CE /* FetchingLogictests */, + 97826A8321FB4514001E2C05 /* AdUnitTests */, + 60D79300217E229B0080F428 /* PrebidMobileTests.swift */, + 60D79302217E229B0080F428 /* Info.plist */, + 606FAC2521FFB20A008EAE5E /* TargetingTests.swift */, + 606FAC272200AD2C008EAE5E /* PrebidTests.swift */, + 60C0382B2204BB190082B32C /* PrebidMobileTest-Bridging-Header.h */, + ); + path = PrebidMobileTests; + sourceTree = ""; + }; + 97826A7D21FB44DE001E2C05 /* Shared */ = { + isa = PBXGroup; + children = ( + 979177D52201F40300E624CE /* NSObject+Swizzling.h */, + 979177D72201F40300E624CE /* NSObject+Swizzling.m */, + 979177D82201F40300E624CE /* PBTestGlobal.h */, + 979177D62201F40300E624CE /* PBTestGlobal.m */, + 979177A02201B41500E624CE /* Responses */, + 97826A8E21FB453C001E2C05 /* Category */, + 97826A8D21FB4535001E2C05 /* Stubbing */, + ); + path = Shared; + sourceTree = ""; + }; + 97826A8321FB4514001E2C05 /* AdUnitTests */ = { + isa = PBXGroup; + children = ( + 97826A8621FB4514001E2C05 /* Info.plist */, + 97826AA621FB4F1B001E2C05 /* Constants.swift */, + 97F29999220056D10072E0C0 /* BannerAdUnitTests.swift */, + 9757A984220076CF00A3F8F8 /* InterstItialAdUnitTests.swift */, + 606FAC492201F248008EAE5E /* AdUnitTests.swift */, + 606FAC5122022932008EAE5E /* ExAdUnit.swift */, + ); + path = AdUnitTests; + sourceTree = ""; + }; + 97826A8D21FB4535001E2C05 /* Stubbing */ = { + isa = PBXGroup; + children = ( + 979177C82201F3E500E624CE /* PBHTTPStubbingManager.h */, + 979177CD2201F3E500E624CE /* PBHTTPStubbingManager.m */, + 979177CA2201F3E500E624CE /* PBHTTPStubURLProtocol.h */, + 979177C72201F3E500E624CE /* PBHTTPStubURLProtocol.m */, + 979177CB2201F3E500E624CE /* PBURLConnectionStub.h */, + 979177CC2201F3E500E624CE /* PBURLConnectionStub.m */, + 979177C92201F3E500E624CE /* PBURLConnectionStub+NSURLSessionConfiguration.m */, + ); + path = Stubbing; + sourceTree = ""; + }; + 97826A8E21FB453C001E2C05 /* Category */ = { + isa = PBXGroup; + children = ( + 979177D32201F3EE00E624CE /* NSURLRequest+HTTPBodyTesting.h */, + 979177D22201F3EE00E624CE /* NSURLRequest+HTTPBodyTesting.m */, + ); + path = Category; + sourceTree = ""; + }; + 9791778C2201AF4600E624CE /* FetchingLogictests */ = { + isa = PBXGroup; + children = ( + 97826A7D21FB44DE001E2C05 /* Shared */, + 979177962201AF5F00E624CE /* DispatcherTests.swift */, + 9791779A2201B32200E624CE /* BidManagerTests.swift */, + 606FAC1E21FFAF46008EAE5E /* RequestBuilderTests.swift */, + 9791778F2201AF4700E624CE /* Info.plist */, + 600CF06F2208963500C95176 /* UtilsTests.swift */, + 6013E3F72215C82900FEE2B1 /* CLLocationManager+Swizzle.swift */, + 6013E3F92215C92C00FEE2B1 /* MockCLLocationManager.swift */, + ); + path = FetchingLogictests; + sourceTree = ""; + }; + 979177A02201B41500E624CE /* Responses */ = { + isa = PBXGroup; + children = ( + F5400CB72209F19B0018F6B1 /* responseInvalidNoTopCacheId.json */, + F543D52E220E101A00F1EF8F /* responseValidTwoBidsOnTheSameSeat.json */, + F5400CB12209E8210018F6B1 /* responseInvalidResponseWithoutCacheId.json */, + F5400CB52209EBF50018F6B1 /* PrebidServerValidResponseAppNexusNoCacheIdAndRunbiconHasCacheId.json */, + F5400CB32209E9B40018F6B1 /* PrebidServerOneBidFromAppNexusOneBidFromRubicon.json */, + 97EE4C6722035E57006FEFA2 /* responseIncorrectFormat.json */, + 97EE4C6322035DD1006FEFA2 /* responseInvalidAccountId.json */, + 97EE4C6422035DD1006FEFA2 /* responseInvalidConfigId.json */, + 979C2F9922030606001F1FCC /* noBidResponse.json */, + F543D531220E193200F1EF8F /* noBidResponseNoTmax.json */, + F543D530220E193200F1EF8F /* noBidResponseTmaxTooLarge.json */, + 979177A22201B43300E624CE /* requestPBM.json */, + 979177A12201B43300E624CE /* responsePBM.json */, + 600CF13D220CDFA700C95176 /* responseinvalidSize.json */, + ); + path = Responses; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 60D792EF217E229A0080F428 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 60D79303217E229B0080F428 /* PrebidMobile.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 60D792F1217E229A0080F428 /* PrebidMobile */ = { + isa = PBXNativeTarget; + buildConfigurationList = 60D79306217E229B0080F428 /* Build configuration list for PBXNativeTarget "PrebidMobile" */; + buildPhases = ( + 60D792ED217E229A0080F428 /* Sources */, + 60D792EE217E229A0080F428 /* Frameworks */, + 60D792EF217E229A0080F428 /* Headers */, + 60D792F0217E229A0080F428 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PrebidMobile; + productName = PrebidMobile; + productReference = 60D792F2217E229A0080F428 /* PrebidMobile.framework */; + productType = "com.apple.product-type.framework"; + }; + 60D792FA217E229B0080F428 /* PrebidMobileTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 60D79309217E229B0080F428 /* Build configuration list for PBXNativeTarget "PrebidMobileTests" */; + buildPhases = ( + 60D792F7217E229B0080F428 /* Sources */, + 60D792F8217E229B0080F428 /* Frameworks */, + 60D792F9217E229B0080F428 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 60D792FE217E229B0080F428 /* PBXTargetDependency */, + ); + name = PrebidMobileTests; + productName = PrebidMobileTests; + productReference = 60D792FB217E229B0080F428 /* PrebidMobileTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 60D792E9217E229A0080F428 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1010; + LastUpgradeCheck = 0940; + ORGANIZATIONNAME = AppNexus; + TargetAttributes = { + 60D792F1217E229A0080F428 = { + CreatedOnToolsVersion = 9.4; + LastSwiftMigration = 0940; + }; + 60D792FA217E229B0080F428 = { + CreatedOnToolsVersion = 9.4; + }; + }; + }; + buildConfigurationList = 60D792EC217E229A0080F428 /* Build configuration list for PBXProject "PrebidMobile" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 60D792E8217E229A0080F428; + productRefGroup = 60D792F3217E229A0080F428 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 60D792F1217E229A0080F428 /* PrebidMobile */, + 60D792FA217E229B0080F428 /* PrebidMobileTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 60D792F0217E229A0080F428 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 60D792F9217E229B0080F428 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 60C038342204F02C0082B32C /* responseIncorrectFormat.json in Resources */, + F5400CB42209E9B40018F6B1 /* PrebidServerOneBidFromAppNexusOneBidFromRubicon.json in Resources */, + F5400CB82209F19B0018F6B1 /* responseInvalidNoTopCacheId.json in Resources */, + 60C038352204F02C0082B32C /* responseInvalidAccountId.json in Resources */, + 60C038362204F02C0082B32C /* responseInvalidConfigId.json in Resources */, + 60C038372204F02C0082B32C /* noBidResponse.json in Resources */, + F543D533220E193200F1EF8F /* noBidResponseNoTmax.json in Resources */, + F5400CB22209E8210018F6B1 /* responseInvalidResponseWithoutCacheId.json in Resources */, + 60C038382204F02C0082B32C /* requestPBM.json in Resources */, + F543D532220E193200F1EF8F /* noBidResponseTmaxTooLarge.json in Resources */, + F543D52F220E101B00F1EF8F /* responseValidTwoBidsOnTheSameSeat.json in Resources */, + F5400CB62209EBF50018F6B1 /* PrebidServerValidResponseAppNexusNoCacheIdAndRunbiconHasCacheId.json in Resources */, + 600CF13E220CDFA700C95176 /* responseinvalidSize.json in Resources */, + 60C038392204F02C0082B32C /* responsePBM.json in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 60D792ED217E229A0080F428 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6062B1C3218BFC7A00CE1BA3 /* Reachability.swift in Sources */, + 600072FF21BAFD2F00F4738B /* Dispatcher.swift in Sources */, + 6062B1B82188EF8300CE1BA3 /* BidManager.swift in Sources */, + 60D7930D217E23F90080F428 /* Prebid.swift in Sources */, + 6062B1BC2188F6C200CE1BA3 /* RequestBuilder.swift in Sources */, + 6013E3F22214A4CA00FEE2B1 /* Location.swift in Sources */, + 60D79314217E31150080F428 /* ResultCode.swift in Sources */, + 6062B1AC21878CFB00CE1BA3 /* AdUnit.swift in Sources */, + 60D79312217E2CF20080F428 /* BannerAdUnit.swift in Sources */, + 60EE7B0621F26329000B12A8 /* Utils.swift in Sources */, + 60D79316217E39D90080F428 /* Targeting.swift in Sources */, + 6062B1B021889EC600CE1BA3 /* Global.swift in Sources */, + 607B047A2194AC79000C0879 /* BidResponse.swift in Sources */, + 6062B1AE2188783B00CE1BA3 /* InterstitialAdUnit.swift in Sources */, + 60D79310217E27960080F428 /* Host.swift in Sources */, + 60D79318217F7F3E0080F428 /* Constants.swift in Sources */, + 6062B1A421835DF300CE1BA3 /* Logging.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 60D792F7217E229B0080F428 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 60C038192204AF5D0082B32C /* NSObject+Swizzling.m in Sources */, + 60C0381A2204AF5D0082B32C /* PBTestGlobal.m in Sources */, + 60C0381B2204AF5D0082B32C /* NSURLRequest+HTTPBodyTesting.m in Sources */, + 6013E3FA2215C92C00FEE2B1 /* MockCLLocationManager.swift in Sources */, + 60C0381C2204AF5D0082B32C /* PBHTTPStubbingManager.m in Sources */, + 60C0381D2204AF5D0082B32C /* PBHTTPStubURLProtocol.m in Sources */, + 60C038262204AFE20082B32C /* BannerAdUnitTests.swift in Sources */, + 60C0381E2204AF5D0082B32C /* PBURLConnectionStub.m in Sources */, + 600CF0702208963500C95176 /* UtilsTests.swift in Sources */, + 6013E3F82215C82900FEE2B1 /* CLLocationManager+Swizzle.swift in Sources */, + 60C0381F2204AF5D0082B32C /* DispatcherTests.swift in Sources */, + 60C038202204AF5D0082B32C /* BidManagerTests.swift in Sources */, + 606FAC5222022932008EAE5E /* ExAdUnit.swift in Sources */, + 60C038212204AF5D0082B32C /* RequestBuilderTests.swift in Sources */, + 60C038272204AFE50082B32C /* InterstItialAdUnitTests.swift in Sources */, + 60C038252204AFA90082B32C /* PBURLConnectionStub+NSURLSessionConfiguration.m in Sources */, + 60C038242204AF5D0082B32C /* Constants.swift in Sources */, + 606FAC2621FFB20A008EAE5E /* TargetingTests.swift in Sources */, + 606FAC282200AD2C008EAE5E /* PrebidTests.swift in Sources */, + 606FAC4A2201F248008EAE5E /* AdUnitTests.swift in Sources */, + 60D79301217E229B0080F428 /* PrebidMobileTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 60D792FE217E229B0080F428 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 60D792F1217E229A0080F428 /* PrebidMobile */; + targetProxy = 60D792FD217E229B0080F428 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 60D79304217E229B0080F428 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.4; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 60D79305217E229B0080F428 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.4; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 60D79307217E229B0080F428 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = 9XY9F634UL; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES; + INFOPLIST_FILE = PrebidMobile/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + OTHER_SWIFT_FLAGS = "-Onone"; + PRODUCT_BUNDLE_IDENTIFIER = com.AppNexus.PrebidMobile; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 60D79308217E229B0080F428 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = ""; + CODE_SIGN_STYLE = Automatic; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = 9XY9F634UL; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + EMBED_ASSET_PACKS_IN_PRODUCT_BUNDLE = YES; + INFOPLIST_FILE = PrebidMobile/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.AppNexus.PrebidMobile; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SKIP_INSTALL = YES; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 60D7930A217E229B0080F428 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = HR94J6TSB3; + INFOPLIST_FILE = PrebidMobileTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.AppNexus.PrebidMobileTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "$(PROJECT_DIR)/PrebidMobileTests/PrebidMobileTest-Bridging-Header.h"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 60D7930B217E229B0080F428 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + DEFINES_MODULE = YES; + DEVELOPMENT_TEAM = HR94J6TSB3; + INFOPLIST_FILE = PrebidMobileTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.AppNexus.PrebidMobileTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "$(PROJECT_DIR)/PrebidMobileTests/PrebidMobileTest-Bridging-Header.h"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 60D792EC217E229A0080F428 /* Build configuration list for PBXProject "PrebidMobile" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 60D79304217E229B0080F428 /* Debug */, + 60D79305217E229B0080F428 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 60D79306217E229B0080F428 /* Build configuration list for PBXNativeTarget "PrebidMobile" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 60D79307217E229B0080F428 /* Debug */, + 60D79308217E229B0080F428 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 60D79309217E229B0080F428 /* Build configuration list for PBXNativeTarget "PrebidMobileTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 60D7930A217E229B0080F428 /* Debug */, + 60D7930B217E229B0080F428 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 60D792E9217E229A0080F428 /* Project object */; +} diff --git a/sdk/PrebidMobile.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/src/PrebidMobile/PrebidMobile.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from sdk/PrebidMobile.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to src/PrebidMobile/PrebidMobile.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/src/PrebidMobile/PrebidMobile.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/src/PrebidMobile/PrebidMobile.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/src/PrebidMobile/PrebidMobile.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/sdk/PrebidMobile.xcodeproj/xcshareddata/xcschemes/PrebidMobile.xcscheme b/src/PrebidMobile/PrebidMobile.xcodeproj/xcshareddata/xcschemes/PrebidMobile.xcscheme similarity index 72% rename from sdk/PrebidMobile.xcodeproj/xcshareddata/xcschemes/PrebidMobile.xcscheme rename to src/PrebidMobile/PrebidMobile.xcodeproj/xcshareddata/xcschemes/PrebidMobile.xcscheme index 51d347750..157ba2218 100644 --- a/sdk/PrebidMobile.xcodeproj/xcshareddata/xcschemes/PrebidMobile.xcscheme +++ b/src/PrebidMobile/PrebidMobile.xcodeproj/xcshareddata/xcschemes/PrebidMobile.xcscheme @@ -1,6 +1,6 @@ @@ -28,7 +28,26 @@ selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> + + + + + + + + @@ -45,7 +64,7 @@ @@ -63,7 +82,7 @@ diff --git a/sdk/PrebidMobile.xcodeproj/xcshareddata/xcschemes/PrebidMobileTests.xcscheme b/src/PrebidMobile/PrebidMobile.xcodeproj/xcshareddata/xcschemes/PrebidMobileTests.xcscheme similarity index 95% rename from sdk/PrebidMobile.xcodeproj/xcshareddata/xcschemes/PrebidMobileTests.xcscheme rename to src/PrebidMobile/PrebidMobile.xcodeproj/xcshareddata/xcschemes/PrebidMobileTests.xcscheme index 8287823b2..2d50a72c7 100644 --- a/sdk/PrebidMobile.xcodeproj/xcshareddata/xcschemes/PrebidMobileTests.xcscheme +++ b/src/PrebidMobile/PrebidMobile.xcodeproj/xcshareddata/xcschemes/PrebidMobileTests.xcscheme @@ -1,6 +1,6 @@ diff --git a/src/PrebidMobile/PrebidMobile/AdUnits/AdUnit.swift b/src/PrebidMobile/PrebidMobile/AdUnits/AdUnit.swift new file mode 100644 index 000000000..c9ca273fa --- /dev/null +++ b/src/PrebidMobile/PrebidMobile/AdUnits/AdUnit.swift @@ -0,0 +1,199 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation +import ObjectiveC.runtime + +@objcMembers public class AdUnit : NSObject, DispatcherDelegate { + + var prebidConfigId: String! = "" + + var adSizes = Array () + + var identifier:String? + + var timerClass:Dispatcher? + + var refreshTime:Double? = 0.0 + + private var customKeywords = [String: Array]() + + //This flag is set to check if the refresh needs to be made though the user has not invoked the fetch demand after initialization + private var isInitialCallMade:Bool! = false + + private var adServerObject:AnyObject? + + private var closure: (ResultCode) -> Void + + //notification flag set to check if the prebid response is received within the specified time + var didReceiveResponse:Bool! = false + + //notification flag set to determine if delegate call needs to be made after timeout delegate is sent + var timeOutSignalSent:Bool! = false + + init(configId:String, size:CGSize) { + self.closure = {_ in return} + super.init() + prebidConfigId = configId + adSizes.append(size) + identifier = UUID.init().uuidString + + timerClass = Dispatcher.init(withDelegate:self) + } + + dynamic public func fetchDemand(adObject:AnyObject, completion: @escaping(_ result:ResultCode) -> Void) { + + for size in adSizes { + if(size.width < 0 || size.height < 0){ + completion(ResultCode.prebidInvalidSize) + return + } + } + + if(prebidConfigId.isEmpty || (prebidConfigId.trimmingCharacters(in: CharacterSet.whitespaces)).count == 0){ + completion(ResultCode.prebidInvalidConfigId) + return + } + if(Prebid.shared.prebidServerAccountId.isEmpty || (Prebid.shared.prebidServerAccountId.trimmingCharacters(in: CharacterSet.whitespaces)).count == 0){ + completion(ResultCode.prebidInvalidAccountId) + return + } + if(isInitialCallMade == false){ + //the publisher called the fetch demand 1st fire the timer + isInitialCallMade = true + //start the timer only if the refresh timer is valided & set + if(refreshTime! > 0.0){ + self.timerClass?.start(autoRefreshMillies: refreshTime!) + } + } + + didReceiveResponse = false + timeOutSignalSent = false + self.closure = completion + adServerObject = adObject + let manager:BidManager = BidManager(adUnit: self) + + manager.requestBidsForAdUnit() { (bidResponse, resultCode) in + self.didReceiveResponse = true + if(bidResponse != nil){ + if(!self.timeOutSignalSent){ + Utils.shared.removeHBKeywords(adObject: adObject) + Utils.shared.validateAndAttachKeywords (adObject: adObject, bidResponse: bidResponse!) + completion(resultCode) + } + + } else { + if(!self.timeOutSignalSent){ + Utils.shared.removeHBKeywords(adObject: adObject) + completion(resultCode) + } + } + } + + DispatchQueue.main.asyncAfter(deadline: .now() + .milliseconds(.PB_Request_Timeout) , execute: { + if(!self.didReceiveResponse){ + self.timeOutSignalSent = true + completion(ResultCode.prebidDemandTimedOut) + + } + }) + } + + + + var userKeywords:[String: Array] { + Log.info("user keywords are \(customKeywords)") + return customKeywords + } + + /** + * This method obtains the user keyword & value user for targeting + * if the key already exists the value will be appended to the list. No duplicates will be added + */ + public func addUserKeyword(key:String, value:String) { + var existingValues:[String] = [] + if(customKeywords[key] != nil){ + existingValues = customKeywords[key]! + } + if(!existingValues.contains(value)){ + existingValues.append(value) + customKeywords[key] = existingValues + } + } + + /** + * This method obtains the user keyword & values set for user targeting. + * the values if the key already exist will be replaced with the new set of values + */ + public func addUserKeywords(key:String, value:Array) { + + customKeywords[key] = value + + } + + /** + * This method allows to remove all the user keywords set for user targeting + */ + public func clearUserKeywords() { + + if(customKeywords.count > 0 ){ + customKeywords.removeAll() + } + + } + + /** + * This method allows to remove specific user keyword & value set from user targeting + */ + public func removeUserKeyword(forKey:String){ + if(customKeywords[forKey] != nil){ + customKeywords.removeValue(forKey: forKey) + } + } + + /** + * This method allows to set the auto refresh period for the demand + */ + public func setAutoRefreshMillis(time:Double){ + if(time >= .PB_MIN_RefreshTime){ + //Stop the old refresh & start a new timer + if(refreshTime! > 0.0 && isInitialCallMade == true){ + timerClass!.stop() + refreshTime = time + timerClass!.start(autoRefreshMillies: refreshTime!) + + } else { + refreshTime = time + } + } else { + Log.error("auto refresh not set as the refresh time is less than to 30 seconds") + } + } + + /** + * This method stops the auto refresh of demand + */ + public func stopAutoRefresh(){ + timerClass!.stop() + } + + func refreshDemand(){ + if(adServerObject != nil){ + self.fetchDemand(adObject: adServerObject!, completion: self.closure) + } + + } + +} diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/AppDelegate.h b/src/PrebidMobile/PrebidMobile/AdUnits/BannerAdUnit.swift similarity index 62% rename from examples/PrebidMobileDemo/PrebidMobileDemo/AppDelegate.h rename to src/PrebidMobile/PrebidMobile/AdUnits/BannerAdUnit.swift index eb85a3210..b2bc7d70f 100644 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/AppDelegate.h +++ b/src/PrebidMobile/PrebidMobile/AdUnits/BannerAdUnit.swift @@ -1,4 +1,4 @@ -/* Copyright 2017 Prebid.org, Inc. +/* Copyright 2018-2019 Prebid.org, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13,14 +13,16 @@ limitations under the License. */ -#import -#import - -@interface AppDelegate : UIResponder - -@property(strong, nonatomic) UIWindow *window; - -@property (nonatomic, readwrite) CLLocationManager *locationManager; - -@end +import Foundation +public class BannerAdUnit : AdUnit { + + public override init(configId:String, size:CGSize) { + super.init(configId: configId, size: size) + } + + public func addAdditionalSize(sizes:Array) { + super.adSizes += sizes + } + +} diff --git a/src/PrebidMobile/PrebidMobile/AdUnits/InterstitialAdUnit.swift b/src/PrebidMobile/PrebidMobile/AdUnits/InterstitialAdUnit.swift new file mode 100644 index 000000000..9ddf268cf --- /dev/null +++ b/src/PrebidMobile/PrebidMobile/AdUnits/InterstitialAdUnit.swift @@ -0,0 +1,26 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation + +@objcMembers public class InterstitialAdUnit : AdUnit { + + public init(configId:String) { + super.init(configId: configId, size: CGSize(width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)) + } + + + +} diff --git a/src/PrebidMobile/PrebidMobile/AdUnits/Utils.swift b/src/PrebidMobile/PrebidMobile/AdUnits/Utils.swift new file mode 100644 index 000000000..1c84268fb --- /dev/null +++ b/src/PrebidMobile/PrebidMobile/AdUnits/Utils.swift @@ -0,0 +1,148 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation + +public class Utils : NSObject { + + /** + * The class is created as a singleton object & used + */ + public static let shared = Utils() + + /** + * The initializer that needs to be created only once + */ + private override init() { + super.init() + + + } + +@objc public func removeHBKeywords (adObject:AnyObject) { + + let adServerObject:String = String(describing: type(of: adObject)) + if(adServerObject == .DFP_O_Object_Name || adServerObject == .DFP_N_Object_Name){ + let hasDFPMember = adObject.responds(to: NSSelectorFromString("setCustomTargeting:")) + if(hasDFPMember){ + //check if the publisher has added any custom targeting. If so then merge the bid keywords to the same. + if(adObject.value(forKey:"customTargeting") != nil){ + var existingDict:[String:Any] = adObject.value(forKey:"customTargeting") as! [String:Any] + for (key,_)in existingDict { + if(key.starts(with:"hb_")){ + existingDict[key] = nil + } + } + adObject.setValue( existingDict,forKey:"customTargeting") + } + } + } + + if(adServerObject == .MoPub_Object_Name || adServerObject == .MoPub_Interstitial_Name){ + let hasMoPubMember = adObject.responds(to: NSSelectorFromString("setKeywords:")) + + if(hasMoPubMember) { + //for mopub the keywords has to be set as a string seperated by , + // split the dictionary & construct a string comma separated + if(adObject.value(forKey:"keywords") != nil){ + let targetingKeywordsString:String = adObject.value(forKey:"keywords") as! String + + let commaString :String = "," + if(targetingKeywordsString != ""){ + var keywordsArray = targetingKeywordsString.components(separatedBy: ",") + var i = 0 + var newString:String = "" + while i < keywordsArray.count { + if(!keywordsArray[i].starts(with:"hb_")){ + + if( newString == .EMPTY_String){ + newString = keywordsArray[i] + } else { + newString = newString + commaString + keywordsArray[i] + } + } + + i = i+1 + } + DispatchQueue.main.async { + Log.info("MoPub targeting keys are \(newString)") + adObject.setValue( newString,forKey:"keywords") + } + + } + } + + + } + + } +} + +@objc func validateAndAttachKeywords (adObject:AnyObject, bidResponse:BidResponse) { + + let adServerObject:String = String(describing: type(of: adObject)) + if(adServerObject == .DFP_O_Object_Name || adServerObject == .DFP_N_Object_Name){ + let hasDFPMember = adObject.responds(to: NSSelectorFromString("setCustomTargeting:")) + if(hasDFPMember){ + //check if the publisher has added any custom targeting. If so then merge the bid keywords to the same. + if(adObject.value(forKey:"customTargeting") != nil){ + var existingDict:[String:Any] = adObject.value(forKey:"customTargeting") as! [String:Any] + existingDict.merge(dict:bidResponse.customKeywords) + adObject.setValue( existingDict,forKey:"customTargeting") + } else { + adObject.setValue( bidResponse.customKeywords,forKey:"customTargeting") + } + + + return + } + } + + if(adServerObject == .MoPub_Object_Name || adServerObject == .MoPub_Interstitial_Name){ + let hasMoPubMember = adObject.responds(to: NSSelectorFromString("setKeywords:")) + + if(hasMoPubMember) { + //for mopub the keywords has to be set as a string seperated by , + // split the dictionary & construct a string comma separated + var targetingKeywordsString:String = "" + //get the publisher set keywords & append the bid keywords to the same + + if let keywordsString = (adObject.value(forKey:"keywords") as? String) { + targetingKeywordsString = keywordsString + } + + let commaString :String = "," + + for (key,value) in bidResponse.customKeywords { + if( targetingKeywordsString == .EMPTY_String){ + targetingKeywordsString = key + ":" + value + } else { + targetingKeywordsString = targetingKeywordsString + commaString + key + ":" + value + } + + } + DispatchQueue.main.async { + Log.info("MoPub targeting keys are \(targetingKeywordsString)") + adObject.setValue( targetingKeywordsString,forKey:"keywords") + } + + + } + + } + +} + +} diff --git a/src/PrebidMobile/PrebidMobile/BidManager.swift b/src/PrebidMobile/PrebidMobile/BidManager.swift new file mode 100644 index 000000000..0f4d4c1ad --- /dev/null +++ b/src/PrebidMobile/PrebidMobile/BidManager.swift @@ -0,0 +1,175 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation + +@objcMembers class BidManager:NSObject { + + var prebidAdUnit:AdUnit? + + init(adUnit:AdUnit) { + + super.init() + + prebidAdUnit = adUnit + + if(RequestBuilder.myUserAgent == ""){ + RequestBuilder.UserAgent(){(userAgentString) in + Log.info(userAgentString) + RequestBuilder.myUserAgent = userAgentString + } + } + } + + dynamic func requestBidsForAdUnit(callback: @escaping (_ response: BidResponse?, _ result: ResultCode) -> Void) { + + do { + try RequestBuilder.shared.buildPrebidRequest(adUnit: prebidAdUnit){(urlRequest) in + let demandFetchStartTime = self.getCurrentMillis() + URLSession.shared.dataTask(with: urlRequest!) { data, response, error in + let demandFetchEndTime = self.getCurrentMillis() + guard error == nil else { + print("error calling GET on /todos/1") + return + } + + // make sure we got data + if(data == nil ) { + print("Error: did not receive data") + callback(nil,ResultCode.prebidNetworkError) + + } + if(!Prebid.shared.timeoutUpdated) { + let tmax = self.getTmaxRequest(data!) + if(tmax > 0) { + Prebid.shared.timeoutMillis = min(demandFetchEndTime - demandFetchStartTime + tmax + 200, 10000) + Prebid.shared.timeoutUpdated = true + } + } + let processData = self.processBids(data!) + let bidMap:[String:AnyObject] = processData.0 + let result:ResultCode = processData.1 + if(result == ResultCode.prebidDemandFetchSuccess) { + let bidResponse = BidResponse(adId: "PrebidMobile", adServerTargeting: bidMap) + Log.info("Bid Successful with rounded bid targeting keys are \(bidResponse.customKeywords) for adUnit id is \(bidResponse.adUnitId)") + + DispatchQueue.main.async() { + callback(bidResponse, ResultCode.prebidDemandFetchSuccess) + } + } else { + callback(nil, result) + } + + }.resume() + + } + + } catch let error { + print(error.localizedDescription) + callback(nil,ResultCode.prebidServerURLInvalid) + } + } + + func processBids(_ data:Data) -> ([String:AnyObject],ResultCode) { + + do { + let errorString:String = String.init(data: data, encoding: .utf8)! + print(String(format: "Response from server: %@", errorString)) + if(!errorString.contains("Invalid request:")){ + let response:[String:AnyObject] = try JSONSerialization.jsonObject(with: data, options: []) as! [String: AnyObject] + + var bidDict:[String:AnyObject] = [:] + var containTopBid = false + if (response.count > 0) { + if (response["seatbid"] != nil) { + let seatbids = response["seatbid"] as! [AnyObject] + for seatbid in seatbids { + if (seatbid is [String : AnyObject]) { + var seatbidDict = seatbid as? [String:AnyObject] + if (seatbidDict?["bid"] is [AnyObject]) { + let bids = seatbidDict?["bid"] as! [AnyObject] + for bid in bids { + var containBid = false + var adServerTargeting:[String:AnyObject]? + if (bid["ext"] != nil) { + let extDict:[String:Any] = bid["ext"] as! [String:Any] + if (extDict["prebid"] != nil) { + let prebidDict:[String:Any] = extDict["prebid"] as! [String:Any] + adServerTargeting = prebidDict["targeting"] as? [String:AnyObject] + if (adServerTargeting != nil) { + for key in adServerTargeting!.keys{ + if (key == "hb_cache_id") { + containTopBid = true + } + if (key.starts(with: "hb_cache_id")) { + containBid = true + } + } + if (containBid) { + for (key, value) in adServerTargeting! { + bidDict[key] = value + } + } + } + } + } + } + } + } + } + } + } + if (containTopBid && bidDict.count > 0) { + return (bidDict,ResultCode.prebidDemandFetchSuccess) + } else { + return ([:],ResultCode.prebidDemandNoBids) + } + } else { + if(errorString.contains("Stored Imp with ID")){ + return ([:],ResultCode.prebidInvalidConfigId) + } else if(errorString.contains("Stored Request with ID")) { + return ([:],ResultCode.prebidInvalidAccountId) + } else if((errorString.contains("Invalid request: Request imp[0].banner.format")) || (errorString.contains("Unable to set interstitial size list"))){ + return ([:],ResultCode.prebidInvalidSize) + } else { + return ([:],ResultCode.prebidServerError) + } + } + + } catch let error { + print(error.localizedDescription) + + return ([:],ResultCode.prebidDemandNoBids) + } + + } + + func getCurrentMillis() -> Int { + return Int(Date().timeIntervalSince1970 * 1000) + } + + func getTmaxRequest(_ data:Data) -> Int { + do{ + let response:[String:AnyObject] = try JSONSerialization.jsonObject(with: data, options: []) as! [String: AnyObject] + let ext = response["ext"] as! [String: AnyObject] + if(ext["tmaxrequest"] != nil) { + return ext["tmaxrequest"] as! Int + } + } catch let error { + print(error.localizedDescription) + } + return -1 + } +} diff --git a/src/PrebidMobile/PrebidMobile/BidResponse.swift b/src/PrebidMobile/PrebidMobile/BidResponse.swift new file mode 100644 index 000000000..4a8f02d4f --- /dev/null +++ b/src/PrebidMobile/PrebidMobile/BidResponse.swift @@ -0,0 +1,54 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation + +private let kDefaultBidExpiryTime: TimeInterval = 270 + +class BidResponse:NSObject { + + /** + * the adUnitId is the adUnit identifier that the bid response corresponds to + */ + private(set) var adUnitId: String = "" + + var myUnitId: String? = "" { + didSet { + adUnitId = myUnitId! + } + } + /** + * customKeywords is a dictionary of all the response objects returned by the demand source that can be used in future + */ + private(set) var customKeywords: [String : String] = [:] + + private var myCustomKeywords: [String : String] = [:] { + didSet { + customKeywords = myCustomKeywords + } + } + + init(adId: String, adServerTargeting: [String : AnyObject]) { + super.init() + adUnitId = adId + setMyCustomKeywords(newValue: adServerTargeting as! [String:String]) + + } + + func setMyCustomKeywords(newValue:[String:String]) { + self.myCustomKeywords = newValue + } + +} diff --git a/src/PrebidMobile/PrebidMobile/Constants.swift b/src/PrebidMobile/PrebidMobile/Constants.swift new file mode 100644 index 000000000..18ae1dd7c --- /dev/null +++ b/src/PrebidMobile/PrebidMobile/Constants.swift @@ -0,0 +1,114 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation + + +extension String { + public static let PB_GDPR_ConsentString = "kPBGDPRConsentString" + + public static let PB_GDPR_SubjectToConsent = "kPBGdprSubjectToConsent" + + public static let IAB_GDPR_SubjectToConsent = "IABConsent_SubjectToGDPR" + + public static let IAB_GDPR_ConsentString = "IABConsent_ConsentString" + + public static let EMPTY_String = "" + + public static let kIFASentinelValue = "00000000-0000-0000-0000-000000000000" + + public static let DFP_N_Object_Name = "DFPNRequest" + + public static let DFP_O_Object_Name = "DFPORequest" + + public static let MoPub_Object_Name = "MPAdView" + + public static let MoPub_Interstitial_Name = "MPInterstitialAdController" + + +} + +extension Double { + public static let PB_MIN_RefreshTime = 30000.0 + +} + +extension Int { + + public static let PB_Request_Timeout = 10000 +} + +extension UIDevice { + + var modelName: String { + var systemInfo = utsname() + uname(&systemInfo) + let machineMirror = Mirror(reflecting: systemInfo.machine) + let identifier = machineMirror.children.reduce("") { identifier, element in + guard let value = element.value as? Int8, value != 0 else { return identifier } + return identifier + String(UnicodeScalar(UInt8(value))) + } + + switch identifier { + case "iPod5,1": return "iPod Touch 5" + case "iPod7,1": return "iPod Touch 6" + case "iPhone3,1", "iPhone3,2", "iPhone3,3": return "iPhone 4" + case "iPhone4,1": return "iPhone 4s" + case "iPhone5,1", "iPhone5,2": return "iPhone 5" + case "iPhone5,3", "iPhone5,4": return "iPhone 5c" + case "iPhone6,1", "iPhone6,2": return "iPhone 5s" + case "iPhone7,2": return "iPhone 6" + case "iPhone7,1": return "iPhone 6 Plus" + case "iPhone8,1": return "iPhone 6s" + case "iPhone8,2": return "iPhone 6s Plus" + case "iPhone9,1", "iPhone9,3": return "iPhone 7" + case "iPhone9,2", "iPhone9,4": return "iPhone 7 Plus" + case "iPhone8,4": return "iPhone SE" + case "iPad2,1", "iPad2,2", "iPad2,3", "iPad2,4":return "iPad 2" + case "iPad3,1", "iPad3,2", "iPad3,3": return "iPad 3" + case "iPad3,4", "iPad3,5", "iPad3,6": return "iPad 4" + case "iPad4,1", "iPad4,2", "iPad4,3": return "iPad Air" + case "iPad5,3", "iPad5,4": return "iPad Air 2" + case "iPad2,5", "iPad2,6", "iPad2,7": return "iPad Mini" + case "iPad4,4", "iPad4,5", "iPad4,6": return "iPad Mini 2" + case "iPad4,7", "iPad4,8", "iPad4,9": return "iPad Mini 3" + case "iPad5,1", "iPad5,2": return "iPad Mini 4" + case "iPad6,3", "iPad6,4", "iPad6,7", "iPad6,8":return "iPad Pro" + case "AppleTV5,3": return "Apple TV" + case "i386", "x86_64": return "Simulator" + default: return identifier + } + } + +} + +extension Dictionary { + mutating func merge(dict: [Key: Value]){ + for (k, v) in dict { + updateValue(v, forKey: k) + } + } +} + +extension Array { + public func toDictionary(with selectKey: (Element) -> Key) -> [Key:Element] { + var dict = [Key:Element]() + for element in self { + dict[selectKey(element)] = element + } + return dict + } +} + diff --git a/src/PrebidMobile/PrebidMobile/Dispatcher.swift b/src/PrebidMobile/PrebidMobile/Dispatcher.swift new file mode 100644 index 000000000..1c2f84b37 --- /dev/null +++ b/src/PrebidMobile/PrebidMobile/Dispatcher.swift @@ -0,0 +1,65 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation + +protocol DispatcherDelegate: class { + func refreshDemand() +} + +class Dispatcher:NSObject { + + var timer : Timer? + + var delegate: DispatcherDelegate? + + var repeatInSeconds:Double! = 0 + + init(withDelegate:DispatcherDelegate) { + super.init() + delegate = withDelegate + } + + func start(autoRefreshMillies:Double) { + + if(self.timer != nil){ + self.timer?.invalidate(); + self.timer = nil; + } + + //timer takes values in seconds... + repeatInSeconds = autoRefreshMillies/1000 + + self.timer = Timer.scheduledTimer(timeInterval: repeatInSeconds, target: self, selector: #selector(fireTimer), userInfo: nil, repeats: true) + + RunLoop.current.add(self.timer!, forMode: .commonModes) + + } + + func stop() { + if(self.timer != nil){ + self.timer?.invalidate(); + self.timer = nil; + } + } + + @objc func fireTimer(){ + + delegate?.refreshDemand() + } + + + +} diff --git a/examples/PrebidMobileDemo/PrebidMobileDemo/NativeViewControllers/NativeTestsViewController.h b/src/PrebidMobile/PrebidMobile/Global.swift similarity index 73% rename from examples/PrebidMobileDemo/PrebidMobileDemo/NativeViewControllers/NativeTestsViewController.h rename to src/PrebidMobile/PrebidMobile/Global.swift index bade58b63..a8ae07f8f 100644 --- a/examples/PrebidMobileDemo/PrebidMobileDemo/NativeViewControllers/NativeTestsViewController.h +++ b/src/PrebidMobile/PrebidMobile/Global.swift @@ -1,4 +1,4 @@ -/* Copyright 2017 Prebid.org, Inc. +/* Copyright 2018-2019 Prebid.org, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13,8 +13,10 @@ limitations under the License. */ -#import +import Foundation -@interface NativeTestsViewController : UIViewController - -@end +public enum ErrorCode : Error { + case prebidServerURLInvalid (String) + case yearOfBirthInvalid + case invalidSize (CGSize) +} diff --git a/src/PrebidMobile/PrebidMobile/Host.swift b/src/PrebidMobile/PrebidMobile/Host.swift new file mode 100644 index 000000000..735f5815b --- /dev/null +++ b/src/PrebidMobile/PrebidMobile/Host.swift @@ -0,0 +1,89 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation + +@objc public enum PrebidHost:Int { + case Appnexus + case Rubicon + case Custom + + func name () -> String { + switch self { + case .Appnexus: return "https://prebid.adnxs.com/pbs/v1/openrtb2/auction" + case .Rubicon: return "https://prebid-server.rubiconproject.com/openrtb2/auction" + case .Custom: return "" + } + } +} + +class Host : NSObject { + + var prebidServerURL:String? = .EMPTY_String + + /** + * The class is created as a singleton object & used + */ + public static let shared = Host() + + override init() { + + } + + /** + * The CustomHost property holds the URL for the custom prebid adaptor + */ + public var setHostURL:String{ + get { + return self.prebidServerURL! + } + set { + + self.prebidServerURL = newValue + + } + } + + /** + * This function retrieves the prebid server URL for the selected host + */ + func getHostURL(host:PrebidHost) throws -> String{ + if(host == PrebidHost.Custom){ + if(verifyUrl(urlString: self.prebidServerURL) == false){ + throw ErrorCode.prebidServerURLInvalid(self.prebidServerURL!) + } + return self.prebidServerURL! + } + + return host.name(); + } + + /** + * This function verifies if the prebid server URL is in the url format + */ + func verifyUrl (urlString: String?) -> Bool { + //Check for nil + if let urlString = urlString { + // create NSURL instance + if let url = URL(string: urlString) { + // check if your application can open the NSURL instance + return UIApplication.shared.canOpenURL(url) + + } + } + return false + } + +} diff --git a/sdk/PrebidMobile/Info.plist b/src/PrebidMobile/PrebidMobile/Info.plist similarity index 91% rename from sdk/PrebidMobile/Info.plist rename to src/PrebidMobile/PrebidMobile/Info.plist index d92c49f79..1007fd9dd 100644 --- a/sdk/PrebidMobile/Info.plist +++ b/src/PrebidMobile/PrebidMobile/Info.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - en + $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 0.5.3 + 1.0 CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass diff --git a/src/PrebidMobile/PrebidMobile/Location.swift b/src/PrebidMobile/PrebidMobile/Location.swift new file mode 100644 index 000000000..c975c0415 --- /dev/null +++ b/src/PrebidMobile/PrebidMobile/Location.swift @@ -0,0 +1,64 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation +import CoreLocation + +class Location:NSObject,CLLocationManagerDelegate { + + /** + * The class is created as a singleton object & used + */ + public static let shared = Location() + + private var locationManager:CLLocationManager? = nil + + public var location:CLLocation? = nil + + /** + * The initializer that needs to be created only once + */ + private override init() { + super.init() + locationManager = CLLocationManager() + locationManager!.delegate = self + locationManager!.distanceFilter = kCLDistanceFilterNone + locationManager!.desiredAccuracy = kCLLocationAccuracyKilometer + locationManager!.startMonitoringSignificantLocationChanges() + } + + func startCapture () { + let status = CLLocationManager.authorizationStatus() + if(status == CLAuthorizationStatus.authorizedWhenInUse || status == CLAuthorizationStatus.authorizedAlways ) { + locationManager!.startUpdatingLocation() + } + + } + + func stopCapture () { + locationManager?.stopUpdatingLocation() + + } + + func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { + location = locations.last! + } + + func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { + Log.debug("Location cannot be fetched now") + } + +} + diff --git a/src/PrebidMobile/PrebidMobile/Logging.swift b/src/PrebidMobile/PrebidMobile/Logging.swift new file mode 100644 index 000000000..2106cd87e --- /dev/null +++ b/src/PrebidMobile/PrebidMobile/Logging.swift @@ -0,0 +1,164 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation + +/// Enum which maps an appropiate symbol which added as prefix for each log message + +enum LogEvent: String { + case error = "[‼️]" // error + case info = "[ℹ️]" // info + case debug = "[💬]" // debug + case verbose = "[🔬]" // verbose + case warn = "[⚠️]" // warning + case severe = "[🔥]" // severe +} + + +/// Wrapping Swift.print() within DEBUG flag +/// +/// - Note: *print()* might cause [security vulnerabilities](https://codifiedsecurity.com/mobile-app-security-testing-checklist-ios/) +/// +/// - Parameter object: The object which is to be logged +/// +func print(_ object: Any) { + // Only allowing in DEBUG mode + #if DEBUG + Swift.print(object) + #endif +} + +class Log { + + static var dateFormat = "yyyy-MM-dd hh:mm:ssSSS" + static var dateFormatter: DateFormatter { + let formatter = DateFormatter() + formatter.dateFormat = dateFormat + formatter.locale = Locale.current + formatter.timeZone = TimeZone.current + return formatter + } + + private static var isLoggingEnabled: Bool { + #if DEBUG + return true + #else + return false + #endif + } + + // MARK: - Loging methods + + + /// Logs error messages on console with prefix [‼️] + /// + /// - Parameters: + /// - object: Object or message to be logged + /// - filename: File name from where loggin to be done + /// - line: Line number in file from where the logging is done + /// - column: Column number of the log message + /// - funcName: Name of the function from where the logging is done + class func error( _ object: Any, filename: String = #file, line: Int = #line, column: Int = #column, funcName: String = #function) { + if isLoggingEnabled { + print("\(Date().toString()) \(LogEvent.error.rawValue)[\(sourceFileName(filePath: filename))]:\(line) \(column) \(funcName) -> \(object)") + } + } + + /// Logs info messages on console with prefix [ℹ️] + /// + /// - Parameters: + /// - object: Object or message to be logged + /// - filename: File name from where loggin to be done + /// - line: Line number in file from where the logging is done + /// - column: Column number of the log message + /// - funcName: Name of the function from where the logging is done + class func info ( _ object: Any, filename: String = #file, line: Int = #line, column: Int = #column, funcName: String = #function) { + if isLoggingEnabled { + print("\(Date().toString()) \(LogEvent.info.rawValue)[\(sourceFileName(filePath: filename))]:\(line) \(column) \(funcName) -> \(object)") + } + } + + /// Logs debug messages on console with prefix [💬] + /// + /// - Parameters: + /// - object: Object or message to be logged + /// - filename: File name from where loggin to be done + /// - line: Line number in file from where the logging is done + /// - column: Column number of the log message + /// - funcName: Name of the function from where the logging is done + class func debug( _ object: Any, filename: String = #file, line: Int = #line, column: Int = #column, funcName: String = #function) { + if isLoggingEnabled { + print("\(Date().toString()) \(LogEvent.debug.rawValue)[\(sourceFileName(filePath: filename))]:\(line) \(column) \(funcName) -> \(object)") + } + } + + /// Logs messages verbosely on console with prefix [🔬] + /// + /// - Parameters: + /// - object: Object or message to be logged + /// - filename: File name from where loggin to be done + /// - line: Line number in file from where the logging is done + /// - column: Column number of the log message + /// - funcName: Name of the function from where the logging is done + class func verbose( _ object: Any, filename: String = #file, line: Int = #line, column: Int = #column, funcName: String = #function) { + if isLoggingEnabled { + print("\(Date().toString()) \(LogEvent.verbose.rawValue)[\(sourceFileName(filePath: filename))]:\(line) \(column) \(funcName) -> \(object)") + } + } + + /// Logs warnings verbosely on console with prefix [⚠️] + /// + /// - Parameters: + /// - object: Object or message to be logged + /// - filename: File name from where loggin to be done + /// - line: Line number in file from where the logging is done + /// - column: Column number of the log message + /// - funcName: Name of the function from where the logging is done + class func warn( _ object: Any, filename: String = #file, line: Int = #line, column: Int = #column, funcName: String = #function) { + if isLoggingEnabled { + print("\(Date().toString()) \(LogEvent.warn.rawValue)[\(sourceFileName(filePath: filename))]:\(line) \(column) \(funcName) -> \(object)") + } + } + + /// Logs severe events on console with prefix [🔥] + /// + /// - Parameters: + /// - object: Object or message to be logged + /// - filename: File name from where loggin to be done + /// - line: Line number in file from where the logging is done + /// - column: Column number of the log message + /// - funcName: Name of the function from where the logging is done + class func severe( _ object: Any, filename: String = #file, line: Int = #line, column: Int = #column, funcName: String = #function) { + if isLoggingEnabled { + print("\(Date().toString()) \(LogEvent.severe.rawValue)[\(sourceFileName(filePath: filename))]:\(line) \(column) \(funcName) -> \(object)") + } + } + + + /// Extract the file name from the file path + /// + /// - Parameter filePath: Full file path in bundle + /// - Returns: File Name with extension + private class func sourceFileName(filePath: String) -> String { + let components = filePath.components(separatedBy: "/") + return components.isEmpty ? "" : components.last! + } +} + +internal extension Date { + func toString() -> String { + return Log.dateFormatter.string(from: self as Date) + } +} diff --git a/src/PrebidMobile/PrebidMobile/Prebid.swift b/src/PrebidMobile/PrebidMobile/Prebid.swift new file mode 100644 index 000000000..9c62b672f --- /dev/null +++ b/src/PrebidMobile/PrebidMobile/Prebid.swift @@ -0,0 +1,74 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation + + +@objcMembers public class Prebid:NSObject { + var timeoutMillis : Int = 10000 + var timeoutUpdated: Bool = false + + public var prebidServerAccountId : String! = "" + + /** + * This property is set by the developer when he is willing to share the location for better ad targeting + **/ + private var geoLocation:Bool = false + public var shareGeoLocation : Bool { + get { + return geoLocation + } + + set { + geoLocation = newValue + if(geoLocation == true){ + Location.shared.startCapture() + } else { + Location.shared.stopCapture() + } + } + } + + public var prebidServerHost : PrebidHost = PrebidHost.Appnexus { + didSet { + timeoutMillis = 10000 + timeoutUpdated = false + } + } + + /** + * The class is created as a singleton object & used + */ + public static let shared = Prebid() + + /** + * The initializer that needs to be created only once + */ + private override init() { + super.init() + } + + public func setCustomPrebidServer(url:String) throws { + + if(Host.shared.verifyUrl(urlString: url) == false){ + throw ErrorCode.prebidServerURLInvalid(url) + }else { + prebidServerHost = PrebidHost.Custom + Host.shared.setHostURL = url + } + } +} + + diff --git a/src/PrebidMobile/PrebidMobile/PrebidMobile.h b/src/PrebidMobile/PrebidMobile/PrebidMobile.h new file mode 100644 index 000000000..aeb0750d7 --- /dev/null +++ b/src/PrebidMobile/PrebidMobile/PrebidMobile.h @@ -0,0 +1,26 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import + +//! Project version number for PrebidMobile. +FOUNDATION_EXPORT double PrebidMobileVersionNumber; + +//! Project version string for PrebidMobile. +FOUNDATION_EXPORT const unsigned char PrebidMobileVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/src/PrebidMobile/PrebidMobile/Reachability.swift b/src/PrebidMobile/PrebidMobile/Reachability.swift new file mode 100644 index 000000000..571052de9 --- /dev/null +++ b/src/PrebidMobile/PrebidMobile/Reachability.swift @@ -0,0 +1,304 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import SystemConfiguration +import Foundation + +public enum ReachabilityError: Error { + case FailedToCreateWithAddress(sockaddr_in) + case FailedToCreateWithHostname(String) + case UnableToSetCallback + case UnableToSetDispatchQueue + case UnableToGetInitialFlags +} + +@available(*, unavailable, renamed: "Notification.Name.reachabilityChanged") +public let ReachabilityChangedNotification = NSNotification.Name("ReachabilityChangedNotification") + +public extension Notification.Name { + public static let reachabilityChanged = Notification.Name("reachabilityChanged") +} + +public class Reachability { + + public typealias NetworkReachable = (Reachability) -> () + public typealias NetworkUnreachable = (Reachability) -> () + + @available(*, unavailable, renamed: "Connection") + public enum NetworkStatus: CustomStringConvertible { + case notReachable, reachableViaWiFi, reachableViaWWAN + public var description: String { + switch self { + case .reachableViaWWAN: return "Cellular" + case .reachableViaWiFi: return "WiFi" + case .notReachable: return "No Connection" + } + } + } + + public enum Connection: CustomStringConvertible { + case none, wifi, cellular + public var description: String { + switch self { + case .cellular: return "Cellular" + case .wifi: return "WiFi" + case .none: return "No Connection" + } + } + } + + public var whenReachable: NetworkReachable? + public var whenUnreachable: NetworkUnreachable? + + @available(*, deprecated: 4.0, renamed: "allowsCellularConnection") + public let reachableOnWWAN: Bool = true + + /// Set to `false` to force Reachability.connection to .none when on cellular connection (default value `true`) + public var allowsCellularConnection: Bool + + // The notification center on which "reachability changed" events are being posted + public var notificationCenter: NotificationCenter = NotificationCenter.default + + @available(*, deprecated: 4.0, renamed: "connection.description") + public var currentReachabilityString: String { + return "\(connection)" + } + + @available(*, unavailable, renamed: "connection") + public var currentReachabilityStatus: Connection { + return connection + } + + public var connection: Connection { + if flags == nil { + try? setReachabilityFlags() + } + + switch flags?.connection { + case .none?, nil: return .none + case .cellular?: return allowsCellularConnection ? .cellular : .none + case .wifi?: return .wifi + } + } + + fileprivate var isRunningOnDevice: Bool = { + #if targetEnvironment(simulator) + return false + #else + return true + #endif + }() + + fileprivate var notifierRunning = false + fileprivate let reachabilityRef: SCNetworkReachability + fileprivate let reachabilitySerialQueue: DispatchQueue + fileprivate(set) var flags: SCNetworkReachabilityFlags? { + didSet { + guard flags != oldValue else { return } + reachabilityChanged() + } + } + + required public init(reachabilityRef: SCNetworkReachability, queueQoS: DispatchQoS = .default, targetQueue: DispatchQueue? = nil) { + self.allowsCellularConnection = true + self.reachabilityRef = reachabilityRef + self.reachabilitySerialQueue = DispatchQueue(label: "uk.co.ashleymills.reachability", qos: queueQoS, target: targetQueue) + } + + public convenience init?(hostname: String, queueQoS: DispatchQoS = .default, targetQueue: DispatchQueue? = nil) { + guard let ref = SCNetworkReachabilityCreateWithName(nil, hostname) else { return nil } + self.init(reachabilityRef: ref, queueQoS: queueQoS, targetQueue: targetQueue) + } + + public convenience init?(queueQoS: DispatchQoS = .default, targetQueue: DispatchQueue? = nil) { + var zeroAddress = sockaddr() + zeroAddress.sa_len = UInt8(MemoryLayout.size) + zeroAddress.sa_family = sa_family_t(AF_INET) + + guard let ref = SCNetworkReachabilityCreateWithAddress(nil, &zeroAddress) else { return nil } + + self.init(reachabilityRef: ref, queueQoS: queueQoS, targetQueue: targetQueue) + } + + deinit { + stopNotifier() + } +} + +public extension Reachability { + + // MARK: - *** Notifier methods *** + func startNotifier() throws { + guard !notifierRunning else { return } + + let callback: SCNetworkReachabilityCallBack = { (reachability, flags, info) in + guard let info = info else { return } + + let reachability = Unmanaged.fromOpaque(info).takeUnretainedValue() + reachability.flags = flags + } + + var context = SCNetworkReachabilityContext(version: 0, info: nil, retain: nil, release: nil, copyDescription: nil) + context.info = UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque()) + if !SCNetworkReachabilitySetCallback(reachabilityRef, callback, &context) { + stopNotifier() + throw ReachabilityError.UnableToSetCallback + } + + if !SCNetworkReachabilitySetDispatchQueue(reachabilityRef, reachabilitySerialQueue) { + stopNotifier() + throw ReachabilityError.UnableToSetDispatchQueue + } + + // Perform an initial check + try setReachabilityFlags() + + notifierRunning = true + } + + func stopNotifier() { + defer { notifierRunning = false } + + SCNetworkReachabilitySetCallback(reachabilityRef, nil, nil) + SCNetworkReachabilitySetDispatchQueue(reachabilityRef, nil) + } + + // MARK: - *** Connection test methods *** + @available(*, deprecated: 4.0, message: "Please use `connection != .none`") + var isReachable: Bool { + return connection != .none + } + + @available(*, deprecated: 4.0, message: "Please use `connection == .cellular`") + var isReachableViaWWAN: Bool { + // Check we're not on the simulator, we're REACHABLE and check we're on WWAN + return connection == .cellular + } + + @available(*, deprecated: 4.0, message: "Please use `connection == .wifi`") + var isReachableViaWiFi: Bool { + return connection == .wifi + } + + var description: String { + guard let flags = flags else { return "unavailable flags" } + let W = isRunningOnDevice ? (flags.isOnWWANFlagSet ? "W" : "-") : "X" + let R = flags.isReachableFlagSet ? "R" : "-" + let c = flags.isConnectionRequiredFlagSet ? "c" : "-" + let t = flags.isTransientConnectionFlagSet ? "t" : "-" + let i = flags.isInterventionRequiredFlagSet ? "i" : "-" + let C = flags.isConnectionOnTrafficFlagSet ? "C" : "-" + let D = flags.isConnectionOnDemandFlagSet ? "D" : "-" + let l = flags.isLocalAddressFlagSet ? "l" : "-" + let d = flags.isDirectFlagSet ? "d" : "-" + + return "\(W)\(R) \(c)\(t)\(i)\(C)\(D)\(l)\(d)" + } +} + +fileprivate extension Reachability { + + func setReachabilityFlags() throws { + try reachabilitySerialQueue.sync { [unowned self] in + var flags = SCNetworkReachabilityFlags() + if !SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags) { + self.stopNotifier() + throw ReachabilityError.UnableToGetInitialFlags + } + + self.flags = flags + } + } + + func reachabilityChanged() { + let block = connection != .none ? whenReachable : whenUnreachable + + DispatchQueue.main.async { [weak self] in + guard let strongSelf = self else { return } + block?(strongSelf) + strongSelf.notificationCenter.post(name: .reachabilityChanged, object: strongSelf) + } + } +} + +extension SCNetworkReachabilityFlags { + + typealias Connection = Reachability.Connection + + var connection: Connection { + guard isReachableFlagSet else { return .none } + + // If we're reachable, but not on an iOS device (i.e. simulator), we must be on WiFi + #if targetEnvironment(simulator) + return .wifi + #else + var connection = Connection.none + + if !isConnectionRequiredFlagSet { + connection = .wifi + } + + if isConnectionOnTrafficOrDemandFlagSet { + if !isInterventionRequiredFlagSet { + connection = .wifi + } + } + + if isOnWWANFlagSet { + connection = .cellular + } + + return connection + #endif + } + + var isOnWWANFlagSet: Bool { + #if os(iOS) + return contains(.isWWAN) + #else + return false + #endif + } + var isReachableFlagSet: Bool { + return contains(.reachable) + } + var isConnectionRequiredFlagSet: Bool { + return contains(.connectionRequired) + } + var isInterventionRequiredFlagSet: Bool { + return contains(.interventionRequired) + } + var isConnectionOnTrafficFlagSet: Bool { + return contains(.connectionOnTraffic) + } + var isConnectionOnDemandFlagSet: Bool { + return contains(.connectionOnDemand) + } + var isConnectionOnTrafficOrDemandFlagSet: Bool { + return !intersection([.connectionOnTraffic, .connectionOnDemand]).isEmpty + } + var isTransientConnectionFlagSet: Bool { + return contains(.transientConnection) + } + var isLocalAddressFlagSet: Bool { + return contains(.isLocalAddress) + } + var isDirectFlagSet: Bool { + return contains(.isDirect) + } + var isConnectionRequiredAndTransientFlagSet: Bool { + return intersection([.connectionRequired, .transientConnection]) == [.connectionRequired, .transientConnection] + } +} diff --git a/src/PrebidMobile/PrebidMobile/RequestBuilder.swift b/src/PrebidMobile/PrebidMobile/RequestBuilder.swift new file mode 100644 index 000000000..5bff0d521 --- /dev/null +++ b/src/PrebidMobile/PrebidMobile/RequestBuilder.swift @@ -0,0 +1,369 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation +import CoreTelephony +import CoreLocation +import WebKit +import AdSupport + +@objcMembers public class RequestBuilder:NSObject{ + /** + * The class is created as a singleton object & used + */ + static let shared = RequestBuilder() + + static var myUserAgent:String = "" + + /** + * The initializer that needs to be created only once + */ + private override init() { + + super.init() + } + + func buildPrebidRequest(adUnit: AdUnit?,callback:@escaping(_ urlRequest: URLRequest?) throws -> ()) throws { + do { + try callback(self.buildRequest(adUnit:adUnit)) + + } catch let error { + throw error + } + } + + func buildRequest(adUnit: AdUnit?) throws -> URLRequest? { + + let hostUrl:String = try Host.shared.getHostURL(host: Prebid.shared.prebidServerHost) + var request:URLRequest = URLRequest(url: URL(string: hostUrl)!, cachePolicy: .reloadIgnoringLocalCacheData, timeoutInterval: TimeInterval(Prebid.shared.timeoutMillis)) + request.httpMethod = "POST" + let requestBody:[String : Any] = openRTBRequestBody(adUnit: adUnit)! + + request.httpBody = try JSONSerialization.data(withJSONObject: requestBody, options: .prettyPrinted) // pass dictionary to nsdata object and set it as request body + //HTTP HeadersExpression implicitly coerced from '[AnyHashable : Any]?' to Any + request.addValue("application/json", forHTTPHeaderField: "Content-Type") + request.addValue("application/json", forHTTPHeaderField: "Accept") + Log.info("Prebid Request post body \(requestBody)") + return request + } + + func openRTBRequestBody(adUnit: AdUnit?) -> [String : Any]? { + var requestDict: [String : Any] = [:] + + requestDict["id"] = UUID().uuidString + if let aSource = openrtbSource() { + requestDict["source"] = aSource + } + requestDict["app"] = openrtbApp() + requestDict["device"] = openrtbDevice() + if Targeting.shared.subjectToGDPR == true { + requestDict["regs"] = openrtbRegs() + } + requestDict["user"] = openrtbUser(adUnit:adUnit) + requestDict["imp"] = openrtbImps(adUnit: adUnit) + requestDict["ext"] = openrtbRequestExtension() + + return requestDict + } + + func openrtbSource() -> [String:Any]? { + + var sourceDict: [String : Any] = [:] + sourceDict["tid"] = "123" + + return sourceDict + } + + func openrtbRequestExtension() -> [AnyHashable : Any]? { + var requestPrebidExt: [AnyHashable : Any] = [:] + requestPrebidExt["targeting"] = [:] + requestPrebidExt["storedrequest"] = ["id": Prebid.shared.prebidServerAccountId] + requestPrebidExt["cache"] = ["bids": [AnyHashable : Any]()] + var requestExt: [AnyHashable : Any] = [:] + requestExt["prebid"] = requestPrebidExt + return requestExt + } + + func openrtbImps(adUnit: AdUnit?) -> [Any]! { + var imps: [Any] = [] + + var imp: [AnyHashable : Any] = [:] + if let anIdentifier = adUnit?.identifier { + imp["id"] = anIdentifier + } + + imp["secure"] = 1 + + var sizeArray = [[String:CGFloat]]() + for size: CGSize in (adUnit?.adSizes)! { + let sizeDict = [ + "w" : size.width, + "h" : size.height + ] + sizeArray.append(sizeDict) + } + let formats = ["format": sizeArray] + imp["banner"] = formats + + if(adUnit is InterstitialAdUnit){ + imp["instl"] = 1 + } + + //to be used when openRTB supports storedRequests + var prebidAdUnitExt: [AnyHashable : Any] = [:] + if let anId = adUnit?.prebidConfigId { + prebidAdUnitExt["storedrequest"] = ["id": anId] + } + + var adUnitExt: [AnyHashable : Any] = [:] + adUnitExt["prebid"] = prebidAdUnitExt + + imp["ext"] = adUnitExt + + imps.append(imp) + + return imps + } + + // OpenRTB 2.5 Object: App in section 3.2.14 + + func openrtbApp() -> [AnyHashable : Any]? { + var app: [AnyHashable : Any] = [:] + + let bundle = Bundle.main.bundleIdentifier + if bundle != nil { + app["bundle"] = bundle ?? "" + } + let version:String = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "" + if version != "" { + app["ver"] = version + } + + app["publisher"] = ["id": Prebid.shared.prebidServerAccountId ?? 0] as NSDictionary + app["ext"] = ["prebid": ["version": String(PrebidMobileVersionNumber), "source": "prebid-mobile"]] + + return app + } + + // OpenRTB 2.5 Object: Device in section 3.2.18 + + func openrtbDevice() -> [AnyHashable : Any]? { + var deviceDict: [AnyHashable : Any] = [:] + + if(RequestBuilder.myUserAgent != ""){ + deviceDict["ua"] = RequestBuilder.myUserAgent + } + + deviceDict["geo"] = openrtbGeo() + + + deviceDict["make"] = "Apple" + deviceDict["os"] = "iOS" + deviceDict["osv"] = UIDevice.current.systemVersion + deviceDict["h"] = UIScreen.main.bounds.size.height + deviceDict["w"] = UIScreen.main.bounds.size.width + + let deviceModel = UIDevice.current.modelName + if deviceModel != "" { + deviceDict["model"] = deviceModel + } + let netinfo = CTTelephonyNetworkInfo() + let carrier: CTCarrier? = netinfo.subscriberCellularProvider + + if (carrier?.carrierName?.count ?? 0) > 0 { + deviceDict["carrier"] = carrier?.carrierName ?? "" + } + + let reachability:Reachability = Reachability()! + var connectionType:Int = 0 + if (reachability.connection == .wifi){ + connectionType = 1 + }else if(reachability.connection == .cellular){ + connectionType = 2 + } + + deviceDict["connectiontype"] = connectionType + + if (carrier?.mobileCountryCode?.count ?? 0) > 0 && (carrier?.mobileNetworkCode?.count ?? 0) > 0 { + deviceDict["mccmnc"] = carrier?.mobileCountryCode ?? "" + ("-") + (carrier?.mobileNetworkCode ?? "") + } + let lmtAd:Bool = !ASIdentifierManager.shared().isAdvertisingTrackingEnabled + // Limit ad tracking + deviceDict["lmt"] = NSNumber(value:lmtAd).intValue + + let deviceId = RequestBuilder.DeviceUUID() + if deviceId != "" { + deviceDict["ifa"] = deviceId + } + + let timeInMiliseconds = Int(Date().timeIntervalSince1970) + deviceDict["devtime"] = timeInMiliseconds + + let pixelRatio: CGFloat = UIScreen.main.scale + + deviceDict["pxratio"] = pixelRatio; + + return deviceDict; + + } + + // OpenRTB 2.5 Object: Geo in section 3.2.19 + + func openrtbGeo() -> [AnyHashable : Any]? { + + if Location.shared.location != nil { + var geoDict: [AnyHashable : Any] = [:] + let latitude = Location.shared.location?.coordinate.latitude + let longitude = Location.shared.location?.coordinate.longitude + + geoDict["lat"] = latitude ?? 0.0 + geoDict["lon"] = longitude ?? 0.0 + + let locationTimestamp: Date? = Location.shared.location?.timestamp + let ageInSeconds: TimeInterval = -1.0 * (locationTimestamp?.timeIntervalSinceNow ?? 0.0) + let ageInMilliseconds = Int(ageInSeconds * 1000) + + geoDict["lastfix"] = ageInMilliseconds + geoDict["accuracy"] = Int(Location.shared.location?.horizontalAccuracy ?? 0) + + return geoDict + } + return nil + } + + func openrtbRegs() -> [AnyHashable : Any]? { + + var regsDict: [AnyHashable : Any] = [:] + + let gdpr:Bool? = Targeting.shared.subjectToGDPR + + if(gdpr != nil){ + regsDict["ext"] = ["gdpr": NSNumber(value: gdpr!).intValue] as NSDictionary + } + return regsDict + } + + // OpenRTB 2.5 Object: User in section 3.2.20 + func openrtbUser(adUnit: AdUnit?) -> [AnyHashable : Any]? { + var userDict: [AnyHashable : Any] = [:] + + let yob = Targeting.shared.yearOfBirth + if yob > 0 { + userDict["yob"] = yob + } + + let genderValue: Gender = Targeting.shared.gender + var gender: String + switch genderValue { + case .male: + gender = "M" + case .female: + gender = "F" + default: + gender = "O" + } + userDict["gender"] = gender + + let targetingParams = adUnit?.userKeywords + + let keywordString = fetchKeywordsString(targetingParams) + + if !(keywordString == "") { + userDict["keywords"] = keywordString + } + + if Targeting.shared.subjectToGDPR == true { + + let consentString = Targeting.shared.gdprConsentString + if (consentString != nil && consentString != .EMPTY_String) { + userDict["ext"] = ["consent": consentString] + } + } + return userDict + } + + class func precisionNumberFormatter() -> NumberFormatter? { + var precisionNumberFormatterToken: Int = 0 + var precisionNumberFormatter: NumberFormatter? + if (precisionNumberFormatterToken == 0) { + precisionNumberFormatter = NumberFormatter() + precisionNumberFormatter?.locale = NSLocale(localeIdentifier: "en_US") as Locale + } + precisionNumberFormatterToken = 1 + return precisionNumberFormatter + } + + func fetchKeywordsString(_ kewordsDictionary: [AnyHashable : Any]?) -> String? { + + var keywordString = "" + + for (key,dictValues) in (kewordsDictionary)! { + + let values = dictValues as? [String?] + + for value in values! { + + let keyvalue = "\(key)=\(value!)" + + if(keywordString != ""){ + keywordString = "\(keywordString),\(keyvalue)" + } else { + keywordString = keyvalue + } + } + } + + return keywordString + } + + class func UserAgent(callback:@escaping(_ userAgentString: String) -> Void) { + + var wkUserAgent:String = "" + let myGroup = DispatchGroup() + + let window = UIApplication.shared.keyWindow + let webView = WKWebView(frame:UIScreen.main.bounds) + webView.isHidden = true + window?.addSubview(webView) + myGroup.enter() + webView.loadHTMLString("", baseURL: nil) + webView.evaluateJavaScript("navigator.userAgent", completionHandler: { (userAgent, error) in + wkUserAgent = userAgent as! String + webView.stopLoading() + webView.removeFromSuperview() + myGroup.leave() + + }) + myGroup.notify(queue: .main) { + callback(wkUserAgent) + } + + } + + class func DeviceUUID() -> String { + var uuidString:String = "" + + if(uuidString == ""){ + let advertisingIdentifier:String = ASIdentifierManager.shared().advertisingIdentifier.uuidString + + if(advertisingIdentifier != .kIFASentinelValue){ + uuidString = advertisingIdentifier + } + } + + return uuidString + } + +} diff --git a/src/PrebidMobile/PrebidMobile/ResultCode.swift b/src/PrebidMobile/PrebidMobile/ResultCode.swift new file mode 100644 index 000000000..64b43f762 --- /dev/null +++ b/src/PrebidMobile/PrebidMobile/ResultCode.swift @@ -0,0 +1,45 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation + +@objc public enum ResultCode : Int { + case prebidDemandFetchSuccess + case prebidServerNotSpecified + case prebidInvalidAccountId + case prebidInvalidConfigId + case prebidInvalidSize + case prebidNetworkError + case prebidServerURLInvalid + case prebidServerError + case prebidDemandNoBids + case prebidDemandTimedOut + + public func name () -> String { + switch self { + case .prebidDemandFetchSuccess: return "Prebid Demand Fetch Successful" + case .prebidServerNotSpecified: return "Prebid Server not specified" + case .prebidInvalidAccountId: return "Prebid server does not recognize Account Id" + case .prebidInvalidConfigId: return "Prebid server does not recognize Config Id" + case .prebidInvalidSize: return "Prebid server does not recognize the size requested" + case .prebidNetworkError: return "Network Error" + case .prebidServerURLInvalid: return "Prebid Server url invalid" + case .prebidServerError: return "Prebid Server Error" + case .prebidDemandNoBids: return "Prebid Server did not return bids" + case .prebidDemandTimedOut: return "Prebid demand timedout" + + } + } +} diff --git a/src/PrebidMobile/PrebidMobile/Targeting.swift b/src/PrebidMobile/PrebidMobile/Targeting.swift new file mode 100644 index 000000000..b1339bc5c --- /dev/null +++ b/src/PrebidMobile/PrebidMobile/Targeting.swift @@ -0,0 +1,134 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation +import CoreLocation + +@objc public enum Gender:Int { + case unknown + case male + case female +} + +@objcMembers public class Targeting :NSObject { + + private var yearofbirth:Int = 0; + + /** + * This property gets the gender enum passed set by the developer + */ + + public var gender:Gender + + public var yearOfBirth: Int { + return yearofbirth + } + + /** + * This property gets the year of birth value set by the application developer + */ + public func setYearOfBirth(yob:Int) throws { + let date = Date() + let calendar = Calendar.current + + let year = calendar.component(.year, from: date) + + if(yob <= 1900 || yob >= year){ + throw ErrorCode.yearOfBirthInvalid + } else { + yearofbirth = yob + } + } + + /** + * This property clears year of birth value set by the application developer + */ + public func clearYearOfBirth() { + yearofbirth = 0 + } + + /** + * The itunes app id for targeting + */ + public var itunesID:String? + + /** + * The application location for targeting + */ + public var location:CLLocation? + + /** + * The application location precision for targeting + */ + public var locationPrecision:Int? + + /** + * The boolean value set by the user to collect user data + */ + public var subjectToGDPR:Bool { + set { + UserDefaults.standard.set(newValue, forKey: .PB_GDPR_SubjectToConsent) + } + + get { + var gdprConsent:Bool = false + + if((UserDefaults.standard.object(forKey: .PB_GDPR_SubjectToConsent)) != nil){ + gdprConsent = UserDefaults.standard.bool(forKey: .PB_GDPR_SubjectToConsent) + } else if((UserDefaults.standard.object(forKey: .IAB_GDPR_SubjectToConsent)) != nil){ + let stringValue :String = UserDefaults.standard.object(forKey: .IAB_GDPR_SubjectToConsent) as! String + + gdprConsent = Bool(stringValue)! + } + return gdprConsent; + } + } + + /** + * The consent string for sending the GDPR consent + */ + public var gdprConsentString:String? { + set { + UserDefaults.standard.set(newValue, forKey: .PB_GDPR_ConsentString) + } + + get { + let pbString:String? = UserDefaults.standard.object(forKey: .PB_GDPR_ConsentString) as? String + let iabString:String? = UserDefaults.standard.object(forKey: .IAB_GDPR_ConsentString) as? String + + var savedConsent :String? + if(pbString != nil){ + savedConsent = pbString + } else if(iabString != nil){ + savedConsent = iabString + } + return savedConsent + } + } + + /** + * The class is created as a singleton object & used + */ + public static let shared = Targeting() + + /** + * The initializer that needs to be created only once + */ + private override init() { + gender = Gender.unknown + } + + +} diff --git a/src/PrebidMobile/PrebidMobileTests/AdUnitTests/AdUnitTests.swift b/src/PrebidMobile/PrebidMobileTests/AdUnitTests/AdUnitTests.swift new file mode 100644 index 000000000..482f41930 --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/AdUnitTests/AdUnitTests.swift @@ -0,0 +1,81 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import XCTest +@testable import PrebidMobile + +class AdUnitTests: XCTestCase { + + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + Prebid.shared.prebidServerAccountId = "bfa84af2-bd16-4d35-96ad-31c6bb888df0" + Prebid.shared.prebidServerHost = PrebidHost.Appnexus + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testFetchDemandSuccess() { + let adUnit:AdUnit = AdUnit.shared + adUnit.testScenario = ResultCode.prebidDemandFetchSuccess + let testObject:AnyObject = () as AnyObject + + adUnit.fetchDemand(adObject: testObject) { (ResultCode) in + XCTAssertEqual(ResultCode.name(), "Prebid Demand Fetch Successful") + } + } + + func testFetchDemandNoBid() { + let adUnit:AdUnit = AdUnit.shared + adUnit.testScenario = ResultCode.prebidDemandNoBids + let testObject:AnyObject = () as AnyObject + + adUnit.fetchDemand(adObject: testObject) { (ResultCode) in + XCTAssertEqual(ResultCode.name(), "Prebid Server did not return bids") + } + } + + func testFetchDemandNetworkError() { + let adUnit:AdUnit = AdUnit.shared + adUnit.testScenario = ResultCode.prebidNetworkError + let testObject:AnyObject = () as AnyObject + + adUnit.fetchDemand(adObject: testObject) { (ResultCode) in + XCTAssertEqual(ResultCode.name(), "Network Error") + } + } + + func testFetchDemandTimedOut() { + let adUnit:AdUnit = AdUnit.shared + adUnit.testScenario = ResultCode.prebidDemandTimedOut + let testObject:AnyObject = () as AnyObject + + adUnit.fetchDemand(adObject: testObject) { (ResultCode) in + XCTAssertEqual(ResultCode.name(), "Prebid demand timedout") + } + } + + func testInvalidSize() { + let adUnit:AdUnit = AdUnit.shared + adUnit.testScenario = ResultCode.prebidInvalidSize + let testObject:AnyObject = () as AnyObject + + adUnit.fetchDemand(adObject: testObject) { (ResultCode) in + XCTAssertEqual(ResultCode.name(), "Prebid server does not recognize the size requested") + } + } + +} diff --git a/src/PrebidMobile/PrebidMobileTests/AdUnitTests/BannerAdUnitTests.swift b/src/PrebidMobile/PrebidMobileTests/AdUnitTests/BannerAdUnitTests.swift new file mode 100644 index 000000000..f93a6b9b7 --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/AdUnitTests/BannerAdUnitTests.swift @@ -0,0 +1,103 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import XCTest +@testable import PrebidMobile + +class BannerAdUnitTests: XCTestCase { + + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testBannerAdUnitCreation() + { + let adUnit = BannerAdUnit(configId: Constants.configID1, size: CGSize(width: Constants.width2, height: Constants.height2)) + XCTAssertTrue(1 == adUnit.adSizes.count) + XCTAssertTrue(adUnit.prebidConfigId == Constants.configID1) + XCTAssertTrue(0 == adUnit.refreshTime) + } + + func testBannerAdUnitAddSize() + { + let adUnit = BannerAdUnit(configId: Constants.configID1, size: CGSize(width: Constants.width1, height: Constants.height1)) + adUnit.adSizes = [CGSize(width: Constants.width1, height: Constants.height1), CGSize(width: Constants.width2, height: Constants.height2)] + XCTAssertNotNil(adUnit.adSizes) + XCTAssertTrue(2 == adUnit.adSizes.count) + } + + func testSetUserKeyword() + { + let adUnit = BannerAdUnit(configId: Constants.configID1, size: CGSize(width: Constants.width1, height: Constants.height1)) + adUnit.addUserKeyword(key: "key1", value: "value1") + adUnit.addUserKeyword(key: "key2", value: "value2") + XCTAssertTrue(2 == adUnit.userKeywords.count) + if let value = adUnit.userKeywords["key1"]?[0] + { + XCTAssertEqual("value1", value) + } + if let value = adUnit.userKeywords["key2"]?[0] + { + XCTAssertEqual("value2", value) + } + adUnit.removeUserKeyword(forKey: "key1") + XCTAssertTrue(1 == adUnit.userKeywords.count) + XCTAssertNil(adUnit.userKeywords["key1"]) + adUnit.removeUserKeyword(forKey: "key2") + XCTAssertTrue(0 == adUnit.userKeywords.count) + XCTAssertNil(adUnit.userKeywords["key2"]) + } + + func testSetUserKeywords() + { + let adUnit = BannerAdUnit(configId: Constants.configID1, size: CGSize(width: Constants.width1, height: Constants.height1)) + adUnit.addUserKeyword(key: "key1", value: "value1") + let arrValues = ["value1", "value2"] + adUnit.addUserKeywords(key: "key2", value: arrValues) + XCTAssertTrue(2 == adUnit.userKeywords.count) + if let value = adUnit.userKeywords["key1"]?[0] + { + XCTAssertEqual("value1", value) + } + if let value = adUnit.userKeywords["key2"]?[0] + { + XCTAssertEqual("value1", value) + } + if let value = adUnit.userKeywords["key2"]?[1] + { + XCTAssertEqual("value2", value) + } + adUnit.addUserKeywords(key: "key1", value: arrValues) + if let value = adUnit.userKeywords["key1"]?[0] + { + XCTAssertEqual("value1", value) + } + if let value = adUnit.userKeywords["key1"]?[1] + { + XCTAssertEqual("value2", value) + } + XCTAssertTrue(2 == adUnit.userKeywords.count) + adUnit.clearUserKeywords() + XCTAssertTrue(0 == adUnit.userKeywords.count) + XCTAssertNil(adUnit.userKeywords["key1"]) + XCTAssertNil(adUnit.userKeywords["key2"]) + } + +} + diff --git a/src/PrebidMobile/PrebidMobileTests/AdUnitTests/Constants.swift b/src/PrebidMobile/PrebidMobileTests/AdUnitTests/Constants.swift new file mode 100644 index 000000000..7e494ffc7 --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/AdUnitTests/Constants.swift @@ -0,0 +1,37 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +struct Constants { + + static let configID1 = "6ace8c7d-88c0-4623-8117-75bc3f0a2e45" + static let configID2 = "0c286d00-b3ee-4550-b15d-f71f8e746865" + static let configID3 = "35f1d17d-c99a-4d55-800e-062b80750d65" + static let bannerAdUnit1 = "Bannerxyz123" + static let bannerAdUnit2 = "Banner123xyz" + static let interstitialAdUnit = "interstitial123xyz" + static let APNPlacementId_1 = 1111 + static let APNPlacementId_2 = 2222 + static let APNPlacementId_3 = 3333 + static let accountId = "bfa84af2-bd16-4d35-96ad-31c6bb888df0"; + static let width1 = 320 + static let height1 = 50 + static let width2 = 300 + static let height2 = 250 + static let cpm1 = 1.37 + static let cpm2 = 0.51 + static let cpm3 = 0.54 + static let BIDDER_NAME = "MockBidder" + static let utAdRequestBaseUrl = "https://prebid.adnxs.com/pbs/v1/openrtb2/auction" +} diff --git a/src/PrebidMobile/PrebidMobileTests/AdUnitTests/ExAdUnit.swift b/src/PrebidMobile/PrebidMobileTests/AdUnitTests/ExAdUnit.swift new file mode 100644 index 000000000..2bc0cd0ee --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/AdUnitTests/ExAdUnit.swift @@ -0,0 +1,70 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation +@testable import PrebidMobile + +public extension AdUnit { + + private static var _myComputedProperty:ResultCode = .prebidDemandFetchSuccess + + var testScenario:ResultCode { + get { + return AdUnit._myComputedProperty + } + set(newValue) { + AdUnit._myComputedProperty = newValue + } + } + + func mock_fetchDemandSuccess(adObject:AnyObject, completion: @escaping(_ result:ResultCode) -> Void) { + + if(AdUnit._myComputedProperty == ResultCode.prebidDemandFetchSuccess){ + completion(ResultCode.prebidDemandFetchSuccess) + } else if(AdUnit._myComputedProperty == ResultCode.prebidDemandNoBids){ + completion(ResultCode.prebidDemandNoBids) + } else if(AdUnit._myComputedProperty == ResultCode.prebidDemandTimedOut){ + completion(ResultCode.prebidDemandTimedOut) + }else if(AdUnit._myComputedProperty == ResultCode.prebidNetworkError){ + completion(ResultCode.prebidNetworkError) + } + } + + static let shared : AdUnit = { + $0.initialize() + return $0 + }(AdUnit(configId: "138c4d03-0efb-4498-9dc6-cb5a9acb2ea4", size: CGSize(width: 300, height: 250))) + + + + //In Objective-C you'd perform the swizzling in load() , but this method is not permitted in Swift + func initialize() + { + // Perform this one time only + struct Inner { + static let i: () = { + let originalSelector = #selector(AdUnit.fetchDemand(adObject:completion:)) + let swizzledSelector = #selector(AdUnit.mock_fetchDemandSuccess(adObject:completion:)) + + let originalMethod = class_getInstanceMethod(AdUnit.self, originalSelector) + let swizzledMethod = class_getInstanceMethod(AdUnit.self, swizzledSelector) + + method_exchangeImplementations(originalMethod!, swizzledMethod!) + }() + } + let _ = Inner.i + } + +} diff --git a/src/PrebidMobile/PrebidMobileTests/AdUnitTests/Info.plist b/src/PrebidMobile/PrebidMobileTests/AdUnitTests/Info.plist new file mode 100644 index 000000000..6c40a6cd0 --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/AdUnitTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/src/PrebidMobile/PrebidMobileTests/AdUnitTests/InterstItialAdUnitTests.swift b/src/PrebidMobile/PrebidMobileTests/AdUnitTests/InterstItialAdUnitTests.swift new file mode 100644 index 000000000..2ffbdec80 --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/AdUnitTests/InterstItialAdUnitTests.swift @@ -0,0 +1,92 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import XCTest +@testable import PrebidMobile + +class InterstItialAdUnitTests: XCTestCase { + + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testInterstitialAdUnitCreation() + { + let adUnit = InterstitialAdUnit(configId: Constants.configID1) + XCTAssertTrue(adUnit.prebidConfigId == Constants.configID1) + XCTAssertTrue(0 == adUnit.refreshTime) + } + + func testSetUserKeyword() + { + let adUnit = InterstitialAdUnit(configId: Constants.configID1) + adUnit.addUserKeyword(key: "key1", value: "value1") + adUnit.addUserKeyword(key: "key2", value: "value2") + XCTAssertTrue(2 == adUnit.userKeywords.count) + if let value = adUnit.userKeywords["key1"]?[0] + { + XCTAssertEqual("value1", value) + } + if let value = adUnit.userKeywords["key2"]?[0] + { + XCTAssertEqual("value2", value) + } + adUnit.removeUserKeyword(forKey: "key1") + XCTAssertTrue(1 == adUnit.userKeywords.count) + XCTAssertNil(adUnit.userKeywords["key1"]) + adUnit.removeUserKeyword(forKey: "key2") + XCTAssertTrue(0 == adUnit.userKeywords.count) + XCTAssertNil(adUnit.userKeywords["key2"]) + } + + func testSetUserKeywords() + { + let adUnit = InterstitialAdUnit(configId: Constants.configID1) + adUnit.addUserKeyword(key: "key1", value: "value1") + let arrValues = ["value1", "value2"] + adUnit.addUserKeywords(key: "key2", value: arrValues) + XCTAssertTrue(2 == adUnit.userKeywords.count) + if let value = adUnit.userKeywords["key1"]?[0] + { + XCTAssertEqual("value1", value) + } + if let value = adUnit.userKeywords["key2"]?[0] + { + XCTAssertEqual("value1", value) + } + if let value = adUnit.userKeywords["key2"]?[1] + { + XCTAssertEqual("value2", value) + } + adUnit.addUserKeywords(key: "key1", value: arrValues) + if let value = adUnit.userKeywords["key1"]?[0] + { + XCTAssertEqual("value1", value) + } + if let value = adUnit.userKeywords["key1"]?[1] + { + XCTAssertEqual("value2", value) + } + XCTAssertTrue(2 == adUnit.userKeywords.count) + adUnit.clearUserKeywords() + XCTAssertTrue(0 == adUnit.userKeywords.count) + XCTAssertNil(adUnit.userKeywords["key1"]) + XCTAssertNil(adUnit.userKeywords["key2"]) + } +} diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/BidManagerTests.swift b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/BidManagerTests.swift new file mode 100644 index 000000000..51a00c8c8 --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/BidManagerTests.swift @@ -0,0 +1,291 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import XCTest +@testable import PrebidMobile +//@testable import GoogleMobileAds +//@testable import MoPub + +class BidManagerTests: XCTestCase { + + var request: URLRequest! + var jsonRequestBody = [String : Any]() + var loadAdSuccesfulException: XCTestExpectation? + var timeoutForImpbusRequest: TimeInterval = 0.0 + + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + timeoutForImpbusRequest = 10.0 + PBHTTPStubbingManager.shared().enable() + PBHTTPStubbingManager.shared().ignoreUnstubbedRequests = true + PBHTTPStubbingManager.shared().broadcastRequests = true + NotificationCenter.default.addObserver(self, selector: #selector(self.requestCompleted(_:)), name: NSNotification.Name.pbhttpStubURLProtocolRequestDidLoad, object: nil) + request = nil + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + PBHTTPStubbingManager.shared().disable() + PBHTTPStubbingManager.shared().removeAllStubs() + PBHTTPStubbingManager.shared().broadcastRequests = false + loadAdSuccesfulException = nil + NotificationCenter.default.removeObserver(self) + } + + // MARK: - Test methods. + func testBidManagerAdUnitRequest() { + stubRequestWithResponse("responsePBM") + let bannerUnit = BannerAdUnit(configId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45", size: CGSize(width: 300, height: 250)) + let manager:BidManager = BidManager(adUnit: bannerUnit) + manager.requestBidsForAdUnit() { (bidResponse, resultCode) in + self.loadAdSuccesfulException?.fulfill() + } + loadAdSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForImpbusRequest, handler: nil) + } + + func testBidManagerRequestForInvaidBidResponseNoCacheId() { + stubRequestWithResponse("responseInvalidResponseWithoutCacheId") + let bannerUnit = BannerAdUnit(configId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45", size: CGSize(width: 300, height: 250)) + let manager:BidManager = BidManager(adUnit: bannerUnit) + manager.requestBidsForAdUnit() { (bidResponse, resultCode) in + XCTAssertNil(bidResponse) + XCTAssertEqual(resultCode, ResultCode.prebidDemandNoBids) + self.loadAdSuccesfulException?.fulfill() + } + loadAdSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForImpbusRequest, handler: nil) + } + + func testBidManagerRequestForBidResponseFromTwoBidders(){ + stubRequestWithResponse("PrebidServerOneBidFromAppNexusOneBidFromRubicon") + let bannerUnit = BannerAdUnit(configId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45", size: CGSize(width: 300, height: 250)) + let manager:BidManager = BidManager(adUnit: bannerUnit) + manager.requestBidsForAdUnit() { (bidResponse, resultCode) in + XCTAssertEqual(resultCode, ResultCode.prebidDemandFetchSuccess) + XCTAssertNotNil(bidResponse) + let keywords = bidResponse?.customKeywords + XCTAssertEqual(15, keywords?.count) + self.loadAdSuccesfulException?.fulfill() + } + loadAdSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForImpbusRequest, handler: nil) + } + + func testBidManagerRequestForBidResponseOneSeatHasCacheIdAnotherSeatDoesNot(){ + stubRequestWithResponse("PrebidServerValidResponseAppNexusNoCacheIdAndRunbiconHasCacheId") + let bannerUnit = BannerAdUnit(configId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45", size: CGSize(width: 300, height: 250)) + let manager:BidManager = BidManager(adUnit: bannerUnit) + manager.requestBidsForAdUnit() { (bidResponse, resultCode) in + XCTAssertEqual(resultCode, ResultCode.prebidDemandFetchSuccess) + XCTAssertNotNil(bidResponse) + let keywords = bidResponse?.customKeywords + XCTAssertEqual(10, keywords?.count) + self.loadAdSuccesfulException?.fulfill() + } + loadAdSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForImpbusRequest, handler: nil) + + } + + func testBidManagerRequestForBidResponeTwoBidsOnTheSameSeat(){ + stubRequestWithResponse("responseValidTwoBidsOnTheSameSeat") + let bannerUnit = BannerAdUnit(configId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45", size: CGSize(width: 300, height: 250)) + let manager:BidManager = BidManager(adUnit: bannerUnit) + manager.requestBidsForAdUnit() { (bidResponse, resultCode) in + XCTAssertEqual(resultCode, ResultCode.prebidDemandFetchSuccess) + XCTAssertNotNil(bidResponse) + let keywords = bidResponse?.customKeywords + XCTAssertEqual(10, keywords?.count) + self.loadAdSuccesfulException?.fulfill() + } + loadAdSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForImpbusRequest, handler: nil) + + } + + func testBidManagerRequestForBidResponseTopBidNoCacheId(){ + stubRequestWithResponse("responseInvalidNoTopCacheId") + let bannerUnit = BannerAdUnit(configId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45", size: CGSize(width: 300, height: 250)) + let manager:BidManager = BidManager(adUnit: bannerUnit) + manager.requestBidsForAdUnit() { (bidResponse, resultCode) in + XCTAssertEqual(resultCode, ResultCode.prebidDemandNoBids) + XCTAssertNil(bidResponse) + self.loadAdSuccesfulException?.fulfill() + } + loadAdSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForImpbusRequest, handler: nil) + } + + func testBidManagerRequestForNoBidResponse() { + stubRequestWithResponse("noBidResponse") + let bannerUnit = BannerAdUnit(configId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45", size: CGSize(width: 300, height: 250)) + let manager:BidManager = BidManager(adUnit: bannerUnit) + manager.requestBidsForAdUnit() { (bidResponse, resultCode) in + XCTAssertNil(bidResponse) + self.loadAdSuccesfulException?.fulfill() + } + loadAdSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForImpbusRequest, handler: nil) + } + + func testBidManagerRequestForSuccessfulBidResponse() { + stubRequestWithResponse("responsePBM") + let bannerUnit = BannerAdUnit(configId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45", size: CGSize(width: 300, height: 250)) + let manager:BidManager = BidManager(adUnit: bannerUnit) + manager.requestBidsForAdUnit() { (bidResponse, resultCode) in + if(bidResponse != nil){ + XCTAssertEqual("appnexus", bidResponse?.customKeywords["hb_bidder"]) + XCTAssertEqual("appnexus", bidResponse?.customKeywords["hb_bidder_appnexus"]) + XCTAssertEqual("7008d51d-af2a-4357-acea-1cb672ac2189", bidResponse?.customKeywords["hb_cache_id"]) + XCTAssertEqual("7008d51d-af2a-4357-acea-1cb672ac2189", bidResponse?.customKeywords["hb_cache_id_appnexus"]) + XCTAssertEqual("mobile-app", bidResponse?.customKeywords["hb_env"]) + XCTAssertEqual("mobile-app", bidResponse?.customKeywords["hb_env_appnexus"]) + XCTAssertEqual("0.50", bidResponse?.customKeywords["hb_pb"]) + XCTAssertEqual("0.50", bidResponse?.customKeywords["hb_pb_appnexus"]) + XCTAssertEqual("300x250", bidResponse?.customKeywords["hb_size"]) + XCTAssertEqual("300x250", bidResponse?.customKeywords["hb_size_appnexus"]) + self.loadAdSuccesfulException?.fulfill() + } else { + self.loadAdSuccesfulException = nil + } + } + loadAdSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForImpbusRequest, handler: nil) + } + + func testBidManagerRequestForInvalidAccountId() { + stubRequestWithResponse("responseInvalidAccountId") + let bannerUnit = BannerAdUnit(configId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45", size: CGSize(width: 300, height: 250)) + let manager:BidManager = BidManager(adUnit: bannerUnit) + manager.requestBidsForAdUnit() { (bidResponse, resultCode) in + XCTAssertNil(bidResponse) + XCTAssertEqual(ResultCode.prebidInvalidAccountId, resultCode) + self.loadAdSuccesfulException?.fulfill() + } + loadAdSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForImpbusRequest, handler: nil) + } + + func testBidManagerRequestForInvalidConfigId() { + stubRequestWithResponse("responseInvalidConfigId") + let bannerUnit = BannerAdUnit(configId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45", size: CGSize(width: 300, height: 250)) + let manager:BidManager = BidManager(adUnit: bannerUnit) + manager.requestBidsForAdUnit() { (bidResponse, resultCode) in + XCTAssertNil(bidResponse) + XCTAssertEqual(ResultCode.prebidInvalidConfigId, resultCode) + self.loadAdSuccesfulException?.fulfill() + } + loadAdSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForImpbusRequest, handler: nil) + } + + func testBidManagerRequestForInvalidSizeId() { + stubRequestWithResponse("responseinvalidSize") + let bannerUnit = BannerAdUnit(configId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45", size: CGSize(width: 0, height: 250)) + let manager:BidManager = BidManager(adUnit: bannerUnit) + manager.requestBidsForAdUnit() { (bidResponse, resultCode) in + XCTAssertNil(bidResponse) + self.loadAdSuccesfulException?.fulfill() + } + loadAdSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForImpbusRequest, handler: nil) + } + + func testBidManagerRequestForIncorrectFormatOfConfigIdOrAccountId() { + stubRequestWithResponse("responseIncorrectFormat") + let bannerUnit = BannerAdUnit(configId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45", size: CGSize(width: 300, height: 250)) + let manager:BidManager = BidManager(adUnit: bannerUnit) + manager.requestBidsForAdUnit() { (bidResponse, resultCode) in + XCTAssertNil(bidResponse) + XCTAssertEqual(ResultCode.prebidServerError, resultCode) + self.loadAdSuccesfulException?.fulfill() + } + loadAdSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForImpbusRequest, handler: nil) + } + + func requestCompleted(_ notification: Notification?) { + var incomingRequest = notification?.userInfo![kPBHTTPStubURLProtocolRequest] as? URLRequest + let requestString = incomingRequest?.url?.absoluteString + let searchString = Constants.utAdRequestBaseUrl + if request == nil && requestString?.range(of:searchString) != nil { + request = notification!.userInfo![kPBHTTPStubURLProtocolRequest] as? URLRequest + jsonRequestBody = PBHTTPStubbingManager.jsonBodyOfURLRequest(asDictionary: request) as! [String : Any] + } + } + + // MARK: - Stubbing + func stubRequestWithResponse(_ responseName: String?) { + let currentBundle = Bundle(for: type(of: self)) + let baseResponse = try? String(contentsOfFile: currentBundle.path(forResource: responseName, ofType: "json") ?? "", encoding: .utf8) + let requestStub = PBURLConnectionStub() + requestStub.requestURL = "https://prebid.adnxs.com/pbs/v1/openrtb2/auction" + requestStub.responseCode = 200 + requestStub.responseBody = baseResponse + PBHTTPStubbingManager.shared().add(requestStub) + } + + func testTimeoutMillisUpdate(){ + let loadAdSuccesfulException = expectation(description: "\(#function)") + stubRequestWithResponse("noBidResponse") + Prebid.shared.prebidServerHost = PrebidHost.Appnexus + XCTAssertTrue(!Prebid.shared.timeoutUpdated) + XCTAssertTrue(Prebid.shared.timeoutMillis == 10000) + let bannerUnit = BannerAdUnit(configId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45", size: CGSize(width: 300, height: 250)) + let manager:BidManager = BidManager(adUnit: bannerUnit) + manager.requestBidsForAdUnit() { (bidResponse, resultCode) in + XCTAssertTrue(Prebid.shared.timeoutUpdated) + XCTAssertTrue(Prebid.shared.timeoutMillis > 700 && Prebid.shared.timeoutMillis < 800) + loadAdSuccesfulException.fulfill() + } + + waitForExpectations(timeout: 10.0, handler: nil) + } + + func testTimeoutMillisUpdate2(){ + let loadAdSuccesfulException = expectation(description: "\(#function)") + stubRequestWithResponse("noBidResponseNoTmax") + Prebid.shared.prebidServerHost = PrebidHost.Appnexus + XCTAssertTrue(!Prebid.shared.timeoutUpdated) + XCTAssertTrue(Prebid.shared.timeoutMillis == 10000) + let bannerUnit = BannerAdUnit(configId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45", size: CGSize(width: 300, height: 250)) + let manager:BidManager = BidManager(adUnit: bannerUnit) + manager.requestBidsForAdUnit() { (bidResponse, resultCode) in + XCTAssertTrue(!Prebid.shared.timeoutUpdated) + XCTAssertTrue(Prebid.shared.timeoutMillis == 10000) + loadAdSuccesfulException.fulfill() + } + + waitForExpectations(timeout: 10.0, handler: nil) + } + + func testTimeoutMillisUpdate3(){ + let loadAdSuccesfulException = expectation(description: "\(#function)") + stubRequestWithResponse("noBidResponseTmaxTooLarge") + Prebid.shared.prebidServerHost = PrebidHost.Appnexus + XCTAssertTrue(!Prebid.shared.timeoutUpdated) + XCTAssertTrue(Prebid.shared.timeoutMillis == 10000) + let bannerUnit = BannerAdUnit(configId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45", size: CGSize(width: 300, height: 250)) + let manager:BidManager = BidManager(adUnit: bannerUnit) + manager.requestBidsForAdUnit() { (bidResponse, resultCode) in + XCTAssertTrue(Prebid.shared.timeoutUpdated) + XCTAssertTrue(Prebid.shared.timeoutMillis == 10000) + loadAdSuccesfulException.fulfill() + } + + waitForExpectations(timeout: 10.0, handler: nil) + } +} diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/CLLocationManager+Swizzle.swift b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/CLLocationManager+Swizzle.swift new file mode 100644 index 000000000..b25bef263 --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/CLLocationManager+Swizzle.swift @@ -0,0 +1,56 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation +import MapKit + + +private let swizzling: (AnyClass, Selector, Selector) -> () = { forClass, originalSelector, swizzledSelector in + if let originalMethod = class_getInstanceMethod(forClass, originalSelector), + let swizzledMethod = class_getInstanceMethod(forClass, swizzledSelector) { + method_exchangeImplementations(originalMethod, swizzledMethod) + } +} + +extension CLLocationManager { + static let classInit: Void = { + let originalSelector = #selector(CLLocationManager.startUpdatingLocation) + let swizzledSelector = #selector(swizzledStartLocation) + swizzling(CLLocationManager.self, originalSelector, swizzledSelector) + + let originalStopSelector = #selector(CLLocationManager.stopUpdatingLocation) + let swizzledStopSelector = #selector(swizzledStopLocation) + swizzling(CLLocationManager.self, originalStopSelector, swizzledStopSelector) + }() + + @objc func swizzledStartLocation() { + print("swizzled start location") + if !MockCLLocationManager.shared.isRunning { + MockCLLocationManager.shared.startMocks(usingGpx: "locationTrack") + } + MockCLLocationManager.shared.delegate = self.delegate + MockCLLocationManager.shared.startUpdatingLocation() + } + + @objc func swizzledStopLocation() { + print("swizzled stop location") + MockCLLocationManager.shared.stopUpdatingLocation() + } + + @objc func swizzedRequestLocation() { + print("swizzled request location") + MockCLLocationManager.shared.requestLocation() + } +} diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/DispatcherTests.swift b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/DispatcherTests.swift new file mode 100644 index 000000000..309eebddc --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/DispatcherTests.swift @@ -0,0 +1,65 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import XCTest +@testable import PrebidMobile + +class DispatcherTests: XCTestCase, DispatcherDelegate { + + var loadSuccesfulException: XCTestExpectation? + var timeoutForRequest: TimeInterval = 0.0 + + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + timeoutForRequest = 10.0 + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + loadSuccesfulException = nil + } + + func testDispatcherIsNotNil() + { + let dispatcher = Dispatcher(withDelegate: self) + XCTAssertNotNil(dispatcher) + XCTAssertNil(dispatcher.timer) + } + + func testStartDispatcherWithRefreshMiliseconds() + { + let dispatcher = Dispatcher(withDelegate: self) + dispatcher.start(autoRefreshMillies: 10.0) + XCTAssertNotNil(dispatcher.timer) + XCTAssertEqual(dispatcher.timer?.timeInterval, TimeInterval(10.0/1000)) + loadSuccesfulException = expectation(description: "\(#function)") + waitForExpectations(timeout: timeoutForRequest, handler: nil) + } + + func testStopDispatcher() + { + let dispatcher = Dispatcher(withDelegate: self) + dispatcher.start(autoRefreshMillies: 10.0) + XCTAssertNotNil(dispatcher.timer) + XCTAssertTrue(dispatcher.timer!.isValid) + dispatcher.stop() + XCTAssertNil(dispatcher.timer) + } + + //MARK:- DispatcherDelegate method + func refreshDemand() { + loadSuccesfulException?.fulfill() + } +} diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Info.plist b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Info.plist new file mode 100644 index 000000000..26f8bc37e --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Info.plist @@ -0,0 +1,30 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + NSLocationAlwaysAndWhenInUseUsageDescription + Would like to use the location for better ad targeting + NSLocationAlwaysUsageDescription + Would like to use the location for better ad targeting + NSLocationUsageDescription + Would like to use the location for better ad targeting + NSLocationWhenInUseUsageDescription + Would like to use the location for better ad targeting + + diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/MockCLLocationManager.swift b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/MockCLLocationManager.swift new file mode 100644 index 000000000..4a5c6042c --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/MockCLLocationManager.swift @@ -0,0 +1,120 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import Foundation +import CoreLocation +import MapKit + +class RepeatingTimer { + + let timeInterval: TimeInterval + + init(timeInterval: TimeInterval) { + self.timeInterval = timeInterval + } + + private lazy var timer: DispatchSourceTimer = { + let t = DispatchSource.makeTimerSource() + t.schedule(deadline: .now() + self.timeInterval, repeating: self.timeInterval) + t.setEventHandler(handler: { [weak self] in + self?.eventHandler?() + }) + return t + }() + + var eventHandler: (() -> Void)? + + private enum State { + case suspended + case resumed + } + + private var state: State = .suspended + + deinit { + timer.setEventHandler {} + timer.cancel() + /* + If the timer is suspended, calling cancel without resuming + triggers a crash. This is documented here https://forums.developer.apple.com/thread/15902 + */ + resume() + eventHandler = nil + } + + func resume() { + if state == .resumed { + return + } + state = .resumed + timer.resume() + } + + func suspend() { + if state == .suspended { + return + } + state = .suspended + timer.suspend() + } +} + + +class MockCLLocationManager: CLLocationManager { + private var timer: Timer? + private var locations: CLLocation? = nil + private var _isRunning:Bool = false + var updateInterval: TimeInterval = 0.1 + var isRunning: Bool { + get { + return _isRunning + } + } + static let shared = MockCLLocationManager() + private override init() { + + } + func startMocks(usingGpx fileName: String) { + + } + func stopMocking() { + self.stopUpdatingLocation() + } + private func updateLocation() { + delegate?.locationManager?(self, didUpdateLocations: [locations!]) + + } + override func startUpdatingLocation() { + + timer = Timer(timeInterval: updateInterval, repeats: true, block: { + [unowned self](_) in + self.locations = CLLocation(latitude: 28.5388, longitude: -81.3756) + self.updateLocation() + }) + if let timer = timer { + RunLoop.main.add(timer, forMode: .defaultRunLoopMode) + } + } + override func stopUpdatingLocation() { + timer?.invalidate() + self.locations = nil + _isRunning = false + } + override func requestLocation() { + self.locations = CLLocation(latitude: 28.5388, longitude: -81.3756) + delegate?.locationManager?(self, didUpdateLocations: [locations!]) + + } +} diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/RequestBuilderTests.swift b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/RequestBuilderTests.swift new file mode 100644 index 000000000..e16812837 --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/RequestBuilderTests.swift @@ -0,0 +1,369 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import XCTest +import CoreTelephony +import CoreLocation +import AdSupport +import WebKit +@testable import PrebidMobile + +class RequestBuilderTests: XCTestCase,CLLocationManagerDelegate { + + var app:XCUIApplication? + var coreLocation:CLLocationManager? = nil + var adUnit : BannerAdUnit! + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + Prebid.shared.prebidServerAccountId = "bfa84af2-bd16-4d35-96ad-31c6bb888df0" + Prebid.shared.prebidServerHost = PrebidHost.Appnexus + +// app = XCUIApplication() +// +// addUIInterruptionMonitor(withDescription: "Location authorization") { (alert) -> Bool in +// if alert.buttons["OK"].exists { +// alert.buttons["OK"].tap() +// } +// return true +// } +// +// app?.launch() + + let targeting = Targeting.shared + targeting.gender = Gender.male + targeting.subjectToGDPR = true + targeting.itunesID = "12345" + targeting.gdprConsentString = "testGDPR" + + adUnit = BannerAdUnit(configId: Constants.configID1, size: CGSize(width: Constants.width2, height: Constants.height2)) + adUnit.identifier = "PrebidMobile" + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + adUnit = nil + } + + func testPostData() + { + let targeting = Targeting.shared + try! targeting.setYearOfBirth(yob: 1990) + + do { + try RequestBuilder.shared.buildPrebidRequest(adUnit: adUnit) { (urlRequest) in + let jsonRequestBody = PBHTTPStubbingManager.jsonBodyOfURLRequest(asDictionary: urlRequest) as! [String : Any] + XCTAssertNotNil(jsonRequestBody["regs"]) + if let regs = jsonRequestBody["regs"] as? [String : Any] + { + if let ext = regs["ext"] as? [String : Any] + { + XCTAssertEqual(1, ext["gdpr"] as! Int) + } + } + if let user = jsonRequestBody["user"] as? [String : Any] + { + if let ext = user["ext"] as? [String : Any] + { + XCTAssertEqual("testGDPR", ext["consent"] as! String) + } + XCTAssertEqual("M", user["gender"] as! String) + XCTAssertEqual(1990, user["yob"] as! Int) + } + self.validationResponse(jsonRequestBody: jsonRequestBody) + + } + } catch let error { + print(error.localizedDescription) + } + } + + func testPostDataWithCustomHost() + { + let targeting = Targeting.shared + try! targeting.setYearOfBirth(yob: 1990) + + XCTAssertThrowsError(try Prebid.shared.setCustomPrebidServer(url: "http://www.rubicon.org")) + Prebid.shared.prebidServerAccountId = "bfa84af2-bd16-4d35-96ad-31c6bb888df0" + Prebid.shared.prebidServerHost = PrebidHost.Custom + + do { + try RequestBuilder.shared.buildPrebidRequest(adUnit: adUnit) { (urlRequest) in + let jsonRequestBody = PBHTTPStubbingManager.jsonBodyOfURLRequest(asDictionary: urlRequest) as! [String : Any] + self.validationResponse(jsonRequestBody: jsonRequestBody) + } + } catch let error { + print(error.localizedDescription) + } + } + + func testPostDataWithNoGDPR() + { + let targeting = Targeting.shared + targeting.subjectToGDPR = false + try! targeting.setYearOfBirth(yob: 1990) + + do { + try RequestBuilder.shared.buildPrebidRequest(adUnit: adUnit) { (urlRequest) in + let jsonRequestBody = PBHTTPStubbingManager.jsonBodyOfURLRequest(asDictionary: urlRequest) as! [String : Any] + XCTAssertNil(jsonRequestBody["regs"]) + if let user = jsonRequestBody["user"] as? [String : Any] + { + XCTAssertNil(user["ext"]) + XCTAssertEqual("M", user["gender"] as! String) + XCTAssertEqual(1990, user["yob"] as! Int) + } + self.validationResponse(jsonRequestBody: jsonRequestBody) + } + } catch let error { + print(error.localizedDescription) + } + } + + func testPostDataWithNoTargetingKeys() + { + let targeting = Targeting.shared + targeting.gender = Gender.unknown + targeting.subjectToGDPR = false + targeting.itunesID = nil + targeting.clearYearOfBirth() + + do { + try RequestBuilder.shared.buildPrebidRequest(adUnit: adUnit) { (urlRequest) in + let jsonRequestBody = PBHTTPStubbingManager.jsonBodyOfURLRequest(asDictionary: urlRequest) as! [String : Any] + print(jsonRequestBody) + XCTAssertNil(jsonRequestBody["regs"]) + if let user = jsonRequestBody["user"] as? [String : Any] + { + XCTAssertNil(user["ext"]) + XCTAssertEqual("O", user["gender"] as! String) + XCTAssertNil(user["yob"]) + } + self.validationResponse(jsonRequestBody: jsonRequestBody) + } + } catch let error { + print(error.localizedDescription) + } + } + + func testPostDataWithCustomKeyword() + { + let targeting = Targeting.shared + targeting.gender = Gender.unknown + targeting.subjectToGDPR = false + targeting.itunesID = nil + targeting.clearYearOfBirth() + adUnit.addUserKeyword(key: "key1", value: "value1") + do { + try RequestBuilder.shared.buildPrebidRequest(adUnit: adUnit) { (urlRequest) in + let jsonRequestBody = PBHTTPStubbingManager.jsonBodyOfURLRequest(asDictionary: urlRequest) as! [String : Any] + XCTAssertNil(jsonRequestBody["regs"]) + if let user = jsonRequestBody["user"] as? [String : Any] + { + XCTAssertNil(user["ext"]) + XCTAssertEqual("O", user["gender"] as! String) + XCTAssertNil(user["yob"]) + XCTAssertNotNil(user["keywords"]) + XCTAssertEqual("key1=value1", user["keywords"] as! String) + + } + self.validationResponse(jsonRequestBody: jsonRequestBody) + } + } catch let error { + print(error.localizedDescription) + } + } + + func testPostDataWithShareLocationOn() + { + coreLocation = CLLocationManager() + coreLocation?.delegate = self + + coreLocation!.swizzledStartLocation() + + coreLocation?.swizzedRequestLocation() + + Prebid.shared.shareGeoLocation = true + do { + sleep(10) + try RequestBuilder.shared.buildPrebidRequest(adUnit: adUnit) { (urlRequest) in + let jsonRequestBody = PBHTTPStubbingManager.jsonBodyOfURLRequest(asDictionary: urlRequest) as! [String : Any] + let device = jsonRequestBody["device"] as? [String : Any] + XCTAssertNotNil(device!["geo"]) + let geo = device!["geo"] as? [String : Any] + XCTAssertNotNil(geo!["accuracy"]) + XCTAssertNotNil(geo!["lastfix"]) + XCTAssertNotNil(geo!["lat"]) + XCTAssertNotNil(geo!["lon"]) + } + } catch let error { + print(error.localizedDescription) + } + + + } + + func testPostDataWithShareLocationOff() + { + Prebid.shared.shareGeoLocation = false + do { + sleep(10) + try RequestBuilder.shared.buildPrebidRequest(adUnit: adUnit) { (urlRequest) in + let jsonRequestBody = PBHTTPStubbingManager.jsonBodyOfURLRequest(asDictionary: urlRequest) as! [String : Any] + let device = jsonRequestBody["device"] as? [String : Any] + XCTAssertNil(device!["geo"]) + } + } catch let error { + print(error.localizedDescription) + } + } + + func testYOBWith1855() + { + let targeting = Targeting.shared + XCTAssertThrowsError(try targeting.setYearOfBirth(yob: 1855)) + let value = Targeting.shared.yearOfBirth + XCTAssertFalse(value == 1855) + + do { + try RequestBuilder.shared.buildPrebidRequest(adUnit: adUnit) { (urlRequest) in + let jsonRequestBody = PBHTTPStubbingManager.jsonBodyOfURLRequest(asDictionary: urlRequest) as! [String : Any] + let user = jsonRequestBody["user"] as? [String : Any] + XCTAssertNil(user!["yob"]) + } + } catch let error { + print(error.localizedDescription) + } + } + + func testYOBWithNegative1() + { + let targeting = Targeting.shared + XCTAssertThrowsError(try targeting.setYearOfBirth(yob: -1)) + let value = Targeting.shared.yearOfBirth + XCTAssertFalse(value == -1) + + do { + try RequestBuilder.shared.buildPrebidRequest(adUnit: adUnit) { (urlRequest) in + let jsonRequestBody = PBHTTPStubbingManager.jsonBodyOfURLRequest(asDictionary: urlRequest) as! [String : Any] + let user = jsonRequestBody["user"] as? [String : Any] + XCTAssertNil(user!["yob"]) + } + } catch let error { + print(error.localizedDescription) + } + + } + + func validationResponse(jsonRequestBody : [String : Any]) { + + XCTAssertNotNil(jsonRequestBody["id"]) + XCTAssertNotNil(jsonRequestBody["source"]) + XCTAssertNotNil(jsonRequestBody["imp"]) + XCTAssertNotNil(jsonRequestBody["device"]) + XCTAssertNotNil(jsonRequestBody["app"]) + XCTAssertNotNil(jsonRequestBody["user"]) + XCTAssertNotNil(jsonRequestBody["ext"]) + + if let impArray = jsonRequestBody["imp"] as? [Any], let impDic = impArray[0] as? [String : Any] + { + XCTAssertEqual("PrebidMobile", impDic["id"] as! String) + XCTAssertEqual(1, impDic["secure"] as! Int) + if let ext = impDic["ext"] as? [String:Any], let prebid = ext["prebid"] as? [String:Any], let storedrequest = prebid["storedrequest"] as? [String:Any] + { + XCTAssertEqual("6ace8c7d-88c0-4623-8117-75bc3f0a2e45", storedrequest["id"] as! String) + } + if let banner = impDic["banner"] as? [String:Any], let format = banner["format"] as? [Any], let size = format[0] as? [String:Any] + { + XCTAssertEqual(250, size["h"] as! Int) + XCTAssertEqual(300, size["w"] as! Int) + } + } + + if let device = jsonRequestBody["device"] as? [String : Any] + { + let reachability:Reachability = Reachability()! + var connectionType:Int = 0 + if (reachability.connection == .wifi){ + connectionType = 1 + }else if(reachability.connection == .cellular){ + connectionType = 2 + } + XCTAssertEqual(connectionType, device["connectiontype"] as! Int) + XCTAssertEqual("Apple", device["make"] as! String) + XCTAssertEqual("iOS", device["os"] as! String) + XCTAssertEqual(UIDevice.current.systemVersion, device["osv"] as! String) + XCTAssertEqual(UIScreen.main.bounds.size.height, device["h"] as! CGFloat) + XCTAssertEqual(UIScreen.main.bounds.size.width, device["w"] as! CGFloat) + XCTAssertEqual(UIDevice.current.modelName, device["model"] as! String) + let carrier: CTCarrier? = CTTelephonyNetworkInfo().subscriberCellularProvider + if (carrier?.carrierName?.count ?? 0) > 0 { + XCTAssertEqual(carrier?.carrierName ?? "", device["carrier"] as! String) + } + XCTAssertEqual(RequestBuilder.DeviceUUID(), device["ifa"] as! String) + let lmtAd:Bool = !ASIdentifierManager.shared().isAdvertisingTrackingEnabled + XCTAssertEqual(NSNumber(value:lmtAd).intValue, device["lmt"] as! Int) + XCTAssertEqual(UIScreen.main.scale, device["pxratio"] as! CGFloat) + } + if let ext = jsonRequestBody["ext"] as? [String : Any] + { + XCTAssertNotNil(ext["prebid"]) + if let prebid = ext["prebid"] as? [String : Any] + { + XCTAssertNotNil(prebid["cache"]) + if let cache = prebid["cache"] as? [String : Any] + { + XCTAssertNotNil(cache["bids"]) + } + if let storedrequest = prebid["storedrequest"] as? [String : Any] + { + if let id = storedrequest["id"] as? String + { + XCTAssertEqual("bfa84af2-bd16-4d35-96ad-31c6bb888df0", id) + } + } + XCTAssertNotNil(prebid["targeting"]) + } + } + if let app = jsonRequestBody["app"] as? [String : Any] + { + if let ext = app["ext"] as? [String : Any] + { + if let prebid = ext["prebid"] as? [String : Any] + { + XCTAssertEqual("prebid-mobile", prebid["source"] as! String) + XCTAssertEqual("1.0", prebid["version"] as! String) + } + } + if let publisher = app["publisher"] as? [String : Any] + { + if let id = publisher["id"] as? String + { + XCTAssertEqual("bfa84af2-bd16-4d35-96ad-31c6bb888df0", id) + } + } + } + if let source = jsonRequestBody["source"] as? [String : Any] + { + XCTAssertEqual("123", source["tid"] as! String) + } + } + + func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]){ + Location.shared.location = locations.last! + + } +} + + diff --git a/sdk/PrebidMobile/PBHost.h b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Category/NSURLRequest+HTTPBodyTesting.h similarity index 54% rename from sdk/PrebidMobile/PBHost.h rename to src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Category/NSURLRequest+HTTPBodyTesting.h index b0d543041..65b9ae16c 100644 --- a/sdk/PrebidMobile/PBHost.h +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Category/NSURLRequest+HTTPBodyTesting.h @@ -1,4 +1,4 @@ -/* Copyright 2017 APPNEXUS INC +/* Copyright 2018-2019 Prebid.org, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -15,14 +15,17 @@ #import +// This category is only useful when NSURLSession is present + +@interface NSURLRequest (HTTPBodyTesting) /** - * Prebid Server host selection enumerator to be passed in by the user + * Unfortunately, when sending POST requests (with a body) using NSURLSession, + * by the time the request arrives at OHHTTPStubs, the HTTPBody of the + * NSURLRequest has been reset to nil. + * + * You can use this method to retrieve the HTTPBody for testing and use it to + * conditionally stub your requests. */ -typedef NS_ENUM(NSUInteger, PBServerHost) { - PBServerHostAppNexus = 1, - PBServerHostRubicon -}; - -@interface PBHost : NSObject +- (NSData *)PBHTTPStubs_HTTPBody; @end diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Category/NSURLRequest+HTTPBodyTesting.m b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Category/NSURLRequest+HTTPBodyTesting.m new file mode 100644 index 000000000..27f82a4ec --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Category/NSURLRequest+HTTPBodyTesting.m @@ -0,0 +1,70 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "NSURLRequest+HTTPBodyTesting.h" + +#import "NSObject+Swizzling.h" + +#pragma mark - NSURLRequest+CustomHTTPBody + +NSString * const PBHTTPStubs_HTTPBodyKey = @"HTTPBody"; + +@implementation NSURLRequest (HTTPBodyTesting) + +- (NSData*)PBHTTPStubs_HTTPBody +{ + return [NSURLProtocol propertyForKey:PBHTTPStubs_HTTPBodyKey inRequest:self]; +} + +@end + +//////////////////////////////////////////////////////////////////////////////// +#pragma mark - NSMutableURLRequest+HTTPBodyTesting + +typedef void(*PBHHTTPStubsSetterIMP)(id, SEL, id); +static PBHHTTPStubsSetterIMP orig_setHTTPBody; + +static void PBHTTPStubs_setHTTPBody(id self, SEL _cmd, NSData* HTTPBody) +{ + // store the http body via NSURLProtocol + if (HTTPBody) { + [NSURLProtocol setProperty:HTTPBody forKey:PBHTTPStubs_HTTPBodyKey inRequest:self]; + } else { + // unfortunately resetting does not work properly as the NSURLSession also uses this to reset the property + } + + orig_setHTTPBody(self, _cmd, HTTPBody); +} + +/** + * Swizzles setHTTPBody: in order to maintain a copy of the http body for later + * reference and calls the original implementation. + * + * @warning Should not be used in production, testing only. + */ +@interface NSMutableURLRequest (HTTPBodyTesting) @end + +@implementation NSMutableURLRequest (HTTPBodyTesting) + ++ (void)load +{ + orig_setHTTPBody = (PBHHTTPStubsSetterIMP)PBHTTPStubsReplaceMethod(@selector(setHTTPBody:), + (IMP)PBHTTPStubs_setHTTPBody, + [NSMutableURLRequest class], + NO); +} + + +@end diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/NSObject+Swizzling.h b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/NSObject+Swizzling.h new file mode 100644 index 000000000..9ef09af99 --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/NSObject+Swizzling.h @@ -0,0 +1,46 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import + +@interface NSObject (Swizzling) + ++ (void)exchangeClassSelector:(SEL)originalSelector + withSelector:(SEL)swizzledSelector; ++ (void)exchangeInstanceSelector:(SEL)originalSelector + withSelector:(SEL)swizzledSelector; + +/** + * Replaces the selector's associated method implementation with the + * given implementation (or adds it, if there was no existing one). + * + * @param selector The selector entry in the dispatch table. + * @param newImpl The implementation that will be associated with + * the given selector. + * @param affectedClass The class whose dispatch table will be altered. + * @param isClassMethod Set to YES if the selector denotes a class + * method, or NO if it is an instance method. + * @return The previous implementation associated with + * the swizzled selector. You should store the + * implementation and call it when overwriting + * the selector. + */ +__attribute__((warn_unused_result)) IMP PBHTTPStubsReplaceMethod(SEL selector, + IMP newImpl, + Class affectedClass, + BOOL isClassMethod); + + +@end diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/NSObject+Swizzling.m b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/NSObject+Swizzling.m new file mode 100644 index 000000000..6e4794a3f --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/NSObject+Swizzling.m @@ -0,0 +1,77 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "NSObject+Swizzling.h" +#import + +@implementation NSObject (Swizzling) + ++ (void)exchangeClassSelector:(SEL)originalSelector withSelector:(SEL)swizzledSelector { + Class class = object_getClass((id)self); + + Method originalMethod = class_getInstanceMethod(class, originalSelector); + Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); + + BOOL didAddMethod = class_addMethod(class, + originalSelector, + method_getImplementation(swizzledMethod), + method_getTypeEncoding(swizzledMethod)); + if (didAddMethod) { + class_replaceMethod(class, + swizzledSelector, + method_getImplementation(originalMethod), + method_getTypeEncoding(originalMethod)); + } else { + method_exchangeImplementations(originalMethod, swizzledMethod); + } +} + ++ (void)exchangeInstanceSelector:(SEL)originalSelector withSelector:(SEL)swizzledSelector { + Class class = [self class]; + + Method originalMethod = class_getInstanceMethod(class, originalSelector); + Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); + + BOOL didAddMethod = class_addMethod(class, + originalSelector, + method_getImplementation(swizzledMethod), + method_getTypeEncoding(swizzledMethod)); + if (didAddMethod) { + class_replaceMethod(class, + swizzledSelector, + method_getImplementation(originalMethod), + method_getTypeEncoding(originalMethod)); + } else { + method_exchangeImplementations(originalMethod, swizzledMethod); + } +} + +IMP PBHTTPStubsReplaceMethod(SEL selector, + IMP newImpl, + Class affectedClass, + BOOL isClassMethod) +{ + Method origMethod = isClassMethod ? class_getClassMethod(affectedClass, selector) : class_getInstanceMethod(affectedClass, selector); + IMP origImpl = method_getImplementation(origMethod); + + if (!class_addMethod(isClassMethod ? object_getClass(affectedClass) : affectedClass, selector, newImpl, method_getTypeEncoding(origMethod))) + { + method_setImplementation(origMethod, newImpl); + } + + return origImpl; +} + +@end diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/PBTestGlobal.h b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/PBTestGlobal.h new file mode 100644 index 000000000..8958e1012 --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/PBTestGlobal.h @@ -0,0 +1,50 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import + + + +#pragma mark - Constants. + +extern NSString * const kFauxMediationAdapterClassDoesNotExist; +extern NSString * const OK_RESULT_CB_URL; + + + +#pragma mark - Simple diagnostics for tests. + +#define TESTTRACE() NSLog(@" TEST TRACE %s", __PRETTY_FUNCTION__) +#define TESTTRACEM(format, ...) NSLog(@" TEST TRACE %s -- %@", __PRETTY_FUNCTION__, [NSString stringWithFormat:format, ##__VA_ARGS__]) + +#define TESTTRACEJSON(jsonString) \ + { \ + NSData *objectData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; \ + NSError *error; \ + NSDictionary *json = [NSJSONSerialization JSONObjectWithData: objectData \ + options: NSJSONReadingMutableContainers \ + error: &error]; \ + TESTTRACEM(@"\n\t%@=%@", @ #jsonString, json); \ + } + + + + +#pragma mark - PBTestGlobal + +@interface PBTestGlobal : NSObject + //EMPTY +@end + diff --git a/sdk/PrebidMobile/Logging/PBLogManager.m b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/PBTestGlobal.m similarity index 64% rename from sdk/PrebidMobile/Logging/PBLogManager.m rename to src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/PBTestGlobal.m index 40702389c..de6608495 100644 --- a/sdk/PrebidMobile/Logging/PBLogManager.m +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/PBTestGlobal.m @@ -1,4 +1,4 @@ -/* Copyright 2017 Prebid.org, Inc. +/* Copyright 2018-2019 Prebid.org, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13,18 +13,19 @@ limitations under the License. */ -#import "PBLogManager.h" +#import "PBTestGlobal.h" -static PBLogLevel PBLOG_LEVEL = PBLogLevelWarn; -@implementation PBLogManager -+ (PBLogLevel)getPBLogLevel { - return PBLOG_LEVEL; -} +#pragma mark - Constants. -+ (void)setPBLogLevel:(PBLogLevel)level { - PBLOG_LEVEL = level; -} +NSString * const kFauxMediationAdapterClassDoesNotExist = @"FauxMediationAdapterClassDoesNotExist"; +NSString * const OK_RESULT_CB_URL = @"http://MOCK__result"; + + + +@implementation PBTestGlobal + //EMPTY @end + diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Responses/PrebidServerOneBidFromAppNexusOneBidFromRubicon.json b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Responses/PrebidServerOneBidFromAppNexusOneBidFromRubicon.json new file mode 100644 index 000000000..31a4853df --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Responses/PrebidServerOneBidFromAppNexusOneBidFromRubicon.json @@ -0,0 +1,96 @@ +{ + "id": "3dc76667-a500-4e01-a43b-368e36d6c7cc", + "seatbid": [ + { + "bid": [ + { + "id": "4761106207662573395", + "impid": "Banner_300x250", + "price": 0.5, + "adm": "", + "adid": "113276871", + "adomain": [ + "appnexus.com" + ], + "iurl": "https://nym1-ib.adnxs.com/cr?id=113276871", + "cid": "9325", + "crid": "113276871", + "w": 300, + "h": 250, + "ext": { + "prebid": { + "targeting": { + "hb_bidder": "appnexus", + "hb_bidder_appnexus": "appnexus", + "hb_creative_loadtype": "html", + "hb_env": "mobile-app", + "hb_env_appnexus": "mobile-app", + "hb_pb": "0.50", + "hb_pb_appnexus": "0.50", + "hb_size": "300x250", + "hb_size_appnexus": "300x250" + }, + "type": "banner" + }, + "bidder": { + "appnexus": { + "brand_id": 1, + "auction_id": 7888349588523321000, + "bidder_id": 2, + "bid_ad_type": 0 + } + } + } + } + ], + "seat": "appnexus" + } + ], + "ext": { + "responsetimemillis": { + "appnexus": 213 + }, + "tmaxrequest": 500 + } +} diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Responses/responsePBM.json b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Responses/responsePBM.json new file mode 100644 index 000000000..8b115449f --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Responses/responsePBM.json @@ -0,0 +1,60 @@ +{ + "id": "0D559927-115B-4DFC-9FE3-88A0B2F4EABD", + "seatbid": [ + { + "bid": [ + { + "id": "39299902906497854", + "impid": "/19968336/PrebidMobileValidator_Banner_All_Sizes", + "price": 0.51, + "adm": "", + "adid": "822732502", + "adomain": [ + "gilt.com" + ], + "iurl": "https://nym1-ib.adnxs.com/cr?id=822732502", + "cid": "903", + "crid": "822732502", + "cat": [ + "IAB22", + "IAB22-4" + ], + "w": 300, + "h": 250, + "ext": { + "prebid": { + "targeting": { + "hb_bidder": "appnexus", + "hb_bidder_appnexus": "appnexus", + "hb_cache_id": "7008d51d-af2a-4357-acea-1cb672ac2189", + "hb_cache_id_appnexus": "7008d51d-af2a-4357-acea-1cb672ac2189", + "hb_env": "mobile-app", + "hb_env_appnexus": "mobile-app", + "hb_pb": "0.50", + "hb_pb_appnexus": "0.50", + "hb_size": "300x250", + "hb_size_appnexus": "300x250" + }, + "type": "banner" + }, + "bidder": { + "appnexus": { + "brand_id": 1665, + "auction_id": 2672683681442768515, + "bidder_id": 52, + "bid_ad_type": 0 + } + } + } + } + ], + "seat": "appnexus" + } + ], + "ext": { + "responsetimemillis": { + "appnexus": 41 + }, + "tmaxrequest": 500 + } +} diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Responses/responseValidTwoBidsOnTheSameSeat.json b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Responses/responseValidTwoBidsOnTheSameSeat.json new file mode 100644 index 000000000..071d35fbc --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Responses/responseValidTwoBidsOnTheSameSeat.json @@ -0,0 +1,100 @@ +{ + "id": "3dc76667-a500-4e01-a43b-368e36d6c7cc", + "seatbid": [ + { + "bid": [ + { + "id": "2194228411441933100", + "impid": "Banner_300x250", + "price": 0.086657, + "adm": "", + "adid": "134452896", + "adomain": [ + "justfab.com" + ], + "iurl": "https://lax1-ib.adnxs.com/cr?id=134452896", + "cid": "1088", + "crid": "134452896", + "cat": [ + "IAB18", + "IAB18-5", + "IAB18-3" + ], + "w": 300, + "h": 250, + "ext": { + "prebid": { + "targeting": { + "hb_bidder": "appnexus", + "hb_bidder_appnexus": "appnexus", + "hb_cache_id": "fdc4a3b1-ecdd-4c0a-b043-7ed66dca0553", + "hb_cache_id_appnexus": "fdc4a3b1-ecdd-4c0a-b043-7ed66dca0553", + "hb_env": "mobile-app", + "hb_env_appnexus": "mobile-app", + "hb_pb": "0.08", + "hb_pb_appnexus": "0.08", + "hb_size": "300x250", + "hb_size_appnexus": "300x250" + }, + "type": "banner" + }, + "bidder": { + "appnexus": { + "brand_id": 5569, + "auction_id": 2436078676556218526, + "bidder_id": 82, + "bid_ad_type": 0 + } + } + } + }, + { + "id": "1420991606454718656", + "impid": "Banner_300x250", + "price": 0.018341, + "adm": "", + "adid": "112019423", + "adomain": [ + "inspirato.com" + ], + "iurl": "https://lax1-ib.adnxs.com/cr?id=112019423", + "cid": "406", + "crid": "112019423", + "cat": [ + "IAB20-7", + "IAB20-1", + "IAB20-9", + "IAB20-6", + "IAB20", + "IAB20-17", + "IAB20-12" + ], + "w": 300, + "h": 250, + "ext": { + "prebid": { + "type": "banner" + }, + "bidder": { + "appnexus": { + "brand_id": 9562, + "auction_id": 2436078676556218526, + "bidder_id": 2, + "bid_ad_type": 0 + } + } + } + } + ], + "seat": "appnexus" + } + ], + "ext": { + "responsetimemillis": { + "appnexus": 117, + "pubmatic": 13, + "rubicon": 128 + }, + "tmaxrequest": 500 + } +} \ No newline at end of file diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Responses/responseinvalidSize.json b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Responses/responseinvalidSize.json new file mode 100644 index 000000000..581070216 --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Responses/responseinvalidSize.json @@ -0,0 +1 @@ +Invalid request: Request imp[0].banner.format[0] must define non-zero "h" and "w" properties. diff --git a/sdk/PrebidMobileTests/Stubbing/ANHTTPStubURLProtocol.h b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBHTTPStubURLProtocol.h similarity index 73% rename from sdk/PrebidMobileTests/Stubbing/ANHTTPStubURLProtocol.h rename to src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBHTTPStubURLProtocol.h index a48a8105d..7f2787a67 100644 --- a/sdk/PrebidMobileTests/Stubbing/ANHTTPStubURLProtocol.h +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBHTTPStubURLProtocol.h @@ -1,4 +1,4 @@ -/* Copyright 2017 Prebid.org, Inc. +/* Copyright 2018-2019 Prebid.org, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -15,9 +15,9 @@ #import -extern NSString *const kANHTTPStubURLProtocolRequestDidLoadNotification; -extern NSString *const kANHTTPStubURLProtocolRequest; +extern NSString *const kPBHTTPStubURLProtocolRequestDidLoadNotification; +extern NSString *const kPBHTTPStubURLProtocolRequest; -@interface ANHTTPStubURLProtocol : NSURLProtocol +@interface PBHTTPStubURLProtocol : NSURLProtocol @end diff --git a/sdk/PrebidMobileTests/Stubbing/ANHTTPStubURLProtocol.m b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBHTTPStubURLProtocol.m similarity index 66% rename from sdk/PrebidMobileTests/Stubbing/ANHTTPStubURLProtocol.m rename to src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBHTTPStubURLProtocol.m index 3ff6f8af3..84e86a89b 100644 --- a/sdk/PrebidMobileTests/Stubbing/ANHTTPStubURLProtocol.m +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBHTTPStubURLProtocol.m @@ -1,4 +1,4 @@ -/* Copyright 2017 Prebid.org, Inc. +/* Copyright 2018-2019 Prebid.org, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13,29 +13,39 @@ limitations under the License. */ -#import "ANHTTPStubURLProtocol.h" -#import "ANHTTPStubbingManager.h" +#import "PBHTTPStubURLProtocol.h" +#import "PBHTTPStubbingManager.h" -static NSString *const kANTestHTTPStubURLProtocolExceptionKey = @"ANTestHTTPStubURLProtocolException"; -NSString *const kANHTTPStubURLProtocolRequestDidLoadNotification = @"ANHTTPStubURLProtocolRequestDidLoad"; -NSString *const kANHTTPStubURLProtocolRequest = @"ANHTTPStubURLProtocolRequest"; +#import "PBTestGlobal.h" -@implementation ANHTTPStubURLProtocol -+ (BOOL)canInitWithRequest:(NSURLRequest *)request { - BOOL broadcastRequests = [ANHTTPStubbingManager sharedStubbingManager].broadcastRequests; + +static NSString *const kPBTestHTTPStubURLProtocolExceptionKey = @"kPBTestHTTPStubURLProtocolExceptionKey"; +NSString *const kPBHTTPStubURLProtocolRequestDidLoadNotification = @"kPBHTTPStubURLProtocolRequestDidLoadNotification"; +NSString *const kPBHTTPStubURLProtocolRequest = @"kPBHTTPStubURLProtocolRequest"; + + + +@implementation PBHTTPStubURLProtocol + ++ (BOOL)canInitWithRequest:(NSURLRequest *)request +{ + BOOL broadcastRequests = [PBHTTPStubbingManager sharedStubbingManager].broadcastRequests; + if (broadcastRequests && request) { - [[NSNotificationCenter defaultCenter] postNotificationName:kANHTTPStubURLProtocolRequestDidLoadNotification + [[NSNotificationCenter defaultCenter] postNotificationName:kPBHTTPStubURLProtocolRequestDidLoadNotification object:nil - userInfo:@{kANHTTPStubURLProtocolRequest: request}]; + userInfo:@{kPBHTTPStubURLProtocolRequest:request}]; } + BOOL isHttpOrHttps = [request.URL.scheme isEqualToString:@"http"] || [request.URL.scheme isEqualToString:@"https"]; if (!isHttpOrHttps) { return NO; } - BOOL ignoreUnstubbedRequests = [ANHTTPStubbingManager sharedStubbingManager].ignoreUnstubbedRequests; + + BOOL ignoreUnstubbedRequests = [PBHTTPStubbingManager sharedStubbingManager].ignoreUnstubbedRequests; if (ignoreUnstubbedRequests) { - ANURLConnectionStub *stub = [[ANHTTPStubbingManager sharedStubbingManager] stubForURLString:request.URL.absoluteString]; + PBURLConnectionStub *stub = [[PBHTTPStubbingManager sharedStubbingManager] stubForURLString:request.URL.absoluteString]; return (stub != nil); } else { return YES; @@ -51,22 +61,27 @@ + (BOOL)requestIsCacheEquivalent:(NSURLRequest *)a toRequest:(NSURLRequest *)b { } - (void)startLoading { - id client = self.client; - ANURLConnectionStub *stub = [self stubForRequest]; + id client = self.client; + PBURLConnectionStub *stub = [self stubForRequest]; + if (stub) { NSURLResponse *response = [self buildResponseForRequestUsingStub:stub]; [client URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed]; + NSData *responseData = [self buildDataForRequestUsingStub:stub]; [client URLProtocol:self didLoadData:responseData]; + [client URLProtocolDidFinishLoading:self]; NSLog(@"Successfully loaded request from stub: %@", [self request]); + } else { NSLog(@"Could not load request successfully: %@", [self request]); NSLog(@"This can happen if the request was not stubbed, or if the stubs were removed before this request was completed (due to asynchronous request loading)."); - [client URLProtocol:self - didFailWithError:[NSError errorWithDomain:kANTestHTTPStubURLProtocolExceptionKey - code:1 - userInfo:nil]]; + [client URLProtocol: self + didFailWithError: [NSError errorWithDomain: kPBTestHTTPStubURLProtocolExceptionKey + code: 1 + userInfo: nil ] + ]; } } @@ -74,13 +89,17 @@ - (void)stopLoading { // Do nothing, but method is required. } + + + #pragma mark - Stubbing -- (ANURLConnectionStub *)stubForRequest { - return [[ANHTTPStubbingManager sharedStubbingManager] stubForURLString:self.request.URL.absoluteString]; +- (PBURLConnectionStub *)stubForRequest { + return [[PBHTTPStubbingManager sharedStubbingManager] stubForURLString:self.request.URL.absoluteString]; } -- (NSURLResponse *)buildResponseForRequestUsingStub:(ANURLConnectionStub *)stub { + +- (NSURLResponse *)buildResponseForRequestUsingStub:(PBURLConnectionStub *)stub { NSHTTPURLResponse *httpResponse = [[NSHTTPURLResponse alloc] initWithURL:[[self request] URL] statusCode:stub.responseCode HTTPVersion:@"HTTP/1.1" @@ -88,7 +107,7 @@ - (NSURLResponse *)buildResponseForRequestUsingStub:(ANURLConnectionStub *)stub return httpResponse; } -- (NSData *)buildDataForRequestUsingStub:(ANURLConnectionStub *)stub { +- (NSData *)buildDataForRequestUsingStub:(PBURLConnectionStub *)stub { if ([stub.responseBody isKindOfClass:[NSString class]]) { return [stub.responseBody dataUsingEncoding:NSUTF8StringEncoding]; } else if ([stub.responseBody isKindOfClass:[NSData class]]) { diff --git a/sdk/PrebidMobileTests/Stubbing/ANHTTPStubbingManager.h b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBHTTPStubbingManager.h similarity index 67% rename from sdk/PrebidMobileTests/Stubbing/ANHTTPStubbingManager.h rename to src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBHTTPStubbingManager.h index b48fe2e81..558827385 100644 --- a/sdk/PrebidMobileTests/Stubbing/ANHTTPStubbingManager.h +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBHTTPStubbingManager.h @@ -1,4 +1,4 @@ -/* Copyright 2017 Prebid.org, Inc. +/* Copyright 2018-2019 Prebid.org, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13,37 +13,45 @@ limitations under the License. */ -#import "ANHTTPStubURLProtocol.h" -#import "ANURLConnectionStub.h" +#import "PBHTTPStubURLProtocol.h" +#import "PBURLConnectionStub.h" -@interface ANHTTPStubbingManager : NSObject -+ (ANHTTPStubbingManager *)sharedStubbingManager; -- (void)enable; -- (void)disable; - -- (void)addStub:(ANURLConnectionStub *)stub; -- (void)addStubs:(NSArray *)stubs; -- (void)removeAllStubs; -- (ANURLConnectionStub *)stubForURLString:(NSString *)URLString; +@interface PBHTTPStubbingManager : NSObject /** If set to YES, then unstubbed requests will be ignored by this class and handled by the system. If set to NO (default), then unstubbed requests will result in didFailToLoad errors. - + Default is NO. */ @property (nonatomic) BOOL ignoreUnstubbedRequests; /** If set to YES, then all requests which trigger canInitWithRequest: will be broadcast - as kANHTTPStubURLProtocolRequestDidLoadNotification notifications. The request will be in the user info, - as the value of the kANHTTPStubURLProtocolRequest key. - + as kPBHTTPStubURLProtocolRequestDidLoadNotification notifications. The request will be in the user info, + as the value of the kPBHTTPStubURLProtocolRequest key. + Default is NO. */ @property (nonatomic) BOOL broadcastRequests; + + ++ (PBHTTPStubbingManager *)sharedStubbingManager; + +- (void)enable; +- (void)disable; + +- (void)addStub:(PBURLConnectionStub *)stub; +- (void)addStubs:(NSArray *)stubs; +- (void)removeAllStubs; + +- (PBURLConnectionStub *)stubForURLString:(NSString *)URLString; + +// ++ (NSDictionary *) jsonBodyOfURLRequestAsDictionary: (NSURLRequest *)urlRequest; + @end diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBHTTPStubbingManager.m b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBHTTPStubbingManager.m new file mode 100644 index 000000000..408210092 --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBHTTPStubbingManager.m @@ -0,0 +1,114 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "PBHTTPStubbingManager.h" +#import "PBHTTPStubURLProtocol.h" +#import "PBTestGlobal.h" +//#import "ANSDKSettings.h" + +#import "NSURLRequest+HTTPBodyTesting.h" + + + + +@interface PBHTTPStubbingManager() +@property (nonatomic) NSMutableArray *stubs; +@end + + + + +@implementation PBHTTPStubbingManager + ++ (PBHTTPStubbingManager *)sharedStubbingManager { + static dispatch_once_t sharedStubbingManagerToken; + static PBHTTPStubbingManager *manager; + dispatch_once(&sharedStubbingManagerToken, ^{ + manager = [[PBHTTPStubbingManager alloc] init]; + }); + return manager; +} + +- (void)enable { + [NSURLProtocol registerClass:[PBHTTPStubURLProtocol class]]; +} + +- (void)disable { + [NSURLProtocol unregisterClass:[PBHTTPStubURLProtocol class]]; +} + +- (void)addStub:(PBURLConnectionStub *)stub { + [self.stubs addObject:stub]; +} + +- (void)addStubs:(NSArray *)stubs { + [self.stubs addObjectsFromArray:stubs]; +} + +- (void)removeAllStubs { + [self.stubs removeAllObjects]; +} + +- (NSMutableArray *)stubs { + @synchronized(self) { + if (!_stubs) _stubs = [[NSMutableArray alloc] init]; + return _stubs; + } +} + +- (PBURLConnectionStub *)stubForURLString:(NSString *)URLString +{ + __block PBURLConnectionStub *stubMatch = nil; + + [self.stubs enumerateObjectsUsingBlock: ^(PBURLConnectionStub *stub, NSUInteger idx, BOOL *stop) + { + NSError *error; + NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern: stub.requestURL + options: NSRegularExpressionDotMatchesLineSeparators + error: &error]; + if ([regex numberOfMatchesInString: URLString + options: 0 + range: NSMakeRange(0, [URLString length])]) + { + stubMatch = stub; + *stop = YES; + } + } ]; + return stubMatch; +} + + + + +#pragma mark - Helper class methods. + ++ (NSDictionary *) jsonBodyOfURLRequestAsDictionary: (NSURLRequest *)urlRequest +{ + TESTTRACE(); + + NSString *bodyAsString = [[NSString alloc] initWithData:[urlRequest PBHTTPStubs_HTTPBody] encoding:NSUTF8StringEncoding]; + NSData *objectData = [bodyAsString dataUsingEncoding:NSUTF8StringEncoding]; + NSError *error = nil; + + NSDictionary *json = [NSJSONSerialization JSONObjectWithData: objectData + options: NSJSONReadingMutableContainers + error: &error]; + if (error) { return nil; } + + return json; +} + + +@end diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBURLConnectionStub+NSURLSessionConfiguration.m b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBURLConnectionStub+NSURLSessionConfiguration.m new file mode 100644 index 000000000..cf5cef272 --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBURLConnectionStub+NSURLSessionConfiguration.m @@ -0,0 +1,64 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import + +#import "PBURLConnectionStub.h" +#import "NSObject+Swizzling.h" + + +/** + * This helper is used to swizzle NSURLSessionConfiguration constructor methods + * defaultSessionConfiguration and ephemeralSessionConfiguration to insert the private + * OHHTTPStubsProtocol into their protocolClasses array so that OHHTTPStubs is automagically + * supported when you create a new NSURLSession based on one of there configurations. + */ + +typedef NSURLSessionConfiguration*(*SessionConfigConstructor)(id,SEL); +static SessionConfigConstructor orig_defaultSessionConfiguration; +static SessionConfigConstructor orig_ephemeralSessionConfiguration; + +static NSURLSessionConfiguration* PBHTTPStubs_defaultSessionConfiguration(id self, SEL _cmd) +{ + NSURLSessionConfiguration* config = orig_defaultSessionConfiguration(self,_cmd); // call original method + [PBURLConnectionStub setEnabled:YES forSessionConfiguration:config]; // + return config; +} + +static NSURLSessionConfiguration* PBHTTPStubs_ephemeralSessionConfiguration(id self, SEL _cmd) +{ + NSURLSessionConfiguration* config = orig_ephemeralSessionConfiguration(self,_cmd); // call original method + [PBURLConnectionStub setEnabled:YES forSessionConfiguration:config]; // + return config; +} + +@interface NSURLSessionConfiguration(PBHTTPStubsSupport) @end + +@implementation NSURLSessionConfiguration(PBHTTPStubsSupport) + ++(void)load +{ + + orig_defaultSessionConfiguration = (SessionConfigConstructor)PBHTTPStubsReplaceMethod(@selector(defaultSessionConfiguration), + (IMP)PBHTTPStubs_defaultSessionConfiguration, + [NSURLSessionConfiguration class], + YES); + orig_ephemeralSessionConfiguration = (SessionConfigConstructor)PBHTTPStubsReplaceMethod(@selector(ephemeralSessionConfiguration), + (IMP)PBHTTPStubs_ephemeralSessionConfiguration, + [NSURLSessionConfiguration class], + YES); +} + +@end diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBURLConnectionStub.h b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBURLConnectionStub.h new file mode 100644 index 000000000..c6344ffed --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBURLConnectionStub.h @@ -0,0 +1,78 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import + + + + +@interface PBURLConnectionStub : NSObject + +@property (nonatomic, readwrite, strong) NSString *requestURL; +@property (nonatomic, readwrite, assign) NSInteger responseCode; +@property (nonatomic, readwrite, strong) id responseBody; //can be nsstring or nsdata + ++ (PBURLConnectionStub *)stubForStandardBannerWithAdSize:(CGSize)adSize + content:(NSString *)content; + ++ (PBURLConnectionStub *)stubForStandardBannerWithAdSize:(CGSize)adSize + contentFromResource:(NSString *)resource + ofType:(NSString *)type; + ++ (PBURLConnectionStub *)stubForResource:(NSString *)resource + ofType:(NSString *)type; + ++ (PBURLConnectionStub *)stubForResource:(NSString *)resource + ofType:(NSString *)type + withRequestURL:(NSString *)pattern; + ++ (PBURLConnectionStub *)stubForResource:(NSString *)resource + ofType:(NSString *)type + withRequestURL:(NSString *)pattern + inBundle:(NSBundle *)bundle; + + + +/** + * Enable or disable the stubs on a given `NSURLSessionConfiguration`. + * + * @param enabled If `YES`, enables the stubs for this `NSURLSessionConfiguration`. + * If `NO`, disable the stubs and let all the requests hit the real world + * @param sessionConfig The NSURLSessionConfiguration on which to enabled/disable the stubs + * + * @note OHHTTPStubs are enabled by default on newly created `defaultSessionConfiguration` + * and `ephemeralSessionConfiguration`, so there is no need to call this method with + * `YES` for stubs to work. You generally only use this if you want to disable + * `OHTTPStubs` per `NSURLSession` by calling it before building the `NSURLSession` + * with the `NSURLSessionConfiguration`. + * + * @note Important: As usual according to the way `NSURLSessionConfiguration` works, you + * MUST set this property BEFORE creating the `NSURLSession`. Once the `NSURLSession` + * object is created, they use a deep copy of the `NSURLSessionConfiguration` object + * used to create them, so changing the configuration later does not affect already + * created sessions. + */ ++ (void)setEnabled:(BOOL)enabled forSessionConfiguration:(NSURLSessionConfiguration *)sessionConfig; + +/** + * Whether stubs are enabled or disabled on a given `NSURLSessionConfiguration` + * + * @param sessionConfig The NSURLSessionConfiguration on which to enable/disable the stubs + * + * @return If `YES` the stubs are enabled for sessionConfig. If `NO` then the stubs are disabled + */ ++ (BOOL)isEnabledForSessionConfiguration:(NSURLSessionConfiguration *)sessionConfig; + +@end diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBURLConnectionStub.m b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBURLConnectionStub.m new file mode 100644 index 000000000..a6126ccc9 --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/Shared/Stubbing/PBURLConnectionStub.m @@ -0,0 +1,180 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#import "PBURLConnectionStub.h" +//#import "ANGlobal.h" +//#import "ANSDKSettings+PrivateMethods.h" +#import "PBHTTPStubURLProtocol.h" + +@implementation PBURLConnectionStub + +- (id)copyWithZone:(NSZone *)zone { + PBURLConnectionStub *newStub = [[PBURLConnectionStub alloc] init]; + newStub.requestURL = self.requestURL; + newStub.responseCode = self.responseCode; + newStub.responseBody = self.responseBody; + return newStub; +} + +- (BOOL)isEqual:(PBURLConnectionStub *)object { + BOOL sameRequestURLString = [self.requestURL isEqualToString:object.requestURL]; + BOOL sameResponseCode = (self.responseCode == object.responseCode); + BOOL sameResponseBody = [self.responseBody isEqualToString:object.responseBody]; + return sameRequestURLString && sameResponseBody && sameResponseCode; +} + +- (NSUInteger)hash { + NSMutableString *description = [[NSMutableString alloc] init]; + [description appendString:self.requestURL]; + [description appendString:[NSString stringWithFormat:@"%ld", (long)self.responseCode]]; + [description appendString:self.responseBody]; + return [description hash]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"NSURLConnectionStub: \n\ + Request URL Pattern: %@,\n\ + Response Code: %ld,\n\ + Response Body: %@",self.requestURL, (long)self.responseCode, self.responseBody]; + +} + + + + +#pragma mark - Pre-Initialized Stubbers + ++ (PBURLConnectionStub *)stubForStandardBannerWithAdSize:(CGSize)adSize + contentFromResource:(NSString *)resource + ofType:(NSString *)type { + NSString *filePath = [[NSBundle mainBundle] pathForResource:resource + ofType:type]; + NSString *content = [[NSString alloc] initWithContentsOfFile:filePath + encoding:NSUTF8StringEncoding + error:nil]; + return [PBURLConnectionStub stubForStandardBannerWithAdSize:adSize + content:content]; +} + ++ (PBURLConnectionStub *)stubForStandardBannerWithAdSize:(CGSize)adSize + content:(NSString *)content { + PBURLConnectionStub *stub = [[PBURLConnectionStub alloc] init]; + stub.requestURL = @"https://prebid.adnxs.com/pbs/v1/openrtb2/auction"; + stub.responseCode = 200; + stub.responseBody = [NSJSONSerialization dataWithJSONObject:[[self class] responseForStandardBannerWithAdSize:adSize + content:content] + options:0 + error:nil]; + return stub; +} + + ++ (PBURLConnectionStub *)stubForResource:(NSString *)resource + ofType:(NSString *)type { + return [PBURLConnectionStub stubForResource:resource + ofType:type + withRequestURL:resource + inBundle:[NSBundle mainBundle]]; +} + ++ (PBURLConnectionStub *)stubForResource:(NSString *)resource + ofType:(NSString *)type + withRequestURL:(NSString *)pattern { + return [PBURLConnectionStub stubForResource:resource + ofType:type + withRequestURL:pattern + inBundle:[NSBundle mainBundle]]; +} + ++ (PBURLConnectionStub *)stubForResource:(NSString *)resource + ofType:(NSString *)type + withRequestURL:(NSString *)pattern + inBundle:(NSBundle *)bundle { + PBURLConnectionStub *stub = [[PBURLConnectionStub alloc] init]; + stub.responseCode = 200; + stub.requestURL = pattern; + stub.responseBody = [NSData dataWithContentsOfFile:[bundle pathForResource:resource + ofType:type]]; + return stub; +} + ++ (NSDictionary *)responseForStandardBannerWithAdSize:(CGSize)adSize + content:(NSString *)content { + NSMutableDictionary *response = [[NSMutableDictionary alloc] init]; + response[@"status"] = @"ok"; + NSDictionary *adElement = [[self class] adElementForAdType:@"banner" + adSize:adSize + content:content]; + response[@"ads"] = @[adElement]; + return [response copy]; +} + ++ (NSDictionary *)adElementForAdType:(NSString *)type + adSize:(CGSize)adSize + content:(NSString *)content { + NSMutableDictionary *adElement = [[NSMutableDictionary alloc] init]; + adElement[@"type"] = type; + adElement[@"width"] = [@(adSize.width) description]; + adElement[@"height"] = [@(adSize.height) description]; + adElement[@"content"] = content; + return [adElement copy]; +} + ++ (void)setEnabled:(BOOL)enable forSessionConfiguration:(NSURLSessionConfiguration*)sessionConfig +{ + // Runtime check to make sure the API is available on this version + if ( [sessionConfig respondsToSelector:@selector(protocolClasses)] + && [sessionConfig respondsToSelector:@selector(setProtocolClasses:)]) + { + NSMutableArray * urlProtocolClasses = [NSMutableArray arrayWithArray:sessionConfig.protocolClasses]; + Class protoCls = PBHTTPStubURLProtocol.class; + if (enable && ![urlProtocolClasses containsObject:protoCls]) + { + [urlProtocolClasses insertObject:protoCls atIndex:0]; + } + else if (!enable && [urlProtocolClasses containsObject:protoCls]) + { + [urlProtocolClasses removeObject:protoCls]; + } + sessionConfig.protocolClasses = urlProtocolClasses; + } + else + { + NSLog(@"[PBURLConnectionStub] %@ is only available when running on iOS7+/OSX9+. " + @"Use conditions like 'if ([NSURLSessionConfiguration class])' to only call " + @"this method if the user is running iOS7+/OSX9+.", NSStringFromSelector(_cmd)); + } +} + ++ (BOOL)isEnabledForSessionConfiguration:(NSURLSessionConfiguration *)sessionConfig +{ + // Runtime check to make sure the API is available on this version + if ( [sessionConfig respondsToSelector:@selector(protocolClasses)] + && [sessionConfig respondsToSelector:@selector(setProtocolClasses:)]) + { + NSMutableArray * urlProtocolClasses = [NSMutableArray arrayWithArray:sessionConfig.protocolClasses]; + Class protoCls = PBHTTPStubURLProtocol.class; + return [urlProtocolClasses containsObject:protoCls]; + } + else + { + NSLog(@"[PBURLConnectionStub] %@ is only available when running on iOS7+/OSX9+. " + @"Use conditions like 'if ([NSURLSessionConfiguration class])' to only call " + @"this method if the user is running iOS7+/OSX9+.", NSStringFromSelector(_cmd)); + return NO; + } +} + +@end diff --git a/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/UtilsTests.swift b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/UtilsTests.swift new file mode 100644 index 000000000..6616161d1 --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/FetchingLogictests/UtilsTests.swift @@ -0,0 +1,537 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import XCTest +@testable import PrebidMobile + +@objcMembers public class DFPORequest:NSObject { + var name:String! + private(set) var p_customKeywords:[String:AnyObject] + + @objc var customTargeting:[String:AnyObject] { + + get { + return p_customKeywords + } + } + + override init() { + self.p_customKeywords = [String:AnyObject]() + } +} + +@objcMembers public class DFPNRequest:NSObject { + var name:String! + private(set) var p_customKeywords:[String:AnyObject] + + @objc var customTargeting:[String:AnyObject] { + + get { + return p_customKeywords + } + + set { + self.p_customKeywords = newValue + } + + } + + override init() { + self.p_customKeywords = [String:AnyObject]() + } +} + +@objcMembers public class MPAdView:NSObject { + var name:String! + private(set) var p_customKeywords:String = "" + + @objc var keywords:String { + + get { + return p_customKeywords + } + + set { + self.p_customKeywords = newValue + } + + } +} + +@objcMembers public class InvalidMPAdView:NSObject { + var name:String! + private(set) var p_customKeywords:String = "" + + @objc var keywords:String { + + get { + return p_customKeywords + } + + set { + self.p_customKeywords = newValue + } + + } +} + +class UtilsTests: XCTestCase { + + var dfpAdObject:DFPNRequest? + var invalidDfpAdObject:DFPORequest? + var mopubObject:MPAdView? + var invalidMopubObject:InvalidMPAdView? + + override func setUp() { + dfpAdObject = DFPNRequest() + mopubObject = MPAdView() + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testAttachDFPKeywords() { + let utils:Utils = Utils.shared + + let prebidKeywords:[String:String] = ["hb_env":"mobile-app", + "hb_bidder_appnexus":"appnexus", + "hb_size_appnexus":"300x250", + "hb_pb_appnexus":"0.50", + "hb_env_appnexus":"mobile-app", + "hb_cache_id":"d6e43a95-5ee2-4d74-ae85-e4b602b7f88d", + "hb_cache_id_appnexus":"d6e43a95-5ee2-4d74-ae85-e4b602b7f88d", + "hb_pb":"0.50", + "hb_bidder":"appnexus", + "hb_size":"300x250"] + dfpAdObject?.customTargeting = ["test_key":"test_value"] as [String : AnyObject] + + let bidResponse = BidResponse(adId: "test", adServerTargeting: prebidKeywords as [String : AnyObject]) + + utils.validateAndAttachKeywords(adObject: dfpAdObject as AnyObject, bidResponse: bidResponse) + + XCTAssertTrue(((dfpAdObject?.description) != nil), "DFPNRequest") + + XCTAssertNotNil(dfpAdObject?.customTargeting) + XCTAssertEqual(11, dfpAdObject?.customTargeting.count) + XCTAssertEqual(dfpAdObject?.customTargeting["test_key"] as! String, "test_value") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_size"] as! String, "300x250") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_bidder"] as! String, "appnexus") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_env"] as! String, "mobile-app") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_cache_id"] as! String, "d6e43a95-5ee2-4d74-ae85-e4b602b7f88d") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_pb"] as! String, "0.50") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_bidder_appnexus"] as! String, "appnexus") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_size_appnexus"] as! String, "300x250") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_pb_appnexus"] as! String, "0.50") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_cache_id_appnexus"] as! String, "d6e43a95-5ee2-4d74-ae85-e4b602b7f88d") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_env_appnexus"] as! String, "mobile-app") + let prebidKeywords2:[String:String] = ["hb_env":"mobile-app", + "hb_bidder_rubicon":"rubicon", + "hb_size_rubicon":"300x250", + "hb_pb_rubicon":"0.50", + "hb_env_rubicon":"mobile-app", + "hb_cache_id":"ffffffff-5ee2-4d74-ae85-e4b602b7f88d", + "hb_cache_id_rubicon":"ffffffff-5ee2-4d74-ae85-e4b602b7f88d", + "hb_pb":"0.50", + "hb_bidder":"rubicon", + "hb_size":"300x250"] + let bidResponse2 = BidResponse(adId: "test", adServerTargeting: prebidKeywords2 as [String : AnyObject]) + utils.removeHBKeywords(adObject:dfpAdObject!) + utils.validateAndAttachKeywords(adObject: dfpAdObject as AnyObject, bidResponse: bidResponse2) + XCTAssertTrue(((dfpAdObject?.description) != nil), "DFPNRequest") + + XCTAssertNotNil(dfpAdObject?.customTargeting) + XCTAssertEqual(11, dfpAdObject?.customTargeting.count) + XCTAssertEqual(dfpAdObject?.customTargeting["test_key"] as! String, "test_value") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_size"] as! String, "300x250") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_bidder"] as! String, "rubicon") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_env"] as! String, "mobile-app") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_cache_id"] as! String, "ffffffff-5ee2-4d74-ae85-e4b602b7f88d") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_pb"] as! String, "0.50") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_bidder_rubicon"] as! String, "rubicon") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_size_rubicon"] as! String, "300x250") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_pb_rubicon"] as! String, "0.50") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_cache_id_rubicon"] as! String, "ffffffff-5ee2-4d74-ae85-e4b602b7f88d") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_env_rubicon"] as! String, "mobile-app") + XCTAssertNil(dfpAdObject!.customTargeting["hb_bidder_appnexus"]) + XCTAssertNil(dfpAdObject!.customTargeting["hb_size_appnexus"]) + XCTAssertNil(dfpAdObject!.customTargeting["hb_pb_appnexus"]) + XCTAssertNil(dfpAdObject!.customTargeting["hb_cache_id_appnexus"]) + XCTAssertNil(dfpAdObject!.customTargeting["hb_env_appnexus"]) + } + + func testRemoveDFPKeywords() { + let utils:Utils = Utils.shared + + let prebidKeywords:[String:String] = ["hb_env":"mobile-app", + "hb_bidder_appnexus":"appnexus", + "hb_size_appnexus":"300x250", + "hb_pb_appnexus":"0.50", + "hb_env_appnexus":"mobile-app", + "hb_cache_id":"d6e43a95-5ee2-4d74-ae85-e4b602b7f88d", + "hb_cache_id_appnexus":"d6e43a95-5ee2-4d74-ae85-e4b602b7f88d", + "hb_pb":"0.50", + "hb_bidder":"appnexus", + "hb_size":"300x250"] + dfpAdObject?.customTargeting = ["test_key":"test_value"] as [String : AnyObject] + + let bidResponse = BidResponse(adId: "test", adServerTargeting: prebidKeywords as [String : AnyObject]) + + utils.validateAndAttachKeywords(adObject: dfpAdObject as AnyObject, bidResponse: bidResponse) + + XCTAssertTrue(((dfpAdObject?.description) != nil), "DFPNRequest") + + XCTAssertNotNil(dfpAdObject?.customTargeting) + XCTAssertEqual(11, dfpAdObject?.customTargeting.count) + XCTAssertEqual(dfpAdObject?.customTargeting["test_key"] as! String, "test_value") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_size"] as! String, "300x250") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_bidder"] as! String, "appnexus") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_env"] as! String, "mobile-app") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_cache_id"] as! String, "d6e43a95-5ee2-4d74-ae85-e4b602b7f88d") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_pb"] as! String, "0.50") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_bidder_appnexus"] as! String, "appnexus") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_size_appnexus"] as! String, "300x250") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_pb_appnexus"] as! String, "0.50") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_cache_id_appnexus"] as! String, "d6e43a95-5ee2-4d74-ae85-e4b602b7f88d") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_env_appnexus"] as! String, "mobile-app") + + utils.removeHBKeywords(adObject: dfpAdObject!) + + XCTAssertTrue(((dfpAdObject?.description) != nil), "DFPNRequest") + XCTAssertNotNil(dfpAdObject?.customTargeting) + XCTAssertEqual(1, dfpAdObject?.customTargeting.count) + XCTAssertEqual(dfpAdObject?.customTargeting["test_key"] as! String, "test_value") + XCTAssertNil(dfpAdObject?.customTargeting["hb_size"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_bidder"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_env"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_cache_id"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_pb"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_bidder_appnexus"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_size_appnexus"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_pb_appnexus"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_cache_id_appnexus"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_env_appnexus"]) + + let prebidKeywords2:[String:String] = ["hb_env":"mobile-app", + "hb_bidder_rubicon":"rubicon", + "hb_size_rubicon":"300x250", + "hb_pb_rubicon":"0.50", + "hb_env_rubicon":"mobile-app", + "hb_cache_id":"ffffffff-5ee2-4d74-ae85-e4b602b7f88d", + "hb_cache_id_rubicon":"ffffffff-5ee2-4d74-ae85-e4b602b7f88d", + "hb_pb":"0.50", + "hb_bidder":"rubicon", + "hb_size":"300x250"] + let bidResponse2 = BidResponse(adId: "test", adServerTargeting: prebidKeywords2 as [String : AnyObject]) + utils.validateAndAttachKeywords(adObject: dfpAdObject as AnyObject, bidResponse: bidResponse2) + + XCTAssertTrue(((dfpAdObject?.description) != nil), "DFPNRequest") + XCTAssertNotNil(dfpAdObject?.customTargeting) + XCTAssertEqual(11, dfpAdObject?.customTargeting.count) + XCTAssertEqual(dfpAdObject?.customTargeting["test_key"] as! String, "test_value") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_size"] as! String, "300x250") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_bidder"] as! String, "rubicon") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_env"] as! String, "mobile-app") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_cache_id"] as! String, "ffffffff-5ee2-4d74-ae85-e4b602b7f88d") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_pb"] as! String, "0.50") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_bidder_rubicon"] as! String, "rubicon") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_size_rubicon"] as! String, "300x250") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_pb_rubicon"] as! String, "0.50") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_cache_id_rubicon"] as! String, "ffffffff-5ee2-4d74-ae85-e4b602b7f88d") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_env_rubicon"] as! String, "mobile-app") + XCTAssertNil(dfpAdObject!.customTargeting["hb_bidder_appnexus"]) + XCTAssertNil(dfpAdObject!.customTargeting["hb_size_appnexus"]) + XCTAssertNil(dfpAdObject!.customTargeting["hb_pb_appnexus"]) + XCTAssertNil(dfpAdObject!.customTargeting["hb_cache_id_appnexus"]) + XCTAssertNil(dfpAdObject!.customTargeting["hb_env_appnexus"]) + + utils.removeHBKeywords(adObject: dfpAdObject!) + + XCTAssertTrue(((dfpAdObject?.description) != nil), "DFPNRequest") + XCTAssertNotNil(dfpAdObject?.customTargeting) + XCTAssertEqual(1, dfpAdObject?.customTargeting.count) + XCTAssertEqual(dfpAdObject?.customTargeting["test_key"] as! String, "test_value") + XCTAssertNil(dfpAdObject?.customTargeting["hb_size"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_bidder"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_env"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_cache_id"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_pb"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_bidder_rubicon"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_size_rubicon"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_pb_rubicon"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_cache_id_rubicon"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_env_rubicon"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_bidder_appnexus"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_size_appnexus"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_pb_appnexus"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_cache_id_appnexus"]) + XCTAssertNil(dfpAdObject?.customTargeting["hb_env_appnexus"]) + } + + func testDFPKeywordsAbsent() { + let utils:Utils = Utils.shared + let prebidKeywords:[String:String] = [:] + dfpAdObject?.customTargeting = ["test_key":"test_value"] as [String : AnyObject] + let bidResponse = BidResponse(adId: "test", adServerTargeting: prebidKeywords as [String : AnyObject]) + utils.validateAndAttachKeywords(adObject: dfpAdObject as AnyObject, bidResponse: bidResponse) + + XCTAssertTrue(((dfpAdObject?.description) != nil), "DFPNRequest") + XCTAssertNotNil(dfpAdObject?.customTargeting) + XCTAssertEqual(1, dfpAdObject?.customTargeting.count) + XCTAssertEqual(dfpAdObject?.customTargeting["test_key"] as! String, "test_value") + } + + func testDFPInvalidObject() { + let utils:Utils = Utils.shared + let prebidKeywords:[String:String] = ["hb_env":"mobile-app","hb_bidder_appnexus":"appnexus","hb_size_appnexus":"300x250","hb_pb_appnexus": + "0.50","hb_env_appnexus":"mobile-app","hb_cache_id":"d6e43a95-5ee2-4d74-ae85-e4b602b7f88d","hb_cache_id_appnexus":"d6e43a95-5ee2-4d74-ae85-e4b602b7f88d","hb_pb":"0.50","hb_bidder":"appnexus","hb_size":"300x250"] + let bidResponse = BidResponse(adId: "test", adServerTargeting: prebidKeywords as [String : AnyObject]) + utils.validateAndAttachKeywords(adObject: invalidDfpAdObject as AnyObject, bidResponse: bidResponse) + XCTAssertNil(invalidDfpAdObject?.customTargeting) + + } + + func testExistingAndRemovingPrebidKeywords() { + let utils:Utils = Utils.shared + + var prebidKeywords:[String:String] = ["hb_env":"mobile-app"] + dfpAdObject?.customTargeting = ["test_key":"test_value"] as [String : AnyObject] + + var bidResponse = BidResponse(adId: "test", adServerTargeting: prebidKeywords as [String : AnyObject]) + + utils.validateAndAttachKeywords(adObject: dfpAdObject as AnyObject, bidResponse: bidResponse) + + XCTAssertTrue(((dfpAdObject?.description) != nil), "DFPNRequest") + + XCTAssertNotNil(dfpAdObject?.customTargeting) + XCTAssertEqual(2, dfpAdObject?.customTargeting.count) + XCTAssertEqual(dfpAdObject?.customTargeting["test_key"] as! String, "test_value") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_env"] as! String, "mobile-app") + + prebidKeywords = ["app" : "prebid"] + bidResponse = BidResponse(adId: "test", adServerTargeting: prebidKeywords as [String : AnyObject]) + + utils.validateAndAttachKeywords(adObject: dfpAdObject as AnyObject, bidResponse: bidResponse) + XCTAssertEqual(3, dfpAdObject?.customTargeting.count) + XCTAssertEqual(dfpAdObject?.customTargeting["test_key"] as! String, "test_value") + XCTAssertEqual(dfpAdObject!.customTargeting["hb_env"] as! String, "mobile-app") + XCTAssertEqual(dfpAdObject!.customTargeting["app"] as! String, "prebid") + + utils.removeHBKeywords(adObject: dfpAdObject!) + XCTAssertEqual(2, dfpAdObject?.customTargeting.count) + XCTAssertNil(dfpAdObject?.customTargeting["hb_env"]) + XCTAssertEqual(dfpAdObject?.customTargeting["test_key"] as! String, "test_value") + XCTAssertEqual(dfpAdObject!.customTargeting["app"] as! String, "prebid") + } + + func testAttachMoPubKeywords() { + let utils:Utils = Utils.shared + + let prebidKeywords:[String:String] = ["hb_env":"mobile-app","hb_bidder_appnexus":"appnexus","hb_size_appnexus":"300x250","hb_pb_appnexus": + "0.50","hb_env_appnexus":"mobile-app","hb_cache_id":"d6e43a95-5ee2-4d74-ae85-e4b602b7f88d","hb_cache_id_appnexus":"d6e43a95-5ee2-4d74-ae85-e4b602b7f88d","hb_pb":"0.50","hb_bidder":"appnexus","hb_size":"300x250"] + + + let bidResponse = BidResponse(adId: "test1", adServerTargeting: prebidKeywords as [String : AnyObject]) + mopubObject?.keywords = "test_key:test_value" + utils.validateAndAttachKeywords(adObject: mopubObject as AnyObject, bidResponse: bidResponse) + + DispatchQueue.main.async { + XCTAssertTrue(((self.mopubObject?.description) != nil), "MPAdView") + XCTAssertNotNil(self.mopubObject?.keywords) + var keywords = self.mopubObject?.keywords + var keywordsArray = keywords!.components(separatedBy: ",") + XCTAssertEqual(11, keywordsArray.count) + XCTAssertTrue (keywordsArray.contains("hb_env:mobile-app")) + XCTAssertTrue (keywordsArray.contains("hb_bidder_appnexus:appnexus")) + XCTAssertTrue (keywordsArray.contains("hb_size_appnexus:300x250")) + XCTAssertTrue (keywordsArray.contains("hb_pb_appnexus:0.50")) + XCTAssertTrue (keywordsArray.contains("hb_env_appnexus:mobile-app")) + XCTAssertTrue (keywordsArray.contains("hb_cache_id:d6e43a95-5ee2-4d74-ae85-e4b602b7f88d")) + XCTAssertTrue (keywordsArray.contains("hb_cache_id_appnexus:d6e43a95-5ee2-4d74-ae85-e4b602b7f88d")) + XCTAssertTrue (keywordsArray.contains("hb_pb:0.50")) + XCTAssertTrue (keywordsArray.contains("hb_bidder:appnexus")) + XCTAssertTrue (keywordsArray.contains("hb_size:300x250")) + XCTAssertTrue (keywordsArray.contains("test_key:test_value")) + + + } + let prebidKeywords2:[String:String] = ["hb_env":"mobile-app", + "hb_bidder_rubicon":"rubicon", + "hb_size_rubicon":"300x250", + "hb_pb_rubicon":"0.50", + "hb_env_rubicon":"mobile-app", + "hb_cache_id":"ffffffff-5ee2-4d74-ae85-e4b602b7f88d", + "hb_cache_id_rubicon":"ffffffff-5ee2-4d74-ae85-e4b602b7f88d", + "hb_pb":"0.50", + "hb_bidder":"rubicon", + "hb_size":"300x250"] + + let bidResponse2 = BidResponse(adId: "test2", adServerTargeting: prebidKeywords2 as [String : AnyObject]) + utils.removeHBKeywords(adObject: self.mopubObject!) + utils.validateAndAttachKeywords(adObject: self.mopubObject as AnyObject, bidResponse: bidResponse2) + + DispatchQueue.main.async { + XCTAssertTrue(((self.mopubObject?.description) != nil), "MPAdView") + XCTAssertNotNil(self.mopubObject?.keywords) + let keywords = self.mopubObject?.keywords + let keywordsArray = keywords!.components(separatedBy: ",") + XCTAssertEqual(11, keywordsArray.count) + XCTAssertTrue (keywordsArray.contains("hb_env:mobile-app")) + XCTAssertTrue (keywordsArray.contains("hb_bidder_rubicon:rubicon")) + XCTAssertTrue (keywordsArray.contains("hb_size_rubicon:300x250")) + XCTAssertTrue (keywordsArray.contains("hb_pb_rubicon:0.50")) + XCTAssertTrue (keywordsArray.contains("hb_env_rubicon:mobile-app")) + XCTAssertTrue (keywordsArray.contains("hb_cache_id:ffffffff-5ee2-4d74-ae85-e4b602b7f88d")) + XCTAssertTrue (keywordsArray.contains("hb_cache_id_rubicon:ffffffff-5ee2-4d74-ae85-e4b602b7f88d")) + XCTAssertTrue (keywordsArray.contains("hb_pb:0.50")) + XCTAssertTrue (keywordsArray.contains("hb_bidder:rubicon")) + XCTAssertTrue (keywordsArray.contains("hb_size:300x250")) + XCTAssertTrue (keywordsArray.contains("test_key:test_value")) + } + + + + + } + + func testRemoveMoPubKeywords() { + let utils:Utils = Utils.shared + + let prebidKeywords:[String:String] = ["hb_env":"mobile-app","hb_bidder_appnexus":"appnexus","hb_size_appnexus":"300x250","hb_pb_appnexus": + "0.50","hb_env_appnexus":"mobile-app","hb_cache_id":"d6e43a95-5ee2-4d74-ae85-e4b602b7f88d","hb_cache_id_appnexus":"d6e43a95-5ee2-4d74-ae85-e4b602b7f88d","hb_pb":"0.50","hb_bidder":"appnexus","hb_size":"300x250"] + + + let bidResponse = BidResponse(adId: "test1", adServerTargeting: prebidKeywords as [String : AnyObject]) + mopubObject?.keywords = "test_key:test_value" + utils.validateAndAttachKeywords(adObject: mopubObject as AnyObject, bidResponse: bidResponse) + + DispatchQueue.main.async { + + XCTAssertTrue(((self.mopubObject?.description) != nil), "MPAdView") + XCTAssertNotNil(self.mopubObject?.keywords) + let keywords = self.mopubObject?.keywords + let keywordsArray = keywords!.components(separatedBy: ",") + XCTAssertEqual(11, keywordsArray.count) + XCTAssertTrue (keywordsArray.contains("hb_env:mobile-app")) + XCTAssertTrue (keywordsArray.contains("hb_bidder_appnexus:appnexus")) + XCTAssertTrue (keywordsArray.contains("hb_size_appnexus:300x250")) + XCTAssertTrue (keywordsArray.contains("hb_pb_appnexus:0.50")) + XCTAssertTrue (keywordsArray.contains("hb_env_appnexus:mobile-app")) + XCTAssertTrue (keywordsArray.contains("hb_cache_id:d6e43a95-5ee2-4d74-ae85-e4b602b7f88d")) + XCTAssertTrue (keywordsArray.contains("hb_cache_id_appnexus:d6e43a95-5ee2-4d74-ae85-e4b602b7f88d")) + XCTAssertTrue (keywordsArray.contains("hb_pb:0.50")) + XCTAssertTrue (keywordsArray.contains("hb_bidder:appnexus")) + XCTAssertTrue (keywordsArray.contains("hb_size:300x250")) + XCTAssertTrue (keywordsArray.contains("test_key:test_value")) + } + + utils.removeHBKeywords(adObject: self.mopubObject!) + DispatchQueue.main.async { + XCTAssertTrue(((self.mopubObject?.description) != nil), "MPAdView") + XCTAssertNotNil(self.mopubObject?.keywords) + let keywords = self.mopubObject?.keywords + let keywordsArray = keywords!.components(separatedBy: ",") + XCTAssertEqual(1, keywordsArray.count) + XCTAssertFalse(keywordsArray.contains("hb_env:mobile-app")) + XCTAssertFalse(keywordsArray.contains("hb_bidder_appnexus:appnexus")) + XCTAssertFalse(keywordsArray.contains("hb_size_appnexus:300x250")) + XCTAssertFalse(keywordsArray.contains("hb_pb_appnexus:0.50")) + XCTAssertFalse(keywordsArray.contains("hb_env_appnexus:mobile-app")) + XCTAssertFalse(keywordsArray.contains("hb_cache_id:d6e43a95-5ee2-4d74-ae85-e4b602b7f88d")) + XCTAssertFalse(keywordsArray.contains("hb_cache_id_appnexus:d6e43a95-5ee2-4d74-ae85-e4b602b7f88d")) + XCTAssertFalse(keywordsArray.contains("hb_pb:0.50")) + XCTAssertFalse(keywordsArray.contains("hb_bidder:appnexus")) + XCTAssertFalse(keywordsArray.contains("hb_size:300x250")) + XCTAssertTrue(keywordsArray.contains("test_key:test_value")) + } + let prebidKeywords2:[String:String] = ["hb_env":"mobile-app", + "hb_bidder_rubicon":"rubicon", + "hb_size_rubicon":"300x250", + "hb_pb_rubicon":"0.50", + "hb_env_rubicon":"mobile-app", + "hb_cache_id":"ffffffff-5ee2-4d74-ae85-e4b602b7f88d", + "hb_cache_id_rubicon":"ffffffff-5ee2-4d74-ae85-e4b602b7f88d", + "hb_pb":"0.50", + "hb_bidder":"rubicon", + "hb_size":"300x250"] + let bidResponse2 = BidResponse(adId: "test2", adServerTargeting: prebidKeywords2 as [String : AnyObject]) + utils.validateAndAttachKeywords(adObject: self.mopubObject as AnyObject, bidResponse: bidResponse2) + DispatchQueue.main.async { + XCTAssertTrue(((self.mopubObject?.description) != nil), "MPAdView") + XCTAssertNotNil(self.mopubObject?.keywords) + let keywords = self.mopubObject?.keywords + let keywordsArray = keywords!.components(separatedBy: ",") + XCTAssertEqual(11, keywordsArray.count) + XCTAssertTrue (keywordsArray.contains("hb_env:mobile-app")) + XCTAssertTrue (keywordsArray.contains("hb_bidder_rubicon:rubicon")) + XCTAssertTrue (keywordsArray.contains("hb_size_rubicon:300x250")) + XCTAssertTrue (keywordsArray.contains("hb_pb_rubicon:0.50")) + XCTAssertTrue (keywordsArray.contains("hb_env_rubicon:mobile-app")) + XCTAssertTrue (keywordsArray.contains("hb_cache_id:ffffffff-5ee2-4d74-ae85-e4b602b7f88d")) + XCTAssertTrue (keywordsArray.contains("hb_cache_id_rubicon:ffffffff-5ee2-4d74-ae85-e4b602b7f88d")) + XCTAssertTrue (keywordsArray.contains("hb_pb:0.50")) + XCTAssertTrue (keywordsArray.contains("hb_bidder:rubicon")) + XCTAssertTrue (keywordsArray.contains("hb_size:300x250")) + XCTAssertTrue (keywordsArray.contains("test_key:test_value")) + } + utils.removeHBKeywords(adObject: self.mopubObject!) + DispatchQueue.main.async { + XCTAssertTrue(((self.mopubObject?.description) != nil), "MPAdView") + XCTAssertNotNil(self.mopubObject?.keywords) + let keywords = self.mopubObject?.keywords + let keywordsArray = keywords!.components(separatedBy: ",") + XCTAssertEqual(1, keywordsArray.count) + XCTAssertFalse(keywordsArray.contains("hb_env:mobile-app")) + XCTAssertFalse(keywordsArray.contains("hb_bidder_rubicon:rubicon")) + XCTAssertFalse(keywordsArray.contains("hb_size_rubicon:300x250")) + XCTAssertFalse(keywordsArray.contains("hb_pb_rubicon:0.50")) + XCTAssertFalse(keywordsArray.contains("hb_env_rubicon:mobile-app")) + XCTAssertFalse(keywordsArray.contains("hb_cache_id:ffffffff-5ee2-4d74-ae85-e4b602b7f88d")) + XCTAssertFalse(keywordsArray.contains("hb_cache_id_rubicon:ffffffff-5ee2-4d74-ae85-e4b602b7f88d")) + XCTAssertFalse(keywordsArray.contains("hb_pb:0.50")) + XCTAssertFalse(keywordsArray.contains("hb_bidder:rubicon")) + XCTAssertFalse(keywordsArray.contains("hb_size:300x250")) + XCTAssertTrue(keywordsArray.contains("test_key:test_value")) + } + } + + func testMoPubKeywordsAbsent() { + let utils:Utils = Utils.shared + let prebidKeywords:[String:String] = [:] + let bidResponse = BidResponse(adId: "test", adServerTargeting: prebidKeywords as [String : AnyObject]) + mopubObject?.keywords = "test_key:test_value" + utils.validateAndAttachKeywords(adObject: mopubObject as AnyObject, bidResponse: bidResponse) + DispatchQueue.main.async { + XCTAssertTrue(((self.mopubObject?.description) != nil), "MPAdView") + XCTAssertNotNil(self.mopubObject?.keywords) + let keywords = self.mopubObject?.keywords + let keywordsArray = keywords!.components(separatedBy: ",") + XCTAssertEqual(1, keywordsArray.count) + XCTAssertTrue(keywordsArray.contains("test_key:test_value")) + } + } + + func testMoPubInvalidObject() { + let utils:Utils = Utils.shared + let prebidKeywords:[String:String] = ["hb_env":"mobile-app","hb_bidder_appnexus":"appnexus","hb_size_appnexus":"300x250","hb_pb_appnexus": + "0.50","hb_env_appnexus":"mobile-app","hb_cache_id":"d6e43a95-5ee2-4d74-ae85-e4b602b7f88d","hb_cache_id_appnexus":"d6e43a95-5ee2-4d74-ae85-e4b602b7f88d","hb_pb":"0.50","hb_bidder":"appnexus","hb_size":"300x250"] + let bidResponse = BidResponse(adId: "test", adServerTargeting: prebidKeywords as [String : AnyObject]) + invalidMopubObject?.keywords = "test_key:test_value" + utils.validateAndAttachKeywords(adObject: invalidMopubObject as AnyObject, bidResponse: bidResponse) + DispatchQueue.main.async { + XCTAssertNil(self.invalidMopubObject?.keywords) + } + } +} diff --git a/src/PrebidMobile/PrebidMobileTests/Info.plist b/src/PrebidMobile/PrebidMobileTests/Info.plist new file mode 100644 index 000000000..6c40a6cd0 --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + + diff --git a/src/PrebidMobile/PrebidMobileTests/PrebidMobileTest-Bridging-Header.h b/src/PrebidMobile/PrebidMobileTests/PrebidMobileTest-Bridging-Header.h new file mode 100644 index 000000000..ed76e49dc --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/PrebidMobileTest-Bridging-Header.h @@ -0,0 +1,22 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#ifndef PrebidMobileTests_Bridging_Header_h +#define PrebidMobileTests_Bridging_Header_h + +#import "PBHTTPStubbingManager.h" +#import "PBHTTPStubURLProtocol.h" + +#endif /* PrebidMobileTests_Bridging_Header_h */ diff --git a/sdk/PrebidMobile/PBBannerAdUnit.m b/src/PrebidMobile/PrebidMobileTests/PrebidMobileTests.swift similarity index 53% rename from sdk/PrebidMobile/PBBannerAdUnit.m rename to src/PrebidMobile/PrebidMobileTests/PrebidMobileTests.swift index d7ccecc9b..d338dea64 100644 --- a/sdk/PrebidMobile/PBBannerAdUnit.m +++ b/src/PrebidMobile/PrebidMobileTests/PrebidMobileTests.swift @@ -1,4 +1,4 @@ -/* Copyright 2017 Prebid.org, Inc. +/* Copyright 2018-2019 Prebid.org, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -13,16 +13,19 @@ limitations under the License. */ -#import "PBBannerAdUnit.h" +import XCTest +@testable import PrebidMobile -@implementation PBBannerAdUnit - -- (nonnull instancetype)initWithAdUnitIdentifier:(nonnull NSString *)identifier andConfigId:(nonnull NSString *)configId { - return [super initWithIdentifier:identifier andAdType:PBAdUnitTypeBanner andConfigId:configId]; -} - -- (void)addSize:(CGSize)adSize { - [super addSize:adSize]; +class PrebidMobileTests: XCTestCase { + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + } + } - -@end diff --git a/src/PrebidMobile/PrebidMobileTests/PrebidTests.swift b/src/PrebidMobile/PrebidMobileTests/PrebidTests.swift new file mode 100644 index 000000000..258671f00 --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/PrebidTests.swift @@ -0,0 +1,63 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import XCTest +@testable import PrebidMobile + +class PrebidTests: XCTestCase { + + override func setUp() { + // Put setup code here. This method is called before the invocation of each test method in the class. + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testAccountId() { + Prebid.shared.prebidServerAccountId = "123" + XCTAssertEqual(Prebid.shared.prebidServerAccountId, "123") + XCTAssertNotEqual(Prebid.shared.prebidServerAccountId, "456") + } + + func testShareGeoLocation() { + Prebid.shared.shareGeoLocation = true + XCTAssertTrue(Prebid.shared.shareGeoLocation) + + Prebid.shared.shareGeoLocation = false + XCTAssertFalse(Prebid.shared.shareGeoLocation) + } + + func testServerHost() { + Prebid.shared.prebidServerHost = PrebidHost.Appnexus + XCTAssertEqual(Prebid.shared.prebidServerHost, PrebidHost.Appnexus) + + Prebid.shared.prebidServerHost = PrebidHost.Rubicon + XCTAssertEqual(Prebid.shared.prebidServerHost, PrebidHost.Rubicon) + } + + func testServerCustomHost() { + + XCTAssertEqual(Prebid.shared.prebidServerHost, PrebidHost.Appnexus) + + Prebid.shared.prebidServerHost = PrebidHost.Custom + XCTAssertEqual(Prebid.shared.prebidServerHost, PrebidHost.Custom) + + XCTAssertThrowsError(try Prebid.shared.setCustomPrebidServer(url: "http://www.rubicon.org")) + + XCTAssertThrowsError(try Prebid.shared.setCustomPrebidServer(url: "abc")) + } + +} diff --git a/src/PrebidMobile/PrebidMobileTests/TargetingTests.swift b/src/PrebidMobile/PrebidMobileTests/TargetingTests.swift new file mode 100644 index 000000000..0274572f6 --- /dev/null +++ b/src/PrebidMobile/PrebidMobileTests/TargetingTests.swift @@ -0,0 +1,81 @@ +/* Copyright 2018-2019 Prebid.org, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +import XCTest +import CoreLocation +@testable import PrebidMobile + +class TargetingTests: XCTestCase { + + override func setUp() { + super.setUp() + + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + } + + func testYOB() { + XCTAssertNoThrow(try Targeting.shared.setYearOfBirth(yob: 1985)) + let value = Targeting.shared.yearOfBirth + + XCTAssertTrue((value == 1985)) + + } + + func testInvalidYOB() { + XCTAssertThrowsError(try Targeting.shared.setYearOfBirth(yob: -1)) + + XCTAssertThrowsError(try Targeting.shared.setYearOfBirth(yob: 999)) + + XCTAssertThrowsError(try Targeting.shared.setYearOfBirth(yob: 10000)) + + } + + func testSetGenderTargeting() { + + Targeting.shared.gender = .female + XCTAssertEqual(Gender.female, Targeting.shared.gender) + Targeting.shared.gender = .male + XCTAssertEqual(Gender.male, Targeting.shared.gender) + Targeting.shared.gender = .unknown + XCTAssertEqual(Gender.unknown, Targeting.shared.gender) + } + + func testSetLocationTargeting() { + + let location = CLLocation(latitude: CLLocationDegrees(100.0), longitude: CLLocationDegrees(100.0)) + Targeting.shared.location = location + Targeting.shared.locationPrecision = 2 + XCTAssertEqual(location, Targeting.shared.location) + XCTAssertEqual(2, Targeting.shared.locationPrecision) + } + + func testGDPRConsentString() { + Targeting.shared.gdprConsentString = "testconsent" + let value = Targeting.shared.gdprConsentString + + XCTAssertTrue((value == "testconsent")) + } + + func testGDPREnable() { + Targeting.shared.subjectToGDPR = false + let testGDPR = Targeting.shared.subjectToGDPR + + XCTAssertFalse(testGDPR) + } + +} diff --git a/tools/PrebidValidator/Dr.Prebid.xcodeproj/project.pbxproj b/tools/PrebidValidator/Dr.Prebid.xcodeproj/project.pbxproj index 423c130b6..21e255a36 100644 --- a/tools/PrebidValidator/Dr.Prebid.xcodeproj/project.pbxproj +++ b/tools/PrebidValidator/Dr.Prebid.xcodeproj/project.pbxproj @@ -8,6 +8,7 @@ /* Begin PBXBuildFile section */ 600073C621DE65CA00F4738B /* CustomTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 600073C521DE65CA00F4738B /* CustomTextView.m */; }; + 6013E447221C605500FEE2B1 /* DemandRequestBuilder.m in Sources */ = {isa = PBXBuildFile; fileRef = 6013E446221C605500FEE2B1 /* DemandRequestBuilder.m */; }; 602CF6E221AEEEC10097F6C9 /* FooterCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 602CF6E121AEEEC10097F6C9 /* FooterCell.m */; }; 605A56CB2076C89A00E92376 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 605A56CA2076C89A00E92376 /* MessageUI.framework */; }; 605C15A321E3E23B00BB9636 /* KeyValueController.m in Sources */ = {isa = PBXBuildFile; fileRef = 605C15A221E3E23B00BB9636 /* KeyValueController.m */; }; @@ -58,6 +59,7 @@ 60D124642126DBAD00EC6EE2 /* KVViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 60D124632126DBAD00EC6EE2 /* KVViewController.m */; }; 60D124692126E1F300EC6EE2 /* CPMSectionCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 60D124672126E1F300EC6EE2 /* CPMSectionCell.m */; }; 60D1246A2126E1F300EC6EE2 /* CPMSectionCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 60D124682126E1F300EC6EE2 /* CPMSectionCell.xib */; }; + 977043D4221AD69B00616AD8 /* PrebidMobile.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 977043CF221AD5CA00616AD8 /* PrebidMobile.framework */; }; D15C104F20F6EB32004CBC18 /* AdSizeController.m in Sources */ = {isa = PBXBuildFile; fileRef = D15C104E20F6EB32004CBC18 /* AdSizeController.m */; }; F283A423484632D93AE6FB87 /* libPods-Dr.Prebid.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EF6536B68EE8867DF49CF0E /* libPods-Dr.Prebid.a */; }; F533B16821309548001977C2 /* AdServerResponseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F533B16721309548001977C2 /* AdServerResponseViewController.m */; }; @@ -74,7 +76,6 @@ F56AE894209A383B000CE29F /* PBVLineItemsSetupValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = F56AE892209A383A000CE29F /* PBVLineItemsSetupValidator.m */; }; F5944B3C21B87F9C00E04A34 /* NSURLSessionConfiguration+PBProtocols.m in Sources */ = {isa = PBXBuildFile; fileRef = F5944B3B21B87F9C00E04A34 /* NSURLSessionConfiguration+PBProtocols.m */; }; F59C6B632126123F00A5B8AE /* PBVPrebidSDKValidator.m in Sources */ = {isa = PBXBuildFile; fileRef = F59C6B532126123E00A5B8AE /* PBVPrebidSDKValidator.m */; }; - F5AB325720A0CA3100F76478 /* PrebidMobile.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F5AB325220A0C97C00F76478 /* PrebidMobile.framework */; }; F5CF71AB20FD180100972EA6 /* IDInputViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F5CF71AA20FD180100972EA6 /* IDInputViewController.m */; }; F5D1856521011571001DF99A /* info-ad-server.html in Resources */ = {isa = PBXBuildFile; fileRef = F5D1856121011570001DF99A /* info-ad-server.html */; }; F5D1856621011571001DF99A /* about.html in Resources */ = {isa = PBXBuildFile; fileRef = F5D1856221011570001DF99A /* about.html */; }; @@ -83,25 +84,25 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - F5AB325120A0C97C00F76478 /* PBXContainerItemProxy */ = { + 977043CE221AD5CA00616AD8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = F5AB324C20A0C97C00F76478 /* PrebidMobile.xcodeproj */; + containerPortal = 977043C9221AD5CA00616AD8 /* PrebidMobile.xcodeproj */; proxyType = 2; - remoteGlobalIDString = C2B16E1B1EE1BE69006304C0; + remoteGlobalIDString = 60D792F2217E229A0080F428; remoteInfo = PrebidMobile; }; - F5AB325320A0C97C00F76478 /* PBXContainerItemProxy */ = { + 977043D0221AD5CA00616AD8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = F5AB324C20A0C97C00F76478 /* PrebidMobile.xcodeproj */; + containerPortal = 977043C9221AD5CA00616AD8 /* PrebidMobile.xcodeproj */; proxyType = 2; - remoteGlobalIDString = C281E17C1EE5EAF700F2F4A9; + remoteGlobalIDString = 60D792FB217E229B0080F428; remoteInfo = PrebidMobileTests; }; - F5AB325520A0C9D400F76478 /* PBXContainerItemProxy */ = { + 977043D2221AD69400616AD8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; - containerPortal = F5AB324C20A0C97C00F76478 /* PrebidMobile.xcodeproj */; + containerPortal = 977043C9221AD5CA00616AD8 /* PrebidMobile.xcodeproj */; proxyType = 1; - remoteGlobalIDString = C2B16E1A1EE1BE69006304C0; + remoteGlobalIDString = 60D792F1217E229A0080F428; remoteInfo = PrebidMobile; }; /* End PBXContainerItemProxy section */ @@ -111,6 +112,8 @@ 4AB57692E142F2F12F162457 /* Pods-Dr.Prebid.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Dr.Prebid.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Dr.Prebid/Pods-Dr.Prebid.debug.xcconfig"; sourceTree = ""; }; 600073C421DE65CA00F4738B /* CustomTextView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CustomTextView.h; sourceTree = ""; }; 600073C521DE65CA00F4738B /* CustomTextView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CustomTextView.m; sourceTree = ""; }; + 6013E445221C605500FEE2B1 /* DemandRequestBuilder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DemandRequestBuilder.h; sourceTree = ""; }; + 6013E446221C605500FEE2B1 /* DemandRequestBuilder.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DemandRequestBuilder.m; sourceTree = ""; }; 602CF6E021AEEEC10097F6C9 /* FooterCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FooterCell.h; sourceTree = ""; }; 602CF6E121AEEEC10097F6C9 /* FooterCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FooterCell.m; sourceTree = ""; }; 605A56CA2076C89A00E92376 /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; }; @@ -192,6 +195,7 @@ 60D124672126E1F300EC6EE2 /* CPMSectionCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CPMSectionCell.m; sourceTree = ""; }; 60D124682126E1F300EC6EE2 /* CPMSectionCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = CPMSectionCell.xib; sourceTree = ""; }; 8EF6536B68EE8867DF49CF0E /* libPods-Dr.Prebid.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Dr.Prebid.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 977043C9221AD5CA00616AD8 /* PrebidMobile.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PrebidMobile.xcodeproj; path = ../../../src/PrebidMobile/PrebidMobile.xcodeproj; sourceTree = ""; }; D15C104E20F6EB32004CBC18 /* AdSizeController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AdSizeController.m; sourceTree = ""; }; D15C105120F6EB4F004CBC18 /* AdSizeController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AdSizeController.h; sourceTree = ""; }; F533B1662130882E001977C2 /* AdServerValidationURLProtocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AdServerValidationURLProtocol.h; sourceTree = ""; }; @@ -219,7 +223,6 @@ F5944B3B21B87F9C00E04A34 /* NSURLSessionConfiguration+PBProtocols.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSURLSessionConfiguration+PBProtocols.m"; sourceTree = ""; }; F59C6B532126123E00A5B8AE /* PBVPrebidSDKValidator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PBVPrebidSDKValidator.m; sourceTree = ""; }; F59C6B542126123E00A5B8AE /* PBVPrebidSDKValidator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PBVPrebidSDKValidator.h; sourceTree = ""; }; - F5AB324C20A0C97C00F76478 /* PrebidMobile.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = PrebidMobile.xcodeproj; path = ../../sdk/PrebidMobile.xcodeproj; sourceTree = ""; }; F5CF71AA20FD180100972EA6 /* IDInputViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IDInputViewController.m; sourceTree = ""; }; F5CF71AD20FD181100972EA6 /* IDInputViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IDInputViewController.h; sourceTree = ""; }; F5D1856121011570001DF99A /* info-ad-server.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = "info-ad-server.html"; sourceTree = ""; }; @@ -234,7 +237,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - F5AB325720A0CA3100F76478 /* PrebidMobile.framework in Frameworks */, + 977043D4221AD69B00616AD8 /* PrebidMobile.framework in Frameworks */, 60CFB2EA2097A4C4006FCF7C /* WebKit.framework in Frameworks */, 60CFB2EB2097A4C4006FCF7C /* StoreKit.framework in Frameworks */, 60CFB2EC2097A4C4006FCF7C /* SafariServices.framework in Frameworks */, @@ -303,6 +306,8 @@ 60924F1921484A650019DD12 /* DemandViewController.m */, 60924F1B21484A650019DD12 /* RRViewController.h */, 60924F1721484A650019DD12 /* RRViewController.m */, + 6013E445221C605500FEE2B1 /* DemandRequestBuilder.h */, + 6013E446221C605500FEE2B1 /* DemandRequestBuilder.m */, ); path = DemandValidation; sourceTree = ""; @@ -331,7 +336,6 @@ 60C678762073D7B0003A7A1D = { isa = PBXGroup; children = ( - F5AB324C20A0C97C00F76478 /* PrebidMobile.xcodeproj */, 60CFB2562097820D006FCF7C /* Dr.Prebid */, 60C678802073D7B0003A7A1D /* Products */, 60C678AC2073F879003A7A1D /* Frameworks */, @@ -374,6 +378,7 @@ 60CFB2562097820D006FCF7C /* Dr.Prebid */ = { isa = PBXGroup; children = ( + 977043C9221AD5CA00616AD8 /* PrebidMobile.xcodeproj */, F54C7F5821497F6C00025B23 /* Intro */, 60A2CC262121B65300EA6ACF /* TestSummary */, 609172E320F3E50F001B94A8 /* Settings */, @@ -451,6 +456,15 @@ path = AdServerValidation; sourceTree = ""; }; + 977043CA221AD5CA00616AD8 /* Products */ = { + isa = PBXGroup; + children = ( + 977043CF221AD5CA00616AD8 /* PrebidMobile.framework */, + 977043D1221AD5CA00616AD8 /* PrebidMobileTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; F54C7F5821497F6C00025B23 /* Intro */ = { isa = PBXGroup; children = ( @@ -473,15 +487,6 @@ path = SDKIntegrationValidation; sourceTree = ""; }; - F5AB324D20A0C97C00F76478 /* Products */ = { - isa = PBXGroup; - children = ( - F5AB325220A0C97C00F76478 /* PrebidMobile.framework */, - F5AB325420A0C97C00F76478 /* PrebidMobileTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; F5D1856021011548001DF99A /* HelpPagesAssets */ = { isa = PBXGroup; children = ( @@ -512,7 +517,7 @@ buildRules = ( ); dependencies = ( - F5AB325620A0C9D400F76478 /* PBXTargetDependency */, + 977043D3221AD69400616AD8 /* PBXTargetDependency */, ); name = Dr.Prebid; productName = PrebidTestApp; @@ -547,8 +552,8 @@ projectDirPath = ""; projectReferences = ( { - ProductGroup = F5AB324D20A0C97C00F76478 /* Products */; - ProjectRef = F5AB324C20A0C97C00F76478 /* PrebidMobile.xcodeproj */; + ProductGroup = 977043CA221AD5CA00616AD8 /* Products */; + ProjectRef = 977043C9221AD5CA00616AD8 /* PrebidMobile.xcodeproj */; }, ); projectRoot = ""; @@ -559,18 +564,18 @@ /* End PBXProject section */ /* Begin PBXReferenceProxy section */ - F5AB325220A0C97C00F76478 /* PrebidMobile.framework */ = { + 977043CF221AD5CA00616AD8 /* PrebidMobile.framework */ = { isa = PBXReferenceProxy; fileType = wrapper.framework; path = PrebidMobile.framework; - remoteRef = F5AB325120A0C97C00F76478 /* PBXContainerItemProxy */; + remoteRef = 977043CE221AD5CA00616AD8 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; - F5AB325420A0C97C00F76478 /* PrebidMobileTests.xctest */ = { + 977043D1221AD5CA00616AD8 /* PrebidMobileTests.xctest */ = { isa = PBXReferenceProxy; fileType = wrapper.cfbundle; path = PrebidMobileTests.xctest; - remoteRef = F5AB325320A0C97C00F76478 /* PBXContainerItemProxy */; + remoteRef = 977043D0221AD5CA00616AD8 /* PBXContainerItemProxy */; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXReferenceProxy section */ @@ -646,6 +651,7 @@ "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@2x.png", "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPUnmutedBtn@3x.png", "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MRAID.bundle", + "${PODS_ROOT}/mopub-ios-sdk/MoPubSDK/Resources/MPAdapters.plist", ); name = "[CP] Copy Pods Resources"; outputPaths = ( @@ -670,6 +676,7 @@ "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPUnmutedBtn@2x.png", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPUnmutedBtn@3x.png", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MRAID.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/MPAdapters.plist", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -702,6 +709,7 @@ F5CF71AB20FD180100972EA6 /* IDInputViewController.m in Sources */, F533B16E21349D09001977C2 /* ColorTool.m in Sources */, F54C7F4F21483C9000025B23 /* SDKValidationResponseViewController.m in Sources */, + 6013E447221C605500FEE2B1 /* DemandRequestBuilder.m in Sources */, 60924F2121484A650019DD12 /* RRViewController.m in Sources */, F553098220E53CF500A7B552 /* AdServerValidationURLProtocol.m in Sources */, 60924F1E21484A650019DD12 /* DemandViewCell.m in Sources */, @@ -731,10 +739,10 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - F5AB325620A0C9D400F76478 /* PBXTargetDependency */ = { + 977043D3221AD69400616AD8 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = PrebidMobile; - targetProxy = F5AB325520A0C9D400F76478 /* PBXContainerItemProxy */; + targetProxy = 977043D2221AD69400616AD8 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ diff --git a/tools/PrebidValidator/Dr.Prebid/TestSummary/AdServerValidation/PBVLineItemsSetupValidator.m b/tools/PrebidValidator/Dr.Prebid/TestSummary/AdServerValidation/PBVLineItemsSetupValidator.m index ae68728a2..adca98ed5 100644 --- a/tools/PrebidValidator/Dr.Prebid/TestSummary/AdServerValidation/PBVLineItemsSetupValidator.m +++ b/tools/PrebidValidator/Dr.Prebid/TestSummary/AdServerValidation/PBVLineItemsSetupValidator.m @@ -22,10 +22,11 @@ #import "MPInterstitialAdController.h" #import "MPInterstitialAdManager.h" #import "PBViewTool.h" -#import #import "AdServerValidationURLProtocol.h" #import "NSURLSessionConfiguration+PBProtocols.h" +@import PrebidMobile; + @interface PBVLineItemsSetupValidator() +@import PrebidMobile; + +@interface DemandRequestBuilder : NSObject + +@property (nonatomic, readwrite) NSString * _Nonnull configId; + +@property (nonatomic, readwrite) NSArray * _Nonnull adSizes; + +@property (nonatomic, assign, readwrite) NSURL * _Nonnull hostURL; + +- (NSURLRequest *_Nullable)buildRequest:(nullable NSArray *)adUnits withAccountId:(NSString *_Nullable) accountID withSecureParams:(BOOL) isSecure; +@end + + + + + diff --git a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerRequestBuilder.m b/tools/PrebidValidator/Dr.Prebid/TestSummary/DemandValidation/DemandRequestBuilder.m similarity index 61% rename from sdk/PrebidServerAdapter/PrebidServerModule/PBServerRequestBuilder.m rename to tools/PrebidValidator/Dr.Prebid/TestSummary/DemandValidation/DemandRequestBuilder.m index 17e7cb8a0..8446bdab6 100644 --- a/sdk/PrebidServerAdapter/PrebidServerModule/PBServerRequestBuilder.m +++ b/tools/PrebidValidator/Dr.Prebid/TestSummary/DemandValidation/DemandRequestBuilder.m @@ -12,33 +12,18 @@ See the License for the specific language governing permissions and limitations under the License. */ - -#import "PBServerRequestBuilder.h" -#import "PBServerGlobal.h" +#import "DemandRequestBuilder.h" #import #import -#import "PBServerReachability.h" -#import "PBTargetingParams.h" -#import "PBServerLocation.h" +#import +@import PrebidMobile; static NSString *const kPrebidMobileVersion = @"0.5.3"; -@implementation PBServerRequestBuilder +@implementation DemandRequestBuilder -+ (instancetype)sharedInstance { - static dispatch_once_t _dispatchHandle = 0; - static PBServerRequestBuilder *_sharedInstance = nil; - - dispatch_once(&_dispatchHandle, ^{ - if (_sharedInstance == nil) - _sharedInstance = [[PBServerRequestBuilder alloc] init]; - - }); - return _sharedInstance; -} - -- (NSURLRequest *_Nullable)buildRequest:(nullable NSArray *)adUnits withAccountId:(NSString *) accountID withSecureParams:(BOOL) isSecure { +- (NSURLRequest *_Nullable)buildRequest:(nullable NSArray *)adUnits withAccountId:(NSString *) accountID withSecureParams:(BOOL) isSecure { NSMutableURLRequest *mutableRequest = [[NSMutableURLRequest alloc] initWithURL:self.hostURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData @@ -57,14 +42,14 @@ - (NSURLRequest *_Nullable)buildRequest:(nullable NSArray *)adUnits } } -- (NSDictionary *)openRTBRequestBodyForAdUnits:(NSArray *)adUnits withAccountId:(NSString *) accountID withSecureParams:(BOOL) isSecure{ +- (NSDictionary *)openRTBRequestBodyForAdUnits:(NSArray *)adUnits withAccountId:(NSString *) accountID withSecureParams:(BOOL) isSecure{ NSMutableDictionary *requestDict = [[NSMutableDictionary alloc] init]; requestDict[@"id"] = [[NSUUID UUID] UUIDString]; requestDict[@"source"] = [self openrtbSource]; requestDict[@"app"] = [self openrtbApp:accountID]; requestDict[@"device"] = [self openrtbDevice]; - if([[PBTargetingParams sharedInstance] isGDPREnabled] == YES){ + if(Targeting.shared.subjectToGDPR == YES){ requestDict[@"regs"] = [self openrtbRegs]; } requestDict[@"user"] = [self openrtbUser]; @@ -93,37 +78,34 @@ - (NSDictionary *)openrtbRequestExtension: (NSString *)accountId return [requestExt copy]; } -- (NSArray *)openrtbImpsFromAdUnits:(NSArray *)adUnits withSecureSettings:(BOOL) isSecure { +- (NSArray *)openrtbImpsFromAdUnits:(NSArray *)adUnits withSecureSettings:(BOOL) isSecure { NSMutableArray *imps = [[NSMutableArray alloc] init]; - for (PBAdUnit *adUnit in adUnits) { + for (AdUnit *adUnit in adUnits) { NSMutableDictionary *imp = [[NSMutableDictionary alloc] init]; - imp[@"id"] = adUnit.identifier; + imp[@"id"] = [[NSUUID UUID] UUIDString]; if(isSecure){ imp[@"secure"] = @1; } - NSMutableArray *sizeArray = [[NSMutableArray alloc] initWithCapacity:adUnit.adSizes.count]; - for (id size in adUnit.adSizes) { + NSMutableArray *sizeArray = [[NSMutableArray alloc] initWithCapacity:self.adSizes.count]; + for (id size in self.adSizes) { CGSize arSize = [size CGSizeValue]; NSDictionary *sizeDict = [NSDictionary dictionaryWithObjectsAndKeys:@(arSize.width), @"w", @(arSize.height), @"h", nil]; [sizeArray addObject:sizeDict]; } + if ([adUnit isKindOfClass:[InterstitialAdUnit class]]) { + imp[@"instl"] = @(1); + NSDictionary *sizeDict = [NSDictionary dictionaryWithObjectsAndKeys:@([[UIScreen mainScreen] bounds].size.width), @"w", @([[UIScreen mainScreen] bounds].size.height), @"h", nil]; + [sizeArray addObject:sizeDict]; + } NSDictionary *formats = @{@"format": sizeArray}; imp[@"banner"] = formats; - if (adUnit.adType == PBAdUnitTypeInterstitial) { - imp[@"instl"] = @(1); - } - //to be used when openRTB doesnt support storedRequests - /*NSMutableDictionary *placementDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@9924885,@"placementId", nil]; - - NSMutableDictionary *vendorDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:placementDict,@"appnexus", nil]; - imp[@"ext"] = vendorDict;*/ //to be used when openRTB supports storedRequests NSMutableDictionary *prebidAdUnitExt = [[NSMutableDictionary alloc] init]; - prebidAdUnitExt[@"storedrequest"] = @{@"id" : adUnit.configId}; + prebidAdUnitExt[@"storedrequest"] = @{@"id" : self.configId}; NSMutableDictionary *adUnitExt = [[NSMutableDictionary alloc] init]; adUnitExt[@"prebid"] = prebidAdUnitExt; @@ -140,7 +122,7 @@ - (NSArray *)openrtbImpsFromAdUnits:(NSArray *)adUnits withSecureSet - (NSDictionary *)openrtbApp:(NSString *) accountId { NSMutableDictionary *app = [[NSMutableDictionary alloc] init]; - NSString *bundle = [[PBTargetingParams sharedInstance] itunesID]; + NSString *bundle = Targeting.shared.itunesID; if (bundle == nil) { bundle = [[NSBundle mainBundle] bundleIdentifier]; } @@ -162,10 +144,6 @@ - (NSDictionary *)openrtbApp:(NSString *) accountId { - (NSDictionary *)openrtbDevice { NSMutableDictionary *deviceDict = [[NSMutableDictionary alloc] init]; - NSString *userAgent = PBSUserAgent(); - if (userAgent) { - deviceDict[@"ua"] = userAgent; - } NSDictionary *geo = [self openrtbGeo]; if (geo) { deviceDict[@"geo"] = geo; @@ -177,10 +155,8 @@ - (NSDictionary *)openrtbDevice { deviceDict[@"h"] = @([[UIScreen mainScreen] bounds].size.height); deviceDict[@"w"] = @([[UIScreen mainScreen] bounds].size.width); - NSString *deviceModel = PBSDeviceModel(); - if (deviceModel) { - deviceDict[@"model"] = deviceModel; - } + deviceDict[@"model"] = UIDevice.currentDevice.model; + CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init]; CTCarrier *carrier = [netinfo subscriberCellularProvider]; @@ -188,29 +164,16 @@ - (NSDictionary *)openrtbDevice { deviceDict[@"carrier"] = carrier.carrierName; } - PBServerReachability *reachability = [PBServerReachability reachabilityForInternetConnection]; - PBSNetworkStatus status = [reachability currentReachabilityStatus]; - NSUInteger connectionType = 0; - switch (status) { - case PBSNetworkStatusReachableViaWiFi: - connectionType = 1; - break; - case PBSNetworkStatusReachableViaWWAN: - connectionType = 2; - break; - default: - connectionType = 0; - break; - } - deviceDict[@"connectiontype"] = @(connectionType); + deviceDict[@"connectiontype"] = @(1); if (carrier.mobileCountryCode.length > 0 && carrier.mobileNetworkCode.length > 0) { deviceDict[@"mccmnc"] = [[carrier.mobileCountryCode stringByAppendingString:@"-"] stringByAppendingString:carrier.mobileNetworkCode]; } // Limit ad tracking - deviceDict[@"lmt"] = @(!PBSAdvertisingTrackingEnabled()); + deviceDict[@"lmt"] = @(![[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]); + - NSString *deviceId = PBSUDID(); + NSString *deviceId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]; if (deviceId) { deviceDict[@"ifa"] = deviceId; } @@ -226,45 +189,15 @@ - (NSDictionary *)openrtbDevice { // OpenRTB 2.5 Object: Geo in section 3.2.19 - (NSDictionary *)openrtbGeo { - CLLocation *clLocation = [[PBTargetingParams sharedInstance] location]; - PBServerLocation *location; - if (clLocation) { - location = [PBServerLocation getLocationWithLatitude:clLocation.coordinate.latitude longitude:clLocation.coordinate.longitude timestamp:clLocation.timestamp horizontalAccuracy:clLocation.horizontalAccuracy]; - } - if (location) { - NSMutableDictionary *geoDict = [[NSMutableDictionary alloc] init]; - CGFloat latitude = location.latitude; - CGFloat longitude = location.longitude; - - if (location.precision >= 0) { - NSNumberFormatter *nf = [[self class] precisionNumberFormatter]; - nf.maximumFractionDigits = location.precision; - nf.minimumFractionDigits = location.precision; - geoDict[@"lat"] = [nf numberFromString:[NSString stringWithFormat:@"%f", location.latitude]]; - geoDict[@"lon"] = [nf numberFromString:[NSString stringWithFormat:@"%f", location.longitude]]; - } else { - geoDict[@"lat"] = @(latitude); - geoDict[@"lon"] = @(longitude); - } - - NSDate *locationTimestamp = location.timestamp; - NSTimeInterval ageInSeconds = -1.0 * [locationTimestamp timeIntervalSinceNow]; - NSInteger ageInMilliseconds = (NSInteger)(ageInSeconds * 1000); - - geoDict[@"lastfix"] = @(ageInMilliseconds); - geoDict[@"accuracy"] = @((NSInteger)location.horizontalAccuracy); - - return [geoDict copy]; - } else { + return nil; - } } -(NSDictionary *) openrtbRegs { NSMutableDictionary *regsDict = [[NSMutableDictionary alloc] init]; - BOOL gdpr = [[PBTargetingParams sharedInstance] subjectToGDPR]; + BOOL gdpr = [[Targeting shared] subjectToGDPR]; regsDict[@"ext"] = @{@"gdpr" : @(@(gdpr).integerValue)}; @@ -275,20 +208,17 @@ -(NSDictionary *) openrtbRegs { - (NSDictionary *)openrtbUser { NSMutableDictionary *userDict = [[NSMutableDictionary alloc] init]; - NSInteger ageValue = [[PBTargetingParams sharedInstance] age]; - NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]]; - NSInteger year = [components year]; + NSInteger ageValue = Targeting.shared.yearOfBirth; if (ageValue > 0) { - userDict[@"yob"] = @(year - ageValue); + userDict[@"yob"] = @(ageValue); } - PBTargetingParamsGender genderValue = [[PBTargetingParams sharedInstance] gender]; NSString *gender; - switch (genderValue) { - case PBTargetingParamsGenderMale: + switch ([[Targeting shared] gender]) { + case GenderMale: gender = @"M"; break; - case PBTargetingParamsGenderFemale: + case GenderFemale: gender = @"F"; break; default: @@ -297,17 +227,9 @@ - (NSDictionary *)openrtbUser { } userDict[@"gender"] = gender; - NSDictionary * targetingParams = [[PBTargetingParams sharedInstance] userKeywords]; - - NSString *keywordString = [self fetchKeywordsString:targetingParams]; - - if(![keywordString isEqualToString:@""]){ - userDict[@"keywords"] = keywordString; - } - - if([[PBTargetingParams sharedInstance] isGDPREnabled] == YES){ - - NSString *consentString = [[PBTargetingParams sharedInstance] gdprConsentString]; + if([[Targeting shared] subjectToGDPR] == YES){ + + NSString *consentString = [[Targeting shared] gdprConsentString]; if(consentString != nil){ userDict[@"ext"] = @{@"consent" : consentString}; } diff --git a/tools/PrebidValidator/Dr.Prebid/TestSummary/DemandValidation/DemandValidator.m b/tools/PrebidValidator/Dr.Prebid/TestSummary/DemandValidation/DemandValidator.m index 9d9589a67..c3d1ae6d5 100644 --- a/tools/PrebidValidator/Dr.Prebid/TestSummary/DemandValidation/DemandValidator.m +++ b/tools/PrebidValidator/Dr.Prebid/TestSummary/DemandValidation/DemandValidator.m @@ -16,10 +16,10 @@ #import #import "DemandValidator.h" -#import -#import #import "PBVSharedConstants.h" -#import +#import "DemandRequestBuilder.h" + +@import PrebidMobile; @interface DemandValidator() @property NSInteger testsHasResponded; @@ -30,31 +30,37 @@ @implementation DemandValidator - (void)startTestWithCompletionHandler:(void (^) (void)) completionHandler;{ // Get params from coredata NSString *adFormatName = [[NSUserDefaults standardUserDefaults] stringForKey:kAdFormatNameKey]; - NSString *adUnitID = [[NSUserDefaults standardUserDefaults] stringForKey:kAdUnitIdKey]; NSString *adSizeString = [[NSUserDefaults standardUserDefaults] stringForKey:kAdSizeKey]; NSString *accountId = [[NSUserDefaults standardUserDefaults] stringForKey:kPBAccountKey]; NSString *configId = [[NSUserDefaults standardUserDefaults] stringForKey:kPBConfigKey]; - PBAdUnit *adUnit; + NSMutableArray* array = [NSMutableArray new]; + AdUnit *adUnit; if([adFormatName isEqualToString:@"Banner"]) { - adUnit = [[PBBannerAdUnit alloc]initWithAdUnitIdentifier:adUnitID andConfigId:configId]; - // set size on adUnit if ([adSizeString isEqualToString: kSizeString320x50]) { - [( (PBBannerAdUnit *) adUnit) addSize: CGSizeMake(320, 50)]; - } else if ([adSizeString isEqualToString:kSizeString300x250]) { - [( (PBBannerAdUnit *) adUnit) addSize: CGSizeMake(300, 250)]; + [array addObject:[NSValue valueWithCGSize:CGSizeMake(320, 50)]]; + + } else if ([adSizeString isEqualToString: kSizeString300x250]) { + [array addObject:[NSValue valueWithCGSize:CGSizeMake(300, 250)]]; + + } else if ([adSizeString isEqualToString:kSizeString320x480]){ + [array addObject:[NSValue valueWithCGSize:CGSizeMake(320, 480)]]; + } else if ([adSizeString isEqualToString:kSizeString320x100]){ - [( (PBBannerAdUnit *) adUnit) addSize: CGSizeMake(320, 100)]; - }else if ([adSizeString isEqualToString:kSizeString320x480]){ - [( (PBBannerAdUnit *) adUnit) addSize: CGSizeMake(320, 480)]; - }else if ([adSizeString isEqualToString:kSizeString300x600]){ - [( (PBBannerAdUnit *) adUnit) addSize: CGSizeMake(300, 600)]; - }else if ([adSizeString isEqualToString:kSizeString728x90]){ - [( (PBBannerAdUnit *) adUnit) addSize: CGSizeMake(728, 90)]; + [array addObject:[NSValue valueWithCGSize:CGSizeMake(320, 100)]]; + + } else if ([adSizeString isEqualToString:kSizeString300x600]){ + [array addObject:[NSValue valueWithCGSize:CGSizeMake(300, 600)]]; + + } else { + [array addObject:[NSValue valueWithCGSize:CGSizeMake(728, 90)]]; + } + adUnit = [[BannerAdUnit alloc] initWithConfigId:configId size:[array.lastObject CGSizeValue]]; + } else { - adUnit = [[PBInterstitialAdUnit alloc] initWithAdUnitIdentifier:adUnitID andConfigId:configId]; + adUnit = [[InterstitialAdUnit alloc] initWithConfigId:configId]; } NSArray *adUnits = [NSArray arrayWithObjects:adUnit, nil]; // Generate Request for the saved adunits @@ -62,9 +68,14 @@ - (void)startTestWithCompletionHandler:(void (^) (void)) completionHandler;{ NSURL *url = [NSURL URLWithString:kAppNexusPrebidServerEndpoint]; if ([host isEqualToString:kRubiconString]) { url = [NSURL URLWithString:kRubiconPrebidServerEndpoint]; + Prebid.shared.prebidServerHost = PrebidHostRubicon; } - [[PBServerRequestBuilder sharedInstance]setHostURL:url]; - NSURLRequest *req = [[PBServerRequestBuilder sharedInstance] buildRequest:adUnits withAccountId:accountId withSecureParams:true]; + DemandRequestBuilder *builder = [[DemandRequestBuilder alloc] init]; + builder.configId = configId; + builder.adSizes = array; + builder.hostURL = url; + NSURLRequest *req = [builder buildRequest:adUnits withAccountId:accountId withSecureParams:YES]; + self.testsHasResponded = 0; self.testResults = [[NSMutableDictionary alloc] init]; NSMutableDictionary *bidders = [[NSMutableDictionary alloc] init]; @@ -100,7 +111,7 @@ - (void)startTestWithCompletionHandler:(void (^) (void)) completionHandler;{ } }]; } - + } -(void)runTestWithReuqest: (NSURLRequest *) req diff --git a/tools/PrebidValidator/Dr.Prebid/TestSummary/SDKIntegrationValidation/PBVPrebidSDKValidator.m b/tools/PrebidValidator/Dr.Prebid/TestSummary/SDKIntegrationValidation/PBVPrebidSDKValidator.m index 4b0aa4953..9683ef629 100644 --- a/tools/PrebidValidator/Dr.Prebid/TestSummary/SDKIntegrationValidation/PBVPrebidSDKValidator.m +++ b/tools/PrebidValidator/Dr.Prebid/TestSummary/SDKIntegrationValidation/PBVPrebidSDKValidator.m @@ -16,12 +16,6 @@ #import #import "PBVPrebidSDKValidator.h" -#import -#import -#import -#import -#import -#import #import "PBVSharedConstants.h" #import "MPAdView.h" #import "MPWebView.h" @@ -32,8 +26,9 @@ #import "PBViewTool.h" #import "SDKValidationURLProtocol.h" -@interface PBVPrebidSDKValidator() ) delegate [SDKValidationURLProtocol setDelegate:self]; [NSURLProtocol registerClass:[SDKValidationURLProtocol class]]; self.delegate = delegate; - [self enablePrebidLogs]; [self setupPrebidAndRegisterAdUnits]; } return self; } #pragma mark - Prebid Mobile Setup -- (void)enablePrebidLogs { - [PBLogManager setPBLogLevel:PBLogLevelAll]; -} - (BOOL)setupPrebidAndRegisterAdUnits { @try { // Prebid Mobile setup! - [self setupPrebidLocationManager]; - //[self setPrebidTargetingParams]; + [self setPrebidTargetingParams]; // Retriev settings from core data and create ad unit based on that NSString *adFormatName = [[NSUserDefaults standardUserDefaults] stringForKey:kAdFormatNameKey]; - NSString *adUnitID = [[NSUserDefaults standardUserDefaults] stringForKey:kAdUnitIdKey]; NSString *adSizeString = [[NSUserDefaults standardUserDefaults] stringForKey:kAdSizeKey]; NSString *configId = [[NSUserDefaults standardUserDefaults] stringForKey:kPBConfigKey]; NSString *accountId = [[NSUserDefaults standardUserDefaults] stringForKey:kPBAccountKey]; - PBAdUnit *adUnit; - // todo Wei Zhang to support native and video in the future + if([adFormatName isEqualToString:kBannerString]) { - adUnit = [[PBBannerAdUnit alloc]initWithAdUnitIdentifier:adUnitID andConfigId:configId]; + self.adUnit = [[BannerAdUnit alloc] initWithConfigId:configId size:CGSizeMake(320, 50)]; // set size on adUnit + NSMutableArray* array = [NSMutableArray new]; if ([adSizeString isEqualToString: kSizeString320x50]) { - [( (PBBannerAdUnit *) adUnit) addSize: CGSizeMake(320, 50)]; + [array addObject:[NSValue valueWithCGSize:CGSizeMake(320, 50)]]; + } else if ([adSizeString isEqualToString: kSizeString300x250]) { - [( (PBBannerAdUnit *) adUnit) addSize: CGSizeMake(300, 250)]; + [array addObject:[NSValue valueWithCGSize:CGSizeMake(300, 250)]]; } else if ([adSizeString isEqualToString:kSizeString320x480]){ - [( (PBBannerAdUnit *) adUnit) addSize: CGSizeMake(320, 480)]; + [array addObject:[NSValue valueWithCGSize:CGSizeMake(320, 480)]]; } else if ([adSizeString isEqualToString:kSizeString320x100]){ - [( (PBBannerAdUnit *) adUnit) addSize: CGSizeMake(320, 100)]; + [array addObject:[NSValue valueWithCGSize:CGSizeMake(320, 100)]]; } else if ([adSizeString isEqualToString:kSizeString300x600]){ - [( (PBBannerAdUnit *) adUnit) addSize: CGSizeMake(300, 600)]; + [array addObject:[NSValue valueWithCGSize:CGSizeMake(300, 600)]]; } else { - [( (PBBannerAdUnit *) adUnit) addSize: CGSizeMake(728, 90)]; + [array addObject:[NSValue valueWithCGSize:CGSizeMake(728, 90)]]; } + [( (BannerAdUnit *) self.adUnit) addAdditionalSizeWithSizes:array]; } else if ([adFormatName isEqualToString:kInterstitialString]){ - adUnit = [[PBInterstitialAdUnit alloc] initWithAdUnitIdentifier:adUnitID andConfigId:configId]; + self.adUnit = [[InterstitialAdUnit alloc] initWithConfigId:configId]; } else { NSLog(@"Native and video not supported for now."); return NO; } - NSArray *adUnits = [NSArray arrayWithObjects:adUnit, nil]; + //NSArray *adUnits = [NSArray arrayWithObjects:adUnit, nil]; NSString *adServerName = [[NSUserDefaults standardUserDefaults] stringForKey:kAdServerNameKey]; NSString *host = [[NSUserDefaults standardUserDefaults] stringForKey:kPBHostKey]; + Prebid.shared.prebidServerAccountId = accountId; if ([adServerName isEqualToString:kMoPubString]) { - if ([host isEqualToString:kAppNexusString]) { - [PrebidMobile registerAdUnits:adUnits withAccountId:accountId withHost:PBServerHostAppNexus andPrimaryAdServer:PBPrimaryAdServerMoPub]; - } else if ([host isEqualToString:kRubiconString]) { - [PrebidMobile registerAdUnits:adUnits withAccountId:accountId withHost:PBServerHostRubicon andPrimaryAdServer:PBPrimaryAdServerMoPub]; - } + if ([host isEqualToString:kAppNexusString]) { + Prebid.shared.prebidServerHost = PrebidHostAppnexus; + } else if ([host isEqualToString:kRubiconString]) { + Prebid.shared.prebidServerHost = PrebidHostRubicon; + } } else if([adServerName isEqualToString:kDFPString]){ - if ([host isEqualToString:kAppNexusString]) { - [PrebidMobile registerAdUnits:adUnits withAccountId:accountId withHost:PBServerHostAppNexus andPrimaryAdServer:PBPrimaryAdServerDFP]; - } else if ([host isEqualToString:kRubiconString]) { - [PrebidMobile registerAdUnits:adUnits withAccountId:accountId withHost:PBServerHostRubicon andPrimaryAdServer:PBPrimaryAdServerDFP]; - } + if ([host isEqualToString:kAppNexusString]) { + Prebid.shared.prebidServerHost = PrebidHostAppnexus; + } else if ([host isEqualToString:kRubiconString]) { + Prebid.shared.prebidServerHost = PrebidHostRubicon; + } } [self.delegate adUnitRegistered]; - } @catch (PBException *ex) { + } @catch (NSException *ex) {//(PBException *ex) { NSLog(@"%@",[ex reason]); } @finally { return YES; } } -- (void)setupPrebidLocationManager { - self.locationManager = [[CLLocationManager alloc] init]; - self.locationManager.delegate = self; - self.locationManager.distanceFilter = kCLDistanceFilterNone; - self.locationManager.desiredAccuracy = kCLLocationAccuracyKilometer; - // Check for iOS 8. Without this guard the code will crash with "unknown selector" on iOS 7. - if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { - [self.locationManager requestWhenInUseAuthorization]; - } - [self.locationManager startUpdatingLocation]; -} - - (void)setPrebidTargetingParams { - [[PBTargetingParams sharedInstance] setAge:25]; - [[PBTargetingParams sharedInstance] setGender:PBTargetingParamsGenderFemale]; -} - -// Location Manager Delegate Methods -- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { - [[PBTargetingParams sharedInstance] setLocation:[locations lastObject]]; + Targeting.shared.gender = GenderFemale; + Prebid.shared.shareGeoLocation = TRUE; + } #pragma mark - PBVPrebidSDKValidator APIs @@ -173,25 +155,19 @@ -(void)startTest NSArray *widthHeight = [adSizeString componentsSeparatedByString:@"x"]; double width = [widthHeight[0] doubleValue]; double height = [widthHeight[1] doubleValue]; - MPAdView *mopubAdView = [[MPAdView alloc] initWithAdUnitId:adUnitID + self.mopubAdView = [[MPAdView alloc] initWithAdUnitId:adUnitID size:CGSizeMake(width, height)]; - [mopubAdView stopAutomaticallyRefreshingContents]; - mopubAdView.delegate = self; - self.adObject = mopubAdView; + [self.mopubAdView stopAutomaticallyRefreshingContents]; + self.mopubAdView.delegate = self; + [self.adUnit fetchDemandWithAdObject:self.mopubAdView completion:^(enum ResultCode result) { + [self.mopubAdView loadAd]; + }]; - [PrebidMobile setBidKeywordsOnAdObject:mopubAdView - withAdUnitId:adUnitID - withTimeout:600 - completionHandler:^{ - [mopubAdView loadAd]; - }]; } else if([adFormatName isEqualToString:kInterstitialString]){ - MPInterstitialAdController *mopubInterstitial = [MPInterstitialAdController interstitialAdControllerForAdUnitId:adUnitID]; - mopubInterstitial.delegate = self; - self.adObject = mopubInterstitial; - - [PrebidMobile setBidKeywordsOnAdObject:mopubInterstitial withAdUnitId:adUnitID withTimeout:600 completionHandler:^{ - [mopubInterstitial loadAd]; + self.mopubInterstitial = [MPInterstitialAdController interstitialAdControllerForAdUnitId:adUnitID]; + self.mopubInterstitial.delegate = self; + [self.adUnit fetchDemandWithAdObject:self.mopubInterstitial completion:^(enum ResultCode result) { + [self.mopubInterstitial loadAd]; }]; } @@ -200,22 +176,24 @@ -(void)startTest NSArray *widthHeight = [adSizeString componentsSeparatedByString:@"x"]; double width = [widthHeight[0] doubleValue]; double height = [widthHeight[1] doubleValue]; - DFPBannerView *dfpAdView = [[DFPBannerView alloc] initWithAdSize:GADAdSizeFromCGSize(CGSizeMake(width, height))]; - dfpAdView.adUnitID = adUnitID; - dfpAdView.delegate = self; - dfpAdView.rootViewController = (UIViewController *)_delegate; - self.adObject = dfpAdView; + self.dfpView = [[DFPBannerView alloc] initWithAdSize:GADAdSizeFromCGSize(CGSizeMake(width, height))]; + self.dfpView.adUnitID = adUnitID; + self.dfpView.delegate = self; + self.dfpView.rootViewController = (UIViewController *)_delegate; - [PrebidMobile setBidKeywordsOnAdObject:dfpAdView withAdUnitId:adUnitID withTimeout:600 completionHandler:^{ - [dfpAdView loadRequest:[DFPRequest request]]; + self.request = [[DFPRequest alloc] init]; + self.request.testDevices = @[kDFPSimulatorID]; + [self.adUnit fetchDemandWithAdObject:self.request completion:^(enum ResultCode result) { + [self.dfpView loadRequest:self.request]; }]; - } else if([adFormatName isEqualToString:kInterstitialString]){ - DFPInterstitial *dfpInterstitial = [[DFPInterstitial alloc] initWithAdUnitID:adUnitID]; - dfpInterstitial.delegate = self; - self.adObject = dfpInterstitial; - [PrebidMobile setBidKeywordsOnAdObject:dfpInterstitial withAdUnitId:adUnitID withTimeout:600 completionHandler:^{ - [dfpInterstitial loadRequest:[DFPRequest request]]; + } else if([adFormatName isEqualToString:kInterstitialString]){ + self.dfpInterstitial = [[DFPInterstitial alloc] initWithAdUnitID:adUnitID]; + self.dfpInterstitial.delegate = self; + self.request = [[DFPRequest alloc] init]; + self.request.testDevices = @[kDFPSimulatorID]; + [self.adUnit fetchDemandWithAdObject:self.request completion:^(enum ResultCode result) { + [self.dfpInterstitial loadRequest:self.request]; }]; } } diff --git a/tools/PrebidValidator/Podfile b/tools/PrebidValidator/Podfile index 0d5160f25..1c6a182c9 100644 --- a/tools/PrebidValidator/Podfile +++ b/tools/PrebidValidator/Podfile @@ -2,7 +2,7 @@ # platform :ios, '9.0' target 'Dr.Prebid' do - pod 'mopub-ios-sdk', '5.4.0' - pod 'Google-Mobile-Ads-SDK', '7.30.0' + pod 'mopub-ios-sdk' + pod 'Google-Mobile-Ads-SDK' end diff --git a/tools/PrebidValidator/Podfile.lock b/tools/PrebidValidator/Podfile.lock index 7d3d4b86c..758200b14 100644 --- a/tools/PrebidValidator/Podfile.lock +++ b/tools/PrebidValidator/Podfile.lock @@ -1,20 +1,20 @@ PODS: - - Google-Mobile-Ads-SDK (7.30.0) - - mopub-ios-sdk (5.4.0): - - mopub-ios-sdk/MoPubSDK (= 5.4.0) - - mopub-ios-sdk/Avid (5.4.0): + - Google-Mobile-Ads-SDK (7.39.0) + - mopub-ios-sdk (5.5.0): + - mopub-ios-sdk/MoPubSDK (= 5.5.0) + - mopub-ios-sdk/Avid (5.5.0): - mopub-ios-sdk/Core - - mopub-ios-sdk/Core (5.4.0) - - mopub-ios-sdk/Moat (5.4.0): + - mopub-ios-sdk/Core (5.5.0) + - mopub-ios-sdk/Moat (5.5.0): - mopub-ios-sdk/Core - - mopub-ios-sdk/MoPubSDK (5.4.0): + - mopub-ios-sdk/MoPubSDK (5.5.0): - mopub-ios-sdk/Avid - mopub-ios-sdk/Core - mopub-ios-sdk/Moat DEPENDENCIES: - - Google-Mobile-Ads-SDK (= 7.30.0) - - mopub-ios-sdk (= 5.4.0) + - Google-Mobile-Ads-SDK + - mopub-ios-sdk SPEC REPOS: https://github.com/cocoapods/specs.git: @@ -22,9 +22,9 @@ SPEC REPOS: - mopub-ios-sdk SPEC CHECKSUMS: - Google-Mobile-Ads-SDK: 7404f68120ae8682afeb5af001fbf4aad731c78e - mopub-ios-sdk: 6e331c6cf6052426a750568578f55dd3de0a67f1 + Google-Mobile-Ads-SDK: d0f10a7c4d7015db23075ff316602350d12049db + mopub-ios-sdk: 937b82dd76d8a396ba6a22ae005a1e24c61bf28b -PODFILE CHECKSUM: 4839074836a2f34ff1b7bee98e9089bee2f722ef +PODFILE CHECKSUM: 4a73acef4af6b9dc201a267b3260271a1b4d65b8 COCOAPODS: 1.5.3