From 31d0d80d620707ac0440da041976def91e4cc94e Mon Sep 17 00:00:00 2001 From: John Higgins Date: Fri, 20 Nov 2020 16:10:46 -0600 Subject: [PATCH] Development (#197) * File cluster proof of concept (#162) * Implement files data-access object * Migrate to files-dao * Update server tests * Fix regression * Make module naming more ideomatic * Resolve linting issues * Support expunging by session scope * Draft matches extraction * Filter matches by distance * Test query matches with cycles * Test match loading * Emulate matches pagination * Update MatchesDAO tests * Migrate server.api to MatchesDAO * Update api/matches tests * Test multiple hops with cycles * Update file matches page * Update cluster page to consume new matches format * Improve graph container responsiveness * Fix linting issues * Improve graph responsiveness * Implement generic loading trigger * Support matches filtering * Implement dynamic matches loading * Fix loading trigger message * Fix match reducers * Improve dynamic match loading * Implement neighbor loading * Adjust graph style * Enable zooming * Enable cluster navigation * Fix tooltips * Make edge opacity dynamic * Make color scheme static * Handle playback issues (#165) * Handle missing file in thumbnail endpoint * Handle missing file in watch endpoint * Display playback/loading errors * Handle file missing in database case * Use bundled flv.js By default react-player tries to lazy-load playback SDK from CDN. But the application must be able play video files when Internet connection is not available. To solve that we bundle flv.js and initialize global variable consumed by react-player's FilePlayer. See https://www.npmjs.com/package/react-player#sdk-overrides See https://github.com/CookPete/react-player/issues/605#issuecomment-492561909 * Suppress excessive flv.js error logs (#149) * coding style improvements and small refactors * Fix matches loading (#166) (#168) * Support config tags (#167) * Support tags by PathReprStorage * Support tags by SQLiteReprStorage * Update extract_features.py to support tags * Add missing dependency * Make config tag opaque * Update extract_features.py sript * Delete obsolete code * Update repr storage tests * Update generate_matches.py script * Update template_matching.py script * Update general_tests * Add missing unit-test dependency * Optimize module dependencies * Implement side-by-side match comparison view (#155) (#169) * Refactor file cluster page * Refacto VideoInformationPane * Make video details elements collapsible * Move distance element to common package * Add comparable file component * Implement reusable file summary * Implement match file list * Implement mother file view * Fetch matched files scenes * Setup comparison page routing * Reset video player on file change * Fix matched file header * Improve distance style * Hook up compare button * Fix match duplication * Fix linting issues * Make compare button primary-colored * added missing dependency * removed unnecessary files * additional refactor and linting fixes * Improve cluster view (#171) * Refactor FileSummaryHeader * Refactor linear list item * Extract match file id from URL * Navigate to comparison page on edge click * Navigate to compare from single match preview * Improve cluster tooltips * Implement node highlighting * Improve link popover * Fix linting issues * Add navigation from comparison page (#172) (#177) * Handle partial processing results (#178) * Handle missing data in backend (#135) * Test missing data processing * Fix go back navigation (#179) * Fix go-back navigation * Preserve filters and search results Previous file filters and fetched files should not be updated when we navigate from video-details page to the collection page. * Handle missing video length * Fix match category selector * Ensure initial file loading * Add match file enumeration & sorting (#181) * Add match enumeration (#175) * Sort files by match score * Handle uninitialized ref * Add image version option (#180) * Ensure shell is bash * Refactor setup script * Select image version during setup (#97) * Add make-goal for forced setup update * Improve scripts output * Add docker update and purge goals (#114) * Use arrow-select for pre-built option * Add various UI improvements (#173, #174, #176) (#182) * Handle dense layout * Add active filters indication (#176) * Preserve file view type during session (#174) * Enlarge links hitbox (#173) * Fix link click handler * augmented dataset evaluation pipeline * Modifications to support benchmarking script * Add cluster API endpoint (#183) (#184) * Separate cluster and matches enpoints (#183) * Update server tests * Test matches endpoint * Update REST client * Refacto API client * Creat generic hook for entity loading * Consume matches and cluster API separately * Manage fields inclusion * Update immediate match loading * Update comparison page * Remove trash * Remove trash * Refactor ui state management (#185, #189) (#190) * Move helpers to separate modules * Move file cache to separate package * Move file matches state to separate package * Move cluster state to separate package * Move file-list state to separate package * Collect reusable prop-types in a public package * Extract entity fetching logic * Refactor file-cluster state Use generic approach to manage file-cluster state. * Refactor file-matches state Use generic approach to manage file-matches state. * Update server client * Update matches params (#189) * Fix file cluster update * Disable false-positive linting issue * Create post_push * Simplify docker-compose workflow (#187, #188) (#191) * Simplify docker-compose workflow Use `build` and `image` simultaneously in compose-file. As a result no shared configuration is needed and all the configuration is managed by environment variables (located in the .env file). To use prebuild images user will need to run `make pull` To use local images (if production mode is disabled) user will need to run `make build`. That's it. * Commit missing script * Add revision information to docker images (#188) * Benchmarking improvements * Update and rename post_push to build * Delete build * Parse exif general encoded date (#137) (#193) * Update db schema * Fix media-info output parsing * Parse exif date-time * Use date-time on backend * Update tests * Use numeric timestamps on frontend * Handle NaN-representation of missing values The exif metadata is pre-processed by the pandas.json_normalize method which replaces any missing value with NaNs. As a result the float value may appear in place of string. * Handle pandas missing data representation pandas.Series heuristically determines type of the underlying data and tries to represent a missing values according to that data time. In case of datetime the missing values are represented by pandas.NaT which is not compatible with SQLAlchemy framework. To fix that we have to explicitly transform NaTs to Nones. See https://pandas.pydata.org/pandas-docs/stable/user_guide/missing_data.html#datetimes * Fix deprecated import * Fix database URI * Handle more date columns * Update video metadata model (#139) (#196) * Update db schema * Update db access logic * Update frontend * Update server tests * Update storage tests * Additional error handling for dealing with missing files * Added Missing frame level features check * Quick merge fix Co-authored-by: Stepan Anokhin <38860530+stepan-anokhin@users.noreply.github.com> Co-authored-by: Felipe Batista Co-authored-by: Stepan Anokhin --- .mk/docker.mk | 30 +- Makefile | 22 +- benchmarks/augmented_dataset/config.yml | 31 + benchmarks/augmented_dataset/labels.csv | 3064 +++++++++++++++++ benchmarks/evaluate.py | 121 + benchmarks/utils.py | 159 + db/__init__.py | 7 +- .../nets => db/access}/__init__.py | 0 db/access/files.py | 240 ++ db/access/matches.py | 142 + db/schema.py | 42 +- docker-compose.override.yml | 13 - docker-compose.yml | 20 +- docker-compose/README.md | 28 - docker-compose/build.cpu.yml | 11 - docker-compose/prebuilt.cpu.yml | 9 - docker-compose/prebuilt.yml | 8 - docker/Dockerfile.dedup-cpu | 3 + docker/Dockerfile.dedup-gpu | 3 + docker/Dockerfile.server | 2 + environment-gpu.yaml | 1 + environment.yaml | 1 + extract_exif.py | 2 - extract_features.py | 34 +- generate_matches.py | 29 +- requirements-winnow-unit-tests.txt | 3 +- scripts/docker-build.sh | 20 + scripts/docker-setup.sh | 92 +- scripts/{docker-run.sh => docker-update.sh} | 19 +- scripts/lib/ask.choose.sh | 116 + scripts/lib/ask.confirm.sh | 47 + scripts/lib/ask.path.sh | 58 + scripts/run-tests.sh | 2 + server/server/api/__init__.py | 8 +- server/server/api/cluster.py | 44 + server/server/api/files.py | 294 +- server/server/api/helpers.py | 46 +- server/server/api/matches.py | 24 +- server/server/api/scenes.py | 4 +- server/server/api/videos.py | 7 +- server/server/model.py | 25 +- server/tests/db/access/test_matches_dao.py | 214 ++ server/tests/server/test_api.py | 232 +- server/tests/server/test_model.py | 10 + tests/general_tests.py | 38 +- .../winnow/storage/test_db_result_storage.py | 16 +- tests/winnow/storage/test_repr_storage.py | 93 +- web/package-lock.json | 19 + web/package.json | 1 + web/src/application/state/index.js | 4 +- web/src/application/state/initialState.js | 13 + web/src/application/state/reducers.js | 13 +- web/src/application/state/sagas.js | 2 +- .../components/CollectionRootPage.js | 4 + .../CategorySelector/CategorySelector.js | 72 +- .../FileBrowserPage/CategorySelector/index.js | 2 +- .../FileBrowserActions/FileBrowserActions.js | 39 +- .../FileBrowserActions/SortSelector.js | 2 +- .../FileBrowserActions/ViewSelector.js | 8 +- .../FileBrowserActions/index.js | 1 - .../FileBrowserActions/view.js | 8 - .../FileBrowserPage/FileBrowserPage.js | 61 +- .../FileGridList/FileGridListItem.js | 2 +- .../FileLinearList/FileLinearListItem.js | 184 +- .../FilterPane/ContentFilters.js | 18 + .../FileBrowserPage/FilterPane/FilterPane.js | 28 +- .../FilterPane/FilterPaneHeader.js | 10 +- .../FilterPane/MetadataFilters.js | 18 + .../FileBrowserPage/FilterPane/useFilters.js | 6 +- .../FileClusterPage/FileClusterPage.js | 67 +- .../FileComparisonPage/FileComparisonPage.js | 57 + .../FileDetails/FileDescriptionPane.js | 89 + .../FileDetails/FileDetails.js | 52 + .../FileComparisonPage/FileDetails/index.js | 1 + .../FileComparisonPage/LoadingHeader.js | 54 + .../MatchFiles/FileMatchHeader.js | 53 + .../MatchFiles/MatchFiles.js | 167 + .../MatchFiles/MatchSelector.js | 142 + .../FileComparisonPage/MatchFiles/index.js | 1 + .../MotherFile/FileDetailsHeader.js | 44 + .../MotherFile/MotherFile.js | 101 + .../FileComparisonPage/MotherFile/index.js | 1 + .../components/FileComparisonPage/index.js | 1 + .../FileLoadingHeader/FileLoadingHeader.js | 29 +- .../FileMatchesPage/FileMatchesActions.js | 4 +- .../FileMatchesPage/FileMatchesPage.js | 61 +- .../FileMatchesPage/MatchPreview/Container.js | 38 + .../MatchPreview/FileAttributes.js | 2 +- .../MatchPreview/MatchPreview.js | 53 +- .../components/FileSummary/CreationDate.js | 33 + .../components/FileSummary/Divider.js | 27 + .../components/FileSummary/Duration.js | 30 + .../components/FileSummary/FileSummary.js | 103 + .../components/FileSummary/Fingerprint.js | 43 + .../components/FileSummary/HasAudio.js | 19 + .../components/FileSummary/HasExif.js | 32 + .../collection/components/FileSummary/Name.js | 83 + .../components/FileSummary/Spacer.js | 23 + .../components/FileSummary/index.js | 1 + .../FileSummaryHeader/FileSummaryHeader.js | 145 +- .../components/MatchGraph/D3Graph.js | 272 +- .../components/MatchGraph/LinkTooltip.js | 99 + .../components/MatchGraph/MatchGraph.js | 121 +- .../components/MatchGraph/NodeTooltip.js | 72 + .../components/MatchGraph/helpers.js | 15 + .../components/MatchGraph/prepareGraph.js | 97 + .../components/MatchGraph/tracking.js | 57 + .../components/MatchGraph/useTooltip.js | 33 + .../components/VideoDetailsPage/ExifPanel.js | 2 +- .../VideoDetailsPage/FileInfoPanel.js | 2 +- .../ObjectTimeLine/ObjectGroup.js | 2 +- .../ObjectTimeLine/ObjectGroupPopper.js | 2 +- .../ObjectTimeLine/ObjectPreview.js | 2 +- .../ObjectTimeLine/ObjectTimeLine.js | 6 +- .../ObjectsPanel/ObjectGroupListItem.js | 2 +- .../ObjectsPanel/ObjectsPanel.js | 2 +- .../VideoDetailsPage/SceneSelector/Scene.js | 2 +- .../SceneSelector/SceneSelector.js | 64 +- .../VideoDetailsPage/VideoDetailsPage.js | 11 +- .../VideoDetailsPage/VideoInformation.js | 95 + .../VideoDetailsPage/VideoInformationPane.js | 63 +- .../VideoDetailsPage/VideoPlayer.js | 114 +- .../VideoDetailsPage/VideoPlayerPane.js | 68 +- .../components/VideoDetailsPage/seekTo.js | 5 +- web/src/collection/hooks/useFile.js | 11 +- web/src/collection/hooks/useFileCluster.js | 33 + web/src/collection/hooks/useFileMatches.js | 26 + web/src/collection/hooks/useLoadAll.js | 38 + web/src/collection/hooks/useValue.js | 21 + .../FileType.js | 0 .../MatchType.js | 5 +- .../ObjectType.js | 0 .../SceneType.js | 0 .../state/fetchEntities/fetchEntitiesSaga.js | 61 + .../state/fetchEntities/initialState.js | 54 + .../state/fetchEntities/makeEntityReducer.js | 59 + .../fetchEntities/makeFetchEntitiesHook.js | 78 + web/src/collection/state/fileCache/actions.js | 20 + .../state/fileCache/initialState.js | 11 + web/src/collection/state/fileCache/reducer.js | 27 + .../collection/state/fileCluster/actions.js | 62 + .../state/fileCluster/initialState.js | 23 + .../collection/state/fileCluster/reducer.js | 35 + web/src/collection/state/fileCluster/sagas.js | 33 + .../collection/state/fileList/FileListType.js | 13 + .../state/{ => fileList}/FileSort.js | 0 .../state/{ => fileList}/MatchCategory.js | 0 .../state/{ => fileList}/actions.js | 46 +- .../collection/state/fileList/initialState.js | 35 + web/src/collection/state/fileList/reducer.js | 70 + web/src/collection/state/fileList/sagas.js | 67 + .../collection/state/fileMatches/actions.js | 57 + .../state/fileMatches/initialState.js | 18 + .../collection/state/fileMatches/reducer.js | 19 + web/src/collection/state/fileMatches/sagas.js | 33 + .../state/helpers/extendEntityList.js | 22 + .../state/helpers/extendEntityMap.js | 11 + web/src/collection/state/index.js | 13 - web/src/collection/state/initialState.js | 29 + web/src/collection/state/reducers.js | 194 +- web/src/collection/state/sagas.js | 108 +- web/src/collection/state/selectors.js | 17 +- .../CollapseButton/CollapseButton.js | 31 + .../common/components/CollapseButton/index.js | 1 + .../components/Distance}/Distance.js | 16 +- web/src/common/components/Distance/index.js | 1 + web/src/common/components/Loading/Loading.js | 90 + web/src/common/components/Loading/index.js | 1 + .../components/LoadingTrigger/LoadTrigger.js | 121 + .../common/components/LoadingTrigger/index.js | 1 + .../SelectableTabs/SelectableTab.js | 37 +- web/src/common/helpers/objectDiff.js | 26 + web/src/common/helpers/paths.js | 6 + web/src/i18n/locales/default.en-US.json | 13 +- web/src/routing/routes.js | 6 + web/src/server-api/Server/Server.js | 46 +- web/src/server-api/Server/Transform.js | 23 +- .../helpers/clusterFiltersToQueryParams.js | 19 + .../fileFiltersToQueryParams.js} | 5 +- .../helpers/matchesFiltersToQueryParams.js | 10 + .../.ipynb_checkpoints/tools-checkpoint.py | 50 - .../.ipynb_checkpoints/utils-checkpoint.py | 204 -- .../duplicate_detection/duplicate_detector.py | 63 +- winnow/duplicate_detection/scene_summary.py | 48 +- winnow/feature_extraction/__init__.py | 2 +- .../feature_extraction/extraction_routine.py | 61 +- winnow/feature_extraction/frame_to_video.py | 3 +- winnow/feature_extraction/intermediate_cnn.py | 16 +- winnow/feature_extraction/loading_utils.py | 109 +- winnow/feature_extraction/model_tf.py | 57 +- .../feature_extraction/nets/inception_v4.py | 337 -- .../feature_extraction/nets/resnet_utils.py | 249 -- winnow/feature_extraction/nets/resnet_v1.py | 346 -- winnow/feature_extraction/nets/vgg.py | 482 +-- winnow/feature_extraction/siamese_net.py | 71 +- winnow/feature_extraction/similarity_model.py | 22 +- winnow/feature_extraction/utils.py | 93 +- winnow/search_engine/template_matching.py | 200 +- winnow/storage/db_result_storage.py | 346 +- winnow/storage/lmdb_repr_storage.py | 154 + winnow/storage/path_repr_storage.py | 79 - winnow/storage/repr_key.py | 18 + winnow/storage/repr_storage.py | 4 +- winnow/storage/repr_utils.py | 39 +- winnow/storage/sqlite_repr_storage.py | 80 +- winnow/utils/metadata_extraction.py | 181 +- winnow/utils/scene_detection.py | 98 +- winnow/utils/utils.py | 151 +- 208 files changed, 10534 insertions(+), 3544 deletions(-) create mode 100644 benchmarks/augmented_dataset/config.yml create mode 100644 benchmarks/augmented_dataset/labels.csv create mode 100644 benchmarks/evaluate.py create mode 100644 benchmarks/utils.py rename {winnow/feature_extraction/nets => db/access}/__init__.py (100%) create mode 100644 db/access/files.py create mode 100644 db/access/matches.py delete mode 100644 docker-compose.override.yml delete mode 100644 docker-compose/README.md delete mode 100644 docker-compose/build.cpu.yml delete mode 100644 docker-compose/prebuilt.cpu.yml delete mode 100644 docker-compose/prebuilt.yml create mode 100755 scripts/docker-build.sh rename scripts/{docker-run.sh => docker-update.sh} (74%) create mode 100644 scripts/lib/ask.choose.sh create mode 100644 scripts/lib/ask.confirm.sh create mode 100644 scripts/lib/ask.path.sh create mode 100644 server/server/api/cluster.py create mode 100644 server/tests/db/access/test_matches_dao.py create mode 100644 web/src/application/state/initialState.js delete mode 100644 web/src/collection/components/FileBrowserPage/FileBrowserActions/view.js create mode 100644 web/src/collection/components/FileComparisonPage/FileComparisonPage.js create mode 100644 web/src/collection/components/FileComparisonPage/FileDetails/FileDescriptionPane.js create mode 100644 web/src/collection/components/FileComparisonPage/FileDetails/FileDetails.js create mode 100644 web/src/collection/components/FileComparisonPage/FileDetails/index.js create mode 100644 web/src/collection/components/FileComparisonPage/LoadingHeader.js create mode 100644 web/src/collection/components/FileComparisonPage/MatchFiles/FileMatchHeader.js create mode 100644 web/src/collection/components/FileComparisonPage/MatchFiles/MatchFiles.js create mode 100644 web/src/collection/components/FileComparisonPage/MatchFiles/MatchSelector.js create mode 100644 web/src/collection/components/FileComparisonPage/MatchFiles/index.js create mode 100644 web/src/collection/components/FileComparisonPage/MotherFile/FileDetailsHeader.js create mode 100644 web/src/collection/components/FileComparisonPage/MotherFile/MotherFile.js create mode 100644 web/src/collection/components/FileComparisonPage/MotherFile/index.js create mode 100644 web/src/collection/components/FileComparisonPage/index.js create mode 100644 web/src/collection/components/FileMatchesPage/MatchPreview/Container.js create mode 100644 web/src/collection/components/FileSummary/CreationDate.js create mode 100644 web/src/collection/components/FileSummary/Divider.js create mode 100644 web/src/collection/components/FileSummary/Duration.js create mode 100644 web/src/collection/components/FileSummary/FileSummary.js create mode 100644 web/src/collection/components/FileSummary/Fingerprint.js create mode 100644 web/src/collection/components/FileSummary/HasAudio.js create mode 100644 web/src/collection/components/FileSummary/HasExif.js create mode 100644 web/src/collection/components/FileSummary/Name.js create mode 100644 web/src/collection/components/FileSummary/Spacer.js create mode 100644 web/src/collection/components/FileSummary/index.js create mode 100644 web/src/collection/components/MatchGraph/LinkTooltip.js create mode 100644 web/src/collection/components/MatchGraph/NodeTooltip.js create mode 100644 web/src/collection/components/MatchGraph/helpers.js create mode 100644 web/src/collection/components/MatchGraph/prepareGraph.js create mode 100644 web/src/collection/components/MatchGraph/tracking.js create mode 100644 web/src/collection/components/MatchGraph/useTooltip.js create mode 100644 web/src/collection/components/VideoDetailsPage/VideoInformation.js create mode 100644 web/src/collection/hooks/useFileCluster.js create mode 100644 web/src/collection/hooks/useFileMatches.js create mode 100644 web/src/collection/hooks/useLoadAll.js create mode 100644 web/src/collection/hooks/useValue.js rename web/src/collection/{components/FileBrowserPage => prop-types}/FileType.js (100%) rename web/src/collection/{components/FileMatchesPage => prop-types}/MatchType.js (64%) rename web/src/collection/{components/VideoDetailsPage => prop-types}/ObjectType.js (100%) rename web/src/collection/{components/VideoDetailsPage => prop-types}/SceneType.js (100%) create mode 100644 web/src/collection/state/fetchEntities/fetchEntitiesSaga.js create mode 100644 web/src/collection/state/fetchEntities/initialState.js create mode 100644 web/src/collection/state/fetchEntities/makeEntityReducer.js create mode 100644 web/src/collection/state/fetchEntities/makeFetchEntitiesHook.js create mode 100644 web/src/collection/state/fileCache/actions.js create mode 100644 web/src/collection/state/fileCache/initialState.js create mode 100644 web/src/collection/state/fileCache/reducer.js create mode 100644 web/src/collection/state/fileCluster/actions.js create mode 100644 web/src/collection/state/fileCluster/initialState.js create mode 100644 web/src/collection/state/fileCluster/reducer.js create mode 100644 web/src/collection/state/fileCluster/sagas.js create mode 100644 web/src/collection/state/fileList/FileListType.js rename web/src/collection/state/{ => fileList}/FileSort.js (100%) rename web/src/collection/state/{ => fileList}/MatchCategory.js (100%) rename web/src/collection/state/{ => fileList}/actions.js (54%) create mode 100644 web/src/collection/state/fileList/initialState.js create mode 100644 web/src/collection/state/fileList/reducer.js create mode 100644 web/src/collection/state/fileList/sagas.js create mode 100644 web/src/collection/state/fileMatches/actions.js create mode 100644 web/src/collection/state/fileMatches/initialState.js create mode 100644 web/src/collection/state/fileMatches/reducer.js create mode 100644 web/src/collection/state/fileMatches/sagas.js create mode 100644 web/src/collection/state/helpers/extendEntityList.js create mode 100644 web/src/collection/state/helpers/extendEntityMap.js delete mode 100644 web/src/collection/state/index.js create mode 100644 web/src/collection/state/initialState.js create mode 100644 web/src/common/components/CollapseButton/CollapseButton.js create mode 100644 web/src/common/components/CollapseButton/index.js rename web/src/{collection/components/FileMatchesPage/MatchPreview => common/components/Distance}/Distance.js (79%) create mode 100644 web/src/common/components/Distance/index.js create mode 100644 web/src/common/components/Loading/Loading.js create mode 100644 web/src/common/components/Loading/index.js create mode 100644 web/src/common/components/LoadingTrigger/LoadTrigger.js create mode 100644 web/src/common/components/LoadingTrigger/index.js create mode 100644 web/src/common/helpers/objectDiff.js create mode 100644 web/src/common/helpers/paths.js create mode 100644 web/src/server-api/Server/helpers/clusterFiltersToQueryParams.js rename web/src/server-api/Server/{helpers.js => helpers/fileFiltersToQueryParams.js} (90%) create mode 100644 web/src/server-api/Server/helpers/matchesFiltersToQueryParams.js delete mode 100644 winnow/annotation/.ipynb_checkpoints/tools-checkpoint.py delete mode 100644 winnow/annotation/.ipynb_checkpoints/utils-checkpoint.py delete mode 100644 winnow/feature_extraction/nets/inception_v4.py delete mode 100644 winnow/feature_extraction/nets/resnet_utils.py delete mode 100644 winnow/feature_extraction/nets/resnet_v1.py create mode 100644 winnow/storage/lmdb_repr_storage.py delete mode 100644 winnow/storage/path_repr_storage.py create mode 100644 winnow/storage/repr_key.py diff --git a/.mk/docker.mk b/.mk/docker.mk index fe9d410c..c1c786c4 100644 --- a/.mk/docker.mk +++ b/.mk/docker.mk @@ -1,16 +1,22 @@ .PHONY: docker-setup -## Setup environment variables required for docker-compose +## Setup environment variables required for docker-compose if needed docker-setup: @scripts/docker-setup.sh +.PHONY: docker-setup-update + +## Update environment variables required for docker-compose +docker-setup-update: + @scripts/docker-setup.sh --force-update + .PHONY: docker-run ## Run application using docker-compose docker-run: docker-setup - @scripts/docker-run.sh + sudo docker-compose up -d .PHONY: docker-stop @@ -19,11 +25,21 @@ docker-run: docker-setup docker-stop: sudo docker-compose stop +.PHONY: docker-build + ## Build docker images for docker-compose application docker-build: - sudo docker-compose build + @scripts/docker-build.sh + + +.PHONY: docker-pull + +## Update docker images (rebuild local or pull latest from repository depending on configuration). +docker-pull: + sudo docker-compose pull + +.PHONY: docker-purge -## Rebuild docker images -docker-rebuild: - sudo docker-compose rm -s -f - sudo docker-compose build +## Shut-down docker-compose application and remove all its images and volumes. +docker-purge: + sudo docker-compose down --rmi all -v --remove-orphans --timeout 0 diff --git a/Makefile b/Makefile index 6e2f4ac3..26e9b425 100644 --- a/Makefile +++ b/Makefile @@ -18,12 +18,28 @@ stop: docker-stop .PHONY: setup -## Setup docker-compose application (generate .env file) +## Setup docker-compose application (generate .env file in needed) setup: docker-setup -## Rebuild docker-compose images -rebuild: docker-rebuild +.PHONY: update-setup +## Update docker-compose application (regenerate .env file) +setup-update: docker-setup-update + +.PHONY: purge + +## Remove docker-compose application and all its images and volumes. +purge: docker-purge # Define default goal .DEFAULT_GOAL := help + +.PHONY: build + +## Build Docker images locally. +build: docker-build + +.PHONY: pull + +## Pull images from Docker Hub +pull: docker-pull diff --git a/benchmarks/augmented_dataset/config.yml b/benchmarks/augmented_dataset/config.yml new file mode 100644 index 00000000..2761a6f2 --- /dev/null +++ b/benchmarks/augmented_dataset/config.yml @@ -0,0 +1,31 @@ +sources: + root: data/augmented_dataset + extensions: + - mp4 + - ogv + - webm + - avi + +repr: + directory: data/benchmark_output/representations + + +processing: + frame_sampling: 1 + save_frames: true + match_distance: 0.75 + video_list_filename: video_dataset_list.txt + filter_dark_videos: true + filter_dark_videos_thr: 2 + min_video_duration_seconds: 3 + detect_scenes: true + pretrained_model_local_path: null + keep_fileoutput: true + +database: + use: false + uri: postgres://postgres:admin@localhost:5432/videodeduplicationdb + +templates: + source_path: data/templates/test-group/CCSI Object Recognition External/ + diff --git a/benchmarks/augmented_dataset/labels.csv b/benchmarks/augmented_dataset/labels.csv new file mode 100644 index 00000000..6f74565a --- /dev/null +++ b/benchmarks/augmented_dataset/labels.csv @@ -0,0 +1,3064 @@ +,file_path,new_filename,Unnamed: 0,banner,bitrate,color_intensity,crop,extension,intensity,logo,offset,shaky,shaky_after_logo,speed_change,filename,original_extension,file_path_old,original_filename +0,V-E0CJbpOJ4-3d3696ec7115c2ff2ba3ada2b6affca9.mp4,V-E0CJbpOJ4-3d3696ec7115c2ff2ba3ada2b6affca9.mp4,,,,,,,,,,,,,,,,V-E0CJbpOJ4-3d3696ec7115c2ff2ba3ada2b6affca9.mp4 +1,1Nmebjpwkks-249ed7e85cfe9a94c540116a32881b74.mp4,1Nmebjpwkks-249ed7e85cfe9a94c540116a32881b74.mp4,,,,,,,,,,,,,,,,1Nmebjpwkks-249ed7e85cfe9a94c540116a32881b74.mp4 +2,70jU7kGRCd8-131289fa7baa2463a1ec54cab12de0b1.webm,70jU7kGRCd8-131289fa7baa2463a1ec54cab12de0b1.webm,,,,,,,,,,,,,,,,70jU7kGRCd8-131289fa7baa2463a1ec54cab12de0b1.webm +4,Tadn0HfkB98-f2243504564f3c1aff652c03882e80a5.mp4,Tadn0HfkB98-f2243504564f3c1aff652c03882e80a5.mp4,,,,,,,,,,,,,,,,Tadn0HfkB98-f2243504564f3c1aff652c03882e80a5.mp4 +5,HHMcyJ2iINg-fdd83800a6d8bd860d1d61fd7b14d036.mp4,HHMcyJ2iINg-fdd83800a6d8bd860d1d61fd7b14d036.mp4,,,,,,,,,,,,,,,,HHMcyJ2iINg-fdd83800a6d8bd860d1d61fd7b14d036.mp4 +6,0OC9onEjW8E-01d2801908a2730899dc91ae4f84dbe4.webm,0OC9onEjW8E-01d2801908a2730899dc91ae4f84dbe4.webm,,,,,,,,,,,,,,,,0OC9onEjW8E-01d2801908a2730899dc91ae4f84dbe4.webm +9,uXmAkWROeEM-f6b593f9164c0ece433315b441a58d43.webm,uXmAkWROeEM-f6b593f9164c0ece433315b441a58d43.webm,,,,,,,,,,,,,,,,uXmAkWROeEM-f6b593f9164c0ece433315b441a58d43.webm +10,wwACdMZCDEU-bb61490d742154216b9259cc0226705e.mp4,wwACdMZCDEU-bb61490d742154216b9259cc0226705e.mp4,,,,,,,,,,,,,,,,wwACdMZCDEU-bb61490d742154216b9259cc0226705e.mp4 +11,4ZQ_UHDeWTA-620aebf76618bcc9e1aba51701127df1.mp4,4ZQ_UHDeWTA-620aebf76618bcc9e1aba51701127df1.mp4,,,,,,,,,,,,,,,,4ZQ_UHDeWTA-620aebf76618bcc9e1aba51701127df1.mp4 +12,2rVMZFVmBwM-7e503fe3e171e26fe92f7fc5e54be5dc.webm,2rVMZFVmBwM-7e503fe3e171e26fe92f7fc5e54be5dc.webm,,,,,,,,,,,,,,,,2rVMZFVmBwM-7e503fe3e171e26fe92f7fc5e54be5dc.webm +14,RfBf8uh6nKM-d3fe5c78f11906af7a9b5ce0dc6aa04c.webm,RfBf8uh6nKM-d3fe5c78f11906af7a9b5ce0dc6aa04c.webm,,,,,,,,,,,,,,,,RfBf8uh6nKM-d3fe5c78f11906af7a9b5ce0dc6aa04c.webm +15,7zDPor_6D38-842c1743bc681477d726e4e87d4dca45.mp4,7zDPor_6D38-842c1743bc681477d726e4e87d4dca45.mp4,,,,,,,,,,,,,,,,7zDPor_6D38-842c1743bc681477d726e4e87d4dca45.mp4 +16,Dj2a090fn4I-ee7ae23bca316c2d6988231d849b0b37.mp4,Dj2a090fn4I-ee7ae23bca316c2d6988231d849b0b37.mp4,,,,,,,,,,,,,,,,Dj2a090fn4I-ee7ae23bca316c2d6988231d849b0b37.mp4 +17,z12JJ7aAAGQ-2aca835cb1e05e781e8293c31ac6e143.webm,z12JJ7aAAGQ-2aca835cb1e05e781e8293c31ac6e143.webm,,,,,,,,,,,,,,,,z12JJ7aAAGQ-2aca835cb1e05e781e8293c31ac6e143.webm +18,oxZqnVUiWX0-6ef6964335af2432987fdb271df83a63.mp4,oxZqnVUiWX0-6ef6964335af2432987fdb271df83a63.mp4,,,,,,,,,,,,,,,,oxZqnVUiWX0-6ef6964335af2432987fdb271df83a63.mp4 +19,OS43ow6pbNQ-f225b5e2b3ddc2add5962ffd350e9d8f.webm,OS43ow6pbNQ-f225b5e2b3ddc2add5962ffd350e9d8f.webm,,,,,,,,,,,,,,,,OS43ow6pbNQ-f225b5e2b3ddc2add5962ffd350e9d8f.webm +20,zfxPdDSAjl0-c3a01b6c0f722fbd5485bce7c5d88e76.webm,zfxPdDSAjl0-c3a01b6c0f722fbd5485bce7c5d88e76.webm,,,,,,,,,,,,,,,,zfxPdDSAjl0-c3a01b6c0f722fbd5485bce7c5d88e76.webm +21,pEiXTarCqrY-d4a514503c3b71c077f7ac3f8713ce2b.mp4,pEiXTarCqrY-d4a514503c3b71c077f7ac3f8713ce2b.mp4,,,,,,,,,,,,,,,,pEiXTarCqrY-d4a514503c3b71c077f7ac3f8713ce2b.mp4 +22,g0mXD3YfS0Y-a7a9085a81d4dd23210c33ab644b6ad9.webm,g0mXD3YfS0Y-a7a9085a81d4dd23210c33ab644b6ad9.webm,,,,,,,,,,,,,,,,g0mXD3YfS0Y-a7a9085a81d4dd23210c33ab644b6ad9.webm +24,rYXGYt9nKXE-9e0b052a724e704a88ddbde41070af3a.webm,rYXGYt9nKXE-9e0b052a724e704a88ddbde41070af3a.webm,,,,,,,,,,,,,,,,rYXGYt9nKXE-9e0b052a724e704a88ddbde41070af3a.webm +25,oiuYj8JnQq4-b0d9b5ec369651a9663adcc9fd0eb36d.mp4,oiuYj8JnQq4-b0d9b5ec369651a9663adcc9fd0eb36d.mp4,,,,,,,,,,,,,,,,oiuYj8JnQq4-b0d9b5ec369651a9663adcc9fd0eb36d.mp4 +27,UJF0Q00Jbmg-584dcfbf73f0972b51e4ca18c83659e3.mp4,UJF0Q00Jbmg-584dcfbf73f0972b51e4ca18c83659e3.mp4,,,,,,,,,,,,,,,,UJF0Q00Jbmg-584dcfbf73f0972b51e4ca18c83659e3.mp4 +28,mQIQPSuHFGI-9f7bc95fb1cdb4e1c3c5af47fcea6a4f.mp4,mQIQPSuHFGI-9f7bc95fb1cdb4e1c3c5af47fcea6a4f.mp4,,,,,,,,,,,,,,,,mQIQPSuHFGI-9f7bc95fb1cdb4e1c3c5af47fcea6a4f.mp4 +29,LF02Ne55dL8-ca066f2f43cf0234c144ae00acaffe8c.mp4,LF02Ne55dL8-ca066f2f43cf0234c144ae00acaffe8c.mp4,,,,,,,,,,,,,,,,LF02Ne55dL8-ca066f2f43cf0234c144ae00acaffe8c.mp4 +31,uzZ7iBJ5Ing-de0ca51686817a8e895cf4fe39d6baff.webm,uzZ7iBJ5Ing-de0ca51686817a8e895cf4fe39d6baff.webm,,,,,,,,,,,,,,,,uzZ7iBJ5Ing-de0ca51686817a8e895cf4fe39d6baff.webm +32,to4EPnA0M1I-27d192cf22f44036fc428facf398c0eb.webm,to4EPnA0M1I-27d192cf22f44036fc428facf398c0eb.webm,,,,,,,,,,,,,,,,to4EPnA0M1I-27d192cf22f44036fc428facf398c0eb.webm +33,DfaPkeyYcMU-d920474fecf21e0ba16ab1505ef5c635.mp4,DfaPkeyYcMU-d920474fecf21e0ba16ab1505ef5c635.mp4,,,,,,,,,,,,,,,,DfaPkeyYcMU-d920474fecf21e0ba16ab1505ef5c635.mp4 +34,4Qpcf3Kx6xI-ac5647fba065f6679c92ee15cc428a8b.webm,4Qpcf3Kx6xI-ac5647fba065f6679c92ee15cc428a8b.webm,,,,,,,,,,,,,,,,4Qpcf3Kx6xI-ac5647fba065f6679c92ee15cc428a8b.webm +35,yh-rqdX5ohY-7d35dc87ee708f31bcd1169459e0e710.webm,yh-rqdX5ohY-7d35dc87ee708f31bcd1169459e0e710.webm,,,,,,,,,,,,,,,,yh-rqdX5ohY-7d35dc87ee708f31bcd1169459e0e710.webm +36,6Y1uTg7wCV8-b068dba553b7529eb2c2c4727c47fed9.webm,6Y1uTg7wCV8-b068dba553b7529eb2c2c4727c47fed9.webm,,,,,,,,,,,,,,,,6Y1uTg7wCV8-b068dba553b7529eb2c2c4727c47fed9.webm +37,JHxblI1kF_o-a7a5a71059e27334996322da89671f20.mp4,JHxblI1kF_o-a7a5a71059e27334996322da89671f20.mp4,,,,,,,,,,,,,,,,JHxblI1kF_o-a7a5a71059e27334996322da89671f20.mp4 +38,pm2vbQEl4S0-99d64f54806482e265b497911ed7e4e6.webm,pm2vbQEl4S0-99d64f54806482e265b497911ed7e4e6.webm,,,,,,,,,,,,,,,,pm2vbQEl4S0-99d64f54806482e265b497911ed7e4e6.webm +39,Vx5jj61rmCc-f63a4570a4866b22befb75ea1d0b80f1.webm,Vx5jj61rmCc-f63a4570a4866b22befb75ea1d0b80f1.webm,,,,,,,,,,,,,,,,Vx5jj61rmCc-f63a4570a4866b22befb75ea1d0b80f1.webm +40,wdaVvKqRp1U-ce06bea18a6c6abf2c8cfe1c2d8600a0.mp4,wdaVvKqRp1U-ce06bea18a6c6abf2c8cfe1c2d8600a0.mp4,,,,,,,,,,,,,,,,wdaVvKqRp1U-ce06bea18a6c6abf2c8cfe1c2d8600a0.mp4 +41,B29yA8Vqj7Y-bbee4a5cc6c2a18a664b59e902dddec5.mp4,B29yA8Vqj7Y-bbee4a5cc6c2a18a664b59e902dddec5.mp4,,,,,,,,,,,,,,,,B29yA8Vqj7Y-bbee4a5cc6c2a18a664b59e902dddec5.mp4 +42,z8dpUShZJEo-a15b60e20ceacd5c563df4f7532b46f9.webm,z8dpUShZJEo-a15b60e20ceacd5c563df4f7532b46f9.webm,,,,,,,,,,,,,,,,z8dpUShZJEo-a15b60e20ceacd5c563df4f7532b46f9.webm +43,cH1-Nj8N3cs-de480de00d9f200a1404421417fc3010.webm,cH1-Nj8N3cs-de480de00d9f200a1404421417fc3010.webm,,,,,,,,,,,,,,,,cH1-Nj8N3cs-de480de00d9f200a1404421417fc3010.webm +44,lwTer-PJSw0-96d19a6cb240b984f831a21dca0efb59.mp4,lwTer-PJSw0-96d19a6cb240b984f831a21dca0efb59.mp4,,,,,,,,,,,,,,,,lwTer-PJSw0-96d19a6cb240b984f831a21dca0efb59.mp4 +45,Q5SJGpUBebk-15316f6183a02109bf434f4312e56e2f.mp4,Q5SJGpUBebk-15316f6183a02109bf434f4312e56e2f.mp4,,,,,,,,,,,,,,,,Q5SJGpUBebk-15316f6183a02109bf434f4312e56e2f.mp4 +46,NOJi0FUd3NM-4f56b784e9f2a432ec606bc9f1933028.webm,NOJi0FUd3NM-4f56b784e9f2a432ec606bc9f1933028.webm,,,,,,,,,,,,,,,,NOJi0FUd3NM-4f56b784e9f2a432ec606bc9f1933028.webm +47,QaVkt5Xh0Wc-53e1c87b4bba11202a90a2a83be31f4e.webm,QaVkt5Xh0Wc-53e1c87b4bba11202a90a2a83be31f4e.webm,,,,,,,,,,,,,,,,QaVkt5Xh0Wc-53e1c87b4bba11202a90a2a83be31f4e.webm +48,VEc9zcAYHhg-d442f185b6b2a2d461be422b6fb5001f.webm,VEc9zcAYHhg-d442f185b6b2a2d461be422b6fb5001f.webm,,,,,,,,,,,,,,,,VEc9zcAYHhg-d442f185b6b2a2d461be422b6fb5001f.webm +49,8ayORrYeDhE-acfa32b1af21053b507cbb258dc46c16.webm,8ayORrYeDhE-acfa32b1af21053b507cbb258dc46c16.webm,,,,,,,,,,,,,,,,8ayORrYeDhE-acfa32b1af21053b507cbb258dc46c16.webm +50,00emEaHcZUc-2035f2f4f51b5f08263ce9a0e3ba88cc.webm,00emEaHcZUc-2035f2f4f51b5f08263ce9a0e3ba88cc.webm,,,,,,,,,,,,,,,,00emEaHcZUc-2035f2f4f51b5f08263ce9a0e3ba88cc.webm +51,6XYj1p5wt0E-c711465fdac119e4b6738ef154db59f0.webm,6XYj1p5wt0E-c711465fdac119e4b6738ef154db59f0.webm,,,,,,,,,,,,,,,,6XYj1p5wt0E-c711465fdac119e4b6738ef154db59f0.webm +52,rdWSicvNrWA-80a8aab0d23b7f956f6e6a0736756f72.webm,rdWSicvNrWA-80a8aab0d23b7f956f6e6a0736756f72.webm,,,,,,,,,,,,,,,,rdWSicvNrWA-80a8aab0d23b7f956f6e6a0736756f72.webm +53,dJcwxCZSSJk-ddb227986062a76d94f04a1ff45f39bd.mp4,dJcwxCZSSJk-ddb227986062a76d94f04a1ff45f39bd.mp4,,,,,,,,,,,,,,,,dJcwxCZSSJk-ddb227986062a76d94f04a1ff45f39bd.mp4 +54,GfHyihsUdso-bb3ea8fabb656fb8cac748dbb23d47ae.webm,GfHyihsUdso-bb3ea8fabb656fb8cac748dbb23d47ae.webm,,,,,,,,,,,,,,,,GfHyihsUdso-bb3ea8fabb656fb8cac748dbb23d47ae.webm +56,VqZjjf2K1-4-63c198c42e9e4adbd7d411bd31d18562.mp4,VqZjjf2K1-4-63c198c42e9e4adbd7d411bd31d18562.mp4,,,,,,,,,,,,,,,,VqZjjf2K1-4-63c198c42e9e4adbd7d411bd31d18562.mp4 +57,84gbCyDsKMU-b6dea8cdd553f0f2f85e235cfc539fec.webm,84gbCyDsKMU-b6dea8cdd553f0f2f85e235cfc539fec.webm,,,,,,,,,,,,,,,,84gbCyDsKMU-b6dea8cdd553f0f2f85e235cfc539fec.webm +58,N4b5MK2ZW3c-d41f1f035cd1b9d333576da99202cb90.mp4,N4b5MK2ZW3c-d41f1f035cd1b9d333576da99202cb90.mp4,,,,,,,,,,,,,,,,N4b5MK2ZW3c-d41f1f035cd1b9d333576da99202cb90.mp4 +59,80jAiPyrWnU-1f649f27cbf083628b8e8ddcb4428414.webm,80jAiPyrWnU-1f649f27cbf083628b8e8ddcb4428414.webm,,,,,,,,,,,,,,,,80jAiPyrWnU-1f649f27cbf083628b8e8ddcb4428414.webm +60,PP-_0arY74E-026bbe96b627dc6e17c84d7a5aebbf9e.webm,PP-_0arY74E-026bbe96b627dc6e17c84d7a5aebbf9e.webm,,,,,,,,,,,,,,,,PP-_0arY74E-026bbe96b627dc6e17c84d7a5aebbf9e.webm +61,AN35yb_k-IM-e41318666e8a4cfbeeda6c60655319af.webm,AN35yb_k-IM-e41318666e8a4cfbeeda6c60655319af.webm,,,,,,,,,,,,,,,,AN35yb_k-IM-e41318666e8a4cfbeeda6c60655319af.webm +62,VMc0v_mDkkw-46cf5f2b5b7bcbe4fb0a3d630fffa2d4.webm,VMc0v_mDkkw-46cf5f2b5b7bcbe4fb0a3d630fffa2d4.webm,,,,,,,,,,,,,,,,VMc0v_mDkkw-46cf5f2b5b7bcbe4fb0a3d630fffa2d4.webm +64,v2m2Hfu6s8s-032938ac9e96bb12bbb0d720888101fa.webm,v2m2Hfu6s8s-032938ac9e96bb12bbb0d720888101fa.webm,,,,,,,,,,,,,,,,v2m2Hfu6s8s-032938ac9e96bb12bbb0d720888101fa.webm +65,UPPyOPtZFNw-a27f1d2eee73ff4fe538cd0f593e328f.webm,UPPyOPtZFNw-a27f1d2eee73ff4fe538cd0f593e328f.webm,,,,,,,,,,,,,,,,UPPyOPtZFNw-a27f1d2eee73ff4fe538cd0f593e328f.webm +66,FhfXkP7O6Tg-325569b20523f2b58ca6254afb55c5bb.webm,FhfXkP7O6Tg-325569b20523f2b58ca6254afb55c5bb.webm,,,,,,,,,,,,,,,,FhfXkP7O6Tg-325569b20523f2b58ca6254afb55c5bb.webm +67,YK3Yog_vIFg-578f7e70cf63d2cc4866e6b2bfd0154f.webm,YK3Yog_vIFg-578f7e70cf63d2cc4866e6b2bfd0154f.webm,,,,,,,,,,,,,,,,YK3Yog_vIFg-578f7e70cf63d2cc4866e6b2bfd0154f.webm +68,Bhkko7DCpHY-61f1fb00c42d363ff2e677b4c606de0c.webm,Bhkko7DCpHY-61f1fb00c42d363ff2e677b4c606de0c.webm,,,,,,,,,,,,,,,,Bhkko7DCpHY-61f1fb00c42d363ff2e677b4c606de0c.webm +69,qUWzuQ1l1UY-72bf8435b5bd3c326e9603220cd0f8e0.mp4,qUWzuQ1l1UY-72bf8435b5bd3c326e9603220cd0f8e0.mp4,,,,,,,,,,,,,,,,qUWzuQ1l1UY-72bf8435b5bd3c326e9603220cd0f8e0.mp4 +71,S5LOGCcdszU-87c5733dbf835648117c9bb9552c931a.mp4,S5LOGCcdszU-87c5733dbf835648117c9bb9552c931a.mp4,,,,,,,,,,,,,,,,S5LOGCcdszU-87c5733dbf835648117c9bb9552c931a.mp4 +72,joFpIc7yEa8-8120124511776156320ea039eca8727b.mp4,joFpIc7yEa8-8120124511776156320ea039eca8727b.mp4,,,,,,,,,,,,,,,,joFpIc7yEa8-8120124511776156320ea039eca8727b.mp4 +73,i3RUO5BxdAQ-a801f98ef3b6041f8c30f4ac684d9159.webm,i3RUO5BxdAQ-a801f98ef3b6041f8c30f4ac684d9159.webm,,,,,,,,,,,,,,,,i3RUO5BxdAQ-a801f98ef3b6041f8c30f4ac684d9159.webm +74,q1L_D5GtAw4-0e2a82b4b9ad6982830c3379a88d76a5.webm,q1L_D5GtAw4-0e2a82b4b9ad6982830c3379a88d76a5.webm,,,,,,,,,,,,,,,,q1L_D5GtAw4-0e2a82b4b9ad6982830c3379a88d76a5.webm +75,3rAcgSWglME-0abae6e603a8510b3522668c0dd0de4e.mp4,3rAcgSWglME-0abae6e603a8510b3522668c0dd0de4e.mp4,,,,,,,,,,,,,,,,3rAcgSWglME-0abae6e603a8510b3522668c0dd0de4e.mp4 +76,hOV4r8sfZkk-2117cdc19db056420e38a0b678219ed6.webm,hOV4r8sfZkk-2117cdc19db056420e38a0b678219ed6.webm,,,,,,,,,,,,,,,,hOV4r8sfZkk-2117cdc19db056420e38a0b678219ed6.webm +77,xdVnoCx6n9k-2bab0f14e26df9544d3c7b3f0b1875e8.webm,xdVnoCx6n9k-2bab0f14e26df9544d3c7b3f0b1875e8.webm,,,,,,,,,,,,,,,,xdVnoCx6n9k-2bab0f14e26df9544d3c7b3f0b1875e8.webm +78,gOMEh6iHcSY-3dd9c0ef4a0c427985b44d80039ee86f.webm,gOMEh6iHcSY-3dd9c0ef4a0c427985b44d80039ee86f.webm,,,,,,,,,,,,,,,,gOMEh6iHcSY-3dd9c0ef4a0c427985b44d80039ee86f.webm +79,XC90YmJKh_A-78427d539ebd4d5b835b1cadbefe5947.webm,XC90YmJKh_A-78427d539ebd4d5b835b1cadbefe5947.webm,,,,,,,,,,,,,,,,XC90YmJKh_A-78427d539ebd4d5b835b1cadbefe5947.webm +80,s0jCZefsilQ-04951dae91f182636dfe294a2f830f95.webm,s0jCZefsilQ-04951dae91f182636dfe294a2f830f95.webm,,,,,,,,,,,,,,,,s0jCZefsilQ-04951dae91f182636dfe294a2f830f95.webm +81,_DFlKvVM4ts-2bbcdcef2055385e834de1bdc1e5f808.webm,_DFlKvVM4ts-2bbcdcef2055385e834de1bdc1e5f808.webm,,,,,,,,,,,,,,,,_DFlKvVM4ts-2bbcdcef2055385e834de1bdc1e5f808.webm +82,22Ql6gOuUB4-8604ec2841ac1a05f15fa65719cf3075.webm,22Ql6gOuUB4-8604ec2841ac1a05f15fa65719cf3075.webm,,,,,,,,,,,,,,,,22Ql6gOuUB4-8604ec2841ac1a05f15fa65719cf3075.webm +83,3gGiQ62u1K4-ed5db8af35f738150baf065668a56411.mp4,3gGiQ62u1K4-ed5db8af35f738150baf065668a56411.mp4,,,,,,,,,,,,,,,,3gGiQ62u1K4-ed5db8af35f738150baf065668a56411.mp4 +84,ShljDSOaKh4-f9cdca0cbf252c0820676091761e1b45.webm,ShljDSOaKh4-f9cdca0cbf252c0820676091761e1b45.webm,,,,,,,,,,,,,,,,ShljDSOaKh4-f9cdca0cbf252c0820676091761e1b45.webm +86,aehGd6GPrNE-7ecf5f0e873dc0e8e78f370aabef9646.webm,aehGd6GPrNE-7ecf5f0e873dc0e8e78f370aabef9646.webm,,,,,,,,,,,,,,,,aehGd6GPrNE-7ecf5f0e873dc0e8e78f370aabef9646.webm +88,iawO936mgA4-1601fc73ddf22c16332bae156e17f466.mp4,iawO936mgA4-1601fc73ddf22c16332bae156e17f466.mp4,,,,,,,,,,,,,,,,iawO936mgA4-1601fc73ddf22c16332bae156e17f466.mp4 +89,bcgczxP1PrU-873021e79fe61eaefbbde9eb426d0084.webm,bcgczxP1PrU-873021e79fe61eaefbbde9eb426d0084.webm,,,,,,,,,,,,,,,,bcgczxP1PrU-873021e79fe61eaefbbde9eb426d0084.webm +91,VJBGMt2z85s-6a0a20d85be445402186df39a8e6d2e1.mp4,VJBGMt2z85s-6a0a20d85be445402186df39a8e6d2e1.mp4,,,,,,,,,,,,,,,,VJBGMt2z85s-6a0a20d85be445402186df39a8e6d2e1.mp4 +92,Wa5_fQVlU1w-482f5996d46f7ce369ee9222ee6821fb.mp4,Wa5_fQVlU1w-482f5996d46f7ce369ee9222ee6821fb.mp4,,,,,,,,,,,,,,,,Wa5_fQVlU1w-482f5996d46f7ce369ee9222ee6821fb.mp4 +93,_Y0sfgtGi3A-8a037eda8cdb280dce97ecfd729c23a5.mp4,_Y0sfgtGi3A-8a037eda8cdb280dce97ecfd729c23a5.mp4,,,,,,,,,,,,,,,,_Y0sfgtGi3A-8a037eda8cdb280dce97ecfd729c23a5.mp4 +95,EwZoNez5W1E-11824b24c5b9958a96f743fe7bb3592c.mp4,EwZoNez5W1E-11824b24c5b9958a96f743fe7bb3592c.mp4,,,,,,,,,,,,,,,,EwZoNez5W1E-11824b24c5b9958a96f743fe7bb3592c.mp4 +96,BOWm361Gkt0-9058b9b40b8beae02920da7f1e8431ec.webm,BOWm361Gkt0-9058b9b40b8beae02920da7f1e8431ec.webm,,,,,,,,,,,,,,,,BOWm361Gkt0-9058b9b40b8beae02920da7f1e8431ec.webm +98,TTXjF-L7Sa4-d793bf8e424cef36b3cd20429babe1b0.mp4,TTXjF-L7Sa4-d793bf8e424cef36b3cd20429babe1b0.mp4,,,,,,,,,,,,,,,,TTXjF-L7Sa4-d793bf8e424cef36b3cd20429babe1b0.mp4 +99,INxL6oTgjic-c3a1d4c99a9ccef72cd401e311779e36.webm,INxL6oTgjic-c3a1d4c99a9ccef72cd401e311779e36.webm,,,,,,,,,,,,,,,,INxL6oTgjic-c3a1d4c99a9ccef72cd401e311779e36.webm +100,NWK5esmrRYU-9225338a8fdc57473a7f91cf49811075.mp4,NWK5esmrRYU-9225338a8fdc57473a7f91cf49811075.mp4,,,,,,,,,,,,,,,,NWK5esmrRYU-9225338a8fdc57473a7f91cf49811075.mp4 +101,c2ISG0iIfwM-cfcbe6ac834458956063caeb03f6d543.mp4,c2ISG0iIfwM-cfcbe6ac834458956063caeb03f6d543.mp4,,,,,,,,,,,,,,,,c2ISG0iIfwM-cfcbe6ac834458956063caeb03f6d543.mp4 +103,pmooM-xMCvM-d42877881a6eb33524b3279fa61bd5b9.webm,pmooM-xMCvM-d42877881a6eb33524b3279fa61bd5b9.webm,,,,,,,,,,,,,,,,pmooM-xMCvM-d42877881a6eb33524b3279fa61bd5b9.webm +104,2U0SGC82C2c-d99f84b77bbee3f83827b8016f586c2f.mp4,2U0SGC82C2c-d99f84b77bbee3f83827b8016f586c2f.mp4,,,,,,,,,,,,,,,,2U0SGC82C2c-d99f84b77bbee3f83827b8016f586c2f.mp4 +105,uhQnOxMnXes-f90ded2c490d6988bd71d51119818b9f.webm,uhQnOxMnXes-f90ded2c490d6988bd71d51119818b9f.webm,,,,,,,,,,,,,,,,uhQnOxMnXes-f90ded2c490d6988bd71d51119818b9f.webm +106,qGCz-jTygWQ-6c41dd8833096dfabfea0da4be096f82.mp4,qGCz-jTygWQ-6c41dd8833096dfabfea0da4be096f82.mp4,,,,,,,,,,,,,,,,qGCz-jTygWQ-6c41dd8833096dfabfea0da4be096f82.mp4 +107,JOKInr7_ubQ-3124573beb5680c66bfd0a4bb6f21aab.mp4,JOKInr7_ubQ-3124573beb5680c66bfd0a4bb6f21aab.mp4,,,,,,,,,,,,,,,,JOKInr7_ubQ-3124573beb5680c66bfd0a4bb6f21aab.mp4 +109,7No_PGUghTQ-1e620148a35f69f0cd6f9425247485ec.mp4,7No_PGUghTQ-1e620148a35f69f0cd6f9425247485ec.mp4,,,,,,,,,,,,,,,,7No_PGUghTQ-1e620148a35f69f0cd6f9425247485ec.mp4 +110,1s0q3XjzrQ0-08429719dc63d21ee31dfa01d9ddba74.mp4,1s0q3XjzrQ0-08429719dc63d21ee31dfa01d9ddba74.mp4,,,,,,,,,,,,,,,,1s0q3XjzrQ0-08429719dc63d21ee31dfa01d9ddba74.mp4 +111,DafrAQ24usw-8fbba96eee42f35fa86d99d522c84380.mp4,DafrAQ24usw-8fbba96eee42f35fa86d99d522c84380.mp4,,,,,,,,,,,,,,,,DafrAQ24usw-8fbba96eee42f35fa86d99d522c84380.mp4 +112,LgZxrlc6wuw-875f92afea7cc4c6c9dbd4717b91ddbf.mp4,LgZxrlc6wuw-875f92afea7cc4c6c9dbd4717b91ddbf.mp4,,,,,,,,,,,,,,,,LgZxrlc6wuw-875f92afea7cc4c6c9dbd4717b91ddbf.mp4 +113,DVoAtKHiZ0w-5866eb91997806edf7010b94a42a5f62.mp4,DVoAtKHiZ0w-5866eb91997806edf7010b94a42a5f62.mp4,,,,,,,,,,,,,,,,DVoAtKHiZ0w-5866eb91997806edf7010b94a42a5f62.mp4 +114,WEK2IApNEGE-9d3dc1f5511589ce651249ad3ce1e341.webm,WEK2IApNEGE-9d3dc1f5511589ce651249ad3ce1e341.webm,,,,,,,,,,,,,,,,WEK2IApNEGE-9d3dc1f5511589ce651249ad3ce1e341.webm +115,27ARq1AJZyg-c261b5315bfb8b1e0552a35705c17184.webm,27ARq1AJZyg-c261b5315bfb8b1e0552a35705c17184.webm,,,,,,,,,,,,,,,,27ARq1AJZyg-c261b5315bfb8b1e0552a35705c17184.webm +116,uneZS4qAOiA-da4efe0f6cf743b481ac130e70d9fa5e.webm,uneZS4qAOiA-da4efe0f6cf743b481ac130e70d9fa5e.webm,,,,,,,,,,,,,,,,uneZS4qAOiA-da4efe0f6cf743b481ac130e70d9fa5e.webm +117,dayTsSRe8sA-4e8113f300b6df6bb095889de47c38a3.webm,dayTsSRe8sA-4e8113f300b6df6bb095889de47c38a3.webm,,,,,,,,,,,,,,,,dayTsSRe8sA-4e8113f300b6df6bb095889de47c38a3.webm +118,nnP_d-zhtsM-2ca2220e532c6e1d241e85f487ecf1a5.mp4,nnP_d-zhtsM-2ca2220e532c6e1d241e85f487ecf1a5.mp4,,,,,,,,,,,,,,,,nnP_d-zhtsM-2ca2220e532c6e1d241e85f487ecf1a5.mp4 +119,7uYnkqwXsWs-d8d95def34eb849004c55d627ab6b908.mp4,7uYnkqwXsWs-d8d95def34eb849004c55d627ab6b908.mp4,,,,,,,,,,,,,,,,7uYnkqwXsWs-d8d95def34eb849004c55d627ab6b908.mp4 +121,VjGQrAm8o90-5333a5c68a226ac945b920c78594eb9f.mp4,VjGQrAm8o90-5333a5c68a226ac945b920c78594eb9f.mp4,,,,,,,,,,,,,,,,VjGQrAm8o90-5333a5c68a226ac945b920c78594eb9f.mp4 +122,Tx8x4uNW4_U-751029baa910c3a5ccdf40da8c057166.mp4,Tx8x4uNW4_U-751029baa910c3a5ccdf40da8c057166.mp4,,,,,,,,,,,,,,,,Tx8x4uNW4_U-751029baa910c3a5ccdf40da8c057166.mp4 +123,r25t7t9EMUY-72a8c06b971cc31e84339927e9a1c54d.mp4,r25t7t9EMUY-72a8c06b971cc31e84339927e9a1c54d.mp4,,,,,,,,,,,,,,,,r25t7t9EMUY-72a8c06b971cc31e84339927e9a1c54d.mp4 +125,V7_8jwz2XpM-d2b53ff9113c88769a535cfae926b92b.mp4,V7_8jwz2XpM-d2b53ff9113c88769a535cfae926b92b.mp4,,,,,,,,,,,,,,,,V7_8jwz2XpM-d2b53ff9113c88769a535cfae926b92b.mp4 +126,XPvSB8LkOq8-84dc3d81faf5b2edc5b707cf9229fb0a.webm,XPvSB8LkOq8-84dc3d81faf5b2edc5b707cf9229fb0a.webm,,,,,,,,,,,,,,,,XPvSB8LkOq8-84dc3d81faf5b2edc5b707cf9229fb0a.webm +127,BwdacRbRRRQ-26285112ffdcddc33807abe2998e0e67.webm,BwdacRbRRRQ-26285112ffdcddc33807abe2998e0e67.webm,,,,,,,,,,,,,,,,BwdacRbRRRQ-26285112ffdcddc33807abe2998e0e67.webm +128,ZIGi6B6WNaU-df7cb3084fc6a7654e2f3c1560d41efc.mp4,ZIGi6B6WNaU-df7cb3084fc6a7654e2f3c1560d41efc.mp4,,,,,,,,,,,,,,,,ZIGi6B6WNaU-df7cb3084fc6a7654e2f3c1560d41efc.mp4 +129,E4DhY0r60qE-8e6b018694f30152ade2d6b6351e4b75.webm,E4DhY0r60qE-8e6b018694f30152ade2d6b6351e4b75.webm,,,,,,,,,,,,,,,,E4DhY0r60qE-8e6b018694f30152ade2d6b6351e4b75.webm +130,zqHzTAysZXs-63adb84b6b22b190e5a34c67201fda70.webm,zqHzTAysZXs-63adb84b6b22b190e5a34c67201fda70.webm,,,,,,,,,,,,,,,,zqHzTAysZXs-63adb84b6b22b190e5a34c67201fda70.webm +131,AgMNzWiOERs-31d7ad44766e44a5a4335e91298a2f01.webm,AgMNzWiOERs-31d7ad44766e44a5a4335e91298a2f01.webm,,,,,,,,,,,,,,,,AgMNzWiOERs-31d7ad44766e44a5a4335e91298a2f01.webm +132,gUDAfQt57H8-75b1a8b9451dd2bce97a4028dd25dc11.mp4,gUDAfQt57H8-75b1a8b9451dd2bce97a4028dd25dc11.mp4,,,,,,,,,,,,,,,,gUDAfQt57H8-75b1a8b9451dd2bce97a4028dd25dc11.mp4 +133,N4_ruTc9XBw-8d4a2e3da655d0f24c717f529c236792.webm,N4_ruTc9XBw-8d4a2e3da655d0f24c717f529c236792.webm,,,,,,,,,,,,,,,,N4_ruTc9XBw-8d4a2e3da655d0f24c717f529c236792.webm +134,Kfhdi1HS_sU-a138bae1dd88a58a26eb837ab516c0a0.webm,Kfhdi1HS_sU-a138bae1dd88a58a26eb837ab516c0a0.webm,,,,,,,,,,,,,,,,Kfhdi1HS_sU-a138bae1dd88a58a26eb837ab516c0a0.webm +135,uGc6qaXX5pg-98248ef93384f2e40d79e96302c957b9.webm,uGc6qaXX5pg-98248ef93384f2e40d79e96302c957b9.webm,,,,,,,,,,,,,,,,uGc6qaXX5pg-98248ef93384f2e40d79e96302c957b9.webm +136,UyhXoWjdmSk-e8c140e5322b4f3002b824a01199f7de.webm,UyhXoWjdmSk-e8c140e5322b4f3002b824a01199f7de.webm,,,,,,,,,,,,,,,,UyhXoWjdmSk-e8c140e5322b4f3002b824a01199f7de.webm +137,BzCTedv_4FQ-8303929653364b140677844995dd2b7a.webm,BzCTedv_4FQ-8303929653364b140677844995dd2b7a.webm,,,,,,,,,,,,,,,,BzCTedv_4FQ-8303929653364b140677844995dd2b7a.webm +138,Dn-3r4PLDbM-19ed44d1440cacb14a702703f72b3a2d.webm,Dn-3r4PLDbM-19ed44d1440cacb14a702703f72b3a2d.webm,,,,,,,,,,,,,,,,Dn-3r4PLDbM-19ed44d1440cacb14a702703f72b3a2d.webm +139,Yr4FtEaeQRE-fb0c8b620d38441874623f4c44b6b0d5.mp4,Yr4FtEaeQRE-fb0c8b620d38441874623f4c44b6b0d5.mp4,,,,,,,,,,,,,,,,Yr4FtEaeQRE-fb0c8b620d38441874623f4c44b6b0d5.mp4 +140,gVKSoVRets0-5408676fe7b529f7304d5299f33a7b14.webm,gVKSoVRets0-5408676fe7b529f7304d5299f33a7b14.webm,,,,,,,,,,,,,,,,gVKSoVRets0-5408676fe7b529f7304d5299f33a7b14.webm +141,nyia9UqpBnc-19fe4eab9ffa2ac395045a7320550fed.mp4,nyia9UqpBnc-19fe4eab9ffa2ac395045a7320550fed.mp4,,,,,,,,,,,,,,,,nyia9UqpBnc-19fe4eab9ffa2ac395045a7320550fed.mp4 +142,hrfK0-RBit8-260c1ff7f20b43add0a186488a96ed66.mp4,hrfK0-RBit8-260c1ff7f20b43add0a186488a96ed66.mp4,,,,,,,,,,,,,,,,hrfK0-RBit8-260c1ff7f20b43add0a186488a96ed66.mp4 +143,gptHhkcsMys-98dc479cccae304eb0a8f34f4c422663.webm,gptHhkcsMys-98dc479cccae304eb0a8f34f4c422663.webm,,,,,,,,,,,,,,,,gptHhkcsMys-98dc479cccae304eb0a8f34f4c422663.webm +144,BfDxUYT3iBI-04fa6a39c8e1a7f7fe8bfad83435ed5d.mp4,BfDxUYT3iBI-04fa6a39c8e1a7f7fe8bfad83435ed5d.mp4,,,,,,,,,,,,,,,,BfDxUYT3iBI-04fa6a39c8e1a7f7fe8bfad83435ed5d.mp4 +145,_E9bsrGfwHw-3aac0963d1ca941ce366b02b6d057961.webm,_E9bsrGfwHw-3aac0963d1ca941ce366b02b6d057961.webm,,,,,,,,,,,,,,,,_E9bsrGfwHw-3aac0963d1ca941ce366b02b6d057961.webm +146,oYyzHXhhSxA-93c96721bd1c76c86b2398ef93624951.webm,oYyzHXhhSxA-93c96721bd1c76c86b2398ef93624951.webm,,,,,,,,,,,,,,,,oYyzHXhhSxA-93c96721bd1c76c86b2398ef93624951.webm +148,v8rkkzP0_jk-19b287b25d15a4d8462542dfb5c8c367.webm,v8rkkzP0_jk-19b287b25d15a4d8462542dfb5c8c367.webm,,,,,,,,,,,,,,,,v8rkkzP0_jk-19b287b25d15a4d8462542dfb5c8c367.webm +149,XgNIDz3hu3w-588029a5f8138c358a23b122dcb2eeef.webm,XgNIDz3hu3w-588029a5f8138c358a23b122dcb2eeef.webm,,,,,,,,,,,,,,,,XgNIDz3hu3w-588029a5f8138c358a23b122dcb2eeef.webm +150,tss8BRY2Jmk-a3506f0ec7d1cfba7cf128ff2b700731.mp4,tss8BRY2Jmk-a3506f0ec7d1cfba7cf128ff2b700731.mp4,,,,,,,,,,,,,,,,tss8BRY2Jmk-a3506f0ec7d1cfba7cf128ff2b700731.mp4 +151,2X9PbBlT85Y-e9d4c0c5528f9e8249c810c05d1578d2.mp4,2X9PbBlT85Y-e9d4c0c5528f9e8249c810c05d1578d2.mp4,,,,,,,,,,,,,,,,2X9PbBlT85Y-e9d4c0c5528f9e8249c810c05d1578d2.mp4 +152,FPHwWDLpSNo-a5fd7bfdd61c4734fabe5b6cd1beb0db.webm,FPHwWDLpSNo-a5fd7bfdd61c4734fabe5b6cd1beb0db.webm,,,,,,,,,,,,,,,,FPHwWDLpSNo-a5fd7bfdd61c4734fabe5b6cd1beb0db.webm +153,TrmhKv1juEg-2254c912b03a03a910b70b08cb07df74.webm,TrmhKv1juEg-2254c912b03a03a910b70b08cb07df74.webm,,,,,,,,,,,,,,,,TrmhKv1juEg-2254c912b03a03a910b70b08cb07df74.webm +154,Jco0RpWEwWU-ba00a83bb831604ea05d5c46313a11f4.webm,Jco0RpWEwWU-ba00a83bb831604ea05d5c46313a11f4.webm,,,,,,,,,,,,,,,,Jco0RpWEwWU-ba00a83bb831604ea05d5c46313a11f4.webm +155,hD-xVYzQ-8c-4c8a9260c242a63fc3589a9a9f97fc8b.mp4,hD-xVYzQ-8c-4c8a9260c242a63fc3589a9a9f97fc8b.mp4,,,,,,,,,,,,,,,,hD-xVYzQ-8c-4c8a9260c242a63fc3589a9a9f97fc8b.mp4 +156,jnygGsCA7p0-9b721fc97beec0d8bf6f7d5d1974092e.mp4,jnygGsCA7p0-9b721fc97beec0d8bf6f7d5d1974092e.mp4,,,,,,,,,,,,,,,,jnygGsCA7p0-9b721fc97beec0d8bf6f7d5d1974092e.mp4 +157,ScD_CSpV8fw-358677edbf80aa5dcb0d0a0f97a9455a.webm,ScD_CSpV8fw-358677edbf80aa5dcb0d0a0f97a9455a.webm,,,,,,,,,,,,,,,,ScD_CSpV8fw-358677edbf80aa5dcb0d0a0f97a9455a.webm +158,qHhQ1wEMF5w-6a8319d805945b40dd88e0c5d66c90eb.mp4,qHhQ1wEMF5w-6a8319d805945b40dd88e0c5d66c90eb.mp4,,,,,,,,,,,,,,,,qHhQ1wEMF5w-6a8319d805945b40dd88e0c5d66c90eb.mp4 +159,mezbMfpcDEQ-2e1a5e5bad2c04e7accbf9983d110290.webm,mezbMfpcDEQ-2e1a5e5bad2c04e7accbf9983d110290.webm,,,,,,,,,,,,,,,,mezbMfpcDEQ-2e1a5e5bad2c04e7accbf9983d110290.webm +160,gZPpjEFtNHY-a83ee7c2fa11403217816e177c4d00dc.webm,gZPpjEFtNHY-a83ee7c2fa11403217816e177c4d00dc.webm,,,,,,,,,,,,,,,,gZPpjEFtNHY-a83ee7c2fa11403217816e177c4d00dc.webm +161,HNpec-m41GE-2af952a5aeff6b9f21216c77c7527969.webm,HNpec-m41GE-2af952a5aeff6b9f21216c77c7527969.webm,,,,,,,,,,,,,,,,HNpec-m41GE-2af952a5aeff6b9f21216c77c7527969.webm +162,VIe7FzSkxNo-0969c4a2fcab1ce504bb6107b6cab25f.webm,VIe7FzSkxNo-0969c4a2fcab1ce504bb6107b6cab25f.webm,,,,,,,,,,,,,,,,VIe7FzSkxNo-0969c4a2fcab1ce504bb6107b6cab25f.webm +163,UsIEELGKdfA-7f82e2cef230ea89c023e56e2432ebe1.webm,UsIEELGKdfA-7f82e2cef230ea89c023e56e2432ebe1.webm,,,,,,,,,,,,,,,,UsIEELGKdfA-7f82e2cef230ea89c023e56e2432ebe1.webm +164,XYwhuLyR_r4-fa111b3d778b9d8466652175f2b522b6.webm,XYwhuLyR_r4-fa111b3d778b9d8466652175f2b522b6.webm,,,,,,,,,,,,,,,,XYwhuLyR_r4-fa111b3d778b9d8466652175f2b522b6.webm +165,TjnCV4J8j7s-aac9d74e0515c59ed6265d775c3300c9.mp4,TjnCV4J8j7s-aac9d74e0515c59ed6265d775c3300c9.mp4,,,,,,,,,,,,,,,,TjnCV4J8j7s-aac9d74e0515c59ed6265d775c3300c9.mp4 +166,AAdoQTAx_ag-c7a7afe1f082ff03c53e55675ba4bef2.webm,AAdoQTAx_ag-c7a7afe1f082ff03c53e55675ba4bef2.webm,,,,,,,,,,,,,,,,AAdoQTAx_ag-c7a7afe1f082ff03c53e55675ba4bef2.webm +167,YXfgXjmo9ok-d56a01c1a8d728da0f810063a4360852.webm,YXfgXjmo9ok-d56a01c1a8d728da0f810063a4360852.webm,,,,,,,,,,,,,,,,YXfgXjmo9ok-d56a01c1a8d728da0f810063a4360852.webm +168,EVAG44KrgwQ-233ad2acf2507a41d043f2afe39e3b16.webm,EVAG44KrgwQ-233ad2acf2507a41d043f2afe39e3b16.webm,,,,,,,,,,,,,,,,EVAG44KrgwQ-233ad2acf2507a41d043f2afe39e3b16.webm +170,82KKCxXUAW8-bb274a3c804764d45d8daa89f170949e.mp4,82KKCxXUAW8-bb274a3c804764d45d8daa89f170949e.mp4,,,,,,,,,,,,,,,,82KKCxXUAW8-bb274a3c804764d45d8daa89f170949e.mp4 +171,pOe5jIpmSeY-5b1f02b1937b0103677998dbd6289d34.webm,pOe5jIpmSeY-5b1f02b1937b0103677998dbd6289d34.webm,,,,,,,,,,,,,,,,pOe5jIpmSeY-5b1f02b1937b0103677998dbd6289d34.webm +172,jd-eOYV5TxA-f502db6d2295f23571d71295960db994.mp4,jd-eOYV5TxA-f502db6d2295f23571d71295960db994.mp4,,,,,,,,,,,,,,,,jd-eOYV5TxA-f502db6d2295f23571d71295960db994.mp4 +174,cRagQz2CsgE-0f7ab867ce4134069de2ef7ef36cf548.webm,cRagQz2CsgE-0f7ab867ce4134069de2ef7ef36cf548.webm,,,,,,,,,,,,,,,,cRagQz2CsgE-0f7ab867ce4134069de2ef7ef36cf548.webm +175,jH8KXGEW7kw-51d848ea68eb3877c963e38908c0093e.mp4,jH8KXGEW7kw-51d848ea68eb3877c963e38908c0093e.mp4,,,,,,,,,,,,,,,,jH8KXGEW7kw-51d848ea68eb3877c963e38908c0093e.mp4 +176,kvsUYuaBw9w-fef5b45b44da5090a5feff2ab5922f8c.webm,kvsUYuaBw9w-fef5b45b44da5090a5feff2ab5922f8c.webm,,,,,,,,,,,,,,,,kvsUYuaBw9w-fef5b45b44da5090a5feff2ab5922f8c.webm +177,_oMkXvrnaok-c9805919213e133dcc8d8b934f6e9866.mp4,_oMkXvrnaok-c9805919213e133dcc8d8b934f6e9866.mp4,,,,,,,,,,,,,,,,_oMkXvrnaok-c9805919213e133dcc8d8b934f6e9866.mp4 +178,VuW-M9TB7tM-73472a9187f950d4812582d25154f1d4.mp4,VuW-M9TB7tM-73472a9187f950d4812582d25154f1d4.mp4,,,,,,,,,,,,,,,,VuW-M9TB7tM-73472a9187f950d4812582d25154f1d4.mp4 +179,_afTSrDroHs-06d2f1b68aabc513424f74184663caa9.mp4,_afTSrDroHs-06d2f1b68aabc513424f74184663caa9.mp4,,,,,,,,,,,,,,,,_afTSrDroHs-06d2f1b68aabc513424f74184663caa9.mp4 +180,CJmSelkDy28-ed07da77f7b169860415197aca620bba.webm,CJmSelkDy28-ed07da77f7b169860415197aca620bba.webm,,,,,,,,,,,,,,,,CJmSelkDy28-ed07da77f7b169860415197aca620bba.webm +181,SD2QIY8iEJY-499e09035f2f4b7bbe2aaeb3dc579060.webm,SD2QIY8iEJY-499e09035f2f4b7bbe2aaeb3dc579060.webm,,,,,,,,,,,,,,,,SD2QIY8iEJY-499e09035f2f4b7bbe2aaeb3dc579060.webm +182,zYHUDn-7Pmo-da3a20a9bed4121e014d813e3aa3dda6.webm,zYHUDn-7Pmo-da3a20a9bed4121e014d813e3aa3dda6.webm,,,,,,,,,,,,,,,,zYHUDn-7Pmo-da3a20a9bed4121e014d813e3aa3dda6.webm +183,pK8OCwYOXW8-6c0abda288df35f149e18f87d57fb849.mp4,pK8OCwYOXW8-6c0abda288df35f149e18f87d57fb849.mp4,,,,,,,,,,,,,,,,pK8OCwYOXW8-6c0abda288df35f149e18f87d57fb849.mp4 +184,N1YPuQHyTcY-768c18098321deb87498a43b2d11b057.mp4,N1YPuQHyTcY-768c18098321deb87498a43b2d11b057.mp4,,,,,,,,,,,,,,,,N1YPuQHyTcY-768c18098321deb87498a43b2d11b057.mp4 +185,7_GThNqUpHc-c5cc48aae367584e4f4d7f0bed5fe4f2.webm,7_GThNqUpHc-c5cc48aae367584e4f4d7f0bed5fe4f2.webm,,,,,,,,,,,,,,,,7_GThNqUpHc-c5cc48aae367584e4f4d7f0bed5fe4f2.webm +187,S6pQ0KuAWlU-41478f43f994aadcfe57411afe178344.webm,S6pQ0KuAWlU-41478f43f994aadcfe57411afe178344.webm,,,,,,,,,,,,,,,,S6pQ0KuAWlU-41478f43f994aadcfe57411afe178344.webm +188,LvFt0Tp1vB8-aa896f747fd19f3c28b52dc67651dbda.mp4,LvFt0Tp1vB8-aa896f747fd19f3c28b52dc67651dbda.mp4,,,,,,,,,,,,,,,,LvFt0Tp1vB8-aa896f747fd19f3c28b52dc67651dbda.mp4 +189,6AGgDqK5p2s-9c4e2115ce9637f1a15abb4b44ab9b15.webm,6AGgDqK5p2s-9c4e2115ce9637f1a15abb4b44ab9b15.webm,,,,,,,,,,,,,,,,6AGgDqK5p2s-9c4e2115ce9637f1a15abb4b44ab9b15.webm +190,bqOy8z3GAn8-77409f1edb944f561fac33bd07dda96e.webm,bqOy8z3GAn8-77409f1edb944f561fac33bd07dda96e.webm,,,,,,,,,,,,,,,,bqOy8z3GAn8-77409f1edb944f561fac33bd07dda96e.webm +191,gvLt3oKnr3g-5296ef0e48bea87de86d75392103ddfd.webm,gvLt3oKnr3g-5296ef0e48bea87de86d75392103ddfd.webm,,,,,,,,,,,,,,,,gvLt3oKnr3g-5296ef0e48bea87de86d75392103ddfd.webm +192,Qr3F_QZPAsc-d9f22bf3783f8033b1dd3e713b0f58d6.webm,Qr3F_QZPAsc-d9f22bf3783f8033b1dd3e713b0f58d6.webm,,,,,,,,,,,,,,,,Qr3F_QZPAsc-d9f22bf3783f8033b1dd3e713b0f58d6.webm +193,Pb-cCdDm1ms-ade564db7e973199d49d84987fdbd235.webm,Pb-cCdDm1ms-ade564db7e973199d49d84987fdbd235.webm,,,,,,,,,,,,,,,,Pb-cCdDm1ms-ade564db7e973199d49d84987fdbd235.webm +194,0JQpBUG7kP8-dfc38248b5967e3136b676cb70de01ba.mp4,0JQpBUG7kP8-dfc38248b5967e3136b676cb70de01ba.mp4,,,,,,,,,,,,,,,,0JQpBUG7kP8-dfc38248b5967e3136b676cb70de01ba.mp4 +195,iFxpLVkTdJA-9568acaa3a92f975604e69a9d94c6e28.mp4,iFxpLVkTdJA-9568acaa3a92f975604e69a9d94c6e28.mp4,,,,,,,,,,,,,,,,iFxpLVkTdJA-9568acaa3a92f975604e69a9d94c6e28.mp4 +196,sbrS8eLwB6c-a1a744efbeb0de68def577933933f111.webm,sbrS8eLwB6c-a1a744efbeb0de68def577933933f111.webm,,,,,,,,,,,,,,,,sbrS8eLwB6c-a1a744efbeb0de68def577933933f111.webm +197,H67d9dw0n-w-c52b43a554c7177c036309f9fa023f75.webm,H67d9dw0n-w-c52b43a554c7177c036309f9fa023f75.webm,,,,,,,,,,,,,,,,H67d9dw0n-w-c52b43a554c7177c036309f9fa023f75.webm +199,QVlRo0cJArc-3802758dfab83c95a37551acc3250e69.mp4,QVlRo0cJArc-3802758dfab83c95a37551acc3250e69.mp4,,,,,,,,,,,,,,,,QVlRo0cJArc-3802758dfab83c95a37551acc3250e69.mp4 +200,titFWCzsDrc-db34f0cf34921a7730ac4033740b3730.webm,titFWCzsDrc-db34f0cf34921a7730ac4033740b3730.webm,,,,,,,,,,,,,,,,titFWCzsDrc-db34f0cf34921a7730ac4033740b3730.webm +201,CciFIPfUNZo-061d89e87b012389c311d1ff5bc7f424.webm,CciFIPfUNZo-061d89e87b012389c311d1ff5bc7f424.webm,,,,,,,,,,,,,,,,CciFIPfUNZo-061d89e87b012389c311d1ff5bc7f424.webm +202,p5PMcd2-CeY-ad76a3c208728cd87908148a66532013.webm,p5PMcd2-CeY-ad76a3c208728cd87908148a66532013.webm,,,,,,,,,,,,,,,,p5PMcd2-CeY-ad76a3c208728cd87908148a66532013.webm +203,wYxPrGs6RSc-125b7fdeb2906c253f3259a0bc932289.webm,wYxPrGs6RSc-125b7fdeb2906c253f3259a0bc932289.webm,,,,,,,,,,,,,,,,wYxPrGs6RSc-125b7fdeb2906c253f3259a0bc932289.webm +204,8tuWy0EFhF0-ffc50ad8c639439874d72e4818bebd3a.webm,8tuWy0EFhF0-ffc50ad8c639439874d72e4818bebd3a.webm,,,,,,,,,,,,,,,,8tuWy0EFhF0-ffc50ad8c639439874d72e4818bebd3a.webm +205,oMIk_AXdMV4-28480ad690e153d077d05740f1d2a8c6.mp4,oMIk_AXdMV4-28480ad690e153d077d05740f1d2a8c6.mp4,,,,,,,,,,,,,,,,oMIk_AXdMV4-28480ad690e153d077d05740f1d2a8c6.mp4 +206,W7id62Qm49g-c07c6827ce4ca7ed9cf539584f735611.webm,W7id62Qm49g-c07c6827ce4ca7ed9cf539584f735611.webm,,,,,,,,,,,,,,,,W7id62Qm49g-c07c6827ce4ca7ed9cf539584f735611.webm +207,lQ0I4xxacsQ-981f18f920b480e4588ea34416e4eb0f.webm,lQ0I4xxacsQ-981f18f920b480e4588ea34416e4eb0f.webm,,,,,,,,,,,,,,,,lQ0I4xxacsQ-981f18f920b480e4588ea34416e4eb0f.webm +208,DI_3duVPgXM-de27647958f7317ad64201e69bfc7f00.mp4,DI_3duVPgXM-de27647958f7317ad64201e69bfc7f00.mp4,,,,,,,,,,,,,,,,DI_3duVPgXM-de27647958f7317ad64201e69bfc7f00.mp4 +209,nHmJDnp2P_k-d5c986026db72c8fbc86944a94fc7b09.mp4,nHmJDnp2P_k-d5c986026db72c8fbc86944a94fc7b09.mp4,,,,,,,,,,,,,,,,nHmJDnp2P_k-d5c986026db72c8fbc86944a94fc7b09.mp4 +210,LoaGfDO8zFw-c4e4960ee1d789237f1733e497b720a8.webm,LoaGfDO8zFw-c4e4960ee1d789237f1733e497b720a8.webm,,,,,,,,,,,,,,,,LoaGfDO8zFw-c4e4960ee1d789237f1733e497b720a8.webm +211,oGr8ue-F3wI-c320172e190fcdedef9cd02aea7f9987.webm,oGr8ue-F3wI-c320172e190fcdedef9cd02aea7f9987.webm,,,,,,,,,,,,,,,,oGr8ue-F3wI-c320172e190fcdedef9cd02aea7f9987.webm +212,KfleWMCP9es-7c6138225ac3ee82714bb13e66d1afbf.mp4,KfleWMCP9es-7c6138225ac3ee82714bb13e66d1afbf.mp4,,,,,,,,,,,,,,,,KfleWMCP9es-7c6138225ac3ee82714bb13e66d1afbf.mp4 +213,XrVbpvNzOt0-5b5cf8a6e6eae5c39ef963e3f7cb1dc9.webm,XrVbpvNzOt0-5b5cf8a6e6eae5c39ef963e3f7cb1dc9.webm,,,,,,,,,,,,,,,,XrVbpvNzOt0-5b5cf8a6e6eae5c39ef963e3f7cb1dc9.webm +214,kbxMdeMztCw-981c0848d05af428cc1dfbce09d03c10.webm,kbxMdeMztCw-981c0848d05af428cc1dfbce09d03c10.webm,,,,,,,,,,,,,,,,kbxMdeMztCw-981c0848d05af428cc1dfbce09d03c10.webm +215,mxf6bDdNS54-6ab6b5f5fcc98a0c2774d763a3d27c16.webm,mxf6bDdNS54-6ab6b5f5fcc98a0c2774d763a3d27c16.webm,,,,,,,,,,,,,,,,mxf6bDdNS54-6ab6b5f5fcc98a0c2774d763a3d27c16.webm +216,N95pg7IBN_E-7ca94b2b81faf965a184cc31082f5480.mp4,N95pg7IBN_E-7ca94b2b81faf965a184cc31082f5480.mp4,,,,,,,,,,,,,,,,N95pg7IBN_E-7ca94b2b81faf965a184cc31082f5480.mp4 +217,Xk6dWbowWhY-ca5439fc75d725d769c55e72a1b64bb3.webm,Xk6dWbowWhY-ca5439fc75d725d769c55e72a1b64bb3.webm,,,,,,,,,,,,,,,,Xk6dWbowWhY-ca5439fc75d725d769c55e72a1b64bb3.webm +219,v2i3umrfZpU-364a1ad3ee7109f7e41129e90ebf843a.webm,v2i3umrfZpU-364a1ad3ee7109f7e41129e90ebf843a.webm,,,,,,,,,,,,,,,,v2i3umrfZpU-364a1ad3ee7109f7e41129e90ebf843a.webm +220,vpKJECNf7nI-180d9a62553217db088473d31ea4afa6.webm,vpKJECNf7nI-180d9a62553217db088473d31ea4afa6.webm,,,,,,,,,,,,,,,,vpKJECNf7nI-180d9a62553217db088473d31ea4afa6.webm +221,E9F02r50t1U-4e0e56e89f7a841355f0138eb40acf75.mp4,E9F02r50t1U-4e0e56e89f7a841355f0138eb40acf75.mp4,,,,,,,,,,,,,,,,E9F02r50t1U-4e0e56e89f7a841355f0138eb40acf75.mp4 +222,8Jsu_g0UFzw-a3f0041405ea17e345fb1e1324feffd1.webm,8Jsu_g0UFzw-a3f0041405ea17e345fb1e1324feffd1.webm,,,,,,,,,,,,,,,,8Jsu_g0UFzw-a3f0041405ea17e345fb1e1324feffd1.webm +226,sd14UJUaNsc-f3592b14347c2237780960619aa6bc15.mp4,sd14UJUaNsc-f3592b14347c2237780960619aa6bc15.mp4,,,,,,,,,,,,,,,,sd14UJUaNsc-f3592b14347c2237780960619aa6bc15.mp4 +227,5zS90tb-RPE-91910e54b39e161cfa72e25b82557dbd.mp4,5zS90tb-RPE-91910e54b39e161cfa72e25b82557dbd.mp4,,,,,,,,,,,,,,,,5zS90tb-RPE-91910e54b39e161cfa72e25b82557dbd.mp4 +228,HjR1IQuzVM0-859c4803650e7e603bfc35a9c35f8334.webm,HjR1IQuzVM0-859c4803650e7e603bfc35a9c35f8334.webm,,,,,,,,,,,,,,,,HjR1IQuzVM0-859c4803650e7e603bfc35a9c35f8334.webm +229,aWBZmTAnUWI-28757fc9fdde00f373a5ce9c325033ea.mp4,aWBZmTAnUWI-28757fc9fdde00f373a5ce9c325033ea.mp4,,,,,,,,,,,,,,,,aWBZmTAnUWI-28757fc9fdde00f373a5ce9c325033ea.mp4 +230,9ZDhdwoylFM-7215125daa2864611a5feccc3b5445be.webm,9ZDhdwoylFM-7215125daa2864611a5feccc3b5445be.webm,,,,,,,,,,,,,,,,9ZDhdwoylFM-7215125daa2864611a5feccc3b5445be.webm +232,WbXAGOrI2t8-4d8e749e6a7f8273dcef742b56e47a12.mp4,WbXAGOrI2t8-4d8e749e6a7f8273dcef742b56e47a12.mp4,,,,,,,,,,,,,,,,WbXAGOrI2t8-4d8e749e6a7f8273dcef742b56e47a12.mp4 +233,HjkFDUihJrI-05207d593e5ea7573bf55e86aa5bfcf5.mp4,HjkFDUihJrI-05207d593e5ea7573bf55e86aa5bfcf5.mp4,,,,,,,,,,,,,,,,HjkFDUihJrI-05207d593e5ea7573bf55e86aa5bfcf5.mp4 +234,5sl98RjqVgc-19dd304495cab317f61188b5ca4b4eb1.mp4,5sl98RjqVgc-19dd304495cab317f61188b5ca4b4eb1.mp4,,,,,,,,,,,,,,,,5sl98RjqVgc-19dd304495cab317f61188b5ca4b4eb1.mp4 +235,Wn3fvglIi9I-0ab5f27bbe87c059d9bd0e9722c5831e.webm,Wn3fvglIi9I-0ab5f27bbe87c059d9bd0e9722c5831e.webm,,,,,,,,,,,,,,,,Wn3fvglIi9I-0ab5f27bbe87c059d9bd0e9722c5831e.webm +236,X5jHONOLfD8-d7a6cd6e9d31018e8f42ed32b2863b22.webm,X5jHONOLfD8-d7a6cd6e9d31018e8f42ed32b2863b22.webm,,,,,,,,,,,,,,,,X5jHONOLfD8-d7a6cd6e9d31018e8f42ed32b2863b22.webm +237,gf6OrSCp7zs-ba669e5435157528940e9793937b46fd.mp4,gf6OrSCp7zs-ba669e5435157528940e9793937b46fd.mp4,,,,,,,,,,,,,,,,gf6OrSCp7zs-ba669e5435157528940e9793937b46fd.mp4 +238,wWTER48MVVY-8e38e98a832fbbec5a32258c088fea93.webm,wWTER48MVVY-8e38e98a832fbbec5a32258c088fea93.webm,,,,,,,,,,,,,,,,wWTER48MVVY-8e38e98a832fbbec5a32258c088fea93.webm +239,lAAB8GFvqOQ-7d59b7c1c7696259855ac2e1e7fbee48.webm,lAAB8GFvqOQ-7d59b7c1c7696259855ac2e1e7fbee48.webm,,,,,,,,,,,,,,,,lAAB8GFvqOQ-7d59b7c1c7696259855ac2e1e7fbee48.webm +240,Z643fojceRU-d6eef96499f732a3765d7289a4580876.mp4,Z643fojceRU-d6eef96499f732a3765d7289a4580876.mp4,,,,,,,,,,,,,,,,Z643fojceRU-d6eef96499f732a3765d7289a4580876.mp4 +241,uLz-8S729sw-822890435aeade51a9c08721c9d3db2a.mp4,uLz-8S729sw-822890435aeade51a9c08721c9d3db2a.mp4,,,,,,,,,,,,,,,,uLz-8S729sw-822890435aeade51a9c08721c9d3db2a.mp4 +243,nV3gJBBZs94-6b31b51474765de87788b0367f915925.mp4,nV3gJBBZs94-6b31b51474765de87788b0367f915925.mp4,,,,,,,,,,,,,,,,nV3gJBBZs94-6b31b51474765de87788b0367f915925.mp4 +244,pE82DfsK_Cg-e8885ca8e282be8ba607b4b9441b4258.mp4,pE82DfsK_Cg-e8885ca8e282be8ba607b4b9441b4258.mp4,,,,,,,,,,,,,,,,pE82DfsK_Cg-e8885ca8e282be8ba607b4b9441b4258.mp4 +245,uqiZuNlulNY-20b1daf0b95a4fe6cfc350a3a34424e5.mp4,uqiZuNlulNY-20b1daf0b95a4fe6cfc350a3a34424e5.mp4,,,,,,,,,,,,,,,,uqiZuNlulNY-20b1daf0b95a4fe6cfc350a3a34424e5.mp4 +246,_a8srUndP8Y-48644a14cbb89129dccdcde0f5715de3.mp4,_a8srUndP8Y-48644a14cbb89129dccdcde0f5715de3.mp4,,,,,,,,,,,,,,,,_a8srUndP8Y-48644a14cbb89129dccdcde0f5715de3.mp4 +248,Z-c8Opypy24-c1a940c3538db2e68a0335360ab745e7.webm,Z-c8Opypy24-c1a940c3538db2e68a0335360ab745e7.webm,,,,,,,,,,,,,,,,Z-c8Opypy24-c1a940c3538db2e68a0335360ab745e7.webm +249,018MsV21q00-3419176ec77eea4da5161cf6faa05a3d.mp4,018MsV21q00-3419176ec77eea4da5161cf6faa05a3d.mp4,,,,,,,,,,,,,,,,018MsV21q00-3419176ec77eea4da5161cf6faa05a3d.mp4 +250,z2y1b1VRrf4-fad2173ddee744aa5f08a977f15c2252.webm,z2y1b1VRrf4-fad2173ddee744aa5f08a977f15c2252.webm,,,,,,,,,,,,,,,,z2y1b1VRrf4-fad2173ddee744aa5f08a977f15c2252.webm +251,6PvVITW0EEQ-11fa44dd12ea286a3c78f4d4aef1f573.mp4,6PvVITW0EEQ-11fa44dd12ea286a3c78f4d4aef1f573.mp4,,,,,,,,,,,,,,,,6PvVITW0EEQ-11fa44dd12ea286a3c78f4d4aef1f573.mp4 +252,U5FMiyX0gXc-8d80e2cd3e841f96828a9f883e0cbbef.webm,U5FMiyX0gXc-8d80e2cd3e841f96828a9f883e0cbbef.webm,,,,,,,,,,,,,,,,U5FMiyX0gXc-8d80e2cd3e841f96828a9f883e0cbbef.webm +254,W1jF7urxhxk-4bcfed6e82201971b5996670f37aba65.mp4,W1jF7urxhxk-4bcfed6e82201971b5996670f37aba65.mp4,,,,,,,,,,,,,,,,W1jF7urxhxk-4bcfed6e82201971b5996670f37aba65.mp4 +255,BCtHNNjmK-g-6411a60e68f3d6d63634de0a22109cbe.webm,BCtHNNjmK-g-6411a60e68f3d6d63634de0a22109cbe.webm,,,,,,,,,,,,,,,,BCtHNNjmK-g-6411a60e68f3d6d63634de0a22109cbe.webm +256,5DxYSGRopJo-b6bce4024a5b1e20bb3a6788a0bfef68.mp4,5DxYSGRopJo-b6bce4024a5b1e20bb3a6788a0bfef68.mp4,,,,,,,,,,,,,,,,5DxYSGRopJo-b6bce4024a5b1e20bb3a6788a0bfef68.mp4 +257,WBGumMrBQJM-107a34f006f5f5698e525a4f7a011dea.mp4,WBGumMrBQJM-107a34f006f5f5698e525a4f7a011dea.mp4,,,,,,,,,,,,,,,,WBGumMrBQJM-107a34f006f5f5698e525a4f7a011dea.mp4 +258,udE5PPtdqHw-d0a6214ad95c6635f6c634ca2d33bdc1.mp4,udE5PPtdqHw-d0a6214ad95c6635f6c634ca2d33bdc1.mp4,,,,,,,,,,,,,,,,udE5PPtdqHw-d0a6214ad95c6635f6c634ca2d33bdc1.mp4 +259,hq6dkrBQMRc-2d16f3d08c583563d3264adb2cb1f49d.webm,hq6dkrBQMRc-2d16f3d08c583563d3264adb2cb1f49d.webm,,,,,,,,,,,,,,,,hq6dkrBQMRc-2d16f3d08c583563d3264adb2cb1f49d.webm +260,FouQjhCSBCk-90be027463eb8322d86c65579b48687b.mp4,FouQjhCSBCk-90be027463eb8322d86c65579b48687b.mp4,,,,,,,,,,,,,,,,FouQjhCSBCk-90be027463eb8322d86c65579b48687b.mp4 +263,yu0250fbYk8-3c913b77d9fead0c981b4a93d26401be.webm,yu0250fbYk8-3c913b77d9fead0c981b4a93d26401be.webm,,,,,,,,,,,,,,,,yu0250fbYk8-3c913b77d9fead0c981b4a93d26401be.webm +264,_n25EW1secY-68ee2b8ee9e46cec773e03988d035a74.mp4,_n25EW1secY-68ee2b8ee9e46cec773e03988d035a74.mp4,,,,,,,,,,,,,,,,_n25EW1secY-68ee2b8ee9e46cec773e03988d035a74.mp4 +265,O01gadD46Xc-58f745fb330b40f4a6db119771760d9b.mp4,O01gadD46Xc-58f745fb330b40f4a6db119771760d9b.mp4,,,,,,,,,,,,,,,,O01gadD46Xc-58f745fb330b40f4a6db119771760d9b.mp4 +266,JrBjbP9TFV0-a9a6bbb0dcd6a09181e218f7517750ed.mp4,JrBjbP9TFV0-a9a6bbb0dcd6a09181e218f7517750ed.mp4,,,,,,,,,,,,,,,,JrBjbP9TFV0-a9a6bbb0dcd6a09181e218f7517750ed.mp4 +268,z64QnDwVFkQ-006cd411fd32304de9ddb6704175ade2.mp4,z64QnDwVFkQ-006cd411fd32304de9ddb6704175ade2.mp4,,,,,,,,,,,,,,,,z64QnDwVFkQ-006cd411fd32304de9ddb6704175ade2.mp4 +269,1X1oZUAW5ds-a017ae11dcedfd0eb915278a1783e375.mp4,1X1oZUAW5ds-a017ae11dcedfd0eb915278a1783e375.mp4,,,,,,,,,,,,,,,,1X1oZUAW5ds-a017ae11dcedfd0eb915278a1783e375.mp4 +272,nPY5ISSfyWE-554c6dcebf2e312eddb407b07f1ea643.webm,nPY5ISSfyWE-554c6dcebf2e312eddb407b07f1ea643.webm,,,,,,,,,,,,,,,,nPY5ISSfyWE-554c6dcebf2e312eddb407b07f1ea643.webm +273,k47yWjP32OI-af3475ecfd2522223171d106f3524529.webm,k47yWjP32OI-af3475ecfd2522223171d106f3524529.webm,,,,,,,,,,,,,,,,k47yWjP32OI-af3475ecfd2522223171d106f3524529.webm +275,LWTbO-t3iBk-7595d8953993d09dec1e4709e65b0782.mp4,LWTbO-t3iBk-7595d8953993d09dec1e4709e65b0782.mp4,,,,,,,,,,,,,,,,LWTbO-t3iBk-7595d8953993d09dec1e4709e65b0782.mp4 +277,OqZpTY5KSDQ-4d77ce7461b7a941a8c56732c899e953.webm,OqZpTY5KSDQ-4d77ce7461b7a941a8c56732c899e953.webm,,,,,,,,,,,,,,,,OqZpTY5KSDQ-4d77ce7461b7a941a8c56732c899e953.webm +278,lNGR6od1L2E-e57f9e81e5c5a9986216684fdd96a1d1.webm,lNGR6od1L2E-e57f9e81e5c5a9986216684fdd96a1d1.webm,,,,,,,,,,,,,,,,lNGR6od1L2E-e57f9e81e5c5a9986216684fdd96a1d1.webm +279,RoTpbb2KrSo-7afb304058706da1c07e295a16fcc2e5.mp4,RoTpbb2KrSo-7afb304058706da1c07e295a16fcc2e5.mp4,,,,,,,,,,,,,,,,RoTpbb2KrSo-7afb304058706da1c07e295a16fcc2e5.mp4 +280,D5tuNsZlf6g-421d37bfa5fbe82fd4790f6a4833eed0.mp4,D5tuNsZlf6g-421d37bfa5fbe82fd4790f6a4833eed0.mp4,,,,,,,,,,,,,,,,D5tuNsZlf6g-421d37bfa5fbe82fd4790f6a4833eed0.mp4 +281,9gTpxuL8LSE-fef2daee17d8e0b8d9c86d2863649574.mp4,9gTpxuL8LSE-fef2daee17d8e0b8d9c86d2863649574.mp4,,,,,,,,,,,,,,,,9gTpxuL8LSE-fef2daee17d8e0b8d9c86d2863649574.mp4 +282,Bz7jadrRHRY-c9eb7eca4a48fc95b65393b8ddb928ba.mp4,Bz7jadrRHRY-c9eb7eca4a48fc95b65393b8ddb928ba.mp4,,,,,,,,,,,,,,,,Bz7jadrRHRY-c9eb7eca4a48fc95b65393b8ddb928ba.mp4 +283,26lhtF90qBg-ad2440fff63f9c0e81b89e558c4c68f9.webm,26lhtF90qBg-ad2440fff63f9c0e81b89e558c4c68f9.webm,,,,,,,,,,,,,,,,26lhtF90qBg-ad2440fff63f9c0e81b89e558c4c68f9.webm +285,fTopfU9BGuA-deed3a6fdc3fb51df762e4081838ed80.webm,fTopfU9BGuA-deed3a6fdc3fb51df762e4081838ed80.webm,,,,,,,,,,,,,,,,fTopfU9BGuA-deed3a6fdc3fb51df762e4081838ed80.webm +288,sV2KQhWprfY-abd478029dba48c4e8bd9ae5af33e949.mp4,sV2KQhWprfY-abd478029dba48c4e8bd9ae5af33e949.mp4,,,,,,,,,,,,,,,,sV2KQhWprfY-abd478029dba48c4e8bd9ae5af33e949.mp4 +290,HhBaxVxyVDw-e1c51bb2eb338aefc321ec82f3990177.webm,HhBaxVxyVDw-e1c51bb2eb338aefc321ec82f3990177.webm,,,,,,,,,,,,,,,,HhBaxVxyVDw-e1c51bb2eb338aefc321ec82f3990177.webm +291,bAX7N5t0XYw-396c48181b14c228e008723b8619fe49.webm,bAX7N5t0XYw-396c48181b14c228e008723b8619fe49.webm,,,,,,,,,,,,,,,,bAX7N5t0XYw-396c48181b14c228e008723b8619fe49.webm +292,WaM7_iUtJBk-c4395da57221793a6b43e6eb3bc80fad.webm,WaM7_iUtJBk-c4395da57221793a6b43e6eb3bc80fad.webm,,,,,,,,,,,,,,,,WaM7_iUtJBk-c4395da57221793a6b43e6eb3bc80fad.webm +293,GFr9jdSA9v4-cb430ee52fe6d44d43e4fe9686b99507.mp4,GFr9jdSA9v4-cb430ee52fe6d44d43e4fe9686b99507.mp4,,,,,,,,,,,,,,,,GFr9jdSA9v4-cb430ee52fe6d44d43e4fe9686b99507.mp4 +294,ns5LZoESpOo-57c40b98afcd738a88c7088d2a370bc4.webm,ns5LZoESpOo-57c40b98afcd738a88c7088d2a370bc4.webm,,,,,,,,,,,,,,,,ns5LZoESpOo-57c40b98afcd738a88c7088d2a370bc4.webm +295,aZ5saEKT0qM-637dc00d2b1424b6b30f9d0a8e19daed.webm,aZ5saEKT0qM-637dc00d2b1424b6b30f9d0a8e19daed.webm,,,,,,,,,,,,,,,,aZ5saEKT0qM-637dc00d2b1424b6b30f9d0a8e19daed.webm +296,sWf0weZMXg0-539135c908e421fe27893f16f6757885.webm,sWf0weZMXg0-539135c908e421fe27893f16f6757885.webm,,,,,,,,,,,,,,,,sWf0weZMXg0-539135c908e421fe27893f16f6757885.webm +297,lrpmaThQ2sY-32a39886c7888f8aa7b3fa3b2ba9d495.webm,lrpmaThQ2sY-32a39886c7888f8aa7b3fa3b2ba9d495.webm,,,,,,,,,,,,,,,,lrpmaThQ2sY-32a39886c7888f8aa7b3fa3b2ba9d495.webm +298,IgyjoEgMuPA-784bc730ced19fb7d4b54284b6a6d747.mp4,IgyjoEgMuPA-784bc730ced19fb7d4b54284b6a6d747.mp4,,,,,,,,,,,,,,,,IgyjoEgMuPA-784bc730ced19fb7d4b54284b6a6d747.mp4 +299,05OJ3pfC9e4-680817017e5192a7c21f9e16154e9474.webm,05OJ3pfC9e4-680817017e5192a7c21f9e16154e9474.webm,,,,,,,,,,,,,,,,05OJ3pfC9e4-680817017e5192a7c21f9e16154e9474.webm +300,HPLn7jTOZ70-398701ff9b21854bc359ce89b6d33e3f.webm,HPLn7jTOZ70-398701ff9b21854bc359ce89b6d33e3f.webm,,,,,,,,,,,,,,,,HPLn7jTOZ70-398701ff9b21854bc359ce89b6d33e3f.webm +301,Tl5Z45phF4c-5550e2f83f8176d596da1ade81813dd9.webm,Tl5Z45phF4c-5550e2f83f8176d596da1ade81813dd9.webm,,,,,,,,,,,,,,,,Tl5Z45phF4c-5550e2f83f8176d596da1ade81813dd9.webm +302,D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256.webm,D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256.webm,,,,,,,,,,,,,,,,D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256.webm +303,GyaFEZujpbY-e2e5d448e968fd988bf891592ef744af.mp4,GyaFEZujpbY-e2e5d448e968fd988bf891592ef744af.mp4,,,,,,,,,,,,,,,,GyaFEZujpbY-e2e5d448e968fd988bf891592ef744af.mp4 +304,mF3lv8RswAg-da5966d254d2456c8fccb2c1a615afd5.webm,mF3lv8RswAg-da5966d254d2456c8fccb2c1a615afd5.webm,,,,,,,,,,,,,,,,mF3lv8RswAg-da5966d254d2456c8fccb2c1a615afd5.webm +305,7d_8gVP52to-921e198968c973cf5b63a392e7e87efe.webm,7d_8gVP52to-921e198968c973cf5b63a392e7e87efe.webm,,,,,,,,,,,,,,,,7d_8gVP52to-921e198968c973cf5b63a392e7e87efe.webm +306,MAxuihfpanU-4c3ed36d91d64bb4750d56533a0cd8ef.webm,MAxuihfpanU-4c3ed36d91d64bb4750d56533a0cd8ef.webm,,,,,,,,,,,,,,,,MAxuihfpanU-4c3ed36d91d64bb4750d56533a0cd8ef.webm +307,JdUdGSHbfl8-5f990d9a138f62056e554fd15ae55138.mp4,JdUdGSHbfl8-5f990d9a138f62056e554fd15ae55138.mp4,,,,,,,,,,,,,,,,JdUdGSHbfl8-5f990d9a138f62056e554fd15ae55138.mp4 +308,RImXm2DIGWA-dd42ee1822a02483e0b010d371224053.webm,RImXm2DIGWA-dd42ee1822a02483e0b010d371224053.webm,,,,,,,,,,,,,,,,RImXm2DIGWA-dd42ee1822a02483e0b010d371224053.webm +309,V1fskEz-d4U-c9aa6ff55acf138914c99cf96cd7bac4.webm,V1fskEz-d4U-c9aa6ff55acf138914c99cf96cd7bac4.webm,,,,,,,,,,,,,,,,V1fskEz-d4U-c9aa6ff55acf138914c99cf96cd7bac4.webm +310,N4iQuahSEk8-5b5585bff419c500f71dd8cf4d05cf16.webm,N4iQuahSEk8-5b5585bff419c500f71dd8cf4d05cf16.webm,,,,,,,,,,,,,,,,N4iQuahSEk8-5b5585bff419c500f71dd8cf4d05cf16.webm +312,BtoOYZD9fKM-c7685c16e20c5db26e41c5db90d33d01.mp4,BtoOYZD9fKM-c7685c16e20c5db26e41c5db90d33d01.mp4,,,,,,,,,,,,,,,,BtoOYZD9fKM-c7685c16e20c5db26e41c5db90d33d01.mp4 +313,AIKwtgHssb0-647a41edafb133da3ed2013bf44d7bb3.webm,AIKwtgHssb0-647a41edafb133da3ed2013bf44d7bb3.webm,,,,,,,,,,,,,,,,AIKwtgHssb0-647a41edafb133da3ed2013bf44d7bb3.webm +314,Fom9_d0iqZU-3db3a3af43d8831742afc93ac2a870b4.webm,Fom9_d0iqZU-3db3a3af43d8831742afc93ac2a870b4.webm,,,,,,,,,,,,,,,,Fom9_d0iqZU-3db3a3af43d8831742afc93ac2a870b4.webm +315,mzJwjnQfSd8-0780854ae14845f15f66c4de5b71d88a.mp4,mzJwjnQfSd8-0780854ae14845f15f66c4de5b71d88a.mp4,,,,,,,,,,,,,,,,mzJwjnQfSd8-0780854ae14845f15f66c4de5b71d88a.mp4 +316,a5nA7JiQuSY-9beebbbbd80705f969a3f93c0fdaa121.webm,a5nA7JiQuSY-9beebbbbd80705f969a3f93c0fdaa121.webm,,,,,,,,,,,,,,,,a5nA7JiQuSY-9beebbbbd80705f969a3f93c0fdaa121.webm +317,mrTIG1vGhxE-48f7550759d21f1a9ed5185d52751f13.webm,mrTIG1vGhxE-48f7550759d21f1a9ed5185d52751f13.webm,,,,,,,,,,,,,,,,mrTIG1vGhxE-48f7550759d21f1a9ed5185d52751f13.webm +318,3wtu_RFkW1I-aef842d179c05786f253f76472f3dc8d.webm,3wtu_RFkW1I-aef842d179c05786f253f76472f3dc8d.webm,,,,,,,,,,,,,,,,3wtu_RFkW1I-aef842d179c05786f253f76472f3dc8d.webm +319,f8y8R6SNupQ-140b0848f7c12ac3d5a98bc90e32643f.mp4,f8y8R6SNupQ-140b0848f7c12ac3d5a98bc90e32643f.mp4,,,,,,,,,,,,,,,,f8y8R6SNupQ-140b0848f7c12ac3d5a98bc90e32643f.mp4 +320,zuFKJnfK_wI-2e8f143573a68267e2963f507c285ad8.webm,zuFKJnfK_wI-2e8f143573a68267e2963f507c285ad8.webm,,,,,,,,,,,,,,,,zuFKJnfK_wI-2e8f143573a68267e2963f507c285ad8.webm +321,qSmw8Y51S5g-a3fdfea794637d780de4ca76aef3f78e.webm,qSmw8Y51S5g-a3fdfea794637d780de4ca76aef3f78e.webm,,,,,,,,,,,,,,,,qSmw8Y51S5g-a3fdfea794637d780de4ca76aef3f78e.webm +322,kMLiSPXAN8Y-bcdacebe246d68fae99512e36a3ee743.webm,kMLiSPXAN8Y-bcdacebe246d68fae99512e36a3ee743.webm,,,,,,,,,,,,,,,,kMLiSPXAN8Y-bcdacebe246d68fae99512e36a3ee743.webm +323,puME6wQyP98-f9659f8e6dcac0a1a45e7ea1741f28b8.mp4,puME6wQyP98-f9659f8e6dcac0a1a45e7ea1741f28b8.mp4,,,,,,,,,,,,,,,,puME6wQyP98-f9659f8e6dcac0a1a45e7ea1741f28b8.mp4 +324,obEn_f_PKBE-80aaa8d0723f8d9ac082abd9a019f234.webm,obEn_f_PKBE-80aaa8d0723f8d9ac082abd9a019f234.webm,,,,,,,,,,,,,,,,obEn_f_PKBE-80aaa8d0723f8d9ac082abd9a019f234.webm +325,ydFffppPhIw-ead1f75d1da8273fa4ed4ea873825fd2.webm,ydFffppPhIw-ead1f75d1da8273fa4ed4ea873825fd2.webm,,,,,,,,,,,,,,,,ydFffppPhIw-ead1f75d1da8273fa4ed4ea873825fd2.webm +327,TfdDQAB44vE-25343cbd9ba1fe7ddfee84beb84fa8f7.mp4,TfdDQAB44vE-25343cbd9ba1fe7ddfee84beb84fa8f7.mp4,,,,,,,,,,,,,,,,TfdDQAB44vE-25343cbd9ba1fe7ddfee84beb84fa8f7.mp4 +328,oV2-h-1cEXc-07f41965943b62ece1430f8f6488bbfa.webm,oV2-h-1cEXc-07f41965943b62ece1430f8f6488bbfa.webm,,,,,,,,,,,,,,,,oV2-h-1cEXc-07f41965943b62ece1430f8f6488bbfa.webm +329,kmpWQcXSe2M-80973164c2e934600a3fdd4c411de0a7.webm,kmpWQcXSe2M-80973164c2e934600a3fdd4c411de0a7.webm,,,,,,,,,,,,,,,,kmpWQcXSe2M-80973164c2e934600a3fdd4c411de0a7.webm +331,0ZTSdgnO5FE-99007cd3f88dc54ee6c325948d73593e.webm,0ZTSdgnO5FE-99007cd3f88dc54ee6c325948d73593e.webm,,,,,,,,,,,,,,,,0ZTSdgnO5FE-99007cd3f88dc54ee6c325948d73593e.webm +332,Kx66-vdoibw-49fda05f1524797be74fbc58b12186ef.mp4,Kx66-vdoibw-49fda05f1524797be74fbc58b12186ef.mp4,,,,,,,,,,,,,,,,Kx66-vdoibw-49fda05f1524797be74fbc58b12186ef.mp4 +333,uBpM9JOItVs-59013a0702ada77d8f84c5e4cb68badb.mp4,uBpM9JOItVs-59013a0702ada77d8f84c5e4cb68badb.mp4,,,,,,,,,,,,,,,,uBpM9JOItVs-59013a0702ada77d8f84c5e4cb68badb.mp4 +334,cQrzUz0yyk8-2e6960f2e3040fa2106bff274c478b53.webm,cQrzUz0yyk8-2e6960f2e3040fa2106bff274c478b53.webm,,,,,,,,,,,,,,,,cQrzUz0yyk8-2e6960f2e3040fa2106bff274c478b53.webm +335,2a-kIfRT6l0-dc605c70d71988c532b0394624d57f42.webm,2a-kIfRT6l0-dc605c70d71988c532b0394624d57f42.webm,,,,,,,,,,,,,,,,2a-kIfRT6l0-dc605c70d71988c532b0394624d57f42.webm +336,ozl8KbjJQRg-9702f0b6304573a754f13067738e6921.webm,ozl8KbjJQRg-9702f0b6304573a754f13067738e6921.webm,,,,,,,,,,,,,,,,ozl8KbjJQRg-9702f0b6304573a754f13067738e6921.webm +337,58WkuhEVoo8-f586202d6e7a99c7aabad9ce5792f7bc.mp4,58WkuhEVoo8-f586202d6e7a99c7aabad9ce5792f7bc.mp4,,,,,,,,,,,,,,,,58WkuhEVoo8-f586202d6e7a99c7aabad9ce5792f7bc.mp4 +338,wlqILQddyvk-493ccbdcabfc374df28ec78d7045263f.webm,wlqILQddyvk-493ccbdcabfc374df28ec78d7045263f.webm,,,,,,,,,,,,,,,,wlqILQddyvk-493ccbdcabfc374df28ec78d7045263f.webm +339,vx19DVcYkww-0e148c0458cdec2a59207fc055ff7bb7.mp4,vx19DVcYkww-0e148c0458cdec2a59207fc055ff7bb7.mp4,,,,,,,,,,,,,,,,vx19DVcYkww-0e148c0458cdec2a59207fc055ff7bb7.mp4 +340,g8-FvTT0eJc-1c9eca5286b0006084a81cd458090407.webm,g8-FvTT0eJc-1c9eca5286b0006084a81cd458090407.webm,,,,,,,,,,,,,,,,g8-FvTT0eJc-1c9eca5286b0006084a81cd458090407.webm +342,vrEa0mkxoeo-8c1e682f2e7c182e811ce604711158e8.webm,vrEa0mkxoeo-8c1e682f2e7c182e811ce604711158e8.webm,,,,,,,,,,,,,,,,vrEa0mkxoeo-8c1e682f2e7c182e811ce604711158e8.webm +343,0Sk0pjtVQhA-71b0aae17339a6dc40b21630e6861272.mp4,0Sk0pjtVQhA-71b0aae17339a6dc40b21630e6861272.mp4,,,,,,,,,,,,,,,,0Sk0pjtVQhA-71b0aae17339a6dc40b21630e6861272.mp4 +345,VIwinY1nYAc-694b1a4083686c4a7d6153266411a585.mp4,VIwinY1nYAc-694b1a4083686c4a7d6153266411a585.mp4,,,,,,,,,,,,,,,,VIwinY1nYAc-694b1a4083686c4a7d6153266411a585.mp4 +346,r7on6wuqPsI-0a039d1e874d18da7eef468807fcca30.mp4,r7on6wuqPsI-0a039d1e874d18da7eef468807fcca30.mp4,,,,,,,,,,,,,,,,r7on6wuqPsI-0a039d1e874d18da7eef468807fcca30.mp4 +347,c-QaK397gfA-1adbc18e1cb5f9f02c662a3768d2b3e0.webm,c-QaK397gfA-1adbc18e1cb5f9f02c662a3768d2b3e0.webm,,,,,,,,,,,,,,,,c-QaK397gfA-1adbc18e1cb5f9f02c662a3768d2b3e0.webm +348,ChVU5bbvn1Y-f4061130b6e65d8b7f05390f2ca2160c.mp4,ChVU5bbvn1Y-f4061130b6e65d8b7f05390f2ca2160c.mp4,,,,,,,,,,,,,,,,ChVU5bbvn1Y-f4061130b6e65d8b7f05390f2ca2160c.mp4 +349,zTwNe0hRcyA-d722b6f52c62fee91e5177efb3e4facc.webm,zTwNe0hRcyA-d722b6f52c62fee91e5177efb3e4facc.webm,,,,,,,,,,,,,,,,zTwNe0hRcyA-d722b6f52c62fee91e5177efb3e4facc.webm +350,6yLNQF8Z7PY-f0d23e8fd5d884860263f8db4db83ee2.webm,6yLNQF8Z7PY-f0d23e8fd5d884860263f8db4db83ee2.webm,,,,,,,,,,,,,,,,6yLNQF8Z7PY-f0d23e8fd5d884860263f8db4db83ee2.webm +351,5J0h8C5g6qY-018da589e0467670eb7a60dc5536d5e0.mp4,5J0h8C5g6qY-018da589e0467670eb7a60dc5536d5e0.mp4,,,,,,,,,,,,,,,,5J0h8C5g6qY-018da589e0467670eb7a60dc5536d5e0.mp4 +352,sKGUIktJarc-7065f5ada34b1244d00b6aa6b7187afb.webm,sKGUIktJarc-7065f5ada34b1244d00b6aa6b7187afb.webm,,,,,,,,,,,,,,,,sKGUIktJarc-7065f5ada34b1244d00b6aa6b7187afb.webm +353,8Qs3G7H3pbk-bab7f0ad7bbd80313195a497ada7c330.webm,8Qs3G7H3pbk-bab7f0ad7bbd80313195a497ada7c330.webm,,,,,,,,,,,,,,,,8Qs3G7H3pbk-bab7f0ad7bbd80313195a497ada7c330.webm +354,CP8RCkPoL0I-ecd66acdce79e874bd9b889999707ee4.webm,CP8RCkPoL0I-ecd66acdce79e874bd9b889999707ee4.webm,,,,,,,,,,,,,,,,CP8RCkPoL0I-ecd66acdce79e874bd9b889999707ee4.webm +355,Htlz54eUadU-65a6600ec616f24bee89138b314c24b3.webm,Htlz54eUadU-65a6600ec616f24bee89138b314c24b3.webm,,,,,,,,,,,,,,,,Htlz54eUadU-65a6600ec616f24bee89138b314c24b3.webm +356,gwInZFdMRjs-113d399e3c64ade50f1b83653a99a7fd.mp4,gwInZFdMRjs-113d399e3c64ade50f1b83653a99a7fd.mp4,,,,,,,,,,,,,,,,gwInZFdMRjs-113d399e3c64ade50f1b83653a99a7fd.mp4 +357,j5pYPAZuy9M-3399c3e1648d74a9f86c9fd7ddcb025f.mp4,j5pYPAZuy9M-3399c3e1648d74a9f86c9fd7ddcb025f.mp4,,,,,,,,,,,,,,,,j5pYPAZuy9M-3399c3e1648d74a9f86c9fd7ddcb025f.mp4 +358,Q-3Hnc5lph4-fdd520832dde0a2e318ec196c4c59fd0.mp4,Q-3Hnc5lph4-fdd520832dde0a2e318ec196c4c59fd0.mp4,,,,,,,,,,,,,,,,Q-3Hnc5lph4-fdd520832dde0a2e318ec196c4c59fd0.mp4 +359,Ywzr6-3sV5Q-a461fb8b3f6f42fae8253b85a7ba800a.mp4,Ywzr6-3sV5Q-a461fb8b3f6f42fae8253b85a7ba800a.mp4,,,,,,,,,,,,,,,,Ywzr6-3sV5Q-a461fb8b3f6f42fae8253b85a7ba800a.mp4 +360,Xf11gRL5y1g-bb62faa2bb29d6e00b5554c05e85a3be.webm,Xf11gRL5y1g-bb62faa2bb29d6e00b5554c05e85a3be.webm,,,,,,,,,,,,,,,,Xf11gRL5y1g-bb62faa2bb29d6e00b5554c05e85a3be.webm +361,nLsuKd2VSnI-e0249fc27aa77d7178c8705396e4f893.webm,nLsuKd2VSnI-e0249fc27aa77d7178c8705396e4f893.webm,,,,,,,,,,,,,,,,nLsuKd2VSnI-e0249fc27aa77d7178c8705396e4f893.webm +362,N7dcXWAc9Tc-2523234045ecc433c94427408c1e73bc.mp4,N7dcXWAc9Tc-2523234045ecc433c94427408c1e73bc.mp4,,,,,,,,,,,,,,,,N7dcXWAc9Tc-2523234045ecc433c94427408c1e73bc.mp4 +363,YbWhmtRpz2Q-df76e6b608957ab358d3e95f9d5dcd97.mp4,YbWhmtRpz2Q-df76e6b608957ab358d3e95f9d5dcd97.mp4,,,,,,,,,,,,,,,,YbWhmtRpz2Q-df76e6b608957ab358d3e95f9d5dcd97.mp4 +364,zk1cGmInUhM-ffced27d261f7114ee29ca29644565f6.mp4,zk1cGmInUhM-ffced27d261f7114ee29ca29644565f6.mp4,,,,,,,,,,,,,,,,zk1cGmInUhM-ffced27d261f7114ee29ca29644565f6.mp4 +365,GWVHCj7C1Wo-8cc98d21fbdb449dead84bbc9855e3a6.mp4,GWVHCj7C1Wo-8cc98d21fbdb449dead84bbc9855e3a6.mp4,,,,,,,,,,,,,,,,GWVHCj7C1Wo-8cc98d21fbdb449dead84bbc9855e3a6.mp4 +366,xEZdLNP6ges-1fc3857ed4e65ebd264fb76f8f25088a.webm,xEZdLNP6ges-1fc3857ed4e65ebd264fb76f8f25088a.webm,,,,,,,,,,,,,,,,xEZdLNP6ges-1fc3857ed4e65ebd264fb76f8f25088a.webm +367,XF-MEzftZ0s-83c2b1d7d679a39c7a3d4bc46c63344c.mp4,XF-MEzftZ0s-83c2b1d7d679a39c7a3d4bc46c63344c.mp4,,,,,,,,,,,,,,,,XF-MEzftZ0s-83c2b1d7d679a39c7a3d4bc46c63344c.mp4 +368,apTZaxDSsyg-825b0060280e008bf60b9d4546703c7e.mp4,apTZaxDSsyg-825b0060280e008bf60b9d4546703c7e.mp4,,,,,,,,,,,,,,,,apTZaxDSsyg-825b0060280e008bf60b9d4546703c7e.mp4 +369,2xbKw8RNFec-6748687a448a8dfaaf6c935ef76ca000.mp4,2xbKw8RNFec-6748687a448a8dfaaf6c935ef76ca000.mp4,,,,,,,,,,,,,,,,2xbKw8RNFec-6748687a448a8dfaaf6c935ef76ca000.mp4 +372,pqSrJgQ0WHk-6b18c1ea1060a12ba6b7b224aec32c7c.webm,pqSrJgQ0WHk-6b18c1ea1060a12ba6b7b224aec32c7c.webm,,,,,,,,,,,,,,,,pqSrJgQ0WHk-6b18c1ea1060a12ba6b7b224aec32c7c.webm +373,0ujYGP2VlzM-145297f8902c13aafd0829de8a59650a.webm,0ujYGP2VlzM-145297f8902c13aafd0829de8a59650a.webm,,,,,,,,,,,,,,,,0ujYGP2VlzM-145297f8902c13aafd0829de8a59650a.webm +374,_lUNbafd4Ao-1caa1fd3768a0c536db4de4703400ecd.webm,_lUNbafd4Ao-1caa1fd3768a0c536db4de4703400ecd.webm,,,,,,,,,,,,,,,,_lUNbafd4Ao-1caa1fd3768a0c536db4de4703400ecd.webm +375,lWuQgK6y87E-ee988d222cb6e1f764cdeaeb827264ce.mp4,lWuQgK6y87E-ee988d222cb6e1f764cdeaeb827264ce.mp4,,,,,,,,,,,,,,,,lWuQgK6y87E-ee988d222cb6e1f764cdeaeb827264ce.mp4 +376,qZUmUFhZ6jc-731e384f37b703f526b69fe8cc3161e6.webm,qZUmUFhZ6jc-731e384f37b703f526b69fe8cc3161e6.webm,,,,,,,,,,,,,,,,qZUmUFhZ6jc-731e384f37b703f526b69fe8cc3161e6.webm +377,lOBQ-12Lxhg-4e772b6ff9807f73fdb5fa16e65288e8.webm,lOBQ-12Lxhg-4e772b6ff9807f73fdb5fa16e65288e8.webm,,,,,,,,,,,,,,,,lOBQ-12Lxhg-4e772b6ff9807f73fdb5fa16e65288e8.webm +379,6PS5AGQz9GU-90b0a57fff0926f73ed2f986cc4a238c.mp4,6PS5AGQz9GU-90b0a57fff0926f73ed2f986cc4a238c.mp4,,,,,,,,,,,,,,,,6PS5AGQz9GU-90b0a57fff0926f73ed2f986cc4a238c.mp4 +380,fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753.webm,fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753.webm,,,,,,,,,,,,,,,,fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753.webm +381,hL2Lf6t1gcw-68b8f208fea134c473adf9ad1acba561.webm,hL2Lf6t1gcw-68b8f208fea134c473adf9ad1acba561.webm,,,,,,,,,,,,,,,,hL2Lf6t1gcw-68b8f208fea134c473adf9ad1acba561.webm +382,NgT8nrL0jGs-cf6a25e605d8b0893993ec68b3957416.webm,NgT8nrL0jGs-cf6a25e605d8b0893993ec68b3957416.webm,,,,,,,,,,,,,,,,NgT8nrL0jGs-cf6a25e605d8b0893993ec68b3957416.webm +383,T2XxvOQdyyA-35da0867bfa3f94ec1ad478919789aef.webm,T2XxvOQdyyA-35da0867bfa3f94ec1ad478919789aef.webm,,,,,,,,,,,,,,,,T2XxvOQdyyA-35da0867bfa3f94ec1ad478919789aef.webm +384,xh-33zokE4g-92ebdf78e0f12d7c6530c54bb2b0cdd6.webm,xh-33zokE4g-92ebdf78e0f12d7c6530c54bb2b0cdd6.webm,,,,,,,,,,,,,,,,xh-33zokE4g-92ebdf78e0f12d7c6530c54bb2b0cdd6.webm +385,mjPqKL5BhMQ-da653f9b4c7309573cac8bc6f9654a88.webm,mjPqKL5BhMQ-da653f9b4c7309573cac8bc6f9654a88.webm,,,,,,,,,,,,,,,,mjPqKL5BhMQ-da653f9b4c7309573cac8bc6f9654a88.webm +386,kO10QD-rliA-433b3e6db7ec94ee3ca88f5b7fe82663.webm,kO10QD-rliA-433b3e6db7ec94ee3ca88f5b7fe82663.webm,,,,,,,,,,,,,,,,kO10QD-rliA-433b3e6db7ec94ee3ca88f5b7fe82663.webm +387,9objfchk-RI-865b48e5d56df9ca8b9a926ea3c9a256.mp4,9objfchk-RI-865b48e5d56df9ca8b9a926ea3c9a256.mp4,,,,,,,,,,,,,,,,9objfchk-RI-865b48e5d56df9ca8b9a926ea3c9a256.mp4 +388,iWN-v0lQD1U-0973ab842b276cec3ccc15894449d64e.webm,iWN-v0lQD1U-0973ab842b276cec3ccc15894449d64e.webm,,,,,,,,,,,,,,,,iWN-v0lQD1U-0973ab842b276cec3ccc15894449d64e.webm +389,lu67G7hVlUM-16d2596e3bb8f54032b01f54fc9d1770.mp4,lu67G7hVlUM-16d2596e3bb8f54032b01f54fc9d1770.mp4,,,,,,,,,,,,,,,,lu67G7hVlUM-16d2596e3bb8f54032b01f54fc9d1770.mp4 +390,t_9XI6IeD_o-71deaa81dfde2c8804803c75b6ac8fdb.mp4,t_9XI6IeD_o-71deaa81dfde2c8804803c75b6ac8fdb.mp4,,,,,,,,,,,,,,,,t_9XI6IeD_o-71deaa81dfde2c8804803c75b6ac8fdb.mp4 +393,T-T4oRgB6_A-574e78a86112ddb3801d46e156b61af0.webm,T-T4oRgB6_A-574e78a86112ddb3801d46e156b61af0.webm,,,,,,,,,,,,,,,,T-T4oRgB6_A-574e78a86112ddb3801d46e156b61af0.webm +395,u4pBH-yCTaQ-4eb258489f8a91dcc90793d3758eeed4.webm,u4pBH-yCTaQ-4eb258489f8a91dcc90793d3758eeed4.webm,,,,,,,,,,,,,,,,u4pBH-yCTaQ-4eb258489f8a91dcc90793d3758eeed4.webm +396,2Fsgh2KHn_8-8c6034af7f8049fdbe3b78d5cba87343.webm,2Fsgh2KHn_8-8c6034af7f8049fdbe3b78d5cba87343.webm,,,,,,,,,,,,,,,,2Fsgh2KHn_8-8c6034af7f8049fdbe3b78d5cba87343.webm +398,vb6jq3jM1cA-915c05edcefd54ebaea0204294f8cdd5.webm,vb6jq3jM1cA-915c05edcefd54ebaea0204294f8cdd5.webm,,,,,,,,,,,,,,,,vb6jq3jM1cA-915c05edcefd54ebaea0204294f8cdd5.webm +399,ekI-_gNJEHc-163e6ba7751b607ba2a6b407cec36552.webm,ekI-_gNJEHc-163e6ba7751b607ba2a6b407cec36552.webm,,,,,,,,,,,,,,,,ekI-_gNJEHc-163e6ba7751b607ba2a6b407cec36552.webm +400,IG83tYRc44Q-d2fccfc9fa5914fa62a041fce6da4756.webm,IG83tYRc44Q-d2fccfc9fa5914fa62a041fce6da4756.webm,,,,,,,,,,,,,,,,IG83tYRc44Q-d2fccfc9fa5914fa62a041fce6da4756.webm +401,0GgISNbPmk8-656b3de1c0df3617469139e8ba73ff5a.mp4,0GgISNbPmk8-656b3de1c0df3617469139e8ba73ff5a.mp4,,,,,,,,,,,,,,,,0GgISNbPmk8-656b3de1c0df3617469139e8ba73ff5a.mp4 +402,oCLB0i2RHWk-11b6a30b05ef282bc67180e14a7255e8.webm,oCLB0i2RHWk-11b6a30b05ef282bc67180e14a7255e8.webm,,,,,,,,,,,,,,,,oCLB0i2RHWk-11b6a30b05ef282bc67180e14a7255e8.webm +403,8jb9xt2zP74-2e8d16513bfefd127c65be308e19a2d0.mp4,8jb9xt2zP74-2e8d16513bfefd127c65be308e19a2d0.mp4,,,,,,,,,,,,,,,,8jb9xt2zP74-2e8d16513bfefd127c65be308e19a2d0.mp4 +404,_5g95MUIieM-7673d38ccc6e268bf6d79e61f388d37b.mp4,_5g95MUIieM-7673d38ccc6e268bf6d79e61f388d37b.mp4,,,,,,,,,,,,,,,,_5g95MUIieM-7673d38ccc6e268bf6d79e61f388d37b.mp4 +405,NtDPmh9PBCE-eb944ef0fd04245361b5270319febe56.mp4,NtDPmh9PBCE-eb944ef0fd04245361b5270319febe56.mp4,,,,,,,,,,,,,,,,NtDPmh9PBCE-eb944ef0fd04245361b5270319febe56.mp4 +406,ypQ7hdbx2EA-266e71b8bdf7177b6a988d6bb0ee5ef0.mp4,ypQ7hdbx2EA-266e71b8bdf7177b6a988d6bb0ee5ef0.mp4,,,,,,,,,,,,,,,,ypQ7hdbx2EA-266e71b8bdf7177b6a988d6bb0ee5ef0.mp4 +407,O9ZvtIq9rn4-e41180013f8099519865b7fbc1d246b3.mp4,O9ZvtIq9rn4-e41180013f8099519865b7fbc1d246b3.mp4,,,,,,,,,,,,,,,,O9ZvtIq9rn4-e41180013f8099519865b7fbc1d246b3.mp4 +408,sp6i1fndknU-9880f02282a447476a349769185b49ea.webm,sp6i1fndknU-9880f02282a447476a349769185b49ea.webm,,,,,,,,,,,,,,,,sp6i1fndknU-9880f02282a447476a349769185b49ea.webm +409,KpMf1xOg9tk-018ac039ceca262883499a0a3acc00d5.webm,KpMf1xOg9tk-018ac039ceca262883499a0a3acc00d5.webm,,,,,,,,,,,,,,,,KpMf1xOg9tk-018ac039ceca262883499a0a3acc00d5.webm +410,IzMlWp3xcc4-def55bf9a085c6bc346a309fbca37f73.webm,IzMlWp3xcc4-def55bf9a085c6bc346a309fbca37f73.webm,,,,,,,,,,,,,,,,IzMlWp3xcc4-def55bf9a085c6bc346a309fbca37f73.webm +411,vut4yhQo4b8-e33055648f45b1fcbfb8904552752a56.webm,vut4yhQo4b8-e33055648f45b1fcbfb8904552752a56.webm,,,,,,,,,,,,,,,,vut4yhQo4b8-e33055648f45b1fcbfb8904552752a56.webm +412,jUDi-NtnAx4-5877d77f42dcfd3efa4f1c8201130189.webm,jUDi-NtnAx4-5877d77f42dcfd3efa4f1c8201130189.webm,,,,,,,,,,,,,,,,jUDi-NtnAx4-5877d77f42dcfd3efa4f1c8201130189.webm +413,SLAPFQbOfn8-a9e5f71712f840303b604cbd919bc771.webm,SLAPFQbOfn8-a9e5f71712f840303b604cbd919bc771.webm,,,,,,,,,,,,,,,,SLAPFQbOfn8-a9e5f71712f840303b604cbd919bc771.webm +414,G_Q9IKbtYOk-7bc3b115458d1ba1798cd7e512a8d6aa.mp4,G_Q9IKbtYOk-7bc3b115458d1ba1798cd7e512a8d6aa.mp4,,,,,,,,,,,,,,,,G_Q9IKbtYOk-7bc3b115458d1ba1798cd7e512a8d6aa.mp4 +415,W6ISoyzUCQY-bfec3862c96783e89b43c5b2fb8ddb96.webm,W6ISoyzUCQY-bfec3862c96783e89b43c5b2fb8ddb96.webm,,,,,,,,,,,,,,,,W6ISoyzUCQY-bfec3862c96783e89b43c5b2fb8ddb96.webm +416,RuVViSGgPxI-4fe210d5d2070424bef985ce616e369c.webm,RuVViSGgPxI-4fe210d5d2070424bef985ce616e369c.webm,,,,,,,,,,,,,,,,RuVViSGgPxI-4fe210d5d2070424bef985ce616e369c.webm +417,je9GU9tK0ns-c2b33450d4d7a69b68939c4e4fdd5275.mp4,je9GU9tK0ns-c2b33450d4d7a69b68939c4e4fdd5275.mp4,,,,,,,,,,,,,,,,je9GU9tK0ns-c2b33450d4d7a69b68939c4e4fdd5275.mp4 +419,FrS3Wf34658-41b8576fc452476d7320064a0f4ebb1c.webm,FrS3Wf34658-41b8576fc452476d7320064a0f4ebb1c.webm,,,,,,,,,,,,,,,,FrS3Wf34658-41b8576fc452476d7320064a0f4ebb1c.webm +420,QbnShTjNwVw-af5aec73718447d90c6903c2956cb990.webm,QbnShTjNwVw-af5aec73718447d90c6903c2956cb990.webm,,,,,,,,,,,,,,,,QbnShTjNwVw-af5aec73718447d90c6903c2956cb990.webm +421,xl4MB7anr_A-ac23eef95b4782762494448a141013d8.mp4,xl4MB7anr_A-ac23eef95b4782762494448a141013d8.mp4,,,,,,,,,,,,,,,,xl4MB7anr_A-ac23eef95b4782762494448a141013d8.mp4 +422,DbE8BzVUWtI-45d3202b54e0f766f5edfac60eaa5757.webm,DbE8BzVUWtI-45d3202b54e0f766f5edfac60eaa5757.webm,,,,,,,,,,,,,,,,DbE8BzVUWtI-45d3202b54e0f766f5edfac60eaa5757.webm +424,Fl7q6uzxGCI-296971cbd124a30c3fc424b2955d4585.mp4,Fl7q6uzxGCI-296971cbd124a30c3fc424b2955d4585.mp4,,,,,,,,,,,,,,,,Fl7q6uzxGCI-296971cbd124a30c3fc424b2955d4585.mp4 +425,XJZXZ61CPu0-f32d630f0339314408c0af48cfa182cd.webm,XJZXZ61CPu0-f32d630f0339314408c0af48cfa182cd.webm,,,,,,,,,,,,,,,,XJZXZ61CPu0-f32d630f0339314408c0af48cfa182cd.webm +426,x2XRIgQTtKI-0acd49b7b659f5c4b4a4384a258092a9.mp4,x2XRIgQTtKI-0acd49b7b659f5c4b4a4384a258092a9.mp4,,,,,,,,,,,,,,,,x2XRIgQTtKI-0acd49b7b659f5c4b4a4384a258092a9.mp4 +427,iLQ5zM5PWeU-34a18b2d534bd2fafa2cf2157a75b40a.mp4,iLQ5zM5PWeU-34a18b2d534bd2fafa2cf2157a75b40a.mp4,,,,,,,,,,,,,,,,iLQ5zM5PWeU-34a18b2d534bd2fafa2cf2157a75b40a.mp4 +428,vuyCq9eMMBA-09e9b0a76ad85760729bdedf4579cdd5.mp4,vuyCq9eMMBA-09e9b0a76ad85760729bdedf4579cdd5.mp4,,,,,,,,,,,,,,,,vuyCq9eMMBA-09e9b0a76ad85760729bdedf4579cdd5.mp4 +429,OfK8Z0BFFas-32d1bebd76d983ba5547cae453aaa184.webm,OfK8Z0BFFas-32d1bebd76d983ba5547cae453aaa184.webm,,,,,,,,,,,,,,,,OfK8Z0BFFas-32d1bebd76d983ba5547cae453aaa184.webm +430,JPvcAKQf8hI-74214a6c9573145bdd6734f36f5d4dfd.webm,JPvcAKQf8hI-74214a6c9573145bdd6734f36f5d4dfd.webm,,,,,,,,,,,,,,,,JPvcAKQf8hI-74214a6c9573145bdd6734f36f5d4dfd.webm +431,pbVxpV-6iXY-37d425cc2cc57414eab5c062a665fc16.webm,pbVxpV-6iXY-37d425cc2cc57414eab5c062a665fc16.webm,,,,,,,,,,,,,,,,pbVxpV-6iXY-37d425cc2cc57414eab5c062a665fc16.webm +432,F0hgeJjHLIk-768461c03ef86e878821e6a49581f45d.webm,F0hgeJjHLIk-768461c03ef86e878821e6a49581f45d.webm,,,,,,,,,,,,,,,,F0hgeJjHLIk-768461c03ef86e878821e6a49581f45d.webm +433,A4m9YvUzG2Y-ed876e1b27995cff531358ca11d7de60.webm,A4m9YvUzG2Y-ed876e1b27995cff531358ca11d7de60.webm,,,,,,,,,,,,,,,,A4m9YvUzG2Y-ed876e1b27995cff531358ca11d7de60.webm +434,TydgPTgAwFU-12da4ee9a51ecd6a4e435ddce063219b.mp4,TydgPTgAwFU-12da4ee9a51ecd6a4e435ddce063219b.mp4,,,,,,,,,,,,,,,,TydgPTgAwFU-12da4ee9a51ecd6a4e435ddce063219b.mp4 +435,JoxsB8x2mSc-f72ea72ee9bf3e8787d9a6498f8ef180.mp4,JoxsB8x2mSc-f72ea72ee9bf3e8787d9a6498f8ef180.mp4,,,,,,,,,,,,,,,,JoxsB8x2mSc-f72ea72ee9bf3e8787d9a6498f8ef180.mp4 +436,GJSNLkfa6YE-7a1701fab7ad27e59a0f0a0256a6c2c2.webm,GJSNLkfa6YE-7a1701fab7ad27e59a0f0a0256a6c2c2.webm,,,,,,,,,,,,,,,,GJSNLkfa6YE-7a1701fab7ad27e59a0f0a0256a6c2c2.webm +437,JEDRVNNQ04g-316b75372bca48c000a71f4f2188998f.webm,JEDRVNNQ04g-316b75372bca48c000a71f4f2188998f.webm,,,,,,,,,,,,,,,,JEDRVNNQ04g-316b75372bca48c000a71f4f2188998f.webm +438,yh5I_voY0Fg-1ecd3571679ed6fdbc338c25819b6644.webm,yh5I_voY0Fg-1ecd3571679ed6fdbc338c25819b6644.webm,,,,,,,,,,,,,,,,yh5I_voY0Fg-1ecd3571679ed6fdbc338c25819b6644.webm +439,gAsKIOn6ytw-29d717d146e43dbe518587cd2b53f3fd.mp4,gAsKIOn6ytw-29d717d146e43dbe518587cd2b53f3fd.mp4,,,,,,,,,,,,,,,,gAsKIOn6ytw-29d717d146e43dbe518587cd2b53f3fd.mp4 +440,bdJssVqgX_Q-f2c80ac1c83da1bc0a2fa9bd9ba14fad.webm,bdJssVqgX_Q-f2c80ac1c83da1bc0a2fa9bd9ba14fad.webm,,,,,,,,,,,,,,,,bdJssVqgX_Q-f2c80ac1c83da1bc0a2fa9bd9ba14fad.webm +441,8zHMHCrLAjk-c895e43d8dc2ade22a71919e7bfac741.webm,8zHMHCrLAjk-c895e43d8dc2ade22a71919e7bfac741.webm,,,,,,,,,,,,,,,,8zHMHCrLAjk-c895e43d8dc2ade22a71919e7bfac741.webm +442,c2KfZIoAVp4-0dec5343796134ac8b01e41c6e6e6853.webm,c2KfZIoAVp4-0dec5343796134ac8b01e41c6e6e6853.webm,,,,,,,,,,,,,,,,c2KfZIoAVp4-0dec5343796134ac8b01e41c6e6e6853.webm +443,sm8rP6konjs-7168356725f5f30687de5c660cb8846e.mp4,sm8rP6konjs-7168356725f5f30687de5c660cb8846e.mp4,,,,,,,,,,,,,,,,sm8rP6konjs-7168356725f5f30687de5c660cb8846e.mp4 +444,GvuFbXDjdDA-919edd515c7934474d3309e5c61e69e2.mp4,GvuFbXDjdDA-919edd515c7934474d3309e5c61e69e2.mp4,,,,,,,,,,,,,,,,GvuFbXDjdDA-919edd515c7934474d3309e5c61e69e2.mp4 +445,lNf39btbESQ-44941213d84309d49a999daf344bc536.webm,lNf39btbESQ-44941213d84309d49a999daf344bc536.webm,,,,,,,,,,,,,,,,lNf39btbESQ-44941213d84309d49a999daf344bc536.webm +446,Rz1ME5tZPMw-d976b78ae2209c9de020a9f8e5746767.mp4,Rz1ME5tZPMw-d976b78ae2209c9de020a9f8e5746767.mp4,,,,,,,,,,,,,,,,Rz1ME5tZPMw-d976b78ae2209c9de020a9f8e5746767.mp4 +447,V4B1oKcLaxQ-ae0b60e43e716ceda3093c37734d9264.webm,V4B1oKcLaxQ-ae0b60e43e716ceda3093c37734d9264.webm,,,,,,,,,,,,,,,,V4B1oKcLaxQ-ae0b60e43e716ceda3093c37734d9264.webm +448,xk8Xoa60sFE-2c3ff073729dbc9e0caced24817518f8.mp4,xk8Xoa60sFE-2c3ff073729dbc9e0caced24817518f8.mp4,,,,,,,,,,,,,,,,xk8Xoa60sFE-2c3ff073729dbc9e0caced24817518f8.mp4 +450,JYQO7uMxra8-c414167d95b29c7fcf4de2734f684207.webm,JYQO7uMxra8-c414167d95b29c7fcf4de2734f684207.webm,,,,,,,,,,,,,,,,JYQO7uMxra8-c414167d95b29c7fcf4de2734f684207.webm +451,mmMPJTM9X5I-c2072199949508a8bc84a022219b61cc.webm,mmMPJTM9X5I-c2072199949508a8bc84a022219b61cc.webm,,,,,,,,,,,,,,,,mmMPJTM9X5I-c2072199949508a8bc84a022219b61cc.webm +452,lnZNiivm2zU-e1caaa59e5479f037914e52e0893cc6e.mp4,lnZNiivm2zU-e1caaa59e5479f037914e52e0893cc6e.mp4,,,,,,,,,,,,,,,,lnZNiivm2zU-e1caaa59e5479f037914e52e0893cc6e.mp4 +453,gfU9SzCC5Bo-711bef0c53c21b4cdc137f226da2ca72.mp4,gfU9SzCC5Bo-711bef0c53c21b4cdc137f226da2ca72.mp4,,,,,,,,,,,,,,,,gfU9SzCC5Bo-711bef0c53c21b4cdc137f226da2ca72.mp4 +454,HGHgnvILnZI-922d330e54db7110ffe5016b7301d915.mp4,HGHgnvILnZI-922d330e54db7110ffe5016b7301d915.mp4,,,,,,,,,,,,,,,,HGHgnvILnZI-922d330e54db7110ffe5016b7301d915.mp4 +455,IjFsDQgR1X0-08a4e89fdb2be3b839212be53a174f60.webm,IjFsDQgR1X0-08a4e89fdb2be3b839212be53a174f60.webm,,,,,,,,,,,,,,,,IjFsDQgR1X0-08a4e89fdb2be3b839212be53a174f60.webm +456,nkH4V6d_Xsg-441ca599b01921020cf6260368ddb893.mp4,nkH4V6d_Xsg-441ca599b01921020cf6260368ddb893.mp4,,,,,,,,,,,,,,,,nkH4V6d_Xsg-441ca599b01921020cf6260368ddb893.mp4 +458,nlNUUreK_lM-adb085de6598dc2b69bc81ee90ec67bd.webm,nlNUUreK_lM-adb085de6598dc2b69bc81ee90ec67bd.webm,,,,,,,,,,,,,,,,nlNUUreK_lM-adb085de6598dc2b69bc81ee90ec67bd.webm +459,_HQKxi7Iyuk-17bc76cc46c05e15da65ddb8d0454ed7.mp4,_HQKxi7Iyuk-17bc76cc46c05e15da65ddb8d0454ed7.mp4,,,,,,,,,,,,,,,,_HQKxi7Iyuk-17bc76cc46c05e15da65ddb8d0454ed7.mp4 +460,XHmMM-EUsNA-f1227951ad5f8e2b4f57c1f2ad7f9045.mp4,XHmMM-EUsNA-f1227951ad5f8e2b4f57c1f2ad7f9045.mp4,,,,,,,,,,,,,,,,XHmMM-EUsNA-f1227951ad5f8e2b4f57c1f2ad7f9045.mp4 +462,NyCFbQBgKjA-942e95aca4f9280a94f34799d37f2807.webm,NyCFbQBgKjA-942e95aca4f9280a94f34799d37f2807.webm,,,,,,,,,,,,,,,,NyCFbQBgKjA-942e95aca4f9280a94f34799d37f2807.webm +463,aOLk5KFvBPg-431908978221bd01fd18ed378bc0702b.webm,aOLk5KFvBPg-431908978221bd01fd18ed378bc0702b.webm,,,,,,,,,,,,,,,,aOLk5KFvBPg-431908978221bd01fd18ed378bc0702b.webm +466,Bcrfdyga3vo-bc2beadaadbddfe606957549484a4baf.webm,Bcrfdyga3vo-bc2beadaadbddfe606957549484a4baf.webm,,,,,,,,,,,,,,,,Bcrfdyga3vo-bc2beadaadbddfe606957549484a4baf.webm +467,Px0iqMAArD4-07ade9484aa59f4b5ca44ee4436240c0.webm,Px0iqMAArD4-07ade9484aa59f4b5ca44ee4436240c0.webm,,,,,,,,,,,,,,,,Px0iqMAArD4-07ade9484aa59f4b5ca44ee4436240c0.webm +468,B61wJhb0Gfc-558c34edfdb7190e6b75563113e45bb8.webm,B61wJhb0Gfc-558c34edfdb7190e6b75563113e45bb8.webm,,,,,,,,,,,,,,,,B61wJhb0Gfc-558c34edfdb7190e6b75563113e45bb8.webm +471,qFZ-54LwQtM-2e114547759e503204fd8f6ebc79aac3.webm,qFZ-54LwQtM-2e114547759e503204fd8f6ebc79aac3.webm,,,,,,,,,,,,,,,,qFZ-54LwQtM-2e114547759e503204fd8f6ebc79aac3.webm +472,wl0z6BGFCIc-d08a2970beedf79f18b8554377e1536f.webm,wl0z6BGFCIc-d08a2970beedf79f18b8554377e1536f.webm,,,,,,,,,,,,,,,,wl0z6BGFCIc-d08a2970beedf79f18b8554377e1536f.webm +473,R1WilFnYuUQ-48093d0372477e02b4729e5b123878a3.webm,R1WilFnYuUQ-48093d0372477e02b4729e5b123878a3.webm,,,,,,,,,,,,,,,,R1WilFnYuUQ-48093d0372477e02b4729e5b123878a3.webm +474,rB2QYe2Pw78-0e9a43c3890ead9b3d1aaa29282affb2.webm,rB2QYe2Pw78-0e9a43c3890ead9b3d1aaa29282affb2.webm,,,,,,,,,,,,,,,,rB2QYe2Pw78-0e9a43c3890ead9b3d1aaa29282affb2.webm +477,dChPAZggkE4-53bbdf18413ae8f848d638d338865192.webm,dChPAZggkE4-53bbdf18413ae8f848d638d338865192.webm,,,,,,,,,,,,,,,,dChPAZggkE4-53bbdf18413ae8f848d638d338865192.webm +478,h7jPCgyLA10-7c86bb643a328c155b86d83c25c2d009.mp4,h7jPCgyLA10-7c86bb643a328c155b86d83c25c2d009.mp4,,,,,,,,,,,,,,,,h7jPCgyLA10-7c86bb643a328c155b86d83c25c2d009.mp4 +479,9eMeb5dvY-U-4ac3eee6141f5d57966534046b70fbaa.webm,9eMeb5dvY-U-4ac3eee6141f5d57966534046b70fbaa.webm,,,,,,,,,,,,,,,,9eMeb5dvY-U-4ac3eee6141f5d57966534046b70fbaa.webm +480,XHV60Kr9n7E-1c439b01e88338034c68745ca6235a47.mp4,XHV60Kr9n7E-1c439b01e88338034c68745ca6235a47.mp4,,,,,,,,,,,,,,,,XHV60Kr9n7E-1c439b01e88338034c68745ca6235a47.mp4 +481,8aF9LVRF6vc-ad829e208c5faccbf4e34700e4ff57be.webm,8aF9LVRF6vc-ad829e208c5faccbf4e34700e4ff57be.webm,,,,,,,,,,,,,,,,8aF9LVRF6vc-ad829e208c5faccbf4e34700e4ff57be.webm +482,uvikkyNIhHA-d9575536ba02ebf0dbcf4f80db176700.mp4,uvikkyNIhHA-d9575536ba02ebf0dbcf4f80db176700.mp4,,,,,,,,,,,,,,,,uvikkyNIhHA-d9575536ba02ebf0dbcf4f80db176700.mp4 +483,jO6ZXTWX-PA-489942194feef43d0c998f13255ecc32.mp4,jO6ZXTWX-PA-489942194feef43d0c998f13255ecc32.mp4,,,,,,,,,,,,,,,,jO6ZXTWX-PA-489942194feef43d0c998f13255ecc32.mp4 +484,WPlemPk0ftQ-7fd469b3130c7cd1a622b7dbad4284bc.mp4,WPlemPk0ftQ-7fd469b3130c7cd1a622b7dbad4284bc.mp4,,,,,,,,,,,,,,,,WPlemPk0ftQ-7fd469b3130c7cd1a622b7dbad4284bc.mp4 +485,yECKCuEiYc4-20fe4ed4c0e7f4e0fed01eb7cc66f377.mp4,yECKCuEiYc4-20fe4ed4c0e7f4e0fed01eb7cc66f377.mp4,,,,,,,,,,,,,,,,yECKCuEiYc4-20fe4ed4c0e7f4e0fed01eb7cc66f377.mp4 +486,vt7th4jeBK8-627f8ce674f6a5346f00256145fa1297.webm,vt7th4jeBK8-627f8ce674f6a5346f00256145fa1297.webm,,,,,,,,,,,,,,,,vt7th4jeBK8-627f8ce674f6a5346f00256145fa1297.webm +487,9yJDBdZskU8-25e6bf17dbfd875dc5b817d08b2436a6.mp4,9yJDBdZskU8-25e6bf17dbfd875dc5b817d08b2436a6.mp4,,,,,,,,,,,,,,,,9yJDBdZskU8-25e6bf17dbfd875dc5b817d08b2436a6.mp4 +488,3OsNbYCMoC0-fc57dac34999dd1bd3019287d793655f.webm,3OsNbYCMoC0-fc57dac34999dd1bd3019287d793655f.webm,,,,,,,,,,,,,,,,3OsNbYCMoC0-fc57dac34999dd1bd3019287d793655f.webm +491,D6R-K0gmRGQ-f1c737c6a9852390383cc9cd398d80f1.webm,D6R-K0gmRGQ-f1c737c6a9852390383cc9cd398d80f1.webm,,,,,,,,,,,,,,,,D6R-K0gmRGQ-f1c737c6a9852390383cc9cd398d80f1.webm +492,dB3BipcKT18-6ad3ac638df02f30356841a4d379a936.webm,dB3BipcKT18-6ad3ac638df02f30356841a4d379a936.webm,,,,,,,,,,,,,,,,dB3BipcKT18-6ad3ac638df02f30356841a4d379a936.webm +496,ERZ7eVcHf98-96cdbed3dc0b1ebb58606fd77d7c786e.webm,ERZ7eVcHf98-96cdbed3dc0b1ebb58606fd77d7c786e.webm,,,,,,,,,,,,,,,,ERZ7eVcHf98-96cdbed3dc0b1ebb58606fd77d7c786e.webm +497,hRirIhg7HX4-f8d4b026b44dc812c625d2f08a16140b.webm,hRirIhg7HX4-f8d4b026b44dc812c625d2f08a16140b.webm,,,,,,,,,,,,,,,,hRirIhg7HX4-f8d4b026b44dc812c625d2f08a16140b.webm +498,O7m3wNrL-pI-6e198da9df51d4933596f886931783b0.webm,O7m3wNrL-pI-6e198da9df51d4933596f886931783b0.webm,,,,,,,,,,,,,,,,O7m3wNrL-pI-6e198da9df51d4933596f886931783b0.webm +499,JB5W9Wb5Ve8-45e561ddb6fb58151716e8da2c9e022e.webm,JB5W9Wb5Ve8-45e561ddb6fb58151716e8da2c9e022e.webm,,,,,,,,,,,,,,,,JB5W9Wb5Ve8-45e561ddb6fb58151716e8da2c9e022e.webm +500,CkpVlQLYt0g-22f26b2099da56820ac8cbfbf64a16b4.webm,CkpVlQLYt0g-22f26b2099da56820ac8cbfbf64a16b4.webm,,,,,,,,,,,,,,,,CkpVlQLYt0g-22f26b2099da56820ac8cbfbf64a16b4.webm +502,Cz9ereqWQVE-33e884b9d907920a83ff2c3bc2fa112e.mp4,Cz9ereqWQVE-33e884b9d907920a83ff2c3bc2fa112e.mp4,,,,,,,,,,,,,,,,Cz9ereqWQVE-33e884b9d907920a83ff2c3bc2fa112e.mp4 +503,0goLSbEpolg-8d53742c0ba79eb83eb37207c0b084ce.mp4,0goLSbEpolg-8d53742c0ba79eb83eb37207c0b084ce.mp4,,,,,,,,,,,,,,,,0goLSbEpolg-8d53742c0ba79eb83eb37207c0b084ce.mp4 +504,ORjJjJUSfW4-941a0a22d27b49fb3d0aa7a26f6180d1.webm,ORjJjJUSfW4-941a0a22d27b49fb3d0aa7a26f6180d1.webm,,,,,,,,,,,,,,,,ORjJjJUSfW4-941a0a22d27b49fb3d0aa7a26f6180d1.webm +505,p0664U-VYRo-6f9100ef8d86d5a12bc819c44d4473ee.webm,p0664U-VYRo-6f9100ef8d86d5a12bc819c44d4473ee.webm,,,,,,,,,,,,,,,,p0664U-VYRo-6f9100ef8d86d5a12bc819c44d4473ee.webm +506,_bja8VCDY_w-129f9c4b34cfe6227d4311231e08ee3f.mp4,_bja8VCDY_w-129f9c4b34cfe6227d4311231e08ee3f.mp4,,,,,,,,,,,,,,,,_bja8VCDY_w-129f9c4b34cfe6227d4311231e08ee3f.mp4 +507,P1Jdarrk7X8-0225e067ce07d3e82c9daccf9367f0cf.webm,P1Jdarrk7X8-0225e067ce07d3e82c9daccf9367f0cf.webm,,,,,,,,,,,,,,,,P1Jdarrk7X8-0225e067ce07d3e82c9daccf9367f0cf.webm +508,lLmYNtndH0Y-7c2d35cf7d388a07f444e76984e38742.webm,lLmYNtndH0Y-7c2d35cf7d388a07f444e76984e38742.webm,,,,,,,,,,,,,,,,lLmYNtndH0Y-7c2d35cf7d388a07f444e76984e38742.webm +509,2JlR1FpSH4M-bda8002972be1d3438a86f04834f1523.webm,2JlR1FpSH4M-bda8002972be1d3438a86f04834f1523.webm,,,,,,,,,,,,,,,,2JlR1FpSH4M-bda8002972be1d3438a86f04834f1523.webm +510,QIzN3GKKAo0-6e03778c5634f4e7f56203307c3809e7.webm,QIzN3GKKAo0-6e03778c5634f4e7f56203307c3809e7.webm,,,,,,,,,,,,,,,,QIzN3GKKAo0-6e03778c5634f4e7f56203307c3809e7.webm +511,4HGQwL6CsXk-108028ed767de4135aadf847d4c72c83.webm,4HGQwL6CsXk-108028ed767de4135aadf847d4c72c83.webm,,,,,,,,,,,,,,,,4HGQwL6CsXk-108028ed767de4135aadf847d4c72c83.webm +512,r0jAeJl7vWE-25e374a0f25dd53cbc0e49fc37a53ad6.mp4,r0jAeJl7vWE-25e374a0f25dd53cbc0e49fc37a53ad6.mp4,,,,,,,,,,,,,,,,r0jAeJl7vWE-25e374a0f25dd53cbc0e49fc37a53ad6.mp4 +513,gAEjIoeLyvE-d2c1fb6351a9539fab265234d4aaded3.webm,gAEjIoeLyvE-d2c1fb6351a9539fab265234d4aaded3.webm,,,,,,,,,,,,,,,,gAEjIoeLyvE-d2c1fb6351a9539fab265234d4aaded3.webm +514,O264FXQRe14-aab283f9db8fbb99c501420354ed7b8c.webm,O264FXQRe14-aab283f9db8fbb99c501420354ed7b8c.webm,,,,,,,,,,,,,,,,O264FXQRe14-aab283f9db8fbb99c501420354ed7b8c.webm +515,58bdCW1mLro-802a0899b24bf89b4a005996315c09fc.webm,58bdCW1mLro-802a0899b24bf89b4a005996315c09fc.webm,,,,,,,,,,,,,,,,58bdCW1mLro-802a0899b24bf89b4a005996315c09fc.webm +516,EjIq9RVVhpk-9550a4ab38bb57b67621800486c4abcd.mp4,EjIq9RVVhpk-9550a4ab38bb57b67621800486c4abcd.mp4,,,,,,,,,,,,,,,,EjIq9RVVhpk-9550a4ab38bb57b67621800486c4abcd.mp4 +517,JyzCf9bdMfQ-f5639813d2473c54860145bdf94f9397.webm,JyzCf9bdMfQ-f5639813d2473c54860145bdf94f9397.webm,,,,,,,,,,,,,,,,JyzCf9bdMfQ-f5639813d2473c54860145bdf94f9397.webm +519,nj2rodAwxMU-6b7ff9e467e230892e4cf4cd8abbbedc.mp4,nj2rodAwxMU-6b7ff9e467e230892e4cf4cd8abbbedc.mp4,,,,,,,,,,,,,,,,nj2rodAwxMU-6b7ff9e467e230892e4cf4cd8abbbedc.mp4 +522,rb5iOiuTmK0-6069b21dbc5ec74742a663cdcc0d2cf6.webm,rb5iOiuTmK0-6069b21dbc5ec74742a663cdcc0d2cf6.webm,,,,,,,,,,,,,,,,rb5iOiuTmK0-6069b21dbc5ec74742a663cdcc0d2cf6.webm +525,qOlPaZLRtMg-6fc8e3e57436238595d4240bc43b0c23.mp4,qOlPaZLRtMg-6fc8e3e57436238595d4240bc43b0c23.mp4,,,,,,,,,,,,,,,,qOlPaZLRtMg-6fc8e3e57436238595d4240bc43b0c23.mp4 +526,AUHEtU7jY2Y-3c303dc17c459969e569fd69fd177d5f.webm,AUHEtU7jY2Y-3c303dc17c459969e569fd69fd177d5f.webm,,,,,,,,,,,,,,,,AUHEtU7jY2Y-3c303dc17c459969e569fd69fd177d5f.webm +527,4hUEzMxmCYs-062ed9380b05490ac97d6c23e0718e92.webm,4hUEzMxmCYs-062ed9380b05490ac97d6c23e0718e92.webm,,,,,,,,,,,,,,,,4hUEzMxmCYs-062ed9380b05490ac97d6c23e0718e92.webm +528,LN5dkJjCHbI-6d0b8ef99bb7e909c81166849150fb35.mp4,LN5dkJjCHbI-6d0b8ef99bb7e909c81166849150fb35.mp4,,,,,,,,,,,,,,,,LN5dkJjCHbI-6d0b8ef99bb7e909c81166849150fb35.mp4 +529,c1MwCB34iwg-5bc15a3f4341acf9832dbed3e94468c5.webm,c1MwCB34iwg-5bc15a3f4341acf9832dbed3e94468c5.webm,,,,,,,,,,,,,,,,c1MwCB34iwg-5bc15a3f4341acf9832dbed3e94468c5.webm +530,jzJN1eJ_lvE-ab16a9af3b85d4a8cf764b5759984b11.mp4,jzJN1eJ_lvE-ab16a9af3b85d4a8cf764b5759984b11.mp4,,,,,,,,,,,,,,,,jzJN1eJ_lvE-ab16a9af3b85d4a8cf764b5759984b11.mp4 +531,9caZ56dTr4g-c526204af5569b1cc3dde506d629917c.webm,9caZ56dTr4g-c526204af5569b1cc3dde506d629917c.webm,,,,,,,,,,,,,,,,9caZ56dTr4g-c526204af5569b1cc3dde506d629917c.webm +532,jiYbjO64a1I-bac2a311804d2cc3d4b9fe5505aec298.webm,jiYbjO64a1I-bac2a311804d2cc3d4b9fe5505aec298.webm,,,,,,,,,,,,,,,,jiYbjO64a1I-bac2a311804d2cc3d4b9fe5505aec298.webm +533,EGAk_Rp1wZI-f9103012b1b769e1605f2d5c0b236ddc.webm,EGAk_Rp1wZI-f9103012b1b769e1605f2d5c0b236ddc.webm,,,,,,,,,,,,,,,,EGAk_Rp1wZI-f9103012b1b769e1605f2d5c0b236ddc.webm +534,rzFZJfw2OKo-2082be60e0ab92d53b0844124d48a8d0.webm,rzFZJfw2OKo-2082be60e0ab92d53b0844124d48a8d0.webm,,,,,,,,,,,,,,,,rzFZJfw2OKo-2082be60e0ab92d53b0844124d48a8d0.webm +535,q-ekh4_bbzo-91ebd6f3313caefbe5975ad045d07c0e.webm,q-ekh4_bbzo-91ebd6f3313caefbe5975ad045d07c0e.webm,,,,,,,,,,,,,,,,q-ekh4_bbzo-91ebd6f3313caefbe5975ad045d07c0e.webm +536,NfMXjiiA6JU-401ff8fef9a7fe05550a1264cd5e1c43.webm,NfMXjiiA6JU-401ff8fef9a7fe05550a1264cd5e1c43.webm,,,,,,,,,,,,,,,,NfMXjiiA6JU-401ff8fef9a7fe05550a1264cd5e1c43.webm +537,X7eb1WHouHw-f9bca7a0c8c289d27d8d158f953e2f3f.webm,X7eb1WHouHw-f9bca7a0c8c289d27d8d158f953e2f3f.webm,,,,,,,,,,,,,,,,X7eb1WHouHw-f9bca7a0c8c289d27d8d158f953e2f3f.webm +538,NMxf6GCrgvQ-824ccc00694a1ab698c5e88334f00a87.webm,NMxf6GCrgvQ-824ccc00694a1ab698c5e88334f00a87.webm,,,,,,,,,,,,,,,,NMxf6GCrgvQ-824ccc00694a1ab698c5e88334f00a87.webm +539,0xQosAALDLc-8ad8b422a7472e8128890756d6eb2e73.webm,0xQosAALDLc-8ad8b422a7472e8128890756d6eb2e73.webm,,,,,,,,,,,,,,,,0xQosAALDLc-8ad8b422a7472e8128890756d6eb2e73.webm +540,gnojCWlL6fw-fde2cd8629469229145e56b5308a8021.mp4,gnojCWlL6fw-fde2cd8629469229145e56b5308a8021.mp4,,,,,,,,,,,,,,,,gnojCWlL6fw-fde2cd8629469229145e56b5308a8021.mp4 +542,ao_H7nyHWQw-2ec745a455cb2640b5e26f5e59d94510.webm,ao_H7nyHWQw-2ec745a455cb2640b5e26f5e59d94510.webm,,,,,,,,,,,,,,,,ao_H7nyHWQw-2ec745a455cb2640b5e26f5e59d94510.webm +543,e84l_RZBW4Y-d31a453af94432d39f3c9d853a853b30.webm,e84l_RZBW4Y-d31a453af94432d39f3c9d853a853b30.webm,,,,,,,,,,,,,,,,e84l_RZBW4Y-d31a453af94432d39f3c9d853a853b30.webm +544,mi4bG38VJug-1bb419703e70a24b06f64b1f8781eec5.webm,mi4bG38VJug-1bb419703e70a24b06f64b1f8781eec5.webm,,,,,,,,,,,,,,,,mi4bG38VJug-1bb419703e70a24b06f64b1f8781eec5.webm +545,4DKlb4lD410-351cd6ce192ffb3026da9a324540d78a.mp4,4DKlb4lD410-351cd6ce192ffb3026da9a324540d78a.mp4,,,,,,,,,,,,,,,,4DKlb4lD410-351cd6ce192ffb3026da9a324540d78a.mp4 +546,l4fMkZYFePo-3756654a74f17b494c234f6fd5e1975f.mp4,l4fMkZYFePo-3756654a74f17b494c234f6fd5e1975f.mp4,,,,,,,,,,,,,,,,l4fMkZYFePo-3756654a74f17b494c234f6fd5e1975f.mp4 +549,EJR-g-4eGEc-023ec07ea29583059af0bd5964976df6.webm,EJR-g-4eGEc-023ec07ea29583059af0bd5964976df6.webm,,,,,,,,,,,,,,,,EJR-g-4eGEc-023ec07ea29583059af0bd5964976df6.webm +550,_kDvOThYp1g-b71a7ce85885f3c76e5915b1df512be9.mp4,_kDvOThYp1g-b71a7ce85885f3c76e5915b1df512be9.mp4,,,,,,,,,,,,,,,,_kDvOThYp1g-b71a7ce85885f3c76e5915b1df512be9.mp4 +551,dbIEdidKovg-ad056568cb09c929db9b6341ba1d3494.webm,dbIEdidKovg-ad056568cb09c929db9b6341ba1d3494.webm,,,,,,,,,,,,,,,,dbIEdidKovg-ad056568cb09c929db9b6341ba1d3494.webm +552,jr6oGoqDEfI-8842ae65a03a5bdb8c23e78509adb4b1.mp4,jr6oGoqDEfI-8842ae65a03a5bdb8c23e78509adb4b1.mp4,,,,,,,,,,,,,,,,jr6oGoqDEfI-8842ae65a03a5bdb8c23e78509adb4b1.mp4 +553,3WtZXE8HLDg-0af10d7d5c429867d07681d034fa4caa.webm,3WtZXE8HLDg-0af10d7d5c429867d07681d034fa4caa.webm,,,,,,,,,,,,,,,,3WtZXE8HLDg-0af10d7d5c429867d07681d034fa4caa.webm +554,DWwIMMtNw60-446e71ef73f77ea7330b4fcdf7d54309.webm,DWwIMMtNw60-446e71ef73f77ea7330b4fcdf7d54309.webm,,,,,,,,,,,,,,,,DWwIMMtNw60-446e71ef73f77ea7330b4fcdf7d54309.webm +555,7ngFiRrvAFs-a33ba1d3d7936002bc099d8e4ad3c44e.mp4,7ngFiRrvAFs-a33ba1d3d7936002bc099d8e4ad3c44e.mp4,,,,,,,,,,,,,,,,7ngFiRrvAFs-a33ba1d3d7936002bc099d8e4ad3c44e.mp4 +556,Lkh1fT6OMOo-939994a91f9fb35aacb977ba1f6b78f7.webm,Lkh1fT6OMOo-939994a91f9fb35aacb977ba1f6b78f7.webm,,,,,,,,,,,,,,,,Lkh1fT6OMOo-939994a91f9fb35aacb977ba1f6b78f7.webm +557,H0kWizbGIao-77032a49d1b57acd73c467aeec1b7c65.mp4,H0kWizbGIao-77032a49d1b57acd73c467aeec1b7c65.mp4,,,,,,,,,,,,,,,,H0kWizbGIao-77032a49d1b57acd73c467aeec1b7c65.mp4 +558,kxqEZG4VCQA-dcce1eaca5a97099bbc5597dce604bde.webm,kxqEZG4VCQA-dcce1eaca5a97099bbc5597dce604bde.webm,,,,,,,,,,,,,,,,kxqEZG4VCQA-dcce1eaca5a97099bbc5597dce604bde.webm +559,W0QprHNmYGI-8918c4b39c36c435a0a33b93fe46fc9e.webm,W0QprHNmYGI-8918c4b39c36c435a0a33b93fe46fc9e.webm,,,,,,,,,,,,,,,,W0QprHNmYGI-8918c4b39c36c435a0a33b93fe46fc9e.webm +563,1UajnjfgjMg-9f03c38af8c69c9d6bd598201796b44f.webm,1UajnjfgjMg-9f03c38af8c69c9d6bd598201796b44f.webm,,,,,,,,,,,,,,,,1UajnjfgjMg-9f03c38af8c69c9d6bd598201796b44f.webm +564,lMIQeK1vuuQ-86e0ea8346004be7adaee10a096e7362.webm,lMIQeK1vuuQ-86e0ea8346004be7adaee10a096e7362.webm,,,,,,,,,,,,,,,,lMIQeK1vuuQ-86e0ea8346004be7adaee10a096e7362.webm +566,odExe1ZBgi0-9f898cc06b5fa2d1bf2caa7b974edda8.webm,odExe1ZBgi0-9f898cc06b5fa2d1bf2caa7b974edda8.webm,,,,,,,,,,,,,,,,odExe1ZBgi0-9f898cc06b5fa2d1bf2caa7b974edda8.webm +567,OGGncNPCjWo-87c37204e906d0a9267d31672462c24b.webm,OGGncNPCjWo-87c37204e906d0a9267d31672462c24b.webm,,,,,,,,,,,,,,,,OGGncNPCjWo-87c37204e906d0a9267d31672462c24b.webm +568,EJlIxAWQIjM-8a6fb186297c12699465f75caa89d0a5.mp4,EJlIxAWQIjM-8a6fb186297c12699465f75caa89d0a5.mp4,,,,,,,,,,,,,,,,EJlIxAWQIjM-8a6fb186297c12699465f75caa89d0a5.mp4 +569,kzsKTdTOv-A-c28eae2362c8dae45c36042ec930f196.mp4,kzsKTdTOv-A-c28eae2362c8dae45c36042ec930f196.mp4,,,,,,,,,,,,,,,,kzsKTdTOv-A-c28eae2362c8dae45c36042ec930f196.mp4 +570,mJiRLtIa39k-3e4f57a60b7d80e21595fb35ecaea07e.mp4,mJiRLtIa39k-3e4f57a60b7d80e21595fb35ecaea07e.mp4,,,,,,,,,,,,,,,,mJiRLtIa39k-3e4f57a60b7d80e21595fb35ecaea07e.mp4 +571,SjymYuy1ASU-e0b136860bc245bd30e7d1b7c902a6a3.mp4,SjymYuy1ASU-e0b136860bc245bd30e7d1b7c902a6a3.mp4,,,,,,,,,,,,,,,,SjymYuy1ASU-e0b136860bc245bd30e7d1b7c902a6a3.mp4 +572,Xaj3LhIY07s-a13fcb07fd13e3f63bde9bda6dd55f13.webm,Xaj3LhIY07s-a13fcb07fd13e3f63bde9bda6dd55f13.webm,,,,,,,,,,,,,,,,Xaj3LhIY07s-a13fcb07fd13e3f63bde9bda6dd55f13.webm +573,K8tDOvECLFQ-79d4417bfe8c36ff52a37a0049252c3e.webm,K8tDOvECLFQ-79d4417bfe8c36ff52a37a0049252c3e.webm,,,,,,,,,,,,,,,,K8tDOvECLFQ-79d4417bfe8c36ff52a37a0049252c3e.webm +575,OezdtG_Ps0U-8967cd5ea255be16fccd4508e5d4decc.webm,OezdtG_Ps0U-8967cd5ea255be16fccd4508e5d4decc.webm,,,,,,,,,,,,,,,,OezdtG_Ps0U-8967cd5ea255be16fccd4508e5d4decc.webm +576,TnipjVf-gqA-0953772f6c5d43e7a3ee08b649a18aa9.webm,TnipjVf-gqA-0953772f6c5d43e7a3ee08b649a18aa9.webm,,,,,,,,,,,,,,,,TnipjVf-gqA-0953772f6c5d43e7a3ee08b649a18aa9.webm +577,uiTSFmwD9y4-a899ea78596f5f8d0a3894c89c1a4d63.webm,uiTSFmwD9y4-a899ea78596f5f8d0a3894c89c1a4d63.webm,,,,,,,,,,,,,,,,uiTSFmwD9y4-a899ea78596f5f8d0a3894c89c1a4d63.webm +578,fVRkMzmWBDI-b62bd7c7eec1120a15e8dd9ec9774c18.mp4,fVRkMzmWBDI-b62bd7c7eec1120a15e8dd9ec9774c18.mp4,,,,,,,,,,,,,,,,fVRkMzmWBDI-b62bd7c7eec1120a15e8dd9ec9774c18.mp4 +579,s3zLaxjmuvo-d452d82fd630fedadbf5c7c0a0ffefaf.webm,s3zLaxjmuvo-d452d82fd630fedadbf5c7c0a0ffefaf.webm,,,,,,,,,,,,,,,,s3zLaxjmuvo-d452d82fd630fedadbf5c7c0a0ffefaf.webm +581,8G48DCy66VM-7e59416fd74d85643fe9f32254df30c8.mp4,8G48DCy66VM-7e59416fd74d85643fe9f32254df30c8.mp4,,,,,,,,,,,,,,,,8G48DCy66VM-7e59416fd74d85643fe9f32254df30c8.mp4 +582,8RSmLgd4Kx0-5f5665c5926f894124c96c1b7098f14b.mp4,8RSmLgd4Kx0-5f5665c5926f894124c96c1b7098f14b.mp4,,,,,,,,,,,,,,,,8RSmLgd4Kx0-5f5665c5926f894124c96c1b7098f14b.mp4 +583,7LUkM6SDIjM-f50e81d735b85d29a0facb3606595d30.webm,7LUkM6SDIjM-f50e81d735b85d29a0facb3606595d30.webm,,,,,,,,,,,,,,,,7LUkM6SDIjM-f50e81d735b85d29a0facb3606595d30.webm +584,PJEBMgFK7hA-55e6178eb9e5fd0976a0b3c5697e77c0.webm,PJEBMgFK7hA-55e6178eb9e5fd0976a0b3c5697e77c0.webm,,,,,,,,,,,,,,,,PJEBMgFK7hA-55e6178eb9e5fd0976a0b3c5697e77c0.webm +585,c0glP-pS2uI-41c196ad9f16ea38ebcb8c5328567837.mp4,c0glP-pS2uI-41c196ad9f16ea38ebcb8c5328567837.mp4,,,,,,,,,,,,,,,,c0glP-pS2uI-41c196ad9f16ea38ebcb8c5328567837.mp4 +586,qRP6ruit2mA-4ed8299d892230b0c96dc5ecce67f7ae.webm,qRP6ruit2mA-4ed8299d892230b0c96dc5ecce67f7ae.webm,,,,,,,,,,,,,,,,qRP6ruit2mA-4ed8299d892230b0c96dc5ecce67f7ae.webm +587,n3L7sLi7e8U-fee398e341640a0b5b3386f0d0406899.webm,n3L7sLi7e8U-fee398e341640a0b5b3386f0d0406899.webm,,,,,,,,,,,,,,,,n3L7sLi7e8U-fee398e341640a0b5b3386f0d0406899.webm +588,hyVkqP13CIQ-51cae72eb6402ff451941044a23869b3.mp4,hyVkqP13CIQ-51cae72eb6402ff451941044a23869b3.mp4,,,,,,,,,,,,,,,,hyVkqP13CIQ-51cae72eb6402ff451941044a23869b3.mp4 +590,p0qSbXU07Gk-948f04b828f0fe6444c6219b688de252.webm,p0qSbXU07Gk-948f04b828f0fe6444c6219b688de252.webm,,,,,,,,,,,,,,,,p0qSbXU07Gk-948f04b828f0fe6444c6219b688de252.webm +591,WstrVrhuqNg-83b30626571d85cc86a59eb48eb549b5.webm,WstrVrhuqNg-83b30626571d85cc86a59eb48eb549b5.webm,,,,,,,,,,,,,,,,WstrVrhuqNg-83b30626571d85cc86a59eb48eb549b5.webm +592,poM2P1nx-qE-1829fa2c50fd1102ab3f2cb8e772819c.webm,poM2P1nx-qE-1829fa2c50fd1102ab3f2cb8e772819c.webm,,,,,,,,,,,,,,,,poM2P1nx-qE-1829fa2c50fd1102ab3f2cb8e772819c.webm +593,xZ-J-7JYA-k-0450ba787f460134f321dc0761a8ede7.webm,xZ-J-7JYA-k-0450ba787f460134f321dc0761a8ede7.webm,,,,,,,,,,,,,,,,xZ-J-7JYA-k-0450ba787f460134f321dc0761a8ede7.webm +594,cExnmHA2_pA-20c67d49bca31877a4e6ee84b039d687.webm,cExnmHA2_pA-20c67d49bca31877a4e6ee84b039d687.webm,,,,,,,,,,,,,,,,cExnmHA2_pA-20c67d49bca31877a4e6ee84b039d687.webm +596,p-xC_4xaT_0-39e35704f8a10b822d027d3565ae6dc4.webm,p-xC_4xaT_0-39e35704f8a10b822d027d3565ae6dc4.webm,,,,,,,,,,,,,,,,p-xC_4xaT_0-39e35704f8a10b822d027d3565ae6dc4.webm +598,XEHiN755kZA-96efbc35cd781fb5cff83220910c1a77.webm,XEHiN755kZA-96efbc35cd781fb5cff83220910c1a77.webm,,,,,,,,,,,,,,,,XEHiN755kZA-96efbc35cd781fb5cff83220910c1a77.webm +599,U0jytcVyiXY-265790baf0f82c58ac338c45b2dedb16.mp4,U0jytcVyiXY-265790baf0f82c58ac338c45b2dedb16.mp4,,,,,,,,,,,,,,,,U0jytcVyiXY-265790baf0f82c58ac338c45b2dedb16.mp4 +600,V7nmuQaxizo-c77f8baf432dfa09c8ffb621f3af1390.webm,V7nmuQaxizo-c77f8baf432dfa09c8ffb621f3af1390.webm,,,,,,,,,,,,,,,,V7nmuQaxizo-c77f8baf432dfa09c8ffb621f3af1390.webm +602,GWExHybVuXE-230a936fed2edc73b1076ddf492a74cb.mp4,GWExHybVuXE-230a936fed2edc73b1076ddf492a74cb.mp4,,,,,,,,,,,,,,,,GWExHybVuXE-230a936fed2edc73b1076ddf492a74cb.mp4 +603,wlRAIfIiyBs-58baa278f0a50dc2b09bb82f3997735f.webm,wlRAIfIiyBs-58baa278f0a50dc2b09bb82f3997735f.webm,,,,,,,,,,,,,,,,wlRAIfIiyBs-58baa278f0a50dc2b09bb82f3997735f.webm +604,4r2-9X35Me8-8e4c141595ccc9209e1bf2a473c6834f.webm,4r2-9X35Me8-8e4c141595ccc9209e1bf2a473c6834f.webm,,,,,,,,,,,,,,,,4r2-9X35Me8-8e4c141595ccc9209e1bf2a473c6834f.webm +605,01zSU5lPUtc-d274de1c583ed2bb91ca5d49a6b37c56.webm,01zSU5lPUtc-d274de1c583ed2bb91ca5d49a6b37c56.webm,,,,,,,,,,,,,,,,01zSU5lPUtc-d274de1c583ed2bb91ca5d49a6b37c56.webm +606,qP4peew7l_c-f8cdeacbcdab6ce508e9059a9495497c.webm,qP4peew7l_c-f8cdeacbcdab6ce508e9059a9495497c.webm,,,,,,,,,,,,,,,,qP4peew7l_c-f8cdeacbcdab6ce508e9059a9495497c.webm +607,x2Rfwp_og3Y-ad5e1a7352a3070a0d05ed3d50e88105.webm,x2Rfwp_og3Y-ad5e1a7352a3070a0d05ed3d50e88105.webm,,,,,,,,,,,,,,,,x2Rfwp_og3Y-ad5e1a7352a3070a0d05ed3d50e88105.webm +608,CsNJYKv4SZA-48419cdaae3f1f14eb715b4f79b97fef.mp4,CsNJYKv4SZA-48419cdaae3f1f14eb715b4f79b97fef.mp4,,,,,,,,,,,,,,,,CsNJYKv4SZA-48419cdaae3f1f14eb715b4f79b97fef.mp4 +609,TfTJudxW4gI-4de2f2f0b2e63892146b7024c0bb8a8c.webm,TfTJudxW4gI-4de2f2f0b2e63892146b7024c0bb8a8c.webm,,,,,,,,,,,,,,,,TfTJudxW4gI-4de2f2f0b2e63892146b7024c0bb8a8c.webm +610,rkaIhKVge08-2aea3752ef7cf58a71f7395397820bf1.mp4,rkaIhKVge08-2aea3752ef7cf58a71f7395397820bf1.mp4,,,,,,,,,,,,,,,,rkaIhKVge08-2aea3752ef7cf58a71f7395397820bf1.mp4 +611,GKY8NkG8AEc-a1ca7bd34bb47e0d0edf41fe1b808bf9.webm,GKY8NkG8AEc-a1ca7bd34bb47e0d0edf41fe1b808bf9.webm,,,,,,,,,,,,,,,,GKY8NkG8AEc-a1ca7bd34bb47e0d0edf41fe1b808bf9.webm +612,Chuwl0v1_mE-7f002d67b9c9c46d9b1a30bb8e126f70.webm,Chuwl0v1_mE-7f002d67b9c9c46d9b1a30bb8e126f70.webm,,,,,,,,,,,,,,,,Chuwl0v1_mE-7f002d67b9c9c46d9b1a30bb8e126f70.webm +613,hQok6Zu0z6w-b40eeae714b8f3f7a04ef722a410d9e8.webm,hQok6Zu0z6w-b40eeae714b8f3f7a04ef722a410d9e8.webm,,,,,,,,,,,,,,,,hQok6Zu0z6w-b40eeae714b8f3f7a04ef722a410d9e8.webm +614,6eUbRztBpWs-0ed8817d426927aa22dca5783ed8af7b.webm,6eUbRztBpWs-0ed8817d426927aa22dca5783ed8af7b.webm,,,,,,,,,,,,,,,,6eUbRztBpWs-0ed8817d426927aa22dca5783ed8af7b.webm +615,6aFDcJGTJMc-54572dd08f682a62719ff1c1f871b74f.webm,6aFDcJGTJMc-54572dd08f682a62719ff1c1f871b74f.webm,,,,,,,,,,,,,,,,6aFDcJGTJMc-54572dd08f682a62719ff1c1f871b74f.webm +616,SoQB35MA4cQ-9125c7f196154e8f92caaed86fde4ccf.mp4,SoQB35MA4cQ-9125c7f196154e8f92caaed86fde4ccf.mp4,,,,,,,,,,,,,,,,SoQB35MA4cQ-9125c7f196154e8f92caaed86fde4ccf.mp4 +617,f0lE2b-wD3o-1e16866f7d9b655acfd1acfb6bd6bd4a.webm,f0lE2b-wD3o-1e16866f7d9b655acfd1acfb6bd6bd4a.webm,,,,,,,,,,,,,,,,f0lE2b-wD3o-1e16866f7d9b655acfd1acfb6bd6bd4a.webm +618,dxQHmjz-654-7cfeaccb0934a09f48def48cfd8c74ce.mp4,dxQHmjz-654-7cfeaccb0934a09f48def48cfd8c74ce.mp4,,,,,,,,,,,,,,,,dxQHmjz-654-7cfeaccb0934a09f48def48cfd8c74ce.mp4 +619,6SPmykJgxP0-0ef9d833620bcaa866d99419579ff221.webm,6SPmykJgxP0-0ef9d833620bcaa866d99419579ff221.webm,,,,,,,,,,,,,,,,6SPmykJgxP0-0ef9d833620bcaa866d99419579ff221.webm +621,E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d.mp4,E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d.mp4,,,,,,,,,,,,,,,,E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d.mp4 +622,s0s4HtRE0M0-fb09e5703b2179b7d4e522b57c4d0f58.webm,s0s4HtRE0M0-fb09e5703b2179b7d4e522b57c4d0f58.webm,,,,,,,,,,,,,,,,s0s4HtRE0M0-fb09e5703b2179b7d4e522b57c4d0f58.webm +623,UBiwGInhDvY-afb648aaee38f32b269e40b037c2798a.webm,UBiwGInhDvY-afb648aaee38f32b269e40b037c2798a.webm,,,,,,,,,,,,,,,,UBiwGInhDvY-afb648aaee38f32b269e40b037c2798a.webm +624,_5gA0a9KE0w-478c7deb2847fb926d0053e4d580c9fe.webm,_5gA0a9KE0w-478c7deb2847fb926d0053e4d580c9fe.webm,,,,,,,,,,,,,,,,_5gA0a9KE0w-478c7deb2847fb926d0053e4d580c9fe.webm +625,Hwx8FQ-tfdk-777d2058d2825bdc7f8de46d3c712d83.mp4,Hwx8FQ-tfdk-777d2058d2825bdc7f8de46d3c712d83.mp4,,,,,,,,,,,,,,,,Hwx8FQ-tfdk-777d2058d2825bdc7f8de46d3c712d83.mp4 +626,cjlyVIfZJh4-1b8d795c7ae011e42e1377e52a43f2ee.mp4,cjlyVIfZJh4-1b8d795c7ae011e42e1377e52a43f2ee.mp4,,,,,,,,,,,,,,,,cjlyVIfZJh4-1b8d795c7ae011e42e1377e52a43f2ee.mp4 +628,xJbEsCKYsEk-d798885afce72ee6d5a7e1b55a9a163f.webm,xJbEsCKYsEk-d798885afce72ee6d5a7e1b55a9a163f.webm,,,,,,,,,,,,,,,,xJbEsCKYsEk-d798885afce72ee6d5a7e1b55a9a163f.webm +629,C0r_jG1xPk4-3671c5910ff367cc4fe1de4738cb603c.mp4,C0r_jG1xPk4-3671c5910ff367cc4fe1de4738cb603c.mp4,,,,,,,,,,,,,,,,C0r_jG1xPk4-3671c5910ff367cc4fe1de4738cb603c.mp4 +630,90aYKGmu3bU-e46868a602733955e958f2944e3a350a.webm,90aYKGmu3bU-e46868a602733955e958f2944e3a350a.webm,,,,,,,,,,,,,,,,90aYKGmu3bU-e46868a602733955e958f2944e3a350a.webm +631,IqkKWehJJCY-c558a41bdbc695817202d7bc74bd6dd3.webm,IqkKWehJJCY-c558a41bdbc695817202d7bc74bd6dd3.webm,,,,,,,,,,,,,,,,IqkKWehJJCY-c558a41bdbc695817202d7bc74bd6dd3.webm +632,cpYNTWdPy2s-0565b08886fbe8565ee96dbcf241c5e1.webm,cpYNTWdPy2s-0565b08886fbe8565ee96dbcf241c5e1.webm,,,,,,,,,,,,,,,,cpYNTWdPy2s-0565b08886fbe8565ee96dbcf241c5e1.webm +633,UuVhiL8j-70-57df925c4610c87ee735b5f8a13c40e6.mp4,UuVhiL8j-70-57df925c4610c87ee735b5f8a13c40e6.mp4,,,,,,,,,,,,,,,,UuVhiL8j-70-57df925c4610c87ee735b5f8a13c40e6.mp4 +634,6hL7iopIoOo-2a38ca9e32de3293f8f18e791498cadd.mp4,6hL7iopIoOo-2a38ca9e32de3293f8f18e791498cadd.mp4,,,,,,,,,,,,,,,,6hL7iopIoOo-2a38ca9e32de3293f8f18e791498cadd.mp4 +637,2CwEzBPhMrI-39b4aca4d10f5473321eba15e6ffd27e.mp4,2CwEzBPhMrI-39b4aca4d10f5473321eba15e6ffd27e.mp4,,,,,,,,,,,,,,,,2CwEzBPhMrI-39b4aca4d10f5473321eba15e6ffd27e.mp4 +638,KFuKJgnZH7o-ad1110e05b96458f4a358843bb9f8bcc.webm,KFuKJgnZH7o-ad1110e05b96458f4a358843bb9f8bcc.webm,,,,,,,,,,,,,,,,KFuKJgnZH7o-ad1110e05b96458f4a358843bb9f8bcc.webm +639,dtej90Oaycc-8692880d91b0d0012e3f9357c601c488.webm,dtej90Oaycc-8692880d91b0d0012e3f9357c601c488.webm,,,,,,,,,,,,,,,,dtej90Oaycc-8692880d91b0d0012e3f9357c601c488.webm +641,MgXpgI9wXQA-41d6d85b82ae475e985197e832733078.mp4,MgXpgI9wXQA-41d6d85b82ae475e985197e832733078.mp4,,,,,,,,,,,,,,,,MgXpgI9wXQA-41d6d85b82ae475e985197e832733078.mp4 +642,WOE3kAeNtZI-28b3c7663b4d9d055e97226546670eea.webm,WOE3kAeNtZI-28b3c7663b4d9d055e97226546670eea.webm,,,,,,,,,,,,,,,,WOE3kAeNtZI-28b3c7663b4d9d055e97226546670eea.webm +643,k_Az-Nk-7Ys-af21c86fa905a200c11baa6ff599a405.webm,k_Az-Nk-7Ys-af21c86fa905a200c11baa6ff599a405.webm,,,,,,,,,,,,,,,,k_Az-Nk-7Ys-af21c86fa905a200c11baa6ff599a405.webm +644,25W9oFC7Dk8-829dd924d6c87093479a107842f26812.webm,25W9oFC7Dk8-829dd924d6c87093479a107842f26812.webm,,,,,,,,,,,,,,,,25W9oFC7Dk8-829dd924d6c87093479a107842f26812.webm +646,ohngCDAw4QI-50c283e39de3da07592e9ccd3a3e4fa1.mp4,ohngCDAw4QI-50c283e39de3da07592e9ccd3a3e4fa1.mp4,,,,,,,,,,,,,,,,ohngCDAw4QI-50c283e39de3da07592e9ccd3a3e4fa1.mp4 +647,shjFRDcf-S4-4b152215b03e1af6b973739db77c731c.webm,shjFRDcf-S4-4b152215b03e1af6b973739db77c731c.webm,,,,,,,,,,,,,,,,shjFRDcf-S4-4b152215b03e1af6b973739db77c731c.webm +649,qXPDuNNAdlk-0ac7016edec3a32c8151eda28872d318.webm,qXPDuNNAdlk-0ac7016edec3a32c8151eda28872d318.webm,,,,,,,,,,,,,,,,qXPDuNNAdlk-0ac7016edec3a32c8151eda28872d318.webm +650,cXmW3cw4MHg-a50eddbec62d2845fc975feeb3c37ce7.webm,cXmW3cw4MHg-a50eddbec62d2845fc975feeb3c37ce7.webm,,,,,,,,,,,,,,,,cXmW3cw4MHg-a50eddbec62d2845fc975feeb3c37ce7.webm +651,q80AZNKj2lQ-168122fb3f99bd4cc36816b1d06837fa.mp4,q80AZNKj2lQ-168122fb3f99bd4cc36816b1d06837fa.mp4,,,,,,,,,,,,,,,,q80AZNKj2lQ-168122fb3f99bd4cc36816b1d06837fa.mp4 +653,BiX-5wtm61I-801b4dce2ba967cf0ac6fa31af64e4a8.mp4,BiX-5wtm61I-801b4dce2ba967cf0ac6fa31af64e4a8.mp4,,,,,,,,,,,,,,,,BiX-5wtm61I-801b4dce2ba967cf0ac6fa31af64e4a8.mp4 +654,ST_jDAvApkE-195fdc3105bcde10130be21e53f11b15.mp4,ST_jDAvApkE-195fdc3105bcde10130be21e53f11b15.mp4,,,,,,,,,,,,,,,,ST_jDAvApkE-195fdc3105bcde10130be21e53f11b15.mp4 +655,pjXjO2-Uofg-0261fdb3cc880fde02d7f4bdc1e55abb.mp4,pjXjO2-Uofg-0261fdb3cc880fde02d7f4bdc1e55abb.mp4,,,,,,,,,,,,,,,,pjXjO2-Uofg-0261fdb3cc880fde02d7f4bdc1e55abb.mp4 +656,3EhZmUkawP0-3efd529919dc51ef138f1cd84f0a0f66.webm,3EhZmUkawP0-3efd529919dc51ef138f1cd84f0a0f66.webm,,,,,,,,,,,,,,,,3EhZmUkawP0-3efd529919dc51ef138f1cd84f0a0f66.webm +657,4eBZ98_LMow-4da6f872255fd18b613a71b13f9ce8c9.webm,4eBZ98_LMow-4da6f872255fd18b613a71b13f9ce8c9.webm,,,,,,,,,,,,,,,,4eBZ98_LMow-4da6f872255fd18b613a71b13f9ce8c9.webm +658,YtTp4U1aZ6A-b40bd46084d496f6441d71700b840854.webm,YtTp4U1aZ6A-b40bd46084d496f6441d71700b840854.webm,,,,,,,,,,,,,,,,YtTp4U1aZ6A-b40bd46084d496f6441d71700b840854.webm +659,atyAw2SfLfI-d12a2e035a2edeaedc5dc66774afa3ce.webm,atyAw2SfLfI-d12a2e035a2edeaedc5dc66774afa3ce.webm,,,,,,,,,,,,,,,,atyAw2SfLfI-d12a2e035a2edeaedc5dc66774afa3ce.webm +660,kqdz6gNdcqo-fa84498b96663c8b0952cbc09cf53b2f.webm,kqdz6gNdcqo-fa84498b96663c8b0952cbc09cf53b2f.webm,,,,,,,,,,,,,,,,kqdz6gNdcqo-fa84498b96663c8b0952cbc09cf53b2f.webm +661,Gxb97nMrLHM-562225efb0537cfe01b73c9737116784.mp4,Gxb97nMrLHM-562225efb0537cfe01b73c9737116784.mp4,,,,,,,,,,,,,,,,Gxb97nMrLHM-562225efb0537cfe01b73c9737116784.mp4 +662,6nXlX_LtJuI-7482cf266b54199f18066cd8148f641f.webm,6nXlX_LtJuI-7482cf266b54199f18066cd8148f641f.webm,,,,,,,,,,,,,,,,6nXlX_LtJuI-7482cf266b54199f18066cd8148f641f.webm +663,T2UBRjVxyGk-e0fb7da5295a8561aba98aba36167542.webm,T2UBRjVxyGk-e0fb7da5295a8561aba98aba36167542.webm,,,,,,,,,,,,,,,,T2UBRjVxyGk-e0fb7da5295a8561aba98aba36167542.webm +664,5uomPz6EzTk-ffaf13438bce726a6bf9982727564cbb.webm,5uomPz6EzTk-ffaf13438bce726a6bf9982727564cbb.webm,,,,,,,,,,,,,,,,5uomPz6EzTk-ffaf13438bce726a6bf9982727564cbb.webm +665,RHVIWl8Hat8-b371c429a7d6a4b2eafb6c3697240907.mp4,RHVIWl8Hat8-b371c429a7d6a4b2eafb6c3697240907.mp4,,,,,,,,,,,,,,,,RHVIWl8Hat8-b371c429a7d6a4b2eafb6c3697240907.mp4 +667,lAwYcNky-uk-4e8b7aaced7cc2e8f6e146e9eb47a803.mp4,lAwYcNky-uk-4e8b7aaced7cc2e8f6e146e9eb47a803.mp4,,,,,,,,,,,,,,,,lAwYcNky-uk-4e8b7aaced7cc2e8f6e146e9eb47a803.mp4 +669,4OoRvCjO_fU-fda344f4c72f913a22889973392f6abc.webm,4OoRvCjO_fU-fda344f4c72f913a22889973392f6abc.webm,,,,,,,,,,,,,,,,4OoRvCjO_fU-fda344f4c72f913a22889973392f6abc.webm +670,KuP_w1C40P4-e5aa132e868a42961112929233acef91.mp4,KuP_w1C40P4-e5aa132e868a42961112929233acef91.mp4,,,,,,,,,,,,,,,,KuP_w1C40P4-e5aa132e868a42961112929233acef91.mp4 +671,ywYtHhBMULk-3bf4f5e192c84d80c7f9fb06e10b0385.mp4,ywYtHhBMULk-3bf4f5e192c84d80c7f9fb06e10b0385.mp4,,,,,,,,,,,,,,,,ywYtHhBMULk-3bf4f5e192c84d80c7f9fb06e10b0385.mp4 +672,gIN_iWGReMs-c0a131922b5052afbfcbc4266727c3e7.webm,gIN_iWGReMs-c0a131922b5052afbfcbc4266727c3e7.webm,,,,,,,,,,,,,,,,gIN_iWGReMs-c0a131922b5052afbfcbc4266727c3e7.webm +673,v-UeWnG0bJE-facda9040edbb245fab3a99af44eb5e9.webm,v-UeWnG0bJE-facda9040edbb245fab3a99af44eb5e9.webm,,,,,,,,,,,,,,,,v-UeWnG0bJE-facda9040edbb245fab3a99af44eb5e9.webm +674,7hJTQNvFZq4-d825d5c07c00371f4d89d4df82aed1e5.mp4,7hJTQNvFZq4-d825d5c07c00371f4d89d4df82aed1e5.mp4,,,,,,,,,,,,,,,,7hJTQNvFZq4-d825d5c07c00371f4d89d4df82aed1e5.mp4 +675,Xol-Iv5HeRU-88387cde0a0927bf08cfc58dda62d671.mp4,Xol-Iv5HeRU-88387cde0a0927bf08cfc58dda62d671.mp4,,,,,,,,,,,,,,,,Xol-Iv5HeRU-88387cde0a0927bf08cfc58dda62d671.mp4 +676,ZLutpyfWGhw-4faadac07395340244cde777b71345b4.mp4,ZLutpyfWGhw-4faadac07395340244cde777b71345b4.mp4,,,,,,,,,,,,,,,,ZLutpyfWGhw-4faadac07395340244cde777b71345b4.mp4 +677,gUh_GeEgXpI-a5d68b94975961b05244868e5e325d20.webm,gUh_GeEgXpI-a5d68b94975961b05244868e5e325d20.webm,,,,,,,,,,,,,,,,gUh_GeEgXpI-a5d68b94975961b05244868e5e325d20.webm +679,D10XmIukdFI-1057e850a19c6aeb0d677664f95e25d7.mp4,D10XmIukdFI-1057e850a19c6aeb0d677664f95e25d7.mp4,,,,,,,,,,,,,,,,D10XmIukdFI-1057e850a19c6aeb0d677664f95e25d7.mp4 +680,Sg-26dBkoRk-22221228aca8a2962fe2cb75223afb52.webm,Sg-26dBkoRk-22221228aca8a2962fe2cb75223afb52.webm,,,,,,,,,,,,,,,,Sg-26dBkoRk-22221228aca8a2962fe2cb75223afb52.webm +681,ljVi8Xualjc-5e62399eef9f0c36654dd93137865688.webm,ljVi8Xualjc-5e62399eef9f0c36654dd93137865688.webm,,,,,,,,,,,,,,,,ljVi8Xualjc-5e62399eef9f0c36654dd93137865688.webm +682,HI3ngZnN7mg-e071ffcd2d9d166789b2e11d5e23f913.webm,HI3ngZnN7mg-e071ffcd2d9d166789b2e11d5e23f913.webm,,,,,,,,,,,,,,,,HI3ngZnN7mg-e071ffcd2d9d166789b2e11d5e23f913.webm +684,7q_SETvTZCM-13bb2ca47a6124f4613c2f129887329d.mp4,7q_SETvTZCM-13bb2ca47a6124f4613c2f129887329d.mp4,,,,,,,,,,,,,,,,7q_SETvTZCM-13bb2ca47a6124f4613c2f129887329d.mp4 +687,GLpPofnNzww-a9918cc34c2f85a8f842bdd873f2e82d.webm,GLpPofnNzww-a9918cc34c2f85a8f842bdd873f2e82d.webm,,,,,,,,,,,,,,,,GLpPofnNzww-a9918cc34c2f85a8f842bdd873f2e82d.webm +688,anlF7vZWbJA-83a912ca74c305038796f7ea854555f6.mp4,anlF7vZWbJA-83a912ca74c305038796f7ea854555f6.mp4,,,,,,,,,,,,,,,,anlF7vZWbJA-83a912ca74c305038796f7ea854555f6.mp4 +689,Mhh6KJeHCRA-f49e7c42148de2d711943b3bcd28a657.webm,Mhh6KJeHCRA-f49e7c42148de2d711943b3bcd28a657.webm,,,,,,,,,,,,,,,,Mhh6KJeHCRA-f49e7c42148de2d711943b3bcd28a657.webm +690,mFpP_t9D4eU-eab71f04a6ccb015beb4d72cd436e39d.webm,mFpP_t9D4eU-eab71f04a6ccb015beb4d72cd436e39d.webm,,,,,,,,,,,,,,,,mFpP_t9D4eU-eab71f04a6ccb015beb4d72cd436e39d.webm +691,J93yVoqVP7M-f06038baf8401e23ac7265f6b7ed22d5.webm,J93yVoqVP7M-f06038baf8401e23ac7265f6b7ed22d5.webm,,,,,,,,,,,,,,,,J93yVoqVP7M-f06038baf8401e23ac7265f6b7ed22d5.webm +692,rmPRC1ZSgsw-fcd380052c11d443522723c1936b8733.mp4,rmPRC1ZSgsw-fcd380052c11d443522723c1936b8733.mp4,,,,,,,,,,,,,,,,rmPRC1ZSgsw-fcd380052c11d443522723c1936b8733.mp4 +693,QHEsuEu6kxo-cb28be524029072a2bd74a7c5522eed7.mp4,QHEsuEu6kxo-cb28be524029072a2bd74a7c5522eed7.mp4,,,,,,,,,,,,,,,,QHEsuEu6kxo-cb28be524029072a2bd74a7c5522eed7.mp4 +694,nXxONsH4YY8-070fd8b6145ee6f312e204d01bcc87da.webm,nXxONsH4YY8-070fd8b6145ee6f312e204d01bcc87da.webm,,,,,,,,,,,,,,,,nXxONsH4YY8-070fd8b6145ee6f312e204d01bcc87da.webm +695,_8B7RqcIjj8-a1d772a7f52cd7fab11644cfc4522428.webm,_8B7RqcIjj8-a1d772a7f52cd7fab11644cfc4522428.webm,,,,,,,,,,,,,,,,_8B7RqcIjj8-a1d772a7f52cd7fab11644cfc4522428.webm +696,mfCe8wErFMg-1d9131087bee0c3a9a8d770d66a58453.mp4,mfCe8wErFMg-1d9131087bee0c3a9a8d770d66a58453.mp4,,,,,,,,,,,,,,,,mfCe8wErFMg-1d9131087bee0c3a9a8d770d66a58453.mp4 +697,5bi3RyRDjhQ-d5ccfcd3a73dd5ecf46e0f1b3232f576.mp4,5bi3RyRDjhQ-d5ccfcd3a73dd5ecf46e0f1b3232f576.mp4,,,,,,,,,,,,,,,,5bi3RyRDjhQ-d5ccfcd3a73dd5ecf46e0f1b3232f576.mp4 +698,4pvyxQCAAWk-bfc0dddcebe2fd65c1fefd623ad91599.mp4,4pvyxQCAAWk-bfc0dddcebe2fd65c1fefd623ad91599.mp4,,,,,,,,,,,,,,,,4pvyxQCAAWk-bfc0dddcebe2fd65c1fefd623ad91599.mp4 +701,n_kxPF3cv5U-5fea2ea311674afadacb08f3ad5d57f7.webm,n_kxPF3cv5U-5fea2ea311674afadacb08f3ad5d57f7.webm,,,,,,,,,,,,,,,,n_kxPF3cv5U-5fea2ea311674afadacb08f3ad5d57f7.webm +702,5KP_smuxeEw-986d0e050a3e1f3ac62d1ef98efc4cf2.mp4,5KP_smuxeEw-986d0e050a3e1f3ac62d1ef98efc4cf2.mp4,,,,,,,,,,,,,,,,5KP_smuxeEw-986d0e050a3e1f3ac62d1ef98efc4cf2.mp4 +703,9QdRw2gB-NE-aefc57fb5e3062cae717ea18f510736f.webm,9QdRw2gB-NE-aefc57fb5e3062cae717ea18f510736f.webm,,,,,,,,,,,,,,,,9QdRw2gB-NE-aefc57fb5e3062cae717ea18f510736f.webm +706,UDJwFEQgPSo-460d41e5dfd12e7f06698a2cbf86fda6.webm,UDJwFEQgPSo-460d41e5dfd12e7f06698a2cbf86fda6.webm,,,,,,,,,,,,,,,,UDJwFEQgPSo-460d41e5dfd12e7f06698a2cbf86fda6.webm +708,K4oOUkE7xgc-8acc3e53a74503c6d354af1c2de605bb.webm,K4oOUkE7xgc-8acc3e53a74503c6d354af1c2de605bb.webm,,,,,,,,,,,,,,,,K4oOUkE7xgc-8acc3e53a74503c6d354af1c2de605bb.webm +709,iixGXRYDMJ8-b326dbb53b9797bbfd9421f7121b8f2d.webm,iixGXRYDMJ8-b326dbb53b9797bbfd9421f7121b8f2d.webm,,,,,,,,,,,,,,,,iixGXRYDMJ8-b326dbb53b9797bbfd9421f7121b8f2d.webm +710,TL0B3Ey-A6s-14e10d7564301238c8fe6ab284d20fcb.webm,TL0B3Ey-A6s-14e10d7564301238c8fe6ab284d20fcb.webm,,,,,,,,,,,,,,,,TL0B3Ey-A6s-14e10d7564301238c8fe6ab284d20fcb.webm +711,Nww4nBpOqO4-dc85f920cfb6fb3e2d22dc13847942de.webm,Nww4nBpOqO4-dc85f920cfb6fb3e2d22dc13847942de.webm,,,,,,,,,,,,,,,,Nww4nBpOqO4-dc85f920cfb6fb3e2d22dc13847942de.webm +712,lPFUMf0ge70-6629b10fe6fe510c1e8c6eec4bf26bf0.mp4,lPFUMf0ge70-6629b10fe6fe510c1e8c6eec4bf26bf0.mp4,,,,,,,,,,,,,,,,lPFUMf0ge70-6629b10fe6fe510c1e8c6eec4bf26bf0.mp4 +713,CnTrKl4bngo-583a4d376c3c0c52f15267eca748b5ca.webm,CnTrKl4bngo-583a4d376c3c0c52f15267eca748b5ca.webm,,,,,,,,,,,,,,,,CnTrKl4bngo-583a4d376c3c0c52f15267eca748b5ca.webm +714,moJaAkyWtTM-fc30e798b1a344382c164daf28bf357b.mp4,moJaAkyWtTM-fc30e798b1a344382c164daf28bf357b.mp4,,,,,,,,,,,,,,,,moJaAkyWtTM-fc30e798b1a344382c164daf28bf357b.mp4 +716,fSBJ8BihunU-5660fa81596b50e8e3dcf3e107d410a0.webm,fSBJ8BihunU-5660fa81596b50e8e3dcf3e107d410a0.webm,,,,,,,,,,,,,,,,fSBJ8BihunU-5660fa81596b50e8e3dcf3e107d410a0.webm +718,eslC_KMP6aw-9ac2a2507204cbf222cfc3c1ae4d66a2.mp4,eslC_KMP6aw-9ac2a2507204cbf222cfc3c1ae4d66a2.mp4,,,,,,,,,,,,,,,,eslC_KMP6aw-9ac2a2507204cbf222cfc3c1ae4d66a2.mp4 +719,3BP5PFiHyb0-21f13125ad10f2ce5e72bd2a20ca5b32.mp4,3BP5PFiHyb0-21f13125ad10f2ce5e72bd2a20ca5b32.mp4,,,,,,,,,,,,,,,,3BP5PFiHyb0-21f13125ad10f2ce5e72bd2a20ca5b32.mp4 +720,v5wbA1cA-0M-9edece8c8d0b4b01f6a0d2c095948ad8.webm,v5wbA1cA-0M-9edece8c8d0b4b01f6a0d2c095948ad8.webm,,,,,,,,,,,,,,,,v5wbA1cA-0M-9edece8c8d0b4b01f6a0d2c095948ad8.webm +721,H6q_C70KwpM-67595e0d7be55383e30bf0f4418dc9b3.mp4,H6q_C70KwpM-67595e0d7be55383e30bf0f4418dc9b3.mp4,,,,,,,,,,,,,,,,H6q_C70KwpM-67595e0d7be55383e30bf0f4418dc9b3.mp4 +722,dcyTOe3zVuk-63e68d9901f7b1192364f1842555d85e.webm,dcyTOe3zVuk-63e68d9901f7b1192364f1842555d85e.webm,,,,,,,,,,,,,,,,dcyTOe3zVuk-63e68d9901f7b1192364f1842555d85e.webm +723,gqX0f7c4Qcw-ef4cc9354f3b0e4aec04a78bdc5f5416.webm,gqX0f7c4Qcw-ef4cc9354f3b0e4aec04a78bdc5f5416.webm,,,,,,,,,,,,,,,,gqX0f7c4Qcw-ef4cc9354f3b0e4aec04a78bdc5f5416.webm +724,ZqWIerZpXlg-e848c582ec5c33e24e17962d00752bd1.webm,ZqWIerZpXlg-e848c582ec5c33e24e17962d00752bd1.webm,,,,,,,,,,,,,,,,ZqWIerZpXlg-e848c582ec5c33e24e17962d00752bd1.webm +725,Cn0Fz9glY4I-f21506511d9c9c7cdaa143acdbc65816.webm,Cn0Fz9glY4I-f21506511d9c9c7cdaa143acdbc65816.webm,,,,,,,,,,,,,,,,Cn0Fz9glY4I-f21506511d9c9c7cdaa143acdbc65816.webm +727,K1E4MOz7HjE-746ee4ec08c2a0c4a23937f26278c94d.webm,K1E4MOz7HjE-746ee4ec08c2a0c4a23937f26278c94d.webm,,,,,,,,,,,,,,,,K1E4MOz7HjE-746ee4ec08c2a0c4a23937f26278c94d.webm +728,k5Np_HemELo-8497d7ad18a99fb86c3065b453903a2f.webm,k5Np_HemELo-8497d7ad18a99fb86c3065b453903a2f.webm,,,,,,,,,,,,,,,,k5Np_HemELo-8497d7ad18a99fb86c3065b453903a2f.webm +729,4nYdzGEU3Xk-820a447279f20deacce0d9471d0f11d5.mp4,4nYdzGEU3Xk-820a447279f20deacce0d9471d0f11d5.mp4,,,,,,,,,,,,,,,,4nYdzGEU3Xk-820a447279f20deacce0d9471d0f11d5.mp4 +730,OCA0RGX29iI-7fb210395aae746aa83bf20a5b7f4088.mp4,OCA0RGX29iI-7fb210395aae746aa83bf20a5b7f4088.mp4,,,,,,,,,,,,,,,,OCA0RGX29iI-7fb210395aae746aa83bf20a5b7f4088.mp4 +731,rCnPIbo7YtY-220f19319760740d986743e6d354646e.webm,rCnPIbo7YtY-220f19319760740d986743e6d354646e.webm,,,,,,,,,,,,,,,,rCnPIbo7YtY-220f19319760740d986743e6d354646e.webm +732,A_sT5l8OJ7o-67676666d47a43deaa3c543ab02e92c8.webm,A_sT5l8OJ7o-67676666d47a43deaa3c543ab02e92c8.webm,,,,,,,,,,,,,,,,A_sT5l8OJ7o-67676666d47a43deaa3c543ab02e92c8.webm +733,LBzKvMEXH9A-215ab38cd69d37e819f795deeef75606.webm,LBzKvMEXH9A-215ab38cd69d37e819f795deeef75606.webm,,,,,,,,,,,,,,,,LBzKvMEXH9A-215ab38cd69d37e819f795deeef75606.webm +734,dWlTLOyt7a0-4ce0985028bc4e6beef6e0bf4eb1b156.webm,dWlTLOyt7a0-4ce0985028bc4e6beef6e0bf4eb1b156.webm,,,,,,,,,,,,,,,,dWlTLOyt7a0-4ce0985028bc4e6beef6e0bf4eb1b156.webm +735,mHlQvDrlgxU-7adb02593bd18371b83b465c51b8b2fd.webm,mHlQvDrlgxU-7adb02593bd18371b83b465c51b8b2fd.webm,,,,,,,,,,,,,,,,mHlQvDrlgxU-7adb02593bd18371b83b465c51b8b2fd.webm +736,mXdtPemDsFg-f6f3fee2f664010b979c96ae14a499dd.mp4,mXdtPemDsFg-f6f3fee2f664010b979c96ae14a499dd.mp4,,,,,,,,,,,,,,,,mXdtPemDsFg-f6f3fee2f664010b979c96ae14a499dd.mp4 +740,qFXYnob7oIs-8dac5e7a626c06effd800e6917b3f95c.mp4,qFXYnob7oIs-8dac5e7a626c06effd800e6917b3f95c.mp4,,,,,,,,,,,,,,,,qFXYnob7oIs-8dac5e7a626c06effd800e6917b3f95c.mp4 +741,ZIb8_Dikf8o-947f0ab3c5436406c3c4d23daff93417.mp4,ZIb8_Dikf8o-947f0ab3c5436406c3c4d23daff93417.mp4,,,,,,,,,,,,,,,,ZIb8_Dikf8o-947f0ab3c5436406c3c4d23daff93417.mp4 +742,yWuwpSiOcsk-110fec2335332386e79b3511311ac218.webm,yWuwpSiOcsk-110fec2335332386e79b3511311ac218.webm,,,,,,,,,,,,,,,,yWuwpSiOcsk-110fec2335332386e79b3511311ac218.webm +743,9vhPkGx9s0s-df4c185ccd99beb86da66b49d4ee1f44.mp4,9vhPkGx9s0s-df4c185ccd99beb86da66b49d4ee1f44.mp4,,,,,,,,,,,,,,,,9vhPkGx9s0s-df4c185ccd99beb86da66b49d4ee1f44.mp4 +745,BjdCO5fVjzI-3da718fee84be4c6a516fd8acd6bad52.webm,BjdCO5fVjzI-3da718fee84be4c6a516fd8acd6bad52.webm,,,,,,,,,,,,,,,,BjdCO5fVjzI-3da718fee84be4c6a516fd8acd6bad52.webm +747,SCYHBEiOZ24-b4045faa79aa026b9d483635377cb95e.mp4,SCYHBEiOZ24-b4045faa79aa026b9d483635377cb95e.mp4,,,,,,,,,,,,,,,,SCYHBEiOZ24-b4045faa79aa026b9d483635377cb95e.mp4 +748,bCoersXDThs-bc2e9a490d10a99c69a2455cb18f5c56.mp4,bCoersXDThs-bc2e9a490d10a99c69a2455cb18f5c56.mp4,,,,,,,,,,,,,,,,bCoersXDThs-bc2e9a490d10a99c69a2455cb18f5c56.mp4 +750,eq7RkcqSdbQ-37831757a3815c0c2b5f2964d1af26a0.webm,eq7RkcqSdbQ-37831757a3815c0c2b5f2964d1af26a0.webm,,,,,,,,,,,,,,,,eq7RkcqSdbQ-37831757a3815c0c2b5f2964d1af26a0.webm +751,IvQr13Rxwv4-142dd3d9686a9c300a4b4c1a26fd045d.webm,IvQr13Rxwv4-142dd3d9686a9c300a4b4c1a26fd045d.webm,,,,,,,,,,,,,,,,IvQr13Rxwv4-142dd3d9686a9c300a4b4c1a26fd045d.webm +752,sG2sXosnMp8-5456a34a1995c2bf4b648baf89500582.webm,sG2sXosnMp8-5456a34a1995c2bf4b648baf89500582.webm,,,,,,,,,,,,,,,,sG2sXosnMp8-5456a34a1995c2bf4b648baf89500582.webm +754,6omIWrDq5dk-ce223270fa80bd30716227aa98e1ce26.mp4,6omIWrDq5dk-ce223270fa80bd30716227aa98e1ce26.mp4,,,,,,,,,,,,,,,,6omIWrDq5dk-ce223270fa80bd30716227aa98e1ce26.mp4 +755,kMvTKauej-Y-8a86ee6fbe6a052dee38105d3dcdd01a.mp4,kMvTKauej-Y-8a86ee6fbe6a052dee38105d3dcdd01a.mp4,,,,,,,,,,,,,,,,kMvTKauej-Y-8a86ee6fbe6a052dee38105d3dcdd01a.mp4 +756,vlBgz5QzSqM-5ed3055ec95f1cd72c3842af7a46ae6b.webm,vlBgz5QzSqM-5ed3055ec95f1cd72c3842af7a46ae6b.webm,,,,,,,,,,,,,,,,vlBgz5QzSqM-5ed3055ec95f1cd72c3842af7a46ae6b.webm +757,PzVmSr-RWTk-cda2944f6467b4312b664fd5a35820c9.mp4,PzVmSr-RWTk-cda2944f6467b4312b664fd5a35820c9.mp4,,,,,,,,,,,,,,,,PzVmSr-RWTk-cda2944f6467b4312b664fd5a35820c9.mp4 +758,KpciFQt35ow-8dd996e4a8eed2340bb2110f5d37c48f.mp4,KpciFQt35ow-8dd996e4a8eed2340bb2110f5d37c48f.mp4,,,,,,,,,,,,,,,,KpciFQt35ow-8dd996e4a8eed2340bb2110f5d37c48f.mp4 +759,rGlgUU3E14Y-6d71ac0b941d2b74a2b52df03aaadd2f.mp4,rGlgUU3E14Y-6d71ac0b941d2b74a2b52df03aaadd2f.mp4,,,,,,,,,,,,,,,,rGlgUU3E14Y-6d71ac0b941d2b74a2b52df03aaadd2f.mp4 +760,L8ULFBBKzKw-5495e36c120c45477a88f099803f9522.webm,L8ULFBBKzKw-5495e36c120c45477a88f099803f9522.webm,,,,,,,,,,,,,,,,L8ULFBBKzKw-5495e36c120c45477a88f099803f9522.webm +761,AdiPXIEyes4-9f8c37e6b9142eed3e06c6cde76f46b2.webm,AdiPXIEyes4-9f8c37e6b9142eed3e06c6cde76f46b2.webm,,,,,,,,,,,,,,,,AdiPXIEyes4-9f8c37e6b9142eed3e06c6cde76f46b2.webm +762,BJkC4u0wNXY-850892f0c2005adaccaa860eb0466014.webm,BJkC4u0wNXY-850892f0c2005adaccaa860eb0466014.webm,,,,,,,,,,,,,,,,BJkC4u0wNXY-850892f0c2005adaccaa860eb0466014.webm +763,0nHLWgKd0Vc-9894f541a49da1d82486bae59198f2f9.webm,0nHLWgKd0Vc-9894f541a49da1d82486bae59198f2f9.webm,,,,,,,,,,,,,,,,0nHLWgKd0Vc-9894f541a49da1d82486bae59198f2f9.webm +765,dE1EQd0RE-U-021939ac2325e19a61b9e8c98b54a311.webm,dE1EQd0RE-U-021939ac2325e19a61b9e8c98b54a311.webm,,,,,,,,,,,,,,,,dE1EQd0RE-U-021939ac2325e19a61b9e8c98b54a311.webm +766,cR-cS6VIXrs-a6ae2a4578b67aa85642437465bc1677.webm,cR-cS6VIXrs-a6ae2a4578b67aa85642437465bc1677.webm,,,,,,,,,,,,,,,,cR-cS6VIXrs-a6ae2a4578b67aa85642437465bc1677.webm +767,0ddq2W47_u8-a9d1436f20ffb06f41ea02deb649b7fd.mp4,0ddq2W47_u8-a9d1436f20ffb06f41ea02deb649b7fd.mp4,,,,,,,,,,,,,,,,0ddq2W47_u8-a9d1436f20ffb06f41ea02deb649b7fd.mp4 +768,XN96TivKx3s-61e14cce110a0f557deebeccf49bc8c7.webm,XN96TivKx3s-61e14cce110a0f557deebeccf49bc8c7.webm,,,,,,,,,,,,,,,,XN96TivKx3s-61e14cce110a0f557deebeccf49bc8c7.webm +769,0hhXGe3IMwM-283db3f185436f9715f21a8f383810f3.mp4,0hhXGe3IMwM-283db3f185436f9715f21a8f383810f3.mp4,,,,,,,,,,,,,,,,0hhXGe3IMwM-283db3f185436f9715f21a8f383810f3.mp4 +770,TnJMr1cWQNk-13cc91cf25194856efe80d6309c9e46c.webm,TnJMr1cWQNk-13cc91cf25194856efe80d6309c9e46c.webm,,,,,,,,,,,,,,,,TnJMr1cWQNk-13cc91cf25194856efe80d6309c9e46c.webm +771,txPg33J97R4-b846c110494f1c621d175338fe1f4e42.webm,txPg33J97R4-b846c110494f1c621d175338fe1f4e42.webm,,,,,,,,,,,,,,,,txPg33J97R4-b846c110494f1c621d175338fe1f4e42.webm +772,PZM9yP2kCz4-21e41921c39999b9e815a7890ab85dfb.webm,PZM9yP2kCz4-21e41921c39999b9e815a7890ab85dfb.webm,,,,,,,,,,,,,,,,PZM9yP2kCz4-21e41921c39999b9e815a7890ab85dfb.webm +773,2OZQfmvJLC4-e2efea854abcaeface53eb21015a8702.webm,2OZQfmvJLC4-e2efea854abcaeface53eb21015a8702.webm,,,,,,,,,,,,,,,,2OZQfmvJLC4-e2efea854abcaeface53eb21015a8702.webm +774,zLjwz_luXO4-76db12e799bacdf2d568edd2bd4dcea6.webm,zLjwz_luXO4-76db12e799bacdf2d568edd2bd4dcea6.webm,,,,,,,,,,,,,,,,zLjwz_luXO4-76db12e799bacdf2d568edd2bd4dcea6.webm +775,CyPcJXY95OM-48cffc2b8337fe44f3ff7bb2f1a3fc45.webm,CyPcJXY95OM-48cffc2b8337fe44f3ff7bb2f1a3fc45.webm,,,,,,,,,,,,,,,,CyPcJXY95OM-48cffc2b8337fe44f3ff7bb2f1a3fc45.webm +776,JLV3rJ9IGS4-eaac377d0455fe22e49e74739c6371ed.webm,JLV3rJ9IGS4-eaac377d0455fe22e49e74739c6371ed.webm,,,,,,,,,,,,,,,,JLV3rJ9IGS4-eaac377d0455fe22e49e74739c6371ed.webm +779,ftXeM1Y0Qfo-d6044274d6c7c0b604f9ac273447a6ce.mp4,ftXeM1Y0Qfo-d6044274d6c7c0b604f9ac273447a6ce.mp4,,,,,,,,,,,,,,,,ftXeM1Y0Qfo-d6044274d6c7c0b604f9ac273447a6ce.mp4 +780,QJ_kpQvdMGo-e431fdf359e9fea43b2b8bc94d5abb0e.webm,QJ_kpQvdMGo-e431fdf359e9fea43b2b8bc94d5abb0e.webm,,,,,,,,,,,,,,,,QJ_kpQvdMGo-e431fdf359e9fea43b2b8bc94d5abb0e.webm +782,bEh1mwstF1A-ba9c220b70e72f93d92e587df34c3f05.webm,bEh1mwstF1A-ba9c220b70e72f93d92e587df34c3f05.webm,,,,,,,,,,,,,,,,bEh1mwstF1A-ba9c220b70e72f93d92e587df34c3f05.webm +783,PzOIKQI8Yxs-c2a0784eba56efe1bf1460b0c5b420db.webm,PzOIKQI8Yxs-c2a0784eba56efe1bf1460b0c5b420db.webm,,,,,,,,,,,,,,,,PzOIKQI8Yxs-c2a0784eba56efe1bf1460b0c5b420db.webm +784,XPBOoPh0S8g-6a80debb501b0fef05f0e058409d5151.webm,XPBOoPh0S8g-6a80debb501b0fef05f0e058409d5151.webm,,,,,,,,,,,,,,,,XPBOoPh0S8g-6a80debb501b0fef05f0e058409d5151.webm +785,7Q1nIn0N7GU-4c68029149af6f4d08bbc80a7e35d41e.webm,7Q1nIn0N7GU-4c68029149af6f4d08bbc80a7e35d41e.webm,,,,,,,,,,,,,,,,7Q1nIn0N7GU-4c68029149af6f4d08bbc80a7e35d41e.webm +787,sAHXP7VfRJY-9dfefdc6fe1d1a2d60ddb62f3569ca48.mp4,sAHXP7VfRJY-9dfefdc6fe1d1a2d60ddb62f3569ca48.mp4,,,,,,,,,,,,,,,,sAHXP7VfRJY-9dfefdc6fe1d1a2d60ddb62f3569ca48.mp4 +788,MfxUgvRFlRk-1107dfb9c4a1512f44c08389622d25aa.mp4,MfxUgvRFlRk-1107dfb9c4a1512f44c08389622d25aa.mp4,,,,,,,,,,,,,,,,MfxUgvRFlRk-1107dfb9c4a1512f44c08389622d25aa.mp4 +789,Yd6K0DIfbxY-9c6e124c19995c4c6087002fb7c2ce4b.webm,Yd6K0DIfbxY-9c6e124c19995c4c6087002fb7c2ce4b.webm,,,,,,,,,,,,,,,,Yd6K0DIfbxY-9c6e124c19995c4c6087002fb7c2ce4b.webm +790,gyXrAtvQPJM-c252202ad16c69f3925c992c0cb38c42.mp4,gyXrAtvQPJM-c252202ad16c69f3925c992c0cb38c42.mp4,,,,,,,,,,,,,,,,gyXrAtvQPJM-c252202ad16c69f3925c992c0cb38c42.mp4 +791,Dtg3fbZls6A-f5815afaa1e954a85c3387ee0717e6ab.mp4,Dtg3fbZls6A-f5815afaa1e954a85c3387ee0717e6ab.mp4,,,,,,,,,,,,,,,,Dtg3fbZls6A-f5815afaa1e954a85c3387ee0717e6ab.mp4 +792,PI1c2zw-ODQ-e0aa2ea083e1f6221e3dac2f59d70166.mp4,PI1c2zw-ODQ-e0aa2ea083e1f6221e3dac2f59d70166.mp4,,,,,,,,,,,,,,,,PI1c2zw-ODQ-e0aa2ea083e1f6221e3dac2f59d70166.mp4 +795,dkXwPdf4qEg-b4af2f05e281f364c6a28a607f18205f.webm,dkXwPdf4qEg-b4af2f05e281f364c6a28a607f18205f.webm,,,,,,,,,,,,,,,,dkXwPdf4qEg-b4af2f05e281f364c6a28a607f18205f.webm +796,CiM_kAiL-GU-c7c3e438a61ee762b1cf4695f109cb09.mp4,CiM_kAiL-GU-c7c3e438a61ee762b1cf4695f109cb09.mp4,,,,,,,,,,,,,,,,CiM_kAiL-GU-c7c3e438a61ee762b1cf4695f109cb09.mp4 +797,tv4hywj3RuY-f54965044de27f97b0b2796c941dca08.webm,tv4hywj3RuY-f54965044de27f97b0b2796c941dca08.webm,,,,,,,,,,,,,,,,tv4hywj3RuY-f54965044de27f97b0b2796c941dca08.webm +798,7-OZT6BcirA-7a8a359044a0dbabeb6ffffffe5ef379.mp4,7-OZT6BcirA-7a8a359044a0dbabeb6ffffffe5ef379.mp4,,,,,,,,,,,,,,,,7-OZT6BcirA-7a8a359044a0dbabeb6ffffffe5ef379.mp4 +799,U7tv0g4HGcM-ae485364219fd9621db85950204f232d.mp4,U7tv0g4HGcM-ae485364219fd9621db85950204f232d.mp4,,,,,,,,,,,,,,,,U7tv0g4HGcM-ae485364219fd9621db85950204f232d.mp4 +800,ZXVxCqFDsJA-719ad82608276e806437f48e5abd06a2.webm,ZXVxCqFDsJA-719ad82608276e806437f48e5abd06a2.webm,,,,,,,,,,,,,,,,ZXVxCqFDsJA-719ad82608276e806437f48e5abd06a2.webm +801,mmuu73JjSEM-b52bfda02d5987c9f49d74b552633e33.webm,mmuu73JjSEM-b52bfda02d5987c9f49d74b552633e33.webm,,,,,,,,,,,,,,,,mmuu73JjSEM-b52bfda02d5987c9f49d74b552633e33.webm +802,tBw0CCBj3EA-8ec417112d55a66b4a797fd3988857bc.mp4,tBw0CCBj3EA-8ec417112d55a66b4a797fd3988857bc.mp4,,,,,,,,,,,,,,,,tBw0CCBj3EA-8ec417112d55a66b4a797fd3988857bc.mp4 +803,cIpVMLyY2k4-6158a0f6c7723c622baaa11bb14df913.mp4,cIpVMLyY2k4-6158a0f6c7723c622baaa11bb14df913.mp4,,,,,,,,,,,,,,,,cIpVMLyY2k4-6158a0f6c7723c622baaa11bb14df913.mp4 +804,3QMvwN1z8w4-3c7641ceea0a009c3c72c8bbf74fb295.mp4,3QMvwN1z8w4-3c7641ceea0a009c3c72c8bbf74fb295.mp4,,,,,,,,,,,,,,,,3QMvwN1z8w4-3c7641ceea0a009c3c72c8bbf74fb295.mp4 +805,rXG7c2cPxrA-8f26443eea9512b21c9c3f33fcc0a96e.mp4,rXG7c2cPxrA-8f26443eea9512b21c9c3f33fcc0a96e.mp4,,,,,,,,,,,,,,,,rXG7c2cPxrA-8f26443eea9512b21c9c3f33fcc0a96e.mp4 +806,9TP15oM6L_Q-8d9579a342fd6ac0cddb7176527c8968.webm,9TP15oM6L_Q-8d9579a342fd6ac0cddb7176527c8968.webm,,,,,,,,,,,,,,,,9TP15oM6L_Q-8d9579a342fd6ac0cddb7176527c8968.webm +807,OAKk_dT49z8-8203d19fe826bdd61656f7a4d27e721b.webm,OAKk_dT49z8-8203d19fe826bdd61656f7a4d27e721b.webm,,,,,,,,,,,,,,,,OAKk_dT49z8-8203d19fe826bdd61656f7a4d27e721b.webm +808,MkO6dhr47dI-e7ca5f851de56b43cfa664fc00408f9a.webm,MkO6dhr47dI-e7ca5f851de56b43cfa664fc00408f9a.webm,,,,,,,,,,,,,,,,MkO6dhr47dI-e7ca5f851de56b43cfa664fc00408f9a.webm +812,Kj2ifW8UjqQ-b93d0775c112a09d7b7678bc89c7a350.mp4,Kj2ifW8UjqQ-b93d0775c112a09d7b7678bc89c7a350.mp4,,,,,,,,,,,,,,,,Kj2ifW8UjqQ-b93d0775c112a09d7b7678bc89c7a350.mp4 +813,pHT4uT5hRPc-865b5131502ed8e25e3da5b4429eaa21.webm,pHT4uT5hRPc-865b5131502ed8e25e3da5b4429eaa21.webm,,,,,,,,,,,,,,,,pHT4uT5hRPc-865b5131502ed8e25e3da5b4429eaa21.webm +814,yrZn5k6fAW0-163187afd80609c202de530fce616dd8.mp4,yrZn5k6fAW0-163187afd80609c202de530fce616dd8.mp4,,,,,,,,,,,,,,,,yrZn5k6fAW0-163187afd80609c202de530fce616dd8.mp4 +815,SzrRdzJCSQA-c4c4d9065fdcf43ff94e70bd3fe9bed4.webm,SzrRdzJCSQA-c4c4d9065fdcf43ff94e70bd3fe9bed4.webm,,,,,,,,,,,,,,,,SzrRdzJCSQA-c4c4d9065fdcf43ff94e70bd3fe9bed4.webm +816,A_bRcEz7ApM-a1c4474e870a6aa61005c7809f210562.webm,A_bRcEz7ApM-a1c4474e870a6aa61005c7809f210562.webm,,,,,,,,,,,,,,,,A_bRcEz7ApM-a1c4474e870a6aa61005c7809f210562.webm +817,yqHVLWNH6jw-985430dd4548fcc321312d894e0cbc7c.mp4,yqHVLWNH6jw-985430dd4548fcc321312d894e0cbc7c.mp4,,,,,,,,,,,,,,,,yqHVLWNH6jw-985430dd4548fcc321312d894e0cbc7c.mp4 +819,4-fW8zmQAp8-afffc352390f5a8cdca91db9d9ea19e6.mp4,4-fW8zmQAp8-afffc352390f5a8cdca91db9d9ea19e6.mp4,,,,,,,,,,,,,,,,4-fW8zmQAp8-afffc352390f5a8cdca91db9d9ea19e6.mp4 +821,b9ErO_x9nXg-67426bb8addcc272591cf476445e97d2.webm,b9ErO_x9nXg-67426bb8addcc272591cf476445e97d2.webm,,,,,,,,,,,,,,,,b9ErO_x9nXg-67426bb8addcc272591cf476445e97d2.webm +822,Ib-Q2OgydMI-f108ab8e0dc2ae66c4b412cc4d732ce6.mp4,Ib-Q2OgydMI-f108ab8e0dc2ae66c4b412cc4d732ce6.mp4,,,,,,,,,,,,,,,,Ib-Q2OgydMI-f108ab8e0dc2ae66c4b412cc4d732ce6.mp4 +823,4wkOayHnsT8-47fd5c5e3ecbed3693a57885aed5f4e4.webm,4wkOayHnsT8-47fd5c5e3ecbed3693a57885aed5f4e4.webm,,,,,,,,,,,,,,,,4wkOayHnsT8-47fd5c5e3ecbed3693a57885aed5f4e4.webm +824,7rPk7RDxqgQ-cfa671b5f48237c40e8d14d4c22e1c9d.webm,7rPk7RDxqgQ-cfa671b5f48237c40e8d14d4c22e1c9d.webm,,,,,,,,,,,,,,,,7rPk7RDxqgQ-cfa671b5f48237c40e8d14d4c22e1c9d.webm +825,Fc-vxJ7RSmY-f0e695b872349f67aa6250b770696b92.webm,Fc-vxJ7RSmY-f0e695b872349f67aa6250b770696b92.webm,,,,,,,,,,,,,,,,Fc-vxJ7RSmY-f0e695b872349f67aa6250b770696b92.webm +826,_wPHabIm_ME-53391fe8f06ebee576166080fc1afaad.webm,_wPHabIm_ME-53391fe8f06ebee576166080fc1afaad.webm,,,,,,,,,,,,,,,,_wPHabIm_ME-53391fe8f06ebee576166080fc1afaad.webm +827,zUtEpn9RKtE-c314317ca5d69d30d798660c9d1139a8.mp4,zUtEpn9RKtE-c314317ca5d69d30d798660c9d1139a8.mp4,,,,,,,,,,,,,,,,zUtEpn9RKtE-c314317ca5d69d30d798660c9d1139a8.mp4 +828,gJMBrAMnUgI-faaf087bd6fe194ac801ef6f8c7bcaf7.webm,gJMBrAMnUgI-faaf087bd6fe194ac801ef6f8c7bcaf7.webm,,,,,,,,,,,,,,,,gJMBrAMnUgI-faaf087bd6fe194ac801ef6f8c7bcaf7.webm +829,JHNrXuMp7_8-65bc736faaf4de679db6f2ee3b4aca1d.mp4,JHNrXuMp7_8-65bc736faaf4de679db6f2ee3b4aca1d.mp4,,,,,,,,,,,,,,,,JHNrXuMp7_8-65bc736faaf4de679db6f2ee3b4aca1d.mp4 +831,S9hvQli9UsM-472c638d47247e8835c871fd92b5fe0d.webm,S9hvQli9UsM-472c638d47247e8835c871fd92b5fe0d.webm,,,,,,,,,,,,,,,,S9hvQli9UsM-472c638d47247e8835c871fd92b5fe0d.webm +832,9wK41NTFu2s-0f1b1ef5e01bcb5e4eb89bdb1819d3c7.mp4,9wK41NTFu2s-0f1b1ef5e01bcb5e4eb89bdb1819d3c7.mp4,,,,,,,,,,,,,,,,9wK41NTFu2s-0f1b1ef5e01bcb5e4eb89bdb1819d3c7.mp4 +833,Mfj3Iw0DWZ8-001069fa38b10a6228190cab1f36ff8a.webm,Mfj3Iw0DWZ8-001069fa38b10a6228190cab1f36ff8a.webm,,,,,,,,,,,,,,,,Mfj3Iw0DWZ8-001069fa38b10a6228190cab1f36ff8a.webm +834,cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151.mp4,cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151.mp4,,,,,,,,,,,,,,,,cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151.mp4 +835,hMZ2ypzIPUs-9acf918df62ff0f08efd5b18fe6ad39c.mp4,hMZ2ypzIPUs-9acf918df62ff0f08efd5b18fe6ad39c.mp4,,,,,,,,,,,,,,,,hMZ2ypzIPUs-9acf918df62ff0f08efd5b18fe6ad39c.mp4 +837,I6zzr4VX6p4-c739a91ac53a5d7cc5794185207542e2.mp4,I6zzr4VX6p4-c739a91ac53a5d7cc5794185207542e2.mp4,,,,,,,,,,,,,,,,I6zzr4VX6p4-c739a91ac53a5d7cc5794185207542e2.mp4 +838,pelQ2We2BTM-a2f5381cec84bbcabf867fc62719d7f2.webm,pelQ2We2BTM-a2f5381cec84bbcabf867fc62719d7f2.webm,,,,,,,,,,,,,,,,pelQ2We2BTM-a2f5381cec84bbcabf867fc62719d7f2.webm +839,34Sozqs9YD8-c6894173310fbbbff578095cd9bdf9c7.webm,34Sozqs9YD8-c6894173310fbbbff578095cd9bdf9c7.webm,,,,,,,,,,,,,,,,34Sozqs9YD8-c6894173310fbbbff578095cd9bdf9c7.webm +840,P05oZnzPEKE-87ea1cd4f442c72e51a9240adc2c88ad.mp4,P05oZnzPEKE-87ea1cd4f442c72e51a9240adc2c88ad.mp4,,,,,,,,,,,,,,,,P05oZnzPEKE-87ea1cd4f442c72e51a9240adc2c88ad.mp4 +842,KD-zqWSnLHg-b59c0c64a8cb8a1dc1ebd5452767bdd8.mp4,KD-zqWSnLHg-b59c0c64a8cb8a1dc1ebd5452767bdd8.mp4,,,,,,,,,,,,,,,,KD-zqWSnLHg-b59c0c64a8cb8a1dc1ebd5452767bdd8.mp4 +843,mlkK9GpYSsI-30b746854acbe3c4456fd4df6ad492fc.mp4,mlkK9GpYSsI-30b746854acbe3c4456fd4df6ad492fc.mp4,,,,,,,,,,,,,,,,mlkK9GpYSsI-30b746854acbe3c4456fd4df6ad492fc.mp4 +844,tNfa_dmYsNY-76dab49d3cb53638c57e1ba59dc5db54.webm,tNfa_dmYsNY-76dab49d3cb53638c57e1ba59dc5db54.webm,,,,,,,,,,,,,,,,tNfa_dmYsNY-76dab49d3cb53638c57e1ba59dc5db54.webm +845,hWjAAMoC3u8-054448970c8b6ea05677e7084c994b5a.mp4,hWjAAMoC3u8-054448970c8b6ea05677e7084c994b5a.mp4,,,,,,,,,,,,,,,,hWjAAMoC3u8-054448970c8b6ea05677e7084c994b5a.mp4 +846,A2zTXAVR-1k-75dfb18824487bbf15d09dd56e74ff36.webm,A2zTXAVR-1k-75dfb18824487bbf15d09dd56e74ff36.webm,,,,,,,,,,,,,,,,A2zTXAVR-1k-75dfb18824487bbf15d09dd56e74ff36.webm +847,d3kOriEJzpE-59f64f423839e0aac237dccfd52d0b09.webm,d3kOriEJzpE-59f64f423839e0aac237dccfd52d0b09.webm,,,,,,,,,,,,,,,,d3kOriEJzpE-59f64f423839e0aac237dccfd52d0b09.webm +848,_i9dTl3Wsfg-c1105f51a032eb9ec895ed4209acbde7.webm,_i9dTl3Wsfg-c1105f51a032eb9ec895ed4209acbde7.webm,,,,,,,,,,,,,,,,_i9dTl3Wsfg-c1105f51a032eb9ec895ed4209acbde7.webm +850,Xsg65rh_K88-cb538c33716b35f19c13b7016bd03fbb.mp4,Xsg65rh_K88-cb538c33716b35f19c13b7016bd03fbb.mp4,,,,,,,,,,,,,,,,Xsg65rh_K88-cb538c33716b35f19c13b7016bd03fbb.mp4 +851,TK_l7c5npMk-5af25bb52a695b63800dd8ea6d8b96fb.webm,TK_l7c5npMk-5af25bb52a695b63800dd8ea6d8b96fb.webm,,,,,,,,,,,,,,,,TK_l7c5npMk-5af25bb52a695b63800dd8ea6d8b96fb.webm +853,EWBFATBVjYQ-46953620e55d3305abd30448dd2fc40e.mp4,EWBFATBVjYQ-46953620e55d3305abd30448dd2fc40e.mp4,,,,,,,,,,,,,,,,EWBFATBVjYQ-46953620e55d3305abd30448dd2fc40e.mp4 +854,LO-gexPbGlk-379dc74c9f05962c2d85d3fc8d60ac39.mp4,LO-gexPbGlk-379dc74c9f05962c2d85d3fc8d60ac39.mp4,,,,,,,,,,,,,,,,LO-gexPbGlk-379dc74c9f05962c2d85d3fc8d60ac39.mp4 +856,cd8kT9QaX3g-cf0800edb3f6c264367b41a18dc25e05.webm,cd8kT9QaX3g-cf0800edb3f6c264367b41a18dc25e05.webm,,,,,,,,,,,,,,,,cd8kT9QaX3g-cf0800edb3f6c264367b41a18dc25e05.webm +857,No7OjWSI9ww-94e6af11e0a9ce979b5e3ad6ce2d6071.webm,No7OjWSI9ww-94e6af11e0a9ce979b5e3ad6ce2d6071.webm,,,,,,,,,,,,,,,,No7OjWSI9ww-94e6af11e0a9ce979b5e3ad6ce2d6071.webm +858,vZuA1l4qEJo-433e27995f54aeada3c43536500a6efb.webm,vZuA1l4qEJo-433e27995f54aeada3c43536500a6efb.webm,,,,,,,,,,,,,,,,vZuA1l4qEJo-433e27995f54aeada3c43536500a6efb.webm +859,JX_FxS6onOc-726d8602abd8f7e3f36dea2e849c8779.webm,JX_FxS6onOc-726d8602abd8f7e3f36dea2e849c8779.webm,,,,,,,,,,,,,,,,JX_FxS6onOc-726d8602abd8f7e3f36dea2e849c8779.webm +860,GhmiBQWoT0Y-9ba30d949fae62dfc38da4dffe6563a3.webm,GhmiBQWoT0Y-9ba30d949fae62dfc38da4dffe6563a3.webm,,,,,,,,,,,,,,,,GhmiBQWoT0Y-9ba30d949fae62dfc38da4dffe6563a3.webm +861,y-bLKCswzZE-f1de4a1faafd9e07e80f9bcf85d3ac6f.mp4,y-bLKCswzZE-f1de4a1faafd9e07e80f9bcf85d3ac6f.mp4,,,,,,,,,,,,,,,,y-bLKCswzZE-f1de4a1faafd9e07e80f9bcf85d3ac6f.mp4 +862,Xjh5AXi_f64-960721c141731d77fbdee5426630eaee.webm,Xjh5AXi_f64-960721c141731d77fbdee5426630eaee.webm,,,,,,,,,,,,,,,,Xjh5AXi_f64-960721c141731d77fbdee5426630eaee.webm +865,1qEIxFP48Xc-6cca9581fbff6cf6b525d43a5969f84f.webm,1qEIxFP48Xc-6cca9581fbff6cf6b525d43a5969f84f.webm,,,,,,,,,,,,,,,,1qEIxFP48Xc-6cca9581fbff6cf6b525d43a5969f84f.webm +866,xQmDuA5e4zc-acc98b37097e45d63237db8fd09fda49.webm,xQmDuA5e4zc-acc98b37097e45d63237db8fd09fda49.webm,,,,,,,,,,,,,,,,xQmDuA5e4zc-acc98b37097e45d63237db8fd09fda49.webm +867,VaOJ2722ZhM-5c410623e67cf020d7e1d2d64c2b6cf7.webm,VaOJ2722ZhM-5c410623e67cf020d7e1d2d64c2b6cf7.webm,,,,,,,,,,,,,,,,VaOJ2722ZhM-5c410623e67cf020d7e1d2d64c2b6cf7.webm +868,pWXYplqW-Xw-48460c3c0ca7d02fc40a678de883d4e1.webm,pWXYplqW-Xw-48460c3c0ca7d02fc40a678de883d4e1.webm,,,,,,,,,,,,,,,,pWXYplqW-Xw-48460c3c0ca7d02fc40a678de883d4e1.webm +872,sc3ojoWc_mU-e3d81f3a88cbd17ee372171636f1c281.webm,sc3ojoWc_mU-e3d81f3a88cbd17ee372171636f1c281.webm,,,,,,,,,,,,,,,,sc3ojoWc_mU-e3d81f3a88cbd17ee372171636f1c281.webm +873,ranjedmwXmM-a65d1ff1809ed988afe55a7f442bbf17.webm,ranjedmwXmM-a65d1ff1809ed988afe55a7f442bbf17.webm,,,,,,,,,,,,,,,,ranjedmwXmM-a65d1ff1809ed988afe55a7f442bbf17.webm +874,0Rh5pOUiiw8-bf2ed873d18c01c300519059e7998b4c.webm,0Rh5pOUiiw8-bf2ed873d18c01c300519059e7998b4c.webm,,,,,,,,,,,,,,,,0Rh5pOUiiw8-bf2ed873d18c01c300519059e7998b4c.webm +877,hxqFsZEFKk4-db0a8f3cca581dacd29c93c012716bbe.mp4,hxqFsZEFKk4-db0a8f3cca581dacd29c93c012716bbe.mp4,,,,,,,,,,,,,,,,hxqFsZEFKk4-db0a8f3cca581dacd29c93c012716bbe.mp4 +878,F235OS531pc-e0635b9aac252b5d5ac40c5c88d3f3bb.webm,F235OS531pc-e0635b9aac252b5d5ac40c5c88d3f3bb.webm,,,,,,,,,,,,,,,,F235OS531pc-e0635b9aac252b5d5ac40c5c88d3f3bb.webm +879,Xn4nXeTu7bM-0edf1e5cc12c656c329dd9a345d2b0eb.webm,Xn4nXeTu7bM-0edf1e5cc12c656c329dd9a345d2b0eb.webm,,,,,,,,,,,,,,,,Xn4nXeTu7bM-0edf1e5cc12c656c329dd9a345d2b0eb.webm +880,JY0uGmxd5Vg-bb8da3117fbe3359f90733821298189a.webm,JY0uGmxd5Vg-bb8da3117fbe3359f90733821298189a.webm,,,,,,,,,,,,,,,,JY0uGmxd5Vg-bb8da3117fbe3359f90733821298189a.webm +881,A_ubLdarod0-5077c66106ec1ce2b1b7d72d057877e5.webm,A_ubLdarod0-5077c66106ec1ce2b1b7d72d057877e5.webm,,,,,,,,,,,,,,,,A_ubLdarod0-5077c66106ec1ce2b1b7d72d057877e5.webm +882,qTrH-05GSIk-29f92f9d1b7b0135c59b7676176e599a.webm,qTrH-05GSIk-29f92f9d1b7b0135c59b7676176e599a.webm,,,,,,,,,,,,,,,,qTrH-05GSIk-29f92f9d1b7b0135c59b7676176e599a.webm +885,WycK92flL3E-6e33ca88a24d402dad1e995791ef771a.webm,WycK92flL3E-6e33ca88a24d402dad1e995791ef771a.webm,,,,,,,,,,,,,,,,WycK92flL3E-6e33ca88a24d402dad1e995791ef771a.webm +886,QQbz-GJD6yA-a58c5e331bcd150bb1ccabe11e48e746.webm,QQbz-GJD6yA-a58c5e331bcd150bb1ccabe11e48e746.webm,,,,,,,,,,,,,,,,QQbz-GJD6yA-a58c5e331bcd150bb1ccabe11e48e746.webm +887,0L2yG83Xoq4-023d7f965b7b7ac7424da852dceb5b2c.webm,0L2yG83Xoq4-023d7f965b7b7ac7424da852dceb5b2c.webm,,,,,,,,,,,,,,,,0L2yG83Xoq4-023d7f965b7b7ac7424da852dceb5b2c.webm +888,9H_zNXMgTNE-49e34b8bb457bd873cf7dda0679df43c.webm,9H_zNXMgTNE-49e34b8bb457bd873cf7dda0679df43c.webm,,,,,,,,,,,,,,,,9H_zNXMgTNE-49e34b8bb457bd873cf7dda0679df43c.webm +889,7i44pI9oEs8-cc91e5c7016c7f2ee3a4b756e1468110.webm,7i44pI9oEs8-cc91e5c7016c7f2ee3a4b756e1468110.webm,,,,,,,,,,,,,,,,7i44pI9oEs8-cc91e5c7016c7f2ee3a4b756e1468110.webm +890,pY1TtTvkviA-f48bfe2e2a97bdf7ee41945ca8d78d64.mp4,pY1TtTvkviA-f48bfe2e2a97bdf7ee41945ca8d78d64.mp4,,,,,,,,,,,,,,,,pY1TtTvkviA-f48bfe2e2a97bdf7ee41945ca8d78d64.mp4 +891,kknllh-5nTo-cb32934e389ee68195140f074305f177.mp4,kknllh-5nTo-cb32934e389ee68195140f074305f177.mp4,,,,,,,,,,,,,,,,kknllh-5nTo-cb32934e389ee68195140f074305f177.mp4 +892,ASdkbpGjp_M-725dff2ff8489e9b4e5298d4d1603289.webm,ASdkbpGjp_M-725dff2ff8489e9b4e5298d4d1603289.webm,,,,,,,,,,,,,,,,ASdkbpGjp_M-725dff2ff8489e9b4e5298d4d1603289.webm +894,UQtP7N0UIYg-fdc2220bd7de2988a55019fa41eb9f35.mp4,UQtP7N0UIYg-fdc2220bd7de2988a55019fa41eb9f35.mp4,,,,,,,,,,,,,,,,UQtP7N0UIYg-fdc2220bd7de2988a55019fa41eb9f35.mp4 +895,RO3B6_yL1gk-1eadec850c689b91737eddffba3d177a.mp4,RO3B6_yL1gk-1eadec850c689b91737eddffba3d177a.mp4,,,,,,,,,,,,,,,,RO3B6_yL1gk-1eadec850c689b91737eddffba3d177a.mp4 +896,R-0drfUiAwQ-f7cea25e968081438d25739eebec36c1.mp4,R-0drfUiAwQ-f7cea25e968081438d25739eebec36c1.mp4,,,,,,,,,,,,,,,,R-0drfUiAwQ-f7cea25e968081438d25739eebec36c1.mp4 +897,LvjGpSBIHoE-942bafc1f0bf7bdb148d9ebb933cfe9c.mp4,LvjGpSBIHoE-942bafc1f0bf7bdb148d9ebb933cfe9c.mp4,,,,,,,,,,,,,,,,LvjGpSBIHoE-942bafc1f0bf7bdb148d9ebb933cfe9c.mp4 +898,FUAJcXie44E-822ad7a617c66e057a050f25099dfc64.mp4,FUAJcXie44E-822ad7a617c66e057a050f25099dfc64.mp4,,,,,,,,,,,,,,,,FUAJcXie44E-822ad7a617c66e057a050f25099dfc64.mp4 +899,_gHGcO7c7QI-1d0a5f2e469f9313542e0930e8723bd5.webm,_gHGcO7c7QI-1d0a5f2e469f9313542e0930e8723bd5.webm,,,,,,,,,,,,,,,,_gHGcO7c7QI-1d0a5f2e469f9313542e0930e8723bd5.webm +900,8YYVVQIX_MU-87d0f65688ee25197643e871e53fa813.webm,8YYVVQIX_MU-87d0f65688ee25197643e871e53fa813.webm,,,,,,,,,,,,,,,,8YYVVQIX_MU-87d0f65688ee25197643e871e53fa813.webm +902,tN2HCzebd8A-dfbde38f507c1aaf9234c238820f38b2.mp4,tN2HCzebd8A-dfbde38f507c1aaf9234c238820f38b2.mp4,,,,,,,,,,,,,,,,tN2HCzebd8A-dfbde38f507c1aaf9234c238820f38b2.mp4 +903,LBcPLJjNAL8-897dc0a2bb9524a745e15194a2269f29.mp4,LBcPLJjNAL8-897dc0a2bb9524a745e15194a2269f29.mp4,,,,,,,,,,,,,,,,LBcPLJjNAL8-897dc0a2bb9524a745e15194a2269f29.mp4 +905,Rz3g9MRIIt4-1db09c87e192c3638b978a65b4b0efd5.webm,Rz3g9MRIIt4-1db09c87e192c3638b978a65b4b0efd5.webm,,,,,,,,,,,,,,,,Rz3g9MRIIt4-1db09c87e192c3638b978a65b4b0efd5.webm +907,nlYDp0XIFyk-bdc9a88f2f450aa4c792ea7ec0629233.mp4,nlYDp0XIFyk-bdc9a88f2f450aa4c792ea7ec0629233.mp4,,,,,,,,,,,,,,,,nlYDp0XIFyk-bdc9a88f2f450aa4c792ea7ec0629233.mp4 +908,VaO-OpFPg2A-0eee60c766905dd04230864eee939e21.mp4,VaO-OpFPg2A-0eee60c766905dd04230864eee939e21.mp4,,,,,,,,,,,,,,,,VaO-OpFPg2A-0eee60c766905dd04230864eee939e21.mp4 +909,pm2tA7WOjmw-0090b8fcac8378ab2b7c81217f7acee0.mp4,pm2tA7WOjmw-0090b8fcac8378ab2b7c81217f7acee0.mp4,,,,,,,,,,,,,,,,pm2tA7WOjmw-0090b8fcac8378ab2b7c81217f7acee0.mp4 +910,358LbjKeTO8-80ddea2f9bb2d5a52ea543f7f1da2457.webm,358LbjKeTO8-80ddea2f9bb2d5a52ea543f7f1da2457.webm,,,,,,,,,,,,,,,,358LbjKeTO8-80ddea2f9bb2d5a52ea543f7f1da2457.webm +911,1TTBun1tpTE-e44b855baebe2869468ddd4ec08af9b1.webm,1TTBun1tpTE-e44b855baebe2869468ddd4ec08af9b1.webm,,,,,,,,,,,,,,,,1TTBun1tpTE-e44b855baebe2869468ddd4ec08af9b1.webm +912,AEftpDFjL1I-b552aebd133f196e487472ccc3c33241.mp4,AEftpDFjL1I-b552aebd133f196e487472ccc3c33241.mp4,,,,,,,,,,,,,,,,AEftpDFjL1I-b552aebd133f196e487472ccc3c33241.mp4 +913,Las2XQlLYNU-57e9ac111037fb646bad75d265398e46.mp4,Las2XQlLYNU-57e9ac111037fb646bad75d265398e46.mp4,,,,,,,,,,,,,,,,Las2XQlLYNU-57e9ac111037fb646bad75d265398e46.mp4 +914,l0UY_7M3Bng-a026394a9e4601a119e95f6657990b5f.webm,l0UY_7M3Bng-a026394a9e4601a119e95f6657990b5f.webm,,,,,,,,,,,,,,,,l0UY_7M3Bng-a026394a9e4601a119e95f6657990b5f.webm +915,zubjCZMxKy8-c4b530ced1fdc4aec2240982fc05f708.webm,zubjCZMxKy8-c4b530ced1fdc4aec2240982fc05f708.webm,,,,,,,,,,,,,,,,zubjCZMxKy8-c4b530ced1fdc4aec2240982fc05f708.webm +916,B0c585f_jCg-1b6ee2828e2019a6e3886aeae3100429.mp4,B0c585f_jCg-1b6ee2828e2019a6e3886aeae3100429.mp4,,,,,,,,,,,,,,,,B0c585f_jCg-1b6ee2828e2019a6e3886aeae3100429.mp4 +917,jtMObZ8lvAE-92e67d4ae24e3a34e2b72f65b36b84de.webm,jtMObZ8lvAE-92e67d4ae24e3a34e2b72f65b36b84de.webm,,,,,,,,,,,,,,,,jtMObZ8lvAE-92e67d4ae24e3a34e2b72f65b36b84de.webm +918,r5c4tCuZjTA-b908c2c90bc8cbd55f2ffe90220286c2.webm,r5c4tCuZjTA-b908c2c90bc8cbd55f2ffe90220286c2.webm,,,,,,,,,,,,,,,,r5c4tCuZjTA-b908c2c90bc8cbd55f2ffe90220286c2.webm +919,D4fS8wV-6UI-9418ac94ddf66e4a6a3137829b5560a7.webm,D4fS8wV-6UI-9418ac94ddf66e4a6a3137829b5560a7.webm,,,,,,,,,,,,,,,,D4fS8wV-6UI-9418ac94ddf66e4a6a3137829b5560a7.webm +920,wUbyGUny9xg-d6cab02b6b4dc2041b92e07f617c5097.mp4,wUbyGUny9xg-d6cab02b6b4dc2041b92e07f617c5097.mp4,,,,,,,,,,,,,,,,wUbyGUny9xg-d6cab02b6b4dc2041b92e07f617c5097.mp4 +921,qW-ru-pJnUk-b0b452de7156749c9d23b50222dc7527.mp4,qW-ru-pJnUk-b0b452de7156749c9d23b50222dc7527.mp4,,,,,,,,,,,,,,,,qW-ru-pJnUk-b0b452de7156749c9d23b50222dc7527.mp4 +922,K7H58ASLAGw-9ee50269d7421013a1c9b642b04a8f2b.mp4,K7H58ASLAGw-9ee50269d7421013a1c9b642b04a8f2b.mp4,,,,,,,,,,,,,,,,K7H58ASLAGw-9ee50269d7421013a1c9b642b04a8f2b.mp4 +923,joP7dtFggMY-f44dd8a34b3669a2be2453132c4d02e2.webm,joP7dtFggMY-f44dd8a34b3669a2be2453132c4d02e2.webm,,,,,,,,,,,,,,,,joP7dtFggMY-f44dd8a34b3669a2be2453132c4d02e2.webm +924,HCmHG5lYH_E-23808a190b37f22c529f93f4dd199fa1.mp4,HCmHG5lYH_E-23808a190b37f22c529f93f4dd199fa1.mp4,,,,,,,,,,,,,,,,HCmHG5lYH_E-23808a190b37f22c529f93f4dd199fa1.mp4 +925,96YibY7epJs-b6fe01be35f9bdd63a715a878f846284.mp4,96YibY7epJs-b6fe01be35f9bdd63a715a878f846284.mp4,,,,,,,,,,,,,,,,96YibY7epJs-b6fe01be35f9bdd63a715a878f846284.mp4 +926,Xoj4I0BASlo-d7e1359ecfd7ad39f6d1b923e238847a.mp4,Xoj4I0BASlo-d7e1359ecfd7ad39f6d1b923e238847a.mp4,,,,,,,,,,,,,,,,Xoj4I0BASlo-d7e1359ecfd7ad39f6d1b923e238847a.mp4 +927,e5pPobzSlKA-3c02b60c1fbdf36a296ea50a7a3d44e4.webm,e5pPobzSlKA-3c02b60c1fbdf36a296ea50a7a3d44e4.webm,,,,,,,,,,,,,,,,e5pPobzSlKA-3c02b60c1fbdf36a296ea50a7a3d44e4.webm +928,lbuGNC636tM-be97bb67b748580d77cb28588fbd8eff.webm,lbuGNC636tM-be97bb67b748580d77cb28588fbd8eff.webm,,,,,,,,,,,,,,,,lbuGNC636tM-be97bb67b748580d77cb28588fbd8eff.webm +929,7w1dfvReCJs-8d6f44cdb5be3bc8f8e6f5f80d2cdc33.mp4,7w1dfvReCJs-8d6f44cdb5be3bc8f8e6f5f80d2cdc33.mp4,,,,,,,,,,,,,,,,7w1dfvReCJs-8d6f44cdb5be3bc8f8e6f5f80d2cdc33.mp4 +930,t--lkQRJXhY-a1ea528573e203ed08eaf15c28581ba0.mp4,t--lkQRJXhY-a1ea528573e203ed08eaf15c28581ba0.mp4,,,,,,,,,,,,,,,,t--lkQRJXhY-a1ea528573e203ed08eaf15c28581ba0.mp4 +932,TUO5IJ88DH4-fb587dc7013a93f9c0f8f3d2425794e6.webm,TUO5IJ88DH4-fb587dc7013a93f9c0f8f3d2425794e6.webm,,,,,,,,,,,,,,,,TUO5IJ88DH4-fb587dc7013a93f9c0f8f3d2425794e6.webm +933,zAvw9MzfjXU-114e8266928acd22e61e544e23fb64dd.webm,zAvw9MzfjXU-114e8266928acd22e61e544e23fb64dd.webm,,,,,,,,,,,,,,,,zAvw9MzfjXU-114e8266928acd22e61e544e23fb64dd.webm +934,UBK6Oj7wXvY-0c0a0ea3c693b0efa3d2dba26431c741.webm,UBK6Oj7wXvY-0c0a0ea3c693b0efa3d2dba26431c741.webm,,,,,,,,,,,,,,,,UBK6Oj7wXvY-0c0a0ea3c693b0efa3d2dba26431c741.webm +935,yb2phL2R8JE-e53a93f436a8f51dfed029d10d48fba5.webm,yb2phL2R8JE-e53a93f436a8f51dfed029d10d48fba5.webm,,,,,,,,,,,,,,,,yb2phL2R8JE-e53a93f436a8f51dfed029d10d48fba5.webm +937,bcDSg0PxCHU-c408aa87e57b5951ead6153d505261bc.webm,bcDSg0PxCHU-c408aa87e57b5951ead6153d505261bc.webm,,,,,,,,,,,,,,,,bcDSg0PxCHU-c408aa87e57b5951ead6153d505261bc.webm +938,h6UramvA7RA-4b3f028c49ddcc98c1b2a7fda460cdfc.webm,h6UramvA7RA-4b3f028c49ddcc98c1b2a7fda460cdfc.webm,,,,,,,,,,,,,,,,h6UramvA7RA-4b3f028c49ddcc98c1b2a7fda460cdfc.webm +939,CuR3mTU0HSg-a1bec4c06b1f78c43d7186bdf9e39135.webm,CuR3mTU0HSg-a1bec4c06b1f78c43d7186bdf9e39135.webm,,,,,,,,,,,,,,,,CuR3mTU0HSg-a1bec4c06b1f78c43d7186bdf9e39135.webm +941,RJjqlIM7_jo-02d505846cd69073929d60ad4223e101.webm,RJjqlIM7_jo-02d505846cd69073929d60ad4223e101.webm,,,,,,,,,,,,,,,,RJjqlIM7_jo-02d505846cd69073929d60ad4223e101.webm +943,1gKWuCvlOIQ-899b9a5ec15d9bad425f0cbcac19974c.webm,1gKWuCvlOIQ-899b9a5ec15d9bad425f0cbcac19974c.webm,,,,,,,,,,,,,,,,1gKWuCvlOIQ-899b9a5ec15d9bad425f0cbcac19974c.webm +944,ZrX5Fr3jCHg-ef98ff865f76ebc248d357c2223b40fc.webm,ZrX5Fr3jCHg-ef98ff865f76ebc248d357c2223b40fc.webm,,,,,,,,,,,,,,,,ZrX5Fr3jCHg-ef98ff865f76ebc248d357c2223b40fc.webm +945,XPlIsDR0Qhs-d46bc967a5f1888269d7a71606517b06.mp4,XPlIsDR0Qhs-d46bc967a5f1888269d7a71606517b06.mp4,,,,,,,,,,,,,,,,XPlIsDR0Qhs-d46bc967a5f1888269d7a71606517b06.mp4 +946,SknhjJQqLZ0-b13acde24077a350de26b8cba37bc66e.webm,SknhjJQqLZ0-b13acde24077a350de26b8cba37bc66e.webm,,,,,,,,,,,,,,,,SknhjJQqLZ0-b13acde24077a350de26b8cba37bc66e.webm +947,pgERmiWxR3s-a7c2e57b2fc3aa137ec3a7ba33a6a18c.mp4,pgERmiWxR3s-a7c2e57b2fc3aa137ec3a7ba33a6a18c.mp4,,,,,,,,,,,,,,,,pgERmiWxR3s-a7c2e57b2fc3aa137ec3a7ba33a6a18c.mp4 +948,rxnHsjzwQHU-807f95a3f469f8fdde37abad06790e10.webm,rxnHsjzwQHU-807f95a3f469f8fdde37abad06790e10.webm,,,,,,,,,,,,,,,,rxnHsjzwQHU-807f95a3f469f8fdde37abad06790e10.webm +949,WX2bpOBqBYI-432a0e8b5cd84efb78e8644a8b7f6748.webm,WX2bpOBqBYI-432a0e8b5cd84efb78e8644a8b7f6748.webm,,,,,,,,,,,,,,,,WX2bpOBqBYI-432a0e8b5cd84efb78e8644a8b7f6748.webm +950,6zf0OE1bmNo-392c613134b5e7172454f2b385aceac2.webm,6zf0OE1bmNo-392c613134b5e7172454f2b385aceac2.webm,,,,,,,,,,,,,,,,6zf0OE1bmNo-392c613134b5e7172454f2b385aceac2.webm +951,ObteGc60Fes-086a675bfa93745cbae675e362b6783d.mp4,ObteGc60Fes-086a675bfa93745cbae675e362b6783d.mp4,,,,,,,,,,,,,,,,ObteGc60Fes-086a675bfa93745cbae675e362b6783d.mp4 +952,PlntsbsA4Cw-adcf874a792071e2432211cf686657e5.webm,PlntsbsA4Cw-adcf874a792071e2432211cf686657e5.webm,,,,,,,,,,,,,,,,PlntsbsA4Cw-adcf874a792071e2432211cf686657e5.webm +953,8NNT66KhtEE-551a47f9f40789a93dee20af11b34638.webm,8NNT66KhtEE-551a47f9f40789a93dee20af11b34638.webm,,,,,,,,,,,,,,,,8NNT66KhtEE-551a47f9f40789a93dee20af11b34638.webm +954,pbDsd59el7o-2f16bf60996db421768faad88ed3e772.mp4,pbDsd59el7o-2f16bf60996db421768faad88ed3e772.mp4,,,,,,,,,,,,,,,,pbDsd59el7o-2f16bf60996db421768faad88ed3e772.mp4 +955,jY4IX_zjnjA-890a7789d02e256c79a12dcd8b31506d.mp4,jY4IX_zjnjA-890a7789d02e256c79a12dcd8b31506d.mp4,,,,,,,,,,,,,,,,jY4IX_zjnjA-890a7789d02e256c79a12dcd8b31506d.mp4 +957,bfSQtUGCR8k-1ae6897168dd126a294d4a78397111bd.webm,bfSQtUGCR8k-1ae6897168dd126a294d4a78397111bd.webm,,,,,,,,,,,,,,,,bfSQtUGCR8k-1ae6897168dd126a294d4a78397111bd.webm +958,8bY6EAR5Dhg-63c31e734fa459d1b7fe7db5016b59e9.mp4,8bY6EAR5Dhg-63c31e734fa459d1b7fe7db5016b59e9.mp4,,,,,,,,,,,,,,,,8bY6EAR5Dhg-63c31e734fa459d1b7fe7db5016b59e9.mp4 +959,PyBoAuAKHmk-5ee03041f8da9f0d8b684ba68ba8344c.webm,PyBoAuAKHmk-5ee03041f8da9f0d8b684ba68ba8344c.webm,,,,,,,,,,,,,,,,PyBoAuAKHmk-5ee03041f8da9f0d8b684ba68ba8344c.webm +960,7SHwYrvuLL0-bd232100a22e4e4f12ce43fe20880b5c.mp4,7SHwYrvuLL0-bd232100a22e4e4f12ce43fe20880b5c.mp4,,,,,,,,,,,,,,,,7SHwYrvuLL0-bd232100a22e4e4f12ce43fe20880b5c.mp4 +961,uexCWmLsCo0-b90624e7caf66928a0987e872cdb81a6.mp4,uexCWmLsCo0-b90624e7caf66928a0987e872cdb81a6.mp4,,,,,,,,,,,,,,,,uexCWmLsCo0-b90624e7caf66928a0987e872cdb81a6.mp4 +962,wd5laj7IH9I-d34145e40a3bde59f9f098cffaef6ddd.webm,wd5laj7IH9I-d34145e40a3bde59f9f098cffaef6ddd.webm,,,,,,,,,,,,,,,,wd5laj7IH9I-d34145e40a3bde59f9f098cffaef6ddd.webm +963,DgBREGiTV48-2c773753a64bbade3c57d57c88845521.webm,DgBREGiTV48-2c773753a64bbade3c57d57c88845521.webm,,,,,,,,,,,,,,,,DgBREGiTV48-2c773753a64bbade3c57d57c88845521.webm +964,FPeKK6AU6BM-0332ad7ffcf384368c777ae72c9c9e3f.mp4,FPeKK6AU6BM-0332ad7ffcf384368c777ae72c9c9e3f.mp4,,,,,,,,,,,,,,,,FPeKK6AU6BM-0332ad7ffcf384368c777ae72c9c9e3f.mp4 +965,7CkRqUYCY34-655eaecb3dfed60f0d3e208c545f3bfe.mp4,7CkRqUYCY34-655eaecb3dfed60f0d3e208c545f3bfe.mp4,,,,,,,,,,,,,,,,7CkRqUYCY34-655eaecb3dfed60f0d3e208c545f3bfe.mp4 +966,Tzh3XPVdCAs-493d4dbbe376d79fc0419d4891746410.webm,Tzh3XPVdCAs-493d4dbbe376d79fc0419d4891746410.webm,,,,,,,,,,,,,,,,Tzh3XPVdCAs-493d4dbbe376d79fc0419d4891746410.webm +967,S9oTX8TUIiI-0d83d8b828e278f6bd2a702e9e501734.webm,S9oTX8TUIiI-0d83d8b828e278f6bd2a702e9e501734.webm,,,,,,,,,,,,,,,,S9oTX8TUIiI-0d83d8b828e278f6bd2a702e9e501734.webm +970,WhVBuNfK1WI-74b819947d0cac5fe73107e3ed9b2e2f.webm,WhVBuNfK1WI-74b819947d0cac5fe73107e3ed9b2e2f.webm,,,,,,,,,,,,,,,,WhVBuNfK1WI-74b819947d0cac5fe73107e3ed9b2e2f.webm +971,bp5hrH2jYD4-00a1e210b8039384a2acfd194cbe561e.webm,bp5hrH2jYD4-00a1e210b8039384a2acfd194cbe561e.webm,,,,,,,,,,,,,,,,bp5hrH2jYD4-00a1e210b8039384a2acfd194cbe561e.webm +972,dyNmUgwGjCE-2410b0155be09313f3e785b890d54bb9.webm,dyNmUgwGjCE-2410b0155be09313f3e785b890d54bb9.webm,,,,,,,,,,,,,,,,dyNmUgwGjCE-2410b0155be09313f3e785b890d54bb9.webm +973,wg9uHEot_K8-20d0c867dc8d2296c92728ffed4a4937.webm,wg9uHEot_K8-20d0c867dc8d2296c92728ffed4a4937.webm,,,,,,,,,,,,,,,,wg9uHEot_K8-20d0c867dc8d2296c92728ffed4a4937.webm +974,pTHEG3O3HnA-beebba3f84d30dbbfde7a2abe12a5511.webm,pTHEG3O3HnA-beebba3f84d30dbbfde7a2abe12a5511.webm,,,,,,,,,,,,,,,,pTHEG3O3HnA-beebba3f84d30dbbfde7a2abe12a5511.webm +975,qx2fVS9AdZY-7f3a7a9562926e8576d7607916a71297.mp4,qx2fVS9AdZY-7f3a7a9562926e8576d7607916a71297.mp4,,,,,,,,,,,,,,,,qx2fVS9AdZY-7f3a7a9562926e8576d7607916a71297.mp4 +976,OGR8D_qXetE-d6b5b912dabea35e8fb9765248796d19.mp4,OGR8D_qXetE-d6b5b912dabea35e8fb9765248796d19.mp4,,,,,,,,,,,,,,,,OGR8D_qXetE-d6b5b912dabea35e8fb9765248796d19.mp4 +977,L8kCTymzjlI-5652888a805f8075367cf9dfbd6bf7b9.webm,L8kCTymzjlI-5652888a805f8075367cf9dfbd6bf7b9.webm,,,,,,,,,,,,,,,,L8kCTymzjlI-5652888a805f8075367cf9dfbd6bf7b9.webm +978,BKjNiRP3VHA-0ac41f47f9a783d48ad9e44aba277fc1.webm,BKjNiRP3VHA-0ac41f47f9a783d48ad9e44aba277fc1.webm,,,,,,,,,,,,,,,,BKjNiRP3VHA-0ac41f47f9a783d48ad9e44aba277fc1.webm +979,rCZSuzJs4zc-c859578ffb45b422c0d737a005066f9f.mp4,rCZSuzJs4zc-c859578ffb45b422c0d737a005066f9f.mp4,,,,,,,,,,,,,,,,rCZSuzJs4zc-c859578ffb45b422c0d737a005066f9f.mp4 +980,pAtgYq_oZuc-9263903a20566ec6054d2a75a3af91bf.mp4,pAtgYq_oZuc-9263903a20566ec6054d2a75a3af91bf.mp4,,,,,,,,,,,,,,,,pAtgYq_oZuc-9263903a20566ec6054d2a75a3af91bf.mp4 +981,goQ997A-2Rg-3868cc0461d95b09288d921b22610192.mp4,goQ997A-2Rg-3868cc0461d95b09288d921b22610192.mp4,,,,,,,,,,,,,,,,goQ997A-2Rg-3868cc0461d95b09288d921b22610192.mp4 +982,tUdeqJZAqHo-c744327606fca36080ec3a934786da73.mp4,tUdeqJZAqHo-c744327606fca36080ec3a934786da73.mp4,,,,,,,,,,,,,,,,tUdeqJZAqHo-c744327606fca36080ec3a934786da73.mp4 +983,4nWsDuz3n9E-e94b6eddfae7db6b2b21562cb16f5ad9.mp4,4nWsDuz3n9E-e94b6eddfae7db6b2b21562cb16f5ad9.mp4,,,,,,,,,,,,,,,,4nWsDuz3n9E-e94b6eddfae7db6b2b21562cb16f5ad9.mp4 +984,rWnAp4JX-Ms-3481ead696ab5fde7257d96937525f78.mp4,rWnAp4JX-Ms-3481ead696ab5fde7257d96937525f78.mp4,,,,,,,,,,,,,,,,rWnAp4JX-Ms-3481ead696ab5fde7257d96937525f78.mp4 +986,kBDNvVq8ut4-93a3c69f5246717d15d91a47238c32e9.webm,kBDNvVq8ut4-93a3c69f5246717d15d91a47238c32e9.webm,,,,,,,,,,,,,,,,kBDNvVq8ut4-93a3c69f5246717d15d91a47238c32e9.webm +987,G_WOnarW7oo-c7773cb984b7d97717c6275d3de69469.webm,G_WOnarW7oo-c7773cb984b7d97717c6275d3de69469.webm,,,,,,,,,,,,,,,,G_WOnarW7oo-c7773cb984b7d97717c6275d3de69469.webm +988,pKNOH8oB0kM-7308860732f0cba9d1116420c7967c65.webm,pKNOH8oB0kM-7308860732f0cba9d1116420c7967c65.webm,,,,,,,,,,,,,,,,pKNOH8oB0kM-7308860732f0cba9d1116420c7967c65.webm +990,8xB3EU1Geo0-dfcd462b2fea0ba1dd1c510bbfa18e4e.webm,8xB3EU1Geo0-dfcd462b2fea0ba1dd1c510bbfa18e4e.webm,,,,,,,,,,,,,,,,8xB3EU1Geo0-dfcd462b2fea0ba1dd1c510bbfa18e4e.webm +992,wfublzggEpU-e4889b75a8aa6dc6af0f60b352fdcd04.mp4,wfublzggEpU-e4889b75a8aa6dc6af0f60b352fdcd04.mp4,,,,,,,,,,,,,,,,wfublzggEpU-e4889b75a8aa6dc6af0f60b352fdcd04.mp4 +993,ooMfYVa9Mk4-8e591ebe79135dad668af35aaeae8b23.webm,ooMfYVa9Mk4-8e591ebe79135dad668af35aaeae8b23.webm,,,,,,,,,,,,,,,,ooMfYVa9Mk4-8e591ebe79135dad668af35aaeae8b23.webm +994,LdJJGIoP--k-9d112d0405b8e8fe61bfc22a1d6e14f3.mp4,LdJJGIoP--k-9d112d0405b8e8fe61bfc22a1d6e14f3.mp4,,,,,,,,,,,,,,,,LdJJGIoP--k-9d112d0405b8e8fe61bfc22a1d6e14f3.mp4 +995,YVuM6V3pS24-9b12c4bfede9e409787590f7b22b05ff.webm,YVuM6V3pS24-9b12c4bfede9e409787590f7b22b05ff.webm,,,,,,,,,,,,,,,,YVuM6V3pS24-9b12c4bfede9e409787590f7b22b05ff.webm +996,0d6lma6V7w4-f581b040b27b2ee748ba3992b86cc3cb.mp4,0d6lma6V7w4-f581b040b27b2ee748ba3992b86cc3cb.mp4,,,,,,,,,,,,,,,,0d6lma6V7w4-f581b040b27b2ee748ba3992b86cc3cb.mp4 +997,vKT6XAEddyk-0dd9148b1e02a5a4e356017090a3e741.webm,vKT6XAEddyk-0dd9148b1e02a5a4e356017090a3e741.webm,,,,,,,,,,,,,,,,vKT6XAEddyk-0dd9148b1e02a5a4e356017090a3e741.webm +998,NSoPlVmMhq4-6bc6828aa808aa13f903295cc43b9e25.webm,NSoPlVmMhq4-6bc6828aa808aa13f903295cc43b9e25.webm,,,,,,,,,,,,,,,,NSoPlVmMhq4-6bc6828aa808aa13f903295cc43b9e25.webm +999,kq0Zs2c2sZU-1829c1345a7fddebde0a48b5ba3d4a81.webm,kq0Zs2c2sZU-1829c1345a7fddebde0a48b5ba3d4a81.webm,,,,,,,,,,,,,,,,kq0Zs2c2sZU-1829c1345a7fddebde0a48b5ba3d4a81.webm +1001,dj7GzWXTrPs-004ede3ad0173518bc32ee9a9443eee2.webm,dj7GzWXTrPs-004ede3ad0173518bc32ee9a9443eee2.webm,,,,,,,,,,,,,,,,dj7GzWXTrPs-004ede3ad0173518bc32ee9a9443eee2.webm +1004,LZbGR4gCXQg-d08b39ebcd8e3bb64c00adf77fa4587f.webm,LZbGR4gCXQg-d08b39ebcd8e3bb64c00adf77fa4587f.webm,,,,,,,,,,,,,,,,LZbGR4gCXQg-d08b39ebcd8e3bb64c00adf77fa4587f.webm +1005,DgG9XSU3_IE-d45a459d66a040bb2f42928f3ffa8457.webm,DgG9XSU3_IE-d45a459d66a040bb2f42928f3ffa8457.webm,,,,,,,,,,,,,,,,DgG9XSU3_IE-d45a459d66a040bb2f42928f3ffa8457.webm +1007,b9NjrBdTWAU-dbcd9e28adcef27ca288d8bdc434829a.mp4,b9NjrBdTWAU-dbcd9e28adcef27ca288d8bdc434829a.mp4,,,,,,,,,,,,,,,,b9NjrBdTWAU-dbcd9e28adcef27ca288d8bdc434829a.mp4 +1008,R3BkEn7pNFk-d21896b1d2d8d6b549a09d198d94f9d2.webm,R3BkEn7pNFk-d21896b1d2d8d6b549a09d198d94f9d2.webm,,,,,,,,,,,,,,,,R3BkEn7pNFk-d21896b1d2d8d6b549a09d198d94f9d2.webm +1009,74xxnJ00T_A-decb579f1e11306cb0fb7ee4a81630dd.webm,74xxnJ00T_A-decb579f1e11306cb0fb7ee4a81630dd.webm,,,,,,,,,,,,,,,,74xxnJ00T_A-decb579f1e11306cb0fb7ee4a81630dd.webm +1010,BB1fQD6vtME-b6cafaaca45e3c71dee4a20a78ef68be.webm,BB1fQD6vtME-b6cafaaca45e3c71dee4a20a78ef68be.webm,,,,,,,,,,,,,,,,BB1fQD6vtME-b6cafaaca45e3c71dee4a20a78ef68be.webm +1011,TBoKUTYWLws-070ffb0e9d0a26dc43d50f7abc596d5d.mp4,TBoKUTYWLws-070ffb0e9d0a26dc43d50f7abc596d5d.mp4,,,,,,,,,,,,,,,,TBoKUTYWLws-070ffb0e9d0a26dc43d50f7abc596d5d.mp4 +1013,uECxS6xOH0U-e0a5a95ccd786cbc786224e508b200e7.webm,uECxS6xOH0U-e0a5a95ccd786cbc786224e508b200e7.webm,,,,,,,,,,,,,,,,uECxS6xOH0U-e0a5a95ccd786cbc786224e508b200e7.webm +1014,f9j2kaVTq4o-4432bed02010b48082d6e630aa0c8b8a.webm,f9j2kaVTq4o-4432bed02010b48082d6e630aa0c8b8a.webm,,,,,,,,,,,,,,,,f9j2kaVTq4o-4432bed02010b48082d6e630aa0c8b8a.webm +1015,aPyyQDpROM0-09ff1c9d8bc574a286818418dc751a3b.mp4,aPyyQDpROM0-09ff1c9d8bc574a286818418dc751a3b.mp4,,,,,,,,,,,,,,,,aPyyQDpROM0-09ff1c9d8bc574a286818418dc751a3b.mp4 +1017,iRnQWGfiunQ-27f6b7d57e412ccb590062c1ec9c9487.mp4,iRnQWGfiunQ-27f6b7d57e412ccb590062c1ec9c9487.mp4,,,,,,,,,,,,,,,,iRnQWGfiunQ-27f6b7d57e412ccb590062c1ec9c9487.mp4 +1018,epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124.mp4,epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124.mp4,,,,,,,,,,,,,,,,epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124.mp4 +1019,XjlMGC3wJIQ-003358afc7970a7bc59e4b28bc5d8857.mp4,XjlMGC3wJIQ-003358afc7970a7bc59e4b28bc5d8857.mp4,,,,,,,,,,,,,,,,XjlMGC3wJIQ-003358afc7970a7bc59e4b28bc5d8857.mp4 +1020,zZaowf-6MSk-826c047568326b50db4b221851c667fe.mp4,zZaowf-6MSk-826c047568326b50db4b221851c667fe.mp4,,,,,,,,,,,,,,,,zZaowf-6MSk-826c047568326b50db4b221851c667fe.mp4 +1022,gZ5cziPF1G0-6b2a24d56c543e963e50f713034d832b.webm,gZ5cziPF1G0-6b2a24d56c543e963e50f713034d832b.webm,,,,,,,,,,,,,,,,gZ5cziPF1G0-6b2a24d56c543e963e50f713034d832b.webm +1024,dUHj8SQel-8-6be8a962e0ff2b7d4a2cc2ce34da5c5f.webm,dUHj8SQel-8-6be8a962e0ff2b7d4a2cc2ce34da5c5f.webm,,,,,,,,,,,,,,,,dUHj8SQel-8-6be8a962e0ff2b7d4a2cc2ce34da5c5f.webm +1026,dx38o206XbE-7a529d316e754ce9b9f52271e84d26de.mp4,dx38o206XbE-7a529d316e754ce9b9f52271e84d26de.mp4,,,,,,,,,,,,,,,,dx38o206XbE-7a529d316e754ce9b9f52271e84d26de.mp4 +1027,yfUJqcoFsb0-d135b6d4ddfa1c48cfd6ef3343f03b71.webm,yfUJqcoFsb0-d135b6d4ddfa1c48cfd6ef3343f03b71.webm,,,,,,,,,,,,,,,,yfUJqcoFsb0-d135b6d4ddfa1c48cfd6ef3343f03b71.webm +1028,a3PdTTIJXc8-1022f7c81a6acf95e36015a0297f0fa6.webm,a3PdTTIJXc8-1022f7c81a6acf95e36015a0297f0fa6.webm,,,,,,,,,,,,,,,,a3PdTTIJXc8-1022f7c81a6acf95e36015a0297f0fa6.webm +1029,CuQj8oNR-1I-d2d165bd782563419d35fffaed8ae0d9.mp4,CuQj8oNR-1I-d2d165bd782563419d35fffaed8ae0d9.mp4,,,,,,,,,,,,,,,,CuQj8oNR-1I-d2d165bd782563419d35fffaed8ae0d9.mp4 +1030,gyzaE0EpBY0-51a12910d2507b2e2d5f819a1f3093f8.webm,gyzaE0EpBY0-51a12910d2507b2e2d5f819a1f3093f8.webm,,,,,,,,,,,,,,,,gyzaE0EpBY0-51a12910d2507b2e2d5f819a1f3093f8.webm +1031,wUshX0KkzdM-a9adea34f7193616221958a181410468.webm,wUshX0KkzdM-a9adea34f7193616221958a181410468.webm,,,,,,,,,,,,,,,,wUshX0KkzdM-a9adea34f7193616221958a181410468.webm +1032,g9AQ1G7Nfzc-0971fffce30037307b6abb842160baba.webm,g9AQ1G7Nfzc-0971fffce30037307b6abb842160baba.webm,,,,,,,,,,,,,,,,g9AQ1G7Nfzc-0971fffce30037307b6abb842160baba.webm +1033,JUa5xhmZr8k-26358b8b02f77a9ad7d81fea8a637734.mp4,JUa5xhmZr8k-26358b8b02f77a9ad7d81fea8a637734.mp4,,,,,,,,,,,,,,,,JUa5xhmZr8k-26358b8b02f77a9ad7d81fea8a637734.mp4 +1034,4pcIA0Vx_Ok-a6ff21a834134a75701b950030cca07c.mp4,4pcIA0Vx_Ok-a6ff21a834134a75701b950030cca07c.mp4,,,,,,,,,,,,,,,,4pcIA0Vx_Ok-a6ff21a834134a75701b950030cca07c.mp4 +1035,HqNujQunFnU-5325de3ee508b2af33627705d32d816c.webm,HqNujQunFnU-5325de3ee508b2af33627705d32d816c.webm,,,,,,,,,,,,,,,,HqNujQunFnU-5325de3ee508b2af33627705d32d816c.webm +1038,GYv00p5_q6Y-441d4895bd9cea9fa2fd4e60c90209cc.webm,GYv00p5_q6Y-441d4895bd9cea9fa2fd4e60c90209cc.webm,,,,,,,,,,,,,,,,GYv00p5_q6Y-441d4895bd9cea9fa2fd4e60c90209cc.webm +1041,nomlAjT7JXg-64b616daa1751efd9b70f859ac4bc4e8.mp4,nomlAjT7JXg-64b616daa1751efd9b70f859ac4bc4e8.mp4,,,,,,,,,,,,,,,,nomlAjT7JXg-64b616daa1751efd9b70f859ac4bc4e8.mp4 +1042,AF5V-YcvJrA-4ff237eea2d6d9ea02a669b95ccbf8ec.webm,AF5V-YcvJrA-4ff237eea2d6d9ea02a669b95ccbf8ec.webm,,,,,,,,,,,,,,,,AF5V-YcvJrA-4ff237eea2d6d9ea02a669b95ccbf8ec.webm +1043,u3VDtLG8E_Y-851998683165ea933867e69048bcd6b6.mp4,u3VDtLG8E_Y-851998683165ea933867e69048bcd6b6.mp4,,,,,,,,,,,,,,,,u3VDtLG8E_Y-851998683165ea933867e69048bcd6b6.mp4 +1044,OK-mPTKNvDo-e259f1866f41c2c3013191f7a5a3204f.webm,OK-mPTKNvDo-e259f1866f41c2c3013191f7a5a3204f.webm,,,,,,,,,,,,,,,,OK-mPTKNvDo-e259f1866f41c2c3013191f7a5a3204f.webm +1045,pCCSBDY7gRI-7e226a9491cd83c1b85696bc71f63510.webm,pCCSBDY7gRI-7e226a9491cd83c1b85696bc71f63510.webm,,,,,,,,,,,,,,,,pCCSBDY7gRI-7e226a9491cd83c1b85696bc71f63510.webm +1046,7q6193It2dM-5511ebec6c31e97b872a0e118daebd38.mp4,7q6193It2dM-5511ebec6c31e97b872a0e118daebd38.mp4,,,,,,,,,,,,,,,,7q6193It2dM-5511ebec6c31e97b872a0e118daebd38.mp4 +1047,XKgmwB_GDsw-02f3200f1d6894f7144cbe0730263c2a.webm,XKgmwB_GDsw-02f3200f1d6894f7144cbe0730263c2a.webm,,,,,,,,,,,,,,,,XKgmwB_GDsw-02f3200f1d6894f7144cbe0730263c2a.webm +1048,sXR0WpN7Zas-c4d1df7d140535a74ba0d4f859ed25dc.mp4,sXR0WpN7Zas-c4d1df7d140535a74ba0d4f859ed25dc.mp4,,,,,,,,,,,,,,,,sXR0WpN7Zas-c4d1df7d140535a74ba0d4f859ed25dc.mp4 +1049,D_7SraULcJY-912db17b332b2ea383bb0ded45a8f57a.webm,D_7SraULcJY-912db17b332b2ea383bb0ded45a8f57a.webm,,,,,,,,,,,,,,,,D_7SraULcJY-912db17b332b2ea383bb0ded45a8f57a.webm +1050,nX3K4V1-wUc-cbfcd518a2026bcb939521c8f38c3cfa.webm,nX3K4V1-wUc-cbfcd518a2026bcb939521c8f38c3cfa.webm,,,,,,,,,,,,,,,,nX3K4V1-wUc-cbfcd518a2026bcb939521c8f38c3cfa.webm +1051,Az0yo364Hqg-c16b11004d9ce04bc89df915d053e99b.mp4,Az0yo364Hqg-c16b11004d9ce04bc89df915d053e99b.mp4,,,,,,,,,,,,,,,,Az0yo364Hqg-c16b11004d9ce04bc89df915d053e99b.mp4 +1052,RESnhnhLdyQ-bb1d67d546c58f4a03fae13a4688a722.mp4,RESnhnhLdyQ-bb1d67d546c58f4a03fae13a4688a722.mp4,,,,,,,,,,,,,,,,RESnhnhLdyQ-bb1d67d546c58f4a03fae13a4688a722.mp4 +1055,UqJuONK5VvM-af8f15ff860a2898538961c41770095d.mp4,UqJuONK5VvM-af8f15ff860a2898538961c41770095d.mp4,,,,,,,,,,,,,,,,UqJuONK5VvM-af8f15ff860a2898538961c41770095d.mp4 +1056,tHGZnSDLagU-8db6c53cea9fd055dde9c124ced57acf.webm,tHGZnSDLagU-8db6c53cea9fd055dde9c124ced57acf.webm,,,,,,,,,,,,,,,,tHGZnSDLagU-8db6c53cea9fd055dde9c124ced57acf.webm +1057,KEjYqbUd9L0-163872281328d9876efdb014f4438b71.webm,KEjYqbUd9L0-163872281328d9876efdb014f4438b71.webm,,,,,,,,,,,,,,,,KEjYqbUd9L0-163872281328d9876efdb014f4438b71.webm +1058,p_CuXWEgTzc-82f8c3176e69d6ba72c17379f5d485b8.webm,p_CuXWEgTzc-82f8c3176e69d6ba72c17379f5d485b8.webm,,,,,,,,,,,,,,,,p_CuXWEgTzc-82f8c3176e69d6ba72c17379f5d485b8.webm +1059,L_kGSx2MTvg-97b041151f222beee14fe71e8aa8d8b6.webm,L_kGSx2MTvg-97b041151f222beee14fe71e8aa8d8b6.webm,,,,,,,,,,,,,,,,L_kGSx2MTvg-97b041151f222beee14fe71e8aa8d8b6.webm +1060,6N91EJISh-M-6df2f002188e10fbdd0f0a1dccf7838a.mp4,6N91EJISh-M-6df2f002188e10fbdd0f0a1dccf7838a.mp4,,,,,,,,,,,,,,,,6N91EJISh-M-6df2f002188e10fbdd0f0a1dccf7838a.mp4 +1061,njIyvszrCXk-4678f443717b6bd678a1c210cca3e9c6.mp4,njIyvszrCXk-4678f443717b6bd678a1c210cca3e9c6.mp4,,,,,,,,,,,,,,,,njIyvszrCXk-4678f443717b6bd678a1c210cca3e9c6.mp4 +1062,wN3JXN9NW_s-2920af430fff21af2fc76ea124a6d227.mp4,wN3JXN9NW_s-2920af430fff21af2fc76ea124a6d227.mp4,,,,,,,,,,,,,,,,wN3JXN9NW_s-2920af430fff21af2fc76ea124a6d227.mp4 +1063,cMVWOb0u46g-22301d4a2db7a0ce4ea3e2e50a4c6cd5.webm,cMVWOb0u46g-22301d4a2db7a0ce4ea3e2e50a4c6cd5.webm,,,,,,,,,,,,,,,,cMVWOb0u46g-22301d4a2db7a0ce4ea3e2e50a4c6cd5.webm +1064,_wcFmjGBtXY-f742108cd5ac5efc2968c63985409d4c.webm,_wcFmjGBtXY-f742108cd5ac5efc2968c63985409d4c.webm,,,,,,,,,,,,,,,,_wcFmjGBtXY-f742108cd5ac5efc2968c63985409d4c.webm +1065,46nmbU7ILdU-7977fab64a0c357dd9eceeaa7acc4991.webm,46nmbU7ILdU-7977fab64a0c357dd9eceeaa7acc4991.webm,,,,,,,,,,,,,,,,46nmbU7ILdU-7977fab64a0c357dd9eceeaa7acc4991.webm +1066,shhcEu9baFY-a952804fb8e99684890d903fba9c8cd5.mp4,shhcEu9baFY-a952804fb8e99684890d903fba9c8cd5.mp4,,,,,,,,,,,,,,,,shhcEu9baFY-a952804fb8e99684890d903fba9c8cd5.mp4 +1067,WiCiQXF4Y5w-4111d16ba5eb5d12719f77bca79f9dc1.mp4,WiCiQXF4Y5w-4111d16ba5eb5d12719f77bca79f9dc1.mp4,,,,,,,,,,,,,,,,WiCiQXF4Y5w-4111d16ba5eb5d12719f77bca79f9dc1.mp4 +1068,0vObcYr_6QE-cb4ad03353f8ae0ae11d94cc93672144.webm,0vObcYr_6QE-cb4ad03353f8ae0ae11d94cc93672144.webm,,,,,,,,,,,,,,,,0vObcYr_6QE-cb4ad03353f8ae0ae11d94cc93672144.webm +1069,r0F07m07V64-cef21dbcb3f7b1b588ef020bae73d5ef.webm,r0F07m07V64-cef21dbcb3f7b1b588ef020bae73d5ef.webm,,,,,,,,,,,,,,,,r0F07m07V64-cef21dbcb3f7b1b588ef020bae73d5ef.webm +1071,y3j90k7eCXw-017275e744863f6554c706103edd1ff4.webm,y3j90k7eCXw-017275e744863f6554c706103edd1ff4.webm,,,,,,,,,,,,,,,,y3j90k7eCXw-017275e744863f6554c706103edd1ff4.webm +1072,7VLNL2dpc8Y-b6505348715554f6cc04725da3f0d756.webm,7VLNL2dpc8Y-b6505348715554f6cc04725da3f0d756.webm,,,,,,,,,,,,,,,,7VLNL2dpc8Y-b6505348715554f6cc04725da3f0d756.webm +1073,vHkJVH3goTI-87a6e2c8b6afdad64ca964290ba7a4c8.mp4,vHkJVH3goTI-87a6e2c8b6afdad64ca964290ba7a4c8.mp4,,,,,,,,,,,,,,,,vHkJVH3goTI-87a6e2c8b6afdad64ca964290ba7a4c8.mp4 +1074,p2v10DDerhA-260eb8aa49c1488276dadbdfeab896f0.mp4,p2v10DDerhA-260eb8aa49c1488276dadbdfeab896f0.mp4,,,,,,,,,,,,,,,,p2v10DDerhA-260eb8aa49c1488276dadbdfeab896f0.mp4 +1075,QQ3WEuYESVM-95962504ef38e040eb297566cb0a51fc.webm,QQ3WEuYESVM-95962504ef38e040eb297566cb0a51fc.webm,,,,,,,,,,,,,,,,QQ3WEuYESVM-95962504ef38e040eb297566cb0a51fc.webm +1076,94F5_uydthY-b5ce282df8e0f99ef84a3ea62b94ea48.mp4,94F5_uydthY-b5ce282df8e0f99ef84a3ea62b94ea48.mp4,,,,,,,,,,,,,,,,94F5_uydthY-b5ce282df8e0f99ef84a3ea62b94ea48.mp4 +1077,kVwX3_OaBww-2686ead4d5969061cfbb1bd32f6b4410.mp4,kVwX3_OaBww-2686ead4d5969061cfbb1bd32f6b4410.mp4,,,,,,,,,,,,,,,,kVwX3_OaBww-2686ead4d5969061cfbb1bd32f6b4410.mp4 +1078,wTY5mlH8zjY-fcf2e2525bea2994e1020d15b9590793.mp4,wTY5mlH8zjY-fcf2e2525bea2994e1020d15b9590793.mp4,,,,,,,,,,,,,,,,wTY5mlH8zjY-fcf2e2525bea2994e1020d15b9590793.mp4 +1079,oSOefNMJD9g-d3b38a8215bc3fe6426f4865597c1f9c.webm,oSOefNMJD9g-d3b38a8215bc3fe6426f4865597c1f9c.webm,,,,,,,,,,,,,,,,oSOefNMJD9g-d3b38a8215bc3fe6426f4865597c1f9c.webm +1081,mPSd2xlUt9Y-0c8872954f1974310408272224631fcb.webm,mPSd2xlUt9Y-0c8872954f1974310408272224631fcb.webm,,,,,,,,,,,,,,,,mPSd2xlUt9Y-0c8872954f1974310408272224631fcb.webm +1082,MVT-350qkkE-9433bef9e619717beeda5d43f5407ee7.webm,MVT-350qkkE-9433bef9e619717beeda5d43f5407ee7.webm,,,,,,,,,,,,,,,,MVT-350qkkE-9433bef9e619717beeda5d43f5407ee7.webm +1083,R_7y9Z-umq0-fbe250a7f59ebfb55d13cfc2be1c1de6.webm,R_7y9Z-umq0-fbe250a7f59ebfb55d13cfc2be1c1de6.webm,,,,,,,,,,,,,,,,R_7y9Z-umq0-fbe250a7f59ebfb55d13cfc2be1c1de6.webm +1085,jL6R7FFrKq8-a144b42dce265da67b73d888e47fac41.webm,jL6R7FFrKq8-a144b42dce265da67b73d888e47fac41.webm,,,,,,,,,,,,,,,,jL6R7FFrKq8-a144b42dce265da67b73d888e47fac41.webm +1086,yNRMAgXTRWY-99849d84f8274ea3ac148500d0241491.webm,yNRMAgXTRWY-99849d84f8274ea3ac148500d0241491.webm,,,,,,,,,,,,,,,,yNRMAgXTRWY-99849d84f8274ea3ac148500d0241491.webm +1087,VL5hWpEa-ZM-79d9c9eafac6fa5a98ede1fe65aac8af.mp4,VL5hWpEa-ZM-79d9c9eafac6fa5a98ede1fe65aac8af.mp4,,,,,,,,,,,,,,,,VL5hWpEa-ZM-79d9c9eafac6fa5a98ede1fe65aac8af.mp4 +1088,kXFk6p8_Bt4-c01953eb1ee49b7c27db1deda23b7a66.mp4,kXFk6p8_Bt4-c01953eb1ee49b7c27db1deda23b7a66.mp4,,,,,,,,,,,,,,,,kXFk6p8_Bt4-c01953eb1ee49b7c27db1deda23b7a66.mp4 +1089,WuKTBwvLoK8-34f45afc3ff9f347c45627b19c6ea459.mp4,WuKTBwvLoK8-34f45afc3ff9f347c45627b19c6ea459.mp4,,,,,,,,,,,,,,,,WuKTBwvLoK8-34f45afc3ff9f347c45627b19c6ea459.mp4 +1090,9_2XFkMYLXY-4ffb85a368877ab5db739826d2bc6f98.mp4,9_2XFkMYLXY-4ffb85a368877ab5db739826d2bc6f98.mp4,,,,,,,,,,,,,,,,9_2XFkMYLXY-4ffb85a368877ab5db739826d2bc6f98.mp4 +1092,JEtsMvTrP-U-b3697f24f4688aa8f5eabe966c616a8a.mp4,JEtsMvTrP-U-b3697f24f4688aa8f5eabe966c616a8a.mp4,,,,,,,,,,,,,,,,JEtsMvTrP-U-b3697f24f4688aa8f5eabe966c616a8a.mp4 +1093,hL5e-NJEBd0-cd8812df851065d40f7654026f75c45d.mp4,hL5e-NJEBd0-cd8812df851065d40f7654026f75c45d.mp4,,,,,,,,,,,,,,,,hL5e-NJEBd0-cd8812df851065d40f7654026f75c45d.mp4 +1094,FUAfocJA6N8-bbc2da79edc83af7e255d14509ca02e5.webm,FUAfocJA6N8-bbc2da79edc83af7e255d14509ca02e5.webm,,,,,,,,,,,,,,,,FUAfocJA6N8-bbc2da79edc83af7e255d14509ca02e5.webm +1095,ESaxuHLCqiw-0f22808a1b3ac95b3b7f9c6600ab2ced.mp4,ESaxuHLCqiw-0f22808a1b3ac95b3b7f9c6600ab2ced.mp4,,,,,,,,,,,,,,,,ESaxuHLCqiw-0f22808a1b3ac95b3b7f9c6600ab2ced.mp4 +1096,Mf_WWSiFnH0-fb17c07b0a6af4389478943e508e575d.webm,Mf_WWSiFnH0-fb17c07b0a6af4389478943e508e575d.webm,,,,,,,,,,,,,,,,Mf_WWSiFnH0-fb17c07b0a6af4389478943e508e575d.webm +1098,H8KXJux-5SI-a7a8e9a2de48b205b3110726a1660b42.webm,H8KXJux-5SI-a7a8e9a2de48b205b3110726a1660b42.webm,,,,,,,,,,,,,,,,H8KXJux-5SI-a7a8e9a2de48b205b3110726a1660b42.webm +1099,kMLipvD2y0g-168c41d031ea5c8d327e3d2b2374ee98.webm,kMLipvD2y0g-168c41d031ea5c8d327e3d2b2374ee98.webm,,,,,,,,,,,,,,,,kMLipvD2y0g-168c41d031ea5c8d327e3d2b2374ee98.webm +1100,BHrJf5VpP0I-affd0e3a026f2fc78ee702d13c387ddb.webm,BHrJf5VpP0I-affd0e3a026f2fc78ee702d13c387ddb.webm,,,,,,,,,,,,,,,,BHrJf5VpP0I-affd0e3a026f2fc78ee702d13c387ddb.webm +1101,6k_LuoRZ-B4-bdd016f3e364bbd949b61fa41a1435a5.mp4,6k_LuoRZ-B4-bdd016f3e364bbd949b61fa41a1435a5.mp4,,,,,,,,,,,,,,,,6k_LuoRZ-B4-bdd016f3e364bbd949b61fa41a1435a5.mp4 +1102,tzqaoNgxQS0-88f3a4d49423e57bb6813f7f50912837.webm,tzqaoNgxQS0-88f3a4d49423e57bb6813f7f50912837.webm,,,,,,,,,,,,,,,,tzqaoNgxQS0-88f3a4d49423e57bb6813f7f50912837.webm +1104,0WYW0PIwvZI-578d2311e2400479811356035066a45c.webm,0WYW0PIwvZI-578d2311e2400479811356035066a45c.webm,,,,,,,,,,,,,,,,0WYW0PIwvZI-578d2311e2400479811356035066a45c.webm +1105,P-CY6mt3MSQ-1005c7f285ad51c049bd2734f60f3081.webm,P-CY6mt3MSQ-1005c7f285ad51c049bd2734f60f3081.webm,,,,,,,,,,,,,,,,P-CY6mt3MSQ-1005c7f285ad51c049bd2734f60f3081.webm +1106,X1zpH3AH-Q0-fc0726cb43f191159c53ac96ecd56b8b.mp4,X1zpH3AH-Q0-fc0726cb43f191159c53ac96ecd56b8b.mp4,,,,,,,,,,,,,,,,X1zpH3AH-Q0-fc0726cb43f191159c53ac96ecd56b8b.mp4 +1107,otVnw-nmG9U-4287d9783919c4bb81143182a0af01c6.webm,otVnw-nmG9U-4287d9783919c4bb81143182a0af01c6.webm,,,,,,,,,,,,,,,,otVnw-nmG9U-4287d9783919c4bb81143182a0af01c6.webm +1108,0_02kPfkEVw-82a03f958897d5f2a3b591d3504569bd.mp4,0_02kPfkEVw-82a03f958897d5f2a3b591d3504569bd.mp4,,,,,,,,,,,,,,,,0_02kPfkEVw-82a03f958897d5f2a3b591d3504569bd.mp4 +1109,0bMQhwjWMQI-c8f2099bbfd67c220f6ab45333941257.mp4,0bMQhwjWMQI-c8f2099bbfd67c220f6ab45333941257.mp4,,,,,,,,,,,,,,,,0bMQhwjWMQI-c8f2099bbfd67c220f6ab45333941257.mp4 +1110,kMXhXhtceLk-9cadd17fc719405d34ad8d20da25d3fe.mp4,kMXhXhtceLk-9cadd17fc719405d34ad8d20da25d3fe.mp4,,,,,,,,,,,,,,,,kMXhXhtceLk-9cadd17fc719405d34ad8d20da25d3fe.mp4 +1111,k5PlRy15Bgg-c2281eb6a9e4e6166c90d2f3b75b8dc4.webm,k5PlRy15Bgg-c2281eb6a9e4e6166c90d2f3b75b8dc4.webm,,,,,,,,,,,,,,,,k5PlRy15Bgg-c2281eb6a9e4e6166c90d2f3b75b8dc4.webm +1112,_sdRgUZzZ_M-a716c39f513f7579eba9a6ab3cd294e3.mp4,_sdRgUZzZ_M-a716c39f513f7579eba9a6ab3cd294e3.mp4,,,,,,,,,,,,,,,,_sdRgUZzZ_M-a716c39f513f7579eba9a6ab3cd294e3.mp4 +1113,Bc0YmTj5OQ8-512e1ec815e0a0cd4d072c611beb85cd.mp4,Bc0YmTj5OQ8-512e1ec815e0a0cd4d072c611beb85cd.mp4,,,,,,,,,,,,,,,,Bc0YmTj5OQ8-512e1ec815e0a0cd4d072c611beb85cd.mp4 +1114,A7NnMxAS9TY-5ca30de135d8ab62fa2c83655b615102.webm,A7NnMxAS9TY-5ca30de135d8ab62fa2c83655b615102.webm,,,,,,,,,,,,,,,,A7NnMxAS9TY-5ca30de135d8ab62fa2c83655b615102.webm +1115,fnzloIWfspk-242f82e890b7499c1b37a5c2255f079d.webm,fnzloIWfspk-242f82e890b7499c1b37a5c2255f079d.webm,,,,,,,,,,,,,,,,fnzloIWfspk-242f82e890b7499c1b37a5c2255f079d.webm +1116,s2vUHnTpagE-ace851912383fb557b773eba1248dd93.webm,s2vUHnTpagE-ace851912383fb557b773eba1248dd93.webm,,,,,,,,,,,,,,,,s2vUHnTpagE-ace851912383fb557b773eba1248dd93.webm +1117,7EUGWxaAYb0-9ae9322b0f3446e8688f9025fc4b3e2a.webm,7EUGWxaAYb0-9ae9322b0f3446e8688f9025fc4b3e2a.webm,,,,,,,,,,,,,,,,7EUGWxaAYb0-9ae9322b0f3446e8688f9025fc4b3e2a.webm +1118,fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905.mp4,fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905.mp4,,,,,,,,,,,,,,,,fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905.mp4 +1121,yLp63OYMzW4-77cd37bbb1bac83644977bebfc930a38.webm,yLp63OYMzW4-77cd37bbb1bac83644977bebfc930a38.webm,,,,,,,,,,,,,,,,yLp63OYMzW4-77cd37bbb1bac83644977bebfc930a38.webm +1122,KdAt1GyQdJI-e71c9765a30a4a80e6e4437c0e2cbe5f.mp4,KdAt1GyQdJI-e71c9765a30a4a80e6e4437c0e2cbe5f.mp4,,,,,,,,,,,,,,,,KdAt1GyQdJI-e71c9765a30a4a80e6e4437c0e2cbe5f.mp4 +1123,1gf-1sPyZhk-ec9289be27309fd3d08fc3b6ada453e5.mp4,1gf-1sPyZhk-ec9289be27309fd3d08fc3b6ada453e5.mp4,,,,,,,,,,,,,,,,1gf-1sPyZhk-ec9289be27309fd3d08fc3b6ada453e5.mp4 +1124,msg5s-OgYKA-eb2be59c3c0bce037ef4002f915ef8f3.mp4,msg5s-OgYKA-eb2be59c3c0bce037ef4002f915ef8f3.mp4,,,,,,,,,,,,,,,,msg5s-OgYKA-eb2be59c3c0bce037ef4002f915ef8f3.mp4 +1126,ZzBWJM43zEE-4c32695067169ca920d726f36f6169d2.webm,ZzBWJM43zEE-4c32695067169ca920d726f36f6169d2.webm,,,,,,,,,,,,,,,,ZzBWJM43zEE-4c32695067169ca920d726f36f6169d2.webm +1127,ei2yODzATiE-9041a96db043fe1a67dda557fa8b7125.mp4,ei2yODzATiE-9041a96db043fe1a67dda557fa8b7125.mp4,,,,,,,,,,,,,,,,ei2yODzATiE-9041a96db043fe1a67dda557fa8b7125.mp4 +1129,T5n5PiMF93s-42c5b2f4bca04483e5fe23cdf38c3b7c.mp4,T5n5PiMF93s-42c5b2f4bca04483e5fe23cdf38c3b7c.mp4,,,,,,,,,,,,,,,,T5n5PiMF93s-42c5b2f4bca04483e5fe23cdf38c3b7c.mp4 +1130,C0z7Iaa0NOg-8bc0499f87d0b2656dee6bcee2527f49.mp4,C0z7Iaa0NOg-8bc0499f87d0b2656dee6bcee2527f49.mp4,,,,,,,,,,,,,,,,C0z7Iaa0NOg-8bc0499f87d0b2656dee6bcee2527f49.mp4 +1131,4HewvFPsv3k-97e987463785a12b97615c567a7727ea.webm,4HewvFPsv3k-97e987463785a12b97615c567a7727ea.webm,,,,,,,,,,,,,,,,4HewvFPsv3k-97e987463785a12b97615c567a7727ea.webm +1132,F1YLXj4AbxY-5dd62d7352142dd216998422cab41798.webm,F1YLXj4AbxY-5dd62d7352142dd216998422cab41798.webm,,,,,,,,,,,,,,,,F1YLXj4AbxY-5dd62d7352142dd216998422cab41798.webm +1133,zbgPoxGLDmg-5cb312b3610669831f1311a0ced67c60.webm,zbgPoxGLDmg-5cb312b3610669831f1311a0ced67c60.webm,,,,,,,,,,,,,,,,zbgPoxGLDmg-5cb312b3610669831f1311a0ced67c60.webm +1134,_p_pyzVOeTI-75ac6e0035172c3607993aa56c13ff16.webm,_p_pyzVOeTI-75ac6e0035172c3607993aa56c13ff16.webm,,,,,,,,,,,,,,,,_p_pyzVOeTI-75ac6e0035172c3607993aa56c13ff16.webm +1136,SJUdhJHtT6Q-ba048802fbf47e53ba475cd8ae5eb011.webm,SJUdhJHtT6Q-ba048802fbf47e53ba475cd8ae5eb011.webm,,,,,,,,,,,,,,,,SJUdhJHtT6Q-ba048802fbf47e53ba475cd8ae5eb011.webm +1137,V4plVJlN20M-f914ba8b726971a4bb45f01620476755.webm,V4plVJlN20M-f914ba8b726971a4bb45f01620476755.webm,,,,,,,,,,,,,,,,V4plVJlN20M-f914ba8b726971a4bb45f01620476755.webm +1139,fT5b9E5lczY-673ef94ab712976702b00859b86200a2.webm,fT5b9E5lczY-673ef94ab712976702b00859b86200a2.webm,,,,,,,,,,,,,,,,fT5b9E5lczY-673ef94ab712976702b00859b86200a2.webm +1140,QaWojRI8XWM-3198079660b5e09034a87774077bc551.webm,QaWojRI8XWM-3198079660b5e09034a87774077bc551.webm,,,,,,,,,,,,,,,,QaWojRI8XWM-3198079660b5e09034a87774077bc551.webm +1141,VumULM5Sao4-bde4ed9f36edcbbfd2f3b00b13e8c634.webm,VumULM5Sao4-bde4ed9f36edcbbfd2f3b00b13e8c634.webm,,,,,,,,,,,,,,,,VumULM5Sao4-bde4ed9f36edcbbfd2f3b00b13e8c634.webm +1142,J-ECSb44mak-8bd8acce798a6eb2564ba7460541e600.mp4,J-ECSb44mak-8bd8acce798a6eb2564ba7460541e600.mp4,,,,,,,,,,,,,,,,J-ECSb44mak-8bd8acce798a6eb2564ba7460541e600.mp4 +1144,igcv5oBfyVw-4bc864401b0189c11dfd44945ad4cafe.webm,igcv5oBfyVw-4bc864401b0189c11dfd44945ad4cafe.webm,,,,,,,,,,,,,,,,igcv5oBfyVw-4bc864401b0189c11dfd44945ad4cafe.webm +1145,tq-nxXaB5MM-66f0a31812db910f7c7b25745539fc2d.mp4,tq-nxXaB5MM-66f0a31812db910f7c7b25745539fc2d.mp4,,,,,,,,,,,,,,,,tq-nxXaB5MM-66f0a31812db910f7c7b25745539fc2d.mp4 +1146,6tAZLiaBUcA-6d33cbb7b6f52823b91106f922e44121.mp4,6tAZLiaBUcA-6d33cbb7b6f52823b91106f922e44121.mp4,,,,,,,,,,,,,,,,6tAZLiaBUcA-6d33cbb7b6f52823b91106f922e44121.mp4 +1147,kmxsnupKL4M-802040d537384364112598ab5998541e.mp4,kmxsnupKL4M-802040d537384364112598ab5998541e.mp4,,,,,,,,,,,,,,,,kmxsnupKL4M-802040d537384364112598ab5998541e.mp4 +1148,WUUQGXPoAJk-53f45c1ae0e50cc954e5f2d7ced9544f.webm,WUUQGXPoAJk-53f45c1ae0e50cc954e5f2d7ced9544f.webm,,,,,,,,,,,,,,,,WUUQGXPoAJk-53f45c1ae0e50cc954e5f2d7ced9544f.webm +1149,pbDcLobEjDs-15fe4262f91fd7a4db2772ae8c311238.mp4,pbDcLobEjDs-15fe4262f91fd7a4db2772ae8c311238.mp4,,,,,,,,,,,,,,,,pbDcLobEjDs-15fe4262f91fd7a4db2772ae8c311238.mp4 +1150,2EnGD_2k8Vs-49b97811453efa49cd2a838e6f721697.webm,2EnGD_2k8Vs-49b97811453efa49cd2a838e6f721697.webm,,,,,,,,,,,,,,,,2EnGD_2k8Vs-49b97811453efa49cd2a838e6f721697.webm +1151,tgupezvXgI4-3b6eb646d2663341de197418b07db965.webm,tgupezvXgI4-3b6eb646d2663341de197418b07db965.webm,,,,,,,,,,,,,,,,tgupezvXgI4-3b6eb646d2663341de197418b07db965.webm +1152,DYtXcspyEjM-43a3eedf70b53414484d1c56f602bdb5.webm,DYtXcspyEjM-43a3eedf70b53414484d1c56f602bdb5.webm,,,,,,,,,,,,,,,,DYtXcspyEjM-43a3eedf70b53414484d1c56f602bdb5.webm +1153,b6ueCO1OKfM-6fec48ff559f319e23b99f7714c1a15f.mp4,b6ueCO1OKfM-6fec48ff559f319e23b99f7714c1a15f.mp4,,,,,,,,,,,,,,,,b6ueCO1OKfM-6fec48ff559f319e23b99f7714c1a15f.mp4 +1154,dyx5mWWqm-M-51a829a529ce5845f1704242d5a4e248.webm,dyx5mWWqm-M-51a829a529ce5845f1704242d5a4e248.webm,,,,,,,,,,,,,,,,dyx5mWWqm-M-51a829a529ce5845f1704242d5a4e248.webm +1155,Au-P8Oo32oI-40cd4f5edc6bf019b2e4a01eee2a76a5.mp4,Au-P8Oo32oI-40cd4f5edc6bf019b2e4a01eee2a76a5.mp4,,,,,,,,,,,,,,,,Au-P8Oo32oI-40cd4f5edc6bf019b2e4a01eee2a76a5.mp4 +1156,2EOlfyuSMwg-d68348b797bd189c174ebcfba2223dee.webm,2EOlfyuSMwg-d68348b797bd189c174ebcfba2223dee.webm,,,,,,,,,,,,,,,,2EOlfyuSMwg-d68348b797bd189c174ebcfba2223dee.webm +1158,vbKgavJFi7g-6a4c1f6e07868f3d199b210fbf337877.webm,vbKgavJFi7g-6a4c1f6e07868f3d199b210fbf337877.webm,,,,,,,,,,,,,,,,vbKgavJFi7g-6a4c1f6e07868f3d199b210fbf337877.webm +1160,wul4c1lmgJg-49d3f5290bba4d90ea34dee22ab7b9f3.mp4,wul4c1lmgJg-49d3f5290bba4d90ea34dee22ab7b9f3.mp4,,,,,,,,,,,,,,,,wul4c1lmgJg-49d3f5290bba4d90ea34dee22ab7b9f3.mp4 +1163,xGVViVl5PKc-050c45c48f18e77d7227339a815852ca.webm,xGVViVl5PKc-050c45c48f18e77d7227339a815852ca.webm,,,,,,,,,,,,,,,,xGVViVl5PKc-050c45c48f18e77d7227339a815852ca.webm +1164,H23iADHsAIc-53f1880f9d34697dd1405062c6e6af69.webm,H23iADHsAIc-53f1880f9d34697dd1405062c6e6af69.webm,,,,,,,,,,,,,,,,H23iADHsAIc-53f1880f9d34697dd1405062c6e6af69.webm +1168,0CLcktw8nng-30b48077bd2144d6945aa2f474f163c9.mp4,0CLcktw8nng-30b48077bd2144d6945aa2f474f163c9.mp4,,,,,,,,,,,,,,,,0CLcktw8nng-30b48077bd2144d6945aa2f474f163c9.mp4 +1169,L05OESPYArg-5fc7b3ac8c615e2ceab6e1074f43987f.webm,L05OESPYArg-5fc7b3ac8c615e2ceab6e1074f43987f.webm,,,,,,,,,,,,,,,,L05OESPYArg-5fc7b3ac8c615e2ceab6e1074f43987f.webm +1170,mIqHZo7L6wU-802d6efc5fe57262605570bfc1262a66.mp4,mIqHZo7L6wU-802d6efc5fe57262605570bfc1262a66.mp4,,,,,,,,,,,,,,,,mIqHZo7L6wU-802d6efc5fe57262605570bfc1262a66.mp4 +1172,JKiIedVGAGI-d2d5fa562222d4ebb9b0c7ac5c662fcc.webm,JKiIedVGAGI-d2d5fa562222d4ebb9b0c7ac5c662fcc.webm,,,,,,,,,,,,,,,,JKiIedVGAGI-d2d5fa562222d4ebb9b0c7ac5c662fcc.webm +1173,njZrG5cjfBo-e9eb190d20dfc20c0d7817819d7cbb8c.mp4,njZrG5cjfBo-e9eb190d20dfc20c0d7817819d7cbb8c.mp4,,,,,,,,,,,,,,,,njZrG5cjfBo-e9eb190d20dfc20c0d7817819d7cbb8c.mp4 +1174,0IaeFpAKHXQ-4557562ddd6cf563d1e57b594fcb96d8.webm,0IaeFpAKHXQ-4557562ddd6cf563d1e57b594fcb96d8.webm,,,,,,,,,,,,,,,,0IaeFpAKHXQ-4557562ddd6cf563d1e57b594fcb96d8.webm +1175,4-9Eb1Jl_BE-d81e931aeeecf24157020ed74768c923.webm,4-9Eb1Jl_BE-d81e931aeeecf24157020ed74768c923.webm,,,,,,,,,,,,,,,,4-9Eb1Jl_BE-d81e931aeeecf24157020ed74768c923.webm +1176,dQkD3vujxq4-75ff8ab570d59a1ebd128498ad20890e.mp4,dQkD3vujxq4-75ff8ab570d59a1ebd128498ad20890e.mp4,,,,,,,,,,,,,,,,dQkD3vujxq4-75ff8ab570d59a1ebd128498ad20890e.mp4 +1177,ZPgXJF2zGW0-53fc7c79ef6609d047810369948d2a58.webm,ZPgXJF2zGW0-53fc7c79ef6609d047810369948d2a58.webm,,,,,,,,,,,,,,,,ZPgXJF2zGW0-53fc7c79ef6609d047810369948d2a58.webm +1179,JqiBdeU00a0-c158ed13a14287d8ca2c5b2328514823.webm,JqiBdeU00a0-c158ed13a14287d8ca2c5b2328514823.webm,,,,,,,,,,,,,,,,JqiBdeU00a0-c158ed13a14287d8ca2c5b2328514823.webm +1180,R9xxdK5oRNE-33f3a13cac203ba4bfe374e46d6623cf.webm,R9xxdK5oRNE-33f3a13cac203ba4bfe374e46d6623cf.webm,,,,,,,,,,,,,,,,R9xxdK5oRNE-33f3a13cac203ba4bfe374e46d6623cf.webm +1181,fKKln81I2Y8-b363d06faa11694f9cc18056ad625655.webm,fKKln81I2Y8-b363d06faa11694f9cc18056ad625655.webm,,,,,,,,,,,,,,,,fKKln81I2Y8-b363d06faa11694f9cc18056ad625655.webm +1182,6i7JExPkjT0-7b4dd892b9851fcf3a416d76aaeab2ff.mp4,6i7JExPkjT0-7b4dd892b9851fcf3a416d76aaeab2ff.mp4,,,,,,,,,,,,,,,,6i7JExPkjT0-7b4dd892b9851fcf3a416d76aaeab2ff.mp4 +1183,RdeDDtkdt2s-f5c8f127a20a8b2b3e6ce1909aca2d63.webm,RdeDDtkdt2s-f5c8f127a20a8b2b3e6ce1909aca2d63.webm,,,,,,,,,,,,,,,,RdeDDtkdt2s-f5c8f127a20a8b2b3e6ce1909aca2d63.webm +1184,EItg_TVIPkM-4908445051be04cd06697c15086ddcf8.mp4,EItg_TVIPkM-4908445051be04cd06697c15086ddcf8.mp4,,,,,,,,,,,,,,,,EItg_TVIPkM-4908445051be04cd06697c15086ddcf8.mp4 +1186,ViJmdLGQopU-12c7e99873d349f35c6835315b973ca8.webm,ViJmdLGQopU-12c7e99873d349f35c6835315b973ca8.webm,,,,,,,,,,,,,,,,ViJmdLGQopU-12c7e99873d349f35c6835315b973ca8.webm +1187,YgY26oQjFsc-a2374b6cfb94d875f55af632df949c90.mp4,YgY26oQjFsc-a2374b6cfb94d875f55af632df949c90.mp4,,,,,,,,,,,,,,,,YgY26oQjFsc-a2374b6cfb94d875f55af632df949c90.mp4 +1188,G-uRVLs5wDk-44348d8eb726e2915ec21757a460383c.webm,G-uRVLs5wDk-44348d8eb726e2915ec21757a460383c.webm,,,,,,,,,,,,,,,,G-uRVLs5wDk-44348d8eb726e2915ec21757a460383c.webm +1190,gHOKz_4h5S8-2cf2156b48ec3a6ccc26c2e6cbaa885a.mp4,gHOKz_4h5S8-2cf2156b48ec3a6ccc26c2e6cbaa885a.mp4,,,,,,,,,,,,,,,,gHOKz_4h5S8-2cf2156b48ec3a6ccc26c2e6cbaa885a.mp4 +1191,bFt_FZJgPRI-dd1fc97b3b320cfa03d5937ce3d998e3.webm,bFt_FZJgPRI-dd1fc97b3b320cfa03d5937ce3d998e3.webm,,,,,,,,,,,,,,,,bFt_FZJgPRI-dd1fc97b3b320cfa03d5937ce3d998e3.webm +1192,CMcPeaMK6xo-4bc269214315a2c0c2095c7214d60438.mp4,CMcPeaMK6xo-4bc269214315a2c0c2095c7214d60438.mp4,,,,,,,,,,,,,,,,CMcPeaMK6xo-4bc269214315a2c0c2095c7214d60438.mp4 +1193,K6UzQv_kI_4-68248aacb024ee0a55e17f47259624c0.webm,K6UzQv_kI_4-68248aacb024ee0a55e17f47259624c0.webm,,,,,,,,,,,,,,,,K6UzQv_kI_4-68248aacb024ee0a55e17f47259624c0.webm +1194,Y18qS_NmWD8-2df45720d8c37bf8d1073df29b394bd1.webm,Y18qS_NmWD8-2df45720d8c37bf8d1073df29b394bd1.webm,,,,,,,,,,,,,,,,Y18qS_NmWD8-2df45720d8c37bf8d1073df29b394bd1.webm +1195,aSQ7jb_36ms-dbdd265659c5dbca05d5bfd6c01f9f3a.webm,aSQ7jb_36ms-dbdd265659c5dbca05d5bfd6c01f9f3a.webm,,,,,,,,,,,,,,,,aSQ7jb_36ms-dbdd265659c5dbca05d5bfd6c01f9f3a.webm +1196,NUDNiRciktc-ca8373974b2712e2aa8f1c206b913b51.webm,NUDNiRciktc-ca8373974b2712e2aa8f1c206b913b51.webm,,,,,,,,,,,,,,,,NUDNiRciktc-ca8373974b2712e2aa8f1c206b913b51.webm +1197,2LriUQiv2kA-28e8b5461780c24cd354a37b9afe95a8.webm,2LriUQiv2kA-28e8b5461780c24cd354a37b9afe95a8.webm,,,,,,,,,,,,,,,,2LriUQiv2kA-28e8b5461780c24cd354a37b9afe95a8.webm +1198,Ki_zcehbtRs-0b01394092f8fc8de830507bea65d78a.mp4,Ki_zcehbtRs-0b01394092f8fc8de830507bea65d78a.mp4,,,,,,,,,,,,,,,,Ki_zcehbtRs-0b01394092f8fc8de830507bea65d78a.mp4 +1199,lr6kMef1noQ-4edfc3906deee4d2ee6c3d3e7b58e9dd.webm,lr6kMef1noQ-4edfc3906deee4d2ee6c3d3e7b58e9dd.webm,,,,,,,,,,,,,,,,lr6kMef1noQ-4edfc3906deee4d2ee6c3d3e7b58e9dd.webm +1200,ZM21QyrcIjY-28b7fade4f572a0f8c8db3a13b2c8231.webm,ZM21QyrcIjY-28b7fade4f572a0f8c8db3a13b2c8231.webm,,,,,,,,,,,,,,,,ZM21QyrcIjY-28b7fade4f572a0f8c8db3a13b2c8231.webm +1203,co8pJrfytpQ-617e2ad9b5edf8c1036100667c31bfad.mp4,co8pJrfytpQ-617e2ad9b5edf8c1036100667c31bfad.mp4,,,,,,,,,,,,,,,,co8pJrfytpQ-617e2ad9b5edf8c1036100667c31bfad.mp4 +1205,MJo2BtFHhPU-3a2f15170df14e3ab8483b367b9fcd30.webm,MJo2BtFHhPU-3a2f15170df14e3ab8483b367b9fcd30.webm,,,,,,,,,,,,,,,,MJo2BtFHhPU-3a2f15170df14e3ab8483b367b9fcd30.webm +1206,MTfFZDYTAag-e2e087e5612f64c918789871518fc899.webm,MTfFZDYTAag-e2e087e5612f64c918789871518fc899.webm,,,,,,,,,,,,,,,,MTfFZDYTAag-e2e087e5612f64c918789871518fc899.webm +1207,cHS5szvp0iU-ba2aa17a63fbc9b45da3d4a096de695a.mp4,cHS5szvp0iU-ba2aa17a63fbc9b45da3d4a096de695a.mp4,,,,,,,,,,,,,,,,cHS5szvp0iU-ba2aa17a63fbc9b45da3d4a096de695a.mp4 +1208,qJGVAB6MNWc-8f1196303ae4d5dd179893aa8c18dd79.mp4,qJGVAB6MNWc-8f1196303ae4d5dd179893aa8c18dd79.mp4,,,,,,,,,,,,,,,,qJGVAB6MNWc-8f1196303ae4d5dd179893aa8c18dd79.mp4 +1209,RIkwTUkhnYE-95c6afb03c85fd0599e231681496ad6f.webm,RIkwTUkhnYE-95c6afb03c85fd0599e231681496ad6f.webm,,,,,,,,,,,,,,,,RIkwTUkhnYE-95c6afb03c85fd0599e231681496ad6f.webm +1210,si3SfdZ_lHc-71ca46d86ec3c3fd11154adbc5aa442b.mp4,si3SfdZ_lHc-71ca46d86ec3c3fd11154adbc5aa442b.mp4,,,,,,,,,,,,,,,,si3SfdZ_lHc-71ca46d86ec3c3fd11154adbc5aa442b.mp4 +1211,5mcskKQTJCA-9ed2cf43f511e21d81fa4205c9a7fa42.mp4,5mcskKQTJCA-9ed2cf43f511e21d81fa4205c9a7fa42.mp4,,,,,,,,,,,,,,,,5mcskKQTJCA-9ed2cf43f511e21d81fa4205c9a7fa42.mp4 +1212,NrwFznxqH_M-6aa02c3aaff875c79795958e8d622e2a.webm,NrwFznxqH_M-6aa02c3aaff875c79795958e8d622e2a.webm,,,,,,,,,,,,,,,,NrwFznxqH_M-6aa02c3aaff875c79795958e8d622e2a.webm +1213,O8Zb4sN4omI-52f4f37139e851c0bf7455ff99d6a925.mp4,O8Zb4sN4omI-52f4f37139e851c0bf7455ff99d6a925.mp4,,,,,,,,,,,,,,,,O8Zb4sN4omI-52f4f37139e851c0bf7455ff99d6a925.mp4 +1215,flsevUvm098-ba74e90711c9692f2a6a1157a6eaf146.mp4,flsevUvm098-ba74e90711c9692f2a6a1157a6eaf146.mp4,,,,,,,,,,,,,,,,flsevUvm098-ba74e90711c9692f2a6a1157a6eaf146.mp4 +1216,79-586Bv_Gs-0f14963b8bb5999312c0e19435956c06.webm,79-586Bv_Gs-0f14963b8bb5999312c0e19435956c06.webm,,,,,,,,,,,,,,,,79-586Bv_Gs-0f14963b8bb5999312c0e19435956c06.webm +1217,wuSh_5wwfls-ba0dfca8558586376a4d25c549419971.webm,wuSh_5wwfls-ba0dfca8558586376a4d25c549419971.webm,,,,,,,,,,,,,,,,wuSh_5wwfls-ba0dfca8558586376a4d25c549419971.webm +1219,u9EfUUJwDEc-52049f96d019819e039a4c71317ce56c.webm,u9EfUUJwDEc-52049f96d019819e039a4c71317ce56c.webm,,,,,,,,,,,,,,,,u9EfUUJwDEc-52049f96d019819e039a4c71317ce56c.webm +1220,MnEPQrGkNEg-644029fe2dfc3c342ea363d633a90fb5.mp4,MnEPQrGkNEg-644029fe2dfc3c342ea363d633a90fb5.mp4,,,,,,,,,,,,,,,,MnEPQrGkNEg-644029fe2dfc3c342ea363d633a90fb5.mp4 +1221,000dE7oQWG4-1ac648b8ce4567e396b86eb5f5d4fef4.webm,000dE7oQWG4-1ac648b8ce4567e396b86eb5f5d4fef4.webm,,,,,,,,,,,,,,,,000dE7oQWG4-1ac648b8ce4567e396b86eb5f5d4fef4.webm +1223,gCqK3Ew2OMc-f99fbe827409657c188e1d3d9b9dd009.webm,gCqK3Ew2OMc-f99fbe827409657c188e1d3d9b9dd009.webm,,,,,,,,,,,,,,,,gCqK3Ew2OMc-f99fbe827409657c188e1d3d9b9dd009.webm +1224,lXFGn6Oc9to-e53fe9a1ff84cfaf815931fb9695fd1c.mp4,lXFGn6Oc9to-e53fe9a1ff84cfaf815931fb9695fd1c.mp4,,,,,,,,,,,,,,,,lXFGn6Oc9to-e53fe9a1ff84cfaf815931fb9695fd1c.mp4 +1226,1bgDaQ6b3r0-302bdb3c9482b31f731aebc149fcb45a.mp4,1bgDaQ6b3r0-302bdb3c9482b31f731aebc149fcb45a.mp4,,,,,,,,,,,,,,,,1bgDaQ6b3r0-302bdb3c9482b31f731aebc149fcb45a.mp4 +1227,8PdP1s0eWN0-f69c23fa3bd1e2ec96daa79d57efecf9.webm,8PdP1s0eWN0-f69c23fa3bd1e2ec96daa79d57efecf9.webm,,,,,,,,,,,,,,,,8PdP1s0eWN0-f69c23fa3bd1e2ec96daa79d57efecf9.webm +1228,6LHiZ1LY90s-83e16756d3dc756e05752117c6a066f7.mp4,6LHiZ1LY90s-83e16756d3dc756e05752117c6a066f7.mp4,,,,,,,,,,,,,,,,6LHiZ1LY90s-83e16756d3dc756e05752117c6a066f7.mp4 +1229,n5pQSA2-Vsc-9c2fd4aa48c24703276a0fb558c80fe0.webm,n5pQSA2-Vsc-9c2fd4aa48c24703276a0fb558c80fe0.webm,,,,,,,,,,,,,,,,n5pQSA2-Vsc-9c2fd4aa48c24703276a0fb558c80fe0.webm +1231,nEjiiwyEq14-d30baf9f006644878553eae713179cdc.webm,nEjiiwyEq14-d30baf9f006644878553eae713179cdc.webm,,,,,,,,,,,,,,,,nEjiiwyEq14-d30baf9f006644878553eae713179cdc.webm +1232,5I0XnY6_QQE-c3c1c0485533ec98e3258c0f51e87bd3.webm,5I0XnY6_QQE-c3c1c0485533ec98e3258c0f51e87bd3.webm,,,,,,,,,,,,,,,,5I0XnY6_QQE-c3c1c0485533ec98e3258c0f51e87bd3.webm +1233,EtbFKskhaqI-ff6fe9bd8d6b4b6ea321f9de85537735.webm,EtbFKskhaqI-ff6fe9bd8d6b4b6ea321f9de85537735.webm,,,,,,,,,,,,,,,,EtbFKskhaqI-ff6fe9bd8d6b4b6ea321f9de85537735.webm +1234,chGJIt3DSbw-96745b43c97ccff75fabe49bd92335b6.webm,chGJIt3DSbw-96745b43c97ccff75fabe49bd92335b6.webm,,,,,,,,,,,,,,,,chGJIt3DSbw-96745b43c97ccff75fabe49bd92335b6.webm +1237,aawgoK6MYds-ec8dae554f69cc17aeb241c14b7248df.webm,aawgoK6MYds-ec8dae554f69cc17aeb241c14b7248df.webm,,,,,,,,,,,,,,,,aawgoK6MYds-ec8dae554f69cc17aeb241c14b7248df.webm +1238,v6pA-ys-LKo-b9d3fd6c61aeba678818e682145ce12c.mp4,v6pA-ys-LKo-b9d3fd6c61aeba678818e682145ce12c.mp4,,,,,,,,,,,,,,,,v6pA-ys-LKo-b9d3fd6c61aeba678818e682145ce12c.mp4 +1239,n_2oKhzN8n8-811eb60c4749dcbbd309f1924cb2ce35.mp4,n_2oKhzN8n8-811eb60c4749dcbbd309f1924cb2ce35.mp4,,,,,,,,,,,,,,,,n_2oKhzN8n8-811eb60c4749dcbbd309f1924cb2ce35.mp4 +1240,KeVoNTpwNgc-f51ea9157c61f0fdfd1a95f764d1a2ca.webm,KeVoNTpwNgc-f51ea9157c61f0fdfd1a95f764d1a2ca.webm,,,,,,,,,,,,,,,,KeVoNTpwNgc-f51ea9157c61f0fdfd1a95f764d1a2ca.webm +1241,o0aaxaNm5-8-34b142f266c7c4bb514af3213b9b826d.mp4,o0aaxaNm5-8-34b142f266c7c4bb514af3213b9b826d.mp4,,,,,,,,,,,,,,,,o0aaxaNm5-8-34b142f266c7c4bb514af3213b9b826d.mp4 +1242,j2BgyavFvss-7dfaec88cfe899afba8474d397567e00.webm,j2BgyavFvss-7dfaec88cfe899afba8474d397567e00.webm,,,,,,,,,,,,,,,,j2BgyavFvss-7dfaec88cfe899afba8474d397567e00.webm +1243,dau1iLjA9PU-0781b8b853494fd1f268a8530509c786.webm,dau1iLjA9PU-0781b8b853494fd1f268a8530509c786.webm,,,,,,,,,,,,,,,,dau1iLjA9PU-0781b8b853494fd1f268a8530509c786.webm +1244,ullnPRj8Cp0-133cdf55ae4ad7f5de5dc7ad2172ae12.webm,ullnPRj8Cp0-133cdf55ae4ad7f5de5dc7ad2172ae12.webm,,,,,,,,,,,,,,,,ullnPRj8Cp0-133cdf55ae4ad7f5de5dc7ad2172ae12.webm +1246,kZD0eaVToSk-b5a977650a057137822484b816a0c2a2.mp4,kZD0eaVToSk-b5a977650a057137822484b816a0c2a2.mp4,,,,,,,,,,,,,,,,kZD0eaVToSk-b5a977650a057137822484b816a0c2a2.mp4 +1247,rc0YaiiCoVE-b0bc7b79b6d5508d114a6ceb78f5241e.webm,rc0YaiiCoVE-b0bc7b79b6d5508d114a6ceb78f5241e.webm,,,,,,,,,,,,,,,,rc0YaiiCoVE-b0bc7b79b6d5508d114a6ceb78f5241e.webm +1248,oc5lu4uTlMc-81c284e48baa80eb618cae372c783818.mp4,oc5lu4uTlMc-81c284e48baa80eb618cae372c783818.mp4,,,,,,,,,,,,,,,,oc5lu4uTlMc-81c284e48baa80eb618cae372c783818.mp4 +1249,UmM6Oo1f53I-b371f187d4dc95c99aa26483aed4c095.mp4,UmM6Oo1f53I-b371f187d4dc95c99aa26483aed4c095.mp4,,,,,,,,,,,,,,,,UmM6Oo1f53I-b371f187d4dc95c99aa26483aed4c095.mp4 +1251,FYfTkT4gbUc-6093afdecf74e03009b4927c94ff5765.webm,FYfTkT4gbUc-6093afdecf74e03009b4927c94ff5765.webm,,,,,,,,,,,,,,,,FYfTkT4gbUc-6093afdecf74e03009b4927c94ff5765.webm +1252,9RwGxC5HZCE-35af5340223d9b6ba84e5d29a3e1f37c.webm,9RwGxC5HZCE-35af5340223d9b6ba84e5d29a3e1f37c.webm,,,,,,,,,,,,,,,,9RwGxC5HZCE-35af5340223d9b6ba84e5d29a3e1f37c.webm +1255,TJsHYy-GOyU-6f7a014abf17e6177d44b48167b00b69.webm,TJsHYy-GOyU-6f7a014abf17e6177d44b48167b00b69.webm,,,,,,,,,,,,,,,,TJsHYy-GOyU-6f7a014abf17e6177d44b48167b00b69.webm +1256,XBzpUXlJ4eQ-ecbe13db73bb621190290f0e9f76ed2a.webm,XBzpUXlJ4eQ-ecbe13db73bb621190290f0e9f76ed2a.webm,,,,,,,,,,,,,,,,XBzpUXlJ4eQ-ecbe13db73bb621190290f0e9f76ed2a.webm +1257,_CwnXZGnUuc-bd82b3a6b5f0b749fe552e9829550949.webm,_CwnXZGnUuc-bd82b3a6b5f0b749fe552e9829550949.webm,,,,,,,,,,,,,,,,_CwnXZGnUuc-bd82b3a6b5f0b749fe552e9829550949.webm +1258,aIti7YwJhaQ-b218ea99599ceba8b72e3dcdd7a13c04.webm,aIti7YwJhaQ-b218ea99599ceba8b72e3dcdd7a13c04.webm,,,,,,,,,,,,,,,,aIti7YwJhaQ-b218ea99599ceba8b72e3dcdd7a13c04.webm +1261,wTFMF4CeMDA-74a2f0094e4ea9ccded15ccbe0dba9ce.mp4,wTFMF4CeMDA-74a2f0094e4ea9ccded15ccbe0dba9ce.mp4,,,,,,,,,,,,,,,,wTFMF4CeMDA-74a2f0094e4ea9ccded15ccbe0dba9ce.mp4 +1262,oNHNyr8bvgY-a208d910710f7e6f39db1e9f407dcede.mp4,oNHNyr8bvgY-a208d910710f7e6f39db1e9f407dcede.mp4,,,,,,,,,,,,,,,,oNHNyr8bvgY-a208d910710f7e6f39db1e9f407dcede.mp4 +1263,5HYaaDqK3Ow-28c51dc33f9199c8957d06ca327482dd.mp4,5HYaaDqK3Ow-28c51dc33f9199c8957d06ca327482dd.mp4,,,,,,,,,,,,,,,,5HYaaDqK3Ow-28c51dc33f9199c8957d06ca327482dd.mp4 +1264,h_oWKSYNAZQ-488c383963c4655afaeebf7a617e2659.webm,h_oWKSYNAZQ-488c383963c4655afaeebf7a617e2659.webm,,,,,,,,,,,,,,,,h_oWKSYNAZQ-488c383963c4655afaeebf7a617e2659.webm +1265,hpKj53L67j0-0bc9136a88f7d0edb57c522c57296dcf.mp4,hpKj53L67j0-0bc9136a88f7d0edb57c522c57296dcf.mp4,,,,,,,,,,,,,,,,hpKj53L67j0-0bc9136a88f7d0edb57c522c57296dcf.mp4 +1266,XpbXjugOD9Q-7e0db1c98226185526f715c3b35e901f.webm,XpbXjugOD9Q-7e0db1c98226185526f715c3b35e901f.webm,,,,,,,,,,,,,,,,XpbXjugOD9Q-7e0db1c98226185526f715c3b35e901f.webm +1267,L5ffaXW6Y9g-a0386b63e6bb1b86282a699b11dd8072.mp4,L5ffaXW6Y9g-a0386b63e6bb1b86282a699b11dd8072.mp4,,,,,,,,,,,,,,,,L5ffaXW6Y9g-a0386b63e6bb1b86282a699b11dd8072.mp4 +1268,Xaqh1tm4FrY-76d4db7ceac7aa9acee2611a5e5ffa15.mp4,Xaqh1tm4FrY-76d4db7ceac7aa9acee2611a5e5ffa15.mp4,,,,,,,,,,,,,,,,Xaqh1tm4FrY-76d4db7ceac7aa9acee2611a5e5ffa15.mp4 +1269,IMD8DuqkcFo-4a02d5c3daab774bcf59eabdcc9f3ee0.mp4,IMD8DuqkcFo-4a02d5c3daab774bcf59eabdcc9f3ee0.mp4,,,,,,,,,,,,,,,,IMD8DuqkcFo-4a02d5c3daab774bcf59eabdcc9f3ee0.mp4 +1271,o60Wr69WTZ8-d7468d16169c3b4284f2978f137e373f.mp4,o60Wr69WTZ8-d7468d16169c3b4284f2978f137e373f.mp4,,,,,,,,,,,,,,,,o60Wr69WTZ8-d7468d16169c3b4284f2978f137e373f.mp4 +1272,YX68OmZVZ-A-ae7c7a6b2fc582d554731e8be1075db0.mp4,YX68OmZVZ-A-ae7c7a6b2fc582d554731e8be1075db0.mp4,,,,,,,,,,,,,,,,YX68OmZVZ-A-ae7c7a6b2fc582d554731e8be1075db0.mp4 +1273,YnhX8SX5feY-34f0dcc3bcfdd21601d97b78847994d8.webm,YnhX8SX5feY-34f0dcc3bcfdd21601d97b78847994d8.webm,,,,,,,,,,,,,,,,YnhX8SX5feY-34f0dcc3bcfdd21601d97b78847994d8.webm +1274,RU7-9l71zWs-e2a2099fd673e8874930816fb8fe387f.mp4,RU7-9l71zWs-e2a2099fd673e8874930816fb8fe387f.mp4,,,,,,,,,,,,,,,,RU7-9l71zWs-e2a2099fd673e8874930816fb8fe387f.mp4 +1275,j86NTotKf4s-45bf899a432b5a7207deb379655871ef.webm,j86NTotKf4s-45bf899a432b5a7207deb379655871ef.webm,,,,,,,,,,,,,,,,j86NTotKf4s-45bf899a432b5a7207deb379655871ef.webm +1276,nBFeBxxknqY-3b8655eb1acc5887c3764a8afc54c15a.webm,nBFeBxxknqY-3b8655eb1acc5887c3764a8afc54c15a.webm,,,,,,,,,,,,,,,,nBFeBxxknqY-3b8655eb1acc5887c3764a8afc54c15a.webm +1277,c8d8I7sqnzY-6aa3eaba066470cb5cf8774390deaa48.webm,c8d8I7sqnzY-6aa3eaba066470cb5cf8774390deaa48.webm,,,,,,,,,,,,,,,,c8d8I7sqnzY-6aa3eaba066470cb5cf8774390deaa48.webm +1278,94g4ysN4qVs-657067b21447935a88b4da5a1a74eeac.mp4,94g4ysN4qVs-657067b21447935a88b4da5a1a74eeac.mp4,,,,,,,,,,,,,,,,94g4ysN4qVs-657067b21447935a88b4da5a1a74eeac.mp4 +1279,W8MRz28T_9c-689a6c7356db01ee53695c1097b10ee8.mp4,W8MRz28T_9c-689a6c7356db01ee53695c1097b10ee8.mp4,,,,,,,,,,,,,,,,W8MRz28T_9c-689a6c7356db01ee53695c1097b10ee8.mp4 +1280,VDDLDbwqD_8-f31693a9c12778b384c75d18625d6b6e.webm,VDDLDbwqD_8-f31693a9c12778b384c75d18625d6b6e.webm,,,,,,,,,,,,,,,,VDDLDbwqD_8-f31693a9c12778b384c75d18625d6b6e.webm +1281,HJie_DsTTSA-ace6ee70ac6bacfb48f95005e25b22e7.webm,HJie_DsTTSA-ace6ee70ac6bacfb48f95005e25b22e7.webm,,,,,,,,,,,,,,,,HJie_DsTTSA-ace6ee70ac6bacfb48f95005e25b22e7.webm +1282,coljjn4As0o-19b8dda027146a47ec5a98f345e89a55.webm,coljjn4As0o-19b8dda027146a47ec5a98f345e89a55.webm,,,,,,,,,,,,,,,,coljjn4As0o-19b8dda027146a47ec5a98f345e89a55.webm +1283,GOEF9CEUuRs-1020031003b1efbb1b0c3039d5c069eb.mp4,GOEF9CEUuRs-1020031003b1efbb1b0c3039d5c069eb.mp4,,,,,,,,,,,,,,,,GOEF9CEUuRs-1020031003b1efbb1b0c3039d5c069eb.mp4 +1285,Di-rgngcGwo-0618b4d3b8655b16facf0a18a28b9a09.webm,Di-rgngcGwo-0618b4d3b8655b16facf0a18a28b9a09.webm,,,,,,,,,,,,,,,,Di-rgngcGwo-0618b4d3b8655b16facf0a18a28b9a09.webm +1288,Qcz5XKXMveg-a3e01669bddb0c972d0c5022f6330166.webm,Qcz5XKXMveg-a3e01669bddb0c972d0c5022f6330166.webm,,,,,,,,,,,,,,,,Qcz5XKXMveg-a3e01669bddb0c972d0c5022f6330166.webm +1290,Oa9o9qA7wcU-9acc3fc3527e060b643ce5b9e3e7eb63.webm,Oa9o9qA7wcU-9acc3fc3527e060b643ce5b9e3e7eb63.webm,,,,,,,,,,,,,,,,Oa9o9qA7wcU-9acc3fc3527e060b643ce5b9e3e7eb63.webm +1292,ndwVpbyz_cU-19d98dbc696caba2512adac54a7bc5fa.webm,ndwVpbyz_cU-19d98dbc696caba2512adac54a7bc5fa.webm,,,,,,,,,,,,,,,,ndwVpbyz_cU-19d98dbc696caba2512adac54a7bc5fa.webm +1293,7MgVTwPdVhY-996ab24298d94452b23b6d4dcc7eae87.webm,7MgVTwPdVhY-996ab24298d94452b23b6d4dcc7eae87.webm,,,,,,,,,,,,,,,,7MgVTwPdVhY-996ab24298d94452b23b6d4dcc7eae87.webm +1294,GzpGiNlGwI4-b54c24e20b4977cc691e879749e49758.mp4,GzpGiNlGwI4-b54c24e20b4977cc691e879749e49758.mp4,,,,,,,,,,,,,,,,GzpGiNlGwI4-b54c24e20b4977cc691e879749e49758.mp4 +1295,_SugW1rI7RE-27f5573cc08c88a37dc7362b5c76591f.mp4,_SugW1rI7RE-27f5573cc08c88a37dc7362b5c76591f.mp4,,,,,,,,,,,,,,,,_SugW1rI7RE-27f5573cc08c88a37dc7362b5c76591f.mp4 +1296,STFYVU8e_n0-567b64d022dbc3a2acdb317cf28c4592.mp4,STFYVU8e_n0-567b64d022dbc3a2acdb317cf28c4592.mp4,,,,,,,,,,,,,,,,STFYVU8e_n0-567b64d022dbc3a2acdb317cf28c4592.mp4 +1297,ZN8AJrmDUpI-ed4d0e97eaf5bb5ed5cab7c6f6b59465.webm,ZN8AJrmDUpI-ed4d0e97eaf5bb5ed5cab7c6f6b59465.webm,,,,,,,,,,,,,,,,ZN8AJrmDUpI-ed4d0e97eaf5bb5ed5cab7c6f6b59465.webm +1298,g5Dso77LuKc-5dcd6a3f2067264d032ec4a9de34d4e4.webm,g5Dso77LuKc-5dcd6a3f2067264d032ec4a9de34d4e4.webm,,,,,,,,,,,,,,,,g5Dso77LuKc-5dcd6a3f2067264d032ec4a9de34d4e4.webm +1300,77N0y-71nnM-da216d6960c19426bdd84c96b70b71be.mp4,77N0y-71nnM-da216d6960c19426bdd84c96b70b71be.mp4,,,,,,,,,,,,,,,,77N0y-71nnM-da216d6960c19426bdd84c96b70b71be.mp4 +1302,figXZeeY1HU-1be557e76cf50edfb4bd8050c0147d35.mp4,figXZeeY1HU-1be557e76cf50edfb4bd8050c0147d35.mp4,,,,,,,,,,,,,,,,figXZeeY1HU-1be557e76cf50edfb4bd8050c0147d35.mp4 +1305,Z7bq10XLjDg-7c44cf5efbd2a4118252aaedff068563.webm,Z7bq10XLjDg-7c44cf5efbd2a4118252aaedff068563.webm,,,,,,,,,,,,,,,,Z7bq10XLjDg-7c44cf5efbd2a4118252aaedff068563.webm +1306,cPhgK3xXL6U-ae84fffecf22d7866f87aabef0fdbb1c.webm,cPhgK3xXL6U-ae84fffecf22d7866f87aabef0fdbb1c.webm,,,,,,,,,,,,,,,,cPhgK3xXL6U-ae84fffecf22d7866f87aabef0fdbb1c.webm +1307,kOLQ_gSwGug-9d16f19f4a4a0c1ea2a4f6c36c203eda.mp4,kOLQ_gSwGug-9d16f19f4a4a0c1ea2a4f6c36c203eda.mp4,,,,,,,,,,,,,,,,kOLQ_gSwGug-9d16f19f4a4a0c1ea2a4f6c36c203eda.mp4 +1308,nk5jNj5ElCQ-46de2a7492fccf56c54b1f7e0e762a5d.mp4,nk5jNj5ElCQ-46de2a7492fccf56c54b1f7e0e762a5d.mp4,,,,,,,,,,,,,,,,nk5jNj5ElCQ-46de2a7492fccf56c54b1f7e0e762a5d.mp4 +1309,fnHXBDktjh8-28391a43b86e26ccedbe4c53d4d41b44.webm,fnHXBDktjh8-28391a43b86e26ccedbe4c53d4d41b44.webm,,,,,,,,,,,,,,,,fnHXBDktjh8-28391a43b86e26ccedbe4c53d4d41b44.webm +1310,FckPqqeAXo4-f49a34dfc0362955eda236ef7e903389.webm,FckPqqeAXo4-f49a34dfc0362955eda236ef7e903389.webm,,,,,,,,,,,,,,,,FckPqqeAXo4-f49a34dfc0362955eda236ef7e903389.webm +1312,hE92wvk0kcQ-8440097a3feefc6d1765ec7f3070e128.webm,hE92wvk0kcQ-8440097a3feefc6d1765ec7f3070e128.webm,,,,,,,,,,,,,,,,hE92wvk0kcQ-8440097a3feefc6d1765ec7f3070e128.webm +1313,ai6edz0hyC0-70abe0a8c103cd8066c187cb2c691203.webm,ai6edz0hyC0-70abe0a8c103cd8066c187cb2c691203.webm,,,,,,,,,,,,,,,,ai6edz0hyC0-70abe0a8c103cd8066c187cb2c691203.webm +1315,idM9OSPAsB4-6358a0e1e3a1dc8b74dc51ffeb25131d.webm,idM9OSPAsB4-6358a0e1e3a1dc8b74dc51ffeb25131d.webm,,,,,,,,,,,,,,,,idM9OSPAsB4-6358a0e1e3a1dc8b74dc51ffeb25131d.webm +1316,7V8h8IOOxbY-6c1a117889d8ca6d52847899ab419705.webm,7V8h8IOOxbY-6c1a117889d8ca6d52847899ab419705.webm,,,,,,,,,,,,,,,,7V8h8IOOxbY-6c1a117889d8ca6d52847899ab419705.webm +1317,vbnNy82bqUo-d229e62b7dcfe85c72c1e6ab57310ad9.webm,vbnNy82bqUo-d229e62b7dcfe85c72c1e6ab57310ad9.webm,,,,,,,,,,,,,,,,vbnNy82bqUo-d229e62b7dcfe85c72c1e6ab57310ad9.webm +1318,HR3R-ogC98M-c8349175a0a8466f7d76c9fd7157a376.mp4,HR3R-ogC98M-c8349175a0a8466f7d76c9fd7157a376.mp4,,,,,,,,,,,,,,,,HR3R-ogC98M-c8349175a0a8466f7d76c9fd7157a376.mp4 +1321,dxJg0t2LiZQ-8505de60b34f76b8a7f99ee21a3733a7.mp4,dxJg0t2LiZQ-8505de60b34f76b8a7f99ee21a3733a7.mp4,,,,,,,,,,,,,,,,dxJg0t2LiZQ-8505de60b34f76b8a7f99ee21a3733a7.mp4 +1323,iZAGMHLJ2U8-0a2d3652c2e8132baf9593de3cfae8b1.mp4,iZAGMHLJ2U8-0a2d3652c2e8132baf9593de3cfae8b1.mp4,,,,,,,,,,,,,,,,iZAGMHLJ2U8-0a2d3652c2e8132baf9593de3cfae8b1.mp4 +1324,3TiDAKydHic-a342d8bfb943e59152638c3ff9a1a26e.mp4,3TiDAKydHic-a342d8bfb943e59152638c3ff9a1a26e.mp4,,,,,,,,,,,,,,,,3TiDAKydHic-a342d8bfb943e59152638c3ff9a1a26e.mp4 +1325,8TtYaWTCLlg-fe860330381870662e320824449fe3c9.webm,8TtYaWTCLlg-fe860330381870662e320824449fe3c9.webm,,,,,,,,,,,,,,,,8TtYaWTCLlg-fe860330381870662e320824449fe3c9.webm +1326,g-IzqjYl3fA-42b4f273379ffd5372e165924933fb46.webm,g-IzqjYl3fA-42b4f273379ffd5372e165924933fb46.webm,,,,,,,,,,,,,,,,g-IzqjYl3fA-42b4f273379ffd5372e165924933fb46.webm +1327,OTDbLcgaRDw-a40ef27da83d7a4154187936a0d57cb3.mp4,OTDbLcgaRDw-a40ef27da83d7a4154187936a0d57cb3.mp4,,,,,,,,,,,,,,,,OTDbLcgaRDw-a40ef27da83d7a4154187936a0d57cb3.mp4 +1328,Jt8I31P_HLA-1d9da2f9fc20a39290e618472010909f.webm,Jt8I31P_HLA-1d9da2f9fc20a39290e618472010909f.webm,,,,,,,,,,,,,,,,Jt8I31P_HLA-1d9da2f9fc20a39290e618472010909f.webm +1330,jU1MgcbSpwA-6a91a8bcbb42936aa2585d0f893fe0a3.mp4,jU1MgcbSpwA-6a91a8bcbb42936aa2585d0f893fe0a3.mp4,,,,,,,,,,,,,,,,jU1MgcbSpwA-6a91a8bcbb42936aa2585d0f893fe0a3.mp4 +1331,67QrYGbt380-97e66b06c5ed50bc674c625e13f70750.webm,67QrYGbt380-97e66b06c5ed50bc674c625e13f70750.webm,,,,,,,,,,,,,,,,67QrYGbt380-97e66b06c5ed50bc674c625e13f70750.webm +1332,OSffF0ND2Do-86d9de87a5829023cb39e70446783ae3.webm,OSffF0ND2Do-86d9de87a5829023cb39e70446783ae3.webm,,,,,,,,,,,,,,,,OSffF0ND2Do-86d9de87a5829023cb39e70446783ae3.webm +1333,5CzvMTlOuCE-53c408479a6b038f1a5397ada8235b37.webm,5CzvMTlOuCE-53c408479a6b038f1a5397ada8235b37.webm,,,,,,,,,,,,,,,,5CzvMTlOuCE-53c408479a6b038f1a5397ada8235b37.webm +1334,zjrggLxsFfM-408573463eeae933d6e84f7ade442750.webm,zjrggLxsFfM-408573463eeae933d6e84f7ade442750.webm,,,,,,,,,,,,,,,,zjrggLxsFfM-408573463eeae933d6e84f7ade442750.webm +1335,FU4oK3_ku0w-eb7de16258447059cda3d14e2dbc9c02.mp4,FU4oK3_ku0w-eb7de16258447059cda3d14e2dbc9c02.mp4,,,,,,,,,,,,,,,,FU4oK3_ku0w-eb7de16258447059cda3d14e2dbc9c02.mp4 +1336,qr4alcpwEUg-fd297d94a5d2bd67f2aa7c3cbc13c493.webm,qr4alcpwEUg-fd297d94a5d2bd67f2aa7c3cbc13c493.webm,,,,,,,,,,,,,,,,qr4alcpwEUg-fd297d94a5d2bd67f2aa7c3cbc13c493.webm +1337,_LWz35Kv220-26f138dd65a422243239fa221fcf66f8.webm,_LWz35Kv220-26f138dd65a422243239fa221fcf66f8.webm,,,,,,,,,,,,,,,,_LWz35Kv220-26f138dd65a422243239fa221fcf66f8.webm +1338,HXiEnha7YTE-2cc3b6719b923c30cd29c83d27cd4300.mp4,HXiEnha7YTE-2cc3b6719b923c30cd29c83d27cd4300.mp4,,,,,,,,,,,,,,,,HXiEnha7YTE-2cc3b6719b923c30cd29c83d27cd4300.mp4 +1339,ujYKUuj-Cts-1b46261ee082f4519bac8000e34c23b4.webm,ujYKUuj-Cts-1b46261ee082f4519bac8000e34c23b4.webm,,,,,,,,,,,,,,,,ujYKUuj-Cts-1b46261ee082f4519bac8000e34c23b4.webm +1340,rq2S0dmXIFs-4cb4b3b985e02407a2d5eade69a8916a.mp4,rq2S0dmXIFs-4cb4b3b985e02407a2d5eade69a8916a.mp4,,,,,,,,,,,,,,,,rq2S0dmXIFs-4cb4b3b985e02407a2d5eade69a8916a.mp4 +1341,pBW5mcO76kY-61a4d9d440831b46f9f2444f076a9be8.webm,pBW5mcO76kY-61a4d9d440831b46f9f2444f076a9be8.webm,,,,,,,,,,,,,,,,pBW5mcO76kY-61a4d9d440831b46f9f2444f076a9be8.webm +1343,mJGS3GhwG_0-65c539064a3666605ef13b7984332059.mp4,mJGS3GhwG_0-65c539064a3666605ef13b7984332059.mp4,,,,,,,,,,,,,,,,mJGS3GhwG_0-65c539064a3666605ef13b7984332059.mp4 +1346,IEotp7wU644-b6728b3d86c403bc5ae1d1b0fa3436e9.mp4,IEotp7wU644-b6728b3d86c403bc5ae1d1b0fa3436e9.mp4,,,,,,,,,,,,,,,,IEotp7wU644-b6728b3d86c403bc5ae1d1b0fa3436e9.mp4 +1347,Wbt81OcHudQ-fc6f5b465557c5f6b48f8baafc7bdba7.webm,Wbt81OcHudQ-fc6f5b465557c5f6b48f8baafc7bdba7.webm,,,,,,,,,,,,,,,,Wbt81OcHudQ-fc6f5b465557c5f6b48f8baafc7bdba7.webm +1348,hMxMp6PP6PU-b0a728144515c8fa654d86d9e1fb1d21.webm,hMxMp6PP6PU-b0a728144515c8fa654d86d9e1fb1d21.webm,,,,,,,,,,,,,,,,hMxMp6PP6PU-b0a728144515c8fa654d86d9e1fb1d21.webm +1349,OkmVlsbyq0w-ac1034160b2c15a255a1cb2b07b43d82.webm,OkmVlsbyq0w-ac1034160b2c15a255a1cb2b07b43d82.webm,,,,,,,,,,,,,,,,OkmVlsbyq0w-ac1034160b2c15a255a1cb2b07b43d82.webm +1350,z8nr4Q5-2v4-4123c8c3e9ca3faddf89b3e1f45cf332.webm,z8nr4Q5-2v4-4123c8c3e9ca3faddf89b3e1f45cf332.webm,,,,,,,,,,,,,,,,z8nr4Q5-2v4-4123c8c3e9ca3faddf89b3e1f45cf332.webm +1351,BK13yaPkrRE-ea98539e335b1cf2bb7c7d33292961fc.webm,BK13yaPkrRE-ea98539e335b1cf2bb7c7d33292961fc.webm,,,,,,,,,,,,,,,,BK13yaPkrRE-ea98539e335b1cf2bb7c7d33292961fc.webm +1352,WigxPU0UzoA-71be925882bb79e7b253d34836882c7f.mp4,WigxPU0UzoA-71be925882bb79e7b253d34836882c7f.mp4,,,,,,,,,,,,,,,,WigxPU0UzoA-71be925882bb79e7b253d34836882c7f.mp4 +1353,hA21zU1LOgc-d2623e1f63f2afa89b95af86d2b68a82.webm,hA21zU1LOgc-d2623e1f63f2afa89b95af86d2b68a82.webm,,,,,,,,,,,,,,,,hA21zU1LOgc-d2623e1f63f2afa89b95af86d2b68a82.webm +1354,X8LOfUt7O1U-5eb11afeae49d11b22e459c89a4632a8.mp4,X8LOfUt7O1U-5eb11afeae49d11b22e459c89a4632a8.mp4,,,,,,,,,,,,,,,,X8LOfUt7O1U-5eb11afeae49d11b22e459c89a4632a8.mp4 +1355,D5mYmXGAVm4-c0ca9ed7183798e1eb299d1869044a73.webm,D5mYmXGAVm4-c0ca9ed7183798e1eb299d1869044a73.webm,,,,,,,,,,,,,,,,D5mYmXGAVm4-c0ca9ed7183798e1eb299d1869044a73.webm +1356,UuyHhXrA7Eg-0d5190cbd22447d25250c77c6964d6eb.mp4,UuyHhXrA7Eg-0d5190cbd22447d25250c77c6964d6eb.mp4,,,,,,,,,,,,,,,,UuyHhXrA7Eg-0d5190cbd22447d25250c77c6964d6eb.mp4 +1357,Rp9bvNSp0Wc-3cbb32a560246b5513d3388f79d9cef3.mp4,Rp9bvNSp0Wc-3cbb32a560246b5513d3388f79d9cef3.mp4,,,,,,,,,,,,,,,,Rp9bvNSp0Wc-3cbb32a560246b5513d3388f79d9cef3.mp4 +1358,H86_Az6YiEA-251a367f958b1fba993e76066ef806af.mp4,H86_Az6YiEA-251a367f958b1fba993e76066ef806af.mp4,,,,,,,,,,,,,,,,H86_Az6YiEA-251a367f958b1fba993e76066ef806af.mp4 +1359,Ldyf6N-OK78-955e6d4838153982bd60431a0d364132.mp4,Ldyf6N-OK78-955e6d4838153982bd60431a0d364132.mp4,,,,,,,,,,,,,,,,Ldyf6N-OK78-955e6d4838153982bd60431a0d364132.mp4 +1360,bBXrAl_Bebg-b30ab8cc7ccfc3fac664aea957cc14dd.mp4,bBXrAl_Bebg-b30ab8cc7ccfc3fac664aea957cc14dd.mp4,,,,,,,,,,,,,,,,bBXrAl_Bebg-b30ab8cc7ccfc3fac664aea957cc14dd.mp4 +1362,WMlPfjmxMrU-861c246d3e6f5c46e3d1903430e26124.webm,WMlPfjmxMrU-861c246d3e6f5c46e3d1903430e26124.webm,,,,,,,,,,,,,,,,WMlPfjmxMrU-861c246d3e6f5c46e3d1903430e26124.webm +1363,_mb9TQUJsKk-2f1ba6ca02d7b53943f38183a073ef41.webm,_mb9TQUJsKk-2f1ba6ca02d7b53943f38183a073ef41.webm,,,,,,,,,,,,,,,,_mb9TQUJsKk-2f1ba6ca02d7b53943f38183a073ef41.webm +1364,LUh9DWgfWmM-1d249b4cf8461bbd55c66555e9737eeb.webm,LUh9DWgfWmM-1d249b4cf8461bbd55c66555e9737eeb.webm,,,,,,,,,,,,,,,,LUh9DWgfWmM-1d249b4cf8461bbd55c66555e9737eeb.webm +1365,zyMAknU3TBQ-6f8e36b9ce188bc285dd789289726b8a.mp4,zyMAknU3TBQ-6f8e36b9ce188bc285dd789289726b8a.mp4,,,,,,,,,,,,,,,,zyMAknU3TBQ-6f8e36b9ce188bc285dd789289726b8a.mp4 +1366,0Ike5fnUGUg-9078c17f2aaa7bb6f00081c2d470098c.webm,0Ike5fnUGUg-9078c17f2aaa7bb6f00081c2d470098c.webm,,,,,,,,,,,,,,,,0Ike5fnUGUg-9078c17f2aaa7bb6f00081c2d470098c.webm +1367,xho7XynGRA8-12f1002251e91685c6636be357ee8fb0.webm,xho7XynGRA8-12f1002251e91685c6636be357ee8fb0.webm,,,,,,,,,,,,,,,,xho7XynGRA8-12f1002251e91685c6636be357ee8fb0.webm +1370,IzvjVGCZ0u4-680596793806b9b5904fcfff86c9d490.webm,IzvjVGCZ0u4-680596793806b9b5904fcfff86c9d490.webm,,,,,,,,,,,,,,,,IzvjVGCZ0u4-680596793806b9b5904fcfff86c9d490.webm +1371,cVn5dy0gWec-a99fe2f6ab71478267469fcdbab5cd00.mp4,cVn5dy0gWec-a99fe2f6ab71478267469fcdbab5cd00.mp4,,,,,,,,,,,,,,,,cVn5dy0gWec-a99fe2f6ab71478267469fcdbab5cd00.mp4 +1372,hCih259gbvg-a6342b7679035421992bb43278875880.webm,hCih259gbvg-a6342b7679035421992bb43278875880.webm,,,,,,,,,,,,,,,,hCih259gbvg-a6342b7679035421992bb43278875880.webm +1374,sFmjwmLwGSk-039a3d62a150f5046bad6651f5bd9f07.webm,sFmjwmLwGSk-039a3d62a150f5046bad6651f5bd9f07.webm,,,,,,,,,,,,,,,,sFmjwmLwGSk-039a3d62a150f5046bad6651f5bd9f07.webm +1375,d17aRD6BIaY-c54b8d9abe1ec4cc18cb907cb8aee88a.mp4,d17aRD6BIaY-c54b8d9abe1ec4cc18cb907cb8aee88a.mp4,,,,,,,,,,,,,,,,d17aRD6BIaY-c54b8d9abe1ec4cc18cb907cb8aee88a.mp4 +1377,Cdg8VBhqB18-0c2d1789721e332cfc6db69edbf183b1.webm,Cdg8VBhqB18-0c2d1789721e332cfc6db69edbf183b1.webm,,,,,,,,,,,,,,,,Cdg8VBhqB18-0c2d1789721e332cfc6db69edbf183b1.webm +1378,xW0WYnr_zD4-cb470ee7cb73c51174f8afd7805a106a.mp4,xW0WYnr_zD4-cb470ee7cb73c51174f8afd7805a106a.mp4,,,,,,,,,,,,,,,,xW0WYnr_zD4-cb470ee7cb73c51174f8afd7805a106a.mp4 +1379,ipVnLDHZV4w-889d64841d76a11525ff65bad65d0084.webm,ipVnLDHZV4w-889d64841d76a11525ff65bad65d0084.webm,,,,,,,,,,,,,,,,ipVnLDHZV4w-889d64841d76a11525ff65bad65d0084.webm +1380,dbR1bAftx0Q-92b57a610a2ed4e0c950b0a92566a0bc.webm,dbR1bAftx0Q-92b57a610a2ed4e0c950b0a92566a0bc.webm,,,,,,,,,,,,,,,,dbR1bAftx0Q-92b57a610a2ed4e0c950b0a92566a0bc.webm +1381,3Bpof2kq9es-cf887b02ed8badc631fd9277c48622b6.mp4,3Bpof2kq9es-cf887b02ed8badc631fd9277c48622b6.mp4,,,,,,,,,,,,,,,,3Bpof2kq9es-cf887b02ed8badc631fd9277c48622b6.mp4 +1382,oxM8beUN2tA-774d20b6bc759264e1f877cb08f5700e.mp4,oxM8beUN2tA-774d20b6bc759264e1f877cb08f5700e.mp4,,,,,,,,,,,,,,,,oxM8beUN2tA-774d20b6bc759264e1f877cb08f5700e.mp4 +1383,uRsLyWR_yHM-d4d26b3174d11a9cc6ba3f352ab60293.webm,uRsLyWR_yHM-d4d26b3174d11a9cc6ba3f352ab60293.webm,,,,,,,,,,,,,,,,uRsLyWR_yHM-d4d26b3174d11a9cc6ba3f352ab60293.webm +1384,NAtjXRWt8RA-30d73b0003cc42310b690082363cdae5.mp4,NAtjXRWt8RA-30d73b0003cc42310b690082363cdae5.mp4,,,,,,,,,,,,,,,,NAtjXRWt8RA-30d73b0003cc42310b690082363cdae5.mp4 +1385,7H-QLAcucPc-b5aeb882b56889569c6ed3751d92531c.mp4,7H-QLAcucPc-b5aeb882b56889569c6ed3751d92531c.mp4,,,,,,,,,,,,,,,,7H-QLAcucPc-b5aeb882b56889569c6ed3751d92531c.mp4 +1387,HGGi_Le6hVs-65150f525215e439cba342b1b26c13b2.webm,HGGi_Le6hVs-65150f525215e439cba342b1b26c13b2.webm,,,,,,,,,,,,,,,,HGGi_Le6hVs-65150f525215e439cba342b1b26c13b2.webm +1388,oE1OF5_gZ1k-11fa05f7a5e9672d656c190c82d1d2b1.mp4,oE1OF5_gZ1k-11fa05f7a5e9672d656c190c82d1d2b1.mp4,,,,,,,,,,,,,,,,oE1OF5_gZ1k-11fa05f7a5e9672d656c190c82d1d2b1.mp4 +1389,B5QMkAfVoLU-9dc838c10db285d38e33de97dfe1e53e.webm,B5QMkAfVoLU-9dc838c10db285d38e33de97dfe1e53e.webm,,,,,,,,,,,,,,,,B5QMkAfVoLU-9dc838c10db285d38e33de97dfe1e53e.webm +1390,PUfT5bw9o7c-7988d69653b30193a4807a474b57112d.webm,PUfT5bw9o7c-7988d69653b30193a4807a474b57112d.webm,,,,,,,,,,,,,,,,PUfT5bw9o7c-7988d69653b30193a4807a474b57112d.webm +1391,TPorqBJtitY-cbe90d56686373d0cedb68f983a160d3.webm,TPorqBJtitY-cbe90d56686373d0cedb68f983a160d3.webm,,,,,,,,,,,,,,,,TPorqBJtitY-cbe90d56686373d0cedb68f983a160d3.webm +1392,J1TjxYW5KGk-ca58667fe322a513f52d803c5ec4aad9.mp4,J1TjxYW5KGk-ca58667fe322a513f52d803c5ec4aad9.mp4,,,,,,,,,,,,,,,,J1TjxYW5KGk-ca58667fe322a513f52d803c5ec4aad9.mp4 +1395,Kfh4tuaUh1Q-c72a729ba366ba9eb353715f4b889872.mp4,Kfh4tuaUh1Q-c72a729ba366ba9eb353715f4b889872.mp4,,,,,,,,,,,,,,,,Kfh4tuaUh1Q-c72a729ba366ba9eb353715f4b889872.mp4 +1396,i0_mAxjo15k-d77616ba121922a30dfd2ececb1ba251.webm,i0_mAxjo15k-d77616ba121922a30dfd2ececb1ba251.webm,,,,,,,,,,,,,,,,i0_mAxjo15k-d77616ba121922a30dfd2ececb1ba251.webm +1397,6m7AC30dlwg-d54fd98883a328191f34c66a50671aa3.webm,6m7AC30dlwg-d54fd98883a328191f34c66a50671aa3.webm,,,,,,,,,,,,,,,,6m7AC30dlwg-d54fd98883a328191f34c66a50671aa3.webm +1398,SzpP3fdL_RE-cd8e3110e385603171547022622bf8c3.mp4,SzpP3fdL_RE-cd8e3110e385603171547022622bf8c3.mp4,,,,,,,,,,,,,,,,SzpP3fdL_RE-cd8e3110e385603171547022622bf8c3.mp4 +1399,b13N1OynhKc-8ba8335804047a8fdb910138dfea8c5b.webm,b13N1OynhKc-8ba8335804047a8fdb910138dfea8c5b.webm,,,,,,,,,,,,,,,,b13N1OynhKc-8ba8335804047a8fdb910138dfea8c5b.webm +1401,2dxsOCwp5nA-6702320b957e516d8b20787918eb2910.mp4,2dxsOCwp5nA-6702320b957e516d8b20787918eb2910.mp4,,,,,,,,,,,,,,,,2dxsOCwp5nA-6702320b957e516d8b20787918eb2910.mp4 +1402,QtGnq1hTpSY-07b3e3a984a3cf7a8b4bc9c95584e274.mp4,QtGnq1hTpSY-07b3e3a984a3cf7a8b4bc9c95584e274.mp4,,,,,,,,,,,,,,,,QtGnq1hTpSY-07b3e3a984a3cf7a8b4bc9c95584e274.mp4 +1404,Mog018huarg-5dd0c785fc96806ee070d22b2bf4d28e.webm,Mog018huarg-5dd0c785fc96806ee070d22b2bf4d28e.webm,,,,,,,,,,,,,,,,Mog018huarg-5dd0c785fc96806ee070d22b2bf4d28e.webm +1405,zeAC16eCPjo-0754c5df7cba68a73d1a95e94cc81dc6.mp4,zeAC16eCPjo-0754c5df7cba68a73d1a95e94cc81dc6.mp4,,,,,,,,,,,,,,,,zeAC16eCPjo-0754c5df7cba68a73d1a95e94cc81dc6.mp4 +1406,cEri6I_TgaY-b422fefdd7a126991f1228167f3488a6.mp4,cEri6I_TgaY-b422fefdd7a126991f1228167f3488a6.mp4,,,,,,,,,,,,,,,,cEri6I_TgaY-b422fefdd7a126991f1228167f3488a6.mp4 +1407,DK3GItd4KFU-c26b2ce3ef3c2f5e7d8f8119528ecd8e.mp4,DK3GItd4KFU-c26b2ce3ef3c2f5e7d8f8119528ecd8e.mp4,,,,,,,,,,,,,,,,DK3GItd4KFU-c26b2ce3ef3c2f5e7d8f8119528ecd8e.mp4 +1408,TO2QIEFAkac-6fbbfc8d24bd6802beb84f7a03532adb.webm,TO2QIEFAkac-6fbbfc8d24bd6802beb84f7a03532adb.webm,,,,,,,,,,,,,,,,TO2QIEFAkac-6fbbfc8d24bd6802beb84f7a03532adb.webm +1409,KV__ybKKeGo-d6b3f620c3a82633177d23d53413f359.mp4,KV__ybKKeGo-d6b3f620c3a82633177d23d53413f359.mp4,,,,,,,,,,,,,,,,KV__ybKKeGo-d6b3f620c3a82633177d23d53413f359.mp4 +1410,Dy_7KUTKEWE-b7d7eb4ae030eb22f16bbb95a3f9bf12.mp4,Dy_7KUTKEWE-b7d7eb4ae030eb22f16bbb95a3f9bf12.mp4,,,,,,,,,,,,,,,,Dy_7KUTKEWE-b7d7eb4ae030eb22f16bbb95a3f9bf12.mp4 +1411,TvISk3jLDt8-8273230bfd8e4772b1801062c59e87c5.mp4,TvISk3jLDt8-8273230bfd8e4772b1801062c59e87c5.mp4,,,,,,,,,,,,,,,,TvISk3jLDt8-8273230bfd8e4772b1801062c59e87c5.mp4 +1412,kCFg8NzbxcI-c627d4274eaefc9ff53a95f94df5edc2.webm,kCFg8NzbxcI-c627d4274eaefc9ff53a95f94df5edc2.webm,,,,,,,,,,,,,,,,kCFg8NzbxcI-c627d4274eaefc9ff53a95f94df5edc2.webm +1413,jHfARC6ofvE-48627d606235ce97b6eccb8f18648a21.mp4,jHfARC6ofvE-48627d606235ce97b6eccb8f18648a21.mp4,,,,,,,,,,,,,,,,jHfARC6ofvE-48627d606235ce97b6eccb8f18648a21.mp4 +1414,LyRG6FOz2-k-6f75d969a0791a5158869ec872f4286d.webm,LyRG6FOz2-k-6f75d969a0791a5158869ec872f4286d.webm,,,,,,,,,,,,,,,,LyRG6FOz2-k-6f75d969a0791a5158869ec872f4286d.webm +1415,YWzYpzgSpqQ-f1dc74548d4f093e2763c6767b6f9eef.webm,YWzYpzgSpqQ-f1dc74548d4f093e2763c6767b6f9eef.webm,,,,,,,,,,,,,,,,YWzYpzgSpqQ-f1dc74548d4f093e2763c6767b6f9eef.webm +1416,ACm_lgcxfpw-bbc938947418d12aef287e27bb574c07.webm,ACm_lgcxfpw-bbc938947418d12aef287e27bb574c07.webm,,,,,,,,,,,,,,,,ACm_lgcxfpw-bbc938947418d12aef287e27bb574c07.webm +1418,UQZx7y_wdIk-400b0a8e21ebadbcd6f0f75c3afd3751.mp4,UQZx7y_wdIk-400b0a8e21ebadbcd6f0f75c3afd3751.mp4,,,,,,,,,,,,,,,,UQZx7y_wdIk-400b0a8e21ebadbcd6f0f75c3afd3751.mp4 +1419,1Ck_gjUqfX8-2db2cb7e2eea90d296c27e9481cd67c7.webm,1Ck_gjUqfX8-2db2cb7e2eea90d296c27e9481cd67c7.webm,,,,,,,,,,,,,,,,1Ck_gjUqfX8-2db2cb7e2eea90d296c27e9481cd67c7.webm +1421,u-gBMRHIErM-9f0bb3a2dcedf4d182afa39e8de83512.mp4,u-gBMRHIErM-9f0bb3a2dcedf4d182afa39e8de83512.mp4,,,,,,,,,,,,,,,,u-gBMRHIErM-9f0bb3a2dcedf4d182afa39e8de83512.mp4 +1422,KUPhrkMq5Og-8c38fd80a694ecc6ce9bed886ba84e44.mp4,KUPhrkMq5Og-8c38fd80a694ecc6ce9bed886ba84e44.mp4,,,,,,,,,,,,,,,,KUPhrkMq5Og-8c38fd80a694ecc6ce9bed886ba84e44.mp4 +1423,d38-04nUZVs-89b257265f0adab7b1bb8114c9fb3b96.webm,d38-04nUZVs-89b257265f0adab7b1bb8114c9fb3b96.webm,,,,,,,,,,,,,,,,d38-04nUZVs-89b257265f0adab7b1bb8114c9fb3b96.webm +1424,fAxKQNdmnkU-e5a39f978d5d50bba20f25aaff06a5d4.webm,fAxKQNdmnkU-e5a39f978d5d50bba20f25aaff06a5d4.webm,,,,,,,,,,,,,,,,fAxKQNdmnkU-e5a39f978d5d50bba20f25aaff06a5d4.webm +1425,q3OqXMoPXh8-ae5381b81ab04e6aa8f45bad966dbaaa.webm,q3OqXMoPXh8-ae5381b81ab04e6aa8f45bad966dbaaa.webm,,,,,,,,,,,,,,,,q3OqXMoPXh8-ae5381b81ab04e6aa8f45bad966dbaaa.webm +1426,TJwvM1Yo7BA-c3cdbe26fd8eab88fd3cdd98a36a7f49.webm,TJwvM1Yo7BA-c3cdbe26fd8eab88fd3cdd98a36a7f49.webm,,,,,,,,,,,,,,,,TJwvM1Yo7BA-c3cdbe26fd8eab88fd3cdd98a36a7f49.webm +1427,TNN-5IlSAK8-1cfa9bf3f11dfc015be95802f53293be.webm,TNN-5IlSAK8-1cfa9bf3f11dfc015be95802f53293be.webm,,,,,,,,,,,,,,,,TNN-5IlSAK8-1cfa9bf3f11dfc015be95802f53293be.webm +1429,SMrJ8HhT_50-f09183b48c38a05bb689b19b35664e2d.mp4,SMrJ8HhT_50-f09183b48c38a05bb689b19b35664e2d.mp4,,,,,,,,,,,,,,,,SMrJ8HhT_50-f09183b48c38a05bb689b19b35664e2d.mp4 +1431,IkDqhfG26S8-7a6bebda45c57a5ea3d59288eabb06c7.webm,IkDqhfG26S8-7a6bebda45c57a5ea3d59288eabb06c7.webm,,,,,,,,,,,,,,,,IkDqhfG26S8-7a6bebda45c57a5ea3d59288eabb06c7.webm +1432,EmSW3xOPkIE-0ebeb76916ddb577fcb6cd657cc3f769.webm,EmSW3xOPkIE-0ebeb76916ddb577fcb6cd657cc3f769.webm,,,,,,,,,,,,,,,,EmSW3xOPkIE-0ebeb76916ddb577fcb6cd657cc3f769.webm +1434,dU9z89k7AxA-b361440c50b6b44b8a14d5014a4dd2f4.webm,dU9z89k7AxA-b361440c50b6b44b8a14d5014a4dd2f4.webm,,,,,,,,,,,,,,,,dU9z89k7AxA-b361440c50b6b44b8a14d5014a4dd2f4.webm +1435,Bx6y9YXPslg-2cbb67b012d75f99f7922496574bf02d.mp4,Bx6y9YXPslg-2cbb67b012d75f99f7922496574bf02d.mp4,,,,,,,,,,,,,,,,Bx6y9YXPslg-2cbb67b012d75f99f7922496574bf02d.mp4 +1436,WJSinUWCzkE-0118223b9ae1967c825b14a81282490b.webm,WJSinUWCzkE-0118223b9ae1967c825b14a81282490b.webm,,,,,,,,,,,,,,,,WJSinUWCzkE-0118223b9ae1967c825b14a81282490b.webm +1437,XdI6HzPyg3w-130064e5158f4f72e75edfdd53a9c126.webm,XdI6HzPyg3w-130064e5158f4f72e75edfdd53a9c126.webm,,,,,,,,,,,,,,,,XdI6HzPyg3w-130064e5158f4f72e75edfdd53a9c126.webm +1438,xGjrz9S72Sg-db3dda2a8d46e029099f3dc1e9aaf4dd.webm,xGjrz9S72Sg-db3dda2a8d46e029099f3dc1e9aaf4dd.webm,,,,,,,,,,,,,,,,xGjrz9S72Sg-db3dda2a8d46e029099f3dc1e9aaf4dd.webm +1440,9MfsJzRqds4-aad97d4a6c405926ec7ec67059aecca2.webm,9MfsJzRqds4-aad97d4a6c405926ec7ec67059aecca2.webm,,,,,,,,,,,,,,,,9MfsJzRqds4-aad97d4a6c405926ec7ec67059aecca2.webm +1441,_h6u2lvpl7E-92e8d3204518109970b189ab10b3b303.webm,_h6u2lvpl7E-92e8d3204518109970b189ab10b3b303.webm,,,,,,,,,,,,,,,,_h6u2lvpl7E-92e8d3204518109970b189ab10b3b303.webm +1443,_GOF0T92dm4-576462019d260b642e63250e507c267a.webm,_GOF0T92dm4-576462019d260b642e63250e507c267a.webm,,,,,,,,,,,,,,,,_GOF0T92dm4-576462019d260b642e63250e507c267a.webm +1445,Sto17HUpLGE-cb21f190cd6734b820e70781bb4ee3a0.mp4,Sto17HUpLGE-cb21f190cd6734b820e70781bb4ee3a0.mp4,,,,,,,,,,,,,,,,Sto17HUpLGE-cb21f190cd6734b820e70781bb4ee3a0.mp4 +1446,nSQDf3tN1I8-3dd1a5a3fb8b24b03224869cfa7d7809.webm,nSQDf3tN1I8-3dd1a5a3fb8b24b03224869cfa7d7809.webm,,,,,,,,,,,,,,,,nSQDf3tN1I8-3dd1a5a3fb8b24b03224869cfa7d7809.webm +1447,9Rdo0n5hQSs-f12e169623f566132befffc9ff626d44.webm,9Rdo0n5hQSs-f12e169623f566132befffc9ff626d44.webm,,,,,,,,,,,,,,,,9Rdo0n5hQSs-f12e169623f566132befffc9ff626d44.webm +1448,5SEdXZAS0xI-fdc076b909b21f457c5028d142334923.webm,5SEdXZAS0xI-fdc076b909b21f457c5028d142334923.webm,,,,,,,,,,,,,,,,5SEdXZAS0xI-fdc076b909b21f457c5028d142334923.webm +1450,4IGWwNRaIUQ-6b2161b1ce5ab2749cb9c3e5c097d249.webm,4IGWwNRaIUQ-6b2161b1ce5ab2749cb9c3e5c097d249.webm,,,,,,,,,,,,,,,,4IGWwNRaIUQ-6b2161b1ce5ab2749cb9c3e5c097d249.webm +1452,bJdjfzogM6Q-6112215456365fa49ed97cb22bb080fb.webm,bJdjfzogM6Q-6112215456365fa49ed97cb22bb080fb.webm,,,,,,,,,,,,,,,,bJdjfzogM6Q-6112215456365fa49ed97cb22bb080fb.webm +1453,v_0zOruaXE4-4ef1ef7754a7e193e9a878c266a63556.webm,v_0zOruaXE4-4ef1ef7754a7e193e9a878c266a63556.webm,,,,,,,,,,,,,,,,v_0zOruaXE4-4ef1ef7754a7e193e9a878c266a63556.webm +1454,gos1y5l9Pg0-d2f83335d34170054f7a1123314bc334.mp4,gos1y5l9Pg0-d2f83335d34170054f7a1123314bc334.mp4,,,,,,,,,,,,,,,,gos1y5l9Pg0-d2f83335d34170054f7a1123314bc334.mp4 +1455,dVphfzB5ut0-6b71abd3b199667926ba5db7d262b6fc.webm,dVphfzB5ut0-6b71abd3b199667926ba5db7d262b6fc.webm,,,,,,,,,,,,,,,,dVphfzB5ut0-6b71abd3b199667926ba5db7d262b6fc.webm +1456,5RJp5JXvtf4-b97b52f0834a2ac9611fd20da13af027.webm,5RJp5JXvtf4-b97b52f0834a2ac9611fd20da13af027.webm,,,,,,,,,,,,,,,,5RJp5JXvtf4-b97b52f0834a2ac9611fd20da13af027.webm +1457,jCzbjZCN_oI-b7fd0538831c7a15c22cf3f4bc2b75f5.webm,jCzbjZCN_oI-b7fd0538831c7a15c22cf3f4bc2b75f5.webm,,,,,,,,,,,,,,,,jCzbjZCN_oI-b7fd0538831c7a15c22cf3f4bc2b75f5.webm +1458,9bCp4FAHaNU-77f0427f0deaa2b4109483d95eb9089f.mp4,9bCp4FAHaNU-77f0427f0deaa2b4109483d95eb9089f.mp4,,,,,,,,,,,,,,,,9bCp4FAHaNU-77f0427f0deaa2b4109483d95eb9089f.mp4 +1459,ccbU4fEKjOQ-ed4dc2bde2e2d8f582b8b8b5ff74631b.mp4,ccbU4fEKjOQ-ed4dc2bde2e2d8f582b8b8b5ff74631b.mp4,,,,,,,,,,,,,,,,ccbU4fEKjOQ-ed4dc2bde2e2d8f582b8b8b5ff74631b.mp4 +1460,LVwFtCKa7yY-dc756880a342662f96f8c9c427d35b63.webm,LVwFtCKa7yY-dc756880a342662f96f8c9c427d35b63.webm,,,,,,,,,,,,,,,,LVwFtCKa7yY-dc756880a342662f96f8c9c427d35b63.webm +1461,lwWPBmjzztw-eff2ea1f61e98c1ad66221d014b8aa4d.webm,lwWPBmjzztw-eff2ea1f61e98c1ad66221d014b8aa4d.webm,,,,,,,,,,,,,,,,lwWPBmjzztw-eff2ea1f61e98c1ad66221d014b8aa4d.webm +1462,zFv6O1xC6RY-1918e98ac11785d54db182b81100b769.webm,zFv6O1xC6RY-1918e98ac11785d54db182b81100b769.webm,,,,,,,,,,,,,,,,zFv6O1xC6RY-1918e98ac11785d54db182b81100b769.webm +1463,DGWQdS-x5nE-91b742264ba9dd4ae36a21575272454c.webm,DGWQdS-x5nE-91b742264ba9dd4ae36a21575272454c.webm,,,,,,,,,,,,,,,,DGWQdS-x5nE-91b742264ba9dd4ae36a21575272454c.webm +1464,s2sxn8FjIHE-c7a7072b41af7d610b16443aec635d47.webm,s2sxn8FjIHE-c7a7072b41af7d610b16443aec635d47.webm,,,,,,,,,,,,,,,,s2sxn8FjIHE-c7a7072b41af7d610b16443aec635d47.webm +1465,BCn8TM5HUrE-d70324addccf921b422eede23d770818.webm,BCn8TM5HUrE-d70324addccf921b422eede23d770818.webm,,,,,,,,,,,,,,,,BCn8TM5HUrE-d70324addccf921b422eede23d770818.webm +1466,aGHwuX_afPs-8f923c6a575a3e8760eed7e4bbccaa95.mp4,aGHwuX_afPs-8f923c6a575a3e8760eed7e4bbccaa95.mp4,,,,,,,,,,,,,,,,aGHwuX_afPs-8f923c6a575a3e8760eed7e4bbccaa95.mp4 +1467,qKc5JQCAZcU-74a5cfcda8884d787fb6553bd205baf4.webm,qKc5JQCAZcU-74a5cfcda8884d787fb6553bd205baf4.webm,,,,,,,,,,,,,,,,qKc5JQCAZcU-74a5cfcda8884d787fb6553bd205baf4.webm +1468,2YOCaEsc8Ew-2a35c4b7fa0c740fe5ce9506b1bac220.webm,2YOCaEsc8Ew-2a35c4b7fa0c740fe5ce9506b1bac220.webm,,,,,,,,,,,,,,,,2YOCaEsc8Ew-2a35c4b7fa0c740fe5ce9506b1bac220.webm +1469,OLiP5CgOQ0Q-6c34c5ba01b8ac1093113c0fac3e3683.webm,OLiP5CgOQ0Q-6c34c5ba01b8ac1093113c0fac3e3683.webm,,,,,,,,,,,,,,,,OLiP5CgOQ0Q-6c34c5ba01b8ac1093113c0fac3e3683.webm +1471,LTEcqpo5xQA-fa081088b11fc153287f19cc920cac1c.webm,LTEcqpo5xQA-fa081088b11fc153287f19cc920cac1c.webm,,,,,,,,,,,,,,,,LTEcqpo5xQA-fa081088b11fc153287f19cc920cac1c.webm +1472,AefM1c4FTog-a49786256cbc55adde089ee99333896c.mp4,AefM1c4FTog-a49786256cbc55adde089ee99333896c.mp4,,,,,,,,,,,,,,,,AefM1c4FTog-a49786256cbc55adde089ee99333896c.mp4 +1473,J7odogksjzg-4e7b72c1c6655a763f01396707953119.webm,J7odogksjzg-4e7b72c1c6655a763f01396707953119.webm,,,,,,,,,,,,,,,,J7odogksjzg-4e7b72c1c6655a763f01396707953119.webm +1475,FcZ7AiM1x9A-64a30f8985b1a7ed6a25f16aa14068c1.webm,FcZ7AiM1x9A-64a30f8985b1a7ed6a25f16aa14068c1.webm,,,,,,,,,,,,,,,,FcZ7AiM1x9A-64a30f8985b1a7ed6a25f16aa14068c1.webm +1477,I0bQdm5UM-U-9f7329ccaef2904a35061c6ca0531941.mp4,I0bQdm5UM-U-9f7329ccaef2904a35061c6ca0531941.mp4,,,,,,,,,,,,,,,,I0bQdm5UM-U-9f7329ccaef2904a35061c6ca0531941.mp4 +1478,I5fjV_ZrLg8-4e271c0d9e69deb72c5ee377e6e1e3f8.mp4,I5fjV_ZrLg8-4e271c0d9e69deb72c5ee377e6e1e3f8.mp4,,,,,,,,,,,,,,,,I5fjV_ZrLg8-4e271c0d9e69deb72c5ee377e6e1e3f8.mp4 +1480,G9LRUrGmUvA-211e0156bbd6a97e70e21e54bf64bff2.mp4,G9LRUrGmUvA-211e0156bbd6a97e70e21e54bf64bff2.mp4,,,,,,,,,,,,,,,,G9LRUrGmUvA-211e0156bbd6a97e70e21e54bf64bff2.mp4 +1481,wevxuOZ_pLs-354c7a9f2812138f73442a28cad7ecd5.mp4,wevxuOZ_pLs-354c7a9f2812138f73442a28cad7ecd5.mp4,,,,,,,,,,,,,,,,wevxuOZ_pLs-354c7a9f2812138f73442a28cad7ecd5.mp4 +1482,Qxu1S0H7-E0-ac6e950b63b82bf11f75b8402898d8ef.webm,Qxu1S0H7-E0-ac6e950b63b82bf11f75b8402898d8ef.webm,,,,,,,,,,,,,,,,Qxu1S0H7-E0-ac6e950b63b82bf11f75b8402898d8ef.webm +1483,GL9BAsLhLfY-867b15730569d60d61081fa17e3ae863.mp4,GL9BAsLhLfY-867b15730569d60d61081fa17e3ae863.mp4,,,,,,,,,,,,,,,,GL9BAsLhLfY-867b15730569d60d61081fa17e3ae863.mp4 +1484,NQ7Tc49Ufq4-6cdbfc0c98a861b99bba82989c4ac4b5.mp4,NQ7Tc49Ufq4-6cdbfc0c98a861b99bba82989c4ac4b5.mp4,,,,,,,,,,,,,,,,NQ7Tc49Ufq4-6cdbfc0c98a861b99bba82989c4ac4b5.mp4 +1486,L7G36hyDk2E-dadef06410431a513442df278acbf918.mp4,L7G36hyDk2E-dadef06410431a513442df278acbf918.mp4,,,,,,,,,,,,,,,,L7G36hyDk2E-dadef06410431a513442df278acbf918.mp4 +1487,GD_v8hV2G2s-f98560537442ee80869216d17b44600c.mp4,GD_v8hV2G2s-f98560537442ee80869216d17b44600c.mp4,,,,,,,,,,,,,,,,GD_v8hV2G2s-f98560537442ee80869216d17b44600c.mp4 +1488,4ovoFj2jZfw-19149e3081458472e2b5406f4ed560db.webm,4ovoFj2jZfw-19149e3081458472e2b5406f4ed560db.webm,,,,,,,,,,,,,,,,4ovoFj2jZfw-19149e3081458472e2b5406f4ed560db.webm +1489,T4iMAxU5PW8-6382b2d78b847fa4e1ab1eece85f05cc.mp4,T4iMAxU5PW8-6382b2d78b847fa4e1ab1eece85f05cc.mp4,,,,,,,,,,,,,,,,T4iMAxU5PW8-6382b2d78b847fa4e1ab1eece85f05cc.mp4 +1491,InnnudYXcDA-48706efc3e084b1fc2c70ad491594579.webm,InnnudYXcDA-48706efc3e084b1fc2c70ad491594579.webm,,,,,,,,,,,,,,,,InnnudYXcDA-48706efc3e084b1fc2c70ad491594579.webm +1492,9wHgLaDIsi8-fbfc402ee5cd7885afb37de8adfe2c33.webm,9wHgLaDIsi8-fbfc402ee5cd7885afb37de8adfe2c33.webm,,,,,,,,,,,,,,,,9wHgLaDIsi8-fbfc402ee5cd7885afb37de8adfe2c33.webm +1495,26ARD2D9w94-86d52061fee115d0471ec356421d63ab.webm,26ARD2D9w94-86d52061fee115d0471ec356421d63ab.webm,,,,,,,,,,,,,,,,26ARD2D9w94-86d52061fee115d0471ec356421d63ab.webm +1496,rg-pYPoiXWI-57f9ce03118241946a591477f8734658.webm,rg-pYPoiXWI-57f9ce03118241946a591477f8734658.webm,,,,,,,,,,,,,,,,rg-pYPoiXWI-57f9ce03118241946a591477f8734658.webm +1497,za7A6vtesVs-cd4cae6069dce0cc0e592abcb150ed80.webm,za7A6vtesVs-cd4cae6069dce0cc0e592abcb150ed80.webm,,,,,,,,,,,,,,,,za7A6vtesVs-cd4cae6069dce0cc0e592abcb150ed80.webm +1498,AXSkJqJqtu4-94b35398f2be0742586841997340e1d7.webm,AXSkJqJqtu4-94b35398f2be0742586841997340e1d7.webm,,,,,,,,,,,,,,,,AXSkJqJqtu4-94b35398f2be0742586841997340e1d7.webm +1500,d81EJCOx2OM-dc85fc2ebb58a46f13d817510e1c9d54.webm,d81EJCOx2OM-dc85fc2ebb58a46f13d817510e1c9d54.webm,,,,,,,,,,,,,,,,d81EJCOx2OM-dc85fc2ebb58a46f13d817510e1c9d54.webm +1501,oIcW8oqOD2s-24d1939252ab5ea07eb86a117a8a9f43.webm,oIcW8oqOD2s-24d1939252ab5ea07eb86a117a8a9f43.webm,,,,,,,,,,,,,,,,oIcW8oqOD2s-24d1939252ab5ea07eb86a117a8a9f43.webm +1503,pP60FldLNHA-9fe3fff3f07825d1964b1224625c5353.webm,pP60FldLNHA-9fe3fff3f07825d1964b1224625c5353.webm,,,,,,,,,,,,,,,,pP60FldLNHA-9fe3fff3f07825d1964b1224625c5353.webm +1504,nI22uDezG3E-7a47b2495ef26dc21cbbcd9738705e52.webm,nI22uDezG3E-7a47b2495ef26dc21cbbcd9738705e52.webm,,,,,,,,,,,,,,,,nI22uDezG3E-7a47b2495ef26dc21cbbcd9738705e52.webm +1505,uGrWzRj36b4-c0736cea0587ea986ccf8f76b6147d8c.webm,uGrWzRj36b4-c0736cea0587ea986ccf8f76b6147d8c.webm,,,,,,,,,,,,,,,,uGrWzRj36b4-c0736cea0587ea986ccf8f76b6147d8c.webm +1506,rIwIlyCPJmo-cb2dfa8fa414cfca69ead195c441279a.webm,rIwIlyCPJmo-cb2dfa8fa414cfca69ead195c441279a.webm,,,,,,,,,,,,,,,,rIwIlyCPJmo-cb2dfa8fa414cfca69ead195c441279a.webm +1507,2qmTR8qX_00-79c787d0c4d1935a3525ab2ecc49d65c.webm,2qmTR8qX_00-79c787d0c4d1935a3525ab2ecc49d65c.webm,,,,,,,,,,,,,,,,2qmTR8qX_00-79c787d0c4d1935a3525ab2ecc49d65c.webm +1508,t9WRo1OupQo-b0b0cb3e5a5c06692a433c036a2eaccc.webm,t9WRo1OupQo-b0b0cb3e5a5c06692a433c036a2eaccc.webm,,,,,,,,,,,,,,,,t9WRo1OupQo-b0b0cb3e5a5c06692a433c036a2eaccc.webm +1510,tIORVJOhOL0-5868a73bcda650757743b4855570baad.webm,tIORVJOhOL0-5868a73bcda650757743b4855570baad.webm,,,,,,,,,,,,,,,,tIORVJOhOL0-5868a73bcda650757743b4855570baad.webm +1511,SV2kqsL3AJc-7a21675b7f747b0b512566f9ece65c8d.mp4,SV2kqsL3AJc-7a21675b7f747b0b512566f9ece65c8d.mp4,,,,,,,,,,,,,,,,SV2kqsL3AJc-7a21675b7f747b0b512566f9ece65c8d.mp4 +1513,Mwi_5yFWlac-93b41f309974d7328d626db2dda4780e.webm,Mwi_5yFWlac-93b41f309974d7328d626db2dda4780e.webm,,,,,,,,,,,,,,,,Mwi_5yFWlac-93b41f309974d7328d626db2dda4780e.webm +1514,HBW_EotJ_8A-1315841933c9d5e69f37c4d26daa07d9.webm,HBW_EotJ_8A-1315841933c9d5e69f37c4d26daa07d9.webm,,,,,,,,,,,,,,,,HBW_EotJ_8A-1315841933c9d5e69f37c4d26daa07d9.webm +1515,TNXOnYd1kko-8ebfab58aebcbc8b78e19266f4f5a73c.webm,TNXOnYd1kko-8ebfab58aebcbc8b78e19266f4f5a73c.webm,,,,,,,,,,,,,,,,TNXOnYd1kko-8ebfab58aebcbc8b78e19266f4f5a73c.webm +1516,MisaN6a4opc-e144d950ca66492f2e09b12ce8416f5e.webm,MisaN6a4opc-e144d950ca66492f2e09b12ce8416f5e.webm,,,,,,,,,,,,,,,,MisaN6a4opc-e144d950ca66492f2e09b12ce8416f5e.webm +1517,iJArEUMo-X8-bf179b6c6a6fb43d1c6509921f0a451d.mp4,iJArEUMo-X8-bf179b6c6a6fb43d1c6509921f0a451d.mp4,,,,,,,,,,,,,,,,iJArEUMo-X8-bf179b6c6a6fb43d1c6509921f0a451d.mp4 +1518,vqgTtu4uDTo-51b2c255d4a512b551433f295a318f0c.mp4,vqgTtu4uDTo-51b2c255d4a512b551433f295a318f0c.mp4,,,,,,,,,,,,,,,,vqgTtu4uDTo-51b2c255d4a512b551433f295a318f0c.mp4 +1519,1eS9RseG7ag-69820d797200649fde259ec363850400.mp4,1eS9RseG7ag-69820d797200649fde259ec363850400.mp4,,,,,,,,,,,,,,,,1eS9RseG7ag-69820d797200649fde259ec363850400.mp4 +1520,GfoKkUIzbjA-0fc69ee07cdaafa836651abda9576760.webm,GfoKkUIzbjA-0fc69ee07cdaafa836651abda9576760.webm,,,,,,,,,,,,,,,,GfoKkUIzbjA-0fc69ee07cdaafa836651abda9576760.webm +1521,1PgMbsvyIxY-6cf64a7f3efd734a6aa52004b06bd7c8.mp4,1PgMbsvyIxY-6cf64a7f3efd734a6aa52004b06bd7c8.mp4,,,,,,,,,,,,,,,,1PgMbsvyIxY-6cf64a7f3efd734a6aa52004b06bd7c8.mp4 +1523,qW2LX18G0JA-4af3d6a9647dfe2b83a5270149e8b750.mp4,qW2LX18G0JA-4af3d6a9647dfe2b83a5270149e8b750.mp4,,,,,,,,,,,,,,,,qW2LX18G0JA-4af3d6a9647dfe2b83a5270149e8b750.mp4 +1524,OB8cj5uOyOY-82bdd38f49e0fb7d327ad70984075abe.webm,OB8cj5uOyOY-82bdd38f49e0fb7d327ad70984075abe.webm,,,,,,,,,,,,,,,,OB8cj5uOyOY-82bdd38f49e0fb7d327ad70984075abe.webm +1525,BiG7uqJiT6c-88ff6c51e0b51e8b643c76a4869d1bc7.webm,BiG7uqJiT6c-88ff6c51e0b51e8b643c76a4869d1bc7.webm,,,,,,,,,,,,,,,,BiG7uqJiT6c-88ff6c51e0b51e8b643c76a4869d1bc7.webm +1526,yyLJlYPbZlA-bbee1b86b2e4977bfa1202860b5d474e.webm,yyLJlYPbZlA-bbee1b86b2e4977bfa1202860b5d474e.webm,,,,,,,,,,,,,,,,yyLJlYPbZlA-bbee1b86b2e4977bfa1202860b5d474e.webm +1528,7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6.webm,7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6.webm,,,,,,,,,,,,,,,,7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6.webm +1529,LPkLD2uvTQ8-fd23a6e1705e2906220e1ef97c0ad7d7.webm,LPkLD2uvTQ8-fd23a6e1705e2906220e1ef97c0ad7d7.webm,,,,,,,,,,,,,,,,LPkLD2uvTQ8-fd23a6e1705e2906220e1ef97c0ad7d7.webm +1530,BAy4ztYUaX8-c4192cba58779ef2291b623e2c866a5d.mp4,BAy4ztYUaX8-c4192cba58779ef2291b623e2c866a5d.mp4,,,,,,,,,,,,,,,,BAy4ztYUaX8-c4192cba58779ef2291b623e2c866a5d.mp4 +1531,388YhYyB9j0-212602ef7381060d5ab0a099f6811a4d.mp4,388YhYyB9j0-212602ef7381060d5ab0a099f6811a4d.mp4,,,,,,,,,,,,,,,,388YhYyB9j0-212602ef7381060d5ab0a099f6811a4d.mp4 +1532,RC-75r1V3l8-b42f998425e0bcca0a6b197073b259ef.mp4,RC-75r1V3l8-b42f998425e0bcca0a6b197073b259ef.mp4,,,,,,,,,,,,,,,,RC-75r1V3l8-b42f998425e0bcca0a6b197073b259ef.mp4 +1534,NFrj-YQY1Y4-8b0908947914d2c45454a9a56690f78f.mp4,NFrj-YQY1Y4-8b0908947914d2c45454a9a56690f78f.mp4,,,,,,,,,,,,,,,,NFrj-YQY1Y4-8b0908947914d2c45454a9a56690f78f.mp4 +1536,70pRNWpd-Ys-8d5de8c85b2bd266b827cb9e6d816ccb.webm,70pRNWpd-Ys-8d5de8c85b2bd266b827cb9e6d816ccb.webm,,,,,,,,,,,,,,,,70pRNWpd-Ys-8d5de8c85b2bd266b827cb9e6d816ccb.webm +1538,PIKZyXO_4-U-930fa95500cd1e49c886473c4707ee1c.webm,PIKZyXO_4-U-930fa95500cd1e49c886473c4707ee1c.webm,,,,,,,,,,,,,,,,PIKZyXO_4-U-930fa95500cd1e49c886473c4707ee1c.webm +1539,aXJucO4PH9k-81d7561f31f1f394a03ad1863d3d26a6.webm,aXJucO4PH9k-81d7561f31f1f394a03ad1863d3d26a6.webm,,,,,,,,,,,,,,,,aXJucO4PH9k-81d7561f31f1f394a03ad1863d3d26a6.webm +1540,2uS3KDOiIj8-4af6e67cc51235ff8a47a1f55af10e43.mp4,2uS3KDOiIj8-4af6e67cc51235ff8a47a1f55af10e43.mp4,,,,,,,,,,,,,,,,2uS3KDOiIj8-4af6e67cc51235ff8a47a1f55af10e43.mp4 +1541,KnWqrBKs5Sg-bf38c6d95d65ddf241a172d89a264071.webm,KnWqrBKs5Sg-bf38c6d95d65ddf241a172d89a264071.webm,,,,,,,,,,,,,,,,KnWqrBKs5Sg-bf38c6d95d65ddf241a172d89a264071.webm +1542,GIJU8Q_c1fQ-ad8f86b8687f70061c7016b773905000.mp4,GIJU8Q_c1fQ-ad8f86b8687f70061c7016b773905000.mp4,,,,,,,,,,,,,,,,GIJU8Q_c1fQ-ad8f86b8687f70061c7016b773905000.mp4 +1543,OMzLcNLjFNo-f7d8d152ae0d606fc915e3b64481e1d1.webm,OMzLcNLjFNo-f7d8d152ae0d606fc915e3b64481e1d1.webm,,,,,,,,,,,,,,,,OMzLcNLjFNo-f7d8d152ae0d606fc915e3b64481e1d1.webm +1545,lQRHXz_UD8E-32f8879f93b258d381051670cfd4a7cb.mp4,lQRHXz_UD8E-32f8879f93b258d381051670cfd4a7cb.mp4,,,,,,,,,,,,,,,,lQRHXz_UD8E-32f8879f93b258d381051670cfd4a7cb.mp4 +1546,FHF8jy9U694-416457c565713a90334d032a75d3ff93.mp4,FHF8jy9U694-416457c565713a90334d032a75d3ff93.mp4,,,,,,,,,,,,,,,,FHF8jy9U694-416457c565713a90334d032a75d3ff93.mp4 +1547,kygLM6mJu70-557fa2780af95ea53e83677f57b00cd2.mp4,kygLM6mJu70-557fa2780af95ea53e83677f57b00cd2.mp4,,,,,,,,,,,,,,,,kygLM6mJu70-557fa2780af95ea53e83677f57b00cd2.mp4 +1549,njjuJ3cw57E-c5540d1b43b32e50a71db0a8c7dcab88.mp4,njjuJ3cw57E-c5540d1b43b32e50a71db0a8c7dcab88.mp4,,,,,,,,,,,,,,,,njjuJ3cw57E-c5540d1b43b32e50a71db0a8c7dcab88.mp4 +1550,7Vv6OLN8MAY-5a8ed4ba339e3179f62a208d30352a69.mp4,7Vv6OLN8MAY-5a8ed4ba339e3179f62a208d30352a69.mp4,,,,,,,,,,,,,,,,7Vv6OLN8MAY-5a8ed4ba339e3179f62a208d30352a69.mp4 +1551,6QWIAsPOlxM-907ba6ac2932e487c215c9b364d06e14.webm,6QWIAsPOlxM-907ba6ac2932e487c215c9b364d06e14.webm,,,,,,,,,,,,,,,,6QWIAsPOlxM-907ba6ac2932e487c215c9b364d06e14.webm +1552,MIbehnQKDm8-34085787d9cbd858c668fd00e41bec69.mp4,MIbehnQKDm8-34085787d9cbd858c668fd00e41bec69.mp4,,,,,,,,,,,,,,,,MIbehnQKDm8-34085787d9cbd858c668fd00e41bec69.mp4 +1553,vLloKrAob5o-4d665f131d6b89a3d042f89707d610d3.webm,vLloKrAob5o-4d665f131d6b89a3d042f89707d610d3.webm,,,,,,,,,,,,,,,,vLloKrAob5o-4d665f131d6b89a3d042f89707d610d3.webm +1554,qbzXDgwxS8o-7585d6f4087ec9f0ca46604c800bf5a9.webm,qbzXDgwxS8o-7585d6f4087ec9f0ca46604c800bf5a9.webm,,,,,,,,,,,,,,,,qbzXDgwxS8o-7585d6f4087ec9f0ca46604c800bf5a9.webm +1555,YWok4bvLv9E-3e69bcaee777f433ddae85a5546b52c2.webm,YWok4bvLv9E-3e69bcaee777f433ddae85a5546b52c2.webm,,,,,,,,,,,,,,,,YWok4bvLv9E-3e69bcaee777f433ddae85a5546b52c2.webm +1556,NrKIH1mvDFI-c1552135e1ffbab8a55299389777a3d2.webm,NrKIH1mvDFI-c1552135e1ffbab8a55299389777a3d2.webm,,,,,,,,,,,,,,,,NrKIH1mvDFI-c1552135e1ffbab8a55299389777a3d2.webm +1557,zO2XzB9qcok-002a48dcf6e024ee80a5ebac6b89fa59.webm,zO2XzB9qcok-002a48dcf6e024ee80a5ebac6b89fa59.webm,,,,,,,,,,,,,,,,zO2XzB9qcok-002a48dcf6e024ee80a5ebac6b89fa59.webm +1559,qxaCQFr1ywA-70795193fbef384b469aed1ae3c12c14.mp4,qxaCQFr1ywA-70795193fbef384b469aed1ae3c12c14.mp4,,,,,,,,,,,,,,,,qxaCQFr1ywA-70795193fbef384b469aed1ae3c12c14.mp4 +1560,ET7eF_wcdvI-1be1ab2d45916c9603727c24cc174b90.webm,ET7eF_wcdvI-1be1ab2d45916c9603727c24cc174b90.webm,,,,,,,,,,,,,,,,ET7eF_wcdvI-1be1ab2d45916c9603727c24cc174b90.webm +1561,IyzgUBHHZ2Q-071d2f9cc648f4cf56fdf44484280c52.webm,IyzgUBHHZ2Q-071d2f9cc648f4cf56fdf44484280c52.webm,,,,,,,,,,,,,,,,IyzgUBHHZ2Q-071d2f9cc648f4cf56fdf44484280c52.webm +1562,waN1j4XNyRk-0fb3535687ecd443d3b20fb3c5a33ea6.webm,waN1j4XNyRk-0fb3535687ecd443d3b20fb3c5a33ea6.webm,,,,,,,,,,,,,,,,waN1j4XNyRk-0fb3535687ecd443d3b20fb3c5a33ea6.webm +1564,P--VSarTxP8-8d2ae753ef1725a71e11d8d0c9bf2b65.mp4,P--VSarTxP8-8d2ae753ef1725a71e11d8d0c9bf2b65.mp4,,,,,,,,,,,,,,,,P--VSarTxP8-8d2ae753ef1725a71e11d8d0c9bf2b65.mp4 +1566,sCDmJ1p_WyE-dafbeb708810f853a78bd274fb1e3f92.webm,sCDmJ1p_WyE-dafbeb708810f853a78bd274fb1e3f92.webm,,,,,,,,,,,,,,,,sCDmJ1p_WyE-dafbeb708810f853a78bd274fb1e3f92.webm +1567,M8bruehznD4-80fdc424555c1756f1b0e30c5bdd94ff.mp4,M8bruehznD4-80fdc424555c1756f1b0e30c5bdd94ff.mp4,,,,,,,,,,,,,,,,M8bruehznD4-80fdc424555c1756f1b0e30c5bdd94ff.mp4 +1568,_DjUyO3i1HM-6c40e28f97843c7a0bb31e5b54ce6cc2.mp4,_DjUyO3i1HM-6c40e28f97843c7a0bb31e5b54ce6cc2.mp4,,,,,,,,,,,,,,,,_DjUyO3i1HM-6c40e28f97843c7a0bb31e5b54ce6cc2.mp4 +1569,4866G5vJpu4-102443320869c1cc51a5b229bde9ccab.mp4,4866G5vJpu4-102443320869c1cc51a5b229bde9ccab.mp4,,,,,,,,,,,,,,,,4866G5vJpu4-102443320869c1cc51a5b229bde9ccab.mp4 +1570,BdiUjSKK6Q4-24e3818c91f469f9586ad6abbac656f8.webm,BdiUjSKK6Q4-24e3818c91f469f9586ad6abbac656f8.webm,,,,,,,,,,,,,,,,BdiUjSKK6Q4-24e3818c91f469f9586ad6abbac656f8.webm +1571,E6fNnzZGYP4-80a4652b4359b0568831212946bda5db.webm,E6fNnzZGYP4-80a4652b4359b0568831212946bda5db.webm,,,,,,,,,,,,,,,,E6fNnzZGYP4-80a4652b4359b0568831212946bda5db.webm +1572,Aj3kbW6JjZo-b6068511cd43d5be68c5a14daae8927a.mp4,Aj3kbW6JjZo-b6068511cd43d5be68c5a14daae8927a.mp4,,,,,,,,,,,,,,,,Aj3kbW6JjZo-b6068511cd43d5be68c5a14daae8927a.mp4 +1573,X2Ece2YEEAo-ffa65cf40eddd66f4878fba2917693a9.webm,X2Ece2YEEAo-ffa65cf40eddd66f4878fba2917693a9.webm,,,,,,,,,,,,,,,,X2Ece2YEEAo-ffa65cf40eddd66f4878fba2917693a9.webm +1574,_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf.webm,_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf.webm,,,,,,,,,,,,,,,,_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf.webm +1575,Y3n2AN8V6zY-90b83e926a61c6494cfdda9efb9809a5.mp4,Y3n2AN8V6zY-90b83e926a61c6494cfdda9efb9809a5.mp4,,,,,,,,,,,,,,,,Y3n2AN8V6zY-90b83e926a61c6494cfdda9efb9809a5.mp4 +1576,yp2flos0Nrw-32ecbc1606993592b99a1ed2b00d40dd.webm,yp2flos0Nrw-32ecbc1606993592b99a1ed2b00d40dd.webm,,,,,,,,,,,,,,,,yp2flos0Nrw-32ecbc1606993592b99a1ed2b00d40dd.webm +1577,wxXlM7Ap1zw-c1698039aaa0055c27f0d4798bee9683.mp4,wxXlM7Ap1zw-c1698039aaa0055c27f0d4798bee9683.mp4,,,,,,,,,,,,,,,,wxXlM7Ap1zw-c1698039aaa0055c27f0d4798bee9683.mp4 +1578,wjL71_eSd4Q-59a7499a24e804deb63410f6ee7b37bb.mp4,wjL71_eSd4Q-59a7499a24e804deb63410f6ee7b37bb.mp4,,,,,,,,,,,,,,,,wjL71_eSd4Q-59a7499a24e804deb63410f6ee7b37bb.mp4 +1579,4iu-u4yRwW4-b82c8544593dca711b0337f7f69d7866.mp4,4iu-u4yRwW4-b82c8544593dca711b0337f7f69d7866.mp4,,,,,,,,,,,,,,,,4iu-u4yRwW4-b82c8544593dca711b0337f7f69d7866.mp4 +1581,eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11.mp4,eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11.mp4,,,,,,,,,,,,,,,,eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11.mp4 +1582,T7z_JzK5zZM-4bf56a31df387d0ad100d2e7da85eea4.webm,T7z_JzK5zZM-4bf56a31df387d0ad100d2e7da85eea4.webm,,,,,,,,,,,,,,,,T7z_JzK5zZM-4bf56a31df387d0ad100d2e7da85eea4.webm +1583,mOMjxgNmC6A-978846ea8b782839888f86cf8d9022be.mp4,mOMjxgNmC6A-978846ea8b782839888f86cf8d9022be.mp4,,,,,,,,,,,,,,,,mOMjxgNmC6A-978846ea8b782839888f86cf8d9022be.mp4 +1584,RdEIS0q-PFk-7c14229d78da36391d332d4d594c95fa.webm,RdEIS0q-PFk-7c14229d78da36391d332d4d594c95fa.webm,,,,,,,,,,,,,,,,RdEIS0q-PFk-7c14229d78da36391d332d4d594c95fa.webm +1585,DCrlaQBcOqU-97044d8f6a33451c240bfa7c43da5491.webm,DCrlaQBcOqU-97044d8f6a33451c240bfa7c43da5491.webm,,,,,,,,,,,,,,,,DCrlaQBcOqU-97044d8f6a33451c240bfa7c43da5491.webm +1586,XF4OHbY9lWY-a8b2433a255f02374caf3a1e41b1204c.webm,XF4OHbY9lWY-a8b2433a255f02374caf3a1e41b1204c.webm,,,,,,,,,,,,,,,,XF4OHbY9lWY-a8b2433a255f02374caf3a1e41b1204c.webm +1588,XH7tT1diKhs-430eca70c677e0f46374e8b53f129a7c.webm,XH7tT1diKhs-430eca70c677e0f46374e8b53f129a7c.webm,,,,,,,,,,,,,,,,XH7tT1diKhs-430eca70c677e0f46374e8b53f129a7c.webm +1589,zrlAGAb3OMY-bdcf43eb8ccddc3a67d2fb9c68d017ef.webm,zrlAGAb3OMY-bdcf43eb8ccddc3a67d2fb9c68d017ef.webm,,,,,,,,,,,,,,,,zrlAGAb3OMY-bdcf43eb8ccddc3a67d2fb9c68d017ef.webm +1590,POn0_4ZPrTA-881ea5c90f20457ca78fe9896db4d0ab.webm,POn0_4ZPrTA-881ea5c90f20457ca78fe9896db4d0ab.webm,,,,,,,,,,,,,,,,POn0_4ZPrTA-881ea5c90f20457ca78fe9896db4d0ab.webm +1592,u5bFYLKUrac-c55f824b356cf19c1041e4897c70ebea.webm,u5bFYLKUrac-c55f824b356cf19c1041e4897c70ebea.webm,,,,,,,,,,,,,,,,u5bFYLKUrac-c55f824b356cf19c1041e4897c70ebea.webm +1593,l0m5IicWl1A-4560787d1b8b6d973d384683b4225670.mp4,l0m5IicWl1A-4560787d1b8b6d973d384683b4225670.mp4,,,,,,,,,,,,,,,,l0m5IicWl1A-4560787d1b8b6d973d384683b4225670.mp4 +1594,asw8_ugk9lI-a98022e0c1cded15dc68c4429b34db63.webm,asw8_ugk9lI-a98022e0c1cded15dc68c4429b34db63.webm,,,,,,,,,,,,,,,,asw8_ugk9lI-a98022e0c1cded15dc68c4429b34db63.webm +1595,a4cyiTNvuM0-69be08068c25a8c756dee1f1052c9890.webm,a4cyiTNvuM0-69be08068c25a8c756dee1f1052c9890.webm,,,,,,,,,,,,,,,,a4cyiTNvuM0-69be08068c25a8c756dee1f1052c9890.webm +1596,Cs3UdskURWA-5b2aa6d7be40f9915aecf174418d8d7e.mp4,Cs3UdskURWA-5b2aa6d7be40f9915aecf174418d8d7e.mp4,,,,,,,,,,,,,,,,Cs3UdskURWA-5b2aa6d7be40f9915aecf174418d8d7e.mp4 +1598,orHJUtltQy0-dced690a7dd18894605e30bae842c208.mp4,orHJUtltQy0-dced690a7dd18894605e30bae842c208.mp4,,,,,,,,,,,,,,,,orHJUtltQy0-dced690a7dd18894605e30bae842c208.mp4 +1599,4C5ml65lsJE-1d4a8867b4427d6a2446a16e5ec3538a.webm,4C5ml65lsJE-1d4a8867b4427d6a2446a16e5ec3538a.webm,,,,,,,,,,,,,,,,4C5ml65lsJE-1d4a8867b4427d6a2446a16e5ec3538a.webm +1600,FLghFJaPNK8-4131b0028a83b5354cf7fa3fdfe6e885.webm,FLghFJaPNK8-4131b0028a83b5354cf7fa3fdfe6e885.webm,,,,,,,,,,,,,,,,FLghFJaPNK8-4131b0028a83b5354cf7fa3fdfe6e885.webm +1601,58xPhmS_U3g-c1271043195cdf163bfbf8dedb222a26.mp4,58xPhmS_U3g-c1271043195cdf163bfbf8dedb222a26.mp4,,,,,,,,,,,,,,,,58xPhmS_U3g-c1271043195cdf163bfbf8dedb222a26.mp4 +1602,fWalK1qACko-47db43b3b263432bbff0f544b0ba5123.webm,fWalK1qACko-47db43b3b263432bbff0f544b0ba5123.webm,,,,,,,,,,,,,,,,fWalK1qACko-47db43b3b263432bbff0f544b0ba5123.webm +1603,YLVB7ggxJLk-da80bdeda7f8d122d4427dfc1efd9a2c.mp4,YLVB7ggxJLk-da80bdeda7f8d122d4427dfc1efd9a2c.mp4,,,,,,,,,,,,,,,,YLVB7ggxJLk-da80bdeda7f8d122d4427dfc1efd9a2c.mp4 +1604,JVvevtwAaxw-c9a28140f88c05386eb383c9aad5b445.mp4,JVvevtwAaxw-c9a28140f88c05386eb383c9aad5b445.mp4,,,,,,,,,,,,,,,,JVvevtwAaxw-c9a28140f88c05386eb383c9aad5b445.mp4 +1606,ZP4_4CdGoCw-21260ad16d4f183bc33e2a616c8e286f.mp4,ZP4_4CdGoCw-21260ad16d4f183bc33e2a616c8e286f.mp4,,,,,,,,,,,,,,,,ZP4_4CdGoCw-21260ad16d4f183bc33e2a616c8e286f.mp4 +1607,oCQgqyQaFj4-fbeaafdb4054a30e4bc9ae66713f445c.mp4,oCQgqyQaFj4-fbeaafdb4054a30e4bc9ae66713f445c.mp4,,,,,,,,,,,,,,,,oCQgqyQaFj4-fbeaafdb4054a30e4bc9ae66713f445c.mp4 +1609,PzWtMxkErkc-fdcf370d76e863f21bb7bb2f7fac0caf.webm,PzWtMxkErkc-fdcf370d76e863f21bb7bb2f7fac0caf.webm,,,,,,,,,,,,,,,,PzWtMxkErkc-fdcf370d76e863f21bb7bb2f7fac0caf.webm +1611,CdPexjHO_r0-22b243b184cd1d70124325473d1850a2.webm,CdPexjHO_r0-22b243b184cd1d70124325473d1850a2.webm,,,,,,,,,,,,,,,,CdPexjHO_r0-22b243b184cd1d70124325473d1850a2.webm +1614,38NgfwT8QdM-7833ee88770404616f1b76c17a11d2fb.mp4,38NgfwT8QdM-7833ee88770404616f1b76c17a11d2fb.mp4,,,,,,,,,,,,,,,,38NgfwT8QdM-7833ee88770404616f1b76c17a11d2fb.mp4 +1615,nid4RfPDaIg-32df8f77f8b74672aa391fbe749dce52.webm,nid4RfPDaIg-32df8f77f8b74672aa391fbe749dce52.webm,,,,,,,,,,,,,,,,nid4RfPDaIg-32df8f77f8b74672aa391fbe749dce52.webm +1616,oR_BSWe6B1s-72c2fcfeac55111412cd022cc3748bef.mp4,oR_BSWe6B1s-72c2fcfeac55111412cd022cc3748bef.mp4,,,,,,,,,,,,,,,,oR_BSWe6B1s-72c2fcfeac55111412cd022cc3748bef.mp4 +1617,eYutmO_Gk_c-a2a1ad9ea5c6f45504b375b15b796dbc.mp4,eYutmO_Gk_c-a2a1ad9ea5c6f45504b375b15b796dbc.mp4,,,,,,,,,,,,,,,,eYutmO_Gk_c-a2a1ad9ea5c6f45504b375b15b796dbc.mp4 +1618,Q3QNcNmOTrM-4ed3a9586916368acf044ac7e7e67bfd.mp4,Q3QNcNmOTrM-4ed3a9586916368acf044ac7e7e67bfd.mp4,,,,,,,,,,,,,,,,Q3QNcNmOTrM-4ed3a9586916368acf044ac7e7e67bfd.mp4 +1619,hkVfbxjJLAs-156dc7e88ea8ef9f5cc1e82c7c519135.mp4,hkVfbxjJLAs-156dc7e88ea8ef9f5cc1e82c7c519135.mp4,,,,,,,,,,,,,,,,hkVfbxjJLAs-156dc7e88ea8ef9f5cc1e82c7c519135.mp4 +1621,SnNSqgJYRPo-8b5b6741ac11078087c5642d92922b0e.mp4,SnNSqgJYRPo-8b5b6741ac11078087c5642d92922b0e.mp4,,,,,,,,,,,,,,,,SnNSqgJYRPo-8b5b6741ac11078087c5642d92922b0e.mp4 +1622,Au6wyThNMGk-e4e7961b8eb424ab6cb4bedb7914abc9.mp4,Au6wyThNMGk-e4e7961b8eb424ab6cb4bedb7914abc9.mp4,,,,,,,,,,,,,,,,Au6wyThNMGk-e4e7961b8eb424ab6cb4bedb7914abc9.mp4 +1623,G1APQPUX4Ls-013f1e07168ff9b590fce1edba85f32a.mp4,G1APQPUX4Ls-013f1e07168ff9b590fce1edba85f32a.mp4,,,,,,,,,,,,,,,,G1APQPUX4Ls-013f1e07168ff9b590fce1edba85f32a.mp4 +1624,4Hilp9dxHCk-44aca6be25bc5d5b9efc287f7d4730dd.mp4,4Hilp9dxHCk-44aca6be25bc5d5b9efc287f7d4730dd.mp4,,,,,,,,,,,,,,,,4Hilp9dxHCk-44aca6be25bc5d5b9efc287f7d4730dd.mp4 +1625,ltvIsHIhQHQ-2ad384426f5380727463425a17100f92.webm,ltvIsHIhQHQ-2ad384426f5380727463425a17100f92.webm,,,,,,,,,,,,,,,,ltvIsHIhQHQ-2ad384426f5380727463425a17100f92.webm +1626,cVrs5Qsnv1U-764e066c86851edb8bc63660ab1b5647.webm,cVrs5Qsnv1U-764e066c86851edb8bc63660ab1b5647.webm,,,,,,,,,,,,,,,,cVrs5Qsnv1U-764e066c86851edb8bc63660ab1b5647.webm +1627,cK45K5jojaI-a04c7caa0d6937b296d64fa794377fe2.mp4,cK45K5jojaI-a04c7caa0d6937b296d64fa794377fe2.mp4,,,,,,,,,,,,,,,,cK45K5jojaI-a04c7caa0d6937b296d64fa794377fe2.mp4 +1628,yr6Bg3hgVt4-dc29da5e15e2921ffbfcd56d4d895ccd.webm,yr6Bg3hgVt4-dc29da5e15e2921ffbfcd56d4d895ccd.webm,,,,,,,,,,,,,,,,yr6Bg3hgVt4-dc29da5e15e2921ffbfcd56d4d895ccd.webm +1629,g7PSxWsnslI-744f3f86f7face1a28fb5a4b1a44fb0a.webm,g7PSxWsnslI-744f3f86f7face1a28fb5a4b1a44fb0a.webm,,,,,,,,,,,,,,,,g7PSxWsnslI-744f3f86f7face1a28fb5a4b1a44fb0a.webm +1630,x3eyuBvBsyw-c3d831b690f3c0d7632b569b9e7298ec.mp4,x3eyuBvBsyw-c3d831b690f3c0d7632b569b9e7298ec.mp4,,,,,,,,,,,,,,,,x3eyuBvBsyw-c3d831b690f3c0d7632b569b9e7298ec.mp4 +1631,jvC-ceOdkCE-3c748249f196d58f4313d10c2cf747fe.webm,jvC-ceOdkCE-3c748249f196d58f4313d10c2cf747fe.webm,,,,,,,,,,,,,,,,jvC-ceOdkCE-3c748249f196d58f4313d10c2cf747fe.webm +1632,KKx-ubxzWfY-37a141194fe2c2a3eba7726217833176.webm,KKx-ubxzWfY-37a141194fe2c2a3eba7726217833176.webm,,,,,,,,,,,,,,,,KKx-ubxzWfY-37a141194fe2c2a3eba7726217833176.webm +1633,uMoCLQeUcDI-891e58a7eee391fa5e980b8d293802ba.webm,uMoCLQeUcDI-891e58a7eee391fa5e980b8d293802ba.webm,,,,,,,,,,,,,,,,uMoCLQeUcDI-891e58a7eee391fa5e980b8d293802ba.webm +1634,vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3.webm,vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3.webm,,,,,,,,,,,,,,,,vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3.webm +1635,FyHOFdyNqTM-9193c245d32d415513be57b72bb270dc.webm,FyHOFdyNqTM-9193c245d32d415513be57b72bb270dc.webm,,,,,,,,,,,,,,,,FyHOFdyNqTM-9193c245d32d415513be57b72bb270dc.webm +1637,FbPpokfgBpg-547987922af495de9ff6d079930b6e99.webm,FbPpokfgBpg-547987922af495de9ff6d079930b6e99.webm,,,,,,,,,,,,,,,,FbPpokfgBpg-547987922af495de9ff6d079930b6e99.webm +1638,1cFi8vR8SFk-73c37def06880e90fa145d9d904e692c.webm,1cFi8vR8SFk-73c37def06880e90fa145d9d904e692c.webm,,,,,,,,,,,,,,,,1cFi8vR8SFk-73c37def06880e90fa145d9d904e692c.webm +1639,xD9ucZlmGg8-809c988d227a4d021486edb24bde58c7.mp4,xD9ucZlmGg8-809c988d227a4d021486edb24bde58c7.mp4,,,,,,,,,,,,,,,,xD9ucZlmGg8-809c988d227a4d021486edb24bde58c7.mp4 +1640,LET--DP00NA-a2ba6b94c8629bbe3bf9bc3ef0b0e2cf.webm,LET--DP00NA-a2ba6b94c8629bbe3bf9bc3ef0b0e2cf.webm,,,,,,,,,,,,,,,,LET--DP00NA-a2ba6b94c8629bbe3bf9bc3ef0b0e2cf.webm +1642,60IAYdOXijE-8f872b64e7cecbc8a59f089b71dd9af9.mp4,60IAYdOXijE-8f872b64e7cecbc8a59f089b71dd9af9.mp4,,,,,,,,,,,,,,,,60IAYdOXijE-8f872b64e7cecbc8a59f089b71dd9af9.mp4 +1643,POKyG8LcUAU-d9b458ccd430f094d47cfea2c6aff72b.mp4,POKyG8LcUAU-d9b458ccd430f094d47cfea2c6aff72b.mp4,,,,,,,,,,,,,,,,POKyG8LcUAU-d9b458ccd430f094d47cfea2c6aff72b.mp4 +1644,qnmJSJhYErE-513c29d5bfb85211698caa3a2d12045f.webm,qnmJSJhYErE-513c29d5bfb85211698caa3a2d12045f.webm,,,,,,,,,,,,,,,,qnmJSJhYErE-513c29d5bfb85211698caa3a2d12045f.webm +1646,ak1y6NgvNgA-b80df2252f28bfdddf2a04b5862ba15d.webm,ak1y6NgvNgA-b80df2252f28bfdddf2a04b5862ba15d.webm,,,,,,,,,,,,,,,,ak1y6NgvNgA-b80df2252f28bfdddf2a04b5862ba15d.webm +1647,5LXPv96IYoA-0e92f84a6e9a8e0edfe834ad3ec70b59.webm,5LXPv96IYoA-0e92f84a6e9a8e0edfe834ad3ec70b59.webm,,,,,,,,,,,,,,,,5LXPv96IYoA-0e92f84a6e9a8e0edfe834ad3ec70b59.webm +1649,6t76mgCLc8A-68165bb3a61f207415c1e6aebfcff673.mp4,6t76mgCLc8A-68165bb3a61f207415c1e6aebfcff673.mp4,,,,,,,,,,,,,,,,6t76mgCLc8A-68165bb3a61f207415c1e6aebfcff673.mp4 +1650,mRe_w0W6yYE-e0ab7a5fb595f9aba2f04a78e66b6183.webm,mRe_w0W6yYE-e0ab7a5fb595f9aba2f04a78e66b6183.webm,,,,,,,,,,,,,,,,mRe_w0W6yYE-e0ab7a5fb595f9aba2f04a78e66b6183.webm +1651,XjRrFvUylS0-3a40d681f34c1bed2c15fbca7f1fd6f1.webm,XjRrFvUylS0-3a40d681f34c1bed2c15fbca7f1fd6f1.webm,,,,,,,,,,,,,,,,XjRrFvUylS0-3a40d681f34c1bed2c15fbca7f1fd6f1.webm +1652,6NAieugO350-b950e4448641b3aef6c48bb9ac2ddb10.webm,6NAieugO350-b950e4448641b3aef6c48bb9ac2ddb10.webm,,,,,,,,,,,,,,,,6NAieugO350-b950e4448641b3aef6c48bb9ac2ddb10.webm +1653,FJKtUGd3w0Y-8c835ba6d44ae1b4966cf001a886264f.webm,FJKtUGd3w0Y-8c835ba6d44ae1b4966cf001a886264f.webm,,,,,,,,,,,,,,,,FJKtUGd3w0Y-8c835ba6d44ae1b4966cf001a886264f.webm +1654,kYnHVkEwCPw-d32831c31e0bd6340b5a5885136a54a3.webm,kYnHVkEwCPw-d32831c31e0bd6340b5a5885136a54a3.webm,,,,,,,,,,,,,,,,kYnHVkEwCPw-d32831c31e0bd6340b5a5885136a54a3.webm +1656,jtjJkHQ_rqU-51bb973b7910d052d57d3bea7f876af1.webm,jtjJkHQ_rqU-51bb973b7910d052d57d3bea7f876af1.webm,,,,,,,,,,,,,,,,jtjJkHQ_rqU-51bb973b7910d052d57d3bea7f876af1.webm +1657,uuvtZX0xwRs-4e22925767a5208cfc76b5b9d62dadd1.mp4,uuvtZX0xwRs-4e22925767a5208cfc76b5b9d62dadd1.mp4,,,,,,,,,,,,,,,,uuvtZX0xwRs-4e22925767a5208cfc76b5b9d62dadd1.mp4 +1658,uqPhRKah6EA-4d154dee35f9c714fa7653d76807de7a.mp4,uqPhRKah6EA-4d154dee35f9c714fa7653d76807de7a.mp4,,,,,,,,,,,,,,,,uqPhRKah6EA-4d154dee35f9c714fa7653d76807de7a.mp4 +1659,rv6U_hhBVik-ff12c56b17b16130975548d7925e65bc.webm,rv6U_hhBVik-ff12c56b17b16130975548d7925e65bc.webm,,,,,,,,,,,,,,,,rv6U_hhBVik-ff12c56b17b16130975548d7925e65bc.webm +1661,Upk3lbMyx0M-45ef2fc091562d7d273530c03e4304c6.mp4,Upk3lbMyx0M-45ef2fc091562d7d273530c03e4304c6.mp4,,,,,,,,,,,,,,,,Upk3lbMyx0M-45ef2fc091562d7d273530c03e4304c6.mp4 +1662,CfBM6XqwtuQ-d597a7cd1e7c9ea770e107bfe5e8f848.mp4,CfBM6XqwtuQ-d597a7cd1e7c9ea770e107bfe5e8f848.mp4,,,,,,,,,,,,,,,,CfBM6XqwtuQ-d597a7cd1e7c9ea770e107bfe5e8f848.mp4 +1664,NCkUGnbimks-6d228a2a3d1e7e3f386fc62dfb18e9bd.webm,NCkUGnbimks-6d228a2a3d1e7e3f386fc62dfb18e9bd.webm,,,,,,,,,,,,,,,,NCkUGnbimks-6d228a2a3d1e7e3f386fc62dfb18e9bd.webm +1665,RbfqEd8W7Zs-96ffd3e76fa11d280738f2c885071aeb.mp4,RbfqEd8W7Zs-96ffd3e76fa11d280738f2c885071aeb.mp4,,,,,,,,,,,,,,,,RbfqEd8W7Zs-96ffd3e76fa11d280738f2c885071aeb.mp4 +1666,xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e.mp4,xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e.mp4,,,,,,,,,,,,,,,,xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e.mp4 +1667,uFybM4QdNXE-24b42959a805fdab20e1e2e2bd48bd0c.webm,uFybM4QdNXE-24b42959a805fdab20e1e2e2bd48bd0c.webm,,,,,,,,,,,,,,,,uFybM4QdNXE-24b42959a805fdab20e1e2e2bd48bd0c.webm +1668,PCeq80a2Fbo-84b2c295fc82f565d6480ca10045ca71.mp4,PCeq80a2Fbo-84b2c295fc82f565d6480ca10045ca71.mp4,,,,,,,,,,,,,,,,PCeq80a2Fbo-84b2c295fc82f565d6480ca10045ca71.mp4 +1669,dt-y4TtVfR8-2a8dcd5c8e77130a818fe4a0143781db.webm,dt-y4TtVfR8-2a8dcd5c8e77130a818fe4a0143781db.webm,,,,,,,,,,,,,,,,dt-y4TtVfR8-2a8dcd5c8e77130a818fe4a0143781db.webm +1670,FlO5h9bnmzE-b7202ba47e829e7a938002db4209fbd2.mp4,FlO5h9bnmzE-b7202ba47e829e7a938002db4209fbd2.mp4,,,,,,,,,,,,,,,,FlO5h9bnmzE-b7202ba47e829e7a938002db4209fbd2.mp4 +1671,TCgK5Dw2Zr0-829d1bf2aa84db70314c8bf1423e1c98.webm,TCgK5Dw2Zr0-829d1bf2aa84db70314c8bf1423e1c98.webm,,,,,,,,,,,,,,,,TCgK5Dw2Zr0-829d1bf2aa84db70314c8bf1423e1c98.webm +1672,UcOOeGlS5sU-cf0c9e4f57097a26011faec79a43c971.webm,UcOOeGlS5sU-cf0c9e4f57097a26011faec79a43c971.webm,,,,,,,,,,,,,,,,UcOOeGlS5sU-cf0c9e4f57097a26011faec79a43c971.webm +1673,N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054.webm,N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054.webm,,,,,,,,,,,,,,,,N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054.webm +1674,vNMHSYpEBOA-ef0020a8a5ae7ffa17719c5360cecae0.mp4,vNMHSYpEBOA-ef0020a8a5ae7ffa17719c5360cecae0.mp4,,,,,,,,,,,,,,,,vNMHSYpEBOA-ef0020a8a5ae7ffa17719c5360cecae0.mp4 +1675,LLdyu3Nso9A-4001e4e3d9984bc80d5cf33b68a56a20.mp4,LLdyu3Nso9A-4001e4e3d9984bc80d5cf33b68a56a20.mp4,,,,,,,,,,,,,,,,LLdyu3Nso9A-4001e4e3d9984bc80d5cf33b68a56a20.mp4 +1676,BVx0nR366sk-3b0933b1902d9a66730d447258c425ec.webm,BVx0nR366sk-3b0933b1902d9a66730d447258c425ec.webm,,,,,,,,,,,,,,,,BVx0nR366sk-3b0933b1902d9a66730d447258c425ec.webm +1677,qKA14n2w5JE-ea38b5a9492770c41611f19ef580c0b5.webm,qKA14n2w5JE-ea38b5a9492770c41611f19ef580c0b5.webm,,,,,,,,,,,,,,,,qKA14n2w5JE-ea38b5a9492770c41611f19ef580c0b5.webm +1678,nrlWbbPZXOs-639c22fa6f2494873904e80f49d98920.webm,nrlWbbPZXOs-639c22fa6f2494873904e80f49d98920.webm,,,,,,,,,,,,,,,,nrlWbbPZXOs-639c22fa6f2494873904e80f49d98920.webm +1679,BIsmaOHlMR0-04a003e1a9bcc5d8435f284620473ec9.mp4,BIsmaOHlMR0-04a003e1a9bcc5d8435f284620473ec9.mp4,,,,,,,,,,,,,,,,BIsmaOHlMR0-04a003e1a9bcc5d8435f284620473ec9.mp4 +1680,zU55UWVWMPw-02ed5a511178e0dbf9f8d2c207263c52.webm,zU55UWVWMPw-02ed5a511178e0dbf9f8d2c207263c52.webm,,,,,,,,,,,,,,,,zU55UWVWMPw-02ed5a511178e0dbf9f8d2c207263c52.webm +1681,SjTlXVgdcUQ-e4e3e0ce546a01c06dad31e9c85a73f9.mp4,SjTlXVgdcUQ-e4e3e0ce546a01c06dad31e9c85a73f9.mp4,,,,,,,,,,,,,,,,SjTlXVgdcUQ-e4e3e0ce546a01c06dad31e9c85a73f9.mp4 +1683,iGtCDu5DTm8-a4c1da3a9a83f4338840d885da6fe5f3.mp4,iGtCDu5DTm8-a4c1da3a9a83f4338840d885da6fe5f3.mp4,,,,,,,,,,,,,,,,iGtCDu5DTm8-a4c1da3a9a83f4338840d885da6fe5f3.mp4 +1684,23cf0MqTJMk-1a2a22a522d3a1f9dcc5ffa2d7820e5c.webm,23cf0MqTJMk-1a2a22a522d3a1f9dcc5ffa2d7820e5c.webm,,,,,,,,,,,,,,,,23cf0MqTJMk-1a2a22a522d3a1f9dcc5ffa2d7820e5c.webm +1685,fYin9SP-2ec-892ac8dd0bc6c04a3b5f4ec4aa41d4e5.webm,fYin9SP-2ec-892ac8dd0bc6c04a3b5f4ec4aa41d4e5.webm,,,,,,,,,,,,,,,,fYin9SP-2ec-892ac8dd0bc6c04a3b5f4ec4aa41d4e5.webm +1686,3trHfbWSELQ-c0dc199ecc958d951332cb5d15be7d77.webm,3trHfbWSELQ-c0dc199ecc958d951332cb5d15be7d77.webm,,,,,,,,,,,,,,,,3trHfbWSELQ-c0dc199ecc958d951332cb5d15be7d77.webm +1687,ELj4OjeGhK0-bf43c964d459e95543980900db8d4ebc.mp4,ELj4OjeGhK0-bf43c964d459e95543980900db8d4ebc.mp4,,,,,,,,,,,,,,,,ELj4OjeGhK0-bf43c964d459e95543980900db8d4ebc.mp4 +1688,wgRbGdEiXPc-7e7f9b29c03deea403406b6a776696a2.webm,wgRbGdEiXPc-7e7f9b29c03deea403406b6a776696a2.webm,,,,,,,,,,,,,,,,wgRbGdEiXPc-7e7f9b29c03deea403406b6a776696a2.webm +1689,FfXpktG9_mM-2b9657e89005f82c2d7f1a209b836a1e.webm,FfXpktG9_mM-2b9657e89005f82c2d7f1a209b836a1e.webm,,,,,,,,,,,,,,,,FfXpktG9_mM-2b9657e89005f82c2d7f1a209b836a1e.webm +1690,LFnMl6Lj3co-11cf15e9ee5ae44575f2743de9812ee5.mp4,LFnMl6Lj3co-11cf15e9ee5ae44575f2743de9812ee5.mp4,,,,,,,,,,,,,,,,LFnMl6Lj3co-11cf15e9ee5ae44575f2743de9812ee5.mp4 +1691,alzPsEhCwlE-ee827a6217f874a9df949d820b809d4d.webm,alzPsEhCwlE-ee827a6217f874a9df949d820b809d4d.webm,,,,,,,,,,,,,,,,alzPsEhCwlE-ee827a6217f874a9df949d820b809d4d.webm +1693,IbdDag-fkuY-616caa6475d979e6e70898659b92ddf2.webm,IbdDag-fkuY-616caa6475d979e6e70898659b92ddf2.webm,,,,,,,,,,,,,,,,IbdDag-fkuY-616caa6475d979e6e70898659b92ddf2.webm +1694,D9XcAAb4OLg-adcdcc82e83003145728918046283508.webm,D9XcAAb4OLg-adcdcc82e83003145728918046283508.webm,,,,,,,,,,,,,,,,D9XcAAb4OLg-adcdcc82e83003145728918046283508.webm +1696,TaW2pqNF3Ak-61dd9109fca4f5b4a968bc8b0d8f8909.webm,TaW2pqNF3Ak-61dd9109fca4f5b4a968bc8b0d8f8909.webm,,,,,,,,,,,,,,,,TaW2pqNF3Ak-61dd9109fca4f5b4a968bc8b0d8f8909.webm +1700,Y0sBlKQ2VE4-17b6e3ff8e9372f6151634ee746d145d.webm,Y0sBlKQ2VE4-17b6e3ff8e9372f6151634ee746d145d.webm,,,,,,,,,,,,,,,,Y0sBlKQ2VE4-17b6e3ff8e9372f6151634ee746d145d.webm +1701,6Sxqe_XXOH8-a60d9e5c20ad339affe026bd1ea1edd6.webm,6Sxqe_XXOH8-a60d9e5c20ad339affe026bd1ea1edd6.webm,,,,,,,,,,,,,,,,6Sxqe_XXOH8-a60d9e5c20ad339affe026bd1ea1edd6.webm +1703,iNvmwxkoJUU-01adc1bd901b62c1c7072cd37fb5fc59.mp4,iNvmwxkoJUU-01adc1bd901b62c1c7072cd37fb5fc59.mp4,,,,,,,,,,,,,,,,iNvmwxkoJUU-01adc1bd901b62c1c7072cd37fb5fc59.mp4 +1704,dmCPVrGva5M-04a097aa8c9314e81b3a0d920579780c.mp4,dmCPVrGva5M-04a097aa8c9314e81b3a0d920579780c.mp4,,,,,,,,,,,,,,,,dmCPVrGva5M-04a097aa8c9314e81b3a0d920579780c.mp4 +1705,uSVCUAlNuX4-64a095ff903daed6c217ec68c7277319.webm,uSVCUAlNuX4-64a095ff903daed6c217ec68c7277319.webm,,,,,,,,,,,,,,,,uSVCUAlNuX4-64a095ff903daed6c217ec68c7277319.webm +1706,Jgibra5GtiI-cff0c30a71a5af0418d7133e82b625e4.webm,Jgibra5GtiI-cff0c30a71a5af0418d7133e82b625e4.webm,,,,,,,,,,,,,,,,Jgibra5GtiI-cff0c30a71a5af0418d7133e82b625e4.webm +1707,SRRMHY-g76E-811333b07f76521285883dc351d08eb6.mp4,SRRMHY-g76E-811333b07f76521285883dc351d08eb6.mp4,,,,,,,,,,,,,,,,SRRMHY-g76E-811333b07f76521285883dc351d08eb6.mp4 +1708,4HcDSpWFmg0-79380a36b7587add31e998fb5180be2f.webm,4HcDSpWFmg0-79380a36b7587add31e998fb5180be2f.webm,,,,,,,,,,,,,,,,4HcDSpWFmg0-79380a36b7587add31e998fb5180be2f.webm +1709,2GgcAyiuPcI-0967a86cf748d99870a66d344d6db4e5.mp4,2GgcAyiuPcI-0967a86cf748d99870a66d344d6db4e5.mp4,,,,,,,,,,,,,,,,2GgcAyiuPcI-0967a86cf748d99870a66d344d6db4e5.mp4 +1710,9oziuihslYw-4e40b91603b42b60ce2cf5cf1853ded1.webm,9oziuihslYw-4e40b91603b42b60ce2cf5cf1853ded1.webm,,,,,,,,,,,,,,,,9oziuihslYw-4e40b91603b42b60ce2cf5cf1853ded1.webm +1711,vjUPl67ViSo-b310490745395d5b186cab8e9d355365.webm,vjUPl67ViSo-b310490745395d5b186cab8e9d355365.webm,,,,,,,,,,,,,,,,vjUPl67ViSo-b310490745395d5b186cab8e9d355365.webm +1712,h0908EoudUQ-1156419ecc446e79747a4964cfb250c3.webm,h0908EoudUQ-1156419ecc446e79747a4964cfb250c3.webm,,,,,,,,,,,,,,,,h0908EoudUQ-1156419ecc446e79747a4964cfb250c3.webm +1713,R-_1Aip_GNE-4142747702602b06e9ffc7e15b640ac9.webm,R-_1Aip_GNE-4142747702602b06e9ffc7e15b640ac9.webm,,,,,,,,,,,,,,,,R-_1Aip_GNE-4142747702602b06e9ffc7e15b640ac9.webm +1715,dxZ4p7oRNpQ-9a9db9fca309340e31660b2b9c0c01f1.mp4,dxZ4p7oRNpQ-9a9db9fca309340e31660b2b9c0c01f1.mp4,,,,,,,,,,,,,,,,dxZ4p7oRNpQ-9a9db9fca309340e31660b2b9c0c01f1.mp4 +1716,PyZJ5k9oQxM-e0f8ef4d86c8207d29c73cd82a929e45.webm,PyZJ5k9oQxM-e0f8ef4d86c8207d29c73cd82a929e45.webm,,,,,,,,,,,,,,,,PyZJ5k9oQxM-e0f8ef4d86c8207d29c73cd82a929e45.webm +1717,EO0VMnT5Fwk-c2d039072a2b2c49cb99d00c621426c6.webm,EO0VMnT5Fwk-c2d039072a2b2c49cb99d00c621426c6.webm,,,,,,,,,,,,,,,,EO0VMnT5Fwk-c2d039072a2b2c49cb99d00c621426c6.webm +1718,vGOTCaaWKps-5cf842c2864e77e1fd64f768ec03ac0b.webm,vGOTCaaWKps-5cf842c2864e77e1fd64f768ec03ac0b.webm,,,,,,,,,,,,,,,,vGOTCaaWKps-5cf842c2864e77e1fd64f768ec03ac0b.webm +1719,tnmt5hvWV7g-a99aff02d947d6e0c1c6e6e16884457f.webm,tnmt5hvWV7g-a99aff02d947d6e0c1c6e6e16884457f.webm,,,,,,,,,,,,,,,,tnmt5hvWV7g-a99aff02d947d6e0c1c6e6e16884457f.webm +1721,rsH5GaW7o3w-a9e58f0fa9744a4db038e111a3679927.webm,rsH5GaW7o3w-a9e58f0fa9744a4db038e111a3679927.webm,,,,,,,,,,,,,,,,rsH5GaW7o3w-a9e58f0fa9744a4db038e111a3679927.webm +1722,d6O1zRPEEho-b69c114b36877b2b3bd04b9116b40182.webm,d6O1zRPEEho-b69c114b36877b2b3bd04b9116b40182.webm,,,,,,,,,,,,,,,,d6O1zRPEEho-b69c114b36877b2b3bd04b9116b40182.webm +1723,bhUSJEpNwBs-6001935c454b584c7579acc5f2691dbb.webm,bhUSJEpNwBs-6001935c454b584c7579acc5f2691dbb.webm,,,,,,,,,,,,,,,,bhUSJEpNwBs-6001935c454b584c7579acc5f2691dbb.webm +1724,A8Kp5-So2rE-0031809c2fcbde75e5030d53fca3f527.mp4,A8Kp5-So2rE-0031809c2fcbde75e5030d53fca3f527.mp4,,,,,,,,,,,,,,,,A8Kp5-So2rE-0031809c2fcbde75e5030d53fca3f527.mp4 +1725,7vqgV_BeUrY-d2e261b0578c628bc99766832099452f.webm,7vqgV_BeUrY-d2e261b0578c628bc99766832099452f.webm,,,,,,,,,,,,,,,,7vqgV_BeUrY-d2e261b0578c628bc99766832099452f.webm +1726,dmKg7Vr0dw4-d27d50f30adb25073e3ef975f14506e1.webm,dmKg7Vr0dw4-d27d50f30adb25073e3ef975f14506e1.webm,,,,,,,,,,,,,,,,dmKg7Vr0dw4-d27d50f30adb25073e3ef975f14506e1.webm +1727,tVzTga_Dbhw-7b1f1fedeb28e61d338981b054a9dd09.webm,tVzTga_Dbhw-7b1f1fedeb28e61d338981b054a9dd09.webm,,,,,,,,,,,,,,,,tVzTga_Dbhw-7b1f1fedeb28e61d338981b054a9dd09.webm +1728,sEwiBhyldJ8-2cc5e19c8def07173055d973f6b9e4a4.webm,sEwiBhyldJ8-2cc5e19c8def07173055d973f6b9e4a4.webm,,,,,,,,,,,,,,,,sEwiBhyldJ8-2cc5e19c8def07173055d973f6b9e4a4.webm +1729,Ku3arTrM0jg-8dc21d6fbeaddaa7a6cd6e5a86c90b4e.mp4,Ku3arTrM0jg-8dc21d6fbeaddaa7a6cd6e5a86c90b4e.mp4,,,,,,,,,,,,,,,,Ku3arTrM0jg-8dc21d6fbeaddaa7a6cd6e5a86c90b4e.mp4 +1730,3rb37ogopQg-1529fe303c2023ffbe4704741f9c8d0c.mp4,3rb37ogopQg-1529fe303c2023ffbe4704741f9c8d0c.mp4,,,,,,,,,,,,,,,,3rb37ogopQg-1529fe303c2023ffbe4704741f9c8d0c.mp4 +1731,4vf_1mCNWSo-457bb6079e76eb61f84b086d2e976494.webm,4vf_1mCNWSo-457bb6079e76eb61f84b086d2e976494.webm,,,,,,,,,,,,,,,,4vf_1mCNWSo-457bb6079e76eb61f84b086d2e976494.webm +1732,_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3.mp4,_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3.mp4,,,,,,,,,,,,,,,,_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3.mp4 +1733,rXhQjSA5jfU-36065d168365f361c457a8d1a134746a.webm,rXhQjSA5jfU-36065d168365f361c457a8d1a134746a.webm,,,,,,,,,,,,,,,,rXhQjSA5jfU-36065d168365f361c457a8d1a134746a.webm +1734,9MonVwvFCoA-c0c3c4d070fe071115ff17f6475e2692.mp4,9MonVwvFCoA-c0c3c4d070fe071115ff17f6475e2692.mp4,,,,,,,,,,,,,,,,9MonVwvFCoA-c0c3c4d070fe071115ff17f6475e2692.mp4 +1736,SyFp6d4-3pc-21b347724493a0ece7c423416b8854ea.webm,SyFp6d4-3pc-21b347724493a0ece7c423416b8854ea.webm,,,,,,,,,,,,,,,,SyFp6d4-3pc-21b347724493a0ece7c423416b8854ea.webm +1737,aBf1PVsBusQ-15c9009d45c3aa3e35ab8c3ab68d59c6.webm,aBf1PVsBusQ-15c9009d45c3aa3e35ab8c3ab68d59c6.webm,,,,,,,,,,,,,,,,aBf1PVsBusQ-15c9009d45c3aa3e35ab8c3ab68d59c6.webm +1738,0J23Tg6yfKc-ed2347f9c451a7aa7d3def2b85ea0c76.webm,0J23Tg6yfKc-ed2347f9c451a7aa7d3def2b85ea0c76.webm,,,,,,,,,,,,,,,,0J23Tg6yfKc-ed2347f9c451a7aa7d3def2b85ea0c76.webm +1739,nHCQbD7zQS8-5442cff41ff9f65aaecd45d9080ae75c.webm,nHCQbD7zQS8-5442cff41ff9f65aaecd45d9080ae75c.webm,,,,,,,,,,,,,,,,nHCQbD7zQS8-5442cff41ff9f65aaecd45d9080ae75c.webm +1740,GKUa6sPvcgo-1603d3e1e6c866967ecb9f6a0ea75d5e.webm,GKUa6sPvcgo-1603d3e1e6c866967ecb9f6a0ea75d5e.webm,,,,,,,,,,,,,,,,GKUa6sPvcgo-1603d3e1e6c866967ecb9f6a0ea75d5e.webm +1741,km0hDl-1Y2w-ddb3985669df23b59ba8a834274419f0.mp4,km0hDl-1Y2w-ddb3985669df23b59ba8a834274419f0.mp4,,,,,,,,,,,,,,,,km0hDl-1Y2w-ddb3985669df23b59ba8a834274419f0.mp4 +1743,6LGE5ry-8A0-fc0c4c4855cb98fcbe152e0ec75115b1.webm,6LGE5ry-8A0-fc0c4c4855cb98fcbe152e0ec75115b1.webm,,,,,,,,,,,,,,,,6LGE5ry-8A0-fc0c4c4855cb98fcbe152e0ec75115b1.webm +1744,aeiODbHhJwA-6685652076c6f281b4272b8d3567614d.webm,aeiODbHhJwA-6685652076c6f281b4272b8d3567614d.webm,,,,,,,,,,,,,,,,aeiODbHhJwA-6685652076c6f281b4272b8d3567614d.webm +1745,zUXvwK6loOw-09f4b528207d90a69dfc0aaa80df1fe7.mp4,zUXvwK6loOw-09f4b528207d90a69dfc0aaa80df1fe7.mp4,,,,,,,,,,,,,,,,zUXvwK6loOw-09f4b528207d90a69dfc0aaa80df1fe7.mp4 +1746,gN472k0oHFg-5cf5e169175d1bb4947ff0fd60d6f370.mp4,gN472k0oHFg-5cf5e169175d1bb4947ff0fd60d6f370.mp4,,,,,,,,,,,,,,,,gN472k0oHFg-5cf5e169175d1bb4947ff0fd60d6f370.mp4 +1747,fYKKkHNbkUU-f338fe9b7a5324e331ff28ba5aba43e2.mp4,fYKKkHNbkUU-f338fe9b7a5324e331ff28ba5aba43e2.mp4,,,,,,,,,,,,,,,,fYKKkHNbkUU-f338fe9b7a5324e331ff28ba5aba43e2.mp4 +1749,lv0GLLr_mcM-13e017a70b596d7e4de056791ed5ab91.webm,lv0GLLr_mcM-13e017a70b596d7e4de056791ed5ab91.webm,,,,,,,,,,,,,,,,lv0GLLr_mcM-13e017a70b596d7e4de056791ed5ab91.webm +1752,FBynZRBFsHQ-e00a6e7a3502e83d22d7db0e090d7d8d.webm,FBynZRBFsHQ-e00a6e7a3502e83d22d7db0e090d7d8d.webm,,,,,,,,,,,,,,,,FBynZRBFsHQ-e00a6e7a3502e83d22d7db0e090d7d8d.webm +1753,w7_aYG8OG_o-05a836be32d9421280288067bb5a6bdd.webm,w7_aYG8OG_o-05a836be32d9421280288067bb5a6bdd.webm,,,,,,,,,,,,,,,,w7_aYG8OG_o-05a836be32d9421280288067bb5a6bdd.webm +1754,v7EnZpKVQZY-68b4bbd87fa6f94e1e1a39d903204027.webm,v7EnZpKVQZY-68b4bbd87fa6f94e1e1a39d903204027.webm,,,,,,,,,,,,,,,,v7EnZpKVQZY-68b4bbd87fa6f94e1e1a39d903204027.webm +1756,pOiYsK6GW4U-1a7e68abee7b38ea01efd2fcf0a172a9.webm,pOiYsK6GW4U-1a7e68abee7b38ea01efd2fcf0a172a9.webm,,,,,,,,,,,,,,,,pOiYsK6GW4U-1a7e68abee7b38ea01efd2fcf0a172a9.webm +1757,SodYvfYgEz0-d91501f541269579f98ba7394cf61f2e.webm,SodYvfYgEz0-d91501f541269579f98ba7394cf61f2e.webm,,,,,,,,,,,,,,,,SodYvfYgEz0-d91501f541269579f98ba7394cf61f2e.webm +1758,S21kK7M8wz0-4a910daa08b9eac3aeef6019e2eb22f5.mp4,S21kK7M8wz0-4a910daa08b9eac3aeef6019e2eb22f5.mp4,,,,,,,,,,,,,,,,S21kK7M8wz0-4a910daa08b9eac3aeef6019e2eb22f5.mp4 +1759,lNrWLV1HFb8-9406281f9e7cbd14be219fa46eccce3a.webm,lNrWLV1HFb8-9406281f9e7cbd14be219fa46eccce3a.webm,,,,,,,,,,,,,,,,lNrWLV1HFb8-9406281f9e7cbd14be219fa46eccce3a.webm +1760,qXcBHZqEJ2s-ee04e50b754fc80c1687909d7e536576.mp4,qXcBHZqEJ2s-ee04e50b754fc80c1687909d7e536576.mp4,,,,,,,,,,,,,,,,qXcBHZqEJ2s-ee04e50b754fc80c1687909d7e536576.mp4 +1763,X6wuQv299Fs-072f30b9ba9031ff7be3f092cbaefab6.webm,X6wuQv299Fs-072f30b9ba9031ff7be3f092cbaefab6.webm,,,,,,,,,,,,,,,,X6wuQv299Fs-072f30b9ba9031ff7be3f092cbaefab6.webm +1766,71nigk_RAj4-654744c20137d7137f92fba85835ba24.webm,71nigk_RAj4-654744c20137d7137f92fba85835ba24.webm,,,,,,,,,,,,,,,,71nigk_RAj4-654744c20137d7137f92fba85835ba24.webm +1768,xW3EJVPEhu4-aec346310754d5e0fec4076df361e96c.webm,xW3EJVPEhu4-aec346310754d5e0fec4076df361e96c.webm,,,,,,,,,,,,,,,,xW3EJVPEhu4-aec346310754d5e0fec4076df361e96c.webm +1769,Tj7QkEyCiiw-74c402f83fce1a38383316d6982c6267.webm,Tj7QkEyCiiw-74c402f83fce1a38383316d6982c6267.webm,,,,,,,,,,,,,,,,Tj7QkEyCiiw-74c402f83fce1a38383316d6982c6267.webm +1770,oA46KHf8oww-44eba206366be167dd2f32c530fd63fa.mp4,oA46KHf8oww-44eba206366be167dd2f32c530fd63fa.mp4,,,,,,,,,,,,,,,,oA46KHf8oww-44eba206366be167dd2f32c530fd63fa.mp4 +1771,BWJN-z3uDtQ-260788808015a125d7308cb8f38651c5.mp4,BWJN-z3uDtQ-260788808015a125d7308cb8f38651c5.mp4,,,,,,,,,,,,,,,,BWJN-z3uDtQ-260788808015a125d7308cb8f38651c5.mp4 +1772,vi-kTk1oXPk-e33f42003b5160647ad610d08eb2c278.webm,vi-kTk1oXPk-e33f42003b5160647ad610d08eb2c278.webm,,,,,,,,,,,,,,,,vi-kTk1oXPk-e33f42003b5160647ad610d08eb2c278.webm +1773,2zO_paLHlSs-dda0755c1d66d2e5fb4e5acc64ef0b93.mp4,2zO_paLHlSs-dda0755c1d66d2e5fb4e5acc64ef0b93.mp4,,,,,,,,,,,,,,,,2zO_paLHlSs-dda0755c1d66d2e5fb4e5acc64ef0b93.mp4 +1774,0P5vhdiu97A-a5567332a3237fdd6aca448537dd109c.mp4,0P5vhdiu97A-a5567332a3237fdd6aca448537dd109c.mp4,,,,,,,,,,,,,,,,0P5vhdiu97A-a5567332a3237fdd6aca448537dd109c.mp4 +1776,w_4muCmD7bM-12fe6e7f1124963079a7c8c207a34ffe.webm,w_4muCmD7bM-12fe6e7f1124963079a7c8c207a34ffe.webm,,,,,,,,,,,,,,,,w_4muCmD7bM-12fe6e7f1124963079a7c8c207a34ffe.webm +1777,iOM3VDfgvMs-7387723c778db59e2cb76a2c5c8f38dc.mp4,iOM3VDfgvMs-7387723c778db59e2cb76a2c5c8f38dc.mp4,,,,,,,,,,,,,,,,iOM3VDfgvMs-7387723c778db59e2cb76a2c5c8f38dc.mp4 +1778,LlhsCZDYUCY-2872246aa999af69871c3af1458bf96f.webm,LlhsCZDYUCY-2872246aa999af69871c3af1458bf96f.webm,,,,,,,,,,,,,,,,LlhsCZDYUCY-2872246aa999af69871c3af1458bf96f.webm +1779,JakGf75_ric-4eab403680256f8bc552ab44b3721446.webm,JakGf75_ric-4eab403680256f8bc552ab44b3721446.webm,,,,,,,,,,,,,,,,JakGf75_ric-4eab403680256f8bc552ab44b3721446.webm +1781,i-YcLVHtgAI-e7ebe78883f219cce35a28bb0108dd19.webm,i-YcLVHtgAI-e7ebe78883f219cce35a28bb0108dd19.webm,,,,,,,,,,,,,,,,i-YcLVHtgAI-e7ebe78883f219cce35a28bb0108dd19.webm +1782,FbNln5q8JTQ-5b411a1b619e501840c3159aa50f5e4f.webm,FbNln5q8JTQ-5b411a1b619e501840c3159aa50f5e4f.webm,,,,,,,,,,,,,,,,FbNln5q8JTQ-5b411a1b619e501840c3159aa50f5e4f.webm +1783,3oYWhauQ4fY-a7bc5c0789df4f5bfbccf443d0ae936e.webm,3oYWhauQ4fY-a7bc5c0789df4f5bfbccf443d0ae936e.webm,,,,,,,,,,,,,,,,3oYWhauQ4fY-a7bc5c0789df4f5bfbccf443d0ae936e.webm +0,/datadrive/videos/BVx0nR366sk-3b0933b1902d9a66730d447258c425ec.webm,16560611413745a1b33748cad5cdb726.webm,0.0,,32k,0.42,,,-0.09,,,False,True,-0.09,BVx0nR366sk-3b0933b1902d9a66730d447258c425ec,webm,BVx0nR366sk-3b0933b1902d9a66730d447258c425ec.webm,BVx0nR366sk-3b0933b1902d9a66730d447258c425ec.webm +1,/datadrive/videos/6Y1uTg7wCV8-b068dba553b7529eb2c2c4727c47fed9.webm,4fe31156621142de9be93e3c6a4a8bd9.webm,1.0,,64k,0.24,,,-0.05,logos/jazeera.png,6.0,False,True,,6Y1uTg7wCV8-b068dba553b7529eb2c2c4727c47fed9,webm,6Y1uTg7wCV8-b068dba553b7529eb2c2c4727c47fed9.webm,6Y1uTg7wCV8-b068dba553b7529eb2c2c4727c47fed9.webm +2,/datadrive/videos/VuW-M9TB7tM-73472a9187f950d4812582d25154f1d4.mp4,49f397b693eb41a9b7c8a95b0147c6a0.mp4,2.0,False,,,,,-0.12,logos/fox.png,2.0,False,False,,VuW-M9TB7tM-73472a9187f950d4812582d25154f1d4,mp4,VuW-M9TB7tM-73472a9187f950d4812582d25154f1d4.mp4,VuW-M9TB7tM-73472a9187f950d4812582d25154f1d4.mp4 +4,/datadrive/videos/6QWIAsPOlxM-907ba6ac2932e487c215c9b364d06e14.webm,7611fe4baab94392a82f5a8a28bdeba2.webm,4.0,,,,[0.04 0.03],,-0.19,logos/sbt.gif,3.0,False,False,0.31,6QWIAsPOlxM-907ba6ac2932e487c215c9b364d06e14,webm,6QWIAsPOlxM-907ba6ac2932e487c215c9b364d06e14.webm,6QWIAsPOlxM-907ba6ac2932e487c215c9b364d06e14.webm +5,/datadrive/videos/gos1y5l9Pg0-d2f83335d34170054f7a1123314bc334.mp4,b1fc155f185343d2a8ca8a5b9b240063.mp4,5.0,True,,,,,-0.2,,,False,False,0.31,gos1y5l9Pg0-d2f83335d34170054f7a1123314bc334,mp4,gos1y5l9Pg0-d2f83335d34170054f7a1123314bc334.mp4,gos1y5l9Pg0-d2f83335d34170054f7a1123314bc334.mp4 +6,/datadrive/videos/YVuM6V3pS24-9b12c4bfede9e409787590f7b22b05ff.webm,d69d451b4407418d8a9d1fac30b26e48.webm,6.0,False,16k,,[0.19 0.16],,-0.2,logos/download.png,,False,True,0.15,YVuM6V3pS24-9b12c4bfede9e409787590f7b22b05ff,webm,YVuM6V3pS24-9b12c4bfede9e409787590f7b22b05ff.webm,YVuM6V3pS24-9b12c4bfede9e409787590f7b22b05ff.webm +9,/datadrive/videos/4OoRvCjO_fU-fda344f4c72f913a22889973392f6abc.webm,c00dbd85ae9a4ca2bbb5e24ba647c817.webm,9.0,,16k,,[0.12 0.05],,-0.17,logos/new.gif,9.0,False,False,,4OoRvCjO_fU-fda344f4c72f913a22889973392f6abc,webm,4OoRvCjO_fU-fda344f4c72f913a22889973392f6abc.webm,4OoRvCjO_fU-fda344f4c72f913a22889973392f6abc.webm +10,/datadrive/videos/79-586Bv_Gs-0f14963b8bb5999312c0e19435956c06.webm,2f958a2b9bee4ae4aef2af60c479a107.mp4,10.0,False,64k,0.96,[0.19 0. ],mp4,-0.05,logos/new.gif,0.0,False,True,-0.05,79-586Bv_Gs-0f14963b8bb5999312c0e19435956c06,webm,79-586Bv_Gs-0f14963b8bb5999312c0e19435956c06.webm,79-586Bv_Gs-0f14963b8bb5999312c0e19435956c06.webm +11,/datadrive/videos/BB1fQD6vtME-b6cafaaca45e3c71dee4a20a78ef68be.webm,50b4259a80ab4d1d83126cf0af113976.mp4,11.0,False,64k,,,mp4,-0.06,,8.0,False,True,0.1,BB1fQD6vtME-b6cafaaca45e3c71dee4a20a78ef68be,webm,BB1fQD6vtME-b6cafaaca45e3c71dee4a20a78ef68be.webm,BB1fQD6vtME-b6cafaaca45e3c71dee4a20a78ef68be.webm +12,/datadrive/videos/aBf1PVsBusQ-15c9009d45c3aa3e35ab8c3ab68d59c6.webm,5628fecca0bc4c9bb9771b3e80a14c2d.ogv,12.0,False,,0.89,[0.17 0.19],ogv,0.0,logos/msnbc.png,0.0,False,True,,aBf1PVsBusQ-15c9009d45c3aa3e35ab8c3ab68d59c6,webm,aBf1PVsBusQ-15c9009d45c3aa3e35ab8c3ab68d59c6.webm,aBf1PVsBusQ-15c9009d45c3aa3e35ab8c3ab68d59c6.webm +14,/datadrive/videos/RC-75r1V3l8-b42f998425e0bcca0a6b197073b259ef.mp4,b34049635c1a4d48b82ce207ee91f278.mp4,14.0,False,,0.5,,,-0.08,logos/new.gif,4.0,False,True,,RC-75r1V3l8-b42f998425e0bcca0a6b197073b259ef,mp4,RC-75r1V3l8-b42f998425e0bcca0a6b197073b259ef.mp4,RC-75r1V3l8-b42f998425e0bcca0a6b197073b259ef.mp4 +15,/datadrive/videos/zFv6O1xC6RY-1918e98ac11785d54db182b81100b769.webm,a11628ee20624105aff3e300e198bb31.mp4,15.0,True,,0.28,[0.08 0.05],mp4,,,1.0,False,False,-0.12,zFv6O1xC6RY-1918e98ac11785d54db182b81100b769,webm,zFv6O1xC6RY-1918e98ac11785d54db182b81100b769.webm,zFv6O1xC6RY-1918e98ac11785d54db182b81100b769.webm +16,/datadrive/videos/hpKj53L67j0-0bc9136a88f7d0edb57c522c57296dcf.mp4,ca15473362894d658831f33cf1b95226.mp4,16.0,True,128k,0.98,[0.17 0.17],,0.0,,,False,True,,hpKj53L67j0-0bc9136a88f7d0edb57c522c57296dcf,mp4,hpKj53L67j0-0bc9136a88f7d0edb57c522c57296dcf.mp4,hpKj53L67j0-0bc9136a88f7d0edb57c522c57296dcf.mp4 +17,/datadrive/videos/6NAieugO350-b950e4448641b3aef6c48bb9ac2ddb10.webm,0442534af711420c92af42a10da0a222.webm,17.0,,,,[0.1 0.02],webm,0.05,logos/openair.gif,,False,False,,6NAieugO350-b950e4448641b3aef6c48bb9ac2ddb10,webm,6NAieugO350-b950e4448641b3aef6c48bb9ac2ddb10.webm,6NAieugO350-b950e4448641b3aef6c48bb9ac2ddb10.webm +18,/datadrive/videos/jH8KXGEW7kw-51d848ea68eb3877c963e38908c0093e.mp4,0e57cd65cae44889ba079ef92c00fdfd.mp4,18.0,True,64k,,,,,,,False,True,-0.32,jH8KXGEW7kw-51d848ea68eb3877c963e38908c0093e,mp4,jH8KXGEW7kw-51d848ea68eb3877c963e38908c0093e.mp4,jH8KXGEW7kw-51d848ea68eb3877c963e38908c0093e.mp4 +19,/datadrive/videos/AgMNzWiOERs-31d7ad44766e44a5a4335e91298a2f01.webm,46ff0c2b6f114f16a4e3c7428d249605.webm,19.0,,,,,,-0.19,logos/sbt.gif,1.0,False,False,-0.04,AgMNzWiOERs-31d7ad44766e44a5a4335e91298a2f01,webm,AgMNzWiOERs-31d7ad44766e44a5a4335e91298a2f01.webm,AgMNzWiOERs-31d7ad44766e44a5a4335e91298a2f01.webm +20,/datadrive/videos/Y3n2AN8V6zY-90b83e926a61c6494cfdda9efb9809a5.mp4,cca6908af33543e088b965e153d33e49.mp4,20.0,False,,,[0.1 0.14],,,logos/jazeera.png,,False,True,0.26,Y3n2AN8V6zY-90b83e926a61c6494cfdda9efb9809a5,mp4,Y3n2AN8V6zY-90b83e926a61c6494cfdda9efb9809a5.mp4,Y3n2AN8V6zY-90b83e926a61c6494cfdda9efb9809a5.mp4 +21,/datadrive/videos/CP8RCkPoL0I-ecd66acdce79e874bd9b889999707ee4.webm,d0796c4cec354e11a0d4c9ef446b2b52.mp4,21.0,,16k,0.98,,mp4,,,,False,False,,CP8RCkPoL0I-ecd66acdce79e874bd9b889999707ee4,webm,CP8RCkPoL0I-ecd66acdce79e874bd9b889999707ee4.webm,CP8RCkPoL0I-ecd66acdce79e874bd9b889999707ee4.webm +22,/datadrive/videos/kEyjVajfo_U-3945a414d1494e5d6de0bb5850fd90f7.mp4,30f475dff71a4f428fb976f328a7f9bb.mp4,22.0,False,,,[0.18 0.03],,0.18,logos/download.png,9.0,False,True,-0.31,kEyjVajfo_U-3945a414d1494e5d6de0bb5850fd90f7,mp4,kEyjVajfo_U-3945a414d1494e5d6de0bb5850fd90f7.mp4,kEyjVajfo_U-3945a414d1494e5d6de0bb5850fd90f7.mp4 +24,/datadrive/videos/IgyjoEgMuPA-784bc730ced19fb7d4b54284b6a6d747.mp4,a4136ad40498459186660833e0c344a8.mp4,24.0,False,,0.71,[0.03 0.03],,-0.13,logos/download.png,0.0,False,False,,IgyjoEgMuPA-784bc730ced19fb7d4b54284b6a6d747,mp4,IgyjoEgMuPA-784bc730ced19fb7d4b54284b6a6d747.mp4,IgyjoEgMuPA-784bc730ced19fb7d4b54284b6a6d747.mp4 +25,/datadrive/videos/NrwFznxqH_M-6aa02c3aaff875c79795958e8d622e2a.webm,915b52cf20bb4c51804310ae4b3ecb06.webm,25.0,False,,,,,,logos/jazeera.png,,False,False,,NrwFznxqH_M-6aa02c3aaff875c79795958e8d622e2a,webm,NrwFznxqH_M-6aa02c3aaff875c79795958e8d622e2a.webm,NrwFznxqH_M-6aa02c3aaff875c79795958e8d622e2a.webm +27,/datadrive/videos/TvISk3jLDt8-8273230bfd8e4772b1801062c59e87c5.mp4,a553714a04f543df9f0c1ad15dde77ca.mp4,27.0,False,,,[0.06 0.03],,0.09,logos/another.gif,1.0,False,False,,TvISk3jLDt8-8273230bfd8e4772b1801062c59e87c5,mp4,TvISk3jLDt8-8273230bfd8e4772b1801062c59e87c5.mp4,TvISk3jLDt8-8273230bfd8e4772b1801062c59e87c5.mp4 +28,/datadrive/videos/9QdRw2gB-NE-aefc57fb5e3062cae717ea18f510736f.webm,d3556112c5104c0097aa221e8851bb59.webm,28.0,True,,,,,-0.06,logos/download.png,,False,True,,9QdRw2gB-NE-aefc57fb5e3062cae717ea18f510736f,webm,9QdRw2gB-NE-aefc57fb5e3062cae717ea18f510736f.webm,9QdRw2gB-NE-aefc57fb5e3062cae717ea18f510736f.webm +29,/datadrive/videos/kabNdo05sNw-0898375837dac959ab9c943a53b1f41e.mp4,72dc3f2c39fb40929b3d752a89343962.webm,29.0,True,16k,,[0. 0.02],webm,-0.16,logos/another.gif,,False,True,0.04,kabNdo05sNw-0898375837dac959ab9c943a53b1f41e,mp4,kabNdo05sNw-0898375837dac959ab9c943a53b1f41e.mp4,kabNdo05sNw-0898375837dac959ab9c943a53b1f41e.mp4 +31,/datadrive/videos/JqiBdeU00a0-c158ed13a14287d8ca2c5b2328514823.webm,6b2ed62d750f4029ad1f520bc3a70368.ogv,31.0,True,,,,ogv,,logos/sbt.gif,4.0,False,True,,JqiBdeU00a0-c158ed13a14287d8ca2c5b2328514823,webm,JqiBdeU00a0-c158ed13a14287d8ca2c5b2328514823.webm,JqiBdeU00a0-c158ed13a14287d8ca2c5b2328514823.webm +32,/datadrive/videos/yWuwpSiOcsk-110fec2335332386e79b3511311ac218.webm,9d34be7e69a94353b7d9f25ec9e7b75e.webm,32.0,False,16k,0.9,,,,,8.0,False,True,,yWuwpSiOcsk-110fec2335332386e79b3511311ac218,webm,yWuwpSiOcsk-110fec2335332386e79b3511311ac218.webm,yWuwpSiOcsk-110fec2335332386e79b3511311ac218.webm +33,/datadrive/videos/nHCQbD7zQS8-5442cff41ff9f65aaecd45d9080ae75c.webm,fe2f7d5e259040258d26d1abf3b0ed03.webm,33.0,,64k,,,,,logos/new.gif,,False,True,-0.09,nHCQbD7zQS8-5442cff41ff9f65aaecd45d9080ae75c,webm,nHCQbD7zQS8-5442cff41ff9f65aaecd45d9080ae75c.webm,nHCQbD7zQS8-5442cff41ff9f65aaecd45d9080ae75c.webm +34,/datadrive/videos/mPSd2xlUt9Y-0c8872954f1974310408272224631fcb.webm,861079915f934993810b010054f43629.mp4,34.0,True,16k,0.57,[0.14 0.08],mp4,,,,False,True,0.26,mPSd2xlUt9Y-0c8872954f1974310408272224631fcb,webm,mPSd2xlUt9Y-0c8872954f1974310408272224631fcb.webm,mPSd2xlUt9Y-0c8872954f1974310408272224631fcb.webm +35,/datadrive/videos/epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124.mp4,80560ea1b1594357a55452d553e55846.mp4,35.0,,128k,0.55,,,,,,False,False,0.06,epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124,mp4,epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124.mp4,epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124.mp4 +36,/datadrive/videos/xQmDuA5e4zc-acc98b37097e45d63237db8fd09fda49.webm,455d7b35eed548fe9f3d71245d3e9b47.mp4,36.0,False,,,[0.09 0.02],mp4,,logos/openair.gif,7.0,False,False,-0.16,xQmDuA5e4zc-acc98b37097e45d63237db8fd09fda49,webm,xQmDuA5e4zc-acc98b37097e45d63237db8fd09fda49.webm,xQmDuA5e4zc-acc98b37097e45d63237db8fd09fda49.webm +37,/datadrive/videos/ljVi8Xualjc-5e62399eef9f0c36654dd93137865688.webm,1892db9557e443fea862222330dc90b6.mp4,37.0,,,,,mp4,,,9.0,False,True,,ljVi8Xualjc-5e62399eef9f0c36654dd93137865688,webm,ljVi8Xualjc-5e62399eef9f0c36654dd93137865688.webm,ljVi8Xualjc-5e62399eef9f0c36654dd93137865688.webm +38,/datadrive/videos/JY0uGmxd5Vg-bb8da3117fbe3359f90733821298189a.webm,1eadeff15c40459b85a85ea93bd1ff33.webm,38.0,,128k,0.24,,,,logos/sbt.gif,3.0,False,False,,JY0uGmxd5Vg-bb8da3117fbe3359f90733821298189a,webm,JY0uGmxd5Vg-bb8da3117fbe3359f90733821298189a.webm,JY0uGmxd5Vg-bb8da3117fbe3359f90733821298189a.webm +39,/datadrive/videos/TnipjVf-gqA-0953772f6c5d43e7a3ee08b649a18aa9.webm,62974afae3414e60bcdaf2d2aa11e67a.webm,39.0,False,,,[0.09 0.08],,-0.04,,,True,True,-0.33,TnipjVf-gqA-0953772f6c5d43e7a3ee08b649a18aa9,webm,TnipjVf-gqA-0953772f6c5d43e7a3ee08b649a18aa9.webm,TnipjVf-gqA-0953772f6c5d43e7a3ee08b649a18aa9.webm +40,/datadrive/videos/xGVViVl5PKc-050c45c48f18e77d7227339a815852ca.webm,9a1948d1194d4eba9482d30b1acd70a3.ogv,40.0,,,,,ogv,,,6.0,False,True,-0.29,xGVViVl5PKc-050c45c48f18e77d7227339a815852ca,webm,xGVViVl5PKc-050c45c48f18e77d7227339a815852ca.webm,xGVViVl5PKc-050c45c48f18e77d7227339a815852ca.webm +41,/datadrive/videos/46nmbU7ILdU-7977fab64a0c357dd9eceeaa7acc4991.webm,c1c2ac4da95f4b089972f1e5f4fa9feb.webm,41.0,,,0.63,[0.01 0.15],webm,0.12,,,False,False,,46nmbU7ILdU-7977fab64a0c357dd9eceeaa7acc4991,webm,46nmbU7ILdU-7977fab64a0c357dd9eceeaa7acc4991.webm,46nmbU7ILdU-7977fab64a0c357dd9eceeaa7acc4991.webm +42,/datadrive/videos/Mfj3Iw0DWZ8-001069fa38b10a6228190cab1f36ff8a.webm,1731c7d86fd84e98b33b41fe397c87c2.mp4,42.0,,16k,0.93,[0.17 0.17],mp4,,,8.0,False,True,,Mfj3Iw0DWZ8-001069fa38b10a6228190cab1f36ff8a,webm,Mfj3Iw0DWZ8-001069fa38b10a6228190cab1f36ff8a.webm,Mfj3Iw0DWZ8-001069fa38b10a6228190cab1f36ff8a.webm +43,/datadrive/videos/Tadn0HfkB98-f2243504564f3c1aff652c03882e80a5.mp4,1a47f2d52b6a422a87ee166e18d5363e.mp4,43.0,,,,,,,,0.0,False,True,0.23,Tadn0HfkB98-f2243504564f3c1aff652c03882e80a5,mp4,Tadn0HfkB98-f2243504564f3c1aff652c03882e80a5.mp4,Tadn0HfkB98-f2243504564f3c1aff652c03882e80a5.mp4 +44,/datadrive/videos/S6pQ0KuAWlU-41478f43f994aadcfe57411afe178344.webm,5f6aad4f3a954688bdc8f9471c41da64.webm,44.0,,,0.32,,webm,0.14,,,False,True,,S6pQ0KuAWlU-41478f43f994aadcfe57411afe178344,webm,S6pQ0KuAWlU-41478f43f994aadcfe57411afe178344.webm,S6pQ0KuAWlU-41478f43f994aadcfe57411afe178344.webm +45,/datadrive/videos/Bc0YmTj5OQ8-512e1ec815e0a0cd4d072c611beb85cd.mp4,59f6582284e5497b8846ac3786488bb8.mp4,45.0,,128k,,[0.02 0.03],,,logos/openair.gif,,False,True,0.11,Bc0YmTj5OQ8-512e1ec815e0a0cd4d072c611beb85cd,mp4,Bc0YmTj5OQ8-512e1ec815e0a0cd4d072c611beb85cd.mp4,Bc0YmTj5OQ8-512e1ec815e0a0cd4d072c611beb85cd.mp4 +46,/datadrive/videos/dxQHmjz-654-7cfeaccb0934a09f48def48cfd8c74ce.mp4,7da60f755b88466392892dcf78c0ae20.mp4,46.0,,128k,,,,-0.14,logos/new.gif,,False,True,,dxQHmjz-654-7cfeaccb0934a09f48def48cfd8c74ce,mp4,dxQHmjz-654-7cfeaccb0934a09f48def48cfd8c74ce.mp4,dxQHmjz-654-7cfeaccb0934a09f48def48cfd8c74ce.mp4 +47,/datadrive/videos/vut4yhQo4b8-e33055648f45b1fcbfb8904552752a56.webm,87b81bdf3b824188b6395d939bad04f3.webm,47.0,False,,0.25,,,0.11,,3.0,False,True,0.31,vut4yhQo4b8-e33055648f45b1fcbfb8904552752a56,webm,vut4yhQo4b8-e33055648f45b1fcbfb8904552752a56.webm,vut4yhQo4b8-e33055648f45b1fcbfb8904552752a56.webm +48,/datadrive/videos/T2XxvOQdyyA-35da0867bfa3f94ec1ad478919789aef.webm,b772d19f874644d0a565f0f7a131f05c.webm,48.0,False,128k,,[0.03 0. ],,,,7.0,False,False,,T2XxvOQdyyA-35da0867bfa3f94ec1ad478919789aef,webm,T2XxvOQdyyA-35da0867bfa3f94ec1ad478919789aef.webm,T2XxvOQdyyA-35da0867bfa3f94ec1ad478919789aef.webm +49,/datadrive/videos/_i9dTl3Wsfg-c1105f51a032eb9ec895ed4209acbde7.webm,314c164c34034403a71886b806d60591.mp4,49.0,,32k,0.44,[0.15 0.02],mp4,-0.2,,1.0,False,True,,_i9dTl3Wsfg-c1105f51a032eb9ec895ed4209acbde7,webm,_i9dTl3Wsfg-c1105f51a032eb9ec895ed4209acbde7.webm,_i9dTl3Wsfg-c1105f51a032eb9ec895ed4209acbde7.webm +50,/datadrive/videos/7EUGWxaAYb0-9ae9322b0f3446e8688f9025fc4b3e2a.webm,6bc75cbdacf64eff87c9c1d7190425c7.webm,50.0,True,16k,0.3,[0.07 0.1 ],,-0.17,logos/another.gif,7.0,True,True,0.01,7EUGWxaAYb0-9ae9322b0f3446e8688f9025fc4b3e2a,webm,7EUGWxaAYb0-9ae9322b0f3446e8688f9025fc4b3e2a.webm,7EUGWxaAYb0-9ae9322b0f3446e8688f9025fc4b3e2a.webm +51,/datadrive/videos/VuW-M9TB7tM-73472a9187f950d4812582d25154f1d4.mp4,3ea3e8f71cd74930a08f7b6e5c79f28e.ogv,51.0,,,,,ogv,,logos/fox.png,,False,True,,VuW-M9TB7tM-73472a9187f950d4812582d25154f1d4,mp4,VuW-M9TB7tM-73472a9187f950d4812582d25154f1d4.mp4,VuW-M9TB7tM-73472a9187f950d4812582d25154f1d4.mp4 +52,/datadrive/videos/iarTmYN_cFw-cbec9d312f1eda1d3305c0f48de927ad.mp4,9d31af7ba1a84b1a847728854b563f48.mp4,52.0,False,,0.84,[0.07 0.11],mp4,,,,False,True,-0.3,iarTmYN_cFw-cbec9d312f1eda1d3305c0f48de927ad,mp4,iarTmYN_cFw-cbec9d312f1eda1d3305c0f48de927ad.mp4,iarTmYN_cFw-cbec9d312f1eda1d3305c0f48de927ad.mp4 +53,/datadrive/videos/j2BgyavFvss-7dfaec88cfe899afba8474d397567e00.webm,9b223626726c4e8db8d9fe683cb64c20.webm,53.0,True,,0.29,[0.19 0.19],webm,,,,True,False,-0.03,j2BgyavFvss-7dfaec88cfe899afba8474d397567e00,webm,j2BgyavFvss-7dfaec88cfe899afba8474d397567e00.webm,j2BgyavFvss-7dfaec88cfe899afba8474d397567e00.webm +54,/datadrive/videos/4866G5vJpu4-102443320869c1cc51a5b229bde9ccab.mp4,bf2bbfd528e645b19c991f4379e18639.mp4,54.0,,16k,,,,-0.09,,9.0,False,False,-0.34,4866G5vJpu4-102443320869c1cc51a5b229bde9ccab,mp4,4866G5vJpu4-102443320869c1cc51a5b229bde9ccab.mp4,4866G5vJpu4-102443320869c1cc51a5b229bde9ccab.mp4 +56,/datadrive/videos/0ujYGP2VlzM-145297f8902c13aafd0829de8a59650a.webm,498d7c2619e9411c94f180101ca2ed48.webm,56.0,False,128k,0.69,[0.09 0.05],,,,2.0,True,False,,0ujYGP2VlzM-145297f8902c13aafd0829de8a59650a,webm,0ujYGP2VlzM-145297f8902c13aafd0829de8a59650a.webm,0ujYGP2VlzM-145297f8902c13aafd0829de8a59650a.webm +57,/datadrive/videos/TBoKUTYWLws-070ffb0e9d0a26dc43d50f7abc596d5d.mp4,a1930b845b1d4a9a8834e7df0e2500f6.mp4,57.0,,16k,0.36,,,-0.18,,,False,False,,TBoKUTYWLws-070ffb0e9d0a26dc43d50f7abc596d5d,mp4,TBoKUTYWLws-070ffb0e9d0a26dc43d50f7abc596d5d.mp4,TBoKUTYWLws-070ffb0e9d0a26dc43d50f7abc596d5d.mp4 +58,/datadrive/videos/zuFKJnfK_wI-2e8f143573a68267e2963f507c285ad8.webm,67c1919cb98a4eb49075241aa1b5743c.webm,58.0,False,,,[0.03 0.05],,,logos/download.png,,False,True,0.22,zuFKJnfK_wI-2e8f143573a68267e2963f507c285ad8,webm,zuFKJnfK_wI-2e8f143573a68267e2963f507c285ad8.webm,zuFKJnfK_wI-2e8f143573a68267e2963f507c285ad8.webm +59,/datadrive/videos/58bdCW1mLro-802a0899b24bf89b4a005996315c09fc.webm,184bff46d57f4346bca37dd9721b72a5.mp4,59.0,True,32k,0.31,,mp4,,,5.0,False,True,0.15,58bdCW1mLro-802a0899b24bf89b4a005996315c09fc,webm,58bdCW1mLro-802a0899b24bf89b4a005996315c09fc.webm,58bdCW1mLro-802a0899b24bf89b4a005996315c09fc.webm +60,/datadrive/videos/pAtgYq_oZuc-9263903a20566ec6054d2a75a3af91bf.mp4,49fbb4a3fc254702974717b464b80173.ogv,60.0,False,,,[0.18 0. ],ogv,0.08,logos/another.gif,2.0,False,True,-0.19,pAtgYq_oZuc-9263903a20566ec6054d2a75a3af91bf,mp4,pAtgYq_oZuc-9263903a20566ec6054d2a75a3af91bf.mp4,pAtgYq_oZuc-9263903a20566ec6054d2a75a3af91bf.mp4 +61,/datadrive/videos/L8ULFBBKzKw-5495e36c120c45477a88f099803f9522.webm,115490352b154a97996ef243aaaea584.webm,61.0,,,,,webm,,,9.0,False,True,,L8ULFBBKzKw-5495e36c120c45477a88f099803f9522,webm,L8ULFBBKzKw-5495e36c120c45477a88f099803f9522.webm,L8ULFBBKzKw-5495e36c120c45477a88f099803f9522.webm +62,/datadrive/videos/ZzBWJM43zEE-4c32695067169ca920d726f36f6169d2.webm,b3725180c18c43f0bd99ffb03b2d2775.ogv,62.0,False,32k,0.98,[0.06 0.15],ogv,,logos/download.png,7.0,False,True,,ZzBWJM43zEE-4c32695067169ca920d726f36f6169d2,webm,ZzBWJM43zEE-4c32695067169ca920d726f36f6169d2.webm,ZzBWJM43zEE-4c32695067169ca920d726f36f6169d2.webm +64,/datadrive/videos/uexCWmLsCo0-b90624e7caf66928a0987e872cdb81a6.mp4,39f86cbd612547e7b2c992ed76c1a1a8.mp4,64.0,,,0.56,[0.19 0.08],,,,2.37,False,True,,uexCWmLsCo0-b90624e7caf66928a0987e872cdb81a6,mp4,uexCWmLsCo0-b90624e7caf66928a0987e872cdb81a6.mp4,uexCWmLsCo0-b90624e7caf66928a0987e872cdb81a6.mp4 +65,/datadrive/videos/cK45K5jojaI-a04c7caa0d6937b296d64fa794377fe2.mp4,8d868eaf47884976975f8b0debe03605.mp4,65.0,False,32k,,,,,,,False,False,-0.1,cK45K5jojaI-a04c7caa0d6937b296d64fa794377fe2,mp4,cK45K5jojaI-a04c7caa0d6937b296d64fa794377fe2.mp4,cK45K5jojaI-a04c7caa0d6937b296d64fa794377fe2.mp4 +66,/datadrive/videos/96YibY7epJs-b6fe01be35f9bdd63a715a878f846284.mp4,b9a21b8697ca4640bc6d79d42c122116.mp4,66.0,,,,[0.02 0.19],,0.17,logos/openair.gif,,False,False,0.01,96YibY7epJs-b6fe01be35f9bdd63a715a878f846284,mp4,96YibY7epJs-b6fe01be35f9bdd63a715a878f846284.mp4,96YibY7epJs-b6fe01be35f9bdd63a715a878f846284.mp4 +67,/datadrive/videos/BBnf2pl_tf8-302b0f8a2a7fa4c661e6e96e85ac19d6.webm,908edd8da0e8404aa5f5a94b80880e8e.webm,67.0,,32k,,,,-0.04,,8.0,False,True,,BBnf2pl_tf8-302b0f8a2a7fa4c661e6e96e85ac19d6,webm,BBnf2pl_tf8-302b0f8a2a7fa4c661e6e96e85ac19d6.webm,BBnf2pl_tf8-302b0f8a2a7fa4c661e6e96e85ac19d6.webm +68,/datadrive/videos/FPeKK6AU6BM-0332ad7ffcf384368c777ae72c9c9e3f.mp4,623342ccc1d444a4ae4c36af873aff45.webm,68.0,False,64k,,[0.08 0.09],webm,,,,False,False,-0.33,FPeKK6AU6BM-0332ad7ffcf384368c777ae72c9c9e3f,mp4,FPeKK6AU6BM-0332ad7ffcf384368c777ae72c9c9e3f.mp4,FPeKK6AU6BM-0332ad7ffcf384368c777ae72c9c9e3f.mp4 +69,/datadrive/videos/W8MRz28T_9c-689a6c7356db01ee53695c1097b10ee8.mp4,43f998b6c9604bcaa62cc01078d115fc.webm,69.0,,64k,0.47,,webm,0.07,logos/sbt.gif,8.0,False,False,-0.17,W8MRz28T_9c-689a6c7356db01ee53695c1097b10ee8,mp4,W8MRz28T_9c-689a6c7356db01ee53695c1097b10ee8.mp4,W8MRz28T_9c-689a6c7356db01ee53695c1097b10ee8.mp4 +71,/datadrive/videos/6t76mgCLc8A-68165bb3a61f207415c1e6aebfcff673.mp4,2c4d4ac0f3ba4d3bbaae201c2e83fef5.mp4,71.0,,32k,,[0.18 0.1 ],mp4,,logos/another.gif,,False,False,,6t76mgCLc8A-68165bb3a61f207415c1e6aebfcff673,mp4,6t76mgCLc8A-68165bb3a61f207415c1e6aebfcff673.mp4,6t76mgCLc8A-68165bb3a61f207415c1e6aebfcff673.mp4 +72,/datadrive/videos/iOM3VDfgvMs-7387723c778db59e2cb76a2c5c8f38dc.mp4,fd8c70b1433a477cbe012ad93469faaf.ogv,72.0,,16k,,,ogv,,logos/openair.gif,,False,False,,iOM3VDfgvMs-7387723c778db59e2cb76a2c5c8f38dc,mp4,iOM3VDfgvMs-7387723c778db59e2cb76a2c5c8f38dc.mp4,iOM3VDfgvMs-7387723c778db59e2cb76a2c5c8f38dc.mp4 +73,/datadrive/videos/9eMeb5dvY-U-4ac3eee6141f5d57966534046b70fbaa.webm,c77a9b2523b94014bf8847e0b9f4a672.webm,73.0,True,64k,,,,,,4.0,False,True,0.03,9eMeb5dvY-U-4ac3eee6141f5d57966534046b70fbaa,webm,9eMeb5dvY-U-4ac3eee6141f5d57966534046b70fbaa.webm,9eMeb5dvY-U-4ac3eee6141f5d57966534046b70fbaa.webm +74,/datadrive/videos/AXSkJqJqtu4-94b35398f2be0742586841997340e1d7.webm,786b0dee4be74648b50cade4fabea669.webm,74.0,,,,,,,logos/jazeera.png,,False,True,0.14,AXSkJqJqtu4-94b35398f2be0742586841997340e1d7,webm,AXSkJqJqtu4-94b35398f2be0742586841997340e1d7.webm,AXSkJqJqtu4-94b35398f2be0742586841997340e1d7.webm +75,/datadrive/videos/bBXrAl_Bebg-b30ab8cc7ccfc3fac664aea957cc14dd.mp4,331a3f8c4df74524afaac8a7e7aa908a.mp4,75.0,,,,[0.07 0.1 ],,-0.03,,,False,False,,bBXrAl_Bebg-b30ab8cc7ccfc3fac664aea957cc14dd,mp4,bBXrAl_Bebg-b30ab8cc7ccfc3fac664aea957cc14dd.mp4,bBXrAl_Bebg-b30ab8cc7ccfc3fac664aea957cc14dd.mp4 +76,/datadrive/videos/pelQ2We2BTM-a2f5381cec84bbcabf867fc62719d7f2.webm,4ba531dccc16473686ff4355364bce06.webm,76.0,,,,[0.16 0.1 ],webm,0.03,,,False,False,,pelQ2We2BTM-a2f5381cec84bbcabf867fc62719d7f2,webm,pelQ2We2BTM-a2f5381cec84bbcabf867fc62719d7f2.webm,pelQ2We2BTM-a2f5381cec84bbcabf867fc62719d7f2.webm +77,/datadrive/videos/s3m3kPRyVGM-510f58a179aa2178f401506777149681.mp4,af3499823a764d2f8e7eb59fd773f0c3.mp4,77.0,,,0.94,,,,,5.0,False,True,,s3m3kPRyVGM-510f58a179aa2178f401506777149681,mp4,s3m3kPRyVGM-510f58a179aa2178f401506777149681.mp4,s3m3kPRyVGM-510f58a179aa2178f401506777149681.mp4 +78,/datadrive/videos/5mcskKQTJCA-9ed2cf43f511e21d81fa4205c9a7fa42.mp4,8c7981381523452aa19cbf9c102d0429.mp4,78.0,,,,,,,logos/jazeera.png,6.0,True,True,,5mcskKQTJCA-9ed2cf43f511e21d81fa4205c9a7fa42,mp4,5mcskKQTJCA-9ed2cf43f511e21d81fa4205c9a7fa42.mp4,5mcskKQTJCA-9ed2cf43f511e21d81fa4205c9a7fa42.mp4 +79,/datadrive/videos/TfTJudxW4gI-4de2f2f0b2e63892146b7024c0bb8a8c.webm,7b13057b62da435596ce712f358ca897.webm,79.0,True,16k,0.35,,webm,,logos/download.png,,False,False,-0.04,TfTJudxW4gI-4de2f2f0b2e63892146b7024c0bb8a8c,webm,TfTJudxW4gI-4de2f2f0b2e63892146b7024c0bb8a8c.webm,TfTJudxW4gI-4de2f2f0b2e63892146b7024c0bb8a8c.webm +80,/datadrive/videos/6nXlX_LtJuI-7482cf266b54199f18066cd8148f641f.webm,910a24362b644285a4b68935446d9f27.webm,80.0,,64k,0.96,[0.01 0.08],,-0.19,logos/another.gif,6.0,False,False,,6nXlX_LtJuI-7482cf266b54199f18066cd8148f641f,webm,6nXlX_LtJuI-7482cf266b54199f18066cd8148f641f.webm,6nXlX_LtJuI-7482cf266b54199f18066cd8148f641f.webm +81,/datadrive/videos/q80AZNKj2lQ-168122fb3f99bd4cc36816b1d06837fa.mp4,b2ebde7ca16344d58a581e0f9d8ca830.mp4,81.0,True,32k,0.81,[0.11 0.08],,-0.19,,2.0,False,True,-0.32,q80AZNKj2lQ-168122fb3f99bd4cc36816b1d06837fa,mp4,q80AZNKj2lQ-168122fb3f99bd4cc36816b1d06837fa.mp4,q80AZNKj2lQ-168122fb3f99bd4cc36816b1d06837fa.mp4 +82,/datadrive/videos/0d6lma6V7w4-f581b040b27b2ee748ba3992b86cc3cb.mp4,27fb62e2a9d3434e979e6c4f73f858af.mp4,82.0,True,,,,,,,7.0,False,False,0.22,0d6lma6V7w4-f581b040b27b2ee748ba3992b86cc3cb,mp4,0d6lma6V7w4-f581b040b27b2ee748ba3992b86cc3cb.mp4,0d6lma6V7w4-f581b040b27b2ee748ba3992b86cc3cb.mp4 +83,/datadrive/videos/D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256.webm,04f096f304f24a5d930de5b781530d38.ogv,83.0,True,64k,0.95,,ogv,,logos/download.png,5.0,False,True,-0.19,D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256,webm,D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256.webm,D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256.webm +84,/datadrive/videos/6LHiZ1LY90s-83e16756d3dc756e05752117c6a066f7.mp4,112587dbcb5445b3bdb2346958f811bf.ogv,84.0,,,0.62,[0.02 0.04],ogv,-0.03,,,False,False,,6LHiZ1LY90s-83e16756d3dc756e05752117c6a066f7,mp4,6LHiZ1LY90s-83e16756d3dc756e05752117c6a066f7.mp4,6LHiZ1LY90s-83e16756d3dc756e05752117c6a066f7.mp4 +86,/datadrive/videos/LFnMl6Lj3co-11cf15e9ee5ae44575f2743de9812ee5.mp4,d33716bf0d0e4567995c5eaca8bdcef1.ogv,86.0,True,32k,0.68,[0.07 0. ],ogv,0.07,,,False,True,,LFnMl6Lj3co-11cf15e9ee5ae44575f2743de9812ee5,mp4,LFnMl6Lj3co-11cf15e9ee5ae44575f2743de9812ee5.mp4,LFnMl6Lj3co-11cf15e9ee5ae44575f2743de9812ee5.mp4 +88,/datadrive/videos/3oYWhauQ4fY-a7bc5c0789df4f5bfbccf443d0ae936e.webm,a468deee09fe488e8bf372ad197f83f3.webm,88.0,False,16k,0.27,[0.07 0.13],,0.07,logos/fox.png,,True,True,-0.18,3oYWhauQ4fY-a7bc5c0789df4f5bfbccf443d0ae936e,webm,3oYWhauQ4fY-a7bc5c0789df4f5bfbccf443d0ae936e.webm,3oYWhauQ4fY-a7bc5c0789df4f5bfbccf443d0ae936e.webm +89,/datadrive/videos/bfSQtUGCR8k-1ae6897168dd126a294d4a78397111bd.webm,5fce70f9f7ec40be9bf0f1b827f4c4ed.webm,89.0,False,,,,,0.19,logos/fox.png,,False,False,,bfSQtUGCR8k-1ae6897168dd126a294d4a78397111bd,webm,bfSQtUGCR8k-1ae6897168dd126a294d4a78397111bd.webm,bfSQtUGCR8k-1ae6897168dd126a294d4a78397111bd.webm +91,/datadrive/videos/1s0q3XjzrQ0-08429719dc63d21ee31dfa01d9ddba74.mp4,11959191e2004f349715a4545318e9c4.mp4,91.0,,64k,0.93,[0.16 0.13],mp4,,logos/another.gif,,True,True,-0.36,1s0q3XjzrQ0-08429719dc63d21ee31dfa01d9ddba74,mp4,1s0q3XjzrQ0-08429719dc63d21ee31dfa01d9ddba74.mp4,1s0q3XjzrQ0-08429719dc63d21ee31dfa01d9ddba74.mp4 +92,/datadrive/videos/nHmJDnp2P_k-d5c986026db72c8fbc86944a94fc7b09.mp4,265982d1bb34491ca9ed775ad362276b.mp4,92.0,,128k,0.32,[0.1 0.16],mp4,,logos/fox.png,5.0,False,True,-0.02,nHmJDnp2P_k-d5c986026db72c8fbc86944a94fc7b09,mp4,nHmJDnp2P_k-d5c986026db72c8fbc86944a94fc7b09.mp4,nHmJDnp2P_k-d5c986026db72c8fbc86944a94fc7b09.mp4 +93,/datadrive/videos/gOMEh6iHcSY-3dd9c0ef4a0c427985b44d80039ee86f.webm,123324fe4d17478aa52f7bcf57fad7ae.webm,93.0,,16k,0.86,[0.17 0.07],,,,,False,False,,gOMEh6iHcSY-3dd9c0ef4a0c427985b44d80039ee86f,webm,gOMEh6iHcSY-3dd9c0ef4a0c427985b44d80039ee86f.webm,gOMEh6iHcSY-3dd9c0ef4a0c427985b44d80039ee86f.webm +95,/datadrive/videos/zeAC16eCPjo-0754c5df7cba68a73d1a95e94cc81dc6.mp4,3150cea2d1b343b8bb99b2041d251875.mp4,95.0,False,,,,,,logos/another.gif,9.0,False,True,-0.15,zeAC16eCPjo-0754c5df7cba68a73d1a95e94cc81dc6,mp4,zeAC16eCPjo-0754c5df7cba68a73d1a95e94cc81dc6.mp4,zeAC16eCPjo-0754c5df7cba68a73d1a95e94cc81dc6.mp4 +96,/datadrive/videos/ERZ7eVcHf98-96cdbed3dc0b1ebb58606fd77d7c786e.webm,4c33958817fe4c08aebb27f149e7d138.ogv,96.0,,,,,ogv,,logos/new.gif,,False,True,,ERZ7eVcHf98-96cdbed3dc0b1ebb58606fd77d7c786e,webm,ERZ7eVcHf98-96cdbed3dc0b1ebb58606fd77d7c786e.webm,ERZ7eVcHf98-96cdbed3dc0b1ebb58606fd77d7c786e.webm +98,/datadrive/videos/NWK5esmrRYU-9225338a8fdc57473a7f91cf49811075.mp4,9d9f386e40e74b758e107d4631550edd.ogv,98.0,True,,,,ogv,0.06,logos/new.gif,,False,True,,NWK5esmrRYU-9225338a8fdc57473a7f91cf49811075,mp4,NWK5esmrRYU-9225338a8fdc57473a7f91cf49811075.mp4,NWK5esmrRYU-9225338a8fdc57473a7f91cf49811075.mp4 +99,/datadrive/videos/6aFDcJGTJMc-54572dd08f682a62719ff1c1f871b74f.webm,94ce8c15a58b434099738a20f4e6675f.webm,99.0,False,128k,,,,,logos/new.gif,,False,False,-0.06,6aFDcJGTJMc-54572dd08f682a62719ff1c1f871b74f,webm,6aFDcJGTJMc-54572dd08f682a62719ff1c1f871b74f.webm,6aFDcJGTJMc-54572dd08f682a62719ff1c1f871b74f.webm +100,/datadrive/videos/nomlAjT7JXg-64b616daa1751efd9b70f859ac4bc4e8.mp4,8e44ab4a5be449cea6fcb08937b68863.webm,100.0,,,0.54,[0.19 0.07],webm,,,3.0,False,True,,nomlAjT7JXg-64b616daa1751efd9b70f859ac4bc4e8,mp4,nomlAjT7JXg-64b616daa1751efd9b70f859ac4bc4e8.mp4,nomlAjT7JXg-64b616daa1751efd9b70f859ac4bc4e8.mp4 +101,/datadrive/videos/dJcwxCZSSJk-ddb227986062a76d94f04a1ff45f39bd.mp4,9a6962ba52a344d9ae82c18128cc39e4.mp4,101.0,,,,[0.18 0. ],,-0.16,logos/another.gif,2.0,False,True,,dJcwxCZSSJk-ddb227986062a76d94f04a1ff45f39bd,mp4,dJcwxCZSSJk-ddb227986062a76d94f04a1ff45f39bd.mp4,dJcwxCZSSJk-ddb227986062a76d94f04a1ff45f39bd.mp4 +103,/datadrive/videos/4LIuaLBTc40-00bf70264109019a3aa6cc45dd1f3b81.mp4,016ca6d5c602461eb8e9a4262b9a2cb8.mp4,103.0,False,,0.3,,,,logos/fox.png,6.0,False,False,0.07,4LIuaLBTc40-00bf70264109019a3aa6cc45dd1f3b81,mp4,4LIuaLBTc40-00bf70264109019a3aa6cc45dd1f3b81.mp4,4LIuaLBTc40-00bf70264109019a3aa6cc45dd1f3b81.mp4 +104,/datadrive/videos/lv0GLLr_mcM-13e017a70b596d7e4de056791ed5ab91.webm,7472a034c4954c289f9e3064b0bbbbce.ogv,104.0,False,16k,0.66,,ogv,,,3.0,False,True,,lv0GLLr_mcM-13e017a70b596d7e4de056791ed5ab91,webm,lv0GLLr_mcM-13e017a70b596d7e4de056791ed5ab91.webm,lv0GLLr_mcM-13e017a70b596d7e4de056791ed5ab91.webm +105,/datadrive/videos/YXfgXjmo9ok-d56a01c1a8d728da0f810063a4360852.webm,d63131fb1efa4e3c91b666fe460b48a8.ogv,105.0,,,0.96,,ogv,,logos/new.gif,4.0,False,False,-0.06,YXfgXjmo9ok-d56a01c1a8d728da0f810063a4360852,webm,YXfgXjmo9ok-d56a01c1a8d728da0f810063a4360852.webm,YXfgXjmo9ok-d56a01c1a8d728da0f810063a4360852.webm +106,/datadrive/videos/fTopfU9BGuA-deed3a6fdc3fb51df762e4081838ed80.webm,6d0bf17e46ba48bcbb0c7ce13cf1957c.mp4,106.0,,32k,,,mp4,,,5.2,True,True,-0.22,fTopfU9BGuA-deed3a6fdc3fb51df762e4081838ed80,webm,fTopfU9BGuA-deed3a6fdc3fb51df762e4081838ed80.webm,fTopfU9BGuA-deed3a6fdc3fb51df762e4081838ed80.webm +107,/datadrive/videos/r7on6wuqPsI-0a039d1e874d18da7eef468807fcca30.mp4,c039639e660148c1896a25d0d9323c1d.mp4,107.0,False,128k,,,,,,,False,False,,r7on6wuqPsI-0a039d1e874d18da7eef468807fcca30,mp4,r7on6wuqPsI-0a039d1e874d18da7eef468807fcca30.mp4,r7on6wuqPsI-0a039d1e874d18da7eef468807fcca30.mp4 +109,/datadrive/videos/3wtu_RFkW1I-aef842d179c05786f253f76472f3dc8d.webm,1a6c3f2168834614bb0cd9b9f8f01c2d.webm,109.0,,,0.25,,,,,,False,True,,3wtu_RFkW1I-aef842d179c05786f253f76472f3dc8d,webm,3wtu_RFkW1I-aef842d179c05786f253f76472f3dc8d.webm,3wtu_RFkW1I-aef842d179c05786f253f76472f3dc8d.webm +110,/datadrive/videos/FMdtPxc9_zA-45221d73f851b52104056676bcec70d8.mp4,ad157a6590bc4deea9d9d594edbd90b2.mp4,110.0,,32k,0.33,[0.17 0.17],,,,5.0,False,False,0.18,FMdtPxc9_zA-45221d73f851b52104056676bcec70d8,mp4,FMdtPxc9_zA-45221d73f851b52104056676bcec70d8.mp4,FMdtPxc9_zA-45221d73f851b52104056676bcec70d8.mp4 +111,/datadrive/videos/nlYDp0XIFyk-bdc9a88f2f450aa4c792ea7ec0629233.mp4,c631b12fdd134ac4b1c3e5559d7b0ff4.mp4,111.0,True,,,[0.07 0.03],,,logos/jazeera.png,2.0,False,True,0.21,nlYDp0XIFyk-bdc9a88f2f450aa4c792ea7ec0629233,mp4,nlYDp0XIFyk-bdc9a88f2f450aa4c792ea7ec0629233.mp4,nlYDp0XIFyk-bdc9a88f2f450aa4c792ea7ec0629233.mp4 +112,/datadrive/videos/bzCshxZK0Ks-43956b388393bf834ef30e301b42b62c.webm,ce570cd7fb04452782f4dcebced4e979.webm,112.0,,32k,0.93,,webm,,logos/msnbc.png,2.0,False,False,,bzCshxZK0Ks-43956b388393bf834ef30e301b42b62c,webm,bzCshxZK0Ks-43956b388393bf834ef30e301b42b62c.webm,bzCshxZK0Ks-43956b388393bf834ef30e301b42b62c.webm +113,/datadrive/videos/hE92wvk0kcQ-8440097a3feefc6d1765ec7f3070e128.webm,57556f70f43244aaab3be43188738626.webm,113.0,True,,,[0.16 0.1 ],webm,0.17,logos/openair.gif,,False,True,-0.26,hE92wvk0kcQ-8440097a3feefc6d1765ec7f3070e128,webm,hE92wvk0kcQ-8440097a3feefc6d1765ec7f3070e128.webm,hE92wvk0kcQ-8440097a3feefc6d1765ec7f3070e128.webm +114,/datadrive/videos/DYtXcspyEjM-43a3eedf70b53414484d1c56f602bdb5.webm,316187a6f1bb4bd4adbac764ec3d2196.webm,114.0,,64k,0.63,[0.12 0.06],webm,-0.16,,,False,False,-0.1,DYtXcspyEjM-43a3eedf70b53414484d1c56f602bdb5,webm,DYtXcspyEjM-43a3eedf70b53414484d1c56f602bdb5.webm,DYtXcspyEjM-43a3eedf70b53414484d1c56f602bdb5.webm +115,/datadrive/videos/X0oO8_stAxU-1c6290fec552dbd9c69a5b62b17bfcab.webm,4258f27e3ed949b8912686dc4a8a1ac3.webm,115.0,,64k,,,webm,,logos/sbt.gif,,True,True,,X0oO8_stAxU-1c6290fec552dbd9c69a5b62b17bfcab,webm,X0oO8_stAxU-1c6290fec552dbd9c69a5b62b17bfcab.webm,X0oO8_stAxU-1c6290fec552dbd9c69a5b62b17bfcab.webm +116,/datadrive/videos/70pRNWpd-Ys-8d5de8c85b2bd266b827cb9e6d816ccb.webm,25b438922ed643d1a936df4cd72d695b.webm,116.0,False,,0.24,[0.14 0.1 ],,0.06,logos/sbt.gif,4.0,False,False,,70pRNWpd-Ys-8d5de8c85b2bd266b827cb9e6d816ccb,webm,70pRNWpd-Ys-8d5de8c85b2bd266b827cb9e6d816ccb.webm,70pRNWpd-Ys-8d5de8c85b2bd266b827cb9e6d816ccb.webm +117,/datadrive/videos/yh-rqdX5ohY-7d35dc87ee708f31bcd1169459e0e710.webm,b59a64f0154e4275b826b741ed03a301.webm,117.0,True,,,,,,logos/ge.gif,3.0,False,False,,yh-rqdX5ohY-7d35dc87ee708f31bcd1169459e0e710,webm,yh-rqdX5ohY-7d35dc87ee708f31bcd1169459e0e710.webm,yh-rqdX5ohY-7d35dc87ee708f31bcd1169459e0e710.webm +118,/datadrive/videos/4pvyxQCAAWk-bfc0dddcebe2fd65c1fefd623ad91599.mp4,0c283a49c3b3404eaa002fd004c5deee.mp4,118.0,,,,,mp4,0.18,logos/new.gif,,False,False,,4pvyxQCAAWk-bfc0dddcebe2fd65c1fefd623ad91599,mp4,4pvyxQCAAWk-bfc0dddcebe2fd65c1fefd623ad91599.mp4,4pvyxQCAAWk-bfc0dddcebe2fd65c1fefd623ad91599.mp4 +119,/datadrive/videos/9CdyVis8ycE-4f05da60a6416120be4a523f4783b836.webm,d2d16f2ac53e4fa8bd9524fd407838ec.webm,119.0,,32k,,[0.17 0.02],webm,-0.02,,,False,False,,9CdyVis8ycE-4f05da60a6416120be4a523f4783b836,webm,9CdyVis8ycE-4f05da60a6416120be4a523f4783b836.webm,9CdyVis8ycE-4f05da60a6416120be4a523f4783b836.webm +121,/datadrive/videos/QVlRo0cJArc-3802758dfab83c95a37551acc3250e69.mp4,d0a1af910b5e42dd8827580f1ce6e992.ogv,121.0,,128k,0.22,,ogv,,,4.0,True,False,0.03,QVlRo0cJArc-3802758dfab83c95a37551acc3250e69,mp4,QVlRo0cJArc-3802758dfab83c95a37551acc3250e69.mp4,QVlRo0cJArc-3802758dfab83c95a37551acc3250e69.mp4 +122,/datadrive/videos/Wn3fvglIi9I-0ab5f27bbe87c059d9bd0e9722c5831e.webm,a02461a0f9784a11920b40a91c92e9ff.ogv,122.0,,,,,ogv,,,,False,False,,Wn3fvglIi9I-0ab5f27bbe87c059d9bd0e9722c5831e,webm,Wn3fvglIi9I-0ab5f27bbe87c059d9bd0e9722c5831e.webm,Wn3fvglIi9I-0ab5f27bbe87c059d9bd0e9722c5831e.webm +123,/datadrive/videos/NAtjXRWt8RA-30d73b0003cc42310b690082363cdae5.mp4,92a418dd390545e48f9b648524e3471c.mp4,123.0,,,,[0.16 0.18],,,,5.0,False,False,-0.31,NAtjXRWt8RA-30d73b0003cc42310b690082363cdae5,mp4,NAtjXRWt8RA-30d73b0003cc42310b690082363cdae5.mp4,NAtjXRWt8RA-30d73b0003cc42310b690082363cdae5.mp4 +125,/datadrive/videos/AvbI7m-t_u4-3669facdf58c65eade3f6f630b8761a8.webm,920e14e03c764f88923ffdcfbd15273c.webm,125.0,,,,,,,logos/sbt.gif,,False,True,,AvbI7m-t_u4-3669facdf58c65eade3f6f630b8761a8,webm,AvbI7m-t_u4-3669facdf58c65eade3f6f630b8761a8.webm,AvbI7m-t_u4-3669facdf58c65eade3f6f630b8761a8.webm +126,/datadrive/videos/BOWm361Gkt0-9058b9b40b8beae02920da7f1e8431ec.webm,bdb9bc3972154090891b57edbbf77015.webm,126.0,,64k,0.58,[0.18 0.13],,,,1.0,False,True,-0.24,BOWm361Gkt0-9058b9b40b8beae02920da7f1e8431ec,webm,BOWm361Gkt0-9058b9b40b8beae02920da7f1e8431ec.webm,BOWm361Gkt0-9058b9b40b8beae02920da7f1e8431ec.webm +127,/datadrive/videos/PP-_0arY74E-026bbe96b627dc6e17c84d7a5aebbf9e.webm,c837b2de00604b44919b8a6be6916576.mp4,127.0,False,16k,0.66,,mp4,0.12,,7.0,False,False,,PP-_0arY74E-026bbe96b627dc6e17c84d7a5aebbf9e,webm,PP-_0arY74E-026bbe96b627dc6e17c84d7a5aebbf9e.webm,PP-_0arY74E-026bbe96b627dc6e17c84d7a5aebbf9e.webm +128,/datadrive/videos/0Sk0pjtVQhA-71b0aae17339a6dc40b21630e6861272.mp4,117c77d246ae481d93525d2a62e7ed64.mp4,128.0,False,,,,,0.08,,0.0,False,False,,0Sk0pjtVQhA-71b0aae17339a6dc40b21630e6861272,mp4,0Sk0pjtVQhA-71b0aae17339a6dc40b21630e6861272.mp4,0Sk0pjtVQhA-71b0aae17339a6dc40b21630e6861272.mp4 +129,/datadrive/videos/yp2flos0Nrw-32ecbc1606993592b99a1ed2b00d40dd.webm,bd60c1c5ac8049469f9ab71f3fdea6da.webm,129.0,True,128k,0.57,,,-0.08,logos/msnbc.png,,True,True,0.02,yp2flos0Nrw-32ecbc1606993592b99a1ed2b00d40dd,webm,yp2flos0Nrw-32ecbc1606993592b99a1ed2b00d40dd.webm,yp2flos0Nrw-32ecbc1606993592b99a1ed2b00d40dd.webm +130,/datadrive/videos/IkDqhfG26S8-7a6bebda45c57a5ea3d59288eabb06c7.webm,23c47f570cb44962aaf53c4714b50bd5.ogv,130.0,True,32k,,,ogv,0.01,logos/another.gif,,False,True,,IkDqhfG26S8-7a6bebda45c57a5ea3d59288eabb06c7,webm,IkDqhfG26S8-7a6bebda45c57a5ea3d59288eabb06c7.webm,IkDqhfG26S8-7a6bebda45c57a5ea3d59288eabb06c7.webm +131,/datadrive/videos/4SfULjCgTnQ-9a38e61eb16131d710d9d8e6ce798a29.webm,18327cec79914b1f8e9dfab0398ddad7.ogv,131.0,,64k,,[0.01 0.04],ogv,,,2.0,False,False,0.29,4SfULjCgTnQ-9a38e61eb16131d710d9d8e6ce798a29,webm,4SfULjCgTnQ-9a38e61eb16131d710d9d8e6ce798a29.webm,4SfULjCgTnQ-9a38e61eb16131d710d9d8e6ce798a29.webm +132,/datadrive/videos/mJGS3GhwG_0-65c539064a3666605ef13b7984332059.mp4,d38301263cd74e14b9039cca11cb25f2.ogv,132.0,False,,,,ogv,-0.13,,3.0,False,True,,mJGS3GhwG_0-65c539064a3666605ef13b7984332059,mp4,mJGS3GhwG_0-65c539064a3666605ef13b7984332059.mp4,mJGS3GhwG_0-65c539064a3666605ef13b7984332059.mp4 +133,/datadrive/videos/cd8kT9QaX3g-cf0800edb3f6c264367b41a18dc25e05.webm,a08d60a8ce1c45f3978808224687ce16.ogv,133.0,False,128k,0.89,,ogv,,,9.0,False,False,,cd8kT9QaX3g-cf0800edb3f6c264367b41a18dc25e05,webm,cd8kT9QaX3g-cf0800edb3f6c264367b41a18dc25e05.webm,cd8kT9QaX3g-cf0800edb3f6c264367b41a18dc25e05.webm +134,/datadrive/videos/TZgZksArOk0-1a9b9d0b61b724c25f656ec311503469.webm,d283cb41be544dfe99df137b79ef1ae2.mp4,134.0,True,128k,0.78,,mp4,,logos/ge.gif,5.0,False,True,-0.06,TZgZksArOk0-1a9b9d0b61b724c25f656ec311503469,webm,TZgZksArOk0-1a9b9d0b61b724c25f656ec311503469.webm,TZgZksArOk0-1a9b9d0b61b724c25f656ec311503469.webm +135,/datadrive/videos/2GgcAyiuPcI-0967a86cf748d99870a66d344d6db4e5.mp4,d61f0ed03989406aadf600669b6ce2e8.mp4,135.0,,,,,,,,6.0,True,False,0.03,2GgcAyiuPcI-0967a86cf748d99870a66d344d6db4e5,mp4,2GgcAyiuPcI-0967a86cf748d99870a66d344d6db4e5.mp4,2GgcAyiuPcI-0967a86cf748d99870a66d344d6db4e5.mp4 +136,/datadrive/videos/flsevUvm098-ba74e90711c9692f2a6a1157a6eaf146.mp4,c4ae4abf035d4198bb3e86d972684d3b.mp4,136.0,,32k,,[0.14 0.19],mp4,,logos/ge.gif,,False,False,,flsevUvm098-ba74e90711c9692f2a6a1157a6eaf146,mp4,flsevUvm098-ba74e90711c9692f2a6a1157a6eaf146.mp4,flsevUvm098-ba74e90711c9692f2a6a1157a6eaf146.mp4 +137,/datadrive/videos/BK13yaPkrRE-ea98539e335b1cf2bb7c7d33292961fc.webm,c8219206d0224c838f357b2da1750433.webm,137.0,,16k,0.57,,,0.11,logos/msnbc.png,0.0,True,False,0.35,BK13yaPkrRE-ea98539e335b1cf2bb7c7d33292961fc,webm,BK13yaPkrRE-ea98539e335b1cf2bb7c7d33292961fc.webm,BK13yaPkrRE-ea98539e335b1cf2bb7c7d33292961fc.webm +138,/datadrive/videos/Mpa9KGn_uHU-c495ff821ef5ce8b243f99bf3bdeaf33.webm,39133dfeba884fd0928d87a3b6b7f033.webm,138.0,,,,[0.04 0.17],,-0.15,,4.0,False,True,0.38,Mpa9KGn_uHU-c495ff821ef5ce8b243f99bf3bdeaf33,webm,Mpa9KGn_uHU-c495ff821ef5ce8b243f99bf3bdeaf33.webm,Mpa9KGn_uHU-c495ff821ef5ce8b243f99bf3bdeaf33.webm +139,/datadrive/videos/cIpVMLyY2k4-6158a0f6c7723c622baaa11bb14df913.mp4,149f7cd30c7a4e309c56f069830d5472.mp4,139.0,False,,,[0.05 0.06],,0.13,,,False,True,,cIpVMLyY2k4-6158a0f6c7723c622baaa11bb14df913,mp4,cIpVMLyY2k4-6158a0f6c7723c622baaa11bb14df913.mp4,cIpVMLyY2k4-6158a0f6c7723c622baaa11bb14df913.mp4 +140,/datadrive/videos/K1E4MOz7HjE-746ee4ec08c2a0c4a23937f26278c94d.webm,336294dd14c54a34b3a9e7968095404f.webm,140.0,,,,[0.03 0.13],,,logos/jazeera.png,9.0,False,False,0.28,K1E4MOz7HjE-746ee4ec08c2a0c4a23937f26278c94d,webm,K1E4MOz7HjE-746ee4ec08c2a0c4a23937f26278c94d.webm,K1E4MOz7HjE-746ee4ec08c2a0c4a23937f26278c94d.webm +141,/datadrive/videos/KV__ybKKeGo-d6b3f620c3a82633177d23d53413f359.mp4,293f5738943c437a9e8cb8a207e8baec.webm,141.0,False,128k,0.58,[0.03 0.01],webm,,,5.0,False,False,,KV__ybKKeGo-d6b3f620c3a82633177d23d53413f359,mp4,KV__ybKKeGo-d6b3f620c3a82633177d23d53413f359.mp4,KV__ybKKeGo-d6b3f620c3a82633177d23d53413f359.mp4 +142,/datadrive/videos/Hl5wDRKnNL0-84367196aeb52385a9283110755e65f4.webm,a103edf2fc0740ef96c22eb19461dd92.ogv,142.0,,,,[0.05 0.16],ogv,,,,False,False,0.21,Hl5wDRKnNL0-84367196aeb52385a9283110755e65f4,webm,Hl5wDRKnNL0-84367196aeb52385a9283110755e65f4.webm,Hl5wDRKnNL0-84367196aeb52385a9283110755e65f4.webm +143,/datadrive/videos/0vObcYr_6QE-cb4ad03353f8ae0ae11d94cc93672144.webm,3351046277e24838b9c6b665ca48d3ec.webm,143.0,False,,,,,,logos/openair.gif,,False,False,-0.06,0vObcYr_6QE-cb4ad03353f8ae0ae11d94cc93672144,webm,0vObcYr_6QE-cb4ad03353f8ae0ae11d94cc93672144.webm,0vObcYr_6QE-cb4ad03353f8ae0ae11d94cc93672144.webm +144,/datadrive/videos/NdfTdJw6ShQ-b61ab32e2e483a8c5a4bf44d29f38a73.webm,b4cb08c790304921896819ded43414c1.webm,144.0,,64k,0.28,,,0.07,,3.0,False,False,-0.19,NdfTdJw6ShQ-b61ab32e2e483a8c5a4bf44d29f38a73,webm,NdfTdJw6ShQ-b61ab32e2e483a8c5a4bf44d29f38a73.webm,NdfTdJw6ShQ-b61ab32e2e483a8c5a4bf44d29f38a73.webm +145,/datadrive/videos/gN472k0oHFg-5cf5e169175d1bb4947ff0fd60d6f370.mp4,992e89d98b604616add7d7c315cbc4b1.mp4,145.0,False,128k,0.8,,mp4,,,,False,True,,gN472k0oHFg-5cf5e169175d1bb4947ff0fd60d6f370,mp4,gN472k0oHFg-5cf5e169175d1bb4947ff0fd60d6f370.mp4,gN472k0oHFg-5cf5e169175d1bb4947ff0fd60d6f370.mp4 +146,/datadrive/videos/v2i3umrfZpU-364a1ad3ee7109f7e41129e90ebf843a.webm,b63fa44afde94bec8f723af2238a6ea0.webm,146.0,False,64k,0.24,,webm,,,,False,False,,v2i3umrfZpU-364a1ad3ee7109f7e41129e90ebf843a,webm,v2i3umrfZpU-364a1ad3ee7109f7e41129e90ebf843a.webm,v2i3umrfZpU-364a1ad3ee7109f7e41129e90ebf843a.webm +148,/datadrive/videos/V7PiI0b4XjA-a993294b489534ea1b27f71d29e5e02c.mp4,d5a44cc2db0a46c3acdce81cd4c1ecfe.mp4,148.0,,,0.53,[0. 0.1],,,,,False,False,,V7PiI0b4XjA-a993294b489534ea1b27f71d29e5e02c,mp4,V7PiI0b4XjA-a993294b489534ea1b27f71d29e5e02c.mp4,V7PiI0b4XjA-a993294b489534ea1b27f71d29e5e02c.mp4 +149,/datadrive/videos/Au6wyThNMGk-e4e7961b8eb424ab6cb4bedb7914abc9.mp4,c8d26e93e7cf44439683b10612233b51.mp4,149.0,False,,,,mp4,-0.18,,,False,False,,Au6wyThNMGk-e4e7961b8eb424ab6cb4bedb7914abc9,mp4,Au6wyThNMGk-e4e7961b8eb424ab6cb4bedb7914abc9.mp4,Au6wyThNMGk-e4e7961b8eb424ab6cb4bedb7914abc9.mp4 +150,/datadrive/videos/7NFLv137dRo-f5ea0a643e72c46dff2b5f52289f2ead.mp4,298f4066b44a4666af7b13a84a0d723d.webm,150.0,,,0.98,[0. 0.06],webm,,,,False,False,0.37,7NFLv137dRo-f5ea0a643e72c46dff2b5f52289f2ead,mp4,7NFLv137dRo-f5ea0a643e72c46dff2b5f52289f2ead.mp4,7NFLv137dRo-f5ea0a643e72c46dff2b5f52289f2ead.mp4 +151,/datadrive/videos/hE92wvk0kcQ-8440097a3feefc6d1765ec7f3070e128.webm,622b131b8fdf4dbaa28883019c205f7b.webm,151.0,,128k,0.27,[0.09 0.13],,-0.18,logos/jazeera.png,,False,True,0.35,hE92wvk0kcQ-8440097a3feefc6d1765ec7f3070e128,webm,hE92wvk0kcQ-8440097a3feefc6d1765ec7f3070e128.webm,hE92wvk0kcQ-8440097a3feefc6d1765ec7f3070e128.webm +152,/datadrive/videos/FouQjhCSBCk-90be027463eb8322d86c65579b48687b.mp4,ab58b912b0d644f48a90c88e63c44803.mp4,152.0,,,,[0.02 0.16],,,logos/openair.gif,6.93,False,True,,FouQjhCSBCk-90be027463eb8322d86c65579b48687b,mp4,FouQjhCSBCk-90be027463eb8322d86c65579b48687b.mp4,FouQjhCSBCk-90be027463eb8322d86c65579b48687b.mp4 +153,/datadrive/videos/orHJUtltQy0-dced690a7dd18894605e30bae842c208.mp4,4e049455ae61479f9ad047d8764ac934.mp4,153.0,,32k,0.85,,mp4,0.02,logos/ge.gif,,False,True,-0.05,orHJUtltQy0-dced690a7dd18894605e30bae842c208,mp4,orHJUtltQy0-dced690a7dd18894605e30bae842c208.mp4,orHJUtltQy0-dced690a7dd18894605e30bae842c208.mp4 +154,/datadrive/videos/XKgmwB_GDsw-02f3200f1d6894f7144cbe0730263c2a.webm,d5a0fae02f0c408e87580957f44ba968.webm,154.0,True,64k,0.35,[0.01 0.05],webm,,,,False,False,0.27,XKgmwB_GDsw-02f3200f1d6894f7144cbe0730263c2a,webm,XKgmwB_GDsw-02f3200f1d6894f7144cbe0730263c2a.webm,XKgmwB_GDsw-02f3200f1d6894f7144cbe0730263c2a.webm +155,/datadrive/videos/AN35yb_k-IM-e41318666e8a4cfbeeda6c60655319af.webm,948a67b9d2a848819599c5a70549e682.webm,155.0,False,,0.58,[0.11 0.06],,,,7.0,False,False,-0.27,AN35yb_k-IM-e41318666e8a4cfbeeda6c60655319af,webm,AN35yb_k-IM-e41318666e8a4cfbeeda6c60655319af.webm,AN35yb_k-IM-e41318666e8a4cfbeeda6c60655319af.webm +156,/datadrive/videos/018MsV21q00-3419176ec77eea4da5161cf6faa05a3d.mp4,6bd02f2cae55416595bf96d1626be292.ogv,156.0,,32k,,[0.18 0.18],ogv,0.07,,,False,True,,018MsV21q00-3419176ec77eea4da5161cf6faa05a3d,mp4,018MsV21q00-3419176ec77eea4da5161cf6faa05a3d.mp4,018MsV21q00-3419176ec77eea4da5161cf6faa05a3d.mp4 +157,/datadrive/videos/dcyTOe3zVuk-63e68d9901f7b1192364f1842555d85e.webm,58fac9d4e43e4437939845daa1032da7.mp4,157.0,,,0.4,[0.02 0.05],mp4,,,,False,False,0.28,dcyTOe3zVuk-63e68d9901f7b1192364f1842555d85e,webm,dcyTOe3zVuk-63e68d9901f7b1192364f1842555d85e.webm,dcyTOe3zVuk-63e68d9901f7b1192364f1842555d85e.webm +158,/datadrive/videos/kB-AVa0nEMc-2b3a04bfe01cfdb939f3b1f110e42cc1.webm,5be8c0b3b967404c986c1884879a2d3a.webm,158.0,False,,,,,,logos/fox.png,,False,False,-0.15,kB-AVa0nEMc-2b3a04bfe01cfdb939f3b1f110e42cc1,webm,kB-AVa0nEMc-2b3a04bfe01cfdb939f3b1f110e42cc1.webm,kB-AVa0nEMc-2b3a04bfe01cfdb939f3b1f110e42cc1.webm +159,/datadrive/videos/gB6s6KJ36do-3cfbed04189fb604903956da3a1f432b.webm,4afd29488de54a65a24b440190e33827.webm,159.0,,,,,,,,1.0,False,False,,gB6s6KJ36do-3cfbed04189fb604903956da3a1f432b,webm,gB6s6KJ36do-3cfbed04189fb604903956da3a1f432b.webm,gB6s6KJ36do-3cfbed04189fb604903956da3a1f432b.webm +160,/datadrive/videos/aPyyQDpROM0-09ff1c9d8bc574a286818418dc751a3b.mp4,9dd5c0076dbf4ea49a3f86117b36e26f.mp4,160.0,,16k,0.69,[0.15 0.14],,,logos/sbt.gif,,True,True,,aPyyQDpROM0-09ff1c9d8bc574a286818418dc751a3b,mp4,aPyyQDpROM0-09ff1c9d8bc574a286818418dc751a3b.mp4,aPyyQDpROM0-09ff1c9d8bc574a286818418dc751a3b.mp4 +161,/datadrive/videos/wxXlM7Ap1zw-c1698039aaa0055c27f0d4798bee9683.mp4,7e32818b65bf446595e7c9710725978c.mp4,161.0,,,,[0.03 0.17],,-0.05,logos/new.gif,,False,True,0.03,wxXlM7Ap1zw-c1698039aaa0055c27f0d4798bee9683,mp4,wxXlM7Ap1zw-c1698039aaa0055c27f0d4798bee9683.mp4,wxXlM7Ap1zw-c1698039aaa0055c27f0d4798bee9683.mp4 +162,/datadrive/videos/3s1nORCGckM-829c8c45024b8047922603c7d26b5de3.mp4,1eb11f7516ff487cb0a139377d9aba60.ogv,162.0,,64k,,[0.19 0.03],ogv,0.07,logos/openair.gif,4.0,False,False,-0.21,3s1nORCGckM-829c8c45024b8047922603c7d26b5de3,mp4,3s1nORCGckM-829c8c45024b8047922603c7d26b5de3.mp4,3s1nORCGckM-829c8c45024b8047922603c7d26b5de3.mp4 +163,/datadrive/videos/1qEIxFP48Xc-6cca9581fbff6cf6b525d43a5969f84f.webm,433a3887afe74e10b783e22ee789b1e8.webm,163.0,,,,[0.02 0.14],,,logos/new.gif,4.0,False,False,0.37,1qEIxFP48Xc-6cca9581fbff6cf6b525d43a5969f84f,webm,1qEIxFP48Xc-6cca9581fbff6cf6b525d43a5969f84f.webm,1qEIxFP48Xc-6cca9581fbff6cf6b525d43a5969f84f.webm +164,/datadrive/videos/Lkgc2DpdRIQ-707c7c494b7172a2468be1eb9360c3d9.mp4,69865809e5d34b4dab7d8cb9937b68de.webm,164.0,,,,[0.12 0.07],webm,,logos/openair.gif,,False,True,-0.22,Lkgc2DpdRIQ-707c7c494b7172a2468be1eb9360c3d9,mp4,Lkgc2DpdRIQ-707c7c494b7172a2468be1eb9360c3d9.mp4,Lkgc2DpdRIQ-707c7c494b7172a2468be1eb9360c3d9.mp4 +165,/datadrive/videos/xl4MB7anr_A-ac23eef95b4782762494448a141013d8.mp4,885d4fcc95444851b6c3980e63e7cc3d.webm,165.0,,16k,,[0.1 0. ],webm,,,,False,False,,xl4MB7anr_A-ac23eef95b4782762494448a141013d8,mp4,xl4MB7anr_A-ac23eef95b4782762494448a141013d8.mp4,xl4MB7anr_A-ac23eef95b4782762494448a141013d8.mp4 +166,/datadrive/videos/rLQgyxeRx40-c1ceec9a935c550f87fbf8fd871e17f7.webm,8b5b1656d4b74789afce35a88d103bcd.webm,166.0,False,,0.9,,,-0.06,,9.0,False,True,,rLQgyxeRx40-c1ceec9a935c550f87fbf8fd871e17f7,webm,rLQgyxeRx40-c1ceec9a935c550f87fbf8fd871e17f7.webm,rLQgyxeRx40-c1ceec9a935c550f87fbf8fd871e17f7.webm +167,/datadrive/videos/Q5SJGpUBebk-15316f6183a02109bf434f4312e56e2f.mp4,1ae36cbd6aab4cc2b315f5b3e71394b3.ogv,167.0,False,,,[0.1 0. ],ogv,0.14,logos/jazeera.png,,False,False,0.05,Q5SJGpUBebk-15316f6183a02109bf434f4312e56e2f,mp4,Q5SJGpUBebk-15316f6183a02109bf434f4312e56e2f.mp4,Q5SJGpUBebk-15316f6183a02109bf434f4312e56e2f.mp4 +168,/datadrive/videos/i0XffHb8kz8-a014ab8d9266fd831a77de905f6b9342.mp4,5593c66d134d4f28950c9c834fc88cba.webm,168.0,,,0.95,,webm,,,,False,True,0.31,i0XffHb8kz8-a014ab8d9266fd831a77de905f6b9342,mp4,i0XffHb8kz8-a014ab8d9266fd831a77de905f6b9342.mp4,i0XffHb8kz8-a014ab8d9266fd831a77de905f6b9342.mp4 +170,/datadrive/videos/uqPhRKah6EA-4d154dee35f9c714fa7653d76807de7a.mp4,652bf9ce0ac3448a94f25e107d92728c.mp4,170.0,,,0.91,,mp4,,logos/msnbc.png,,False,False,,uqPhRKah6EA-4d154dee35f9c714fa7653d76807de7a,mp4,uqPhRKah6EA-4d154dee35f9c714fa7653d76807de7a.mp4,uqPhRKah6EA-4d154dee35f9c714fa7653d76807de7a.mp4 +171,/datadrive/videos/7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6.webm,2837b0f5dd6649d19654be228d9eecfd.mp4,171.0,,64k,0.29,,mp4,,,6.0,False,True,,7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6,webm,7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6.webm,7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6.webm +172,/datadrive/videos/R-_1Aip_GNE-4142747702602b06e9ffc7e15b640ac9.webm,4f64f1bf0b9f465bbf3fb81135297e56.mp4,172.0,False,32k,0.81,[0.11 0.16],mp4,-0.01,,,False,True,,R-_1Aip_GNE-4142747702602b06e9ffc7e15b640ac9,webm,R-_1Aip_GNE-4142747702602b06e9ffc7e15b640ac9.webm,R-_1Aip_GNE-4142747702602b06e9ffc7e15b640ac9.webm +174,/datadrive/videos/eZhfYjjOSqQ-51c3e8d286c20577556aa7c8b2f8c948.mp4,ab9478e5465a4e0185748084f4274f39.mp4,174.0,,,,,mp4,-0.11,logos/fox.png,,False,False,0.24,eZhfYjjOSqQ-51c3e8d286c20577556aa7c8b2f8c948,mp4,eZhfYjjOSqQ-51c3e8d286c20577556aa7c8b2f8c948.mp4,eZhfYjjOSqQ-51c3e8d286c20577556aa7c8b2f8c948.mp4 +175,/datadrive/videos/20vCvzHpWQI-df74befa83d3f79b50754184f2f8bdde.webm,3cc96f7089c14c2da0dde28af2c327d2.ogv,175.0,,,,[0.02 0.12],ogv,,logos/sbt.gif,0.0,False,True,0.36,20vCvzHpWQI-df74befa83d3f79b50754184f2f8bdde,webm,20vCvzHpWQI-df74befa83d3f79b50754184f2f8bdde.webm,20vCvzHpWQI-df74befa83d3f79b50754184f2f8bdde.webm +176,/datadrive/videos/NdfTdJw6ShQ-b61ab32e2e483a8c5a4bf44d29f38a73.webm,643299d172fd421dae92761602705cfd.webm,176.0,False,,0.34,,,0.0,logos/msnbc.png,,False,False,0.09,NdfTdJw6ShQ-b61ab32e2e483a8c5a4bf44d29f38a73,webm,NdfTdJw6ShQ-b61ab32e2e483a8c5a4bf44d29f38a73.webm,NdfTdJw6ShQ-b61ab32e2e483a8c5a4bf44d29f38a73.webm +177,/datadrive/videos/zyMAknU3TBQ-6f8e36b9ce188bc285dd789289726b8a.mp4,9f790dd7c82844cab9af1bff382e6f04.mp4,177.0,,128k,0.37,,,-0.06,,9.0,False,False,,zyMAknU3TBQ-6f8e36b9ce188bc285dd789289726b8a,mp4,zyMAknU3TBQ-6f8e36b9ce188bc285dd789289726b8a.mp4,zyMAknU3TBQ-6f8e36b9ce188bc285dd789289726b8a.mp4 +178,/datadrive/videos/kPOq6yFQwcU-12901512777ab4d0e0ca36547144be2b.webm,bd39ef5e60744154a005f692ba448de2.webm,178.0,False,64k,,,webm,,,8.0,False,False,,kPOq6yFQwcU-12901512777ab4d0e0ca36547144be2b,webm,kPOq6yFQwcU-12901512777ab4d0e0ca36547144be2b.webm,kPOq6yFQwcU-12901512777ab4d0e0ca36547144be2b.webm +179,/datadrive/videos/gf6OrSCp7zs-ba669e5435157528940e9793937b46fd.mp4,49d8315daf0a40b4a4337b0a975c5385.mp4,179.0,,16k,,,,-0.03,,,False,False,0.37,gf6OrSCp7zs-ba669e5435157528940e9793937b46fd,mp4,gf6OrSCp7zs-ba669e5435157528940e9793937b46fd.mp4,gf6OrSCp7zs-ba669e5435157528940e9793937b46fd.mp4 +180,/datadrive/videos/fO3Tb0P0ry0-55b903a4c127aa8229bfd809e7c3974a.webm,4f6b149ae32444b5b4556c9a8951d311.webm,180.0,False,16k,0.48,[0.15 0.18],,,,,False,False,,fO3Tb0P0ry0-55b903a4c127aa8229bfd809e7c3974a,webm,fO3Tb0P0ry0-55b903a4c127aa8229bfd809e7c3974a.webm,fO3Tb0P0ry0-55b903a4c127aa8229bfd809e7c3974a.webm +181,/datadrive/videos/1s0q3XjzrQ0-08429719dc63d21ee31dfa01d9ddba74.mp4,3f34c37750e24644bcac6ca9b57b93b9.mp4,181.0,True,64k,0.41,,mp4,-0.08,logos/openair.gif,,False,False,,1s0q3XjzrQ0-08429719dc63d21ee31dfa01d9ddba74,mp4,1s0q3XjzrQ0-08429719dc63d21ee31dfa01d9ddba74.mp4,1s0q3XjzrQ0-08429719dc63d21ee31dfa01d9ddba74.mp4 +182,/datadrive/videos/NMxf6GCrgvQ-824ccc00694a1ab698c5e88334f00a87.webm,628cbc04b11841ccb73c184cf4bec3ff.webm,182.0,,32k,0.62,,webm,0.11,logos/msnbc.png,,False,True,0.37,NMxf6GCrgvQ-824ccc00694a1ab698c5e88334f00a87,webm,NMxf6GCrgvQ-824ccc00694a1ab698c5e88334f00a87.webm,NMxf6GCrgvQ-824ccc00694a1ab698c5e88334f00a87.webm +183,/datadrive/videos/XPBOoPh0S8g-6a80debb501b0fef05f0e058409d5151.webm,a6b5da9b224d4be99d194a13011830ac.ogv,183.0,False,128k,,,ogv,0.15,,1.0,False,False,-0.21,XPBOoPh0S8g-6a80debb501b0fef05f0e058409d5151,webm,XPBOoPh0S8g-6a80debb501b0fef05f0e058409d5151.webm,XPBOoPh0S8g-6a80debb501b0fef05f0e058409d5151.webm +184,/datadrive/videos/TfdDQAB44vE-25343cbd9ba1fe7ddfee84beb84fa8f7.mp4,3af3c6a3f2984f6b895a4765a2b5899c.mp4,184.0,,,0.51,[0.07 0.13],mp4,,logos/openair.gif,6.825,False,False,,TfdDQAB44vE-25343cbd9ba1fe7ddfee84beb84fa8f7,mp4,TfdDQAB44vE-25343cbd9ba1fe7ddfee84beb84fa8f7.mp4,TfdDQAB44vE-25343cbd9ba1fe7ddfee84beb84fa8f7.mp4 +185,/datadrive/videos/OCA0RGX29iI-7fb210395aae746aa83bf20a5b7f4088.mp4,0d7b005fccc44bfdafb11bb7ff01a29d.mp4,185.0,,16k,,,mp4,0.14,logos/fox.png,8.0,False,False,0.1,OCA0RGX29iI-7fb210395aae746aa83bf20a5b7f4088,mp4,OCA0RGX29iI-7fb210395aae746aa83bf20a5b7f4088.mp4,OCA0RGX29iI-7fb210395aae746aa83bf20a5b7f4088.mp4 +187,/datadrive/videos/rIwIlyCPJmo-cb2dfa8fa414cfca69ead195c441279a.webm,91cde1555ef54416b0f9ee187a559ef7.ogv,187.0,False,32k,0.73,,ogv,0.14,logos/download.png,,False,False,,rIwIlyCPJmo-cb2dfa8fa414cfca69ead195c441279a,webm,rIwIlyCPJmo-cb2dfa8fa414cfca69ead195c441279a.webm,rIwIlyCPJmo-cb2dfa8fa414cfca69ead195c441279a.webm +188,/datadrive/videos/ZN8AJrmDUpI-ed4d0e97eaf5bb5ed5cab7c6f6b59465.webm,a11fa902d2df4e7fb623d8f15dbbc907.webm,188.0,True,32k,0.72,,,0.08,,2.0,False,False,,ZN8AJrmDUpI-ed4d0e97eaf5bb5ed5cab7c6f6b59465,webm,ZN8AJrmDUpI-ed4d0e97eaf5bb5ed5cab7c6f6b59465.webm,ZN8AJrmDUpI-ed4d0e97eaf5bb5ed5cab7c6f6b59465.webm +189,/datadrive/videos/zYHUDn-7Pmo-da3a20a9bed4121e014d813e3aa3dda6.webm,9d9057ce45e1435991c5e8f0ec2e923d.webm,189.0,,,,,webm,,logos/fox.png,4.0,False,False,0.06,zYHUDn-7Pmo-da3a20a9bed4121e014d813e3aa3dda6,webm,zYHUDn-7Pmo-da3a20a9bed4121e014d813e3aa3dda6.webm,zYHUDn-7Pmo-da3a20a9bed4121e014d813e3aa3dda6.webm +190,/datadrive/videos/FPeKK6AU6BM-0332ad7ffcf384368c777ae72c9c9e3f.mp4,87cbf615bf7e4f9cb097d0b82be6691d.webm,190.0,,16k,,,webm,-0.07,logos/ge.gif,,False,False,0.15,FPeKK6AU6BM-0332ad7ffcf384368c777ae72c9c9e3f,mp4,FPeKK6AU6BM-0332ad7ffcf384368c777ae72c9c9e3f.mp4,FPeKK6AU6BM-0332ad7ffcf384368c777ae72c9c9e3f.mp4 +191,/datadrive/videos/w_4muCmD7bM-12fe6e7f1124963079a7c8c207a34ffe.webm,d07f3aea680145f294005687aa9a9ef8.webm,191.0,False,16k,,[0.15 0.11],webm,,,,False,True,,w_4muCmD7bM-12fe6e7f1124963079a7c8c207a34ffe,webm,w_4muCmD7bM-12fe6e7f1124963079a7c8c207a34ffe.webm,w_4muCmD7bM-12fe6e7f1124963079a7c8c207a34ffe.webm +192,/datadrive/videos/6Sxqe_XXOH8-a60d9e5c20ad339affe026bd1ea1edd6.webm,c61bde9ded244fcdb57ff6aec93f8777.ogv,192.0,True,,0.43,[0.19 0.14],ogv,,,,False,False,-0.18,6Sxqe_XXOH8-a60d9e5c20ad339affe026bd1ea1edd6,webm,6Sxqe_XXOH8-a60d9e5c20ad339affe026bd1ea1edd6.webm,6Sxqe_XXOH8-a60d9e5c20ad339affe026bd1ea1edd6.webm +193,/datadrive/videos/EwZoNez5W1E-11824b24c5b9958a96f743fe7bb3592c.mp4,5539b1339c7146c4aad7ad3ed5fabd8e.mp4,193.0,False,,,[0.02 0.04],,,,7.615,False,False,0.08,EwZoNez5W1E-11824b24c5b9958a96f743fe7bb3592c,mp4,EwZoNez5W1E-11824b24c5b9958a96f743fe7bb3592c.mp4,EwZoNez5W1E-11824b24c5b9958a96f743fe7bb3592c.mp4 +194,/datadrive/videos/mgZ74pMXGOQ-4ba10cc0a9cd79360fdfcc59f13afc8d.mp4,ffaa3c060b9d4df49882d6c9cc61a3be.ogv,194.0,,32k,,[0.08 0.09],ogv,-0.16,logos/new.gif,,False,False,,mgZ74pMXGOQ-4ba10cc0a9cd79360fdfcc59f13afc8d,mp4,mgZ74pMXGOQ-4ba10cc0a9cd79360fdfcc59f13afc8d.mp4,mgZ74pMXGOQ-4ba10cc0a9cd79360fdfcc59f13afc8d.mp4 +195,/datadrive/videos/8aF9LVRF6vc-ad829e208c5faccbf4e34700e4ff57be.webm,05ec9172449e4a40a61d055ec76a31eb.webm,195.0,False,16k,0.33,[0.15 0.18],,,,,False,False,,8aF9LVRF6vc-ad829e208c5faccbf4e34700e4ff57be,webm,8aF9LVRF6vc-ad829e208c5faccbf4e34700e4ff57be.webm,8aF9LVRF6vc-ad829e208c5faccbf4e34700e4ff57be.webm +196,/datadrive/videos/hCNFAwKjVxo-ad58a9bd1605d551f2fcf1210f99d139.webm,b585c08ecbe24d47a607b6e67e09adf4.webm,196.0,False,16k,0.74,,webm,-0.1,logos/openair.gif,1.0,True,True,-0.37,hCNFAwKjVxo-ad58a9bd1605d551f2fcf1210f99d139,webm,hCNFAwKjVxo-ad58a9bd1605d551f2fcf1210f99d139.webm,hCNFAwKjVxo-ad58a9bd1605d551f2fcf1210f99d139.webm +197,/datadrive/videos/H67d9dw0n-w-c52b43a554c7177c036309f9fa023f75.webm,9a8f30a4efc94bcda2dfe4b7f0590862.webm,197.0,,,0.44,[0.12 0.19],,0.02,,1.0,False,True,,H67d9dw0n-w-c52b43a554c7177c036309f9fa023f75,webm,H67d9dw0n-w-c52b43a554c7177c036309f9fa023f75.webm,H67d9dw0n-w-c52b43a554c7177c036309f9fa023f75.webm +199,/datadrive/videos/TUgKmZ0uDBg-0b47c336d06279b013d9e675c2c6f77b.webm,9bb59fdd652240a8877376170f74e32e.webm,199.0,False,,0.23,[0.01 0.01],,,logos/ge.gif,1.0,False,True,-0.28,TUgKmZ0uDBg-0b47c336d06279b013d9e675c2c6f77b,webm,TUgKmZ0uDBg-0b47c336d06279b013d9e675c2c6f77b.webm,TUgKmZ0uDBg-0b47c336d06279b013d9e675c2c6f77b.webm +200,/datadrive/videos/yNRMAgXTRWY-99849d84f8274ea3ac148500d0241491.webm,50185948353347b5bdae55803f365280.webm,200.0,,128k,0.77,[0.04 0.07],,0.17,logos/another.gif,6.0,False,False,-0.1,yNRMAgXTRWY-99849d84f8274ea3ac148500d0241491,webm,yNRMAgXTRWY-99849d84f8274ea3ac148500d0241491.webm,yNRMAgXTRWY-99849d84f8274ea3ac148500d0241491.webm +201,/datadrive/videos/s3zLaxjmuvo-d452d82fd630fedadbf5c7c0a0ffefaf.webm,60df6d9c4fe241d3be167d4157552ff4.mp4,201.0,,,,[0.04 0.12],mp4,0.15,,6.0,False,True,-0.12,s3zLaxjmuvo-d452d82fd630fedadbf5c7c0a0ffefaf,webm,s3zLaxjmuvo-d452d82fd630fedadbf5c7c0a0ffefaf.webm,s3zLaxjmuvo-d452d82fd630fedadbf5c7c0a0ffefaf.webm +202,/datadrive/videos/HR3R-ogC98M-c8349175a0a8466f7d76c9fd7157a376.mp4,4c74ca4e816444adb2323a335a61f380.mp4,202.0,False,16k,0.42,[0.16 0.01],,-0.09,logos/sbt.gif,5.385,False,False,0.0,HR3R-ogC98M-c8349175a0a8466f7d76c9fd7157a376,mp4,HR3R-ogC98M-c8349175a0a8466f7d76c9fd7157a376.mp4,HR3R-ogC98M-c8349175a0a8466f7d76c9fd7157a376.mp4 +203,/datadrive/videos/AefM1c4FTog-a49786256cbc55adde089ee99333896c.mp4,0f3404af257e4ec7a648b740a8f67755.mp4,203.0,False,64k,0.48,,,,logos/ge.gif,3.0,False,True,,AefM1c4FTog-a49786256cbc55adde089ee99333896c,mp4,AefM1c4FTog-a49786256cbc55adde089ee99333896c.mp4,AefM1c4FTog-a49786256cbc55adde089ee99333896c.mp4 +204,/datadrive/videos/aGHwuX_afPs-8f923c6a575a3e8760eed7e4bbccaa95.mp4,4deca46a16d04847aaab996abab49f62.ogv,204.0,,,0.6,,ogv,,logos/msnbc.png,6.0,False,True,0.05,aGHwuX_afPs-8f923c6a575a3e8760eed7e4bbccaa95,mp4,aGHwuX_afPs-8f923c6a575a3e8760eed7e4bbccaa95.mp4,aGHwuX_afPs-8f923c6a575a3e8760eed7e4bbccaa95.mp4 +205,/datadrive/videos/g7PSxWsnslI-744f3f86f7face1a28fb5a4b1a44fb0a.webm,20c902fbdf354c0ea87ccf5459bfae42.webm,205.0,,,0.9,,,,,,False,True,,g7PSxWsnslI-744f3f86f7face1a28fb5a4b1a44fb0a,webm,g7PSxWsnslI-744f3f86f7face1a28fb5a4b1a44fb0a.webm,g7PSxWsnslI-744f3f86f7face1a28fb5a4b1a44fb0a.webm +206,/datadrive/videos/OB8cj5uOyOY-82bdd38f49e0fb7d327ad70984075abe.webm,ffac069f289343989e3d72b5eddc982d.webm,206.0,,,,,,-0.06,logos/download.png,,False,True,,OB8cj5uOyOY-82bdd38f49e0fb7d327ad70984075abe,webm,OB8cj5uOyOY-82bdd38f49e0fb7d327ad70984075abe.webm,OB8cj5uOyOY-82bdd38f49e0fb7d327ad70984075abe.webm +207,/datadrive/videos/rb5iOiuTmK0-6069b21dbc5ec74742a663cdcc0d2cf6.webm,27a4abd0b6d4469f9cf1ac6422391e11.mp4,207.0,,16k,0.48,,mp4,-0.03,logos/ge.gif,0.0,False,True,,rb5iOiuTmK0-6069b21dbc5ec74742a663cdcc0d2cf6,webm,rb5iOiuTmK0-6069b21dbc5ec74742a663cdcc0d2cf6.webm,rb5iOiuTmK0-6069b21dbc5ec74742a663cdcc0d2cf6.webm +208,/datadrive/videos/pE82DfsK_Cg-e8885ca8e282be8ba607b4b9441b4258.mp4,4e5634c9f19240b5b811d1c54063c684.mp4,208.0,,,0.68,,,-0.1,,,False,False,,pE82DfsK_Cg-e8885ca8e282be8ba607b4b9441b4258,mp4,pE82DfsK_Cg-e8885ca8e282be8ba607b4b9441b4258.mp4,pE82DfsK_Cg-e8885ca8e282be8ba607b4b9441b4258.mp4 +209,/datadrive/videos/xJbEsCKYsEk-d798885afce72ee6d5a7e1b55a9a163f.webm,c22f02bcc72943da9ab491b89c4469fd.webm,209.0,False,32k,,,,-0.14,,,False,True,,xJbEsCKYsEk-d798885afce72ee6d5a7e1b55a9a163f,webm,xJbEsCKYsEk-d798885afce72ee6d5a7e1b55a9a163f.webm,xJbEsCKYsEk-d798885afce72ee6d5a7e1b55a9a163f.webm +210,/datadrive/videos/ET7eF_wcdvI-1be1ab2d45916c9603727c24cc174b90.webm,78b5bfd24ef44bc6ad12f28a5c16dbfd.webm,210.0,False,32k,,,,,,,False,True,-0.16,ET7eF_wcdvI-1be1ab2d45916c9603727c24cc174b90,webm,ET7eF_wcdvI-1be1ab2d45916c9603727c24cc174b90.webm,ET7eF_wcdvI-1be1ab2d45916c9603727c24cc174b90.webm +211,/datadrive/videos/3ApzQzYK3us-59308e3eb791f1cddfc6567118f8d054.webm,bdd0d991cdec430bbdd74df1b7c11ce5.mp4,211.0,,32k,0.76,[0.05 0.05],mp4,-0.2,,7.0,False,False,-0.03,3ApzQzYK3us-59308e3eb791f1cddfc6567118f8d054,webm,3ApzQzYK3us-59308e3eb791f1cddfc6567118f8d054.webm,3ApzQzYK3us-59308e3eb791f1cddfc6567118f8d054.webm +212,/datadrive/videos/rCZSuzJs4zc-c859578ffb45b422c0d737a005066f9f.mp4,48e820655c6c46aea631c15530b86cfa.ogv,212.0,False,,,,ogv,,,8.0,False,True,-0.05,rCZSuzJs4zc-c859578ffb45b422c0d737a005066f9f,mp4,rCZSuzJs4zc-c859578ffb45b422c0d737a005066f9f.mp4,rCZSuzJs4zc-c859578ffb45b422c0d737a005066f9f.mp4 +213,/datadrive/videos/v6pA-ys-LKo-b9d3fd6c61aeba678818e682145ce12c.mp4,0ff7820bbc5d41bd82dcc698c81b3cec.mp4,213.0,False,16k,0.35,,,,,7.0,True,True,,v6pA-ys-LKo-b9d3fd6c61aeba678818e682145ce12c,mp4,v6pA-ys-LKo-b9d3fd6c61aeba678818e682145ce12c.mp4,v6pA-ys-LKo-b9d3fd6c61aeba678818e682145ce12c.mp4 +214,/datadrive/videos/IscriCqDyJs-b5f52abb5ca7dc1e80365e3a1453656b.webm,b97373872f8c421cb42de73bb060cc7f.webm,214.0,True,,,[0.19 0.08],webm,0.18,logos/fox.png,,False,False,0.26,IscriCqDyJs-b5f52abb5ca7dc1e80365e3a1453656b,webm,IscriCqDyJs-b5f52abb5ca7dc1e80365e3a1453656b.webm,IscriCqDyJs-b5f52abb5ca7dc1e80365e3a1453656b.webm +215,/datadrive/videos/wul4c1lmgJg-49d3f5290bba4d90ea34dee22ab7b9f3.mp4,9064a874f2104b87a0e36ecd5e3f049b.mp4,215.0,,,,,,0.16,logos/fox.png,3.0,False,True,,wul4c1lmgJg-49d3f5290bba4d90ea34dee22ab7b9f3,mp4,wul4c1lmgJg-49d3f5290bba4d90ea34dee22ab7b9f3.mp4,wul4c1lmgJg-49d3f5290bba4d90ea34dee22ab7b9f3.mp4 +216,/datadrive/videos/CnTrKl4bngo-583a4d376c3c0c52f15267eca748b5ca.webm,79280d730cd34c199073196e713b3e5c.mp4,216.0,,64k,,,mp4,,,,False,True,,CnTrKl4bngo-583a4d376c3c0c52f15267eca748b5ca,webm,CnTrKl4bngo-583a4d376c3c0c52f15267eca748b5ca.webm,CnTrKl4bngo-583a4d376c3c0c52f15267eca748b5ca.webm +217,/datadrive/videos/WUUQGXPoAJk-53f45c1ae0e50cc954e5f2d7ced9544f.webm,9ccf85c21f7d49c89ed4d5401ce99700.webm,217.0,,,,[0.09 0.1 ],webm,0.15,logos/another.gif,0.0,False,True,0.2,WUUQGXPoAJk-53f45c1ae0e50cc954e5f2d7ced9544f,webm,WUUQGXPoAJk-53f45c1ae0e50cc954e5f2d7ced9544f.webm,WUUQGXPoAJk-53f45c1ae0e50cc954e5f2d7ced9544f.webm +219,/datadrive/videos/JrBjbP9TFV0-a9a6bbb0dcd6a09181e218f7517750ed.mp4,3438595909e14934ab49a244d5b40607.mp4,219.0,False,,,[0.09 0.02],,,logos/sbt.gif,4.7,False,False,,JrBjbP9TFV0-a9a6bbb0dcd6a09181e218f7517750ed,mp4,JrBjbP9TFV0-a9a6bbb0dcd6a09181e218f7517750ed.mp4,JrBjbP9TFV0-a9a6bbb0dcd6a09181e218f7517750ed.mp4 +220,/datadrive/videos/fSBJ8BihunU-5660fa81596b50e8e3dcf3e107d410a0.webm,fea18ebecfcf4a96ab01ef3403021176.mp4,220.0,,16k,,,mp4,-0.01,,8.0,False,False,-0.27,fSBJ8BihunU-5660fa81596b50e8e3dcf3e107d410a0,webm,fSBJ8BihunU-5660fa81596b50e8e3dcf3e107d410a0.webm,fSBJ8BihunU-5660fa81596b50e8e3dcf3e107d410a0.webm +221,/datadrive/videos/nE3nT6fCJmA-7ecc0de15c008eeb1e5a340fad6f1148.webm,6686c95716044038b9e2466410ad2788.webm,221.0,,,0.29,[0.14 0.01],,0.16,logos/new.gif,9.0,False,False,,nE3nT6fCJmA-7ecc0de15c008eeb1e5a340fad6f1148,webm,nE3nT6fCJmA-7ecc0de15c008eeb1e5a340fad6f1148.webm,nE3nT6fCJmA-7ecc0de15c008eeb1e5a340fad6f1148.webm +222,/datadrive/videos/aSQ7jb_36ms-dbdd265659c5dbca05d5bfd6c01f9f3a.webm,8982e58f1bf64e4182326c5d617d3f6e.webm,222.0,,,0.33,,,0.18,logos/download.png,,False,True,-0.18,aSQ7jb_36ms-dbdd265659c5dbca05d5bfd6c01f9f3a,webm,aSQ7jb_36ms-dbdd265659c5dbca05d5bfd6c01f9f3a.webm,aSQ7jb_36ms-dbdd265659c5dbca05d5bfd6c01f9f3a.webm +226,/datadrive/videos/X5jHONOLfD8-d7a6cd6e9d31018e8f42ed32b2863b22.webm,9d2443a16aae4fc1b2fcd84522c09417.mp4,226.0,,,0.98,,mp4,-0.09,,0.0,False,True,,X5jHONOLfD8-d7a6cd6e9d31018e8f42ed32b2863b22,webm,X5jHONOLfD8-d7a6cd6e9d31018e8f42ed32b2863b22.webm,X5jHONOLfD8-d7a6cd6e9d31018e8f42ed32b2863b22.webm +227,/datadrive/videos/_i9dTl3Wsfg-c1105f51a032eb9ec895ed4209acbde7.webm,731417e996e3434196c2017aed16528f.mp4,227.0,False,,0.96,[0.19 0.03],mp4,,logos/ge.gif,,False,True,-0.23,_i9dTl3Wsfg-c1105f51a032eb9ec895ed4209acbde7,webm,_i9dTl3Wsfg-c1105f51a032eb9ec895ed4209acbde7.webm,_i9dTl3Wsfg-c1105f51a032eb9ec895ed4209acbde7.webm +228,/datadrive/videos/cMVWOb0u46g-22301d4a2db7a0ce4ea3e2e50a4c6cd5.webm,8ce7dfcd2f284b158166f66fa433c60b.webm,228.0,False,,0.49,[0.03 0. ],,-0.14,,4.0,True,False,,cMVWOb0u46g-22301d4a2db7a0ce4ea3e2e50a4c6cd5,webm,cMVWOb0u46g-22301d4a2db7a0ce4ea3e2e50a4c6cd5.webm,cMVWOb0u46g-22301d4a2db7a0ce4ea3e2e50a4c6cd5.webm +229,/datadrive/videos/kabNdo05sNw-0898375837dac959ab9c943a53b1f41e.mp4,11a6f80b47c3497ea0ad620d81cd64ce.webm,229.0,True,,,,webm,,logos/msnbc.png,5.0,False,False,0.01,kabNdo05sNw-0898375837dac959ab9c943a53b1f41e,mp4,kabNdo05sNw-0898375837dac959ab9c943a53b1f41e.mp4,kabNdo05sNw-0898375837dac959ab9c943a53b1f41e.mp4 +230,/datadrive/videos/Oa9o9qA7wcU-9acc3fc3527e060b643ce5b9e3e7eb63.webm,2c70225f29d64864bcedde2b19b6a36f.webm,230.0,True,,,[0.19 0.13],,,logos/sbt.gif,5.0,False,False,-0.21,Oa9o9qA7wcU-9acc3fc3527e060b643ce5b9e3e7eb63,webm,Oa9o9qA7wcU-9acc3fc3527e060b643ce5b9e3e7eb63.webm,Oa9o9qA7wcU-9acc3fc3527e060b643ce5b9e3e7eb63.webm +232,/datadrive/videos/pgERmiWxR3s-a7c2e57b2fc3aa137ec3a7ba33a6a18c.mp4,67cb618b00b8479bb80a433222f17be6.mp4,232.0,False,64k,,,mp4,-0.04,,,True,True,0.01,pgERmiWxR3s-a7c2e57b2fc3aa137ec3a7ba33a6a18c,mp4,pgERmiWxR3s-a7c2e57b2fc3aa137ec3a7ba33a6a18c.mp4,pgERmiWxR3s-a7c2e57b2fc3aa137ec3a7ba33a6a18c.mp4 +233,/datadrive/videos/TUgKmZ0uDBg-0b47c336d06279b013d9e675c2c6f77b.webm,53a0597498ac44a7872cd79508dfcc8a.webm,233.0,False,,0.48,[0.07 0. ],,-0.09,,0.0,False,True,,TUgKmZ0uDBg-0b47c336d06279b013d9e675c2c6f77b,webm,TUgKmZ0uDBg-0b47c336d06279b013d9e675c2c6f77b.webm,TUgKmZ0uDBg-0b47c336d06279b013d9e675c2c6f77b.webm +234,/datadrive/videos/9gTpxuL8LSE-fef2daee17d8e0b8d9c86d2863649574.mp4,9af3f7a2d7444f14a676895297d31f4d.mp4,234.0,True,,,,,,,4.0,False,False,,9gTpxuL8LSE-fef2daee17d8e0b8d9c86d2863649574,mp4,9gTpxuL8LSE-fef2daee17d8e0b8d9c86d2863649574.mp4,9gTpxuL8LSE-fef2daee17d8e0b8d9c86d2863649574.mp4 +235,/datadrive/videos/BiG7uqJiT6c-88ff6c51e0b51e8b643c76a4869d1bc7.webm,9f6558abd2e5433ea07f76de4e140ce9.webm,235.0,,,,,webm,,,,False,False,-0.34,BiG7uqJiT6c-88ff6c51e0b51e8b643c76a4869d1bc7,webm,BiG7uqJiT6c-88ff6c51e0b51e8b643c76a4869d1bc7.webm,BiG7uqJiT6c-88ff6c51e0b51e8b643c76a4869d1bc7.webm +236,/datadrive/videos/JLV3rJ9IGS4-eaac377d0455fe22e49e74739c6371ed.webm,2b07ff137c8041879fbd867b1a85a086.webm,236.0,False,16k,,[0.19 0.17],,-0.12,,,False,False,,JLV3rJ9IGS4-eaac377d0455fe22e49e74739c6371ed,webm,JLV3rJ9IGS4-eaac377d0455fe22e49e74739c6371ed.webm,JLV3rJ9IGS4-eaac377d0455fe22e49e74739c6371ed.webm +237,/datadrive/videos/DxhikT_riJk-3b3e85d1a3979eb5e55ab6a02fa4a46d.webm,338fc9531cf24c9c98903352e73023c3.webm,237.0,,,,[0. 0.18],,-0.08,,,True,True,,DxhikT_riJk-3b3e85d1a3979eb5e55ab6a02fa4a46d,webm,DxhikT_riJk-3b3e85d1a3979eb5e55ab6a02fa4a46d.webm,DxhikT_riJk-3b3e85d1a3979eb5e55ab6a02fa4a46d.webm +238,/datadrive/videos/ipVnLDHZV4w-889d64841d76a11525ff65bad65d0084.webm,51247e822cf948379f06c45e085e65ba.webm,238.0,False,16k,,,,-0.14,logos/fox.png,7.0,False,True,0.08,ipVnLDHZV4w-889d64841d76a11525ff65bad65d0084,webm,ipVnLDHZV4w-889d64841d76a11525ff65bad65d0084.webm,ipVnLDHZV4w-889d64841d76a11525ff65bad65d0084.webm +239,/datadrive/videos/TnJMr1cWQNk-13cc91cf25194856efe80d6309c9e46c.webm,540e7e02ec6b4ea195e4d41587af1660.webm,239.0,,32k,,[0.16 0.14],,0.01,logos/another.gif,,False,True,,TnJMr1cWQNk-13cc91cf25194856efe80d6309c9e46c,webm,TnJMr1cWQNk-13cc91cf25194856efe80d6309c9e46c.webm,TnJMr1cWQNk-13cc91cf25194856efe80d6309c9e46c.webm +240,/datadrive/videos/Q3QNcNmOTrM-4ed3a9586916368acf044ac7e7e67bfd.mp4,640ccc849d3a4cb196d031999a98dc46.mp4,240.0,,128k,0.36,[0.09 0.14],,0.15,,,False,True,-0.22,Q3QNcNmOTrM-4ed3a9586916368acf044ac7e7e67bfd,mp4,Q3QNcNmOTrM-4ed3a9586916368acf044ac7e7e67bfd.mp4,Q3QNcNmOTrM-4ed3a9586916368acf044ac7e7e67bfd.mp4 +241,/datadrive/videos/x2XRIgQTtKI-0acd49b7b659f5c4b4a4384a258092a9.mp4,855508f2c45f4a829a78dade9d757427.mp4,241.0,False,,,,,0.07,,,False,False,,x2XRIgQTtKI-0acd49b7b659f5c4b4a4384a258092a9,mp4,x2XRIgQTtKI-0acd49b7b659f5c4b4a4384a258092a9.mp4,x2XRIgQTtKI-0acd49b7b659f5c4b4a4384a258092a9.mp4 +243,/datadrive/videos/OS43ow6pbNQ-f225b5e2b3ddc2add5962ffd350e9d8f.webm,831d0b47ebb64a6b9a44f5c03bf812be.mp4,243.0,,32k,0.61,[0.11 0.03],mp4,0.07,logos/download.png,,False,False,,OS43ow6pbNQ-f225b5e2b3ddc2add5962ffd350e9d8f,webm,OS43ow6pbNQ-f225b5e2b3ddc2add5962ffd350e9d8f.webm,OS43ow6pbNQ-f225b5e2b3ddc2add5962ffd350e9d8f.webm +244,/datadrive/videos/3yUuzHJspA0-3ac7ff0920554b960f0774f97cd2aa37.webm,9576df143b0045b98c532eb5bb531ff2.webm,244.0,False,32k,0.88,[0.15 0. ],,,logos/sbt.gif,,False,True,,3yUuzHJspA0-3ac7ff0920554b960f0774f97cd2aa37,webm,3yUuzHJspA0-3ac7ff0920554b960f0774f97cd2aa37.webm,3yUuzHJspA0-3ac7ff0920554b960f0774f97cd2aa37.webm +245,/datadrive/videos/D5tuNsZlf6g-421d37bfa5fbe82fd4790f6a4833eed0.mp4,998068bcc77943e8a3d31b2e2243e4cb.mp4,245.0,,32k,,,,0.16,logos/fox.png,5.0,False,False,0.2,D5tuNsZlf6g-421d37bfa5fbe82fd4790f6a4833eed0,mp4,D5tuNsZlf6g-421d37bfa5fbe82fd4790f6a4833eed0.mp4,D5tuNsZlf6g-421d37bfa5fbe82fd4790f6a4833eed0.mp4 +246,/datadrive/videos/ObteGc60Fes-086a675bfa93745cbae675e362b6783d.mp4,aacc7e9f49c34332aa2da5048f787e8c.mp4,246.0,False,16k,,,,,logos/sbt.gif,,False,True,-0.35,ObteGc60Fes-086a675bfa93745cbae675e362b6783d,mp4,ObteGc60Fes-086a675bfa93745cbae675e362b6783d.mp4,ObteGc60Fes-086a675bfa93745cbae675e362b6783d.mp4 +248,/datadrive/videos/txPg33J97R4-b846c110494f1c621d175338fe1f4e42.webm,93299adbd0b64727b7fe6079aa3709e5.webm,248.0,False,64k,0.54,,,,,7.0,False,False,,txPg33J97R4-b846c110494f1c621d175338fe1f4e42,webm,txPg33J97R4-b846c110494f1c621d175338fe1f4e42.webm,txPg33J97R4-b846c110494f1c621d175338fe1f4e42.webm +249,/datadrive/videos/0JQpBUG7kP8-dfc38248b5967e3136b676cb70de01ba.mp4,2d9e300c35d64e0b807fa2bf892d5862.ogv,249.0,,128k,,[0.03 0.15],ogv,0.01,logos/fox.png,,False,False,,0JQpBUG7kP8-dfc38248b5967e3136b676cb70de01ba,mp4,0JQpBUG7kP8-dfc38248b5967e3136b676cb70de01ba.mp4,0JQpBUG7kP8-dfc38248b5967e3136b676cb70de01ba.mp4 +250,/datadrive/videos/qRP6ruit2mA-4ed8299d892230b0c96dc5ecce67f7ae.webm,994b6338ea8f47868db8bedd9aad8fe9.webm,250.0,,16k,0.47,[0.17 0.07],,-0.1,,,False,True,0.1,qRP6ruit2mA-4ed8299d892230b0c96dc5ecce67f7ae,webm,qRP6ruit2mA-4ed8299d892230b0c96dc5ecce67f7ae.webm,qRP6ruit2mA-4ed8299d892230b0c96dc5ecce67f7ae.webm +251,/datadrive/videos/vt7th4jeBK8-627f8ce674f6a5346f00256145fa1297.webm,585b4e7f348e47d69ad2855d54e5e432.webm,251.0,True,16k,,,,,,9.0,False,False,,vt7th4jeBK8-627f8ce674f6a5346f00256145fa1297,webm,vt7th4jeBK8-627f8ce674f6a5346f00256145fa1297.webm,vt7th4jeBK8-627f8ce674f6a5346f00256145fa1297.webm +252,/datadrive/videos/y-bLKCswzZE-f1de4a1faafd9e07e80f9bcf85d3ac6f.mp4,20e3d24725e745ec98a256303454df14.webm,252.0,,16k,,,webm,-0.1,logos/msnbc.png,5.0,False,False,,y-bLKCswzZE-f1de4a1faafd9e07e80f9bcf85d3ac6f,mp4,y-bLKCswzZE-f1de4a1faafd9e07e80f9bcf85d3ac6f.mp4,y-bLKCswzZE-f1de4a1faafd9e07e80f9bcf85d3ac6f.mp4 +254,/datadrive/videos/3OsNbYCMoC0-fc57dac34999dd1bd3019287d793655f.webm,a1da53454366402ab77ddc8ff4640b46.webm,254.0,,,0.96,[0.08 0.04],,0.18,,,False,True,-0.12,3OsNbYCMoC0-fc57dac34999dd1bd3019287d793655f,webm,3OsNbYCMoC0-fc57dac34999dd1bd3019287d793655f.webm,3OsNbYCMoC0-fc57dac34999dd1bd3019287d793655f.webm +255,/datadrive/videos/c2ISG0iIfwM-cfcbe6ac834458956063caeb03f6d543.mp4,6d915123fc3d42e699b2d364db5f2130.mp4,255.0,,16k,0.29,,,0.03,,2.0,False,False,,c2ISG0iIfwM-cfcbe6ac834458956063caeb03f6d543,mp4,c2ISG0iIfwM-cfcbe6ac834458956063caeb03f6d543.mp4,c2ISG0iIfwM-cfcbe6ac834458956063caeb03f6d543.mp4 +256,/datadrive/videos/gIN_iWGReMs-c0a131922b5052afbfcbc4266727c3e7.webm,9a1ed300e3d14f9eb09a217c87b40638.webm,256.0,,16k,,[0.06 0.13],,,logos/fox.png,1.0,False,True,,gIN_iWGReMs-c0a131922b5052afbfcbc4266727c3e7,webm,gIN_iWGReMs-c0a131922b5052afbfcbc4266727c3e7.webm,gIN_iWGReMs-c0a131922b5052afbfcbc4266727c3e7.webm +257,/datadrive/videos/OCA0RGX29iI-7fb210395aae746aa83bf20a5b7f4088.mp4,3414658610bf4f9a92d7d8ecb4b39708.mp4,257.0,False,,,[0.13 0.19],,,,6.0,False,True,-0.35,OCA0RGX29iI-7fb210395aae746aa83bf20a5b7f4088,mp4,OCA0RGX29iI-7fb210395aae746aa83bf20a5b7f4088.mp4,OCA0RGX29iI-7fb210395aae746aa83bf20a5b7f4088.mp4 +258,/datadrive/videos/TUO5IJ88DH4-fb587dc7013a93f9c0f8f3d2425794e6.webm,33117c12d78d4accb441212b6e09a414.ogv,258.0,False,,0.42,,ogv,,logos/msnbc.png,6.0,False,True,,TUO5IJ88DH4-fb587dc7013a93f9c0f8f3d2425794e6,webm,TUO5IJ88DH4-fb587dc7013a93f9c0f8f3d2425794e6.webm,TUO5IJ88DH4-fb587dc7013a93f9c0f8f3d2425794e6.webm +259,/datadrive/videos/K8tDOvECLFQ-79d4417bfe8c36ff52a37a0049252c3e.webm,6694473bce6a4ef792965107adce24b8.webm,259.0,True,64k,,,,,logos/jazeera.png,,False,False,0.12,K8tDOvECLFQ-79d4417bfe8c36ff52a37a0049252c3e,webm,K8tDOvECLFQ-79d4417bfe8c36ff52a37a0049252c3e.webm,K8tDOvECLFQ-79d4417bfe8c36ff52a37a0049252c3e.webm +260,/datadrive/videos/rmPRC1ZSgsw-fcd380052c11d443522723c1936b8733.mp4,04da0835050b472689abff6fbb47515c.ogv,260.0,False,16k,0.25,,ogv,0.02,logos/jazeera.png,3.0,False,True,,rmPRC1ZSgsw-fcd380052c11d443522723c1936b8733,mp4,rmPRC1ZSgsw-fcd380052c11d443522723c1936b8733.mp4,rmPRC1ZSgsw-fcd380052c11d443522723c1936b8733.mp4 +263,/datadrive/videos/ClFMA0hTAj0-1c133ff9b289133f80d8ff46380e3976.mp4,6bb05f5ac21b44de9566c1bec4e9230e.mp4,263.0,,16k,,[0.15 0.03],,-0.11,logos/msnbc.png,,True,True,,ClFMA0hTAj0-1c133ff9b289133f80d8ff46380e3976,mp4,ClFMA0hTAj0-1c133ff9b289133f80d8ff46380e3976.mp4,ClFMA0hTAj0-1c133ff9b289133f80d8ff46380e3976.mp4 +264,/datadrive/videos/r5c4tCuZjTA-b908c2c90bc8cbd55f2ffe90220286c2.webm,9052225036ee4829902c6a35755f0393.webm,264.0,,,0.53,[0. 0.1],,-0.16,logos/download.png,6.0,True,False,-0.19,r5c4tCuZjTA-b908c2c90bc8cbd55f2ffe90220286c2,webm,r5c4tCuZjTA-b908c2c90bc8cbd55f2ffe90220286c2.webm,r5c4tCuZjTA-b908c2c90bc8cbd55f2ffe90220286c2.webm +265,/datadrive/videos/uRsLyWR_yHM-d4d26b3174d11a9cc6ba3f352ab60293.webm,4a85012a373f48d4afe3731bced6a4b7.webm,265.0,,128k,,,,0.04,logos/another.gif,,False,True,,uRsLyWR_yHM-d4d26b3174d11a9cc6ba3f352ab60293,webm,uRsLyWR_yHM-d4d26b3174d11a9cc6ba3f352ab60293.webm,uRsLyWR_yHM-d4d26b3174d11a9cc6ba3f352ab60293.webm +266,/datadrive/videos/94g4ysN4qVs-657067b21447935a88b4da5a1a74eeac.mp4,bd67373afbcb43c987ddfa7507f71334.mp4,266.0,,,,[0.14 0.15],,,logos/msnbc.png,,False,False,-0.35,94g4ysN4qVs-657067b21447935a88b4da5a1a74eeac,mp4,94g4ysN4qVs-657067b21447935a88b4da5a1a74eeac.mp4,94g4ysN4qVs-657067b21447935a88b4da5a1a74eeac.mp4 +268,/datadrive/videos/gTqdmhzrC9A-69b8c923a1d9c7954c126b56ea76db14.mp4,d33dd8805c06406aa04887b283a7d42c.ogv,268.0,,32k,0.76,[0.03 0.04],ogv,,logos/msnbc.png,,False,True,0.34,gTqdmhzrC9A-69b8c923a1d9c7954c126b56ea76db14,mp4,gTqdmhzrC9A-69b8c923a1d9c7954c126b56ea76db14.mp4,gTqdmhzrC9A-69b8c923a1d9c7954c126b56ea76db14.mp4 +269,/datadrive/videos/2a-kIfRT6l0-dc605c70d71988c532b0394624d57f42.webm,6007218106064ad7b5eed1d910b55f4c.ogv,269.0,True,32k,,[0.02 0.17],ogv,,,,False,False,,2a-kIfRT6l0-dc605c70d71988c532b0394624d57f42,webm,2a-kIfRT6l0-dc605c70d71988c532b0394624d57f42.webm,2a-kIfRT6l0-dc605c70d71988c532b0394624d57f42.webm +272,/datadrive/videos/B0c585f_jCg-1b6ee2828e2019a6e3886aeae3100429.mp4,3993d9e5cc7d46e18cab5561b5633ee9.mp4,272.0,,64k,,,,-0.04,logos/another.gif,,True,False,0.02,B0c585f_jCg-1b6ee2828e2019a6e3886aeae3100429,mp4,B0c585f_jCg-1b6ee2828e2019a6e3886aeae3100429.mp4,B0c585f_jCg-1b6ee2828e2019a6e3886aeae3100429.mp4 +273,/datadrive/videos/yNRMAgXTRWY-99849d84f8274ea3ac148500d0241491.webm,06eb03ec97c84cf9804848c47fd320a7.webm,273.0,,,,,,-0.05,,,True,True,-0.26,yNRMAgXTRWY-99849d84f8274ea3ac148500d0241491,webm,yNRMAgXTRWY-99849d84f8274ea3ac148500d0241491.webm,yNRMAgXTRWY-99849d84f8274ea3ac148500d0241491.webm +275,/datadrive/videos/iGLSBZZCSF0-dbeb85c995a13a6e4da653e5e1f848c7.webm,4a5f237814b14be58058372ee786ebc0.webm,275.0,,128k,,[0.14 0.19],,0.03,,,False,True,-0.38,iGLSBZZCSF0-dbeb85c995a13a6e4da653e5e1f848c7,webm,iGLSBZZCSF0-dbeb85c995a13a6e4da653e5e1f848c7.webm,iGLSBZZCSF0-dbeb85c995a13a6e4da653e5e1f848c7.webm +277,/datadrive/videos/1qEIxFP48Xc-6cca9581fbff6cf6b525d43a5969f84f.webm,be72ced1439a4187b8ebebf7fc6b9989.webm,277.0,,,,[0.04 0.18],,,,,False,False,-0.19,1qEIxFP48Xc-6cca9581fbff6cf6b525d43a5969f84f,webm,1qEIxFP48Xc-6cca9581fbff6cf6b525d43a5969f84f.webm,1qEIxFP48Xc-6cca9581fbff6cf6b525d43a5969f84f.webm +278,/datadrive/videos/Hl5wDRKnNL0-84367196aeb52385a9283110755e65f4.webm,3a58fd191d7d458a9b5c5b2a9e55af32.ogv,278.0,False,128k,0.43,[0.12 0.11],ogv,-0.13,,3.0,True,False,,Hl5wDRKnNL0-84367196aeb52385a9283110755e65f4,webm,Hl5wDRKnNL0-84367196aeb52385a9283110755e65f4.webm,Hl5wDRKnNL0-84367196aeb52385a9283110755e65f4.webm +279,/datadrive/videos/ccbU4fEKjOQ-ed4dc2bde2e2d8f582b8b8b5ff74631b.mp4,30daa407d51747548f56d30511ebcb59.mp4,279.0,False,128k,,[0.07 0. ],,-0.04,logos/jazeera.png,4.0,False,True,,ccbU4fEKjOQ-ed4dc2bde2e2d8f582b8b8b5ff74631b,mp4,ccbU4fEKjOQ-ed4dc2bde2e2d8f582b8b8b5ff74631b.mp4,ccbU4fEKjOQ-ed4dc2bde2e2d8f582b8b8b5ff74631b.mp4 +280,/datadrive/videos/dxZ4p7oRNpQ-9a9db9fca309340e31660b2b9c0c01f1.mp4,4acd5a9585a44bf48abb959ab65e5b2b.webm,280.0,,64k,0.63,,webm,,logos/sbt.gif,5.0,False,False,,dxZ4p7oRNpQ-9a9db9fca309340e31660b2b9c0c01f1,mp4,dxZ4p7oRNpQ-9a9db9fca309340e31660b2b9c0c01f1.mp4,dxZ4p7oRNpQ-9a9db9fca309340e31660b2b9c0c01f1.mp4 +281,/datadrive/videos/0ddq2W47_u8-a9d1436f20ffb06f41ea02deb649b7fd.mp4,7224603645694bd6ac49751f9c75c428.ogv,281.0,False,16k,0.47,,ogv,0.03,,,False,False,-0.17,0ddq2W47_u8-a9d1436f20ffb06f41ea02deb649b7fd,mp4,0ddq2W47_u8-a9d1436f20ffb06f41ea02deb649b7fd.mp4,0ddq2W47_u8-a9d1436f20ffb06f41ea02deb649b7fd.mp4 +282,/datadrive/videos/ftXeM1Y0Qfo-d6044274d6c7c0b604f9ac273447a6ce.mp4,1122464731ab4e00ba5c7a8d7f815327.ogv,282.0,False,16k,0.92,,ogv,0.16,,7.0,False,False,,ftXeM1Y0Qfo-d6044274d6c7c0b604f9ac273447a6ce,mp4,ftXeM1Y0Qfo-d6044274d6c7c0b604f9ac273447a6ce.mp4,ftXeM1Y0Qfo-d6044274d6c7c0b604f9ac273447a6ce.mp4 +283,/datadrive/videos/67QrYGbt380-97e66b06c5ed50bc674c625e13f70750.webm,39d86524d6694f90a76a181ca0e1d635.mp4,283.0,,16k,0.24,,mp4,0.1,logos/new.gif,,False,False,,67QrYGbt380-97e66b06c5ed50bc674c625e13f70750,webm,67QrYGbt380-97e66b06c5ed50bc674c625e13f70750.webm,67QrYGbt380-97e66b06c5ed50bc674c625e13f70750.webm +285,/datadrive/videos/0rYkjJA8Tdk-b0e3b673bb42e568c4738cef9a7411fa.mp4,44f0ff2cabfb481ea01125da92a843ea.mp4,285.0,,,0.98,,mp4,0.15,,6.0,False,False,-0.01,0rYkjJA8Tdk-b0e3b673bb42e568c4738cef9a7411fa,mp4,0rYkjJA8Tdk-b0e3b673bb42e568c4738cef9a7411fa.mp4,0rYkjJA8Tdk-b0e3b673bb42e568c4738cef9a7411fa.mp4 +288,/datadrive/videos/qKA14n2w5JE-ea38b5a9492770c41611f19ef580c0b5.webm,2a0eb1fe536c47a78f45cf93e7f5bcf7.mp4,288.0,True,64k,,[0.1 0. ],mp4,0.15,,,False,False,,qKA14n2w5JE-ea38b5a9492770c41611f19ef580c0b5,webm,qKA14n2w5JE-ea38b5a9492770c41611f19ef580c0b5.webm,qKA14n2w5JE-ea38b5a9492770c41611f19ef580c0b5.webm +290,/datadrive/videos/LBzKvMEXH9A-215ab38cd69d37e819f795deeef75606.webm,460f50a9e07e437fb70c06f1b0d4b335.webm,290.0,False,64k,0.71,[0.06 0.04],,0.09,,,False,False,,LBzKvMEXH9A-215ab38cd69d37e819f795deeef75606,webm,LBzKvMEXH9A-215ab38cd69d37e819f795deeef75606.webm,LBzKvMEXH9A-215ab38cd69d37e819f795deeef75606.webm +291,/datadrive/videos/GfoKkUIzbjA-0fc69ee07cdaafa836651abda9576760.webm,400700151b5740bfae4ab5dea1179675.ogv,291.0,True,,0.66,[0.17 0.09],ogv,-0.05,,2.0,False,False,,GfoKkUIzbjA-0fc69ee07cdaafa836651abda9576760,webm,GfoKkUIzbjA-0fc69ee07cdaafa836651abda9576760.webm,GfoKkUIzbjA-0fc69ee07cdaafa836651abda9576760.webm +292,/datadrive/videos/xEZdLNP6ges-1fc3857ed4e65ebd264fb76f8f25088a.webm,a3c0a75c44bb4f01af4274d9524a8cbd.ogv,292.0,,128k,0.72,,ogv,,logos/another.gif,,False,True,-0.05,xEZdLNP6ges-1fc3857ed4e65ebd264fb76f8f25088a,webm,xEZdLNP6ges-1fc3857ed4e65ebd264fb76f8f25088a.webm,xEZdLNP6ges-1fc3857ed4e65ebd264fb76f8f25088a.webm +293,/datadrive/videos/jU3s1bjij_4-bc6ae4a7e2ec600f54bd31830aa0fee1.mp4,4eb1f78e80f1476f84e08a05fa62413d.mp4,293.0,,,,[0.04 0. ],,,logos/fox.png,,False,False,,jU3s1bjij_4-bc6ae4a7e2ec600f54bd31830aa0fee1,mp4,jU3s1bjij_4-bc6ae4a7e2ec600f54bd31830aa0fee1.mp4,jU3s1bjij_4-bc6ae4a7e2ec600f54bd31830aa0fee1.mp4 +294,/datadrive/videos/O9ZvtIq9rn4-e41180013f8099519865b7fbc1d246b3.mp4,d3c0d8b1df5344fc8833d2ca9cd490d4.webm,294.0,False,,0.97,,webm,-0.19,logos/msnbc.png,,True,False,0.36,O9ZvtIq9rn4-e41180013f8099519865b7fbc1d246b3,mp4,O9ZvtIq9rn4-e41180013f8099519865b7fbc1d246b3.mp4,O9ZvtIq9rn4-e41180013f8099519865b7fbc1d246b3.mp4 +295,/datadrive/videos/otVnw-nmG9U-4287d9783919c4bb81143182a0af01c6.webm,74a33e45f5084e5b94c386472b9c9651.webm,295.0,False,,0.81,[0.11 0.19],,,logos/ge.gif,,False,True,,otVnw-nmG9U-4287d9783919c4bb81143182a0af01c6,webm,otVnw-nmG9U-4287d9783919c4bb81143182a0af01c6.webm,otVnw-nmG9U-4287d9783919c4bb81143182a0af01c6.webm +296,/datadrive/videos/w_4muCmD7bM-12fe6e7f1124963079a7c8c207a34ffe.webm,87df7be2dae74e4495181b75561cf2eb.mp4,296.0,,,,,mp4,,logos/new.gif,,True,True,,w_4muCmD7bM-12fe6e7f1124963079a7c8c207a34ffe,webm,w_4muCmD7bM-12fe6e7f1124963079a7c8c207a34ffe.webm,w_4muCmD7bM-12fe6e7f1124963079a7c8c207a34ffe.webm +297,/datadrive/videos/T5n5PiMF93s-42c5b2f4bca04483e5fe23cdf38c3b7c.mp4,fead05392d9843a996703ad4e1e8659e.mp4,297.0,,,,[0.16 0.03],,,logos/new.gif,,False,False,,T5n5PiMF93s-42c5b2f4bca04483e5fe23cdf38c3b7c,mp4,T5n5PiMF93s-42c5b2f4bca04483e5fe23cdf38c3b7c.mp4,T5n5PiMF93s-42c5b2f4bca04483e5fe23cdf38c3b7c.mp4 +298,/datadrive/videos/2GgcAyiuPcI-0967a86cf748d99870a66d344d6db4e5.mp4,8659bfe957fa42369e88fd90f4150635.webm,298.0,,16k,0.94,[0.14 0.11],webm,,logos/fox.png,,False,True,-0.02,2GgcAyiuPcI-0967a86cf748d99870a66d344d6db4e5,mp4,2GgcAyiuPcI-0967a86cf748d99870a66d344d6db4e5.mp4,2GgcAyiuPcI-0967a86cf748d99870a66d344d6db4e5.mp4 +299,/datadrive/videos/7No_PGUghTQ-1e620148a35f69f0cd6f9425247485ec.mp4,5a2c6803878b4ae99c246cd1daee935f.ogv,299.0,,,,,ogv,0.16,,,False,True,0.15,7No_PGUghTQ-1e620148a35f69f0cd6f9425247485ec,mp4,7No_PGUghTQ-1e620148a35f69f0cd6f9425247485ec.mp4,7No_PGUghTQ-1e620148a35f69f0cd6f9425247485ec.mp4 +300,/datadrive/videos/D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256.webm,8f7890cfce3443f5b5fad12b7e9f07f2.ogv,300.0,False,,,,ogv,-0.19,logos/download.png,,False,False,0.22,D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256,webm,D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256.webm,D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256.webm +301,/datadrive/videos/uAh0yjzcwrc-03b3d2d47e7ade9ec0207f6614ecb66e.webm,c9a2c8bd2bc34c57aafdc855d3203eda.ogv,301.0,False,128k,,,ogv,,logos/new.gif,,True,True,0.02,uAh0yjzcwrc-03b3d2d47e7ade9ec0207f6614ecb66e,webm,uAh0yjzcwrc-03b3d2d47e7ade9ec0207f6614ecb66e.webm,uAh0yjzcwrc-03b3d2d47e7ade9ec0207f6614ecb66e.webm +302,/datadrive/videos/94g4ysN4qVs-657067b21447935a88b4da5a1a74eeac.mp4,33aac03ddb8442cfbfaddeb9cf827abb.webm,302.0,,128k,,,webm,-0.05,,,False,False,0.0,94g4ysN4qVs-657067b21447935a88b4da5a1a74eeac,mp4,94g4ysN4qVs-657067b21447935a88b4da5a1a74eeac.mp4,94g4ysN4qVs-657067b21447935a88b4da5a1a74eeac.mp4 +303,/datadrive/videos/E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d.mp4,4b0c4433b66a452393ed37d47d409006.mp4,303.0,,,0.62,[0.08 0.18],,0.18,logos/openair.gif,8.0,False,True,,E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d,mp4,E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d.mp4,E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d.mp4 +304,/datadrive/videos/DIdgEqiKfDs-20f40191bf0bb9e9e3a8930d6f9ec7ca.mp4,0aeba1cba8144043ad089650896ce46f.ogv,304.0,True,,,,ogv,-0.01,,,False,False,-0.37,DIdgEqiKfDs-20f40191bf0bb9e9e3a8930d6f9ec7ca,mp4,DIdgEqiKfDs-20f40191bf0bb9e9e3a8930d6f9ec7ca.mp4,DIdgEqiKfDs-20f40191bf0bb9e9e3a8930d6f9ec7ca.mp4 +305,/datadrive/videos/h7jPCgyLA10-7c86bb643a328c155b86d83c25c2d009.mp4,0c7f246160174eb4ab7a0e26199d4014.mp4,305.0,False,128k,0.93,[0.01 0.09],mp4,,,4.0,False,False,0.12,h7jPCgyLA10-7c86bb643a328c155b86d83c25c2d009,mp4,h7jPCgyLA10-7c86bb643a328c155b86d83c25c2d009.mp4,h7jPCgyLA10-7c86bb643a328c155b86d83c25c2d009.mp4 +306,/datadrive/videos/PzOIKQI8Yxs-c2a0784eba56efe1bf1460b0c5b420db.webm,6db15133729147968733013fe9134463.mp4,306.0,False,16k,0.75,[0.02 0.18],mp4,,,0.0,False,True,-0.4,PzOIKQI8Yxs-c2a0784eba56efe1bf1460b0c5b420db,webm,PzOIKQI8Yxs-c2a0784eba56efe1bf1460b0c5b420db.webm,PzOIKQI8Yxs-c2a0784eba56efe1bf1460b0c5b420db.webm +307,/datadrive/videos/D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256.webm,cbb1cb9aa3b14e79beb547a11b65b7d4.webm,307.0,,16k,0.52,[0.15 0.17],,,logos/jazeera.png,9.0,False,True,0.18,D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256,webm,D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256.webm,D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256.webm +308,/datadrive/videos/rb5iOiuTmK0-6069b21dbc5ec74742a663cdcc0d2cf6.webm,7b143329b49a465a8ccab540b8e6e6d2.webm,308.0,,,,,webm,,logos/sbt.gif,,False,False,-0.04,rb5iOiuTmK0-6069b21dbc5ec74742a663cdcc0d2cf6,webm,rb5iOiuTmK0-6069b21dbc5ec74742a663cdcc0d2cf6.webm,rb5iOiuTmK0-6069b21dbc5ec74742a663cdcc0d2cf6.webm +309,/datadrive/videos/LKYZnj_L-2k-2a3366bb743329900c0add1261ac4665.webm,0d0cc332a5c646d084a9e98e01537194.webm,309.0,,64k,,,,0.09,,,False,True,,LKYZnj_L-2k-2a3366bb743329900c0add1261ac4665,webm,LKYZnj_L-2k-2a3366bb743329900c0add1261ac4665.webm,LKYZnj_L-2k-2a3366bb743329900c0add1261ac4665.webm +310,/datadrive/videos/aOLk5KFvBPg-431908978221bd01fd18ed378bc0702b.webm,a63ace92d2dc40048cbc1b26cdd20b3e.mp4,310.0,,128k,0.88,[0.15 0.12],mp4,0.19,,,False,False,0.39,aOLk5KFvBPg-431908978221bd01fd18ed378bc0702b,webm,aOLk5KFvBPg-431908978221bd01fd18ed378bc0702b.webm,aOLk5KFvBPg-431908978221bd01fd18ed378bc0702b.webm +312,/datadrive/videos/6W7LZz3tppg-01f14638cacc7deff5986d699cc9022e.webm,a2b5e547c3e847b9bc97910c0ac6fffd.webm,312.0,,,0.2,[0.09 0.19],,-0.02,logos/sbt.gif,,False,False,-0.2,6W7LZz3tppg-01f14638cacc7deff5986d699cc9022e,webm,6W7LZz3tppg-01f14638cacc7deff5986d699cc9022e.webm,6W7LZz3tppg-01f14638cacc7deff5986d699cc9022e.webm +313,/datadrive/videos/uBpM9JOItVs-59013a0702ada77d8f84c5e4cb68badb.mp4,77302f3796f74414804b6bfbd9127462.ogv,313.0,,,0.45,,ogv,,logos/download.png,,False,True,0.08,uBpM9JOItVs-59013a0702ada77d8f84c5e4cb68badb,mp4,uBpM9JOItVs-59013a0702ada77d8f84c5e4cb68badb.mp4,uBpM9JOItVs-59013a0702ada77d8f84c5e4cb68badb.mp4 +314,/datadrive/videos/82KKCxXUAW8-bb274a3c804764d45d8daa89f170949e.mp4,c6391a5642cc45d7a7db6ea6076aab80.mp4,314.0,,16k,,,,-0.16,,,False,False,,82KKCxXUAW8-bb274a3c804764d45d8daa89f170949e,mp4,82KKCxXUAW8-bb274a3c804764d45d8daa89f170949e.mp4,82KKCxXUAW8-bb274a3c804764d45d8daa89f170949e.mp4 +315,/datadrive/videos/XjlMGC3wJIQ-003358afc7970a7bc59e4b28bc5d8857.mp4,62b7112a4acc4ed2b5210403f79a6f97.ogv,315.0,False,16k,,[0.04 0.17],ogv,-0.03,,3.0,False,True,-0.1,XjlMGC3wJIQ-003358afc7970a7bc59e4b28bc5d8857,mp4,XjlMGC3wJIQ-003358afc7970a7bc59e4b28bc5d8857.mp4,XjlMGC3wJIQ-003358afc7970a7bc59e4b28bc5d8857.mp4 +316,/datadrive/videos/vrEa0mkxoeo-8c1e682f2e7c182e811ce604711158e8.webm,73d5e25be82a438d9cee2c8122d810e3.webm,316.0,,,0.82,,,-0.01,logos/sbt.gif,,True,True,,vrEa0mkxoeo-8c1e682f2e7c182e811ce604711158e8,webm,vrEa0mkxoeo-8c1e682f2e7c182e811ce604711158e8.webm,vrEa0mkxoeo-8c1e682f2e7c182e811ce604711158e8.webm +317,/datadrive/videos/O01gadD46Xc-58f745fb330b40f4a6db119771760d9b.mp4,12e6ca8f1c304a44b927fa4a6be95801.mp4,317.0,,16k,,,,-0.2,logos/ge.gif,4.0,False,False,,O01gadD46Xc-58f745fb330b40f4a6db119771760d9b,mp4,O01gadD46Xc-58f745fb330b40f4a6db119771760d9b.mp4,O01gadD46Xc-58f745fb330b40f4a6db119771760d9b.mp4 +318,/datadrive/videos/rsH5GaW7o3w-a9e58f0fa9744a4db038e111a3679927.webm,6798cede7ab64809869d20bb07c61ff2.webm,318.0,True,128k,,,webm,0.04,logos/new.gif,4.0,False,True,,rsH5GaW7o3w-a9e58f0fa9744a4db038e111a3679927,webm,rsH5GaW7o3w-a9e58f0fa9744a4db038e111a3679927.webm,rsH5GaW7o3w-a9e58f0fa9744a4db038e111a3679927.webm +319,/datadrive/videos/R3BkEn7pNFk-d21896b1d2d8d6b549a09d198d94f9d2.webm,c3bca1ccc1c842c6b9e0c1a3e9eedb41.ogv,319.0,False,128k,,,ogv,,,6.0,False,False,,R3BkEn7pNFk-d21896b1d2d8d6b549a09d198d94f9d2,webm,R3BkEn7pNFk-d21896b1d2d8d6b549a09d198d94f9d2.webm,R3BkEn7pNFk-d21896b1d2d8d6b549a09d198d94f9d2.webm +320,/datadrive/videos/A4m9YvUzG2Y-ed876e1b27995cff531358ca11d7de60.webm,6e75236e73ad456999accf246d618560.webm,320.0,,,0.94,,,,,5.0,False,True,-0.35,A4m9YvUzG2Y-ed876e1b27995cff531358ca11d7de60,webm,A4m9YvUzG2Y-ed876e1b27995cff531358ca11d7de60.webm,A4m9YvUzG2Y-ed876e1b27995cff531358ca11d7de60.webm +321,/datadrive/videos/fSSeYeoYCqo-a0b5188bdc330a122b5c2a30d62e70c7.webm,109d03da7a0147279ecda0ff9b30e492.mp4,321.0,False,,,,mp4,,logos/fox.png,1.0,False,True,-0.2,fSSeYeoYCqo-a0b5188bdc330a122b5c2a30d62e70c7,webm,fSSeYeoYCqo-a0b5188bdc330a122b5c2a30d62e70c7.webm,fSSeYeoYCqo-a0b5188bdc330a122b5c2a30d62e70c7.webm +322,/datadrive/videos/qFZ-54LwQtM-2e114547759e503204fd8f6ebc79aac3.webm,601e7031591b488c92555cf274abfafe.ogv,322.0,True,16k,,,ogv,-0.16,,,False,True,0.33,qFZ-54LwQtM-2e114547759e503204fd8f6ebc79aac3,webm,qFZ-54LwQtM-2e114547759e503204fd8f6ebc79aac3.webm,qFZ-54LwQtM-2e114547759e503204fd8f6ebc79aac3.webm +323,/datadrive/videos/lnZNiivm2zU-e1caaa59e5479f037914e52e0893cc6e.mp4,17f60675f799466d85fad43d6a9ec475.mp4,323.0,,64k,0.95,,,0.09,,,False,True,0.05,lnZNiivm2zU-e1caaa59e5479f037914e52e0893cc6e,mp4,lnZNiivm2zU-e1caaa59e5479f037914e52e0893cc6e.mp4,lnZNiivm2zU-e1caaa59e5479f037914e52e0893cc6e.mp4 +324,/datadrive/videos/Jgibra5GtiI-cff0c30a71a5af0418d7133e82b625e4.webm,084719820fbc4d7aa8c993b08ba6e28a.mp4,324.0,False,16k,,[0.01 0.07],mp4,0.01,,,False,False,0.14,Jgibra5GtiI-cff0c30a71a5af0418d7133e82b625e4,webm,Jgibra5GtiI-cff0c30a71a5af0418d7133e82b625e4.webm,Jgibra5GtiI-cff0c30a71a5af0418d7133e82b625e4.webm +325,/datadrive/videos/uiTSFmwD9y4-a899ea78596f5f8d0a3894c89c1a4d63.webm,2b9b99b591904444801578643043ecd1.webm,325.0,False,,0.68,[0.17 0.19],,0.09,,,False,True,-0.08,uiTSFmwD9y4-a899ea78596f5f8d0a3894c89c1a4d63,webm,uiTSFmwD9y4-a899ea78596f5f8d0a3894c89c1a4d63.webm,uiTSFmwD9y4-a899ea78596f5f8d0a3894c89c1a4d63.webm +327,/datadrive/videos/84gbCyDsKMU-b6dea8cdd553f0f2f85e235cfc539fec.webm,82033bb79d234e19a6703edb1fe3f82b.ogv,327.0,True,16k,,,ogv,,logos/sbt.gif,9.0,False,True,-0.27,84gbCyDsKMU-b6dea8cdd553f0f2f85e235cfc539fec,webm,84gbCyDsKMU-b6dea8cdd553f0f2f85e235cfc539fec.webm,84gbCyDsKMU-b6dea8cdd553f0f2f85e235cfc539fec.webm +328,/datadrive/videos/EVAG44KrgwQ-233ad2acf2507a41d043f2afe39e3b16.webm,89ac777cad1c4d28b1ea976a7c3e7b2a.webm,328.0,,32k,,,,0.13,logos/fox.png,,False,False,-0.4,EVAG44KrgwQ-233ad2acf2507a41d043f2afe39e3b16,webm,EVAG44KrgwQ-233ad2acf2507a41d043f2afe39e3b16.webm,EVAG44KrgwQ-233ad2acf2507a41d043f2afe39e3b16.webm +329,/datadrive/videos/dUHj8SQel-8-6be8a962e0ff2b7d4a2cc2ce34da5c5f.webm,8fecef3ed8c04bd19a783a498dfe47ca.ogv,329.0,,,0.73,[0.01 0.16],ogv,,logos/sbt.gif,9.0,False,False,,dUHj8SQel-8-6be8a962e0ff2b7d4a2cc2ce34da5c5f,webm,dUHj8SQel-8-6be8a962e0ff2b7d4a2cc2ce34da5c5f.webm,dUHj8SQel-8-6be8a962e0ff2b7d4a2cc2ce34da5c5f.webm +331,/datadrive/videos/9H_zNXMgTNE-49e34b8bb457bd873cf7dda0679df43c.webm,2ba5473ba61d4ecbbd112e47e4ce76c9.ogv,331.0,False,16k,0.5,,ogv,,logos/fox.png,,False,False,,9H_zNXMgTNE-49e34b8bb457bd873cf7dda0679df43c,webm,9H_zNXMgTNE-49e34b8bb457bd873cf7dda0679df43c.webm,9H_zNXMgTNE-49e34b8bb457bd873cf7dda0679df43c.webm +332,/datadrive/videos/NhOmmNB9TJM-b709edb7c2a06961a00a792125cc499f.mp4,31ed0b6842464e75a41b34019b308aed.mp4,332.0,,32k,0.24,,,,,5.0,False,True,,NhOmmNB9TJM-b709edb7c2a06961a00a792125cc499f,mp4,NhOmmNB9TJM-b709edb7c2a06961a00a792125cc499f.mp4,NhOmmNB9TJM-b709edb7c2a06961a00a792125cc499f.mp4 +333,/datadrive/videos/oMIk_AXdMV4-28480ad690e153d077d05740f1d2a8c6.mp4,82579644986840efbb6ffcbc42185a5e.mp4,333.0,False,,0.81,,,,logos/msnbc.png,,False,True,-0.32,oMIk_AXdMV4-28480ad690e153d077d05740f1d2a8c6,mp4,oMIk_AXdMV4-28480ad690e153d077d05740f1d2a8c6.mp4,oMIk_AXdMV4-28480ad690e153d077d05740f1d2a8c6.mp4 +334,/datadrive/videos/bcgczxP1PrU-873021e79fe61eaefbbde9eb426d0084.webm,d61698a0c09c4afdbbe69914458ea65c.mp4,334.0,False,,,,mp4,,logos/new.gif,,False,True,,bcgczxP1PrU-873021e79fe61eaefbbde9eb426d0084,webm,bcgczxP1PrU-873021e79fe61eaefbbde9eb426d0084.webm,bcgczxP1PrU-873021e79fe61eaefbbde9eb426d0084.webm +335,/datadrive/videos/_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3.mp4,af2713b83b42470d85098e8906c7c808.mp4,335.0,,,,,mp4,,,0.0,False,False,-0.3,_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3,mp4,_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3.mp4,_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3.mp4 +336,/datadrive/videos/Ki_zcehbtRs-0b01394092f8fc8de830507bea65d78a.mp4,49d9ddb1b5f044cc9e43ec5ae968d83a.mp4,336.0,False,,0.76,,,,,1.0,False,True,,Ki_zcehbtRs-0b01394092f8fc8de830507bea65d78a,mp4,Ki_zcehbtRs-0b01394092f8fc8de830507bea65d78a.mp4,Ki_zcehbtRs-0b01394092f8fc8de830507bea65d78a.mp4 +337,/datadrive/videos/lNf39btbESQ-44941213d84309d49a999daf344bc536.webm,97beabed447144798fd63106e0d62c16.webm,337.0,True,,0.63,[0.18 0.15],,,,,False,False,,lNf39btbESQ-44941213d84309d49a999daf344bc536,webm,lNf39btbESQ-44941213d84309d49a999daf344bc536.webm,lNf39btbESQ-44941213d84309d49a999daf344bc536.webm +338,/datadrive/videos/G_Q9IKbtYOk-7bc3b115458d1ba1798cd7e512a8d6aa.mp4,30133f439d5f4b118336c7d8503d4110.mp4,338.0,False,,,[0.19 0.19],,0.15,,,False,False,,G_Q9IKbtYOk-7bc3b115458d1ba1798cd7e512a8d6aa,mp4,G_Q9IKbtYOk-7bc3b115458d1ba1798cd7e512a8d6aa.mp4,G_Q9IKbtYOk-7bc3b115458d1ba1798cd7e512a8d6aa.mp4 +339,/datadrive/videos/Bhkko7DCpHY-61f1fb00c42d363ff2e677b4c606de0c.webm,92dfe80de4b74261937c18b3bd7b0c51.webm,339.0,,128k,0.84,,webm,0.02,,9.0,False,False,-0.23,Bhkko7DCpHY-61f1fb00c42d363ff2e677b4c606de0c,webm,Bhkko7DCpHY-61f1fb00c42d363ff2e677b4c606de0c.webm,Bhkko7DCpHY-61f1fb00c42d363ff2e677b4c606de0c.webm +340,/datadrive/videos/hMZ2ypzIPUs-9acf918df62ff0f08efd5b18fe6ad39c.mp4,8c6603dbbffa4f80b7c4cf3b34eed2e2.mp4,340.0,False,,,,,,logos/new.gif,6.0,False,True,-0.18,hMZ2ypzIPUs-9acf918df62ff0f08efd5b18fe6ad39c,mp4,hMZ2ypzIPUs-9acf918df62ff0f08efd5b18fe6ad39c.mp4,hMZ2ypzIPUs-9acf918df62ff0f08efd5b18fe6ad39c.mp4 +342,/datadrive/videos/bfSQtUGCR8k-1ae6897168dd126a294d4a78397111bd.webm,65e9459062e042bf806c099b502e3154.webm,342.0,,,0.98,,,0.0,,,False,False,0.1,bfSQtUGCR8k-1ae6897168dd126a294d4a78397111bd,webm,bfSQtUGCR8k-1ae6897168dd126a294d4a78397111bd.webm,bfSQtUGCR8k-1ae6897168dd126a294d4a78397111bd.webm +343,/datadrive/videos/CqTBTeSi3XA-8f158f2ebb7ac0ae2be60ffbb7c42226.webm,b13d55c5af4f4123a34d3e90f3d528e2.ogv,343.0,,,,,ogv,,logos/new.gif,2.0,True,True,-0.32,CqTBTeSi3XA-8f158f2ebb7ac0ae2be60ffbb7c42226,webm,CqTBTeSi3XA-8f158f2ebb7ac0ae2be60ffbb7c42226.webm,CqTBTeSi3XA-8f158f2ebb7ac0ae2be60ffbb7c42226.webm +345,/datadrive/videos/D5tuNsZlf6g-421d37bfa5fbe82fd4790f6a4833eed0.mp4,48ec6cc254dd4841a7cf01fc7e1283e5.mp4,345.0,,,,,,,,9.0,False,True,,D5tuNsZlf6g-421d37bfa5fbe82fd4790f6a4833eed0,mp4,D5tuNsZlf6g-421d37bfa5fbe82fd4790f6a4833eed0.mp4,D5tuNsZlf6g-421d37bfa5fbe82fd4790f6a4833eed0.mp4 +346,/datadrive/videos/bdJssVqgX_Q-f2c80ac1c83da1bc0a2fa9bd9ba14fad.webm,474a0636592d407b88031aaf8aecaba9.webm,346.0,False,64k,,[0.04 0.1 ],,-0.09,logos/openair.gif,,False,True,-0.01,bdJssVqgX_Q-f2c80ac1c83da1bc0a2fa9bd9ba14fad,webm,bdJssVqgX_Q-f2c80ac1c83da1bc0a2fa9bd9ba14fad.webm,bdJssVqgX_Q-f2c80ac1c83da1bc0a2fa9bd9ba14fad.webm +347,/datadrive/videos/xho7XynGRA8-12f1002251e91685c6636be357ee8fb0.webm,1de6db32676e4751b356d0544305d166.webm,347.0,False,64k,0.76,[0.09 0.14],,,logos/download.png,,False,True,-0.37,xho7XynGRA8-12f1002251e91685c6636be357ee8fb0,webm,xho7XynGRA8-12f1002251e91685c6636be357ee8fb0.webm,xho7XynGRA8-12f1002251e91685c6636be357ee8fb0.webm +348,/datadrive/videos/Y3n2AN8V6zY-90b83e926a61c6494cfdda9efb9809a5.mp4,4889f5e7e78b4d34aac73eecbff3eb40.mp4,348.0,False,32k,0.27,[0.1 0.03],mp4,,,6.0,False,True,-0.34,Y3n2AN8V6zY-90b83e926a61c6494cfdda9efb9809a5,mp4,Y3n2AN8V6zY-90b83e926a61c6494cfdda9efb9809a5.mp4,Y3n2AN8V6zY-90b83e926a61c6494cfdda9efb9809a5.mp4 +349,/datadrive/videos/4LnjJW_P_oM-6f165c1faab10081ea8cd5e83d2e963e.mp4,bf21df470e0f41969018e824398f665a.mp4,349.0,,,,,,-0.03,,,False,False,,4LnjJW_P_oM-6f165c1faab10081ea8cd5e83d2e963e,mp4,4LnjJW_P_oM-6f165c1faab10081ea8cd5e83d2e963e.mp4,4LnjJW_P_oM-6f165c1faab10081ea8cd5e83d2e963e.mp4 +350,/datadrive/videos/jd-eOYV5TxA-f502db6d2295f23571d71295960db994.mp4,90ebbd205bff4910b6fb0dd4d2f93ff2.ogv,350.0,,,,[0. 0.17],ogv,0.17,logos/jazeera.png,,False,False,0.3,jd-eOYV5TxA-f502db6d2295f23571d71295960db994,mp4,jd-eOYV5TxA-f502db6d2295f23571d71295960db994.mp4,jd-eOYV5TxA-f502db6d2295f23571d71295960db994.mp4 +351,/datadrive/videos/OXgU5X73Hzo-2d697ace67d57c3ac68765ef0211ecb9.webm,b74b22388c0f487fb18018bb4a80fcdd.mp4,351.0,False,32k,0.78,[0. 0.05],mp4,,logos/msnbc.png,,False,True,0.12,OXgU5X73Hzo-2d697ace67d57c3ac68765ef0211ecb9,webm,OXgU5X73Hzo-2d697ace67d57c3ac68765ef0211ecb9.webm,OXgU5X73Hzo-2d697ace67d57c3ac68765ef0211ecb9.webm +352,/datadrive/videos/NrKj036u3bM-5bdf2790d5c81982b43d06a3195efc54.mp4,83cbd9070a034d66b9b34ef378ac144d.mp4,352.0,,16k,0.7,[0.07 0.02],,-0.11,logos/another.gif,,True,True,,NrKj036u3bM-5bdf2790d5c81982b43d06a3195efc54,mp4,NrKj036u3bM-5bdf2790d5c81982b43d06a3195efc54.mp4,NrKj036u3bM-5bdf2790d5c81982b43d06a3195efc54.mp4 +353,/datadrive/videos/nrlWbbPZXOs-639c22fa6f2494873904e80f49d98920.webm,41679985c04c4788aaab694a92ca30c0.webm,353.0,False,64k,,[0.13 0.09],,-0.11,,,False,True,,nrlWbbPZXOs-639c22fa6f2494873904e80f49d98920,webm,nrlWbbPZXOs-639c22fa6f2494873904e80f49d98920.webm,nrlWbbPZXOs-639c22fa6f2494873904e80f49d98920.webm +354,/datadrive/videos/g9AQ1G7Nfzc-0971fffce30037307b6abb842160baba.webm,89ad5e462385409eb4edd8e66917a14f.ogv,354.0,True,,0.45,,ogv,,logos/fox.png,,False,True,0.31,g9AQ1G7Nfzc-0971fffce30037307b6abb842160baba,webm,g9AQ1G7Nfzc-0971fffce30037307b6abb842160baba.webm,g9AQ1G7Nfzc-0971fffce30037307b6abb842160baba.webm +355,/datadrive/videos/_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3.mp4,7dac0c1c63d146bd995c5f4f127efd97.mp4,355.0,,,0.48,[0.04 0.05],,-0.11,logos/jazeera.png,,False,True,0.22,_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3,mp4,_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3.mp4,_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3.mp4 +356,/datadrive/videos/LN5dkJjCHbI-6d0b8ef99bb7e909c81166849150fb35.mp4,64046ab4145d4994aa18a6d9c0e53d40.mp4,356.0,,,,[0.12 0.06],,-0.02,,,False,False,-0.29,LN5dkJjCHbI-6d0b8ef99bb7e909c81166849150fb35,mp4,LN5dkJjCHbI-6d0b8ef99bb7e909c81166849150fb35.mp4,LN5dkJjCHbI-6d0b8ef99bb7e909c81166849150fb35.mp4 +357,/datadrive/videos/D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256.webm,082ababb1b974dac9a353fa2898c88db.mp4,357.0,,,0.71,,mp4,,,9.0,False,True,-0.08,D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256,webm,D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256.webm,D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256.webm +358,/datadrive/videos/WbXAGOrI2t8-4d8e749e6a7f8273dcef742b56e47a12.mp4,796e020ed1494e0983cd43d1f7531ef8.mp4,358.0,,,,[0.18 0.09],,,logos/sbt.gif,,False,False,-0.11,WbXAGOrI2t8-4d8e749e6a7f8273dcef742b56e47a12,mp4,WbXAGOrI2t8-4d8e749e6a7f8273dcef742b56e47a12.mp4,WbXAGOrI2t8-4d8e749e6a7f8273dcef742b56e47a12.mp4 +359,/datadrive/videos/oSOefNMJD9g-d3b38a8215bc3fe6426f4865597c1f9c.webm,317ea3f237cf4bd2904e4e4c83651c61.webm,359.0,False,,0.69,,,-0.03,logos/openair.gif,,False,False,0.26,oSOefNMJD9g-d3b38a8215bc3fe6426f4865597c1f9c,webm,oSOefNMJD9g-d3b38a8215bc3fe6426f4865597c1f9c.webm,oSOefNMJD9g-d3b38a8215bc3fe6426f4865597c1f9c.webm +360,/datadrive/videos/nLsuKd2VSnI-e0249fc27aa77d7178c8705396e4f893.webm,32d43ef5cb994abb9337136913eec83c.webm,360.0,False,64k,0.4,[0.02 0.19],,0.01,logos/another.gif,4.0,False,True,,nLsuKd2VSnI-e0249fc27aa77d7178c8705396e4f893,webm,nLsuKd2VSnI-e0249fc27aa77d7178c8705396e4f893.webm,nLsuKd2VSnI-e0249fc27aa77d7178c8705396e4f893.webm +361,/datadrive/videos/AEftpDFjL1I-b552aebd133f196e487472ccc3c33241.mp4,655a34e5b0654736a205318e608cbce0.mp4,361.0,,64k,0.74,,,,logos/jazeera.png,,False,True,-0.21,AEftpDFjL1I-b552aebd133f196e487472ccc3c33241,mp4,AEftpDFjL1I-b552aebd133f196e487472ccc3c33241.mp4,AEftpDFjL1I-b552aebd133f196e487472ccc3c33241.mp4 +362,/datadrive/videos/uvikkyNIhHA-d9575536ba02ebf0dbcf4f80db176700.mp4,1871cc112ae74a5e806dbe93b29ab998.mp4,362.0,,,,,,-0.17,logos/download.png,,False,False,-0.06,uvikkyNIhHA-d9575536ba02ebf0dbcf4f80db176700,mp4,uvikkyNIhHA-d9575536ba02ebf0dbcf4f80db176700.mp4,uvikkyNIhHA-d9575536ba02ebf0dbcf4f80db176700.mp4 +363,/datadrive/videos/KuP_w1C40P4-e5aa132e868a42961112929233acef91.mp4,50b360289d6849eba54758c4021d70fa.mp4,363.0,False,,0.73,,,0.18,logos/fox.png,4.0,False,False,,KuP_w1C40P4-e5aa132e868a42961112929233acef91,mp4,KuP_w1C40P4-e5aa132e868a42961112929233acef91.mp4,KuP_w1C40P4-e5aa132e868a42961112929233acef91.mp4 +364,/datadrive/videos/zuFKJnfK_wI-2e8f143573a68267e2963f507c285ad8.webm,77ad1775cb2a44d18d63f3fc5730c541.webm,364.0,True,,0.44,[0.01 0.19],,,,5.0,False,False,-0.21,zuFKJnfK_wI-2e8f143573a68267e2963f507c285ad8,webm,zuFKJnfK_wI-2e8f143573a68267e2963f507c285ad8.webm,zuFKJnfK_wI-2e8f143573a68267e2963f507c285ad8.webm +365,/datadrive/videos/IbdDag-fkuY-616caa6475d979e6e70898659b92ddf2.webm,a122f30285f24520acc0860ff173c6ae.mp4,365.0,False,16k,0.56,[0.02 0.09],mp4,,,5.0,False,False,,IbdDag-fkuY-616caa6475d979e6e70898659b92ddf2,webm,IbdDag-fkuY-616caa6475d979e6e70898659b92ddf2.webm,IbdDag-fkuY-616caa6475d979e6e70898659b92ddf2.webm +366,/datadrive/videos/oPiotQKaXAs-7a990dd403a3b8004f0caebc163e5609.webm,d76464c54b0c496c82df0b1ad42eb297.webm,366.0,False,,0.7,[0.04 0.14],,,logos/jazeera.png,,False,True,0.38,oPiotQKaXAs-7a990dd403a3b8004f0caebc163e5609,webm,oPiotQKaXAs-7a990dd403a3b8004f0caebc163e5609.webm,oPiotQKaXAs-7a990dd403a3b8004f0caebc163e5609.webm +367,/datadrive/videos/5HYaaDqK3Ow-28c51dc33f9199c8957d06ca327482dd.mp4,2a6647600ecc497fa5219351b17f79fb.mp4,367.0,,,0.92,[0. 0.],mp4,,,,True,False,,5HYaaDqK3Ow-28c51dc33f9199c8957d06ca327482dd,mp4,5HYaaDqK3Ow-28c51dc33f9199c8957d06ca327482dd.mp4,5HYaaDqK3Ow-28c51dc33f9199c8957d06ca327482dd.mp4 +368,/datadrive/videos/Aj3kbW6JjZo-b6068511cd43d5be68c5a14daae8927a.mp4,2676fbefe121488d93798a4094111f9e.mp4,368.0,,16k,,,,,,,False,True,-0.29,Aj3kbW6JjZo-b6068511cd43d5be68c5a14daae8927a,mp4,Aj3kbW6JjZo-b6068511cd43d5be68c5a14daae8927a.mp4,Aj3kbW6JjZo-b6068511cd43d5be68c5a14daae8927a.mp4 +369,/datadrive/videos/kknllh-5nTo-cb32934e389ee68195140f074305f177.mp4,9b6d3fc77e08480794ef9732e73afb9d.mp4,369.0,True,,,[0.13 0.04],,,logos/openair.gif,4.0,True,True,-0.29,kknllh-5nTo-cb32934e389ee68195140f074305f177,mp4,kknllh-5nTo-cb32934e389ee68195140f074305f177.mp4,kknllh-5nTo-cb32934e389ee68195140f074305f177.mp4 +372,/datadrive/videos/zqHzTAysZXs-63adb84b6b22b190e5a34c67201fda70.webm,568f3127623247399706858b8ad7af39.webm,372.0,True,,0.33,[0.05 0.13],,0.1,logos/ge.gif,6.0,False,True,,zqHzTAysZXs-63adb84b6b22b190e5a34c67201fda70,webm,zqHzTAysZXs-63adb84b6b22b190e5a34c67201fda70.webm,zqHzTAysZXs-63adb84b6b22b190e5a34c67201fda70.webm +373,/datadrive/videos/xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e.mp4,5194fec5502249a7bb164be45a2b5b64.mp4,373.0,,32k,0.92,,,0.1,logos/openair.gif,,False,True,,xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e,mp4,xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e.mp4,xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e.mp4 +374,/datadrive/videos/i3RUO5BxdAQ-a801f98ef3b6041f8c30f4ac684d9159.webm,4b984acd97b843c2b10b40831ad17ae0.ogv,374.0,,,,[0.17 0.14],ogv,-0.02,,0.0,False,False,,i3RUO5BxdAQ-a801f98ef3b6041f8c30f4ac684d9159,webm,i3RUO5BxdAQ-a801f98ef3b6041f8c30f4ac684d9159.webm,i3RUO5BxdAQ-a801f98ef3b6041f8c30f4ac684d9159.webm +375,/datadrive/videos/c0glP-pS2uI-41c196ad9f16ea38ebcb8c5328567837.mp4,53be761e2f524e9f8ed6b3020ec5d3b5.mp4,375.0,,,,,,,logos/download.png,7.0,False,True,,c0glP-pS2uI-41c196ad9f16ea38ebcb8c5328567837,mp4,c0glP-pS2uI-41c196ad9f16ea38ebcb8c5328567837.mp4,c0glP-pS2uI-41c196ad9f16ea38ebcb8c5328567837.mp4 +376,/datadrive/videos/L_kGSx2MTvg-97b041151f222beee14fe71e8aa8d8b6.webm,bd401c7069bc4e6b8e4f766da6a22390.webm,376.0,False,128k,,[0.05 0.09],webm,,logos/sbt.gif,7.0,False,True,,L_kGSx2MTvg-97b041151f222beee14fe71e8aa8d8b6,webm,L_kGSx2MTvg-97b041151f222beee14fe71e8aa8d8b6.webm,L_kGSx2MTvg-97b041151f222beee14fe71e8aa8d8b6.webm +377,/datadrive/videos/K4oOUkE7xgc-8acc3e53a74503c6d354af1c2de605bb.webm,0080e26d9d5442cb8dec27a122df09d8.webm,377.0,,,0.83,,,,logos/another.gif,4.0,False,False,,K4oOUkE7xgc-8acc3e53a74503c6d354af1c2de605bb,webm,K4oOUkE7xgc-8acc3e53a74503c6d354af1c2de605bb.webm,K4oOUkE7xgc-8acc3e53a74503c6d354af1c2de605bb.webm +379,/datadrive/videos/oGr8ue-F3wI-c320172e190fcdedef9cd02aea7f9987.webm,15069d42a09f447590ac413e2766c33e.webm,379.0,,,0.57,,webm,,logos/openair.gif,,False,True,-0.4,oGr8ue-F3wI-c320172e190fcdedef9cd02aea7f9987,webm,oGr8ue-F3wI-c320172e190fcdedef9cd02aea7f9987.webm,oGr8ue-F3wI-c320172e190fcdedef9cd02aea7f9987.webm +380,/datadrive/videos/ljVi8Xualjc-5e62399eef9f0c36654dd93137865688.webm,d7d36ba16c9d428bb10d9089ac2f9b4a.mp4,380.0,False,16k,0.71,[0.08 0.14],mp4,0.08,logos/fox.png,,False,False,,ljVi8Xualjc-5e62399eef9f0c36654dd93137865688,webm,ljVi8Xualjc-5e62399eef9f0c36654dd93137865688.webm,ljVi8Xualjc-5e62399eef9f0c36654dd93137865688.webm +381,/datadrive/videos/g5Dso77LuKc-5dcd6a3f2067264d032ec4a9de34d4e4.webm,5d14ba00501745a48a8d2c85787dbf77.webm,381.0,,,,[0.17 0.12],,0.13,logos/download.png,7.0,False,False,,g5Dso77LuKc-5dcd6a3f2067264d032ec4a9de34d4e4,webm,g5Dso77LuKc-5dcd6a3f2067264d032ec4a9de34d4e4.webm,g5Dso77LuKc-5dcd6a3f2067264d032ec4a9de34d4e4.webm +382,/datadrive/videos/33ZaZpUJcyA-9563714a5286c6a47afde6cf9429cad1.webm,9340213d07ba4a3e913ad5857c8ff8f7.ogv,382.0,True,32k,0.57,,ogv,,,6.0,False,False,,33ZaZpUJcyA-9563714a5286c6a47afde6cf9429cad1,webm,33ZaZpUJcyA-9563714a5286c6a47afde6cf9429cad1.webm,33ZaZpUJcyA-9563714a5286c6a47afde6cf9429cad1.webm +383,/datadrive/videos/J7odogksjzg-4e7b72c1c6655a763f01396707953119.webm,1f5da0d047664604ae908a5c93a4ca9b.webm,383.0,False,,,[0.02 0.04],,,,0.0,True,True,-0.23,J7odogksjzg-4e7b72c1c6655a763f01396707953119,webm,J7odogksjzg-4e7b72c1c6655a763f01396707953119.webm,J7odogksjzg-4e7b72c1c6655a763f01396707953119.webm +384,/datadrive/videos/ESaxuHLCqiw-0f22808a1b3ac95b3b7f9c6600ab2ced.mp4,d1bc3bc3fb444d189df18719a818ff40.mp4,384.0,False,,0.42,[0.09 0.14],,0.05,,,False,True,0.05,ESaxuHLCqiw-0f22808a1b3ac95b3b7f9c6600ab2ced,mp4,ESaxuHLCqiw-0f22808a1b3ac95b3b7f9c6600ab2ced.mp4,ESaxuHLCqiw-0f22808a1b3ac95b3b7f9c6600ab2ced.mp4 +385,/datadrive/videos/7rPk7RDxqgQ-cfa671b5f48237c40e8d14d4c22e1c9d.webm,8413fb10f83e4900bb5fb44e4337f83e.webm,385.0,,32k,0.92,,,0.06,,3.0,False,False,,7rPk7RDxqgQ-cfa671b5f48237c40e8d14d4c22e1c9d,webm,7rPk7RDxqgQ-cfa671b5f48237c40e8d14d4c22e1c9d.webm,7rPk7RDxqgQ-cfa671b5f48237c40e8d14d4c22e1c9d.webm +386,/datadrive/videos/7VLNL2dpc8Y-b6505348715554f6cc04725da3f0d756.webm,1d4f35ccbd7f42ee8788de9646ab08cd.webm,386.0,False,,,[0.09 0.03],,,,,False,True,,7VLNL2dpc8Y-b6505348715554f6cc04725da3f0d756,webm,7VLNL2dpc8Y-b6505348715554f6cc04725da3f0d756.webm,7VLNL2dpc8Y-b6505348715554f6cc04725da3f0d756.webm +387,/datadrive/videos/8Rvu-jlsaOU-5b988b26edd0096ea42d3b804621d297.mp4,ff47d8e1ace141d89cf7e89223ddcba3.mp4,387.0,,16k,,,mp4,0.07,,2.0,False,True,0.27,8Rvu-jlsaOU-5b988b26edd0096ea42d3b804621d297,mp4,8Rvu-jlsaOU-5b988b26edd0096ea42d3b804621d297.mp4,8Rvu-jlsaOU-5b988b26edd0096ea42d3b804621d297.mp4 +388,/datadrive/videos/lUCLW5yNB_c-6eaefb2cf76574a7ced189bc8647e55e.mp4,687378b9ebf14b7da164f366c9be6e39.ogv,388.0,,,,,ogv,0.14,,,False,True,-0.11,lUCLW5yNB_c-6eaefb2cf76574a7ced189bc8647e55e,mp4,lUCLW5yNB_c-6eaefb2cf76574a7ced189bc8647e55e.mp4,lUCLW5yNB_c-6eaefb2cf76574a7ced189bc8647e55e.mp4 +389,/datadrive/videos/tIORVJOhOL0-5868a73bcda650757743b4855570baad.webm,adbcecf7eec74f8d8c747d1b56c7fb45.webm,389.0,,128k,0.8,[0.08 0.01],,0.01,logos/jazeera.png,,False,False,,tIORVJOhOL0-5868a73bcda650757743b4855570baad,webm,tIORVJOhOL0-5868a73bcda650757743b4855570baad.webm,tIORVJOhOL0-5868a73bcda650757743b4855570baad.webm +390,/datadrive/videos/k_Az-Nk-7Ys-af21c86fa905a200c11baa6ff599a405.webm,d09af8ce8948405d9ec6d0833df15979.mp4,390.0,,,,[0.19 0.01],mp4,,,,False,True,,k_Az-Nk-7Ys-af21c86fa905a200c11baa6ff599a405,webm,k_Az-Nk-7Ys-af21c86fa905a200c11baa6ff599a405.webm,k_Az-Nk-7Ys-af21c86fa905a200c11baa6ff599a405.webm +393,/datadrive/videos/Ywzr6-3sV5Q-a461fb8b3f6f42fae8253b85a7ba800a.mp4,5720422585b84ea2b0cf3e403ba96108.mp4,393.0,False,32k,0.25,,,,,0.0,False,True,-0.35,Ywzr6-3sV5Q-a461fb8b3f6f42fae8253b85a7ba800a,mp4,Ywzr6-3sV5Q-a461fb8b3f6f42fae8253b85a7ba800a.mp4,Ywzr6-3sV5Q-a461fb8b3f6f42fae8253b85a7ba800a.mp4 +395,/datadrive/videos/Ki_zcehbtRs-0b01394092f8fc8de830507bea65d78a.mp4,48ab694a26e647cd96e831ca9fe390ad.mp4,395.0,,,0.81,,,-0.11,logos/fox.png,2.0,False,True,,Ki_zcehbtRs-0b01394092f8fc8de830507bea65d78a,mp4,Ki_zcehbtRs-0b01394092f8fc8de830507bea65d78a.mp4,Ki_zcehbtRs-0b01394092f8fc8de830507bea65d78a.mp4 +396,/datadrive/videos/cjlyVIfZJh4-1b8d795c7ae011e42e1377e52a43f2ee.mp4,caff2aa8e0f347c1af741c94e449be23.mp4,396.0,True,64k,0.99,[0.11 0.01],,,,,False,False,0.33,cjlyVIfZJh4-1b8d795c7ae011e42e1377e52a43f2ee,mp4,cjlyVIfZJh4-1b8d795c7ae011e42e1377e52a43f2ee.mp4,cjlyVIfZJh4-1b8d795c7ae011e42e1377e52a43f2ee.mp4 +398,/datadrive/videos/YtTp4U1aZ6A-b40bd46084d496f6441d71700b840854.webm,7bf46a8c17da4fc1b8dba4eee83fd03b.webm,398.0,True,,0.89,,,-0.1,,,True,False,,YtTp4U1aZ6A-b40bd46084d496f6441d71700b840854,webm,YtTp4U1aZ6A-b40bd46084d496f6441d71700b840854.webm,YtTp4U1aZ6A-b40bd46084d496f6441d71700b840854.webm +399,/datadrive/videos/wl0z6BGFCIc-d08a2970beedf79f18b8554377e1536f.webm,cdd7fdf6c04d4b67877b9592306b95ca.webm,399.0,,32k,0.24,,webm,,logos/jazeera.png,4.0,False,True,0.27,wl0z6BGFCIc-d08a2970beedf79f18b8554377e1536f,webm,wl0z6BGFCIc-d08a2970beedf79f18b8554377e1536f.webm,wl0z6BGFCIc-d08a2970beedf79f18b8554377e1536f.webm +400,/datadrive/videos/WBGumMrBQJM-107a34f006f5f5698e525a4f7a011dea.mp4,8b31c92b14c94d1385dc335fa0c3f4e8.ogv,400.0,,,0.33,[0.08 0.11],ogv,-0.09,logos/sbt.gif,0.0,False,False,,WBGumMrBQJM-107a34f006f5f5698e525a4f7a011dea,mp4,WBGumMrBQJM-107a34f006f5f5698e525a4f7a011dea.mp4,WBGumMrBQJM-107a34f006f5f5698e525a4f7a011dea.mp4 +401,/datadrive/videos/vjUPl67ViSo-b310490745395d5b186cab8e9d355365.webm,3f7c4abe3078499d84e44ff96079c887.webm,401.0,False,32k,0.85,,,0.15,,,False,True,0.04,vjUPl67ViSo-b310490745395d5b186cab8e9d355365,webm,vjUPl67ViSo-b310490745395d5b186cab8e9d355365.webm,vjUPl67ViSo-b310490745395d5b186cab8e9d355365.webm +402,/datadrive/videos/Qcz5XKXMveg-a3e01669bddb0c972d0c5022f6330166.webm,ba7666dff5ed4310b4957b1e185e7104.webm,402.0,,,0.24,,,-0.01,,5.0,False,False,,Qcz5XKXMveg-a3e01669bddb0c972d0c5022f6330166,webm,Qcz5XKXMveg-a3e01669bddb0c972d0c5022f6330166.webm,Qcz5XKXMveg-a3e01669bddb0c972d0c5022f6330166.webm +403,/datadrive/videos/4HcDSpWFmg0-79380a36b7587add31e998fb5180be2f.webm,6e215e21b26d45fe99f4e713269956d3.webm,403.0,False,,0.91,,,-0.17,,,True,True,-0.38,4HcDSpWFmg0-79380a36b7587add31e998fb5180be2f,webm,4HcDSpWFmg0-79380a36b7587add31e998fb5180be2f.webm,4HcDSpWFmg0-79380a36b7587add31e998fb5180be2f.webm +404,/datadrive/videos/N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054.webm,38643702633f4350be2532f2ca85e9e5.webm,404.0,,,,,,,logos/sbt.gif,,False,True,,N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054,webm,N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054.webm,N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054.webm +405,/datadrive/videos/TJwvM1Yo7BA-c3cdbe26fd8eab88fd3cdd98a36a7f49.webm,117480bcd8294e4f9c1f3f9c6243163f.webm,405.0,False,,0.92,,,0.07,logos/another.gif,,False,False,-0.02,TJwvM1Yo7BA-c3cdbe26fd8eab88fd3cdd98a36a7f49,webm,TJwvM1Yo7BA-c3cdbe26fd8eab88fd3cdd98a36a7f49.webm,TJwvM1Yo7BA-c3cdbe26fd8eab88fd3cdd98a36a7f49.webm +406,/datadrive/videos/ZgNMhdzDt-w-1c78b75e7fdc278c40ed7bb261d5b56b.webm,168c85da8e1646a19fcff202d28d6e44.webm,406.0,,128k,0.79,[0.08 0.05],,-0.16,logos/openair.gif,,False,False,,ZgNMhdzDt-w-1c78b75e7fdc278c40ed7bb261d5b56b,webm,ZgNMhdzDt-w-1c78b75e7fdc278c40ed7bb261d5b56b.webm,ZgNMhdzDt-w-1c78b75e7fdc278c40ed7bb261d5b56b.webm +407,/datadrive/videos/dmCPVrGva5M-04a097aa8c9314e81b3a0d920579780c.mp4,9915829b2867420f8ff5fe6b993305a0.mp4,407.0,,16k,,[0.05 0.12],,0.1,logos/jazeera.png,9.0,False,True,0.17,dmCPVrGva5M-04a097aa8c9314e81b3a0d920579780c,mp4,dmCPVrGva5M-04a097aa8c9314e81b3a0d920579780c.mp4,dmCPVrGva5M-04a097aa8c9314e81b3a0d920579780c.mp4 +408,/datadrive/videos/RImXm2DIGWA-dd42ee1822a02483e0b010d371224053.webm,229dca1325854b4bb400942200f1cad9.webm,408.0,,,0.7,[0.02 0.14],webm,,,,False,False,,RImXm2DIGWA-dd42ee1822a02483e0b010d371224053,webm,RImXm2DIGWA-dd42ee1822a02483e0b010d371224053.webm,RImXm2DIGWA-dd42ee1822a02483e0b010d371224053.webm +409,/datadrive/videos/xZ-J-7JYA-k-0450ba787f460134f321dc0761a8ede7.webm,be9b8d79276c4a809afea47d02cfc392.webm,409.0,,128k,,,,,logos/openair.gif,6.0,False,False,0.26,xZ-J-7JYA-k-0450ba787f460134f321dc0761a8ede7,webm,xZ-J-7JYA-k-0450ba787f460134f321dc0761a8ede7.webm,xZ-J-7JYA-k-0450ba787f460134f321dc0761a8ede7.webm +410,/datadrive/videos/EItg_TVIPkM-4908445051be04cd06697c15086ddcf8.mp4,90db4d72de4044689b348e1825bf8ce7.mp4,410.0,False,128k,,,,0.07,,,True,False,,EItg_TVIPkM-4908445051be04cd06697c15086ddcf8,mp4,EItg_TVIPkM-4908445051be04cd06697c15086ddcf8.mp4,EItg_TVIPkM-4908445051be04cd06697c15086ddcf8.mp4 +411,/datadrive/videos/HI3ngZnN7mg-e071ffcd2d9d166789b2e11d5e23f913.webm,4d8ab97dd04244828ace116d3a9baea2.webm,411.0,False,,,[0.1 0.09],,,,,False,False,0.14,HI3ngZnN7mg-e071ffcd2d9d166789b2e11d5e23f913,webm,HI3ngZnN7mg-e071ffcd2d9d166789b2e11d5e23f913.webm,HI3ngZnN7mg-e071ffcd2d9d166789b2e11d5e23f913.webm +412,/datadrive/videos/6nXlX_LtJuI-7482cf266b54199f18066cd8148f641f.webm,19cf676f70c24ef48375d3c27faf3351.webm,412.0,,,0.78,,,,logos/another.gif,,False,False,,6nXlX_LtJuI-7482cf266b54199f18066cd8148f641f,webm,6nXlX_LtJuI-7482cf266b54199f18066cd8148f641f.webm,6nXlX_LtJuI-7482cf266b54199f18066cd8148f641f.webm +413,/datadrive/videos/FouQjhCSBCk-90be027463eb8322d86c65579b48687b.mp4,43d5577833ce4685a211ad66860c4be3.ogv,413.0,,,,,ogv,-0.07,,,False,False,0.17,FouQjhCSBCk-90be027463eb8322d86c65579b48687b,mp4,FouQjhCSBCk-90be027463eb8322d86c65579b48687b.mp4,FouQjhCSBCk-90be027463eb8322d86c65579b48687b.mp4 +414,/datadrive/videos/qFXYnob7oIs-8dac5e7a626c06effd800e6917b3f95c.mp4,158948e12c974a4c915b697810b6d535.mp4,414.0,False,,0.96,,mp4,,,1.0,False,True,0.18,qFXYnob7oIs-8dac5e7a626c06effd800e6917b3f95c,mp4,qFXYnob7oIs-8dac5e7a626c06effd800e6917b3f95c.mp4,qFXYnob7oIs-8dac5e7a626c06effd800e6917b3f95c.mp4 +415,/datadrive/videos/kBDNvVq8ut4-93a3c69f5246717d15d91a47238c32e9.webm,7131de7207024edf89262bf3176170e5.mp4,415.0,,,0.66,[0.16 0.16],mp4,0.06,,7.0,False,False,-0.36,kBDNvVq8ut4-93a3c69f5246717d15d91a47238c32e9,webm,kBDNvVq8ut4-93a3c69f5246717d15d91a47238c32e9.webm,kBDNvVq8ut4-93a3c69f5246717d15d91a47238c32e9.webm +416,/datadrive/videos/c2ISG0iIfwM-cfcbe6ac834458956063caeb03f6d543.mp4,ae5aa82b149043fd99e2af6c544ee613.mp4,416.0,,,,[0.09 0.02],,,logos/another.gif,,False,False,,c2ISG0iIfwM-cfcbe6ac834458956063caeb03f6d543,mp4,c2ISG0iIfwM-cfcbe6ac834458956063caeb03f6d543.mp4,c2ISG0iIfwM-cfcbe6ac834458956063caeb03f6d543.mp4 +417,/datadrive/videos/pAtgYq_oZuc-9263903a20566ec6054d2a75a3af91bf.mp4,448467a70b4b462fbdedd3bf602dd35b.ogv,417.0,False,,0.37,,ogv,,logos/new.gif,4.0,False,False,,pAtgYq_oZuc-9263903a20566ec6054d2a75a3af91bf,mp4,pAtgYq_oZuc-9263903a20566ec6054d2a75a3af91bf.mp4,pAtgYq_oZuc-9263903a20566ec6054d2a75a3af91bf.mp4 +419,/datadrive/videos/v8rkkzP0_jk-19b287b25d15a4d8462542dfb5c8c367.webm,d6e5a1b5fedd486e82b0ff7ad7bd4880.webm,419.0,False,128k,0.43,[0.1 0.07],webm,0.17,logos/another.gif,7.0,False,True,0.35,v8rkkzP0_jk-19b287b25d15a4d8462542dfb5c8c367,webm,v8rkkzP0_jk-19b287b25d15a4d8462542dfb5c8c367.webm,v8rkkzP0_jk-19b287b25d15a4d8462542dfb5c8c367.webm +420,/datadrive/videos/fYKKkHNbkUU-f338fe9b7a5324e331ff28ba5aba43e2.mp4,bad17422b84f4ba4b2f22839ee257551.mp4,420.0,False,64k,0.86,[0.04 0.14],,,logos/download.png,8.0,True,False,0.0,fYKKkHNbkUU-f338fe9b7a5324e331ff28ba5aba43e2,mp4,fYKKkHNbkUU-f338fe9b7a5324e331ff28ba5aba43e2.mp4,fYKKkHNbkUU-f338fe9b7a5324e331ff28ba5aba43e2.mp4 +421,/datadrive/videos/gfi9svfxxCM-3244172cdf3f41daded3bc06ab67d619.webm,3e5187042ab745f4b058beddbb24efe5.ogv,421.0,True,64k,,,ogv,-0.04,,2.0,False,False,-0.07,gfi9svfxxCM-3244172cdf3f41daded3bc06ab67d619,webm,gfi9svfxxCM-3244172cdf3f41daded3bc06ab67d619.webm,gfi9svfxxCM-3244172cdf3f41daded3bc06ab67d619.webm +422,/datadrive/videos/fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753.webm,5a44dce601dd43f1bbd0d1b77c44fb1f.webm,422.0,,32k,,[0.15 0.14],,0.17,logos/sbt.gif,3.0,False,False,,fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753,webm,fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753.webm,fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753.webm +424,/datadrive/videos/Mwi_5yFWlac-93b41f309974d7328d626db2dda4780e.webm,832a91f295c84f6fbc1574638e794b8d.webm,424.0,,,,[0.11 0.1 ],,-0.08,logos/download.png,,False,True,0.17,Mwi_5yFWlac-93b41f309974d7328d626db2dda4780e,webm,Mwi_5yFWlac-93b41f309974d7328d626db2dda4780e.webm,Mwi_5yFWlac-93b41f309974d7328d626db2dda4780e.webm +425,/datadrive/videos/y-bLKCswzZE-f1de4a1faafd9e07e80f9bcf85d3ac6f.mp4,cf73cb7dee16490ba3413a37cf5135e8.mp4,425.0,,32k,0.77,[0.04 0.15],mp4,0.03,logos/jazeera.png,,False,False,,y-bLKCswzZE-f1de4a1faafd9e07e80f9bcf85d3ac6f,mp4,y-bLKCswzZE-f1de4a1faafd9e07e80f9bcf85d3ac6f.mp4,y-bLKCswzZE-f1de4a1faafd9e07e80f9bcf85d3ac6f.mp4 +426,/datadrive/videos/GD_v8hV2G2s-f98560537442ee80869216d17b44600c.mp4,3f40ccc2021940548078a9367150d442.mp4,426.0,,,0.97,,mp4,,,7.0,False,True,0.04,GD_v8hV2G2s-f98560537442ee80869216d17b44600c,mp4,GD_v8hV2G2s-f98560537442ee80869216d17b44600c.mp4,GD_v8hV2G2s-f98560537442ee80869216d17b44600c.mp4 +427,/datadrive/videos/tUdeqJZAqHo-c744327606fca36080ec3a934786da73.mp4,17aa3923b5a84a3fbbcec3d11efec6d5.mp4,427.0,True,128k,,,,,logos/download.png,3.0,False,False,,tUdeqJZAqHo-c744327606fca36080ec3a934786da73,mp4,tUdeqJZAqHo-c744327606fca36080ec3a934786da73.mp4,tUdeqJZAqHo-c744327606fca36080ec3a934786da73.mp4 +428,/datadrive/videos/EO0VMnT5Fwk-c2d039072a2b2c49cb99d00c621426c6.webm,142f2d5014524e58aa7554f95e9a4f87.webm,428.0,False,16k,,,webm,,logos/another.gif,,False,False,0.33,EO0VMnT5Fwk-c2d039072a2b2c49cb99d00c621426c6,webm,EO0VMnT5Fwk-c2d039072a2b2c49cb99d00c621426c6.webm,EO0VMnT5Fwk-c2d039072a2b2c49cb99d00c621426c6.webm +429,/datadrive/videos/1TTBun1tpTE-e44b855baebe2869468ddd4ec08af9b1.webm,a7a80a8ed4d546728ba451cb65f445c4.webm,429.0,,64k,0.22,[0.17 0.03],webm,,logos/msnbc.png,7.0,False,True,,1TTBun1tpTE-e44b855baebe2869468ddd4ec08af9b1,webm,1TTBun1tpTE-e44b855baebe2869468ddd4ec08af9b1.webm,1TTBun1tpTE-e44b855baebe2869468ddd4ec08af9b1.webm +430,/datadrive/videos/oCQgqyQaFj4-fbeaafdb4054a30e4bc9ae66713f445c.mp4,311e6c8c888846c8b2677cb746fa29de.mp4,430.0,True,,0.7,,mp4,0.09,logos/ge.gif,,False,True,,oCQgqyQaFj4-fbeaafdb4054a30e4bc9ae66713f445c,mp4,oCQgqyQaFj4-fbeaafdb4054a30e4bc9ae66713f445c.mp4,oCQgqyQaFj4-fbeaafdb4054a30e4bc9ae66713f445c.mp4 +431,/datadrive/videos/r25t7t9EMUY-72a8c06b971cc31e84339927e9a1c54d.mp4,563f4334432f408792e1afd98307ee08.mp4,431.0,,,0.91,,,0.04,logos/sbt.gif,,False,False,0.04,r25t7t9EMUY-72a8c06b971cc31e84339927e9a1c54d,mp4,r25t7t9EMUY-72a8c06b971cc31e84339927e9a1c54d.mp4,r25t7t9EMUY-72a8c06b971cc31e84339927e9a1c54d.mp4 +432,/datadrive/videos/Upk3lbMyx0M-45ef2fc091562d7d273530c03e4304c6.mp4,541f614f3c80466b9b319d36611fb303.mp4,432.0,,,0.25,[0.12 0.14],,,,,False,True,,Upk3lbMyx0M-45ef2fc091562d7d273530c03e4304c6,mp4,Upk3lbMyx0M-45ef2fc091562d7d273530c03e4304c6.mp4,Upk3lbMyx0M-45ef2fc091562d7d273530c03e4304c6.mp4 +433,/datadrive/videos/SLAPFQbOfn8-a9e5f71712f840303b604cbd919bc771.webm,92929a5cd0bb4f3d8a54fa2ba7b07265.webm,433.0,,,,[0.03 0.09],webm,-0.16,logos/new.gif,,False,False,0.05,SLAPFQbOfn8-a9e5f71712f840303b604cbd919bc771,webm,SLAPFQbOfn8-a9e5f71712f840303b604cbd919bc771.webm,SLAPFQbOfn8-a9e5f71712f840303b604cbd919bc771.webm +434,/datadrive/videos/dB3BipcKT18-6ad3ac638df02f30356841a4d379a936.webm,59a3757a87a04554bf48e484ce3461a3.mp4,434.0,,,,[0.09 0.06],mp4,0.17,,6.0,False,True,0.02,dB3BipcKT18-6ad3ac638df02f30356841a4d379a936,webm,dB3BipcKT18-6ad3ac638df02f30356841a4d379a936.webm,dB3BipcKT18-6ad3ac638df02f30356841a4d379a936.webm +435,/datadrive/videos/ai6edz0hyC0-70abe0a8c103cd8066c187cb2c691203.webm,cb9ec7ec961649a1a0ede735dab2eeee.webm,435.0,,,0.62,,,,,3.0,False,True,,ai6edz0hyC0-70abe0a8c103cd8066c187cb2c691203,webm,ai6edz0hyC0-70abe0a8c103cd8066c187cb2c691203.webm,ai6edz0hyC0-70abe0a8c103cd8066c187cb2c691203.webm +436,/datadrive/videos/fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905.mp4,b83cb57d168d4025b2f97a6b2a038610.webm,436.0,,,0.92,,webm,,,,False,True,,fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905,mp4,fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905.mp4,fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905.mp4 +437,/datadrive/videos/WMlPfjmxMrU-861c246d3e6f5c46e3d1903430e26124.webm,3042c65cf560436e83de997efcce7229.ogv,437.0,,128k,,[0.08 0.09],ogv,,,1.0,False,False,,WMlPfjmxMrU-861c246d3e6f5c46e3d1903430e26124,webm,WMlPfjmxMrU-861c246d3e6f5c46e3d1903430e26124.webm,WMlPfjmxMrU-861c246d3e6f5c46e3d1903430e26124.webm +438,/datadrive/videos/1qEIxFP48Xc-6cca9581fbff6cf6b525d43a5969f84f.webm,94998a555873429991eb46a5c4ec0494.webm,438.0,,16k,,[0.12 0.05],,0.06,,,False,True,-0.4,1qEIxFP48Xc-6cca9581fbff6cf6b525d43a5969f84f,webm,1qEIxFP48Xc-6cca9581fbff6cf6b525d43a5969f84f.webm,1qEIxFP48Xc-6cca9581fbff6cf6b525d43a5969f84f.webm +439,/datadrive/videos/zrlAGAb3OMY-bdcf43eb8ccddc3a67d2fb9c68d017ef.webm,1c4b9069e0874517b327ca6b73b97a62.mp4,439.0,False,,0.95,[0.12 0. ],mp4,0.08,,6.0,False,False,,zrlAGAb3OMY-bdcf43eb8ccddc3a67d2fb9c68d017ef,webm,zrlAGAb3OMY-bdcf43eb8ccddc3a67d2fb9c68d017ef.webm,zrlAGAb3OMY-bdcf43eb8ccddc3a67d2fb9c68d017ef.webm +440,/datadrive/videos/SJUdhJHtT6Q-ba048802fbf47e53ba475cd8ae5eb011.webm,0cadf6633c4f414996e46fa61deb9ab5.webm,440.0,,,0.34,[0.16 0.17],webm,-0.08,,2.0,True,False,,SJUdhJHtT6Q-ba048802fbf47e53ba475cd8ae5eb011,webm,SJUdhJHtT6Q-ba048802fbf47e53ba475cd8ae5eb011.webm,SJUdhJHtT6Q-ba048802fbf47e53ba475cd8ae5eb011.webm +441,/datadrive/videos/WaM7_iUtJBk-c4395da57221793a6b43e6eb3bc80fad.webm,80e88ce7cdc3488195039a0f0f80f072.webm,441.0,,,0.64,,,,logos/openair.gif,,False,False,,WaM7_iUtJBk-c4395da57221793a6b43e6eb3bc80fad,webm,WaM7_iUtJBk-c4395da57221793a6b43e6eb3bc80fad.webm,WaM7_iUtJBk-c4395da57221793a6b43e6eb3bc80fad.webm +442,/datadrive/videos/uqPhRKah6EA-4d154dee35f9c714fa7653d76807de7a.mp4,60b1c19a8df04c1688703b212a7d2218.mp4,442.0,False,64k,0.79,,,0.11,,8.0,False,False,0.22,uqPhRKah6EA-4d154dee35f9c714fa7653d76807de7a,mp4,uqPhRKah6EA-4d154dee35f9c714fa7653d76807de7a.mp4,uqPhRKah6EA-4d154dee35f9c714fa7653d76807de7a.mp4 +443,/datadrive/videos/4nWsDuz3n9E-e94b6eddfae7db6b2b21562cb16f5ad9.mp4,749688248ce641ba8871870f71dfbb24.ogv,443.0,,,,[0.02 0.15],ogv,,,6.225,False,True,,4nWsDuz3n9E-e94b6eddfae7db6b2b21562cb16f5ad9,mp4,4nWsDuz3n9E-e94b6eddfae7db6b2b21562cb16f5ad9.mp4,4nWsDuz3n9E-e94b6eddfae7db6b2b21562cb16f5ad9.mp4 +444,/datadrive/videos/eq7RkcqSdbQ-37831757a3815c0c2b5f2964d1af26a0.webm,cb38060be99c4651a68dfb7080b24de6.webm,444.0,False,,,,,,,8.0,False,True,-0.06,eq7RkcqSdbQ-37831757a3815c0c2b5f2964d1af26a0,webm,eq7RkcqSdbQ-37831757a3815c0c2b5f2964d1af26a0.webm,eq7RkcqSdbQ-37831757a3815c0c2b5f2964d1af26a0.webm +445,/datadrive/videos/FUAfocJA6N8-bbc2da79edc83af7e255d14509ca02e5.webm,481856f2e6f14c81aaafba028bb19458.mp4,445.0,False,64k,0.47,,mp4,,,4.0,True,False,,FUAfocJA6N8-bbc2da79edc83af7e255d14509ca02e5,webm,FUAfocJA6N8-bbc2da79edc83af7e255d14509ca02e5.webm,FUAfocJA6N8-bbc2da79edc83af7e255d14509ca02e5.webm +446,/datadrive/videos/wwACdMZCDEU-bb61490d742154216b9259cc0226705e.mp4,8f86f0656f434525ac2fa36f35c0d449.mp4,446.0,False,,,[0. 0.1],,0.06,,,False,False,,wwACdMZCDEU-bb61490d742154216b9259cc0226705e,mp4,wwACdMZCDEU-bb61490d742154216b9259cc0226705e.mp4,wwACdMZCDEU-bb61490d742154216b9259cc0226705e.mp4 +447,/datadrive/videos/BIsmaOHlMR0-04a003e1a9bcc5d8435f284620473ec9.mp4,22d312da125a495ba1561a71faae3171.ogv,447.0,False,,0.82,[0.12 0.01],ogv,,,,False,True,,BIsmaOHlMR0-04a003e1a9bcc5d8435f284620473ec9,mp4,BIsmaOHlMR0-04a003e1a9bcc5d8435f284620473ec9.mp4,BIsmaOHlMR0-04a003e1a9bcc5d8435f284620473ec9.mp4 +448,/datadrive/videos/N4b5MK2ZW3c-d41f1f035cd1b9d333576da99202cb90.mp4,999c401444364d7bbc03b627ae3d6643.webm,448.0,True,,,,webm,,,,False,True,-0.08,N4b5MK2ZW3c-d41f1f035cd1b9d333576da99202cb90,mp4,N4b5MK2ZW3c-d41f1f035cd1b9d333576da99202cb90.mp4,N4b5MK2ZW3c-d41f1f035cd1b9d333576da99202cb90.mp4 +450,/datadrive/videos/qZUmUFhZ6jc-731e384f37b703f526b69fe8cc3161e6.webm,55e98db9b9c34cf7bc7abaf4f5f45d1e.mp4,450.0,False,16k,0.22,,mp4,,,,False,False,0.38,qZUmUFhZ6jc-731e384f37b703f526b69fe8cc3161e6,webm,qZUmUFhZ6jc-731e384f37b703f526b69fe8cc3161e6.webm,qZUmUFhZ6jc-731e384f37b703f526b69fe8cc3161e6.webm +451,/datadrive/videos/E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d.mp4,8ee29791dfdc4f989ef00ad16bd61d79.mp4,451.0,True,,0.27,,mp4,-0.09,,,False,False,0.15,E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d,mp4,E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d.mp4,E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d.mp4 +452,/datadrive/videos/xQmDuA5e4zc-acc98b37097e45d63237db8fd09fda49.webm,8ae39a83ed4c44aea3c7071aeaa2e011.mp4,452.0,True,,0.68,[0. 0.04],mp4,,,,False,False,,xQmDuA5e4zc-acc98b37097e45d63237db8fd09fda49,webm,xQmDuA5e4zc-acc98b37097e45d63237db8fd09fda49.webm,xQmDuA5e4zc-acc98b37097e45d63237db8fd09fda49.webm +453,/datadrive/videos/tgupezvXgI4-3b6eb646d2663341de197418b07db965.webm,53d574b7d84d43fc81280245be04aa23.mp4,453.0,,128k,,,mp4,-0.06,logos/fox.png,6.0,False,False,-0.34,tgupezvXgI4-3b6eb646d2663341de197418b07db965,webm,tgupezvXgI4-3b6eb646d2663341de197418b07db965.webm,tgupezvXgI4-3b6eb646d2663341de197418b07db965.webm +454,/datadrive/videos/Di-rgngcGwo-0618b4d3b8655b16facf0a18a28b9a09.webm,ca9dfca96fb1465c9c563d8fe65a498e.webm,454.0,,,,,webm,0.03,,9.0,False,False,,Di-rgngcGwo-0618b4d3b8655b16facf0a18a28b9a09,webm,Di-rgngcGwo-0618b4d3b8655b16facf0a18a28b9a09.webm,Di-rgngcGwo-0618b4d3b8655b16facf0a18a28b9a09.webm +455,/datadrive/videos/iWN-v0lQD1U-0973ab842b276cec3ccc15894449d64e.webm,05c2b60bb31c4bf49a34670b3314c369.ogv,455.0,,128k,0.76,,ogv,,logos/openair.gif,8.0,False,True,-0.09,iWN-v0lQD1U-0973ab842b276cec3ccc15894449d64e,webm,iWN-v0lQD1U-0973ab842b276cec3ccc15894449d64e.webm,iWN-v0lQD1U-0973ab842b276cec3ccc15894449d64e.webm +456,/datadrive/videos/0P5vhdiu97A-a5567332a3237fdd6aca448537dd109c.mp4,4a09546513b84b32a82abb85f3891cba.mp4,456.0,False,,0.81,,,-0.13,logos/msnbc.png,6.0,True,False,,0P5vhdiu97A-a5567332a3237fdd6aca448537dd109c,mp4,0P5vhdiu97A-a5567332a3237fdd6aca448537dd109c.mp4,0P5vhdiu97A-a5567332a3237fdd6aca448537dd109c.mp4 +458,/datadrive/videos/OK-mPTKNvDo-e259f1866f41c2c3013191f7a5a3204f.webm,41ebf7c28c104ae1a87b196a469358a6.webm,458.0,,,0.71,[0.04 0.03],,0.14,logos/download.png,,False,False,0.32,OK-mPTKNvDo-e259f1866f41c2c3013191f7a5a3204f,webm,OK-mPTKNvDo-e259f1866f41c2c3013191f7a5a3204f.webm,OK-mPTKNvDo-e259f1866f41c2c3013191f7a5a3204f.webm +459,/datadrive/videos/OqZpTY5KSDQ-4d77ce7461b7a941a8c56732c899e953.webm,7b7b7a3897ef49879b80e83ee6406d2d.webm,459.0,False,,,[0.16 0.13],,,logos/jazeera.png,4.0,False,False,,OqZpTY5KSDQ-4d77ce7461b7a941a8c56732c899e953,webm,OqZpTY5KSDQ-4d77ce7461b7a941a8c56732c899e953.webm,OqZpTY5KSDQ-4d77ce7461b7a941a8c56732c899e953.webm +460,/datadrive/videos/pP60FldLNHA-9fe3fff3f07825d1964b1224625c5353.webm,5d2a05032e0142e984591e1735465f59.webm,460.0,,32k,,,,,,0.0,False,True,-0.34,pP60FldLNHA-9fe3fff3f07825d1964b1224625c5353,webm,pP60FldLNHA-9fe3fff3f07825d1964b1224625c5353.webm,pP60FldLNHA-9fe3fff3f07825d1964b1224625c5353.webm +462,/datadrive/videos/SdqCgP2hQ8c-8ea312ec9100c294eae4e85c3df4f5df.mp4,45687b6c401743acbd1af67ce720f689.ogv,462.0,,64k,,[0.09 0.17],ogv,,,,False,False,,SdqCgP2hQ8c-8ea312ec9100c294eae4e85c3df4f5df,mp4,SdqCgP2hQ8c-8ea312ec9100c294eae4e85c3df4f5df.mp4,SdqCgP2hQ8c-8ea312ec9100c294eae4e85c3df4f5df.mp4 +463,/datadrive/videos/4Qpcf3Kx6xI-ac5647fba065f6679c92ee15cc428a8b.webm,6676775f34c8439391e99fedf5f65be5.webm,463.0,False,,,[0.09 0.08],,,,7.0,False,True,-0.01,4Qpcf3Kx6xI-ac5647fba065f6679c92ee15cc428a8b,webm,4Qpcf3Kx6xI-ac5647fba065f6679c92ee15cc428a8b.webm,4Qpcf3Kx6xI-ac5647fba065f6679c92ee15cc428a8b.webm +466,/datadrive/videos/27ARq1AJZyg-c261b5315bfb8b1e0552a35705c17184.webm,26add48b570c4e79ac58ab402f57f3b8.webm,466.0,True,,,[0.08 0.02],,,,,False,True,0.07,27ARq1AJZyg-c261b5315bfb8b1e0552a35705c17184,webm,27ARq1AJZyg-c261b5315bfb8b1e0552a35705c17184.webm,27ARq1AJZyg-c261b5315bfb8b1e0552a35705c17184.webm +467,/datadrive/videos/yWuwpSiOcsk-110fec2335332386e79b3511311ac218.webm,22e483936c5c4a628d9b82fc057666fa.webm,467.0,,16k,,[0.14 0.08],,,logos/msnbc.png,,True,True,0.1,yWuwpSiOcsk-110fec2335332386e79b3511311ac218,webm,yWuwpSiOcsk-110fec2335332386e79b3511311ac218.webm,yWuwpSiOcsk-110fec2335332386e79b3511311ac218.webm +468,/datadrive/videos/MnEPQrGkNEg-644029fe2dfc3c342ea363d633a90fb5.mp4,49ef628bd678461ab3fedcf86985d980.webm,468.0,,64k,,[0.13 0.16],webm,,logos/jazeera.png,4.0,False,False,0.0,MnEPQrGkNEg-644029fe2dfc3c342ea363d633a90fb5,mp4,MnEPQrGkNEg-644029fe2dfc3c342ea363d633a90fb5.mp4,MnEPQrGkNEg-644029fe2dfc3c342ea363d633a90fb5.mp4 +471,/datadrive/videos/5u1RTim6fk0-6110763daff6b9fbb522d6dec4aca22c.mp4,bb181f65860e44968ceeb5852adce575.webm,471.0,False,16k,0.41,[0.04 0.11],webm,,,3.0,True,True,0.38,5u1RTim6fk0-6110763daff6b9fbb522d6dec4aca22c,mp4,5u1RTim6fk0-6110763daff6b9fbb522d6dec4aca22c.mp4,5u1RTim6fk0-6110763daff6b9fbb522d6dec4aca22c.mp4 +472,/datadrive/videos/34Sozqs9YD8-c6894173310fbbbff578095cd9bdf9c7.webm,b605f72e8ea74b8a93e9f1312f7f1cf5.webm,472.0,,,0.31,[0.11 0.14],,,,8.0,False,True,0.18,34Sozqs9YD8-c6894173310fbbbff578095cd9bdf9c7,webm,34Sozqs9YD8-c6894173310fbbbff578095cd9bdf9c7.webm,34Sozqs9YD8-c6894173310fbbbff578095cd9bdf9c7.webm +473,/datadrive/videos/tIORVJOhOL0-5868a73bcda650757743b4855570baad.webm,84ad7d83888d428084fb643203882ff8.mp4,473.0,,16k,0.79,,mp4,,logos/another.gif,4.0,False,True,,tIORVJOhOL0-5868a73bcda650757743b4855570baad,webm,tIORVJOhOL0-5868a73bcda650757743b4855570baad.webm,tIORVJOhOL0-5868a73bcda650757743b4855570baad.webm +474,/datadrive/videos/8ayORrYeDhE-acfa32b1af21053b507cbb258dc46c16.webm,1194d2b20c28465688cc1f5fdb5da7e1.webm,474.0,False,16k,,,,,logos/download.png,,False,True,,8ayORrYeDhE-acfa32b1af21053b507cbb258dc46c16,webm,8ayORrYeDhE-acfa32b1af21053b507cbb258dc46c16.webm,8ayORrYeDhE-acfa32b1af21053b507cbb258dc46c16.webm +477,/datadrive/videos/839npxFIFuw-eb2b470bd1ec2e96b4107fca1ac35971.mp4,91d490096ffb433692474dfc8927bac3.webm,477.0,,64k,0.29,,webm,,logos/ge.gif,,False,False,,839npxFIFuw-eb2b470bd1ec2e96b4107fca1ac35971,mp4,839npxFIFuw-eb2b470bd1ec2e96b4107fca1ac35971.mp4,839npxFIFuw-eb2b470bd1ec2e96b4107fca1ac35971.mp4 +478,/datadrive/videos/Tl5Z45phF4c-5550e2f83f8176d596da1ade81813dd9.webm,7276035db9204313b0f487535f17eb4e.webm,478.0,,128k,,,,-0.06,logos/download.png,1.0,False,True,0.21,Tl5Z45phF4c-5550e2f83f8176d596da1ade81813dd9,webm,Tl5Z45phF4c-5550e2f83f8176d596da1ade81813dd9.webm,Tl5Z45phF4c-5550e2f83f8176d596da1ade81813dd9.webm +479,/datadrive/videos/b6ueCO1OKfM-6fec48ff559f319e23b99f7714c1a15f.mp4,8dadca907d5445fa972183f24207d98f.webm,479.0,,16k,,[0.1 0.06],webm,0.1,logos/msnbc.png,,False,True,,b6ueCO1OKfM-6fec48ff559f319e23b99f7714c1a15f,mp4,b6ueCO1OKfM-6fec48ff559f319e23b99f7714c1a15f.mp4,b6ueCO1OKfM-6fec48ff559f319e23b99f7714c1a15f.mp4 +480,/datadrive/videos/8zB8ToHqU90-20aa287db0182999aeb36e774e693f7c.webm,1e44814b90894b34b9d579126207b9bb.webm,480.0,,16k,0.66,[0.16 0.04],,-0.02,,,False,False,-0.34,8zB8ToHqU90-20aa287db0182999aeb36e774e693f7c,webm,8zB8ToHqU90-20aa287db0182999aeb36e774e693f7c.webm,8zB8ToHqU90-20aa287db0182999aeb36e774e693f7c.webm +481,/datadrive/videos/xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e.mp4,1b34fd42af3f4181a6ff7549be0437cc.mp4,481.0,True,,0.8,[0.1 0.03],,,logos/another.gif,,False,True,,xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e,mp4,xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e.mp4,xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e.mp4 +482,/datadrive/videos/adSjLjk2eCU-fda0ea59d49cc9ab44cda9256107ab0d.webm,01accc95f4aa4886801030e6d725fe01.webm,482.0,,32k,0.75,[0.19 0.03],webm,0.03,,4.0,True,True,0.15,adSjLjk2eCU-fda0ea59d49cc9ab44cda9256107ab0d,webm,adSjLjk2eCU-fda0ea59d49cc9ab44cda9256107ab0d.webm,adSjLjk2eCU-fda0ea59d49cc9ab44cda9256107ab0d.webm +483,/datadrive/videos/ccbU4fEKjOQ-ed4dc2bde2e2d8f582b8b8b5ff74631b.mp4,b2f9a688178549929239f79b83610639.mp4,483.0,False,64k,,[0.13 0.08],mp4,-0.08,logos/new.gif,1.0,False,False,0.31,ccbU4fEKjOQ-ed4dc2bde2e2d8f582b8b8b5ff74631b,mp4,ccbU4fEKjOQ-ed4dc2bde2e2d8f582b8b8b5ff74631b.mp4,ccbU4fEKjOQ-ed4dc2bde2e2d8f582b8b8b5ff74631b.mp4 +484,/datadrive/videos/iarTmYN_cFw-cbec9d312f1eda1d3305c0f48de927ad.mp4,125b9c8a73fe4ea386119289c19bf9b8.mp4,484.0,,,,,mp4,-0.19,logos/sbt.gif,1.0,False,False,,iarTmYN_cFw-cbec9d312f1eda1d3305c0f48de927ad,mp4,iarTmYN_cFw-cbec9d312f1eda1d3305c0f48de927ad.mp4,iarTmYN_cFw-cbec9d312f1eda1d3305c0f48de927ad.mp4 +485,/datadrive/videos/8Rvu-jlsaOU-5b988b26edd0096ea42d3b804621d297.mp4,8e644dc0182e4e69a5ec7a85f4da68ee.mp4,485.0,,,0.63,[0.09 0.09],,0.15,logos/another.gif,,False,False,,8Rvu-jlsaOU-5b988b26edd0096ea42d3b804621d297,mp4,8Rvu-jlsaOU-5b988b26edd0096ea42d3b804621d297.mp4,8Rvu-jlsaOU-5b988b26edd0096ea42d3b804621d297.mp4 +486,/datadrive/videos/lXFGn6Oc9to-e53fe9a1ff84cfaf815931fb9695fd1c.mp4,9123b4e9db0a45ecae980be4d668c882.webm,486.0,True,,0.84,[0.08 0.16],webm,,,,False,True,,lXFGn6Oc9to-e53fe9a1ff84cfaf815931fb9695fd1c,mp4,lXFGn6Oc9to-e53fe9a1ff84cfaf815931fb9695fd1c.mp4,lXFGn6Oc9to-e53fe9a1ff84cfaf815931fb9695fd1c.mp4 +487,/datadrive/videos/0nHLWgKd0Vc-9894f541a49da1d82486bae59198f2f9.webm,a906110bc1284d21840bd28d4a51781b.webm,487.0,,16k,0.57,[0.02 0.17],,,,,False,False,,0nHLWgKd0Vc-9894f541a49da1d82486bae59198f2f9,webm,0nHLWgKd0Vc-9894f541a49da1d82486bae59198f2f9.webm,0nHLWgKd0Vc-9894f541a49da1d82486bae59198f2f9.webm +488,/datadrive/videos/SknhjJQqLZ0-b13acde24077a350de26b8cba37bc66e.webm,51e5d87064704adfbff309d318766366.webm,488.0,False,64k,0.64,,,,,2.0,False,True,,SknhjJQqLZ0-b13acde24077a350de26b8cba37bc66e,webm,SknhjJQqLZ0-b13acde24077a350de26b8cba37bc66e.webm,SknhjJQqLZ0-b13acde24077a350de26b8cba37bc66e.webm +491,/datadrive/videos/CMcPeaMK6xo-4bc269214315a2c0c2095c7214d60438.mp4,9622d49ab45f46d19c89c255fbfede70.mp4,491.0,True,64k,,,,,,5.49,False,False,,CMcPeaMK6xo-4bc269214315a2c0c2095c7214d60438,mp4,CMcPeaMK6xo-4bc269214315a2c0c2095c7214d60438.mp4,CMcPeaMK6xo-4bc269214315a2c0c2095c7214d60438.mp4 +492,/datadrive/videos/qW2LX18G0JA-4af3d6a9647dfe2b83a5270149e8b750.mp4,a8f512f4f0c84f699de3012b85577cca.webm,492.0,,,,,webm,,,7.0,False,True,0.15,qW2LX18G0JA-4af3d6a9647dfe2b83a5270149e8b750,mp4,qW2LX18G0JA-4af3d6a9647dfe2b83a5270149e8b750.mp4,qW2LX18G0JA-4af3d6a9647dfe2b83a5270149e8b750.mp4 +496,/datadrive/videos/WUaCt2ueheM-a727b57a36c478380abf7eb3c6f096c6.webm,8bbaa50a7b904bfa8ac8e5303f68d34b.webm,496.0,True,128k,,[0.18 0.08],,-0.18,,,True,True,0.04,WUaCt2ueheM-a727b57a36c478380abf7eb3c6f096c6,webm,WUaCt2ueheM-a727b57a36c478380abf7eb3c6f096c6.webm,WUaCt2ueheM-a727b57a36c478380abf7eb3c6f096c6.webm +497,/datadrive/videos/BBnf2pl_tf8-302b0f8a2a7fa4c661e6e96e85ac19d6.webm,63a9c8663fce45b18550b34230253148.webm,497.0,,,0.84,,,-0.14,,,False,True,,BBnf2pl_tf8-302b0f8a2a7fa4c661e6e96e85ac19d6,webm,BBnf2pl_tf8-302b0f8a2a7fa4c661e6e96e85ac19d6.webm,BBnf2pl_tf8-302b0f8a2a7fa4c661e6e96e85ac19d6.webm +498,/datadrive/videos/AQm7eO5U7h8-cb6bd4030be0fc2eb259a7848e9d34a9.webm,512a6186490d45f0a73520411b4a1949.ogv,498.0,False,16k,0.95,,ogv,0.09,,,False,True,0.27,AQm7eO5U7h8-cb6bd4030be0fc2eb259a7848e9d34a9,webm,AQm7eO5U7h8-cb6bd4030be0fc2eb259a7848e9d34a9.webm,AQm7eO5U7h8-cb6bd4030be0fc2eb259a7848e9d34a9.webm +499,/datadrive/videos/0hhXGe3IMwM-283db3f185436f9715f21a8f383810f3.mp4,6b6b87124d974da8ade7aabee9d3ea11.ogv,499.0,True,,0.46,[0.16 0.06],ogv,0.14,,2.0,False,True,,0hhXGe3IMwM-283db3f185436f9715f21a8f383810f3,mp4,0hhXGe3IMwM-283db3f185436f9715f21a8f383810f3.mp4,0hhXGe3IMwM-283db3f185436f9715f21a8f383810f3.mp4 +500,/datadrive/videos/mjPqKL5BhMQ-da653f9b4c7309573cac8bc6f9654a88.webm,17178aac7c27400e944b71c25a170df6.webm,500.0,,32k,0.46,[0.16 0.09],webm,0.14,,,False,True,0.07,mjPqKL5BhMQ-da653f9b4c7309573cac8bc6f9654a88,webm,mjPqKL5BhMQ-da653f9b4c7309573cac8bc6f9654a88.webm,mjPqKL5BhMQ-da653f9b4c7309573cac8bc6f9654a88.webm +502,/datadrive/videos/3rAcgSWglME-0abae6e603a8510b3522668c0dd0de4e.mp4,75cddb0563a44d7aa3b4979e9229be21.mp4,502.0,,,,[0.07 0.09],,,,0.0,True,True,,3rAcgSWglME-0abae6e603a8510b3522668c0dd0de4e,mp4,3rAcgSWglME-0abae6e603a8510b3522668c0dd0de4e.mp4,3rAcgSWglME-0abae6e603a8510b3522668c0dd0de4e.mp4 +503,/datadrive/videos/g0HFuE0_q2c-4f3ca3a966ce235d6b629d6d7b7b7564.webm,612a87034ad8439d8505b43236080550.webm,503.0,,32k,,[0.04 0.12],,,,,False,True,,g0HFuE0_q2c-4f3ca3a966ce235d6b629d6d7b7b7564,webm,g0HFuE0_q2c-4f3ca3a966ce235d6b629d6d7b7b7564.webm,g0HFuE0_q2c-4f3ca3a966ce235d6b629d6d7b7b7564.webm +504,/datadrive/videos/LKYZnj_L-2k-2a3366bb743329900c0add1261ac4665.webm,9c1ccc59577c458180889a3967047b8c.webm,504.0,False,,,[0.04 0.18],,,,7.0,False,False,0.07,LKYZnj_L-2k-2a3366bb743329900c0add1261ac4665,webm,LKYZnj_L-2k-2a3366bb743329900c0add1261ac4665.webm,LKYZnj_L-2k-2a3366bb743329900c0add1261ac4665.webm +505,/datadrive/videos/dx38o206XbE-7a529d316e754ce9b9f52271e84d26de.mp4,41aa32d8e1c64ea0ac73b893d27371e6.webm,505.0,False,,,[0.15 0.18],webm,,logos/msnbc.png,2.0,False,True,-0.06,dx38o206XbE-7a529d316e754ce9b9f52271e84d26de,mp4,dx38o206XbE-7a529d316e754ce9b9f52271e84d26de.mp4,dx38o206XbE-7a529d316e754ce9b9f52271e84d26de.mp4 +506,/datadrive/videos/dVphfzB5ut0-6b71abd3b199667926ba5db7d262b6fc.webm,76ff99b10a644b95b854e4dd14713238.mp4,506.0,,64k,,,mp4,,logos/jazeera.png,7.0,False,False,-0.39,dVphfzB5ut0-6b71abd3b199667926ba5db7d262b6fc,webm,dVphfzB5ut0-6b71abd3b199667926ba5db7d262b6fc.webm,dVphfzB5ut0-6b71abd3b199667926ba5db7d262b6fc.webm +507,/datadrive/videos/tN2HCzebd8A-dfbde38f507c1aaf9234c238820f38b2.mp4,a037780aa09b49c19fe1d8cf8e27a90a.mp4,507.0,True,,0.89,[0.03 0.05],mp4,,logos/jazeera.png,4.0,False,False,-0.16,tN2HCzebd8A-dfbde38f507c1aaf9234c238820f38b2,mp4,tN2HCzebd8A-dfbde38f507c1aaf9234c238820f38b2.mp4,tN2HCzebd8A-dfbde38f507c1aaf9234c238820f38b2.mp4 +508,/datadrive/videos/pmooM-xMCvM-d42877881a6eb33524b3279fa61bd5b9.webm,ade8005306a24136adeca93577ae8e5e.webm,508.0,True,32k,0.24,[0.19 0.09],webm,-0.08,,,False,True,,pmooM-xMCvM-d42877881a6eb33524b3279fa61bd5b9,webm,pmooM-xMCvM-d42877881a6eb33524b3279fa61bd5b9.webm,pmooM-xMCvM-d42877881a6eb33524b3279fa61bd5b9.webm +509,/datadrive/videos/cKcs94krExM-c0cb26beb0f3d70aa61e8dcfc7be0801.mp4,bd6734a375924fd8bb787e11fd00cb28.mp4,509.0,,,,,,,logos/another.gif,7.0,False,False,,cKcs94krExM-c0cb26beb0f3d70aa61e8dcfc7be0801,mp4,cKcs94krExM-c0cb26beb0f3d70aa61e8dcfc7be0801.mp4,cKcs94krExM-c0cb26beb0f3d70aa61e8dcfc7be0801.mp4 +510,/datadrive/videos/3BP5PFiHyb0-21f13125ad10f2ce5e72bd2a20ca5b32.mp4,08f8db3ba8034b1bab29f544fb9f6b11.mp4,510.0,,64k,,[0.19 0.02],,,,,False,False,-0.33,3BP5PFiHyb0-21f13125ad10f2ce5e72bd2a20ca5b32,mp4,3BP5PFiHyb0-21f13125ad10f2ce5e72bd2a20ca5b32.mp4,3BP5PFiHyb0-21f13125ad10f2ce5e72bd2a20ca5b32.mp4 +511,/datadrive/videos/W6ISoyzUCQY-bfec3862c96783e89b43c5b2fb8ddb96.webm,4a31aedb443342a695b4ea9a824955b6.webm,511.0,,,,,,0.11,logos/jazeera.png,4.0,True,False,,W6ISoyzUCQY-bfec3862c96783e89b43c5b2fb8ddb96,webm,W6ISoyzUCQY-bfec3862c96783e89b43c5b2fb8ddb96.webm,W6ISoyzUCQY-bfec3862c96783e89b43c5b2fb8ddb96.webm +512,/datadrive/videos/jO6ZXTWX-PA-489942194feef43d0c998f13255ecc32.mp4,3839ffe4d9034c5f96cfbbdc27214e11.mp4,512.0,True,,,[0.19 0.19],,0.13,logos/jazeera.png,,False,True,,jO6ZXTWX-PA-489942194feef43d0c998f13255ecc32,mp4,jO6ZXTWX-PA-489942194feef43d0c998f13255ecc32.mp4,jO6ZXTWX-PA-489942194feef43d0c998f13255ecc32.mp4 +513,/datadrive/videos/DrQvPPYsaec-e15db3cf75db0b8fd91e892c86286da8.webm,aac38363d69a4e3cad9d3e72fede4153.webm,513.0,False,,0.72,,webm,,,1.0,False,False,,DrQvPPYsaec-e15db3cf75db0b8fd91e892c86286da8,webm,DrQvPPYsaec-e15db3cf75db0b8fd91e892c86286da8.webm,DrQvPPYsaec-e15db3cf75db0b8fd91e892c86286da8.webm +514,/datadrive/videos/018MsV21q00-3419176ec77eea4da5161cf6faa05a3d.mp4,0da55c56a9294ec5af1a820e7e54dc5d.mp4,514.0,,32k,0.38,,,,logos/new.gif,,False,True,0.32,018MsV21q00-3419176ec77eea4da5161cf6faa05a3d,mp4,018MsV21q00-3419176ec77eea4da5161cf6faa05a3d.mp4,018MsV21q00-3419176ec77eea4da5161cf6faa05a3d.mp4 +515,/datadrive/videos/38NgfwT8QdM-7833ee88770404616f1b76c17a11d2fb.mp4,7b09717f9eef4eb28fcb66d11bd44df5.mp4,515.0,True,,,,mp4,,,,False,False,,38NgfwT8QdM-7833ee88770404616f1b76c17a11d2fb,mp4,38NgfwT8QdM-7833ee88770404616f1b76c17a11d2fb.mp4,38NgfwT8QdM-7833ee88770404616f1b76c17a11d2fb.mp4 +516,/datadrive/videos/VDDLDbwqD_8-f31693a9c12778b384c75d18625d6b6e.webm,42a478d7802f4329964da35d71ea92bb.webm,516.0,,,0.8,,,,,5.0,False,False,-0.01,VDDLDbwqD_8-f31693a9c12778b384c75d18625d6b6e,webm,VDDLDbwqD_8-f31693a9c12778b384c75d18625d6b6e.webm,VDDLDbwqD_8-f31693a9c12778b384c75d18625d6b6e.webm +517,/datadrive/videos/LLdyu3Nso9A-4001e4e3d9984bc80d5cf33b68a56a20.mp4,73506c316a364c69b5dcc94875a1873e.webm,517.0,True,,,,webm,,,,False,True,-0.27,LLdyu3Nso9A-4001e4e3d9984bc80d5cf33b68a56a20,mp4,LLdyu3Nso9A-4001e4e3d9984bc80d5cf33b68a56a20.mp4,LLdyu3Nso9A-4001e4e3d9984bc80d5cf33b68a56a20.mp4 +519,/datadrive/videos/XPlIsDR0Qhs-d46bc967a5f1888269d7a71606517b06.mp4,938e2f20fb2147ec8868cd49706f5595.mp4,519.0,False,,0.35,,,0.17,logos/msnbc.png,2.0,False,True,-0.04,XPlIsDR0Qhs-d46bc967a5f1888269d7a71606517b06,mp4,XPlIsDR0Qhs-d46bc967a5f1888269d7a71606517b06.mp4,XPlIsDR0Qhs-d46bc967a5f1888269d7a71606517b06.mp4 +522,/datadrive/videos/Fc-vxJ7RSmY-f0e695b872349f67aa6250b770696b92.webm,22e80a6bd3e748be9752393cc69ca8dd.mp4,522.0,False,,,[0.02 0.13],mp4,,logos/download.png,,False,True,0.25,Fc-vxJ7RSmY-f0e695b872349f67aa6250b770696b92,webm,Fc-vxJ7RSmY-f0e695b872349f67aa6250b770696b92.webm,Fc-vxJ7RSmY-f0e695b872349f67aa6250b770696b92.webm +525,/datadrive/videos/C0z7Iaa0NOg-8bc0499f87d0b2656dee6bcee2527f49.mp4,b29ea20616fd46b8a665a1178afefe9b.webm,525.0,True,,,[0.03 0.05],webm,,logos/openair.gif,,True,False,-0.4,C0z7Iaa0NOg-8bc0499f87d0b2656dee6bcee2527f49,mp4,C0z7Iaa0NOg-8bc0499f87d0b2656dee6bcee2527f49.mp4,C0z7Iaa0NOg-8bc0499f87d0b2656dee6bcee2527f49.mp4 +526,/datadrive/videos/xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e.mp4,3f7b56b7fbf948618bf1ed6a98200351.mp4,526.0,False,64k,,[0.13 0.02],,,logos/openair.gif,,False,True,,xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e,mp4,xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e.mp4,xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e.mp4 +527,/datadrive/videos/GL9BAsLhLfY-867b15730569d60d61081fa17e3ae863.mp4,75efb87030074b9ca81933a965107ad3.mp4,527.0,,16k,0.34,,,,logos/fox.png,,False,False,,GL9BAsLhLfY-867b15730569d60d61081fa17e3ae863,mp4,GL9BAsLhLfY-867b15730569d60d61081fa17e3ae863.mp4,GL9BAsLhLfY-867b15730569d60d61081fa17e3ae863.mp4 +528,/datadrive/videos/kq0Zs2c2sZU-1829c1345a7fddebde0a48b5ba3d4a81.webm,37426c9cd3a04955a97b315c1b1fea61.ogv,528.0,False,128k,,[0.09 0.01],ogv,-0.07,logos/another.gif,0.0,False,True,-0.14,kq0Zs2c2sZU-1829c1345a7fddebde0a48b5ba3d4a81,webm,kq0Zs2c2sZU-1829c1345a7fddebde0a48b5ba3d4a81.webm,kq0Zs2c2sZU-1829c1345a7fddebde0a48b5ba3d4a81.webm +529,/datadrive/videos/AF5V-YcvJrA-4ff237eea2d6d9ea02a669b95ccbf8ec.webm,5965dc98688c4719997503271f25091a.mp4,529.0,,16k,,,mp4,-0.17,logos/ge.gif,8.0,False,True,-0.33,AF5V-YcvJrA-4ff237eea2d6d9ea02a669b95ccbf8ec,webm,AF5V-YcvJrA-4ff237eea2d6d9ea02a669b95ccbf8ec.webm,AF5V-YcvJrA-4ff237eea2d6d9ea02a669b95ccbf8ec.webm +530,/datadrive/videos/No7OjWSI9ww-94e6af11e0a9ce979b5e3ad6ce2d6071.webm,6a363bed45f84643ae8696b3a6c569de.webm,530.0,True,16k,,,,,logos/sbt.gif,,False,True,,No7OjWSI9ww-94e6af11e0a9ce979b5e3ad6ce2d6071,webm,No7OjWSI9ww-94e6af11e0a9ce979b5e3ad6ce2d6071.webm,No7OjWSI9ww-94e6af11e0a9ce979b5e3ad6ce2d6071.webm +531,/datadrive/videos/S21kK7M8wz0-4a910daa08b9eac3aeef6019e2eb22f5.mp4,050cb3395eaf4579a7bcc9e21f255ab3.webm,531.0,False,,0.89,,webm,,logos/new.gif,1.0,False,True,0.05,S21kK7M8wz0-4a910daa08b9eac3aeef6019e2eb22f5,mp4,S21kK7M8wz0-4a910daa08b9eac3aeef6019e2eb22f5.mp4,S21kK7M8wz0-4a910daa08b9eac3aeef6019e2eb22f5.mp4 +532,/datadrive/videos/hA21zU1LOgc-d2623e1f63f2afa89b95af86d2b68a82.webm,bb040e1e246c4527abf65d10d218a4ea.webm,532.0,,,,,,-0.14,,,False,False,0.37,hA21zU1LOgc-d2623e1f63f2afa89b95af86d2b68a82,webm,hA21zU1LOgc-d2623e1f63f2afa89b95af86d2b68a82.webm,hA21zU1LOgc-d2623e1f63f2afa89b95af86d2b68a82.webm +533,/datadrive/videos/qKc5JQCAZcU-74a5cfcda8884d787fb6553bd205baf4.webm,9ef840cf39194279be6a8501ee3de452.ogv,533.0,False,128k,,[0.1 0.19],ogv,,,,False,False,0.19,qKc5JQCAZcU-74a5cfcda8884d787fb6553bd205baf4,webm,qKc5JQCAZcU-74a5cfcda8884d787fb6553bd205baf4.webm,qKc5JQCAZcU-74a5cfcda8884d787fb6553bd205baf4.webm +534,/datadrive/videos/Bx6y9YXPslg-2cbb67b012d75f99f7922496574bf02d.mp4,7764a0674cd140e4acff73be07c904a9.ogv,534.0,,,,[0.08 0.08],ogv,,logos/another.gif,,False,True,,Bx6y9YXPslg-2cbb67b012d75f99f7922496574bf02d,mp4,Bx6y9YXPslg-2cbb67b012d75f99f7922496574bf02d.mp4,Bx6y9YXPslg-2cbb67b012d75f99f7922496574bf02d.mp4 +535,/datadrive/videos/358LbjKeTO8-80ddea2f9bb2d5a52ea543f7f1da2457.webm,a9ef268144c74efd85ea9d4ecc08c4e0.webm,535.0,,128k,0.62,,,0.05,logos/download.png,,True,False,,358LbjKeTO8-80ddea2f9bb2d5a52ea543f7f1da2457,webm,358LbjKeTO8-80ddea2f9bb2d5a52ea543f7f1da2457.webm,358LbjKeTO8-80ddea2f9bb2d5a52ea543f7f1da2457.webm +536,/datadrive/videos/wWTER48MVVY-8e38e98a832fbbec5a32258c088fea93.webm,507f72900a544936b1595e42b193b9fb.ogv,536.0,False,32k,0.23,[0.05 0.13],ogv,,,,False,False,,wWTER48MVVY-8e38e98a832fbbec5a32258c088fea93,webm,wWTER48MVVY-8e38e98a832fbbec5a32258c088fea93.webm,wWTER48MVVY-8e38e98a832fbbec5a32258c088fea93.webm +537,/datadrive/videos/Bhkko7DCpHY-61f1fb00c42d363ff2e677b4c606de0c.webm,885cf707557f4edeb395851e800cac4d.webm,537.0,True,32k,0.95,[0.07 0.03],,,logos/another.gif,,False,True,-0.28,Bhkko7DCpHY-61f1fb00c42d363ff2e677b4c606de0c,webm,Bhkko7DCpHY-61f1fb00c42d363ff2e677b4c606de0c.webm,Bhkko7DCpHY-61f1fb00c42d363ff2e677b4c606de0c.webm +538,/datadrive/videos/yyLJlYPbZlA-bbee1b86b2e4977bfa1202860b5d474e.webm,bf188ac62ef64a4a9ad956cdc4dbba95.ogv,538.0,,128k,,[0.05 0.04],ogv,,logos/sbt.gif,4.0,False,True,,yyLJlYPbZlA-bbee1b86b2e4977bfa1202860b5d474e,webm,yyLJlYPbZlA-bbee1b86b2e4977bfa1202860b5d474e.webm,yyLJlYPbZlA-bbee1b86b2e4977bfa1202860b5d474e.webm +539,/datadrive/videos/xh-33zokE4g-92ebdf78e0f12d7c6530c54bb2b0cdd6.webm,d3394bffc6d249f9acceec330176c5fd.webm,539.0,,,,,webm,-0.04,logos/jazeera.png,9.0,False,False,-0.4,xh-33zokE4g-92ebdf78e0f12d7c6530c54bb2b0cdd6,webm,xh-33zokE4g-92ebdf78e0f12d7c6530c54bb2b0cdd6.webm,xh-33zokE4g-92ebdf78e0f12d7c6530c54bb2b0cdd6.webm +540,/datadrive/videos/QVlRo0cJArc-3802758dfab83c95a37551acc3250e69.mp4,7a8d394ce8bc4d9aab3f9de855dbc3dd.webm,540.0,True,,,[0.04 0.13],webm,-0.12,,,False,False,,QVlRo0cJArc-3802758dfab83c95a37551acc3250e69,mp4,QVlRo0cJArc-3802758dfab83c95a37551acc3250e69.mp4,QVlRo0cJArc-3802758dfab83c95a37551acc3250e69.mp4 +542,/datadrive/videos/bCoersXDThs-bc2e9a490d10a99c69a2455cb18f5c56.mp4,653859174af844c698b6853e32f0a003.webm,542.0,,32k,0.23,[0.08 0.19],webm,-0.02,logos/openair.gif,,False,True,-0.03,bCoersXDThs-bc2e9a490d10a99c69a2455cb18f5c56,mp4,bCoersXDThs-bc2e9a490d10a99c69a2455cb18f5c56.mp4,bCoersXDThs-bc2e9a490d10a99c69a2455cb18f5c56.mp4 +543,/datadrive/videos/hyVkqP13CIQ-51cae72eb6402ff451941044a23869b3.mp4,3bebda647646417fa3295329fd29afdc.ogv,543.0,,128k,,[0.01 0.14],ogv,,logos/msnbc.png,,False,True,0.0,hyVkqP13CIQ-51cae72eb6402ff451941044a23869b3,mp4,hyVkqP13CIQ-51cae72eb6402ff451941044a23869b3.mp4,hyVkqP13CIQ-51cae72eb6402ff451941044a23869b3.mp4 +544,/datadrive/videos/00emEaHcZUc-2035f2f4f51b5f08263ce9a0e3ba88cc.webm,96530c1a141c4d4f89068713ecf95730.ogv,544.0,True,,,[0.18 0.17],ogv,-0.09,logos/msnbc.png,,False,False,0.31,00emEaHcZUc-2035f2f4f51b5f08263ce9a0e3ba88cc,webm,00emEaHcZUc-2035f2f4f51b5f08263ce9a0e3ba88cc.webm,00emEaHcZUc-2035f2f4f51b5f08263ce9a0e3ba88cc.webm +545,/datadrive/videos/XpbXjugOD9Q-7e0db1c98226185526f715c3b35e901f.webm,c1b72fe077074511b0f8f8b044dd456a.webm,545.0,,16k,0.45,,,,logos/ge.gif,,False,False,,XpbXjugOD9Q-7e0db1c98226185526f715c3b35e901f,webm,XpbXjugOD9Q-7e0db1c98226185526f715c3b35e901f.webm,XpbXjugOD9Q-7e0db1c98226185526f715c3b35e901f.webm +546,/datadrive/videos/sKGUIktJarc-7065f5ada34b1244d00b6aa6b7187afb.webm,9fb43d5abb2f4c7fbb1d36ab88cf2234.ogv,546.0,True,,,,ogv,,,,False,False,,sKGUIktJarc-7065f5ada34b1244d00b6aa6b7187afb,webm,sKGUIktJarc-7065f5ada34b1244d00b6aa6b7187afb.webm,sKGUIktJarc-7065f5ada34b1244d00b6aa6b7187afb.webm +549,/datadrive/videos/4Qpcf3Kx6xI-ac5647fba065f6679c92ee15cc428a8b.webm,a1b48aa5907e40729f8a5b36d3d66e34.webm,549.0,False,64k,0.93,,,0.0,,,True,False,,4Qpcf3Kx6xI-ac5647fba065f6679c92ee15cc428a8b,webm,4Qpcf3Kx6xI-ac5647fba065f6679c92ee15cc428a8b.webm,4Qpcf3Kx6xI-ac5647fba065f6679c92ee15cc428a8b.webm +550,/datadrive/videos/bpfli0ZF7do-606d605202d4ad7b0dadea8cfa790da3.mp4,899781d1ec5c4bbc94e51918a7ecac62.mp4,550.0,False,32k,,,,0.02,,,False,True,0.34,bpfli0ZF7do-606d605202d4ad7b0dadea8cfa790da3,mp4,bpfli0ZF7do-606d605202d4ad7b0dadea8cfa790da3.mp4,bpfli0ZF7do-606d605202d4ad7b0dadea8cfa790da3.mp4 +551,/datadrive/videos/N7dcXWAc9Tc-2523234045ecc433c94427408c1e73bc.mp4,a50586f2cd7c4741998b808f7e5f09dd.mp4,551.0,,64k,0.59,,,,logos/new.gif,,False,True,,N7dcXWAc9Tc-2523234045ecc433c94427408c1e73bc,mp4,N7dcXWAc9Tc-2523234045ecc433c94427408c1e73bc.mp4,N7dcXWAc9Tc-2523234045ecc433c94427408c1e73bc.mp4 +552,/datadrive/videos/ET7eF_wcdvI-1be1ab2d45916c9603727c24cc174b90.webm,5e3caacaf4314449aaeae8ee9124ce46.webm,552.0,,,,,,,,,False,True,,ET7eF_wcdvI-1be1ab2d45916c9603727c24cc174b90,webm,ET7eF_wcdvI-1be1ab2d45916c9603727c24cc174b90.webm,ET7eF_wcdvI-1be1ab2d45916c9603727c24cc174b90.webm +553,/datadrive/videos/6m7AC30dlwg-d54fd98883a328191f34c66a50671aa3.webm,c99566c2621745299a9f221184692268.webm,553.0,False,16k,0.88,,,,,8.0,False,True,,6m7AC30dlwg-d54fd98883a328191f34c66a50671aa3,webm,6m7AC30dlwg-d54fd98883a328191f34c66a50671aa3.webm,6m7AC30dlwg-d54fd98883a328191f34c66a50671aa3.webm +554,/datadrive/videos/_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf.webm,9b231663d9a04875aa3db68a05d7807f.webm,554.0,,16k,,[0.05 0.17],,0.13,,,True,False,,_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf,webm,_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf.webm,_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf.webm +555,/datadrive/videos/qW-ru-pJnUk-b0b452de7156749c9d23b50222dc7527.mp4,597b2048f9cb4240b2b8e62a18355302.webm,555.0,True,32k,,,webm,-0.05,,1.0,False,False,0.37,qW-ru-pJnUk-b0b452de7156749c9d23b50222dc7527,mp4,qW-ru-pJnUk-b0b452de7156749c9d23b50222dc7527.mp4,qW-ru-pJnUk-b0b452de7156749c9d23b50222dc7527.mp4 +556,/datadrive/videos/9_2XFkMYLXY-4ffb85a368877ab5db739826d2bc6f98.mp4,bb16621e65624590a921219b3907e5d7.mp4,556.0,,,0.22,[0.15 0.04],,0.08,,4.0,False,False,0.15,9_2XFkMYLXY-4ffb85a368877ab5db739826d2bc6f98,mp4,9_2XFkMYLXY-4ffb85a368877ab5db739826d2bc6f98.mp4,9_2XFkMYLXY-4ffb85a368877ab5db739826d2bc6f98.mp4 +557,/datadrive/videos/lMIQeK1vuuQ-86e0ea8346004be7adaee10a096e7362.webm,9759b16f97f64e438d6461f64faae4e5.webm,557.0,,,,,,,logos/msnbc.png,,False,True,0.28,lMIQeK1vuuQ-86e0ea8346004be7adaee10a096e7362,webm,lMIQeK1vuuQ-86e0ea8346004be7adaee10a096e7362.webm,lMIQeK1vuuQ-86e0ea8346004be7adaee10a096e7362.webm +558,/datadrive/videos/obEn_f_PKBE-80aaa8d0723f8d9ac082abd9a019f234.webm,23b229d5d4aa48f7ba0b8b1c3fb482ba.webm,558.0,False,,,[0.19 0.07],,-0.2,,1.0,False,True,,obEn_f_PKBE-80aaa8d0723f8d9ac082abd9a019f234,webm,obEn_f_PKBE-80aaa8d0723f8d9ac082abd9a019f234.webm,obEn_f_PKBE-80aaa8d0723f8d9ac082abd9a019f234.webm +559,/datadrive/videos/pBW5mcO76kY-61a4d9d440831b46f9f2444f076a9be8.webm,8f2bdf9b4d1941359e1754686266e3dd.webm,559.0,False,128k,0.39,,webm,-0.02,,5.0,False,True,,pBW5mcO76kY-61a4d9d440831b46f9f2444f076a9be8,webm,pBW5mcO76kY-61a4d9d440831b46f9f2444f076a9be8.webm,pBW5mcO76kY-61a4d9d440831b46f9f2444f076a9be8.webm +563,/datadrive/videos/N1YPuQHyTcY-768c18098321deb87498a43b2d11b057.mp4,3d9e045763604ef1a7b4c213fc77abee.mp4,563.0,,16k,,,,,logos/jazeera.png,,False,True,,N1YPuQHyTcY-768c18098321deb87498a43b2d11b057,mp4,N1YPuQHyTcY-768c18098321deb87498a43b2d11b057.mp4,N1YPuQHyTcY-768c18098321deb87498a43b2d11b057.mp4 +564,/datadrive/videos/X8LOfUt7O1U-5eb11afeae49d11b22e459c89a4632a8.mp4,9f6346a6a1284f3e9e4a31f3e4d63dc8.mp4,564.0,,128k,,,,,logos/download.png,,False,True,-0.12,X8LOfUt7O1U-5eb11afeae49d11b22e459c89a4632a8,mp4,X8LOfUt7O1U-5eb11afeae49d11b22e459c89a4632a8.mp4,X8LOfUt7O1U-5eb11afeae49d11b22e459c89a4632a8.mp4 +566,/datadrive/videos/ObteGc60Fes-086a675bfa93745cbae675e362b6783d.mp4,0a56d44582664440a700e3d66cc3bfa8.mp4,566.0,,16k,,[0.1 0.19],,,,2.0,False,False,-0.24,ObteGc60Fes-086a675bfa93745cbae675e362b6783d,mp4,ObteGc60Fes-086a675bfa93745cbae675e362b6783d.mp4,ObteGc60Fes-086a675bfa93745cbae675e362b6783d.mp4 +567,/datadrive/videos/POn0_4ZPrTA-881ea5c90f20457ca78fe9896db4d0ab.webm,a6e8671f553b416d97b12f73d8c7355e.webm,567.0,,,0.6,,,0.1,,,False,False,0.11,POn0_4ZPrTA-881ea5c90f20457ca78fe9896db4d0ab,webm,POn0_4ZPrTA-881ea5c90f20457ca78fe9896db4d0ab.webm,POn0_4ZPrTA-881ea5c90f20457ca78fe9896db4d0ab.webm +568,/datadrive/videos/54zLp9D3j4g-4c722792fe7a469c387b9e420358d1c9.webm,be1346a1865d42a5b45ecf7882bdf841.ogv,568.0,True,16k,,,ogv,-0.14,,3.0,True,False,0.28,54zLp9D3j4g-4c722792fe7a469c387b9e420358d1c9,webm,54zLp9D3j4g-4c722792fe7a469c387b9e420358d1c9.webm,54zLp9D3j4g-4c722792fe7a469c387b9e420358d1c9.webm +569,/datadrive/videos/woykrJpu1sU-c9d6a55ae94ab003b20dfc71b5e1061c.mp4,896cfe64a2b84919805a87fd3f38ed6c.mp4,569.0,True,,,[0.01 0.17],,,logos/jazeera.png,,False,True,-0.33,woykrJpu1sU-c9d6a55ae94ab003b20dfc71b5e1061c,mp4,woykrJpu1sU-c9d6a55ae94ab003b20dfc71b5e1061c.mp4,woykrJpu1sU-c9d6a55ae94ab003b20dfc71b5e1061c.mp4 +570,/datadrive/videos/SCYHBEiOZ24-b4045faa79aa026b9d483635377cb95e.mp4,b3910fccd73b4285ba1deac95a1a2ead.ogv,570.0,False,64k,,,ogv,-0.14,,,False,True,0.15,SCYHBEiOZ24-b4045faa79aa026b9d483635377cb95e,mp4,SCYHBEiOZ24-b4045faa79aa026b9d483635377cb95e.mp4,SCYHBEiOZ24-b4045faa79aa026b9d483635377cb95e.mp4 +571,/datadrive/videos/kCFg8NzbxcI-c627d4274eaefc9ff53a95f94df5edc2.webm,1bc01fe9862b499c958979e0062ce722.webm,571.0,True,,0.71,[0.14 0.13],webm,-0.13,logos/download.png,,False,False,,kCFg8NzbxcI-c627d4274eaefc9ff53a95f94df5edc2,webm,kCFg8NzbxcI-c627d4274eaefc9ff53a95f94df5edc2.webm,kCFg8NzbxcI-c627d4274eaefc9ff53a95f94df5edc2.webm +572,/datadrive/videos/K6UzQv_kI_4-68248aacb024ee0a55e17f47259624c0.webm,c2e1ba1266b64a088e5bab79409a007f.mp4,572.0,,16k,,,mp4,0.06,,,True,False,0.24,K6UzQv_kI_4-68248aacb024ee0a55e17f47259624c0,webm,K6UzQv_kI_4-68248aacb024ee0a55e17f47259624c0.webm,K6UzQv_kI_4-68248aacb024ee0a55e17f47259624c0.webm +573,/datadrive/videos/dyx5mWWqm-M-51a829a529ce5845f1704242d5a4e248.webm,d25a76a76c674f7c91ca917ae05ce279.webm,573.0,,,,,webm,-0.16,,,False,False,0.31,dyx5mWWqm-M-51a829a529ce5845f1704242d5a4e248,webm,dyx5mWWqm-M-51a829a529ce5845f1704242d5a4e248.webm,dyx5mWWqm-M-51a829a529ce5845f1704242d5a4e248.webm +575,/datadrive/videos/yLp63OYMzW4-77cd37bbb1bac83644977bebfc930a38.webm,1c921f4223d6437fb6507bc4554bfe54.webm,575.0,False,16k,0.87,,webm,,logos/jazeera.png,,False,True,-0.02,yLp63OYMzW4-77cd37bbb1bac83644977bebfc930a38,webm,yLp63OYMzW4-77cd37bbb1bac83644977bebfc930a38.webm,yLp63OYMzW4-77cd37bbb1bac83644977bebfc930a38.webm +576,/datadrive/videos/CsNJYKv4SZA-48419cdaae3f1f14eb715b4f79b97fef.mp4,9d9862bac00c4deca71943fcda3679f5.mp4,576.0,,16k,0.99,[0.12 0.05],,0.02,,7.0,False,False,,CsNJYKv4SZA-48419cdaae3f1f14eb715b4f79b97fef,mp4,CsNJYKv4SZA-48419cdaae3f1f14eb715b4f79b97fef.mp4,CsNJYKv4SZA-48419cdaae3f1f14eb715b4f79b97fef.mp4 +577,/datadrive/videos/QUoOSjdlHyY-c05719446bf48c962d9e5df2787ff44a.webm,94c3b8f7d0744d87adf76c209b9f6683.webm,577.0,False,64k,,,,,logos/sbt.gif,0.0,False,True,-0.25,QUoOSjdlHyY-c05719446bf48c962d9e5df2787ff44a,webm,QUoOSjdlHyY-c05719446bf48c962d9e5df2787ff44a.webm,QUoOSjdlHyY-c05719446bf48c962d9e5df2787ff44a.webm +578,/datadrive/videos/wYxPrGs6RSc-125b7fdeb2906c253f3259a0bc932289.webm,ad177cf25a9845f6b89826b345449a83.webm,578.0,,128k,0.76,[0.1 0.02],,-0.02,,,True,True,,wYxPrGs6RSc-125b7fdeb2906c253f3259a0bc932289,webm,wYxPrGs6RSc-125b7fdeb2906c253f3259a0bc932289.webm,wYxPrGs6RSc-125b7fdeb2906c253f3259a0bc932289.webm +579,/datadrive/videos/titFWCzsDrc-db34f0cf34921a7730ac4033740b3730.webm,1b048ab82afe4c7bacee866b9019fc8c.ogv,579.0,,,0.76,,ogv,,logos/ge.gif,6.0,False,True,-0.22,titFWCzsDrc-db34f0cf34921a7730ac4033740b3730,webm,titFWCzsDrc-db34f0cf34921a7730ac4033740b3730.webm,titFWCzsDrc-db34f0cf34921a7730ac4033740b3730.webm +581,/datadrive/videos/z8nr4Q5-2v4-4123c8c3e9ca3faddf89b3e1f45cf332.webm,99a30cd1a6d743ffb21babee4cceddf2.webm,581.0,False,,,[0.05 0.17],,-0.14,logos/jazeera.png,,False,True,0.23,z8nr4Q5-2v4-4123c8c3e9ca3faddf89b3e1f45cf332,webm,z8nr4Q5-2v4-4123c8c3e9ca3faddf89b3e1f45cf332.webm,z8nr4Q5-2v4-4123c8c3e9ca3faddf89b3e1f45cf332.webm +582,/datadrive/videos/kBDNvVq8ut4-93a3c69f5246717d15d91a47238c32e9.webm,9c14506a90e7406987c8e27e55c3f3ab.mp4,582.0,,,,,mp4,,logos/jazeera.png,3.0,False,False,-0.38,kBDNvVq8ut4-93a3c69f5246717d15d91a47238c32e9,webm,kBDNvVq8ut4-93a3c69f5246717d15d91a47238c32e9.webm,kBDNvVq8ut4-93a3c69f5246717d15d91a47238c32e9.webm +583,/datadrive/videos/1gKWuCvlOIQ-899b9a5ec15d9bad425f0cbcac19974c.webm,d037ae1a2c8a43938139252e660dec04.webm,583.0,False,32k,,,,0.07,logos/fox.png,1.0,False,True,,1gKWuCvlOIQ-899b9a5ec15d9bad425f0cbcac19974c,webm,1gKWuCvlOIQ-899b9a5ec15d9bad425f0cbcac19974c.webm,1gKWuCvlOIQ-899b9a5ec15d9bad425f0cbcac19974c.webm +584,/datadrive/videos/Xoj4I0BASlo-d7e1359ecfd7ad39f6d1b923e238847a.mp4,59554ca71a1f49f0b0a74caec8d5a32e.webm,584.0,,128k,0.35,[0.17 0.04],webm,,,,False,True,,Xoj4I0BASlo-d7e1359ecfd7ad39f6d1b923e238847a,mp4,Xoj4I0BASlo-d7e1359ecfd7ad39f6d1b923e238847a.mp4,Xoj4I0BASlo-d7e1359ecfd7ad39f6d1b923e238847a.mp4 +585,/datadrive/videos/MAxuihfpanU-4c3ed36d91d64bb4750d56533a0cd8ef.webm,2d6de4930791478e9ac082c892ad8aa5.webm,585.0,False,128k,0.37,,,-0.03,,5.0,False,True,,MAxuihfpanU-4c3ed36d91d64bb4750d56533a0cd8ef,webm,MAxuihfpanU-4c3ed36d91d64bb4750d56533a0cd8ef.webm,MAxuihfpanU-4c3ed36d91d64bb4750d56533a0cd8ef.webm +586,/datadrive/videos/HLtHkOniXZ4-307861b56af628efb75463cea9f24397.webm,61eb14fbb06346378ed98e4684e5a9ba.ogv,586.0,,128k,,[0.02 0.12],ogv,0.01,logos/download.png,2.0,False,False,0.18,HLtHkOniXZ4-307861b56af628efb75463cea9f24397,webm,HLtHkOniXZ4-307861b56af628efb75463cea9f24397.webm,HLtHkOniXZ4-307861b56af628efb75463cea9f24397.webm +587,/datadrive/videos/XHmMM-EUsNA-f1227951ad5f8e2b4f57c1f2ad7f9045.mp4,430e13c1d8224dc4be38fe554e45532e.mp4,587.0,,,,,mp4,,,,False,True,-0.23,XHmMM-EUsNA-f1227951ad5f8e2b4f57c1f2ad7f9045,mp4,XHmMM-EUsNA-f1227951ad5f8e2b4f57c1f2ad7f9045.mp4,XHmMM-EUsNA-f1227951ad5f8e2b4f57c1f2ad7f9045.mp4 +588,/datadrive/videos/wxXlM7Ap1zw-c1698039aaa0055c27f0d4798bee9683.mp4,1bd7ae99aa3b434cb7db0d11d83f454c.ogv,588.0,,16k,,,ogv,,,,False,False,,wxXlM7Ap1zw-c1698039aaa0055c27f0d4798bee9683,mp4,wxXlM7Ap1zw-c1698039aaa0055c27f0d4798bee9683.mp4,wxXlM7Ap1zw-c1698039aaa0055c27f0d4798bee9683.mp4 +590,/datadrive/videos/vGOTCaaWKps-5cf842c2864e77e1fd64f768ec03ac0b.webm,1c93851c653947359769c989d6bd5354.webm,590.0,False,,,[0.1 0.12],,,,6.0,False,False,-0.05,vGOTCaaWKps-5cf842c2864e77e1fd64f768ec03ac0b,webm,vGOTCaaWKps-5cf842c2864e77e1fd64f768ec03ac0b.webm,vGOTCaaWKps-5cf842c2864e77e1fd64f768ec03ac0b.webm +591,/datadrive/videos/QHEsuEu6kxo-cb28be524029072a2bd74a7c5522eed7.mp4,7ddb92d6d71742bbab563969b391e3b6.mp4,591.0,,,0.5,[0.12 0.02],mp4,,logos/download.png,,False,False,,QHEsuEu6kxo-cb28be524029072a2bd74a7c5522eed7,mp4,QHEsuEu6kxo-cb28be524029072a2bd74a7c5522eed7.mp4,QHEsuEu6kxo-cb28be524029072a2bd74a7c5522eed7.mp4 +592,/datadrive/videos/33xHOK8kcgc-c740c609af879d134c670500b115b845.webm,1ce4632aa195464585d31c0b59b691c6.webm,592.0,,16k,0.44,[0.13 0.04],,-0.16,logos/jazeera.png,2.0,False,False,,33xHOK8kcgc-c740c609af879d134c670500b115b845,webm,33xHOK8kcgc-c740c609af879d134c670500b115b845.webm,33xHOK8kcgc-c740c609af879d134c670500b115b845.webm +593,/datadrive/videos/hE92wvk0kcQ-8440097a3feefc6d1765ec7f3070e128.webm,9bc3d5f7269045b2a7d99b5b0d1ba128.webm,593.0,,,0.77,[0.15 0.14],,,,7.0,False,False,-0.25,hE92wvk0kcQ-8440097a3feefc6d1765ec7f3070e128,webm,hE92wvk0kcQ-8440097a3feefc6d1765ec7f3070e128.webm,hE92wvk0kcQ-8440097a3feefc6d1765ec7f3070e128.webm +594,/datadrive/videos/AayL804FV4Y-8c2817f9c1a5018bddb63fb7c55c1f6e.webm,ab20b0204cae4261bb829a4ec6d6b7a7.ogv,594.0,,32k,0.81,,ogv,,,7.0,False,False,-0.07,AayL804FV4Y-8c2817f9c1a5018bddb63fb7c55c1f6e,webm,AayL804FV4Y-8c2817f9c1a5018bddb63fb7c55c1f6e.webm,AayL804FV4Y-8c2817f9c1a5018bddb63fb7c55c1f6e.webm +596,/datadrive/videos/u-gBMRHIErM-9f0bb3a2dcedf4d182afa39e8de83512.mp4,4aa7c6314f1446d5b75e6964cf4929bf.webm,596.0,,,,[0.07 0.14],webm,,logos/ge.gif,4.0,False,False,,u-gBMRHIErM-9f0bb3a2dcedf4d182afa39e8de83512,mp4,u-gBMRHIErM-9f0bb3a2dcedf4d182afa39e8de83512.mp4,u-gBMRHIErM-9f0bb3a2dcedf4d182afa39e8de83512.mp4 +598,/datadrive/videos/yh5I_voY0Fg-1ecd3571679ed6fdbc338c25819b6644.webm,c1e59fad80f04b1c8e508f6efd90d85e.webm,598.0,False,,0.3,[0.06 0.06],,,,6.0,False,True,-0.37,yh5I_voY0Fg-1ecd3571679ed6fdbc338c25819b6644,webm,yh5I_voY0Fg-1ecd3571679ed6fdbc338c25819b6644.webm,yh5I_voY0Fg-1ecd3571679ed6fdbc338c25819b6644.webm +599,/datadrive/videos/ydFffppPhIw-ead1f75d1da8273fa4ed4ea873825fd2.webm,59d3c59c6f7848698353fc4f541d8c7f.webm,599.0,,32k,0.94,[0.01 0.01],webm,0.05,,0.0,False,False,-0.01,ydFffppPhIw-ead1f75d1da8273fa4ed4ea873825fd2,webm,ydFffppPhIw-ead1f75d1da8273fa4ed4ea873825fd2.webm,ydFffppPhIw-ead1f75d1da8273fa4ed4ea873825fd2.webm +600,/datadrive/videos/tpvlmaxffXs-04a2478a6ba83d118f24d0bf82f64f91.webm,3a8838f860e34a2e9323d49f40214dbe.mp4,600.0,False,,,[0.07 0.18],mp4,0.04,logos/sbt.gif,1.0,False,True,-0.17,tpvlmaxffXs-04a2478a6ba83d118f24d0bf82f64f91,webm,tpvlmaxffXs-04a2478a6ba83d118f24d0bf82f64f91.webm,tpvlmaxffXs-04a2478a6ba83d118f24d0bf82f64f91.webm +602,/datadrive/videos/LFnMl6Lj3co-11cf15e9ee5ae44575f2743de9812ee5.mp4,be8bd36d9d114ee590df388ad713bd6b.webm,602.0,False,,0.2,,webm,,logos/msnbc.png,,True,False,0.21,LFnMl6Lj3co-11cf15e9ee5ae44575f2743de9812ee5,mp4,LFnMl6Lj3co-11cf15e9ee5ae44575f2743de9812ee5.mp4,LFnMl6Lj3co-11cf15e9ee5ae44575f2743de9812ee5.mp4 +603,/datadrive/videos/qTrH-05GSIk-29f92f9d1b7b0135c59b7676176e599a.webm,066e15dd5b1a4182a143125026cf387a.webm,603.0,False,16k,,[0.14 0.16],,-0.2,logos/jazeera.png,3.0,False,False,,qTrH-05GSIk-29f92f9d1b7b0135c59b7676176e599a,webm,qTrH-05GSIk-29f92f9d1b7b0135c59b7676176e599a.webm,qTrH-05GSIk-29f92f9d1b7b0135c59b7676176e599a.webm +604,/datadrive/videos/RO3B6_yL1gk-1eadec850c689b91737eddffba3d177a.mp4,10f76d1b56d547998a9abb13ff96e0f0.mp4,604.0,False,16k,,,,0.19,logos/sbt.gif,,False,True,-0.34,RO3B6_yL1gk-1eadec850c689b91737eddffba3d177a,mp4,RO3B6_yL1gk-1eadec850c689b91737eddffba3d177a.mp4,RO3B6_yL1gk-1eadec850c689b91737eddffba3d177a.mp4 +605,/datadrive/videos/94g4ysN4qVs-657067b21447935a88b4da5a1a74eeac.mp4,5e09ef9c1df141d28e4565a25cb3ca32.ogv,605.0,,64k,0.37,[0.16 0.16],ogv,,,,False,False,0.35,94g4ysN4qVs-657067b21447935a88b4da5a1a74eeac,mp4,94g4ysN4qVs-657067b21447935a88b4da5a1a74eeac.mp4,94g4ysN4qVs-657067b21447935a88b4da5a1a74eeac.mp4 +606,/datadrive/videos/SCYHBEiOZ24-b4045faa79aa026b9d483635377cb95e.mp4,0132fb63d0bc4832a9066397a36aafaf.mp4,606.0,False,64k,,[0.01 0.08],,0.19,logos/another.gif,3.0,False,True,0.19,SCYHBEiOZ24-b4045faa79aa026b9d483635377cb95e,mp4,SCYHBEiOZ24-b4045faa79aa026b9d483635377cb95e.mp4,SCYHBEiOZ24-b4045faa79aa026b9d483635377cb95e.mp4 +607,/datadrive/videos/SMrJ8HhT_50-f09183b48c38a05bb689b19b35664e2d.mp4,0433cbb0ae9649208ff5fb77bccf50b6.webm,607.0,False,128k,,,webm,,logos/ge.gif,,True,True,-0.22,SMrJ8HhT_50-f09183b48c38a05bb689b19b35664e2d,mp4,SMrJ8HhT_50-f09183b48c38a05bb689b19b35664e2d.mp4,SMrJ8HhT_50-f09183b48c38a05bb689b19b35664e2d.mp4 +608,/datadrive/videos/v2m2Hfu6s8s-032938ac9e96bb12bbb0d720888101fa.webm,516b62191c834dcfaa36a38ce42c8c34.ogv,608.0,,,0.99,,ogv,,logos/sbt.gif,1.0,False,True,,v2m2Hfu6s8s-032938ac9e96bb12bbb0d720888101fa,webm,v2m2Hfu6s8s-032938ac9e96bb12bbb0d720888101fa.webm,v2m2Hfu6s8s-032938ac9e96bb12bbb0d720888101fa.webm +609,/datadrive/videos/4hUEzMxmCYs-062ed9380b05490ac97d6c23e0718e92.webm,8d4b92f4fa314634887dadba276bbe83.webm,609.0,True,,0.65,[0.17 0.08],webm,0.09,,,False,True,,4hUEzMxmCYs-062ed9380b05490ac97d6c23e0718e92,webm,4hUEzMxmCYs-062ed9380b05490ac97d6c23e0718e92.webm,4hUEzMxmCYs-062ed9380b05490ac97d6c23e0718e92.webm +610,/datadrive/videos/pBW5mcO76kY-61a4d9d440831b46f9f2444f076a9be8.webm,9ace0bc8eb60438da6d59ab6a88804cd.webm,610.0,,32k,,[0.04 0.09],,,,4.0,False,False,0.24,pBW5mcO76kY-61a4d9d440831b46f9f2444f076a9be8,webm,pBW5mcO76kY-61a4d9d440831b46f9f2444f076a9be8.webm,pBW5mcO76kY-61a4d9d440831b46f9f2444f076a9be8.webm +611,/datadrive/videos/IBOBWAB7XVw-82c59387d2986b00ac2f4327e8a9f288.mp4,b36b0e1146ee432bab82e4ca3dbd92ba.mp4,611.0,True,,0.86,,,-0.19,,5.0,False,True,0.29,IBOBWAB7XVw-82c59387d2986b00ac2f4327e8a9f288,mp4,IBOBWAB7XVw-82c59387d2986b00ac2f4327e8a9f288.mp4,IBOBWAB7XVw-82c59387d2986b00ac2f4327e8a9f288.mp4 +612,/datadrive/videos/uRR-P4lDxOE-b8407186a8a0470893adda111453ba8f.webm,4ccf23176f4e42dbad3e1a7d4e118117.webm,612.0,,,0.76,,,,,8.0,False,False,,uRR-P4lDxOE-b8407186a8a0470893adda111453ba8f,webm,uRR-P4lDxOE-b8407186a8a0470893adda111453ba8f.webm,uRR-P4lDxOE-b8407186a8a0470893adda111453ba8f.webm +613,/datadrive/videos/wTFMF4CeMDA-74a2f0094e4ea9ccded15ccbe0dba9ce.mp4,ba2dac8a2a4b44659c53671358b6980a.ogv,613.0,True,,,,ogv,-0.13,,6.0,False,False,0.38,wTFMF4CeMDA-74a2f0094e4ea9ccded15ccbe0dba9ce,mp4,wTFMF4CeMDA-74a2f0094e4ea9ccded15ccbe0dba9ce.mp4,wTFMF4CeMDA-74a2f0094e4ea9ccded15ccbe0dba9ce.mp4 +614,/datadrive/videos/AgMNzWiOERs-31d7ad44766e44a5a4335e91298a2f01.webm,bf566b46167641ef83f51bd6e93f2232.webm,614.0,False,64k,,,,0.02,,,False,True,,AgMNzWiOERs-31d7ad44766e44a5a4335e91298a2f01,webm,AgMNzWiOERs-31d7ad44766e44a5a4335e91298a2f01.webm,AgMNzWiOERs-31d7ad44766e44a5a4335e91298a2f01.webm +615,/datadrive/videos/dcyTOe3zVuk-63e68d9901f7b1192364f1842555d85e.webm,3aa5cbff6ec74175be0907040aec67ce.webm,615.0,True,32k,,,,,,8.0,False,True,0.09,dcyTOe3zVuk-63e68d9901f7b1192364f1842555d85e,webm,dcyTOe3zVuk-63e68d9901f7b1192364f1842555d85e.webm,dcyTOe3zVuk-63e68d9901f7b1192364f1842555d85e.webm +616,/datadrive/videos/ERZ7eVcHf98-96cdbed3dc0b1ebb58606fd77d7c786e.webm,b49c86d8c251483eb5745c11e5a9d538.mp4,616.0,,,,[0.04 0.01],mp4,-0.06,,,False,True,-0.28,ERZ7eVcHf98-96cdbed3dc0b1ebb58606fd77d7c786e,webm,ERZ7eVcHf98-96cdbed3dc0b1ebb58606fd77d7c786e.webm,ERZ7eVcHf98-96cdbed3dc0b1ebb58606fd77d7c786e.webm +617,/datadrive/videos/fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753.webm,21ad3988509f4c92a053c892c916a926.webm,617.0,True,,0.76,[0.04 0.16],webm,,logos/sbt.gif,5.0,False,False,-0.02,fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753,webm,fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753.webm,fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753.webm +618,/datadrive/videos/f0lE2b-wD3o-1e16866f7d9b655acfd1acfb6bd6bd4a.webm,2c7493c3af104a1fa05916c061ed12aa.webm,618.0,,,0.92,[0.11 0.11],,,logos/sbt.gif,,False,False,-0.19,f0lE2b-wD3o-1e16866f7d9b655acfd1acfb6bd6bd4a,webm,f0lE2b-wD3o-1e16866f7d9b655acfd1acfb6bd6bd4a.webm,f0lE2b-wD3o-1e16866f7d9b655acfd1acfb6bd6bd4a.webm +619,/datadrive/videos/g9WyvQMluD8-c7eb12c004db838d39448b6a57d6a430.mp4,8e585459e5ca49188e03168842056ce8.mp4,619.0,True,,0.34,,,-0.11,,,False,True,,g9WyvQMluD8-c7eb12c004db838d39448b6a57d6a430,mp4,g9WyvQMluD8-c7eb12c004db838d39448b6a57d6a430.mp4,g9WyvQMluD8-c7eb12c004db838d39448b6a57d6a430.mp4 +621,/datadrive/videos/A_ubLdarod0-5077c66106ec1ce2b1b7d72d057877e5.webm,5bf8db162261405790d53dcc474a0f44.ogv,621.0,,16k,0.33,,ogv,,,,False,False,,A_ubLdarod0-5077c66106ec1ce2b1b7d72d057877e5,webm,A_ubLdarod0-5077c66106ec1ce2b1b7d72d057877e5.webm,A_ubLdarod0-5077c66106ec1ce2b1b7d72d057877e5.webm +622,/datadrive/videos/6omIWrDq5dk-ce223270fa80bd30716227aa98e1ce26.mp4,773e3405e68f4594a011e2d46c060f4d.webm,622.0,,,,,webm,,,9.0,False,True,0.23,6omIWrDq5dk-ce223270fa80bd30716227aa98e1ce26,mp4,6omIWrDq5dk-ce223270fa80bd30716227aa98e1ce26.mp4,6omIWrDq5dk-ce223270fa80bd30716227aa98e1ce26.mp4 +623,/datadrive/videos/si3SfdZ_lHc-71ca46d86ec3c3fd11154adbc5aa442b.mp4,2664b60c1c0c482c9b4c713fe6e11a25.ogv,623.0,False,64k,0.73,,ogv,,,5.0,False,True,,si3SfdZ_lHc-71ca46d86ec3c3fd11154adbc5aa442b,mp4,si3SfdZ_lHc-71ca46d86ec3c3fd11154adbc5aa442b.mp4,si3SfdZ_lHc-71ca46d86ec3c3fd11154adbc5aa442b.mp4 +624,/datadrive/videos/rmPRC1ZSgsw-fcd380052c11d443522723c1936b8733.mp4,9c7d5348e69842c09db77847ec3f5822.mp4,624.0,,,0.3,,,,,3.0,False,False,-0.14,rmPRC1ZSgsw-fcd380052c11d443522723c1936b8733,mp4,rmPRC1ZSgsw-fcd380052c11d443522723c1936b8733.mp4,rmPRC1ZSgsw-fcd380052c11d443522723c1936b8733.mp4 +625,/datadrive/videos/AA82DdkVh5s-db5b2e3d870f1005da5e88c3e6b256f4.mp4,5257b28e753840a389a9cb17be7cd54b.mp4,625.0,False,16k,,,,,logos/new.gif,3.0,False,True,-0.25,AA82DdkVh5s-db5b2e3d870f1005da5e88c3e6b256f4,mp4,AA82DdkVh5s-db5b2e3d870f1005da5e88c3e6b256f4.mp4,AA82DdkVh5s-db5b2e3d870f1005da5e88c3e6b256f4.mp4 +626,/datadrive/videos/E9F02r50t1U-4e0e56e89f7a841355f0138eb40acf75.mp4,662408c6ee294a2da965094852e67a8f.mp4,626.0,False,16k,,,,,,5.0,False,False,,E9F02r50t1U-4e0e56e89f7a841355f0138eb40acf75,mp4,E9F02r50t1U-4e0e56e89f7a841355f0138eb40acf75.mp4,E9F02r50t1U-4e0e56e89f7a841355f0138eb40acf75.mp4 +628,/datadrive/videos/nyia9UqpBnc-19fe4eab9ffa2ac395045a7320550fed.mp4,414e062cb6fb4372bf6deacabf311593.mp4,628.0,False,,0.72,,,,,,False,True,0.23,nyia9UqpBnc-19fe4eab9ffa2ac395045a7320550fed,mp4,nyia9UqpBnc-19fe4eab9ffa2ac395045a7320550fed.mp4,nyia9UqpBnc-19fe4eab9ffa2ac395045a7320550fed.mp4 +629,/datadrive/videos/qRP6ruit2mA-4ed8299d892230b0c96dc5ecce67f7ae.webm,6636512db16c4b66942f772c84775174.webm,629.0,,,0.86,[0.08 0.06],,0.17,logos/jazeera.png,1.0,False,False,,qRP6ruit2mA-4ed8299d892230b0c96dc5ecce67f7ae,webm,qRP6ruit2mA-4ed8299d892230b0c96dc5ecce67f7ae.webm,qRP6ruit2mA-4ed8299d892230b0c96dc5ecce67f7ae.webm +630,/datadrive/videos/LmAaTa9Z7vA-c2a0dc7591662f862919f21de350ca84.mp4,586fc8881e954cd398495dea5424c120.mp4,630.0,False,32k,0.26,,,-0.05,logos/download.png,,True,True,,LmAaTa9Z7vA-c2a0dc7591662f862919f21de350ca84,mp4,LmAaTa9Z7vA-c2a0dc7591662f862919f21de350ca84.mp4,LmAaTa9Z7vA-c2a0dc7591662f862919f21de350ca84.mp4 +631,/datadrive/videos/G9LRUrGmUvA-211e0156bbd6a97e70e21e54bf64bff2.mp4,b37a3303c8834fd99833e95746088ca3.ogv,631.0,False,,0.5,,ogv,,,,False,False,-0.4,G9LRUrGmUvA-211e0156bbd6a97e70e21e54bf64bff2,mp4,G9LRUrGmUvA-211e0156bbd6a97e70e21e54bf64bff2.mp4,G9LRUrGmUvA-211e0156bbd6a97e70e21e54bf64bff2.mp4 +632,/datadrive/videos/bCoersXDThs-bc2e9a490d10a99c69a2455cb18f5c56.mp4,37f3f812a0ae46079e132c466bb70e6c.mp4,632.0,,,,,,,logos/openair.gif,,False,True,,bCoersXDThs-bc2e9a490d10a99c69a2455cb18f5c56,mp4,bCoersXDThs-bc2e9a490d10a99c69a2455cb18f5c56.mp4,bCoersXDThs-bc2e9a490d10a99c69a2455cb18f5c56.mp4 +633,/datadrive/videos/GKUa6sPvcgo-1603d3e1e6c866967ecb9f6a0ea75d5e.webm,19a8331304ab4606ae651ae0bc8b15de.webm,633.0,,128k,0.95,[0.05 0.05],,,,,False,False,,GKUa6sPvcgo-1603d3e1e6c866967ecb9f6a0ea75d5e,webm,GKUa6sPvcgo-1603d3e1e6c866967ecb9f6a0ea75d5e.webm,GKUa6sPvcgo-1603d3e1e6c866967ecb9f6a0ea75d5e.webm +634,/datadrive/videos/o60Wr69WTZ8-d7468d16169c3b4284f2978f137e373f.mp4,25bed611cad44835bcb115838eb1607a.mp4,634.0,,,,,,-0.06,logos/openair.gif,9.0,False,True,-0.22,o60Wr69WTZ8-d7468d16169c3b4284f2978f137e373f,mp4,o60Wr69WTZ8-d7468d16169c3b4284f2978f137e373f.mp4,o60Wr69WTZ8-d7468d16169c3b4284f2978f137e373f.mp4 +637,/datadrive/videos/3w5UH3iEBPs-1e698e236a4a82048c6232ab2828aa14.webm,cdec8abd6ab34afbb4bc78dc2a53c647.webm,637.0,,,0.7,,,-0.07,logos/sbt.gif,6.0,False,True,0.29,3w5UH3iEBPs-1e698e236a4a82048c6232ab2828aa14,webm,3w5UH3iEBPs-1e698e236a4a82048c6232ab2828aa14.webm,3w5UH3iEBPs-1e698e236a4a82048c6232ab2828aa14.webm +638,/datadrive/videos/FcZ7AiM1x9A-64a30f8985b1a7ed6a25f16aa14068c1.webm,8e1c0364e813404292116273053ec418.webm,638.0,True,64k,0.58,,webm,,,7.0,False,True,0.01,FcZ7AiM1x9A-64a30f8985b1a7ed6a25f16aa14068c1,webm,FcZ7AiM1x9A-64a30f8985b1a7ed6a25f16aa14068c1.webm,FcZ7AiM1x9A-64a30f8985b1a7ed6a25f16aa14068c1.webm +639,/datadrive/videos/kMXhXhtceLk-9cadd17fc719405d34ad8d20da25d3fe.mp4,406bd6775b2549a69002f0bd8a82e0ed.ogv,639.0,True,,,,ogv,,,,False,False,0.26,kMXhXhtceLk-9cadd17fc719405d34ad8d20da25d3fe,mp4,kMXhXhtceLk-9cadd17fc719405d34ad8d20da25d3fe.mp4,kMXhXhtceLk-9cadd17fc719405d34ad8d20da25d3fe.mp4 +641,/datadrive/videos/ZP4_4CdGoCw-21260ad16d4f183bc33e2a616c8e286f.mp4,16785f184f7e442a95c2d33c899a4ba9.mp4,641.0,False,16k,0.71,,,-0.02,logos/download.png,6.0,False,False,,ZP4_4CdGoCw-21260ad16d4f183bc33e2a616c8e286f,mp4,ZP4_4CdGoCw-21260ad16d4f183bc33e2a616c8e286f.mp4,ZP4_4CdGoCw-21260ad16d4f183bc33e2a616c8e286f.mp4 +642,/datadrive/videos/JX_FxS6onOc-726d8602abd8f7e3f36dea2e849c8779.webm,923dc57873a7427eb8b82ac16d3a75ec.webm,642.0,,,0.5,[0.13 0.16],,0.14,logos/fox.png,2.0,False,True,,JX_FxS6onOc-726d8602abd8f7e3f36dea2e849c8779,webm,JX_FxS6onOc-726d8602abd8f7e3f36dea2e849c8779.webm,JX_FxS6onOc-726d8602abd8f7e3f36dea2e849c8779.webm +643,/datadrive/videos/yVRoysHTNWE-de8c9b83722a96390e1f3be98b298ca3.mp4,3240f759baf147dab99c9ab2ec80f668.mp4,643.0,,32k,0.8,[0.07 0.11],,,,,False,True,0.3,yVRoysHTNWE-de8c9b83722a96390e1f3be98b298ca3,mp4,yVRoysHTNWE-de8c9b83722a96390e1f3be98b298ca3.mp4,yVRoysHTNWE-de8c9b83722a96390e1f3be98b298ca3.mp4 +644,/datadrive/videos/D4fS8wV-6UI-9418ac94ddf66e4a6a3137829b5560a7.webm,bd17403fbad746d99ded1b4b9f9cb67d.ogv,644.0,,,0.25,,ogv,,,,False,False,0.23,D4fS8wV-6UI-9418ac94ddf66e4a6a3137829b5560a7,webm,D4fS8wV-6UI-9418ac94ddf66e4a6a3137829b5560a7.webm,D4fS8wV-6UI-9418ac94ddf66e4a6a3137829b5560a7.webm +646,/datadrive/videos/flsevUvm098-ba74e90711c9692f2a6a1157a6eaf146.mp4,7875154237a2404dbd9caccb8cdc3f28.mp4,646.0,,,,,,-0.02,logos/jazeera.png,3.0,False,False,,flsevUvm098-ba74e90711c9692f2a6a1157a6eaf146,mp4,flsevUvm098-ba74e90711c9692f2a6a1157a6eaf146.mp4,flsevUvm098-ba74e90711c9692f2a6a1157a6eaf146.mp4 +647,/datadrive/videos/IkDqhfG26S8-7a6bebda45c57a5ea3d59288eabb06c7.webm,646eeef3a4614ee1ab25d37135d972b7.mp4,647.0,,,,,mp4,-0.08,,6.0,True,False,,IkDqhfG26S8-7a6bebda45c57a5ea3d59288eabb06c7,webm,IkDqhfG26S8-7a6bebda45c57a5ea3d59288eabb06c7.webm,IkDqhfG26S8-7a6bebda45c57a5ea3d59288eabb06c7.webm +649,/datadrive/videos/UyhXoWjdmSk-e8c140e5322b4f3002b824a01199f7de.webm,ff2692df2d5e446faf3fe5e3b7d3a153.ogv,649.0,True,,0.2,[0.16 0.19],ogv,,logos/msnbc.png,6.0,False,True,,UyhXoWjdmSk-e8c140e5322b4f3002b824a01199f7de,webm,UyhXoWjdmSk-e8c140e5322b4f3002b824a01199f7de.webm,UyhXoWjdmSk-e8c140e5322b4f3002b824a01199f7de.webm +650,/datadrive/videos/SV2kqsL3AJc-7a21675b7f747b0b512566f9ece65c8d.mp4,08a75622c160497d8f98ee45dd1c5605.mp4,650.0,False,,0.83,[0.12 0.18],,-0.04,logos/download.png,,False,False,0.23,SV2kqsL3AJc-7a21675b7f747b0b512566f9ece65c8d,mp4,SV2kqsL3AJc-7a21675b7f747b0b512566f9ece65c8d.mp4,SV2kqsL3AJc-7a21675b7f747b0b512566f9ece65c8d.mp4 +651,/datadrive/videos/xW0WYnr_zD4-cb470ee7cb73c51174f8afd7805a106a.mp4,384762b3e28c49a3bffcbe5eef1577b1.mp4,651.0,True,,0.39,,,,,,False,True,,xW0WYnr_zD4-cb470ee7cb73c51174f8afd7805a106a,mp4,xW0WYnr_zD4-cb470ee7cb73c51174f8afd7805a106a.mp4,xW0WYnr_zD4-cb470ee7cb73c51174f8afd7805a106a.mp4 +653,/datadrive/videos/EJR-g-4eGEc-023ec07ea29583059af0bd5964976df6.webm,a29d4f52824640bb996469b5e4eb989e.webm,653.0,True,64k,0.56,,,-0.05,,0.0,False,False,,EJR-g-4eGEc-023ec07ea29583059af0bd5964976df6,webm,EJR-g-4eGEc-023ec07ea29583059af0bd5964976df6.webm,EJR-g-4eGEc-023ec07ea29583059af0bd5964976df6.webm +654,/datadrive/videos/58bdCW1mLro-802a0899b24bf89b4a005996315c09fc.webm,5a606144342449249d406cc5a22c51f3.webm,654.0,,128k,0.96,,webm,0.16,logos/openair.gif,,True,True,,58bdCW1mLro-802a0899b24bf89b4a005996315c09fc,webm,58bdCW1mLro-802a0899b24bf89b4a005996315c09fc.webm,58bdCW1mLro-802a0899b24bf89b4a005996315c09fc.webm +655,/datadrive/videos/Q-3Hnc5lph4-fdd520832dde0a2e318ec196c4c59fd0.mp4,a826ebb3b2c74f279881ce17e9b9f2f0.mp4,655.0,,,0.54,,,,logos/new.gif,2.635,False,True,,Q-3Hnc5lph4-fdd520832dde0a2e318ec196c4c59fd0,mp4,Q-3Hnc5lph4-fdd520832dde0a2e318ec196c4c59fd0.mp4,Q-3Hnc5lph4-fdd520832dde0a2e318ec196c4c59fd0.mp4 +656,/datadrive/videos/U0jytcVyiXY-265790baf0f82c58ac338c45b2dedb16.mp4,1c6e8f69312243e09dcf12bbcbd4994b.mp4,656.0,False,,,,mp4,0.08,,,False,True,,U0jytcVyiXY-265790baf0f82c58ac338c45b2dedb16,mp4,U0jytcVyiXY-265790baf0f82c58ac338c45b2dedb16.mp4,U0jytcVyiXY-265790baf0f82c58ac338c45b2dedb16.mp4 +657,/datadrive/videos/qxaCQFr1ywA-70795193fbef384b469aed1ae3c12c14.mp4,bf98e9176e724b0686ab3ccf000b27fd.mp4,657.0,False,,,,mp4,,,1.0,False,True,0.17,qxaCQFr1ywA-70795193fbef384b469aed1ae3c12c14,mp4,qxaCQFr1ywA-70795193fbef384b469aed1ae3c12c14.mp4,qxaCQFr1ywA-70795193fbef384b469aed1ae3c12c14.mp4 +658,/datadrive/videos/sG2sXosnMp8-5456a34a1995c2bf4b648baf89500582.webm,2da8a78b71ad427fb4561e304c737f3b.ogv,658.0,True,64k,,[0.12 0.13],ogv,,logos/fox.png,1.0,False,False,0.22,sG2sXosnMp8-5456a34a1995c2bf4b648baf89500582,webm,sG2sXosnMp8-5456a34a1995c2bf4b648baf89500582.webm,sG2sXosnMp8-5456a34a1995c2bf4b648baf89500582.webm +659,/datadrive/videos/G1APQPUX4Ls-013f1e07168ff9b590fce1edba85f32a.mp4,ff3607078ba449a283a841a87796d6c8.mp4,659.0,False,64k,,,,,,,False,False,0.0,G1APQPUX4Ls-013f1e07168ff9b590fce1edba85f32a,mp4,G1APQPUX4Ls-013f1e07168ff9b590fce1edba85f32a.mp4,G1APQPUX4Ls-013f1e07168ff9b590fce1edba85f32a.mp4 +660,/datadrive/videos/titFWCzsDrc-db34f0cf34921a7730ac4033740b3730.webm,1014099d4c7948728ad71c701390ce3b.webm,660.0,True,32k,,,webm,,logos/download.png,,False,True,,titFWCzsDrc-db34f0cf34921a7730ac4033740b3730,webm,titFWCzsDrc-db34f0cf34921a7730ac4033740b3730.webm,titFWCzsDrc-db34f0cf34921a7730ac4033740b3730.webm +661,/datadrive/videos/5DMCF2sKJpU-859bbc2976278ae50e91639fbc4bad77.webm,4848b40eb6144572aa368cf4a4e4b884.webm,661.0,True,,0.47,,,-0.14,,,False,False,-0.13,5DMCF2sKJpU-859bbc2976278ae50e91639fbc4bad77,webm,5DMCF2sKJpU-859bbc2976278ae50e91639fbc4bad77.webm,5DMCF2sKJpU-859bbc2976278ae50e91639fbc4bad77.webm +662,/datadrive/videos/MnEPQrGkNEg-644029fe2dfc3c342ea363d633a90fb5.mp4,b9dc6b70d543497ab0f14b86b0a955c1.mp4,662.0,False,,0.3,[0.06 0.08],mp4,,logos/ge.gif,4.0,False,True,-0.07,MnEPQrGkNEg-644029fe2dfc3c342ea363d633a90fb5,mp4,MnEPQrGkNEg-644029fe2dfc3c342ea363d633a90fb5.mp4,MnEPQrGkNEg-644029fe2dfc3c342ea363d633a90fb5.mp4 +663,/datadrive/videos/VL5hWpEa-ZM-79d9c9eafac6fa5a98ede1fe65aac8af.mp4,58e782e984614034af29b2dfd5d2e6a2.mp4,663.0,,,0.57,,,0.09,,7.0,False,False,,VL5hWpEa-ZM-79d9c9eafac6fa5a98ede1fe65aac8af,mp4,VL5hWpEa-ZM-79d9c9eafac6fa5a98ede1fe65aac8af.mp4,VL5hWpEa-ZM-79d9c9eafac6fa5a98ede1fe65aac8af.mp4 +664,/datadrive/videos/BzCTedv_4FQ-8303929653364b140677844995dd2b7a.webm,81d9293f336446a296dceac02ad432bc.mp4,664.0,False,,,[0.03 0.09],mp4,-0.03,logos/fox.png,4.0,False,False,,BzCTedv_4FQ-8303929653364b140677844995dd2b7a,webm,BzCTedv_4FQ-8303929653364b140677844995dd2b7a.webm,BzCTedv_4FQ-8303929653364b140677844995dd2b7a.webm +665,/datadrive/videos/mQIQPSuHFGI-9f7bc95fb1cdb4e1c3c5af47fcea6a4f.mp4,a5045fe4ff5b4124ba422b986c9e3932.mp4,665.0,True,128k,,[0.04 0.19],,,logos/fox.png,,False,False,,mQIQPSuHFGI-9f7bc95fb1cdb4e1c3c5af47fcea6a4f,mp4,mQIQPSuHFGI-9f7bc95fb1cdb4e1c3c5af47fcea6a4f.mp4,mQIQPSuHFGI-9f7bc95fb1cdb4e1c3c5af47fcea6a4f.mp4 +667,/datadrive/videos/NSoPlVmMhq4-6bc6828aa808aa13f903295cc43b9e25.webm,005fb0bd1ba8446fa745a310f133e20e.webm,667.0,True,,0.73,[0.16 0.04],,-0.08,,4.0,False,False,-0.35,NSoPlVmMhq4-6bc6828aa808aa13f903295cc43b9e25,webm,NSoPlVmMhq4-6bc6828aa808aa13f903295cc43b9e25.webm,NSoPlVmMhq4-6bc6828aa808aa13f903295cc43b9e25.webm +669,/datadrive/videos/Fc-vxJ7RSmY-f0e695b872349f67aa6250b770696b92.webm,7a417cda96d147c7aeec0d77e188e2a0.webm,669.0,False,,0.9,,,,logos/openair.gif,4.0,False,True,-0.39,Fc-vxJ7RSmY-f0e695b872349f67aa6250b770696b92,webm,Fc-vxJ7RSmY-f0e695b872349f67aa6250b770696b92.webm,Fc-vxJ7RSmY-f0e695b872349f67aa6250b770696b92.webm +670,/datadrive/videos/SRRMHY-g76E-811333b07f76521285883dc351d08eb6.mp4,4673ced1e55f4493b81b4413321c7e5d.mp4,670.0,True,,,,,-0.11,logos/download.png,6.0,False,True,,SRRMHY-g76E-811333b07f76521285883dc351d08eb6,mp4,SRRMHY-g76E-811333b07f76521285883dc351d08eb6.mp4,SRRMHY-g76E-811333b07f76521285883dc351d08eb6.mp4 +671,/datadrive/videos/gHOKz_4h5S8-2cf2156b48ec3a6ccc26c2e6cbaa885a.mp4,19fa48bf09544f80a7953a3f5240f704.mp4,671.0,False,16k,,,,0.13,,1.0,False,False,,gHOKz_4h5S8-2cf2156b48ec3a6ccc26c2e6cbaa885a,mp4,gHOKz_4h5S8-2cf2156b48ec3a6ccc26c2e6cbaa885a.mp4,gHOKz_4h5S8-2cf2156b48ec3a6ccc26c2e6cbaa885a.mp4 +672,/datadrive/videos/SjymYuy1ASU-e0b136860bc245bd30e7d1b7c902a6a3.mp4,9c002b4a2986456ca001e88485c81b45.mp4,672.0,False,64k,0.39,[0.01 0.13],mp4,0.16,,5.0,False,True,,SjymYuy1ASU-e0b136860bc245bd30e7d1b7c902a6a3,mp4,SjymYuy1ASU-e0b136860bc245bd30e7d1b7c902a6a3.mp4,SjymYuy1ASU-e0b136860bc245bd30e7d1b7c902a6a3.mp4 +673,/datadrive/videos/5uomPz6EzTk-ffaf13438bce726a6bf9982727564cbb.webm,9178d1116b6b40e29548789dc3384b98.mp4,673.0,,,0.99,,mp4,,,6.0,False,True,-0.35,5uomPz6EzTk-ffaf13438bce726a6bf9982727564cbb,webm,5uomPz6EzTk-ffaf13438bce726a6bf9982727564cbb.webm,5uomPz6EzTk-ffaf13438bce726a6bf9982727564cbb.webm +674,/datadrive/videos/FKkEi0ybl6Y-61e4a598a1af84910923ff7988955eff.mp4,b2f8b5c955a34b4da5f4f79f7d50cef0.webm,674.0,False,128k,0.91,[0.16 0.11],webm,0.05,logos/msnbc.png,,False,True,-0.3,FKkEi0ybl6Y-61e4a598a1af84910923ff7988955eff,mp4,FKkEi0ybl6Y-61e4a598a1af84910923ff7988955eff.mp4,FKkEi0ybl6Y-61e4a598a1af84910923ff7988955eff.mp4 +675,/datadrive/videos/23cf0MqTJMk-1a2a22a522d3a1f9dcc5ffa2d7820e5c.webm,ac659618d71e408089f0217fa3f583ab.webm,675.0,,64k,,,,-0.03,logos/download.png,1.0,False,True,,23cf0MqTJMk-1a2a22a522d3a1f9dcc5ffa2d7820e5c,webm,23cf0MqTJMk-1a2a22a522d3a1f9dcc5ffa2d7820e5c.webm,23cf0MqTJMk-1a2a22a522d3a1f9dcc5ffa2d7820e5c.webm +676,/datadrive/videos/UBK6Oj7wXvY-0c0a0ea3c693b0efa3d2dba26431c741.webm,0cb7908fbd3a4914a07519cfccfc7979.ogv,676.0,,32k,0.81,,ogv,0.18,logos/sbt.gif,,False,False,,UBK6Oj7wXvY-0c0a0ea3c693b0efa3d2dba26431c741,webm,UBK6Oj7wXvY-0c0a0ea3c693b0efa3d2dba26431c741.webm,UBK6Oj7wXvY-0c0a0ea3c693b0efa3d2dba26431c741.webm +677,/datadrive/videos/kMLiSPXAN8Y-bcdacebe246d68fae99512e36a3ee743.webm,8cf94529bf694f6db7f856234e4040f5.webm,677.0,True,,0.69,,,,,,False,False,-0.04,kMLiSPXAN8Y-bcdacebe246d68fae99512e36a3ee743,webm,kMLiSPXAN8Y-bcdacebe246d68fae99512e36a3ee743.webm,kMLiSPXAN8Y-bcdacebe246d68fae99512e36a3ee743.webm +679,/datadrive/videos/c-0Hn5Xi0nw-6dc0655617b59aa956e77f5946e30862.mp4,307bcd7fc3df47498e65d5b677ce68bf.mp4,679.0,False,16k,,[0.09 0.17],,-0.1,logos/ge.gif,,False,True,,c-0Hn5Xi0nw-6dc0655617b59aa956e77f5946e30862,mp4,c-0Hn5Xi0nw-6dc0655617b59aa956e77f5946e30862.mp4,c-0Hn5Xi0nw-6dc0655617b59aa956e77f5946e30862.mp4 +680,/datadrive/videos/hCih259gbvg-a6342b7679035421992bb43278875880.webm,33e1c733245b41bfafd0ca62e97574ea.webm,680.0,False,,0.91,,,,,6.0,False,True,,hCih259gbvg-a6342b7679035421992bb43278875880,webm,hCih259gbvg-a6342b7679035421992bb43278875880.webm,hCih259gbvg-a6342b7679035421992bb43278875880.webm +681,/datadrive/videos/ullnPRj8Cp0-133cdf55ae4ad7f5de5dc7ad2172ae12.webm,6fd47b781b11486396bb7e0c8e1bd9fd.webm,681.0,False,64k,0.53,,,,,,False,True,-0.35,ullnPRj8Cp0-133cdf55ae4ad7f5de5dc7ad2172ae12,webm,ullnPRj8Cp0-133cdf55ae4ad7f5de5dc7ad2172ae12.webm,ullnPRj8Cp0-133cdf55ae4ad7f5de5dc7ad2172ae12.webm +682,/datadrive/videos/1TTBun1tpTE-e44b855baebe2869468ddd4ec08af9b1.webm,2013119ba642440bbd7f4c2f4f225085.webm,682.0,False,,,[0.01 0.05],,-0.19,,,False,False,-0.27,1TTBun1tpTE-e44b855baebe2869468ddd4ec08af9b1,webm,1TTBun1tpTE-e44b855baebe2869468ddd4ec08af9b1.webm,1TTBun1tpTE-e44b855baebe2869468ddd4ec08af9b1.webm +684,/datadrive/videos/ISsMe_ZV7Gs-4d3a58617039b0b8c1b32d26fb61e8c3.mp4,c5aea3cbfa804c1a81dbf5eae46ca6ab.webm,684.0,False,,,[0.14 0.01],webm,-0.1,,,False,False,,ISsMe_ZV7Gs-4d3a58617039b0b8c1b32d26fb61e8c3,mp4,ISsMe_ZV7Gs-4d3a58617039b0b8c1b32d26fb61e8c3.mp4,ISsMe_ZV7Gs-4d3a58617039b0b8c1b32d26fb61e8c3.mp4 +687,/datadrive/videos/ShljDSOaKh4-f9cdca0cbf252c0820676091761e1b45.webm,94d115c24f07419ab977f4e6807bfe4d.mp4,687.0,,32k,,,mp4,-0.02,logos/openair.gif,8.0,False,True,0.2,ShljDSOaKh4-f9cdca0cbf252c0820676091761e1b45,webm,ShljDSOaKh4-f9cdca0cbf252c0820676091761e1b45.webm,ShljDSOaKh4-f9cdca0cbf252c0820676091761e1b45.webm +688,/datadrive/videos/r0jAeJl7vWE-25e374a0f25dd53cbc0e49fc37a53ad6.mp4,630de493844b48c29d054ce102baff1d.mp4,688.0,,16k,0.9,,,-0.2,logos/download.png,,False,False,-0.33,r0jAeJl7vWE-25e374a0f25dd53cbc0e49fc37a53ad6,mp4,r0jAeJl7vWE-25e374a0f25dd53cbc0e49fc37a53ad6.mp4,r0jAeJl7vWE-25e374a0f25dd53cbc0e49fc37a53ad6.mp4 +689,/datadrive/videos/AgcSC1-jB-k-e20689cc3e8d922cb5524cd38ffd80b6.webm,b655946c03fe45199788e1dbc249acc5.webm,689.0,,,0.67,,,0.16,logos/fox.png,4.0,False,True,-0.27,AgcSC1-jB-k-e20689cc3e8d922cb5524cd38ffd80b6,webm,AgcSC1-jB-k-e20689cc3e8d922cb5524cd38ffd80b6.webm,AgcSC1-jB-k-e20689cc3e8d922cb5524cd38ffd80b6.webm +690,/datadrive/videos/8G48DCy66VM-7e59416fd74d85643fe9f32254df30c8.mp4,0099e4c9c290409fa0269aeedc4414e9.mp4,690.0,,,,,,,,7.0,False,False,-0.24,8G48DCy66VM-7e59416fd74d85643fe9f32254df30c8,mp4,8G48DCy66VM-7e59416fd74d85643fe9f32254df30c8.mp4,8G48DCy66VM-7e59416fd74d85643fe9f32254df30c8.mp4 +691,/datadrive/videos/BAy4ztYUaX8-c4192cba58779ef2291b623e2c866a5d.mp4,d8d7ae2914754bd1ba47be3971ceef6c.mp4,691.0,,128k,0.56,[0.06 0.19],,,,2.0,False,True,,BAy4ztYUaX8-c4192cba58779ef2291b623e2c866a5d,mp4,BAy4ztYUaX8-c4192cba58779ef2291b623e2c866a5d.mp4,BAy4ztYUaX8-c4192cba58779ef2291b623e2c866a5d.mp4 +692,/datadrive/videos/SdqCgP2hQ8c-8ea312ec9100c294eae4e85c3df4f5df.mp4,b0812c9e1d2440bfbde8992e4bc2fc8a.ogv,692.0,False,,0.73,[0.19 0.19],ogv,0.0,logos/ge.gif,0.0,False,False,,SdqCgP2hQ8c-8ea312ec9100c294eae4e85c3df4f5df,mp4,SdqCgP2hQ8c-8ea312ec9100c294eae4e85c3df4f5df.mp4,SdqCgP2hQ8c-8ea312ec9100c294eae4e85c3df4f5df.mp4 +693,/datadrive/videos/VjGQrAm8o90-5333a5c68a226ac945b920c78594eb9f.mp4,c8a78c8943aa44cfb1855e58ec6f29e5.mp4,693.0,False,,,[0.18 0.19],,0.13,logos/ge.gif,,False,False,,VjGQrAm8o90-5333a5c68a226ac945b920c78594eb9f,mp4,VjGQrAm8o90-5333a5c68a226ac945b920c78594eb9f.mp4,VjGQrAm8o90-5333a5c68a226ac945b920c78594eb9f.mp4 +694,/datadrive/videos/ACm_lgcxfpw-bbc938947418d12aef287e27bb574c07.webm,d5a66887689f4a29b5cb2d72893aeaf8.ogv,694.0,,64k,,,ogv,,logos/jazeera.png,3.0,False,True,,ACm_lgcxfpw-bbc938947418d12aef287e27bb574c07,webm,ACm_lgcxfpw-bbc938947418d12aef287e27bb574c07.webm,ACm_lgcxfpw-bbc938947418d12aef287e27bb574c07.webm +695,/datadrive/videos/VJBGMt2z85s-6a0a20d85be445402186df39a8e6d2e1.mp4,03f90a4fe42c4a37a8b999d17cb18f59.mp4,695.0,False,64k,,,,,logos/msnbc.png,,False,False,,VJBGMt2z85s-6a0a20d85be445402186df39a8e6d2e1,mp4,VJBGMt2z85s-6a0a20d85be445402186df39a8e6d2e1.mp4,VJBGMt2z85s-6a0a20d85be445402186df39a8e6d2e1.mp4 +696,/datadrive/videos/LFnMl6Lj3co-11cf15e9ee5ae44575f2743de9812ee5.mp4,ce7a8dedc5ef4accae9d8f9933547ecc.webm,696.0,False,64k,0.93,,webm,,logos/openair.gif,2.0,False,True,0.23,LFnMl6Lj3co-11cf15e9ee5ae44575f2743de9812ee5,mp4,LFnMl6Lj3co-11cf15e9ee5ae44575f2743de9812ee5.mp4,LFnMl6Lj3co-11cf15e9ee5ae44575f2743de9812ee5.mp4 +697,/datadrive/videos/dcyTOe3zVuk-63e68d9901f7b1192364f1842555d85e.webm,448889657bfb47d8888225826059f15c.webm,697.0,,64k,,,webm,,logos/fox.png,3.0,False,False,-0.28,dcyTOe3zVuk-63e68d9901f7b1192364f1842555d85e,webm,dcyTOe3zVuk-63e68d9901f7b1192364f1842555d85e.webm,dcyTOe3zVuk-63e68d9901f7b1192364f1842555d85e.webm +698,/datadrive/videos/z8dpUShZJEo-a15b60e20ceacd5c563df4f7532b46f9.webm,3a634404b35e4a9da4f8f3429965556d.webm,698.0,,,,[0.19 0.07],webm,,,8.0,False,True,,z8dpUShZJEo-a15b60e20ceacd5c563df4f7532b46f9,webm,z8dpUShZJEo-a15b60e20ceacd5c563df4f7532b46f9.webm,z8dpUShZJEo-a15b60e20ceacd5c563df4f7532b46f9.webm +701,/datadrive/videos/6aFDcJGTJMc-54572dd08f682a62719ff1c1f871b74f.webm,6bf07b8328204563bcc42c35710a6c99.webm,701.0,False,,0.2,[0.03 0.08],,0.1,,,False,False,,6aFDcJGTJMc-54572dd08f682a62719ff1c1f871b74f,webm,6aFDcJGTJMc-54572dd08f682a62719ff1c1f871b74f.webm,6aFDcJGTJMc-54572dd08f682a62719ff1c1f871b74f.webm +702,/datadrive/videos/AA82DdkVh5s-db5b2e3d870f1005da5e88c3e6b256f4.mp4,d26468ddc9eb4436906535812429566b.mp4,702.0,False,,,[0.1 0.08],,-0.07,,1.0,False,False,-0.17,AA82DdkVh5s-db5b2e3d870f1005da5e88c3e6b256f4,mp4,AA82DdkVh5s-db5b2e3d870f1005da5e88c3e6b256f4.mp4,AA82DdkVh5s-db5b2e3d870f1005da5e88c3e6b256f4.mp4 +703,/datadrive/videos/20vCvzHpWQI-df74befa83d3f79b50754184f2f8bdde.webm,2af1d233629d4ae8a4107832ec7a2ede.webm,703.0,,128k,0.77,[0.07 0.04],,0.15,,,True,False,-0.34,20vCvzHpWQI-df74befa83d3f79b50754184f2f8bdde,webm,20vCvzHpWQI-df74befa83d3f79b50754184f2f8bdde.webm,20vCvzHpWQI-df74befa83d3f79b50754184f2f8bdde.webm +706,/datadrive/videos/Jn-K0JVVnHY-b0cddbfec1a38cc8de863ea986e1dcbe.mp4,4fdeb8c434534ba196e64d4f557a4bf6.mp4,706.0,False,32k,0.82,[0.16 0.15],,,,1.0,False,False,,Jn-K0JVVnHY-b0cddbfec1a38cc8de863ea986e1dcbe,mp4,Jn-K0JVVnHY-b0cddbfec1a38cc8de863ea986e1dcbe.mp4,Jn-K0JVVnHY-b0cddbfec1a38cc8de863ea986e1dcbe.mp4 +708,/datadrive/videos/6omIWrDq5dk-ce223270fa80bd30716227aa98e1ce26.mp4,80b42cf9ca9940eca6914fc76243c3c7.mp4,708.0,False,32k,0.65,[0.08 0.16],,,logos/jazeera.png,1.0,False,True,,6omIWrDq5dk-ce223270fa80bd30716227aa98e1ce26,mp4,6omIWrDq5dk-ce223270fa80bd30716227aa98e1ce26.mp4,6omIWrDq5dk-ce223270fa80bd30716227aa98e1ce26.mp4 +709,/datadrive/videos/GWVHCj7C1Wo-8cc98d21fbdb449dead84bbc9855e3a6.mp4,fdbecbfceb4a49cc940a816aff85f183.mp4,709.0,True,64k,0.73,,mp4,-0.11,logos/msnbc.png,,False,False,,GWVHCj7C1Wo-8cc98d21fbdb449dead84bbc9855e3a6,mp4,GWVHCj7C1Wo-8cc98d21fbdb449dead84bbc9855e3a6.mp4,GWVHCj7C1Wo-8cc98d21fbdb449dead84bbc9855e3a6.mp4 +710,/datadrive/videos/cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151.mp4,119afa92c4744686bbe5b30efc36db0c.mp4,710.0,False,64k,0.21,[0.11 0.03],,,logos/openair.gif,,False,False,-0.02,cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151,mp4,cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151.mp4,cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151.mp4 +711,/datadrive/videos/QJ_kpQvdMGo-e431fdf359e9fea43b2b8bc94d5abb0e.webm,b1bf4d99af51477f81c1fa122976e759.ogv,711.0,,128k,,,ogv,-0.02,,4.0,False,False,,QJ_kpQvdMGo-e431fdf359e9fea43b2b8bc94d5abb0e,webm,QJ_kpQvdMGo-e431fdf359e9fea43b2b8bc94d5abb0e.webm,QJ_kpQvdMGo-e431fdf359e9fea43b2b8bc94d5abb0e.webm +712,/datadrive/videos/g7PSxWsnslI-744f3f86f7face1a28fb5a4b1a44fb0a.webm,923137c266d74af18b5f855f14946dc1.webm,712.0,False,64k,,,,0.16,,2.0,True,True,,g7PSxWsnslI-744f3f86f7face1a28fb5a4b1a44fb0a,webm,g7PSxWsnslI-744f3f86f7face1a28fb5a4b1a44fb0a.webm,g7PSxWsnslI-744f3f86f7face1a28fb5a4b1a44fb0a.webm +713,/datadrive/videos/UyhXoWjdmSk-e8c140e5322b4f3002b824a01199f7de.webm,81a5454592744140a2a8fad76402f158.mp4,713.0,False,,,[0.05 0.16],mp4,,logos/jazeera.png,,True,False,-0.18,UyhXoWjdmSk-e8c140e5322b4f3002b824a01199f7de,webm,UyhXoWjdmSk-e8c140e5322b4f3002b824a01199f7de.webm,UyhXoWjdmSk-e8c140e5322b4f3002b824a01199f7de.webm +714,/datadrive/videos/6LGE5ry-8A0-fc0c4c4855cb98fcbe152e0ec75115b1.webm,8107a8c388b44b12a831ca7abcfc7dd4.webm,714.0,False,16k,0.54,[0.08 0.05],,,logos/download.png,6.0,False,True,,6LGE5ry-8A0-fc0c4c4855cb98fcbe152e0ec75115b1,webm,6LGE5ry-8A0-fc0c4c4855cb98fcbe152e0ec75115b1.webm,6LGE5ry-8A0-fc0c4c4855cb98fcbe152e0ec75115b1.webm +716,/datadrive/videos/eslC_KMP6aw-9ac2a2507204cbf222cfc3c1ae4d66a2.mp4,17d9d2f65fec4451a67c3338ea08cfdd.ogv,716.0,,,,,ogv,,logos/new.gif,8.0,False,True,-0.19,eslC_KMP6aw-9ac2a2507204cbf222cfc3c1ae4d66a2,mp4,eslC_KMP6aw-9ac2a2507204cbf222cfc3c1ae4d66a2.mp4,eslC_KMP6aw-9ac2a2507204cbf222cfc3c1ae4d66a2.mp4 +718,/datadrive/videos/6tAZLiaBUcA-6d33cbb7b6f52823b91106f922e44121.mp4,42d9379c587a46fab3810784eaf6247a.mp4,718.0,False,64k,0.3,[0.04 0.18],mp4,0.11,,9.0,False,False,,6tAZLiaBUcA-6d33cbb7b6f52823b91106f922e44121,mp4,6tAZLiaBUcA-6d33cbb7b6f52823b91106f922e44121.mp4,6tAZLiaBUcA-6d33cbb7b6f52823b91106f922e44121.mp4 +719,/datadrive/videos/O7m3wNrL-pI-6e198da9df51d4933596f886931783b0.webm,44456dbff5e24400a78291539c89c941.mp4,719.0,,,,[0.07 0.04],mp4,,,,False,True,,O7m3wNrL-pI-6e198da9df51d4933596f886931783b0,webm,O7m3wNrL-pI-6e198da9df51d4933596f886931783b0.webm,O7m3wNrL-pI-6e198da9df51d4933596f886931783b0.webm +720,/datadrive/videos/V-E0CJbpOJ4-3d3696ec7115c2ff2ba3ada2b6affca9.mp4,7dbef4ce01d3403eb18c51208442370a.mp4,720.0,False,,,,mp4,,,6.0,False,True,,V-E0CJbpOJ4-3d3696ec7115c2ff2ba3ada2b6affca9,mp4,V-E0CJbpOJ4-3d3696ec7115c2ff2ba3ada2b6affca9.mp4,V-E0CJbpOJ4-3d3696ec7115c2ff2ba3ada2b6affca9.mp4 +721,/datadrive/videos/383rDXEKK2I-2133c1de0428ad1eb9aff8c55c60a725.webm,1396cbd071ea4dea95a3447ac5d10610.webm,721.0,,,,[0.15 0.01],,0.15,logos/jazeera.png,,False,False,,383rDXEKK2I-2133c1de0428ad1eb9aff8c55c60a725,webm,383rDXEKK2I-2133c1de0428ad1eb9aff8c55c60a725.webm,383rDXEKK2I-2133c1de0428ad1eb9aff8c55c60a725.webm +722,/datadrive/videos/nI22uDezG3E-7a47b2495ef26dc21cbbcd9738705e52.webm,4f831a0d6132426fb9604dfec9d76be2.webm,722.0,,16k,0.35,,,,logos/openair.gif,8.0,False,True,0.24,nI22uDezG3E-7a47b2495ef26dc21cbbcd9738705e52,webm,nI22uDezG3E-7a47b2495ef26dc21cbbcd9738705e52.webm,nI22uDezG3E-7a47b2495ef26dc21cbbcd9738705e52.webm +723,/datadrive/videos/s2Cyqlai0Ac-8d1b298c8792cff774bdc3de6245f46b.webm,10b1e147cce845a49eef811087545107.mp4,723.0,,16k,,,mp4,,logos/openair.gif,4.0,False,True,-0.16,s2Cyqlai0Ac-8d1b298c8792cff774bdc3de6245f46b,webm,s2Cyqlai0Ac-8d1b298c8792cff774bdc3de6245f46b.webm,s2Cyqlai0Ac-8d1b298c8792cff774bdc3de6245f46b.webm +724,/datadrive/videos/0WYW0PIwvZI-578d2311e2400479811356035066a45c.webm,3c0f50703a0c440eafd2e329c6dc5e09.mp4,724.0,False,,0.52,[0.11 0.17],mp4,0.05,,4.0,False,True,-0.37,0WYW0PIwvZI-578d2311e2400479811356035066a45c,webm,0WYW0PIwvZI-578d2311e2400479811356035066a45c.webm,0WYW0PIwvZI-578d2311e2400479811356035066a45c.webm +725,/datadrive/videos/mgZ74pMXGOQ-4ba10cc0a9cd79360fdfcc59f13afc8d.mp4,625b0e4e27054383b6f90b8ca8c3eace.mp4,725.0,,64k,0.62,[0.18 0.12],,0.19,logos/sbt.gif,,False,True,,mgZ74pMXGOQ-4ba10cc0a9cd79360fdfcc59f13afc8d,mp4,mgZ74pMXGOQ-4ba10cc0a9cd79360fdfcc59f13afc8d.mp4,mgZ74pMXGOQ-4ba10cc0a9cd79360fdfcc59f13afc8d.mp4 +727,/datadrive/videos/cVrs5Qsnv1U-764e066c86851edb8bc63660ab1b5647.webm,d469579a9c8c48cbba4c268c18ea362d.mp4,727.0,,64k,,,mp4,-0.01,logos/ge.gif,8.0,True,True,-0.35,cVrs5Qsnv1U-764e066c86851edb8bc63660ab1b5647,webm,cVrs5Qsnv1U-764e066c86851edb8bc63660ab1b5647.webm,cVrs5Qsnv1U-764e066c86851edb8bc63660ab1b5647.webm +728,/datadrive/videos/D6R-K0gmRGQ-f1c737c6a9852390383cc9cd398d80f1.webm,969746936e604e9ebe98e4f68350aad1.webm,728.0,True,64k,,,,,,4.0,True,True,0.02,D6R-K0gmRGQ-f1c737c6a9852390383cc9cd398d80f1,webm,D6R-K0gmRGQ-f1c737c6a9852390383cc9cd398d80f1.webm,D6R-K0gmRGQ-f1c737c6a9852390383cc9cd398d80f1.webm +729,/datadrive/videos/R_7y9Z-umq0-fbe250a7f59ebfb55d13cfc2be1c1de6.webm,5accf5f509cb4b718192821f7e84464e.webm,729.0,,128k,0.25,,,,logos/msnbc.png,7.0,False,True,0.18,R_7y9Z-umq0-fbe250a7f59ebfb55d13cfc2be1c1de6,webm,R_7y9Z-umq0-fbe250a7f59ebfb55d13cfc2be1c1de6.webm,R_7y9Z-umq0-fbe250a7f59ebfb55d13cfc2be1c1de6.webm +730,/datadrive/videos/fSSeYeoYCqo-a0b5188bdc330a122b5c2a30d62e70c7.webm,d1656a2d50e84e8989edd60b02703364.ogv,730.0,,,,,ogv,,logos/another.gif,,True,True,0.03,fSSeYeoYCqo-a0b5188bdc330a122b5c2a30d62e70c7,webm,fSSeYeoYCqo-a0b5188bdc330a122b5c2a30d62e70c7.webm,fSSeYeoYCqo-a0b5188bdc330a122b5c2a30d62e70c7.webm +731,/datadrive/videos/TNXOnYd1kko-8ebfab58aebcbc8b78e19266f4f5a73c.webm,19e8d9cf34614c878016aa4207aa3957.webm,731.0,,,,[0.02 0.07],,,logos/ge.gif,,False,False,-0.34,TNXOnYd1kko-8ebfab58aebcbc8b78e19266f4f5a73c,webm,TNXOnYd1kko-8ebfab58aebcbc8b78e19266f4f5a73c.webm,TNXOnYd1kko-8ebfab58aebcbc8b78e19266f4f5a73c.webm +732,/datadrive/videos/58xPhmS_U3g-c1271043195cdf163bfbf8dedb222a26.mp4,abd14a678aea4e6a9939c89bf948d9c2.mp4,732.0,True,,,[0.19 0.05],,,logos/ge.gif,,False,False,,58xPhmS_U3g-c1271043195cdf163bfbf8dedb222a26,mp4,58xPhmS_U3g-c1271043195cdf163bfbf8dedb222a26.mp4,58xPhmS_U3g-c1271043195cdf163bfbf8dedb222a26.mp4 +733,/datadrive/videos/hD-xVYzQ-8c-4c8a9260c242a63fc3589a9a9f97fc8b.mp4,30a5c813ef6b4e50b3ba65c246c09511.mp4,733.0,,,,[0.07 0.03],,,,6.0,False,True,0.23,hD-xVYzQ-8c-4c8a9260c242a63fc3589a9a9f97fc8b,mp4,hD-xVYzQ-8c-4c8a9260c242a63fc3589a9a9f97fc8b.mp4,hD-xVYzQ-8c-4c8a9260c242a63fc3589a9a9f97fc8b.mp4 +734,/datadrive/videos/Fom9_d0iqZU-3db3a3af43d8831742afc93ac2a870b4.webm,3cf48ab6fed84fa9baa3907debb23e71.webm,734.0,,32k,,[0.17 0.02],,-0.13,logos/openair.gif,,True,True,,Fom9_d0iqZU-3db3a3af43d8831742afc93ac2a870b4,webm,Fom9_d0iqZU-3db3a3af43d8831742afc93ac2a870b4.webm,Fom9_d0iqZU-3db3a3af43d8831742afc93ac2a870b4.webm +735,/datadrive/videos/ZrX5Fr3jCHg-ef98ff865f76ebc248d357c2223b40fc.webm,6b6107b3a48a48578314cc90b1081a9b.webm,735.0,,32k,0.75,,,-0.03,,1.0,False,True,0.16,ZrX5Fr3jCHg-ef98ff865f76ebc248d357c2223b40fc,webm,ZrX5Fr3jCHg-ef98ff865f76ebc248d357c2223b40fc.webm,ZrX5Fr3jCHg-ef98ff865f76ebc248d357c2223b40fc.webm +736,/datadrive/videos/vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3.webm,981f85e6bbab4dfcbca1d197274223c6.ogv,736.0,,64k,,,ogv,,,1.0,False,False,,vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3,webm,vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3.webm,vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3.webm +740,/datadrive/videos/Xaqh1tm4FrY-76d4db7ceac7aa9acee2611a5e5ffa15.mp4,8213c29dd3aa4970a6134adc68b66e28.mp4,740.0,True,,,,mp4,,,,False,True,,Xaqh1tm4FrY-76d4db7ceac7aa9acee2611a5e5ffa15,mp4,Xaqh1tm4FrY-76d4db7ceac7aa9acee2611a5e5ffa15.mp4,Xaqh1tm4FrY-76d4db7ceac7aa9acee2611a5e5ffa15.mp4 +741,/datadrive/videos/Cs3UdskURWA-5b2aa6d7be40f9915aecf174418d8d7e.mp4,18f75a94043140d0a10bfdb3b0c8c027.mp4,741.0,,16k,,,,,logos/msnbc.png,4.0,False,False,0.14,Cs3UdskURWA-5b2aa6d7be40f9915aecf174418d8d7e,mp4,Cs3UdskURWA-5b2aa6d7be40f9915aecf174418d8d7e.mp4,Cs3UdskURWA-5b2aa6d7be40f9915aecf174418d8d7e.mp4 +742,/datadrive/videos/Dn7Ku3qklbE-7d16d5f567fc45932d28f036d6629373.webm,bec7a4f7731547ddbc6c49adb1d56509.webm,742.0,,32k,,,webm,,logos/another.gif,9.0,True,False,,Dn7Ku3qklbE-7d16d5f567fc45932d28f036d6629373,webm,Dn7Ku3qklbE-7d16d5f567fc45932d28f036d6629373.webm,Dn7Ku3qklbE-7d16d5f567fc45932d28f036d6629373.webm +743,/datadrive/videos/N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054.webm,43c40d504da84f428658a27e4a075ab8.webm,743.0,,64k,0.63,[0.11 0.01],,-0.04,logos/msnbc.png,,False,False,-0.15,N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054,webm,N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054.webm,N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054.webm +745,/datadrive/videos/_gHGcO7c7QI-1d0a5f2e469f9313542e0930e8723bd5.webm,34d151ec0d1147ddbd518ac7ffe24181.mp4,745.0,False,,0.58,[0.14 0.12],mp4,-0.01,logos/msnbc.png,3.0,False,True,,_gHGcO7c7QI-1d0a5f2e469f9313542e0930e8723bd5,webm,_gHGcO7c7QI-1d0a5f2e469f9313542e0930e8723bd5.webm,_gHGcO7c7QI-1d0a5f2e469f9313542e0930e8723bd5.webm +747,/datadrive/videos/uECxS6xOH0U-e0a5a95ccd786cbc786224e508b200e7.webm,acac6a0c9b134b1ebedcf24145c421c3.webm,747.0,,64k,0.6,,,-0.02,logos/another.gif,9.0,True,False,0.01,uECxS6xOH0U-e0a5a95ccd786cbc786224e508b200e7,webm,uECxS6xOH0U-e0a5a95ccd786cbc786224e508b200e7.webm,uECxS6xOH0U-e0a5a95ccd786cbc786224e508b200e7.webm +748,/datadrive/videos/Px0iqMAArD4-07ade9484aa59f4b5ca44ee4436240c0.webm,92588d08d7614099a67a25b8e804cdd1.ogv,748.0,False,,,,ogv,,logos/fox.png,,False,True,-0.01,Px0iqMAArD4-07ade9484aa59f4b5ca44ee4436240c0,webm,Px0iqMAArD4-07ade9484aa59f4b5ca44ee4436240c0.webm,Px0iqMAArD4-07ade9484aa59f4b5ca44ee4436240c0.webm +750,/datadrive/videos/YWzYpzgSpqQ-f1dc74548d4f093e2763c6767b6f9eef.webm,4e8a670743674fb6bfa369287a854519.webm,750.0,,,0.98,[0.16 0.06],,0.17,logos/download.png,9.0,False,True,,YWzYpzgSpqQ-f1dc74548d4f093e2763c6767b6f9eef,webm,YWzYpzgSpqQ-f1dc74548d4f093e2763c6767b6f9eef.webm,YWzYpzgSpqQ-f1dc74548d4f093e2763c6767b6f9eef.webm +751,/datadrive/videos/DgG9XSU3_IE-d45a459d66a040bb2f42928f3ffa8457.webm,9160b1f2711644f3b7485a0e02aa5810.mp4,751.0,,64k,0.58,,mp4,,logos/jazeera.png,5.0,False,True,,DgG9XSU3_IE-d45a459d66a040bb2f42928f3ffa8457,webm,DgG9XSU3_IE-d45a459d66a040bb2f42928f3ffa8457.webm,DgG9XSU3_IE-d45a459d66a040bb2f42928f3ffa8457.webm +752,/datadrive/videos/mIqHZo7L6wU-802d6efc5fe57262605570bfc1262a66.mp4,993874f4a230449cb47b2b9507d586bd.ogv,752.0,,16k,,,ogv,,,,False,True,0.2,mIqHZo7L6wU-802d6efc5fe57262605570bfc1262a66,mp4,mIqHZo7L6wU-802d6efc5fe57262605570bfc1262a66.mp4,mIqHZo7L6wU-802d6efc5fe57262605570bfc1262a66.mp4 +754,/datadrive/videos/t--lkQRJXhY-a1ea528573e203ed08eaf15c28581ba0.mp4,b7cb482b2f7240fc9c425bed04c67f6f.webm,754.0,False,,0.6,[0.02 0.05],webm,-0.15,logos/new.gif,,False,False,0.33,t--lkQRJXhY-a1ea528573e203ed08eaf15c28581ba0,mp4,t--lkQRJXhY-a1ea528573e203ed08eaf15c28581ba0.mp4,t--lkQRJXhY-a1ea528573e203ed08eaf15c28581ba0.mp4 +755,/datadrive/videos/F235OS531pc-e0635b9aac252b5d5ac40c5c88d3f3bb.webm,b7845942c9a3438fa01f426a283cb44e.webm,755.0,,,,,,,logos/another.gif,,False,True,,F235OS531pc-e0635b9aac252b5d5ac40c5c88d3f3bb,webm,F235OS531pc-e0635b9aac252b5d5ac40c5c88d3f3bb.webm,F235OS531pc-e0635b9aac252b5d5ac40c5c88d3f3bb.webm +756,/datadrive/videos/0VJftxGtl-g-d565313dbb9abf90d098546efd0a3525.webm,7955c2e20d4449bfb71acb18c5d1cedd.webm,756.0,,16k,,,,0.15,,,True,True,,0VJftxGtl-g-d565313dbb9abf90d098546efd0a3525,webm,0VJftxGtl-g-d565313dbb9abf90d098546efd0a3525.webm,0VJftxGtl-g-d565313dbb9abf90d098546efd0a3525.webm +757,/datadrive/videos/eT2W3VRsF-I-83887937a52a18fcc60be45bf7096747.mp4,4ac1ad9c38934eaab7fa0146141c9354.mp4,757.0,False,,0.82,,mp4,,logos/jazeera.png,,False,False,0.39,eT2W3VRsF-I-83887937a52a18fcc60be45bf7096747,mp4,eT2W3VRsF-I-83887937a52a18fcc60be45bf7096747.mp4,eT2W3VRsF-I-83887937a52a18fcc60be45bf7096747.mp4 +758,/datadrive/videos/O264FXQRe14-aab283f9db8fbb99c501420354ed7b8c.webm,2f57248815d24e8fbe9fcc69668f4a50.webm,758.0,,,0.76,[0.17 0.12],,0.16,logos/openair.gif,,False,False,,O264FXQRe14-aab283f9db8fbb99c501420354ed7b8c,webm,O264FXQRe14-aab283f9db8fbb99c501420354ed7b8c.webm,O264FXQRe14-aab283f9db8fbb99c501420354ed7b8c.webm +759,/datadrive/videos/epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124.mp4,a552b34baa9a47819c61fdfe9153045e.mp4,759.0,,,0.41,,,,,,False,False,,epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124,mp4,epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124.mp4,epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124.mp4 +760,/datadrive/videos/CyPcJXY95OM-48cffc2b8337fe44f3ff7bb2f1a3fc45.webm,6757623865fe418e877ab090d5c14d33.webm,760.0,,32k,0.33,,webm,,logos/fox.png,3.0,False,True,-0.17,CyPcJXY95OM-48cffc2b8337fe44f3ff7bb2f1a3fc45,webm,CyPcJXY95OM-48cffc2b8337fe44f3ff7bb2f1a3fc45.webm,CyPcJXY95OM-48cffc2b8337fe44f3ff7bb2f1a3fc45.webm +761,/datadrive/videos/mezbMfpcDEQ-2e1a5e5bad2c04e7accbf9983d110290.webm,6529446c069843e38c79415f8156bd63.ogv,761.0,False,16k,0.67,[0.02 0.09],ogv,0.07,,,False,False,0.36,mezbMfpcDEQ-2e1a5e5bad2c04e7accbf9983d110290,webm,mezbMfpcDEQ-2e1a5e5bad2c04e7accbf9983d110290.webm,mezbMfpcDEQ-2e1a5e5bad2c04e7accbf9983d110290.webm +762,/datadrive/videos/vbKgavJFi7g-6a4c1f6e07868f3d199b210fbf337877.webm,0fae9b9107ce47c0993ccc7d47c34f85.ogv,762.0,False,,,,ogv,,logos/ge.gif,1.0,False,False,,vbKgavJFi7g-6a4c1f6e07868f3d199b210fbf337877,webm,vbKgavJFi7g-6a4c1f6e07868f3d199b210fbf337877.webm,vbKgavJFi7g-6a4c1f6e07868f3d199b210fbf337877.webm +763,/datadrive/videos/6aFDcJGTJMc-54572dd08f682a62719ff1c1f871b74f.webm,214ef750a6e048d6a48b18037b04fd76.webm,763.0,False,16k,,[0.16 0.11],,-0.02,,,False,True,,6aFDcJGTJMc-54572dd08f682a62719ff1c1f871b74f,webm,6aFDcJGTJMc-54572dd08f682a62719ff1c1f871b74f.webm,6aFDcJGTJMc-54572dd08f682a62719ff1c1f871b74f.webm +765,/datadrive/videos/h4A7bbbU4S4-bc080ba9ea56788b37ced278c59a69db.webm,9e6f88f4baa642809c9276c2cec54b11.mp4,765.0,,,0.99,[0.04 0.15],mp4,-0.17,logos/msnbc.png,2.0,False,True,,h4A7bbbU4S4-bc080ba9ea56788b37ced278c59a69db,webm,h4A7bbbU4S4-bc080ba9ea56788b37ced278c59a69db.webm,h4A7bbbU4S4-bc080ba9ea56788b37ced278c59a69db.webm +766,/datadrive/videos/hMZ2ypzIPUs-9acf918df62ff0f08efd5b18fe6ad39c.mp4,26cd26fb9bca453ca4310ce03f80a22b.ogv,766.0,,,,,ogv,0.11,logos/jazeera.png,9.0,False,True,-0.38,hMZ2ypzIPUs-9acf918df62ff0f08efd5b18fe6ad39c,mp4,hMZ2ypzIPUs-9acf918df62ff0f08efd5b18fe6ad39c.mp4,hMZ2ypzIPUs-9acf918df62ff0f08efd5b18fe6ad39c.mp4 +767,/datadrive/videos/u9jb44WSsi0-9bef8c965ba65f428472dda04a6dcf53.mp4,6cb5d6ee5aeb4134a09db6feeede8199.mp4,767.0,True,,0.54,[0.15 0.03],mp4,,logos/fox.png,,False,False,,u9jb44WSsi0-9bef8c965ba65f428472dda04a6dcf53,mp4,u9jb44WSsi0-9bef8c965ba65f428472dda04a6dcf53.mp4,u9jb44WSsi0-9bef8c965ba65f428472dda04a6dcf53.mp4 +768,/datadrive/videos/gAsKIOn6ytw-29d717d146e43dbe518587cd2b53f3fd.mp4,45d578c64bcd4d71b86809aec5abc547.mp4,768.0,False,32k,,[0.19 0.17],,-0.07,logos/fox.png,,False,False,0.26,gAsKIOn6ytw-29d717d146e43dbe518587cd2b53f3fd,mp4,gAsKIOn6ytw-29d717d146e43dbe518587cd2b53f3fd.mp4,gAsKIOn6ytw-29d717d146e43dbe518587cd2b53f3fd.mp4 +769,/datadrive/videos/eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11.mp4,b287eb8c8e7a4f9c9725fe0bf028f416.webm,769.0,,128k,0.96,,webm,0.16,logos/new.gif,,False,False,0.11,eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11,mp4,eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11.mp4,eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11.mp4 +770,/datadrive/videos/uvikkyNIhHA-d9575536ba02ebf0dbcf4f80db176700.mp4,412b211291f14323a50e5901dc5f9d9b.ogv,770.0,False,128k,,,ogv,,,3.0,False,True,-0.07,uvikkyNIhHA-d9575536ba02ebf0dbcf4f80db176700,mp4,uvikkyNIhHA-d9575536ba02ebf0dbcf4f80db176700.mp4,uvikkyNIhHA-d9575536ba02ebf0dbcf4f80db176700.mp4 +771,/datadrive/videos/FbNln5q8JTQ-5b411a1b619e501840c3159aa50f5e4f.webm,2591570fd2974b1896a6698d5b27564b.mp4,771.0,,64k,,,mp4,,,3.0,False,False,,FbNln5q8JTQ-5b411a1b619e501840c3159aa50f5e4f,webm,FbNln5q8JTQ-5b411a1b619e501840c3159aa50f5e4f.webm,FbNln5q8JTQ-5b411a1b619e501840c3159aa50f5e4f.webm +772,/datadrive/videos/xJbEsCKYsEk-d798885afce72ee6d5a7e1b55a9a163f.webm,558b0ce20eeb4c389170a329eea8fa41.webm,772.0,,64k,,[0.03 0.13],,,,5.0,False,True,,xJbEsCKYsEk-d798885afce72ee6d5a7e1b55a9a163f,webm,xJbEsCKYsEk-d798885afce72ee6d5a7e1b55a9a163f.webm,xJbEsCKYsEk-d798885afce72ee6d5a7e1b55a9a163f.webm +773,/datadrive/videos/QWyuJ_xMUNQ-ff07afec82a0a3d11bbae95d2c880d76.webm,80cf1e6ad50c400d863a5410b0592848.webm,773.0,True,32k,0.61,,,,,,False,False,,QWyuJ_xMUNQ-ff07afec82a0a3d11bbae95d2c880d76,webm,QWyuJ_xMUNQ-ff07afec82a0a3d11bbae95d2c880d76.webm,QWyuJ_xMUNQ-ff07afec82a0a3d11bbae95d2c880d76.webm +774,/datadrive/videos/lQRHXz_UD8E-32f8879f93b258d381051670cfd4a7cb.mp4,4f61b1cbf12f427db7e2a916b972efde.webm,774.0,False,,,,webm,-0.2,logos/openair.gif,,True,False,,lQRHXz_UD8E-32f8879f93b258d381051670cfd4a7cb,mp4,lQRHXz_UD8E-32f8879f93b258d381051670cfd4a7cb.mp4,lQRHXz_UD8E-32f8879f93b258d381051670cfd4a7cb.mp4 +775,/datadrive/videos/xAxnFeHpaXg-70fa2c2e464509fcbfb6b7437fc8873f.webm,c374b8aafe894f9aa961f3ea932b6149.ogv,775.0,False,64k,0.65,[0.03 0.07],ogv,0.13,,,False,True,-0.22,xAxnFeHpaXg-70fa2c2e464509fcbfb6b7437fc8873f,webm,xAxnFeHpaXg-70fa2c2e464509fcbfb6b7437fc8873f.webm,xAxnFeHpaXg-70fa2c2e464509fcbfb6b7437fc8873f.webm +776,/datadrive/videos/sIoPX779ETw-9d4897cee4ab2fa9f15bf4ef5fe30138.mp4,29efe6e7298946eca3dfe223f7c2310d.webm,776.0,,,,,webm,-0.19,,2.0,False,False,,sIoPX779ETw-9d4897cee4ab2fa9f15bf4ef5fe30138,mp4,sIoPX779ETw-9d4897cee4ab2fa9f15bf4ef5fe30138.mp4,sIoPX779ETw-9d4897cee4ab2fa9f15bf4ef5fe30138.mp4 +779,/datadrive/videos/PlntsbsA4Cw-adcf874a792071e2432211cf686657e5.webm,bbc8fae102dc46f88b72f68f5b7a4306.ogv,779.0,False,,0.89,,ogv,,logos/jazeera.png,0.0,False,True,-0.2,PlntsbsA4Cw-adcf874a792071e2432211cf686657e5,webm,PlntsbsA4Cw-adcf874a792071e2432211cf686657e5.webm,PlntsbsA4Cw-adcf874a792071e2432211cf686657e5.webm +780,/datadrive/videos/gqX0f7c4Qcw-ef4cc9354f3b0e4aec04a78bdc5f5416.webm,38e6b80cc2474946b042f86f195eefce.ogv,780.0,,128k,0.25,,ogv,,logos/ge.gif,7.0,False,True,,gqX0f7c4Qcw-ef4cc9354f3b0e4aec04a78bdc5f5416,webm,gqX0f7c4Qcw-ef4cc9354f3b0e4aec04a78bdc5f5416.webm,gqX0f7c4Qcw-ef4cc9354f3b0e4aec04a78bdc5f5416.webm +782,/datadrive/videos/0VJftxGtl-g-d565313dbb9abf90d098546efd0a3525.webm,d17fec82b428417284c71905a0f2bf1c.webm,782.0,True,,0.59,,,,logos/sbt.gif,1.0,False,False,0.17,0VJftxGtl-g-d565313dbb9abf90d098546efd0a3525,webm,0VJftxGtl-g-d565313dbb9abf90d098546efd0a3525.webm,0VJftxGtl-g-d565313dbb9abf90d098546efd0a3525.webm +783,/datadrive/videos/g9WyvQMluD8-c7eb12c004db838d39448b6a57d6a430.mp4,80a0a23aeb1d4a699f5cdcf846eee96c.ogv,783.0,False,,,,ogv,0.03,logos/download.png,,False,True,,g9WyvQMluD8-c7eb12c004db838d39448b6a57d6a430,mp4,g9WyvQMluD8-c7eb12c004db838d39448b6a57d6a430.mp4,g9WyvQMluD8-c7eb12c004db838d39448b6a57d6a430.mp4 +784,/datadrive/videos/2EnGD_2k8Vs-49b97811453efa49cd2a838e6f721697.webm,7b2b882d9bb34f2c8ed4df266b598a33.mp4,784.0,,,0.58,[0.19 0.12],mp4,-0.07,,,False,True,-0.07,2EnGD_2k8Vs-49b97811453efa49cd2a838e6f721697,webm,2EnGD_2k8Vs-49b97811453efa49cd2a838e6f721697.webm,2EnGD_2k8Vs-49b97811453efa49cd2a838e6f721697.webm +785,/datadrive/videos/XqQJUYr3lgI-6c344b02fb8a588f39da2131b8480f3a.mp4,2328757b4e27444aaf3a7b13e9110e51.webm,785.0,,,0.75,[0.12 0.14],webm,0.12,logos/msnbc.png,,True,False,0.2,XqQJUYr3lgI-6c344b02fb8a588f39da2131b8480f3a,mp4,XqQJUYr3lgI-6c344b02fb8a588f39da2131b8480f3a.mp4,XqQJUYr3lgI-6c344b02fb8a588f39da2131b8480f3a.mp4 +787,/datadrive/videos/cMVWOb0u46g-22301d4a2db7a0ce4ea3e2e50a4c6cd5.webm,6fddfd245e49461a8838910499b4bdef.webm,787.0,,128k,,[0.12 0.09],,,logos/download.png,,False,True,,cMVWOb0u46g-22301d4a2db7a0ce4ea3e2e50a4c6cd5,webm,cMVWOb0u46g-22301d4a2db7a0ce4ea3e2e50a4c6cd5.webm,cMVWOb0u46g-22301d4a2db7a0ce4ea3e2e50a4c6cd5.webm +788,/datadrive/videos/Cdg8VBhqB18-0c2d1789721e332cfc6db69edbf183b1.webm,c8c2dcfb989e4db99a4d31fea13b411e.webm,788.0,False,64k,,,webm,,logos/download.png,8.0,False,True,,Cdg8VBhqB18-0c2d1789721e332cfc6db69edbf183b1,webm,Cdg8VBhqB18-0c2d1789721e332cfc6db69edbf183b1.webm,Cdg8VBhqB18-0c2d1789721e332cfc6db69edbf183b1.webm +789,/datadrive/videos/LF02Ne55dL8-ca066f2f43cf0234c144ae00acaffe8c.mp4,34aaeb825a314282901dc709c245671b.ogv,789.0,False,,,,ogv,,logos/msnbc.png,6.085,False,True,0.15,LF02Ne55dL8-ca066f2f43cf0234c144ae00acaffe8c,mp4,LF02Ne55dL8-ca066f2f43cf0234c144ae00acaffe8c.mp4,LF02Ne55dL8-ca066f2f43cf0234c144ae00acaffe8c.mp4 +790,/datadrive/videos/qGCz-jTygWQ-6c41dd8833096dfabfea0da4be096f82.mp4,0606145f4f724f308f651192fcdd86ad.webm,790.0,,32k,,,webm,-0.13,,5.0,True,False,-0.14,qGCz-jTygWQ-6c41dd8833096dfabfea0da4be096f82,mp4,qGCz-jTygWQ-6c41dd8833096dfabfea0da4be096f82.mp4,qGCz-jTygWQ-6c41dd8833096dfabfea0da4be096f82.mp4 +791,/datadrive/videos/XjmTpve3M18-3963bc9d4fce306d23fe8cb937462131.mp4,1c0be94cc0c84631a265bba1b758b1c3.mp4,791.0,,16k,0.76,[0.07 0.01],,,logos/jazeera.png,4.0,False,True,-0.06,XjmTpve3M18-3963bc9d4fce306d23fe8cb937462131,mp4,XjmTpve3M18-3963bc9d4fce306d23fe8cb937462131.mp4,XjmTpve3M18-3963bc9d4fce306d23fe8cb937462131.mp4 +792,/datadrive/videos/OXgU5X73Hzo-2d697ace67d57c3ac68765ef0211ecb9.webm,4413f93ca197448f9bf44b74a9ea4eee.webm,792.0,,16k,0.22,[0.06 0.15],webm,,,6.0,False,True,,OXgU5X73Hzo-2d697ace67d57c3ac68765ef0211ecb9,webm,OXgU5X73Hzo-2d697ace67d57c3ac68765ef0211ecb9.webm,OXgU5X73Hzo-2d697ace67d57c3ac68765ef0211ecb9.webm +795,/datadrive/videos/JqiBdeU00a0-c158ed13a14287d8ca2c5b2328514823.webm,c794d0fc43cf40898251545a5a5aa01c.webm,795.0,,,0.6,[0.09 0.16],webm,0.12,logos/sbt.gif,,False,False,-0.31,JqiBdeU00a0-c158ed13a14287d8ca2c5b2328514823,webm,JqiBdeU00a0-c158ed13a14287d8ca2c5b2328514823.webm,JqiBdeU00a0-c158ed13a14287d8ca2c5b2328514823.webm +796,/datadrive/videos/Yd6K0DIfbxY-9c6e124c19995c4c6087002fb7c2ce4b.webm,81dbfdbfa75641e78e9ac350cca96e40.mp4,796.0,False,128k,,,mp4,,,,True,True,,Yd6K0DIfbxY-9c6e124c19995c4c6087002fb7c2ce4b,webm,Yd6K0DIfbxY-9c6e124c19995c4c6087002fb7c2ce4b.webm,Yd6K0DIfbxY-9c6e124c19995c4c6087002fb7c2ce4b.webm +797,/datadrive/videos/27ARq1AJZyg-c261b5315bfb8b1e0552a35705c17184.webm,4d6183e8cb004454826e9a435057cfb5.webm,797.0,,,,[0.12 0.03],,-0.06,,,False,False,-0.37,27ARq1AJZyg-c261b5315bfb8b1e0552a35705c17184,webm,27ARq1AJZyg-c261b5315bfb8b1e0552a35705c17184.webm,27ARq1AJZyg-c261b5315bfb8b1e0552a35705c17184.webm +798,/datadrive/videos/6yJuyFN4Ihg-90dfe7b732a24ef61fd52c5eae95162e.mp4,a18444977736411fab577643ad40e1c9.mp4,798.0,,64k,,[0.03 0.05],mp4,0.08,,,False,True,0.09,6yJuyFN4Ihg-90dfe7b732a24ef61fd52c5eae95162e,mp4,6yJuyFN4Ihg-90dfe7b732a24ef61fd52c5eae95162e.mp4,6yJuyFN4Ihg-90dfe7b732a24ef61fd52c5eae95162e.mp4 +799,/datadrive/videos/CnTrKl4bngo-583a4d376c3c0c52f15267eca748b5ca.webm,4cc726abbceb4bd4b95581737eb6d142.webm,799.0,True,16k,,[0.17 0.18],,,logos/openair.gif,,False,False,,CnTrKl4bngo-583a4d376c3c0c52f15267eca748b5ca,webm,CnTrKl4bngo-583a4d376c3c0c52f15267eca748b5ca.webm,CnTrKl4bngo-583a4d376c3c0c52f15267eca748b5ca.webm +800,/datadrive/videos/wGEoKmgcDMg-e7567ba3d9f0d743de66d8759e35e7e2.mp4,309a3f90ed624e398e9fb276059d80c0.mp4,800.0,True,,0.9,[0.02 0.19],,0.02,logos/another.gif,,False,False,,wGEoKmgcDMg-e7567ba3d9f0d743de66d8759e35e7e2,mp4,wGEoKmgcDMg-e7567ba3d9f0d743de66d8759e35e7e2.mp4,wGEoKmgcDMg-e7567ba3d9f0d743de66d8759e35e7e2.mp4 +801,/datadrive/videos/oCqisXWlnhM-9d5e100270a890bf19c82eaa98fbc991.webm,2f89d2a5509747279efe55526268b751.webm,801.0,,64k,,,,,,,False,False,,oCqisXWlnhM-9d5e100270a890bf19c82eaa98fbc991,webm,oCqisXWlnhM-9d5e100270a890bf19c82eaa98fbc991.webm,oCqisXWlnhM-9d5e100270a890bf19c82eaa98fbc991.webm +802,/datadrive/videos/4pcIA0Vx_Ok-a6ff21a834134a75701b950030cca07c.mp4,a3aa0f40d50645b0b7fda69ea05bf172.mp4,802.0,,128k,0.81,,,,logos/jazeera.png,1.0,False,False,-0.05,4pcIA0Vx_Ok-a6ff21a834134a75701b950030cca07c,mp4,4pcIA0Vx_Ok-a6ff21a834134a75701b950030cca07c.mp4,4pcIA0Vx_Ok-a6ff21a834134a75701b950030cca07c.mp4 +803,/datadrive/videos/STFYVU8e_n0-567b64d022dbc3a2acdb317cf28c4592.mp4,4137c47c33ca472ebe418d9bc0dc5224.ogv,803.0,,32k,0.86,[0.07 0.02],ogv,-0.18,,,False,False,,STFYVU8e_n0-567b64d022dbc3a2acdb317cf28c4592,mp4,STFYVU8e_n0-567b64d022dbc3a2acdb317cf28c4592.mp4,STFYVU8e_n0-567b64d022dbc3a2acdb317cf28c4592.mp4 +804,/datadrive/videos/8Qs3G7H3pbk-bab7f0ad7bbd80313195a497ada7c330.webm,5f907a9651004fd8937d28e2e14d2df6.ogv,804.0,,64k,,[0.18 0.19],ogv,-0.07,,,False,True,0.35,8Qs3G7H3pbk-bab7f0ad7bbd80313195a497ada7c330,webm,8Qs3G7H3pbk-bab7f0ad7bbd80313195a497ada7c330.webm,8Qs3G7H3pbk-bab7f0ad7bbd80313195a497ada7c330.webm +805,/datadrive/videos/mHlQvDrlgxU-7adb02593bd18371b83b465c51b8b2fd.webm,fe3a193c4d8648a1b7f077e1755d6e65.webm,805.0,False,,0.45,[0.14 0.09],,,,,False,True,,mHlQvDrlgxU-7adb02593bd18371b83b465c51b8b2fd,webm,mHlQvDrlgxU-7adb02593bd18371b83b465c51b8b2fd.webm,mHlQvDrlgxU-7adb02593bd18371b83b465c51b8b2fd.webm +806,/datadrive/videos/u3VDtLG8E_Y-851998683165ea933867e69048bcd6b6.mp4,b3a4d1f77cda451dabd8d4be294c4958.mp4,806.0,False,64k,0.32,,,,logos/new.gif,,False,True,0.39,u3VDtLG8E_Y-851998683165ea933867e69048bcd6b6,mp4,u3VDtLG8E_Y-851998683165ea933867e69048bcd6b6.mp4,u3VDtLG8E_Y-851998683165ea933867e69048bcd6b6.mp4 +807,/datadrive/videos/bfSQtUGCR8k-1ae6897168dd126a294d4a78397111bd.webm,61ffdba09f544777b737cd3d12955ef2.webm,807.0,False,,,,,,logos/openair.gif,3.0,False,False,-0.35,bfSQtUGCR8k-1ae6897168dd126a294d4a78397111bd,webm,bfSQtUGCR8k-1ae6897168dd126a294d4a78397111bd.webm,bfSQtUGCR8k-1ae6897168dd126a294d4a78397111bd.webm +808,/datadrive/videos/OLiP5CgOQ0Q-6c34c5ba01b8ac1093113c0fac3e3683.webm,8e65658339624d1c92e1ba52addd1d36.webm,808.0,True,,0.8,,,,,2.0,False,False,,OLiP5CgOQ0Q-6c34c5ba01b8ac1093113c0fac3e3683,webm,OLiP5CgOQ0Q-6c34c5ba01b8ac1093113c0fac3e3683.webm,OLiP5CgOQ0Q-6c34c5ba01b8ac1093113c0fac3e3683.webm +812,/datadrive/videos/JEDRVNNQ04g-316b75372bca48c000a71f4f2188998f.webm,9d816c5fb98a46818d48be844afe9e49.webm,812.0,False,,0.71,,,0.06,,5.0,False,True,,JEDRVNNQ04g-316b75372bca48c000a71f4f2188998f,webm,JEDRVNNQ04g-316b75372bca48c000a71f4f2188998f.webm,JEDRVNNQ04g-316b75372bca48c000a71f4f2188998f.webm +813,/datadrive/videos/Hwx8FQ-tfdk-777d2058d2825bdc7f8de46d3c712d83.mp4,660e5c6a2e7741cd8c56791950d70657.mp4,813.0,,128k,0.48,[0.05 0.08],mp4,,logos/jazeera.png,6.0,False,False,,Hwx8FQ-tfdk-777d2058d2825bdc7f8de46d3c712d83,mp4,Hwx8FQ-tfdk-777d2058d2825bdc7f8de46d3c712d83.mp4,Hwx8FQ-tfdk-777d2058d2825bdc7f8de46d3c712d83.mp4 +814,/datadrive/videos/vb6jq3jM1cA-915c05edcefd54ebaea0204294f8cdd5.webm,11ad7640c69a49c7a269399a9f03efbd.webm,814.0,True,128k,,,,-0.12,,5.0,False,False,,vb6jq3jM1cA-915c05edcefd54ebaea0204294f8cdd5,webm,vb6jq3jM1cA-915c05edcefd54ebaea0204294f8cdd5.webm,vb6jq3jM1cA-915c05edcefd54ebaea0204294f8cdd5.webm +815,/datadrive/videos/QJ_kpQvdMGo-e431fdf359e9fea43b2b8bc94d5abb0e.webm,4023e6d515bd47acb20d35cfaded4744.webm,815.0,True,,0.57,[0.18 0.19],,,,,False,True,0.39,QJ_kpQvdMGo-e431fdf359e9fea43b2b8bc94d5abb0e,webm,QJ_kpQvdMGo-e431fdf359e9fea43b2b8bc94d5abb0e.webm,QJ_kpQvdMGo-e431fdf359e9fea43b2b8bc94d5abb0e.webm +816,/datadrive/videos/Bhkko7DCpHY-61f1fb00c42d363ff2e677b4c606de0c.webm,4592acdad54b45948e2ec0054dd063c4.ogv,816.0,,,0.97,,ogv,0.05,logos/another.gif,9.0,False,False,-0.18,Bhkko7DCpHY-61f1fb00c42d363ff2e677b4c606de0c,webm,Bhkko7DCpHY-61f1fb00c42d363ff2e677b4c606de0c.webm,Bhkko7DCpHY-61f1fb00c42d363ff2e677b4c606de0c.webm +817,/datadrive/videos/CfBM6XqwtuQ-d597a7cd1e7c9ea770e107bfe5e8f848.mp4,52990753545048bb862763bac0b9abaf.ogv,817.0,False,,,[0.09 0.07],ogv,0.04,,,False,True,0.37,CfBM6XqwtuQ-d597a7cd1e7c9ea770e107bfe5e8f848,mp4,CfBM6XqwtuQ-d597a7cd1e7c9ea770e107bfe5e8f848.mp4,CfBM6XqwtuQ-d597a7cd1e7c9ea770e107bfe5e8f848.mp4 +819,/datadrive/videos/ekI-_gNJEHc-163e6ba7751b607ba2a6b407cec36552.webm,4fbf84566d434628bc6954a36e7722d5.webm,819.0,,,0.52,[0.04 0.07],,,logos/another.gif,,False,False,-0.08,ekI-_gNJEHc-163e6ba7751b607ba2a6b407cec36552,webm,ekI-_gNJEHc-163e6ba7751b607ba2a6b407cec36552.webm,ekI-_gNJEHc-163e6ba7751b607ba2a6b407cec36552.webm +821,/datadrive/videos/gptHhkcsMys-98dc479cccae304eb0a8f34f4c422663.webm,6a201ae782634830b4b1fc737f099b5f.webm,821.0,,,0.2,,webm,,,,False,True,,gptHhkcsMys-98dc479cccae304eb0a8f34f4c422663,webm,gptHhkcsMys-98dc479cccae304eb0a8f34f4c422663.webm,gptHhkcsMys-98dc479cccae304eb0a8f34f4c422663.webm +822,/datadrive/videos/RMHoPc26o9g-bb81d5bbf65e1debf7589eb793c01d18.mp4,d7e7884e50424a22bd4ebf01dc0013ed.mp4,822.0,,,0.58,,,-0.14,logos/openair.gif,,False,False,,RMHoPc26o9g-bb81d5bbf65e1debf7589eb793c01d18,mp4,RMHoPc26o9g-bb81d5bbf65e1debf7589eb793c01d18.mp4,RMHoPc26o9g-bb81d5bbf65e1debf7589eb793c01d18.mp4 +823,/datadrive/videos/3rb37ogopQg-1529fe303c2023ffbe4704741f9c8d0c.mp4,b456e8c43b204cb5ac85d62f02cfc922.webm,823.0,,64k,,[0.05 0.04],webm,-0.11,logos/download.png,3.0,False,False,0.24,3rb37ogopQg-1529fe303c2023ffbe4704741f9c8d0c,mp4,3rb37ogopQg-1529fe303c2023ffbe4704741f9c8d0c.mp4,3rb37ogopQg-1529fe303c2023ffbe4704741f9c8d0c.mp4 +824,/datadrive/videos/SnNSqgJYRPo-8b5b6741ac11078087c5642d92922b0e.mp4,b3613ee6510e4ad7925c6d664679bcdb.mp4,824.0,False,16k,0.21,[0.05 0.08],,,logos/jazeera.png,,False,False,,SnNSqgJYRPo-8b5b6741ac11078087c5642d92922b0e,mp4,SnNSqgJYRPo-8b5b6741ac11078087c5642d92922b0e.mp4,SnNSqgJYRPo-8b5b6741ac11078087c5642d92922b0e.mp4 +825,/datadrive/videos/00emEaHcZUc-2035f2f4f51b5f08263ce9a0e3ba88cc.webm,bad5fcf464c946ff8822d2857d7123cc.webm,825.0,,128k,,,,-0.12,,,False,True,,00emEaHcZUc-2035f2f4f51b5f08263ce9a0e3ba88cc,webm,00emEaHcZUc-2035f2f4f51b5f08263ce9a0e3ba88cc.webm,00emEaHcZUc-2035f2f4f51b5f08263ce9a0e3ba88cc.webm +826,/datadrive/videos/uqPhRKah6EA-4d154dee35f9c714fa7653d76807de7a.mp4,0b54d088afa645e180c3509a1c0ecc69.ogv,826.0,False,16k,0.27,,ogv,,,7.0,False,False,0.32,uqPhRKah6EA-4d154dee35f9c714fa7653d76807de7a,mp4,uqPhRKah6EA-4d154dee35f9c714fa7653d76807de7a.mp4,uqPhRKah6EA-4d154dee35f9c714fa7653d76807de7a.mp4 +827,/datadrive/videos/rCZSuzJs4zc-c859578ffb45b422c0d737a005066f9f.mp4,72452f8ee21c41cc939dae6ca8844e53.mp4,827.0,False,128k,,,,-0.16,logos/another.gif,8.0,False,False,0.01,rCZSuzJs4zc-c859578ffb45b422c0d737a005066f9f,mp4,rCZSuzJs4zc-c859578ffb45b422c0d737a005066f9f.mp4,rCZSuzJs4zc-c859578ffb45b422c0d737a005066f9f.mp4 +828,/datadrive/videos/Kfhdi1HS_sU-a138bae1dd88a58a26eb837ab516c0a0.webm,5200f8117af14707abc6cc4ed2feaa37.mp4,828.0,,64k,0.49,,mp4,,logos/fox.png,,False,True,,Kfhdi1HS_sU-a138bae1dd88a58a26eb837ab516c0a0,webm,Kfhdi1HS_sU-a138bae1dd88a58a26eb837ab516c0a0.webm,Kfhdi1HS_sU-a138bae1dd88a58a26eb837ab516c0a0.webm +829,/datadrive/videos/QbnShTjNwVw-af5aec73718447d90c6903c2956cb990.webm,9eb17a64c1084baf8fd54b022e48d900.webm,829.0,,,,[0.04 0.07],,-0.03,,4.0,False,True,,QbnShTjNwVw-af5aec73718447d90c6903c2956cb990,webm,QbnShTjNwVw-af5aec73718447d90c6903c2956cb990.webm,QbnShTjNwVw-af5aec73718447d90c6903c2956cb990.webm +831,/datadrive/videos/XJOS2IQdoVo-6c2977820952b57f161930c5a8ba773d.webm,53451aff05c04352bbf99183d77b0ea9.webm,831.0,,,,,,,,6.0,False,False,0.04,XJOS2IQdoVo-6c2977820952b57f161930c5a8ba773d,webm,XJOS2IQdoVo-6c2977820952b57f161930c5a8ba773d.webm,XJOS2IQdoVo-6c2977820952b57f161930c5a8ba773d.webm +832,/datadrive/videos/Au6wyThNMGk-e4e7961b8eb424ab6cb4bedb7914abc9.mp4,0316fd9b08d9462d99550cb9a15ad408.mp4,832.0,,128k,0.88,,,0.07,,9.0,False,False,-0.11,Au6wyThNMGk-e4e7961b8eb424ab6cb4bedb7914abc9,mp4,Au6wyThNMGk-e4e7961b8eb424ab6cb4bedb7914abc9.mp4,Au6wyThNMGk-e4e7961b8eb424ab6cb4bedb7914abc9.mp4 +833,/datadrive/videos/lnZNiivm2zU-e1caaa59e5479f037914e52e0893cc6e.mp4,9b7c53b7a58f4396b64dc80cfb539ab0.ogv,833.0,False,32k,,[0.14 0.18],ogv,,logos/sbt.gif,7.0,False,False,,lnZNiivm2zU-e1caaa59e5479f037914e52e0893cc6e,mp4,lnZNiivm2zU-e1caaa59e5479f037914e52e0893cc6e.mp4,lnZNiivm2zU-e1caaa59e5479f037914e52e0893cc6e.mp4 +834,/datadrive/videos/RdeDDtkdt2s-f5c8f127a20a8b2b3e6ce1909aca2d63.webm,5270412f36a048038ad09a05c69b9fca.ogv,834.0,,64k,0.64,[0.17 0.03],ogv,,,6.0,False,False,,RdeDDtkdt2s-f5c8f127a20a8b2b3e6ce1909aca2d63,webm,RdeDDtkdt2s-f5c8f127a20a8b2b3e6ce1909aca2d63.webm,RdeDDtkdt2s-f5c8f127a20a8b2b3e6ce1909aca2d63.webm +835,/datadrive/videos/6YmKwon4X0c-f518e04bd71707ddd985f89f03cc7784.mp4,5d5767dcfa584b07a4cf940c9eb150c2.mp4,835.0,,16k,0.37,,,,,,True,True,0.03,6YmKwon4X0c-f518e04bd71707ddd985f89f03cc7784,mp4,6YmKwon4X0c-f518e04bd71707ddd985f89f03cc7784.mp4,6YmKwon4X0c-f518e04bd71707ddd985f89f03cc7784.mp4 +837,/datadrive/videos/mmMPJTM9X5I-c2072199949508a8bc84a022219b61cc.webm,16ed73efddd5406d9a291178f61960d8.ogv,837.0,,,,,ogv,0.03,,4.0,False,True,,mmMPJTM9X5I-c2072199949508a8bc84a022219b61cc,webm,mmMPJTM9X5I-c2072199949508a8bc84a022219b61cc.webm,mmMPJTM9X5I-c2072199949508a8bc84a022219b61cc.webm +838,/datadrive/videos/lbuGNC636tM-be97bb67b748580d77cb28588fbd8eff.webm,7653900e19144a4fb5be16a13cd57fa9.mp4,838.0,False,128k,,[0.05 0.04],mp4,,logos/download.png,9.0,False,False,0.34,lbuGNC636tM-be97bb67b748580d77cb28588fbd8eff,webm,lbuGNC636tM-be97bb67b748580d77cb28588fbd8eff.webm,lbuGNC636tM-be97bb67b748580d77cb28588fbd8eff.webm +839,/datadrive/videos/rGlgUU3E14Y-6d71ac0b941d2b74a2b52df03aaadd2f.mp4,cf6ee75a500f418ab3d0cf135bcd7192.mp4,839.0,,128k,,,,0.03,logos/sbt.gif,1.0,False,False,0.39,rGlgUU3E14Y-6d71ac0b941d2b74a2b52df03aaadd2f,mp4,rGlgUU3E14Y-6d71ac0b941d2b74a2b52df03aaadd2f.mp4,rGlgUU3E14Y-6d71ac0b941d2b74a2b52df03aaadd2f.mp4 +840,/datadrive/videos/J93yVoqVP7M-f06038baf8401e23ac7265f6b7ed22d5.webm,6aa35596f63043e2ac717bc29bcc0203.webm,840.0,,128k,0.43,[0.1 0.15],webm,-0.09,logos/new.gif,,False,True,,J93yVoqVP7M-f06038baf8401e23ac7265f6b7ed22d5,webm,J93yVoqVP7M-f06038baf8401e23ac7265f6b7ed22d5.webm,J93yVoqVP7M-f06038baf8401e23ac7265f6b7ed22d5.webm +842,/datadrive/videos/gHp4ZSiX0gw-857b20dd1be02eeb0493fa2280904323.webm,5c550d6c95f643898bcf318f489af90f.mp4,842.0,False,,0.88,[0.08 0.18],mp4,,logos/msnbc.png,,False,True,0.21,gHp4ZSiX0gw-857b20dd1be02eeb0493fa2280904323,webm,gHp4ZSiX0gw-857b20dd1be02eeb0493fa2280904323.webm,gHp4ZSiX0gw-857b20dd1be02eeb0493fa2280904323.webm +843,/datadrive/videos/GIJU8Q_c1fQ-ad8f86b8687f70061c7016b773905000.mp4,07b8c17826114821a502972aef7dd0ba.mp4,843.0,True,,,,,-0.02,,,False,True,-0.1,GIJU8Q_c1fQ-ad8f86b8687f70061c7016b773905000,mp4,GIJU8Q_c1fQ-ad8f86b8687f70061c7016b773905000.mp4,GIJU8Q_c1fQ-ad8f86b8687f70061c7016b773905000.mp4 +844,/datadrive/videos/i3RUO5BxdAQ-a801f98ef3b6041f8c30f4ac684d9159.webm,c37c9718859349289339e1ea2d4d61f3.webm,844.0,,128k,0.88,[0.18 0.05],,,logos/sbt.gif,,True,False,,i3RUO5BxdAQ-a801f98ef3b6041f8c30f4ac684d9159,webm,i3RUO5BxdAQ-a801f98ef3b6041f8c30f4ac684d9159.webm,i3RUO5BxdAQ-a801f98ef3b6041f8c30f4ac684d9159.webm +845,/datadrive/videos/xdVnoCx6n9k-2bab0f14e26df9544d3c7b3f0b1875e8.webm,523e8d8461e9493183f8226c48cafb4b.webm,845.0,,128k,,[0.16 0.08],,,,8.0,False,False,0.07,xdVnoCx6n9k-2bab0f14e26df9544d3c7b3f0b1875e8,webm,xdVnoCx6n9k-2bab0f14e26df9544d3c7b3f0b1875e8.webm,xdVnoCx6n9k-2bab0f14e26df9544d3c7b3f0b1875e8.webm +846,/datadrive/videos/0skcZddaa3Q-389610305899163cf6ddad122a54954e.mp4,71440d78a64a4cd48500b650bdbfe90e.mp4,846.0,False,128k,,,,,logos/sbt.gif,5.0,False,True,,0skcZddaa3Q-389610305899163cf6ddad122a54954e,mp4,0skcZddaa3Q-389610305899163cf6ddad122a54954e.mp4,0skcZddaa3Q-389610305899163cf6ddad122a54954e.mp4 +847,/datadrive/videos/gJMBrAMnUgI-faaf087bd6fe194ac801ef6f8c7bcaf7.webm,be096fbaade9479b9c53ed4c54ada7ea.ogv,847.0,False,,,[0.05 0.04],ogv,,,,False,False,0.36,gJMBrAMnUgI-faaf087bd6fe194ac801ef6f8c7bcaf7,webm,gJMBrAMnUgI-faaf087bd6fe194ac801ef6f8c7bcaf7.webm,gJMBrAMnUgI-faaf087bd6fe194ac801ef6f8c7bcaf7.webm +848,/datadrive/videos/t_9XI6IeD_o-71deaa81dfde2c8804803c75b6ac8fdb.mp4,fdca460bc63d4a1b81642101d8d6a16b.mp4,848.0,False,,,,,-0.11,,1.0,False,False,,t_9XI6IeD_o-71deaa81dfde2c8804803c75b6ac8fdb,mp4,t_9XI6IeD_o-71deaa81dfde2c8804803c75b6ac8fdb.mp4,t_9XI6IeD_o-71deaa81dfde2c8804803c75b6ac8fdb.mp4 +850,/datadrive/videos/lca6eT9nO3E-76afc8a7546dada8151484990f389069.webm,45b06c35226d41798b2162f88c2a2afc.webm,850.0,False,128k,,,,,,,False,True,0.3,lca6eT9nO3E-76afc8a7546dada8151484990f389069,webm,lca6eT9nO3E-76afc8a7546dada8151484990f389069.webm,lca6eT9nO3E-76afc8a7546dada8151484990f389069.webm +851,/datadrive/videos/ao_H7nyHWQw-2ec745a455cb2640b5e26f5e59d94510.webm,051fafb190c644cdb4495f75c12d1e2f.webm,851.0,,,,,,0.19,logos/jazeera.png,1.0,False,True,,ao_H7nyHWQw-2ec745a455cb2640b5e26f5e59d94510,webm,ao_H7nyHWQw-2ec745a455cb2640b5e26f5e59d94510.webm,ao_H7nyHWQw-2ec745a455cb2640b5e26f5e59d94510.webm +853,/datadrive/videos/mvp9ykooWc0-6196d9057254f2859416f6689a8eeaf4.webm,b6dafcb2a6054104b144c86b5d549271.mp4,853.0,False,,0.77,[0.11 0.03],mp4,-0.07,logos/openair.gif,5.0,False,False,-0.13,mvp9ykooWc0-6196d9057254f2859416f6689a8eeaf4,webm,mvp9ykooWc0-6196d9057254f2859416f6689a8eeaf4.webm,mvp9ykooWc0-6196d9057254f2859416f6689a8eeaf4.webm +854,/datadrive/videos/IvQr13Rxwv4-142dd3d9686a9c300a4b4c1a26fd045d.webm,7029d04665934855bb731511a3b7d048.webm,854.0,,128k,,,,-0.17,,,False,True,-0.05,IvQr13Rxwv4-142dd3d9686a9c300a4b4c1a26fd045d,webm,IvQr13Rxwv4-142dd3d9686a9c300a4b4c1a26fd045d.webm,IvQr13Rxwv4-142dd3d9686a9c300a4b4c1a26fd045d.webm +856,/datadrive/videos/cVrs5Qsnv1U-764e066c86851edb8bc63660ab1b5647.webm,3ccc3e7c922a4da4b49e46825b8110d8.webm,856.0,False,,,[0.07 0.11],,,logos/jazeera.png,6.0,False,False,,cVrs5Qsnv1U-764e066c86851edb8bc63660ab1b5647,webm,cVrs5Qsnv1U-764e066c86851edb8bc63660ab1b5647.webm,cVrs5Qsnv1U-764e066c86851edb8bc63660ab1b5647.webm +857,/datadrive/videos/0skcZddaa3Q-389610305899163cf6ddad122a54954e.mp4,c03bbeb99ad946eca6f178c52f42822a.mp4,857.0,False,,0.33,,,,,5.0,True,False,0.05,0skcZddaa3Q-389610305899163cf6ddad122a54954e,mp4,0skcZddaa3Q-389610305899163cf6ddad122a54954e.mp4,0skcZddaa3Q-389610305899163cf6ddad122a54954e.mp4 +858,/datadrive/videos/XTe0w59pOZ8-eb9e238379b71eda63286354e60a2453.webm,964e9199220846a7af5e48e485f70d19.webm,858.0,True,32k,,,,,logos/openair.gif,,False,True,,XTe0w59pOZ8-eb9e238379b71eda63286354e60a2453,webm,XTe0w59pOZ8-eb9e238379b71eda63286354e60a2453.webm,XTe0w59pOZ8-eb9e238379b71eda63286354e60a2453.webm +859,/datadrive/videos/S3RfAROw2gg-9d948ffa9a2a0db206844b54269e82a0.mp4,72845679b7cb40cb89b4a640c1b8f3cd.mp4,859.0,True,16k,,,,-0.12,,,False,True,-0.17,S3RfAROw2gg-9d948ffa9a2a0db206844b54269e82a0,mp4,S3RfAROw2gg-9d948ffa9a2a0db206844b54269e82a0.mp4,S3RfAROw2gg-9d948ffa9a2a0db206844b54269e82a0.mp4 +860,/datadrive/videos/WUUQGXPoAJk-53f45c1ae0e50cc954e5f2d7ced9544f.webm,02a3b507a1d64eb9ad27065a30d02d68.webm,860.0,False,128k,0.78,[0.13 0.07],,,,6.0,False,False,0.25,WUUQGXPoAJk-53f45c1ae0e50cc954e5f2d7ced9544f,webm,WUUQGXPoAJk-53f45c1ae0e50cc954e5f2d7ced9544f.webm,WUUQGXPoAJk-53f45c1ae0e50cc954e5f2d7ced9544f.webm +861,/datadrive/videos/qKA14n2w5JE-ea38b5a9492770c41611f19ef580c0b5.webm,56c2b2b7fba14496bde80635b3c6335a.webm,861.0,,,,[0.07 0.19],,-0.05,,,False,False,-0.1,qKA14n2w5JE-ea38b5a9492770c41611f19ef580c0b5,webm,qKA14n2w5JE-ea38b5a9492770c41611f19ef580c0b5.webm,qKA14n2w5JE-ea38b5a9492770c41611f19ef580c0b5.webm +862,/datadrive/videos/GL9BAsLhLfY-867b15730569d60d61081fa17e3ae863.mp4,31838e49fc5549df92200c3b7947a696.mp4,862.0,True,,0.74,[0.12 0.09],,-0.08,,5.0,False,False,,GL9BAsLhLfY-867b15730569d60d61081fa17e3ae863,mp4,GL9BAsLhLfY-867b15730569d60d61081fa17e3ae863.mp4,GL9BAsLhLfY-867b15730569d60d61081fa17e3ae863.mp4 +865,/datadrive/videos/zLjwz_luXO4-76db12e799bacdf2d568edd2bd4dcea6.webm,754832c93a6c49d7b3f3f08a5201c6c4.webm,865.0,False,,0.66,[0.03 0.17],,,,,False,True,,zLjwz_luXO4-76db12e799bacdf2d568edd2bd4dcea6,webm,zLjwz_luXO4-76db12e799bacdf2d568edd2bd4dcea6.webm,zLjwz_luXO4-76db12e799bacdf2d568edd2bd4dcea6.webm +866,/datadrive/videos/ZgNMhdzDt-w-1c78b75e7fdc278c40ed7bb261d5b56b.webm,732a558dd2a44ee7896a3933480845ab.webm,866.0,False,16k,,,,,logos/openair.gif,,False,False,,ZgNMhdzDt-w-1c78b75e7fdc278c40ed7bb261d5b56b,webm,ZgNMhdzDt-w-1c78b75e7fdc278c40ed7bb261d5b56b.webm,ZgNMhdzDt-w-1c78b75e7fdc278c40ed7bb261d5b56b.webm +867,/datadrive/videos/E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d.mp4,7b52054c762f4597a3280655fe0d9e83.mp4,867.0,False,,,[0.19 0.06],mp4,,logos/download.png,1.0,False,False,,E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d,mp4,E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d.mp4,E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d.mp4 +868,/datadrive/videos/O9ZvtIq9rn4-e41180013f8099519865b7fbc1d246b3.mp4,c79d24afe97641bea5f9f16244e745ef.mp4,868.0,False,,0.65,,,-0.09,logos/jazeera.png,,False,True,,O9ZvtIq9rn4-e41180013f8099519865b7fbc1d246b3,mp4,O9ZvtIq9rn4-e41180013f8099519865b7fbc1d246b3.mp4,O9ZvtIq9rn4-e41180013f8099519865b7fbc1d246b3.mp4 +872,/datadrive/videos/HPLn7jTOZ70-398701ff9b21854bc359ce89b6d33e3f.webm,6b0a98353b00451ba42c3d88b2777450.webm,872.0,,,0.89,[0.08 0.12],,0.09,logos/another.gif,,True,True,,HPLn7jTOZ70-398701ff9b21854bc359ce89b6d33e3f,webm,HPLn7jTOZ70-398701ff9b21854bc359ce89b6d33e3f.webm,HPLn7jTOZ70-398701ff9b21854bc359ce89b6d33e3f.webm +873,/datadrive/videos/fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905.mp4,7f4e2a11397947188292d69067fa98a5.ogv,873.0,,16k,0.27,,ogv,-0.14,logos/openair.gif,7.0,False,True,0.17,fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905,mp4,fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905.mp4,fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905.mp4 +874,/datadrive/videos/cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151.mp4,8885400fcf264e67babb46fbe1b8d290.mp4,874.0,False,,0.41,,,-0.04,,6.0,False,True,,cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151,mp4,cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151.mp4,cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151.mp4 +877,/datadrive/videos/STFYVU8e_n0-567b64d022dbc3a2acdb317cf28c4592.mp4,c969d6850b9c45dd87fb0da37bd216b7.webm,877.0,,,0.79,,webm,0.17,logos/sbt.gif,,False,False,,STFYVU8e_n0-567b64d022dbc3a2acdb317cf28c4592,mp4,STFYVU8e_n0-567b64d022dbc3a2acdb317cf28c4592.mp4,STFYVU8e_n0-567b64d022dbc3a2acdb317cf28c4592.mp4 +878,/datadrive/videos/qnmJSJhYErE-513c29d5bfb85211698caa3a2d12045f.webm,c31ae48142884f65a8dffefe39f7c924.webm,878.0,True,,0.67,,webm,,,5.0,False,True,-0.15,qnmJSJhYErE-513c29d5bfb85211698caa3a2d12045f,webm,qnmJSJhYErE-513c29d5bfb85211698caa3a2d12045f.webm,qnmJSJhYErE-513c29d5bfb85211698caa3a2d12045f.webm +879,/datadrive/videos/X2Ece2YEEAo-ffa65cf40eddd66f4878fba2917693a9.webm,5c595195406e4e038afb18e42444923b.webm,879.0,,128k,0.73,,,0.02,,,False,False,,X2Ece2YEEAo-ffa65cf40eddd66f4878fba2917693a9,webm,X2Ece2YEEAo-ffa65cf40eddd66f4878fba2917693a9.webm,X2Ece2YEEAo-ffa65cf40eddd66f4878fba2917693a9.webm +880,/datadrive/videos/b9ErO_x9nXg-67426bb8addcc272591cf476445e97d2.webm,0851aa68908c4301a53c1a73ccaa013a.ogv,880.0,,,,[0.09 0.09],ogv,-0.04,logos/another.gif,,False,False,0.25,b9ErO_x9nXg-67426bb8addcc272591cf476445e97d2,webm,b9ErO_x9nXg-67426bb8addcc272591cf476445e97d2.webm,b9ErO_x9nXg-67426bb8addcc272591cf476445e97d2.webm +881,/datadrive/videos/a4cyiTNvuM0-69be08068c25a8c756dee1f1052c9890.webm,fe3e76a2971746edbc78dbf9a4f58e1c.mp4,881.0,False,,,,mp4,,,,False,False,,a4cyiTNvuM0-69be08068c25a8c756dee1f1052c9890,webm,a4cyiTNvuM0-69be08068c25a8c756dee1f1052c9890.webm,a4cyiTNvuM0-69be08068c25a8c756dee1f1052c9890.webm +882,/datadrive/videos/5DMCF2sKJpU-859bbc2976278ae50e91639fbc4bad77.webm,0af9e075969446fa9658a3478c8e4095.ogv,882.0,False,64k,,[0.06 0.05],ogv,,logos/msnbc.png,,False,True,-0.4,5DMCF2sKJpU-859bbc2976278ae50e91639fbc4bad77,webm,5DMCF2sKJpU-859bbc2976278ae50e91639fbc4bad77.webm,5DMCF2sKJpU-859bbc2976278ae50e91639fbc4bad77.webm +885,/datadrive/videos/A4m9YvUzG2Y-ed876e1b27995cff531358ca11d7de60.webm,41705ae87e2349669afcf6aa92e78bc1.webm,885.0,False,,,,webm,,,8.0,False,True,,A4m9YvUzG2Y-ed876e1b27995cff531358ca11d7de60,webm,A4m9YvUzG2Y-ed876e1b27995cff531358ca11d7de60.webm,A4m9YvUzG2Y-ed876e1b27995cff531358ca11d7de60.webm +886,/datadrive/videos/4ZQ_UHDeWTA-620aebf76618bcc9e1aba51701127df1.mp4,070f69d1f6ef46a9aec3a0433854ead7.mp4,886.0,,64k,0.4,[0.05 0.08],mp4,0.19,,,False,False,-0.08,4ZQ_UHDeWTA-620aebf76618bcc9e1aba51701127df1,mp4,4ZQ_UHDeWTA-620aebf76618bcc9e1aba51701127df1.mp4,4ZQ_UHDeWTA-620aebf76618bcc9e1aba51701127df1.mp4 +887,/datadrive/videos/0WYW0PIwvZI-578d2311e2400479811356035066a45c.webm,08fd106de0bf426390644ba5f3284032.webm,887.0,False,128k,,,webm,-0.18,,,False,True,,0WYW0PIwvZI-578d2311e2400479811356035066a45c,webm,0WYW0PIwvZI-578d2311e2400479811356035066a45c.webm,0WYW0PIwvZI-578d2311e2400479811356035066a45c.webm +888,/datadrive/videos/2EOlfyuSMwg-d68348b797bd189c174ebcfba2223dee.webm,839cdc487830442c805e9e9190e6c090.webm,888.0,,128k,0.45,,webm,0.19,logos/another.gif,,False,False,-0.2,2EOlfyuSMwg-d68348b797bd189c174ebcfba2223dee,webm,2EOlfyuSMwg-d68348b797bd189c174ebcfba2223dee.webm,2EOlfyuSMwg-d68348b797bd189c174ebcfba2223dee.webm +889,/datadrive/videos/2CwEzBPhMrI-39b4aca4d10f5473321eba15e6ffd27e.mp4,7deb36f4aac84148926775bec0887d00.mp4,889.0,False,,0.88,,,0.17,logos/sbt.gif,,False,True,0.15,2CwEzBPhMrI-39b4aca4d10f5473321eba15e6ffd27e,mp4,2CwEzBPhMrI-39b4aca4d10f5473321eba15e6ffd27e.mp4,2CwEzBPhMrI-39b4aca4d10f5473321eba15e6ffd27e.mp4 +890,/datadrive/videos/7LUkM6SDIjM-f50e81d735b85d29a0facb3606595d30.webm,a88094deaed94392b99f28cce87b59e5.mp4,890.0,,128k,,,mp4,,,3.0,False,False,,7LUkM6SDIjM-f50e81d735b85d29a0facb3606595d30,webm,7LUkM6SDIjM-f50e81d735b85d29a0facb3606595d30.webm,7LUkM6SDIjM-f50e81d735b85d29a0facb3606595d30.webm +891,/datadrive/videos/lPFUMf0ge70-6629b10fe6fe510c1e8c6eec4bf26bf0.mp4,8bd7606f0a7d4a859a5e4868a23bc196.mp4,891.0,False,,,,mp4,,,7.0,False,False,,lPFUMf0ge70-6629b10fe6fe510c1e8c6eec4bf26bf0,mp4,lPFUMf0ge70-6629b10fe6fe510c1e8c6eec4bf26bf0.mp4,lPFUMf0ge70-6629b10fe6fe510c1e8c6eec4bf26bf0.mp4 +892,/datadrive/videos/0w2lCxNansE-131699d0aada312e68da0d54d8210602.mp4,98fe3fcf1a1e42e8a7ce7d2cde2cfde0.mp4,892.0,,32k,0.41,,,0.19,logos/fox.png,,False,False,,0w2lCxNansE-131699d0aada312e68da0d54d8210602,mp4,0w2lCxNansE-131699d0aada312e68da0d54d8210602.mp4,0w2lCxNansE-131699d0aada312e68da0d54d8210602.mp4 +894,/datadrive/videos/T7z_JzK5zZM-4bf56a31df387d0ad100d2e7da85eea4.webm,9c6867367dd14f47a9e3ab7d9ad95112.ogv,894.0,,,,[0.08 0.05],ogv,,logos/sbt.gif,,False,True,0.06,T7z_JzK5zZM-4bf56a31df387d0ad100d2e7da85eea4,webm,T7z_JzK5zZM-4bf56a31df387d0ad100d2e7da85eea4.webm,T7z_JzK5zZM-4bf56a31df387d0ad100d2e7da85eea4.webm +895,/datadrive/videos/vKT6XAEddyk-0dd9148b1e02a5a4e356017090a3e741.webm,1196087e4ef7400980b5b88122a14687.webm,895.0,False,16k,,[0.01 0.07],,,,,False,True,-0.17,vKT6XAEddyk-0dd9148b1e02a5a4e356017090a3e741,webm,vKT6XAEddyk-0dd9148b1e02a5a4e356017090a3e741.webm,vKT6XAEddyk-0dd9148b1e02a5a4e356017090a3e741.webm +896,/datadrive/videos/i-YcLVHtgAI-e7ebe78883f219cce35a28bb0108dd19.webm,9aaf0bd7671e41299ce86675a27eb001.mp4,896.0,,128k,,,mp4,,,,False,True,0.06,i-YcLVHtgAI-e7ebe78883f219cce35a28bb0108dd19,webm,i-YcLVHtgAI-e7ebe78883f219cce35a28bb0108dd19.webm,i-YcLVHtgAI-e7ebe78883f219cce35a28bb0108dd19.webm +897,/datadrive/videos/LBcPLJjNAL8-897dc0a2bb9524a745e15194a2269f29.mp4,d2e67f5c4c294b6196399c445810f036.mp4,897.0,,64k,,,mp4,,logos/sbt.gif,0.0,False,False,-0.07,LBcPLJjNAL8-897dc0a2bb9524a745e15194a2269f29,mp4,LBcPLJjNAL8-897dc0a2bb9524a745e15194a2269f29.mp4,LBcPLJjNAL8-897dc0a2bb9524a745e15194a2269f29.mp4 +898,/datadrive/videos/DVoAtKHiZ0w-5866eb91997806edf7010b94a42a5f62.mp4,918b1dbaf4b2410a92706d3c3d0fc8d3.ogv,898.0,,,0.97,[0.01 0.16],ogv,,logos/another.gif,6.0,False,False,,DVoAtKHiZ0w-5866eb91997806edf7010b94a42a5f62,mp4,DVoAtKHiZ0w-5866eb91997806edf7010b94a42a5f62.mp4,DVoAtKHiZ0w-5866eb91997806edf7010b94a42a5f62.mp4 +899,/datadrive/videos/AxDxVNDEU3c-4afdd33901943e0e27f9f654cb96bd34.webm,330b3603562541a6bec9871a8a440f33.webm,899.0,,64k,,,,,logos/fox.png,3.0,False,False,-0.21,AxDxVNDEU3c-4afdd33901943e0e27f9f654cb96bd34,webm,AxDxVNDEU3c-4afdd33901943e0e27f9f654cb96bd34.webm,AxDxVNDEU3c-4afdd33901943e0e27f9f654cb96bd34.webm +900,/datadrive/videos/cjlyVIfZJh4-1b8d795c7ae011e42e1377e52a43f2ee.mp4,2009a98e49744179946b002d116a4326.mp4,900.0,False,64k,,[0.18 0.03],mp4,0.02,logos/ge.gif,,False,True,0.31,cjlyVIfZJh4-1b8d795c7ae011e42e1377e52a43f2ee,mp4,cjlyVIfZJh4-1b8d795c7ae011e42e1377e52a43f2ee.mp4,cjlyVIfZJh4-1b8d795c7ae011e42e1377e52a43f2ee.mp4 +902,/datadrive/videos/6hL7iopIoOo-2a38ca9e32de3293f8f18e791498cadd.mp4,3e334a59e5514115ad53fe8afaba888c.mp4,902.0,False,,0.42,[0.08 0.05],,,logos/ge.gif,,False,False,0.35,6hL7iopIoOo-2a38ca9e32de3293f8f18e791498cadd,mp4,6hL7iopIoOo-2a38ca9e32de3293f8f18e791498cadd.mp4,6hL7iopIoOo-2a38ca9e32de3293f8f18e791498cadd.mp4 +903,/datadrive/videos/6omIWrDq5dk-ce223270fa80bd30716227aa98e1ce26.mp4,ca5734c3486f461c825730363a54c180.mp4,903.0,,,0.5,[0.04 0.08],,,logos/sbt.gif,,False,False,0.1,6omIWrDq5dk-ce223270fa80bd30716227aa98e1ce26,mp4,6omIWrDq5dk-ce223270fa80bd30716227aa98e1ce26.mp4,6omIWrDq5dk-ce223270fa80bd30716227aa98e1ce26.mp4 +905,/datadrive/videos/lr6kMef1noQ-4edfc3906deee4d2ee6c3d3e7b58e9dd.webm,d185fd17577646139c53edf066bb10c0.mp4,905.0,True,32k,,[0.12 0.14],mp4,,,6.0,False,True,,lr6kMef1noQ-4edfc3906deee4d2ee6c3d3e7b58e9dd,webm,lr6kMef1noQ-4edfc3906deee4d2ee6c3d3e7b58e9dd.webm,lr6kMef1noQ-4edfc3906deee4d2ee6c3d3e7b58e9dd.webm +907,/datadrive/videos/NtDPmh9PBCE-eb944ef0fd04245361b5270319febe56.mp4,becdd47c234c4ce6813ced80dc7c2abc.mp4,907.0,,,0.77,,mp4,,,7.0,False,False,,NtDPmh9PBCE-eb944ef0fd04245361b5270319febe56,mp4,NtDPmh9PBCE-eb944ef0fd04245361b5270319febe56.mp4,NtDPmh9PBCE-eb944ef0fd04245361b5270319febe56.mp4 +908,/datadrive/videos/h_oWKSYNAZQ-488c383963c4655afaeebf7a617e2659.webm,829c9655e359467f855d39263436e98f.mp4,908.0,True,,0.53,,mp4,0.1,logos/sbt.gif,1.0,False,False,0.21,h_oWKSYNAZQ-488c383963c4655afaeebf7a617e2659,webm,h_oWKSYNAZQ-488c383963c4655afaeebf7a617e2659.webm,h_oWKSYNAZQ-488c383963c4655afaeebf7a617e2659.webm +909,/datadrive/videos/yECKCuEiYc4-20fe4ed4c0e7f4e0fed01eb7cc66f377.mp4,cd984e900adf4c72ba5c65e3a7251f90.mp4,909.0,,,,[0.19 0.18],mp4,0.14,,3.0,False,False,,yECKCuEiYc4-20fe4ed4c0e7f4e0fed01eb7cc66f377,mp4,yECKCuEiYc4-20fe4ed4c0e7f4e0fed01eb7cc66f377.mp4,yECKCuEiYc4-20fe4ed4c0e7f4e0fed01eb7cc66f377.mp4 +910,/datadrive/videos/fSSeYeoYCqo-a0b5188bdc330a122b5c2a30d62e70c7.webm,8679af4e48bb4558a002160155041959.ogv,910.0,,32k,,[0.08 0.11],ogv,-0.08,,,False,True,0.03,fSSeYeoYCqo-a0b5188bdc330a122b5c2a30d62e70c7,webm,fSSeYeoYCqo-a0b5188bdc330a122b5c2a30d62e70c7.webm,fSSeYeoYCqo-a0b5188bdc330a122b5c2a30d62e70c7.webm +911,/datadrive/videos/R1WilFnYuUQ-48093d0372477e02b4729e5b123878a3.webm,9d733935f3e642adb1da1c234e77dae3.webm,911.0,True,64k,0.57,,,-0.1,,4.0,False,True,,R1WilFnYuUQ-48093d0372477e02b4729e5b123878a3,webm,R1WilFnYuUQ-48093d0372477e02b4729e5b123878a3.webm,R1WilFnYuUQ-48093d0372477e02b4729e5b123878a3.webm +912,/datadrive/videos/HLtHkOniXZ4-307861b56af628efb75463cea9f24397.webm,66fc8775f11d42b6b7f2ea41613d76b2.webm,912.0,True,64k,,[0.19 0.06],,,,0.0,False,True,-0.24,HLtHkOniXZ4-307861b56af628efb75463cea9f24397,webm,HLtHkOniXZ4-307861b56af628efb75463cea9f24397.webm,HLtHkOniXZ4-307861b56af628efb75463cea9f24397.webm +913,/datadrive/videos/0L2yG83Xoq4-023d7f965b7b7ac7424da852dceb5b2c.webm,d6be7356426841239da9add39c1e5d9b.ogv,913.0,False,32k,,,ogv,,logos/download.png,,False,False,,0L2yG83Xoq4-023d7f965b7b7ac7424da852dceb5b2c,webm,0L2yG83Xoq4-023d7f965b7b7ac7424da852dceb5b2c.webm,0L2yG83Xoq4-023d7f965b7b7ac7424da852dceb5b2c.webm +914,/datadrive/videos/lrpmaThQ2sY-32a39886c7888f8aa7b3fa3b2ba9d495.webm,5fad87da95944219b213491527ae859c.webm,914.0,False,,0.76,,webm,0.0,logos/fox.png,,False,True,,lrpmaThQ2sY-32a39886c7888f8aa7b3fa3b2ba9d495,webm,lrpmaThQ2sY-32a39886c7888f8aa7b3fa3b2ba9d495.webm,lrpmaThQ2sY-32a39886c7888f8aa7b3fa3b2ba9d495.webm +915,/datadrive/videos/z8nr4Q5-2v4-4123c8c3e9ca3faddf89b3e1f45cf332.webm,8ebb43cff23a43c1b1485d18d97f8aac.webm,915.0,True,,0.36,[0.15 0.07],,0.17,,,False,True,,z8nr4Q5-2v4-4123c8c3e9ca3faddf89b3e1f45cf332,webm,z8nr4Q5-2v4-4123c8c3e9ca3faddf89b3e1f45cf332.webm,z8nr4Q5-2v4-4123c8c3e9ca3faddf89b3e1f45cf332.webm +916,/datadrive/videos/oMIk_AXdMV4-28480ad690e153d077d05740f1d2a8c6.mp4,c9d8c700aa8d40b692882986f9ebd146.ogv,916.0,,,0.84,[0.14 0.07],ogv,-0.07,,8.0,True,True,,oMIk_AXdMV4-28480ad690e153d077d05740f1d2a8c6,mp4,oMIk_AXdMV4-28480ad690e153d077d05740f1d2a8c6.mp4,oMIk_AXdMV4-28480ad690e153d077d05740f1d2a8c6.mp4 +917,/datadrive/videos/Au6wyThNMGk-e4e7961b8eb424ab6cb4bedb7914abc9.mp4,332f433664174b368452d81d5581e937.webm,917.0,,,0.86,[0.02 0.07],webm,-0.02,,5.0,False,False,-0.27,Au6wyThNMGk-e4e7961b8eb424ab6cb4bedb7914abc9,mp4,Au6wyThNMGk-e4e7961b8eb424ab6cb4bedb7914abc9.mp4,Au6wyThNMGk-e4e7961b8eb424ab6cb4bedb7914abc9.mp4 +918,/datadrive/videos/5SEdXZAS0xI-fdc076b909b21f457c5028d142334923.webm,06708214fe254a72aacb2ee15cea4546.mp4,918.0,False,16k,0.42,,mp4,,,,False,True,0.0,5SEdXZAS0xI-fdc076b909b21f457c5028d142334923,webm,5SEdXZAS0xI-fdc076b909b21f457c5028d142334923.webm,5SEdXZAS0xI-fdc076b909b21f457c5028d142334923.webm +919,/datadrive/videos/W3UHKYaFdhg-7eb90000efc9da69d64b248cefadb023.mp4,3bb8d54de1f44272808d613654c616d4.mp4,919.0,,128k,,[0.12 0.03],,0.02,,2.0,False,False,,W3UHKYaFdhg-7eb90000efc9da69d64b248cefadb023,mp4,W3UHKYaFdhg-7eb90000efc9da69d64b248cefadb023.mp4,W3UHKYaFdhg-7eb90000efc9da69d64b248cefadb023.mp4 +920,/datadrive/videos/dB3BipcKT18-6ad3ac638df02f30356841a4d379a936.webm,24e7d46df01749c59ba46a02848bca78.webm,920.0,,,0.78,,,,,2.0,False,True,,dB3BipcKT18-6ad3ac638df02f30356841a4d379a936,webm,dB3BipcKT18-6ad3ac638df02f30356841a4d379a936.webm,dB3BipcKT18-6ad3ac638df02f30356841a4d379a936.webm +921,/datadrive/videos/HXiEnha7YTE-2cc3b6719b923c30cd29c83d27cd4300.mp4,3c6b188e11cd43abb2eb1f60934a1bbd.ogv,921.0,True,,0.32,,ogv,-0.11,,,False,True,,HXiEnha7YTE-2cc3b6719b923c30cd29c83d27cd4300,mp4,HXiEnha7YTE-2cc3b6719b923c30cd29c83d27cd4300.mp4,HXiEnha7YTE-2cc3b6719b923c30cd29c83d27cd4300.mp4 +922,/datadrive/videos/Gxb97nMrLHM-562225efb0537cfe01b73c9737116784.mp4,9ed020f817b84b8f87aba8d5444cceae.mp4,922.0,,,0.82,[0.1 0.04],,,logos/ge.gif,7.0,False,False,,Gxb97nMrLHM-562225efb0537cfe01b73c9737116784,mp4,Gxb97nMrLHM-562225efb0537cfe01b73c9737116784.mp4,Gxb97nMrLHM-562225efb0537cfe01b73c9737116784.mp4 +923,/datadrive/videos/X5jHONOLfD8-d7a6cd6e9d31018e8f42ed32b2863b22.webm,3fd684035e5742e585c3dbd26a7a7cfc.webm,923.0,True,16k,,[0.01 0.02],webm,,logos/fox.png,9.0,False,True,,X5jHONOLfD8-d7a6cd6e9d31018e8f42ed32b2863b22,webm,X5jHONOLfD8-d7a6cd6e9d31018e8f42ed32b2863b22.webm,X5jHONOLfD8-d7a6cd6e9d31018e8f42ed32b2863b22.webm +924,/datadrive/videos/rIIEPBzpmx8-c80faf541f85a00938c1e02d5240cb8f.webm,481217dfebea478384121d8e9df6db97.mp4,924.0,False,32k,,[0.19 0.01],mp4,,,5.0,False,False,,rIIEPBzpmx8-c80faf541f85a00938c1e02d5240cb8f,webm,rIIEPBzpmx8-c80faf541f85a00938c1e02d5240cb8f.webm,rIIEPBzpmx8-c80faf541f85a00938c1e02d5240cb8f.webm +925,/datadrive/videos/Lkgc2DpdRIQ-707c7c494b7172a2468be1eb9360c3d9.mp4,86cb29901fb6455fa8c245881e82c44d.webm,925.0,,,,[0.15 0.06],webm,0.02,,8.0,False,True,0.08,Lkgc2DpdRIQ-707c7c494b7172a2468be1eb9360c3d9,mp4,Lkgc2DpdRIQ-707c7c494b7172a2468be1eb9360c3d9.mp4,Lkgc2DpdRIQ-707c7c494b7172a2468be1eb9360c3d9.mp4 +926,/datadrive/videos/uzZ7iBJ5Ing-de0ca51686817a8e895cf4fe39d6baff.webm,76f5f51daf6147f8b760a65859bfbd86.webm,926.0,False,,,,,0.02,,,False,True,0.27,uzZ7iBJ5Ing-de0ca51686817a8e895cf4fe39d6baff,webm,uzZ7iBJ5Ing-de0ca51686817a8e895cf4fe39d6baff.webm,uzZ7iBJ5Ing-de0ca51686817a8e895cf4fe39d6baff.webm +927,/datadrive/videos/mFpP_t9D4eU-eab71f04a6ccb015beb4d72cd436e39d.webm,321b34d18a034af7aef7333bdef82ce5.mp4,927.0,True,16k,0.53,[0.11 0.03],mp4,-0.09,,0.0,False,True,,mFpP_t9D4eU-eab71f04a6ccb015beb4d72cd436e39d,webm,mFpP_t9D4eU-eab71f04a6ccb015beb4d72cd436e39d.webm,mFpP_t9D4eU-eab71f04a6ccb015beb4d72cd436e39d.webm +928,/datadrive/videos/L8kCTymzjlI-5652888a805f8075367cf9dfbd6bf7b9.webm,1d8c172431764527be8871cb3fe79a69.webm,928.0,,16k,,[0.17 0.04],,,,2.0,False,False,0.02,L8kCTymzjlI-5652888a805f8075367cf9dfbd6bf7b9,webm,L8kCTymzjlI-5652888a805f8075367cf9dfbd6bf7b9.webm,L8kCTymzjlI-5652888a805f8075367cf9dfbd6bf7b9.webm +929,/datadrive/videos/JoxsB8x2mSc-f72ea72ee9bf3e8787d9a6498f8ef180.mp4,6573f7c3bb7f455a96b13de6544e15bf.mp4,929.0,False,16k,0.99,,,-0.15,,8.0,False,True,-0.28,JoxsB8x2mSc-f72ea72ee9bf3e8787d9a6498f8ef180,mp4,JoxsB8x2mSc-f72ea72ee9bf3e8787d9a6498f8ef180.mp4,JoxsB8x2mSc-f72ea72ee9bf3e8787d9a6498f8ef180.mp4 +930,/datadrive/videos/puME6wQyP98-f9659f8e6dcac0a1a45e7ea1741f28b8.mp4,82a0fdb5479c455ea86f434a999af722.mp4,930.0,,,0.73,[0.04 0.16],,0.16,,9.0,True,True,-0.26,puME6wQyP98-f9659f8e6dcac0a1a45e7ea1741f28b8,mp4,puME6wQyP98-f9659f8e6dcac0a1a45e7ea1741f28b8.mp4,puME6wQyP98-f9659f8e6dcac0a1a45e7ea1741f28b8.mp4 +932,/datadrive/videos/HqNujQunFnU-5325de3ee508b2af33627705d32d816c.webm,b6d85b2fa53d46adba186b9951c39f6b.webm,932.0,,32k,0.82,[0.17 0.03],,,,,False,False,,HqNujQunFnU-5325de3ee508b2af33627705d32d816c,webm,HqNujQunFnU-5325de3ee508b2af33627705d32d816c.webm,HqNujQunFnU-5325de3ee508b2af33627705d32d816c.webm +933,/datadrive/videos/9H_zNXMgTNE-49e34b8bb457bd873cf7dda0679df43c.webm,18416bab5a954d948871b0b9c7e7aaba.webm,933.0,True,16k,0.21,[0.06 0.04],,-0.09,logos/sbt.gif,,False,False,0.06,9H_zNXMgTNE-49e34b8bb457bd873cf7dda0679df43c,webm,9H_zNXMgTNE-49e34b8bb457bd873cf7dda0679df43c.webm,9H_zNXMgTNE-49e34b8bb457bd873cf7dda0679df43c.webm +934,/datadrive/videos/dU9z89k7AxA-b361440c50b6b44b8a14d5014a4dd2f4.webm,d4a9c71fcef04f5a8ed5bbecd75bbd8d.webm,934.0,True,64k,0.58,,,,logos/fox.png,,False,True,,dU9z89k7AxA-b361440c50b6b44b8a14d5014a4dd2f4,webm,dU9z89k7AxA-b361440c50b6b44b8a14d5014a4dd2f4.webm,dU9z89k7AxA-b361440c50b6b44b8a14d5014a4dd2f4.webm +935,/datadrive/videos/YtTp4U1aZ6A-b40bd46084d496f6441d71700b840854.webm,75531809aa614a1e9ed11684da38eb5e.webm,935.0,,,,,,,logos/new.gif,,False,False,0.26,YtTp4U1aZ6A-b40bd46084d496f6441d71700b840854,webm,YtTp4U1aZ6A-b40bd46084d496f6441d71700b840854.webm,YtTp4U1aZ6A-b40bd46084d496f6441d71700b840854.webm +937,/datadrive/videos/IgyjoEgMuPA-784bc730ced19fb7d4b54284b6a6d747.mp4,57342a26f3a84df882a88ed722edea8d.ogv,937.0,,16k,,,ogv,,,2.0,False,False,,IgyjoEgMuPA-784bc730ced19fb7d4b54284b6a6d747,mp4,IgyjoEgMuPA-784bc730ced19fb7d4b54284b6a6d747.mp4,IgyjoEgMuPA-784bc730ced19fb7d4b54284b6a6d747.mp4 +938,/datadrive/videos/l3HAflwGwj8-35063040003d449041c19a1a3fd71138.webm,3edc9da1bc1742a296b08638c9a0e540.webm,938.0,False,,0.97,[0.12 0.02],,,logos/new.gif,7.0,False,True,-0.04,l3HAflwGwj8-35063040003d449041c19a1a3fd71138,webm,l3HAflwGwj8-35063040003d449041c19a1a3fd71138.webm,l3HAflwGwj8-35063040003d449041c19a1a3fd71138.webm +939,/datadrive/videos/tss8BRY2Jmk-a3506f0ec7d1cfba7cf128ff2b700731.mp4,d68efa834a8547af9a73cd1a68f3fedf.ogv,939.0,,,,[0.11 0.02],ogv,,logos/msnbc.png,,False,True,,tss8BRY2Jmk-a3506f0ec7d1cfba7cf128ff2b700731,mp4,tss8BRY2Jmk-a3506f0ec7d1cfba7cf128ff2b700731.mp4,tss8BRY2Jmk-a3506f0ec7d1cfba7cf128ff2b700731.mp4 +941,/datadrive/videos/vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3.webm,11adc0bf51634765837ff4b65c1b36fc.webm,941.0,True,128k,,[0.17 0.13],webm,-0.19,logos/sbt.gif,,False,True,-0.08,vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3,webm,vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3.webm,vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3.webm +943,/datadrive/videos/LyRG6FOz2-k-6f75d969a0791a5158869ec872f4286d.webm,02f48226db3d4b01a809c2e1b1383ed7.mp4,943.0,True,64k,,[0.07 0.02],mp4,0.16,,,True,True,,LyRG6FOz2-k-6f75d969a0791a5158869ec872f4286d,webm,LyRG6FOz2-k-6f75d969a0791a5158869ec872f4286d.webm,LyRG6FOz2-k-6f75d969a0791a5158869ec872f4286d.webm +944,/datadrive/videos/d3kOriEJzpE-59f64f423839e0aac237dccfd52d0b09.webm,c835696985594216b62db74ced67cb95.webm,944.0,False,,0.39,,,0.17,,,False,True,,d3kOriEJzpE-59f64f423839e0aac237dccfd52d0b09,webm,d3kOriEJzpE-59f64f423839e0aac237dccfd52d0b09.webm,d3kOriEJzpE-59f64f423839e0aac237dccfd52d0b09.webm +945,/datadrive/videos/XjRrFvUylS0-3a40d681f34c1bed2c15fbca7f1fd6f1.webm,d7c5af6e11734f1faad2c675cc0fa7d2.webm,945.0,False,,0.45,[0.13 0.08],webm,,logos/msnbc.png,6.0,False,True,0.39,XjRrFvUylS0-3a40d681f34c1bed2c15fbca7f1fd6f1,webm,XjRrFvUylS0-3a40d681f34c1bed2c15fbca7f1fd6f1.webm,XjRrFvUylS0-3a40d681f34c1bed2c15fbca7f1fd6f1.webm +946,/datadrive/videos/RJjqlIM7_jo-02d505846cd69073929d60ad4223e101.webm,0dd007ffb1404b6e8ba6b5347c7f46cf.webm,946.0,,,,[0.03 0.04],,-0.12,logos/jazeera.png,,False,True,,RJjqlIM7_jo-02d505846cd69073929d60ad4223e101,webm,RJjqlIM7_jo-02d505846cd69073929d60ad4223e101.webm,RJjqlIM7_jo-02d505846cd69073929d60ad4223e101.webm +947,/datadrive/videos/njZrG5cjfBo-e9eb190d20dfc20c0d7817819d7cbb8c.mp4,934fc1d6addc45898a24efb467896930.ogv,947.0,,,0.25,,ogv,0.13,logos/openair.gif,6.0,False,False,,njZrG5cjfBo-e9eb190d20dfc20c0d7817819d7cbb8c,mp4,njZrG5cjfBo-e9eb190d20dfc20c0d7817819d7cbb8c.mp4,njZrG5cjfBo-e9eb190d20dfc20c0d7817819d7cbb8c.mp4 +948,/datadrive/videos/7vqgV_BeUrY-d2e261b0578c628bc99766832099452f.webm,6e1723e17b0d436c9229423135fdb5b6.webm,948.0,,64k,,[0.01 0.08],,,,0.0,False,True,0.07,7vqgV_BeUrY-d2e261b0578c628bc99766832099452f,webm,7vqgV_BeUrY-d2e261b0578c628bc99766832099452f.webm,7vqgV_BeUrY-d2e261b0578c628bc99766832099452f.webm +949,/datadrive/videos/IgyjoEgMuPA-784bc730ced19fb7d4b54284b6a6d747.mp4,3dcfc1f387c946c2916175504bb2bb09.mp4,949.0,,,0.47,[0.1 0.11],mp4,,,,False,False,-0.01,IgyjoEgMuPA-784bc730ced19fb7d4b54284b6a6d747,mp4,IgyjoEgMuPA-784bc730ced19fb7d4b54284b6a6d747.mp4,IgyjoEgMuPA-784bc730ced19fb7d4b54284b6a6d747.mp4 +950,/datadrive/videos/njIyvszrCXk-4678f443717b6bd678a1c210cca3e9c6.mp4,598f0bea899b4448bae233f1456f1157.mp4,950.0,,,,[0.08 0.03],,,,,False,False,,njIyvszrCXk-4678f443717b6bd678a1c210cca3e9c6,mp4,njIyvszrCXk-4678f443717b6bd678a1c210cca3e9c6.mp4,njIyvszrCXk-4678f443717b6bd678a1c210cca3e9c6.mp4 +951,/datadrive/videos/gCqK3Ew2OMc-f99fbe827409657c188e1d3d9b9dd009.webm,64ffc87034cd410cb350e61a346ee401.mp4,951.0,,16k,0.44,[0.16 0.03],mp4,,logos/ge.gif,0.0,False,True,0.3,gCqK3Ew2OMc-f99fbe827409657c188e1d3d9b9dd009,webm,gCqK3Ew2OMc-f99fbe827409657c188e1d3d9b9dd009.webm,gCqK3Ew2OMc-f99fbe827409657c188e1d3d9b9dd009.webm +952,/datadrive/videos/A8Kp5-So2rE-0031809c2fcbde75e5030d53fca3f527.mp4,d63da785346e4bc7a7555b3149fd3b33.mp4,952.0,True,,,[0.02 0.05],,-0.02,logos/download.png,0.0,False,True,,A8Kp5-So2rE-0031809c2fcbde75e5030d53fca3f527,mp4,A8Kp5-So2rE-0031809c2fcbde75e5030d53fca3f527.mp4,A8Kp5-So2rE-0031809c2fcbde75e5030d53fca3f527.mp4 +953,/datadrive/videos/4wkOayHnsT8-47fd5c5e3ecbed3693a57885aed5f4e4.webm,11529b58acf144d79cad1be343950a28.webm,953.0,,64k,,[0.12 0.16],webm,0.04,,,False,True,0.21,4wkOayHnsT8-47fd5c5e3ecbed3693a57885aed5f4e4,webm,4wkOayHnsT8-47fd5c5e3ecbed3693a57885aed5f4e4.webm,4wkOayHnsT8-47fd5c5e3ecbed3693a57885aed5f4e4.webm +954,/datadrive/videos/IEotp7wU644-b6728b3d86c403bc5ae1d1b0fa3436e9.mp4,a10b1882d8be45a5b6a62df98f2b6814.webm,954.0,,16k,0.35,,webm,,,7.0,False,True,,IEotp7wU644-b6728b3d86c403bc5ae1d1b0fa3436e9,mp4,IEotp7wU644-b6728b3d86c403bc5ae1d1b0fa3436e9.mp4,IEotp7wU644-b6728b3d86c403bc5ae1d1b0fa3436e9.mp4 +955,/datadrive/videos/jtjJkHQ_rqU-51bb973b7910d052d57d3bea7f876af1.webm,c411e27ff292419a80022ed77c1e316a.webm,955.0,,,,[0.15 0.14],webm,0.08,logos/openair.gif,,False,True,,jtjJkHQ_rqU-51bb973b7910d052d57d3bea7f876af1,webm,jtjJkHQ_rqU-51bb973b7910d052d57d3bea7f876af1.webm,jtjJkHQ_rqU-51bb973b7910d052d57d3bea7f876af1.webm +957,/datadrive/videos/wjL71_eSd4Q-59a7499a24e804deb63410f6ee7b37bb.mp4,4eb9ad34f1bd411485c373fb8cacb247.mp4,957.0,False,16k,,[0.07 0.03],,,,,False,False,,wjL71_eSd4Q-59a7499a24e804deb63410f6ee7b37bb,mp4,wjL71_eSd4Q-59a7499a24e804deb63410f6ee7b37bb.mp4,wjL71_eSd4Q-59a7499a24e804deb63410f6ee7b37bb.mp4 +958,/datadrive/videos/UuyHhXrA7Eg-0d5190cbd22447d25250c77c6964d6eb.mp4,26aa3a92a3b1486382ecdc8251aa10da.mp4,958.0,False,,,[0.14 0.18],,0.01,logos/sbt.gif,,True,False,,UuyHhXrA7Eg-0d5190cbd22447d25250c77c6964d6eb,mp4,UuyHhXrA7Eg-0d5190cbd22447d25250c77c6964d6eb.mp4,UuyHhXrA7Eg-0d5190cbd22447d25250c77c6964d6eb.mp4 +959,/datadrive/videos/HjR1IQuzVM0-859c4803650e7e603bfc35a9c35f8334.webm,01b589bec7b844d08d4c52e7d0653cf6.mp4,959.0,False,32k,0.72,[0.03 0.07],mp4,,,0.0,False,True,,HjR1IQuzVM0-859c4803650e7e603bfc35a9c35f8334,webm,HjR1IQuzVM0-859c4803650e7e603bfc35a9c35f8334.webm,HjR1IQuzVM0-859c4803650e7e603bfc35a9c35f8334.webm +960,/datadrive/videos/ZIGi6B6WNaU-df7cb3084fc6a7654e2f3c1560d41efc.mp4,67fee7b008f04b1f8d0ccf58ca06451f.webm,960.0,,,,,webm,-0.02,logos/openair.gif,,False,True,,ZIGi6B6WNaU-df7cb3084fc6a7654e2f3c1560d41efc,mp4,ZIGi6B6WNaU-df7cb3084fc6a7654e2f3c1560d41efc.mp4,ZIGi6B6WNaU-df7cb3084fc6a7654e2f3c1560d41efc.mp4 +961,/datadrive/videos/WJSinUWCzkE-0118223b9ae1967c825b14a81282490b.webm,6ff7b53b809144938548df6f97f93b94.webm,961.0,,,,,webm,-0.18,logos/openair.gif,,False,False,0.27,WJSinUWCzkE-0118223b9ae1967c825b14a81282490b,webm,WJSinUWCzkE-0118223b9ae1967c825b14a81282490b.webm,WJSinUWCzkE-0118223b9ae1967c825b14a81282490b.webm +962,/datadrive/videos/rYXGYt9nKXE-9e0b052a724e704a88ddbde41070af3a.webm,909af21cbd3d4ed5a9fe8be2948da0cf.webm,962.0,,128k,,,,,,,False,False,-0.3,rYXGYt9nKXE-9e0b052a724e704a88ddbde41070af3a,webm,rYXGYt9nKXE-9e0b052a724e704a88ddbde41070af3a.webm,rYXGYt9nKXE-9e0b052a724e704a88ddbde41070af3a.webm +963,/datadrive/videos/sWf0weZMXg0-539135c908e421fe27893f16f6757885.webm,c4483e4b44b94eb4abf4d02b56d34185.webm,963.0,,,0.26,[0.03 0.05],webm,,,8.0,False,False,0.2,sWf0weZMXg0-539135c908e421fe27893f16f6757885,webm,sWf0weZMXg0-539135c908e421fe27893f16f6757885.webm,sWf0weZMXg0-539135c908e421fe27893f16f6757885.webm +964,/datadrive/videos/jUDi-NtnAx4-5877d77f42dcfd3efa4f1c8201130189.webm,13d685b404fc4fe8af495065b7e5b066.webm,964.0,,,,[0.01 0.14],,,,2.0,True,True,,jUDi-NtnAx4-5877d77f42dcfd3efa4f1c8201130189,webm,jUDi-NtnAx4-5877d77f42dcfd3efa4f1c8201130189.webm,jUDi-NtnAx4-5877d77f42dcfd3efa4f1c8201130189.webm +965,/datadrive/videos/aXJucO4PH9k-81d7561f31f1f394a03ad1863d3d26a6.webm,6c5d75ff11bf4032a30212e957ab8aad.webm,965.0,True,128k,0.32,,,,logos/fox.png,,False,True,-0.4,aXJucO4PH9k-81d7561f31f1f394a03ad1863d3d26a6,webm,aXJucO4PH9k-81d7561f31f1f394a03ad1863d3d26a6.webm,aXJucO4PH9k-81d7561f31f1f394a03ad1863d3d26a6.webm +966,/datadrive/videos/LoaGfDO8zFw-c4e4960ee1d789237f1733e497b720a8.webm,94671b2775004331b76718b8ef7bc2ca.mp4,966.0,False,,,[0.03 0.08],mp4,-0.05,logos/openair.gif,,False,True,-0.02,LoaGfDO8zFw-c4e4960ee1d789237f1733e497b720a8,webm,LoaGfDO8zFw-c4e4960ee1d789237f1733e497b720a8.webm,LoaGfDO8zFw-c4e4960ee1d789237f1733e497b720a8.webm +967,/datadrive/videos/9yJDBdZskU8-25e6bf17dbfd875dc5b817d08b2436a6.mp4,7858bc2d401846c388a7dc1a671ef32a.mp4,967.0,False,128k,0.21,,,0.12,,6.0,False,False,,9yJDBdZskU8-25e6bf17dbfd875dc5b817d08b2436a6,mp4,9yJDBdZskU8-25e6bf17dbfd875dc5b817d08b2436a6.mp4,9yJDBdZskU8-25e6bf17dbfd875dc5b817d08b2436a6.mp4 +970,/datadrive/videos/l3HAflwGwj8-35063040003d449041c19a1a3fd71138.webm,14c16dad34a746798800131083445391.ogv,970.0,False,32k,,[0.1 0.12],ogv,,logos/sbt.gif,,False,True,,l3HAflwGwj8-35063040003d449041c19a1a3fd71138,webm,l3HAflwGwj8-35063040003d449041c19a1a3fd71138.webm,l3HAflwGwj8-35063040003d449041c19a1a3fd71138.webm +971,/datadrive/videos/fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905.mp4,8b7ae51ad120408ca579990924e1d007.ogv,971.0,True,,0.31,,ogv,,,4.0,False,False,,fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905,mp4,fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905.mp4,fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905.mp4 +972,/datadrive/videos/4LnjJW_P_oM-6f165c1faab10081ea8cd5e83d2e963e.mp4,9cd37489de554eb2a406f671da9b236e.mp4,972.0,,,0.53,,,0.0,,,False,False,-0.36,4LnjJW_P_oM-6f165c1faab10081ea8cd5e83d2e963e,mp4,4LnjJW_P_oM-6f165c1faab10081ea8cd5e83d2e963e.mp4,4LnjJW_P_oM-6f165c1faab10081ea8cd5e83d2e963e.mp4 +973,/datadrive/videos/gUh_GeEgXpI-a5d68b94975961b05244868e5e325d20.webm,732e78fbdc9c41658a5a227cd9d32dba.webm,973.0,True,,,[0.17 0.14],,,,,False,False,,gUh_GeEgXpI-a5d68b94975961b05244868e5e325d20,webm,gUh_GeEgXpI-a5d68b94975961b05244868e5e325d20.webm,gUh_GeEgXpI-a5d68b94975961b05244868e5e325d20.webm +974,/datadrive/videos/OSffF0ND2Do-86d9de87a5829023cb39e70446783ae3.webm,cdef0d714b044067866656835bca1a29.ogv,974.0,False,,,[0.03 0.19],ogv,-0.08,,8.0,False,False,0.16,OSffF0ND2Do-86d9de87a5829023cb39e70446783ae3,webm,OSffF0ND2Do-86d9de87a5829023cb39e70446783ae3.webm,OSffF0ND2Do-86d9de87a5829023cb39e70446783ae3.webm +975,/datadrive/videos/UQtP7N0UIYg-fdc2220bd7de2988a55019fa41eb9f35.mp4,48b35d56cc374fd0a9cc810d6e1430b6.mp4,975.0,,,0.3,,,,logos/another.gif,,False,True,0.01,UQtP7N0UIYg-fdc2220bd7de2988a55019fa41eb9f35,mp4,UQtP7N0UIYg-fdc2220bd7de2988a55019fa41eb9f35.mp4,UQtP7N0UIYg-fdc2220bd7de2988a55019fa41eb9f35.mp4 +976,/datadrive/videos/WOE3kAeNtZI-28b3c7663b4d9d055e97226546670eea.webm,b1f9bfd233ad475692cb72da07c27ea5.webm,976.0,False,,0.39,,,-0.1,logos/download.png,,False,True,-0.2,WOE3kAeNtZI-28b3c7663b4d9d055e97226546670eea,webm,WOE3kAeNtZI-28b3c7663b4d9d055e97226546670eea.webm,WOE3kAeNtZI-28b3c7663b4d9d055e97226546670eea.webm +977,/datadrive/videos/Z-c8Opypy24-c1a940c3538db2e68a0335360ab745e7.webm,13146ea8523a4b24b111df7727bc9380.webm,977.0,,32k,0.26,,webm,-0.05,logos/ge.gif,5.0,False,True,,Z-c8Opypy24-c1a940c3538db2e68a0335360ab745e7,webm,Z-c8Opypy24-c1a940c3538db2e68a0335360ab745e7.webm,Z-c8Opypy24-c1a940c3538db2e68a0335360ab745e7.webm +978,/datadrive/videos/_lUNbafd4Ao-1caa1fd3768a0c536db4de4703400ecd.webm,717b94f5176b4b08811498fac50dfa1b.webm,978.0,,,,,,,logos/sbt.gif,0.0,False,False,,_lUNbafd4Ao-1caa1fd3768a0c536db4de4703400ecd,webm,_lUNbafd4Ao-1caa1fd3768a0c536db4de4703400ecd.webm,_lUNbafd4Ao-1caa1fd3768a0c536db4de4703400ecd.webm +979,/datadrive/videos/W6ISoyzUCQY-bfec3862c96783e89b43c5b2fb8ddb96.webm,be6627e9c54445ac94a8a0235766751b.mp4,979.0,,,,,mp4,,logos/sbt.gif,0.0,False,False,,W6ISoyzUCQY-bfec3862c96783e89b43c5b2fb8ddb96,webm,W6ISoyzUCQY-bfec3862c96783e89b43c5b2fb8ddb96.webm,W6ISoyzUCQY-bfec3862c96783e89b43c5b2fb8ddb96.webm +980,/datadrive/videos/NrKIH1mvDFI-c1552135e1ffbab8a55299389777a3d2.webm,8426a18e1a184b96a2a26e714b6e9dfd.ogv,980.0,,,0.61,,ogv,0.11,logos/sbt.gif,,False,False,,NrKIH1mvDFI-c1552135e1ffbab8a55299389777a3d2,webm,NrKIH1mvDFI-c1552135e1ffbab8a55299389777a3d2.webm,NrKIH1mvDFI-c1552135e1ffbab8a55299389777a3d2.webm +981,/datadrive/videos/wTY5mlH8zjY-fcf2e2525bea2994e1020d15b9590793.mp4,cbe5fd36a61748cf9d9b4928d6db216a.ogv,981.0,False,,,,ogv,,,6.0,True,True,-0.04,wTY5mlH8zjY-fcf2e2525bea2994e1020d15b9590793,mp4,wTY5mlH8zjY-fcf2e2525bea2994e1020d15b9590793.mp4,wTY5mlH8zjY-fcf2e2525bea2994e1020d15b9590793.mp4 +982,/datadrive/videos/h6UramvA7RA-4b3f028c49ddcc98c1b2a7fda460cdfc.webm,14fe757d9804460eaaa5ad5b78699800.mp4,982.0,,,,,mp4,0.02,logos/download.png,,False,True,-0.25,h6UramvA7RA-4b3f028c49ddcc98c1b2a7fda460cdfc,webm,h6UramvA7RA-4b3f028c49ddcc98c1b2a7fda460cdfc.webm,h6UramvA7RA-4b3f028c49ddcc98c1b2a7fda460cdfc.webm +983,/datadrive/videos/lNf39btbESQ-44941213d84309d49a999daf344bc536.webm,a0be76e391284e0e8d975a056b2f4054.webm,983.0,,,,,webm,,logos/download.png,,False,False,-0.01,lNf39btbESQ-44941213d84309d49a999daf344bc536,webm,lNf39btbESQ-44941213d84309d49a999daf344bc536.webm,lNf39btbESQ-44941213d84309d49a999daf344bc536.webm +984,/datadrive/videos/P--VSarTxP8-8d2ae753ef1725a71e11d8d0c9bf2b65.mp4,d8a0590850704fb7b1a733dbad583841.ogv,984.0,False,16k,0.75,[0.06 0.08],ogv,0.17,,0.0,False,False,-0.14,P--VSarTxP8-8d2ae753ef1725a71e11d8d0c9bf2b65,mp4,P--VSarTxP8-8d2ae753ef1725a71e11d8d0c9bf2b65.mp4,P--VSarTxP8-8d2ae753ef1725a71e11d8d0c9bf2b65.mp4 +986,/datadrive/videos/Jco0RpWEwWU-ba00a83bb831604ea05d5c46313a11f4.webm,2f1a076a1d5f46f1b111c378d7ad4975.webm,986.0,False,64k,,,webm,0.13,logos/download.png,9.0,False,False,,Jco0RpWEwWU-ba00a83bb831604ea05d5c46313a11f4,webm,Jco0RpWEwWU-ba00a83bb831604ea05d5c46313a11f4.webm,Jco0RpWEwWU-ba00a83bb831604ea05d5c46313a11f4.webm +987,/datadrive/videos/OhXUpB4jlfI-9bbd3651548b1744dc09195f3adee1ad.webm,97f5726b2c214904aa43dd13d4285101.mp4,987.0,,16k,0.87,,mp4,,,2.0,False,True,,OhXUpB4jlfI-9bbd3651548b1744dc09195f3adee1ad,webm,OhXUpB4jlfI-9bbd3651548b1744dc09195f3adee1ad.webm,OhXUpB4jlfI-9bbd3651548b1744dc09195f3adee1ad.webm +988,/datadrive/videos/FPeKK6AU6BM-0332ad7ffcf384368c777ae72c9c9e3f.mp4,277eba5c341b42c1a31682ced6ec8260.mp4,988.0,,16k,,,mp4,0.02,,0.0,False,True,,FPeKK6AU6BM-0332ad7ffcf384368c777ae72c9c9e3f,mp4,FPeKK6AU6BM-0332ad7ffcf384368c777ae72c9c9e3f.mp4,FPeKK6AU6BM-0332ad7ffcf384368c777ae72c9c9e3f.mp4 +990,/datadrive/videos/oR_BSWe6B1s-72c2fcfeac55111412cd022cc3748bef.mp4,498e946caa9747819c4436788a418121.ogv,990.0,True,,,[0.07 0.19],ogv,0.05,logos/ge.gif,,False,True,-0.12,oR_BSWe6B1s-72c2fcfeac55111412cd022cc3748bef,mp4,oR_BSWe6B1s-72c2fcfeac55111412cd022cc3748bef.mp4,oR_BSWe6B1s-72c2fcfeac55111412cd022cc3748bef.mp4 +992,/datadrive/videos/rxnHsjzwQHU-807f95a3f469f8fdde37abad06790e10.webm,b870fca1c4a44897a0f07f0e26e2e969.webm,992.0,,,,,,,logos/download.png,,False,True,,rxnHsjzwQHU-807f95a3f469f8fdde37abad06790e10,webm,rxnHsjzwQHU-807f95a3f469f8fdde37abad06790e10.webm,rxnHsjzwQHU-807f95a3f469f8fdde37abad06790e10.webm +993,/datadrive/videos/5CzvMTlOuCE-53c408479a6b038f1a5397ada8235b37.webm,6603686c732e4bc8b6d9f96cc9152cc1.ogv,993.0,,,0.36,[0.17 0.02],ogv,0.04,,6.0,False,False,0.08,5CzvMTlOuCE-53c408479a6b038f1a5397ada8235b37,webm,5CzvMTlOuCE-53c408479a6b038f1a5397ada8235b37.webm,5CzvMTlOuCE-53c408479a6b038f1a5397ada8235b37.webm +994,/datadrive/videos/r5c4tCuZjTA-b908c2c90bc8cbd55f2ffe90220286c2.webm,8efa9627890c4f87bd6cf10b8226cbf3.webm,994.0,,,,,webm,,,,False,False,-0.18,r5c4tCuZjTA-b908c2c90bc8cbd55f2ffe90220286c2,webm,r5c4tCuZjTA-b908c2c90bc8cbd55f2ffe90220286c2.webm,r5c4tCuZjTA-b908c2c90bc8cbd55f2ffe90220286c2.webm +995,/datadrive/videos/qKc5JQCAZcU-74a5cfcda8884d787fb6553bd205baf4.webm,223346fe3f9c42fa9218ecebe5fd71d3.webm,995.0,False,,0.27,,webm,0.03,logos/msnbc.png,,False,False,0.27,qKc5JQCAZcU-74a5cfcda8884d787fb6553bd205baf4,webm,qKc5JQCAZcU-74a5cfcda8884d787fb6553bd205baf4.webm,qKc5JQCAZcU-74a5cfcda8884d787fb6553bd205baf4.webm +996,/datadrive/videos/U5FMiyX0gXc-8d80e2cd3e841f96828a9f883e0cbbef.webm,572db16dbe514a67bf203a80f2b7a252.mp4,996.0,,,,,mp4,0.04,,,False,False,,U5FMiyX0gXc-8d80e2cd3e841f96828a9f883e0cbbef,webm,U5FMiyX0gXc-8d80e2cd3e841f96828a9f883e0cbbef.webm,U5FMiyX0gXc-8d80e2cd3e841f96828a9f883e0cbbef.webm +997,/datadrive/videos/yWuwpSiOcsk-110fec2335332386e79b3511311ac218.webm,3d8ce0e0c07c4c8ba46ecd4d3a0f4939.webm,997.0,,,,,,,,,False,True,-0.29,yWuwpSiOcsk-110fec2335332386e79b3511311ac218,webm,yWuwpSiOcsk-110fec2335332386e79b3511311ac218.webm,yWuwpSiOcsk-110fec2335332386e79b3511311ac218.webm +998,/datadrive/videos/GfHyihsUdso-bb3ea8fabb656fb8cac748dbb23d47ae.webm,130ec7467778414599cc428e46cfb180.webm,998.0,,64k,0.7,,,-0.08,logos/sbt.gif,0.0,False,True,0.03,GfHyihsUdso-bb3ea8fabb656fb8cac748dbb23d47ae,webm,GfHyihsUdso-bb3ea8fabb656fb8cac748dbb23d47ae.webm,GfHyihsUdso-bb3ea8fabb656fb8cac748dbb23d47ae.webm +999,/datadrive/videos/_a8srUndP8Y-48644a14cbb89129dccdcde0f5715de3.mp4,3dc7cc8c708242c191996d0b6dbb2ab3.webm,999.0,False,128k,,,webm,,,7.0,False,False,,_a8srUndP8Y-48644a14cbb89129dccdcde0f5715de3,mp4,_a8srUndP8Y-48644a14cbb89129dccdcde0f5715de3.mp4,_a8srUndP8Y-48644a14cbb89129dccdcde0f5715de3.mp4 +1001,/datadrive/videos/8Rvu-jlsaOU-5b988b26edd0096ea42d3b804621d297.mp4,7ca7bcefa4e24c0a96d9d846faeb1a13.mp4,1001.0,,64k,,[0.13 0.05],,,logos/another.gif,8.0,False,True,,8Rvu-jlsaOU-5b988b26edd0096ea42d3b804621d297,mp4,8Rvu-jlsaOU-5b988b26edd0096ea42d3b804621d297.mp4,8Rvu-jlsaOU-5b988b26edd0096ea42d3b804621d297.mp4 +1004,/datadrive/videos/kq0Zs2c2sZU-1829c1345a7fddebde0a48b5ba3d4a81.webm,4efb1f54613b4dbb88c955cf8634a789.mp4,1004.0,,16k,0.89,[0.07 0.17],mp4,-0.1,logos/new.gif,,True,True,,kq0Zs2c2sZU-1829c1345a7fddebde0a48b5ba3d4a81,webm,kq0Zs2c2sZU-1829c1345a7fddebde0a48b5ba3d4a81.webm,kq0Zs2c2sZU-1829c1345a7fddebde0a48b5ba3d4a81.webm +1005,/datadrive/videos/u9EfUUJwDEc-52049f96d019819e039a4c71317ce56c.webm,b796e529977c460f84c589ad11259c33.webm,1005.0,False,16k,0.6,,,-0.01,logos/download.png,6.0,False,False,0.38,u9EfUUJwDEc-52049f96d019819e039a4c71317ce56c,webm,u9EfUUJwDEc-52049f96d019819e039a4c71317ce56c.webm,u9EfUUJwDEc-52049f96d019819e039a4c71317ce56c.webm +1007,/datadrive/videos/M8bruehznD4-80fdc424555c1756f1b0e30c5bdd94ff.mp4,35b3a5b5871f41ddb3b34d15370c7b62.ogv,1007.0,False,128k,,,ogv,0.08,,,False,False,,M8bruehznD4-80fdc424555c1756f1b0e30c5bdd94ff,mp4,M8bruehznD4-80fdc424555c1756f1b0e30c5bdd94ff.mp4,M8bruehznD4-80fdc424555c1756f1b0e30c5bdd94ff.mp4 +1008,/datadrive/videos/Dy_7KUTKEWE-b7d7eb4ae030eb22f16bbb95a3f9bf12.mp4,c8923457c70043da8fedbc54cd77ac51.ogv,1008.0,False,,0.35,,ogv,,logos/new.gif,7.0,False,False,0.15,Dy_7KUTKEWE-b7d7eb4ae030eb22f16bbb95a3f9bf12,mp4,Dy_7KUTKEWE-b7d7eb4ae030eb22f16bbb95a3f9bf12.mp4,Dy_7KUTKEWE-b7d7eb4ae030eb22f16bbb95a3f9bf12.mp4 +1009,/datadrive/videos/rCZSuzJs4zc-c859578ffb45b422c0d737a005066f9f.mp4,20af426297864f1f835d5fb6e0711a74.mp4,1009.0,,,,,,0.11,,,False,False,,rCZSuzJs4zc-c859578ffb45b422c0d737a005066f9f,mp4,rCZSuzJs4zc-c859578ffb45b422c0d737a005066f9f.mp4,rCZSuzJs4zc-c859578ffb45b422c0d737a005066f9f.mp4 +1010,/datadrive/videos/jd-eOYV5TxA-f502db6d2295f23571d71295960db994.mp4,66f034d46ade4b0699e0f9f0f79df3c6.mp4,1010.0,True,32k,0.92,,,,,,False,False,,jd-eOYV5TxA-f502db6d2295f23571d71295960db994,mp4,jd-eOYV5TxA-f502db6d2295f23571d71295960db994.mp4,jd-eOYV5TxA-f502db6d2295f23571d71295960db994.mp4 +1011,/datadrive/videos/JVvevtwAaxw-c9a28140f88c05386eb383c9aad5b445.mp4,57b4fdc47b3b4cf3931a6934317b14cc.ogv,1011.0,False,128k,,,ogv,,,,False,True,0.2,JVvevtwAaxw-c9a28140f88c05386eb383c9aad5b445,mp4,JVvevtwAaxw-c9a28140f88c05386eb383c9aad5b445.mp4,JVvevtwAaxw-c9a28140f88c05386eb383c9aad5b445.mp4 +1013,/datadrive/videos/Jco0RpWEwWU-ba00a83bb831604ea05d5c46313a11f4.webm,09b9cd8c58014efc9c0f725cb48da9b8.webm,1013.0,,16k,,,,,logos/sbt.gif,,False,False,-0.22,Jco0RpWEwWU-ba00a83bb831604ea05d5c46313a11f4,webm,Jco0RpWEwWU-ba00a83bb831604ea05d5c46313a11f4.webm,Jco0RpWEwWU-ba00a83bb831604ea05d5c46313a11f4.webm +1014,/datadrive/videos/usMAlSXOcFM-e1b6837ca55e115747df6506bf8fefce.webm,14601e3b02c64b2c8fe297c587596d57.ogv,1014.0,False,64k,,[0.05 0.14],ogv,,,,False,False,,usMAlSXOcFM-e1b6837ca55e115747df6506bf8fefce,webm,usMAlSXOcFM-e1b6837ca55e115747df6506bf8fefce.webm,usMAlSXOcFM-e1b6837ca55e115747df6506bf8fefce.webm +1015,/datadrive/videos/F6MyTJUCPZw-7e71ae6b0ed4c1946f550ce5bee01f5d.mp4,2712226703ea4ae0a53cea246340a95e.mp4,1015.0,False,64k,,[0.02 0.12],,,logos/fox.png,5.0,False,False,,F6MyTJUCPZw-7e71ae6b0ed4c1946f550ce5bee01f5d,mp4,F6MyTJUCPZw-7e71ae6b0ed4c1946f550ce5bee01f5d.mp4,F6MyTJUCPZw-7e71ae6b0ed4c1946f550ce5bee01f5d.mp4 +1017,/datadrive/videos/N95pg7IBN_E-7ca94b2b81faf965a184cc31082f5480.mp4,2803bcce67eb4d04b324aa4203710856.mp4,1017.0,False,64k,0.44,[0.09 0.17],,,,8.0,False,False,-0.28,N95pg7IBN_E-7ca94b2b81faf965a184cc31082f5480,mp4,N95pg7IBN_E-7ca94b2b81faf965a184cc31082f5480.mp4,N95pg7IBN_E-7ca94b2b81faf965a184cc31082f5480.mp4 +1018,/datadrive/videos/VB9uAzlQnGI-7a28fa5fed3531f9ad7d6a3cba6aac71.webm,00312a1ce22b451faf2657fa5c4ef692.mp4,1018.0,False,,0.28,,mp4,,,,False,False,-0.01,VB9uAzlQnGI-7a28fa5fed3531f9ad7d6a3cba6aac71,webm,VB9uAzlQnGI-7a28fa5fed3531f9ad7d6a3cba6aac71.webm,VB9uAzlQnGI-7a28fa5fed3531f9ad7d6a3cba6aac71.webm +1019,/datadrive/videos/3w5UH3iEBPs-1e698e236a4a82048c6232ab2828aa14.webm,2741a031a5d1456a926acb1edf7403f8.webm,1019.0,,32k,,[0.16 0.12],,,,,True,True,,3w5UH3iEBPs-1e698e236a4a82048c6232ab2828aa14,webm,3w5UH3iEBPs-1e698e236a4a82048c6232ab2828aa14.webm,3w5UH3iEBPs-1e698e236a4a82048c6232ab2828aa14.webm +1020,/datadrive/videos/qGCz-jTygWQ-6c41dd8833096dfabfea0da4be096f82.mp4,341fba88128e4018bdbc2a0d570249e2.mp4,1020.0,True,64k,,[0.04 0.18],,0.05,,6.0,False,False,-0.2,qGCz-jTygWQ-6c41dd8833096dfabfea0da4be096f82,mp4,qGCz-jTygWQ-6c41dd8833096dfabfea0da4be096f82.mp4,qGCz-jTygWQ-6c41dd8833096dfabfea0da4be096f82.mp4 +1022,/datadrive/videos/pbVxpV-6iXY-37d425cc2cc57414eab5c062a665fc16.webm,40bacf63fdde44699476d315819ccf76.mp4,1022.0,True,64k,0.86,[0.06 0.14],mp4,,,8.0,False,False,0.0,pbVxpV-6iXY-37d425cc2cc57414eab5c062a665fc16,webm,pbVxpV-6iXY-37d425cc2cc57414eab5c062a665fc16.webm,pbVxpV-6iXY-37d425cc2cc57414eab5c062a665fc16.webm +1024,/datadrive/videos/XH7tT1diKhs-430eca70c677e0f46374e8b53f129a7c.webm,0b0da56354ff4f9394f71e2e3d9a81d5.webm,1024.0,,,,,webm,,,0.0,False,False,-0.15,XH7tT1diKhs-430eca70c677e0f46374e8b53f129a7c,webm,XH7tT1diKhs-430eca70c677e0f46374e8b53f129a7c.webm,XH7tT1diKhs-430eca70c677e0f46374e8b53f129a7c.webm +1026,/datadrive/videos/gyXrAtvQPJM-c252202ad16c69f3925c992c0cb38c42.mp4,7d3cd35ca6d14b0c81b7ea58242706f1.mp4,1026.0,True,,0.55,[0.04 0.02],,-0.12,,,False,True,,gyXrAtvQPJM-c252202ad16c69f3925c992c0cb38c42,mp4,gyXrAtvQPJM-c252202ad16c69f3925c992c0cb38c42.mp4,gyXrAtvQPJM-c252202ad16c69f3925c992c0cb38c42.mp4 +1027,/datadrive/videos/lQ0I4xxacsQ-981f18f920b480e4588ea34416e4eb0f.webm,6899f5f0f9d943bfa92a577ea8d8d2ac.webm,1027.0,True,,,[0.11 0.16],webm,0.02,logos/download.png,,False,False,-0.11,lQ0I4xxacsQ-981f18f920b480e4588ea34416e4eb0f,webm,lQ0I4xxacsQ-981f18f920b480e4588ea34416e4eb0f.webm,lQ0I4xxacsQ-981f18f920b480e4588ea34416e4eb0f.webm +1028,/datadrive/videos/v_0zOruaXE4-4ef1ef7754a7e193e9a878c266a63556.webm,9cf02033808b414a96a3e467645a8cd9.ogv,1028.0,False,128k,,,ogv,0.11,logos/another.gif,3.0,False,True,-0.15,v_0zOruaXE4-4ef1ef7754a7e193e9a878c266a63556,webm,v_0zOruaXE4-4ef1ef7754a7e193e9a878c266a63556.webm,v_0zOruaXE4-4ef1ef7754a7e193e9a878c266a63556.webm +1029,/datadrive/videos/uuvtZX0xwRs-4e22925767a5208cfc76b5b9d62dadd1.mp4,590a5252d42a4b0880a612c4a7714e4a.mp4,1029.0,True,,0.61,,mp4,,,1.0,False,True,-0.22,uuvtZX0xwRs-4e22925767a5208cfc76b5b9d62dadd1,mp4,uuvtZX0xwRs-4e22925767a5208cfc76b5b9d62dadd1.mp4,uuvtZX0xwRs-4e22925767a5208cfc76b5b9d62dadd1.mp4 +1030,/datadrive/videos/EVAG44KrgwQ-233ad2acf2507a41d043f2afe39e3b16.webm,18553d84f5f24b68825148f79f184802.webm,1030.0,,128k,0.75,[0.11 0.13],webm,,logos/fox.png,,False,False,0.32,EVAG44KrgwQ-233ad2acf2507a41d043f2afe39e3b16,webm,EVAG44KrgwQ-233ad2acf2507a41d043f2afe39e3b16.webm,EVAG44KrgwQ-233ad2acf2507a41d043f2afe39e3b16.webm +1031,/datadrive/videos/PyBoAuAKHmk-5ee03041f8da9f0d8b684ba68ba8344c.webm,47bbfc093eb74c4fa093399a44f54d09.webm,1031.0,,,0.58,[0.14 0.15],,,,,False,False,,PyBoAuAKHmk-5ee03041f8da9f0d8b684ba68ba8344c,webm,PyBoAuAKHmk-5ee03041f8da9f0d8b684ba68ba8344c.webm,PyBoAuAKHmk-5ee03041f8da9f0d8b684ba68ba8344c.webm +1032,/datadrive/videos/Au-P8Oo32oI-40cd4f5edc6bf019b2e4a01eee2a76a5.mp4,fe59f155170848e98293b1fc0c0e44a6.ogv,1032.0,,,,[0.11 0.02],ogv,-0.08,logos/jazeera.png,5.0,False,False,-0.35,Au-P8Oo32oI-40cd4f5edc6bf019b2e4a01eee2a76a5,mp4,Au-P8Oo32oI-40cd4f5edc6bf019b2e4a01eee2a76a5.mp4,Au-P8Oo32oI-40cd4f5edc6bf019b2e4a01eee2a76a5.mp4 +1033,/datadrive/videos/XF-MEzftZ0s-83c2b1d7d679a39c7a3d4bc46c63344c.mp4,3d5d4e40fec44b56af47eeb27c4caaf4.webm,1033.0,,,,[0.12 0.09],webm,0.13,,4.0,False,False,-0.23,XF-MEzftZ0s-83c2b1d7d679a39c7a3d4bc46c63344c,mp4,XF-MEzftZ0s-83c2b1d7d679a39c7a3d4bc46c63344c.mp4,XF-MEzftZ0s-83c2b1d7d679a39c7a3d4bc46c63344c.mp4 +1034,/datadrive/videos/h_oWKSYNAZQ-488c383963c4655afaeebf7a617e2659.webm,4a93bb1828fb4e838bbfcda0237d5b7f.webm,1034.0,False,128k,,[0.06 0.04],,,logos/new.gif,,False,True,-0.35,h_oWKSYNAZQ-488c383963c4655afaeebf7a617e2659,webm,h_oWKSYNAZQ-488c383963c4655afaeebf7a617e2659.webm,h_oWKSYNAZQ-488c383963c4655afaeebf7a617e2659.webm +1035,/datadrive/videos/3ApzQzYK3us-59308e3eb791f1cddfc6567118f8d054.webm,b3a4fa7a760e4b55bcea8c11370c6e5d.ogv,1035.0,,,0.4,,ogv,0.04,,,False,True,,3ApzQzYK3us-59308e3eb791f1cddfc6567118f8d054,webm,3ApzQzYK3us-59308e3eb791f1cddfc6567118f8d054.webm,3ApzQzYK3us-59308e3eb791f1cddfc6567118f8d054.webm +1038,/datadrive/videos/7SHwYrvuLL0-bd232100a22e4e4f12ce43fe20880b5c.mp4,504048994e9b46e39a3081cba22ea9dc.webm,1038.0,,128k,0.59,[0.1 0.1],webm,,,5.0,False,False,,7SHwYrvuLL0-bd232100a22e4e4f12ce43fe20880b5c,mp4,7SHwYrvuLL0-bd232100a22e4e4f12ce43fe20880b5c.mp4,7SHwYrvuLL0-bd232100a22e4e4f12ce43fe20880b5c.mp4 +1041,/datadrive/videos/sG2sXosnMp8-5456a34a1995c2bf4b648baf89500582.webm,9283d021531b4a539dce968a8ffe1d9d.mp4,1041.0,True,32k,0.22,,mp4,-0.08,logos/ge.gif,7.0,False,True,,sG2sXosnMp8-5456a34a1995c2bf4b648baf89500582,webm,sG2sXosnMp8-5456a34a1995c2bf4b648baf89500582.webm,sG2sXosnMp8-5456a34a1995c2bf4b648baf89500582.webm +1042,/datadrive/videos/_vrtINi3iec-95be9f19552b0833301110b85dd3d7fe.webm,c3e17b6895bf499784a8a7e303a8a0ee.webm,1042.0,True,16k,,,,-0.12,,9.0,False,True,-0.21,_vrtINi3iec-95be9f19552b0833301110b85dd3d7fe,webm,_vrtINi3iec-95be9f19552b0833301110b85dd3d7fe.webm,_vrtINi3iec-95be9f19552b0833301110b85dd3d7fe.webm +1043,/datadrive/videos/EJR-g-4eGEc-023ec07ea29583059af0bd5964976df6.webm,515e4f29687344c4b2b406848ab51f66.webm,1043.0,True,32k,0.52,[0.12 0.19],,-0.07,logos/new.gif,,False,True,-0.08,EJR-g-4eGEc-023ec07ea29583059af0bd5964976df6,webm,EJR-g-4eGEc-023ec07ea29583059af0bd5964976df6.webm,EJR-g-4eGEc-023ec07ea29583059af0bd5964976df6.webm +1044,/datadrive/videos/OAKk_dT49z8-8203d19fe826bdd61656f7a4d27e721b.webm,02a40cb6ac0d490e943a1879aa81feb6.webm,1044.0,True,,,,,-0.09,logos/new.gif,,False,False,,OAKk_dT49z8-8203d19fe826bdd61656f7a4d27e721b,webm,OAKk_dT49z8-8203d19fe826bdd61656f7a4d27e721b.webm,OAKk_dT49z8-8203d19fe826bdd61656f7a4d27e721b.webm +1045,/datadrive/videos/1PgMbsvyIxY-6cf64a7f3efd734a6aa52004b06bd7c8.mp4,5205af57498541138578c8eb32206abd.mp4,1045.0,,16k,,,,-0.12,logos/fox.png,4.0,False,True,0.38,1PgMbsvyIxY-6cf64a7f3efd734a6aa52004b06bd7c8,mp4,1PgMbsvyIxY-6cf64a7f3efd734a6aa52004b06bd7c8.mp4,1PgMbsvyIxY-6cf64a7f3efd734a6aa52004b06bd7c8.mp4 +1046,/datadrive/videos/p6w-d1QBPSs-d0755782a73feb9f8c18163f8f58c28b.mp4,916cc4d7494647f3ba816f88602216ab.mp4,1046.0,,,,,,,logos/msnbc.png,3.0,False,False,,p6w-d1QBPSs-d0755782a73feb9f8c18163f8f58c28b,mp4,p6w-d1QBPSs-d0755782a73feb9f8c18163f8f58c28b.mp4,p6w-d1QBPSs-d0755782a73feb9f8c18163f8f58c28b.mp4 +1047,/datadrive/videos/uSVCUAlNuX4-64a095ff903daed6c217ec68c7277319.webm,43d69e147a4340f18cbba0eb16156d96.webm,1047.0,,,,,webm,-0.04,,8.0,False,True,,uSVCUAlNuX4-64a095ff903daed6c217ec68c7277319,webm,uSVCUAlNuX4-64a095ff903daed6c217ec68c7277319.webm,uSVCUAlNuX4-64a095ff903daed6c217ec68c7277319.webm +1048,/datadrive/videos/TNN-5IlSAK8-1cfa9bf3f11dfc015be95802f53293be.webm,be2981d767ba4f1d88f36ad187fce56d.webm,1048.0,,128k,,[0.01 0.09],,0.02,,6.0,False,False,,TNN-5IlSAK8-1cfa9bf3f11dfc015be95802f53293be,webm,TNN-5IlSAK8-1cfa9bf3f11dfc015be95802f53293be.webm,TNN-5IlSAK8-1cfa9bf3f11dfc015be95802f53293be.webm +1049,/datadrive/videos/jHfARC6ofvE-48627d606235ce97b6eccb8f18648a21.mp4,c1847af4cf7d4f32807e8ee3a14069d1.mp4,1049.0,True,,0.94,,,,logos/another.gif,7.0,False,False,,jHfARC6ofvE-48627d606235ce97b6eccb8f18648a21,mp4,jHfARC6ofvE-48627d606235ce97b6eccb8f18648a21.mp4,jHfARC6ofvE-48627d606235ce97b6eccb8f18648a21.mp4 +1050,/datadrive/videos/E6fNnzZGYP4-80a4652b4359b0568831212946bda5db.webm,b05e5362f22246cbb160b7e485fb57e8.mp4,1050.0,False,,,,mp4,0.15,,5.25,False,True,,E6fNnzZGYP4-80a4652b4359b0568831212946bda5db,webm,E6fNnzZGYP4-80a4652b4359b0568831212946bda5db.webm,E6fNnzZGYP4-80a4652b4359b0568831212946bda5db.webm +1051,/datadrive/videos/sWf0weZMXg0-539135c908e421fe27893f16f6757885.webm,502cc81e33054c55b9f63e62e1e12a87.webm,1051.0,,32k,0.47,,,-0.08,logos/another.gif,8.0,True,False,-0.33,sWf0weZMXg0-539135c908e421fe27893f16f6757885,webm,sWf0weZMXg0-539135c908e421fe27893f16f6757885.webm,sWf0weZMXg0-539135c908e421fe27893f16f6757885.webm +1052,/datadrive/videos/r5c4tCuZjTA-b908c2c90bc8cbd55f2ffe90220286c2.webm,14541467303149b4a510ca14c799b624.webm,1052.0,False,32k,0.21,,,-0.06,logos/fox.png,,False,False,-0.28,r5c4tCuZjTA-b908c2c90bc8cbd55f2ffe90220286c2,webm,r5c4tCuZjTA-b908c2c90bc8cbd55f2ffe90220286c2.webm,r5c4tCuZjTA-b908c2c90bc8cbd55f2ffe90220286c2.webm +1055,/datadrive/videos/wUbyGUny9xg-d6cab02b6b4dc2041b92e07f617c5097.mp4,85ca8c89f0d44e7f9d27577b9b470d2e.webm,1055.0,True,16k,,[0.06 0.05],webm,-0.13,,,False,True,,wUbyGUny9xg-d6cab02b6b4dc2041b92e07f617c5097,mp4,wUbyGUny9xg-d6cab02b6b4dc2041b92e07f617c5097.mp4,wUbyGUny9xg-d6cab02b6b4dc2041b92e07f617c5097.mp4 +1056,/datadrive/videos/H67d9dw0n-w-c52b43a554c7177c036309f9fa023f75.webm,54a6131f26e04352874ccc3cfc782bf3.webm,1056.0,False,,0.3,[0.09 0.01],,0.11,logos/msnbc.png,,False,True,,H67d9dw0n-w-c52b43a554c7177c036309f9fa023f75,webm,H67d9dw0n-w-c52b43a554c7177c036309f9fa023f75.webm,H67d9dw0n-w-c52b43a554c7177c036309f9fa023f75.webm +1057,/datadrive/videos/e5pPobzSlKA-3c02b60c1fbdf36a296ea50a7a3d44e4.webm,cb5d72a6f6ef4020a80ff885a6b17424.mp4,1057.0,False,64k,0.86,,mp4,,logos/jazeera.png,,False,False,0.02,e5pPobzSlKA-3c02b60c1fbdf36a296ea50a7a3d44e4,webm,e5pPobzSlKA-3c02b60c1fbdf36a296ea50a7a3d44e4.webm,e5pPobzSlKA-3c02b60c1fbdf36a296ea50a7a3d44e4.webm +1058,/datadrive/videos/iGLSBZZCSF0-dbeb85c995a13a6e4da653e5e1f848c7.webm,782afef3c7af4fcaafd848ca7079a900.mp4,1058.0,,64k,0.78,[0.16 0.05],mp4,,logos/fox.png,,False,True,,iGLSBZZCSF0-dbeb85c995a13a6e4da653e5e1f848c7,webm,iGLSBZZCSF0-dbeb85c995a13a6e4da653e5e1f848c7.webm,iGLSBZZCSF0-dbeb85c995a13a6e4da653e5e1f848c7.webm +1059,/datadrive/videos/vFYfxDDhk7Y-1a076754a106b509a3481f40b794307e.webm,36f36c2b5092402d927e747e8ba993bb.webm,1059.0,,16k,0.34,[0.09 0.14],,,logos/ge.gif,4.0,False,False,0.12,vFYfxDDhk7Y-1a076754a106b509a3481f40b794307e,webm,vFYfxDDhk7Y-1a076754a106b509a3481f40b794307e.webm,vFYfxDDhk7Y-1a076754a106b509a3481f40b794307e.webm +1060,/datadrive/videos/KKx-ubxzWfY-37a141194fe2c2a3eba7726217833176.webm,72666f6089c04519b4f30167555e233d.webm,1060.0,,,0.71,[0.15 0.12],,,,1.0,False,True,0.14,KKx-ubxzWfY-37a141194fe2c2a3eba7726217833176,webm,KKx-ubxzWfY-37a141194fe2c2a3eba7726217833176.webm,KKx-ubxzWfY-37a141194fe2c2a3eba7726217833176.webm +1061,/datadrive/videos/TfdDQAB44vE-25343cbd9ba1fe7ddfee84beb84fa8f7.mp4,81f831bc96474e50bc07cafe613e4ca8.ogv,1061.0,False,64k,,,ogv,0.08,logos/download.png,6.825,False,False,,TfdDQAB44vE-25343cbd9ba1fe7ddfee84beb84fa8f7,mp4,TfdDQAB44vE-25343cbd9ba1fe7ddfee84beb84fa8f7.mp4,TfdDQAB44vE-25343cbd9ba1fe7ddfee84beb84fa8f7.mp4 +1062,/datadrive/videos/bp5hrH2jYD4-00a1e210b8039384a2acfd194cbe561e.webm,2c0873fcd76c4426a8efb71e282e1424.webm,1062.0,False,128k,,,,,,5.0,False,False,-0.3,bp5hrH2jYD4-00a1e210b8039384a2acfd194cbe561e,webm,bp5hrH2jYD4-00a1e210b8039384a2acfd194cbe561e.webm,bp5hrH2jYD4-00a1e210b8039384a2acfd194cbe561e.webm +1063,/datadrive/videos/XYwhuLyR_r4-fa111b3d778b9d8466652175f2b522b6.webm,3c21b3ca42d24b2d9c5f5d5e1b059888.webm,1063.0,True,,,[0.06 0.19],,0.16,,1.0,False,True,0.17,XYwhuLyR_r4-fa111b3d778b9d8466652175f2b522b6,webm,XYwhuLyR_r4-fa111b3d778b9d8466652175f2b522b6.webm,XYwhuLyR_r4-fa111b3d778b9d8466652175f2b522b6.webm +1064,/datadrive/videos/4OoRvCjO_fU-fda344f4c72f913a22889973392f6abc.webm,03ee1350f7cc4da0a8e91f938dcd4f5d.webm,1064.0,False,128k,,,,0.08,,9.0,False,False,,4OoRvCjO_fU-fda344f4c72f913a22889973392f6abc,webm,4OoRvCjO_fU-fda344f4c72f913a22889973392f6abc.webm,4OoRvCjO_fU-fda344f4c72f913a22889973392f6abc.webm +1065,/datadrive/videos/7hJTQNvFZq4-d825d5c07c00371f4d89d4df82aed1e5.mp4,1b9c05a0490d4385b5683c76452225b0.mp4,1065.0,,64k,0.44,[0.14 0.02],,,logos/msnbc.png,,False,True,-0.4,7hJTQNvFZq4-d825d5c07c00371f4d89d4df82aed1e5,mp4,7hJTQNvFZq4-d825d5c07c00371f4d89d4df82aed1e5.mp4,7hJTQNvFZq4-d825d5c07c00371f4d89d4df82aed1e5.mp4 +1066,/datadrive/videos/QQbz-GJD6yA-a58c5e331bcd150bb1ccabe11e48e746.webm,863cd7497141487db4a3c3a1777e49ff.ogv,1066.0,False,,0.47,,ogv,,,3.0,False,True,,QQbz-GJD6yA-a58c5e331bcd150bb1ccabe11e48e746,webm,QQbz-GJD6yA-a58c5e331bcd150bb1ccabe11e48e746.webm,QQbz-GJD6yA-a58c5e331bcd150bb1ccabe11e48e746.webm +1067,/datadrive/videos/pmooM-xMCvM-d42877881a6eb33524b3279fa61bd5b9.webm,3f9d4a8f827f4d88a39217964bf750f4.ogv,1067.0,,,0.4,[0.05 0.01],ogv,,logos/openair.gif,8.0,False,False,0.21,pmooM-xMCvM-d42877881a6eb33524b3279fa61bd5b9,webm,pmooM-xMCvM-d42877881a6eb33524b3279fa61bd5b9.webm,pmooM-xMCvM-d42877881a6eb33524b3279fa61bd5b9.webm +1068,/datadrive/videos/Rz3g9MRIIt4-1db09c87e192c3638b978a65b4b0efd5.webm,c795ccfc12e341589150ecfa142c31c5.webm,1068.0,True,,,[0.17 0.05],,0.01,,,False,True,0.33,Rz3g9MRIIt4-1db09c87e192c3638b978a65b4b0efd5,webm,Rz3g9MRIIt4-1db09c87e192c3638b978a65b4b0efd5.webm,Rz3g9MRIIt4-1db09c87e192c3638b978a65b4b0efd5.webm +1069,/datadrive/videos/RMHoPc26o9g-bb81d5bbf65e1debf7589eb793c01d18.mp4,9ea590d7a9784e95b541751bd252f7ac.mp4,1069.0,,,0.97,[0.15 0.03],,0.1,,,False,True,-0.17,RMHoPc26o9g-bb81d5bbf65e1debf7589eb793c01d18,mp4,RMHoPc26o9g-bb81d5bbf65e1debf7589eb793c01d18.mp4,RMHoPc26o9g-bb81d5bbf65e1debf7589eb793c01d18.mp4 +1071,/datadrive/videos/PyBoAuAKHmk-5ee03041f8da9f0d8b684ba68ba8344c.webm,c584c2c771824652be510daa3bf08754.ogv,1071.0,,64k,,,ogv,,,,False,True,,PyBoAuAKHmk-5ee03041f8da9f0d8b684ba68ba8344c,webm,PyBoAuAKHmk-5ee03041f8da9f0d8b684ba68ba8344c.webm,PyBoAuAKHmk-5ee03041f8da9f0d8b684ba68ba8344c.webm +1072,/datadrive/videos/YWok4bvLv9E-3e69bcaee777f433ddae85a5546b52c2.webm,c06c10c35cc44311bcac7f5c1de9796c.webm,1072.0,,,,,,,,5.03,True,False,-0.16,YWok4bvLv9E-3e69bcaee777f433ddae85a5546b52c2,webm,YWok4bvLv9E-3e69bcaee777f433ddae85a5546b52c2.webm,YWok4bvLv9E-3e69bcaee777f433ddae85a5546b52c2.webm +1073,/datadrive/videos/R-0drfUiAwQ-f7cea25e968081438d25739eebec36c1.mp4,71ab56eeea3941a091d64c0657c343e8.webm,1073.0,False,,,[0.1 0.01],webm,,logos/msnbc.png,1.0,False,True,0.02,R-0drfUiAwQ-f7cea25e968081438d25739eebec36c1,mp4,R-0drfUiAwQ-f7cea25e968081438d25739eebec36c1.mp4,R-0drfUiAwQ-f7cea25e968081438d25739eebec36c1.mp4 +1074,/datadrive/videos/OezdtG_Ps0U-8967cd5ea255be16fccd4508e5d4decc.webm,bc05ae7a67da47b382ddf492eb8c0dad.ogv,1074.0,,128k,,,ogv,,,,False,False,,OezdtG_Ps0U-8967cd5ea255be16fccd4508e5d4decc,webm,OezdtG_Ps0U-8967cd5ea255be16fccd4508e5d4decc.webm,OezdtG_Ps0U-8967cd5ea255be16fccd4508e5d4decc.webm +1075,/datadrive/videos/rdWSicvNrWA-80a8aab0d23b7f956f6e6a0736756f72.webm,2281fa83559d4de093745c62d6c6182a.webm,1075.0,False,,0.74,,,,logos/msnbc.png,,False,False,0.18,rdWSicvNrWA-80a8aab0d23b7f956f6e6a0736756f72,webm,rdWSicvNrWA-80a8aab0d23b7f956f6e6a0736756f72.webm,rdWSicvNrWA-80a8aab0d23b7f956f6e6a0736756f72.webm +1076,/datadrive/videos/5bi3RyRDjhQ-d5ccfcd3a73dd5ecf46e0f1b3232f576.mp4,54e81266ca1545dcaa52716f8cf3e5f3.mp4,1076.0,False,,0.62,,,0.18,logos/new.gif,,False,True,,5bi3RyRDjhQ-d5ccfcd3a73dd5ecf46e0f1b3232f576,mp4,5bi3RyRDjhQ-d5ccfcd3a73dd5ecf46e0f1b3232f576.mp4,5bi3RyRDjhQ-d5ccfcd3a73dd5ecf46e0f1b3232f576.mp4 +1077,/datadrive/videos/j86NTotKf4s-45bf899a432b5a7207deb379655871ef.webm,d3655c3e558740efacab32e8fb9dc8dc.ogv,1077.0,,,0.65,,ogv,0.13,,,False,False,,j86NTotKf4s-45bf899a432b5a7207deb379655871ef,webm,j86NTotKf4s-45bf899a432b5a7207deb379655871ef.webm,j86NTotKf4s-45bf899a432b5a7207deb379655871ef.webm +1078,/datadrive/videos/bpfli0ZF7do-606d605202d4ad7b0dadea8cfa790da3.mp4,d582911db13b4ee5a916b81907b6699d.mp4,1078.0,True,,,[0.09 0.02],,-0.2,,,False,True,,bpfli0ZF7do-606d605202d4ad7b0dadea8cfa790da3,mp4,bpfli0ZF7do-606d605202d4ad7b0dadea8cfa790da3.mp4,bpfli0ZF7do-606d605202d4ad7b0dadea8cfa790da3.mp4 +1079,/datadrive/videos/gUh_GeEgXpI-a5d68b94975961b05244868e5e325d20.webm,37e68d4caae845fe94a4f7bf9b65d71a.webm,1079.0,False,,0.97,,,,logos/msnbc.png,,False,True,-0.05,gUh_GeEgXpI-a5d68b94975961b05244868e5e325d20,webm,gUh_GeEgXpI-a5d68b94975961b05244868e5e325d20.webm,gUh_GeEgXpI-a5d68b94975961b05244868e5e325d20.webm +1081,/datadrive/videos/BWJN-z3uDtQ-260788808015a125d7308cb8f38651c5.mp4,0b533b93761342829aa132e663efc550.webm,1081.0,,,,,webm,-0.03,,1.0,True,True,0.15,BWJN-z3uDtQ-260788808015a125d7308cb8f38651c5,mp4,BWJN-z3uDtQ-260788808015a125d7308cb8f38651c5.mp4,BWJN-z3uDtQ-260788808015a125d7308cb8f38651c5.mp4 +1082,/datadrive/videos/4IGWwNRaIUQ-6b2161b1ce5ab2749cb9c3e5c097d249.webm,0ee61617fea54939b5fd08a6ba86c01d.webm,1082.0,False,,,[0.07 0.08],webm,,,,False,True,-0.14,4IGWwNRaIUQ-6b2161b1ce5ab2749cb9c3e5c097d249,webm,4IGWwNRaIUQ-6b2161b1ce5ab2749cb9c3e5c097d249.webm,4IGWwNRaIUQ-6b2161b1ce5ab2749cb9c3e5c097d249.webm +1083,/datadrive/videos/cEri6I_TgaY-b422fefdd7a126991f1228167f3488a6.mp4,38a5ed49c4954c83baa6e6a82fa6ae7f.webm,1083.0,False,64k,0.6,,webm,,logos/ge.gif,,False,True,,cEri6I_TgaY-b422fefdd7a126991f1228167f3488a6,mp4,cEri6I_TgaY-b422fefdd7a126991f1228167f3488a6.mp4,cEri6I_TgaY-b422fefdd7a126991f1228167f3488a6.mp4 +1085,/datadrive/videos/pWXYplqW-Xw-48460c3c0ca7d02fc40a678de883d4e1.webm,57eec553c2604ce196c0b32e5eca6318.webm,1085.0,False,128k,0.63,,webm,,logos/ge.gif,,True,True,0.16,pWXYplqW-Xw-48460c3c0ca7d02fc40a678de883d4e1,webm,pWXYplqW-Xw-48460c3c0ca7d02fc40a678de883d4e1.webm,pWXYplqW-Xw-48460c3c0ca7d02fc40a678de883d4e1.webm +1086,/datadrive/videos/rCnPIbo7YtY-220f19319760740d986743e6d354646e.webm,64dd1aa1a3554deabb4ac8ae061a1c84.mp4,1086.0,False,,,,mp4,0.04,logos/sbt.gif,,False,True,0.38,rCnPIbo7YtY-220f19319760740d986743e6d354646e,webm,rCnPIbo7YtY-220f19319760740d986743e6d354646e.webm,rCnPIbo7YtY-220f19319760740d986743e6d354646e.webm +1087,/datadrive/videos/XjRrFvUylS0-3a40d681f34c1bed2c15fbca7f1fd6f1.webm,23c7f4f2d4fd4e41be00d4d21a0a4d38.webm,1087.0,,16k,,[0.08 0.17],,,logos/download.png,,False,False,-0.36,XjRrFvUylS0-3a40d681f34c1bed2c15fbca7f1fd6f1,webm,XjRrFvUylS0-3a40d681f34c1bed2c15fbca7f1fd6f1.webm,XjRrFvUylS0-3a40d681f34c1bed2c15fbca7f1fd6f1.webm +1088,/datadrive/videos/rYXGYt9nKXE-9e0b052a724e704a88ddbde41070af3a.webm,64a44a7afb684d0db418390552d357f5.webm,1088.0,False,128k,0.54,[0.11 0.14],,0.14,logos/new.gif,,False,False,-0.15,rYXGYt9nKXE-9e0b052a724e704a88ddbde41070af3a,webm,rYXGYt9nKXE-9e0b052a724e704a88ddbde41070af3a.webm,rYXGYt9nKXE-9e0b052a724e704a88ddbde41070af3a.webm +1089,/datadrive/videos/HPeZtufLKac-ff35b4e9880807d6ce5e429eb18eb5d4.webm,fedcaa50e57f44389958da9a6b753c16.webm,1089.0,False,128k,,,webm,,logos/new.gif,6.0,False,True,-0.05,HPeZtufLKac-ff35b4e9880807d6ce5e429eb18eb5d4,webm,HPeZtufLKac-ff35b4e9880807d6ce5e429eb18eb5d4.webm,HPeZtufLKac-ff35b4e9880807d6ce5e429eb18eb5d4.webm +1090,/datadrive/videos/XHmMM-EUsNA-f1227951ad5f8e2b4f57c1f2ad7f9045.mp4,59ae1289a092443098ede57d09bbce9f.webm,1090.0,,64k,0.96,[0.06 0.15],webm,-0.06,logos/fox.png,,False,False,-0.09,XHmMM-EUsNA-f1227951ad5f8e2b4f57c1f2ad7f9045,mp4,XHmMM-EUsNA-f1227951ad5f8e2b4f57c1f2ad7f9045.mp4,XHmMM-EUsNA-f1227951ad5f8e2b4f57c1f2ad7f9045.mp4 +1092,/datadrive/videos/k47yWjP32OI-af3475ecfd2522223171d106f3524529.webm,7dc9c4999249469b9c786e22cd0ed315.webm,1092.0,False,,0.88,,webm,,,,False,True,0.32,k47yWjP32OI-af3475ecfd2522223171d106f3524529,webm,k47yWjP32OI-af3475ecfd2522223171d106f3524529.webm,k47yWjP32OI-af3475ecfd2522223171d106f3524529.webm +1093,/datadrive/videos/6eUbRztBpWs-0ed8817d426927aa22dca5783ed8af7b.webm,c5bcecc23edb4ca6af691ab014b73370.webm,1093.0,False,,0.75,[0.19 0.16],webm,0.16,logos/sbt.gif,,False,True,-0.37,6eUbRztBpWs-0ed8817d426927aa22dca5783ed8af7b,webm,6eUbRztBpWs-0ed8817d426927aa22dca5783ed8af7b.webm,6eUbRztBpWs-0ed8817d426927aa22dca5783ed8af7b.webm +1094,/datadrive/videos/lwWPBmjzztw-eff2ea1f61e98c1ad66221d014b8aa4d.webm,5f3c85c600da49f08c9ad8ed9c3d2f2e.mp4,1094.0,True,128k,,,mp4,0.17,,,False,False,,lwWPBmjzztw-eff2ea1f61e98c1ad66221d014b8aa4d,webm,lwWPBmjzztw-eff2ea1f61e98c1ad66221d014b8aa4d.webm,lwWPBmjzztw-eff2ea1f61e98c1ad66221d014b8aa4d.webm +1095,/datadrive/videos/bdJssVqgX_Q-f2c80ac1c83da1bc0a2fa9bd9ba14fad.webm,500a189f36534ce0acad83bf6160c96a.webm,1095.0,False,,,,webm,-0.19,,,False,True,,bdJssVqgX_Q-f2c80ac1c83da1bc0a2fa9bd9ba14fad,webm,bdJssVqgX_Q-f2c80ac1c83da1bc0a2fa9bd9ba14fad.webm,bdJssVqgX_Q-f2c80ac1c83da1bc0a2fa9bd9ba14fad.webm +1096,/datadrive/videos/yb2phL2R8JE-e53a93f436a8f51dfed029d10d48fba5.webm,80f8ff5f9f8e4e5ab544b7c1fe6cfc2f.webm,1096.0,False,64k,,,webm,,,,False,False,,yb2phL2R8JE-e53a93f436a8f51dfed029d10d48fba5,webm,yb2phL2R8JE-e53a93f436a8f51dfed029d10d48fba5.webm,yb2phL2R8JE-e53a93f436a8f51dfed029d10d48fba5.webm +1098,/datadrive/videos/eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11.mp4,903c9955ebca4f8c967420e09c9a56a7.mp4,1098.0,False,16k,,[0.18 0.09],,,logos/fox.png,,False,True,,eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11,mp4,eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11.mp4,eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11.mp4 +1099,/datadrive/videos/gpwsWnFBmD8-4d365b2eb98613ed10353b0f3378e8d1.webm,503fb01e5f224e4195df195d81220d5a.webm,1099.0,,32k,,[0.12 0.17],,-0.02,logos/new.gif,2.0,False,False,,gpwsWnFBmD8-4d365b2eb98613ed10353b0f3378e8d1,webm,gpwsWnFBmD8-4d365b2eb98613ed10353b0f3378e8d1.webm,gpwsWnFBmD8-4d365b2eb98613ed10353b0f3378e8d1.webm +1100,/datadrive/videos/3s1nORCGckM-829c8c45024b8047922603c7d26b5de3.mp4,8451819689a84b06adf0fa4c81ac7797.mp4,1100.0,,,,,,-0.15,logos/ge.gif,3.0,False,True,,3s1nORCGckM-829c8c45024b8047922603c7d26b5de3,mp4,3s1nORCGckM-829c8c45024b8047922603c7d26b5de3.mp4,3s1nORCGckM-829c8c45024b8047922603c7d26b5de3.mp4 +1101,/datadrive/videos/Upk3lbMyx0M-45ef2fc091562d7d273530c03e4304c6.mp4,320e607d31f5402c8123f1b5fe654556.mp4,1101.0,,64k,0.85,[0.07 0.13],mp4,,logos/new.gif,,False,False,,Upk3lbMyx0M-45ef2fc091562d7d273530c03e4304c6,mp4,Upk3lbMyx0M-45ef2fc091562d7d273530c03e4304c6.mp4,Upk3lbMyx0M-45ef2fc091562d7d273530c03e4304c6.mp4 +1102,/datadrive/videos/A_sT5l8OJ7o-67676666d47a43deaa3c543ab02e92c8.webm,5fc0d0715c704797ab3180fd8e3a7a93.webm,1102.0,,,0.32,[0.06 0.05],webm,,logos/jazeera.png,,False,True,,A_sT5l8OJ7o-67676666d47a43deaa3c543ab02e92c8,webm,A_sT5l8OJ7o-67676666d47a43deaa3c543ab02e92c8.webm,A_sT5l8OJ7o-67676666d47a43deaa3c543ab02e92c8.webm +1104,/datadrive/videos/6LHiZ1LY90s-83e16756d3dc756e05752117c6a066f7.mp4,78652ab8c7084395bc351211758b3d46.mp4,1104.0,,,0.96,[0.02 0.15],,,,,False,False,0.19,6LHiZ1LY90s-83e16756d3dc756e05752117c6a066f7,mp4,6LHiZ1LY90s-83e16756d3dc756e05752117c6a066f7.mp4,6LHiZ1LY90s-83e16756d3dc756e05752117c6a066f7.mp4 +1105,/datadrive/videos/L7G36hyDk2E-dadef06410431a513442df278acbf918.mp4,782187cd70a94994970869977da9cff6.ogv,1105.0,True,16k,,,ogv,0.12,,4.0,False,False,-0.18,L7G36hyDk2E-dadef06410431a513442df278acbf918,mp4,L7G36hyDk2E-dadef06410431a513442df278acbf918.mp4,L7G36hyDk2E-dadef06410431a513442df278acbf918.mp4 +1106,/datadrive/videos/vHkJVH3goTI-87a6e2c8b6afdad64ca964290ba7a4c8.mp4,5120e87ee266448bb3fcf16f6fe33013.webm,1106.0,True,64k,0.78,,webm,,logos/openair.gif,,True,True,,vHkJVH3goTI-87a6e2c8b6afdad64ca964290ba7a4c8,mp4,vHkJVH3goTI-87a6e2c8b6afdad64ca964290ba7a4c8.mp4,vHkJVH3goTI-87a6e2c8b6afdad64ca964290ba7a4c8.mp4 +1107,/datadrive/videos/cjlyVIfZJh4-1b8d795c7ae011e42e1377e52a43f2ee.mp4,31af6dad798c4779a05287b6e25c0433.ogv,1107.0,True,,,[0.17 0.03],ogv,,logos/ge.gif,,False,False,0.14,cjlyVIfZJh4-1b8d795c7ae011e42e1377e52a43f2ee,mp4,cjlyVIfZJh4-1b8d795c7ae011e42e1377e52a43f2ee.mp4,cjlyVIfZJh4-1b8d795c7ae011e42e1377e52a43f2ee.mp4 +1108,/datadrive/videos/goQ997A-2Rg-3868cc0461d95b09288d921b22610192.mp4,743d8aef543e49f0901853f8ec239978.webm,1108.0,,,0.39,,webm,-0.1,logos/jazeera.png,7.0,False,False,-0.24,goQ997A-2Rg-3868cc0461d95b09288d921b22610192,mp4,goQ997A-2Rg-3868cc0461d95b09288d921b22610192.mp4,goQ997A-2Rg-3868cc0461d95b09288d921b22610192.mp4 +1109,/datadrive/videos/JoxsB8x2mSc-f72ea72ee9bf3e8787d9a6498f8ef180.mp4,83b614e3db46476fad8b485a922172e9.webm,1109.0,False,,,,webm,,,,False,False,0.25,JoxsB8x2mSc-f72ea72ee9bf3e8787d9a6498f8ef180,mp4,JoxsB8x2mSc-f72ea72ee9bf3e8787d9a6498f8ef180.mp4,JoxsB8x2mSc-f72ea72ee9bf3e8787d9a6498f8ef180.mp4 +1110,/datadrive/videos/EWBFATBVjYQ-46953620e55d3305abd30448dd2fc40e.mp4,88c50b3c59f84d579117d053a771b0c0.webm,1110.0,,,,[0.18 0.16],webm,,,,False,True,,EWBFATBVjYQ-46953620e55d3305abd30448dd2fc40e,mp4,EWBFATBVjYQ-46953620e55d3305abd30448dd2fc40e.mp4,EWBFATBVjYQ-46953620e55d3305abd30448dd2fc40e.mp4 +1111,/datadrive/videos/7V8h8IOOxbY-6c1a117889d8ca6d52847899ab419705.webm,82f7ac46cc084a2e9430a6ad7e52b85b.ogv,1111.0,False,32k,,,ogv,0.16,,,False,True,-0.05,7V8h8IOOxbY-6c1a117889d8ca6d52847899ab419705,webm,7V8h8IOOxbY-6c1a117889d8ca6d52847899ab419705.webm,7V8h8IOOxbY-6c1a117889d8ca6d52847899ab419705.webm +1112,/datadrive/videos/9RwGxC5HZCE-35af5340223d9b6ba84e5d29a3e1f37c.webm,50dfda75e0414d84b17b74d104c795ff.webm,1112.0,,,,[0.12 0.09],,,,,False,False,,9RwGxC5HZCE-35af5340223d9b6ba84e5d29a3e1f37c,webm,9RwGxC5HZCE-35af5340223d9b6ba84e5d29a3e1f37c.webm,9RwGxC5HZCE-35af5340223d9b6ba84e5d29a3e1f37c.webm +1113,/datadrive/videos/y6aOXMaBkQw-fc02f6530c684c9317cdc8ebc34631a2.webm,a3b755a17bd049d5867007c5f167a3c1.webm,1113.0,False,16k,,[0.1 0.04],,,logos/openair.gif,,True,True,0.11,y6aOXMaBkQw-fc02f6530c684c9317cdc8ebc34631a2,webm,y6aOXMaBkQw-fc02f6530c684c9317cdc8ebc34631a2.webm,y6aOXMaBkQw-fc02f6530c684c9317cdc8ebc34631a2.webm +1114,/datadrive/videos/OLiP5CgOQ0Q-6c34c5ba01b8ac1093113c0fac3e3683.webm,afce4873d1354a3da68b00861a7f0738.webm,1114.0,,128k,,,,-0.07,logos/openair.gif,,False,True,-0.22,OLiP5CgOQ0Q-6c34c5ba01b8ac1093113c0fac3e3683,webm,OLiP5CgOQ0Q-6c34c5ba01b8ac1093113c0fac3e3683.webm,OLiP5CgOQ0Q-6c34c5ba01b8ac1093113c0fac3e3683.webm +1115,/datadrive/videos/QIzN3GKKAo0-6e03778c5634f4e7f56203307c3809e7.webm,87cc4487729c4c8cbb3b48e9eb33d85d.mp4,1115.0,,,0.29,[0.15 0.05],mp4,-0.09,,0.0,True,False,,QIzN3GKKAo0-6e03778c5634f4e7f56203307c3809e7,webm,QIzN3GKKAo0-6e03778c5634f4e7f56203307c3809e7.webm,QIzN3GKKAo0-6e03778c5634f4e7f56203307c3809e7.webm +1116,/datadrive/videos/a5nA7JiQuSY-9beebbbbd80705f969a3f93c0fdaa121.webm,d196557f9f4f4650a45110b77189fa3a.webm,1116.0,,,,[0.09 0.08],,-0.2,logos/msnbc.png,,False,True,-0.19,a5nA7JiQuSY-9beebbbbd80705f969a3f93c0fdaa121,webm,a5nA7JiQuSY-9beebbbbd80705f969a3f93c0fdaa121.webm,a5nA7JiQuSY-9beebbbbd80705f969a3f93c0fdaa121.webm +1117,/datadrive/videos/BCn8TM5HUrE-d70324addccf921b422eede23d770818.webm,b6ab0a6e93174254af4a0a2144714790.webm,1117.0,,,,,,-0.09,logos/openair.gif,,False,False,,BCn8TM5HUrE-d70324addccf921b422eede23d770818,webm,BCn8TM5HUrE-d70324addccf921b422eede23d770818.webm,BCn8TM5HUrE-d70324addccf921b422eede23d770818.webm +1118,/datadrive/videos/T-T4oRgB6_A-574e78a86112ddb3801d46e156b61af0.webm,67e54b1d3ecb4165bb596951df63fe53.mp4,1118.0,False,,0.42,[0.1 0.11],mp4,,,,False,False,,T-T4oRgB6_A-574e78a86112ddb3801d46e156b61af0,webm,T-T4oRgB6_A-574e78a86112ddb3801d46e156b61af0.webm,T-T4oRgB6_A-574e78a86112ddb3801d46e156b61af0.webm +1121,/datadrive/videos/0skcZddaa3Q-389610305899163cf6ddad122a54954e.mp4,5b9c9487513e49a6b9106bec21faefc5.mp4,1121.0,False,16k,,[0.19 0.05],,,logos/another.gif,,False,True,0.22,0skcZddaa3Q-389610305899163cf6ddad122a54954e,mp4,0skcZddaa3Q-389610305899163cf6ddad122a54954e.mp4,0skcZddaa3Q-389610305899163cf6ddad122a54954e.mp4 +1122,/datadrive/videos/RdeDDtkdt2s-f5c8f127a20a8b2b3e6ce1909aca2d63.webm,52d3a4c57db5404792a8f69cc52cc7fa.ogv,1122.0,,,0.22,,ogv,0.12,,2.0,False,False,-0.13,RdeDDtkdt2s-f5c8f127a20a8b2b3e6ce1909aca2d63,webm,RdeDDtkdt2s-f5c8f127a20a8b2b3e6ce1909aca2d63.webm,RdeDDtkdt2s-f5c8f127a20a8b2b3e6ce1909aca2d63.webm +1123,/datadrive/videos/a4cyiTNvuM0-69be08068c25a8c756dee1f1052c9890.webm,2f116ab94573453e8d7a471de6054372.webm,1123.0,,,0.99,[0.1 0.02],webm,-0.05,,,False,True,,a4cyiTNvuM0-69be08068c25a8c756dee1f1052c9890,webm,a4cyiTNvuM0-69be08068c25a8c756dee1f1052c9890.webm,a4cyiTNvuM0-69be08068c25a8c756dee1f1052c9890.webm +1124,/datadrive/videos/bAX7N5t0XYw-396c48181b14c228e008723b8619fe49.webm,c902143115404f1083a9140a6eddbd36.mp4,1124.0,False,128k,0.94,[0.07 0.06],mp4,0.12,,7.0,False,False,0.06,bAX7N5t0XYw-396c48181b14c228e008723b8619fe49,webm,bAX7N5t0XYw-396c48181b14c228e008723b8619fe49.webm,bAX7N5t0XYw-396c48181b14c228e008723b8619fe49.webm +1126,/datadrive/videos/Kj2ifW8UjqQ-b93d0775c112a09d7b7678bc89c7a350.mp4,a2162ff0e2ab4bca9b358e9a31bb6154.mp4,1126.0,,,,,,0.0,,,False,True,,Kj2ifW8UjqQ-b93d0775c112a09d7b7678bc89c7a350,mp4,Kj2ifW8UjqQ-b93d0775c112a09d7b7678bc89c7a350.mp4,Kj2ifW8UjqQ-b93d0775c112a09d7b7678bc89c7a350.mp4 +1127,/datadrive/videos/SnNSqgJYRPo-8b5b6741ac11078087c5642d92922b0e.mp4,0ad804bd3a1945d9b316d9283eaa85f3.mp4,1127.0,,,0.8,,mp4,-0.04,,3.0,False,False,0.08,SnNSqgJYRPo-8b5b6741ac11078087c5642d92922b0e,mp4,SnNSqgJYRPo-8b5b6741ac11078087c5642d92922b0e.mp4,SnNSqgJYRPo-8b5b6741ac11078087c5642d92922b0e.mp4 +1129,/datadrive/videos/zfxPdDSAjl0-c3a01b6c0f722fbd5485bce7c5d88e76.webm,4214d032b0924870a216958e84a7544a.ogv,1129.0,,,,[0.16 0.07],ogv,-0.07,,,False,True,0.23,zfxPdDSAjl0-c3a01b6c0f722fbd5485bce7c5d88e76,webm,zfxPdDSAjl0-c3a01b6c0f722fbd5485bce7c5d88e76.webm,zfxPdDSAjl0-c3a01b6c0f722fbd5485bce7c5d88e76.webm +1130,/datadrive/videos/u-gBMRHIErM-9f0bb3a2dcedf4d182afa39e8de83512.mp4,2780100b0919474a9036629758b4b9d9.mp4,1130.0,,32k,,[0.02 0.03],mp4,,logos/new.gif,3.0,False,True,0.14,u-gBMRHIErM-9f0bb3a2dcedf4d182afa39e8de83512,mp4,u-gBMRHIErM-9f0bb3a2dcedf4d182afa39e8de83512.mp4,u-gBMRHIErM-9f0bb3a2dcedf4d182afa39e8de83512.mp4 +1131,/datadrive/videos/4RVWWpVtvws-9bc1554b1e7ddb2ff03577c96392b828.webm,172e3118396f46eeab2fe46464605878.webm,1131.0,False,,,,,0.05,,,False,True,-0.31,4RVWWpVtvws-9bc1554b1e7ddb2ff03577c96392b828,webm,4RVWWpVtvws-9bc1554b1e7ddb2ff03577c96392b828.webm,4RVWWpVtvws-9bc1554b1e7ddb2ff03577c96392b828.webm +1132,/datadrive/videos/xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e.mp4,66af3c5254ac4ac1984c05fa16ddc4af.mp4,1132.0,,16k,,[0.1 0.19],,,logos/openair.gif,1.0,False,True,,xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e,mp4,xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e.mp4,xAIq2HtX_lk-7ddb270bece191e9e4dcab56fa46391e.mp4 +1133,/datadrive/videos/iGLSBZZCSF0-dbeb85c995a13a6e4da653e5e1f848c7.webm,869c180c0eda40fcb7cd7be3dbeb51d4.webm,1133.0,True,64k,,,webm,0.02,logos/fox.png,1.0,False,True,,iGLSBZZCSF0-dbeb85c995a13a6e4da653e5e1f848c7,webm,iGLSBZZCSF0-dbeb85c995a13a6e4da653e5e1f848c7.webm,iGLSBZZCSF0-dbeb85c995a13a6e4da653e5e1f848c7.webm +1134,/datadrive/videos/D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256.webm,11a38d2c02394149bfcec138caf9938c.webm,1134.0,,16k,,[0.09 0.14],,-0.08,,0.0,False,False,,D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256,webm,D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256.webm,D3FpFnEvBTk-fe5d058c03547270eb52a229497b5256.webm +1136,/datadrive/videos/5LXPv96IYoA-0e92f84a6e9a8e0edfe834ad3ec70b59.webm,d3bf2dff89e341db974e1bbee36d4597.ogv,1136.0,False,,,[0.07 0.19],ogv,0.01,logos/another.gif,,False,False,-0.36,5LXPv96IYoA-0e92f84a6e9a8e0edfe834ad3ec70b59,webm,5LXPv96IYoA-0e92f84a6e9a8e0edfe834ad3ec70b59.webm,5LXPv96IYoA-0e92f84a6e9a8e0edfe834ad3ec70b59.webm +1137,/datadrive/videos/SyFp6d4-3pc-21b347724493a0ece7c423416b8854ea.webm,75e6cb590c424ced957c61c152cd2050.webm,1137.0,True,16k,0.76,[0.07 0.05],,0.02,,,True,False,,SyFp6d4-3pc-21b347724493a0ece7c423416b8854ea,webm,SyFp6d4-3pc-21b347724493a0ece7c423416b8854ea.webm,SyFp6d4-3pc-21b347724493a0ece7c423416b8854ea.webm +1139,/datadrive/videos/Q5SJGpUBebk-15316f6183a02109bf434f4312e56e2f.mp4,04a87501f64e4edca05db1118ff62ddd.webm,1139.0,False,,,[0.04 0.16],webm,-0.17,logos/openair.gif,3.0,False,False,0.02,Q5SJGpUBebk-15316f6183a02109bf434f4312e56e2f,mp4,Q5SJGpUBebk-15316f6183a02109bf434f4312e56e2f.mp4,Q5SJGpUBebk-15316f6183a02109bf434f4312e56e2f.mp4 +1140,/datadrive/videos/5sl98RjqVgc-19dd304495cab317f61188b5ca4b4eb1.mp4,24e21bdeb71443e8a601071e5e49db06.mp4,1140.0,,,0.97,[0.04 0.06],,,logos/jazeera.png,,True,True,,5sl98RjqVgc-19dd304495cab317f61188b5ca4b4eb1,mp4,5sl98RjqVgc-19dd304495cab317f61188b5ca4b4eb1.mp4,5sl98RjqVgc-19dd304495cab317f61188b5ca4b4eb1.mp4 +1141,/datadrive/videos/0J23Tg6yfKc-ed2347f9c451a7aa7d3def2b85ea0c76.webm,a1af42ae456847b8a9f5a3461e856109.webm,1141.0,True,,0.35,[0.07 0.11],,-0.11,,0.0,False,True,,0J23Tg6yfKc-ed2347f9c451a7aa7d3def2b85ea0c76,webm,0J23Tg6yfKc-ed2347f9c451a7aa7d3def2b85ea0c76.webm,0J23Tg6yfKc-ed2347f9c451a7aa7d3def2b85ea0c76.webm +1142,/datadrive/videos/LLdyu3Nso9A-4001e4e3d9984bc80d5cf33b68a56a20.mp4,5936252a480e459fb8079f5a4dff4bb8.mp4,1142.0,,128k,0.98,[0.07 0.14],,,,,False,True,0.1,LLdyu3Nso9A-4001e4e3d9984bc80d5cf33b68a56a20,mp4,LLdyu3Nso9A-4001e4e3d9984bc80d5cf33b68a56a20.mp4,LLdyu3Nso9A-4001e4e3d9984bc80d5cf33b68a56a20.mp4 +1144,/datadrive/videos/cExnmHA2_pA-20c67d49bca31877a4e6ee84b039d687.webm,cfead92177f54cf2bb2f1e30113d46fc.webm,1144.0,,128k,0.71,[0.13 0.07],webm,-0.06,logos/openair.gif,5.0,False,False,,cExnmHA2_pA-20c67d49bca31877a4e6ee84b039d687,webm,cExnmHA2_pA-20c67d49bca31877a4e6ee84b039d687.webm,cExnmHA2_pA-20c67d49bca31877a4e6ee84b039d687.webm +1145,/datadrive/videos/yqHVLWNH6jw-985430dd4548fcc321312d894e0cbc7c.mp4,b96c970cb9224644afea0d36587bd4c4.mp4,1145.0,False,,0.93,,,,,,False,True,-0.36,yqHVLWNH6jw-985430dd4548fcc321312d894e0cbc7c,mp4,yqHVLWNH6jw-985430dd4548fcc321312d894e0cbc7c.mp4,yqHVLWNH6jw-985430dd4548fcc321312d894e0cbc7c.mp4 +1146,/datadrive/videos/wd5laj7IH9I-d34145e40a3bde59f9f098cffaef6ddd.webm,b9db9c717e9e48b89de116f34eded7c6.ogv,1146.0,True,32k,,[0.14 0.14],ogv,,,5.0,False,False,,wd5laj7IH9I-d34145e40a3bde59f9f098cffaef6ddd,webm,wd5laj7IH9I-d34145e40a3bde59f9f098cffaef6ddd.webm,wd5laj7IH9I-d34145e40a3bde59f9f098cffaef6ddd.webm +1147,/datadrive/videos/3TiDAKydHic-a342d8bfb943e59152638c3ff9a1a26e.mp4,2d3d7984f45c413da945d70649ed3967.mp4,1147.0,,,0.41,[0.07 0.13],,-0.15,logos/new.gif,,False,True,0.27,3TiDAKydHic-a342d8bfb943e59152638c3ff9a1a26e,mp4,3TiDAKydHic-a342d8bfb943e59152638c3ff9a1a26e.mp4,3TiDAKydHic-a342d8bfb943e59152638c3ff9a1a26e.mp4 +1148,/datadrive/videos/uGc6qaXX5pg-98248ef93384f2e40d79e96302c957b9.webm,5eb24209465c49aa87d092f179dfe709.ogv,1148.0,,64k,,,ogv,,,5.0,False,True,0.02,uGc6qaXX5pg-98248ef93384f2e40d79e96302c957b9,webm,uGc6qaXX5pg-98248ef93384f2e40d79e96302c957b9.webm,uGc6qaXX5pg-98248ef93384f2e40d79e96302c957b9.webm +1149,/datadrive/videos/g0HFuE0_q2c-4f3ca3a966ce235d6b629d6d7b7b7564.webm,6af956c86b75411c8affef709ee5298e.webm,1149.0,,,0.71,[0.05 0.02],,,logos/ge.gif,4.0,False,True,,g0HFuE0_q2c-4f3ca3a966ce235d6b629d6d7b7b7564,webm,g0HFuE0_q2c-4f3ca3a966ce235d6b629d6d7b7b7564.webm,g0HFuE0_q2c-4f3ca3a966ce235d6b629d6d7b7b7564.webm +1150,/datadrive/videos/jaRuDP6txBQ-b686ba80eae215094f4dd5849c07f265.mp4,d79de7607c584e8bb5a76948f829da3f.mp4,1150.0,,,,[0.16 0.18],,,logos/sbt.gif,5.0,False,True,0.03,jaRuDP6txBQ-b686ba80eae215094f4dd5849c07f265,mp4,jaRuDP6txBQ-b686ba80eae215094f4dd5849c07f265.mp4,jaRuDP6txBQ-b686ba80eae215094f4dd5849c07f265.mp4 +1151,/datadrive/videos/VDDLDbwqD_8-f31693a9c12778b384c75d18625d6b6e.webm,9a59ef4f9944422c9efdbaf954cedb22.mp4,1151.0,,128k,0.56,,mp4,,,,False,True,,VDDLDbwqD_8-f31693a9c12778b384c75d18625d6b6e,webm,VDDLDbwqD_8-f31693a9c12778b384c75d18625d6b6e.webm,VDDLDbwqD_8-f31693a9c12778b384c75d18625d6b6e.webm +1152,/datadrive/videos/OK-mPTKNvDo-e259f1866f41c2c3013191f7a5a3204f.webm,78579cf5fe594486b532673abe7f4a15.webm,1152.0,,,,,webm,,,,False,False,,OK-mPTKNvDo-e259f1866f41c2c3013191f7a5a3204f,webm,OK-mPTKNvDo-e259f1866f41c2c3013191f7a5a3204f.webm,OK-mPTKNvDo-e259f1866f41c2c3013191f7a5a3204f.webm +1153,/datadrive/videos/JrBjbP9TFV0-a9a6bbb0dcd6a09181e218f7517750ed.mp4,c98ca9e85267498b8a652d7d9e3dd8b8.mp4,1153.0,,128k,0.81,[0.17 0.18],,0.15,,,False,True,,JrBjbP9TFV0-a9a6bbb0dcd6a09181e218f7517750ed,mp4,JrBjbP9TFV0-a9a6bbb0dcd6a09181e218f7517750ed.mp4,JrBjbP9TFV0-a9a6bbb0dcd6a09181e218f7517750ed.mp4 +1154,/datadrive/videos/wlRAIfIiyBs-58baa278f0a50dc2b09bb82f3997735f.webm,9685f858429c49409fded1e40d09c527.ogv,1154.0,False,,,,ogv,,logos/download.png,8.0,False,False,,wlRAIfIiyBs-58baa278f0a50dc2b09bb82f3997735f,webm,wlRAIfIiyBs-58baa278f0a50dc2b09bb82f3997735f.webm,wlRAIfIiyBs-58baa278f0a50dc2b09bb82f3997735f.webm +1155,/datadrive/videos/w7_aYG8OG_o-05a836be32d9421280288067bb5a6bdd.webm,0c156ebbd3974765bd7ab932d616b1cc.ogv,1155.0,,,0.47,,ogv,0.04,logos/download.png,,False,True,-0.33,w7_aYG8OG_o-05a836be32d9421280288067bb5a6bdd,webm,w7_aYG8OG_o-05a836be32d9421280288067bb5a6bdd.webm,w7_aYG8OG_o-05a836be32d9421280288067bb5a6bdd.webm +1156,/datadrive/videos/0Hz2L1V_ICo-2b4ff8776f4d0ad2fc8e99de9b1092d5.mp4,52fcefea4d8d4690ade4c9943661ffd6.mp4,1156.0,False,,,,,-0.02,logos/new.gif,,False,False,,0Hz2L1V_ICo-2b4ff8776f4d0ad2fc8e99de9b1092d5,mp4,0Hz2L1V_ICo-2b4ff8776f4d0ad2fc8e99de9b1092d5.mp4,0Hz2L1V_ICo-2b4ff8776f4d0ad2fc8e99de9b1092d5.mp4 +1158,/datadrive/videos/GWExHybVuXE-230a936fed2edc73b1076ddf492a74cb.mp4,81466b148bb942729a223ea9db5f9151.mp4,1158.0,,128k,0.9,[0.08 0.13],,,logos/fox.png,,False,True,,GWExHybVuXE-230a936fed2edc73b1076ddf492a74cb,mp4,GWExHybVuXE-230a936fed2edc73b1076ddf492a74cb.mp4,GWExHybVuXE-230a936fed2edc73b1076ddf492a74cb.mp4 +1160,/datadrive/videos/kabNdo05sNw-0898375837dac959ab9c943a53b1f41e.mp4,8a25d11c8b124f609006ffd783475f7f.mp4,1160.0,,,,[0.04 0.04],,-0.05,logos/openair.gif,5.0,False,True,-0.26,kabNdo05sNw-0898375837dac959ab9c943a53b1f41e,mp4,kabNdo05sNw-0898375837dac959ab9c943a53b1f41e.mp4,kabNdo05sNw-0898375837dac959ab9c943a53b1f41e.mp4 +1163,/datadrive/videos/23cf0MqTJMk-1a2a22a522d3a1f9dcc5ffa2d7820e5c.webm,9570e15591cc4fa590d9af428fa45491.mp4,1163.0,,,,[0.05 0.12],mp4,,,,False,False,,23cf0MqTJMk-1a2a22a522d3a1f9dcc5ffa2d7820e5c,webm,23cf0MqTJMk-1a2a22a522d3a1f9dcc5ffa2d7820e5c.webm,23cf0MqTJMk-1a2a22a522d3a1f9dcc5ffa2d7820e5c.webm +1164,/datadrive/videos/fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753.webm,c0823a49780b40f3a39e3ffd8f4275fb.webm,1164.0,True,128k,,,,-0.14,logos/msnbc.png,,False,False,,fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753,webm,fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753.webm,fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753.webm +1168,/datadrive/videos/JeMxyO4nhKs-eb50c610dbd7a468fa684514ce09367b.webm,38cfa602b1aa46839b9d40e2efd8247b.ogv,1168.0,True,,0.59,,ogv,0.03,logos/new.gif,9.0,False,False,-0.31,JeMxyO4nhKs-eb50c610dbd7a468fa684514ce09367b,webm,JeMxyO4nhKs-eb50c610dbd7a468fa684514ce09367b.webm,JeMxyO4nhKs-eb50c610dbd7a468fa684514ce09367b.webm +1169,/datadrive/videos/hRirIhg7HX4-f8d4b026b44dc812c625d2f08a16140b.webm,6b9ea536aea94fe2a7c4e582906379b0.webm,1169.0,,16k,,[0.02 0.13],webm,-0.18,,,False,True,,hRirIhg7HX4-f8d4b026b44dc812c625d2f08a16140b,webm,hRirIhg7HX4-f8d4b026b44dc812c625d2f08a16140b.webm,hRirIhg7HX4-f8d4b026b44dc812c625d2f08a16140b.webm +1170,/datadrive/videos/txPg33J97R4-b846c110494f1c621d175338fe1f4e42.webm,761e14b501d54735bb0980b493d9e9c6.webm,1170.0,False,16k,,,,0.15,,,False,False,,txPg33J97R4-b846c110494f1c621d175338fe1f4e42,webm,txPg33J97R4-b846c110494f1c621d175338fe1f4e42.webm,txPg33J97R4-b846c110494f1c621d175338fe1f4e42.webm +1172,/datadrive/videos/yp2flos0Nrw-32ecbc1606993592b99a1ed2b00d40dd.webm,1f3ec6d9f7544f48840884f56d6d2e59.webm,1172.0,True,,,,,,,,False,True,-0.02,yp2flos0Nrw-32ecbc1606993592b99a1ed2b00d40dd,webm,yp2flos0Nrw-32ecbc1606993592b99a1ed2b00d40dd.webm,yp2flos0Nrw-32ecbc1606993592b99a1ed2b00d40dd.webm +1173,/datadrive/videos/g-IzqjYl3fA-42b4f273379ffd5372e165924933fb46.webm,4f88a06a6bcc42938bf6e65bd91625a1.webm,1173.0,True,128k,0.85,[0.18 0.08],webm,-0.19,,,False,False,,g-IzqjYl3fA-42b4f273379ffd5372e165924933fb46,webm,g-IzqjYl3fA-42b4f273379ffd5372e165924933fb46.webm,g-IzqjYl3fA-42b4f273379ffd5372e165924933fb46.webm +1174,/datadrive/videos/RImXm2DIGWA-dd42ee1822a02483e0b010d371224053.webm,b01a7444055d4582b932f068765375c2.webm,1174.0,True,,,,,,,5.0,False,False,-0.1,RImXm2DIGWA-dd42ee1822a02483e0b010d371224053,webm,RImXm2DIGWA-dd42ee1822a02483e0b010d371224053.webm,RImXm2DIGWA-dd42ee1822a02483e0b010d371224053.webm +1175,/datadrive/videos/22Ql6gOuUB4-8604ec2841ac1a05f15fa65719cf3075.webm,565e6f1c8417447b9bfa511912706a92.webm,1175.0,,32k,,[0.15 0.15],webm,0.15,,6.0,False,True,-0.01,22Ql6gOuUB4-8604ec2841ac1a05f15fa65719cf3075,webm,22Ql6gOuUB4-8604ec2841ac1a05f15fa65719cf3075.webm,22Ql6gOuUB4-8604ec2841ac1a05f15fa65719cf3075.webm +1176,/datadrive/videos/QaWojRI8XWM-3198079660b5e09034a87774077bc551.webm,cdd6559194fc4f3dad8150611b7bba36.webm,1176.0,True,64k,,,,0.1,logos/fox.png,,False,False,,QaWojRI8XWM-3198079660b5e09034a87774077bc551,webm,QaWojRI8XWM-3198079660b5e09034a87774077bc551.webm,QaWojRI8XWM-3198079660b5e09034a87774077bc551.webm +1177,/datadrive/videos/zrlAGAb3OMY-bdcf43eb8ccddc3a67d2fb9c68d017ef.webm,2d3f9386b5c74be489f6fb882a61430c.webm,1177.0,,,,,webm,-0.16,logos/fox.png,0.0,False,True,,zrlAGAb3OMY-bdcf43eb8ccddc3a67d2fb9c68d017ef,webm,zrlAGAb3OMY-bdcf43eb8ccddc3a67d2fb9c68d017ef.webm,zrlAGAb3OMY-bdcf43eb8ccddc3a67d2fb9c68d017ef.webm +1179,/datadrive/videos/0Ike5fnUGUg-9078c17f2aaa7bb6f00081c2d470098c.webm,a9c526c5011e463eb361a1177064fbd6.webm,1179.0,,64k,,,,,,7.0,False,False,,0Ike5fnUGUg-9078c17f2aaa7bb6f00081c2d470098c,webm,0Ike5fnUGUg-9078c17f2aaa7bb6f00081c2d470098c.webm,0Ike5fnUGUg-9078c17f2aaa7bb6f00081c2d470098c.webm +1180,/datadrive/videos/jU1MgcbSpwA-6a91a8bcbb42936aa2585d0f893fe0a3.mp4,ad8cdfc039094adea7d9d87c3668a2f2.mp4,1180.0,False,32k,,,mp4,0.14,,,True,True,,jU1MgcbSpwA-6a91a8bcbb42936aa2585d0f893fe0a3,mp4,jU1MgcbSpwA-6a91a8bcbb42936aa2585d0f893fe0a3.mp4,jU1MgcbSpwA-6a91a8bcbb42936aa2585d0f893fe0a3.mp4 +1181,/datadrive/videos/h6UramvA7RA-4b3f028c49ddcc98c1b2a7fda460cdfc.webm,5a52bced4cd54b0cbf5762e46e0b0ac3.ogv,1181.0,True,,0.33,[0.17 0.18],ogv,,,6.0,False,False,-0.26,h6UramvA7RA-4b3f028c49ddcc98c1b2a7fda460cdfc,webm,h6UramvA7RA-4b3f028c49ddcc98c1b2a7fda460cdfc.webm,h6UramvA7RA-4b3f028c49ddcc98c1b2a7fda460cdfc.webm +1182,/datadrive/videos/rXhQjSA5jfU-36065d168365f361c457a8d1a134746a.webm,550c6ee08ac64e31849862c60b810cb9.ogv,1182.0,False,,,[0.17 0.04],ogv,,,6.0,False,True,0.02,rXhQjSA5jfU-36065d168365f361c457a8d1a134746a,webm,rXhQjSA5jfU-36065d168365f361c457a8d1a134746a.webm,rXhQjSA5jfU-36065d168365f361c457a8d1a134746a.webm +1183,/datadrive/videos/33xHOK8kcgc-c740c609af879d134c670500b115b845.webm,77eae5b52bad4cd0be0e23c89907cc8f.webm,1183.0,,,0.79,,,,,6.0,False,False,-0.27,33xHOK8kcgc-c740c609af879d134c670500b115b845,webm,33xHOK8kcgc-c740c609af879d134c670500b115b845.webm,33xHOK8kcgc-c740c609af879d134c670500b115b845.webm +1184,/datadrive/videos/JdUkla49suI-8b23dd7d932fd18badd0964bcf39c99d.mp4,320b404703d546a19ae8a567c6e64654.mp4,1184.0,,,0.25,,,,,,False,False,0.13,JdUkla49suI-8b23dd7d932fd18badd0964bcf39c99d,mp4,JdUkla49suI-8b23dd7d932fd18badd0964bcf39c99d.mp4,JdUkla49suI-8b23dd7d932fd18badd0964bcf39c99d.mp4 +1186,/datadrive/videos/si3SfdZ_lHc-71ca46d86ec3c3fd11154adbc5aa442b.mp4,1af1fb9dd47c4fa68568361d071f5580.webm,1186.0,,32k,0.45,[0.01 0.14],webm,,,,False,True,0.14,si3SfdZ_lHc-71ca46d86ec3c3fd11154adbc5aa442b,mp4,si3SfdZ_lHc-71ca46d86ec3c3fd11154adbc5aa442b.mp4,si3SfdZ_lHc-71ca46d86ec3c3fd11154adbc5aa442b.mp4 +1187,/datadrive/videos/77oZF6-8ADY-a5878b274e1ae724264f34cb0caf5e9d.webm,909d29d9099b45cebc6a29a9ab78d186.ogv,1187.0,False,16k,0.33,,ogv,,logos/download.png,,False,False,,77oZF6-8ADY-a5878b274e1ae724264f34cb0caf5e9d,webm,77oZF6-8ADY-a5878b274e1ae724264f34cb0caf5e9d.webm,77oZF6-8ADY-a5878b274e1ae724264f34cb0caf5e9d.webm +1188,/datadrive/videos/IBOBWAB7XVw-82c59387d2986b00ac2f4327e8a9f288.mp4,8a15bc48beac4649b9cb008f70962044.mp4,1188.0,,64k,0.88,,mp4,,logos/another.gif,,False,False,,IBOBWAB7XVw-82c59387d2986b00ac2f4327e8a9f288,mp4,IBOBWAB7XVw-82c59387d2986b00ac2f4327e8a9f288.mp4,IBOBWAB7XVw-82c59387d2986b00ac2f4327e8a9f288.mp4 +1190,/datadrive/videos/jiYbjO64a1I-bac2a311804d2cc3d4b9fe5505aec298.webm,16cc2d49a5e442a0b1cbac4c60bf0588.ogv,1190.0,False,,,,ogv,-0.01,logos/new.gif,2.0,False,False,,jiYbjO64a1I-bac2a311804d2cc3d4b9fe5505aec298,webm,jiYbjO64a1I-bac2a311804d2cc3d4b9fe5505aec298.webm,jiYbjO64a1I-bac2a311804d2cc3d4b9fe5505aec298.webm +1191,/datadrive/videos/B61wJhb0Gfc-558c34edfdb7190e6b75563113e45bb8.webm,135b42a3915d4531a7db1bb084984a61.webm,1191.0,True,16k,,,,,logos/another.gif,4.0,False,True,,B61wJhb0Gfc-558c34edfdb7190e6b75563113e45bb8,webm,B61wJhb0Gfc-558c34edfdb7190e6b75563113e45bb8.webm,B61wJhb0Gfc-558c34edfdb7190e6b75563113e45bb8.webm +1192,/datadrive/videos/Xaj3LhIY07s-a13fcb07fd13e3f63bde9bda6dd55f13.webm,cd64b89e3ab44308a0d9bfdcbef5307c.webm,1192.0,False,,0.3,,,0.01,logos/msnbc.png,6.0,False,True,,Xaj3LhIY07s-a13fcb07fd13e3f63bde9bda6dd55f13,webm,Xaj3LhIY07s-a13fcb07fd13e3f63bde9bda6dd55f13.webm,Xaj3LhIY07s-a13fcb07fd13e3f63bde9bda6dd55f13.webm +1193,/datadrive/videos/xkyssrDbKEg-2f8278cfb0dd9a0fffe4f8849a747f9d.mp4,115fcd6070e646edb6769a4795150876.webm,1193.0,False,,0.5,[0.08 0.19],webm,,,9.0,False,False,0.14,xkyssrDbKEg-2f8278cfb0dd9a0fffe4f8849a747f9d,mp4,xkyssrDbKEg-2f8278cfb0dd9a0fffe4f8849a747f9d.mp4,xkyssrDbKEg-2f8278cfb0dd9a0fffe4f8849a747f9d.mp4 +1194,/datadrive/videos/UsIEELGKdfA-7f82e2cef230ea89c023e56e2432ebe1.webm,c6480742e1b64b51b5bbd4944ed33cf3.webm,1194.0,False,128k,0.81,,,,logos/another.gif,,False,True,,UsIEELGKdfA-7f82e2cef230ea89c023e56e2432ebe1,webm,UsIEELGKdfA-7f82e2cef230ea89c023e56e2432ebe1.webm,UsIEELGKdfA-7f82e2cef230ea89c023e56e2432ebe1.webm +1195,/datadrive/videos/g5Dso77LuKc-5dcd6a3f2067264d032ec4a9de34d4e4.webm,c26afc319a194ed2b14ecfc7772ec3be.webm,1195.0,,,0.32,,,-0.08,,1.0,False,False,,g5Dso77LuKc-5dcd6a3f2067264d032ec4a9de34d4e4,webm,g5Dso77LuKc-5dcd6a3f2067264d032ec4a9de34d4e4.webm,g5Dso77LuKc-5dcd6a3f2067264d032ec4a9de34d4e4.webm +1196,/datadrive/videos/ORjJjJUSfW4-941a0a22d27b49fb3d0aa7a26f6180d1.webm,196b1c2972b549269ce7923b93f18d81.webm,1196.0,,128k,0.34,,,0.17,,5.84,False,False,,ORjJjJUSfW4-941a0a22d27b49fb3d0aa7a26f6180d1,webm,ORjJjJUSfW4-941a0a22d27b49fb3d0aa7a26f6180d1.webm,ORjJjJUSfW4-941a0a22d27b49fb3d0aa7a26f6180d1.webm +1197,/datadrive/videos/kom3TFIg-Xc-cfb13a53b165d730221e093550f0aec7.mp4,d608a066bbbe459ea2980002d6fff38d.ogv,1197.0,False,,,[0.02 0.06],ogv,,logos/openair.gif,,False,False,,kom3TFIg-Xc-cfb13a53b165d730221e093550f0aec7,mp4,kom3TFIg-Xc-cfb13a53b165d730221e093550f0aec7.mp4,kom3TFIg-Xc-cfb13a53b165d730221e093550f0aec7.mp4 +1198,/datadrive/videos/FHF8jy9U694-416457c565713a90334d032a75d3ff93.mp4,d444a903101a4a68bafc1627d4c58ee6.mp4,1198.0,,128k,,[0.12 0.08],,0.11,,,False,True,-0.02,FHF8jy9U694-416457c565713a90334d032a75d3ff93,mp4,FHF8jy9U694-416457c565713a90334d032a75d3ff93.mp4,FHF8jy9U694-416457c565713a90334d032a75d3ff93.mp4 +1199,/datadrive/videos/RbfqEd8W7Zs-96ffd3e76fa11d280738f2c885071aeb.mp4,73e7737471334189870d605a7751d986.webm,1199.0,,16k,0.72,[0.09 0.12],webm,,logos/fox.png,8.0,False,False,0.07,RbfqEd8W7Zs-96ffd3e76fa11d280738f2c885071aeb,mp4,RbfqEd8W7Zs-96ffd3e76fa11d280738f2c885071aeb.mp4,RbfqEd8W7Zs-96ffd3e76fa11d280738f2c885071aeb.mp4 +1200,/datadrive/videos/LVwFtCKa7yY-dc756880a342662f96f8c9c427d35b63.webm,9e0afdb1f1fe4b2f8f7dbc288f4305ae.ogv,1200.0,False,,,[0.03 0.12],ogv,-0.12,logos/fox.png,,False,True,0.08,LVwFtCKa7yY-dc756880a342662f96f8c9c427d35b63,webm,LVwFtCKa7yY-dc756880a342662f96f8c9c427d35b63.webm,LVwFtCKa7yY-dc756880a342662f96f8c9c427d35b63.webm +1203,/datadrive/videos/A_sT5l8OJ7o-67676666d47a43deaa3c543ab02e92c8.webm,1aa097c94e724a818e62d30701734674.webm,1203.0,False,,,[0.15 0.16],webm,0.17,logos/fox.png,,False,True,-0.23,A_sT5l8OJ7o-67676666d47a43deaa3c543ab02e92c8,webm,A_sT5l8OJ7o-67676666d47a43deaa3c543ab02e92c8.webm,A_sT5l8OJ7o-67676666d47a43deaa3c543ab02e92c8.webm +1205,/datadrive/videos/KD-zqWSnLHg-b59c0c64a8cb8a1dc1ebd5452767bdd8.mp4,45e0ca55cb35466b9452f992f1f8637e.mp4,1205.0,True,,0.47,[0.02 0.14],,,logos/openair.gif,3.0,False,True,,KD-zqWSnLHg-b59c0c64a8cb8a1dc1ebd5452767bdd8,mp4,KD-zqWSnLHg-b59c0c64a8cb8a1dc1ebd5452767bdd8.mp4,KD-zqWSnLHg-b59c0c64a8cb8a1dc1ebd5452767bdd8.mp4 +1206,/datadrive/videos/poM2P1nx-qE-1829fa2c50fd1102ab3f2cb8e772819c.webm,7c4e5dc0f7cd469f942bfe1780159b8d.ogv,1206.0,False,128k,,[0.11 0.18],ogv,,logos/ge.gif,,True,True,0.08,poM2P1nx-qE-1829fa2c50fd1102ab3f2cb8e772819c,webm,poM2P1nx-qE-1829fa2c50fd1102ab3f2cb8e772819c.webm,poM2P1nx-qE-1829fa2c50fd1102ab3f2cb8e772819c.webm +1207,/datadrive/videos/sc3ojoWc_mU-e3d81f3a88cbd17ee372171636f1c281.webm,4fee0aba75244d4e85bd4f970d9b461a.ogv,1207.0,False,,,[0.1 0.17],ogv,0.1,,1.0,False,False,,sc3ojoWc_mU-e3d81f3a88cbd17ee372171636f1c281,webm,sc3ojoWc_mU-e3d81f3a88cbd17ee372171636f1c281.webm,sc3ojoWc_mU-e3d81f3a88cbd17ee372171636f1c281.webm +1208,/datadrive/videos/FlO5h9bnmzE-b7202ba47e829e7a938002db4209fbd2.mp4,bf844355b1684d02a51771fb4dd15425.ogv,1208.0,,,,[0.09 0.05],ogv,-0.05,,,False,False,,FlO5h9bnmzE-b7202ba47e829e7a938002db4209fbd2,mp4,FlO5h9bnmzE-b7202ba47e829e7a938002db4209fbd2.mp4,FlO5h9bnmzE-b7202ba47e829e7a938002db4209fbd2.mp4 +1209,/datadrive/videos/_GOF0T92dm4-576462019d260b642e63250e507c267a.webm,1f3fe22acb174c86874f9f94cdacfdb1.mp4,1209.0,,64k,0.2,,mp4,,logos/download.png,,False,True,-0.25,_GOF0T92dm4-576462019d260b642e63250e507c267a,webm,_GOF0T92dm4-576462019d260b642e63250e507c267a.webm,_GOF0T92dm4-576462019d260b642e63250e507c267a.webm +1210,/datadrive/videos/v7EnZpKVQZY-68b4bbd87fa6f94e1e1a39d903204027.webm,1d948c3377a245288257e34b390a90f5.webm,1210.0,True,32k,0.57,[0.09 0.07],,-0.18,logos/jazeera.png,6.0,False,True,0.15,v7EnZpKVQZY-68b4bbd87fa6f94e1e1a39d903204027,webm,v7EnZpKVQZY-68b4bbd87fa6f94e1e1a39d903204027.webm,v7EnZpKVQZY-68b4bbd87fa6f94e1e1a39d903204027.webm +1211,/datadrive/videos/bdJssVqgX_Q-f2c80ac1c83da1bc0a2fa9bd9ba14fad.webm,afe6438baac54c3a92498c2621cabd1c.mp4,1211.0,False,,0.42,[0.17 0.14],mp4,,,7.0,False,False,0.16,bdJssVqgX_Q-f2c80ac1c83da1bc0a2fa9bd9ba14fad,webm,bdJssVqgX_Q-f2c80ac1c83da1bc0a2fa9bd9ba14fad.webm,bdJssVqgX_Q-f2c80ac1c83da1bc0a2fa9bd9ba14fad.webm +1212,/datadrive/videos/sIoPX779ETw-9d4897cee4ab2fa9f15bf4ef5fe30138.mp4,4bbba3d8a79842da9604b84007462d70.mp4,1212.0,,,,,mp4,,logos/openair.gif,3.0,False,False,,sIoPX779ETw-9d4897cee4ab2fa9f15bf4ef5fe30138,mp4,sIoPX779ETw-9d4897cee4ab2fa9f15bf4ef5fe30138.mp4,sIoPX779ETw-9d4897cee4ab2fa9f15bf4ef5fe30138.mp4 +1213,/datadrive/videos/IscriCqDyJs-b5f52abb5ca7dc1e80365e3a1453656b.webm,80cd7c13708747538f170a265c89b596.ogv,1213.0,False,128k,0.59,[0.14 0.01],ogv,,,,False,False,-0.39,IscriCqDyJs-b5f52abb5ca7dc1e80365e3a1453656b,webm,IscriCqDyJs-b5f52abb5ca7dc1e80365e3a1453656b.webm,IscriCqDyJs-b5f52abb5ca7dc1e80365e3a1453656b.webm +1215,/datadrive/videos/qxms8o7vinY-86966dd7dcc8aea4203d1ef541618797.webm,c764ff99a0ae413494f1ee6ae7b6795e.ogv,1215.0,False,32k,0.72,,ogv,-0.04,,,False,True,,qxms8o7vinY-86966dd7dcc8aea4203d1ef541618797,webm,qxms8o7vinY-86966dd7dcc8aea4203d1ef541618797.webm,qxms8o7vinY-86966dd7dcc8aea4203d1ef541618797.webm +1216,/datadrive/videos/joP7dtFggMY-f44dd8a34b3669a2be2453132c4d02e2.webm,83eeda0e856944b197374955c43aa693.mp4,1216.0,True,64k,0.47,[0.17 0.07],mp4,-0.2,,3.0,False,False,-0.23,joP7dtFggMY-f44dd8a34b3669a2be2453132c4d02e2,webm,joP7dtFggMY-f44dd8a34b3669a2be2453132c4d02e2.webm,joP7dtFggMY-f44dd8a34b3669a2be2453132c4d02e2.webm +1217,/datadrive/videos/RbfqEd8W7Zs-96ffd3e76fa11d280738f2c885071aeb.mp4,c2a531bb4f7e49b7aa00decce26677dd.mp4,1217.0,,128k,,,,,logos/msnbc.png,0.0,False,False,-0.22,RbfqEd8W7Zs-96ffd3e76fa11d280738f2c885071aeb,mp4,RbfqEd8W7Zs-96ffd3e76fa11d280738f2c885071aeb.mp4,RbfqEd8W7Zs-96ffd3e76fa11d280738f2c885071aeb.mp4 +1219,/datadrive/videos/JlsSBGZUrOo-467b560a28e7592eb5e37f406cbb6025.webm,6ed098ae23d84bbfb74972d8ec1e4f2a.webm,1219.0,True,,0.44,[0.02 0.07],,0.12,logos/msnbc.png,9.0,False,True,,JlsSBGZUrOo-467b560a28e7592eb5e37f406cbb6025,webm,JlsSBGZUrOo-467b560a28e7592eb5e37f406cbb6025.webm,JlsSBGZUrOo-467b560a28e7592eb5e37f406cbb6025.webm +1220,/datadrive/videos/mXdtPemDsFg-f6f3fee2f664010b979c96ae14a499dd.mp4,2667fe0f6e8547ab95583908f8dcb2d3.mp4,1220.0,True,16k,0.91,[0.16 0.13],,,,,False,False,,mXdtPemDsFg-f6f3fee2f664010b979c96ae14a499dd,mp4,mXdtPemDsFg-f6f3fee2f664010b979c96ae14a499dd.mp4,mXdtPemDsFg-f6f3fee2f664010b979c96ae14a499dd.mp4 +1221,/datadrive/videos/2HRQqKfY7nI-a2c00777330470eb812c9cedb15499d0.webm,471d3f2172ee40ed9e28aa0617f25c41.mp4,1221.0,False,16k,0.41,,mp4,,,6.0,False,False,0.04,2HRQqKfY7nI-a2c00777330470eb812c9cedb15499d0,webm,2HRQqKfY7nI-a2c00777330470eb812c9cedb15499d0.webm,2HRQqKfY7nI-a2c00777330470eb812c9cedb15499d0.webm +1223,/datadrive/videos/tzqaoNgxQS0-88f3a4d49423e57bb6813f7f50912837.webm,12fd821ad1704d5d8ddf532059df67ea.webm,1223.0,,,,,,,logos/download.png,9.0,False,False,-0.1,tzqaoNgxQS0-88f3a4d49423e57bb6813f7f50912837,webm,tzqaoNgxQS0-88f3a4d49423e57bb6813f7f50912837.webm,tzqaoNgxQS0-88f3a4d49423e57bb6813f7f50912837.webm +1224,/datadrive/videos/qSmw8Y51S5g-a3fdfea794637d780de4ca76aef3f78e.webm,412af188b7c64b43a51b870134a53b7b.webm,1224.0,True,128k,,,,0.02,logos/download.png,5.0,False,False,0.26,qSmw8Y51S5g-a3fdfea794637d780de4ca76aef3f78e,webm,qSmw8Y51S5g-a3fdfea794637d780de4ca76aef3f78e.webm,qSmw8Y51S5g-a3fdfea794637d780de4ca76aef3f78e.webm +1226,/datadrive/videos/ekI-_gNJEHc-163e6ba7751b607ba2a6b407cec36552.webm,b82c09c5630e436881f9a9720c09f8ee.webm,1226.0,,,,[0.04 0.15],,,,1.0,False,False,-0.14,ekI-_gNJEHc-163e6ba7751b607ba2a6b407cec36552,webm,ekI-_gNJEHc-163e6ba7751b607ba2a6b407cec36552.webm,ekI-_gNJEHc-163e6ba7751b607ba2a6b407cec36552.webm +1227,/datadrive/videos/N4iQuahSEk8-5b5585bff419c500f71dd8cf4d05cf16.webm,08910f4ff9c44996b075d54943df8dd4.webm,1227.0,,64k,0.38,,webm,,,,False,True,,N4iQuahSEk8-5b5585bff419c500f71dd8cf4d05cf16,webm,N4iQuahSEk8-5b5585bff419c500f71dd8cf4d05cf16.webm,N4iQuahSEk8-5b5585bff419c500f71dd8cf4d05cf16.webm +1228,/datadrive/videos/MAxuihfpanU-4c3ed36d91d64bb4750d56533a0cd8ef.webm,ac25b992013347b3b53f776dd6faf3e9.webm,1228.0,False,,0.37,,webm,0.07,,0.0,False,True,,MAxuihfpanU-4c3ed36d91d64bb4750d56533a0cd8ef,webm,MAxuihfpanU-4c3ed36d91d64bb4750d56533a0cd8ef.webm,MAxuihfpanU-4c3ed36d91d64bb4750d56533a0cd8ef.webm +1229,/datadrive/videos/LET--DP00NA-a2ba6b94c8629bbe3bf9bc3ef0b0e2cf.webm,4891bed63e1b41e2a3704419ff32afb7.webm,1229.0,False,,,[0.03 0.09],,-0.13,logos/fox.png,,False,True,,LET--DP00NA-a2ba6b94c8629bbe3bf9bc3ef0b0e2cf,webm,LET--DP00NA-a2ba6b94c8629bbe3bf9bc3ef0b0e2cf.webm,LET--DP00NA-a2ba6b94c8629bbe3bf9bc3ef0b0e2cf.webm +1231,/datadrive/videos/NfMXjiiA6JU-401ff8fef9a7fe05550a1264cd5e1c43.webm,afc9ff474b184d86bd7e0e4d6fdd2e42.webm,1231.0,False,,,[0.01 0.12],,0.12,,,False,True,,NfMXjiiA6JU-401ff8fef9a7fe05550a1264cd5e1c43,webm,NfMXjiiA6JU-401ff8fef9a7fe05550a1264cd5e1c43.webm,NfMXjiiA6JU-401ff8fef9a7fe05550a1264cd5e1c43.webm +1232,/datadrive/videos/y3j90k7eCXw-017275e744863f6554c706103edd1ff4.webm,310add36d4de405181e439cf92bd0a11.webm,1232.0,,,,[0.12 0.11],,-0.13,logos/ge.gif,9.0,False,False,-0.26,y3j90k7eCXw-017275e744863f6554c706103edd1ff4,webm,y3j90k7eCXw-017275e744863f6554c706103edd1ff4.webm,y3j90k7eCXw-017275e744863f6554c706103edd1ff4.webm +1233,/datadrive/videos/54zLp9D3j4g-4c722792fe7a469c387b9e420358d1c9.webm,86a98abcf8624b879c487b406d8e990f.webm,1233.0,False,32k,,[0.09 0.14],,,logos/jazeera.png,,False,False,-0.18,54zLp9D3j4g-4c722792fe7a469c387b9e420358d1c9,webm,54zLp9D3j4g-4c722792fe7a469c387b9e420358d1c9.webm,54zLp9D3j4g-4c722792fe7a469c387b9e420358d1c9.webm +1234,/datadrive/videos/D6R-K0gmRGQ-f1c737c6a9852390383cc9cd398d80f1.webm,9c755e10d0fd4959add1ad10f97458b2.webm,1234.0,False,,,,webm,,,,False,False,,D6R-K0gmRGQ-f1c737c6a9852390383cc9cd398d80f1,webm,D6R-K0gmRGQ-f1c737c6a9852390383cc9cd398d80f1.webm,D6R-K0gmRGQ-f1c737c6a9852390383cc9cd398d80f1.webm +1237,/datadrive/videos/FUAfocJA6N8-bbc2da79edc83af7e255d14509ca02e5.webm,908449e617264e9faa8638468aa406ba.webm,1237.0,,64k,,,,-0.17,,4.0,False,False,-0.1,FUAfocJA6N8-bbc2da79edc83af7e255d14509ca02e5,webm,FUAfocJA6N8-bbc2da79edc83af7e255d14509ca02e5.webm,FUAfocJA6N8-bbc2da79edc83af7e255d14509ca02e5.webm +1238,/datadrive/videos/9vhPkGx9s0s-df4c185ccd99beb86da66b49d4ee1f44.mp4,7cfad4b30fdd49d7bda582bd70ee687a.mp4,1238.0,,32k,0.75,,,,,,False,True,-0.13,9vhPkGx9s0s-df4c185ccd99beb86da66b49d4ee1f44,mp4,9vhPkGx9s0s-df4c185ccd99beb86da66b49d4ee1f44.mp4,9vhPkGx9s0s-df4c185ccd99beb86da66b49d4ee1f44.mp4 +1239,/datadrive/videos/jU1MgcbSpwA-6a91a8bcbb42936aa2585d0f893fe0a3.mp4,77ea937e7e4d4a9fa7b6210d490e0de2.mp4,1239.0,,128k,0.61,,mp4,,logos/new.gif,4.0,False,True,-0.22,jU1MgcbSpwA-6a91a8bcbb42936aa2585d0f893fe0a3,mp4,jU1MgcbSpwA-6a91a8bcbb42936aa2585d0f893fe0a3.mp4,jU1MgcbSpwA-6a91a8bcbb42936aa2585d0f893fe0a3.mp4 +1240,/datadrive/videos/NUDNiRciktc-ca8373974b2712e2aa8f1c206b913b51.webm,7c78db9b04654891a69b8b4f895dc6cb.webm,1240.0,,64k,0.48,,,,logos/fox.png,1.0,False,True,-0.26,NUDNiRciktc-ca8373974b2712e2aa8f1c206b913b51,webm,NUDNiRciktc-ca8373974b2712e2aa8f1c206b913b51.webm,NUDNiRciktc-ca8373974b2712e2aa8f1c206b913b51.webm +1241,/datadrive/videos/388YhYyB9j0-212602ef7381060d5ab0a099f6811a4d.mp4,1fe16156c5df4cb0957af8cf92e1b441.mp4,1241.0,,,,[0.04 0.19],,-0.08,,,False,False,,388YhYyB9j0-212602ef7381060d5ab0a099f6811a4d,mp4,388YhYyB9j0-212602ef7381060d5ab0a099f6811a4d.mp4,388YhYyB9j0-212602ef7381060d5ab0a099f6811a4d.mp4 +1242,/datadrive/videos/9oziuihslYw-4e40b91603b42b60ce2cf5cf1853ded1.webm,21987a954e504ea0a5e5bf37cebc17e1.webm,1242.0,False,64k,0.42,[0.13 0.12],,0.03,,,False,False,,9oziuihslYw-4e40b91603b42b60ce2cf5cf1853ded1,webm,9oziuihslYw-4e40b91603b42b60ce2cf5cf1853ded1.webm,9oziuihslYw-4e40b91603b42b60ce2cf5cf1853ded1.webm +1243,/datadrive/videos/lnZNiivm2zU-e1caaa59e5479f037914e52e0893cc6e.mp4,285554133cd14d82b8faac7d46fda24b.ogv,1243.0,False,,,[0.05 0.08],ogv,-0.2,,,False,True,-0.29,lnZNiivm2zU-e1caaa59e5479f037914e52e0893cc6e,mp4,lnZNiivm2zU-e1caaa59e5479f037914e52e0893cc6e.mp4,lnZNiivm2zU-e1caaa59e5479f037914e52e0893cc6e.mp4 +1244,/datadrive/videos/rWnAp4JX-Ms-3481ead696ab5fde7257d96937525f78.mp4,95bd9ae3cf9a46dbab81a00e06a7c1fa.mp4,1244.0,,16k,0.65,[0.16 0.01],,-0.2,,,False,True,0.19,rWnAp4JX-Ms-3481ead696ab5fde7257d96937525f78,mp4,rWnAp4JX-Ms-3481ead696ab5fde7257d96937525f78.mp4,rWnAp4JX-Ms-3481ead696ab5fde7257d96937525f78.mp4 +1246,/datadrive/videos/cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151.mp4,b55219c130a64df49a05c61b825efdc7.ogv,1246.0,,64k,0.48,[0.16 0.12],ogv,-0.05,logos/msnbc.png,6.0,False,True,,cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151,mp4,cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151.mp4,cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151.mp4 +1247,/datadrive/videos/OTDbLcgaRDw-a40ef27da83d7a4154187936a0d57cb3.mp4,30e2474995454da78108658606daa34f.mp4,1247.0,False,,,,,,,,False,True,,OTDbLcgaRDw-a40ef27da83d7a4154187936a0d57cb3,mp4,OTDbLcgaRDw-a40ef27da83d7a4154187936a0d57cb3.mp4,OTDbLcgaRDw-a40ef27da83d7a4154187936a0d57cb3.mp4 +1248,/datadrive/videos/MTPNi7VA7q8-2c2bfc76cff25de4bcf71237edaa4197.mp4,30503b015c5346c4974bbe1487131dab.mp4,1248.0,,64k,0.25,,,0.04,,0.0,False,True,0.39,MTPNi7VA7q8-2c2bfc76cff25de4bcf71237edaa4197,mp4,MTPNi7VA7q8-2c2bfc76cff25de4bcf71237edaa4197.mp4,MTPNi7VA7q8-2c2bfc76cff25de4bcf71237edaa4197.mp4 +1249,/datadrive/videos/kxqEZG4VCQA-dcce1eaca5a97099bbc5597dce604bde.webm,3849235c9ba2417b8ba795ee79e4c50e.webm,1249.0,,32k,0.85,,,0.09,logos/jazeera.png,,False,False,0.13,kxqEZG4VCQA-dcce1eaca5a97099bbc5597dce604bde,webm,kxqEZG4VCQA-dcce1eaca5a97099bbc5597dce604bde.webm,kxqEZG4VCQA-dcce1eaca5a97099bbc5597dce604bde.webm +1251,/datadrive/videos/7MgVTwPdVhY-996ab24298d94452b23b6d4dcc7eae87.webm,a8d0efb460894939a5431a1f023f8b5c.webm,1251.0,,64k,,,,0.03,,,False,False,,7MgVTwPdVhY-996ab24298d94452b23b6d4dcc7eae87,webm,7MgVTwPdVhY-996ab24298d94452b23b6d4dcc7eae87.webm,7MgVTwPdVhY-996ab24298d94452b23b6d4dcc7eae87.webm +1252,/datadrive/videos/LlhsCZDYUCY-2872246aa999af69871c3af1458bf96f.webm,cc405c4c856e46108ff20f183dc6680d.webm,1252.0,,,,[0.02 0.12],,,logos/new.gif,4.0,False,False,,LlhsCZDYUCY-2872246aa999af69871c3af1458bf96f,webm,LlhsCZDYUCY-2872246aa999af69871c3af1458bf96f.webm,LlhsCZDYUCY-2872246aa999af69871c3af1458bf96f.webm +1255,/datadrive/videos/yrZn5k6fAW0-163187afd80609c202de530fce616dd8.mp4,4eea0174172042deb37cea1a7df12c01.webm,1255.0,,128k,,[0.11 0.01],webm,,,,False,False,0.09,yrZn5k6fAW0-163187afd80609c202de530fce616dd8,mp4,yrZn5k6fAW0-163187afd80609c202de530fce616dd8.mp4,yrZn5k6fAW0-163187afd80609c202de530fce616dd8.mp4 +1256,/datadrive/videos/9RwGxC5HZCE-35af5340223d9b6ba84e5d29a3e1f37c.webm,08d34a33f4914970a1eaf689b6432452.ogv,1256.0,,16k,,,ogv,,,,False,True,,9RwGxC5HZCE-35af5340223d9b6ba84e5d29a3e1f37c,webm,9RwGxC5HZCE-35af5340223d9b6ba84e5d29a3e1f37c.webm,9RwGxC5HZCE-35af5340223d9b6ba84e5d29a3e1f37c.webm +1257,/datadrive/videos/H6q_C70KwpM-67595e0d7be55383e30bf0f4418dc9b3.mp4,1d1eab86971e4391a853078447332d69.mp4,1257.0,,64k,0.65,,mp4,0.12,logos/another.gif,6.0,False,False,0.0,H6q_C70KwpM-67595e0d7be55383e30bf0f4418dc9b3,mp4,H6q_C70KwpM-67595e0d7be55383e30bf0f4418dc9b3.mp4,H6q_C70KwpM-67595e0d7be55383e30bf0f4418dc9b3.mp4 +1258,/datadrive/videos/1Nmebjpwkks-249ed7e85cfe9a94c540116a32881b74.mp4,7fa5ede584714a619491c733f8005e2d.mp4,1258.0,False,16k,,[0.11 0.01],,-0.2,logos/download.png,,False,True,-0.24,1Nmebjpwkks-249ed7e85cfe9a94c540116a32881b74,mp4,1Nmebjpwkks-249ed7e85cfe9a94c540116a32881b74.mp4,1Nmebjpwkks-249ed7e85cfe9a94c540116a32881b74.mp4 +1261,/datadrive/videos/oCLB0i2RHWk-11b6a30b05ef282bc67180e14a7255e8.webm,717968f026014ad7a33f1fa20d7e330e.ogv,1261.0,,,0.57,[0.17 0.13],ogv,,logos/another.gif,7.0,False,False,,oCLB0i2RHWk-11b6a30b05ef282bc67180e14a7255e8,webm,oCLB0i2RHWk-11b6a30b05ef282bc67180e14a7255e8.webm,oCLB0i2RHWk-11b6a30b05ef282bc67180e14a7255e8.webm +1262,/datadrive/videos/_LWz35Kv220-26f138dd65a422243239fa221fcf66f8.webm,22b11a6010fe418aaaf637740118e805.mp4,1262.0,False,32k,,,mp4,,logos/fox.png,2.0,True,False,,_LWz35Kv220-26f138dd65a422243239fa221fcf66f8,webm,_LWz35Kv220-26f138dd65a422243239fa221fcf66f8.webm,_LWz35Kv220-26f138dd65a422243239fa221fcf66f8.webm +1263,/datadrive/videos/SCYHBEiOZ24-b4045faa79aa026b9d483635377cb95e.mp4,57aab2bf8adb44f28dfcb516b0524eae.webm,1263.0,False,,,,webm,0.06,,,False,False,0.24,SCYHBEiOZ24-b4045faa79aa026b9d483635377cb95e,mp4,SCYHBEiOZ24-b4045faa79aa026b9d483635377cb95e.mp4,SCYHBEiOZ24-b4045faa79aa026b9d483635377cb95e.mp4 +1264,/datadrive/videos/u4pBH-yCTaQ-4eb258489f8a91dcc90793d3758eeed4.webm,2b6231a49fb04e0ba05013eeb2f97658.webm,1264.0,,,0.39,,,-0.13,logos/ge.gif,,False,True,0.27,u4pBH-yCTaQ-4eb258489f8a91dcc90793d3758eeed4,webm,u4pBH-yCTaQ-4eb258489f8a91dcc90793d3758eeed4.webm,u4pBH-yCTaQ-4eb258489f8a91dcc90793d3758eeed4.webm +1265,/datadrive/videos/5DMCF2sKJpU-859bbc2976278ae50e91639fbc4bad77.webm,5806b5b37c05434fa3715e441bb84115.webm,1265.0,,,0.23,[0.14 0.13],webm,,logos/fox.png,0.0,False,True,,5DMCF2sKJpU-859bbc2976278ae50e91639fbc4bad77,webm,5DMCF2sKJpU-859bbc2976278ae50e91639fbc4bad77.webm,5DMCF2sKJpU-859bbc2976278ae50e91639fbc4bad77.webm +1266,/datadrive/videos/7VLNL2dpc8Y-b6505348715554f6cc04725da3f0d756.webm,aca059fd5cf449268baba97ee5952787.webm,1266.0,,,0.46,[0.18 0.07],,,logos/fox.png,7.0,True,True,-0.04,7VLNL2dpc8Y-b6505348715554f6cc04725da3f0d756,webm,7VLNL2dpc8Y-b6505348715554f6cc04725da3f0d756.webm,7VLNL2dpc8Y-b6505348715554f6cc04725da3f0d756.webm +1267,/datadrive/videos/jvC-ceOdkCE-3c748249f196d58f4313d10c2cf747fe.webm,0c00546c290543e489972e606727b291.webm,1267.0,True,128k,0.95,[0.16 0.11],,0.19,,,False,True,,jvC-ceOdkCE-3c748249f196d58f4313d10c2cf747fe,webm,jvC-ceOdkCE-3c748249f196d58f4313d10c2cf747fe.webm,jvC-ceOdkCE-3c748249f196d58f4313d10c2cf747fe.webm +1268,/datadrive/videos/LlhsCZDYUCY-2872246aa999af69871c3af1458bf96f.webm,95ec00af677947e1aa11f3c37811ab64.webm,1268.0,False,16k,,[0.03 0.11],,,logos/new.gif,9.0,False,False,,LlhsCZDYUCY-2872246aa999af69871c3af1458bf96f,webm,LlhsCZDYUCY-2872246aa999af69871c3af1458bf96f.webm,LlhsCZDYUCY-2872246aa999af69871c3af1458bf96f.webm +1269,/datadrive/videos/JdUdGSHbfl8-5f990d9a138f62056e554fd15ae55138.mp4,38200c73da16424091d7ea06ba7c2d48.webm,1269.0,False,128k,0.64,[0.17 0.01],webm,,,0.0,False,False,0.21,JdUdGSHbfl8-5f990d9a138f62056e554fd15ae55138,mp4,JdUdGSHbfl8-5f990d9a138f62056e554fd15ae55138.mp4,JdUdGSHbfl8-5f990d9a138f62056e554fd15ae55138.mp4 +1271,/datadrive/videos/vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3.webm,22f6e050c1f848e49716d6d79bfabf89.webm,1271.0,False,32k,,,webm,,,,False,False,-0.4,vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3,webm,vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3.webm,vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3.webm +1272,/datadrive/videos/epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124.mp4,26f70b466b4849baae6cc6ba1d32dcea.ogv,1272.0,,32k,,[0.15 0.09],ogv,-0.1,logos/ge.gif,7.0,False,True,0.33,epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124,mp4,epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124.mp4,epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124.mp4 +1273,/datadrive/videos/vjUPl67ViSo-b310490745395d5b186cab8e9d355365.webm,12bbb8b9cd78479484016e0fbabe1aae.mp4,1273.0,False,64k,,,mp4,0.1,logos/new.gif,,False,True,,vjUPl67ViSo-b310490745395d5b186cab8e9d355365,webm,vjUPl67ViSo-b310490745395d5b186cab8e9d355365.webm,vjUPl67ViSo-b310490745395d5b186cab8e9d355365.webm +1274,/datadrive/videos/DxhikT_riJk-3b3e85d1a3979eb5e55ab6a02fa4a46d.webm,3bd1626bdba34312a7c40893e4d0b777.mp4,1274.0,,,0.46,,mp4,,logos/ge.gif,0.0,False,False,-0.25,DxhikT_riJk-3b3e85d1a3979eb5e55ab6a02fa4a46d,webm,DxhikT_riJk-3b3e85d1a3979eb5e55ab6a02fa4a46d.webm,DxhikT_riJk-3b3e85d1a3979eb5e55ab6a02fa4a46d.webm +1275,/datadrive/videos/ZLutpyfWGhw-4faadac07395340244cde777b71345b4.mp4,7537078745f641e5b65f6d2af5e70eb7.mp4,1275.0,,64k,0.3,[0.06 0.11],,,,,False,False,,ZLutpyfWGhw-4faadac07395340244cde777b71345b4,mp4,ZLutpyfWGhw-4faadac07395340244cde777b71345b4.mp4,ZLutpyfWGhw-4faadac07395340244cde777b71345b4.mp4 +1276,/datadrive/videos/8bWrjGdeO7s-e94398b4c162a7497030a49a29904a48.mp4,a5fb254e91d54968877523d1a318691f.mp4,1276.0,False,64k,,[0.01 0.04],,,logos/download.png,,False,False,-0.37,8bWrjGdeO7s-e94398b4c162a7497030a49a29904a48,mp4,8bWrjGdeO7s-e94398b4c162a7497030a49a29904a48.mp4,8bWrjGdeO7s-e94398b4c162a7497030a49a29904a48.mp4 +1277,/datadrive/videos/58WkuhEVoo8-f586202d6e7a99c7aabad9ce5792f7bc.mp4,3b95a145dde44ea7a947a8897d0291b8.mp4,1277.0,,,0.84,,,,logos/another.gif,,True,True,0.36,58WkuhEVoo8-f586202d6e7a99c7aabad9ce5792f7bc,mp4,58WkuhEVoo8-f586202d6e7a99c7aabad9ce5792f7bc.mp4,58WkuhEVoo8-f586202d6e7a99c7aabad9ce5792f7bc.mp4 +1278,/datadrive/videos/xZ-J-7JYA-k-0450ba787f460134f321dc0761a8ede7.webm,1aea4c35715e4715881a3ecfa2ead228.mp4,1278.0,False,,,[0.13 0.03],mp4,-0.03,logos/sbt.gif,5.0,False,False,,xZ-J-7JYA-k-0450ba787f460134f321dc0761a8ede7,webm,xZ-J-7JYA-k-0450ba787f460134f321dc0761a8ede7.webm,xZ-J-7JYA-k-0450ba787f460134f321dc0761a8ede7.webm +1279,/datadrive/videos/nHCQbD7zQS8-5442cff41ff9f65aaecd45d9080ae75c.webm,0eb0bcf51eee4ae58a5bc10a2faf0c8c.ogv,1279.0,False,,,,ogv,0.13,,7.0,True,False,,nHCQbD7zQS8-5442cff41ff9f65aaecd45d9080ae75c,webm,nHCQbD7zQS8-5442cff41ff9f65aaecd45d9080ae75c.webm,nHCQbD7zQS8-5442cff41ff9f65aaecd45d9080ae75c.webm +1280,/datadrive/videos/2xbKw8RNFec-6748687a448a8dfaaf6c935ef76ca000.mp4,4590b58fde8a4274a0088977e61a74ca.mp4,1280.0,False,,0.32,[0.1 0.06],,0.11,,2.0,False,False,,2xbKw8RNFec-6748687a448a8dfaaf6c935ef76ca000,mp4,2xbKw8RNFec-6748687a448a8dfaaf6c935ef76ca000.mp4,2xbKw8RNFec-6748687a448a8dfaaf6c935ef76ca000.mp4 +1281,/datadrive/videos/zknrwyhCM5o-2d4f278df26cf39b0b87a64eab3a1b22.mp4,44230b17543b4a3283a472616452082c.mp4,1281.0,False,,,,,,,0.0,False,True,-0.21,zknrwyhCM5o-2d4f278df26cf39b0b87a64eab3a1b22,mp4,zknrwyhCM5o-2d4f278df26cf39b0b87a64eab3a1b22.mp4,zknrwyhCM5o-2d4f278df26cf39b0b87a64eab3a1b22.mp4 +1282,/datadrive/videos/69z5_AMLZ_U-19179ea7438ff5738cb6aebcf0ca2c54.webm,53e8221ecfa44237b2ca3ecf868ccef0.mp4,1282.0,True,,,,mp4,0.15,logos/new.gif,7.0,False,True,-0.34,69z5_AMLZ_U-19179ea7438ff5738cb6aebcf0ca2c54,webm,69z5_AMLZ_U-19179ea7438ff5738cb6aebcf0ca2c54.webm,69z5_AMLZ_U-19179ea7438ff5738cb6aebcf0ca2c54.webm +1283,/datadrive/videos/4LIuaLBTc40-00bf70264109019a3aa6cc45dd1f3b81.mp4,1162c21e9db74636ba756ff58a467d14.mp4,1283.0,,16k,0.57,[0.18 0.15],,,,,False,False,,4LIuaLBTc40-00bf70264109019a3aa6cc45dd1f3b81,mp4,4LIuaLBTc40-00bf70264109019a3aa6cc45dd1f3b81.mp4,4LIuaLBTc40-00bf70264109019a3aa6cc45dd1f3b81.mp4 +1285,/datadrive/videos/_tt2AuFPkFQ-90cfc13d966b7f512f0d6f0fe63cafd4.mp4,25f5743b84d648489fa0ecac044ee577.mp4,1285.0,,16k,,,mp4,,,0.0,True,True,,_tt2AuFPkFQ-90cfc13d966b7f512f0d6f0fe63cafd4,mp4,_tt2AuFPkFQ-90cfc13d966b7f512f0d6f0fe63cafd4.mp4,_tt2AuFPkFQ-90cfc13d966b7f512f0d6f0fe63cafd4.mp4 +1288,/datadrive/videos/0OC9onEjW8E-01d2801908a2730899dc91ae4f84dbe4.webm,b674513f16d14b8e95e50700f5aa3dea.webm,1288.0,True,,,[0.02 0.14],,0.04,,5.0,False,True,-0.21,0OC9onEjW8E-01d2801908a2730899dc91ae4f84dbe4,webm,0OC9onEjW8E-01d2801908a2730899dc91ae4f84dbe4.webm,0OC9onEjW8E-01d2801908a2730899dc91ae4f84dbe4.webm +1290,/datadrive/videos/qKc5JQCAZcU-74a5cfcda8884d787fb6553bd205baf4.webm,5cba0819b13e403bbd2c3a888b57532a.mp4,1290.0,False,16k,0.33,,mp4,,,,False,True,0.18,qKc5JQCAZcU-74a5cfcda8884d787fb6553bd205baf4,webm,qKc5JQCAZcU-74a5cfcda8884d787fb6553bd205baf4.webm,qKc5JQCAZcU-74a5cfcda8884d787fb6553bd205baf4.webm +1292,/datadrive/videos/TgEbbtClZ-8-4999d89222d3543c8ac97e65bfbc0a0a.webm,8227a73c12d7453aa101337fb4e4db13.webm,1292.0,False,128k,0.74,,,,,4.0,False,False,,TgEbbtClZ-8-4999d89222d3543c8ac97e65bfbc0a0a,webm,TgEbbtClZ-8-4999d89222d3543c8ac97e65bfbc0a0a.webm,TgEbbtClZ-8-4999d89222d3543c8ac97e65bfbc0a0a.webm +1293,/datadrive/videos/jr6oGoqDEfI-8842ae65a03a5bdb8c23e78509adb4b1.mp4,1804b9440b184d89bf98ae1c6b90c1ee.webm,1293.0,,128k,,,webm,,,3.0,False,True,,jr6oGoqDEfI-8842ae65a03a5bdb8c23e78509adb4b1,mp4,jr6oGoqDEfI-8842ae65a03a5bdb8c23e78509adb4b1.mp4,jr6oGoqDEfI-8842ae65a03a5bdb8c23e78509adb4b1.mp4 +1294,/datadrive/videos/ZM21QyrcIjY-28b7fade4f572a0f8c8db3a13b2c8231.webm,09a47ebb46344fe992c0b00366650113.mp4,1294.0,False,64k,0.27,,mp4,,,4.0,False,False,,ZM21QyrcIjY-28b7fade4f572a0f8c8db3a13b2c8231,webm,ZM21QyrcIjY-28b7fade4f572a0f8c8db3a13b2c8231.webm,ZM21QyrcIjY-28b7fade4f572a0f8c8db3a13b2c8231.webm +1295,/datadrive/videos/2rVMZFVmBwM-7e503fe3e171e26fe92f7fc5e54be5dc.webm,8df625bd8e0b493b93c35e5f90f87df0.webm,1295.0,,32k,0.53,,,,logos/ge.gif,,False,False,0.26,2rVMZFVmBwM-7e503fe3e171e26fe92f7fc5e54be5dc,webm,2rVMZFVmBwM-7e503fe3e171e26fe92f7fc5e54be5dc.webm,2rVMZFVmBwM-7e503fe3e171e26fe92f7fc5e54be5dc.webm +1296,/datadrive/videos/uFybM4QdNXE-24b42959a805fdab20e1e2e2bd48bd0c.webm,8ad5aa7f369448c5b3cad118798ad4de.webm,1296.0,False,128k,,[0.03 0.13],webm,0.02,logos/ge.gif,,False,False,,uFybM4QdNXE-24b42959a805fdab20e1e2e2bd48bd0c,webm,uFybM4QdNXE-24b42959a805fdab20e1e2e2bd48bd0c.webm,uFybM4QdNXE-24b42959a805fdab20e1e2e2bd48bd0c.webm +1297,/datadrive/videos/to4EPnA0M1I-27d192cf22f44036fc428facf398c0eb.webm,324c48a2fca54d01a270b5b1fd0c8534.webm,1297.0,,,0.85,,,,logos/ge.gif,6.0,False,False,-0.27,to4EPnA0M1I-27d192cf22f44036fc428facf398c0eb,webm,to4EPnA0M1I-27d192cf22f44036fc428facf398c0eb.webm,to4EPnA0M1I-27d192cf22f44036fc428facf398c0eb.webm +1298,/datadrive/videos/cPhgK3xXL6U-ae84fffecf22d7866f87aabef0fdbb1c.webm,70f48e47e0bb463fa79a437c94df2f27.webm,1298.0,True,64k,0.74,[0.04 0.19],webm,-0.04,logos/jazeera.png,1.0,False,False,-0.06,cPhgK3xXL6U-ae84fffecf22d7866f87aabef0fdbb1c,webm,cPhgK3xXL6U-ae84fffecf22d7866f87aabef0fdbb1c.webm,cPhgK3xXL6U-ae84fffecf22d7866f87aabef0fdbb1c.webm +1300,/datadrive/videos/wwACdMZCDEU-bb61490d742154216b9259cc0226705e.mp4,a69f139e06f14fdeb1bacc7a390ef22d.mp4,1300.0,,128k,0.67,,mp4,-0.17,logos/another.gif,,False,False,0.39,wwACdMZCDEU-bb61490d742154216b9259cc0226705e,mp4,wwACdMZCDEU-bb61490d742154216b9259cc0226705e.mp4,wwACdMZCDEU-bb61490d742154216b9259cc0226705e.mp4 +1302,/datadrive/videos/orHJUtltQy0-dced690a7dd18894605e30bae842c208.mp4,05e4559be92943c7b449ce398d2a9282.mp4,1302.0,False,128k,,[0.09 0.04],,,logos/jazeera.png,,False,True,,orHJUtltQy0-dced690a7dd18894605e30bae842c208,mp4,orHJUtltQy0-dced690a7dd18894605e30bae842c208.mp4,orHJUtltQy0-dced690a7dd18894605e30bae842c208.mp4 +1305,/datadrive/videos/Rz1ME5tZPMw-d976b78ae2209c9de020a9f8e5746767.mp4,b6f2f5ae13fc4d00b30a67f443f709a5.mp4,1305.0,True,64k,,,,-0.04,logos/another.gif,0.0,False,True,,Rz1ME5tZPMw-d976b78ae2209c9de020a9f8e5746767,mp4,Rz1ME5tZPMw-d976b78ae2209c9de020a9f8e5746767.mp4,Rz1ME5tZPMw-d976b78ae2209c9de020a9f8e5746767.mp4 +1306,/datadrive/videos/nyia9UqpBnc-19fe4eab9ffa2ac395045a7320550fed.mp4,9173eb9a1b854c7baae3e64adcbe5789.mp4,1306.0,True,,,,,0.16,logos/fox.png,3.0,False,True,0.3,nyia9UqpBnc-19fe4eab9ffa2ac395045a7320550fed,mp4,nyia9UqpBnc-19fe4eab9ffa2ac395045a7320550fed.mp4,nyia9UqpBnc-19fe4eab9ffa2ac395045a7320550fed.mp4 +1307,/datadrive/videos/cXOP-JBfmZk-b10ffa1418e84de81f0e1a7138d9d8b6.webm,ff5b40facda44d99a93af6996e873a97.webm,1307.0,,,0.91,,,,,,False,False,,cXOP-JBfmZk-b10ffa1418e84de81f0e1a7138d9d8b6,webm,cXOP-JBfmZk-b10ffa1418e84de81f0e1a7138d9d8b6.webm,cXOP-JBfmZk-b10ffa1418e84de81f0e1a7138d9d8b6.webm +1308,/datadrive/videos/nPY5ISSfyWE-554c6dcebf2e312eddb407b07f1ea643.webm,9fd22655eb534b688621427e9dd67284.webm,1308.0,,,0.66,,,,,2.0,False,True,,nPY5ISSfyWE-554c6dcebf2e312eddb407b07f1ea643,webm,nPY5ISSfyWE-554c6dcebf2e312eddb407b07f1ea643.webm,nPY5ISSfyWE-554c6dcebf2e312eddb407b07f1ea643.webm +1309,/datadrive/videos/GJSNLkfa6YE-7a1701fab7ad27e59a0f0a0256a6c2c2.webm,163b18b81ed646f0a85878eeb1c0d022.mp4,1309.0,,,0.32,[0.08 0.04],mp4,-0.07,logos/jazeera.png,4.0,False,False,,GJSNLkfa6YE-7a1701fab7ad27e59a0f0a0256a6c2c2,webm,GJSNLkfa6YE-7a1701fab7ad27e59a0f0a0256a6c2c2.webm,GJSNLkfa6YE-7a1701fab7ad27e59a0f0a0256a6c2c2.webm +1310,/datadrive/videos/cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151.mp4,64fa07196f9d417992a8529c4a999d6d.webm,1310.0,,64k,0.97,[0.13 0.14],webm,-0.12,,,False,False,,cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151,mp4,cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151.mp4,cW51HiyRXTk-102421b7f08102d49fa0d2ba8e792151.mp4 +1312,/datadrive/videos/fWalK1qACko-47db43b3b263432bbff0f544b0ba5123.webm,7f7dec8c146d4c6083f4c67c0106d863.mp4,1312.0,True,32k,0.68,[0.02 0.05],mp4,0.0,logos/openair.gif,,False,True,0.39,fWalK1qACko-47db43b3b263432bbff0f544b0ba5123,webm,fWalK1qACko-47db43b3b263432bbff0f544b0ba5123.webm,fWalK1qACko-47db43b3b263432bbff0f544b0ba5123.webm +1313,/datadrive/videos/GFr9jdSA9v4-cb430ee52fe6d44d43e4fe9686b99507.mp4,d7b39f12c47c4fd1874f8cfec6183cf2.mp4,1313.0,,,0.41,,,,logos/jazeera.png,8.0,False,False,,GFr9jdSA9v4-cb430ee52fe6d44d43e4fe9686b99507,mp4,GFr9jdSA9v4-cb430ee52fe6d44d43e4fe9686b99507.mp4,GFr9jdSA9v4-cb430ee52fe6d44d43e4fe9686b99507.mp4 +1315,/datadrive/videos/9oziuihslYw-4e40b91603b42b60ce2cf5cf1853ded1.webm,2aca3084bf0240c087fe2b0899808527.mp4,1315.0,False,,,[0.14 0.03],mp4,-0.14,,,False,True,-0.13,9oziuihslYw-4e40b91603b42b60ce2cf5cf1853ded1,webm,9oziuihslYw-4e40b91603b42b60ce2cf5cf1853ded1.webm,9oziuihslYw-4e40b91603b42b60ce2cf5cf1853ded1.webm +1316,/datadrive/videos/T0zM1wDE1SI-164ef61be7be9f7b99b50a6d6569e47a.webm,07f5fce417f24f20a0639e6c5a8b205d.webm,1316.0,False,,0.34,,,0.09,logos/download.png,7.0,False,True,,T0zM1wDE1SI-164ef61be7be9f7b99b50a6d6569e47a,webm,T0zM1wDE1SI-164ef61be7be9f7b99b50a6d6569e47a.webm,T0zM1wDE1SI-164ef61be7be9f7b99b50a6d6569e47a.webm +1317,/datadrive/videos/0Hz2L1V_ICo-2b4ff8776f4d0ad2fc8e99de9b1092d5.mp4,b703bd9ad3bf4145b35094c9a7efb950.webm,1317.0,False,32k,0.33,,webm,,,1.0,False,False,,0Hz2L1V_ICo-2b4ff8776f4d0ad2fc8e99de9b1092d5,mp4,0Hz2L1V_ICo-2b4ff8776f4d0ad2fc8e99de9b1092d5.mp4,0Hz2L1V_ICo-2b4ff8776f4d0ad2fc8e99de9b1092d5.mp4 +1318,/datadrive/videos/NrwFznxqH_M-6aa02c3aaff875c79795958e8d622e2a.webm,31d10cf3422f415299d0061d19991454.mp4,1318.0,,,0.91,,mp4,0.19,,8.0,False,True,,NrwFznxqH_M-6aa02c3aaff875c79795958e8d622e2a,webm,NrwFznxqH_M-6aa02c3aaff875c79795958e8d622e2a.webm,NrwFznxqH_M-6aa02c3aaff875c79795958e8d622e2a.webm +1321,/datadrive/videos/5O9mAuV217k-43007247e8a07168206c59b471770d3f.mp4,0bbc1ebbb5f849738eccebb2376705db.mp4,1321.0,True,128k,0.26,[0.09 0.17],,,logos/another.gif,,False,True,-0.11,5O9mAuV217k-43007247e8a07168206c59b471770d3f,mp4,5O9mAuV217k-43007247e8a07168206c59b471770d3f.mp4,5O9mAuV217k-43007247e8a07168206c59b471770d3f.mp4 +1323,/datadrive/videos/b13N1OynhKc-8ba8335804047a8fdb910138dfea8c5b.webm,22a92ddbe67848a5947193892ccc0b9a.webm,1323.0,,64k,0.8,,webm,,logos/new.gif,,False,False,,b13N1OynhKc-8ba8335804047a8fdb910138dfea8c5b,webm,b13N1OynhKc-8ba8335804047a8fdb910138dfea8c5b.webm,b13N1OynhKc-8ba8335804047a8fdb910138dfea8c5b.webm +1324,/datadrive/videos/HhBaxVxyVDw-e1c51bb2eb338aefc321ec82f3990177.webm,40f39ea60d11407ab0c065b8d79f83ef.mp4,1324.0,,,,,mp4,,logos/msnbc.png,,False,False,,HhBaxVxyVDw-e1c51bb2eb338aefc321ec82f3990177,webm,HhBaxVxyVDw-e1c51bb2eb338aefc321ec82f3990177.webm,HhBaxVxyVDw-e1c51bb2eb338aefc321ec82f3990177.webm +1325,/datadrive/videos/VaO-OpFPg2A-0eee60c766905dd04230864eee939e21.mp4,af100ac501254e4ea882976dc739b5dd.mp4,1325.0,,16k,0.8,[0.01 0.11],,,,,False,True,,VaO-OpFPg2A-0eee60c766905dd04230864eee939e21,mp4,VaO-OpFPg2A-0eee60c766905dd04230864eee939e21.mp4,VaO-OpFPg2A-0eee60c766905dd04230864eee939e21.mp4 +1326,/datadrive/videos/CqTBTeSi3XA-8f158f2ebb7ac0ae2be60ffbb7c42226.webm,c6799193e3b249e581147d98fda188ef.webm,1326.0,,32k,0.42,[0.02 0.03],,0.13,,,True,False,,CqTBTeSi3XA-8f158f2ebb7ac0ae2be60ffbb7c42226,webm,CqTBTeSi3XA-8f158f2ebb7ac0ae2be60ffbb7c42226.webm,CqTBTeSi3XA-8f158f2ebb7ac0ae2be60ffbb7c42226.webm +1327,/datadrive/videos/MAxuihfpanU-4c3ed36d91d64bb4750d56533a0cd8ef.webm,769a02493ea5482aa0f8b6c898f089d6.ogv,1327.0,,64k,0.32,[0.02 0.17],ogv,,logos/msnbc.png,,False,True,-0.18,MAxuihfpanU-4c3ed36d91d64bb4750d56533a0cd8ef,webm,MAxuihfpanU-4c3ed36d91d64bb4750d56533a0cd8ef.webm,MAxuihfpanU-4c3ed36d91d64bb4750d56533a0cd8ef.webm +1328,/datadrive/videos/RU7-9l71zWs-e2a2099fd673e8874930816fb8fe387f.mp4,6b39b5afbf344317a74cd0813e417e0a.mp4,1328.0,False,,,,,,,,False,False,-0.02,RU7-9l71zWs-e2a2099fd673e8874930816fb8fe387f,mp4,RU7-9l71zWs-e2a2099fd673e8874930816fb8fe387f.mp4,RU7-9l71zWs-e2a2099fd673e8874930816fb8fe387f.mp4 +1330,/datadrive/videos/rLQgyxeRx40-c1ceec9a935c550f87fbf8fd871e17f7.webm,b3ee28ff45cc45c78202066ce2244b64.webm,1330.0,False,,,,,,,3.0,False,True,,rLQgyxeRx40-c1ceec9a935c550f87fbf8fd871e17f7,webm,rLQgyxeRx40-c1ceec9a935c550f87fbf8fd871e17f7.webm,rLQgyxeRx40-c1ceec9a935c550f87fbf8fd871e17f7.webm +1331,/datadrive/videos/67QrYGbt380-97e66b06c5ed50bc674c625e13f70750.webm,d5313d3896994f1996340d112a458412.webm,1331.0,,,,,,0.05,logos/ge.gif,,False,True,,67QrYGbt380-97e66b06c5ed50bc674c625e13f70750,webm,67QrYGbt380-97e66b06c5ed50bc674c625e13f70750.webm,67QrYGbt380-97e66b06c5ed50bc674c625e13f70750.webm +1332,/datadrive/videos/QIfx1ZYe628-8603acb0022bec43756b868ca67b888f.webm,2e40cb2fe74e4d9db5e1eb9efdf85d91.webm,1332.0,False,,0.21,,,0.0,logos/sbt.gif,,False,False,,QIfx1ZYe628-8603acb0022bec43756b868ca67b888f,webm,QIfx1ZYe628-8603acb0022bec43756b868ca67b888f.webm,QIfx1ZYe628-8603acb0022bec43756b868ca67b888f.webm +1333,/datadrive/videos/0ZTSdgnO5FE-99007cd3f88dc54ee6c325948d73593e.webm,98f34cddd7d7445ead6eaf55a14a2f43.ogv,1333.0,False,32k,,,ogv,0.03,,,True,True,0.32,0ZTSdgnO5FE-99007cd3f88dc54ee6c325948d73593e,webm,0ZTSdgnO5FE-99007cd3f88dc54ee6c325948d73593e.webm,0ZTSdgnO5FE-99007cd3f88dc54ee6c325948d73593e.webm +1334,/datadrive/videos/v-UeWnG0bJE-facda9040edbb245fab3a99af44eb5e9.webm,76ef6632876c4d10a358db513126f8d4.webm,1334.0,True,,0.39,[0.16 0.01],,0.01,,9.0,False,False,0.13,v-UeWnG0bJE-facda9040edbb245fab3a99af44eb5e9,webm,v-UeWnG0bJE-facda9040edbb245fab3a99af44eb5e9.webm,v-UeWnG0bJE-facda9040edbb245fab3a99af44eb5e9.webm +1335,/datadrive/videos/4hUEzMxmCYs-062ed9380b05490ac97d6c23e0718e92.webm,984898fa35df4452b0d5307b6711a586.webm,1335.0,,,,,,-0.12,,0.0,False,False,,4hUEzMxmCYs-062ed9380b05490ac97d6c23e0718e92,webm,4hUEzMxmCYs-062ed9380b05490ac97d6c23e0718e92.webm,4hUEzMxmCYs-062ed9380b05490ac97d6c23e0718e92.webm +1336,/datadrive/videos/XC90YmJKh_A-78427d539ebd4d5b835b1cadbefe5947.webm,0de43d41e4ca4715af5c8d100f0ef975.webm,1336.0,False,,0.51,[0.09 0.08],,0.02,,,False,False,,XC90YmJKh_A-78427d539ebd4d5b835b1cadbefe5947,webm,XC90YmJKh_A-78427d539ebd4d5b835b1cadbefe5947.webm,XC90YmJKh_A-78427d539ebd4d5b835b1cadbefe5947.webm +1337,/datadrive/videos/XJOS2IQdoVo-6c2977820952b57f161930c5a8ba773d.webm,97bf89bc10b54bfd825f9ad77c0c44d9.webm,1337.0,True,,0.65,[0.08 0.19],,-0.14,logos/jazeera.png,7.0,False,False,,XJOS2IQdoVo-6c2977820952b57f161930c5a8ba773d,webm,XJOS2IQdoVo-6c2977820952b57f161930c5a8ba773d.webm,XJOS2IQdoVo-6c2977820952b57f161930c5a8ba773d.webm +1338,/datadrive/videos/ltvIsHIhQHQ-2ad384426f5380727463425a17100f92.webm,7b10da29065f4ea39ac27e3564276774.ogv,1338.0,False,,0.52,[0.15 0.05],ogv,0.15,,,True,False,-0.04,ltvIsHIhQHQ-2ad384426f5380727463425a17100f92,webm,ltvIsHIhQHQ-2ad384426f5380727463425a17100f92.webm,ltvIsHIhQHQ-2ad384426f5380727463425a17100f92.webm +1339,/datadrive/videos/pqSrJgQ0WHk-6b18c1ea1060a12ba6b7b224aec32c7c.webm,22b51220125a41f793f226b2b2445205.ogv,1339.0,,128k,,,ogv,0.04,,,False,False,-0.25,pqSrJgQ0WHk-6b18c1ea1060a12ba6b7b224aec32c7c,webm,pqSrJgQ0WHk-6b18c1ea1060a12ba6b7b224aec32c7c.webm,pqSrJgQ0WHk-6b18c1ea1060a12ba6b7b224aec32c7c.webm +1340,/datadrive/videos/lca6eT9nO3E-76afc8a7546dada8151484990f389069.webm,6e344207f37c4db6aa00e5a39b5bcb22.webm,1340.0,False,,,[0.14 0.15],,0.1,,6.18,False,True,-0.38,lca6eT9nO3E-76afc8a7546dada8151484990f389069,webm,lca6eT9nO3E-76afc8a7546dada8151484990f389069.webm,lca6eT9nO3E-76afc8a7546dada8151484990f389069.webm +1341,/datadrive/videos/nSQDf3tN1I8-3dd1a5a3fb8b24b03224869cfa7d7809.webm,35c4c320db964952a92aaa7ffe085abb.webm,1341.0,True,16k,,[0.09 0.05],,,logos/ge.gif,6.0,False,True,0.2,nSQDf3tN1I8-3dd1a5a3fb8b24b03224869cfa7d7809,webm,nSQDf3tN1I8-3dd1a5a3fb8b24b03224869cfa7d7809.webm,nSQDf3tN1I8-3dd1a5a3fb8b24b03224869cfa7d7809.webm +1343,/datadrive/videos/O8Zb4sN4omI-52f4f37139e851c0bf7455ff99d6a925.mp4,06b26ca3216e46579b3fa221c9615f09.webm,1343.0,,,0.82,[0.08 0.14],webm,,logos/jazeera.png,0.0,True,False,,O8Zb4sN4omI-52f4f37139e851c0bf7455ff99d6a925,mp4,O8Zb4sN4omI-52f4f37139e851c0bf7455ff99d6a925.mp4,O8Zb4sN4omI-52f4f37139e851c0bf7455ff99d6a925.mp4 +1346,/datadrive/videos/SoQB35MA4cQ-9125c7f196154e8f92caaed86fde4ccf.mp4,868b988dc04646669dc4d1b7c0fc955e.webm,1346.0,,32k,0.72,,webm,0.18,logos/jazeera.png,7.0,False,True,,SoQB35MA4cQ-9125c7f196154e8f92caaed86fde4ccf,mp4,SoQB35MA4cQ-9125c7f196154e8f92caaed86fde4ccf.mp4,SoQB35MA4cQ-9125c7f196154e8f92caaed86fde4ccf.mp4 +1347,/datadrive/videos/GhmiBQWoT0Y-9ba30d949fae62dfc38da4dffe6563a3.webm,87b6224efbb54e67b16a43e66f0058b9.webm,1347.0,,64k,0.46,,,0.16,,,False,False,0.03,GhmiBQWoT0Y-9ba30d949fae62dfc38da4dffe6563a3,webm,GhmiBQWoT0Y-9ba30d949fae62dfc38da4dffe6563a3.webm,GhmiBQWoT0Y-9ba30d949fae62dfc38da4dffe6563a3.webm +1348,/datadrive/videos/4n3IQZ_v6Q0-08342b20e54cdb8c1f59c9f5e1b3e45b.mp4,270c8cd410be44bea0d1608cd3f9a91c.mp4,1348.0,,32k,0.46,,,-0.19,,3.0,False,True,,4n3IQZ_v6Q0-08342b20e54cdb8c1f59c9f5e1b3e45b,mp4,4n3IQZ_v6Q0-08342b20e54cdb8c1f59c9f5e1b3e45b.mp4,4n3IQZ_v6Q0-08342b20e54cdb8c1f59c9f5e1b3e45b.mp4 +1349,/datadrive/videos/S9hvQli9UsM-472c638d47247e8835c871fd92b5fe0d.webm,4c5572b7a0de46788987b5e4b8524cf4.webm,1349.0,,,,,,,logos/jazeera.png,3.0,False,False,0.24,S9hvQli9UsM-472c638d47247e8835c871fd92b5fe0d,webm,S9hvQli9UsM-472c638d47247e8835c871fd92b5fe0d.webm,S9hvQli9UsM-472c638d47247e8835c871fd92b5fe0d.webm +1350,/datadrive/videos/E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d.mp4,8d0daceb99e5473da7a5f1df06123b2e.mp4,1350.0,,,,[0.18 0.07],mp4,,,,False,False,-0.31,E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d,mp4,E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d.mp4,E6B3Hwsd5mM-f743130db139c5722a3a610dccf88b7d.mp4 +1351,/datadrive/videos/cXmW3cw4MHg-a50eddbec62d2845fc975feeb3c37ce7.webm,7978891c51084b47a6d712eb4bb0540f.mp4,1351.0,,,0.55,,mp4,0.11,logos/download.png,6.0,False,False,,cXmW3cw4MHg-a50eddbec62d2845fc975feeb3c37ce7,webm,cXmW3cw4MHg-a50eddbec62d2845fc975feeb3c37ce7.webm,cXmW3cw4MHg-a50eddbec62d2845fc975feeb3c37ce7.webm +1352,/datadrive/videos/FKkEi0ybl6Y-61e4a598a1af84910923ff7988955eff.mp4,511076ced93b41e393d77a150212cbb7.mp4,1352.0,,,,[0.06 0.15],,0.03,,6.0,False,False,,FKkEi0ybl6Y-61e4a598a1af84910923ff7988955eff,mp4,FKkEi0ybl6Y-61e4a598a1af84910923ff7988955eff.mp4,FKkEi0ybl6Y-61e4a598a1af84910923ff7988955eff.mp4 +1353,/datadrive/videos/pOiYsK6GW4U-1a7e68abee7b38ea01efd2fcf0a172a9.webm,c034458bedc94f68b81ec070ebe38f42.webm,1353.0,True,32k,0.76,[0.08 0.04],,,,3.0,False,True,0.02,pOiYsK6GW4U-1a7e68abee7b38ea01efd2fcf0a172a9,webm,pOiYsK6GW4U-1a7e68abee7b38ea01efd2fcf0a172a9.webm,pOiYsK6GW4U-1a7e68abee7b38ea01efd2fcf0a172a9.webm +1354,/datadrive/videos/25W9oFC7Dk8-829dd924d6c87093479a107842f26812.webm,a111651bc6284774906080d588791781.webm,1354.0,False,,0.36,[0.07 0.08],webm,-0.19,,,False,True,0.13,25W9oFC7Dk8-829dd924d6c87093479a107842f26812,webm,25W9oFC7Dk8-829dd924d6c87093479a107842f26812.webm,25W9oFC7Dk8-829dd924d6c87093479a107842f26812.webm +1355,/datadrive/videos/YgY26oQjFsc-a2374b6cfb94d875f55af632df949c90.mp4,9776b88eefde40c781bc103526478803.mp4,1355.0,False,,0.58,,,,logos/openair.gif,5.0,False,False,-0.12,YgY26oQjFsc-a2374b6cfb94d875f55af632df949c90,mp4,YgY26oQjFsc-a2374b6cfb94d875f55af632df949c90.mp4,YgY26oQjFsc-a2374b6cfb94d875f55af632df949c90.mp4 +1356,/datadrive/videos/lAwYcNky-uk-4e8b7aaced7cc2e8f6e146e9eb47a803.mp4,118dfc2e7bbd4a7c9bc672d6f0a5eb5b.mp4,1356.0,,16k,0.31,,,,,,False,False,,lAwYcNky-uk-4e8b7aaced7cc2e8f6e146e9eb47a803,mp4,lAwYcNky-uk-4e8b7aaced7cc2e8f6e146e9eb47a803.mp4,lAwYcNky-uk-4e8b7aaced7cc2e8f6e146e9eb47a803.mp4 +1357,/datadrive/videos/nrlWbbPZXOs-639c22fa6f2494873904e80f49d98920.webm,51c0162635f9438aaaabe7590541349b.mp4,1357.0,False,,,,mp4,,,5.0,False,False,0.2,nrlWbbPZXOs-639c22fa6f2494873904e80f49d98920,webm,nrlWbbPZXOs-639c22fa6f2494873904e80f49d98920.webm,nrlWbbPZXOs-639c22fa6f2494873904e80f49d98920.webm +1358,/datadrive/videos/CgEePiaBJeA-0f8aa57f8f0a254512076c893d7a8002.webm,73cbc8831be24b188f2c55f0d009898e.webm,1358.0,,128k,0.86,[0.18 0.09],webm,-0.06,,,False,False,-0.15,CgEePiaBJeA-0f8aa57f8f0a254512076c893d7a8002,webm,CgEePiaBJeA-0f8aa57f8f0a254512076c893d7a8002.webm,CgEePiaBJeA-0f8aa57f8f0a254512076c893d7a8002.webm +1359,/datadrive/videos/UJF0Q00Jbmg-584dcfbf73f0972b51e4ca18c83659e3.mp4,91a7e4af58d44db288d440b4d6963335.webm,1359.0,,64k,0.67,,webm,,,,True,True,-0.2,UJF0Q00Jbmg-584dcfbf73f0972b51e4ca18c83659e3,mp4,UJF0Q00Jbmg-584dcfbf73f0972b51e4ca18c83659e3.mp4,UJF0Q00Jbmg-584dcfbf73f0972b51e4ca18c83659e3.mp4 +1360,/datadrive/videos/cExnmHA2_pA-20c67d49bca31877a4e6ee84b039d687.webm,896c315bb70e45828a1a38522eeedbb8.webm,1360.0,,,0.79,[0.18 0.05],,0.14,,,False,True,,cExnmHA2_pA-20c67d49bca31877a4e6ee84b039d687,webm,cExnmHA2_pA-20c67d49bca31877a4e6ee84b039d687.webm,cExnmHA2_pA-20c67d49bca31877a4e6ee84b039d687.webm +1362,/datadrive/videos/h0908EoudUQ-1156419ecc446e79747a4964cfb250c3.webm,094fd71dfd4a4514b64134fb16013eaa.webm,1362.0,False,,0.6,[0.08 0.01],,,,,False,False,0.01,h0908EoudUQ-1156419ecc446e79747a4964cfb250c3,webm,h0908EoudUQ-1156419ecc446e79747a4964cfb250c3.webm,h0908EoudUQ-1156419ecc446e79747a4964cfb250c3.webm +1363,/datadrive/videos/uBpM9JOItVs-59013a0702ada77d8f84c5e4cb68badb.mp4,8f3baa357dde4442adb69abe786ded34.mp4,1363.0,,16k,0.85,[0.17 0.11],,-0.18,logos/sbt.gif,,False,False,0.22,uBpM9JOItVs-59013a0702ada77d8f84c5e4cb68badb,mp4,uBpM9JOItVs-59013a0702ada77d8f84c5e4cb68badb.mp4,uBpM9JOItVs-59013a0702ada77d8f84c5e4cb68badb.mp4 +1364,/datadrive/videos/d3kOriEJzpE-59f64f423839e0aac237dccfd52d0b09.webm,5371a3265ee242c8ad0674f1d438cd0b.ogv,1364.0,,64k,,[0.14 0.04],ogv,,,5.0,False,True,0.14,d3kOriEJzpE-59f64f423839e0aac237dccfd52d0b09,webm,d3kOriEJzpE-59f64f423839e0aac237dccfd52d0b09.webm,d3kOriEJzpE-59f64f423839e0aac237dccfd52d0b09.webm +1365,/datadrive/videos/kOLQ_gSwGug-9d16f19f4a4a0c1ea2a4f6c36c203eda.mp4,72aa4d55509e45589ad98f44a57da44d.mp4,1365.0,False,128k,0.41,[0.01 0.07],,,logos/fox.png,,False,True,,kOLQ_gSwGug-9d16f19f4a4a0c1ea2a4f6c36c203eda,mp4,kOLQ_gSwGug-9d16f19f4a4a0c1ea2a4f6c36c203eda.mp4,kOLQ_gSwGug-9d16f19f4a4a0c1ea2a4f6c36c203eda.mp4 +1366,/datadrive/videos/s0jCZefsilQ-04951dae91f182636dfe294a2f830f95.webm,65bdfeb5b0524cecbf9295341f0dc922.webm,1366.0,,16k,,,,0.17,logos/fox.png,,False,True,,s0jCZefsilQ-04951dae91f182636dfe294a2f830f95,webm,s0jCZefsilQ-04951dae91f182636dfe294a2f830f95.webm,s0jCZefsilQ-04951dae91f182636dfe294a2f830f95.webm +1367,/datadrive/videos/7w1dfvReCJs-8d6f44cdb5be3bc8f8e6f5f80d2cdc33.mp4,3e2ed8546aa44d17becfc9e251358f74.ogv,1367.0,False,128k,,[0.14 0.01],ogv,0.12,,,False,False,0.21,7w1dfvReCJs-8d6f44cdb5be3bc8f8e6f5f80d2cdc33,mp4,7w1dfvReCJs-8d6f44cdb5be3bc8f8e6f5f80d2cdc33.mp4,7w1dfvReCJs-8d6f44cdb5be3bc8f8e6f5f80d2cdc33.mp4 +1370,/datadrive/videos/GvuFbXDjdDA-919edd515c7934474d3309e5c61e69e2.mp4,167155a52cfb4f6389704fe7c504b26a.ogv,1370.0,True,32k,,,ogv,-0.08,logos/jazeera.png,3.0,False,True,,GvuFbXDjdDA-919edd515c7934474d3309e5c61e69e2,mp4,GvuFbXDjdDA-919edd515c7934474d3309e5c61e69e2.mp4,GvuFbXDjdDA-919edd515c7934474d3309e5c61e69e2.mp4 +1371,/datadrive/videos/RJjqlIM7_jo-02d505846cd69073929d60ad4223e101.webm,2fc6e0b7a9f94cde86174f760238d091.mp4,1371.0,False,,,,mp4,,logos/ge.gif,,False,True,,RJjqlIM7_jo-02d505846cd69073929d60ad4223e101,webm,RJjqlIM7_jo-02d505846cd69073929d60ad4223e101.webm,RJjqlIM7_jo-02d505846cd69073929d60ad4223e101.webm +1372,/datadrive/videos/LLdyu3Nso9A-4001e4e3d9984bc80d5cf33b68a56a20.mp4,84e9dedb47794d08b5fa8b118156fdc9.mp4,1372.0,,128k,,[0.08 0.06],,,,9.0,True,False,0.1,LLdyu3Nso9A-4001e4e3d9984bc80d5cf33b68a56a20,mp4,LLdyu3Nso9A-4001e4e3d9984bc80d5cf33b68a56a20.mp4,LLdyu3Nso9A-4001e4e3d9984bc80d5cf33b68a56a20.mp4 +1374,/datadrive/videos/zUtEpn9RKtE-c314317ca5d69d30d798660c9d1139a8.mp4,41ab0785c6c9419ba7128f9a337d29fe.ogv,1374.0,True,,0.55,[0.13 0.05],ogv,,logos/download.png,3.0,False,False,,zUtEpn9RKtE-c314317ca5d69d30d798660c9d1139a8,mp4,zUtEpn9RKtE-c314317ca5d69d30d798660c9d1139a8.mp4,zUtEpn9RKtE-c314317ca5d69d30d798660c9d1139a8.mp4 +1375,/datadrive/videos/TTXjF-L7Sa4-d793bf8e424cef36b3cd20429babe1b0.mp4,24813b7b62ba4fd69a8df3f0f227a957.ogv,1375.0,False,16k,0.23,,ogv,,,7.0,False,True,,TTXjF-L7Sa4-d793bf8e424cef36b3cd20429babe1b0,mp4,TTXjF-L7Sa4-d793bf8e424cef36b3cd20429babe1b0.mp4,TTXjF-L7Sa4-d793bf8e424cef36b3cd20429babe1b0.mp4 +1377,/datadrive/videos/33xHOK8kcgc-c740c609af879d134c670500b115b845.webm,4969b5f2f7c342aaaaab5d2b68c26d8c.webm,1377.0,True,64k,0.77,[0.1 0.01],,,,4.0,False,True,0.03,33xHOK8kcgc-c740c609af879d134c670500b115b845,webm,33xHOK8kcgc-c740c609af879d134c670500b115b845.webm,33xHOK8kcgc-c740c609af879d134c670500b115b845.webm +1378,/datadrive/videos/7d_8gVP52to-921e198968c973cf5b63a392e7e87efe.webm,a1186046ebe544848689bf01f995669f.webm,1378.0,,,,,,,,,False,True,-0.38,7d_8gVP52to-921e198968c973cf5b63a392e7e87efe,webm,7d_8gVP52to-921e198968c973cf5b63a392e7e87efe.webm,7d_8gVP52to-921e198968c973cf5b63a392e7e87efe.webm +1379,/datadrive/videos/Chuwl0v1_mE-7f002d67b9c9c46d9b1a30bb8e126f70.webm,c96cfbb54eed4a72af56982d69fb690d.ogv,1379.0,,,,[0.01 0.07],ogv,,logos/openair.gif,,False,True,0.23,Chuwl0v1_mE-7f002d67b9c9c46d9b1a30bb8e126f70,webm,Chuwl0v1_mE-7f002d67b9c9c46d9b1a30bb8e126f70.webm,Chuwl0v1_mE-7f002d67b9c9c46d9b1a30bb8e126f70.webm +1380,/datadrive/videos/8TtYaWTCLlg-fe860330381870662e320824449fe3c9.webm,14acb7e5d6db46f3a8eca682d2c2735f.webm,1380.0,True,128k,,,,,logos/ge.gif,7.0,False,True,0.23,8TtYaWTCLlg-fe860330381870662e320824449fe3c9,webm,8TtYaWTCLlg-fe860330381870662e320824449fe3c9.webm,8TtYaWTCLlg-fe860330381870662e320824449fe3c9.webm +1381,/datadrive/videos/_CwnXZGnUuc-bd82b3a6b5f0b749fe552e9829550949.webm,513322a0de894725b10d16097da7e994.webm,1381.0,,128k,,,,,,,False,False,,_CwnXZGnUuc-bd82b3a6b5f0b749fe552e9829550949,webm,_CwnXZGnUuc-bd82b3a6b5f0b749fe552e9829550949.webm,_CwnXZGnUuc-bd82b3a6b5f0b749fe552e9829550949.webm +1382,/datadrive/videos/coljjn4As0o-19b8dda027146a47ec5a98f345e89a55.webm,6f6efec4a188469390453c06f8421442.webm,1382.0,,64k,0.69,,,,logos/download.png,5.0,False,True,,coljjn4As0o-19b8dda027146a47ec5a98f345e89a55,webm,coljjn4As0o-19b8dda027146a47ec5a98f345e89a55.webm,coljjn4As0o-19b8dda027146a47ec5a98f345e89a55.webm +1383,/datadrive/videos/GLpPofnNzww-a9918cc34c2f85a8f842bdd873f2e82d.webm,c166a043a0474ef2bb96a03bae2ff55a.webm,1383.0,,,,,,,logos/download.png,5.0,False,False,,GLpPofnNzww-a9918cc34c2f85a8f842bdd873f2e82d,webm,GLpPofnNzww-a9918cc34c2f85a8f842bdd873f2e82d.webm,GLpPofnNzww-a9918cc34c2f85a8f842bdd873f2e82d.webm +1384,/datadrive/videos/FPHwWDLpSNo-a5fd7bfdd61c4734fabe5b6cd1beb0db.webm,7db41efeb2234207bfd9be9ca811a4cb.webm,1384.0,False,,0.49,,webm,,logos/openair.gif,,False,False,0.06,FPHwWDLpSNo-a5fd7bfdd61c4734fabe5b6cd1beb0db,webm,FPHwWDLpSNo-a5fd7bfdd61c4734fabe5b6cd1beb0db.webm,FPHwWDLpSNo-a5fd7bfdd61c4734fabe5b6cd1beb0db.webm +1385,/datadrive/videos/jY4IX_zjnjA-890a7789d02e256c79a12dcd8b31506d.mp4,d62cd268935641dfb2c0fec00f84c044.mp4,1385.0,False,16k,,,,0.08,,2.0,False,False,-0.37,jY4IX_zjnjA-890a7789d02e256c79a12dcd8b31506d,mp4,jY4IX_zjnjA-890a7789d02e256c79a12dcd8b31506d.mp4,jY4IX_zjnjA-890a7789d02e256c79a12dcd8b31506d.mp4 +1387,/datadrive/videos/5u1RTim6fk0-6110763daff6b9fbb522d6dec4aca22c.mp4,57f309edd5c04ecf985f3b32cf1fc6c7.mp4,1387.0,,,0.79,[0.11 0.14],,0.16,,,False,True,-0.15,5u1RTim6fk0-6110763daff6b9fbb522d6dec4aca22c,mp4,5u1RTim6fk0-6110763daff6b9fbb522d6dec4aca22c.mp4,5u1RTim6fk0-6110763daff6b9fbb522d6dec4aca22c.mp4 +1388,/datadrive/videos/V46NbaSJMyY-1ea0794f2c3655396c27a4da6fa9e9f5.webm,b10fdcff1c4b46daaa938b81f19fbeea.webm,1388.0,False,16k,,[0.11 0.04],webm,,,,False,False,,V46NbaSJMyY-1ea0794f2c3655396c27a4da6fa9e9f5,webm,V46NbaSJMyY-1ea0794f2c3655396c27a4da6fa9e9f5.webm,V46NbaSJMyY-1ea0794f2c3655396c27a4da6fa9e9f5.webm +1389,/datadrive/videos/Htlz54eUadU-65a6600ec616f24bee89138b314c24b3.webm,0d4164bf34bf4a6d91eddaa86d7cf79f.webm,1389.0,,,0.41,,webm,0.05,logos/new.gif,,False,False,,Htlz54eUadU-65a6600ec616f24bee89138b314c24b3,webm,Htlz54eUadU-65a6600ec616f24bee89138b314c24b3.webm,Htlz54eUadU-65a6600ec616f24bee89138b314c24b3.webm +1390,/datadrive/videos/ZrX5Fr3jCHg-ef98ff865f76ebc248d357c2223b40fc.webm,8d68d46412e14e3b8acbbe701ca07fe2.ogv,1390.0,,64k,0.93,[0.17 0.08],ogv,,logos/sbt.gif,,False,False,0.29,ZrX5Fr3jCHg-ef98ff865f76ebc248d357c2223b40fc,webm,ZrX5Fr3jCHg-ef98ff865f76ebc248d357c2223b40fc.webm,ZrX5Fr3jCHg-ef98ff865f76ebc248d357c2223b40fc.webm +1391,/datadrive/videos/0rYkjJA8Tdk-b0e3b673bb42e568c4738cef9a7411fa.mp4,3fa1220959194d298dfa460056cb5d85.mp4,1391.0,,,,[0.12 0.11],,,logos/msnbc.png,,False,True,,0rYkjJA8Tdk-b0e3b673bb42e568c4738cef9a7411fa,mp4,0rYkjJA8Tdk-b0e3b673bb42e568c4738cef9a7411fa.mp4,0rYkjJA8Tdk-b0e3b673bb42e568c4738cef9a7411fa.mp4 +1392,/datadrive/videos/pbDcLobEjDs-15fe4262f91fd7a4db2772ae8c311238.mp4,97560b4c441740a2ae1e442f8d338c08.webm,1392.0,,,0.4,[0.12 0.16],webm,-0.12,,7.0,False,True,0.04,pbDcLobEjDs-15fe4262f91fd7a4db2772ae8c311238,mp4,pbDcLobEjDs-15fe4262f91fd7a4db2772ae8c311238.mp4,pbDcLobEjDs-15fe4262f91fd7a4db2772ae8c311238.mp4 +1395,/datadrive/videos/eoSRg4bSQjc-dbf2fd6a08ed64dbc9fb2d6a55da979d.webm,647479356d5e45588fe2f947ad6c158f.webm,1395.0,,64k,,[0.12 0.04],,,logos/jazeera.png,,False,False,0.13,eoSRg4bSQjc-dbf2fd6a08ed64dbc9fb2d6a55da979d,webm,eoSRg4bSQjc-dbf2fd6a08ed64dbc9fb2d6a55da979d.webm,eoSRg4bSQjc-dbf2fd6a08ed64dbc9fb2d6a55da979d.webm +1396,/datadrive/videos/J1TjxYW5KGk-ca58667fe322a513f52d803c5ec4aad9.mp4,bbfc869adf4a48ca84f77a791f6c1c2d.mp4,1396.0,,32k,0.77,,mp4,0.16,,4.0,False,False,,J1TjxYW5KGk-ca58667fe322a513f52d803c5ec4aad9,mp4,J1TjxYW5KGk-ca58667fe322a513f52d803c5ec4aad9.mp4,J1TjxYW5KGk-ca58667fe322a513f52d803c5ec4aad9.mp4 +1397,/datadrive/videos/LTEcqpo5xQA-fa081088b11fc153287f19cc920cac1c.webm,0f21561693c54c5cbf364c49816ed614.mp4,1397.0,,,,,mp4,0.06,,,False,False,0.25,LTEcqpo5xQA-fa081088b11fc153287f19cc920cac1c,webm,LTEcqpo5xQA-fa081088b11fc153287f19cc920cac1c.webm,LTEcqpo5xQA-fa081088b11fc153287f19cc920cac1c.webm +1398,/datadrive/videos/_8B7RqcIjj8-a1d772a7f52cd7fab11644cfc4522428.webm,86e40ab2ba5f450e8c01a3a5eb0ae753.webm,1398.0,True,,,[0.01 0.16],,0.18,logos/download.png,5.0,False,False,0.03,_8B7RqcIjj8-a1d772a7f52cd7fab11644cfc4522428,webm,_8B7RqcIjj8-a1d772a7f52cd7fab11644cfc4522428.webm,_8B7RqcIjj8-a1d772a7f52cd7fab11644cfc4522428.webm +1399,/datadrive/videos/757kyQ3_MNY-4c4dd803c91c549dd83e320b1f5f9407.mp4,4547f22d5cf445808c24db9f2c1c7aab.webm,1399.0,,,0.92,[0.01 0.08],webm,,,,False,True,,757kyQ3_MNY-4c4dd803c91c549dd83e320b1f5f9407,mp4,757kyQ3_MNY-4c4dd803c91c549dd83e320b1f5f9407.mp4,757kyQ3_MNY-4c4dd803c91c549dd83e320b1f5f9407.mp4 +1401,/datadrive/videos/wfublzggEpU-e4889b75a8aa6dc6af0f60b352fdcd04.mp4,548ac113a9e44d99aa217d6d8c29b5a8.mp4,1401.0,,,,[0.11 0.04],,,,,False,True,,wfublzggEpU-e4889b75a8aa6dc6af0f60b352fdcd04,mp4,wfublzggEpU-e4889b75a8aa6dc6af0f60b352fdcd04.mp4,wfublzggEpU-e4889b75a8aa6dc6af0f60b352fdcd04.mp4 +1402,/datadrive/videos/xk8Xoa60sFE-2c3ff073729dbc9e0caced24817518f8.mp4,5564565f5d7e44c9aa79278f8e1bc6a4.ogv,1402.0,True,64k,0.54,,ogv,,logos/openair.gif,9.0,True,True,0.29,xk8Xoa60sFE-2c3ff073729dbc9e0caced24817518f8,mp4,xk8Xoa60sFE-2c3ff073729dbc9e0caced24817518f8.mp4,xk8Xoa60sFE-2c3ff073729dbc9e0caced24817518f8.mp4 +1404,/datadrive/videos/000dE7oQWG4-1ac648b8ce4567e396b86eb5f5d4fef4.webm,84f4a294516f40cbac73f39e1208b353.ogv,1404.0,,16k,0.55,[0.02 0.02],ogv,,,1.0,False,False,-0.22,000dE7oQWG4-1ac648b8ce4567e396b86eb5f5d4fef4,webm,000dE7oQWG4-1ac648b8ce4567e396b86eb5f5d4fef4.webm,000dE7oQWG4-1ac648b8ce4567e396b86eb5f5d4fef4.webm +1405,/datadrive/videos/4HvbbzmWtZQ-2af483979e16ba32e3004a34d679e148.mp4,1eac85b3b1ea4ceab2e8664417071328.ogv,1405.0,,64k,,,ogv,,logos/jazeera.png,1.0,False,True,,4HvbbzmWtZQ-2af483979e16ba32e3004a34d679e148,mp4,4HvbbzmWtZQ-2af483979e16ba32e3004a34d679e148.mp4,4HvbbzmWtZQ-2af483979e16ba32e3004a34d679e148.mp4 +1406,/datadrive/videos/AxDxVNDEU3c-4afdd33901943e0e27f9f654cb96bd34.webm,6cec2160a7b849f682c4bfbd8c8d9732.webm,1406.0,False,,,[0.07 0.02],,0.11,,1.0,True,True,,AxDxVNDEU3c-4afdd33901943e0e27f9f654cb96bd34,webm,AxDxVNDEU3c-4afdd33901943e0e27f9f654cb96bd34.webm,AxDxVNDEU3c-4afdd33901943e0e27f9f654cb96bd34.webm +1407,/datadrive/videos/79-586Bv_Gs-0f14963b8bb5999312c0e19435956c06.webm,7c46f901e5eb4509b1046e47e4b21741.webm,1407.0,False,,,[0.18 0.06],,,logos/msnbc.png,6.0,False,False,0.34,79-586Bv_Gs-0f14963b8bb5999312c0e19435956c06,webm,79-586Bv_Gs-0f14963b8bb5999312c0e19435956c06.webm,79-586Bv_Gs-0f14963b8bb5999312c0e19435956c06.webm +1408,/datadrive/videos/9TP15oM6L_Q-8d9579a342fd6ac0cddb7176527c8968.webm,50a53a821460408db3c3406435be55d3.webm,1408.0,False,,0.27,,,-0.01,,,False,True,,9TP15oM6L_Q-8d9579a342fd6ac0cddb7176527c8968,webm,9TP15oM6L_Q-8d9579a342fd6ac0cddb7176527c8968.webm,9TP15oM6L_Q-8d9579a342fd6ac0cddb7176527c8968.webm +1409,/datadrive/videos/NhOmmNB9TJM-b709edb7c2a06961a00a792125cc499f.mp4,3ef515265ccd4e538f100140163593bd.webm,1409.0,,,,,webm,,logos/msnbc.png,5.0,False,False,0.31,NhOmmNB9TJM-b709edb7c2a06961a00a792125cc499f,mp4,NhOmmNB9TJM-b709edb7c2a06961a00a792125cc499f.mp4,NhOmmNB9TJM-b709edb7c2a06961a00a792125cc499f.mp4 +1410,/datadrive/videos/38NgfwT8QdM-7833ee88770404616f1b76c17a11d2fb.mp4,7eea2399e9474b21b79d4967bd1c39c3.ogv,1410.0,,64k,0.6,,ogv,-0.06,logos/msnbc.png,,False,False,,38NgfwT8QdM-7833ee88770404616f1b76c17a11d2fb,mp4,38NgfwT8QdM-7833ee88770404616f1b76c17a11d2fb.mp4,38NgfwT8QdM-7833ee88770404616f1b76c17a11d2fb.mp4 +1411,/datadrive/videos/CJmSelkDy28-ed07da77f7b169860415197aca620bba.webm,9d18d81d5916492cb8c8c13416013fb9.webm,1411.0,,32k,0.66,,,0.14,logos/openair.gif,2.0,True,False,0.25,CJmSelkDy28-ed07da77f7b169860415197aca620bba,webm,CJmSelkDy28-ed07da77f7b169860415197aca620bba.webm,CJmSelkDy28-ed07da77f7b169860415197aca620bba.webm +1412,/datadrive/videos/wul4c1lmgJg-49d3f5290bba4d90ea34dee22ab7b9f3.mp4,4a2385137e214ba2bff27b18d912a6b4.mp4,1412.0,,,,,,0.08,,,False,False,-0.4,wul4c1lmgJg-49d3f5290bba4d90ea34dee22ab7b9f3,mp4,wul4c1lmgJg-49d3f5290bba4d90ea34dee22ab7b9f3.mp4,wul4c1lmgJg-49d3f5290bba4d90ea34dee22ab7b9f3.mp4 +1413,/datadrive/videos/XN96TivKx3s-61e14cce110a0f557deebeccf49bc8c7.webm,55695ccfffd14fdda70d728d079cd3d9.webm,1413.0,False,,0.62,,,0.09,,,False,True,,XN96TivKx3s-61e14cce110a0f557deebeccf49bc8c7,webm,XN96TivKx3s-61e14cce110a0f557deebeccf49bc8c7.webm,XN96TivKx3s-61e14cce110a0f557deebeccf49bc8c7.webm +1414,/datadrive/videos/fO3Tb0P0ry0-55b903a4c127aa8229bfd809e7c3974a.webm,0d99a53e3a4d4f0c8ea0c02924e0140c.ogv,1414.0,,,,[0.11 0.13],ogv,-0.15,logos/another.gif,,False,False,,fO3Tb0P0ry0-55b903a4c127aa8229bfd809e7c3974a,webm,fO3Tb0P0ry0-55b903a4c127aa8229bfd809e7c3974a.webm,fO3Tb0P0ry0-55b903a4c127aa8229bfd809e7c3974a.webm +1415,/datadrive/videos/cd8kT9QaX3g-cf0800edb3f6c264367b41a18dc25e05.webm,721691eea8de4fd3b002d592fb9be66e.webm,1415.0,True,,0.5,[0.06 0.16],,,,,False,True,0.25,cd8kT9QaX3g-cf0800edb3f6c264367b41a18dc25e05,webm,cd8kT9QaX3g-cf0800edb3f6c264367b41a18dc25e05.webm,cd8kT9QaX3g-cf0800edb3f6c264367b41a18dc25e05.webm +1416,/datadrive/videos/XHV60Kr9n7E-1c439b01e88338034c68745ca6235a47.mp4,4e3956ce8d5d4c789425efa60056dd3b.webm,1416.0,,64k,,,webm,,,,False,True,0.06,XHV60Kr9n7E-1c439b01e88338034c68745ca6235a47,mp4,XHV60Kr9n7E-1c439b01e88338034c68745ca6235a47.mp4,XHV60Kr9n7E-1c439b01e88338034c68745ca6235a47.mp4 +1418,/datadrive/videos/dmCPVrGva5M-04a097aa8c9314e81b3a0d920579780c.mp4,21cd6cde3c5b42028e6b97bd75335b28.ogv,1418.0,,,0.85,,ogv,-0.04,logos/another.gif,,False,True,0.04,dmCPVrGva5M-04a097aa8c9314e81b3a0d920579780c,mp4,dmCPVrGva5M-04a097aa8c9314e81b3a0d920579780c.mp4,dmCPVrGva5M-04a097aa8c9314e81b3a0d920579780c.mp4 +1419,/datadrive/videos/rkaIhKVge08-2aea3752ef7cf58a71f7395397820bf1.mp4,0e55b92adab049eb98241c5518ad75e7.mp4,1419.0,True,64k,0.3,[0.04 0.04],,-0.15,logos/fox.png,,False,True,0.03,rkaIhKVge08-2aea3752ef7cf58a71f7395397820bf1,mp4,rkaIhKVge08-2aea3752ef7cf58a71f7395397820bf1.mp4,rkaIhKVge08-2aea3752ef7cf58a71f7395397820bf1.mp4 +1421,/datadrive/videos/8ayORrYeDhE-acfa32b1af21053b507cbb258dc46c16.webm,3126af8c9a944aac9be1f65634a1920b.webm,1421.0,,,0.61,,webm,,,,False,True,-0.31,8ayORrYeDhE-acfa32b1af21053b507cbb258dc46c16,webm,8ayORrYeDhE-acfa32b1af21053b507cbb258dc46c16.webm,8ayORrYeDhE-acfa32b1af21053b507cbb258dc46c16.webm +1422,/datadrive/videos/InnnudYXcDA-48706efc3e084b1fc2c70ad491594579.webm,cde846fc786140ab94dd5af69dd54175.webm,1422.0,False,,,[0.09 0.14],,-0.11,,9.0,False,True,,InnnudYXcDA-48706efc3e084b1fc2c70ad491594579,webm,InnnudYXcDA-48706efc3e084b1fc2c70ad491594579.webm,InnnudYXcDA-48706efc3e084b1fc2c70ad491594579.webm +1423,/datadrive/videos/RuVViSGgPxI-4fe210d5d2070424bef985ce616e369c.webm,3dcf7d7df6294fd18a8f7bf644dc511e.webm,1423.0,,128k,,,webm,,,1.0,True,True,,RuVViSGgPxI-4fe210d5d2070424bef985ce616e369c,webm,RuVViSGgPxI-4fe210d5d2070424bef985ce616e369c.webm,RuVViSGgPxI-4fe210d5d2070424bef985ce616e369c.webm +1424,/datadrive/videos/7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6.webm,d814fb23ab6943d296d2a5cfc5ecda3b.ogv,1424.0,,32k,0.34,,ogv,-0.19,logos/download.png,,True,True,-0.02,7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6,webm,7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6.webm,7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6.webm +1425,/datadrive/videos/Au-P8Oo32oI-40cd4f5edc6bf019b2e4a01eee2a76a5.mp4,bec6da8e3d924b54a2c573a933294b12.ogv,1425.0,True,32k,,,ogv,,,,False,True,,Au-P8Oo32oI-40cd4f5edc6bf019b2e4a01eee2a76a5,mp4,Au-P8Oo32oI-40cd4f5edc6bf019b2e4a01eee2a76a5.mp4,Au-P8Oo32oI-40cd4f5edc6bf019b2e4a01eee2a76a5.mp4 +1426,/datadrive/videos/YfL32PYSrqM-4a2f5935ea5dc9a2c73d3ac10e3aacc7.webm,a31c57b312944f89831dc7f132e15f9b.mp4,1426.0,,16k,,,mp4,0.06,,,False,True,,YfL32PYSrqM-4a2f5935ea5dc9a2c73d3ac10e3aacc7,webm,YfL32PYSrqM-4a2f5935ea5dc9a2c73d3ac10e3aacc7.webm,YfL32PYSrqM-4a2f5935ea5dc9a2c73d3ac10e3aacc7.webm +1427,/datadrive/videos/qiYRsLAoNeM-9fde00d17b5b1442dd127c00859f5c87.webm,5bea61d2546e4db28e7a98fe2327172e.ogv,1427.0,True,32k,,,ogv,,logos/jazeera.png,1.0,False,False,,qiYRsLAoNeM-9fde00d17b5b1442dd127c00859f5c87,webm,qiYRsLAoNeM-9fde00d17b5b1442dd127c00859f5c87.webm,qiYRsLAoNeM-9fde00d17b5b1442dd127c00859f5c87.webm +1429,/datadrive/videos/QIzN3GKKAo0-6e03778c5634f4e7f56203307c3809e7.webm,0b365666d53f420f8a7f95184209a6a2.mp4,1429.0,True,,,,mp4,,,,False,False,,QIzN3GKKAo0-6e03778c5634f4e7f56203307c3809e7,webm,QIzN3GKKAo0-6e03778c5634f4e7f56203307c3809e7.webm,QIzN3GKKAo0-6e03778c5634f4e7f56203307c3809e7.webm +1431,/datadrive/videos/9j58VK9P1K4-b5cd80e3c20a6bd889a7a129d31a9688.mp4,5c21c6aee4754dac974d9f7183e180c1.webm,1431.0,False,128k,0.88,[0.09 0.06],webm,,logos/download.png,3.0,False,True,0.22,9j58VK9P1K4-b5cd80e3c20a6bd889a7a129d31a9688,mp4,9j58VK9P1K4-b5cd80e3c20a6bd889a7a129d31a9688.mp4,9j58VK9P1K4-b5cd80e3c20a6bd889a7a129d31a9688.mp4 +1432,/datadrive/videos/GKY8NkG8AEc-a1ca7bd34bb47e0d0edf41fe1b808bf9.webm,7a8d406a8948473d83e49c5a48cfc60a.webm,1432.0,True,,,[0.02 0.02],,-0.13,,9.0,False,False,-0.07,GKY8NkG8AEc-a1ca7bd34bb47e0d0edf41fe1b808bf9,webm,GKY8NkG8AEc-a1ca7bd34bb47e0d0edf41fe1b808bf9.webm,GKY8NkG8AEc-a1ca7bd34bb47e0d0edf41fe1b808bf9.webm +1434,/datadrive/videos/LvFt0Tp1vB8-aa896f747fd19f3c28b52dc67651dbda.mp4,ffd601806b2c4b32836f2b1b3f3b7b34.mp4,1434.0,False,,0.77,[0.11 0.19],,-0.04,,,False,True,0.24,LvFt0Tp1vB8-aa896f747fd19f3c28b52dc67651dbda,mp4,LvFt0Tp1vB8-aa896f747fd19f3c28b52dc67651dbda.mp4,LvFt0Tp1vB8-aa896f747fd19f3c28b52dc67651dbda.mp4 +1435,/datadrive/videos/QtGnq1hTpSY-07b3e3a984a3cf7a8b4bc9c95584e274.mp4,2c400c30914941e2a2f0576e4376432e.ogv,1435.0,,32k,,[0.14 0.13],ogv,,,,False,True,,QtGnq1hTpSY-07b3e3a984a3cf7a8b4bc9c95584e274,mp4,QtGnq1hTpSY-07b3e3a984a3cf7a8b4bc9c95584e274.mp4,QtGnq1hTpSY-07b3e3a984a3cf7a8b4bc9c95584e274.mp4 +1436,/datadrive/videos/vuyCq9eMMBA-09e9b0a76ad85760729bdedf4579cdd5.mp4,a93d0b6b6c114a83b975f7ead0dea676.ogv,1436.0,False,128k,,[0.05 0.11],ogv,0.0,logos/new.gif,,False,False,-0.01,vuyCq9eMMBA-09e9b0a76ad85760729bdedf4579cdd5,mp4,vuyCq9eMMBA-09e9b0a76ad85760729bdedf4579cdd5.mp4,vuyCq9eMMBA-09e9b0a76ad85760729bdedf4579cdd5.mp4 +1437,/datadrive/videos/TydgPTgAwFU-12da4ee9a51ecd6a4e435ddce063219b.mp4,9effe9f0519c4b16be6a58ac44c70fce.mp4,1437.0,,128k,,,,,,,False,False,,TydgPTgAwFU-12da4ee9a51ecd6a4e435ddce063219b,mp4,TydgPTgAwFU-12da4ee9a51ecd6a4e435ddce063219b.mp4,TydgPTgAwFU-12da4ee9a51ecd6a4e435ddce063219b.mp4 +1438,/datadrive/videos/flsevUvm098-ba74e90711c9692f2a6a1157a6eaf146.mp4,8cb10c5aa8484b2ea812509a37947ad1.webm,1438.0,True,64k,0.56,,webm,,,,True,True,,flsevUvm098-ba74e90711c9692f2a6a1157a6eaf146,mp4,flsevUvm098-ba74e90711c9692f2a6a1157a6eaf146.mp4,flsevUvm098-ba74e90711c9692f2a6a1157a6eaf146.mp4 +1440,/datadrive/videos/V1fskEz-d4U-c9aa6ff55acf138914c99cf96cd7bac4.webm,a5fc1cdaf4094822a0239c4daf80e3bf.mp4,1440.0,,,,[0.04 0.13],mp4,0.01,logos/ge.gif,,False,True,-0.26,V1fskEz-d4U-c9aa6ff55acf138914c99cf96cd7bac4,webm,V1fskEz-d4U-c9aa6ff55acf138914c99cf96cd7bac4.webm,V1fskEz-d4U-c9aa6ff55acf138914c99cf96cd7bac4.webm +1441,/datadrive/videos/KpciFQt35ow-8dd996e4a8eed2340bb2110f5d37c48f.mp4,2b8f5ab314614748838a1a35560eb1f7.mp4,1441.0,,,,,,,logos/another.gif,8.0,True,True,0.02,KpciFQt35ow-8dd996e4a8eed2340bb2110f5d37c48f,mp4,KpciFQt35ow-8dd996e4a8eed2340bb2110f5d37c48f.mp4,KpciFQt35ow-8dd996e4a8eed2340bb2110f5d37c48f.mp4 +1443,/datadrive/videos/Tj7QkEyCiiw-74c402f83fce1a38383316d6982c6267.webm,b4fdc8701ead483ba8ef11e413dab079.webm,1443.0,False,,,,,,,4.0,False,False,0.33,Tj7QkEyCiiw-74c402f83fce1a38383316d6982c6267,webm,Tj7QkEyCiiw-74c402f83fce1a38383316d6982c6267.webm,Tj7QkEyCiiw-74c402f83fce1a38383316d6982c6267.webm +1445,/datadrive/videos/rg-pYPoiXWI-57f9ce03118241946a591477f8734658.webm,1df6617d151b449c9dfe7670f0005c6b.webm,1445.0,,,,,,0.04,,1.0,False,True,-0.26,rg-pYPoiXWI-57f9ce03118241946a591477f8734658,webm,rg-pYPoiXWI-57f9ce03118241946a591477f8734658.webm,rg-pYPoiXWI-57f9ce03118241946a591477f8734658.webm +1446,/datadrive/videos/d81EJCOx2OM-dc85fc2ebb58a46f13d817510e1c9d54.webm,8335d086c52b4954badc387c832339df.webm,1446.0,,,0.52,,,,,4.0,False,True,0.23,d81EJCOx2OM-dc85fc2ebb58a46f13d817510e1c9d54,webm,d81EJCOx2OM-dc85fc2ebb58a46f13d817510e1c9d54.webm,d81EJCOx2OM-dc85fc2ebb58a46f13d817510e1c9d54.webm +1447,/datadrive/videos/PUfT5bw9o7c-7988d69653b30193a4807a474b57112d.webm,38c89b26917a4f058e4130c9486b5569.webm,1447.0,,16k,0.6,,,,,7.0,False,True,0.14,PUfT5bw9o7c-7988d69653b30193a4807a474b57112d,webm,PUfT5bw9o7c-7988d69653b30193a4807a474b57112d.webm,PUfT5bw9o7c-7988d69653b30193a4807a474b57112d.webm +1448,/datadrive/videos/vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3.webm,1aaf7659e180487da6b70e52d304c63a.webm,1448.0,False,16k,,[0.15 0.01],,-0.2,,6.0,False,False,,vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3,webm,vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3.webm,vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3.webm +1450,/datadrive/videos/R1WilFnYuUQ-48093d0372477e02b4729e5b123878a3.webm,2b94570a2be04349a9e1cd68af8ae621.webm,1450.0,True,,,[0.1 0.09],webm,-0.14,,3.0,False,True,,R1WilFnYuUQ-48093d0372477e02b4729e5b123878a3,webm,R1WilFnYuUQ-48093d0372477e02b4729e5b123878a3.webm,R1WilFnYuUQ-48093d0372477e02b4729e5b123878a3.webm +1452,/datadrive/videos/NrKj036u3bM-5bdf2790d5c81982b43d06a3195efc54.mp4,00c235f48ba0445aa1e526f97af33f8e.mp4,1452.0,,128k,0.2,[0.14 0.07],mp4,,,9.0,False,True,,NrKj036u3bM-5bdf2790d5c81982b43d06a3195efc54,mp4,NrKj036u3bM-5bdf2790d5c81982b43d06a3195efc54.mp4,NrKj036u3bM-5bdf2790d5c81982b43d06a3195efc54.mp4 +1453,/datadrive/videos/qXPDuNNAdlk-0ac7016edec3a32c8151eda28872d318.webm,6975a5a021794433ac22918eff8458cc.ogv,1453.0,,,,,ogv,-0.04,,,False,False,-0.12,qXPDuNNAdlk-0ac7016edec3a32c8151eda28872d318,webm,qXPDuNNAdlk-0ac7016edec3a32c8151eda28872d318.webm,qXPDuNNAdlk-0ac7016edec3a32c8151eda28872d318.webm +1454,/datadrive/videos/3yUuzHJspA0-3ac7ff0920554b960f0774f97cd2aa37.webm,bfa95b8f0f924d7b909ddaf08e6ec73f.mp4,1454.0,,,0.64,,mp4,0.01,,6.0,False,True,,3yUuzHJspA0-3ac7ff0920554b960f0774f97cd2aa37,webm,3yUuzHJspA0-3ac7ff0920554b960f0774f97cd2aa37.webm,3yUuzHJspA0-3ac7ff0920554b960f0774f97cd2aa37.webm +1455,/datadrive/videos/rXhQjSA5jfU-36065d168365f361c457a8d1a134746a.webm,47be73bc109d47e49e27b1dabbd131fb.ogv,1455.0,False,128k,,,ogv,,,5.0,True,False,,rXhQjSA5jfU-36065d168365f361c457a8d1a134746a,webm,rXhQjSA5jfU-36065d168365f361c457a8d1a134746a.webm,rXhQjSA5jfU-36065d168365f361c457a8d1a134746a.webm +1456,/datadrive/videos/PJEBMgFK7hA-55e6178eb9e5fd0976a0b3c5697e77c0.webm,39fbfec7852247e68a4941825db39274.ogv,1456.0,,128k,,,ogv,,logos/fox.png,,False,True,-0.15,PJEBMgFK7hA-55e6178eb9e5fd0976a0b3c5697e77c0,webm,PJEBMgFK7hA-55e6178eb9e5fd0976a0b3c5697e77c0.webm,PJEBMgFK7hA-55e6178eb9e5fd0976a0b3c5697e77c0.webm +1457,/datadrive/videos/lXFGn6Oc9to-e53fe9a1ff84cfaf815931fb9695fd1c.mp4,2cff5bffc83f4b1f812b3f20e3ceac4b.mp4,1457.0,False,,0.83,,,,,6.0,False,True,,lXFGn6Oc9to-e53fe9a1ff84cfaf815931fb9695fd1c,mp4,lXFGn6Oc9to-e53fe9a1ff84cfaf815931fb9695fd1c.mp4,lXFGn6Oc9to-e53fe9a1ff84cfaf815931fb9695fd1c.mp4 +1458,/datadrive/videos/lwTer-PJSw0-96d19a6cb240b984f831a21dca0efb59.mp4,035cdab250914659981fb0060129d60f.ogv,1458.0,True,32k,0.54,[0.15 0.07],ogv,-0.1,,8.0,False,True,,lwTer-PJSw0-96d19a6cb240b984f831a21dca0efb59,mp4,lwTer-PJSw0-96d19a6cb240b984f831a21dca0efb59.mp4,lwTer-PJSw0-96d19a6cb240b984f831a21dca0efb59.mp4 +1459,/datadrive/videos/AAdoQTAx_ag-c7a7afe1f082ff03c53e55675ba4bef2.webm,d55e83633d624ce198ca6e69d36c9413.webm,1459.0,False,,0.99,[0.11 0.02],webm,-0.16,logos/download.png,,False,True,-0.02,AAdoQTAx_ag-c7a7afe1f082ff03c53e55675ba4bef2,webm,AAdoQTAx_ag-c7a7afe1f082ff03c53e55675ba4bef2.webm,AAdoQTAx_ag-c7a7afe1f082ff03c53e55675ba4bef2.webm +1460,/datadrive/videos/ATuVs37Z2x8-643d7853716574e5a3d955f67e2bbb12.webm,2dbb049d89c84f9daf8f112358d71453.webm,1460.0,,,0.65,[0.07 0.12],,,logos/download.png,,False,True,0.03,ATuVs37Z2x8-643d7853716574e5a3d955f67e2bbb12,webm,ATuVs37Z2x8-643d7853716574e5a3d955f67e2bbb12.webm,ATuVs37Z2x8-643d7853716574e5a3d955f67e2bbb12.webm +1461,/datadrive/videos/VMc0v_mDkkw-46cf5f2b5b7bcbe4fb0a3d630fffa2d4.webm,05ad5ccd2a7644e1a23a6ebed7788cf8.webm,1461.0,True,64k,,[0.05 0.03],,0.09,,9.0,True,False,0.16,VMc0v_mDkkw-46cf5f2b5b7bcbe4fb0a3d630fffa2d4,webm,VMc0v_mDkkw-46cf5f2b5b7bcbe4fb0a3d630fffa2d4.webm,VMc0v_mDkkw-46cf5f2b5b7bcbe4fb0a3d630fffa2d4.webm +1462,/datadrive/videos/nkH4V6d_Xsg-441ca599b01921020cf6260368ddb893.mp4,14833090c98a4c2eaac5f46d41275467.mp4,1462.0,,,0.38,[0.08 0.19],mp4,0.06,logos/fox.png,9.0,False,True,,nkH4V6d_Xsg-441ca599b01921020cf6260368ddb893,mp4,nkH4V6d_Xsg-441ca599b01921020cf6260368ddb893.mp4,nkH4V6d_Xsg-441ca599b01921020cf6260368ddb893.mp4 +1463,/datadrive/videos/D5mYmXGAVm4-c0ca9ed7183798e1eb299d1869044a73.webm,7faf034173f4451398b05e6f1686a896.webm,1463.0,,,,,,,logos/jazeera.png,3.0,False,True,,D5mYmXGAVm4-c0ca9ed7183798e1eb299d1869044a73,webm,D5mYmXGAVm4-c0ca9ed7183798e1eb299d1869044a73.webm,D5mYmXGAVm4-c0ca9ed7183798e1eb299d1869044a73.webm +1464,/datadrive/videos/qxms8o7vinY-86966dd7dcc8aea4203d1ef541618797.webm,74f788b680e24a789e5820e7e5e4b26f.ogv,1464.0,,,0.24,,ogv,,,8.0,False,True,,qxms8o7vinY-86966dd7dcc8aea4203d1ef541618797,webm,qxms8o7vinY-86966dd7dcc8aea4203d1ef541618797.webm,qxms8o7vinY-86966dd7dcc8aea4203d1ef541618797.webm +1465,/datadrive/videos/RImXm2DIGWA-dd42ee1822a02483e0b010d371224053.webm,41fa1b30ebf741b7ba518f8bb1f7b034.ogv,1465.0,,32k,,,ogv,0.11,logos/sbt.gif,,False,True,,RImXm2DIGWA-dd42ee1822a02483e0b010d371224053,webm,RImXm2DIGWA-dd42ee1822a02483e0b010d371224053.webm,RImXm2DIGWA-dd42ee1822a02483e0b010d371224053.webm +1466,/datadrive/videos/c8d8I7sqnzY-6aa3eaba066470cb5cf8774390deaa48.webm,07c167ba594240de961b4cdd96774aa2.webm,1466.0,False,32k,0.53,,,,logos/new.gif,2.0,False,False,-0.17,c8d8I7sqnzY-6aa3eaba066470cb5cf8774390deaa48,webm,c8d8I7sqnzY-6aa3eaba066470cb5cf8774390deaa48.webm,c8d8I7sqnzY-6aa3eaba066470cb5cf8774390deaa48.webm +1467,/datadrive/videos/IyzgUBHHZ2Q-071d2f9cc648f4cf56fdf44484280c52.webm,18a35138fddf4d1da6cd3868733430e7.webm,1467.0,False,32k,,,webm,-0.09,logos/sbt.gif,,False,False,,IyzgUBHHZ2Q-071d2f9cc648f4cf56fdf44484280c52,webm,IyzgUBHHZ2Q-071d2f9cc648f4cf56fdf44484280c52.webm,IyzgUBHHZ2Q-071d2f9cc648f4cf56fdf44484280c52.webm +1468,/datadrive/videos/fKKln81I2Y8-b363d06faa11694f9cc18056ad625655.webm,5686ee5a41154201bf759c20ce1b409d.webm,1468.0,False,,,,,-0.1,,0.0,False,True,,fKKln81I2Y8-b363d06faa11694f9cc18056ad625655,webm,fKKln81I2Y8-b363d06faa11694f9cc18056ad625655.webm,fKKln81I2Y8-b363d06faa11694f9cc18056ad625655.webm +1469,/datadrive/videos/WMlPfjmxMrU-861c246d3e6f5c46e3d1903430e26124.webm,83937fb75ffc4af897f6838facad3f4c.mp4,1469.0,,128k,0.2,[0.15 0.04],mp4,,,3.0,False,True,,WMlPfjmxMrU-861c246d3e6f5c46e3d1903430e26124,webm,WMlPfjmxMrU-861c246d3e6f5c46e3d1903430e26124.webm,WMlPfjmxMrU-861c246d3e6f5c46e3d1903430e26124.webm +1471,/datadrive/videos/_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3.mp4,399a5db7d79c4cb39f43393e6d91257b.ogv,1471.0,,,0.68,,ogv,,,3.0,False,True,,_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3,mp4,_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3.mp4,_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3.mp4 +1472,/datadrive/videos/GyaFEZujpbY-e2e5d448e968fd988bf891592ef744af.mp4,9e439b22917146b4a01ccdbde2c1dddb.webm,1472.0,,128k,,,webm,0.17,,,False,False,,GyaFEZujpbY-e2e5d448e968fd988bf891592ef744af,mp4,GyaFEZujpbY-e2e5d448e968fd988bf891592ef744af.mp4,GyaFEZujpbY-e2e5d448e968fd988bf891592ef744af.mp4 +1473,/datadrive/videos/mQIQPSuHFGI-9f7bc95fb1cdb4e1c3c5af47fcea6a4f.mp4,5969dc61105249f8939406152d72d664.webm,1473.0,False,,0.38,,webm,0.16,logos/msnbc.png,,False,True,-0.19,mQIQPSuHFGI-9f7bc95fb1cdb4e1c3c5af47fcea6a4f,mp4,mQIQPSuHFGI-9f7bc95fb1cdb4e1c3c5af47fcea6a4f.mp4,mQIQPSuHFGI-9f7bc95fb1cdb4e1c3c5af47fcea6a4f.mp4 +1475,/datadrive/videos/H8KXJux-5SI-a7a8e9a2de48b205b3110726a1660b42.webm,ab4f97c7ba2949d5a9891ec30ccafcb6.webm,1475.0,,,0.25,[0.08 0.08],,-0.13,,7.0,False,True,,H8KXJux-5SI-a7a8e9a2de48b205b3110726a1660b42,webm,H8KXJux-5SI-a7a8e9a2de48b205b3110726a1660b42.webm,H8KXJux-5SI-a7a8e9a2de48b205b3110726a1660b42.webm +1477,/datadrive/videos/Tx8x4uNW4_U-751029baa910c3a5ccdf40da8c057166.mp4,1b35e8a8f121457c8bc5afe5fcf03e41.mp4,1477.0,,,,,,0.15,logos/msnbc.png,,False,False,0.33,Tx8x4uNW4_U-751029baa910c3a5ccdf40da8c057166,mp4,Tx8x4uNW4_U-751029baa910c3a5ccdf40da8c057166.mp4,Tx8x4uNW4_U-751029baa910c3a5ccdf40da8c057166.mp4 +1478,/datadrive/videos/1A7l-XHWJXA-02866c43f4e8e83fad4dbfddc824c97c.webm,7e6e54b18228437abddd217c846ca8fe.webm,1478.0,,32k,0.27,[0.12 0.14],webm,0.19,logos/jazeera.png,0.0,False,True,,1A7l-XHWJXA-02866c43f4e8e83fad4dbfddc824c97c,webm,1A7l-XHWJXA-02866c43f4e8e83fad4dbfddc824c97c.webm,1A7l-XHWJXA-02866c43f4e8e83fad4dbfddc824c97c.webm +1480,/datadrive/videos/SJUdhJHtT6Q-ba048802fbf47e53ba475cd8ae5eb011.webm,575c9960b9ce49d796e2e4f5c443ce22.ogv,1480.0,False,,0.32,,ogv,-0.15,logos/jazeera.png,6.0,False,True,0.01,SJUdhJHtT6Q-ba048802fbf47e53ba475cd8ae5eb011,webm,SJUdhJHtT6Q-ba048802fbf47e53ba475cd8ae5eb011.webm,SJUdhJHtT6Q-ba048802fbf47e53ba475cd8ae5eb011.webm +1481,/datadrive/videos/AAdoQTAx_ag-c7a7afe1f082ff03c53e55675ba4bef2.webm,66bf4fd40f3f450ba253b10b3f791843.webm,1481.0,False,,,,,,logos/sbt.gif,3.0,False,True,0.26,AAdoQTAx_ag-c7a7afe1f082ff03c53e55675ba4bef2,webm,AAdoQTAx_ag-c7a7afe1f082ff03c53e55675ba4bef2.webm,AAdoQTAx_ag-c7a7afe1f082ff03c53e55675ba4bef2.webm +1482,/datadrive/videos/mRe_w0W6yYE-e0ab7a5fb595f9aba2f04a78e66b6183.webm,027ce55c1a6a41bd928904e423bcab33.webm,1482.0,,128k,0.44,[0.1 0.05],,,,3.0,False,True,,mRe_w0W6yYE-e0ab7a5fb595f9aba2f04a78e66b6183,webm,mRe_w0W6yYE-e0ab7a5fb595f9aba2f04a78e66b6183.webm,mRe_w0W6yYE-e0ab7a5fb595f9aba2f04a78e66b6183.webm +1483,/datadrive/videos/N95pg7IBN_E-7ca94b2b81faf965a184cc31082f5480.mp4,0dc9e4f033a74b79a466f69c04830927.mp4,1483.0,,128k,0.53,,,0.15,,,False,False,,N95pg7IBN_E-7ca94b2b81faf965a184cc31082f5480,mp4,N95pg7IBN_E-7ca94b2b81faf965a184cc31082f5480.mp4,N95pg7IBN_E-7ca94b2b81faf965a184cc31082f5480.mp4 +1484,/datadrive/videos/JoxsB8x2mSc-f72ea72ee9bf3e8787d9a6498f8ef180.mp4,332063cb344241cd85882dbcde77b309.mp4,1484.0,False,,,,,0.19,,3.0,False,True,,JoxsB8x2mSc-f72ea72ee9bf3e8787d9a6498f8ef180,mp4,JoxsB8x2mSc-f72ea72ee9bf3e8787d9a6498f8ef180.mp4,JoxsB8x2mSc-f72ea72ee9bf3e8787d9a6498f8ef180.mp4 +1486,/datadrive/videos/WycK92flL3E-6e33ca88a24d402dad1e995791ef771a.webm,2c65869b800a45c485058e3ceaaf654e.webm,1486.0,False,32k,,,,0.08,,3.0,False,True,0.09,WycK92flL3E-6e33ca88a24d402dad1e995791ef771a,webm,WycK92flL3E-6e33ca88a24d402dad1e995791ef771a.webm,WycK92flL3E-6e33ca88a24d402dad1e995791ef771a.webm +1487,/datadrive/videos/8TtYaWTCLlg-fe860330381870662e320824449fe3c9.webm,9207ef23b1aa42d2ad4e138b7a5fc50a.webm,1487.0,,,,,,-0.03,logos/new.gif,4.0,False,False,0.18,8TtYaWTCLlg-fe860330381870662e320824449fe3c9,webm,8TtYaWTCLlg-fe860330381870662e320824449fe3c9.webm,8TtYaWTCLlg-fe860330381870662e320824449fe3c9.webm +1488,/datadrive/videos/F0hgeJjHLIk-768461c03ef86e878821e6a49581f45d.webm,27a2fb9fd91a4facb9d519856f84ab3b.webm,1488.0,False,64k,0.74,,,,logos/msnbc.png,6.0,False,True,-0.13,F0hgeJjHLIk-768461c03ef86e878821e6a49581f45d,webm,F0hgeJjHLIk-768461c03ef86e878821e6a49581f45d.webm,F0hgeJjHLIk-768461c03ef86e878821e6a49581f45d.webm +1489,/datadrive/videos/9MfsJzRqds4-aad97d4a6c405926ec7ec67059aecca2.webm,8743a4b3b02540fcb5134e9e379e1306.webm,1489.0,,,,,,-0.16,logos/jazeera.png,6.0,False,False,0.09,9MfsJzRqds4-aad97d4a6c405926ec7ec67059aecca2,webm,9MfsJzRqds4-aad97d4a6c405926ec7ec67059aecca2.webm,9MfsJzRqds4-aad97d4a6c405926ec7ec67059aecca2.webm +1491,/datadrive/videos/Qr3F_QZPAsc-d9f22bf3783f8033b1dd3e713b0f58d6.webm,1026ad75f5af43b390a82a5fbb64baf2.webm,1491.0,,32k,,,,-0.14,logos/ge.gif,0.0,False,True,-0.08,Qr3F_QZPAsc-d9f22bf3783f8033b1dd3e713b0f58d6,webm,Qr3F_QZPAsc-d9f22bf3783f8033b1dd3e713b0f58d6.webm,Qr3F_QZPAsc-d9f22bf3783f8033b1dd3e713b0f58d6.webm +1492,/datadrive/videos/ZIGi6B6WNaU-df7cb3084fc6a7654e2f3c1560d41efc.mp4,4fc8df2958eb4efea026cf8c0f859589.webm,1492.0,True,128k,0.49,[0.18 0.11],webm,-0.08,logos/download.png,5.0,False,False,0.18,ZIGi6B6WNaU-df7cb3084fc6a7654e2f3c1560d41efc,mp4,ZIGi6B6WNaU-df7cb3084fc6a7654e2f3c1560d41efc.mp4,ZIGi6B6WNaU-df7cb3084fc6a7654e2f3c1560d41efc.mp4 +1495,/datadrive/videos/Fl7q6uzxGCI-296971cbd124a30c3fc424b2955d4585.mp4,b206c6fb5bcb4c4fbf545cb56a9400ea.webm,1495.0,False,64k,,[0.17 0.17],webm,,,,False,True,-0.33,Fl7q6uzxGCI-296971cbd124a30c3fc424b2955d4585,mp4,Fl7q6uzxGCI-296971cbd124a30c3fc424b2955d4585.mp4,Fl7q6uzxGCI-296971cbd124a30c3fc424b2955d4585.mp4 +1496,/datadrive/videos/eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11.mp4,bb14c871d9c046d58629c9bf67ad56d0.mp4,1496.0,True,,0.94,,,0.04,,,False,False,-0.3,eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11,mp4,eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11.mp4,eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11.mp4 +1497,/datadrive/videos/_vrtINi3iec-95be9f19552b0833301110b85dd3d7fe.webm,58fb4955216b4cf8ba68172a79da09ab.webm,1497.0,False,16k,,,,,logos/new.gif,,False,False,0.31,_vrtINi3iec-95be9f19552b0833301110b85dd3d7fe,webm,_vrtINi3iec-95be9f19552b0833301110b85dd3d7fe.webm,_vrtINi3iec-95be9f19552b0833301110b85dd3d7fe.webm +1498,/datadrive/videos/vQBNafHxFFM-35a9f83ed836cc4783b770ebf3e20f9c.mp4,9760edd5df544d70bda5f13ecc85cb17.mp4,1498.0,,,0.96,,,0.12,logos/msnbc.png,,False,True,0.36,vQBNafHxFFM-35a9f83ed836cc4783b770ebf3e20f9c,mp4,vQBNafHxFFM-35a9f83ed836cc4783b770ebf3e20f9c.mp4,vQBNafHxFFM-35a9f83ed836cc4783b770ebf3e20f9c.mp4 +1500,/datadrive/videos/WPlemPk0ftQ-7fd469b3130c7cd1a622b7dbad4284bc.mp4,82ab5ed115ad4c9ea8bfe874489a3ce6.mp4,1500.0,False,64k,,[0.1 0.14],,-0.01,logos/another.gif,,False,False,-0.32,WPlemPk0ftQ-7fd469b3130c7cd1a622b7dbad4284bc,mp4,WPlemPk0ftQ-7fd469b3130c7cd1a622b7dbad4284bc.mp4,WPlemPk0ftQ-7fd469b3130c7cd1a622b7dbad4284bc.mp4 +1501,/datadrive/videos/LBzKvMEXH9A-215ab38cd69d37e819f795deeef75606.webm,ff05efe23f784e9b9b65da36814d9edb.webm,1501.0,,,,[0.11 0.11],,-0.17,,,False,True,0.07,LBzKvMEXH9A-215ab38cd69d37e819f795deeef75606,webm,LBzKvMEXH9A-215ab38cd69d37e819f795deeef75606.webm,LBzKvMEXH9A-215ab38cd69d37e819f795deeef75606.webm +1503,/datadrive/videos/KV__ybKKeGo-d6b3f620c3a82633177d23d53413f359.mp4,b428157a95cd4b5c9a2b58a8658fc3d9.webm,1503.0,,64k,0.45,[0.08 0.08],webm,-0.06,logos/ge.gif,6.0,False,True,-0.15,KV__ybKKeGo-d6b3f620c3a82633177d23d53413f359,mp4,KV__ybKKeGo-d6b3f620c3a82633177d23d53413f359.mp4,KV__ybKKeGo-d6b3f620c3a82633177d23d53413f359.mp4 +1504,/datadrive/videos/ujYKUuj-Cts-1b46261ee082f4519bac8000e34c23b4.webm,4c02861e5da8490481f6ead21e275abe.ogv,1504.0,False,,0.7,,ogv,-0.03,,,False,False,-0.35,ujYKUuj-Cts-1b46261ee082f4519bac8000e34c23b4,webm,ujYKUuj-Cts-1b46261ee082f4519bac8000e34c23b4.webm,ujYKUuj-Cts-1b46261ee082f4519bac8000e34c23b4.webm +1505,/datadrive/videos/eTHdxBWO-1M-118aa21ac214399e2aa96ee8df719ab2.webm,594ed45dd42c429e84a20837b2dbcff1.webm,1505.0,True,32k,,,webm,-0.12,,7.0,False,False,0.35,eTHdxBWO-1M-118aa21ac214399e2aa96ee8df719ab2,webm,eTHdxBWO-1M-118aa21ac214399e2aa96ee8df719ab2.webm,eTHdxBWO-1M-118aa21ac214399e2aa96ee8df719ab2.webm +1506,/datadrive/videos/SLAPFQbOfn8-a9e5f71712f840303b604cbd919bc771.webm,d17a1e230cd6403e8ef5ee4f8d3ae8e3.webm,1506.0,,128k,,[0.17 0.18],,0.06,logos/new.gif,,False,True,0.15,SLAPFQbOfn8-a9e5f71712f840303b604cbd919bc771,webm,SLAPFQbOfn8-a9e5f71712f840303b604cbd919bc771.webm,SLAPFQbOfn8-a9e5f71712f840303b604cbd919bc771.webm +1507,/datadrive/videos/VaO-OpFPg2A-0eee60c766905dd04230864eee939e21.mp4,2cd6296fccef413088f9f3ac1589c4bb.mp4,1507.0,True,64k,,[0.07 0.11],mp4,0.02,,,False,False,,VaO-OpFPg2A-0eee60c766905dd04230864eee939e21,mp4,VaO-OpFPg2A-0eee60c766905dd04230864eee939e21.mp4,VaO-OpFPg2A-0eee60c766905dd04230864eee939e21.mp4 +1508,/datadrive/videos/T2XxvOQdyyA-35da0867bfa3f94ec1ad478919789aef.webm,04ba2fc494e24632937d97dd23cc16af.mp4,1508.0,,64k,,[0.06 0.17],mp4,0.14,logos/ge.gif,,True,True,,T2XxvOQdyyA-35da0867bfa3f94ec1ad478919789aef,webm,T2XxvOQdyyA-35da0867bfa3f94ec1ad478919789aef.webm,T2XxvOQdyyA-35da0867bfa3f94ec1ad478919789aef.webm +1510,/datadrive/videos/IG83tYRc44Q-d2fccfc9fa5914fa62a041fce6da4756.webm,75e95f3455d848afb624446495655c23.webm,1510.0,,,,,webm,,,3.0,True,False,-0.26,IG83tYRc44Q-d2fccfc9fa5914fa62a041fce6da4756,webm,IG83tYRc44Q-d2fccfc9fa5914fa62a041fce6da4756.webm,IG83tYRc44Q-d2fccfc9fa5914fa62a041fce6da4756.webm +1511,/datadrive/videos/XHmMM-EUsNA-f1227951ad5f8e2b4f57c1f2ad7f9045.mp4,25445680376b479eacfd737bccd5d0f1.ogv,1511.0,,16k,0.39,,ogv,,,7.01,False,True,0.35,XHmMM-EUsNA-f1227951ad5f8e2b4f57c1f2ad7f9045,mp4,XHmMM-EUsNA-f1227951ad5f8e2b4f57c1f2ad7f9045.mp4,XHmMM-EUsNA-f1227951ad5f8e2b4f57c1f2ad7f9045.mp4 +1513,/datadrive/videos/CW-SgT5Wak4-b0ef34c18543661d4ec33dc7a598970a.webm,c9f0ae3b2c604e6582ce2a33dce90f4e.ogv,1513.0,False,,0.29,[0.16 0.17],ogv,,logos/msnbc.png,3.0,True,True,0.39,CW-SgT5Wak4-b0ef34c18543661d4ec33dc7a598970a,webm,CW-SgT5Wak4-b0ef34c18543661d4ec33dc7a598970a.webm,CW-SgT5Wak4-b0ef34c18543661d4ec33dc7a598970a.webm +1514,/datadrive/videos/Rz3g9MRIIt4-1db09c87e192c3638b978a65b4b0efd5.webm,be458fb9a2f74b1db3e7eaea72ad7006.ogv,1514.0,False,,0.37,,ogv,-0.12,logos/ge.gif,1.0,False,True,,Rz3g9MRIIt4-1db09c87e192c3638b978a65b4b0efd5,webm,Rz3g9MRIIt4-1db09c87e192c3638b978a65b4b0efd5.webm,Rz3g9MRIIt4-1db09c87e192c3638b978a65b4b0efd5.webm +1515,/datadrive/videos/ranjedmwXmM-a65d1ff1809ed988afe55a7f442bbf17.webm,d7faf03a54b94b8abdfd51b7ce8c7378.webm,1515.0,,128k,,,,,,8.0,False,True,0.0,ranjedmwXmM-a65d1ff1809ed988afe55a7f442bbf17,webm,ranjedmwXmM-a65d1ff1809ed988afe55a7f442bbf17.webm,ranjedmwXmM-a65d1ff1809ed988afe55a7f442bbf17.webm +1516,/datadrive/videos/GKUa6sPvcgo-1603d3e1e6c866967ecb9f6a0ea75d5e.webm,c6552047e5d04833b8f8040f4bfa5ca6.mp4,1516.0,,16k,0.94,[0.15 0.07],mp4,,,,False,True,,GKUa6sPvcgo-1603d3e1e6c866967ecb9f6a0ea75d5e,webm,GKUa6sPvcgo-1603d3e1e6c866967ecb9f6a0ea75d5e.webm,GKUa6sPvcgo-1603d3e1e6c866967ecb9f6a0ea75d5e.webm +1517,/datadrive/videos/ET7eF_wcdvI-1be1ab2d45916c9603727c24cc174b90.webm,2366e8d3a72f45759557e764dcc346e5.webm,1517.0,False,32k,,[0.03 0.01],,0.03,,4.0,False,False,0.3,ET7eF_wcdvI-1be1ab2d45916c9603727c24cc174b90,webm,ET7eF_wcdvI-1be1ab2d45916c9603727c24cc174b90.webm,ET7eF_wcdvI-1be1ab2d45916c9603727c24cc174b90.webm +1518,/datadrive/videos/uhQnOxMnXes-f90ded2c490d6988bd71d51119818b9f.webm,9db6d9495ca94533918f6d82c5cf7377.webm,1518.0,False,,,[0.05 0.08],,,logos/ge.gif,,False,False,0.21,uhQnOxMnXes-f90ded2c490d6988bd71d51119818b9f,webm,uhQnOxMnXes-f90ded2c490d6988bd71d51119818b9f.webm,uhQnOxMnXes-f90ded2c490d6988bd71d51119818b9f.webm +1519,/datadrive/videos/qXPDuNNAdlk-0ac7016edec3a32c8151eda28872d318.webm,72265c0f7aaa4b178520677ced1d2428.mp4,1519.0,True,64k,,,mp4,-0.19,,1.0,False,False,,qXPDuNNAdlk-0ac7016edec3a32c8151eda28872d318,webm,qXPDuNNAdlk-0ac7016edec3a32c8151eda28872d318.webm,qXPDuNNAdlk-0ac7016edec3a32c8151eda28872d318.webm +1520,/datadrive/videos/NOJi0FUd3NM-4f56b784e9f2a432ec606bc9f1933028.webm,481165d4c674432e8bd8d8fe59e5bf36.webm,1520.0,,,,[0.11 0.08],webm,,,,False,True,-0.28,NOJi0FUd3NM-4f56b784e9f2a432ec606bc9f1933028,webm,NOJi0FUd3NM-4f56b784e9f2a432ec606bc9f1933028.webm,NOJi0FUd3NM-4f56b784e9f2a432ec606bc9f1933028.webm +1521,/datadrive/videos/Ldyf6N-OK78-955e6d4838153982bd60431a0d364132.mp4,9c7b203d0846462884d5d80c740aed29.mp4,1521.0,False,,,[0.16 0.17],,-0.09,logos/openair.gif,0.0,False,False,0.2,Ldyf6N-OK78-955e6d4838153982bd60431a0d364132,mp4,Ldyf6N-OK78-955e6d4838153982bd60431a0d364132.mp4,Ldyf6N-OK78-955e6d4838153982bd60431a0d364132.mp4 +1523,/datadrive/videos/gfU9SzCC5Bo-711bef0c53c21b4cdc137f226da2ca72.mp4,3b9f7a3c37f849ee8a8273a37a1e070e.webm,1523.0,,128k,,[0.17 0.17],webm,,,,False,False,,gfU9SzCC5Bo-711bef0c53c21b4cdc137f226da2ca72,mp4,gfU9SzCC5Bo-711bef0c53c21b4cdc137f226da2ca72.mp4,gfU9SzCC5Bo-711bef0c53c21b4cdc137f226da2ca72.mp4 +1524,/datadrive/videos/qxms8o7vinY-86966dd7dcc8aea4203d1ef541618797.webm,a6394bf9b89b45608d8fbdb29e11a055.webm,1524.0,,,0.56,,,0.0,logos/new.gif,0.0,False,True,,qxms8o7vinY-86966dd7dcc8aea4203d1ef541618797,webm,qxms8o7vinY-86966dd7dcc8aea4203d1ef541618797.webm,qxms8o7vinY-86966dd7dcc8aea4203d1ef541618797.webm +1525,/datadrive/videos/RdeDDtkdt2s-f5c8f127a20a8b2b3e6ce1909aca2d63.webm,a9865558d059482f9506c73cf0219f13.webm,1525.0,,,,,,,logos/sbt.gif,,False,True,0.24,RdeDDtkdt2s-f5c8f127a20a8b2b3e6ce1909aca2d63,webm,RdeDDtkdt2s-f5c8f127a20a8b2b3e6ce1909aca2d63.webm,RdeDDtkdt2s-f5c8f127a20a8b2b3e6ce1909aca2d63.webm +1526,/datadrive/videos/YK3Yog_vIFg-578f7e70cf63d2cc4866e6b2bfd0154f.webm,1cf2724c967445629f09c3b4fceb460d.mp4,1526.0,,,,,mp4,0.18,logos/ge.gif,,False,False,,YK3Yog_vIFg-578f7e70cf63d2cc4866e6b2bfd0154f,webm,YK3Yog_vIFg-578f7e70cf63d2cc4866e6b2bfd0154f.webm,YK3Yog_vIFg-578f7e70cf63d2cc4866e6b2bfd0154f.webm +1528,/datadrive/videos/LdJJGIoP--k-9d112d0405b8e8fe61bfc22a1d6e14f3.mp4,1b417eab489443a5bd9ae525a95de3dc.mp4,1528.0,True,64k,0.74,,,-0.09,logos/download.png,7.0,False,True,-0.06,LdJJGIoP--k-9d112d0405b8e8fe61bfc22a1d6e14f3,mp4,LdJJGIoP--k-9d112d0405b8e8fe61bfc22a1d6e14f3.mp4,LdJJGIoP--k-9d112d0405b8e8fe61bfc22a1d6e14f3.mp4 +1529,/datadrive/videos/F1YLXj4AbxY-5dd62d7352142dd216998422cab41798.webm,8392806214374b82a372a020c2b4385d.webm,1529.0,,,0.71,[0.15 0.09],,-0.04,logos/openair.gif,9.0,False,True,,F1YLXj4AbxY-5dd62d7352142dd216998422cab41798,webm,F1YLXj4AbxY-5dd62d7352142dd216998422cab41798.webm,F1YLXj4AbxY-5dd62d7352142dd216998422cab41798.webm +1530,/datadrive/videos/_afTSrDroHs-06d2f1b68aabc513424f74184663caa9.mp4,28572544f875417fb926b5cc9c74c62a.mp4,1530.0,False,,,[0.17 0.05],mp4,,,,False,True,0.12,_afTSrDroHs-06d2f1b68aabc513424f74184663caa9,mp4,_afTSrDroHs-06d2f1b68aabc513424f74184663caa9.mp4,_afTSrDroHs-06d2f1b68aabc513424f74184663caa9.mp4 +1531,/datadrive/videos/fLufiy-Vulc-82b30c6140e7525e1394d0672ae669f7.mp4,434b3aa0cff7430b9fe08c72fbe12da0.webm,1531.0,,64k,0.4,[0.18 0.14],webm,-0.17,,2.0,False,False,0.02,fLufiy-Vulc-82b30c6140e7525e1394d0672ae669f7,mp4,fLufiy-Vulc-82b30c6140e7525e1394d0672ae669f7.mp4,fLufiy-Vulc-82b30c6140e7525e1394d0672ae669f7.mp4 +1532,/datadrive/videos/ScD_CSpV8fw-358677edbf80aa5dcb0d0a0f97a9455a.webm,0dbdb8c12bfa4e75880b606f3bb4a43b.webm,1532.0,True,,,,webm,,,,False,True,,ScD_CSpV8fw-358677edbf80aa5dcb0d0a0f97a9455a,webm,ScD_CSpV8fw-358677edbf80aa5dcb0d0a0f97a9455a.webm,ScD_CSpV8fw-358677edbf80aa5dcb0d0a0f97a9455a.webm +1534,/datadrive/videos/coljjn4As0o-19b8dda027146a47ec5a98f345e89a55.webm,6fc57abc3cad49a59611fac533813c7c.webm,1534.0,,64k,,[0.13 0.15],webm,,,3.0,False,True,-0.16,coljjn4As0o-19b8dda027146a47ec5a98f345e89a55,webm,coljjn4As0o-19b8dda027146a47ec5a98f345e89a55.webm,coljjn4As0o-19b8dda027146a47ec5a98f345e89a55.webm +1536,/datadrive/videos/ei5ehIzB4C8-5d159b98be77c4d112e49d2a0525cbe0.webm,4111deaf06684d66a0204322746e6fa1.webm,1536.0,False,128k,0.63,,,,logos/download.png,5.0,False,False,0.06,ei5ehIzB4C8-5d159b98be77c4d112e49d2a0525cbe0,webm,ei5ehIzB4C8-5d159b98be77c4d112e49d2a0525cbe0.webm,ei5ehIzB4C8-5d159b98be77c4d112e49d2a0525cbe0.webm +1538,/datadrive/videos/BKjNiRP3VHA-0ac41f47f9a783d48ad9e44aba277fc1.webm,cabbc73d7b444d8a94734bace234d179.webm,1538.0,True,16k,0.59,,webm,-0.15,,6.0,False,False,-0.12,BKjNiRP3VHA-0ac41f47f9a783d48ad9e44aba277fc1,webm,BKjNiRP3VHA-0ac41f47f9a783d48ad9e44aba277fc1.webm,BKjNiRP3VHA-0ac41f47f9a783d48ad9e44aba277fc1.webm +1539,/datadrive/videos/SJUdhJHtT6Q-ba048802fbf47e53ba475cd8ae5eb011.webm,c2d1c6ad89e140c7b685557f08c2d742.ogv,1539.0,False,,,[0.02 0.14],ogv,0.07,logos/msnbc.png,,False,False,-0.03,SJUdhJHtT6Q-ba048802fbf47e53ba475cd8ae5eb011,webm,SJUdhJHtT6Q-ba048802fbf47e53ba475cd8ae5eb011.webm,SJUdhJHtT6Q-ba048802fbf47e53ba475cd8ae5eb011.webm +1540,/datadrive/videos/Hwx8FQ-tfdk-777d2058d2825bdc7f8de46d3c712d83.mp4,0ba37a4bf46142e4bf321654e2c63c25.ogv,1540.0,True,64k,,,ogv,,,9.0,False,True,,Hwx8FQ-tfdk-777d2058d2825bdc7f8de46d3c712d83,mp4,Hwx8FQ-tfdk-777d2058d2825bdc7f8de46d3c712d83.mp4,Hwx8FQ-tfdk-777d2058d2825bdc7f8de46d3c712d83.mp4 +1541,/datadrive/videos/lNGR6od1L2E-e57f9e81e5c5a9986216684fdd96a1d1.webm,719f079369ff4d1c9418cd7694880c7a.webm,1541.0,,,0.56,[0.11 0.14],,0.01,logos/new.gif,3.985,True,False,,lNGR6od1L2E-e57f9e81e5c5a9986216684fdd96a1d1,webm,lNGR6od1L2E-e57f9e81e5c5a9986216684fdd96a1d1.webm,lNGR6od1L2E-e57f9e81e5c5a9986216684fdd96a1d1.webm +1542,/datadrive/videos/TfTJudxW4gI-4de2f2f0b2e63892146b7024c0bb8a8c.webm,ac703a21610246558e55dbe3afcadbb3.webm,1542.0,,,,,,,logos/another.gif,3.0,False,True,,TfTJudxW4gI-4de2f2f0b2e63892146b7024c0bb8a8c,webm,TfTJudxW4gI-4de2f2f0b2e63892146b7024c0bb8a8c.webm,TfTJudxW4gI-4de2f2f0b2e63892146b7024c0bb8a8c.webm +1543,/datadrive/videos/g0mXD3YfS0Y-a7a9085a81d4dd23210c33ab644b6ad9.webm,4f7a18f4f51b4a8b91e555cdfa0ce84b.mp4,1543.0,False,,0.94,[0.03 0.01],mp4,,logos/fox.png,0.0,False,False,0.25,g0mXD3YfS0Y-a7a9085a81d4dd23210c33ab644b6ad9,webm,g0mXD3YfS0Y-a7a9085a81d4dd23210c33ab644b6ad9.webm,g0mXD3YfS0Y-a7a9085a81d4dd23210c33ab644b6ad9.webm +1545,/datadrive/videos/S6pQ0KuAWlU-41478f43f994aadcfe57411afe178344.webm,630485e8e04847a9b4976bf867969576.webm,1545.0,,,0.32,,,-0.15,,1.0,False,False,,S6pQ0KuAWlU-41478f43f994aadcfe57411afe178344,webm,S6pQ0KuAWlU-41478f43f994aadcfe57411afe178344.webm,S6pQ0KuAWlU-41478f43f994aadcfe57411afe178344.webm +1546,/datadrive/videos/wlqILQddyvk-493ccbdcabfc374df28ec78d7045263f.webm,1bcca72b33824e95b0b54569531e4c52.ogv,1546.0,,64k,,,ogv,,logos/download.png,9.0,False,True,,wlqILQddyvk-493ccbdcabfc374df28ec78d7045263f,webm,wlqILQddyvk-493ccbdcabfc374df28ec78d7045263f.webm,wlqILQddyvk-493ccbdcabfc374df28ec78d7045263f.webm +1547,/datadrive/videos/YtTp4U1aZ6A-b40bd46084d496f6441d71700b840854.webm,aea4e23ac0dc437ebcdb2986a9735403.webm,1547.0,,64k,,[0.07 0.05],webm,0.15,,8.0,False,True,,YtTp4U1aZ6A-b40bd46084d496f6441d71700b840854,webm,YtTp4U1aZ6A-b40bd46084d496f6441d71700b840854.webm,YtTp4U1aZ6A-b40bd46084d496f6441d71700b840854.webm +1549,/datadrive/videos/mRe_w0W6yYE-e0ab7a5fb595f9aba2f04a78e66b6183.webm,77d9388a34db480093e1270fdc6262e6.ogv,1549.0,True,,,,ogv,,,,False,True,0.09,mRe_w0W6yYE-e0ab7a5fb595f9aba2f04a78e66b6183,webm,mRe_w0W6yYE-e0ab7a5fb595f9aba2f04a78e66b6183.webm,mRe_w0W6yYE-e0ab7a5fb595f9aba2f04a78e66b6183.webm +1550,/datadrive/videos/sbrS8eLwB6c-a1a744efbeb0de68def577933933f111.webm,96fbbe1954c84c58bd9c8626c68479f9.mp4,1550.0,False,64k,,,mp4,0.09,logos/ge.gif,,True,False,0.06,sbrS8eLwB6c-a1a744efbeb0de68def577933933f111,webm,sbrS8eLwB6c-a1a744efbeb0de68def577933933f111.webm,sbrS8eLwB6c-a1a744efbeb0de68def577933933f111.webm +1551,/datadrive/videos/ullnPRj8Cp0-133cdf55ae4ad7f5de5dc7ad2172ae12.webm,00ef2ffbb5cf4276bff33d0d4831cd0d.webm,1551.0,,64k,,[0.12 0.15],webm,,,,True,True,,ullnPRj8Cp0-133cdf55ae4ad7f5de5dc7ad2172ae12,webm,ullnPRj8Cp0-133cdf55ae4ad7f5de5dc7ad2172ae12.webm,ullnPRj8Cp0-133cdf55ae4ad7f5de5dc7ad2172ae12.webm +1552,/datadrive/videos/XHV60Kr9n7E-1c439b01e88338034c68745ca6235a47.mp4,054444f668a64c5dbf5a76ad34911ed5.mp4,1552.0,False,,,,,,,4.0,False,False,-0.17,XHV60Kr9n7E-1c439b01e88338034c68745ca6235a47,mp4,XHV60Kr9n7E-1c439b01e88338034c68745ca6235a47.mp4,XHV60Kr9n7E-1c439b01e88338034c68745ca6235a47.mp4 +1553,/datadrive/videos/iZAGMHLJ2U8-0a2d3652c2e8132baf9593de3cfae8b1.mp4,4f2e649a519b417e8b0b3c5934ef6949.ogv,1553.0,,,,,ogv,,,,False,False,,iZAGMHLJ2U8-0a2d3652c2e8132baf9593de3cfae8b1,mp4,iZAGMHLJ2U8-0a2d3652c2e8132baf9593de3cfae8b1.mp4,iZAGMHLJ2U8-0a2d3652c2e8132baf9593de3cfae8b1.mp4 +1554,/datadrive/videos/igcv5oBfyVw-4bc864401b0189c11dfd44945ad4cafe.webm,1b47339d45374c3e8e9b4dec24d28837.mp4,1554.0,False,,,,mp4,0.16,logos/new.gif,,False,False,,igcv5oBfyVw-4bc864401b0189c11dfd44945ad4cafe,webm,igcv5oBfyVw-4bc864401b0189c11dfd44945ad4cafe.webm,igcv5oBfyVw-4bc864401b0189c11dfd44945ad4cafe.webm +1555,/datadrive/videos/WPlemPk0ftQ-7fd469b3130c7cd1a622b7dbad4284bc.mp4,8426932dc0e5463e83e520c3cc84c314.mp4,1555.0,False,,0.48,[0.13 0.18],mp4,-0.16,logos/download.png,,False,True,0.08,WPlemPk0ftQ-7fd469b3130c7cd1a622b7dbad4284bc,mp4,WPlemPk0ftQ-7fd469b3130c7cd1a622b7dbad4284bc.mp4,WPlemPk0ftQ-7fd469b3130c7cd1a622b7dbad4284bc.mp4 +1556,/datadrive/videos/HhBaxVxyVDw-e1c51bb2eb338aefc321ec82f3990177.webm,8094ca3852f74eeb989379d6c3758175.webm,1556.0,,,0.37,[0.04 0.01],webm,,logos/msnbc.png,,False,True,,HhBaxVxyVDw-e1c51bb2eb338aefc321ec82f3990177,webm,HhBaxVxyVDw-e1c51bb2eb338aefc321ec82f3990177.webm,HhBaxVxyVDw-e1c51bb2eb338aefc321ec82f3990177.webm +1557,/datadrive/videos/N7dcXWAc9Tc-2523234045ecc433c94427408c1e73bc.mp4,140bcc3a681e4ef7aabef552f7a28ffc.webm,1557.0,,,,[0.05 0.04],webm,0.04,logos/new.gif,3.0,False,False,,N7dcXWAc9Tc-2523234045ecc433c94427408c1e73bc,mp4,N7dcXWAc9Tc-2523234045ecc433c94427408c1e73bc.mp4,N7dcXWAc9Tc-2523234045ecc433c94427408c1e73bc.mp4 +1559,/datadrive/videos/xD9ucZlmGg8-809c988d227a4d021486edb24bde58c7.mp4,20ef78f27905452db356123f68a38382.ogv,1559.0,False,32k,0.35,,ogv,,,,False,False,-0.37,xD9ucZlmGg8-809c988d227a4d021486edb24bde58c7,mp4,xD9ucZlmGg8-809c988d227a4d021486edb24bde58c7.mp4,xD9ucZlmGg8-809c988d227a4d021486edb24bde58c7.mp4 +1560,/datadrive/videos/6yJuyFN4Ihg-90dfe7b732a24ef61fd52c5eae95162e.mp4,cf0cbedc1b314dd689525c61503babb4.webm,1560.0,False,,0.9,,webm,,,0.0,False,False,,6yJuyFN4Ihg-90dfe7b732a24ef61fd52c5eae95162e,mp4,6yJuyFN4Ihg-90dfe7b732a24ef61fd52c5eae95162e.mp4,6yJuyFN4Ihg-90dfe7b732a24ef61fd52c5eae95162e.mp4 +1561,/datadrive/videos/aeiODbHhJwA-6685652076c6f281b4272b8d3567614d.webm,c505fdabf9494c44b956350c4c53fadc.ogv,1561.0,,128k,0.5,[0.03 0.12],ogv,-0.16,logos/new.gif,5.0,False,False,,aeiODbHhJwA-6685652076c6f281b4272b8d3567614d,webm,aeiODbHhJwA-6685652076c6f281b4272b8d3567614d.webm,aeiODbHhJwA-6685652076c6f281b4272b8d3567614d.webm +1562,/datadrive/videos/lNrWLV1HFb8-9406281f9e7cbd14be219fa46eccce3a.webm,c75b13f4f5d14f739863f32e946ce204.webm,1562.0,,,,,webm,-0.06,logos/sbt.gif,,False,True,-0.35,lNrWLV1HFb8-9406281f9e7cbd14be219fa46eccce3a,webm,lNrWLV1HFb8-9406281f9e7cbd14be219fa46eccce3a.webm,lNrWLV1HFb8-9406281f9e7cbd14be219fa46eccce3a.webm +1564,/datadrive/videos/7w1dfvReCJs-8d6f44cdb5be3bc8f8e6f5f80d2cdc33.mp4,d6377fd7d9554e838547a34162f8d291.mp4,1564.0,True,128k,,,,-0.18,,,False,False,0.2,7w1dfvReCJs-8d6f44cdb5be3bc8f8e6f5f80d2cdc33,mp4,7w1dfvReCJs-8d6f44cdb5be3bc8f8e6f5f80d2cdc33.mp4,7w1dfvReCJs-8d6f44cdb5be3bc8f8e6f5f80d2cdc33.mp4 +1566,/datadrive/videos/0goLSbEpolg-8d53742c0ba79eb83eb37207c0b084ce.mp4,021b31c4e0f744a8980d170f75492625.ogv,1566.0,False,,,[0.06 0.14],ogv,0.03,,6.535,False,False,-0.27,0goLSbEpolg-8d53742c0ba79eb83eb37207c0b084ce,mp4,0goLSbEpolg-8d53742c0ba79eb83eb37207c0b084ce.mp4,0goLSbEpolg-8d53742c0ba79eb83eb37207c0b084ce.mp4 +1567,/datadrive/videos/4HcDSpWFmg0-79380a36b7587add31e998fb5180be2f.webm,1619b886959e43c399f18ee9cae35546.ogv,1567.0,,64k,0.58,[0.14 0.07],ogv,0.07,logos/new.gif,7.0,False,False,,4HcDSpWFmg0-79380a36b7587add31e998fb5180be2f,webm,4HcDSpWFmg0-79380a36b7587add31e998fb5180be2f.webm,4HcDSpWFmg0-79380a36b7587add31e998fb5180be2f.webm +1568,/datadrive/videos/gHOKz_4h5S8-2cf2156b48ec3a6ccc26c2e6cbaa885a.mp4,0c6d5cf06f5b44c99cd5c54e53fa2657.mp4,1568.0,,,,,,0.16,,7.0,False,True,-0.36,gHOKz_4h5S8-2cf2156b48ec3a6ccc26c2e6cbaa885a,mp4,gHOKz_4h5S8-2cf2156b48ec3a6ccc26c2e6cbaa885a.mp4,gHOKz_4h5S8-2cf2156b48ec3a6ccc26c2e6cbaa885a.mp4 +1569,/datadrive/videos/_tt2AuFPkFQ-90cfc13d966b7f512f0d6f0fe63cafd4.mp4,409a414f74e3478bb2a3517d188b8c5c.ogv,1569.0,False,,0.7,,ogv,-0.04,,,False,False,,_tt2AuFPkFQ-90cfc13d966b7f512f0d6f0fe63cafd4,mp4,_tt2AuFPkFQ-90cfc13d966b7f512f0d6f0fe63cafd4.mp4,_tt2AuFPkFQ-90cfc13d966b7f512f0d6f0fe63cafd4.mp4 +1570,/datadrive/videos/gqX0f7c4Qcw-ef4cc9354f3b0e4aec04a78bdc5f5416.webm,a9a6c38d7ae64bafb7bd99e9238fe2cf.webm,1570.0,,128k,0.81,,,-0.05,logos/msnbc.png,3.0,False,True,-0.06,gqX0f7c4Qcw-ef4cc9354f3b0e4aec04a78bdc5f5416,webm,gqX0f7c4Qcw-ef4cc9354f3b0e4aec04a78bdc5f5416.webm,gqX0f7c4Qcw-ef4cc9354f3b0e4aec04a78bdc5f5416.webm +1571,/datadrive/videos/PyBoAuAKHmk-5ee03041f8da9f0d8b684ba68ba8344c.webm,c90149c5c4e3445aae231f8c756d2803.webm,1571.0,False,16k,,,webm,,logos/jazeera.png,,False,False,,PyBoAuAKHmk-5ee03041f8da9f0d8b684ba68ba8344c,webm,PyBoAuAKHmk-5ee03041f8da9f0d8b684ba68ba8344c.webm,PyBoAuAKHmk-5ee03041f8da9f0d8b684ba68ba8344c.webm +1572,/datadrive/videos/iFxpLVkTdJA-9568acaa3a92f975604e69a9d94c6e28.mp4,2da49cdbc642415c8efd78c2b25d9e4e.webm,1572.0,,32k,0.25,,webm,,,,True,True,,iFxpLVkTdJA-9568acaa3a92f975604e69a9d94c6e28,mp4,iFxpLVkTdJA-9568acaa3a92f975604e69a9d94c6e28.mp4,iFxpLVkTdJA-9568acaa3a92f975604e69a9d94c6e28.mp4 +1573,/datadrive/videos/No7OjWSI9ww-94e6af11e0a9ce979b5e3ad6ce2d6071.webm,82c1bdfe58394da8bd9e7312be341318.webm,1573.0,True,16k,0.52,,,,logos/msnbc.png,3.0,False,False,-0.1,No7OjWSI9ww-94e6af11e0a9ce979b5e3ad6ce2d6071,webm,No7OjWSI9ww-94e6af11e0a9ce979b5e3ad6ce2d6071.webm,No7OjWSI9ww-94e6af11e0a9ce979b5e3ad6ce2d6071.webm +1574,/datadrive/videos/zjrggLxsFfM-408573463eeae933d6e84f7ade442750.webm,d782381300114297b84a1544d9bf0a64.webm,1574.0,False,16k,,,,,,3.0,False,False,,zjrggLxsFfM-408573463eeae933d6e84f7ade442750,webm,zjrggLxsFfM-408573463eeae933d6e84f7ade442750.webm,zjrggLxsFfM-408573463eeae933d6e84f7ade442750.webm +1575,/datadrive/videos/T2UBRjVxyGk-e0fb7da5295a8561aba98aba36167542.webm,3680399397e047b187a939ae56c4fc3e.mp4,1575.0,False,,0.26,[0.02 0.12],mp4,,logos/fox.png,6.0,False,False,,T2UBRjVxyGk-e0fb7da5295a8561aba98aba36167542,webm,T2UBRjVxyGk-e0fb7da5295a8561aba98aba36167542.webm,T2UBRjVxyGk-e0fb7da5295a8561aba98aba36167542.webm +1576,/datadrive/videos/22Ql6gOuUB4-8604ec2841ac1a05f15fa65719cf3075.webm,71e9600736be418ca3076a1d1e35b7cb.mp4,1576.0,,64k,,,mp4,-0.17,,,True,False,,22Ql6gOuUB4-8604ec2841ac1a05f15fa65719cf3075,webm,22Ql6gOuUB4-8604ec2841ac1a05f15fa65719cf3075.webm,22Ql6gOuUB4-8604ec2841ac1a05f15fa65719cf3075.webm +1577,/datadrive/videos/VJBGMt2z85s-6a0a20d85be445402186df39a8e6d2e1.mp4,4cfcc6029d0041da8ae88da13019ba63.mp4,1577.0,False,,0.21,[0.17 0.07],,,logos/jazeera.png,,False,False,-0.27,VJBGMt2z85s-6a0a20d85be445402186df39a8e6d2e1,mp4,VJBGMt2z85s-6a0a20d85be445402186df39a8e6d2e1.mp4,VJBGMt2z85s-6a0a20d85be445402186df39a8e6d2e1.mp4 +1578,/datadrive/videos/L5ffaXW6Y9g-a0386b63e6bb1b86282a699b11dd8072.mp4,d3aa0125a2f84f08bc8d054b85d73112.mp4,1578.0,False,128k,0.54,,,-0.07,,,False,True,,L5ffaXW6Y9g-a0386b63e6bb1b86282a699b11dd8072,mp4,L5ffaXW6Y9g-a0386b63e6bb1b86282a699b11dd8072.mp4,L5ffaXW6Y9g-a0386b63e6bb1b86282a699b11dd8072.mp4 +1579,/datadrive/videos/JY0uGmxd5Vg-bb8da3117fbe3359f90733821298189a.webm,557c9ec4eebe4b3bb02678c6342372ca.ogv,1579.0,False,32k,,[0.04 0.03],ogv,,,,False,False,,JY0uGmxd5Vg-bb8da3117fbe3359f90733821298189a,webm,JY0uGmxd5Vg-bb8da3117fbe3359f90733821298189a.webm,JY0uGmxd5Vg-bb8da3117fbe3359f90733821298189a.webm +1581,/datadrive/videos/MisaN6a4opc-e144d950ca66492f2e09b12ce8416f5e.webm,5eb63da823864db097650dadf654cff9.webm,1581.0,,,,[0.19 0.03],,,,,False,True,,MisaN6a4opc-e144d950ca66492f2e09b12ce8416f5e,webm,MisaN6a4opc-e144d950ca66492f2e09b12ce8416f5e.webm,MisaN6a4opc-e144d950ca66492f2e09b12ce8416f5e.webm +1582,/datadrive/videos/iJArEUMo-X8-bf179b6c6a6fb43d1c6509921f0a451d.mp4,0eb3de748a614cbd8555ab39178dd842.ogv,1582.0,False,,,[0.07 0.11],ogv,,logos/sbt.gif,9.0,False,False,-0.02,iJArEUMo-X8-bf179b6c6a6fb43d1c6509921f0a451d,mp4,iJArEUMo-X8-bf179b6c6a6fb43d1c6509921f0a451d.mp4,iJArEUMo-X8-bf179b6c6a6fb43d1c6509921f0a451d.mp4 +1583,/datadrive/videos/FHF8jy9U694-416457c565713a90334d032a75d3ff93.mp4,23a33cf8f8274c4f8a2ae23ec4fb589f.mp4,1583.0,False,16k,0.36,[0.11 0.13],,0.03,logos/ge.gif,7.0,False,False,0.14,FHF8jy9U694-416457c565713a90334d032a75d3ff93,mp4,FHF8jy9U694-416457c565713a90334d032a75d3ff93.mp4,FHF8jy9U694-416457c565713a90334d032a75d3ff93.mp4 +1584,/datadrive/videos/bhUSJEpNwBs-6001935c454b584c7579acc5f2691dbb.webm,a0e5b92bb1e843648b69e684d24ab9b3.ogv,1584.0,True,128k,0.35,[0.15 0.12],ogv,0.19,logos/download.png,,True,False,,bhUSJEpNwBs-6001935c454b584c7579acc5f2691dbb,webm,bhUSJEpNwBs-6001935c454b584c7579acc5f2691dbb.webm,bhUSJEpNwBs-6001935c454b584c7579acc5f2691dbb.webm +1585,/datadrive/videos/ooMfYVa9Mk4-8e591ebe79135dad668af35aaeae8b23.webm,27152f959fe94052adbbfe8e7a0e43cb.mp4,1585.0,,,,,mp4,,,,False,True,,ooMfYVa9Mk4-8e591ebe79135dad668af35aaeae8b23,webm,ooMfYVa9Mk4-8e591ebe79135dad668af35aaeae8b23.webm,ooMfYVa9Mk4-8e591ebe79135dad668af35aaeae8b23.webm +1586,/datadrive/videos/jtMObZ8lvAE-92e67d4ae24e3a34e2b72f65b36b84de.webm,998521e6a1564644bc0fc82dff07eea9.ogv,1586.0,,,,[0.14 0.16],ogv,-0.2,,7.0,False,True,,jtMObZ8lvAE-92e67d4ae24e3a34e2b72f65b36b84de,webm,jtMObZ8lvAE-92e67d4ae24e3a34e2b72f65b36b84de.webm,jtMObZ8lvAE-92e67d4ae24e3a34e2b72f65b36b84de.webm +1588,/datadrive/videos/4C5ml65lsJE-1d4a8867b4427d6a2446a16e5ec3538a.webm,5d45effeb6cd41e7a82a9ccb81a02318.mp4,1588.0,,,,,mp4,,logos/ge.gif,4.0,False,False,,4C5ml65lsJE-1d4a8867b4427d6a2446a16e5ec3538a,webm,4C5ml65lsJE-1d4a8867b4427d6a2446a16e5ec3538a.webm,4C5ml65lsJE-1d4a8867b4427d6a2446a16e5ec3538a.webm +1589,/datadrive/videos/njjuJ3cw57E-c5540d1b43b32e50a71db0a8c7dcab88.mp4,cd16aac1f8b14304b9279fb9d6d8d9a7.ogv,1589.0,False,16k,0.27,,ogv,,,1.0,True,True,-0.23,njjuJ3cw57E-c5540d1b43b32e50a71db0a8c7dcab88,mp4,njjuJ3cw57E-c5540d1b43b32e50a71db0a8c7dcab88.mp4,njjuJ3cw57E-c5540d1b43b32e50a71db0a8c7dcab88.mp4 +1590,/datadrive/videos/OMzLcNLjFNo-f7d8d152ae0d606fc915e3b64481e1d1.webm,54e013001db148da9a9ef15132263361.mp4,1590.0,False,64k,,[0.17 0.13],mp4,,logos/sbt.gif,9.0,False,True,-0.26,OMzLcNLjFNo-f7d8d152ae0d606fc915e3b64481e1d1,webm,OMzLcNLjFNo-f7d8d152ae0d606fc915e3b64481e1d1.webm,OMzLcNLjFNo-f7d8d152ae0d606fc915e3b64481e1d1.webm +1592,/datadrive/videos/_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf.webm,553682c81a6e4c339f7faf6c7de36bb7.webm,1592.0,,64k,0.6,,,,logos/jazeera.png,2.0,False,True,-0.36,_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf,webm,_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf.webm,_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf.webm +1593,/datadrive/videos/nHmJDnp2P_k-d5c986026db72c8fbc86944a94fc7b09.mp4,9f499d87f8b2432fa560ee516bd3a6e8.mp4,1593.0,,32k,,,,-0.07,logos/fox.png,5.0,False,True,,nHmJDnp2P_k-d5c986026db72c8fbc86944a94fc7b09,mp4,nHmJDnp2P_k-d5c986026db72c8fbc86944a94fc7b09.mp4,nHmJDnp2P_k-d5c986026db72c8fbc86944a94fc7b09.mp4 +1594,/datadrive/videos/JyzCf9bdMfQ-f5639813d2473c54860145bdf94f9397.webm,d340ccdcb09d49d885e2450b4c95f0d2.mp4,1594.0,False,,,[0.07 0.03],mp4,-0.11,logos/another.gif,,False,False,,JyzCf9bdMfQ-f5639813d2473c54860145bdf94f9397,webm,JyzCf9bdMfQ-f5639813d2473c54860145bdf94f9397.webm,JyzCf9bdMfQ-f5639813d2473c54860145bdf94f9397.webm +1595,/datadrive/videos/VqZjjf2K1-4-63c198c42e9e4adbd7d411bd31d18562.mp4,c70472b029f843da93baa6d1ffda3a70.webm,1595.0,True,,,[0.09 0.01],webm,,logos/msnbc.png,,False,True,,VqZjjf2K1-4-63c198c42e9e4adbd7d411bd31d18562,mp4,VqZjjf2K1-4-63c198c42e9e4adbd7d411bd31d18562.mp4,VqZjjf2K1-4-63c198c42e9e4adbd7d411bd31d18562.mp4 +1596,/datadrive/videos/s0jCZefsilQ-04951dae91f182636dfe294a2f830f95.webm,a401938f92ea463493215ac7ab6b2739.ogv,1596.0,,128k,0.52,,ogv,-0.2,,,False,False,0.34,s0jCZefsilQ-04951dae91f182636dfe294a2f830f95,webm,s0jCZefsilQ-04951dae91f182636dfe294a2f830f95.webm,s0jCZefsilQ-04951dae91f182636dfe294a2f830f95.webm +1598,/datadrive/videos/FfXpktG9_mM-2b9657e89005f82c2d7f1a209b836a1e.webm,75d35a2b2bd24a0285147220362299d7.webm,1598.0,,16k,,,,,,,False,False,0.12,FfXpktG9_mM-2b9657e89005f82c2d7f1a209b836a1e,webm,FfXpktG9_mM-2b9657e89005f82c2d7f1a209b836a1e.webm,FfXpktG9_mM-2b9657e89005f82c2d7f1a209b836a1e.webm +1599,/datadrive/videos/gfi9svfxxCM-3244172cdf3f41daded3bc06ab67d619.webm,9df15eb9743a414785732de23a7b480f.mp4,1599.0,True,,,[0.05 0.04],mp4,0.03,,,False,False,-0.13,gfi9svfxxCM-3244172cdf3f41daded3bc06ab67d619,webm,gfi9svfxxCM-3244172cdf3f41daded3bc06ab67d619.webm,gfi9svfxxCM-3244172cdf3f41daded3bc06ab67d619.webm +1600,/datadrive/videos/Ch7586rvIJs-4e7fa9a7075a260f8c67548aed638394.webm,c24b9d46998b40b68139d114d1b9209a.mp4,1600.0,,128k,0.22,[0.17 0.08],mp4,-0.06,,2.0,True,False,,Ch7586rvIJs-4e7fa9a7075a260f8c67548aed638394,webm,Ch7586rvIJs-4e7fa9a7075a260f8c67548aed638394.webm,Ch7586rvIJs-4e7fa9a7075a260f8c67548aed638394.webm +1601,/datadrive/videos/j8-9tJqyP-I-0ff3ef66458e8742be371db22a98642e.webm,9720ef42cece4d818db2f12c01a11718.mp4,1601.0,False,,,,mp4,-0.07,logos/another.gif,,False,True,,j8-9tJqyP-I-0ff3ef66458e8742be371db22a98642e,webm,j8-9tJqyP-I-0ff3ef66458e8742be371db22a98642e.webm,j8-9tJqyP-I-0ff3ef66458e8742be371db22a98642e.webm +1602,/datadrive/videos/Kfhdi1HS_sU-a138bae1dd88a58a26eb837ab516c0a0.webm,d2a29db96aca462785efffddc7ceed79.webm,1602.0,False,,0.34,[0.04 0.18],,,logos/ge.gif,9.0,False,True,0.17,Kfhdi1HS_sU-a138bae1dd88a58a26eb837ab516c0a0,webm,Kfhdi1HS_sU-a138bae1dd88a58a26eb837ab516c0a0.webm,Kfhdi1HS_sU-a138bae1dd88a58a26eb837ab516c0a0.webm +1603,/datadrive/videos/1bgDaQ6b3r0-302bdb3c9482b31f731aebc149fcb45a.mp4,add9a4d7a39d49daa01552749960781e.mp4,1603.0,False,128k,,[0.1 0.04],mp4,,,,False,False,,1bgDaQ6b3r0-302bdb3c9482b31f731aebc149fcb45a,mp4,1bgDaQ6b3r0-302bdb3c9482b31f731aebc149fcb45a.mp4,1bgDaQ6b3r0-302bdb3c9482b31f731aebc149fcb45a.mp4 +1604,/datadrive/videos/hL2Lf6t1gcw-68b8f208fea134c473adf9ad1acba561.webm,9a1eccb242a645b695b2cc6e2fa34acb.ogv,1604.0,False,64k,0.25,,ogv,,logos/new.gif,,False,False,0.07,hL2Lf6t1gcw-68b8f208fea134c473adf9ad1acba561,webm,hL2Lf6t1gcw-68b8f208fea134c473adf9ad1acba561.webm,hL2Lf6t1gcw-68b8f208fea134c473adf9ad1acba561.webm +1606,/datadrive/videos/7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6.webm,914f3d468a684a929a0c086cea1b9289.ogv,1606.0,False,128k,0.22,,ogv,0.14,,8.0,False,True,,7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6,webm,7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6.webm,7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6.webm +1607,/datadrive/videos/gf6OrSCp7zs-ba669e5435157528940e9793937b46fd.mp4,aff35163d37343e3925dad4e3fa26da2.mp4,1607.0,,,,[0.04 0.12],,-0.17,,6.0,False,False,0.28,gf6OrSCp7zs-ba669e5435157528940e9793937b46fd,mp4,gf6OrSCp7zs-ba669e5435157528940e9793937b46fd.mp4,gf6OrSCp7zs-ba669e5435157528940e9793937b46fd.mp4 +1609,/datadrive/videos/1UajnjfgjMg-9f03c38af8c69c9d6bd598201796b44f.webm,7b93920aa3a443debbe7464b4ec194bb.webm,1609.0,True,64k,0.39,,webm,0.19,logos/fox.png,,False,False,0.15,1UajnjfgjMg-9f03c38af8c69c9d6bd598201796b44f,webm,1UajnjfgjMg-9f03c38af8c69c9d6bd598201796b44f.webm,1UajnjfgjMg-9f03c38af8c69c9d6bd598201796b44f.webm +1611,/datadrive/videos/4742Ey-rhnY-311538fbc93932d643ff697e6f36b7e6.mp4,7ecb1dcd54fd443d9e69e7008055b3d0.webm,1611.0,True,16k,,,webm,-0.08,,,False,False,,4742Ey-rhnY-311538fbc93932d643ff697e6f36b7e6,mp4,4742Ey-rhnY-311538fbc93932d643ff697e6f36b7e6.mp4,4742Ey-rhnY-311538fbc93932d643ff697e6f36b7e6.mp4 +1614,/datadrive/videos/FHF8jy9U694-416457c565713a90334d032a75d3ff93.mp4,8351ddd41175499aa42dd4f6143665e7.ogv,1614.0,,128k,,,ogv,0.05,logos/jazeera.png,0.0,False,True,-0.22,FHF8jy9U694-416457c565713a90334d032a75d3ff93,mp4,FHF8jy9U694-416457c565713a90334d032a75d3ff93.mp4,FHF8jy9U694-416457c565713a90334d032a75d3ff93.mp4 +1615,/datadrive/videos/Y3n2AN8V6zY-90b83e926a61c6494cfdda9efb9809a5.mp4,23006cfeef9d406e83701fa8ede53dc5.ogv,1615.0,,,,[0.09 0.07],ogv,,,4.0,False,True,0.21,Y3n2AN8V6zY-90b83e926a61c6494cfdda9efb9809a5,mp4,Y3n2AN8V6zY-90b83e926a61c6494cfdda9efb9809a5.mp4,Y3n2AN8V6zY-90b83e926a61c6494cfdda9efb9809a5.mp4 +1616,/datadrive/videos/TfdDQAB44vE-25343cbd9ba1fe7ddfee84beb84fa8f7.mp4,c315f76f1cda47ffa3f463a806c957ee.ogv,1616.0,False,,,[0.09 0.01],ogv,0.14,,,False,False,-0.27,TfdDQAB44vE-25343cbd9ba1fe7ddfee84beb84fa8f7,mp4,TfdDQAB44vE-25343cbd9ba1fe7ddfee84beb84fa8f7.mp4,TfdDQAB44vE-25343cbd9ba1fe7ddfee84beb84fa8f7.mp4 +1617,/datadrive/videos/TO2QIEFAkac-6fbbfc8d24bd6802beb84f7a03532adb.webm,01f88d2deebd42ac801a7636875631d3.webm,1617.0,False,,0.45,,,0.16,logos/fox.png,,False,True,,TO2QIEFAkac-6fbbfc8d24bd6802beb84f7a03532adb,webm,TO2QIEFAkac-6fbbfc8d24bd6802beb84f7a03532adb.webm,TO2QIEFAkac-6fbbfc8d24bd6802beb84f7a03532adb.webm +1618,/datadrive/videos/_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3.mp4,7a16001e950844a69352e212d8e92503.ogv,1618.0,,,,,ogv,,,8.0,False,True,0.09,_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3,mp4,_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3.mp4,_IeeP6GgqAA-6d13b4ca9335abe139f9041d41ee24a3.mp4 +1619,/datadrive/videos/GhmiBQWoT0Y-9ba30d949fae62dfc38da4dffe6563a3.webm,22422a316cf74bd4bbbd2248105feaa6.mp4,1619.0,True,32k,0.52,[0.05 0.01],mp4,,logos/openair.gif,1.0,False,False,,GhmiBQWoT0Y-9ba30d949fae62dfc38da4dffe6563a3,webm,GhmiBQWoT0Y-9ba30d949fae62dfc38da4dffe6563a3.webm,GhmiBQWoT0Y-9ba30d949fae62dfc38da4dffe6563a3.webm +1621,/datadrive/videos/Mwi_5yFWlac-93b41f309974d7328d626db2dda4780e.webm,7fc9bd41a42247888386365bdce31a89.webm,1621.0,,64k,,,webm,,logos/openair.gif,8.0,False,False,0.22,Mwi_5yFWlac-93b41f309974d7328d626db2dda4780e,webm,Mwi_5yFWlac-93b41f309974d7328d626db2dda4780e.webm,Mwi_5yFWlac-93b41f309974d7328d626db2dda4780e.webm +1622,/datadrive/videos/9objfchk-RI-865b48e5d56df9ca8b9a926ea3c9a256.mp4,adc46f3294544f0c819b02fc1d52d700.webm,1622.0,,,,,webm,0.18,,,False,True,,9objfchk-RI-865b48e5d56df9ca8b9a926ea3c9a256,mp4,9objfchk-RI-865b48e5d56df9ca8b9a926ea3c9a256.mp4,9objfchk-RI-865b48e5d56df9ca8b9a926ea3c9a256.mp4 +1623,/datadrive/videos/RbfqEd8W7Zs-96ffd3e76fa11d280738f2c885071aeb.mp4,4d39f0954ecd4820917ee21926d53c4d.mp4,1623.0,,,,,,0.03,,0.0,False,True,0.24,RbfqEd8W7Zs-96ffd3e76fa11d280738f2c885071aeb,mp4,RbfqEd8W7Zs-96ffd3e76fa11d280738f2c885071aeb.mp4,RbfqEd8W7Zs-96ffd3e76fa11d280738f2c885071aeb.mp4 +1624,/datadrive/videos/0P5vhdiu97A-a5567332a3237fdd6aca448537dd109c.mp4,7157713dfa9e45ea8e5a02d7eedc9bc8.mp4,1624.0,False,,,,,,logos/msnbc.png,,False,False,,0P5vhdiu97A-a5567332a3237fdd6aca448537dd109c,mp4,0P5vhdiu97A-a5567332a3237fdd6aca448537dd109c.mp4,0P5vhdiu97A-a5567332a3237fdd6aca448537dd109c.mp4 +1625,/datadrive/videos/2OZQfmvJLC4-e2efea854abcaeface53eb21015a8702.webm,77f66a22f41f4c438a73d2eb4ca1f821.webm,1625.0,False,,0.68,[0.19 0.13],,-0.11,logos/sbt.gif,2.0,False,False,,2OZQfmvJLC4-e2efea854abcaeface53eb21015a8702,webm,2OZQfmvJLC4-e2efea854abcaeface53eb21015a8702.webm,2OZQfmvJLC4-e2efea854abcaeface53eb21015a8702.webm +1626,/datadrive/videos/H23iADHsAIc-53f1880f9d34697dd1405062c6e6af69.webm,001906ce8bcc45c081267ea4af880deb.webm,1626.0,,128k,,[0.15 0.13],webm,,,9.0,False,False,,H23iADHsAIc-53f1880f9d34697dd1405062c6e6af69,webm,H23iADHsAIc-53f1880f9d34697dd1405062c6e6af69.webm,H23iADHsAIc-53f1880f9d34697dd1405062c6e6af69.webm +1627,/datadrive/videos/oCQgqyQaFj4-fbeaafdb4054a30e4bc9ae66713f445c.mp4,b226e086af8b41f6847209e3d8c2c357.ogv,1627.0,,64k,,,ogv,,,9.0,False,False,-0.36,oCQgqyQaFj4-fbeaafdb4054a30e4bc9ae66713f445c,mp4,oCQgqyQaFj4-fbeaafdb4054a30e4bc9ae66713f445c.mp4,oCQgqyQaFj4-fbeaafdb4054a30e4bc9ae66713f445c.mp4 +1628,/datadrive/videos/vt7th4jeBK8-627f8ce674f6a5346f00256145fa1297.webm,03051bf8ada448bcba46e00069577496.webm,1628.0,,16k,0.66,[0.05 0.01],,0.01,logos/jazeera.png,,False,False,,vt7th4jeBK8-627f8ce674f6a5346f00256145fa1297,webm,vt7th4jeBK8-627f8ce674f6a5346f00256145fa1297.webm,vt7th4jeBK8-627f8ce674f6a5346f00256145fa1297.webm +1629,/datadrive/videos/_sdRgUZzZ_M-a716c39f513f7579eba9a6ab3cd294e3.mp4,397972389368494cb9325815c4553f42.mp4,1629.0,True,64k,,[0.13 0.15],mp4,0.12,,,False,True,,_sdRgUZzZ_M-a716c39f513f7579eba9a6ab3cd294e3,mp4,_sdRgUZzZ_M-a716c39f513f7579eba9a6ab3cd294e3.mp4,_sdRgUZzZ_M-a716c39f513f7579eba9a6ab3cd294e3.mp4 +1630,/datadrive/videos/6nXlX_LtJuI-7482cf266b54199f18066cd8148f641f.webm,a329420c0fa24e868e9f8e1eb81b11c2.webm,1630.0,,,,,,-0.14,,,False,True,,6nXlX_LtJuI-7482cf266b54199f18066cd8148f641f,webm,6nXlX_LtJuI-7482cf266b54199f18066cd8148f641f.webm,6nXlX_LtJuI-7482cf266b54199f18066cd8148f641f.webm +1631,/datadrive/videos/5O9mAuV217k-43007247e8a07168206c59b471770d3f.mp4,977daead5ed8427d80f876a55b17496d.mp4,1631.0,False,,0.9,,,-0.15,,2.0,False,False,,5O9mAuV217k-43007247e8a07168206c59b471770d3f,mp4,5O9mAuV217k-43007247e8a07168206c59b471770d3f.mp4,5O9mAuV217k-43007247e8a07168206c59b471770d3f.mp4 +1632,/datadrive/videos/nEjiiwyEq14-d30baf9f006644878553eae713179cdc.webm,a222a14e9c934e1cb0651f4587122476.webm,1632.0,,32k,0.36,[0.19 0.13],,,,,False,False,,nEjiiwyEq14-d30baf9f006644878553eae713179cdc,webm,nEjiiwyEq14-d30baf9f006644878553eae713179cdc.webm,nEjiiwyEq14-d30baf9f006644878553eae713179cdc.webm +1633,/datadrive/videos/kO10QD-rliA-433b3e6db7ec94ee3ca88f5b7fe82663.webm,bc5518423b424509b56675dc139a8b11.webm,1633.0,True,128k,,[0.14 0.09],webm,,,1.0,False,False,-0.37,kO10QD-rliA-433b3e6db7ec94ee3ca88f5b7fe82663,webm,kO10QD-rliA-433b3e6db7ec94ee3ca88f5b7fe82663.webm,kO10QD-rliA-433b3e6db7ec94ee3ca88f5b7fe82663.webm +1634,/datadrive/videos/km0hDl-1Y2w-ddb3985669df23b59ba8a834274419f0.mp4,557e3594949042d5801e234123df0dbe.ogv,1634.0,,,0.83,,ogv,,logos/openair.gif,3.0,False,False,,km0hDl-1Y2w-ddb3985669df23b59ba8a834274419f0,mp4,km0hDl-1Y2w-ddb3985669df23b59ba8a834274419f0.mp4,km0hDl-1Y2w-ddb3985669df23b59ba8a834274419f0.mp4 +1635,/datadrive/videos/3gGiQ62u1K4-ed5db8af35f738150baf065668a56411.mp4,0ae4251efec248deb7ac4de277ff9fda.mp4,1635.0,False,,0.22,,mp4,-0.03,logos/another.gif,,False,False,,3gGiQ62u1K4-ed5db8af35f738150baf065668a56411,mp4,3gGiQ62u1K4-ed5db8af35f738150baf065668a56411.mp4,3gGiQ62u1K4-ed5db8af35f738150baf065668a56411.mp4 +1637,/datadrive/videos/7rPk7RDxqgQ-cfa671b5f48237c40e8d14d4c22e1c9d.webm,56b306cc3cbc4480846da7562d629adc.webm,1637.0,,,0.23,,,,,,False,False,0.38,7rPk7RDxqgQ-cfa671b5f48237c40e8d14d4c22e1c9d,webm,7rPk7RDxqgQ-cfa671b5f48237c40e8d14d4c22e1c9d.webm,7rPk7RDxqgQ-cfa671b5f48237c40e8d14d4c22e1c9d.webm +1638,/datadrive/videos/JPvcAKQf8hI-74214a6c9573145bdd6734f36f5d4dfd.webm,0f607171f4f9403ab0f800b39f86f8a6.webm,1638.0,,32k,0.75,[0.03 0.12],,-0.09,logos/jazeera.png,,False,True,-0.38,JPvcAKQf8hI-74214a6c9573145bdd6734f36f5d4dfd,webm,JPvcAKQf8hI-74214a6c9573145bdd6734f36f5d4dfd.webm,JPvcAKQf8hI-74214a6c9573145bdd6734f36f5d4dfd.webm +1639,/datadrive/videos/nLsuKd2VSnI-e0249fc27aa77d7178c8705396e4f893.webm,53b38ef71c3248008d1ac51788d76aac.webm,1639.0,,32k,0.87,,,,logos/ge.gif,,False,False,,nLsuKd2VSnI-e0249fc27aa77d7178c8705396e4f893,webm,nLsuKd2VSnI-e0249fc27aa77d7178c8705396e4f893.webm,nLsuKd2VSnI-e0249fc27aa77d7178c8705396e4f893.webm +1640,/datadrive/videos/58xPhmS_U3g-c1271043195cdf163bfbf8dedb222a26.mp4,7c32793061e54a7aa4450418768bff05.mp4,1640.0,,16k,,[0.11 0.17],,,logos/jazeera.png,,False,True,,58xPhmS_U3g-c1271043195cdf163bfbf8dedb222a26,mp4,58xPhmS_U3g-c1271043195cdf163bfbf8dedb222a26.mp4,58xPhmS_U3g-c1271043195cdf163bfbf8dedb222a26.mp4 +1642,/datadrive/videos/oCqisXWlnhM-9d5e100270a890bf19c82eaa98fbc991.webm,cac9f0d400b34c729fc5fab07143530b.webm,1642.0,,128k,0.75,,,-0.15,logos/download.png,1.0,False,False,,oCqisXWlnhM-9d5e100270a890bf19c82eaa98fbc991,webm,oCqisXWlnhM-9d5e100270a890bf19c82eaa98fbc991.webm,oCqisXWlnhM-9d5e100270a890bf19c82eaa98fbc991.webm +1643,/datadrive/videos/zjrggLxsFfM-408573463eeae933d6e84f7ade442750.webm,d2c49de30ec5495fbc8bd60163f1360c.webm,1643.0,,,,,webm,-0.16,logos/sbt.gif,2.0,False,False,-0.39,zjrggLxsFfM-408573463eeae933d6e84f7ade442750,webm,zjrggLxsFfM-408573463eeae933d6e84f7ade442750.webm,zjrggLxsFfM-408573463eeae933d6e84f7ade442750.webm +1644,/datadrive/videos/WBGumMrBQJM-107a34f006f5f5698e525a4f7a011dea.mp4,c36a13d3c83d4c1fb6badd582bbaf93d.ogv,1644.0,True,,0.7,,ogv,,logos/download.png,,False,False,,WBGumMrBQJM-107a34f006f5f5698e525a4f7a011dea,mp4,WBGumMrBQJM-107a34f006f5f5698e525a4f7a011dea.mp4,WBGumMrBQJM-107a34f006f5f5698e525a4f7a011dea.mp4 +1646,/datadrive/videos/rq2S0dmXIFs-4cb4b3b985e02407a2d5eade69a8916a.mp4,c8a74ede26404407ac42c2fd540a4c62.mp4,1646.0,True,,0.3,[0.08 0.15],,,,3.0,False,True,,rq2S0dmXIFs-4cb4b3b985e02407a2d5eade69a8916a,mp4,rq2S0dmXIFs-4cb4b3b985e02407a2d5eade69a8916a.mp4,rq2S0dmXIFs-4cb4b3b985e02407a2d5eade69a8916a.mp4 +1647,/datadrive/videos/LlhsCZDYUCY-2872246aa999af69871c3af1458bf96f.webm,b99b781b4ba943bfb89deeda7b734282.webm,1647.0,False,,,,,,logos/jazeera.png,,False,True,,LlhsCZDYUCY-2872246aa999af69871c3af1458bf96f,webm,LlhsCZDYUCY-2872246aa999af69871c3af1458bf96f.webm,LlhsCZDYUCY-2872246aa999af69871c3af1458bf96f.webm +1649,/datadrive/videos/NrKj036u3bM-5bdf2790d5c81982b43d06a3195efc54.mp4,5a765d29282c4868af96b5015fd45879.mp4,1649.0,False,32k,0.89,[0.11 0.16],mp4,-0.1,,1.0,False,True,-0.19,NrKj036u3bM-5bdf2790d5c81982b43d06a3195efc54,mp4,NrKj036u3bM-5bdf2790d5c81982b43d06a3195efc54.mp4,NrKj036u3bM-5bdf2790d5c81982b43d06a3195efc54.mp4 +1650,/datadrive/videos/nBFeBxxknqY-3b8655eb1acc5887c3764a8afc54c15a.webm,9f5bd1ee05d44df18df519f26f06b939.webm,1650.0,,,,,webm,,logos/download.png,,False,False,,nBFeBxxknqY-3b8655eb1acc5887c3764a8afc54c15a,webm,nBFeBxxknqY-3b8655eb1acc5887c3764a8afc54c15a.webm,nBFeBxxknqY-3b8655eb1acc5887c3764a8afc54c15a.webm +1651,/datadrive/videos/N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054.webm,ffda52c604a5497a8029dbeebf80f207.ogv,1651.0,,,0.4,,ogv,0.17,,9.0,False,True,,N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054,webm,N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054.webm,N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054.webm +1652,/datadrive/videos/9my4HKsR1WY-a479b3debb36014eb4bb483141c0f02a.webm,b6ff7baa9fa241589f298e415769a81e.mp4,1652.0,,128k,,,mp4,,logos/download.png,,False,False,0.35,9my4HKsR1WY-a479b3debb36014eb4bb483141c0f02a,webm,9my4HKsR1WY-a479b3debb36014eb4bb483141c0f02a.webm,9my4HKsR1WY-a479b3debb36014eb4bb483141c0f02a.webm +1653,/datadrive/videos/s2sxn8FjIHE-c7a7072b41af7d610b16443aec635d47.webm,1c958b1bc8914ff89c12ed5eea43ef97.mp4,1653.0,,,,[0.03 0.05],mp4,0.1,,7.0,False,False,0.15,s2sxn8FjIHE-c7a7072b41af7d610b16443aec635d47,webm,s2sxn8FjIHE-c7a7072b41af7d610b16443aec635d47.webm,s2sxn8FjIHE-c7a7072b41af7d610b16443aec635d47.webm +1654,/datadrive/videos/fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753.webm,367427a4b49d4dcaabf33877301809a7.webm,1654.0,,32k,0.86,[0.12 0.19],,-0.02,logos/another.gif,8.0,True,True,-0.01,fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753,webm,fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753.webm,fJa7D3Uzaas-7f59def97c7a906c066e5dec84bed753.webm +1656,/datadrive/videos/tVzTga_Dbhw-7b1f1fedeb28e61d338981b054a9dd09.webm,2a7785910a404299b5dd5d0a9257c1fc.webm,1656.0,True,,0.49,,webm,,logos/new.gif,,False,False,0.0,tVzTga_Dbhw-7b1f1fedeb28e61d338981b054a9dd09,webm,tVzTga_Dbhw-7b1f1fedeb28e61d338981b054a9dd09.webm,tVzTga_Dbhw-7b1f1fedeb28e61d338981b054a9dd09.webm +1657,/datadrive/videos/Jt8I31P_HLA-1d9da2f9fc20a39290e618472010909f.webm,8f8e1f22ea19455ab8818ecca2c9dad3.webm,1657.0,False,,,,webm,0.11,logos/new.gif,9.0,False,True,,Jt8I31P_HLA-1d9da2f9fc20a39290e618472010909f,webm,Jt8I31P_HLA-1d9da2f9fc20a39290e618472010909f.webm,Jt8I31P_HLA-1d9da2f9fc20a39290e618472010909f.webm +1658,/datadrive/videos/HjkFDUihJrI-05207d593e5ea7573bf55e86aa5bfcf5.mp4,2e20e116b246444da6536d3f7f15b39e.mp4,1658.0,,,0.62,[0.18 0.01],,,logos/sbt.gif,0.0,False,True,0.34,HjkFDUihJrI-05207d593e5ea7573bf55e86aa5bfcf5,mp4,HjkFDUihJrI-05207d593e5ea7573bf55e86aa5bfcf5.mp4,HjkFDUihJrI-05207d593e5ea7573bf55e86aa5bfcf5.mp4 +1659,/datadrive/videos/FPHwWDLpSNo-a5fd7bfdd61c4734fabe5b6cd1beb0db.webm,4916a9b2ee9345dea67b0070d1c9a750.ogv,1659.0,,16k,0.55,[0.16 0.18],ogv,-0.1,logos/download.png,,False,True,,FPHwWDLpSNo-a5fd7bfdd61c4734fabe5b6cd1beb0db,webm,FPHwWDLpSNo-a5fd7bfdd61c4734fabe5b6cd1beb0db.webm,FPHwWDLpSNo-a5fd7bfdd61c4734fabe5b6cd1beb0db.webm +1661,/datadrive/videos/_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf.webm,76b6d39d6d7a44988f015147afd9bedc.mp4,1661.0,,,,,mp4,-0.19,,,False,False,0.12,_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf,webm,_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf.webm,_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf.webm +1662,/datadrive/videos/Ku3arTrM0jg-8dc21d6fbeaddaa7a6cd6e5a86c90b4e.mp4,a5c495507a25481e9d0ac70fd9365119.mp4,1662.0,True,,,,,,,,False,False,0.13,Ku3arTrM0jg-8dc21d6fbeaddaa7a6cd6e5a86c90b4e,mp4,Ku3arTrM0jg-8dc21d6fbeaddaa7a6cd6e5a86c90b4e.mp4,Ku3arTrM0jg-8dc21d6fbeaddaa7a6cd6e5a86c90b4e.mp4 +1664,/datadrive/videos/4n3IQZ_v6Q0-08342b20e54cdb8c1f59c9f5e1b3e45b.mp4,31c73700b180485a93b7d59304132da0.ogv,1664.0,,64k,,,ogv,,,0.0,False,True,,4n3IQZ_v6Q0-08342b20e54cdb8c1f59c9f5e1b3e45b,mp4,4n3IQZ_v6Q0-08342b20e54cdb8c1f59c9f5e1b3e45b.mp4,4n3IQZ_v6Q0-08342b20e54cdb8c1f59c9f5e1b3e45b.mp4 +1665,/datadrive/videos/_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf.webm,3c58886978474627935ba2f21d3d61ed.mp4,1665.0,True,,0.98,,mp4,0.11,logos/jazeera.png,,False,True,-0.21,_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf,webm,_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf.webm,_0foUzIPjfg-51b56caecd6283e29edd4c216973a1cf.webm +1666,/datadrive/videos/G-uRVLs5wDk-44348d8eb726e2915ec21757a460383c.webm,033a66625dbe4bb8ac73c9de1cd9f77c.webm,1666.0,True,32k,0.48,[0.08 0.03],,0.03,,,False,True,0.15,G-uRVLs5wDk-44348d8eb726e2915ec21757a460383c,webm,G-uRVLs5wDk-44348d8eb726e2915ec21757a460383c.webm,G-uRVLs5wDk-44348d8eb726e2915ec21757a460383c.webm +1667,/datadrive/videos/gZMrEN8qmcM-ee9c854c2fd03a536b2030c7bc1f7251.mp4,3346a77eafb34f71ab089cdafaca079c.mp4,1667.0,False,64k,0.4,[0.18 0.17],,,logos/msnbc.png,8.0,False,True,-0.17,gZMrEN8qmcM-ee9c854c2fd03a536b2030c7bc1f7251,mp4,gZMrEN8qmcM-ee9c854c2fd03a536b2030c7bc1f7251.mp4,gZMrEN8qmcM-ee9c854c2fd03a536b2030c7bc1f7251.mp4 +1668,/datadrive/videos/EtbFKskhaqI-ff6fe9bd8d6b4b6ea321f9de85537735.webm,b79d1f79b8a74fbeb2d1c99dde71dd7f.mp4,1668.0,False,,,,mp4,,,2.0,True,True,0.01,EtbFKskhaqI-ff6fe9bd8d6b4b6ea321f9de85537735,webm,EtbFKskhaqI-ff6fe9bd8d6b4b6ea321f9de85537735.webm,EtbFKskhaqI-ff6fe9bd8d6b4b6ea321f9de85537735.webm +1669,/datadrive/videos/pbVxpV-6iXY-37d425cc2cc57414eab5c062a665fc16.webm,2979eec6caff4fa99c162d752843725d.mp4,1669.0,False,,0.81,,mp4,,,,False,True,,pbVxpV-6iXY-37d425cc2cc57414eab5c062a665fc16,webm,pbVxpV-6iXY-37d425cc2cc57414eab5c062a665fc16.webm,pbVxpV-6iXY-37d425cc2cc57414eab5c062a665fc16.webm +1670,/datadrive/videos/lu67G7hVlUM-16d2596e3bb8f54032b01f54fc9d1770.mp4,fee84a7f86714ffd8a0b760d0425ac00.mp4,1670.0,False,64k,0.64,,,,,,False,False,0.07,lu67G7hVlUM-16d2596e3bb8f54032b01f54fc9d1770,mp4,lu67G7hVlUM-16d2596e3bb8f54032b01f54fc9d1770.mp4,lu67G7hVlUM-16d2596e3bb8f54032b01f54fc9d1770.mp4 +1671,/datadrive/videos/nj2rodAwxMU-6b7ff9e467e230892e4cf4cd8abbbedc.mp4,21e5b74e557b4347b771fffbdbefe1a8.mp4,1671.0,,128k,,,mp4,0.06,logos/sbt.gif,,False,False,-0.01,nj2rodAwxMU-6b7ff9e467e230892e4cf4cd8abbbedc,mp4,nj2rodAwxMU-6b7ff9e467e230892e4cf4cd8abbbedc.mp4,nj2rodAwxMU-6b7ff9e467e230892e4cf4cd8abbbedc.mp4 +1672,/datadrive/videos/MIbehnQKDm8-34085787d9cbd858c668fd00e41bec69.mp4,9ccd64b6ad62462dbe65e5033afb050d.mp4,1672.0,,32k,,,,,logos/another.gif,7.0,False,True,0.31,MIbehnQKDm8-34085787d9cbd858c668fd00e41bec69,mp4,MIbehnQKDm8-34085787d9cbd858c668fd00e41bec69.mp4,MIbehnQKDm8-34085787d9cbd858c668fd00e41bec69.mp4 +1673,/datadrive/videos/XBzpUXlJ4eQ-ecbe13db73bb621190290f0e9f76ed2a.webm,04cbd7770e8349acb1185be37bc46d0b.webm,1673.0,True,,0.67,,,0.06,logos/jazeera.png,1.0,True,True,,XBzpUXlJ4eQ-ecbe13db73bb621190290f0e9f76ed2a,webm,XBzpUXlJ4eQ-ecbe13db73bb621190290f0e9f76ed2a.webm,XBzpUXlJ4eQ-ecbe13db73bb621190290f0e9f76ed2a.webm +1674,/datadrive/videos/T4iMAxU5PW8-6382b2d78b847fa4e1ab1eece85f05cc.mp4,32e2dfa780e7416e852bf9847e6df645.mp4,1674.0,False,,0.33,,,-0.04,,1.0,False,False,,T4iMAxU5PW8-6382b2d78b847fa4e1ab1eece85f05cc,mp4,T4iMAxU5PW8-6382b2d78b847fa4e1ab1eece85f05cc.mp4,T4iMAxU5PW8-6382b2d78b847fa4e1ab1eece85f05cc.mp4 +1675,/datadrive/videos/IBOBWAB7XVw-82c59387d2986b00ac2f4327e8a9f288.mp4,8a646a8e419a4980bf01cdb3203cecbc.mp4,1675.0,False,,,,,-0.17,,1.0,False,True,-0.19,IBOBWAB7XVw-82c59387d2986b00ac2f4327e8a9f288,mp4,IBOBWAB7XVw-82c59387d2986b00ac2f4327e8a9f288.mp4,IBOBWAB7XVw-82c59387d2986b00ac2f4327e8a9f288.mp4 +1676,/datadrive/videos/msg5s-OgYKA-eb2be59c3c0bce037ef4002f915ef8f3.mp4,319307b0d9ad4025850f4ffa41a58233.mp4,1676.0,,32k,0.27,,,,logos/ge.gif,5.0,False,True,-0.24,msg5s-OgYKA-eb2be59c3c0bce037ef4002f915ef8f3,mp4,msg5s-OgYKA-eb2be59c3c0bce037ef4002f915ef8f3.mp4,msg5s-OgYKA-eb2be59c3c0bce037ef4002f915ef8f3.mp4 +1677,/datadrive/videos/cR-cS6VIXrs-a6ae2a4578b67aa85642437465bc1677.webm,27d41750b4c24827b0cf2a6955609919.webm,1677.0,,128k,,[0.03 0.09],,,logos/another.gif,3.0,False,True,,cR-cS6VIXrs-a6ae2a4578b67aa85642437465bc1677,webm,cR-cS6VIXrs-a6ae2a4578b67aa85642437465bc1677.webm,cR-cS6VIXrs-a6ae2a4578b67aa85642437465bc1677.webm +1678,/datadrive/videos/4nWsDuz3n9E-e94b6eddfae7db6b2b21562cb16f5ad9.mp4,26a9727733624623beaf25f25816faeb.ogv,1678.0,False,,,,ogv,0.19,logos/new.gif,1.0,False,True,,4nWsDuz3n9E-e94b6eddfae7db6b2b21562cb16f5ad9,mp4,4nWsDuz3n9E-e94b6eddfae7db6b2b21562cb16f5ad9.mp4,4nWsDuz3n9E-e94b6eddfae7db6b2b21562cb16f5ad9.mp4 +1679,/datadrive/videos/38NgfwT8QdM-7833ee88770404616f1b76c17a11d2fb.mp4,d795c76feda04b0b9820e938516a12a8.mp4,1679.0,False,128k,,[0.11 0.06],,0.02,logos/msnbc.png,4.0,False,False,,38NgfwT8QdM-7833ee88770404616f1b76c17a11d2fb,mp4,38NgfwT8QdM-7833ee88770404616f1b76c17a11d2fb.mp4,38NgfwT8QdM-7833ee88770404616f1b76c17a11d2fb.mp4 +1680,/datadrive/videos/wUshX0KkzdM-a9adea34f7193616221958a181410468.webm,1ab75d0877fd40a4849519775e79b934.mp4,1680.0,,,,[0.15 0.05],mp4,-0.11,logos/msnbc.png,,False,False,-0.12,wUshX0KkzdM-a9adea34f7193616221958a181410468,webm,wUshX0KkzdM-a9adea34f7193616221958a181410468.webm,wUshX0KkzdM-a9adea34f7193616221958a181410468.webm +1681,/datadrive/videos/q3OqXMoPXh8-ae5381b81ab04e6aa8f45bad966dbaaa.webm,47bb8bd537a54498a90e9792fb713b1a.webm,1681.0,,64k,0.28,[0.1 0.16],,-0.03,logos/msnbc.png,2.0,False,False,,q3OqXMoPXh8-ae5381b81ab04e6aa8f45bad966dbaaa,webm,q3OqXMoPXh8-ae5381b81ab04e6aa8f45bad966dbaaa.webm,q3OqXMoPXh8-ae5381b81ab04e6aa8f45bad966dbaaa.webm +1683,/datadrive/videos/Wa5_fQVlU1w-482f5996d46f7ce369ee9222ee6821fb.mp4,c1bec0a9b5fc49eeaa849d35e4f601f8.mp4,1683.0,False,,,,mp4,0.08,logos/ge.gif,1.0,False,False,-0.05,Wa5_fQVlU1w-482f5996d46f7ce369ee9222ee6821fb,mp4,Wa5_fQVlU1w-482f5996d46f7ce369ee9222ee6821fb.mp4,Wa5_fQVlU1w-482f5996d46f7ce369ee9222ee6821fb.mp4 +1684,/datadrive/videos/sbrS8eLwB6c-a1a744efbeb0de68def577933933f111.webm,96af454a9f5f4192bf1c627e1efde95d.webm,1684.0,,128k,,[0.04 0.18],,0.03,,5.0,True,True,,sbrS8eLwB6c-a1a744efbeb0de68def577933933f111,webm,sbrS8eLwB6c-a1a744efbeb0de68def577933933f111.webm,sbrS8eLwB6c-a1a744efbeb0de68def577933933f111.webm +1685,/datadrive/videos/uexCWmLsCo0-b90624e7caf66928a0987e872cdb81a6.mp4,894858396fe944a0a9a06c4960270cad.ogv,1685.0,,16k,0.97,,ogv,-0.01,,,False,False,-0.17,uexCWmLsCo0-b90624e7caf66928a0987e872cdb81a6,mp4,uexCWmLsCo0-b90624e7caf66928a0987e872cdb81a6.mp4,uexCWmLsCo0-b90624e7caf66928a0987e872cdb81a6.mp4 +1686,/datadrive/videos/34Sozqs9YD8-c6894173310fbbbff578095cd9bdf9c7.webm,6e940d8348bd47f58118eada0a16c365.webm,1686.0,,64k,0.45,[0.04 0.07],,0.02,,0.0,True,True,-0.33,34Sozqs9YD8-c6894173310fbbbff578095cd9bdf9c7,webm,34Sozqs9YD8-c6894173310fbbbff578095cd9bdf9c7.webm,34Sozqs9YD8-c6894173310fbbbff578095cd9bdf9c7.webm +1687,/datadrive/videos/yVRoysHTNWE-de8c9b83722a96390e1f3be98b298ca3.mp4,92c49f26f1fe4478b0353b4b137420f6.webm,1687.0,,64k,0.77,[0.19 0.01],webm,,,,False,True,,yVRoysHTNWE-de8c9b83722a96390e1f3be98b298ca3,mp4,yVRoysHTNWE-de8c9b83722a96390e1f3be98b298ca3.mp4,yVRoysHTNWE-de8c9b83722a96390e1f3be98b298ca3.mp4 +1688,/datadrive/videos/iNvmwxkoJUU-01adc1bd901b62c1c7072cd37fb5fc59.mp4,802a9c6867b042b48e148bf2e48a4979.webm,1688.0,,,0.73,[0.05 0.02],webm,-0.16,,5.0,False,False,-0.35,iNvmwxkoJUU-01adc1bd901b62c1c7072cd37fb5fc59,mp4,iNvmwxkoJUU-01adc1bd901b62c1c7072cd37fb5fc59.mp4,iNvmwxkoJUU-01adc1bd901b62c1c7072cd37fb5fc59.mp4 +1689,/datadrive/videos/_bja8VCDY_w-129f9c4b34cfe6227d4311231e08ee3f.mp4,542e0f5646114c49838563b8cc69b74d.webm,1689.0,True,16k,0.96,,webm,,,,False,False,,_bja8VCDY_w-129f9c4b34cfe6227d4311231e08ee3f,mp4,_bja8VCDY_w-129f9c4b34cfe6227d4311231e08ee3f.mp4,_bja8VCDY_w-129f9c4b34cfe6227d4311231e08ee3f.mp4 +1690,/datadrive/videos/77N0y-71nnM-da216d6960c19426bdd84c96b70b71be.mp4,572bc10f05af4a03a232f4962b4d7b7f.mp4,1690.0,False,16k,,,,,,,False,False,0.37,77N0y-71nnM-da216d6960c19426bdd84c96b70b71be,mp4,77N0y-71nnM-da216d6960c19426bdd84c96b70b71be.mp4,77N0y-71nnM-da216d6960c19426bdd84c96b70b71be.mp4 +1691,/datadrive/videos/8G48DCy66VM-7e59416fd74d85643fe9f32254df30c8.mp4,5247101f658846978186b1b4c83374b8.mp4,1691.0,,64k,,,,,logos/fox.png,9.0,False,False,0.32,8G48DCy66VM-7e59416fd74d85643fe9f32254df30c8,mp4,8G48DCy66VM-7e59416fd74d85643fe9f32254df30c8.mp4,8G48DCy66VM-7e59416fd74d85643fe9f32254df30c8.mp4 +1693,/datadrive/videos/4742Ey-rhnY-311538fbc93932d643ff697e6f36b7e6.mp4,c8d041a44b7f46feb6d267576fb3f927.mp4,1693.0,,,0.48,[0.07 0.01],,,,,True,True,-0.32,4742Ey-rhnY-311538fbc93932d643ff697e6f36b7e6,mp4,4742Ey-rhnY-311538fbc93932d643ff697e6f36b7e6.mp4,4742Ey-rhnY-311538fbc93932d643ff697e6f36b7e6.mp4 +1694,/datadrive/videos/nX3K4V1-wUc-cbfcd518a2026bcb939521c8f38c3cfa.webm,c565f96768bc4a4994545a32d66c5953.webm,1694.0,False,,0.88,,,,,1.0,False,True,0.29,nX3K4V1-wUc-cbfcd518a2026bcb939521c8f38c3cfa,webm,nX3K4V1-wUc-cbfcd518a2026bcb939521c8f38c3cfa.webm,nX3K4V1-wUc-cbfcd518a2026bcb939521c8f38c3cfa.webm +1696,/datadrive/videos/XdI6HzPyg3w-130064e5158f4f72e75edfdd53a9c126.webm,145691a0e4734dd0b604ffcc15745fea.webm,1696.0,,,,,,,logos/another.gif,,False,True,-0.07,XdI6HzPyg3w-130064e5158f4f72e75edfdd53a9c126,webm,XdI6HzPyg3w-130064e5158f4f72e75edfdd53a9c126.webm,XdI6HzPyg3w-130064e5158f4f72e75edfdd53a9c126.webm +1700,/datadrive/videos/kzsKTdTOv-A-c28eae2362c8dae45c36042ec930f196.mp4,3b43d0fe63574cd9b9c6e2fc260ce7d7.mp4,1700.0,False,32k,,,,,logos/sbt.gif,,False,True,,kzsKTdTOv-A-c28eae2362c8dae45c36042ec930f196,mp4,kzsKTdTOv-A-c28eae2362c8dae45c36042ec930f196.mp4,kzsKTdTOv-A-c28eae2362c8dae45c36042ec930f196.mp4 +1701,/datadrive/videos/iye4bSndITU-3a7bc4f248f298f5cccbd522c5728362.mp4,5c2f2b0031ac4e3a876d05278b37158b.ogv,1701.0,,16k,0.72,,ogv,,logos/msnbc.png,,False,True,,iye4bSndITU-3a7bc4f248f298f5cccbd522c5728362,mp4,iye4bSndITU-3a7bc4f248f298f5cccbd522c5728362.mp4,iye4bSndITU-3a7bc4f248f298f5cccbd522c5728362.mp4 +1703,/datadrive/videos/NdfTdJw6ShQ-b61ab32e2e483a8c5a4bf44d29f38a73.webm,4a886e98fbe748fa926a4e7dc3597f37.ogv,1703.0,False,,0.42,[0.02 0.15],ogv,-0.05,logos/download.png,3.0,False,True,,NdfTdJw6ShQ-b61ab32e2e483a8c5a4bf44d29f38a73,webm,NdfTdJw6ShQ-b61ab32e2e483a8c5a4bf44d29f38a73.webm,NdfTdJw6ShQ-b61ab32e2e483a8c5a4bf44d29f38a73.webm +1704,/datadrive/videos/MIbehnQKDm8-34085787d9cbd858c668fd00e41bec69.mp4,67c387ef875147bfa1b2a8dd5db681f3.ogv,1704.0,,,,[0.01 0.08],ogv,0.11,logos/openair.gif,7.51,False,False,,MIbehnQKDm8-34085787d9cbd858c668fd00e41bec69,mp4,MIbehnQKDm8-34085787d9cbd858c668fd00e41bec69.mp4,MIbehnQKDm8-34085787d9cbd858c668fd00e41bec69.mp4 +1705,/datadrive/videos/sAHXP7VfRJY-9dfefdc6fe1d1a2d60ddb62f3569ca48.mp4,6e589033f88945f4af6a694a3a37be06.mp4,1705.0,False,,0.2,,,,,7.0,False,True,,sAHXP7VfRJY-9dfefdc6fe1d1a2d60ddb62f3569ca48,mp4,sAHXP7VfRJY-9dfefdc6fe1d1a2d60ddb62f3569ca48.mp4,sAHXP7VfRJY-9dfefdc6fe1d1a2d60ddb62f3569ca48.mp4 +1706,/datadrive/videos/TO2QIEFAkac-6fbbfc8d24bd6802beb84f7a03532adb.webm,44260d8da0e14fc796e22a3bb4eed673.webm,1706.0,False,,0.99,,webm,,,6.0,False,True,,TO2QIEFAkac-6fbbfc8d24bd6802beb84f7a03532adb,webm,TO2QIEFAkac-6fbbfc8d24bd6802beb84f7a03532adb.webm,TO2QIEFAkac-6fbbfc8d24bd6802beb84f7a03532adb.webm +1707,/datadrive/videos/bUMd6v17yN0-ce70fe4000d0427dd49bc2dec95e0825.webm,5bc6e2d3bb974e09a2507c22ac0f6937.mp4,1707.0,False,,0.57,,mp4,,,6.0,False,True,-0.18,bUMd6v17yN0-ce70fe4000d0427dd49bc2dec95e0825,webm,bUMd6v17yN0-ce70fe4000d0427dd49bc2dec95e0825.webm,bUMd6v17yN0-ce70fe4000d0427dd49bc2dec95e0825.webm +1708,/datadrive/videos/dUHj8SQel-8-6be8a962e0ff2b7d4a2cc2ce34da5c5f.webm,986243e9ca914631bddbaeb1466bb159.webm,1708.0,False,32k,,,,,,,False,True,-0.03,dUHj8SQel-8-6be8a962e0ff2b7d4a2cc2ce34da5c5f,webm,dUHj8SQel-8-6be8a962e0ff2b7d4a2cc2ce34da5c5f.webm,dUHj8SQel-8-6be8a962e0ff2b7d4a2cc2ce34da5c5f.webm +1709,/datadrive/videos/VaO-OpFPg2A-0eee60c766905dd04230864eee939e21.mp4,0e30b5853e21433192877c1a76e9f203.mp4,1709.0,True,,0.27,,,,logos/download.png,,False,True,-0.17,VaO-OpFPg2A-0eee60c766905dd04230864eee939e21,mp4,VaO-OpFPg2A-0eee60c766905dd04230864eee939e21.mp4,VaO-OpFPg2A-0eee60c766905dd04230864eee939e21.mp4 +1710,/datadrive/videos/qP4peew7l_c-f8cdeacbcdab6ce508e9059a9495497c.webm,ce134527dd554a47bcafcaf5fb75b772.webm,1710.0,,64k,,,webm,,logos/sbt.gif,2.0,False,False,0.04,qP4peew7l_c-f8cdeacbcdab6ce508e9059a9495497c,webm,qP4peew7l_c-f8cdeacbcdab6ce508e9059a9495497c.webm,qP4peew7l_c-f8cdeacbcdab6ce508e9059a9495497c.webm +1711,/datadrive/videos/Lkgc2DpdRIQ-707c7c494b7172a2468be1eb9360c3d9.mp4,b558c0e6e17d4add97933663f5e8e04c.mp4,1711.0,,128k,,[0.19 0.04],,0.17,,8.0,False,False,,Lkgc2DpdRIQ-707c7c494b7172a2468be1eb9360c3d9,mp4,Lkgc2DpdRIQ-707c7c494b7172a2468be1eb9360c3d9.mp4,Lkgc2DpdRIQ-707c7c494b7172a2468be1eb9360c3d9.mp4 +1712,/datadrive/videos/QJ_kpQvdMGo-e431fdf359e9fea43b2b8bc94d5abb0e.webm,69a8990c45e24b1c89ecf851e2f6e128.webm,1712.0,False,16k,0.9,,webm,,,3.0,True,True,0.31,QJ_kpQvdMGo-e431fdf359e9fea43b2b8bc94d5abb0e,webm,QJ_kpQvdMGo-e431fdf359e9fea43b2b8bc94d5abb0e.webm,QJ_kpQvdMGo-e431fdf359e9fea43b2b8bc94d5abb0e.webm +1713,/datadrive/videos/tIORVJOhOL0-5868a73bcda650757743b4855570baad.webm,c56ba36cdd3c4afeafed213bfd4dcfdb.webm,1713.0,False,,0.42,,,-0.04,,6.0,False,False,,tIORVJOhOL0-5868a73bcda650757743b4855570baad,webm,tIORVJOhOL0-5868a73bcda650757743b4855570baad.webm,tIORVJOhOL0-5868a73bcda650757743b4855570baad.webm +1715,/datadrive/videos/v_0zOruaXE4-4ef1ef7754a7e193e9a878c266a63556.webm,04ca1ee5da9d41aea533802b46f6c3e1.mp4,1715.0,,16k,0.72,[0.19 0.14],mp4,-0.17,logos/fox.png,,False,False,,v_0zOruaXE4-4ef1ef7754a7e193e9a878c266a63556,webm,v_0zOruaXE4-4ef1ef7754a7e193e9a878c266a63556.webm,v_0zOruaXE4-4ef1ef7754a7e193e9a878c266a63556.webm +1716,/datadrive/videos/ekI-_gNJEHc-163e6ba7751b607ba2a6b407cec36552.webm,52e6d6a5be44413d984278f3631dc850.webm,1716.0,,32k,0.34,,,0.09,,3.0,True,True,-0.35,ekI-_gNJEHc-163e6ba7751b607ba2a6b407cec36552,webm,ekI-_gNJEHc-163e6ba7751b607ba2a6b407cec36552.webm,ekI-_gNJEHc-163e6ba7751b607ba2a6b407cec36552.webm +1717,/datadrive/videos/3oYWhauQ4fY-a7bc5c0789df4f5bfbccf443d0ae936e.webm,caf078d050f34a46a5c7221f0cab9a78.webm,1717.0,False,,,[0.03 0.11],,,,,True,False,-0.05,3oYWhauQ4fY-a7bc5c0789df4f5bfbccf443d0ae936e,webm,3oYWhauQ4fY-a7bc5c0789df4f5bfbccf443d0ae936e.webm,3oYWhauQ4fY-a7bc5c0789df4f5bfbccf443d0ae936e.webm +1718,/datadrive/videos/mlkK9GpYSsI-30b746854acbe3c4456fd4df6ad492fc.mp4,69f2adae58554e4aa02ff18bbcf6c846.mp4,1718.0,,32k,,,,-0.06,logos/download.png,4.0,False,True,,mlkK9GpYSsI-30b746854acbe3c4456fd4df6ad492fc,mp4,mlkK9GpYSsI-30b746854acbe3c4456fd4df6ad492fc.mp4,mlkK9GpYSsI-30b746854acbe3c4456fd4df6ad492fc.mp4 +1719,/datadrive/videos/SodYvfYgEz0-d91501f541269579f98ba7394cf61f2e.webm,be22067e1511417b8ca119bdac6c78db.webm,1719.0,,64k,0.29,,webm,,logos/ge.gif,9.0,False,True,,SodYvfYgEz0-d91501f541269579f98ba7394cf61f2e,webm,SodYvfYgEz0-d91501f541269579f98ba7394cf61f2e.webm,SodYvfYgEz0-d91501f541269579f98ba7394cf61f2e.webm +1721,/datadrive/videos/Yr4FtEaeQRE-fb0c8b620d38441874623f4c44b6b0d5.mp4,b2005ce102184ed086d018fbccb69ed2.webm,1721.0,,32k,0.99,[0.03 0.17],webm,0.0,,,False,False,-0.17,Yr4FtEaeQRE-fb0c8b620d38441874623f4c44b6b0d5,mp4,Yr4FtEaeQRE-fb0c8b620d38441874623f4c44b6b0d5.mp4,Yr4FtEaeQRE-fb0c8b620d38441874623f4c44b6b0d5.mp4 +1722,/datadrive/videos/0OC9onEjW8E-01d2801908a2730899dc91ae4f84dbe4.webm,69f094235e4c499fbde2007674e8813c.webm,1722.0,True,,,,,0.11,logos/ge.gif,0.0,False,True,0.27,0OC9onEjW8E-01d2801908a2730899dc91ae4f84dbe4,webm,0OC9onEjW8E-01d2801908a2730899dc91ae4f84dbe4.webm,0OC9onEjW8E-01d2801908a2730899dc91ae4f84dbe4.webm +1723,/datadrive/videos/vpKJECNf7nI-180d9a62553217db088473d31ea4afa6.webm,3752f33819b84f05aa69748df0ef6278.webm,1723.0,,,,,,,,7.0,False,False,,vpKJECNf7nI-180d9a62553217db088473d31ea4afa6,webm,vpKJECNf7nI-180d9a62553217db088473d31ea4afa6.webm,vpKJECNf7nI-180d9a62553217db088473d31ea4afa6.webm +1724,/datadrive/videos/q1L_D5GtAw4-0e2a82b4b9ad6982830c3379a88d76a5.webm,bfe95f652ce745dc90980df97479fd7d.webm,1724.0,True,,0.75,[0.03 0.03],,-0.13,,,False,False,0.19,q1L_D5GtAw4-0e2a82b4b9ad6982830c3379a88d76a5,webm,q1L_D5GtAw4-0e2a82b4b9ad6982830c3379a88d76a5.webm,q1L_D5GtAw4-0e2a82b4b9ad6982830c3379a88d76a5.webm +1725,/datadrive/videos/b9ErO_x9nXg-67426bb8addcc272591cf476445e97d2.webm,4343edb7e45041c9b8a7daf78591b58e.webm,1725.0,False,128k,0.49,[0.12 0.06],,0.17,,,False,False,,b9ErO_x9nXg-67426bb8addcc272591cf476445e97d2,webm,b9ErO_x9nXg-67426bb8addcc272591cf476445e97d2.webm,b9ErO_x9nXg-67426bb8addcc272591cf476445e97d2.webm +1726,/datadrive/videos/VSxPuIzFDMA-a62ff1f9553fc77149e4bac131ee419e.webm,b1f6d81fa22449289720015281b05bc8.webm,1726.0,,,,[0.09 0.05],webm,0.06,,0.0,True,True,,VSxPuIzFDMA-a62ff1f9553fc77149e4bac131ee419e,webm,VSxPuIzFDMA-a62ff1f9553fc77149e4bac131ee419e.webm,VSxPuIzFDMA-a62ff1f9553fc77149e4bac131ee419e.webm +1727,/datadrive/videos/JPvcAKQf8hI-74214a6c9573145bdd6734f36f5d4dfd.webm,10fa2dd5ba8e45b09009f9c09ce9e49d.ogv,1727.0,,64k,0.91,[0.11 0.04],ogv,,logos/another.gif,,False,False,,JPvcAKQf8hI-74214a6c9573145bdd6734f36f5d4dfd,webm,JPvcAKQf8hI-74214a6c9573145bdd6734f36f5d4dfd.webm,JPvcAKQf8hI-74214a6c9573145bdd6734f36f5d4dfd.webm +1728,/datadrive/videos/lQ0I4xxacsQ-981f18f920b480e4588ea34416e4eb0f.webm,5fad271fcbd348b6b35055eae326792f.ogv,1728.0,False,,0.8,[0.06 0.17],ogv,,,5.0,False,False,,lQ0I4xxacsQ-981f18f920b480e4588ea34416e4eb0f,webm,lQ0I4xxacsQ-981f18f920b480e4588ea34416e4eb0f.webm,lQ0I4xxacsQ-981f18f920b480e4588ea34416e4eb0f.webm +1729,/datadrive/videos/GYv00p5_q6Y-441d4895bd9cea9fa2fd4e60c90209cc.webm,3893aed3ab7d4c8bace75e1f60a9249c.mp4,1729.0,False,,0.94,,mp4,0.01,logos/sbt.gif,7.0,False,True,-0.15,GYv00p5_q6Y-441d4895bd9cea9fa2fd4e60c90209cc,webm,GYv00p5_q6Y-441d4895bd9cea9fa2fd4e60c90209cc.webm,GYv00p5_q6Y-441d4895bd9cea9fa2fd4e60c90209cc.webm +1730,/datadrive/videos/kYnHVkEwCPw-d32831c31e0bd6340b5a5885136a54a3.webm,77e6f8c42be94e27938c79f5422eec03.mp4,1730.0,False,64k,,,mp4,-0.06,logos/openair.gif,,True,True,,kYnHVkEwCPw-d32831c31e0bd6340b5a5885136a54a3,webm,kYnHVkEwCPw-d32831c31e0bd6340b5a5885136a54a3.webm,kYnHVkEwCPw-d32831c31e0bd6340b5a5885136a54a3.webm +1731,/datadrive/videos/J1TjxYW5KGk-ca58667fe322a513f52d803c5ec4aad9.mp4,22f113b512234419900ff0e8c882fe54.mp4,1731.0,False,32k,0.9,[0.12 0.01],,,logos/download.png,8.0,False,False,,J1TjxYW5KGk-ca58667fe322a513f52d803c5ec4aad9,mp4,J1TjxYW5KGk-ca58667fe322a513f52d803c5ec4aad9.mp4,J1TjxYW5KGk-ca58667fe322a513f52d803c5ec4aad9.mp4 +1732,/datadrive/videos/WaM7_iUtJBk-c4395da57221793a6b43e6eb3bc80fad.webm,7c392ec226234e448f4cc468a53ec88c.mp4,1732.0,,,,,mp4,,logos/msnbc.png,,False,False,-0.26,WaM7_iUtJBk-c4395da57221793a6b43e6eb3bc80fad,webm,WaM7_iUtJBk-c4395da57221793a6b43e6eb3bc80fad.webm,WaM7_iUtJBk-c4395da57221793a6b43e6eb3bc80fad.webm +1733,/datadrive/videos/EJlIxAWQIjM-8a6fb186297c12699465f75caa89d0a5.mp4,56022e3f6ed3433eb7a0b4117aad447f.mp4,1733.0,True,16k,,,,-0.2,,,False,True,,EJlIxAWQIjM-8a6fb186297c12699465f75caa89d0a5,mp4,EJlIxAWQIjM-8a6fb186297c12699465f75caa89d0a5.mp4,EJlIxAWQIjM-8a6fb186297c12699465f75caa89d0a5.mp4 +1734,/datadrive/videos/No7OjWSI9ww-94e6af11e0a9ce979b5e3ad6ce2d6071.webm,7638ce5321e74a319532bd9ce4782414.ogv,1734.0,,16k,,,ogv,-0.1,,,False,True,0.24,No7OjWSI9ww-94e6af11e0a9ce979b5e3ad6ce2d6071,webm,No7OjWSI9ww-94e6af11e0a9ce979b5e3ad6ce2d6071.webm,No7OjWSI9ww-94e6af11e0a9ce979b5e3ad6ce2d6071.webm +1736,/datadrive/videos/HJie_DsTTSA-ace6ee70ac6bacfb48f95005e25b22e7.webm,ca326b79ec7a412899fb72a8f3d701bb.webm,1736.0,,,0.64,[0.09 0.19],,0.08,,3.0,False,False,,HJie_DsTTSA-ace6ee70ac6bacfb48f95005e25b22e7,webm,HJie_DsTTSA-ace6ee70ac6bacfb48f95005e25b22e7.webm,HJie_DsTTSA-ace6ee70ac6bacfb48f95005e25b22e7.webm +1737,/datadrive/videos/4vf_1mCNWSo-457bb6079e76eb61f84b086d2e976494.webm,57d3b444ab0c4b138d8db16236906ffe.webm,1737.0,False,,0.52,,,-0.1,logos/jazeera.png,,False,True,-0.04,4vf_1mCNWSo-457bb6079e76eb61f84b086d2e976494,webm,4vf_1mCNWSo-457bb6079e76eb61f84b086d2e976494.webm,4vf_1mCNWSo-457bb6079e76eb61f84b086d2e976494.webm +1738,/datadrive/videos/HI3ngZnN7mg-e071ffcd2d9d166789b2e11d5e23f913.webm,5a4da67ee4e14520914c2136128ee47c.mp4,1738.0,,64k,,[0.14 0.12],mp4,-0.16,logos/sbt.gif,3.0,False,False,0.2,HI3ngZnN7mg-e071ffcd2d9d166789b2e11d5e23f913,webm,HI3ngZnN7mg-e071ffcd2d9d166789b2e11d5e23f913.webm,HI3ngZnN7mg-e071ffcd2d9d166789b2e11d5e23f913.webm +1739,/datadrive/videos/HqNujQunFnU-5325de3ee508b2af33627705d32d816c.webm,32d7c0a6a206412481327392e7f6276b.ogv,1739.0,,16k,0.2,[0.08 0.08],ogv,-0.07,logos/ge.gif,,False,True,,HqNujQunFnU-5325de3ee508b2af33627705d32d816c,webm,HqNujQunFnU-5325de3ee508b2af33627705d32d816c.webm,HqNujQunFnU-5325de3ee508b2af33627705d32d816c.webm +1740,/datadrive/videos/uECxS6xOH0U-e0a5a95ccd786cbc786224e508b200e7.webm,88fbb23e946c4ee3a3842108166bd760.webm,1740.0,True,,,,webm,-0.1,logos/ge.gif,2.0,False,True,,uECxS6xOH0U-e0a5a95ccd786cbc786224e508b200e7,webm,uECxS6xOH0U-e0a5a95ccd786cbc786224e508b200e7.webm,uECxS6xOH0U-e0a5a95ccd786cbc786224e508b200e7.webm +1741,/datadrive/videos/vLloKrAob5o-4d665f131d6b89a3d042f89707d610d3.webm,01d644ce3af4468296fa1f679819e7ca.webm,1741.0,True,64k,0.62,[0.1 0.17],,,logos/another.gif,6.0,False,False,-0.31,vLloKrAob5o-4d665f131d6b89a3d042f89707d610d3,webm,vLloKrAob5o-4d665f131d6b89a3d042f89707d610d3.webm,vLloKrAob5o-4d665f131d6b89a3d042f89707d610d3.webm +1743,/datadrive/videos/GD_v8hV2G2s-f98560537442ee80869216d17b44600c.mp4,6b722afe7da64554b8dac65f970053d9.mp4,1743.0,False,,0.43,[0.06 0.08],,,logos/openair.gif,,False,True,-0.31,GD_v8hV2G2s-f98560537442ee80869216d17b44600c,mp4,GD_v8hV2G2s-f98560537442ee80869216d17b44600c.mp4,GD_v8hV2G2s-f98560537442ee80869216d17b44600c.mp4 +1744,/datadrive/videos/Sl1usCEouOU-57e9508d49658938a29e55cf9c4a72ba.mp4,831f7b2267ed45b39fd23fae45d0e519.mp4,1744.0,,,,,,0.17,,,False,True,,Sl1usCEouOU-57e9508d49658938a29e55cf9c4a72ba,mp4,Sl1usCEouOU-57e9508d49658938a29e55cf9c4a72ba.mp4,Sl1usCEouOU-57e9508d49658938a29e55cf9c4a72ba.mp4 +1745,/datadrive/videos/bBXrAl_Bebg-b30ab8cc7ccfc3fac664aea957cc14dd.mp4,37dd4764112449d2ae9a943fd7e38f72.ogv,1745.0,False,,0.74,,ogv,,logos/fox.png,,False,True,-0.4,bBXrAl_Bebg-b30ab8cc7ccfc3fac664aea957cc14dd,mp4,bBXrAl_Bebg-b30ab8cc7ccfc3fac664aea957cc14dd.mp4,bBXrAl_Bebg-b30ab8cc7ccfc3fac664aea957cc14dd.mp4 +1746,/datadrive/videos/kIoZidLsSeo-05131505f5738cd0095cf7bd79830dce.webm,4a3a86da9b9d49a1b8a8bc52f3aa409c.webm,1746.0,False,,0.79,,,-0.14,,,False,True,,kIoZidLsSeo-05131505f5738cd0095cf7bd79830dce,webm,kIoZidLsSeo-05131505f5738cd0095cf7bd79830dce.webm,kIoZidLsSeo-05131505f5738cd0095cf7bd79830dce.webm +1747,/datadrive/videos/h_oWKSYNAZQ-488c383963c4655afaeebf7a617e2659.webm,69140cbde3df4c98b5cb7309d845d098.ogv,1747.0,False,,0.23,[0.05 0.19],ogv,-0.09,,,False,False,,h_oWKSYNAZQ-488c383963c4655afaeebf7a617e2659,webm,h_oWKSYNAZQ-488c383963c4655afaeebf7a617e2659.webm,h_oWKSYNAZQ-488c383963c4655afaeebf7a617e2659.webm +1749,/datadrive/videos/AA82DdkVh5s-db5b2e3d870f1005da5e88c3e6b256f4.mp4,6efef378a9224a54afa86e2bfa8f817f.webm,1749.0,,16k,,,webm,,,,True,True,-0.29,AA82DdkVh5s-db5b2e3d870f1005da5e88c3e6b256f4,mp4,AA82DdkVh5s-db5b2e3d870f1005da5e88c3e6b256f4.mp4,AA82DdkVh5s-db5b2e3d870f1005da5e88c3e6b256f4.mp4 +1752,/datadrive/videos/4HewvFPsv3k-97e987463785a12b97615c567a7727ea.webm,8a8ea52620474890873a0a57d3bf617f.webm,1752.0,,,0.49,,webm,,,1.0,False,True,0.13,4HewvFPsv3k-97e987463785a12b97615c567a7727ea,webm,4HewvFPsv3k-97e987463785a12b97615c567a7727ea.webm,4HewvFPsv3k-97e987463785a12b97615c567a7727ea.webm +1753,/datadrive/videos/9bCp4FAHaNU-77f0427f0deaa2b4109483d95eb9089f.mp4,7dc20fa60abf4ce09c80ebadf7c82550.ogv,1753.0,,,0.27,,ogv,-0.2,logos/sbt.gif,,False,True,,9bCp4FAHaNU-77f0427f0deaa2b4109483d95eb9089f,mp4,9bCp4FAHaNU-77f0427f0deaa2b4109483d95eb9089f.mp4,9bCp4FAHaNU-77f0427f0deaa2b4109483d95eb9089f.mp4 +1754,/datadrive/videos/1X1oZUAW5ds-a017ae11dcedfd0eb915278a1783e375.mp4,6b181fcbbb8a4314ab5276ea4121fb6c.mp4,1754.0,False,,,,,-0.02,logos/fox.png,7.0,False,False,-0.04,1X1oZUAW5ds-a017ae11dcedfd0eb915278a1783e375,mp4,1X1oZUAW5ds-a017ae11dcedfd0eb915278a1783e375.mp4,1X1oZUAW5ds-a017ae11dcedfd0eb915278a1783e375.mp4 +1756,/datadrive/videos/Wa5_fQVlU1w-482f5996d46f7ce369ee9222ee6821fb.mp4,7d88847165794ae6a90e6336571da918.mp4,1756.0,,128k,,,,,,,False,False,0.12,Wa5_fQVlU1w-482f5996d46f7ce369ee9222ee6821fb,mp4,Wa5_fQVlU1w-482f5996d46f7ce369ee9222ee6821fb.mp4,Wa5_fQVlU1w-482f5996d46f7ce369ee9222ee6821fb.mp4 +1757,/datadrive/videos/w7_aYG8OG_o-05a836be32d9421280288067bb5a6bdd.webm,a9e116a31ea84f9e8da3708a3a7dacac.mp4,1757.0,False,,0.3,[0.19 0.15],mp4,,logos/msnbc.png,,False,False,,w7_aYG8OG_o-05a836be32d9421280288067bb5a6bdd,webm,w7_aYG8OG_o-05a836be32d9421280288067bb5a6bdd.webm,w7_aYG8OG_o-05a836be32d9421280288067bb5a6bdd.webm +1758,/datadrive/videos/69Ri7ItDmS4-5717b7b1f2d8f77c3a22532f2b1ce160.mp4,7aa625db5d2943c4a031710c1c1686f7.mp4,1758.0,True,,,,,,,3.0,False,False,,69Ri7ItDmS4-5717b7b1f2d8f77c3a22532f2b1ce160,mp4,69Ri7ItDmS4-5717b7b1f2d8f77c3a22532f2b1ce160.mp4,69Ri7ItDmS4-5717b7b1f2d8f77c3a22532f2b1ce160.mp4 +1759,/datadrive/videos/XN96TivKx3s-61e14cce110a0f557deebeccf49bc8c7.webm,1a2215c577a044b2bb192b6b83e1eb42.webm,1759.0,True,,0.32,[0.16 0.16],webm,,logos/ge.gif,,False,False,0.16,XN96TivKx3s-61e14cce110a0f557deebeccf49bc8c7,webm,XN96TivKx3s-61e14cce110a0f557deebeccf49bc8c7.webm,XN96TivKx3s-61e14cce110a0f557deebeccf49bc8c7.webm +1760,/datadrive/videos/tss8BRY2Jmk-a3506f0ec7d1cfba7cf128ff2b700731.mp4,c7c1f034b0634184a587c8bf556ca609.mp4,1760.0,,16k,,[0.05 0.17],,,,1.0,True,False,,tss8BRY2Jmk-a3506f0ec7d1cfba7cf128ff2b700731,mp4,tss8BRY2Jmk-a3506f0ec7d1cfba7cf128ff2b700731.mp4,tss8BRY2Jmk-a3506f0ec7d1cfba7cf128ff2b700731.mp4 +1763,/datadrive/videos/QIfx1ZYe628-8603acb0022bec43756b868ca67b888f.webm,1ce350acec5340d987c5b45f42a3beee.ogv,1763.0,False,,0.22,[0.08 0.08],ogv,,,,False,True,-0.11,QIfx1ZYe628-8603acb0022bec43756b868ca67b888f,webm,QIfx1ZYe628-8603acb0022bec43756b868ca67b888f.webm,QIfx1ZYe628-8603acb0022bec43756b868ca67b888f.webm +1766,/datadrive/videos/Y0sBlKQ2VE4-17b6e3ff8e9372f6151634ee746d145d.webm,27a6d9f7b0184dbe93aa6878d500dfef.webm,1766.0,,32k,,[0.08 0.04],,,,4.0,False,True,-0.2,Y0sBlKQ2VE4-17b6e3ff8e9372f6151634ee746d145d,webm,Y0sBlKQ2VE4-17b6e3ff8e9372f6151634ee746d145d.webm,Y0sBlKQ2VE4-17b6e3ff8e9372f6151634ee746d145d.webm +1768,/datadrive/videos/DWwIMMtNw60-446e71ef73f77ea7330b4fcdf7d54309.webm,c301fc99211e4221a1dd10d7e63e563e.webm,1768.0,,64k,0.23,[0.14 0.08],,-0.2,logos/another.gif,1.0,False,True,,DWwIMMtNw60-446e71ef73f77ea7330b4fcdf7d54309,webm,DWwIMMtNw60-446e71ef73f77ea7330b4fcdf7d54309.webm,DWwIMMtNw60-446e71ef73f77ea7330b4fcdf7d54309.webm +1769,/datadrive/videos/ei2yODzATiE-9041a96db043fe1a67dda557fa8b7125.mp4,890f49e7b6d14ea5a777e0a2392a3961.mp4,1769.0,True,,0.47,[0.02 0.03],,,logos/another.gif,4.0,False,False,-0.36,ei2yODzATiE-9041a96db043fe1a67dda557fa8b7125,mp4,ei2yODzATiE-9041a96db043fe1a67dda557fa8b7125.mp4,ei2yODzATiE-9041a96db043fe1a67dda557fa8b7125.mp4 +1770,/datadrive/videos/AdiPXIEyes4-9f8c37e6b9142eed3e06c6cde76f46b2.webm,bdcccb536ad944df9887de438698004f.ogv,1770.0,True,,0.55,[0.1 0.07],ogv,,,5.0,False,False,0.38,AdiPXIEyes4-9f8c37e6b9142eed3e06c6cde76f46b2,webm,AdiPXIEyes4-9f8c37e6b9142eed3e06c6cde76f46b2.webm,AdiPXIEyes4-9f8c37e6b9142eed3e06c6cde76f46b2.webm +1771,/datadrive/videos/j2BgyavFvss-7dfaec88cfe899afba8474d397567e00.webm,41392b151d4e4ab9b6da9ad4d34de628.webm,1771.0,False,64k,,[0.12 0.17],,0.01,,7.0,False,False,-0.2,j2BgyavFvss-7dfaec88cfe899afba8474d397567e00,webm,j2BgyavFvss-7dfaec88cfe899afba8474d397567e00.webm,j2BgyavFvss-7dfaec88cfe899afba8474d397567e00.webm +1772,/datadrive/videos/CP8RCkPoL0I-ecd66acdce79e874bd9b889999707ee4.webm,46577e75baae4ffdaf0a5b39e8f1e1c2.webm,1772.0,,,0.37,,,-0.12,logos/sbt.gif,6.0,False,True,,CP8RCkPoL0I-ecd66acdce79e874bd9b889999707ee4,webm,CP8RCkPoL0I-ecd66acdce79e874bd9b889999707ee4.webm,CP8RCkPoL0I-ecd66acdce79e874bd9b889999707ee4.webm +1773,/datadrive/videos/XjmTpve3M18-3963bc9d4fce306d23fe8cb937462131.mp4,cb2b634f99244619a5660f493542e4c1.mp4,1773.0,False,32k,,,,0.16,logos/download.png,8.0,False,True,-0.22,XjmTpve3M18-3963bc9d4fce306d23fe8cb937462131,mp4,XjmTpve3M18-3963bc9d4fce306d23fe8cb937462131.mp4,XjmTpve3M18-3963bc9d4fce306d23fe8cb937462131.mp4 +1774,/datadrive/videos/YbWhmtRpz2Q-df76e6b608957ab358d3e95f9d5dcd97.mp4,6d39ed24e3754b4cb707b5232bcfd8d9.ogv,1774.0,,16k,0.95,,ogv,0.15,,,False,False,,YbWhmtRpz2Q-df76e6b608957ab358d3e95f9d5dcd97,mp4,YbWhmtRpz2Q-df76e6b608957ab358d3e95f9d5dcd97.mp4,YbWhmtRpz2Q-df76e6b608957ab358d3e95f9d5dcd97.mp4 +1776,/datadrive/videos/Y0sBlKQ2VE4-17b6e3ff8e9372f6151634ee746d145d.webm,7856636d7f464d31a706d948f0a2916b.mp4,1776.0,True,16k,,,mp4,0.03,logos/new.gif,6.0,False,True,-0.09,Y0sBlKQ2VE4-17b6e3ff8e9372f6151634ee746d145d,webm,Y0sBlKQ2VE4-17b6e3ff8e9372f6151634ee746d145d.webm,Y0sBlKQ2VE4-17b6e3ff8e9372f6151634ee746d145d.webm +1777,/datadrive/videos/jaQW6t_IUpk-1c3db9a644fdf010dacb79108abe1785.webm,c90878821c3e446c8fd2d43a3a2c212e.ogv,1777.0,,,0.37,,ogv,-0.04,logos/jazeera.png,,False,True,,jaQW6t_IUpk-1c3db9a644fdf010dacb79108abe1785,webm,jaQW6t_IUpk-1c3db9a644fdf010dacb79108abe1785.webm,jaQW6t_IUpk-1c3db9a644fdf010dacb79108abe1785.webm +1778,/datadrive/videos/bCoersXDThs-bc2e9a490d10a99c69a2455cb18f5c56.mp4,ca21f9ed737b45bb8ec7f30ee11ca70d.mp4,1778.0,,,0.55,,,-0.11,logos/openair.gif,1.0,False,True,,bCoersXDThs-bc2e9a490d10a99c69a2455cb18f5c56,mp4,bCoersXDThs-bc2e9a490d10a99c69a2455cb18f5c56.mp4,bCoersXDThs-bc2e9a490d10a99c69a2455cb18f5c56.mp4 +1779,/datadrive/videos/epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124.mp4,6612811ed1864a5aa03402872779498f.mp4,1779.0,,16k,,[0.15 0.13],,0.17,logos/openair.gif,2.0,False,True,0.25,epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124,mp4,epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124.mp4,epjbvDTIdF0-0eca92847d6dbf683f9afea77a544124.mp4 +1781,/datadrive/videos/sm8rP6konjs-7168356725f5f30687de5c660cb8846e.mp4,519683e182104e579771a142ccfe6e56.mp4,1781.0,False,,,,mp4,,logos/msnbc.png,1.0,False,False,0.14,sm8rP6konjs-7168356725f5f30687de5c660cb8846e,mp4,sm8rP6konjs-7168356725f5f30687de5c660cb8846e.mp4,sm8rP6konjs-7168356725f5f30687de5c660cb8846e.mp4 +1782,/datadrive/videos/od11J80Hrkc-3d9cc7f435053c9c5f7273919e14952f.mp4,238ed459f9a0415683af0c5a08d35f3a.ogv,1782.0,,,,,ogv,-0.12,,,False,False,,od11J80Hrkc-3d9cc7f435053c9c5f7273919e14952f,mp4,od11J80Hrkc-3d9cc7f435053c9c5f7273919e14952f.mp4,od11J80Hrkc-3d9cc7f435053c9c5f7273919e14952f.mp4 +1783,/datadrive/videos/PUfT5bw9o7c-7988d69653b30193a4807a474b57112d.webm,5c32f1d1f0144d28af23ed8e74002aed.webm,1783.0,,,,,webm,0.15,,6.0,False,False,,PUfT5bw9o7c-7988d69653b30193a4807a474b57112d,webm,PUfT5bw9o7c-7988d69653b30193a4807a474b57112d.webm,PUfT5bw9o7c-7988d69653b30193a4807a474b57112d.webm +1784,/datadrive/videos/8RSmLgd4Kx0-5f5665c5926f894124c96c1b7098f14b.mp4,29882b3d817c418ca92182410e26a802.mp4,1784.0,,,,[0.16 0.11],,,,,True,False,,8RSmLgd4Kx0-5f5665c5926f894124c96c1b7098f14b,mp4,8RSmLgd4Kx0-5f5665c5926f894124c96c1b7098f14b.mp4,8RSmLgd4Kx0-5f5665c5926f894124c96c1b7098f14b.mp4 +1786,/datadrive/videos/dbR1bAftx0Q-92b57a610a2ed4e0c950b0a92566a0bc.webm,04f5ce16aa5b4d228a525a3619bfc8fd.webm,1786.0,False,,0.66,[0.02 0.09],,0.12,logos/ge.gif,9.0,False,True,,dbR1bAftx0Q-92b57a610a2ed4e0c950b0a92566a0bc,webm,dbR1bAftx0Q-92b57a610a2ed4e0c950b0a92566a0bc.webm,dbR1bAftx0Q-92b57a610a2ed4e0c950b0a92566a0bc.webm +1787,/datadrive/videos/d17aRD6BIaY-c54b8d9abe1ec4cc18cb907cb8aee88a.mp4,08f4a86a57074b27bba7c032481e74b2.mp4,1787.0,,,0.28,[0.07 0.05],mp4,,logos/new.gif,,True,True,-0.1,d17aRD6BIaY-c54b8d9abe1ec4cc18cb907cb8aee88a,mp4,d17aRD6BIaY-c54b8d9abe1ec4cc18cb907cb8aee88a.mp4,d17aRD6BIaY-c54b8d9abe1ec4cc18cb907cb8aee88a.mp4 +1788,/datadrive/videos/UBK6Oj7wXvY-0c0a0ea3c693b0efa3d2dba26431c741.webm,487d586cf7394ea297a3a761b13f2085.webm,1788.0,,,,,,0.16,,5.0,False,False,,UBK6Oj7wXvY-0c0a0ea3c693b0efa3d2dba26431c741,webm,UBK6Oj7wXvY-0c0a0ea3c693b0efa3d2dba26431c741.webm,UBK6Oj7wXvY-0c0a0ea3c693b0efa3d2dba26431c741.webm +1789,/datadrive/videos/CfBM6XqwtuQ-d597a7cd1e7c9ea770e107bfe5e8f848.mp4,fda1e004e55341a0819c2a50afc706f3.mp4,1789.0,True,128k,0.2,,,,logos/msnbc.png,,False,True,-0.19,CfBM6XqwtuQ-d597a7cd1e7c9ea770e107bfe5e8f848,mp4,CfBM6XqwtuQ-d597a7cd1e7c9ea770e107bfe5e8f848.mp4,CfBM6XqwtuQ-d597a7cd1e7c9ea770e107bfe5e8f848.mp4 +1790,/datadrive/videos/Yr4FtEaeQRE-fb0c8b620d38441874623f4c44b6b0d5.mp4,4a171daccade46a1ab85df8e57446946.mp4,1790.0,False,128k,0.3,[0.05 0.13],mp4,,,5.0,False,False,,Yr4FtEaeQRE-fb0c8b620d38441874623f4c44b6b0d5,mp4,Yr4FtEaeQRE-fb0c8b620d38441874623f4c44b6b0d5.mp4,Yr4FtEaeQRE-fb0c8b620d38441874623f4c44b6b0d5.mp4 +1792,/datadrive/videos/wTY5mlH8zjY-fcf2e2525bea2994e1020d15b9590793.mp4,12b4a164a2814e0494610e21e556b178.webm,1792.0,,128k,0.45,,webm,-0.06,logos/openair.gif,,False,True,,wTY5mlH8zjY-fcf2e2525bea2994e1020d15b9590793,mp4,wTY5mlH8zjY-fcf2e2525bea2994e1020d15b9590793.mp4,wTY5mlH8zjY-fcf2e2525bea2994e1020d15b9590793.mp4 +1793,/datadrive/videos/YWok4bvLv9E-3e69bcaee777f433ddae85a5546b52c2.webm,90a518b505494d93b283b370ceba6be4.webm,1793.0,False,,0.72,,,,logos/fox.png,5.03,False,False,-0.08,YWok4bvLv9E-3e69bcaee777f433ddae85a5546b52c2,webm,YWok4bvLv9E-3e69bcaee777f433ddae85a5546b52c2.webm,YWok4bvLv9E-3e69bcaee777f433ddae85a5546b52c2.webm +1795,/datadrive/videos/zO2XzB9qcok-002a48dcf6e024ee80a5ebac6b89fa59.webm,b77634156b1d47bcb7ff6d2f2278590b.webm,1795.0,,,,,,0.07,logos/ge.gif,,False,False,0.15,zO2XzB9qcok-002a48dcf6e024ee80a5ebac6b89fa59,webm,zO2XzB9qcok-002a48dcf6e024ee80a5ebac6b89fa59.webm,zO2XzB9qcok-002a48dcf6e024ee80a5ebac6b89fa59.webm +1796,/datadrive/videos/ranjedmwXmM-a65d1ff1809ed988afe55a7f442bbf17.webm,c1c1d51cdbfe4455bfcf59ad9ae0537f.webm,1796.0,,32k,,[0.18 0.05],,,logos/msnbc.png,,False,True,,ranjedmwXmM-a65d1ff1809ed988afe55a7f442bbf17,webm,ranjedmwXmM-a65d1ff1809ed988afe55a7f442bbf17.webm,ranjedmwXmM-a65d1ff1809ed988afe55a7f442bbf17.webm +1797,/datadrive/videos/cZisjK4ydsQ-bcd5c65190f9871b7fbd00c27f42c55c.webm,6c315fd49d5440a5b4958a601ef1552e.webm,1797.0,True,,,,,,logos/jazeera.png,,False,True,,cZisjK4ydsQ-bcd5c65190f9871b7fbd00c27f42c55c,webm,cZisjK4ydsQ-bcd5c65190f9871b7fbd00c27f42c55c.webm,cZisjK4ydsQ-bcd5c65190f9871b7fbd00c27f42c55c.webm +1798,/datadrive/videos/qW-ru-pJnUk-b0b452de7156749c9d23b50222dc7527.mp4,90beef1c75774d489c96b0c11a2f0c69.ogv,1798.0,,32k,,,ogv,,logos/openair.gif,3.0,False,False,0.28,qW-ru-pJnUk-b0b452de7156749c9d23b50222dc7527,mp4,qW-ru-pJnUk-b0b452de7156749c9d23b50222dc7527.mp4,qW-ru-pJnUk-b0b452de7156749c9d23b50222dc7527.mp4 +1800,/datadrive/videos/Rp9bvNSp0Wc-3cbb32a560246b5513d3388f79d9cef3.mp4,42fe4d57e192450e8347082762a06ba0.mp4,1800.0,True,16k,,,,,logos/jazeera.png,0.0,True,True,,Rp9bvNSp0Wc-3cbb32a560246b5513d3388f79d9cef3,mp4,Rp9bvNSp0Wc-3cbb32a560246b5513d3388f79d9cef3.mp4,Rp9bvNSp0Wc-3cbb32a560246b5513d3388f79d9cef3.mp4 +1801,/datadrive/videos/R-_1Aip_GNE-4142747702602b06e9ffc7e15b640ac9.webm,012ac03964e74ce78afe0585275690bb.webm,1801.0,,32k,,,,0.08,,9.0,False,False,0.27,R-_1Aip_GNE-4142747702602b06e9ffc7e15b640ac9,webm,R-_1Aip_GNE-4142747702602b06e9ffc7e15b640ac9.webm,R-_1Aip_GNE-4142747702602b06e9ffc7e15b640ac9.webm +1802,/datadrive/videos/sFmjwmLwGSk-039a3d62a150f5046bad6651f5bd9f07.webm,ccf883f9051e401db4c29d6f56a89021.webm,1802.0,True,,0.69,,,-0.03,,6.0,False,True,-0.34,sFmjwmLwGSk-039a3d62a150f5046bad6651f5bd9f07,webm,sFmjwmLwGSk-039a3d62a150f5046bad6651f5bd9f07.webm,sFmjwmLwGSk-039a3d62a150f5046bad6651f5bd9f07.webm +1803,/datadrive/videos/_5g95MUIieM-7673d38ccc6e268bf6d79e61f388d37b.mp4,57b2f7a882af484e9b4ac2553f8b34a0.mp4,1803.0,False,64k,,,,-0.05,,,False,False,0.04,_5g95MUIieM-7673d38ccc6e268bf6d79e61f388d37b,mp4,_5g95MUIieM-7673d38ccc6e268bf6d79e61f388d37b.mp4,_5g95MUIieM-7673d38ccc6e268bf6d79e61f388d37b.mp4 +1804,/datadrive/videos/UuVhiL8j-70-57df925c4610c87ee735b5f8a13c40e6.mp4,52ba5721b5f946ee9cc195914ea1a659.mp4,1804.0,False,16k,0.26,,,,,4.0,False,True,,UuVhiL8j-70-57df925c4610c87ee735b5f8a13c40e6,mp4,UuVhiL8j-70-57df925c4610c87ee735b5f8a13c40e6.mp4,UuVhiL8j-70-57df925c4610c87ee735b5f8a13c40e6.mp4 +1805,/datadrive/videos/n3L7sLi7e8U-fee398e341640a0b5b3386f0d0406899.webm,0913226d526c4f40a7da8554db8e7cdc.mp4,1805.0,,,,[0.05 0.02],mp4,0.0,,4.0,False,True,,n3L7sLi7e8U-fee398e341640a0b5b3386f0d0406899,webm,n3L7sLi7e8U-fee398e341640a0b5b3386f0d0406899.webm,n3L7sLi7e8U-fee398e341640a0b5b3386f0d0406899.webm +1806,/datadrive/videos/1Ck_gjUqfX8-2db2cb7e2eea90d296c27e9481cd67c7.webm,059228c0650e450eb12bc48ebad57fd5.webm,1806.0,False,128k,,,,,,,False,True,0.16,1Ck_gjUqfX8-2db2cb7e2eea90d296c27e9481cd67c7,webm,1Ck_gjUqfX8-2db2cb7e2eea90d296c27e9481cd67c7.webm,1Ck_gjUqfX8-2db2cb7e2eea90d296c27e9481cd67c7.webm +1807,/datadrive/videos/ZrX5Fr3jCHg-ef98ff865f76ebc248d357c2223b40fc.webm,7b8555486d36406da2366cd6a785683a.webm,1807.0,,32k,0.91,,webm,,,8.0,False,False,,ZrX5Fr3jCHg-ef98ff865f76ebc248d357c2223b40fc,webm,ZrX5Fr3jCHg-ef98ff865f76ebc248d357c2223b40fc.webm,ZrX5Fr3jCHg-ef98ff865f76ebc248d357c2223b40fc.webm +1809,/datadrive/videos/mVnfH3SAcAY-4ca04345eef95444fdafc6636a6f1bcb.webm,2d4b0eb218f4421db3c6665539269ccd.webm,1809.0,,,,,webm,,,1.0,False,False,0.05,mVnfH3SAcAY-4ca04345eef95444fdafc6636a6f1bcb,webm,mVnfH3SAcAY-4ca04345eef95444fdafc6636a6f1bcb.webm,mVnfH3SAcAY-4ca04345eef95444fdafc6636a6f1bcb.webm +1810,/datadrive/videos/joP7dtFggMY-f44dd8a34b3669a2be2453132c4d02e2.webm,8e77ed9ff6b54c7b81de7dbf32282927.webm,1810.0,,64k,,,,-0.02,,,False,True,0.37,joP7dtFggMY-f44dd8a34b3669a2be2453132c4d02e2,webm,joP7dtFggMY-f44dd8a34b3669a2be2453132c4d02e2.webm,joP7dtFggMY-f44dd8a34b3669a2be2453132c4d02e2.webm +1811,/datadrive/videos/YOfWo6I3ax0-74d95aa820d3ebc003ef8a0225e609cd.webm,01ceca777c58413ca920ba9610da90be.webm,1811.0,,,0.33,,,-0.17,logos/sbt.gif,1.0,False,True,0.28,YOfWo6I3ax0-74d95aa820d3ebc003ef8a0225e609cd,webm,YOfWo6I3ax0-74d95aa820d3ebc003ef8a0225e609cd.webm,YOfWo6I3ax0-74d95aa820d3ebc003ef8a0225e609cd.webm +1812,/datadrive/videos/N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054.webm,3b823d65dfab43669b4db83bbf3d5958.ogv,1812.0,False,128k,,,ogv,-0.09,logos/fox.png,2.0,True,True,,N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054,webm,N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054.webm,N1_SdQE1XME-09e54af56f7e9e22f4653052ebbb8054.webm +1814,/datadrive/videos/nid4RfPDaIg-32df8f77f8b74672aa391fbe749dce52.webm,0b8915eaf7eb4dc0930aee09fc8e5f02.webm,1814.0,,128k,0.47,[0.08 0.03],webm,-0.07,logos/new.gif,2.0,False,False,,nid4RfPDaIg-32df8f77f8b74672aa391fbe749dce52,webm,nid4RfPDaIg-32df8f77f8b74672aa391fbe749dce52.webm,nid4RfPDaIg-32df8f77f8b74672aa391fbe749dce52.webm +1815,/datadrive/videos/Wbt81OcHudQ-fc6f5b465557c5f6b48f8baafc7bdba7.webm,2b863b592b204f6ab5999f6dd1c61eee.webm,1815.0,False,,0.9,[0.03 0.01],,0.11,,6.0,False,True,0.01,Wbt81OcHudQ-fc6f5b465557c5f6b48f8baafc7bdba7,webm,Wbt81OcHudQ-fc6f5b465557c5f6b48f8baafc7bdba7.webm,Wbt81OcHudQ-fc6f5b465557c5f6b48f8baafc7bdba7.webm +1816,/datadrive/videos/5DMCF2sKJpU-859bbc2976278ae50e91639fbc4bad77.webm,20bc8920692148928ba99f004379eaac.ogv,1816.0,False,,,,ogv,-0.16,logos/msnbc.png,9.0,False,True,,5DMCF2sKJpU-859bbc2976278ae50e91639fbc4bad77,webm,5DMCF2sKJpU-859bbc2976278ae50e91639fbc4bad77.webm,5DMCF2sKJpU-859bbc2976278ae50e91639fbc4bad77.webm +1819,/datadrive/videos/uXmAkWROeEM-f6b593f9164c0ece433315b441a58d43.webm,0ab2930e8c1d4d4893587e0f8af90069.webm,1819.0,,,0.71,[0.18 0.05],,,,4.0,False,True,-0.01,uXmAkWROeEM-f6b593f9164c0ece433315b441a58d43,webm,uXmAkWROeEM-f6b593f9164c0ece433315b441a58d43.webm,uXmAkWROeEM-f6b593f9164c0ece433315b441a58d43.webm +1821,/datadrive/videos/JOKInr7_ubQ-3124573beb5680c66bfd0a4bb6f21aab.mp4,a9d9c004948a43edb2e17b467f2ce615.mp4,1821.0,False,,0.71,,,,logos/fox.png,0.0,False,False,,JOKInr7_ubQ-3124573beb5680c66bfd0a4bb6f21aab,mp4,JOKInr7_ubQ-3124573beb5680c66bfd0a4bb6f21aab.mp4,JOKInr7_ubQ-3124573beb5680c66bfd0a4bb6f21aab.mp4 +1822,/datadrive/videos/6NAQ9c4EVTs-6b8a5843f4efb1fd7d25a58c1bde3296.mp4,d125044aa0fe40d680c022b7f20243aa.mp4,1822.0,,,,,,0.14,,1.0,False,False,,6NAQ9c4EVTs-6b8a5843f4efb1fd7d25a58c1bde3296,mp4,6NAQ9c4EVTs-6b8a5843f4efb1fd7d25a58c1bde3296.mp4,6NAQ9c4EVTs-6b8a5843f4efb1fd7d25a58c1bde3296.mp4 +1823,/datadrive/videos/Xaj3LhIY07s-a13fcb07fd13e3f63bde9bda6dd55f13.webm,2b8730c4424b454e850bf106cbcbbe4d.mp4,1823.0,,32k,0.45,,mp4,-0.08,,0.0,False,True,0.13,Xaj3LhIY07s-a13fcb07fd13e3f63bde9bda6dd55f13,webm,Xaj3LhIY07s-a13fcb07fd13e3f63bde9bda6dd55f13.webm,Xaj3LhIY07s-a13fcb07fd13e3f63bde9bda6dd55f13.webm +1824,/datadrive/videos/msg5s-OgYKA-eb2be59c3c0bce037ef4002f915ef8f3.mp4,d733e739e02841cc84478be959980cd6.webm,1824.0,False,32k,,,webm,,,,False,False,,msg5s-OgYKA-eb2be59c3c0bce037ef4002f915ef8f3,mp4,msg5s-OgYKA-eb2be59c3c0bce037ef4002f915ef8f3.mp4,msg5s-OgYKA-eb2be59c3c0bce037ef4002f915ef8f3.mp4 +1825,/datadrive/videos/MkO6dhr47dI-e7ca5f851de56b43cfa664fc00408f9a.webm,74f9c821927d4311887dea7c61bb370e.webm,1825.0,,,,[0.1 0.07],,,logos/download.png,0.0,False,True,-0.23,MkO6dhr47dI-e7ca5f851de56b43cfa664fc00408f9a,webm,MkO6dhr47dI-e7ca5f851de56b43cfa664fc00408f9a.webm,MkO6dhr47dI-e7ca5f851de56b43cfa664fc00408f9a.webm +1826,/datadrive/videos/ypQ7hdbx2EA-266e71b8bdf7177b6a988d6bb0ee5ef0.mp4,3765b1ba97934649a9ad24a60a6af1e2.mp4,1826.0,,64k,,,,0.02,,1.0,False,True,0.19,ypQ7hdbx2EA-266e71b8bdf7177b6a988d6bb0ee5ef0,mp4,ypQ7hdbx2EA-266e71b8bdf7177b6a988d6bb0ee5ef0.mp4,ypQ7hdbx2EA-266e71b8bdf7177b6a988d6bb0ee5ef0.mp4 +1828,/datadrive/videos/YVuM6V3pS24-9b12c4bfede9e409787590f7b22b05ff.webm,cf8413780b68432799ff2c92cd3b3c31.webm,1828.0,,16k,0.64,,,-0.04,,1.0,False,True,-0.02,YVuM6V3pS24-9b12c4bfede9e409787590f7b22b05ff,webm,YVuM6V3pS24-9b12c4bfede9e409787590f7b22b05ff.webm,YVuM6V3pS24-9b12c4bfede9e409787590f7b22b05ff.webm +1829,/datadrive/videos/JHNrXuMp7_8-65bc736faaf4de679db6f2ee3b4aca1d.mp4,2b4e7ddab01a45879422920ad4807ffa.mp4,1829.0,,32k,,[0.03 0.08],,-0.12,logos/jazeera.png,,False,False,-0.36,JHNrXuMp7_8-65bc736faaf4de679db6f2ee3b4aca1d,mp4,JHNrXuMp7_8-65bc736faaf4de679db6f2ee3b4aca1d.mp4,JHNrXuMp7_8-65bc736faaf4de679db6f2ee3b4aca1d.mp4 +1830,/datadrive/videos/WbXAGOrI2t8-4d8e749e6a7f8273dcef742b56e47a12.mp4,6ad1b65fb2cd49f5b1791b2d20504230.webm,1830.0,False,,0.23,[0.02 0.07],webm,-0.09,,,False,False,0.36,WbXAGOrI2t8-4d8e749e6a7f8273dcef742b56e47a12,mp4,WbXAGOrI2t8-4d8e749e6a7f8273dcef742b56e47a12.mp4,WbXAGOrI2t8-4d8e749e6a7f8273dcef742b56e47a12.mp4 +1831,/datadrive/videos/OXgU5X73Hzo-2d697ace67d57c3ac68765ef0211ecb9.webm,8ca4ad48c94343ffbeb8eb3813005bd4.ogv,1831.0,False,32k,,[0.15 0.07],ogv,,,9.0,False,True,0.2,OXgU5X73Hzo-2d697ace67d57c3ac68765ef0211ecb9,webm,OXgU5X73Hzo-2d697ace67d57c3ac68765ef0211ecb9.webm,OXgU5X73Hzo-2d697ace67d57c3ac68765ef0211ecb9.webm +1832,/datadrive/videos/vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3.webm,45324989e5c9480fbd486207834a3a91.webm,1832.0,,128k,,,,,,,False,True,-0.28,vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3,webm,vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3.webm,vjSxK0g8E_w-3dbf4e5565cb6c549ce8707105cfecc3.webm +1834,/datadrive/videos/4r2-9X35Me8-8e4c141595ccc9209e1bf2a473c6834f.webm,4d54bd72f66f4e31aa44c41fe5645758.webm,1834.0,False,16k,,[0.18 0.02],,0.13,logos/download.png,,False,True,0.05,4r2-9X35Me8-8e4c141595ccc9209e1bf2a473c6834f,webm,4r2-9X35Me8-8e4c141595ccc9209e1bf2a473c6834f.webm,4r2-9X35Me8-8e4c141595ccc9209e1bf2a473c6834f.webm +1835,/datadrive/videos/kc8HXMUp80Y-66a78bbcad3f2bd1aceadf33aacb550f.webm,0b2d5a92d24b4f5fa89f0379c305d2f9.webm,1835.0,,,,[0.15 0.16],webm,-0.17,,1.0,False,True,0.0,kc8HXMUp80Y-66a78bbcad3f2bd1aceadf33aacb550f,webm,kc8HXMUp80Y-66a78bbcad3f2bd1aceadf33aacb550f.webm,kc8HXMUp80Y-66a78bbcad3f2bd1aceadf33aacb550f.webm +1836,/datadrive/videos/93hsYr5mg5k-112e46a5f90427b50cb831663254083d.mp4,81ef480487d9463491582580731814cc.mp4,1836.0,,16k,0.79,,mp4,-0.05,,,True,False,,93hsYr5mg5k-112e46a5f90427b50cb831663254083d,mp4,93hsYr5mg5k-112e46a5f90427b50cb831663254083d.mp4,93hsYr5mg5k-112e46a5f90427b50cb831663254083d.mp4 +1837,/datadrive/videos/VDbfCw_3-NE-b4f1940df43cb2a1c0bba4a5348a5ee7.mp4,26cd9a38221c45ff89e557ffad96d78d.webm,1837.0,True,,,,webm,,,2.0,False,True,0.24,VDbfCw_3-NE-b4f1940df43cb2a1c0bba4a5348a5ee7,mp4,VDbfCw_3-NE-b4f1940df43cb2a1c0bba4a5348a5ee7.mp4,VDbfCw_3-NE-b4f1940df43cb2a1c0bba4a5348a5ee7.mp4 +1839,/datadrive/videos/7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6.webm,2066606050e3485a8c53822fe7a445da.mp4,1839.0,,,0.63,[0.05 0.14],mp4,0.12,,6.0,False,True,,7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6,webm,7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6.webm,7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6.webm +1840,/datadrive/videos/6SPmykJgxP0-0ef9d833620bcaa866d99419579ff221.webm,c8fb10ef7b3445ad855630ec5b49d71e.webm,1840.0,,64k,,[0.15 0.18],,0.0,,,False,True,0.29,6SPmykJgxP0-0ef9d833620bcaa866d99419579ff221,webm,6SPmykJgxP0-0ef9d833620bcaa866d99419579ff221.webm,6SPmykJgxP0-0ef9d833620bcaa866d99419579ff221.webm +1841,/datadrive/videos/D5mYmXGAVm4-c0ca9ed7183798e1eb299d1869044a73.webm,979222f9e7e54ce6925d23ee4777c2b9.ogv,1841.0,,,0.75,[0.01 0.09],ogv,,logos/jazeera.png,5.0,False,False,,D5mYmXGAVm4-c0ca9ed7183798e1eb299d1869044a73,webm,D5mYmXGAVm4-c0ca9ed7183798e1eb299d1869044a73.webm,D5mYmXGAVm4-c0ca9ed7183798e1eb299d1869044a73.webm +1842,/datadrive/videos/A_ubLdarod0-5077c66106ec1ce2b1b7d72d057877e5.webm,5865784a2a654f36a98bf8a808a16a63.webm,1842.0,,,0.89,[0.02 0.19],,,,0.0,False,True,-0.19,A_ubLdarod0-5077c66106ec1ce2b1b7d72d057877e5,webm,A_ubLdarod0-5077c66106ec1ce2b1b7d72d057877e5.webm,A_ubLdarod0-5077c66106ec1ce2b1b7d72d057877e5.webm +1843,/datadrive/videos/Cn0Fz9glY4I-f21506511d9c9c7cdaa143acdbc65816.webm,55e94dde7be84082b267de8cc6c710ab.webm,1843.0,False,32k,0.51,,webm,,,,False,False,-0.33,Cn0Fz9glY4I-f21506511d9c9c7cdaa143acdbc65816,webm,Cn0Fz9glY4I-f21506511d9c9c7cdaa143acdbc65816.webm,Cn0Fz9glY4I-f21506511d9c9c7cdaa143acdbc65816.webm +1844,/datadrive/videos/O01gadD46Xc-58f745fb330b40f4a6db119771760d9b.mp4,971277da16194c02a832ced227510efa.mp4,1844.0,False,32k,,[0.11 0.14],,0.06,logos/jazeera.png,7.56,False,True,-0.01,O01gadD46Xc-58f745fb330b40f4a6db119771760d9b,mp4,O01gadD46Xc-58f745fb330b40f4a6db119771760d9b.mp4,O01gadD46Xc-58f745fb330b40f4a6db119771760d9b.mp4 +1845,/datadrive/videos/XrVbpvNzOt0-5b5cf8a6e6eae5c39ef963e3f7cb1dc9.webm,c8f2f66d802544649021a187b044e125.webm,1845.0,False,,0.75,[0.04 0.01],,-0.04,logos/jazeera.png,,False,False,,XrVbpvNzOt0-5b5cf8a6e6eae5c39ef963e3f7cb1dc9,webm,XrVbpvNzOt0-5b5cf8a6e6eae5c39ef963e3f7cb1dc9.webm,XrVbpvNzOt0-5b5cf8a6e6eae5c39ef963e3f7cb1dc9.webm +1846,/datadrive/videos/HPeZtufLKac-ff35b4e9880807d6ce5e429eb18eb5d4.webm,16b3170c46f94968b4c87e99808c585c.webm,1846.0,,16k,,[0.01 0.11],,-0.04,logos/download.png,0.0,False,False,,HPeZtufLKac-ff35b4e9880807d6ce5e429eb18eb5d4,webm,HPeZtufLKac-ff35b4e9880807d6ce5e429eb18eb5d4.webm,HPeZtufLKac-ff35b4e9880807d6ce5e429eb18eb5d4.webm +1847,/datadrive/videos/Qcz5XKXMveg-a3e01669bddb0c972d0c5022f6330166.webm,624e9b2c82a743cb83ca814470b6bce3.webm,1847.0,False,,0.26,[0.01 0.04],webm,,logos/msnbc.png,,True,True,-0.06,Qcz5XKXMveg-a3e01669bddb0c972d0c5022f6330166,webm,Qcz5XKXMveg-a3e01669bddb0c972d0c5022f6330166.webm,Qcz5XKXMveg-a3e01669bddb0c972d0c5022f6330166.webm +1849,/datadrive/videos/4eBZ98_LMow-4da6f872255fd18b613a71b13f9ce8c9.webm,73009a230cc549018be90f134c7b9ec9.webm,1849.0,,16k,,,webm,-0.07,,,True,True,0.22,4eBZ98_LMow-4da6f872255fd18b613a71b13f9ce8c9,webm,4eBZ98_LMow-4da6f872255fd18b613a71b13f9ce8c9.webm,4eBZ98_LMow-4da6f872255fd18b613a71b13f9ce8c9.webm +1850,/datadrive/videos/kqdz6gNdcqo-fa84498b96663c8b0952cbc09cf53b2f.webm,8ae066174d1941e6bb6cf87bf15d39fd.webm,1850.0,True,64k,0.92,,,,logos/jazeera.png,,False,True,-0.06,kqdz6gNdcqo-fa84498b96663c8b0952cbc09cf53b2f,webm,kqdz6gNdcqo-fa84498b96663c8b0952cbc09cf53b2f.webm,kqdz6gNdcqo-fa84498b96663c8b0952cbc09cf53b2f.webm +1852,/datadrive/videos/JUa5xhmZr8k-26358b8b02f77a9ad7d81fea8a637734.mp4,4cb2332db17644bf9f6242c7e9e04a4c.mp4,1852.0,,128k,,[0.18 0.12],,,,4.575,False,False,-0.32,JUa5xhmZr8k-26358b8b02f77a9ad7d81fea8a637734,mp4,JUa5xhmZr8k-26358b8b02f77a9ad7d81fea8a637734.mp4,JUa5xhmZr8k-26358b8b02f77a9ad7d81fea8a637734.mp4 +1853,/datadrive/videos/odExe1ZBgi0-9f898cc06b5fa2d1bf2caa7b974edda8.webm,6a6b9ab7a75141a8b7513f470f79f03f.webm,1853.0,,,0.91,,,-0.07,logos/download.png,,False,False,0.31,odExe1ZBgi0-9f898cc06b5fa2d1bf2caa7b974edda8,webm,odExe1ZBgi0-9f898cc06b5fa2d1bf2caa7b974edda8.webm,odExe1ZBgi0-9f898cc06b5fa2d1bf2caa7b974edda8.webm +1854,/datadrive/videos/gfi9svfxxCM-3244172cdf3f41daded3bc06ab67d619.webm,52431246c0dd49588afe9a105d1c8cbc.webm,1854.0,False,128k,0.73,,,0.04,logos/jazeera.png,,False,False,,gfi9svfxxCM-3244172cdf3f41daded3bc06ab67d619,webm,gfi9svfxxCM-3244172cdf3f41daded3bc06ab67d619.webm,gfi9svfxxCM-3244172cdf3f41daded3bc06ab67d619.webm +1855,/datadrive/videos/q3OqXMoPXh8-ae5381b81ab04e6aa8f45bad966dbaaa.webm,80b09302cd55430090c8ee3a972f2854.ogv,1855.0,,64k,0.34,[0.18 0.17],ogv,-0.1,logos/msnbc.png,2.0,False,False,,q3OqXMoPXh8-ae5381b81ab04e6aa8f45bad966dbaaa,webm,q3OqXMoPXh8-ae5381b81ab04e6aa8f45bad966dbaaa.webm,q3OqXMoPXh8-ae5381b81ab04e6aa8f45bad966dbaaa.webm +1856,/datadrive/videos/zknrwyhCM5o-2d4f278df26cf39b0b87a64eab3a1b22.mp4,2d2fabfda8a7456d8ab6a527c90a8308.mp4,1856.0,,32k,0.48,,mp4,,logos/openair.gif,2.0,False,False,,zknrwyhCM5o-2d4f278df26cf39b0b87a64eab3a1b22,mp4,zknrwyhCM5o-2d4f278df26cf39b0b87a64eab3a1b22.mp4,zknrwyhCM5o-2d4f278df26cf39b0b87a64eab3a1b22.mp4 +1857,/datadrive/videos/6t76mgCLc8A-68165bb3a61f207415c1e6aebfcff673.mp4,d31138e40ea14bd7b4f9dbe93c723533.ogv,1857.0,,,0.69,[0.12 0.08],ogv,,logos/sbt.gif,7.0,False,False,,6t76mgCLc8A-68165bb3a61f207415c1e6aebfcff673,mp4,6t76mgCLc8A-68165bb3a61f207415c1e6aebfcff673.mp4,6t76mgCLc8A-68165bb3a61f207415c1e6aebfcff673.mp4 +1858,/datadrive/videos/bqOy8z3GAn8-77409f1edb944f561fac33bd07dda96e.webm,55c9931af95143d59f4efdc918c3d803.webm,1858.0,,,,,,,logos/sbt.gif,,False,True,0.11,bqOy8z3GAn8-77409f1edb944f561fac33bd07dda96e,webm,bqOy8z3GAn8-77409f1edb944f561fac33bd07dda96e.webm,bqOy8z3GAn8-77409f1edb944f561fac33bd07dda96e.webm +1859,/datadrive/videos/D_7SraULcJY-912db17b332b2ea383bb0ded45a8f57a.webm,9e047c482b424caea5b34bf22fbaa22a.ogv,1859.0,False,16k,0.9,,ogv,,logos/download.png,6.0,False,True,,D_7SraULcJY-912db17b332b2ea383bb0ded45a8f57a,webm,D_7SraULcJY-912db17b332b2ea383bb0ded45a8f57a.webm,D_7SraULcJY-912db17b332b2ea383bb0ded45a8f57a.webm +1860,/datadrive/videos/pOe5jIpmSeY-5b1f02b1937b0103677998dbd6289d34.webm,2828286ca93c4e80950d52d3e143aa0c.webm,1860.0,,,,,,,,5.0,False,True,-0.1,pOe5jIpmSeY-5b1f02b1937b0103677998dbd6289d34,webm,pOe5jIpmSeY-5b1f02b1937b0103677998dbd6289d34.webm,pOe5jIpmSeY-5b1f02b1937b0103677998dbd6289d34.webm +1861,/datadrive/videos/6AGgDqK5p2s-9c4e2115ce9637f1a15abb4b44ab9b15.webm,01068c73558d4dff86a8c96b3d9d94d7.webm,1861.0,False,32k,,[0.02 0.19],webm,,logos/jazeera.png,8.0,False,True,,6AGgDqK5p2s-9c4e2115ce9637f1a15abb4b44ab9b15,webm,6AGgDqK5p2s-9c4e2115ce9637f1a15abb4b44ab9b15.webm,6AGgDqK5p2s-9c4e2115ce9637f1a15abb4b44ab9b15.webm +1862,/datadrive/videos/PlntsbsA4Cw-adcf874a792071e2432211cf686657e5.webm,2c1470a2338a4258bab9e88b1b01ab09.webm,1862.0,,,0.28,,webm,,logos/new.gif,,False,False,0.19,PlntsbsA4Cw-adcf874a792071e2432211cf686657e5,webm,PlntsbsA4Cw-adcf874a792071e2432211cf686657e5.webm,PlntsbsA4Cw-adcf874a792071e2432211cf686657e5.webm +1863,/datadrive/videos/TNN-5IlSAK8-1cfa9bf3f11dfc015be95802f53293be.webm,6a122fd40e5d478790f429247ae269f3.webm,1863.0,True,,0.69,,,,,9.0,False,True,,TNN-5IlSAK8-1cfa9bf3f11dfc015be95802f53293be,webm,TNN-5IlSAK8-1cfa9bf3f11dfc015be95802f53293be.webm,TNN-5IlSAK8-1cfa9bf3f11dfc015be95802f53293be.webm +1864,/datadrive/videos/asw8_ugk9lI-a98022e0c1cded15dc68c4429b34db63.webm,a38107e4577c4bd6b06fd6b6c66b1af9.mp4,1864.0,False,32k,0.99,[0.04 0.12],mp4,,,8.0,False,True,,asw8_ugk9lI-a98022e0c1cded15dc68c4429b34db63,webm,asw8_ugk9lI-a98022e0c1cded15dc68c4429b34db63.webm,asw8_ugk9lI-a98022e0c1cded15dc68c4429b34db63.webm +1865,/datadrive/videos/EjIq9RVVhpk-9550a4ab38bb57b67621800486c4abcd.mp4,3fc9567318e145d8879a5401751146ab.webm,1865.0,True,,0.59,,webm,,,,False,False,,EjIq9RVVhpk-9550a4ab38bb57b67621800486c4abcd,mp4,EjIq9RVVhpk-9550a4ab38bb57b67621800486c4abcd.mp4,EjIq9RVVhpk-9550a4ab38bb57b67621800486c4abcd.mp4 +1866,/datadrive/videos/7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6.webm,a14946cec770462d989790ea3d32bee2.webm,1866.0,False,16k,,[0.11 0.08],,,,0.0,False,False,,7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6,webm,7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6.webm,7LYTx0IJtPY-983ff03d543f14a7fdf9f8e84e55f6b6.webm +1867,/datadrive/videos/XN96TivKx3s-61e14cce110a0f557deebeccf49bc8c7.webm,1040b9f63e964c69a14595b2cc0d2b50.mp4,1867.0,False,16k,,,mp4,,,8.0,False,False,,XN96TivKx3s-61e14cce110a0f557deebeccf49bc8c7,webm,XN96TivKx3s-61e14cce110a0f557deebeccf49bc8c7.webm,XN96TivKx3s-61e14cce110a0f557deebeccf49bc8c7.webm +1868,/datadrive/videos/VqZjjf2K1-4-63c198c42e9e4adbd7d411bd31d18562.mp4,9288ea727ec24e6d87cfed4c40cc08bc.mp4,1868.0,,,,,,-0.09,,,False,False,,VqZjjf2K1-4-63c198c42e9e4adbd7d411bd31d18562,mp4,VqZjjf2K1-4-63c198c42e9e4adbd7d411bd31d18562.mp4,VqZjjf2K1-4-63c198c42e9e4adbd7d411bd31d18562.mp4 +1869,/datadrive/videos/YVuM6V3pS24-9b12c4bfede9e409787590f7b22b05ff.webm,324aad24cfd944c7a3212541f64fb3b9.webm,1869.0,,128k,0.25,[0.08 0.15],webm,,logos/fox.png,,False,True,-0.37,YVuM6V3pS24-9b12c4bfede9e409787590f7b22b05ff,webm,YVuM6V3pS24-9b12c4bfede9e409787590f7b22b05ff.webm,YVuM6V3pS24-9b12c4bfede9e409787590f7b22b05ff.webm +1870,/datadrive/videos/z8dpUShZJEo-a15b60e20ceacd5c563df4f7532b46f9.webm,a5dbdf4f622c445c84f8fbaea7e87557.webm,1870.0,False,,,,,-0.13,logos/msnbc.png,,False,False,,z8dpUShZJEo-a15b60e20ceacd5c563df4f7532b46f9,webm,z8dpUShZJEo-a15b60e20ceacd5c563df4f7532b46f9.webm,z8dpUShZJEo-a15b60e20ceacd5c563df4f7532b46f9.webm +1871,/datadrive/videos/cH1-Nj8N3cs-de480de00d9f200a1404421417fc3010.webm,d25d6ad426f24db783e3f019b15c2aae.ogv,1871.0,False,32k,,[0.17 0.09],ogv,,,,False,False,,cH1-Nj8N3cs-de480de00d9f200a1404421417fc3010,webm,cH1-Nj8N3cs-de480de00d9f200a1404421417fc3010.webm,cH1-Nj8N3cs-de480de00d9f200a1404421417fc3010.webm +1872,/datadrive/videos/WbXAGOrI2t8-4d8e749e6a7f8273dcef742b56e47a12.mp4,541334c9fa8041ec99f921392344343e.mp4,1872.0,,64k,0.44,,mp4,,,4.0,False,True,,WbXAGOrI2t8-4d8e749e6a7f8273dcef742b56e47a12,mp4,WbXAGOrI2t8-4d8e749e6a7f8273dcef742b56e47a12.mp4,WbXAGOrI2t8-4d8e749e6a7f8273dcef742b56e47a12.mp4 +1873,/datadrive/videos/OSffF0ND2Do-86d9de87a5829023cb39e70446783ae3.webm,087cdba7522f4678936e1b525e6e9672.webm,1873.0,False,,0.78,,,-0.2,,,False,False,-0.17,OSffF0ND2Do-86d9de87a5829023cb39e70446783ae3,webm,OSffF0ND2Do-86d9de87a5829023cb39e70446783ae3.webm,OSffF0ND2Do-86d9de87a5829023cb39e70446783ae3.webm +1874,/datadrive/videos/ullnPRj8Cp0-133cdf55ae4ad7f5de5dc7ad2172ae12.webm,9b14545d8cc142af9213812b8a4d8b32.mp4,1874.0,True,,0.67,,mp4,0.03,logos/new.gif,2.0,False,False,0.06,ullnPRj8Cp0-133cdf55ae4ad7f5de5dc7ad2172ae12,webm,ullnPRj8Cp0-133cdf55ae4ad7f5de5dc7ad2172ae12.webm,ullnPRj8Cp0-133cdf55ae4ad7f5de5dc7ad2172ae12.webm +1875,/datadrive/videos/shhcEu9baFY-a952804fb8e99684890d903fba9c8cd5.mp4,02d5e89c254f409db1036d42200cce47.ogv,1875.0,,,0.9,[0.02 0.15],ogv,,logos/fox.png,,False,False,,shhcEu9baFY-a952804fb8e99684890d903fba9c8cd5,mp4,shhcEu9baFY-a952804fb8e99684890d903fba9c8cd5.mp4,shhcEu9baFY-a952804fb8e99684890d903fba9c8cd5.mp4 +1876,/datadrive/videos/Dj2a090fn4I-ee7ae23bca316c2d6988231d849b0b37.mp4,80568f68eee84a25a8c7b8d8e5a21af8.mp4,1876.0,True,32k,0.43,[0.08 0.18],,,,,False,False,,Dj2a090fn4I-ee7ae23bca316c2d6988231d849b0b37,mp4,Dj2a090fn4I-ee7ae23bca316c2d6988231d849b0b37.mp4,Dj2a090fn4I-ee7ae23bca316c2d6988231d849b0b37.mp4 +1877,/datadrive/videos/p6w-d1QBPSs-d0755782a73feb9f8c18163f8f58c28b.mp4,ac42e3a095f1432aa4368100a66e82a8.ogv,1877.0,,,,[0.12 0.11],ogv,,logos/fox.png,,False,True,-0.24,p6w-d1QBPSs-d0755782a73feb9f8c18163f8f58c28b,mp4,p6w-d1QBPSs-d0755782a73feb9f8c18163f8f58c28b.mp4,p6w-d1QBPSs-d0755782a73feb9f8c18163f8f58c28b.mp4 +1878,/datadrive/videos/jr6oGoqDEfI-8842ae65a03a5bdb8c23e78509adb4b1.mp4,ccd4b2c2bd5747eda070aafc9b4c4588.mp4,1878.0,False,,0.9,,mp4,,,,False,True,-0.05,jr6oGoqDEfI-8842ae65a03a5bdb8c23e78509adb4b1,mp4,jr6oGoqDEfI-8842ae65a03a5bdb8c23e78509adb4b1.mp4,jr6oGoqDEfI-8842ae65a03a5bdb8c23e78509adb4b1.mp4 +1880,/datadrive/videos/TJsHYy-GOyU-6f7a014abf17e6177d44b48167b00b69.webm,212d8eaa1afa43f08ce22c0e74b71842.webm,1880.0,False,,0.63,,,,logos/sbt.gif,,False,True,,TJsHYy-GOyU-6f7a014abf17e6177d44b48167b00b69,webm,TJsHYy-GOyU-6f7a014abf17e6177d44b48167b00b69.webm,TJsHYy-GOyU-6f7a014abf17e6177d44b48167b00b69.webm +1881,/datadrive/videos/rLQgyxeRx40-c1ceec9a935c550f87fbf8fd871e17f7.webm,fe43613cfdb5482a944a788bd5f75730.webm,1881.0,True,,,[0.02 0.09],,-0.13,logos/jazeera.png,5.0,False,False,0.27,rLQgyxeRx40-c1ceec9a935c550f87fbf8fd871e17f7,webm,rLQgyxeRx40-c1ceec9a935c550f87fbf8fd871e17f7.webm,rLQgyxeRx40-c1ceec9a935c550f87fbf8fd871e17f7.webm +1882,/datadrive/videos/8Rvu-jlsaOU-5b988b26edd0096ea42d3b804621d297.mp4,91ae6cb2f5be4b27bf9ffcb1bd020594.mp4,1882.0,,,0.34,,,-0.04,logos/fox.png,,False,True,,8Rvu-jlsaOU-5b988b26edd0096ea42d3b804621d297,mp4,8Rvu-jlsaOU-5b988b26edd0096ea42d3b804621d297.mp4,8Rvu-jlsaOU-5b988b26edd0096ea42d3b804621d297.mp4 +1883,/datadrive/videos/jr6oGoqDEfI-8842ae65a03a5bdb8c23e78509adb4b1.mp4,15a81009b58b4a9da149d6ace4e5ad2c.mp4,1883.0,False,,,,,-0.04,,,False,False,-0.25,jr6oGoqDEfI-8842ae65a03a5bdb8c23e78509adb4b1,mp4,jr6oGoqDEfI-8842ae65a03a5bdb8c23e78509adb4b1.mp4,jr6oGoqDEfI-8842ae65a03a5bdb8c23e78509adb4b1.mp4 +1884,/datadrive/videos/bp5hrH2jYD4-00a1e210b8039384a2acfd194cbe561e.webm,213e49fccef641cd822d640a4e8b1ade.webm,1884.0,True,,0.6,,,0.09,,,False,False,,bp5hrH2jYD4-00a1e210b8039384a2acfd194cbe561e,webm,bp5hrH2jYD4-00a1e210b8039384a2acfd194cbe561e.webm,bp5hrH2jYD4-00a1e210b8039384a2acfd194cbe561e.webm +1885,/datadrive/videos/PzWtMxkErkc-fdcf370d76e863f21bb7bb2f7fac0caf.webm,47ea99d2ee6949d29e30c1ef9a93041a.ogv,1885.0,True,16k,,,ogv,,,6.0,False,False,-0.32,PzWtMxkErkc-fdcf370d76e863f21bb7bb2f7fac0caf,webm,PzWtMxkErkc-fdcf370d76e863f21bb7bb2f7fac0caf.webm,PzWtMxkErkc-fdcf370d76e863f21bb7bb2f7fac0caf.webm +1886,/datadrive/videos/2zO_paLHlSs-dda0755c1d66d2e5fb4e5acc64ef0b93.mp4,8971f52705ee4d23a93c22f26ec648cd.webm,1886.0,False,,,,webm,,,2.0,False,True,,2zO_paLHlSs-dda0755c1d66d2e5fb4e5acc64ef0b93,mp4,2zO_paLHlSs-dda0755c1d66d2e5fb4e5acc64ef0b93.mp4,2zO_paLHlSs-dda0755c1d66d2e5fb4e5acc64ef0b93.mp4 +1887,/datadrive/videos/titFWCzsDrc-db34f0cf34921a7730ac4033740b3730.webm,23a0f0048cc34a038b284fd6597d9825.webm,1887.0,,,0.94,,,,,,False,False,-0.07,titFWCzsDrc-db34f0cf34921a7730ac4033740b3730,webm,titFWCzsDrc-db34f0cf34921a7730ac4033740b3730.webm,titFWCzsDrc-db34f0cf34921a7730ac4033740b3730.webm +1888,/datadrive/videos/VumULM5Sao4-bde4ed9f36edcbbfd2f3b00b13e8c634.webm,3909fb1671764f2c8b80a6e4bb3e70a1.ogv,1888.0,,,0.36,[0.03 0.12],ogv,,logos/another.gif,2.0,False,True,-0.25,VumULM5Sao4-bde4ed9f36edcbbfd2f3b00b13e8c634,webm,VumULM5Sao4-bde4ed9f36edcbbfd2f3b00b13e8c634.webm,VumULM5Sao4-bde4ed9f36edcbbfd2f3b00b13e8c634.webm +1889,/datadrive/videos/KUPhrkMq5Og-8c38fd80a694ecc6ce9bed886ba84e44.mp4,8d0a6c2e7c4b4610b40ef2aa30d5e5af.webm,1889.0,,32k,,,webm,0.02,logos/ge.gif,,False,True,0.02,KUPhrkMq5Og-8c38fd80a694ecc6ce9bed886ba84e44,mp4,KUPhrkMq5Og-8c38fd80a694ecc6ce9bed886ba84e44.mp4,KUPhrkMq5Og-8c38fd80a694ecc6ce9bed886ba84e44.mp4 +1891,/datadrive/videos/CMcPeaMK6xo-4bc269214315a2c0c2095c7214d60438.mp4,bcafa29756e74267a54e2e076912cfdf.webm,1891.0,,,,[0.08 0.02],webm,-0.07,logos/jazeera.png,,False,True,,CMcPeaMK6xo-4bc269214315a2c0c2095c7214d60438,mp4,CMcPeaMK6xo-4bc269214315a2c0c2095c7214d60438.mp4,CMcPeaMK6xo-4bc269214315a2c0c2095c7214d60438.mp4 +1892,/datadrive/videos/N0UEoaOErEE-8430f959ac337908792be280f49759a8.webm,b2469057dcd541e59c22fdf2930e46eb.webm,1892.0,False,,,[0.02 0.19],,,,8.0,False,True,,N0UEoaOErEE-8430f959ac337908792be280f49759a8,webm,N0UEoaOErEE-8430f959ac337908792be280f49759a8.webm,N0UEoaOErEE-8430f959ac337908792be280f49759a8.webm +1893,/datadrive/videos/hWjAAMoC3u8-054448970c8b6ea05677e7084c994b5a.mp4,05d5df0e798a4b0caf8153e0f3e850dc.ogv,1893.0,,128k,0.61,[0.04 0.15],ogv,,logos/fox.png,9.0,False,True,-0.2,hWjAAMoC3u8-054448970c8b6ea05677e7084c994b5a,mp4,hWjAAMoC3u8-054448970c8b6ea05677e7084c994b5a.mp4,hWjAAMoC3u8-054448970c8b6ea05677e7084c994b5a.mp4 +1894,/datadrive/videos/eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11.mp4,4a8a85b2382c40b0b6aa127dbe3208be.mp4,1894.0,,,,,,0.09,logos/msnbc.png,1.0,False,False,,eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11,mp4,eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11.mp4,eq1lbmZLJpc-df295a1562768d2b43f52a2b85002f11.mp4 +1895,/datadrive/videos/8jb9xt2zP74-2e8d16513bfefd127c65be308e19a2d0.mp4,097897feeb104c2494cd4b0fec7db170.webm,1895.0,,16k,,,webm,0.12,,7.0,True,False,0.11,8jb9xt2zP74-2e8d16513bfefd127c65be308e19a2d0,mp4,8jb9xt2zP74-2e8d16513bfefd127c65be308e19a2d0.mp4,8jb9xt2zP74-2e8d16513bfefd127c65be308e19a2d0.mp4 +1896,/datadrive/videos/VSxPuIzFDMA-a62ff1f9553fc77149e4bac131ee419e.webm,8b90efe210f247f1ac2f96f3a2531278.webm,1896.0,False,,,[0.05 0.19],,,logos/jazeera.png,,False,True,-0.1,VSxPuIzFDMA-a62ff1f9553fc77149e4bac131ee419e,webm,VSxPuIzFDMA-a62ff1f9553fc77149e4bac131ee419e.webm,VSxPuIzFDMA-a62ff1f9553fc77149e4bac131ee419e.webm +1897,/datadrive/videos/fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905.mp4,9e34a5447da443eda67fcd72645332ec.mp4,1897.0,False,,,[0.18 0.16],,-0.02,logos/openair.gif,4.0,False,True,-0.03,fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905,mp4,fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905.mp4,fOqdfZdmNEQ-4060ff05b68d5c33f74d426cb619c905.mp4 +1899,/datadrive/videos/HGHgnvILnZI-922d330e54db7110ffe5016b7301d915.mp4,6491f5c147a4410790de982db4dfe3f0.mp4,1899.0,,,,,mp4,0.14,,,False,False,,HGHgnvILnZI-922d330e54db7110ffe5016b7301d915,mp4,HGHgnvILnZI-922d330e54db7110ffe5016b7301d915.mp4,HGHgnvILnZI-922d330e54db7110ffe5016b7301d915.mp4 +1900,/datadrive/videos/1Wei5ftE9iI-96f3b6c067327b9f0d6c03aed6b67c81.mp4,358ef46f0c2d4125945bf0d547e7ff0a.mp4,1900.0,False,,0.34,[0.12 0.09],,,logos/new.gif,2.0,True,True,,1Wei5ftE9iI-96f3b6c067327b9f0d6c03aed6b67c81,mp4,1Wei5ftE9iI-96f3b6c067327b9f0d6c03aed6b67c81.mp4,1Wei5ftE9iI-96f3b6c067327b9f0d6c03aed6b67c81.mp4 +1901,/datadrive/videos/uFybM4QdNXE-24b42959a805fdab20e1e2e2bd48bd0c.webm,6d388b8516ab4f91ac1a7a4a4e6a24f7.ogv,1901.0,False,,0.83,,ogv,-0.17,logos/msnbc.png,,False,True,,uFybM4QdNXE-24b42959a805fdab20e1e2e2bd48bd0c,webm,uFybM4QdNXE-24b42959a805fdab20e1e2e2bd48bd0c.webm,uFybM4QdNXE-24b42959a805fdab20e1e2e2bd48bd0c.webm +1902,/datadrive/videos/ohngCDAw4QI-50c283e39de3da07592e9ccd3a3e4fa1.mp4,c6af94d1f54041ec92713aa62b1a463c.mp4,1902.0,False,,0.93,,mp4,,logos/msnbc.png,5.0,False,False,0.05,ohngCDAw4QI-50c283e39de3da07592e9ccd3a3e4fa1,mp4,ohngCDAw4QI-50c283e39de3da07592e9ccd3a3e4fa1.mp4,ohngCDAw4QI-50c283e39de3da07592e9ccd3a3e4fa1.mp4 +1903,/datadrive/videos/QA3KRnwpPRc-918d81e74e44013f26b1d3df75d8bcc5.mp4,c3b6d77ca6574e6789ccfca8d0f012ad.mp4,1903.0,,,0.71,[0.19 0.06],,,,,False,False,0.27,QA3KRnwpPRc-918d81e74e44013f26b1d3df75d8bcc5,mp4,QA3KRnwpPRc-918d81e74e44013f26b1d3df75d8bcc5.mp4,QA3KRnwpPRc-918d81e74e44013f26b1d3df75d8bcc5.mp4 +1904,/datadrive/videos/g7PSxWsnslI-744f3f86f7face1a28fb5a4b1a44fb0a.webm,5129a4cdcb704e3fa3a7d1752a3e04b6.webm,1904.0,,64k,0.97,[0.18 0.18],,,logos/sbt.gif,,False,False,-0.18,g7PSxWsnslI-744f3f86f7face1a28fb5a4b1a44fb0a,webm,g7PSxWsnslI-744f3f86f7face1a28fb5a4b1a44fb0a.webm,g7PSxWsnslI-744f3f86f7face1a28fb5a4b1a44fb0a.webm +1906,/datadrive/videos/BCtHNNjmK-g-6411a60e68f3d6d63634de0a22109cbe.webm,3f92614ad17640e2975b04aec998501f.mp4,1906.0,,32k,0.96,,mp4,,logos/new.gif,2.0,False,False,-0.16,BCtHNNjmK-g-6411a60e68f3d6d63634de0a22109cbe,webm,BCtHNNjmK-g-6411a60e68f3d6d63634de0a22109cbe.webm,BCtHNNjmK-g-6411a60e68f3d6d63634de0a22109cbe.webm +1907,/datadrive/videos/pbDcLobEjDs-15fe4262f91fd7a4db2772ae8c311238.mp4,7c1b06d752d9459aa2239a8875aed18a.mp4,1907.0,,,,[0.18 0.05],,-0.09,,,False,False,-0.39,pbDcLobEjDs-15fe4262f91fd7a4db2772ae8c311238,mp4,pbDcLobEjDs-15fe4262f91fd7a4db2772ae8c311238.mp4,pbDcLobEjDs-15fe4262f91fd7a4db2772ae8c311238.mp4 +1908,/datadrive/videos/a4cyiTNvuM0-69be08068c25a8c756dee1f1052c9890.webm,4aff48b91c894b999b182bec6c8a179e.webm,1908.0,,,0.45,[0.02 0.12],webm,,,,True,False,,a4cyiTNvuM0-69be08068c25a8c756dee1f1052c9890,webm,a4cyiTNvuM0-69be08068c25a8c756dee1f1052c9890.webm,a4cyiTNvuM0-69be08068c25a8c756dee1f1052c9890.webm +1910,/datadrive/videos/hCih259gbvg-a6342b7679035421992bb43278875880.webm,d382ed244d67456dbedb796cec781c48.webm,1910.0,,16k,0.55,,webm,0.11,logos/jazeera.png,8.0,False,False,-0.22,hCih259gbvg-a6342b7679035421992bb43278875880,webm,hCih259gbvg-a6342b7679035421992bb43278875880.webm,hCih259gbvg-a6342b7679035421992bb43278875880.webm +1911,/datadrive/videos/DfaPkeyYcMU-d920474fecf21e0ba16ab1505ef5c635.mp4,3f6e44f8461b4abf8734c30bdd01cc9e.webm,1911.0,,64k,0.56,[0.1 0.15],webm,,,1.0,False,False,,DfaPkeyYcMU-d920474fecf21e0ba16ab1505ef5c635,mp4,DfaPkeyYcMU-d920474fecf21e0ba16ab1505ef5c635.mp4,DfaPkeyYcMU-d920474fecf21e0ba16ab1505ef5c635.mp4 +1912,/datadrive/videos/Z-c8Opypy24-c1a940c3538db2e68a0335360ab745e7.webm,4ca31127acab40cbbe625768e5562fa0.webm,1912.0,,,,,,-0.13,logos/msnbc.png,,False,True,0.14,Z-c8Opypy24-c1a940c3538db2e68a0335360ab745e7,webm,Z-c8Opypy24-c1a940c3538db2e68a0335360ab745e7.webm,Z-c8Opypy24-c1a940c3538db2e68a0335360ab745e7.webm +1913,/datadrive/videos/jvC-ceOdkCE-3c748249f196d58f4313d10c2cf747fe.webm,1e2cb20130064f38b1ad4775e35fd45b.ogv,1913.0,,,,,ogv,-0.19,,,False,True,,jvC-ceOdkCE-3c748249f196d58f4313d10c2cf747fe,webm,jvC-ceOdkCE-3c748249f196d58f4313d10c2cf747fe.webm,jvC-ceOdkCE-3c748249f196d58f4313d10c2cf747fe.webm +1915,/datadrive/videos/RuVViSGgPxI-4fe210d5d2070424bef985ce616e369c.webm,c709fff686bf4389a5ad247d4eebdfe2.webm,1915.0,False,,0.26,,webm,,,6.0,False,True,0.09,RuVViSGgPxI-4fe210d5d2070424bef985ce616e369c,webm,RuVViSGgPxI-4fe210d5d2070424bef985ce616e369c.webm,RuVViSGgPxI-4fe210d5d2070424bef985ce616e369c.webm +1916,/datadrive/videos/BOWm361Gkt0-9058b9b40b8beae02920da7f1e8431ec.webm,32b73dc4b9ab4ca187a010df986d9bf2.webm,1916.0,False,128k,,,,0.08,,8.0,False,False,0.19,BOWm361Gkt0-9058b9b40b8beae02920da7f1e8431ec,webm,BOWm361Gkt0-9058b9b40b8beae02920da7f1e8431ec.webm,BOWm361Gkt0-9058b9b40b8beae02920da7f1e8431ec.webm +1917,/datadrive/videos/zU55UWVWMPw-02ed5a511178e0dbf9f8d2c207263c52.webm,8185caa888d847a0ad57d8b6cc2b9d58.ogv,1917.0,True,,0.82,[0.07 0.01],ogv,0.01,logos/openair.gif,4.0,False,False,,zU55UWVWMPw-02ed5a511178e0dbf9f8d2c207263c52,webm,zU55UWVWMPw-02ed5a511178e0dbf9f8d2c207263c52.webm,zU55UWVWMPw-02ed5a511178e0dbf9f8d2c207263c52.webm +1918,/datadrive/videos/OSffF0ND2Do-86d9de87a5829023cb39e70446783ae3.webm,24a5ea7e6ff74da9b576a7b5dd15600d.mp4,1918.0,False,,0.36,[0.01 0.07],mp4,,logos/openair.gif,5.0,False,False,0.09,OSffF0ND2Do-86d9de87a5829023cb39e70446783ae3,webm,OSffF0ND2Do-86d9de87a5829023cb39e70446783ae3.webm,OSffF0ND2Do-86d9de87a5829023cb39e70446783ae3.webm +1919,/datadrive/videos/ShljDSOaKh4-f9cdca0cbf252c0820676091761e1b45.webm,b84ffc19beb646c7baa8bdc7d41abab7.webm,1919.0,False,128k,,,,,logos/openair.gif,,False,True,-0.15,ShljDSOaKh4-f9cdca0cbf252c0820676091761e1b45,webm,ShljDSOaKh4-f9cdca0cbf252c0820676091761e1b45.webm,ShljDSOaKh4-f9cdca0cbf252c0820676091761e1b45.webm +1920,/datadrive/videos/TnipjVf-gqA-0953772f6c5d43e7a3ee08b649a18aa9.webm,9fb539b9364d48e29c174c9b2c6883a7.ogv,1920.0,,64k,,,ogv,-0.18,logos/ge.gif,,False,False,0.0,TnipjVf-gqA-0953772f6c5d43e7a3ee08b649a18aa9,webm,TnipjVf-gqA-0953772f6c5d43e7a3ee08b649a18aa9.webm,TnipjVf-gqA-0953772f6c5d43e7a3ee08b649a18aa9.webm +1922,/datadrive/videos/POn0_4ZPrTA-881ea5c90f20457ca78fe9896db4d0ab.webm,20e230f41b444e15919a8c2d7bd37b93.webm,1922.0,False,,0.77,[0.06 0.06],webm,,logos/ge.gif,1.0,False,False,,POn0_4ZPrTA-881ea5c90f20457ca78fe9896db4d0ab,webm,POn0_4ZPrTA-881ea5c90f20457ca78fe9896db4d0ab.webm,POn0_4ZPrTA-881ea5c90f20457ca78fe9896db4d0ab.webm +1923,/datadrive/videos/WiCiQXF4Y5w-4111d16ba5eb5d12719f77bca79f9dc1.mp4,69aa4549f5794736a8583c0ec96570dd.webm,1923.0,True,,,,webm,0.01,logos/fox.png,,False,False,,WiCiQXF4Y5w-4111d16ba5eb5d12719f77bca79f9dc1,mp4,WiCiQXF4Y5w-4111d16ba5eb5d12719f77bca79f9dc1.mp4,WiCiQXF4Y5w-4111d16ba5eb5d12719f77bca79f9dc1.mp4 +1924,/datadrive/videos/3trHfbWSELQ-c0dc199ecc958d951332cb5d15be7d77.webm,17bdf81968454310a3e67b67c7fdac97.webm,1924.0,False,64k,0.52,,,0.15,,9.0,False,True,0.3,3trHfbWSELQ-c0dc199ecc958d951332cb5d15be7d77,webm,3trHfbWSELQ-c0dc199ecc958d951332cb5d15be7d77.webm,3trHfbWSELQ-c0dc199ecc958d951332cb5d15be7d77.webm +1925,/datadrive/videos/CuQj8oNR-1I-d2d165bd782563419d35fffaed8ae0d9.mp4,975bd354078047c1aadf70addd59ed9b.mp4,1925.0,True,,0.98,[0.02 0.16],mp4,0.07,,1.0,False,True,-0.05,CuQj8oNR-1I-d2d165bd782563419d35fffaed8ae0d9,mp4,CuQj8oNR-1I-d2d165bd782563419d35fffaed8ae0d9.mp4,CuQj8oNR-1I-d2d165bd782563419d35fffaed8ae0d9.mp4 +1926,/datadrive/videos/N95pg7IBN_E-7ca94b2b81faf965a184cc31082f5480.mp4,46617fbf9a014486b7e11ac1e8ff842f.mp4,1926.0,False,64k,,[0.1 0.01],mp4,,logos/openair.gif,4.0,False,False,,N95pg7IBN_E-7ca94b2b81faf965a184cc31082f5480,mp4,N95pg7IBN_E-7ca94b2b81faf965a184cc31082f5480.mp4,N95pg7IBN_E-7ca94b2b81faf965a184cc31082f5480.mp4 +1927,/datadrive/videos/SdqCgP2hQ8c-8ea312ec9100c294eae4e85c3df4f5df.mp4,701b2d7b1adb46d4b90e94280f5e7f4e.mp4,1927.0,False,,,,,0.09,,,True,True,,SdqCgP2hQ8c-8ea312ec9100c294eae4e85c3df4f5df,mp4,SdqCgP2hQ8c-8ea312ec9100c294eae4e85c3df4f5df.mp4,SdqCgP2hQ8c-8ea312ec9100c294eae4e85c3df4f5df.mp4 +1928,/datadrive/videos/Mhh6KJeHCRA-f49e7c42148de2d711943b3bcd28a657.webm,06db5e3241ff43448efee66d5b8c1d00.webm,1928.0,,64k,0.41,[0.12 0.15],webm,-0.2,,4.0,False,False,0.24,Mhh6KJeHCRA-f49e7c42148de2d711943b3bcd28a657,webm,Mhh6KJeHCRA-f49e7c42148de2d711943b3bcd28a657.webm,Mhh6KJeHCRA-f49e7c42148de2d711943b3bcd28a657.webm +1929,/datadrive/videos/dau1iLjA9PU-0781b8b853494fd1f268a8530509c786.webm,3b505e2947084ff9ae09e99126c3042a.mp4,1929.0,False,,,,mp4,,logos/download.png,5.0,False,True,-0.35,dau1iLjA9PU-0781b8b853494fd1f268a8530509c786,webm,dau1iLjA9PU-0781b8b853494fd1f268a8530509c786.webm,dau1iLjA9PU-0781b8b853494fd1f268a8530509c786.webm diff --git a/benchmarks/evaluate.py b/benchmarks/evaluate.py new file mode 100644 index 00000000..39d3b257 --- /dev/null +++ b/benchmarks/evaluate.py @@ -0,0 +1,121 @@ +import pandas as pd +from glob import glob +from utils import get_result, download_dataset, get_frame_sampling_permutations +import os +from winnow.utils import resolve_config +import click +from winnow.utils import scan_videos +import subprocess +import shlex +import numpy as np +import json + +pd.options.mode.chained_assignment = None + +@click.command() + +@click.option( + '--benchmark', '-b', + help='name of the benchmark to evaluated', + default='augmented_dataset') + +@click.option( + '--force-download', '-fd', + help='Force download of the dataset (even if an existing directory for the dataset has been detected', + default=False, is_flag=True) + +@click.option( + '--overwrite', '-o', + help='Force feature extraction, even if we detect that signatures have already been processed.', + default=False, is_flag=True) + + +def main(benchmark, force_download, overwrite): + + config_path = os.path.join('benchmarks', benchmark, 'config.yml') + config = resolve_config(config_path) + source_folder = config.sources.root + + videos = scan_videos(source_folder, '**') + + if len(videos) == 0 or force_download: + + download_dataset(source_folder, url='https://winnowpre.s3.amazonaws.com/augmented_dataset.tar.xz') + + videos = scan_videos(source_folder, '**') + + print(f'Videos found after download:{len(videos)}') + + if len(videos) > 0: + + print('Video files found. Checking for existing signatures...') + + signatures_path = os.path.join( + config.repr.directory, + 'video_signatures', '**', + '**.npy') + + signatures = glob(os.path.join(signatures_path), recursive=True) + + if len(signatures) == 0 or overwrite: + + # Load signatures and labels + # + command = f'python extract_features.py -cp {config_path}' + command = shlex.split(command) + subprocess.run(command, check=True) + + # Check if signatures were generated properly + signatures = glob(os.path.join(signatures_path), recursive=True) + + assert len(signatures) > 0, 'No signature files were found.' + + available_df = pd.read_csv( + os.path.join( + 'benchmarks', + benchmark, + 'labels.csv')) + frame_level = glob( + os.path.join( + config.repr.directory, + 'frame_level', '**', + '**.npy'), recursive=True) + + signatures_permutations = get_frame_sampling_permutations( + list(range(1, 6)), + frame_level) + + scoreboard = dict() + + for fs, sigs in signatures_permutations.items(): + + results_analysis = dict() + + for r in np.linspace(0.1, 0.25, num=10): + + results = [] + + for i in range(5): + + mAP, pr_curve = get_result( + available_df, + sigs, + ratio=r, + file_index=frame_level) + results.append(mAP) + + results_analysis[r] = results + + scoreboard[fs] = results_analysis + + results_file = open('benchmarks/scoreboard.json', "w") + json.dump(scoreboard, results_file) + print('Saved scoreboard on {}'.format('benchmarks/scoreboard.json')) + + else: + + print(f'Please review the dataset (@ {source_folder})') + +if __name__ == '__main__': + + main() diff --git a/benchmarks/utils.py b/benchmarks/utils.py new file mode 100644 index 00000000..e3f4a8cb --- /dev/null +++ b/benchmarks/utils.py @@ -0,0 +1,159 @@ +import pandas as pd +import numpy as np +from winnow.feature_extraction.loading_utils import evaluate, calculate_similarities, global_vector +from winnow.feature_extraction.utils import load_image, download_file +from winnow.feature_extraction import SimilarityModel +from collections import defaultdict +import os +import shutil +from glob import glob + +def get_queries(min_num_of_samples, df, col='original_filename'): + + fc = df[col].value_counts() + msk = fc >= min_num_of_samples + + return fc[msk].index.values + + +def get_query_dataset(df, query, ratio=.22, col='original_filename'): + + msk = df[col] == query + occ = df.loc[msk, :] + negative = df.loc[~msk, :] + n_positive_samples = len(occ) + positive_head = occ.sample(1)['new_filename'].values[0] + + query_total = n_positive_samples / ratio + to_be_sampled = int(query_total - n_positive_samples) + confounders = negative.sample(to_be_sampled) + confounders.loc[:, 'label'] = 'X' + occ.loc[:, 'label'] = 'E' + merged = pd.concat([confounders, occ]) + + query_d = dict() + + for i, row in merged.iterrows(): + + query_d[row['new_filename']] = row['label'] + + return positive_head, query_d + + +def get_ground_truth(available_df, queries, min_samples=4, ratio=0.2): + + ground_truth = dict() + + for query in queries: + + head, query_ds = get_query_dataset(available_df, query, ratio=ratio) + + ground_truth[head] = query_ds + + return ground_truth + + +def convert_ground_truth(gt, base_to_idx): + + queries = list(gt.keys()) + + qi = {base_to_idx[x]: i+1 for i, x in enumerate(queries)} + + new_ds = dict() + + for k, v in gt.items(): + + sub_d = dict() + + for kk, vv in v.items(): + + sub_d[base_to_idx[kk]] = vv + + new_ds[qi[base_to_idx[k]]] = sub_d + + return new_ds + + +def get_result(df, + signatures, + min_samples=4, + ratio=0.25, + all_videos=False, + file_index=None): + + if file_index is None: + + signatures_data = np.array([np.load(x) for x in signatures]) + basename = [os.path.basename(x)[:-4] for x in signatures] + + else: + + basename = [os.path.basename(x)[:-4] for x in file_index] + signatures_data = np.array(signatures) + signatures = file_index + + basename_to_idx = {x: i for i, x in enumerate(basename)} + + queries = get_queries(min_samples, df) + query_idx = [basename_to_idx[x] for x in queries] + similarities = calculate_similarities(query_idx, signatures_data) + + ground_truth = get_ground_truth(df, queries, ratio=ratio) + final_gt = convert_ground_truth(ground_truth, basename_to_idx) + mAP, pr_curve = evaluate(final_gt, similarities, all_videos=all_videos) + return mAP, pr_curve + + +def download_dataset( + dst, + url="https://winnowpre.s3.amazonaws.com/augmented_dataset.tar.xz"): + + if not os.path.exists(dst): + + os.makedirs(dst) + + number_of_files = len(glob(dst + '/**')) + print('Files Found',number_of_files) + + if number_of_files < 2: + + print('Downloading sample dataset to:{}'.format(dst)) + + fp = os.path.join(dst, 'dataset.tar.gz') + if not os.path.isfile(fp): + + download_file(fp, url) + # unzip files + print('unpacking', fp) + shutil.unpack_archive(fp, dst) + # Delete tar + os.unlink(fp) + else: + print('Files have already been downloaded') + + +def get_frame_sampling_permutations(frame_samplings, frame_level_files): + + d = defaultdict(list) + + for v in frame_level_files: + + data = np.load(v) + + for frame_sampling in frame_samplings: + + d[frame_sampling].append(data[::frame_sampling]) + + sm = SimilarityModel() + + signatures = defaultdict(list) + for fs in d.keys(): + + video_level = np.array([global_vector(x) for x in d[fs]]) + signatures[fs].append( + sm.predict_from_features( + video_level.reshape( + video_level.shape[0], + video_level.shape[2]))) + + return signatures diff --git a/db/__init__.py b/db/__init__.py index 40a1003c..e03a5fa1 100644 --- a/db/__init__.py +++ b/db/__init__.py @@ -36,13 +36,16 @@ def drop_tables(self): self.base.metadata.drop_all(bind=self.engine) @contextmanager - def session_scope(self): + def session_scope(self, expunge=False): """Provide a transactional scope.""" session = self.session() try: yield session + if expunge: + session.flush() + session.expunge_all() session.commit() - except: + except Exception: session.rollback() raise finally: diff --git a/winnow/feature_extraction/nets/__init__.py b/db/access/__init__.py similarity index 100% rename from winnow/feature_extraction/nets/__init__.py rename to db/access/__init__.py diff --git a/db/access/files.py b/db/access/files.py new file mode 100644 index 00000000..d0aff20c --- /dev/null +++ b/db/access/files.py @@ -0,0 +1,240 @@ +from dataclasses import dataclass, field +from datetime import datetime +from typing import List + +from sqlalchemy import or_, func, literal_column +from sqlalchemy.orm import aliased + +from db.schema import Files, Matches, Exif + + +class FileMatchFilter: + """Enum for file match filtering criteria.""" + ALL = "all" + RELATED = "related" + DUPLICATES = "duplicates" + UNIQUE = "unique" + + values = {ALL, RELATED, DUPLICATES, UNIQUE} + + +class FileSort: + """Enum for result ordering.""" + DATE = "date" + LENGTH = "length" + RELATED = "related" + DUPLICATES = "duplicates" + + values = {DATE, LENGTH, RELATED, DUPLICATES} + + +@dataclass +class ListFilesRequest: + """Parameters for list-files query.""" + + limit: int = 20 + offset: int = 0 + path_query: str = None + extensions: List[str] = field(default_factory=list) + exif: bool = None + audio: bool = None + min_length: int = None + max_length: int = None + date_from: datetime = None + date_to: datetime = None + preload: list = field(default_factory=list) + sort: str = None + match_filter: str = FileMatchFilter.ALL + related_distance: float = 0.4 + duplicate_distance: float = 0.1 + + +@dataclass +class Counts: + """Count of files by matches.""" + total: int + related: int + duplicates: int + unique: int + + +@dataclass +class ListFilesResults: + """Results of list-files query.""" + items: List[Files] + counts: Counts + + +class FilesDAO: + """Data-access object for files.""" + + # Label for related entities count (matches, scenes, etc.) + _LABEL_COUNT = "hit_count" + _countable_match = aliased(Matches) + + @staticmethod + def list_files(req: ListFilesRequest, session) -> ListFilesResults: + """Query multiple files.""" + # Count files + query = session.query(Files) + query = FilesDAO._filter_by_file_attributes(req, query) + counts = FilesDAO.counts(query, req.related_distance, req.duplicate_distance) + + # Select files + sortable_attributes = FilesDAO._sortable_attributes(req) + query = session.query(Files, *sortable_attributes) + query = FilesDAO._filter_by_file_attributes(req, query) + query = FilesDAO._filter_by_matches(req, query) + query = FilesDAO._sort_items(req, query) + + # Retrieve slice + query = query.offset(req.offset).limit(req.limit) + items = query.all() + + # Get files from result set if there are additional attributes. + if len(sortable_attributes) > 0: + items = [item[0] for item in items] + + return ListFilesResults(items=items, counts=counts) + + @staticmethod + def counts(query, related_distance, duplicate_distance): + """Count queried files by matches.""" + total = query.count() + duplicates = query.filter(FilesDAO.has_matches(duplicate_distance)).count() + related = query.filter(FilesDAO.has_matches(related_distance)).count() + unique = total - related + return Counts( + total=total, + related=related, + duplicates=duplicates, + unique=unique) + + @staticmethod + def has_matches(threshold): + """Create a filter criteria to check if there is a match + with distance lesser or equal to the given threshold.""" + return or_(Files.source_matches.any(Matches.distance <= threshold), + Files.target_matches.any(Matches.distance <= threshold)) + + @staticmethod + def file_matches(file_id, session): + """Query for all file matches.""" + return session.query(Matches).filter(or_( + Matches.query_video_file_id == file_id, + Matches.match_video_file_id == file_id + )) + + @staticmethod + def _sortable_attributes(req: ListFilesRequest): + """Get additional sortable attributes.""" + values = [] + if req.sort == FileSort.RELATED or req.sort == FileSort.DUPLICATES: + match_count = func.count(FilesDAO._countable_match.id).label(FilesDAO._LABEL_COUNT) + values.append(match_count) + return values + + @staticmethod + def _sort_items(req: ListFilesRequest, query): + """Apply ordering.""" + if req.sort == FileSort.RELATED or req.sort == FileSort.DUPLICATES: + match = FilesDAO._countable_match + threshold = req.related_distance if req.sort == FileSort.RELATED else req.duplicate_distance + query = query.outerjoin(FilesDAO._countable_match, + ((match.query_video_file_id == Files.id) | + (match.match_video_file_id == Files.id)) & (match.distance < threshold)) + return query.group_by(Files.id).order_by(literal_column(FilesDAO._LABEL_COUNT).desc(), Files.id.asc()) + elif req.sort == FileSort.LENGTH: + exif = aliased(Exif) + return query.outerjoin(exif).order_by(exif.General_Duration.desc(), Files.id.asc()) + elif req.sort == FileSort.DATE: + exif = aliased(Exif) + return query.outerjoin(exif).order_by(exif.General_Encoded_Date.desc(), Files.id.asc()) + return query + + @staticmethod + def _filter_path(req: ListFilesRequest, query): + """Filter by file name.""" + if req.path_query: + return query.filter(Files.file_path.ilike(f"%{req.path_query}%")) + return query + + @staticmethod + def _filter_extensions(req: ListFilesRequest, query): + """Filter by file extension.""" + if req.extensions: + conditions = (Files.file_path.ilike(f"%.{ext}") for ext in req.extensions) + return query.filter(or_(*conditions)) + return query + + @staticmethod + def _filter_exif(req: ListFilesRequest, query): + """Filter by EXIF data presence.""" + if req.exif is not None: + has_exif = Files.exif.has() + if req.exif: + return query.filter(has_exif) + else: + return query.filter(~has_exif) + return query + + @staticmethod + def _filter_audio(req: ListFilesRequest, query): + """Filter by audio presence.""" + if req.audio is not None: + has_audio = Files.exif.has(Exif.Audio_Duration > 0) + if req.audio: + return query.filter(has_audio) + else: + return query.filter(~has_audio) + return query + + @staticmethod + def _filter_date(req: ListFilesRequest, query): + """Filter by creation date.""" + if req.date_from is not None: + query = query.filter( + Files.exif.has(Exif.General_Encoded_Date >= req.date_from)) + + if req.date_to is not None: + query = query.filter( + Files.exif.has(Exif.General_Encoded_Date <= req.date_to)) + + return query + + @staticmethod + def _filter_length(req: ListFilesRequest, query): + """Filter by length.""" + if req.min_length is not None or req.max_length is not None: + query = query.join(Files.exif) + + if req.min_length is not None: + query = query.filter(Exif.General_Duration >= req.min_length) + + if req.max_length is not None: + query = query.filter(Exif.General_Duration <= req.max_length) + + return query + + @staticmethod + def _filter_by_matches(req: ListFilesRequest, query): + """Filter by presence of similar files.""" + if req.match_filter == FileMatchFilter.DUPLICATES: + return query.filter(FilesDAO.has_matches(req.duplicate_distance)) + elif req.match_filter == FileMatchFilter.RELATED: + return query.filter(FilesDAO.has_matches(req.related_distance)) + elif req.match_filter == FileMatchFilter.UNIQUE: + return query.filter(~FilesDAO.has_matches(req.related_distance)) + # else MatchCategory.ALL + return query + + @staticmethod + def _filter_by_file_attributes(req: ListFilesRequest, query): + """Apply filters related to the properties of video file itself.""" + query = FilesDAO._filter_path(req, query) + query = FilesDAO._filter_extensions(req, query) + query = FilesDAO._filter_exif(req, query) + query = FilesDAO._filter_audio(req, query) + query = FilesDAO._filter_date(req, query) + query = FilesDAO._filter_length(req, query) + return query diff --git a/db/access/matches.py b/db/access/matches.py new file mode 100644 index 00000000..5ca25463 --- /dev/null +++ b/db/access/matches.py @@ -0,0 +1,142 @@ +import itertools +from dataclasses import dataclass, field +from typing import List + +from sqlalchemy import Column +from sqlalchemy.orm import joinedload, aliased, contains_eager + +from db.schema import Files, Matches + + +def _chunks(iterable, size=100): + """Split iterable into equal-sized chunks.""" + iterator = iter(iterable) + chunk = list(itertools.islice(iterator, size)) + while chunk: + yield chunk + chunk = list(itertools.islice(iterator, size)) + + +@dataclass +class FileMatchesRequest: + """List single file's matches request.""" + file: Files + limit: int = 20 + offset: int = 0 + max_distance: float = 1.0 + min_distance: float = 0.0 + hops: int = 1 + preload: List[Column] = field(default_factory=list) + + +@dataclass +class FileMatchesResult: + """List single file's matches results.""" + files: List[Files] + matches: List[Matches] + total: int + + +class MatchesDAO: + """Data-access object for file matches.""" + + @staticmethod + def list_file_matches(req: FileMatchesRequest, session) -> FileMatchesResult: + """List single file's matches.""" + files = [] + # ids of files that was loaded during previous + # steps or will be loaded during the current step + seen = {req.file.id} + # ids of files that will be loaded during the current step + current_step = {req.file.id} + # 'step' variable is always equal to the minimal distance (number of arrows) + # from the source file to the files that will be loaded during the current step + for step in range(req.hops + 1): + # ids of files that will be loaded during the next step + next_step = set() + more_steps = step < req.hops + + # Perform current step in equal-sized chunks + for chunk in _chunks(current_step): + query = session.query(Files) + query = MatchesDAO._join_matches(query, req) + query = MatchesDAO._preload_file_attrs(query, req.preload) + items = query.filter(Files.id.in_(chunk)).all() + for file in items: + files.append(file) + if more_steps: + MatchesDAO._populate_next_step(file, seen, next_step) + seen.update(next_step) + current_step = next_step + matches = MatchesDAO._extract_matches(files, file_ids=seen) + + # Slice result set + matches, files, total = MatchesDAO._slice_results(req.file, matches, offset=req.offset, limit=req.limit) + return FileMatchesResult(files=files, matches=matches, total=total) + + @staticmethod + def _populate_next_step(file, seen, next_step): + """Add not-seen files to the next step.""" + for match in file.source_matches: + matched_file = match.match_video_file + if matched_file.id not in seen: + next_step.add(matched_file.id) + for match in file.target_matches: + matched_file = match.query_video_file + if matched_file.id not in seen: + next_step.add(matched_file.id) + + @staticmethod + def _preload_file_attrs(query, preload): + """Preload requested optional file attributes.""" + for relation in preload: + query = query.options(joinedload(relation)) + return query + + @staticmethod + def _extract_matches(files, file_ids): + """Build matches list.""" + matches = set() + for file in files: + for match in file.target_matches: + if match.match_video_file_id in file_ids and match.query_video_file_id in file_ids: + matches.add(match) + for match in file.source_matches: + if match.match_video_file_id in file_ids and match.query_video_file_id in file_ids: + matches.add(match) + matches = list(matches) + matches.sort(key=lambda item: item.id) + return matches + + @staticmethod + def _join_matches(query, req): + """Apply filters by match attributes.""" + outgoing = aliased(Matches) + incoming = aliased(Matches) + return query. \ + outerjoin(outgoing, + (outgoing.query_video_file_id == Files.id) & + (outgoing.distance >= req.min_distance) & + (outgoing.distance <= req.max_distance)). \ + outerjoin(incoming, + (incoming.match_video_file_id == Files.id) & + (incoming.distance >= req.min_distance) & + (incoming.distance <= req.max_distance)). \ + options(contains_eager(Files.source_matches, alias=outgoing)). \ + options(contains_eager(Files.target_matches, alias=incoming)) + + @staticmethod + def _slice_results(start_file, matches, offset, limit): + """Extract requested slice from matches.""" + # Slice matches + total = len(matches) + matches = sorted(matches, key=lambda item: item.id) + matches = matches[offset:offset + limit] + + # Get the corresponding files + files = {start_file} + for match in matches: + files.add(match.match_video_file) + files.add(match.query_video_file) + files = sorted(list(files), key=lambda item: item.id) + return matches, files, total diff --git a/db/schema.py b/db/schema.py index c38b85da..c8527bff 100644 --- a/db/schema.py +++ b/db/schema.py @@ -1,9 +1,9 @@ import datetime from sqlalchemy import Column, String, Integer, LargeBinary, Boolean, \ - Float, JSON, ForeignKey, UniqueConstraint, DateTime,PrimaryKeyConstraint,event + Float, JSON, ForeignKey, UniqueConstraint, DateTime, event from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import relationship,backref,object_session +from sqlalchemy.orm import relationship, object_session Base = declarative_base() @@ -19,7 +19,7 @@ class Files(Base): signature = relationship("Signature", uselist=False, back_populates="file") meta = relationship("VideoMetadata", uselist=False, back_populates="file") scenes = relationship("Scene", back_populates="file") - templatematches = relationship("Templatematches", back_populates="file",cascade='all, delete-orphan') + templatematches = relationship("Templatematches", back_populates="file", cascade='all, delete-orphan') exif = relationship("Exif", uselist=False, back_populates="file") # TODO: find a way to merge these two relationships @@ -38,28 +38,15 @@ class Signature(Base): signature = Column(LargeBinary) -# TODO:Revaluate which columns are actually essential -# TODO: Add sha signature - class VideoMetadata(Base): __tablename__ = 'videometadata' id = Column(Integer, primary_key=True) file_id = Column(Integer, ForeignKey('files.id'), unique=True, nullable=False) file = relationship("Files", back_populates="meta") - video_length = Column(Float) - avg_act = Column(Float) - video_avg_std = Column(Float) - video_max_dif = Column(Float) - gray_avg = Column(Float) - gray_std = Column(Float) gray_max = Column(Float) - video_duration_flag = Column(Boolean) video_dark_flag = Column(Boolean) flagged = Column(Boolean) - video_duration_seconds = Column(Float) - avg_scene_duration_seconds = Column(Float) - total_video_duration_timestamp = Column(String) class Scene(Base): @@ -74,16 +61,17 @@ class Scene(Base): class Templatematches(Base): __tablename__ = 'templatematches' # __table_args__ = (UniqueConstraint('file_id', 'template_name'),) - id = Column(Integer,autoincrement=True,primary_key=True) + id = Column(Integer, autoincrement=True, primary_key=True) file_id = Column(Integer, ForeignKey('files.id'), nullable=True) - file = relationship("Files",back_populates='templatematches') + file = relationship("Files", back_populates='templatematches') template_name = Column(String) distance = Column(Float) closest_match = Column(Float) closest_match_time = Column(String) -@event.listens_for(Files.templatematches,"remove") -def rem(state,item,initiator): + +@event.listens_for(Files.templatematches, "remove") +def rem(state, item, initiator): sess = object_session(item) # ensure we have a session @@ -98,8 +86,6 @@ def rem(state,item,initiator): sess.flush([item]) - - class Matches(Base): __tablename__ = 'matches' __table_args__ = (UniqueConstraint('query_video_file_id', 'match_video_file_id', name='_matches_uc'),) @@ -130,10 +116,10 @@ class Exif(Base): General_OverallBitRate = Column(Float) General_FrameRate = Column(Float) General_FrameCount = Column(Float) - General_Encoded_Date = Column(String) - General_File_Modified_Date = Column(String) - General_File_Modified_Date_Local = Column(String) - General_Tagged_Date = Column(String) + General_Encoded_Date = Column(DateTime) + General_File_Modified_Date = Column(DateTime) + General_File_Modified_Date_Local = Column(DateTime) + General_Tagged_Date = Column(DateTime) Video_Format = Column(String) Video_BitRate = Column(Float) Video_InternetMediaType = Column(String) @@ -146,6 +132,6 @@ class Exif(Base): Audio_BitRate = Column(Float) Audio_Channels = Column(Float) Audio_Duration = Column(Float) - Audio_Encoded_Date = Column(String) - Audio_Tagged_Date = Column(String) + Audio_Encoded_Date = Column(DateTime) + Audio_Tagged_Date = Column(DateTime) Json_full_exif = Column(JSON) diff --git a/docker-compose.override.yml b/docker-compose.override.yml deleted file mode 100644 index 3e1209b2..00000000 --- a/docker-compose.override.yml +++ /dev/null @@ -1,13 +0,0 @@ -version: '2.3' - -services: - dedup-app: - build: - context: . - dockerfile: docker/Dockerfile.dedup-gpu - - server: - build: - context: . - dockerfile: docker/Dockerfile.server - diff --git a/docker-compose.yml b/docker-compose.yml index 54cf5fe5..74d71764 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -31,7 +31,13 @@ services: - postgres-compose-network dedup-app: - runtime: nvidia + image: "johnhbenetech/videodeduplication:${BENETECH_RUNTIME:-gpu}${BENETECH_MODE}" + build: + context: . + dockerfile: "docker/Dockerfile.dedup-${BENETECH_RUNTIME:-gpu}" + args: + GIT_HASH: "${GIT_HASH}" + runtime: "${BENETECH_DOCKER_RUNTIME:-nvidia}" command: bash -ic "bash serve_jupyter.sh" environment: PGADMIN_DEFAULT_EMAIL: "admin@admin.com" @@ -46,22 +52,18 @@ services: - postgres networks: - postgres-compose-network - server: - # This could be replaced by the online repository reference - # if you don't want to built a local docker image + image: "johnhbenetech/videodeduplication:server${BENETECH_MODE}" build: context: . dockerfile: docker/Dockerfile.server + args: + GIT_HASH: "${GIT_HASH}" environment: SERVER_HOST: "0.0.0.0" SERVER_PORT: "5000" STATIC_FOLDER: "static" - DATABASE_HOST: "postgres" - DATABASE_PORT: "5432" - DATABASE_NAME: "videodeduplicationdb" - DATABASE_USER: "postgres" - DATABASE_PASS: "admin" + DATABASE_URI: "postgres://postgres:admin@postgres:5432/videodeduplicationdb" VIDEO_FOLDER: "/project/data/" THUMBNAIL_CACHE_FOLDER: "/project/thumbnails" THUMBNAIL_CACHE_CAP: 10000 diff --git a/docker-compose/README.md b/docker-compose/README.md deleted file mode 100644 index 3fe8307e..00000000 --- a/docker-compose/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# `docker-compose` extensions - -This directory contains extensions for the default `docker-compose.yml` configuration. - -See [Multiple Compose files](https://docs.docker.com/compose/extends/) for more details. - -### Available Extensions - * [build.cpu.yml](./build.cpu.yml) - fallback to the CPU runtime - * [prebuilt.yml](./prebuilt.yml) - use pre-built images (use Nvidia GPU for file processing) - * [prebuilt.cpu.yml](./prebuilt.cpu.yml) - use pre-built images (use CPU for file processing) - - -### Example Usage - -Run application with pre-built images: -``` -sudo docker-compose -f docker-compose.yml -f docker-compose/prebuilt.yml up -d -``` - -Run application with pre-built images using CPU runtime: -``` -sudo docker-compose -f docker-compose.yml -f docker-compose/prebuilt.cpu.yml up -d -``` - -Build images from sources and use CPU runtime: -``` -sudo docker-compose -f docker-compose.yml -f docker-compose/build.cpu.yml up -d -``` diff --git a/docker-compose/build.cpu.yml b/docker-compose/build.cpu.yml deleted file mode 100644 index a69082f6..00000000 --- a/docker-compose/build.cpu.yml +++ /dev/null @@ -1,11 +0,0 @@ -# This is a docker-compose.yml file extension to use CPU runtime (when Nvidia runtime is not available). -# See https://docs.docker.com/compose/extends/ for more details on configuration file extensions. - -version: '2.3' - -services: - dedup-app: - build: - context: . - dockerfile: docker/Dockerfile.dedup-cpu - runtime: runc diff --git a/docker-compose/prebuilt.cpu.yml b/docker-compose/prebuilt.cpu.yml deleted file mode 100644 index 9219e194..00000000 --- a/docker-compose/prebuilt.cpu.yml +++ /dev/null @@ -1,9 +0,0 @@ -# This is a docker-compose.yml file extension to use prebuilt docker images. -# See https://docs.docker.com/compose/extends/ for more details on configuration file extensions. - -version: '2.3' - -services: - dedup-app: - image: johnhbenetech/videodeduplication:cpu - runtime: runc diff --git a/docker-compose/prebuilt.yml b/docker-compose/prebuilt.yml deleted file mode 100644 index 9264b8dd..00000000 --- a/docker-compose/prebuilt.yml +++ /dev/null @@ -1,8 +0,0 @@ -# This is a docker-compose.yml file extension to use prebuilt docker images. -# See https://docs.docker.com/compose/extends/ for more details on configuration file extensions. - -version: '2.3' - -services: - dedup-app: - image: johnhbenetech/videodeduplication:gpu diff --git a/docker/Dockerfile.dedup-cpu b/docker/Dockerfile.dedup-cpu index b3892c47..6e73b9e3 100644 --- a/docker/Dockerfile.dedup-cpu +++ b/docker/Dockerfile.dedup-cpu @@ -31,3 +31,6 @@ RUN apt update RUN apt-get install -y libsm6 libxext6 libxrender-dev nano libgl1-mesa-glx mediainfo RUN /bin/bash -c "source activate winnow && bash scripts/run-tests.sh" + +ARG GIT_HASH=unspecified +LABEL git_hash=$GIT_HASH \ No newline at end of file diff --git a/docker/Dockerfile.dedup-gpu b/docker/Dockerfile.dedup-gpu index cedd0486..ccc3e322 100644 --- a/docker/Dockerfile.dedup-gpu +++ b/docker/Dockerfile.dedup-gpu @@ -29,3 +29,6 @@ RUN /bin/bash -c "source activate winnow && \ RUN apt update RUN apt-get install -y libsm6 libxext6 libxrender-dev nano libgl1-mesa-glx mediainfo + +ARG GIT_HASH=unspecified +LABEL git_hash=$GIT_HASH \ No newline at end of file diff --git a/docker/Dockerfile.server b/docker/Dockerfile.server index 80e70218..61fbe66a 100644 --- a/docker/Dockerfile.server +++ b/docker/Dockerfile.server @@ -28,4 +28,6 @@ RUN pip install -r requirements.txt COPY --from=web /web/build /server/static +ARG GIT_HASH=unspecified +LABEL git_hash=$GIT_HASH CMD python -m server.main \ No newline at end of file diff --git a/environment-gpu.yaml b/environment-gpu.yaml index 35324b13..66e9b464 100644 --- a/environment-gpu.yaml +++ b/environment-gpu.yaml @@ -17,6 +17,7 @@ dependencies: - jupyter - jupyterlab - pip: + - lmdb - image - imageio - moviepy diff --git a/environment.yaml b/environment.yaml index 1b260621..3ec88ead 100644 --- a/environment.yaml +++ b/environment.yaml @@ -17,6 +17,7 @@ dependencies: - jupyter - jupyterlab - pip: + - lmdb - image - imageio - moviepy diff --git a/extract_exif.py b/extract_exif.py index 0ed3183a..a7f021d5 100644 --- a/extract_exif.py +++ b/extract_exif.py @@ -48,8 +48,6 @@ def main(config): assert len(metadata) == len(df_parsed) - - if config.save_files: EXIF_REPORT_PATH = join(config.repr.directory, 'exif_metadata.csv') diff --git a/extract_features.py b/extract_features.py index b0711a0c..d54cb5b4 100644 --- a/extract_features.py +++ b/extract_features.py @@ -5,14 +5,13 @@ import click from db import Database -from db.utils import * from winnow.feature_extraction import IntermediateCnnExtractor, FrameToVideoRepresentation, SimilarityModel, \ load_featurizer from winnow.feature_extraction.model import default_model_path from winnow.storage.db_result_storage import DBResultStorage from winnow.storage.repr_storage import ReprStorage -from winnow.storage.repr_utils import bulk_read, bulk_write, path_resolver -from winnow.utils import scan_videos, create_video_list, scan_videos_from_txt, resolve_config +from winnow.storage.repr_utils import bulk_read, bulk_write +from winnow.utils import scan_videos, create_video_list, scan_videos_from_txt, resolve_config, reprkey_resolver logging.getLogger().setLevel(logging.ERROR) logging.getLogger("winnow").setLevel(logging.INFO) @@ -39,15 +38,17 @@ @click.option( '--save-frames', '-sf', help='Whether to save the frames sampled from the videos - overrides save_frames on the config file', - default=False,is_flag=True) + default=False, is_flag=True) - -def main(config,list_of_files,frame_sampling,save_frames): - - config = resolve_config(config_path=config, frame_sampling=frame_sampling, save_frames=save_frames) +def main(config, list_of_files, frame_sampling, save_frames): + config = resolve_config( + config_path=config, + frame_sampling=frame_sampling, + save_frames=save_frames) + reps = ReprStorage(os.path.join(config.repr.directory)) - storepath = path_resolver(source_root=config.sources.root) + reprkey = reprkey_resolver(config) print('Searching for Dataset Video Files') @@ -56,11 +57,9 @@ def main(config,list_of_files,frame_sampling,save_frames): else: videos = scan_videos_from_txt(list_of_files, extensions=config.sources.extensions) - - print('Number of files found: {}'.format(len(videos))) - remaining_videos_path = [path for path in videos if not reps.frame_level.exists(storepath(path), get_hash(path))] + remaining_videos_path = [path for path in videos if not reps.frame_level.exists(reprkey(path))] print('There are {} videos left'.format(len(remaining_videos_path))) @@ -71,7 +70,7 @@ def main(config,list_of_files,frame_sampling,save_frames): if len(remaining_videos_path) > 0: # Instantiates the extractor model_path = default_model_path(config.proc.pretrained_model_local_path) - extractor = IntermediateCnnExtractor(video_src=VIDEOS_LIST, reprs=reps, storepath=storepath, + extractor = IntermediateCnnExtractor(video_src=VIDEOS_LIST, reprs=reps, reprkey=reprkey, frame_sampling=config.proc.frame_sampling, save_frames=config.proc.save_frames, model=(load_featurizer(model_path))) @@ -87,13 +86,18 @@ def main(config,list_of_files,frame_sampling,save_frames): print('Extracting Signatures from Video representations') sm = SimilarityModel() - signatures = sm.predict(bulk_read(reps.video_level)) # Get dict (path,hash) => signature + + vid_level_iterator = bulk_read(reps.video_level) + + assert len(vid_level_iterator) > 0, 'No Signatures left to be processed' + + signatures = sm.predict(vid_level_iterator) # Get {ReprKey => signature} dict print('Saving Video Signatures on :{}'.format(reps.signature.directory)) if config.database.use: # Convert dict to list of (path, sha256, signature) tuples - entries = [(path, sha256, sig) for (path, sha256), sig in signatures.items()] + entries = [(key.path, key.hash, sig) for key, sig in signatures.items()] # Connect to database database = Database(uri=config.database.uri) diff --git a/generate_matches.py b/generate_matches.py index 3f4d4cbf..bdfe15b1 100644 --- a/generate_matches.py +++ b/generate_matches.py @@ -6,7 +6,8 @@ from dataclasses import asdict from sklearn.neighbors import NearestNeighbors from tqdm import tqdm - +import pandas as pd +import numpy as np from db import Database from db.utils import * from winnow.feature_extraction import SimilarityModel @@ -25,7 +26,6 @@ help='path to the project config file', default=None) - def main(config): print('Loading config file') @@ -35,11 +35,16 @@ def main(config): # Get mapping (path,hash) => sig. print('Extracting Video Signatures') sm = SimilarityModel() + vid_level_iterator = bulk_read(reps.video_level) + + assert len(vid_level_iterator) > 0, 'No video_level features were found' + signatures_dict = sm.predict(bulk_read(reps.video_level)) # Unpack paths, hashes and signatures as separate np.arrays - path_hash_pairs, video_signatures = zip(*signatures_dict.items()) - paths, hashes = map(np.array, zip(*path_hash_pairs)) + repr_keys, video_signatures = zip(*signatures_dict.items()) + paths = np.array([key.path for key in repr_keys]) + hashes = np.array([key.hash for key in repr_keys]) video_signatures = np.array(video_signatures) @@ -78,9 +83,9 @@ def main(config): match_df['match_sha256'] = hashes[match_df['match']] match_df['self_match'] = match_df['query_video'] == match_df['match_video'] # Remove self matches - match_df = match_df.loc[~match_df['self_match'],:] + match_df = match_df.loc[~match_df['self_match'], :] # Creates unique index from query, match - match_df['unique_index'] = match_df.apply(uniq,axis=1) + match_df['unique_index'] = match_df.apply(uniq, axis=1) # Removes duplicated entries (eg if A matches B, we don't need B matches A) match_df = match_df.drop_duplicates(subset=['unique_index']) @@ -93,6 +98,7 @@ def main(config): if config.proc.detect_scenes: frame_features_dict = bulk_read(reps.frame_level, select=None) + assert len(frame_features_dict) > 0, 'No Frame Level features were found.' scenes = extract_scenes(frame_features_dict) scene_metadata = pd.DataFrame(asdict(scenes)) @@ -117,11 +123,12 @@ def main(config): print('Filtering dark and/or short videos') # Get original files for which we have both frames and frame-level features - path_hash_pairs = list(set(reps.video_level.list())) - paths, hashes = zip(*path_hash_pairs) + repr_keys = list(set(reps.video_level.list())) + paths = [key.path for key in repr_keys] + hashes = [key.hash for key in repr_keys] print('Extracting additional information from video files') - brightness_estimation = np.array([get_brightness_estimation(reps, *path_hash) for path_hash in tqdm(path_hash_pairs)]) + brightness_estimation = np.array([get_brightness_estimation(reps, key) for key in tqdm(repr_keys)]) print(brightness_estimation.shape) metadata_df = pd.DataFrame({"fn": paths, "sha256": hashes, @@ -151,8 +158,8 @@ def is_discarded(row): f'matches_at_{config.proc.match_distance}_distance_filtered.csv') METADATA_REPORT_PATH = os.path.join(config.repr.directory, 'metadata_signatures.csv') - match_df = match_df.loc[~discard_msk,:] - + match_df = match_df.loc[~discard_msk, :] + if config.database.use: # Connect to database and ensure schema database = Database(uri=config.database.uri) diff --git a/requirements-winnow-unit-tests.txt b/requirements-winnow-unit-tests.txt index b451c164..05e5d883 100644 --- a/requirements-winnow-unit-tests.txt +++ b/requirements-winnow-unit-tests.txt @@ -6,4 +6,5 @@ sqlalchemy pyyaml requests dataclasses -psycopg2 \ No newline at end of file +psycopg2 +lmdb diff --git a/scripts/docker-build.sh b/scripts/docker-build.sh new file mode 100755 index 00000000..97d98940 --- /dev/null +++ b/scripts/docker-build.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +# This script builds Docker images from the local +# repository and tag them as development version. + +export BENETECH_MODE="" + +if [ -f ".env" ]; then + source .env +fi + +if [ "$BENETECH_MODE" = "-dev" ]; then + set -x + sudo docker-compose rm -s -f + sudo docker-compose build --build-arg GIT_HASH="$(git rev-parse --short HEAD)" --parallel --no-cache +else + set -x + sudo docker build --build-arg GIT_HASH="$(git rev-parse --short HEAD)" --no-cache -t "johnhbenetech/videodeduplication:${BENETECH_RUNTIME:-gpu}-dev" . -f "docker/Dockerfile.dedup-${BENETECH_RUNTIME:-gpu}" + sudo docker build --build-arg GIT_HASH="$(git rev-parse --short HEAD)" --no-cache -t "johnhbenetech/videodeduplication:server-dev" . -f "docker/Dockerfile.server" +fi diff --git a/scripts/docker-setup.sh b/scripts/docker-setup.sh index e7880bb7..eaa3e5a5 100755 --- a/scripts/docker-setup.sh +++ b/scripts/docker-setup.sh @@ -1,54 +1,84 @@ #!/usr/bin/env bash +read -r -d '' HELP << ENDOFHELP +usage: ./docker-setup.sh [--help] [-f | --force-update] + +Generate .env file used by docker-compose tool +and some docker-related scripts under the ./script +directory. + +See also https://docs.docker.com/compose/env-file/ +ENDOFHELP + +FORCE_UPDATE=NO; + +# Read arguments +while (( $# > 0 )); do + case $1 in + -f|--force-update) + FORCE_UPDATE=YES; + shift; + ;; + --help) + echo "$HELP"; + exit 0; + ;; + *) + echo "Unrecognized argument: $1"; + echo "$HELP" + exit 1; + esac +done + + +LIBS="$(realpath "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )/lib" )" +source "$LIBS/ask.choose.sh" +source "$LIBS/ask.confirm.sh" +source "$LIBS/ask.path.sh" + if [ -f ".env" ]; then source .env fi -# Read source data locaion -while ! [ -d "$BENETECH_DATA_LOCATION" ]; do +# Read source data location +if [ "$FORCE_UPDATE" = "YES" ] || ! [ -d "$BENETECH_DATA_LOCATION" ]; then DIRTY=yes - echo -n -e "\e[36mPlease specify the root folder with your video files (use Tab for auto-complete): \e[0m" - read -e -r BENETECH_DATA_LOCATION - if ! [ -d "$BENETECH_DATA_LOCATION" ]; then - echo -e "\e[31mERROR\e[0m No such directory: $BENETECH_DATA_LOCATION" - fi -done + tput setaf 6; echo "Please specify the root folder with your video files (use Tab for auto-complete)."; tput sgr0; + read-dir-path BENETECH_DATA_LOCATION "Data folder path" + echo +fi # Choose data analysis runtime -while [ -z "$BENETECH_RUNTIME" ]; do +if [ "$FORCE_UPDATE" = "YES" ] || [ -z "$BENETECH_RUNTIME" ]; then DIRTY=yes - echo -n -e "\e[36mWould you like to use GPU for data analysis? [Y/n]: \e[0m" - read -r RUNTIME_ANSWER - if [ -z "$RUNTIME_ANSWER" ] || [[ "$RUNTIME_ANSWER" =~ [Yy] ]]; then - export BENETECH_RUNTIME=GPU - elif [[ "$RUNTIME_ANSWER" =~ [Nn] ]]; then - export BENETECH_RUNTIME=CPU + tput setaf 6; echo "Would you like to use GPU for data processing?"; tput sgr0; + choose BENETECH_RUNTIME gpu="Use GPU for data processing." cpu="Use CPU for data processing." + if [ "$BENETECH_RUNTIME" = "nvidia" ]; then + BENETECH_DOCKER_RUNTIME="nvidia" else - echo -e "\e[31mERROR\e[0m Cannot recognize answer. Please answer 'y' or 'n'" + BENETECH_DOCKER_RUNTIME="runc" fi -done + echo +fi + # Decide whether to use prebuilt images -while [ -z "$BENETECH_PREBUILT" ]; do +if [ "$FORCE_UPDATE" = "YES" ] || [ -z "${BENETECH_MODE+x}" ]; then DIRTY=yes - echo -n -e "\e[36mWould you like to use pre-built images? [y/N]: \e[0m" - read -r PREBUILT_ANSWER - if [ -z "$PREBUILT_ANSWER" ] || [[ "$PREBUILT_ANSWER" =~ [Nn] ]]; then - export BENETECH_PREBUILT=NO - elif [[ "$PREBUILT_ANSWER" =~ [Yy] ]]; then - export BENETECH_PREBUILT=YES - else - echo -e "\e[31mERROR\e[0m Cannot recognize answer. Please answer 'y' or 'n'" - fi -done + tput setaf 6; echo "Would you like to use production Docker images?"; tput sgr0; + choose BENETECH_MODE ''="Use production images." '-dev'="Pull the latest dev-images or build images locally." + echo +fi # Write data to the .env file if [ -n "$DIRTY" ]; then { + echo "# This file is generated by scripts/docker-setup.sh" echo "BENETECH_DATA_LOCATION=$BENETECH_DATA_LOCATION" echo "BENETECH_RUNTIME=$BENETECH_RUNTIME" - echo "BENETECH_PREBUILT=$BENETECH_PREBUILT" + echo "BENETECH_DOCKER_RUNTIME=$BENETECH_DOCKER_RUNTIME" + echo "BENETECH_MODE=$BENETECH_MODE" } > .env - - echo -e "\e[1mOK\e[0m Configuration is written to the $(pwd)/.env file" + tput setaf 2; echo -n "OK"; tput sgr0; + echo " Configuration is written to the $(pwd)/.env"; fi diff --git a/scripts/docker-run.sh b/scripts/docker-update.sh similarity index 74% rename from scripts/docker-run.sh rename to scripts/docker-update.sh index e0b56560..68ba21a8 100755 --- a/scripts/docker-run.sh +++ b/scripts/docker-update.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash +# This script updates the docker-images used by the application. + if ! [ -f ".env" ]; then echo -e "\e[31mERROR\e[0m Environment file not found: $(pwd)/.env" echo -e "\e[31mERROR\e[0m Please run script/docker-setup.sh first." @@ -14,12 +16,21 @@ if ! [ -d "$BENETECH_DATA_LOCATION" ] || [ -z "$BENETECH_RUNTIME" ] || [ -z "$BE exit 1 fi + if [ "$BENETECH_RUNTIME" = "GPU" ] && [ "$BENETECH_PREBUILT" = "NO" ]; then - sudo docker-compose up -d + set -x + sudo docker-compose rm -s -f + sudo docker-compose build --parallel --no-cache elif [ "$BENETECH_RUNTIME" = "CPU" ] && [ "$BENETECH_PREBUILT" = "NO" ]; then - sudo docker-compose -f docker-compose.yml -f docker-compose/build.cpu.yml up -d + set -x + sudo docker-compose rm -s -f + sudo docker-compose -f docker-compose.yml -f docker-compose/build.cpu.yml build elif [ "$BENETECH_RUNTIME" = "GPU" ] && [ "$BENETECH_PREBUILT" = "YES" ]; then - sudo docker-compose -f docker-compose.yml -f docker-compose/prebuilt.yml up -d + set -x + sudo docker-compose rm -s -f + sudo docker-compose -f docker-compose.yml -f docker-compose/prebuilt.yml pull elif [ "$BENETECH_RUNTIME" = "CPU" ] && [ "$BENETECH_PREBUILT" = "YES" ]; then - sudo docker-compose -f docker-compose.yml -f docker-compose/prebuilt.cpu.yml up -d + set -x + sudo docker-compose rm -s -f + sudo docker-compose -f docker-compose.yml -f docker-compose/prebuilt.cpu.yml pull fi diff --git a/scripts/lib/ask.choose.sh b/scripts/lib/ask.choose.sh new file mode 100644 index 00000000..51b703e1 --- /dev/null +++ b/scripts/lib/ask.choose.sh @@ -0,0 +1,116 @@ +#!/usr/bin/env bash +# This module provides a 'choose' function which allows +# users to choose from a set of options using arrow keys. +# You should source this module to make it available in +# your script. +# Based on: https://www.bughunter2k.de/blog/cursor-controlled-selectmenu-in-bash + + +# Get choice value. +# Args: +# $1: Choice in the form of value="Display text." +function choose.option-value() { + local entry=$1; + echo "$entry" | grep -Po "^[^=]+" +} + +# Get choice display text. +# Args: +# $1: Choice in the form of value="Display text." +function choose.option-text() { + local entry=$1; + echo "$entry" | grep -Po "(?<==).*$" +} + +# Print choices. +# Args: +# $1 (number): Index of currently selected choice. +# *: Any number of choices in the form of value="Display text". +function choose.print-options() { + local cur=$1; shift 1; + local entries=( "$@" ) + for entry in "${entries[@]}"; do + if [[ ${entries[$cur]} == "$entry" ]]; then + # Print green. See http://linuxcommand.org/lc3_adv_tput.php, "Text Effects" + tput setaf 2; echo ">$(choose.option-text "$entry")"; tput sgr0; + else + echo " $(choose.option-text "$entry")"; + fi + done +} + +# Erase printed choices. +# Args: +# $1 (number): Number of choices. +function choose.erase-options() { + local count=$1; + for _ in $(seq "$count"); do + # Move cursor one line up + # See http://linuxcommand.org/lc3_adv_tput.php, "Controlling The Cursor" + tput cuu1; + done + # Clear from the cursor to the end of the screen + # See http://linuxcommand.org/lc3_adv_tput.php, "Clearing The Screen" + tput ed; +} + +# Ask user to select from the list of options using arrow keys. +# Args: +# $1 (variable reference): Variable to write result to. +# *: Any number of choices in the form value="Display text" +# Example: +# local MODE; +# choose MODE prod="Use production mode" dev="Use development mode" +function choose() { + # Use function name as a var-name prefix + # to prevent circular name reference + # See https://stackoverflow.com/a/33777659 + # See http://mywiki.wooledge.org/BashFAQ/048#line-120 + local -n _choose_result=$1; shift 1 + local entries=( "$@" ) + local cur=0; + + choose.print-options "$cur" "${entries[@]}" + + while read -sN1 key; do + # Catch multi-char special key sequences + # See https://stackoverflow.com/a/11759139 + read -sN1 -t 0.0001 k1 + read -sN1 -t 0.0001 k2 + read -sN1 -t 0.0001 k3 + key+=${k1}${k2}${k3} + + # Enter or Space was pressed + if [ -z "$key" ]; then + # shellcheck disable=SC2034 + # Variable is passed by reference + _choose_result="$(choose.option-value "${entries[$cur]}")"; + return 0; + fi + + case "$key" in + # Arrow up or left: previous item: + $'\e[A'|$'\e0A'|$'\e[D'|$'\e0D') + ((cur > 0)) && ((cur--));; + + # Arrow down or right: next item: + $'\e[B'|$'\e0B'|$'\e[C'|$'\e0C') + ((cur < ${#entries[@]}-1)) && ((cur++));; + + # Home: first item + $'\e[1~'|$'\e0H'|$'\e[H') + cur=0;; + + # End: last item + $'\e[4~'|$'\e0F'|$'\e[F') + ((cur=${#entries[@]}-1));; + + # 'q' or carriage return: Quit + q|$'\e') + return 1;; + esac + + choose.erase-options "${#entries[@]}" + choose.print-options "$cur" "${entries[@]}" + done +} \ No newline at end of file diff --git a/scripts/lib/ask.confirm.sh b/scripts/lib/ask.confirm.sh new file mode 100644 index 00000000..52f9e37f --- /dev/null +++ b/scripts/lib/ask.confirm.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash +# This module provides a 'confirm' function which allows +# users to confirm or reject the statement. You should +# source this module to make it available in your script. + +# Ask user for confirmation and save result to the variable. +# Args: +# $1 (variable reference): Variable name to save result to (YES or NO). +# $2 (string): Question to ask. +# $3 (optional YES|NO): Default answer (used on empty user input). +function confirm() { + # Use function name as a var-name prefix + # to prevent circular name reference + # See https://stackoverflow.com/a/33777659 + # See http://mywiki.wooledge.org/BashFAQ/048#line-120 + local -n _confirm_result=$1; + local confirm_text=$2; + local default=${3:-YES} + local answer; + + local answer_pattern; + if [ "$default" = "YES" ]; then + answer_pattern="[Y/n]"; + else + answer_pattern="[y/N]"; + fi + + while true; do + tput setaf 6; echo -n "$confirm_text $answer_pattern: "; tput sgr0; + read -r answer; + # shellcheck disable=SC2015 + # Disable false-positive on condition expression. + if [ -z "$answer" ] && [ "$default" = "YES" ] || [[ "$answer" =~ [Yy] ]]; then + # shellcheck disable=SC2034 + # Variable is passed by reference + _confirm_result=YES; + return 0; + elif [ -z "$answer" ] && [ "$default" = "NO" ] || [[ "$answer" =~ [Nn] ]]; then + # shellcheck disable=SC2034 + # Variable is passed by reference + _confirm_result=NO; + return 0; + else + tput setaf 1; echo -n "ERROR"; tput sgr0; echo ": Cannot recognize the answer '$answer'. Please answer 'y' or 'n'" + fi + done +} diff --git a/scripts/lib/ask.path.sh b/scripts/lib/ask.path.sh new file mode 100644 index 00000000..915f6383 --- /dev/null +++ b/scripts/lib/ask.path.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash +# This module provides a 'read-file-path' and 'read-dir-path' functions +# to ask users for existing file and directory path correspondingly. +# You should source this module to make it available in your script. + +# Ask user to provide an existing directory path. +# Args: +# $1 (variable reference): Variable to write result to. +# $2 (string): Question to ask. +function read-dir-path() { + # Use function name as a var-name prefix + # to prevent circular name reference + # See https://stackoverflow.com/a/33777659 + # See http://mywiki.wooledge.org/BashFAQ/048#line-120 + local -n _read_dir_path_result=$1; + local question=$2; + local answer; + + while true; do + tput setaf 6; echo -n "$question: "; tput sgr0; + read -e -r answer; + if [ -d "$answer" ]; then + # shellcheck disable=SC2034 + # Variable is passed by reference + _read_dir_path_result=$answer; + return 0; + else + tput setaf 1; echo -n "ERROR"; tput sgr0; echo ": No such directory: '$answer'" + fi + done +} + +# Ask user to provide an existing file path. +# Args: +# $1 (variable reference): Variable to write result to. +# $2 (string): Question to ask. +function read-file-path() { + # Use function name as a var-name prefix + # to prevent circular name reference + # See https://stackoverflow.com/a/33777659 + # See http://mywiki.wooledge.org/BashFAQ/048#line-120 + local -n _read_file_path_result=$1; + local question=$2; + local answer; + + while true; do + tput setaf 6; echo -n "$question: "; tput sgr0; + read -e -r answer; + if [ -f "$answer" ]; then + # shellcheck disable=SC2034 + # Variable is passed by reference + _read_file_path_result=$answer; + return 0; + else + tput setaf 1; echo -n "ERROR"; tput sgr0; echo ": No such file: '$answer'" + fi + done +} diff --git a/scripts/run-tests.sh b/scripts/run-tests.sh index 12b53be7..0a57d1a3 100644 --- a/scripts/run-tests.sh +++ b/scripts/run-tests.sh @@ -1,3 +1,5 @@ +#!/usr/bin/env bash + echo "Running unit tests" python -m pytest tests/general_tests.py diff --git a/server/server/api/__init__.py b/server/server/api/__init__.py index 8a2da8b5..87a1bfdc 100644 --- a/server/server/api/__init__.py +++ b/server/server/api/__init__.py @@ -1,2 +1,8 @@ +# Disable flake8 issue F401 as we need these imports to configure api +# but not going to re-export them from the __init__ +from . import scenes, matches, files, errors, videos, cluster # noqa: F401 from .blueprint import api -from . import scenes, matches, files, errors, videos + +# Explicitly reexport api +# See discussion in https://bugs.launchpad.net/pyflakes/+bug/1178905 +__all__ = ["api"] diff --git a/server/server/api/cluster.py b/server/server/api/cluster.py new file mode 100644 index 00000000..6b27586a --- /dev/null +++ b/server/server/api/cluster.py @@ -0,0 +1,44 @@ +from http import HTTPStatus + +from flask import jsonify, request, abort + +from db.access.matches import FileMatchesRequest, MatchesDAO +from db.schema import Files +from .blueprint import api +from .helpers import parse_positive_int, Fields, parse_positive_float, parse_fields +from ..model import Transform, database + +# Optional file fields +FILE_FIELDS = Fields(Files.exif, Files.signature, Files.meta, Files.scenes) + + +def parse_params(file): + """Parse request parameters.""" + req = FileMatchesRequest(file=file) + req.limit = parse_positive_int(request.args, 'limit', 20) + req.offset = parse_positive_int(request.args, 'offset', 0) + req.hops = parse_positive_int(request.args, 'hops', 1) + req.min_distance = parse_positive_float(request.args, 'min_distance', 0.0) + req.max_distance = parse_positive_float(request.args, 'max_distance', 1.0) + req.preload = parse_fields(request.args, 'include', FILE_FIELDS) + return req + + +@api.route('/files//cluster', methods=['GET']) +def fetch_file_cluster(file_id): + file = database.session.query(Files).get(file_id) + + # Handle file not found + if file is None: + abort(HTTPStatus.NOT_FOUND.value, f"File id not found: {file_id}") + + req = parse_params(file) + resp = MatchesDAO.list_file_matches(req, database.session) + + include_flags = {field.key: True for field in req.preload} + return jsonify({ + 'files': [Transform.file_dict(file, **include_flags) for file in resp.files], + 'matches': [Transform.match_dict(match) for match in resp.matches], + 'total': resp.total, + 'hops': req.hops, + }) diff --git a/server/server/api/files.py b/server/server/api/files.py index 46e096e2..8f233fdc 100644 --- a/server/server/api/files.py +++ b/server/server/api/files.py @@ -1,283 +1,77 @@ -from datetime import datetime +import os from http import HTTPStatus from os.path import dirname, basename -from typing import List, Dict -from dataclasses import dataclass, field from flask import jsonify, request, abort, send_from_directory -from sqlalchemy import or_, func, literal_column -from sqlalchemy.orm import aliased -from db.schema import Files, Exif, VideoMetadata, Matches, Signature, Scene +from db.access.files import ListFilesRequest, FileMatchFilter, FileSort, FilesDAO +from db.schema import Files from thumbnail.ffmpeg import extract_frame_tmp from .blueprint import api -from .helpers import file_matches, parse_boolean, parse_positive_int, parse_date, parse_enum, get_config, has_matches, \ - get_thumbnails, resolve_video_file_path +from .helpers import parse_boolean, parse_positive_int, parse_date, parse_enum, get_thumbnails, \ + resolve_video_file_path, Fields, parse_fields, parse_seq, get_config from ..model import database, Transform +# Optional file fields to be loaded +FILE_FIELDS = Fields(Files.exif, Files.meta, Files.signature, Files.scenes) -class MatchCategory: - """Enum for match distance criteria.""" - ALL = "all" - RELATED = "related" - DUPLICATES = "duplicates" - UNIQUE = "unique" - values = {ALL, RELATED, DUPLICATES, UNIQUE} - - -class Sort: - """Enum for result ordering.""" - DATE = "date" - LENGTH = "length" - RELATED = "related" - DUPLICATES = "duplicates" - - values = {DATE, LENGTH, RELATED, DUPLICATES} - - -@dataclass -class Counts: - """Count of files by matches.""" - total: int = 0 - related: int = 0 - duplicates: int = 0 - unique: int = 0 - - @staticmethod - def get(query, related_distance, duplicate_distance): - """Count queried files by matches.""" - total = query.count() - duplicates = query.filter(has_matches(duplicate_distance)).count() - related = query.filter(has_matches(related_distance)).count() - unique = total - related - return Counts(total=total, related=related, duplicates=duplicates, unique=unique) - - -@dataclass -class Arguments: - """Parsed request arguments.""" - - # Request parameters: - limit: int = 20 - offset: int = 0 - path_query: str = None - extensions: List[str] = field(default_factory=list) - exif: bool = None - audio: bool = None - min_length: int = None - max_length: int = None - date_from: datetime = None - date_to: datetime = None - include: Dict[str, bool] = field(default_factory=dict) - match_category: str = MatchCategory.ALL - sort: str = None - - # Query options for additional fields that could be included on demand - _ADDITIONAL_FIELDS = { - "meta": (Files.meta, VideoMetadata), - "signature": (Files.signature, Signature), - "exif": (Files.exif, Exif), - "scenes": (Files.scenes, Scene), - } - - # Format in which Dates are currently stored in exif table. - _EXIF_DATE_FORMAT = " UTC %Y-%m-%d 00" - - # Label for related entities count (matches, scenes, etc.) - _LABEL_COUNT = "hit_count" - _countable_match = aliased(Matches) - - @staticmethod - def parse_extensions(): - """File extensions to search""" - extensions = request.args.get('extensions', '', type=str) - extensions = [ext.strip() for ext in extensions.split(',')] - extensions = [ext for ext in extensions if len(ext) > 0] - return extensions - - @staticmethod - def parse_include(): - """Additional fields to include""" - fields = request.args.get('include', '', type=str) - fields = set(field.strip() for field in fields.split(',')) - include = {field: (field in fields) for field in Arguments._ADDITIONAL_FIELDS} - return include - - @staticmethod - def parse(): - """Parse and validate request arguments.""" - result = Arguments() - result.limit = parse_positive_int(request.args, 'limit', 20) - result.offset = parse_positive_int(request.args, 'offset', 0) - result.path_query = request.args.get('path', '', type=str).strip() - result.exif = parse_boolean(request.args, 'exif') - result.audio = parse_boolean(request.args, 'audio') - result.min_length = parse_positive_int(request.args, 'min_length') - result.max_length = parse_positive_int(request.args, 'max_length') - result.include = Arguments.parse_include() - result.extensions = Arguments.parse_extensions() - result.date_from = parse_date(request.args, "date_from") - result.date_to = parse_date(request.args, "date_to") - result.match_category = parse_enum(request.args, "matches", - values=MatchCategory.values, - default=MatchCategory.ALL) - result.sort = parse_enum(request.args, "sort", values=Sort.values, default=None) - return result - - def sortable_attributes(self): - """Get additional sortable attributes.""" - values = [] - if self.sort == Sort.RELATED or self.sort == Sort.DUPLICATES: - match_count = func.count(self._countable_match.id).label(self._LABEL_COUNT) - values.append(match_count) - return values - - def sort_items(self, query, related_distance, duplicate_distance): - """Apply ordering.""" - if self.sort == Sort.RELATED or self.sort == Sort.DUPLICATES: - match = self._countable_match - threshold = related_distance if self.sort == Sort.RELATED else duplicate_distance - query = query.outerjoin(self._countable_match, - ((match.query_video_file_id == Files.id) | - (match.match_video_file_id == Files.id)) & (match.distance < threshold)) - return query.group_by(Files.id).order_by(literal_column(self._LABEL_COUNT).desc(), Files.id.asc()) - elif self.sort == Sort.LENGTH: - meta = aliased(VideoMetadata) - return query.outerjoin(meta).order_by(meta.video_length.desc(), Files.id.asc()) - elif self.sort == Sort.DATE: - exif = aliased(Exif) - return query.outerjoin(exif).order_by(exif.General_Encoded_Date.desc(), Files.id.asc()) - return query - - def filter_path(self, query): - """Filter by file name.""" - if self.path_query: - return query.filter(Files.file_path.ilike(f"%{self.path_query}%")) - return query - - def filter_extensions(self, query): - """Filter by file extension.""" - if self.extensions: - conditions = (Files.file_path.ilike(f"%.{ext}") for ext in self.extensions) - return query.filter(or_(*conditions)) - return query - - def filter_exif(self, query): - """Filter by EXIF data presence.""" - if self.exif is not None: - has_exif = Files.exif.has() - if self.exif: - return query.filter(has_exif) - else: - return query.filter(~has_exif) - return query - - def filter_audio(self, query): - """Filter by audio presence.""" - if self.audio is not None: - has_audio = Files.exif.has(Exif.Audio_Duration > 0) - if self.audio: - return query.filter(has_audio) - else: - return query.filter(~has_audio) - return query - - def filter_date(self, query): - """Filter by creation date.""" - if self.date_from is not None: - query = query.filter( - Files.exif.has(Exif.General_Encoded_Date >= self.date_from.strftime(self._EXIF_DATE_FORMAT))) - - if self.date_to is not None: - query = query.filter( - Files.exif.has(Exif.General_Encoded_Date <= self.date_to.strftime(self._EXIF_DATE_FORMAT))) - - return query - - def filter_length(self, query): - """Filter by length.""" - if self.min_length is not None or self.max_length is not None: - query = query.join(Files.meta) - - if self.min_length is not None: - query = query.filter(VideoMetadata.video_length >= self.min_length) - - if self.max_length is not None: - query = query.filter(VideoMetadata.video_length <= self.max_length) - - return query - - def filter_by_matches(self, query, related_distance, duplicate_distance): - """Filter by presence of similar files.""" - if self.match_category == MatchCategory.DUPLICATES: - return query.filter(has_matches(duplicate_distance)) - elif self.match_category == MatchCategory.RELATED: - return query.filter(has_matches(related_distance)) - elif self.match_category == MatchCategory.UNIQUE: - return query.filter(~has_matches(related_distance)) - # else MatchCategory.ALL - return query - - def filter_by_file_attributes(self, query): - """Apply filters related to the properties of video file itself.""" - query = self.filter_path(query) - query = self.filter_extensions(query) - query = self.filter_exif(query) - query = self.filter_audio(query) - query = self.filter_date(query) - query = self.filter_length(query) - return query +def parse_params(): + """Parse and validate request arguments.""" + config = get_config() + result = ListFilesRequest() + result.limit = parse_positive_int(request.args, 'limit', 20) + result.offset = parse_positive_int(request.args, 'offset', 0) + result.path_query = request.args.get('path', '', type=str).strip() + result.exif = parse_boolean(request.args, 'exif') + result.audio = parse_boolean(request.args, 'audio') + result.min_length = parse_positive_int(request.args, 'min_length') + result.max_length = parse_positive_int(request.args, 'max_length') + result.preload = parse_fields(request.args, "include", FILE_FIELDS) + result.extensions = parse_seq(request.args, "extensions") + result.date_from = parse_date(request.args, "date_from") + result.date_to = parse_date(request.args, "date_to") + result.match_filter = parse_enum(request.args, "matches", + values=FileMatchFilter.values, + default=FileMatchFilter.ALL) + result.related_distance = config.related_distance + result.duplicate_distance = config.duplicate_distance + result.sort = parse_enum(request.args, "sort", values=FileSort.values, default=None) + return result @api.route('/files/', methods=['GET']) def list_files(): - args = Arguments.parse() + req = parse_params() - # Count files - config = get_config() - query = database.session.query(Files) - query = args.filter_by_file_attributes(query) - counts = Counts.get(query, config.related_distance, config.duplicate_distance) - - # Select files - sortable_attributes = args.sortable_attributes() - query = database.session.query(Files, *sortable_attributes) - query = args.filter_by_file_attributes(query) - query = args.filter_by_matches(query, config.related_distance, config.duplicate_distance) - query = args.sort_items(query, config.related_distance, config.duplicate_distance) - - # Retrieve slice - query = query.offset(args.offset).limit(args.limit) - items = query.all() - - # Get files from result set if there are additional attributes. - if len(sortable_attributes) > 0: - items = [item[0] for item in items] + results = FilesDAO.list_files(req, database.session) + include_flags = {field.key: True for field in req.preload} return jsonify({ - 'items': [Transform.file_dict(item, **args.include) for item in items], - 'total': counts.total, - 'duplicates': counts.duplicates, - 'related': counts.related, - 'unique': counts.unique + 'items': [Transform.file_dict(item, **include_flags) for item in results.items], + 'total': results.counts.total, + 'duplicates': results.counts.duplicates, + 'related': results.counts.related, + 'unique': results.counts.unique }) @api.route('/files/', methods=['GET']) def get_file(file_id): - include = Arguments.parse_include() + extra_fields = parse_fields(request.args, "include", FILE_FIELDS) # Fetch file from database query = database.session.query(Files) - file = query.filter(Files.id == file_id).first() + query = FILE_FIELDS.preload(query, extra_fields) + file = query.get(file_id) # Handle file not found if file is None: abort(HTTPStatus.NOT_FOUND.value, f"File id not found: {file_id}") - data = Transform.file_dict(file, **include) - data["matches_count"] = file_matches(file_id).count() + include_flags = {field.key: True for field in extra_fields} + data = Transform.file_dict(file, **include_flags) + data["matches_count"] = FilesDAO.file_matches(file_id, database.session).count() return jsonify(data) @@ -298,6 +92,8 @@ def get_thumbnail(file_id): thumbnail = thumbnails_cache.get(file.file_path, file.sha256, position=time) if thumbnail is None: video_path = resolve_video_file_path(file.file_path) + if not os.path.isfile(video_path): + abort(HTTPStatus.NOT_FOUND.value, f"Video file is missing: {file.file_path}") thumbnail = extract_frame_tmp(video_path, position=time) if thumbnail is None: abort(HTTPStatus.NOT_FOUND.value, f"Timestamp exceeds video length: {time}") diff --git a/server/server/api/helpers.py b/server/server/api/helpers.py index 692f2185..428a3ed1 100644 --- a/server/server/api/helpers.py +++ b/server/server/api/helpers.py @@ -5,21 +5,10 @@ from http import HTTPStatus from flask import current_app, abort -from sqlalchemy import or_ from sqlalchemy.orm import joinedload -from db.schema import Matches, Files from thumbnail.cache import ThumbnailCache from ..config import Config -from ..model import database - - -def file_matches(file_id): - """Query for all file matches.""" - return database.session.query(Matches).filter(or_( - Matches.query_video_file_id == file_id, - Matches.match_video_file_id == file_id - )) def get_config() -> Config: @@ -55,6 +44,14 @@ def parse_boolean(args, name): abort(HTTPStatus.BAD_REQUEST.value, f"{name} has invalid format (expected {_TRUTHY} or {_FALSY})") +def parse_seq(args, name): + """Parse sequence of comma-separated values.""" + seq = args.get(name, '', type=str) + items = [item.strip() for item in seq.split(',')] + items = [item for item in items if len(item) > 0] + return items + + def parse_positive_int(args, name, default=None): """Parse positive integer parameter.""" value = args.get(name, default=default, type=int) @@ -63,6 +60,14 @@ def parse_positive_int(args, name, default=None): return value +def parse_positive_float(args, name, default=None): + """Parse positive float parameter.""" + value = args.get(name, default=default, type=float) + if value is not default and value < 0: + abort(HTTPStatus.BAD_REQUEST.value, f"{name} cannot be negative") + return value + + DATE_PATTERN = re.compile(r'^\d{4}-\d{2}-\d{2}$') @@ -100,11 +105,10 @@ def parse_enum_seq(args, name, values, default=None): return result -def has_matches(threshold): - """Create a filter criteria to check if there is a match - with distance lesser or equal to the given threshold.""" - return or_(Files.source_matches.any(Matches.distance <= threshold), - Files.target_matches.any(Matches.distance <= threshold)) +def parse_fields(args, name, fields): + """Parse requested fields list.""" + field_names = parse_enum_seq(args, name, values=fields.names, default=()) + return {fields.get(name) for name in field_names} class Fields: @@ -124,10 +128,14 @@ def names(self): """Set of field names.""" return {field.key for field in self.fields} - def preload(self, query, names, *path): + def get(self, name): + """Get field by name.""" + return self._index[name] + + @staticmethod + def preload(query, fields, *path): """Enable eager loading for enumerated fields.""" - for name in names: - field = self._index[name] + for field in fields: full_path = path + (field,) query = query.options(joinedload(*full_path)) return query diff --git a/server/server/api/matches.py b/server/server/api/matches.py index 03985c37..a8fc2d3e 100644 --- a/server/server/api/matches.py +++ b/server/server/api/matches.py @@ -1,10 +1,13 @@ -from flask import jsonify, request +from http import HTTPStatus + +from flask import jsonify, request, abort from sqlalchemy.orm import joinedload +from db.access.files import FilesDAO from db.schema import Matches, Files from .blueprint import api -from .helpers import file_matches, parse_positive_int, Fields, parse_enum_seq -from ..model import Transform +from .helpers import parse_positive_int, Fields, parse_fields +from ..model import Transform, database # Optional file fields FILE_FIELDS = Fields(Files.exif, Files.signature, Files.meta, Files.scenes) @@ -14,9 +17,15 @@ def list_file_matches(file_id): limit = parse_positive_int(request.args, 'limit', 20) offset = parse_positive_int(request.args, 'offset', 0) - include_fields = parse_enum_seq(request.args, 'include', values=FILE_FIELDS.names, default=()) + include_fields = parse_fields(request.args, 'include', FILE_FIELDS) + + file = database.session.query(Files).get(file_id) + + # Handle file not found + if file is None: + abort(HTTPStatus.NOT_FOUND.value, f"File id not found: {file_id}") - query = file_matches(file_id).options( + query = FilesDAO.file_matches(file_id, database.session).options( joinedload(Matches.match_video_file), joinedload(Matches.query_video_file) ) @@ -29,8 +38,9 @@ def list_file_matches(file_id): total = query.count() items = query.offset(offset).limit(limit).all() - include_flags = {field: True for field in include_fields} + include_flags = {field.key: True for field in include_fields} return jsonify({ 'items': [Transform.file_match_dict(item, file_id, **include_flags) for item in items], - 'total': total + 'total': total, + 'offset': offset, }) diff --git a/server/server/api/scenes.py b/server/server/api/scenes.py index eca3468e..40a9bbf4 100644 --- a/server/server/api/scenes.py +++ b/server/server/api/scenes.py @@ -1,7 +1,5 @@ -# import sys -# sys.path.append('..') +from flask import jsonify, request, url_for -from flask import jsonify, request, g, url_for, current_app from db.schema import Scene from .blueprint import api diff --git a/server/server/api/videos.py b/server/server/api/videos.py index 84612fcf..a0b21977 100644 --- a/server/server/api/videos.py +++ b/server/server/api/videos.py @@ -1,3 +1,4 @@ +import os from http import HTTPStatus from os.path import dirname, basename @@ -5,13 +6,12 @@ from db.schema import Files from .blueprint import api -from .helpers import get_config, resolve_video_file_path +from .helpers import resolve_video_file_path from ..model import database @api.route('/files//watch') def watch_video(file_id): - config = get_config() file = database.session.query(Files).filter(Files.id == file_id).first() # Handle file not found @@ -19,4 +19,7 @@ def watch_video(file_id): abort(HTTPStatus.NOT_FOUND.value, f"File id not found: {file_id}") path = resolve_video_file_path(file.file_path) + if not os.path.isfile(path): + abort(HTTPStatus.NOT_FOUND.value, f"Video file is missing: {file.file_path}") + return send_from_directory(dirname(path), basename(path)) diff --git a/server/server/model.py b/server/server/model.py index 527cad31..c516c9f5 100644 --- a/server/server/model.py +++ b/server/server/model.py @@ -18,6 +18,8 @@ def prepare_serialization(data): """Perform a shallow serialization of field values if needed.""" + if data is None: + return data for key, value in data.items(): if type(value) in _SERIALIZE: serialize = _SERIALIZE[type(value)] @@ -48,6 +50,7 @@ class Transform: @staticmethod @serializable def file_dict(file, *, meta=False, signature=False, scenes=False, exif=False): + """Get plain data representation for single file.""" data = { "id": file.id, "file_path": file.file_path, @@ -56,7 +59,7 @@ def file_dict(file, *, meta=False, signature=False, scenes=False, exif=False): } if meta: data["meta"] = Transform.metadata_dict(file.meta) - if signature: + if signature and file.signature is not None: data["signature"] = file.signature.signature if scenes: data["scenes"] = [Transform.scene_dict(scene, file=False) for scene in file.scenes] @@ -67,6 +70,9 @@ def file_dict(file, *, meta=False, signature=False, scenes=False, exif=False): @staticmethod @serializable def metadata_dict(meta): + """Get plain data representation for VideoMetadata.""" + if meta is None: + return None fields = entity_fields(meta) fields -= {"id", "file_id", "file"} return {field: getattr(meta, field) for field in fields} @@ -74,6 +80,7 @@ def metadata_dict(meta): @staticmethod @serializable def scene_dict(scene, file=False): + """Get plain data representation for single Scene.""" data = { "id": scene.id, "duration": scene.duration, @@ -86,6 +93,9 @@ def scene_dict(scene, file=False): @staticmethod @serializable def exif_dict(exif): + """Get plain data representation for Exif.""" + if exif is None: + return None fields = entity_fields(exif) fields -= {"id", "file_id", "file", "Json_full_exif"} return {field: getattr(exif, field) for field in fields} @@ -93,11 +103,24 @@ def exif_dict(exif): @staticmethod @serializable def file_match_dict(match, file_id, *, meta=False, signature=False, scenes=False, exif=False): + """Get plain data representation for single file match.""" if match.query_video_file.id != file_id: matched = match.query_video_file else: matched = match.match_video_file return { + "id": match.id, "distance": match.distance, "file": Transform.file_dict(matched, meta=meta, signature=signature, scenes=scenes, exif=exif) } + + @staticmethod + @serializable + def match_dict(match): + """Get plain data representation for Match.""" + return { + "id": match.id, + "distance": match.distance, + "source": match.query_video_file_id, + "target": match.match_video_file_id + } diff --git a/server/tests/db/access/test_matches_dao.py b/server/tests/db/access/test_matches_dao.py new file mode 100644 index 00000000..fa4cf017 --- /dev/null +++ b/server/tests/db/access/test_matches_dao.py @@ -0,0 +1,214 @@ +import itertools +from uuid import uuid4 as uuid + +import pytest + +from db import Database +from db.access.matches import MatchesDAO, FileMatchesRequest +from db.schema import Files, Exif, VideoMetadata, Scene, Matches + + +def make_file(prefix="", length=42, ext="flv", scenes=((0, 1), (1, 2))): + """Create unique file.""" + path = f"{prefix}some/path/{uuid()}.{ext}" + sha256 = f"hash-of-{path}" + return Files(file_path=path, sha256=sha256, + exif=Exif(General_FileExtension=ext, General_Duration=length * 1000), + meta=VideoMetadata(), + scenes=[Scene(start_time=start, duration=duration) for start, duration in scenes]) + + +def make_files(count, prefix="", length=42, ext="flv", scenes=((0, 1), (1, 2))): + """Create a collection of unique files.""" + return [ + make_file(prefix=prefix, length=length, ext=ext, scenes=scenes) for _ in range(count) + ] + + +def link(source, target, distance=0.5): + """Create a match between files.""" + return Matches(query_video_file=source, match_video_file=target, distance=distance) + + +@pytest.fixture +def database(): + """Create test database.""" + in_memory_database = Database.in_memory(echo=False) + in_memory_database.create_tables() + return in_memory_database + + +def pop(queue, max_count): + """Pop multiple items from queue.""" + result = [] + for _ in range(max_count): + if len(queue) == 0: + return result + result.append(queue.pop()) + return result + + +def chunks(iterable, size=100): + """Split iterable into equal-sized chunks.""" + iterator = iter(iterable) + chunk = list(itertools.islice(iterator, size)) + while chunk: + yield chunk + chunk = list(itertools.islice(iterator, size)) + + +def assert_same(actual, expected): + """Check result id set.""" + expected_ids = {entity.id for entity in expected} + actual_ids = {entity.id for entity in actual} + assert actual_ids == expected_ids + + +def test_list_file_matches_hops(database: Database): + with database.session_scope(expunge=True) as session: + # Create files + source = make_file() + path_a = make_files(4) + path_b = make_files(4) + session.add(source) + session.add_all(path_a) + session.add_all(path_b) + + # Link files + a1, a2, a3, a4 = path_a + b1, b2, b3, b4 = path_b + all_links = [ + link(source, a1), link(a2, a1), link(a2, a3), link(a4, a3), + link(b1, source), link(b1, b2), link(b2, b3), link(b4, b3), + ] + session.add_all(all_links) + + with database.session_scope() as session: + req = FileMatchesRequest(file=source, hops=0, limit=len(all_links)) + resp = MatchesDAO.list_file_matches(req, session) + assert_same(resp.files, expected=[source]) + + with database.session_scope() as session: + req = FileMatchesRequest(file=source, hops=1, limit=len(all_links)) + resp = MatchesDAO.list_file_matches(req, session) + assert_same(resp.files, expected=[source, a1, b1]) + + with database.session_scope() as session: + req = FileMatchesRequest(file=source, hops=2, limit=len(all_links)) + resp = MatchesDAO.list_file_matches(req, session) + assert_same(resp.files, expected=[source, a1, a2, b1, b2]) + + with database.session_scope() as session: + req = FileMatchesRequest(file=source, hops=3, limit=len(all_links)) + resp = MatchesDAO.list_file_matches(req, session) + assert_same(resp.files, expected=[source, a1, a2, a3, b1, b2, b3]) + + with database.session_scope(expunge=True) as session: + req = FileMatchesRequest(file=source, hops=4, limit=len(all_links)) + resp = MatchesDAO.list_file_matches(req, session) + assert_same(resp.files, expected=[source, a1, a2, a3, a4, b1, b2, b3, b4]) + + +def test_list_file_matches_filter_distance(database: Database): + short, long = 0.1, 0.9 + with database.session_scope(expunge=True) as session: + # Create files + source = make_file() + path_a = make_files(4) + path_b = make_files(4) + session.add(source) + session.add_all(path_a) + session.add_all(path_b) + + # Link files + a1, a2, a3, a4 = path_a + b1, b2, b3, b4 = path_b + session.add_all([ + link(source, a1, short), link(a2, a1, short), link(a2, a3, short), link(a4, a3, short), + link(b1, source, long), link(b1, b2, long), link(b2, b3, long), link(b4, b3, long), + ]) + + # Query all + with database.session_scope(expunge=True) as session: + req = FileMatchesRequest(file=source, hops=4) + resp = MatchesDAO.list_file_matches(req, session) + assert_same(resp.files, expected=[source, a1, a2, a3, a4, b1, b2, b3, b4]) + + # Query short + with database.session_scope(expunge=True) as session: + req = FileMatchesRequest(file=source, hops=4, max_distance=short) + resp = MatchesDAO.list_file_matches(req, session) + assert_same(resp.files, expected=[source, a1, a2, a3, a4]) + + # Query long + with database.session_scope(expunge=True) as session: + req = FileMatchesRequest(file=source, hops=4, min_distance=long) + resp = MatchesDAO.list_file_matches(req, session) + assert_same(resp.files, expected=[source, b1, b2, b3, b4]) + + +def test_list_file_matches_filter_cycles(database: Database): + hops = 100 + with database.session_scope(expunge=True) as session: + source = make_file() + linked = make_files(2) + prev1, prev2 = linked + links = [link(source, prev1), link(source, prev2)] + + for _ in range(hops - 1): + cur1, cur2 = make_files(2) + links.extend([ + link(prev1, cur1), link(prev1, cur2), + link(cur2, prev2), link(cur1, prev2)]) + linked.append(cur1) + linked.append(cur2) + prev1, prev2 = cur1, cur2 + session.add_all(links) + + # Query all + with database.session_scope(expunge=True) as session: + req = FileMatchesRequest(file=source, hops=hops, limit=len(links)) + resp = MatchesDAO.list_file_matches(req, session) + assert_same(resp.files, expected=[source] + linked) + + # Query half + with database.session_scope(expunge=True) as session: + half = int(hops / 2) + req = FileMatchesRequest(file=source, hops=half, limit=len(links)) + resp = MatchesDAO.list_file_matches(req, session) + assert_same(resp.files, expected=[source] + linked[:2 * half]) + + # Create a short cut from the source to the most distant items + with database.session_scope(expunge=True) as session: + session.add_all([link(source, cur1), link(source, cur2)]) + + # Query half hops must return all files now + with database.session_scope(expunge=True) as session: + half = int(hops / 2) + req = FileMatchesRequest(file=source, hops=half, limit=len(links)) + resp = MatchesDAO.list_file_matches(req, session) + assert_same(resp.files, expected=[source] + linked) + + +def test_list_file_matches_links(database: Database): + with database.session_scope(expunge=True) as session: + source = make_file() + a, b, c = make_files(3) + close_links = [link(source, a), link(source, b), link(a, b)] + far_links = [link(a, c), link(b, c)] + session.add_all(close_links + far_links) + total_links = len(far_links) + len(close_links) + + # Query close links + with database.session_scope(expunge=True) as session: + req = FileMatchesRequest(file=source, hops=1, limit=total_links) + resp = MatchesDAO.list_file_matches(req, session) + assert_same(resp.files, expected=[source, a, b]) + assert_same(resp.matches, expected=close_links) + + # Query all links + with database.session_scope(expunge=True) as session: + req = FileMatchesRequest(file=source, hops=2, limit=total_links) + resp = MatchesDAO.list_file_matches(req, session) + assert_same(resp.files, expected=[source, a, b, c]) + assert_same(resp.matches, expected=close_links + far_links) diff --git a/server/tests/server/test_api.py b/server/tests/server/test_api.py index 5e94cfaa..0355916b 100644 --- a/server/tests/server/test_api.py +++ b/server/tests/server/test_api.py @@ -8,8 +8,8 @@ import pytest +from db.access.files import FileMatchFilter, FileSort from db.schema import Files, Base, Exif, VideoMetadata, Scene, Matches -from server.api.files import MatchCategory, Sort from server.config import Config from server.main import create_application from server.model import database @@ -88,6 +88,30 @@ def assert_files(resp, expected, total=None, related=None, duplicates=None, uniq assert_json_response(resp, expected_shape) +def matched_files(matches): + """Get files of the given matches.""" + files = set() + for match in matches: + files.add(match.query_video_file) + files.add(match.match_video_file) + return files + + +def refresh(session, *entities): + """Refresh entities from the current session.""" + if not entities: + return [] + return [session.query(entity.__class__).get(entity.id) for entity in entities] + + +def assert_same(actual, expected): + """Assert actual payload items refers to expected entities.""" + actual_ids = {item["id"] for item in actual} + expected_ids = {entity.id for entity in expected} + assert actual_ids == expected_ids + assert len(actual) == len(expected) + + def make_file(prefix="", length=42, ext="flv", audio=True, date=datetime.date(2000, 1, 1), scenes=((0, 1), (1, 2))): """Create unique file.""" @@ -95,8 +119,8 @@ def make_file(prefix="", length=42, ext="flv", audio=True, date=datetime.date(20 sha256 = f"hash-of-{path}" return Files(file_path=path, sha256=sha256, exif=Exif(General_FileExtension=ext, Audio_Duration=float(audio), - General_Encoded_Date=backend_date(date)), - meta=VideoMetadata(video_length=length), + General_Encoded_Date=date, General_Duration=length), + meta=VideoMetadata(), scenes=[Scene(start_time=start, duration=duration) for start, duration in scenes]) @@ -108,11 +132,6 @@ def make_files(count, prefix="", length=42, ext="flv", audio=True, date=datetime ] -def backend_date(date): - """Convert date to format utilized in the backend.""" - return date.strftime(" UTC %Y-%m-%d 00") - - def param_date(date): """Convert date to REST API parameter format.""" return date.strftime("%Y-%m-%d") @@ -207,15 +226,15 @@ def test_get_file(client, app): assert {"scenes", "meta", "exif"}.isdisjoint(json_payload(resp).keys()) # Include some fields - resp = client.get(f"/api/v1/files/{file.id}?include=meta,scenes") + resp = client.get(f"/api/v1/files/{file.id}?include=exif,scenes") assert_json_response(resp, { "id": file.id, "file_path": file.file_path, "sha256": file.sha256, - "meta": {"video_length": file.meta.video_length}, + "exif": {"General_Duration": file.exif.General_Duration}, "scenes": [{"duration": scene.duration, "start_time": scene.start_time} for scene in file.scenes] }) - assert "exif" not in json_payload(resp) + assert "meta" not in json_payload(resp) def test_list_files_basic(client, app): @@ -286,15 +305,15 @@ def test_list_files_include(client, app): ) # With scenes and meta included - resp = client.get(f"/api/v1/files/?limit={len(files)}&include=scenes,meta") + resp = client.get(f"/api/v1/files/?limit={len(files)}&include=scenes,exif") assert len(items(resp)) == len(files) assert all( - "exif" not in file for file in items(resp) + "meta" not in file for file in items(resp) ) assert all( has_shape(file, { "scenes": [expected_scene], - "meta": {"video_length": expected_length} + "exif": {"General_Duration": expected_length} }) for file in items(resp) ) @@ -455,20 +474,20 @@ def test_list_files_filter_matches(client, app, config): resp = client.get(f"/api/v1/files/?limit={len(all_files)}") assert_files(resp, expected=all_files, total=len(all_files), related=len(related), duplicates=len(duplicates)) - # Get explicitly - resp = client.get(f"/api/v1/files/?matches={MatchCategory.ALL}&limit={len(all_files)}") + # Get all explicitly + resp = client.get(f"/api/v1/files/?matches={FileMatchFilter.ALL}&limit={len(all_files)}") assert_files(resp, expected=all_files, total=len(all_files), related=len(related), duplicates=len(duplicates)) # Get unique - resp = client.get(f"/api/v1/files/?matches={MatchCategory.UNIQUE}&limit={len(all_files)}") + resp = client.get(f"/api/v1/files/?matches={FileMatchFilter.UNIQUE}&limit={len(all_files)}") assert_files(resp, expected=unique, total=len(all_files), related=len(related), duplicates=len(duplicates)) # Get related - resp = client.get(f"/api/v1/files/?matches={MatchCategory.RELATED}&limit={len(all_files)}") + resp = client.get(f"/api/v1/files/?matches={FileMatchFilter.RELATED}&limit={len(all_files)}") assert_files(resp, expected=related, total=len(all_files), related=len(related), duplicates=len(duplicates)) # Get duplicates - resp = client.get(f"/api/v1/files/?matches={MatchCategory.DUPLICATES}&limit={len(all_files)}") + resp = client.get(f"/api/v1/files/?matches={FileMatchFilter.DUPLICATES}&limit={len(all_files)}") assert_files(resp, expected=duplicates, total=len(all_files), related=len(related), duplicates=len(duplicates)) @@ -485,11 +504,11 @@ def test_list_files_sort_date(client, app): all_date_sorted = new + old # Get all - resp = client.get(f"/api/v1/files/?limit={len(all_date_sorted)}&sort={Sort.DATE}") + resp = client.get(f"/api/v1/files/?limit={len(all_date_sorted)}&sort={FileSort.DATE}") assert_files(resp, expected=all_date_sorted, total=len(all_date_sorted)) # Get old - resp = client.get(f"/api/v1/files/?limit={len(all_date_sorted)}&offset={len(new)}&sort={Sort.DATE}") + resp = client.get(f"/api/v1/files/?limit={len(all_date_sorted)}&offset={len(new)}&sort={FileSort.DATE}") assert_files(resp, expected=old, total=len(all_date_sorted)) @@ -505,11 +524,11 @@ def test_list_files_sort_length(client, app): all_length_sorted = long + short # Get all - resp = client.get(f"/api/v1/files/?limit={len(all_length_sorted)}&sort={Sort.LENGTH}") + resp = client.get(f"/api/v1/files/?limit={len(all_length_sorted)}&sort={FileSort.LENGTH}") assert_files(resp, expected=all_length_sorted, total=len(all_length_sorted)) # Get short - resp = client.get(f"/api/v1/files/?limit={len(all_length_sorted)}&offset={len(long)}&sort={Sort.LENGTH}") + resp = client.get(f"/api/v1/files/?limit={len(all_length_sorted)}&offset={len(long)}&sort={FileSort.LENGTH}") assert_files(resp, expected=short, total=len(all_length_sorted)) @@ -527,13 +546,13 @@ def test_list_files_sort_duplicates(client, app, config): all_dup_sorted = [a] + sorted([b, c], key=attr("id")) + sorted([d, e] + unique, key=attr("id")) # Get all - resp = client.get(f"/api/v1/files/?limit={len(all_dup_sorted)}&sort={Sort.DUPLICATES}") + resp = client.get(f"/api/v1/files/?limit={len(all_dup_sorted)}&sort={FileSort.DUPLICATES}") assert_files(resp, expected=all_dup_sorted, total=len(all_dup_sorted)) # Get slice offset = int(len(all_dup_sorted) / 2) limit = int(len(all_dup_sorted) / 4) - resp = client.get(f"/api/v1/files/?limit={limit}&offset={offset}&sort={Sort.DUPLICATES}") + resp = client.get(f"/api/v1/files/?limit={limit}&offset={offset}&sort={FileSort.DUPLICATES}") assert_files(resp, expected=all_dup_sorted[offset:offset + limit], total=len(all_dup_sorted)) @@ -552,13 +571,13 @@ def test_list_files_sort_related(client, app, config): all_rel_sorted = sorted([a, c, d], key=attr("id")) + sorted([b, e], key=attr("id")) + sorted(unique, key=attr("id")) # Get all - resp = client.get(f"/api/v1/files/?limit={len(all_rel_sorted)}&sort={Sort.RELATED}") + resp = client.get(f"/api/v1/files/?limit={len(all_rel_sorted)}&sort={FileSort.RELATED}") assert_files(resp, expected=all_rel_sorted, total=len(all_rel_sorted)) # Get slice offset = int(len(all_rel_sorted) / 2) limit = int(len(all_rel_sorted) / 4) - resp = client.get(f"/api/v1/files/?limit={limit}&offset={offset}&sort={Sort.RELATED}") + resp = client.get(f"/api/v1/files/?limit={limit}&offset={offset}&sort={FileSort.RELATED}") assert_files(resp, expected=all_rel_sorted[offset:offset + limit], total=len(all_rel_sorted)) @@ -577,17 +596,17 @@ def test_list_files_mixed_example(client, app, config): ]) # Long videos - b.meta.video_length = length_large # duplicates: a - c.meta.video_length = length_large # duplicates: a, related: d - e.meta.video_length = length_large # related: d - f.meta.video_length = length_large # no matches + b.exif.General_Duration = length_large # duplicates: a + c.exif.General_Duration = length_large # duplicates: a, related: d + e.exif.General_Duration = length_large # related: d + f.exif.General_Duration = length_large # no matches # Get long videos with related matches sorted by amount of duplicates resp = client.get( f"/api/v1/files/?" f"min_length={length_large}&" - f"matches={MatchCategory.RELATED}&" - f"sort={Sort.DUPLICATES}&" + f"matches={FileMatchFilter.RELATED}&" + f"sort={FileSort.DUPLICATES}&" f"limit={len(all_files)}") expected = sorted([b, c], key=attr("id")) + [e] assert_files(resp, expected, total=4, related=len(expected)) @@ -596,8 +615,8 @@ def test_list_files_mixed_example(client, app, config): resp = client.get( f"/api/v1/files/?" f"max_length={length_small}&" - f"matches={MatchCategory.RELATED}&" - f"sort={Sort.DUPLICATES}&" + f"matches={FileMatchFilter.RELATED}&" + f"sort={FileSort.DUPLICATES}&" f"limit={len(all_files)}") expected = [a, d] assert_files(resp, expected, total=len(all_files) - 4, related=len(expected)) @@ -606,8 +625,8 @@ def test_list_files_mixed_example(client, app, config): resp = client.get( f"/api/v1/files/?" f"min_length={length_large}&" - f"matches={MatchCategory.UNIQUE}&" - f"sort={Sort.RELATED}&" + f"matches={FileMatchFilter.UNIQUE}&" + f"sort={FileSort.RELATED}&" f"limit={len(all_files)}") expected = [f] assert_files(resp, expected, total=4) @@ -679,8 +698,10 @@ def test_list_file_matches_include(client, app): "items": [ { "file": { - "meta": {"video_length": match.match_video_file.meta.video_length}, - "exif": {"General_FileExtension": match.match_video_file.exif.General_FileExtension} + "exif": { + "General_FileExtension": match.match_video_file.exif.General_FileExtension, + "General_Duration": match.match_video_file.exif.General_Duration + } } } for match in matches ] @@ -688,3 +709,136 @@ def test_list_file_matches_include(client, app): assert all( "scenes" not in match["file"].keys() for match in items(resp) ) + + +def test_fetch_file_cluster_basic(client, app): + with session_scope(app) as session: + all_files = make_files(5) + source, a, b, c, d = all_files + session.add_all(all_files) + + matches = [ + link(source, a), + link(source, b), + link(source, c), + link(source, d), + ] + session.add_all(matches) + + all_files = sorted(all_files, key=attr("id")) + matches = sorted(matches, key=attr("id")) + + # Get all matches + resp = client.get(f"/api/v1/files/{source.id}/cluster") + assert_json_response(resp, { + "total": len(matches), + "matches": [ + { + "distance": match.distance, + "source": match.query_video_file_id, + "target": match.match_video_file_id + } for match in matches + ], + "files": [{"file_path": file.file_path, "sha256": file.sha256} for file in all_files] + }) + + # Get slice + offset = 1 + limit = 2 + resp = client.get(f"/api/v1/files/{source.id}/cluster?offset={offset}&limit={limit}") + assert_json_response(resp, { + "total": len(matches), + "matches": [ + { + "distance": match.distance, + "source": match.query_video_file_id, + "target": match.match_video_file_id + } for match in matches[offset:offset + limit] + ], + }) + payload = json_payload(resp) + assert_same(payload["files"], matched_files(matches[offset:offset + limit])) + + +def test_fetch_file_cluster_include(client, app): + with session_scope(app) as session: + source, a, b = make_files(3) + session.add_all([source, a, b]) + + matches = [ + link(source, a), + link(source, b), + ] + session.add_all(matches) + + files = sorted([source, a, b], key=attr("id")) + matches = sorted(matches, key=attr("id")) + + # Don't include additional fields + resp = client.get(f"/api/v1/files/{source.id}/cluster") + assert all( + {"exif", "meta", "scenes"}.isdisjoint(file.keys()) for file in json_payload(resp)["files"] + ) + + # Include meta and exif + resp = client.get(f"/api/v1/files/{source.id}/cluster?include=meta,exif") + assert_json_response(resp, { + "total": len(matches), + "files": [ + { + "exif": { + "General_FileExtension": file.exif.General_FileExtension, + "General_Duration": file.exif.General_Duration + } + + } for file in files + ] + }) + assert all( + "scenes" not in file.keys() for file in json_payload(resp)["files"] + ) + + +def test_fetch_file_cluster_hops(client, app): + hops = 100 + with session_scope(app) as session: + source = make_file() + linked = make_files(2) + prev1, prev2 = linked + matches = [link(source, prev1), link(source, prev2)] + + for _ in range(hops - 1): + cur1, cur2 = make_files(2) + matches.extend([ + link(prev1, cur1), link(prev1, cur2), + link(cur2, prev2), link(cur1, prev2)]) + linked.append(cur1) + linked.append(cur2) + prev1, prev2 = cur1, cur2 + session.add_all(matches) + + matches.sort(key=attr("id")) + + # Query all + resp = client.get(f"/api/v1/files/{source.id}/cluster?hops={hops}&limit={len(matches)}") + payload = json_payload(resp) + assert_same(payload["matches"], matches) + assert_same(payload["files"], [source] + linked) + + # Query half + half = int(hops / 2) + resp = client.get(f"/api/v1/files/{source.id}/cluster?hops={half}&limit={len(matches)}") + assert_same(json_payload(resp)["files"], [source] + linked[:2 * half]) + + # Create a short cut from the source to the most distant items + with session_scope(app) as session: + source, cur1, cur2 = refresh(session, source, cur1, cur2) + short_cut = [link(source, cur1), link(source, cur2)] + session.add_all(short_cut) + matches.extend(short_cut) + + # Query half hops must return all files now + resp = client.get(f"/api/v1/files/{source.id}/cluster?hops={half}&limit={len(matches) + 2}") + payload = json_payload(resp) + assert_same(payload["matches"], matches) + assert_same(payload["files"], [source] + linked) diff --git a/server/tests/server/test_model.py b/server/tests/server/test_model.py index 2c55cd0f..d529cc5c 100644 --- a/server/tests/server/test_model.py +++ b/server/tests/server/test_model.py @@ -64,3 +64,13 @@ def test_transform_file(): data = Transform.file_dict(file, exif=True) assert data["file_path"] == file.file_path assert data["exif"]["General_FileSize"] == file.exif.General_FileSize + + +def test_transform_partial(): + file = Files(file_path="foo", sha256="bar", meta=None, exif=None, signature=None) + + data = Transform.file_dict(file, meta=True, signature=True, exif=True) + + assert data.get("meta") is None + assert data.get("exif") is None + assert data.get("signature") is None diff --git a/tests/general_tests.py b/tests/general_tests.py index 908fc904..7af16e1e 100644 --- a/tests/general_tests.py +++ b/tests/general_tests.py @@ -7,8 +7,8 @@ from winnow.feature_extraction import IntermediateCnnExtractor, FrameToVideoRepresentation, SimilarityModel from winnow.storage.repr_storage import ReprStorage -from winnow.storage.repr_utils import path_resolver, bulk_read -from winnow.utils import scan_videos, create_video_list, get_hash, resolve_config +from winnow.storage.repr_utils import bulk_read +from winnow.utils import scan_videos, create_video_list, resolve_config, reprkey_resolver NUMBER_OF_TEST_VIDEOS = 40 @@ -51,10 +51,10 @@ def videos(): @pytest.fixture(scope="module") -def dataset_path_hash_pairs(videos): +def repr_keys(videos): """(path_inside_storage,sha256) pairs for test dataset videos.""" - storepath = path_resolver(source_root=DATASET_DIR) - return [(storepath(path), get_hash(path)) for path in videos] + reprkey = reprkey_resolver(cfg) + return [reprkey(path) for path in videos] @pytest.fixture(scope="module") @@ -67,9 +67,9 @@ def intermediate_cnn_results(videos, reprs): Returns: ReprStorage with populated with intermediate CNN results. """ - storepath = path_resolver(source_root=DATASET_DIR) + reprkey = reprkey_resolver(cfg) videos_list = create_video_list(videos, VIDEO_LIST_TXT) - extractor = IntermediateCnnExtractor(videos_list, reprs, storepath) + extractor = IntermediateCnnExtractor(video_src=videos_list, reprs=reprs, reprkey=reprkey) extractor.start(batch_size=16, cores=4) return reprs @@ -103,8 +103,8 @@ def signatures(frame_to_video_results): reprs = frame_to_video_results sm = SimilarityModel() signatures = sm.predict(bulk_read(reprs.video_level)) - for (path, sha256), sig_value in signatures.items(): - reprs.signature.write(path, sha256, sig_value) + for repr_key, sig_value in signatures.items(): + reprs.signature.write(repr_key, sig_value) return signatures @@ -116,35 +116,35 @@ def test_video_extension_filter(videos): assert not_videos == 0 -def test_intermediate_cnn_extractor(intermediate_cnn_results, dataset_path_hash_pairs): - assert set(intermediate_cnn_results.frame_level.list()) == set(dataset_path_hash_pairs) +def test_intermediate_cnn_extractor(intermediate_cnn_results, repr_keys): + assert set(intermediate_cnn_results.frame_level.list()) == set(repr_keys) frame_level_features = list(bulk_read(intermediate_cnn_results.frame_level).values()) shapes_correct = sum(features.shape[1] == 4096 for features in frame_level_features) - assert shapes_correct == len(dataset_path_hash_pairs) + assert shapes_correct == len(repr_keys) -def test_frame_to_video_converter(frame_to_video_results, dataset_path_hash_pairs): - assert set(frame_to_video_results.video_level.list()) == set(dataset_path_hash_pairs) +def test_frame_to_video_converter(frame_to_video_results, repr_keys): + assert set(frame_to_video_results.video_level.list()) == set(repr_keys) video_level_features = np.array(list(bulk_read(frame_to_video_results.video_level).values())) - assert video_level_features.shape == (len(dataset_path_hash_pairs), 1, 4096) + assert video_level_features.shape == (len(repr_keys), 1, 4096) -def test_signatures_shape(signatures, dataset_path_hash_pairs): - assert set(signatures.keys()) == set(dataset_path_hash_pairs) +def test_signatures_shape(signatures, repr_keys): + assert set(signatures.keys()) == set(repr_keys) signatures_array = np.array(list(signatures.values())) assert signatures_array.shape == (NUMBER_OF_TEST_VIDEOS, 500) @pytest.mark.usefixtures("signatures") -def test_saved_signatures(reprs, dataset_path_hash_pairs): +def test_saved_signatures(reprs, repr_keys): signatures = bulk_read(reprs.signature) - assert set(signatures.keys()) == set(dataset_path_hash_pairs) + assert set(signatures.keys()) == set(repr_keys) signatures_array = np.array(list(signatures.values())) assert signatures_array.shape == (NUMBER_OF_TEST_VIDEOS, 500) diff --git a/tests/winnow/storage/test_db_result_storage.py b/tests/winnow/storage/test_db_result_storage.py index 46a1f6ae..698207fa 100644 --- a/tests/winnow/storage/test_db_result_storage.py +++ b/tests/winnow/storage/test_db_result_storage.py @@ -95,14 +95,14 @@ def test_add_signatures_update(store): def test_add_file_metadata(store): # Check metadata write - orig = File("some/path", "some-hash", {"gray_avg": 42.5}) + orig = File("some/path", "some-hash", {"gray_max": 42.5}) store.add_file_metadata(orig.path, orig.sha256, orig.value) - check_files(store, [orig], lambda file: {"gray_avg": file.meta.gray_avg}) + check_files(store, [orig], lambda file: {"gray_max": file.meta.gray_max}) # Check metadata updated - updated = File(orig.path, orig.sha256, {"gray_avg": orig.value["gray_avg"] + 1}) + updated = File(orig.path, orig.sha256, {"gray_max": orig.value["gray_max"] + 1}) store.add_file_metadata(orig.path, orig.sha256, updated.value) - check_files(store, [updated], lambda file: {"gray_avg": file.meta.gray_avg}) + check_files(store, [updated], lambda file: {"gray_max": file.meta.gray_max}) # Check no entity duplication assert count(store, VideoMetadata) == 1 @@ -110,14 +110,14 @@ def test_add_file_metadata(store): def test_add_metadata(store): # Check bulk write - saved = [File(f"some/path{i}", f"some-hash{i}", {"gray_avg": float(i)}) for i in range(100)] + saved = [File(f"some/path{i}", f"some-hash{i}", {"gray_max": float(i)}) for i in range(100)] store.add_metadata(saved) - check_files(store, saved, lambda file: {"gray_avg": file.meta.gray_avg}) + check_files(store, saved, lambda file: {"gray_max": file.meta.gray_max}) # Check bulk update - updated = [File(orig.path, orig.sha256, {"gray_avg": orig.value["gray_avg"] + 1.0}) for orig in saved] + updated = [File(orig.path, orig.sha256, {"gray_max": orig.value["gray_max"] + 1.0}) for orig in saved] store.add_metadata(updated) - check_files(store, updated, lambda file: {"gray_avg": file.meta.gray_avg}) + check_files(store, updated, lambda file: {"gray_max": file.meta.gray_max}) # Check no entity duplication assert count(store, VideoMetadata) == len(updated) diff --git a/tests/winnow/storage/test_repr_storage.py b/tests/winnow/storage/test_repr_storage.py index 67422f77..2e1a414a 100644 --- a/tests/winnow/storage/test_repr_storage.py +++ b/tests/winnow/storage/test_repr_storage.py @@ -1,10 +1,13 @@ import tempfile from itertools import islice +from uuid import uuid4 as uuid import numpy as np import pytest +from dataclasses import asdict -from winnow.storage.path_repr_storage import PathReprStorage +from winnow.storage.lmdb_repr_storage import LMDBReprStorage +from winnow.storage.repr_key import ReprKey from winnow.storage.repr_utils import bulk_read, bulk_write from winnow.storage.sqlite_repr_storage import SQLiteReprStorage @@ -27,7 +30,24 @@ def store(request): # Shortcut for pytest parametrize decorator. # Decorated test will be executed for all existing representation store types. -use_store = pytest.mark.parametrize('store', [PathReprStorage, SQLiteReprStorage], indirect=True) +use_store = pytest.mark.parametrize('store', [LMDBReprStorage, SQLiteReprStorage], indirect=True) + + +def make_key(): + """Make some repr storage key.""" + unique = uuid() + return ReprKey(path=f"some/path-{unique}", hash=f"some-hash-{unique}", tag=f"some-tag-{unique}") + + +def make_entry(): + """Make some repr storage entry.""" + return make_key(), np.array([str(uuid())]) + + +def copy(key, **kwargs): + args = asdict(key) + args.update(kwargs) + return ReprKey(**args) @use_store @@ -37,76 +57,79 @@ def test_empty(store): @use_store def test_exists(store): - path, sha256, value = "some/path", "some-hash", np.array(["some-value"]) + key, value = make_entry() # Doesn't exist before write - assert not store.exists(path, sha256) + assert not store.exists(key) # Exists when written - store.write(path, sha256, value) - assert store.exists(path, sha256) + store.write(key, value) + assert store.exists(key) # Doesn't exist after deletion - store.delete(path, sha256) - assert not store.exists(path, sha256) + store.delete(key.path) + assert not store.exists(key) @use_store def test_read_write(store): - path, sha256, value, another_value = "some/path", "some-hash", np.array(["some-value"]), np.array(["another-value"]) + key, value, another_value = make_key(), np.array(["some-value"]), np.array(["another-value"]) - store.write(path, sha256, value) - assert store.read(path, sha256) == value + store.write(key, value) + assert store.read(key) == value - store.write(path, sha256, another_value) - assert store.read(path, sha256) == another_value + store.write(key, another_value) + assert store.read(key) == another_value # Repeat write - store.write(path, sha256, another_value) - assert store.read(path, sha256) == another_value + store.write(key, another_value) + assert store.read(key) == another_value # Repeat read - assert store.read(path, sha256) == another_value + assert store.read(key) == another_value @use_store def test_read_write_multiple(store): - path_1, sha256_1, value_1 = "some/path", "some-hash", np.array(["some-value"]) - path_2, sha256_2, value_2 = "other/path", "other-hash", np.array(["other-value"]) + key_1, value_1 = make_entry() + key_2, value_2 = make_entry() - store.write(path_1, sha256_1, value_1) - store.write(path_2, sha256_2, value_2) + store.write(key_1, value_1) + store.write(key_2, value_2) - assert store.exists(path_1, sha256_1) - assert store.exists(path_2, sha256_2) - assert store.read(path_1, sha256_1) == value_1 - assert store.read(path_2, sha256_2) == value_2 + assert store.exists(key_1) + assert store.exists(key_2) + assert store.read(key_1) == value_1 + assert store.read(key_2) == value_2 # Mix up path and hash - assert not store.exists(path_1, sha256_2) - assert not store.exists(path_2, sha256_1) + unknown = make_key() + assert not store.exists(unknown) + assert not store.exists(copy(key_1, hash=key_2.hash)) + assert not store.exists(copy(key_1, tag=key_2.tag)) + assert not store.exists(copy(key_2, hash=key_1.hash)) + assert not store.exists(copy(key_2, tag=key_1.tag)) @use_store def test_list(store): assert list(store.list()) == [] - path_1, sha256_1 = "some/path", "some-hash" - path_2, sha256_2 = "other/path", "other-hash" + key_1, key_2 = make_key(), make_key() - store.write(path_1, sha256_1, np.array(["some-value"])) - assert set(store.list()) == {(path_1, sha256_1)} + store.write(key_1, np.array(["some-value"])) + assert set(store.list()) == {key_1} - store.write(path_2, sha256_2, np.array(["some-value"])) - assert set(store.list()) == {(path_1, sha256_1), (path_2, sha256_2)} + store.write(key_2, np.array(["some-value"])) + assert set(store.list()) == {key_1, key_2} - store.delete(path_1, sha256_1) - assert set(store.list()) == {(path_2, sha256_2)} + store.delete(key_1.path) + assert set(store.list()) == {key_2} @use_store def test_bulk_read_write(store): - data_as_dict = {(f"some/path{i}", f"some-hash{i}"): np.array([f"some-value{i}"]) for i in range(100)} + data_as_dict = dict(make_entry() for _ in range(100)) bulk_write(store, data_as_dict) assert bulk_read(store) == data_as_dict diff --git a/web/package-lock.json b/web/package-lock.json index 494fe116..5dfb7ffe 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -3780,6 +3780,11 @@ "is-symbol": "^1.0.2" } }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, "escalade": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.0.tgz", @@ -4528,6 +4533,15 @@ "readable-stream": "^2.3.6" } }, + "flv.js": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/flv.js/-/flv.js-1.5.0.tgz", + "integrity": "sha512-7tFwccqkFXpA7RIED0KvuNny2qVnpuGc5nTGsRpzrCT+qtwIaZyciK5UgyvgtlAMYaPFzYS0wdI92JiSBKOyXw==", + "requires": { + "es6-promise": "^4.2.5", + "webworkify": "^1.5.0" + } + }, "follow-redirects": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", @@ -9335,6 +9349,11 @@ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, + "webworkify": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/webworkify/-/webworkify-1.5.0.tgz", + "integrity": "sha512-AMcUeyXAhbACL8S2hqqdqOLqvJ8ylmIbNwUIqQujRSouf4+eUFaXbG6F1Rbu+srlJMmxQWsiU7mOJi0nMBfM1g==" + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/web/package.json b/web/package.json index 3ef90b89..da426e4c 100644 --- a/web/package.json +++ b/web/package.json @@ -54,6 +54,7 @@ "clsx": "^1.1.1", "d3": "^6.2.0", "date-fns": "^2.16.1", + "flv.js": "^1.5.0", "fontsource-roboto": "^2.1.4", "get-user-locale": "^1.4.0", "http-status-codes": "^1.4.0", diff --git a/web/src/application/state/index.js b/web/src/application/state/index.js index 8dd1361c..ce421d13 100644 --- a/web/src/application/state/index.js +++ b/web/src/application/state/index.js @@ -1,3 +1,3 @@ -export {} from "./actions"; -export { initialState, appRootReducer } from "./reducers"; export { appRootSaga } from "./sagas"; +export { default as appRootReducer } from "./reducers"; +export { default as initialState } from "./initialState"; diff --git a/web/src/application/state/initialState.js b/web/src/application/state/initialState.js new file mode 100644 index 00000000..2d97b36d --- /dev/null +++ b/web/src/application/state/initialState.js @@ -0,0 +1,13 @@ +import collInitialState from "../../collection/state/initialState"; + +/** + * The entire application initial state. + */ +const initialState = { + /** + * File collection management state. + */ + coll: collInitialState, +}; + +export default initialState; diff --git a/web/src/application/state/reducers.js b/web/src/application/state/reducers.js index 975736b3..0fad13bc 100644 --- a/web/src/application/state/reducers.js +++ b/web/src/application/state/reducers.js @@ -1,13 +1,8 @@ -import { - collRootReducer, - initialState as collInitialState, -} from "../../collection/state"; import { combineReducers } from "redux"; +import collRootReducer from "../../collection/state/reducers"; -export const initialState = { - coll: collInitialState, -}; - -export const appRootReducer = combineReducers({ +const appRootReducer = combineReducers({ coll: collRootReducer, }); + +export default appRootReducer; diff --git a/web/src/application/state/sagas.js b/web/src/application/state/sagas.js index d302ae3c..a370a470 100644 --- a/web/src/application/state/sagas.js +++ b/web/src/application/state/sagas.js @@ -1,5 +1,5 @@ import { all } from "redux-saga/effects"; -import { collRootSaga } from "../../collection/state"; +import collRootSaga from "../../collection/state/sagas"; /** * Application root saga. Initializes all other sagas. diff --git a/web/src/collection/components/CollectionRootPage.js b/web/src/collection/components/CollectionRootPage.js index 358c639b..37945832 100644 --- a/web/src/collection/components/CollectionRootPage.js +++ b/web/src/collection/components/CollectionRootPage.js @@ -9,6 +9,7 @@ import FileBrowserPage from "./FileBrowserPage/FileBrowserPage"; import VideoDetailsPage from "./VideoDetailsPage/VideoDetailsPage"; import FileMatchesPage from "./FileMatchesPage/FileMatchesPage"; import FileClusterPage from "./FileClusterPage"; +import FileComparisonPage from "./FileComparisonPage"; const useStyles = makeStyles(() => ({ body: { @@ -46,6 +47,9 @@ function CollectionRootPage(props) { + + + diff --git a/web/src/collection/components/FileBrowserPage/CategorySelector/CategorySelector.js b/web/src/collection/components/FileBrowserPage/CategorySelector/CategorySelector.js index d7132f71..c2353822 100644 --- a/web/src/collection/components/FileBrowserPage/CategorySelector/CategorySelector.js +++ b/web/src/collection/components/FileBrowserPage/CategorySelector/CategorySelector.js @@ -2,7 +2,7 @@ import React from "react"; import clsx from "clsx"; import PropTypes from "prop-types"; import { useIntl } from "react-intl"; -import { MatchCategory } from "../../../state/MatchCategory"; +import { MatchCategory } from "../../../state/fileList/MatchCategory"; import CategoryButton from "./CategoryButton"; import AllInclusiveOutlinedIcon from "@material-ui/icons/AllInclusiveOutlined"; import FileCopyOutlinedIcon from "@material-ui/icons/FileCopyOutlined"; @@ -11,40 +11,36 @@ import AdjustOutlinedIcon from "@material-ui/icons/AdjustOutlined"; import { formatCount } from "../../../../common/helpers/format"; import Grid from "@material-ui/core/Grid"; -function useNames() { - const intl = useIntl(); - return { - [MatchCategory.all]: intl.formatMessage({ id: "search.category.all" }), - [MatchCategory.duplicates]: intl.formatMessage({ - id: "search.category.duplicates", - }), - [MatchCategory.related]: intl.formatMessage({ - id: "search.category.related", - }), - [MatchCategory.unique]: intl.formatMessage({ - id: "search.category.unique", - }), - }; -} - -const categories = [ - MatchCategory.all, - MatchCategory.duplicates, - MatchCategory.related, - MatchCategory.unique, +/** + * Selectable categories. + */ +const options = [ + { + category: MatchCategory.all, + title: "search.category.all", + icon: AllInclusiveOutlinedIcon, + }, + { + category: MatchCategory.duplicates, + title: "search.category.duplicates", + icon: FileCopyOutlinedIcon, + }, + { + category: MatchCategory.related, + title: "search.category.related", + icon: GroupWorkOutlinedIcon, + }, + { + category: MatchCategory.unique, + title: "search.category.unique", + icon: AdjustOutlinedIcon, + }, ]; -const icons = { - [MatchCategory.all]: AllInclusiveOutlinedIcon, - [MatchCategory.duplicates]: FileCopyOutlinedIcon, - [MatchCategory.related]: GroupWorkOutlinedIcon, - [MatchCategory.unique]: AdjustOutlinedIcon, -}; - function CategorySelector(props) { const { category: selected, onChange, counts, dense, className } = props; - const names = useNames(); const intl = useIntl(); + const format = (id) => intl.formatMessage({ id }); return ( - {categories.map((category) => ( + {options.map((option) => ( onChange(category)} - selected={category === selected} - key={category} + name={format(option.title)} + icon={option.icon} + quantity={formatCount(counts[option.category])} + onClick={() => onChange(option.category)} + selected={option.category === selected} + key={option.category} dense={dense} /> ))} diff --git a/web/src/collection/components/FileBrowserPage/CategorySelector/index.js b/web/src/collection/components/FileBrowserPage/CategorySelector/index.js index 470ee435..2c928b21 100644 --- a/web/src/collection/components/FileBrowserPage/CategorySelector/index.js +++ b/web/src/collection/components/FileBrowserPage/CategorySelector/index.js @@ -1,2 +1,2 @@ export { default } from "./CategorySelector"; -export { MatchCategory } from "../../../state/MatchCategory"; +export { MatchCategory } from "../../../state/fileList/MatchCategory"; diff --git a/web/src/collection/components/FileBrowserPage/FileBrowserActions/FileBrowserActions.js b/web/src/collection/components/FileBrowserPage/FileBrowserActions/FileBrowserActions.js index 86200ca2..7c4dc91e 100644 --- a/web/src/collection/components/FileBrowserPage/FileBrowserActions/FileBrowserActions.js +++ b/web/src/collection/components/FileBrowserPage/FileBrowserActions/FileBrowserActions.js @@ -6,10 +6,11 @@ import TuneIcon from "@material-ui/icons/Tune"; import AddMediaButton from "./AddMediaButton"; import ViewSelector from "./ViewSelector"; import SortSelector from "./SortSelector"; -import { View } from "./view"; import SquaredIconButton from "../../../../common/components/SquaredIconButton"; import { useIntl } from "react-intl"; -import { FileSort } from "../../../state/FileSort"; +import { FileSort } from "../../../state/fileList/FileSort"; +import { Badge } from "@material-ui/core"; +import FileListType from "../../../state/fileList/FileListType"; const useStyles = makeStyles((theme) => ({ actions: { @@ -37,13 +38,15 @@ const FileBrowserActions = React.forwardRef(function FingerprintViewActions( onToggleFilters, showFiltersControls, showFiltersRef, + activeFilters, className, + ...other } = props; const classes = useStyles(); const intl = useIntl(); return ( -
+
{showFilters && ( - - - + + + + + )}
); @@ -87,7 +92,7 @@ FileBrowserActions.propTypes = { FileSort.duplicates, ]), onSortChange: PropTypes.func, - view: PropTypes.oneOf([View.list, View.grid]), + view: PropTypes.oneOf([FileListType.linear, FileListType.grid]), /** * Callback for switching List or Grid view */ @@ -102,6 +107,10 @@ FileBrowserActions.propTypes = { * Reference to show filter button */ showFiltersRef: PropTypes.any, + /** + * Active filters count that should be displayed. + */ + activeFilters: PropTypes.number, className: PropTypes.string, }; diff --git a/web/src/collection/components/FileBrowserPage/FileBrowserActions/SortSelector.js b/web/src/collection/components/FileBrowserPage/FileBrowserActions/SortSelector.js index c95fec86..0e725830 100644 --- a/web/src/collection/components/FileBrowserPage/FileBrowserActions/SortSelector.js +++ b/web/src/collection/components/FileBrowserPage/FileBrowserActions/SortSelector.js @@ -7,7 +7,7 @@ import InputLabel from "@material-ui/core/InputLabel"; import Select from "@material-ui/core/Select"; import MenuItem from "@material-ui/core/MenuItem"; import { useIntl } from "react-intl"; -import { FileSort } from "../../../state/FileSort"; +import { FileSort } from "../../../state/fileList/FileSort"; const useStyles = makeStyles(() => ({ select: { diff --git a/web/src/collection/components/FileBrowserPage/FileBrowserActions/ViewSelector.js b/web/src/collection/components/FileBrowserPage/FileBrowserActions/ViewSelector.js index 3e2aca4a..6030221a 100644 --- a/web/src/collection/components/FileBrowserPage/FileBrowserActions/ViewSelector.js +++ b/web/src/collection/components/FileBrowserPage/FileBrowserActions/ViewSelector.js @@ -2,9 +2,9 @@ import React from "react"; import PropTypes from "prop-types"; import ListIcon from "@material-ui/icons/ViewStream"; import GridIcon from "@material-ui/icons/ViewModule"; -import { View } from "./view"; import { useIntl } from "react-intl"; import IconSelect from "../../../../common/components/IconSelect"; +import FileListType from "../../../state/fileList/FileListType"; function useMessages() { const intl = useIntl(); @@ -21,12 +21,12 @@ function ViewSelector(props) { return ( @@ -35,7 +35,7 @@ function ViewSelector(props) { } ViewSelector.propTypes = { - view: PropTypes.oneOf([View.list, View.grid]), + view: PropTypes.oneOf([FileListType.linear, FileListType.grid]), onChange: PropTypes.func, className: PropTypes.string, }; diff --git a/web/src/collection/components/FileBrowserPage/FileBrowserActions/index.js b/web/src/collection/components/FileBrowserPage/FileBrowserActions/index.js index 99496ca3..9e94b38d 100644 --- a/web/src/collection/components/FileBrowserPage/FileBrowserActions/index.js +++ b/web/src/collection/components/FileBrowserPage/FileBrowserActions/index.js @@ -1,2 +1 @@ export { default } from "./FileBrowserActions"; -export { View } from "./view"; diff --git a/web/src/collection/components/FileBrowserPage/FileBrowserActions/view.js b/web/src/collection/components/FileBrowserPage/FileBrowserActions/view.js deleted file mode 100644 index d5ea5908..00000000 --- a/web/src/collection/components/FileBrowserPage/FileBrowserActions/view.js +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Fingerprint list style: list or grid. - * @type {{grid: string, list: string}} - */ -export const View = { - list: "list", - grid: "grid", -}; diff --git a/web/src/collection/components/FileBrowserPage/FileBrowserPage.js b/web/src/collection/components/FileBrowserPage/FileBrowserPage.js index 3831ae77..aa030427 100644 --- a/web/src/collection/components/FileBrowserPage/FileBrowserPage.js +++ b/web/src/collection/components/FileBrowserPage/FileBrowserPage.js @@ -3,7 +3,7 @@ import clsx from "clsx"; import PropTypes from "prop-types"; import { makeStyles } from "@material-ui/styles"; import ExpandLessIcon from "@material-ui/icons/ExpandLess"; -import FileBrowserActions, { View } from "./FileBrowserActions"; +import FileBrowserActions from "./FileBrowserActions"; import FilterPane from "./FilterPane"; import SearchTextInput from "./SearchTextInput"; import CategorySelector from "./CategorySelector"; @@ -11,20 +11,27 @@ import FileLinearList from "./FileLinearList/FileLinearList"; import FileGridList from "./FileGridList"; import { useDispatch, useSelector } from "react-redux"; import { - selectCounts, - selectError, + selectFileList, + selectFileCounts, + selectFileError, selectFiles, - selectFilters, - selectLoading, + selectFileFilters, + selectFileLoading, } from "../../state/selectors"; -import { fetchFiles, updateFilters } from "../../state"; import Fab from "@material-ui/core/Fab"; import Zoom from "@material-ui/core/Zoom"; import VisibilitySensor from "react-visibility-sensor"; import { scrollIntoView } from "../../../common/helpers/scroll"; -import { useHistory } from "react-router-dom"; +import { useHistory, useLocation } from "react-router-dom"; import { routes } from "../../../routing/routes"; import { useIntl } from "react-intl"; +import FileListType from "../../state/fileList/FileListType"; +import { + changeFileListView, + fetchFiles, + updateFilters, +} from "../../state/fileList/actions"; +import { defaultFilters } from "../../state/fileList/initialState"; const useStyles = makeStyles((theme) => ({ container: { @@ -111,9 +118,9 @@ const useStyles = makeStyles((theme) => ({ function listComponent(view) { switch (view) { - case View.list: + case FileListType.linear: return FileLinearList; - case View.grid: + case FileListType.grid: return FileGridList; default: throw new Error(`Unsupported fingerprints view type: ${view}`); @@ -124,29 +131,35 @@ function FileBrowserPage(props) { const { className } = props; const classes = useStyles(); const [showFilters, setShowFilters] = useState(false); - const [view, setView] = useState(View.grid); - const error = useSelector(selectError); - const loading = useSelector(selectLoading); + const fileListState = useSelector(selectFileList); + const error = useSelector(selectFileError); + const loading = useSelector(selectFileLoading); const files = useSelector(selectFiles); - const filters = useSelector(selectFilters); - const counts = useSelector(selectCounts); + const filters = useSelector(selectFileFilters); + const counts = useSelector(selectFileCounts); const dispatch = useDispatch(); const [top, setTop] = useState(true); const topRef = useRef(null); const history = useHistory(); + const view = fileListState.fileListType; const List = listComponent(view); const intl = useIntl(); const showFiltersRef = useRef(); + const location = useLocation(); + const keepFilters = location.state?.keepFilters; + const activeFilters = FilterPane.useActiveFilters(); useEffect(() => { - dispatch(updateFilters({ query: "" })); - }, []); + if (!keepFilters || fileListState.neverLoaded) { + dispatch(updateFilters(defaultFilters)); + } + }, [keepFilters, fileListState.neverLoaded]); const handleFetchPage = useCallback(() => dispatch(fetchFiles()), []); const handleToggleFilters = useCallback(() => { setShowFilters(!showFilters); - setTimeout(() => showFiltersRef.current.focus()); + setTimeout(() => showFiltersRef.current?.focus()); }, [showFilters, showFiltersRef]); const handleQuery = useCallback((query) => { @@ -168,6 +181,11 @@ function FileBrowserPage(props) { [filters] ); + const handleChangeView = useCallback( + (view) => dispatch(changeFileListView(view)), + [] + ); + const scrollTop = useCallback(() => scrollIntoView(topRef), [topRef]); return ( @@ -182,12 +200,13 @@ function FileBrowserPage(props) { sort={filters.sort} onSortChange={handleChangeSort} view={view} - onViewChange={setView} + onViewChange={handleChangeView} onAddMedia={() => console.log("On Add Media")} showFilters={!showFilters} onToggleFilters={handleToggleFilters} className={classes.actions} showFiltersRef={showFiltersRef} + activeFilters={activeFilters} />
@@ -207,13 +226,13 @@ function FileBrowserPage(props) {
diff --git a/web/src/collection/components/FileBrowserPage/FileGridList/FileGridListItem.js b/web/src/collection/components/FileBrowserPage/FileGridList/FileGridListItem.js index 882ef31f..8e652a35 100644 --- a/web/src/collection/components/FileBrowserPage/FileGridList/FileGridListItem.js +++ b/web/src/collection/components/FileBrowserPage/FileGridList/FileGridListItem.js @@ -2,7 +2,7 @@ import React, { useCallback } from "react"; import clsx from "clsx"; import PropTypes from "prop-types"; import { makeStyles } from "@material-ui/styles"; -import { FileType } from "../FileType"; +import { FileType } from "../../../prop-types/FileType"; import MediaPreview from "../../../../common/components/MediaPreview"; import VideocamOutlinedIcon from "@material-ui/icons/VideocamOutlined"; import MoreHorizOutlinedIcon from "@material-ui/icons/MoreHorizOutlined"; diff --git a/web/src/collection/components/FileBrowserPage/FileLinearList/FileLinearListItem.js b/web/src/collection/components/FileBrowserPage/FileLinearList/FileLinearListItem.js index 6cb9ddf6..4ecf2511 100644 --- a/web/src/collection/components/FileBrowserPage/FileLinearList/FileLinearListItem.js +++ b/web/src/collection/components/FileBrowserPage/FileLinearList/FileLinearListItem.js @@ -2,172 +2,118 @@ import React, { useCallback } from "react"; import clsx from "clsx"; import PropTypes from "prop-types"; import { makeStyles } from "@material-ui/styles"; -import { FileType } from "../FileType"; -import VideocamOutlinedIcon from "@material-ui/icons/VideocamOutlined"; -import ScheduleOutlinedIcon from "@material-ui/icons/ScheduleOutlined"; -import EventAvailableOutlinedIcon from "@material-ui/icons/EventAvailableOutlined"; -import VolumeOffOutlinedIcon from "@material-ui/icons/VolumeOffOutlined"; +import { FileType } from "../../../prop-types/FileType"; import MoreHorizOutlinedIcon from "@material-ui/icons/MoreHorizOutlined"; -import AttributeText from "../../../../common/components/AttributeText"; import IconButton from "@material-ui/core/IconButton"; -import { - formatBool, - formatDate, - formatDuration, -} from "../../../../common/helpers/format"; import { useIntl } from "react-intl"; -import ExifIcon from "../../../../common/components/icons/ExifIcon"; +import FileSummary from "../../FileSummary"; +import { useMediaQuery } from "@material-ui/core"; +import useTheme from "@material-ui/styles/useTheme"; const useStyles = makeStyles((theme) => ({ - decor: { + container: { marginBottom: theme.spacing(2), backgroundColor: theme.palette.background.paper, borderRadius: 4, borderStyle: "solid", borderWidth: 1, borderColor: theme.palette.border.light, - }, - layout: { display: "flex", alignItems: "center", padding: theme.spacing(3), }, - buttonStyle: { + button: { cursor: "pointer", "&:hover": { borderColor: theme.palette.primary.light, }, }, - icon: { - color: theme.palette.primary.contrastText, - width: theme.spacing(3), - height: theme.spacing(3), - }, - iconContainer: { - backgroundColor: theme.palette.primary.main, - width: theme.spacing(4), - height: theme.spacing(4), - display: "flex", - alignItems: "center", - justifyContent: "center", - }, - fileName: { + summary: { flexGrow: 1, minWidth: 0, - marginLeft: theme.spacing(3), - }, - volume: { - color: theme.palette.action.textInactive, - }, - attr: { - marginLeft: theme.spacing(3), - marginRight: theme.spacing(3), - }, - divider: { - borderLeftStyle: "solid", - borderLeftColor: theme.palette.border.light, - borderLeftWidth: 1, - height: theme.spacing(4), - }, - md: { - [theme.breakpoints.down("md")]: { - display: "none", - }, - }, - sm: { - [theme.breakpoints.down("sm")]: { - display: "none", - }, }, })); -function useMessages(intl) { +/** + * Get i18n text. + */ +function useMessages() { + const intl = useIntl(); return { - attr: { - filename: intl.formatMessage({ id: "file.attr.name" }), - fingerprint: intl.formatMessage({ id: "file.attr.fingerprint" }), - quality: intl.formatMessage({ id: "file.attr.quality" }), - }, + containerLabel: intl.formatMessage({ id: "actions.showFileDetails" }), + moreLabel: intl.formatMessage({ id: "actions.showMoreOptions" }), }; } +/** + * Get screen size. + */ +function useScreenSize() { + const theme = useTheme(); + const medium = useMediaQuery(theme.breakpoints.up("md")); + const large = useMediaQuery(theme.breakpoints.up("lg")); + return { medium, large }; +} + const FileLinearListItem = React.memo(function FpLinearListItem(props) { - const { file, button = false, highlight, onClick, className } = props; - const intl = useIntl(); - const messages = useMessages(intl); + const { + file, + button = false, + highlight, + onClick, + dense, + className, + ...other + } = props; + const messages = useMessages(); + const { large, medium } = useScreenSize(); const handleClick = useCallback(() => onClick(file), [file, onClick]); const classes = useStyles(); return (
-
- -
- - -
- -
- -
- -
- -
- - - + + + {medium && } + + {large && !dense && } + {large && !dense && } + {large && !dense && } + + + +
); }); FileLinearListItem.propTypes = { + /** + * File to be displayed + */ file: FileType.isRequired, + /** + * File name substring that should be highlighted. + */ highlight: PropTypes.string, + /** + * Handle item click action. + */ button: PropTypes.bool, + /** + * Handle item click. + */ onClick: PropTypes.func, + /** + * Use dense layout. + */ + dense: PropTypes.bool, className: PropTypes.string, }; diff --git a/web/src/collection/components/FileBrowserPage/FilterPane/ContentFilters.js b/web/src/collection/components/FileBrowserPage/FilterPane/ContentFilters.js index 7bdb30af..dd79eb79 100644 --- a/web/src/collection/components/FileBrowserPage/FilterPane/ContentFilters.js +++ b/web/src/collection/components/FileBrowserPage/FilterPane/ContentFilters.js @@ -4,6 +4,10 @@ import FilterList from "./FilterList"; import { useFilters } from "./useFilters"; import { useIntl } from "react-intl"; import RangeFilter from "./RangeFilter"; +import { useSelector } from "react-redux"; +import { selectFileFilters } from "../../../state/selectors"; +import objectDiff from "../../../../common/helpers/objectDiff"; +import { defaultFilters } from "../../../state/fileList/initialState"; /** * Get i18n text @@ -17,6 +21,15 @@ function useMessages() { }; } +/** + * Get count of active filters. + */ +function useActiveFilters() { + const filters = useSelector(selectFileFilters); + const diff = objectDiff(filters, defaultFilters); + return Number(diff.length); +} + function ContentFilters(props) { const { className } = props; const messages = useMessages(); @@ -38,6 +51,11 @@ function ContentFilters(props) { ); } +/** + * Hook to get count of active filters. + */ +ContentFilters.useActiveFilters = useActiveFilters; + ContentFilters.propTypes = { className: PropTypes.string, }; diff --git a/web/src/collection/components/FileBrowserPage/FilterPane/FilterPane.js b/web/src/collection/components/FileBrowserPage/FilterPane/FilterPane.js index 3e0e2acd..41e176df 100644 --- a/web/src/collection/components/FileBrowserPage/FilterPane/FilterPane.js +++ b/web/src/collection/components/FileBrowserPage/FilterPane/FilterPane.js @@ -62,11 +62,20 @@ function getTabComponent(tab) { } } +/** + * Get total count of active filters managed by filter pane. + */ +function useActiveFilters() { + return ContentFilters.useActiveFilters() + MetadataFilters.useActiveFilters(); +} + function FilterPane(props) { const { onSave, onClose, className, ...other } = props; const classes = useStyles(); const messages = useMessages(); const [tab, setTab] = useState(Tab.content); + const contentFilters = ContentFilters.useActiveFilters(); + const metadataFilters = MetadataFilters.useActiveFilters(); const TabComponent = getTabComponent(tab); @@ -75,8 +84,18 @@ function FilterPane(props) {
- - + + @@ -85,6 +104,11 @@ function FilterPane(props) { ); } +/** + * Hook to get total count of active filters managed by filter pane. + */ +FilterPane.useActiveFilters = useActiveFilters; + FilterPane.propTypes = { onClose: PropTypes.func, onSave: PropTypes.func, diff --git a/web/src/collection/components/FileBrowserPage/FilterPane/FilterPaneHeader.js b/web/src/collection/components/FileBrowserPage/FilterPane/FilterPaneHeader.js index aa28b565..ddba63cc 100644 --- a/web/src/collection/components/FileBrowserPage/FilterPane/FilterPaneHeader.js +++ b/web/src/collection/components/FileBrowserPage/FilterPane/FilterPaneHeader.js @@ -42,9 +42,7 @@ function FilterPaneHeader(props) { useEffect(() => { if (autoFocus) { - console.log("Focusing", buttonRef.current); - buttonRef.current.focus(); - // setTimeout(() => ); + buttonRef.current?.focus(); } }, [autoFocus, buttonRef]); @@ -89,7 +87,13 @@ FilterPaneHeader.propTypes = { * Autofocus header when shown */ autoFocus: PropTypes.bool, + /** + * Handle close button. + */ onClose: PropTypes.func, + /** + * Handle save preset button. + */ onSave: PropTypes.func, className: PropTypes.string, "aria-controls": PropTypes.string, diff --git a/web/src/collection/components/FileBrowserPage/FilterPane/MetadataFilters.js b/web/src/collection/components/FileBrowserPage/FilterPane/MetadataFilters.js index 321a7681..f61a8480 100644 --- a/web/src/collection/components/FileBrowserPage/FilterPane/MetadataFilters.js +++ b/web/src/collection/components/FileBrowserPage/FilterPane/MetadataFilters.js @@ -7,6 +7,10 @@ import FilterList from "./FilterList"; import DateRangeFilter from "./DateRangeFilter"; import BoolFilter from "./BoolFilter"; import { useIntl } from "react-intl"; +import { defaultFilters } from "../../../state/fileList/initialState"; +import objectDiff from "../../../../common/helpers/objectDiff"; +import { useSelector } from "react-redux"; +import { selectFileFilters } from "../../../state/selectors"; /** * Get i18n text. @@ -23,6 +27,15 @@ function useMessages() { }; } +/** + * Get count of active filters. + */ +function useActiveFilters() { + const filters = useSelector(selectFileFilters); + const diff = objectDiff(filters, defaultFilters); + return diff.extensions + diff.date + diff.audio + diff.exif; +} + function MetadataFilters(props) { const { className } = props; const [filters, setFilters] = useFilters(); @@ -75,6 +88,11 @@ function MetadataFilters(props) { ); } +/** + * Hook to retrieve active filters count. + */ +MetadataFilters.useActiveFilters = useActiveFilters; + MetadataFilters.propTypes = { className: PropTypes.string, }; diff --git a/web/src/collection/components/FileBrowserPage/FilterPane/useFilters.js b/web/src/collection/components/FileBrowserPage/FilterPane/useFilters.js index ca1ee643..78f4c112 100644 --- a/web/src/collection/components/FileBrowserPage/FilterPane/useFilters.js +++ b/web/src/collection/components/FileBrowserPage/FilterPane/useFilters.js @@ -1,15 +1,15 @@ import { isEqual, merge } from "lodash"; import { useDispatch, useSelector } from "react-redux"; -import { selectFilters } from "../../../state/selectors"; +import { selectFileFilters } from "../../../state/selectors"; import { useCallback, useEffect, useState } from "react"; -import { updateFilters } from "../../../state"; +import { updateFilters } from "../../../state/fileList/actions"; /** * Hook to smoothly update hooks */ export function useFilters() { // Access current redux state - const filters = useSelector(selectFilters); + const filters = useSelector(selectFileFilters); const dispatch = useDispatch(); const [changes, setChanges] = useState({}); // unsaved changes diff --git a/web/src/collection/components/FileClusterPage/FileClusterPage.js b/web/src/collection/components/FileClusterPage/FileClusterPage.js index 614bc8cf..06252a26 100644 --- a/web/src/collection/components/FileClusterPage/FileClusterPage.js +++ b/web/src/collection/components/FileClusterPage/FileClusterPage.js @@ -1,4 +1,4 @@ -import React, { useEffect } from "react"; +import React, { useCallback } from "react"; import clsx from "clsx"; import PropTypes from "prop-types"; import { makeStyles } from "@material-ui/styles"; @@ -7,10 +7,10 @@ import FileSummaryHeader from "../FileSummaryHeader"; import { useParams } from "react-router-dom"; import useFile from "../../hooks/useFile"; import FileLoadingHeader from "../FileLoadingHeader"; -import { useDispatch, useSelector } from "react-redux"; -import { selectFileMatches } from "../../state/selectors"; -import { updateFileMatchFilters } from "../../state/actions"; import MatchGraph from "../MatchGraph"; +import { useIntl } from "react-intl"; +import Loading from "../../../common/components/Loading"; +import useFileCluster from "../../hooks/useFileCluster"; const useStyles = makeStyles((theme) => ({ root: { @@ -27,19 +27,41 @@ const useStyles = makeStyles((theme) => ({ graph: { margin: theme.spacing(4), }, + loading: { + minHeight: 500, + }, })); +/** + * Get i18n text + */ +function useMessages() { + const intl = useIntl(); + return { + loadError: intl.formatMessage({ id: "match.load.error" }), + }; +} + function FileClusterPage(props) { const { className } = props; const classes = useStyles(); const { id } = useParams(); + const messages = useMessages(); const { file, error, loadFile } = useFile(id); - const matches = useSelector(selectFileMatches).matches; - const dispatch = useDispatch(); - useEffect(() => { - dispatch(updateFileMatchFilters(id, {})); - }, [id]); + const { + matches, + files, + error: matchError, + resumeLoading: loadCluster, + hasMore, + total, + } = useFileCluster({ fileId: id, filters: { hops: 2 } }); + + const handleLoadFile = useCallback(() => { + loadFile(); + loadCluster(); + }, [loadCluster, loadFile]); if (file == null) { return ( @@ -47,18 +69,41 @@ function FileClusterPage(props) {
); } + let content; + if (hasMore) { + const progress = total == null ? undefined : matches.length / total; + content = ( + + ); + } else { + content = ( + + ); + } + return (
- + {content}
); } diff --git a/web/src/collection/components/FileComparisonPage/FileComparisonPage.js b/web/src/collection/components/FileComparisonPage/FileComparisonPage.js new file mode 100644 index 00000000..f7abb4ba --- /dev/null +++ b/web/src/collection/components/FileComparisonPage/FileComparisonPage.js @@ -0,0 +1,57 @@ +import React, { useCallback } from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { makeStyles } from "@material-ui/styles"; +import Grid from "@material-ui/core/Grid"; +import MotherFile from "./MotherFile/MotherFile"; +import MatchFiles from "./MatchFiles/MatchFiles"; +import { useHistory, useParams } from "react-router-dom"; +import { routes } from "../../../routing/routes"; + +const useStyles = makeStyles((theme) => ({ + root: { + paddingTop: theme.dimensions.content.padding * 2, + }, +})); + +function FileComparisonPage(props) { + const { className } = props; + const classes = useStyles(); + const history = useHistory(); + const { id: rawId, matchFileId } = useParams(); + const id = Number(rawId); + + const handleMatchFileChange = useCallback( + (newMatchFileId) => + history.push(routes.collection.fileComparisonURL(id, newMatchFileId)), + [id] + ); + + const handleBack = useCallback( + () => history.push(routes.collection.fileMatchesURL(id)), + [id] + ); + + return ( +
+ + + + + + + + +
+ ); +} + +FileComparisonPage.propTypes = { + className: PropTypes.string, +}; + +export default FileComparisonPage; diff --git a/web/src/collection/components/FileComparisonPage/FileDetails/FileDescriptionPane.js b/web/src/collection/components/FileComparisonPage/FileDetails/FileDescriptionPane.js new file mode 100644 index 00000000..34911a89 --- /dev/null +++ b/web/src/collection/components/FileComparisonPage/FileDetails/FileDescriptionPane.js @@ -0,0 +1,89 @@ +import React, { useCallback, useState } from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { makeStyles } from "@material-ui/styles"; +import { FileType } from "../../../prop-types/FileType"; +import Paper from "@material-ui/core/Paper"; +import CollapseButton from "../../../../common/components/CollapseButton"; +import { useIntl } from "react-intl"; +import Collapse from "@material-ui/core/Collapse"; +import VideoInformation from "../../VideoDetailsPage/VideoInformation"; + +const useStyles = makeStyles((theme) => ({ + root: { + boxShadow: "0 12px 18px 0 rgba(0,0,0,0.08)", + display: "flex", + flexDirection: "column", + alignItems: "stretch", + }, + header: { + padding: theme.spacing(2), + display: "flex", + alignItems: "center", + }, + title: { + ...theme.mixins.title3, + fontWeight: "bold", + flexGrow: 1, + }, + collapseButton: { + flexGrow: 0, + }, +})); + +/** + * Get i18n text. + */ +function useMessages() { + const intl = useIntl(); + return { + title: intl.formatMessage({ id: "file.details" }), + }; +} + +function FileDescriptionPane(props) { + const { file, onJump, collapsible, className, ...other } = props; + const classes = useStyles(); + const messages = useMessages(); + const [collapsed, setCollapsed] = useState(false); + + const handleCollapse = useCallback(() => setCollapsed(!collapsed), [ + collapsed, + ]); + + return ( + +
+
{messages.title}
+ {collapsible && ( + + )} +
+ + + +
+ ); +} + +FileDescriptionPane.propTypes = { + /** + * Video file + */ + file: FileType.isRequired, + /** + * Jump to a particular object + */ + onJump: PropTypes.func, + /** + * Enable or disable pane collapse feature. + */ + collapsible: PropTypes.bool, + className: PropTypes.string, +}; + +export default FileDescriptionPane; diff --git a/web/src/collection/components/FileComparisonPage/FileDetails/FileDetails.js b/web/src/collection/components/FileComparisonPage/FileDetails/FileDetails.js new file mode 100644 index 00000000..7d93fb28 --- /dev/null +++ b/web/src/collection/components/FileComparisonPage/FileDetails/FileDetails.js @@ -0,0 +1,52 @@ +import React, { useCallback, useState } from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { makeStyles } from "@material-ui/styles"; +import { FileType } from "../../../prop-types/FileType"; +import VideoPlayerPane from "../../VideoDetailsPage/VideoPlayerPane"; +import { seekTo } from "../../VideoDetailsPage/seekTo"; +import FileDescriptionPane from "./FileDescriptionPane"; + +const useStyles = makeStyles((theme) => ({ + root: { + // display: "block", + }, + pane: { + margin: theme.spacing(2), + }, +})); + +function FileDetails(props) { + const { file, className } = props; + const classes = useStyles(); + const [player, setPlayer] = useState(null); + + const handleJump = useCallback(seekTo(player, file), [player, file]); + + return ( +
+ + +
+ ); +} + +FileDetails.propTypes = { + /** + * Video file to be displayed + */ + file: FileType.isRequired, + className: PropTypes.string, +}; + +export default FileDetails; diff --git a/web/src/collection/components/FileComparisonPage/FileDetails/index.js b/web/src/collection/components/FileComparisonPage/FileDetails/index.js new file mode 100644 index 00000000..43418576 --- /dev/null +++ b/web/src/collection/components/FileComparisonPage/FileDetails/index.js @@ -0,0 +1 @@ +export { default } from "./FileDetails"; diff --git a/web/src/collection/components/FileComparisonPage/LoadingHeader.js b/web/src/collection/components/FileComparisonPage/LoadingHeader.js new file mode 100644 index 00000000..e0d22111 --- /dev/null +++ b/web/src/collection/components/FileComparisonPage/LoadingHeader.js @@ -0,0 +1,54 @@ +import React from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { makeStyles } from "@material-ui/styles"; +import Paper from "@material-ui/core/Paper"; +import Loading from "../../../common/components/Loading"; + +const useStyles = makeStyles((theme) => ({ + root: { + boxShadow: "0 12px 18px 0 rgba(0,0,0,0.08)", + minHeight: theme.spacing(12), + display: "flex", + alignItems: "center", + justifyContent: "center", + }, +})); + +function LoadingHeader(props) { + const { error, errorMessage, onRetry, progress, className, ...other } = props; + const classes = useStyles(); + return ( + + + + ); +} + +LoadingHeader.propTypes = { + /** + * Indicate loading error + */ + error: PropTypes.bool, + /** + * The value of the progress indicator for the determinate and static variants. + * Value between 0 and 1. + */ + progress: PropTypes.number, + /** + * Trigger loading of the next portion of files + */ + onRetry: PropTypes.func.isRequired, + /** + * Message displayed when error=true + */ + errorMessage: PropTypes.string.isRequired, + className: PropTypes.string, +}; + +export default LoadingHeader; diff --git a/web/src/collection/components/FileComparisonPage/MatchFiles/FileMatchHeader.js b/web/src/collection/components/FileComparisonPage/MatchFiles/FileMatchHeader.js new file mode 100644 index 00000000..ed3417fb --- /dev/null +++ b/web/src/collection/components/FileComparisonPage/MatchFiles/FileMatchHeader.js @@ -0,0 +1,53 @@ +import React from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { makeStyles } from "@material-ui/styles"; +import FileSummary from "../../FileSummary/FileSummary"; +import { FileType } from "../../../prop-types/FileType"; +import Distance from "../../../../common/components/Distance"; + +const useStyles = makeStyles((theme) => ({ + header: { + boxShadow: "0 12px 18px 0 rgba(0,0,0,0.08)", + padding: theme.spacing(2), + }, + name: { + paddingBottom: theme.spacing(2), + }, + distance: { + minWidth: 150, + }, +})); + +function FileMatchHeader(props) { + const { distance, file, className, ...other } = props; + const classes = useStyles(); + return ( +
+ + + + + + + + + + +
+ ); +} + +FileMatchHeader.propTypes = { + /** + * Distance to the matched file. + */ + distance: PropTypes.number.isRequired, + /** + * Video file to be summarized. + */ + file: FileType.isRequired, + className: PropTypes.string, +}; + +export default FileMatchHeader; diff --git a/web/src/collection/components/FileComparisonPage/MatchFiles/MatchFiles.js b/web/src/collection/components/FileComparisonPage/MatchFiles/MatchFiles.js new file mode 100644 index 00000000..0ba5e393 --- /dev/null +++ b/web/src/collection/components/FileComparisonPage/MatchFiles/MatchFiles.js @@ -0,0 +1,167 @@ +import React, { useCallback, useEffect } from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { makeStyles } from "@material-ui/styles"; +import { useIntl } from "react-intl"; +import LoadingHeader from "../LoadingHeader"; +import FileDetails from "../FileDetails"; +import FileMatchHeader from "./FileMatchHeader"; +import MatchSelector from "./MatchSelector"; +import useFileMatches from "../../../hooks/useFileMatches"; + +const useStyles = makeStyles((theme) => ({ + root: {}, + header: { + height: theme.spacing(10), + padding: theme.spacing(2), + display: "flex", + alignItems: "center", + }, + title: { + ...theme.mixins.title3, + fontWeight: "bold", + flexGrow: 1, + }, + loading: { + margin: theme.spacing(2), + }, + fileHeader: { + marginTop: 0, + margin: theme.spacing(2), + }, + errorMessage: { + minHeight: 150, + ...theme.mixins.title2, + color: theme.palette.action.textInactive, + display: "flex", + alignItems: "center", + justifyContent: "center", + }, +})); + +/** + * Compare two matches. + */ +function matchComparator(first, second) { + if (first.distance < second.distance) { + return -1; + } else if (first.distance > second.distance) { + return 1; + } else { + return String(first.file.filename).localeCompare(second.file.filename); + } +} + +/** + * Get i18n text. + */ +function useMessages() { + const intl = useIntl(); + return { + title: intl.formatMessage({ id: "file.match" }), + loadError: intl.formatMessage({ id: "match.load.error" }), + notMatch: intl.formatMessage({ id: "match.notMatch" }), + noMatches: intl.formatMessage({ id: "match.noMatches" }), + }; +} + +function MatchFiles(props) { + const { + motherFileId, + matchFileId, + onMatchFileChange, + className, + ...other + } = props; + const classes = useStyles(); + const messages = useMessages(); + + const { + matches: loadedMatches, + error: matchError, + resumeLoading: loadMatches, + hasMore, + progress, + } = useFileMatches({ fileId: motherFileId }); + + const matches = loadedMatches.sort(matchComparator); + + // Move to the first element when matches are loaded + useEffect(() => { + if (!hasMore && matches.length > 0 && matchFileId == null) { + onMatchFileChange(matches[0].file.id); + } + }, [hasMore, onMatchFileChange, motherFileId]); + + // Get index of the selected match file + const selected = matches.findIndex((match) => match.file.id === matchFileId); + + const handleSelectionChange = useCallback( + (index) => { + onMatchFileChange(matches[index].file.id); + }, + [hasMore, onMatchFileChange, motherFileId] + ); + + let content; + if (hasMore) { + content = ( + + ); + } else if (matches.length > 0 && selected >= 0) { + content = ( +
+ + +
+ ); + } else { + const errorMessage = + matches.length === 0 ? messages.noMatches : messages.notMatch; + content =
{errorMessage}
; + } + + return ( +
+
+
{messages.title}
+ {!hasMore && ( + + )} +
+ {content} +
+ ); +} + +MatchFiles.propTypes = { + /** + * Mother file id. + */ + motherFileId: PropTypes.number.isRequired, + /** + * Match file id. + */ + matchFileId: PropTypes.number, + /** + * Handle match file change. + */ + onMatchFileChange: PropTypes.func.isRequired, + className: PropTypes.string, +}; + +export default MatchFiles; diff --git a/web/src/collection/components/FileComparisonPage/MatchFiles/MatchSelector.js b/web/src/collection/components/FileComparisonPage/MatchFiles/MatchSelector.js new file mode 100644 index 00000000..4d1c1f53 --- /dev/null +++ b/web/src/collection/components/FileComparisonPage/MatchFiles/MatchSelector.js @@ -0,0 +1,142 @@ +import React, { useCallback } from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { makeStyles } from "@material-ui/styles"; +import FileType from "../../../prop-types/FileType"; +import FormControl from "@material-ui/core/FormControl"; +import InputLabel from "@material-ui/core/InputLabel"; +import Select from "@material-ui/core/Select"; +import MenuItem from "@material-ui/core/MenuItem"; +import { useIntl } from "react-intl"; +import useUniqueId from "../../../../common/hooks/useUniqueId"; +import SquaredIconButton from "../../../../common/components/SquaredIconButton"; +import ButtonGroup from "@material-ui/core/ButtonGroup"; +import NavigateNextOutlinedIcon from "@material-ui/icons/NavigateNextOutlined"; +import NavigateBeforeOutlinedIcon from "@material-ui/icons/NavigateBeforeOutlined"; +import { basename } from "../../../../common/helpers/paths"; + +const useStyles = makeStyles((theme) => ({ + root: { + display: "flex", + alignItems: "center", + }, + formControl: { + width: 300, + marginLeft: theme.spacing(2), + }, + button: { + marginLeft: theme.spacing(1), + }, + index: { + ...theme.mixins.text, + }, +})); + +/** + * Get i18n text. + */ +function useMessages() { + const intl = useIntl(); + return { + label: intl.formatMessage({ id: "file.match" }), + nextLabel: intl.formatMessage({ id: "aria.label.nextMatch" }), + prevLabel: intl.formatMessage({ id: "aria.label.prevMatch" }), + }; +} + +function MatchSelector(props) { + const { matches, onChange, selected, className } = props; + const classes = useStyles(); + const messages = useMessages(); + const labelId = useUniqueId("label"); + + const handleSelect = useCallback((event) => onChange(event.target.value), [ + onChange, + ]); + + const handleNext = useCallback( + () => onChange(Math.min(matches.length - 1, selected + 1)), + [matches, selected] + ); + + const handlePrev = useCallback(() => onChange(Math.max(0, selected - 1)), [ + matches, + selected, + ]); + + const showSelected = matches.length > 0 && selected >= 0; + + return ( +
+ {showSelected && ( +
+ {selected + 1} of {matches.length} +
+ )} + + {messages.label} + + + + + + + = matches.length - 1} + className={classes.button} + aria-label={messages.nextLabel} + onClick={handleNext} + > + + + +
+ ); +} + +MatchSelector.propTypes = { + /** + * Selected match index. + */ + selected: PropTypes.number.isRequired, + /** + * Handle selection change. + */ + onChange: PropTypes.func.isRequired, + /** + * Single file matches. + */ + matches: PropTypes.arrayOf( + PropTypes.shape({ + id: PropTypes.any.isRequired, + distance: PropTypes.number.isRequired, + file: FileType.isRequired, + }) + ), + className: PropTypes.string, +}; + +export default MatchSelector; diff --git a/web/src/collection/components/FileComparisonPage/MatchFiles/index.js b/web/src/collection/components/FileComparisonPage/MatchFiles/index.js new file mode 100644 index 00000000..de52668e --- /dev/null +++ b/web/src/collection/components/FileComparisonPage/MatchFiles/index.js @@ -0,0 +1 @@ +export { default } from "./MatchFiles"; diff --git a/web/src/collection/components/FileComparisonPage/MotherFile/FileDetailsHeader.js b/web/src/collection/components/FileComparisonPage/MotherFile/FileDetailsHeader.js new file mode 100644 index 00000000..ab2d0e83 --- /dev/null +++ b/web/src/collection/components/FileComparisonPage/MotherFile/FileDetailsHeader.js @@ -0,0 +1,44 @@ +import React from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { makeStyles } from "@material-ui/styles"; +import FileSummary from "../../FileSummary/FileSummary"; +import { FileType } from "../../../prop-types/FileType"; + +const useStyles = makeStyles((theme) => ({ + header: { + boxShadow: "0 12px 18px 0 rgba(0,0,0,0.08)", + padding: theme.spacing(2), + }, + name: { + paddingBottom: theme.spacing(2), + }, +})); + +function FileDetailsHeader(props) { + const { file, className } = props; + const classes = useStyles(); + return ( +
+ + + + + + + + + +
+ ); +} + +FileDetailsHeader.propTypes = { + /** + * Video file to be summarized. + */ + file: FileType.isRequired, + className: PropTypes.string, +}; + +export default FileDetailsHeader; diff --git a/web/src/collection/components/FileComparisonPage/MotherFile/MotherFile.js b/web/src/collection/components/FileComparisonPage/MotherFile/MotherFile.js new file mode 100644 index 00000000..e2176069 --- /dev/null +++ b/web/src/collection/components/FileComparisonPage/MotherFile/MotherFile.js @@ -0,0 +1,101 @@ +import React from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { makeStyles } from "@material-ui/styles"; +import { useIntl } from "react-intl"; +import useFile from "../../../hooks/useFile"; +import LoadingHeader from "../LoadingHeader"; +import FileDetails from "../FileDetails"; +import FileDetailsHeader from "./FileDetailsHeader"; +import ArrowBackOutlinedIcon from "@material-ui/icons/ArrowBackOutlined"; +import IconButton from "@material-ui/core/IconButton"; + +const useStyles = makeStyles((theme) => ({ + root: {}, + header: { + height: theme.spacing(10), + padding: theme.spacing(2), + display: "flex", + alignItems: "center", + }, + title: { + ...theme.mixins.title3, + fontWeight: "bold", + flexGrow: 1, + }, + loading: { + margin: theme.spacing(2), + }, + fileHeader: { + marginTop: 0, + margin: theme.spacing(2), + }, + backButton: { + marginRight: theme.spacing(2), + }, +})); + +/** + * Get i18n text. + */ +function useMessages() { + const intl = useIntl(); + return { + title: intl.formatMessage({ id: "file.mother" }), + loadError: intl.formatMessage({ id: "file.load.error.single" }), + }; +} + +function MotherFile(props) { + const { motherFileId, onBack, className, ...other } = props; + const classes = useStyles(); + const messages = useMessages(); + const { file, error, loadFile } = useFile(motherFileId); + + let content; + if (file == null) { + content = ( + + ); + } else { + content = ( +
+ + +
+ ); + } + + return ( +
+
+ {onBack != null && ( + + + + )} +
{messages.title}
+
+ {content} +
+ ); +} + +MotherFile.propTypes = { + /** + * Mother file id. + */ + motherFileId: PropTypes.number.isRequired, + /** + * Handle go-back button. + */ + onBack: PropTypes.func, + className: PropTypes.string, +}; + +export default MotherFile; diff --git a/web/src/collection/components/FileComparisonPage/MotherFile/index.js b/web/src/collection/components/FileComparisonPage/MotherFile/index.js new file mode 100644 index 00000000..46c75ec2 --- /dev/null +++ b/web/src/collection/components/FileComparisonPage/MotherFile/index.js @@ -0,0 +1 @@ +export { default } from "./MotherFile"; diff --git a/web/src/collection/components/FileComparisonPage/index.js b/web/src/collection/components/FileComparisonPage/index.js new file mode 100644 index 00000000..692653ab --- /dev/null +++ b/web/src/collection/components/FileComparisonPage/index.js @@ -0,0 +1 @@ +export { default } from "./FileComparisonPage"; diff --git a/web/src/collection/components/FileLoadingHeader/FileLoadingHeader.js b/web/src/collection/components/FileLoadingHeader/FileLoadingHeader.js index 6b140c41..362d2d2c 100644 --- a/web/src/collection/components/FileLoadingHeader/FileLoadingHeader.js +++ b/web/src/collection/components/FileLoadingHeader/FileLoadingHeader.js @@ -8,6 +8,7 @@ import IconButton from "@material-ui/core/IconButton"; import ArrowBackOutlinedIcon from "@material-ui/icons/ArrowBackOutlined"; import { useHistory } from "react-router"; import { ButtonBase } from "@material-ui/core"; +import { Status } from "../../../server-api/Response"; const useStyles = makeStyles((theme) => ({ header: { @@ -51,6 +52,7 @@ function useMessages() { return { retry: intl.formatMessage({ id: "actions.retry" }), error: intl.formatMessage({ id: "file.load.error.single" }), + notFound: intl.formatMessage({ id: "file.load.error.notFound" }), goBack: intl.formatMessage({ id: "actions.goBack" }), }; } @@ -80,13 +82,11 @@ function FileLoadingHeader(props) { ); } - return ( -
- {back && ( - - - - )} + let content; + if (error.status === Status.NOT_FOUND) { + content =
{messages.notFound}
; + } else { + content = (
{messages.error}
+ ); + } + + return ( +
+ {back && ( + + + + )} + {content}
); } @@ -107,7 +118,9 @@ FileLoadingHeader.propTypes = { * True iff file is not loading and previous * attempt resulted in failure. */ - error: PropTypes.bool.isRequired, + error: PropTypes.shape({ + status: PropTypes.any, + }), /** * Fires on retry. */ diff --git a/web/src/collection/components/FileMatchesPage/FileMatchesActions.js b/web/src/collection/components/FileMatchesPage/FileMatchesActions.js index c71b61ca..ceed863a 100644 --- a/web/src/collection/components/FileMatchesPage/FileMatchesActions.js +++ b/web/src/collection/components/FileMatchesPage/FileMatchesActions.js @@ -15,7 +15,6 @@ const useStyles = makeStyles((theme) => ({ alignItems: "center", }, button: { - color: theme.palette.action.textInactive, marginRight: theme.spacing(2), }, })); @@ -39,7 +38,8 @@ function FileMatchesActions(props) { return (
diff --git a/web/src/collection/components/FileMatchesPage/MatchPreview/Container.js b/web/src/collection/components/FileMatchesPage/MatchPreview/Container.js new file mode 100644 index 00000000..59185932 --- /dev/null +++ b/web/src/collection/components/FileMatchesPage/MatchPreview/Container.js @@ -0,0 +1,38 @@ +import React from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { makeStyles } from "@material-ui/styles"; +import Paper from "@material-ui/core/Paper"; + +const useStyles = makeStyles({ + root: { + boxShadow: "0 12px 18px 0 rgba(0,0,0,0.08)", + "&:focus": { + outline: "none", + boxShadow: "0 12px 18px 0 rgba(0,0,0,0.28)", + }, + }, +}); + +function Container(props) { + const { children, className, ...other } = props; + const classes = useStyles(); + return ( + + {children} + + ); +} + +Container.propTypes = { + /** + * Preview content. + */ + children: PropTypes.oneOfType([ + PropTypes.arrayOf(PropTypes.node), + PropTypes.node, + ]), + className: PropTypes.string, +}; + +export default Container; diff --git a/web/src/collection/components/FileMatchesPage/MatchPreview/FileAttributes.js b/web/src/collection/components/FileMatchesPage/MatchPreview/FileAttributes.js index 1e4f9c3d..ddfec341 100644 --- a/web/src/collection/components/FileMatchesPage/MatchPreview/FileAttributes.js +++ b/web/src/collection/components/FileMatchesPage/MatchPreview/FileAttributes.js @@ -2,7 +2,7 @@ import React from "react"; import clsx from "clsx"; import PropTypes from "prop-types"; import { makeStyles } from "@material-ui/styles"; -import FileType from "../../FileBrowserPage/FileType"; +import FileType from "../../../prop-types/FileType"; import TableBody from "@material-ui/core/TableBody"; import Table from "@material-ui/core/Table"; import { useIntl } from "react-intl"; diff --git a/web/src/collection/components/FileMatchesPage/MatchPreview/MatchPreview.js b/web/src/collection/components/FileMatchesPage/MatchPreview/MatchPreview.js index 8d6fc16e..2faacbad 100644 --- a/web/src/collection/components/FileMatchesPage/MatchPreview/MatchPreview.js +++ b/web/src/collection/components/FileMatchesPage/MatchPreview/MatchPreview.js @@ -2,29 +2,22 @@ import React, { useCallback } from "react"; import clsx from "clsx"; import PropTypes from "prop-types"; import { makeStyles } from "@material-ui/styles"; -import Paper from "@material-ui/core/Paper"; -import MatchType from "../MatchType"; import VideocamOutlinedIcon from "@material-ui/icons/VideocamOutlined"; import Marked from "../../../../common/components/Marked"; import IconButton from "@material-ui/core/IconButton"; import MoreHorizOutlinedIcon from "@material-ui/icons/MoreHorizOutlined"; import FileAttributes from "./FileAttributes"; -import Distance from "./Distance"; import { useIntl } from "react-intl"; import ButtonBase from "@material-ui/core/ButtonBase"; -import { useHistory } from "react-router-dom"; -import { routes } from "../../../../routing/routes"; +import FileType from "../../../prop-types/FileType"; +import Container from "./Container"; +import Distance from "../../../../common/components/Distance"; const useStyles = makeStyles((theme) => ({ root: { - boxShadow: "0 12px 18px 0 rgba(0,0,0,0.08)", display: "flex", flexDirection: "column", alignItems: "stretch", - "&:focus": { - outline: "none", - boxShadow: "0 12px 18px 0 rgba(0,0,0,0.28)", - }, }, nameContainer: { display: "flex", @@ -92,7 +85,7 @@ const useStyles = makeStyles((theme) => ({ function useMessages(file) { const intl = useIntl(); return { - moreInfo: intl.formatMessage({ id: "actions.moreInfo" }), + compare: intl.formatMessage({ id: "actions.compare" }), ariaLabel: intl.formatMessage( { id: "aria.label.matchedFile" }, { name: file.filename } @@ -102,20 +95,15 @@ function useMessages(file) { } function MatchPreview(props) { - const { match, highlight, className } = props; - const file = match.file; + const { file, distance, highlight, onCompare, className } = props; const intl = useIntl(); const classes = useStyles(); const messages = useMessages(file); - const history = useHistory(); - const handleMoreInfo = useCallback( - () => history.push(routes.collection.fileURL(file.id)), - [match] - ); + const handleCompare = useCallback(() => onCompare(file), [file, onCompare]); return ( -
- +
- {messages.moreInfo} + {messages.compare}
- + ); } MatchPreview.propTypes = { /** - * Match between two files + * Matched file + */ + file: FileType.isRequired, + /** + * Handle compare + */ + onCompare: PropTypes.func.isRequired, + /** + * Match distance */ - match: MatchType.isRequired, + distance: PropTypes.number.isRequired, /** * File name substring to highlight */ @@ -168,4 +164,9 @@ MatchPreview.propTypes = { className: PropTypes.string, }; +/** + * Preview container component + */ +MatchPreview.Container = Container; + export default MatchPreview; diff --git a/web/src/collection/components/FileSummary/CreationDate.js b/web/src/collection/components/FileSummary/CreationDate.js new file mode 100644 index 00000000..a16c2190 --- /dev/null +++ b/web/src/collection/components/FileSummary/CreationDate.js @@ -0,0 +1,33 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { formatDate } from "../../../common/helpers/format"; +import EventAvailableOutlinedIcon from "@material-ui/icons/EventAvailableOutlined"; +import AttributeText from "../../../common/components/AttributeText"; +import { FileType } from "../../prop-types/FileType"; +import { useIntl } from "react-intl"; + +function CreationDate(props) { + const { file, className, ...other } = props; + const intl = useIntl(); + + return ( + + ); +} + +CreationDate.propTypes = { + /** + * Video file to be summarized. + */ + file: FileType, + className: PropTypes.string, +}; + +export default CreationDate; diff --git a/web/src/collection/components/FileSummary/Divider.js b/web/src/collection/components/FileSummary/Divider.js new file mode 100644 index 00000000..9a9447b3 --- /dev/null +++ b/web/src/collection/components/FileSummary/Divider.js @@ -0,0 +1,27 @@ +import React from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { makeStyles } from "@material-ui/styles"; + +const useStyles = makeStyles((theme) => ({ + divider: { + borderLeftStyle: "solid", + borderLeftColor: theme.palette.border.light, + borderLeftWidth: 1, + height: theme.spacing(4), + marginLeft: theme.spacing(3), + marginRight: theme.spacing(3), + }, +})); + +function Divider(props) { + const { className, ...other } = props; + const classes = useStyles(); + return
; +} + +Divider.propTypes = { + className: PropTypes.string, +}; + +export default Divider; diff --git a/web/src/collection/components/FileSummary/Duration.js b/web/src/collection/components/FileSummary/Duration.js new file mode 100644 index 00000000..29701e31 --- /dev/null +++ b/web/src/collection/components/FileSummary/Duration.js @@ -0,0 +1,30 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { formatDuration } from "../../../common/helpers/format"; +import ScheduleOutlinedIcon from "@material-ui/icons/ScheduleOutlined"; +import AttributeText from "../../../common/components/AttributeText"; +import { FileType } from "../../prop-types/FileType"; + +function Duration(props) { + const { file, className, ...other } = props; + + return ( + + ); +} + +Duration.propTypes = { + /** + * Video file to be summarized. + */ + file: FileType, + className: PropTypes.string, +}; + +export default Duration; diff --git a/web/src/collection/components/FileSummary/FileSummary.js b/web/src/collection/components/FileSummary/FileSummary.js new file mode 100644 index 00000000..82986715 --- /dev/null +++ b/web/src/collection/components/FileSummary/FileSummary.js @@ -0,0 +1,103 @@ +import React from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { makeStyles } from "@material-ui/styles"; +import Name from "./Name"; +import { FileType } from "../../prop-types/FileType"; +import Divider from "./Divider"; +import Spacer from "./Spacer"; +import Fingerprint from "./Fingerprint"; +import Duration from "./Duration"; +import CreationDate from "./CreationDate"; +import HasExif from "./HasExif"; +import HasAudio from "./HasAudio"; + +const useStyles = makeStyles({ + summary: { + display: "flex", + alignItems: "center", + }, +}); + +/** + * Set the following properties: selected, onSelect and value (if absent) + */ +function bindProps(file) { + return (attribute) => { + if (!React.isValidElement(attribute)) { + return null; + } + + return React.cloneElement(attribute, { + file, + ...attribute.props, + }); + }; +} + +/** + * Add indentation between attribute elements. + * @param attributes attribute elements array. + * @param divider display visible dividers + */ +function indentAttributes(attributes, divider) { + const result = []; + const IndentComponent = divider ? Divider : Spacer; + if (attributes != null) { + attributes.forEach((attribute, index) => { + result.push(attribute); + if (index < attributes.length - 1) { + result.push(); + } + }); + } + return result; +} + +/** + * Linear file attribute list. + */ +function FileSummary(props) { + const { file, children, divider = false, className, ...other } = props; + const classes = useStyles(); + + // Set required child properties + let attributes = React.Children.map(children, bindProps(file)); + + // Add dividers or spacers between attribute elements + attributes = indentAttributes(attributes, divider); + + return ( +
+ {attributes} +
+ ); +} + +FileSummary.Name = Name; +FileSummary.Fingerprint = Fingerprint; +FileSummary.Duration = Duration; +FileSummary.CreationDate = CreationDate; +FileSummary.HasExif = HasExif; +FileSummary.HasAudio = HasAudio; + +FileSummary.propTypes = { + /** + * Video file to be summarized. + */ + file: FileType.isRequired, + /** + * Show divider between attributes. + */ + divider: PropTypes.bool, + /** + * Summary attributes list. + */ + children: PropTypes.oneOfType([ + PropTypes.arrayOf(PropTypes.node), + PropTypes.node, + ]), + className: PropTypes.string, +}; + +export default FileSummary; diff --git a/web/src/collection/components/FileSummary/Fingerprint.js b/web/src/collection/components/FileSummary/Fingerprint.js new file mode 100644 index 00000000..1b0c83e1 --- /dev/null +++ b/web/src/collection/components/FileSummary/Fingerprint.js @@ -0,0 +1,43 @@ +import React from "react"; +import PropTypes from "prop-types"; +import AttributeText from "../../../common/components/AttributeText"; +import { FileType } from "../../prop-types/FileType"; +import { useIntl } from "react-intl"; + +/** + * Get i18n text. + */ +function useMessages() { + const intl = useIntl(); + return { + filename: intl.formatMessage({ id: "file.attr.name" }), + fingerprint: intl.formatMessage({ id: "file.attr.fingerprint" }), + quality: intl.formatMessage({ id: "file.attr.quality" }), + goBack: intl.formatMessage({ id: "actions.goBack" }), + }; +} + +function Fingerprint(props) { + const { file, className, ...other } = props; + const messages = useMessages(); + + return ( + + ); +} + +Fingerprint.propTypes = { + /** + * Video file to be summarized. + */ + file: FileType, + className: PropTypes.string, +}; + +export default Fingerprint; diff --git a/web/src/collection/components/FileSummary/HasAudio.js b/web/src/collection/components/FileSummary/HasAudio.js new file mode 100644 index 00000000..69d93b3e --- /dev/null +++ b/web/src/collection/components/FileSummary/HasAudio.js @@ -0,0 +1,19 @@ +import React from "react"; +import PropTypes from "prop-types"; +import VolumeOffOutlinedIcon from "@material-ui/icons/VolumeOffOutlined"; +import { FileType } from "../../prop-types/FileType"; + +function HasAudio(props) { + const { className, ...other } = props; + return ; +} + +HasAudio.propTypes = { + /** + * Video file to be summarized. + */ + file: FileType, + className: PropTypes.string, +}; + +export default HasAudio; diff --git a/web/src/collection/components/FileSummary/HasExif.js b/web/src/collection/components/FileSummary/HasExif.js new file mode 100644 index 00000000..880b336d --- /dev/null +++ b/web/src/collection/components/FileSummary/HasExif.js @@ -0,0 +1,32 @@ +import React from "react"; +import PropTypes from "prop-types"; +import { formatBool } from "../../../common/helpers/format"; +import ExifIcon from "../../../common/components/icons/ExifIcon"; +import AttributeText from "../../../common/components/AttributeText"; +import { FileType } from "../../prop-types/FileType"; +import { useIntl } from "react-intl"; + +function HasExif(props) { + const { file, className, ...other } = props; + const intl = useIntl(); + + return ( + + ); +} + +HasExif.propTypes = { + /** + * Video file to be summarized. + */ + file: FileType, + className: PropTypes.string, +}; + +export default HasExif; diff --git a/web/src/collection/components/FileSummary/Name.js b/web/src/collection/components/FileSummary/Name.js new file mode 100644 index 00000000..cc9fa966 --- /dev/null +++ b/web/src/collection/components/FileSummary/Name.js @@ -0,0 +1,83 @@ +import React from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { makeStyles } from "@material-ui/styles"; +import { FileType } from "../../prop-types/FileType"; +import VideocamOutlinedIcon from "@material-ui/icons/VideocamOutlined"; +import AttributeText from "../../../common/components/AttributeText"; +import { useIntl } from "react-intl"; + +const useStyles = makeStyles((theme) => ({ + nameContainer: { + flexGrow: 1, + flexShrink: 1, + display: "flex", + alignItems: "center", + minWidth: 0, + }, + iconContainer: { + backgroundColor: theme.palette.primary.main, + width: theme.spacing(4.5), + height: theme.spacing(4.5), + display: "flex", + alignItems: "center", + justifyContent: "center", + borderRadius: theme.spacing(0.5), + marginRight: theme.spacing(3), + flexShrink: 0, + }, + icon: { + color: theme.palette.primary.contrastText, + width: theme.spacing(3.5), + height: theme.spacing(3.5), + }, + filename: { + minWidth: 0, + }, +})); + +/** + * Get i18n text. + */ +function useMessages() { + const intl = useIntl(); + return { + filename: intl.formatMessage({ id: "file.attr.name" }), + }; +} + +function Name(props) { + const { file, highlight, className, ...other } = props; + const classes = useStyles(); + const messages = useMessages(); + + return ( +
+
+ +
+ +
+ ); +} + +Name.propTypes = { + /** + * Video file to be summarized. + */ + file: FileType, + /** + * Highlight substring. + */ + highlight: PropTypes.string, + className: PropTypes.string, +}; + +export default Name; diff --git a/web/src/collection/components/FileSummary/Spacer.js b/web/src/collection/components/FileSummary/Spacer.js new file mode 100644 index 00000000..fcda5e44 --- /dev/null +++ b/web/src/collection/components/FileSummary/Spacer.js @@ -0,0 +1,23 @@ +import React from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { makeStyles } from "@material-ui/styles"; + +const useStyles = makeStyles((theme) => ({ + spacer: { + height: theme.spacing(4), + width: theme.spacing(6), + }, +})); + +function Spacer(props) { + const { className, ...other } = props; + const classes = useStyles(); + return
; +} + +Spacer.propTypes = { + className: PropTypes.string, +}; + +export default Spacer; diff --git a/web/src/collection/components/FileSummary/index.js b/web/src/collection/components/FileSummary/index.js new file mode 100644 index 00000000..ccd106e7 --- /dev/null +++ b/web/src/collection/components/FileSummary/index.js @@ -0,0 +1 @@ +export { default } from "./FileSummary"; diff --git a/web/src/collection/components/FileSummaryHeader/FileSummaryHeader.js b/web/src/collection/components/FileSummaryHeader/FileSummaryHeader.js index 1065fae2..b3fcb558 100644 --- a/web/src/collection/components/FileSummaryHeader/FileSummaryHeader.js +++ b/web/src/collection/components/FileSummaryHeader/FileSummaryHeader.js @@ -3,22 +3,15 @@ import clsx from "clsx"; import PropTypes from "prop-types"; import { makeStyles } from "@material-ui/styles"; import Paper from "@material-ui/core/Paper"; -import { FileType } from "../FileBrowserPage/FileType"; +import { FileType } from "../../prop-types/FileType"; import IconButton from "@material-ui/core/IconButton"; import ArrowBackOutlinedIcon from "@material-ui/icons/ArrowBackOutlined"; -import VideocamOutlinedIcon from "@material-ui/icons/VideocamOutlined"; -import AttributeText from "../../../common/components/AttributeText"; import { useIntl } from "react-intl"; import { useHistory } from "react-router"; -import { - formatBool, - formatDate, - formatDuration, -} from "../../../common/helpers/format"; -import ScheduleOutlinedIcon from "@material-ui/icons/ScheduleOutlined"; -import EventAvailableOutlinedIcon from "@material-ui/icons/EventAvailableOutlined"; -import ExifIcon from "../../../common/components/icons/ExifIcon"; -import VolumeOffOutlinedIcon from "@material-ui/icons/VolumeOffOutlined"; +import FileSummary from "../FileSummary"; +import useTheme from "@material-ui/styles/useTheme"; +import { useMediaQuery } from "@material-ui/core"; +import { routes } from "../../../routing/routes"; const useStyles = makeStyles((theme) => ({ header: { @@ -27,125 +20,57 @@ const useStyles = makeStyles((theme) => ({ display: "flex", alignItems: "center", }, - titleGroup: { + summary: { flexGrow: 1, - flexShrink: 1, - display: "flex", - alignItems: "center", + marginLeft: theme.spacing(2), + marginRight: theme.spacing(2), minWidth: 0, }, - iconContainer: { - backgroundColor: theme.palette.primary.main, - width: theme.spacing(4.5), - height: theme.spacing(4.5), - display: "flex", - alignItems: "center", - justifyContent: "center", - borderRadius: theme.spacing(0.5), - marginLeft: theme.spacing(1.5), - marginRight: theme.spacing(3), - flexShrink: 0, - }, - icon: { - color: theme.palette.primary.contrastText, - width: theme.spacing(3.5), - height: theme.spacing(3.5), - }, - filename: { - minWidth: 0, - }, - attrsGroup: { - display: "flex", - alignItems: "center", - }, - attr: { - marginLeft: theme.spacing(3), - marginRight: theme.spacing(3), - }, - divider: { - borderLeftStyle: "solid", - borderLeftColor: theme.palette.border.light, - borderLeftWidth: 1, - height: theme.spacing(4), - }, - extra: { - [theme.breakpoints.down("md")]: { - display: "none", - }, - }, })); +/** + * Get translated text. + */ function getMessages(intl) { return { - filename: intl.formatMessage({ id: "file.attr.name" }), - fingerprint: intl.formatMessage({ id: "file.attr.fingerprint" }), - quality: intl.formatMessage({ id: "file.attr.quality" }), goBack: intl.formatMessage({ id: "actions.goBack" }), }; } +/** + * Check if the screen is small. + */ +function useSmallScreen() { + const theme = useTheme(); + return useMediaQuery(theme.breakpoints.down("md")); +} + function FileSummaryHeader(props) { const { file, className } = props; const classes = useStyles(); const history = useHistory(); const intl = useIntl(); + const small = useSmallScreen(); const messages = getMessages(intl); - const back = history.length > 0; - const handleBack = useCallback(() => history.goBack(), [history]); + const handleBack = useCallback( + () => history.push(routes.collection.fingerprints, { keepFilters: true }), + [history] + ); return ( -
- {back && ( - - - - )} -
- -
- -
-
- -
- -
- -
- -
- -
-
+ + + + + + + + {!small && } + {!small && } + {!small && } + ); } diff --git a/web/src/collection/components/MatchGraph/D3Graph.js b/web/src/collection/components/MatchGraph/D3Graph.js index 547e902b..53153be1 100644 --- a/web/src/collection/components/MatchGraph/D3Graph.js +++ b/web/src/collection/components/MatchGraph/D3Graph.js @@ -1,4 +1,6 @@ import * as d3 from "d3"; +import { LinkTracker, NodeTracker } from "./tracking"; +import { getAdjacency } from "./prepareGraph"; /** * Remove all element's children. @@ -9,71 +11,243 @@ function removeChildren(element) { } } +const defaultOptions = { + nodeRadius: 10, + highlightHover: false, +}; + +function edgeWidth(edge) { + return Math.sqrt(50 * (1 - 0.8 * edge.distance)); +} + +const colorScheme = { + normal: { + origin: "#000000", + child: "#F75537", + grandChild: "#FF846D", + }, + inactive: { + origin: "#5F5F5F", + child: "#F9C8BF", + grandChild: "#FBD6CF", + }, +}; + +function nodeHoverPainter(hovered, adjacency, scheme) { + const adjacentColor = color(scheme.normal); + const nonAdjacentColor = color(scheme.inactive); + return (node) => { + if (node.id === hovered.id || adjacency.get(hovered.id).has(node.id)) { + return adjacentColor(node); + } + return nonAdjacentColor(node); + }; +} + +function linkHoverPainter(hovered, scheme) { + const adjacentColor = color(scheme.normal); + const nonAdjacentColor = color(scheme.inactive); + return (node) => { + if (node.id === hovered.source.id || node.id === hovered.target.id) { + return adjacentColor(node); + } + return nonAdjacentColor(node); + }; +} + +function color(scheme) { + return (node) => { + switch (node.generation) { + case 0: + return scheme.origin; + case 1: + return scheme.child; + default: + return scheme.grandChild; + } + }; +} + +const noop = () => {}; + export default class D3Graph { constructor({ links, nodes, container, - width = 500, - height = 500, classes = {}, + onClickNode = noop, + onMouseOverNode = noop, + onMouseOutNode = noop, + onMouseOverLink = noop, + onMouseOutLink = noop, + onClickEdge = noop, + options = {}, }) { this.links = links.map(Object.create); this.nodes = nodes.map(Object.create); - this.width = width; - this.height = height; + this.width = container?.clientWidth; + this.height = container?.clientHeight; this.container = container; this.classes = classes; + this.updateSize = null; + this.simulation = null; + this.onClickNode = onClickNode; + this.onClickEdge = onClickEdge; + this.onMouseOverNode = onMouseOverNode; + this.onMouseOutNode = onMouseOutNode; + this.onMouseOverLink = onMouseOverLink; + this.onMouseOutLink = onMouseOutLink; + this.options = { + ...defaultOptions, + ...options, + }; + this.adjacency = getAdjacency(links, nodes); + this._tracker = null; } /** * Display graph. */ display() { - const scale = d3.scaleOrdinal(d3.schemeCategory10); - const color = (d) => scale(d.group); - - const simulation = this._createForceSimulation(); + this.simulation = this._createForceSimulation(); removeChildren(this.container); let svg = d3 .select(this.container) - .attr("preserveAspectRatio", "xMaxYMid meet") + .attr("preserveAspectRatio", "xMidYMid meet") .attr("viewBox", [0, 0, this.width, this.height]) - .classed(this.classes.content, true); + .classed(this.classes.content, true) + .call( + d3.zoom().on("zoom", function (event) { + svg.attr("transform", event.transform); + }) + ) + .append("g"); - const link = svg + const links = svg .append("g") .attr("stroke", "#999") - .attr("stroke-opacity", 0.6) .selectAll("line") .data(this.links) .join("line") - .attr("stroke-width", (d) => Math.sqrt(d.value)); + .attr("stroke-opacity", (d) => 1 - 0.8 * d.distance) + .attr("opacity", 1.0) + .attr("stroke-width", (d) => edgeWidth(d)); - const node = svg + const hitBoxLinks = svg .append("g") - .attr("stroke", "#fff") + .selectAll("line") + .data(this.links) + .join("line") + .attr("stroke-width", 10) + .attr("stroke", "rgba(0,0,0,0)") + .style("cursor", "pointer"); + + const nodes = svg + .append("g") + .attr("stroke", "rgba(0,0,0,0)") .attr("stroke-width", 1.5) .selectAll("circle") .data(this.nodes) .join("circle") - .attr("r", 5) - .attr("fill", color) - .call(this._createDrag(simulation)); + .attr("r", this.options.nodeRadius) + .attr("fill", color(colorScheme.normal)) + .call(this._createDrag(this.simulation)) + .style("cursor", "pointer"); - node.append("title").text((d) => d.id); + this._hookNodeEvents(nodes, links); + this._hookLinksEvents(links, links, nodes); + this._hookLinksEvents(hitBoxLinks, links, nodes); - simulation.on("tick", () => { - link + this.simulation.on("tick", () => { + links .attr("x1", (d) => d.source.x) .attr("y1", (d) => d.source.y) .attr("x2", (d) => d.target.x) .attr("y2", (d) => d.target.y); - node.attr("cx", (d) => d.x).attr("cy", (d) => d.y); + hitBoxLinks + .attr("x1", (d) => d.source.x) + .attr("y1", (d) => d.source.y) + .attr("x2", (d) => d.target.x) + .attr("y2", (d) => d.target.y); + + nodes.attr("cx", (d) => d.x).attr("cy", (d) => d.y); + this.tracker?.track(); }); + + this.updateSize = () => { + this.width = this.container?.clientWidth; + this.height = this.container?.clientHeight; + svg + .attr("width", this.width) + .attr("height", this.height) + .attr("viewBox", [0, 0, this.width, this.height]) + .classed(this.classes.content, true); + this.simulation.force( + "center", + d3.forceCenter(this.width / 2, this.height / 2) + ); + this.simulation.restart(); + }; + window.addEventListener("resize", this.updateSize); + } + + _hookNodeEvents(nodes, links) { + const self = this; + + // Define mouse hover listeners for nodes + nodes + .on("mouseenter", function (event, node) { + self.tracker = self.makeNodeTracker(this, node); + self.tracker.track(event); + if (self.options.highlightHover) { + nodes.attr( + "fill", + nodeHoverPainter(node, self.adjacency, colorScheme) + ); + links.attr("opacity", (ln) => + ln.source.id === node.id || ln.target.id === node.id ? 1.0 : 0.4 + ); + } + }) + .on("mouseleave", function () { + self.tracker = null; + if (self.options.highlightHover) { + nodes.attr("fill", color(colorScheme.normal)); + links.attr("opacity", 1.0); + } + }) + .on("click", (_, node) => { + this.onClickNode(node); + }); + } + + _hookLinksEvents(targetLinks, displayLinks, nodes) { + const self = this; + + // Define mouse hover listeners for links + targetLinks + .on("mouseenter", function (event, edge) { + self.tracker = self.makeLinkTracker(this, edge); + self.tracker.track(event); + if (self.options.highlightHover) { + nodes.attr("fill", linkHoverPainter(edge, colorScheme)); + displayLinks.attr("opacity", (ln) => (ln === edge ? 1.0 : 0.4)); + } + }) + .on("mouseleave", function () { + self.tracker = null; + if (self.options.highlightHover) { + nodes.attr("fill", color(colorScheme.normal)); + displayLinks.attr("opacity", 1.0); + } + }) + .on("click", (_, edge) => { + this.onClickEdge({ source: edge.source.id, target: edge.target.id }); + }); } /** @@ -88,11 +262,13 @@ export default class D3Graph { } event.subject.fx = event.subject.x; event.subject.fy = event.subject.y; + this.tracker?.track(); }; const dragged = (event) => { event.subject.fx = event.x; event.subject.fy = event.y; + this.tracker?.track(); }; const dragEnded = (event) => { @@ -101,6 +277,7 @@ export default class D3Graph { } event.subject.fx = null; event.subject.fy = null; + this.tracker?.track(); }; return d3 @@ -120,9 +297,56 @@ export default class D3Graph { .forceSimulation(this.nodes) .force( "link", - d3.forceLink(this.links).id((d) => d.id) + d3 + .forceLink(this.links) + .id((d) => d.id) + .strength((d) => 1 - d.distance) ) - .force("charge", d3.forceManyBody()) + .force("charge", d3.forceManyBody().strength(-400)) .force("center", d3.forceCenter(this.width / 2, this.height / 2)); } + + get tracker() { + return this._tracker; + } + + set tracker(tracker) { + if (this._tracker != null) { + this._tracker.remove(); + } + this._tracker = tracker; + } + + /** + * Remove graph elements, remove all listeners, clear container. + */ + cleanup() { + removeChildren(this.container); + if (this.updateSize != null) { + window.removeEventListener("resize", this.updateSize); + this.updateSize = null; + } + if (this.simulation != null) { + this.simulation.stop(); + this.simulation = null; + } + } + + makeNodeTracker(element, node) { + return new NodeTracker( + element, + node, + this.onMouseOverNode, + this.onMouseOutNode + ); + } + + makeLinkTracker(element, link) { + return new LinkTracker( + element, + link, + this.onMouseOverLink, + this.onMouseOutLink + ); + } } diff --git a/web/src/collection/components/MatchGraph/LinkTooltip.js b/web/src/collection/components/MatchGraph/LinkTooltip.js new file mode 100644 index 00000000..36c12f80 --- /dev/null +++ b/web/src/collection/components/MatchGraph/LinkTooltip.js @@ -0,0 +1,99 @@ +import React from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { makeStyles } from "@material-ui/styles"; +import Distance from "../../../common/components/Distance"; +import Paper from "@material-ui/core/Paper"; +import VideocamOutlinedIcon from "@material-ui/icons/VideocamOutlined"; +import { basename } from "../../../common/helpers/paths"; +import { formatDuration } from "../../../common/helpers/format"; +import { useIntl } from "react-intl"; +import FileType from "../../prop-types/FileType"; + +const useStyles = makeStyles((theme) => ({ + root: { + padding: theme.spacing(1), + }, + distance: { + minWidth: 200, + }, + fileContainer: { + display: "flex", + alignItems: "center", + paddingBottom: theme.spacing(1), + }, + name: { + ...theme.mixins.textEllipsis, + ...theme.mixins.title5, + flexGrow: 1, + maxWidth: 300, + marginRight: theme.spacing(1), + }, + icon: { + color: theme.palette.primary.contrastText, + width: theme.spacing(2), + height: theme.spacing(2), + }, + iconContainer: { + backgroundColor: theme.palette.primary.main, + width: theme.spacing(3), + height: theme.spacing(3), + display: "flex", + alignItems: "center", + justifyContent: "center", + flexShrink: 0, + marginRight: theme.spacing(1), + }, + duration: { + ...theme.mixins.valueNormal, + color: theme.palette.primary.main, + }, +})); + +function LinkTooltip(props) { + const { link, className, ...other } = props; + const classes = useStyles(); + const intl = useIntl(); + + return ( + +
+
+ +
+
+ {basename(link.source.file.filename)} +
+
+ {formatDuration(link.source.file.metadata.length, intl)} +
+
+
+
+ +
+
+ {basename(link.target.file.filename)} +
+
+ {formatDuration(link.target.file.metadata.length, intl)} +
+
+ +
+ ); +} + +LinkTooltip.propTypes = { + /** + * Link being summarized. + */ + link: PropTypes.shape({ + distance: PropTypes.number.isRequired, + source: FileType.isRequired, + target: FileType.isRequired, + }), + className: PropTypes.string, +}; + +export default LinkTooltip; diff --git a/web/src/collection/components/MatchGraph/MatchGraph.js b/web/src/collection/components/MatchGraph/MatchGraph.js index 51ef0c4b..84d8b7ab 100644 --- a/web/src/collection/components/MatchGraph/MatchGraph.js +++ b/web/src/collection/components/MatchGraph/MatchGraph.js @@ -1,70 +1,119 @@ -import React, { useEffect, useRef } from "react"; +import React, { useCallback, useEffect, useRef, useState } from "react"; import clsx from "clsx"; import PropTypes from "prop-types"; import { makeStyles } from "@material-ui/styles"; import D3Graph from "./D3Graph"; -import MatchType from "../FileMatchesPage/MatchType"; -import FileType from "../FileBrowserPage/FileType"; +import MatchType from "../../prop-types/MatchType"; +import FileType from "../../prop-types/FileType"; +import { useHistory } from "react-router-dom"; +import { routes } from "../../../routing/routes"; +import prepareGraph from "./prepareGraph"; +import useTooltip from "./useTooltip"; +import NodeTooltip from "./NodeTooltip"; +import LinkTooltip from "./LinkTooltip"; +import comparisonURL from "./helpers"; -const useStyles = makeStyles(() => ({ +const useStyles = makeStyles((theme) => ({ root: { - display: "flex", - alignItems: "center", - justifyContent: "center", + margin: theme.spacing(2), }, content: { - height: 500, + width: "100%", + minHeight: 500, + }, + tooltip: { + position: "absolute", + textAlign: "center", + padding: theme.spacing(2), + backgroundColor: theme.palette.common.white, + borderRadius: theme.spacing(2), + boxShadow: "0 12px 18px 0 rgba(0,0,0,0.08)", + }, + popover: { + position: "fixed", + marginLeft: theme.spacing(3), }, })); -/** - * Get collection of links compatible with D3Graph. - */ -function getLinks(source, matches) { - return matches.map((match) => ({ - source: source.id, - target: match.file.id, - value: 10 * (1 - match.distance), - })); -} - -/** - * Get collection of nodes compatible with D3Graph - */ -function getNodes(source, matches) { - return [ - { id: source.id, group: 2 }, - ...matches.map((match) => ({ id: match.file.id, group: 1 })), - ]; -} - function MatchGraph(props) { - const { source, matches, className } = props; + const { source, matches, files, className } = props; const classes = useStyles(); const ref = useRef(null); + const [graph, setGraph] = useState(null); + const nodeTooltip = useTooltip(); + const linkTooltip = useTooltip(); + const history = useHistory(); + + const handleClickFile = useCallback( + (node) => history.push(routes.collection.fileURL(node.file.id)), + [] + ); + + const handleClickMatch = useCallback( + (link) => history.push(comparisonURL(source.id, link)), + [source] + ); useEffect(() => { if (ref.current != null) { - const graph = new D3Graph({ - links: getLinks(source, matches), - nodes: getNodes(source, matches), + if (graph != null) { + graph.cleanup(); + } + const { nodes, links } = prepareGraph(source, matches, files); + const newGraph = new D3Graph({ + links, + nodes, container: ref.current, - classes: { content: classes.content }, + classes: { content: classes.content, tooltip: classes.tooltip }, + onClickNode: handleClickFile, + onClickEdge: handleClickMatch, + onMouseOverNode: nodeTooltip.onMouseOver, + onMouseOutNode: nodeTooltip.onMouseOut, + onMouseOverLink: linkTooltip.onMouseOver, + onMouseOutLink: linkTooltip.onMouseOut, + options: { + highlightHover: true, + }, }); - graph.display(); + newGraph.display(); + setGraph(newGraph); } - }, [ref.current, source, matches]); + }, [ref.current, source.id]); return (
+ {nodeTooltip.show && ( + + )} + {linkTooltip.show && ( + + )}
); } MatchGraph.propTypes = { + /** + * A initial file for which all similar files were selected + */ source: FileType.isRequired, + /** + * Similarity relationship between files + */ matches: PropTypes.arrayOf(MatchType).isRequired, + /** + * Similar files map + */ + files: PropTypes.object.isRequired, className: PropTypes.string, }; diff --git a/web/src/collection/components/MatchGraph/NodeTooltip.js b/web/src/collection/components/MatchGraph/NodeTooltip.js new file mode 100644 index 00000000..043dbb4c --- /dev/null +++ b/web/src/collection/components/MatchGraph/NodeTooltip.js @@ -0,0 +1,72 @@ +import React from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { makeStyles } from "@material-ui/styles"; +import FileType from "../../prop-types/FileType"; +import Paper from "@material-ui/core/Paper"; +import VideocamOutlinedIcon from "@material-ui/icons/VideocamOutlined"; +import { basename } from "../../../common/helpers/paths"; +import { formatDuration } from "../../../common/helpers/format"; +import { useIntl } from "react-intl"; + +const useStyles = makeStyles((theme) => ({ + root: { + padding: theme.spacing(1), + display: "flex", + alignItems: "center", + }, + name: { + ...theme.mixins.textEllipsis, + ...theme.mixins.title5, + flexGrow: 1, + maxWidth: 300, + marginRight: theme.spacing(1), + }, + icon: { + color: theme.palette.primary.contrastText, + width: theme.spacing(2), + height: theme.spacing(2), + }, + iconContainer: { + backgroundColor: theme.palette.primary.main, + width: theme.spacing(3), + height: theme.spacing(3), + display: "flex", + alignItems: "center", + justifyContent: "center", + flexShrink: 0, + marginRight: theme.spacing(1), + }, + duration: { + ...theme.mixins.valueNormal, + color: theme.palette.primary.main, + }, +})); + +function NodeTooltip(props) { + const { file, className, ...other } = props; + const classes = useStyles(); + const intl = useIntl(); + + return ( + +
+ +
+
{basename(file.filename)}
+
+ {formatDuration(file.metadata.length, intl)} +
+
+ ); +} + +NodeTooltip.propTypes = { + /** + * File to be summarized. + */ + file: FileType.isRequired, + className: PropTypes.string, +}; + +export default NodeTooltip; diff --git a/web/src/collection/components/MatchGraph/helpers.js b/web/src/collection/components/MatchGraph/helpers.js new file mode 100644 index 00000000..328925e5 --- /dev/null +++ b/web/src/collection/components/MatchGraph/helpers.js @@ -0,0 +1,15 @@ +import { routes } from "../../../routing/routes"; + +/** + * Get comparison page url for the given link. + * + * @param origin id of the mother file. + * @param link graph link between two related files. + */ +export default function comparisonURL(origin, link) { + const [source, target] = + link.source === origin + ? [link.source, link.target] + : [link.target, link.source]; + return routes.collection.fileComparisonURL(source, target); +} diff --git a/web/src/collection/components/MatchGraph/prepareGraph.js b/web/src/collection/components/MatchGraph/prepareGraph.js new file mode 100644 index 00000000..9097ad8f --- /dev/null +++ b/web/src/collection/components/MatchGraph/prepareGraph.js @@ -0,0 +1,97 @@ +/** + * For each node create a data structure expected by the D3Graph + * and return nodes as an index (node.id => node). + */ +function createNodes(files) { + return Object.values(files).map((file) => ({ + id: file.id, + file: file, + })); +} + +/** + * Convert matches to links expected byt the D3Graph class. + */ +function createLinks(matches) { + return matches.map((match) => ({ + source: match.source, + target: match.target, + distance: match.distance, + })); +} + +/** + * Calculate adjacency table (node.id => set of adjacent node ids). + */ +export function getAdjacency(links, nodes) { + const adjacency = new Map(); + for (let node of nodes) { + adjacency.set(node.id, new Set()); + } + for (let link of links) { + adjacency.get(link.source).add(link.target); + adjacency.get(link.target).add(link.source); + } + return adjacency; +} + +/** + * Calculate node generation for each node, where generation is a length + * of shortest path from the origin node to the given node. + * + * @param origin origin node id + * @param adjacency mapping: node.id => set of adjacent node ids. + * @returns {Map} node generation by id. + */ +function getNodeGenerations(origin, adjacency) { + const generations = new Map(); + generations.set(origin, 0); + const seen = new Set([origin]); + + let generation = 0; + let currentGeneration = new Set([origin]); + let nextGeneration = new Set(); + while (currentGeneration.size > 0) { + for (const parent of currentGeneration) { + for (const child of adjacency.get(parent)) { + if (!seen.has(child)) { + generations.set(child, generation + 1); + nextGeneration.add(child); + seen.add(child); + } + } + generation += 1; + currentGeneration = nextGeneration; + nextGeneration = new Set(); + } + } + return generations; +} + +/** + * Prepare nodes and links as expected by D3Graph class. + * + * @param originFile mother file. + * @param matches list of matches + * @param files list of related files + * @returns {{nodes: any[], links: any[]}} + */ +export default function prepareGraph(originFile, matches, files) { + const nodes = createNodes(files); + const links = createLinks(matches); + const adjacency = getAdjacency(links, nodes); + const nodeGenerations = getNodeGenerations(originFile.id, adjacency); + + for (const node of nodes.values()) { + node.generation = nodeGenerations.get(node.id); + } + + for (const link of links) { + link.generation = Math.min( + nodeGenerations.get(link.source), + nodeGenerations.get(link.target) + ); + } + + return { links, nodes }; +} diff --git a/web/src/collection/components/MatchGraph/tracking.js b/web/src/collection/components/MatchGraph/tracking.js new file mode 100644 index 00000000..b58e951c --- /dev/null +++ b/web/src/collection/components/MatchGraph/tracking.js @@ -0,0 +1,57 @@ +/** + * Class to calculate position relative to node. + */ +export class NodeTracker { + constructor(element, node, onMove, onRemove) { + this.element = element; + this.node = node; + this.onMove = onMove; + this.onRemove = onRemove; + } + + /** + * Call move listener. + */ + track() { + const clientRect = this.element.getBoundingClientRect(); + const position = { + top: clientRect.top, + left: clientRect.left + clientRect.width, + }; + this.onMove(this.element, this.node, position); + } + + remove() { + this.onRemove(this.element, this.node); + } +} + +/** + * Class to calculate position relative to link. + */ +export class LinkTracker { + constructor(element, link, onMove, onRemove) { + this.element = element; + this.link = link; + this.onMove = onMove; + this.onRemove = onRemove; + } + + /** + * Call move listener. + */ + track(event) { + if (event == null) { + return; + } + const position = { + top: event.clientY, + left: event.clientX, + }; + this.onMove(this.element, this.link, position); + } + + remove() { + this.onRemove(this.element, this.link); + } +} diff --git a/web/src/collection/components/MatchGraph/useTooltip.js b/web/src/collection/components/MatchGraph/useTooltip.js new file mode 100644 index 00000000..638e656b --- /dev/null +++ b/web/src/collection/components/MatchGraph/useTooltip.js @@ -0,0 +1,33 @@ +import { useCallback, useState } from "react"; + +/** + * Manage state and callbacks required for interactive tooltip. + */ +export default function useTooltip() { + const [anchorEl, setAnchorEl] = useState(null); + const [show, setShow] = useState(false); + const [position, setPosition] = useState({ top: 0, left: 0 }); + const [data, setData] = useState(null); + + const onMouseOver = useCallback((element, data, position) => { + setAnchorEl(element); + setPosition(position); + setData(data); + setShow(true); + }, []); + + const onMouseOut = useCallback(() => { + setShow(false); + setAnchorEl(null); + setData(null); + }, []); + + return { + data, + show, + anchorEl, + position, + onMouseOver, + onMouseOut, + }; +} diff --git a/web/src/collection/components/VideoDetailsPage/ExifPanel.js b/web/src/collection/components/VideoDetailsPage/ExifPanel.js index a485383d..8c22b539 100644 --- a/web/src/collection/components/VideoDetailsPage/ExifPanel.js +++ b/web/src/collection/components/VideoDetailsPage/ExifPanel.js @@ -2,7 +2,7 @@ import React, { useState } from "react"; import clsx from "clsx"; import PropTypes from "prop-types"; import { makeStyles } from "@material-ui/styles"; -import { FileType } from "../FileBrowserPage/FileType"; +import { FileType } from "../../prop-types/FileType"; import { SelectableTab, SelectableTabs, diff --git a/web/src/collection/components/VideoDetailsPage/FileInfoPanel.js b/web/src/collection/components/VideoDetailsPage/FileInfoPanel.js index 8479bf77..91798d88 100644 --- a/web/src/collection/components/VideoDetailsPage/FileInfoPanel.js +++ b/web/src/collection/components/VideoDetailsPage/FileInfoPanel.js @@ -2,7 +2,7 @@ import React from "react"; import clsx from "clsx"; import PropTypes from "prop-types"; import { makeStyles } from "@material-ui/styles"; -import { FileType } from "../FileBrowserPage/FileType"; +import { FileType } from "../../prop-types/FileType"; import Table from "@material-ui/core/Table"; import TableBody from "@material-ui/core/TableBody"; import TableRow from "@material-ui/core/TableRow"; diff --git a/web/src/collection/components/VideoDetailsPage/ObjectTimeLine/ObjectGroup.js b/web/src/collection/components/VideoDetailsPage/ObjectTimeLine/ObjectGroup.js index 8494220d..6f940e51 100644 --- a/web/src/collection/components/VideoDetailsPage/ObjectTimeLine/ObjectGroup.js +++ b/web/src/collection/components/VideoDetailsPage/ObjectTimeLine/ObjectGroup.js @@ -2,7 +2,7 @@ import React, { useCallback } from "react"; import clsx from "clsx"; import PropTypes from "prop-types"; import { makeStyles } from "@material-ui/styles"; -import ObjectType from "../ObjectType"; +import ObjectType from "../../../prop-types/ObjectType"; import usePopup from "../../../../common/hooks/usePopup"; import ObjectGroupPopper from "./ObjectGroupPopper"; import { ButtonBase } from "@material-ui/core"; diff --git a/web/src/collection/components/VideoDetailsPage/ObjectTimeLine/ObjectGroupPopper.js b/web/src/collection/components/VideoDetailsPage/ObjectTimeLine/ObjectGroupPopper.js index cc53f965..8134a152 100644 --- a/web/src/collection/components/VideoDetailsPage/ObjectTimeLine/ObjectGroupPopper.js +++ b/web/src/collection/components/VideoDetailsPage/ObjectTimeLine/ObjectGroupPopper.js @@ -2,7 +2,7 @@ import React, { useCallback, useState } from "react"; import clsx from "clsx"; import PropTypes from "prop-types"; import { makeStyles } from "@material-ui/styles"; -import ObjectType from "../ObjectType"; +import ObjectType from "../../../prop-types/ObjectType"; import Popper from "@material-ui/core/Popper"; import Paper from "@material-ui/core/Paper"; import ClickAwayListener from "@material-ui/core/ClickAwayListener"; diff --git a/web/src/collection/components/VideoDetailsPage/ObjectTimeLine/ObjectPreview.js b/web/src/collection/components/VideoDetailsPage/ObjectTimeLine/ObjectPreview.js index 5a47a530..48ab17a0 100644 --- a/web/src/collection/components/VideoDetailsPage/ObjectTimeLine/ObjectPreview.js +++ b/web/src/collection/components/VideoDetailsPage/ObjectTimeLine/ObjectPreview.js @@ -2,7 +2,7 @@ import React, { useEffect, useRef } from "react"; import clsx from "clsx"; import PropTypes from "prop-types"; import { makeStyles } from "@material-ui/styles"; -import ObjectType from "../ObjectType"; +import ObjectType from "../../../prop-types/ObjectType"; import ButtonBase from "@material-ui/core/ButtonBase"; import { useIntl } from "react-intl"; import { objectKind, objectTime } from "./helpers"; diff --git a/web/src/collection/components/VideoDetailsPage/ObjectTimeLine/ObjectTimeLine.js b/web/src/collection/components/VideoDetailsPage/ObjectTimeLine/ObjectTimeLine.js index ad97494c..9c89e02a 100644 --- a/web/src/collection/components/VideoDetailsPage/ObjectTimeLine/ObjectTimeLine.js +++ b/web/src/collection/components/VideoDetailsPage/ObjectTimeLine/ObjectTimeLine.js @@ -2,7 +2,7 @@ import React from "react"; import clsx from "clsx"; import PropTypes from "prop-types"; import { makeStyles } from "@material-ui/styles"; -import { FileType } from "../../FileBrowserPage/FileType"; +import { FileType } from "../../../prop-types/FileType"; import ObjectGroup from "./ObjectGroup"; import { groupObjects } from "../groupObjects"; import { useIntl } from "react-intl"; @@ -31,9 +31,9 @@ function ObjectTimeLine(props) { className={clsx(classes.timeline, className)} aria-label={intl.formatMessage({ id: "aria.label.objectTimeline" })} > - {groups.map((group) => ( + {groups.map((group, index) => ( ({ sceneSelector: { @@ -13,12 +15,20 @@ const useStyles = makeStyles((theme) => ({ flexDirection: "column", alignItems: "stretch", }, + header: { + display: "flex", + alignItems: "center", + }, title: { ...theme.mixins.title3, fontWeight: "bold", - marginBottom: theme.spacing(2), + flexGrow: 1, + }, + collapseButton: { + flexGrow: 0, }, scenes: { + marginTop: theme.spacing(2), marginBottom: theme.spacing(1), }, scene: { @@ -49,27 +59,43 @@ function useMessages() { } function SceneSelector(props) { - const { scenes, played, onSelect, className } = props; + const { scenes, played, onSelect, collapsible, className } = props; const classes = useStyles(); const selected = selectedScene(scenes, played); const messages = useMessages(); + const [collapsed, setCollapsed] = useState(false); + + const handleCollapse = useCallback(() => setCollapsed(!collapsed), [ + collapsed, + ]); return (
-
- {scenes.length} {messages.scenes} -
- - {scenes.map((scene, index) => ( - +
+ {scenes.length} {messages.scenes} +
+ {collapsible && ( + - ))} -
+ )} +
+ + + {scenes.map((scene, index) => ( + + ))} + +
); } @@ -87,6 +113,10 @@ SceneSelector.propTypes = { * Current playback position used to determine scene being displayed */ played: PropTypes.number, + /** + * Enable or disable pane collapse feature. + */ + collapsible: PropTypes.bool, className: PropTypes.string, }; diff --git a/web/src/collection/components/VideoDetailsPage/VideoDetailsPage.js b/web/src/collection/components/VideoDetailsPage/VideoDetailsPage.js index c2c6ed0f..6164231f 100644 --- a/web/src/collection/components/VideoDetailsPage/VideoDetailsPage.js +++ b/web/src/collection/components/VideoDetailsPage/VideoDetailsPage.js @@ -10,9 +10,10 @@ import VideoInformationPane from "./VideoInformationPane"; import { seekTo } from "./seekTo"; import FileSummaryHeader from "../FileSummaryHeader"; import FileActionHeader from "../FileActionsHeader"; -import { useParams } from "react-router-dom"; +import { useHistory, useParams } from "react-router-dom"; import FileLoadingHeader from "../FileLoadingHeader"; import useFile from "../../hooks/useFile"; +import { routes } from "../../../routing/routes"; const useStyles = makeStyles((theme) => ({ root: { @@ -69,6 +70,12 @@ function VideoDetailsPage(props) { const { file, error, loadFile } = useFile(id); const [player, setPlayer] = useState(null); const classes = useStyles(); + const history = useHistory(); + + const handleCompare = useCallback( + () => history.push(routes.collection.fileComparisonURL(id)), + [id] + ); const handleJump = useCallback(seekTo(player, file), [player, file]); @@ -92,7 +99,7 @@ function VideoDetailsPage(props) { return (
- diff --git a/web/src/collection/components/VideoDetailsPage/VideoInformation.js b/web/src/collection/components/VideoDetailsPage/VideoInformation.js new file mode 100644 index 00000000..aa3fede9 --- /dev/null +++ b/web/src/collection/components/VideoDetailsPage/VideoInformation.js @@ -0,0 +1,95 @@ +import React, { useState } from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { makeStyles } from "@material-ui/styles"; +import { FileType } from "../../prop-types/FileType"; +import FileInfoPanel from "./FileInfoPanel"; +import ObjectsPanel from "./ObjectsPanel"; +import ExifPanel from "./ExifPanel"; +import { useIntl } from "react-intl"; +import { + SelectableTab, + SelectableTabs, +} from "../../../common/components/SelectableTabs"; + +const useStyles = makeStyles((theme) => ({ + root: { + display: "flex", + flexDirection: "column", + alignItems: "stretch", + }, + tabs: { + maxWidth: 400, + margin: theme.spacing(3), + }, + data: {}, +})); + +/** + * Tabs enum for ideomatic access + */ +const Tab = { + info: "info", + objects: "objects", + exif: "exif", +}; + +/** + * Select data-presentation panel + */ +function dataComponent(tab) { + switch (tab) { + case Tab.info: + return FileInfoPanel; + case Tab.objects: + return ObjectsPanel; + case Tab.exif: + return ExifPanel; + default: + console.error(`Unknown tab: ${tab}`); + return "div"; + } +} + +function useMessages() { + const intl = useIntl(); + return { + info: intl.formatMessage({ id: "file.tabInfo" }), + objects: intl.formatMessage({ id: "file.tabObjects" }), + exif: intl.formatMessage({ id: "file.tabExif" }), + }; +} + +function VideoInformation(props) { + const { file, onJump, className, ...other } = props; + const classes = useStyles(); + const messages = useMessages(); + const [tab, setTab] = useState(Tab.info); + + const DataPanel = dataComponent(tab); + + return ( +
+ + + + + + +
+ ); +} + +VideoInformation.propTypes = { + /** + * Video file + */ + file: FileType.isRequired, + /** + * Jump to a particular object + */ + onJump: PropTypes.func, + className: PropTypes.string, +}; + +export default VideoInformation; diff --git a/web/src/collection/components/VideoDetailsPage/VideoInformationPane.js b/web/src/collection/components/VideoDetailsPage/VideoInformationPane.js index 68baea80..b06231d3 100644 --- a/web/src/collection/components/VideoDetailsPage/VideoInformationPane.js +++ b/web/src/collection/components/VideoDetailsPage/VideoInformationPane.js @@ -1,64 +1,21 @@ -import React, { useState } from "react"; +import React from "react"; import clsx from "clsx"; import PropTypes from "prop-types"; import { makeStyles } from "@material-ui/styles"; -import { FileType } from "../FileBrowserPage/FileType"; +import { FileType } from "../../prop-types/FileType"; import Paper from "@material-ui/core/Paper"; -import { - SelectableTab, - SelectableTabs, -} from "../../../common/components/SelectableTabs"; -import ExifPanel from "./ExifPanel"; -import ObjectsPanel from "./ObjectsPanel"; -import FileInfoPanel from "./FileInfoPanel"; import { useIntl } from "react-intl"; +import VideoInformation from "./VideoInformation"; -const useStyles = makeStyles((theme) => ({ +const useStyles = makeStyles({ root: { boxShadow: "0 12px 18px 0 rgba(0,0,0,0.08)", - display: "flex", - flexDirection: "column", - alignItems: "stretch", }, - tabs: { - maxWidth: 400, - margin: theme.spacing(3), - }, - data: {}, -})); - -/** - * Tabs enum for ideomatic access - */ -const Tab = { - info: "info", - objects: "objects", - exif: "exif", -}; - -/** - * Select data-presentation panel - */ -function dataComponent(tab) { - switch (tab) { - case Tab.info: - return FileInfoPanel; - case Tab.objects: - return ObjectsPanel; - case Tab.exif: - return ExifPanel; - default: - console.error(`Unknown tab: ${tab}`); - return "div"; - } -} +}); function useMessages() { const intl = useIntl(); return { - info: intl.formatMessage({ id: "file.tabInfo" }), - objects: intl.formatMessage({ id: "file.tabObjects" }), - exif: intl.formatMessage({ id: "file.tabExif" }), ariaLabel: intl.formatMessage({ id: "aria.label.fileAttributesRegion" }), }; } @@ -67,9 +24,6 @@ function VideoInformationPane(props) { const { file, onJump, className } = props; const classes = useStyles(); const messages = useMessages(); - const [tab, setTab] = useState(Tab.info); - - const DataPanel = dataComponent(tab); return ( - - - - - - + ); } diff --git a/web/src/collection/components/VideoDetailsPage/VideoPlayer.js b/web/src/collection/components/VideoDetailsPage/VideoPlayer.js index a5e5ce1b..3eecf64e 100644 --- a/web/src/collection/components/VideoDetailsPage/VideoPlayer.js +++ b/web/src/collection/components/VideoDetailsPage/VideoPlayer.js @@ -2,13 +2,50 @@ import React, { useCallback, useEffect, useMemo, useState } from "react"; import clsx from "clsx"; import PropTypes from "prop-types"; import { makeStyles } from "@material-ui/styles"; -import { FileType } from "../FileBrowserPage/FileType"; +import { FileType } from "../../prop-types/FileType"; import MediaPreview from "../../../common/components/MediaPreview"; import ReactPlayer from "react-player"; +import { FLV_GLOBAL } from "react-player/lib/players/FilePlayer"; +import flvjs from "flv.js"; import TimeCaption from "./TimeCaption"; import VideoController from "./VideoController"; +import { useServer } from "../../../server-api/context"; +import { Status } from "../../../server-api/Response"; +import { useIntl } from "react-intl"; +import WarningOutlinedIcon from "@material-ui/icons/WarningOutlined"; -const useStyles = makeStyles(() => ({ +/** + * Setup bundled flv.js. + * + * By default react-player tries to lazy-load playback SDK from CDN. + * But the application must be able play video files when Internet + * connection is not available. To solve that we bundle flv.js and + * initialize global variable consumed by react-player's FilePlayer. + * + * See https://www.npmjs.com/package/react-player#sdk-overrides + * See https://github.com/CookPete/react-player/issues/605#issuecomment-492561909 + */ +function setupBundledFlvJs(options = { suppressLogs: false }) { + const FLV_VAR = FLV_GLOBAL || "flvjs"; + if (window[FLV_VAR] == null) { + window[FLV_VAR] = flvjs; + } + + // Disable flv.js error messages and info messages (#149) + if (options.suppressLogs) { + flvjs.LoggingControl.enableError = false; + flvjs.LoggingControl.enableVerbose = false; + + const doCreatePlayer = flvjs.createPlayer; + flvjs.createPlayer = (mediaDataSource, optionalConfig) => { + const player = doCreatePlayer(mediaDataSource, optionalConfig); + player.on("error", () => {}); + return player; + }; + } +} + +const useStyles = makeStyles((theme) => ({ container: {}, preview: { width: "100%", @@ -19,28 +56,85 @@ const useStyles = makeStyles(() => ({ height: "100%", maxHeight: 300, }, + error: { + display: "flex", + flexDirection: "column", + alignItems: "center", + justifyContent: "center", + width: "100%", + height: "100%", + backgroundColor: theme.palette.common.black, + color: theme.palette.grey[500], + ...theme.mixins.text, + }, + errorIcon: { + margin: theme.spacing(2), + }, })); function makePreviewActions(handleWatch) { return [{ name: "Watch Video", handler: handleWatch }]; } +/** + * Get i18n text. + */ +function useMessages() { + const intl = useIntl(); + return { + notFoundError: intl.formatMessage({ id: "video.error.missing" }), + loadError: intl.formatMessage({ id: "video.error.load" }), + playbackError: intl.formatMessage({ id: "video.error.playback" }), + }; +} + const VideoPlayer = function VideoPlayer(props) { - const { file, onReady, onProgress, className } = props; + const { + file, + onReady, + onProgress, + suppressErrors = false, + className, + } = props; const classes = useStyles(); + const server = useServer(); + const messages = useMessages(); const [watch, setWatch] = useState(false); const [player, setPlayer] = useState(null); + const [error, setError] = useState(null); const handleWatch = useCallback(() => setWatch(true), []); const controller = useMemo(() => new VideoController(player, setWatch), []); const previewActions = useMemo(() => makePreviewActions(handleWatch), []); + // Reset player on file change + useEffect(() => { + setWatch(false); + setPlayer(null); + setError(null); + controller._setPlayer(null); + }, [file]); + + // Make sure flv.js is available + useEffect(() => setupBundledFlvJs({ suppressLogs: suppressErrors }), []); + // Provide controller to the consumer useEffect(() => onReady && onReady(controller), [onReady]); // Update controlled player useEffect(() => controller._setPlayer(player), [player]); + // Check if video is available + useEffect(() => { + server.probeVideoFile({ id: file.id }).then((response) => { + if (response.status === Status.NOT_FOUND) { + setError(messages.notFoundError); + } else if (response.status !== Status.OK) { + setError(messages.loadError); + } + }); + }, [server, file.id]); + // Enable support for flv files. // See https://github.com/CookPete/react-player#config-prop const exifType = file?.exif?.General_FileExtension?.trim(); @@ -59,7 +153,7 @@ const VideoPlayer = function VideoPlayer(props) { onMediaClick={handleWatch} /> )} - {watch && ( + {watch && error == null && ( setError(messages.playbackError)} config={{ file: { forceFLV, @@ -75,6 +170,12 @@ const VideoPlayer = function VideoPlayer(props) { }} /> )} + {watch && error != null && ( +
+ + {error} +
+ )}
); }; @@ -110,6 +211,11 @@ VideoPlayer.propTypes = { * https://www.npmjs.com/package/react-player#callback-props */ onProgress: PropTypes.func, + + /** + * Suppress error logs. + */ + suppressErrors: PropTypes.bool, className: PropTypes.string, }; diff --git a/web/src/collection/components/VideoDetailsPage/VideoPlayerPane.js b/web/src/collection/components/VideoDetailsPage/VideoPlayerPane.js index 334e233b..a355ef9e 100644 --- a/web/src/collection/components/VideoDetailsPage/VideoPlayerPane.js +++ b/web/src/collection/components/VideoDetailsPage/VideoPlayerPane.js @@ -3,12 +3,14 @@ import clsx from "clsx"; import PropTypes from "prop-types"; import { makeStyles } from "@material-ui/styles"; import Paper from "@material-ui/core/Paper"; -import { FileType } from "../FileBrowserPage/FileType"; +import { FileType } from "../../prop-types/FileType"; import VideoPlayer from "./VideoPlayer"; import SceneSelector from "./SceneSelector"; import ObjectTimeLine from "./ObjectTimeLine"; import { seekTo } from "./seekTo"; import { useIntl } from "react-intl"; +import CollapseButton from "../../../common/components/CollapseButton"; +import Collapse from "@material-ui/core/Collapse"; const useStyles = makeStyles((theme) => ({ root: { @@ -17,14 +19,27 @@ const useStyles = makeStyles((theme) => ({ flexDirection: "column", alignItems: "stretch", }, + header: { + padding: theme.spacing(2), + display: "flex", + alignItems: "center", + }, title: { ...theme.mixins.title3, fontWeight: "bold", + flexGrow: 1, + }, + collapseButton: { + flexGrow: 0, + }, + playerArea: { padding: theme.spacing(2), + display: "flex", + flexDirection: "column", + alignItems: "stretch", }, player: { height: 300, - margin: theme.spacing(2), }, objects: { margin: theme.spacing(2), @@ -53,13 +68,17 @@ function useMessages() { } function VideoPlayerPane(props) { - const { file, onPlayerReady, className } = props; + const { file, onPlayerReady, collapsible = false, className } = props; const classes = useStyles(); const messages = useMessages(); const [player, setPlayer] = useState(null); const [progress, setProgress] = useState({ played: 0 }); + const [collapsed, setCollapsed] = useState(false); const handleJump = useCallback(seekTo(player, file), [player, file]); + const handleCollapse = useCallback(() => setCollapsed(!collapsed), [ + collapsed, + ]); return ( -
{messages.video}
- - +
+
{messages.video}
+ {collapsible && ( + + )} +
+ +
+ + +
+
); @@ -99,6 +133,10 @@ VideoPlayerPane.propTypes = { * Return video-player controller */ onPlayerReady: PropTypes.func, + /** + * Enable or disable pane collapse feature. + */ + collapsible: PropTypes.bool, className: PropTypes.string, }; diff --git a/web/src/collection/components/VideoDetailsPage/seekTo.js b/web/src/collection/components/VideoDetailsPage/seekTo.js index db1c7e41..78fd672c 100644 --- a/web/src/collection/components/VideoDetailsPage/seekTo.js +++ b/web/src/collection/components/VideoDetailsPage/seekTo.js @@ -2,7 +2,8 @@ * Create callback to seek to the given position in video file */ export function seekTo(player, file) { - // always add 1 millisecond to workaround ReactPlayer's NPE bug + // Always add 1 millisecond to position to workaround ReactPlayer's NPE bug. + // Always add 1 millisecond to file length to handle zero file length. return (object) => - player.seekTo((object.position + 1) / file.metadata.length); + player.seekTo((object.position + 1) / (file.metadata.length + 1)); } diff --git a/web/src/collection/hooks/useFile.js b/web/src/collection/hooks/useFile.js index 1cf83d1e..bd26d3e8 100644 --- a/web/src/collection/hooks/useFile.js +++ b/web/src/collection/hooks/useFile.js @@ -2,7 +2,8 @@ import { useCallback, useEffect, useState } from "react"; import { useDispatch, useSelector } from "react-redux"; import { selectCachedFile } from "../state/selectors"; import { useServer } from "../../server-api/context"; -import { cacheFile } from "../state/actions"; +import { cacheFile } from "../state/fileCache/actions"; +import { Status } from "../../server-api/Response"; /** * Fetch file by id. @@ -10,26 +11,26 @@ import { cacheFile } from "../state/actions"; */ export function useFile(id) { const file = useSelector(selectCachedFile(id)); - const [error, setError] = useState(false); + const [error, setError] = useState(null); const server = useServer(); const dispatch = useDispatch(); const loadFile = useCallback(() => { const doLoad = async () => { - setError(false); + setError(null); const response = await server.fetchFile({ id }); if (response.success) { const file = response.data; dispatch(cacheFile(file)); } else { console.error(response.error); - setError(true); + setError({ status: response.status }); } }; doLoad().catch((error) => { console.error(error); - setError(true); + setError({ status: Status.CLIENT_ERROR }); }); }, [id]); diff --git a/web/src/collection/hooks/useFileCluster.js b/web/src/collection/hooks/useFileCluster.js new file mode 100644 index 00000000..5e3264f2 --- /dev/null +++ b/web/src/collection/hooks/useFileCluster.js @@ -0,0 +1,33 @@ +import { useSelector } from "react-redux"; +import { selectFileCluster } from "../state/selectors"; +import { + fetchFileClusterSlice, + updateFileClusterParams, +} from "../state/fileCluster/actions"; +import initialState from "../state/fileCluster/initialState"; +import makeFetchEntitiesHook from "../state/fetchEntities/makeFetchEntitiesHook"; + +const useFetchFileCluster = makeFetchEntitiesHook({ + stateSelector: selectFileCluster, + defaultParams: initialState.params, + updateParams: updateFileClusterParams, + fetchNextSlice: fetchFileClusterSlice, + resourceName: "matches", +}); + +/** + * Fetch all file cluster elements satisfying the query params. + * @param params - The cluster query params. + */ +export default function useFileCluster(params) { + if (params.fileId == null) { + throw new Error("File id cannot be null."); + } + + const state = useSelector(selectFileCluster); + + return { + ...useFetchFileCluster(params), + files: state.files, + }; +} diff --git a/web/src/collection/hooks/useFileMatches.js b/web/src/collection/hooks/useFileMatches.js new file mode 100644 index 00000000..6852e392 --- /dev/null +++ b/web/src/collection/hooks/useFileMatches.js @@ -0,0 +1,26 @@ +import makeFetchEntitiesHook from "../state/fetchEntities/makeFetchEntitiesHook"; +import { selectFileMatches } from "../state/selectors"; +import { + fetchFileMatchesSlice, + updateFileMatchesParams, +} from "../state/fileMatches/actions"; +import initialState from "../state/fileMatches/initialState"; + +const useFetchFileMatches = makeFetchEntitiesHook({ + stateSelector: selectFileMatches, + defaultParams: initialState.params, + updateParams: updateFileMatchesParams, + fetchNextSlice: fetchFileMatchesSlice, + resourceName: "matches", +}); + +/** + * Fetch all file matches satisfying the query params. + * @param params - The matches query params. + */ +export default function useFileMatches(params) { + if (params.fileId == null) { + throw new Error("File id cannot be null."); + } + return useFetchFileMatches(params); +} diff --git a/web/src/collection/hooks/useLoadAll.js b/web/src/collection/hooks/useLoadAll.js new file mode 100644 index 00000000..71d5f27d --- /dev/null +++ b/web/src/collection/hooks/useLoadAll.js @@ -0,0 +1,38 @@ +import lodash from "lodash"; +import { useCallback, useEffect } from "react"; +import useValue from "./useValue"; + +/** + * Generic hook to load all available entities. + */ +export default function useLoadAll({ + requestedFilters, + defaultFilters, + savedFilters, + mayContinue, + startFetching, + continueFetching, +}) { + const mergedFilters = useValue({ ...defaultFilters, ...requestedFilters }); + + // Update filters and fetch the first slice when filters are changed + useEffect(() => { + startFetching(mergedFilters); + }, [mergedFilters, startFetching]); + + // Fetch the next slice when ready. + useEffect(() => { + if (mayContinue) { + continueFetching(mergedFilters); + } + }, [mayContinue, continueFetching, mergedFilters]); + + // Provide callback to resume loading on error. + return useCallback(() => { + if (!lodash.isEqual(mergedFilters, savedFilters)) { + startFetching(mergedFilters); + } else { + continueFetching(mergedFilters); + } + }, [mergedFilters, savedFilters, startFetching, continueFetching]); +} diff --git a/web/src/collection/hooks/useValue.js b/web/src/collection/hooks/useValue.js new file mode 100644 index 00000000..c4f89d78 --- /dev/null +++ b/web/src/collection/hooks/useValue.js @@ -0,0 +1,21 @@ +import lodash from "lodash"; +import { useEffect, useState } from "react"; + +/** + * `useValue` is similar to {@link useState} but setValue will have no effect if + * the argument is equal to the previous value. Thus the client code may safely + * use object or array values as a dependency for {@link useCallback} or + * {@link useEffect}. + * @param requestedValue requested new value + * @param isEqual function to compare values (default is {@link lodash.isEqual}) + */ +export default function useValue(requestedValue, isEqual = lodash.isEqual) { + const [savedValue, setSavedValue] = useState(requestedValue); + useEffect(() => { + const needUpdate = !isEqual(requestedValue, savedValue); + if (needUpdate) { + setSavedValue(requestedValue); + } + }, [requestedValue, isEqual]); + return savedValue; +} diff --git a/web/src/collection/components/FileBrowserPage/FileType.js b/web/src/collection/prop-types/FileType.js similarity index 100% rename from web/src/collection/components/FileBrowserPage/FileType.js rename to web/src/collection/prop-types/FileType.js diff --git a/web/src/collection/components/FileMatchesPage/MatchType.js b/web/src/collection/prop-types/MatchType.js similarity index 64% rename from web/src/collection/components/FileMatchesPage/MatchType.js rename to web/src/collection/prop-types/MatchType.js index 191fda83..a62f5c5f 100644 --- a/web/src/collection/components/FileMatchesPage/MatchType.js +++ b/web/src/collection/prop-types/MatchType.js @@ -1,11 +1,12 @@ import PropTypes from "prop-types"; -import FileType from "../FileBrowserPage/FileType"; /** * Prop-type for a match between two files. */ export const MatchType = PropTypes.shape({ - file: FileType.isRequired, + id: PropTypes.number.isRequired, + source: PropTypes.number.isRequired, + target: PropTypes.number.isRequired, distance: PropTypes.number.isRequired, }); diff --git a/web/src/collection/components/VideoDetailsPage/ObjectType.js b/web/src/collection/prop-types/ObjectType.js similarity index 100% rename from web/src/collection/components/VideoDetailsPage/ObjectType.js rename to web/src/collection/prop-types/ObjectType.js diff --git a/web/src/collection/components/VideoDetailsPage/SceneType.js b/web/src/collection/prop-types/SceneType.js similarity index 100% rename from web/src/collection/components/VideoDetailsPage/SceneType.js rename to web/src/collection/prop-types/SceneType.js diff --git a/web/src/collection/state/fetchEntities/fetchEntitiesSaga.js b/web/src/collection/state/fetchEntities/fetchEntitiesSaga.js new file mode 100644 index 00000000..b1b5e46d --- /dev/null +++ b/web/src/collection/state/fetchEntities/fetchEntitiesSaga.js @@ -0,0 +1,61 @@ +import { call, put, select } from "redux-saga/effects"; + +/** + * Default function to determine request params from the current collection + * state. The `defaultParams` assumes the state has the same structure as + * the example from the "./initialState.js" module. + * + * @param state - The state that contains params, limit and items. + * @param resourceName - The state property name to hold entities. + * @return {{offset: *, limit: number}} + */ +function defaultParams(state, resourceName = "items") { + const { params, limit = 20 } = state; + return { offset: state[resourceName].length, limit, ...params }; +} + +/** + * Generic saga to fetch a slice from some entity collection. + * + * @param requestResource - The request function that will be used in {@link call} effect. + * @param {function} stateSelector - The selector for the current entity collection state. + * @param {function} success - The factory of the success action (must accept response data). + * @param {function} failure - The factory for the failure action (must accept response error). + * @param {function} getParams - The function to get request arguments. + * @param {string} resourceName - The name of the state property that holds entities array. + */ +export default function* fetchEntitiesSaga({ + requestResource, + stateSelector, + success, + failure, + getParams = defaultParams, + resourceName = "items", +}) { + try { + // Determine current query params + const state = yield select(stateSelector); + const args = getParams(state, resourceName); + + // Send request to permanent storage + const resp = yield call(requestResource, args); + + // Handle error + if (resp.failure) { + console.error(`Error fetching ${resourceName}`, { + args, + state, + requestResource, + error: resp.error, + }); + yield put(failure(resp.error)); + return; + } + + // Update state + yield put(success(resp.data)); + } catch (error) { + console.error(error); + yield put(failure(error)); + } +} diff --git a/web/src/collection/state/fetchEntities/initialState.js b/web/src/collection/state/fetchEntities/initialState.js new file mode 100644 index 00000000..d5698e6b --- /dev/null +++ b/web/src/collection/state/fetchEntities/initialState.js @@ -0,0 +1,54 @@ +/** + * Example initial state for loadable + * entity collection. + * + * @type {Object} + */ +// eslint-disable-next-line +const initialState = { + /** + * Request params. + */ + params: { + /** + * Whatever request parameters (like + * filters, fileId, include-fields, etc.) + * that may affect the actual data that + * will be fetched. + * + * If one of these parameters changes then + * all the fetched data must be discarded + * and a new data should be requested according + * to the new parameters. There must be all + * such parameters and only them. + */ + }, + /** + * Total count of entities that + * may be fetched with the given + * parameters. The value must be + * `undefined` when no data were + * fetched since the last params + * change. + */ + total: undefined, + /** + * True iff the previous request + * finished and was unsuccessful. + */ + error: false, + /** + * True iff the last request + * is still in progress. + */ + loading: false, + /** + * Maximal number of entities that + * should be fetched with one request. + */ + limit: 100, + /** + * Fetched entities. + */ + items: [], +}; diff --git a/web/src/collection/state/fetchEntities/makeEntityReducer.js b/web/src/collection/state/fetchEntities/makeEntityReducer.js new file mode 100644 index 00000000..491324ae --- /dev/null +++ b/web/src/collection/state/fetchEntities/makeEntityReducer.js @@ -0,0 +1,59 @@ +import lodash from "lodash"; +import extendEntityList from "../helpers/extendEntityList"; + +export default function makeEntityReducer({ + updateParams, + fetchSlice, + fetchSliceSuccess, + fetchSliceFailure, + initialState, + resourceName = "items", +}) { + return function fetchEntityReducer(state = initialState, action) { + switch (action.type) { + case updateParams: { + const params = lodash.merge({}, state.params, action.params); + return { + ...state, + params, + loading: false, + error: false, + total: undefined, + [resourceName]: [], + }; + } + case fetchSlice: + return { + ...state, + loading: true, + error: false, + }; + case fetchSliceSuccess: + if (!state.loading) { + const warning = + `Unexpected state when handling ${fetchSliceSuccess}: ` + + `state.loading must be true. Skipping...`; + console.warn(warning); + return state; + } + return { + ...state, + loading: false, + error: false, + [resourceName]: extendEntityList( + state[resourceName], + action[resourceName] + ), + total: action.total, + }; + case fetchSliceFailure: + return { + ...state, + loading: false, + error: true, + }; + default: + return state; + } + }; +} diff --git a/web/src/collection/state/fetchEntities/makeFetchEntitiesHook.js b/web/src/collection/state/fetchEntities/makeFetchEntitiesHook.js new file mode 100644 index 00000000..6ab8e085 --- /dev/null +++ b/web/src/collection/state/fetchEntities/makeFetchEntitiesHook.js @@ -0,0 +1,78 @@ +import { useDispatch, useSelector } from "react-redux"; +import { useCallback, useEffect } from "react"; +import useValue from "../../hooks/useValue"; +import lodash from "lodash"; + +/** + * Check if auto-loading may continue. + */ +function getMayContinue(state, mergedParams, resourceName) { + return !( + state.loading || + state.error || + state[resourceName].length >= state.total || + !lodash.isEqual(state.params, mergedParams) + ); +} + +/** + * Check if there are remaining cluster items. + */ +function hasMore(state, mergedParams, resourceName) { + return ( + state.total == null || + state[resourceName].length < state.total || + !lodash.isEqual(state.params, mergedParams) + ); +} + +/** + * Make a hook to load all available entities assuming the application state + * obeys convention of the fetchEntity framework. + */ +export default function makeFetchEntitiesHook({ + updateParams, + fetchNextSlice, + stateSelector, + defaultParams, + resourceName, +}) { + return function useFetchEntities(desiredParams) { + const dispatch = useDispatch(); + const state = useSelector(stateSelector); + const savedParams = state.params; + const mergedParams = useValue( + lodash.merge({}, defaultParams, desiredParams) + ); + const mayContinue = getMayContinue(state, mergedParams, resourceName); + + // Update filters and fetch the first slice when filters are changed + useEffect(() => { + dispatch(updateParams(mergedParams)); + }, [mergedParams]); + + // Fetch the next slice when ready. + useEffect(() => { + if (mayContinue) { + dispatch(fetchNextSlice()); + } + }, [mayContinue, mergedParams]); + + // Provide callback to resume loading on error. + const resumeLoading = useCallback(() => { + if (!lodash.isEqual(mergedParams, savedParams)) { + dispatch(updateParams(mergedParams)); + } else { + dispatch(fetchNextSlice(mergedParams)); + } + }, [mergedParams, savedParams]); + + return { + [resourceName]: state[resourceName], + total: state.total, + error: state.error, + resumeLoading, + hasMore: hasMore(state, mergedParams, resourceName), + }; + }; +} diff --git a/web/src/collection/state/fileCache/actions.js b/web/src/collection/state/fileCache/actions.js new file mode 100644 index 00000000..fd470a89 --- /dev/null +++ b/web/src/collection/state/fileCache/actions.js @@ -0,0 +1,20 @@ +/** + * "Add file to cache" action type. + */ +export const ACTION_CACHE_FILE = "coll.CACHE_FILE"; + +/** + * @typedef CacheFileAction + * @type Object + * @property {string} type - action type. + * @property {{id: any}} file - the file that should be cached. + */ + +/** + * Create "Add file to cache" action. + * @param {{id: any}} file - The file that should be cached. + * @return {CacheFileAction} A new action instance. + */ +export function cacheFile(file) { + return { file, type: ACTION_CACHE_FILE }; +} diff --git a/web/src/collection/state/fileCache/initialState.js b/web/src/collection/state/fileCache/initialState.js new file mode 100644 index 00000000..a1024b9f --- /dev/null +++ b/web/src/collection/state/fileCache/initialState.js @@ -0,0 +1,11 @@ +/** + * Initial state of cache of fully-fetched individual files. + * @type {{files: {}, maxSize: number, history: [number]}} + */ +const initialState = { + maxSize: 1000, + files: {}, + history: [], +}; + +export default initialState; diff --git a/web/src/collection/state/fileCache/reducer.js b/web/src/collection/state/fileCache/reducer.js new file mode 100644 index 00000000..757a4466 --- /dev/null +++ b/web/src/collection/state/fileCache/reducer.js @@ -0,0 +1,27 @@ +import initialState from "./initialState"; +import { ACTION_CACHE_FILE } from "./actions"; + +/** + * Root reducer for file cache. + * @param {Object} state - The initial state that will be modified. + * @param {CacheFileAction|Object} action - Action that must be executed. + * @return {Object} The new state. + */ +export default function fileCacheReducer(state = initialState, action) { + switch (action.type) { + case ACTION_CACHE_FILE: { + const files = { ...state.files, [action.file.id]: action.file }; + const history = [ + action.file.id, + ...state.history.filter((id) => id !== action.file.id), + ]; + if (history.length > state.maxSize) { + const evicted = history.pop(); + delete files[evicted]; + } + return { ...state, history, files }; + } + default: + return state; + } +} diff --git a/web/src/collection/state/fileCluster/actions.js b/web/src/collection/state/fileCluster/actions.js new file mode 100644 index 00000000..2ef97d1d --- /dev/null +++ b/web/src/collection/state/fileCluster/actions.js @@ -0,0 +1,62 @@ +/** + * "Update cluster params" action type. + * @type {string} + */ +export const ACTION_UPDATE_FILE_CLUSTER_PARAMS = + "coll.UPDATE_FILE_CLUSTER_PARAMS"; + +/** + * Create new update-cluster-params action. + */ +export function updateFileClusterParams(params) { + return { params, type: ACTION_UPDATE_FILE_CLUSTER_PARAMS }; +} + +/** + * "Fetch the next cluster slice" action type. + * @type {string} + */ +export const ACTION_FETCH_FILE_CLUSTER_SLICE = "coll.FETCH_FILE_CLUSTER_SLICE"; + +/** + * Create new "Fetch the next cluster slice" action. + * @return {{type: string}} + */ +export function fetchFileClusterSlice() { + return { type: ACTION_FETCH_FILE_CLUSTER_SLICE }; +} + +/** + * "Success of cluster slice fetching" action type. + * @type {string} + */ +export const ACTION_FETCH_FILE_CLUSTER_SLICE_SUCCESS = + "coll.FETCH_FILE_CLUSTER_SLICE_SUCCESS"; + +/** + * Create new "Success of cluster slice fetching" action. + */ +export function fetchFileClusterSliceSuccess({ matches, files, total }) { + return { + matches, + files, + total, + type: ACTION_FETCH_FILE_CLUSTER_SLICE_SUCCESS, + }; +} + +/** + * "Failure of cluster slice fetching" action type. + * @type {string} + */ +export const ACTION_FETCH_FILE_CLUSTER_SLICE_FAILURE = + "coll.FETCH_FILE_CLUSTER_SLICE_FAILURE"; + +/** + * Create new "Failure of cluster slice fetching" action. + * @param error + * @return {{error: *, type: string}} + */ +export function fetchFileClusterSliceFailure(error) { + return { error, type: ACTION_FETCH_FILE_CLUSTER_SLICE_FAILURE }; +} diff --git a/web/src/collection/state/fileCluster/initialState.js b/web/src/collection/state/fileCluster/initialState.js new file mode 100644 index 00000000..070df79d --- /dev/null +++ b/web/src/collection/state/fileCluster/initialState.js @@ -0,0 +1,23 @@ +/** + * Initial state of the fetched cluster items. + * @type {Object} + */ +const initialState = { + params: { + fileId: undefined, + filters: { + hops: 2, + minDistance: 0.0, + maxDistance: 1.0, + }, + fields: ["meta", "exif"], + }, + total: undefined, + error: false, + loading: false, + limit: 100, + matches: [], + files: {}, +}; + +export default initialState; diff --git a/web/src/collection/state/fileCluster/reducer.js b/web/src/collection/state/fileCluster/reducer.js new file mode 100644 index 00000000..76766add --- /dev/null +++ b/web/src/collection/state/fileCluster/reducer.js @@ -0,0 +1,35 @@ +import initialState from "./initialState"; +import { + ACTION_FETCH_FILE_CLUSTER_SLICE, + ACTION_FETCH_FILE_CLUSTER_SLICE_FAILURE, + ACTION_FETCH_FILE_CLUSTER_SLICE_SUCCESS, + ACTION_UPDATE_FILE_CLUSTER_PARAMS, +} from "./actions"; +import makeEntityReducer from "../fetchEntities/makeEntityReducer"; +import extendEntityMap from "../helpers/extendEntityMap"; + +const defaultReducer = makeEntityReducer({ + updateParams: ACTION_UPDATE_FILE_CLUSTER_PARAMS, + fetchSlice: ACTION_FETCH_FILE_CLUSTER_SLICE, + fetchSliceSuccess: ACTION_FETCH_FILE_CLUSTER_SLICE_SUCCESS, + fetchSliceFailure: ACTION_FETCH_FILE_CLUSTER_SLICE_FAILURE, + initialState: initialState, + resourceName: "matches", +}); + +export default function fileClusterReducer(state = initialState, action) { + switch (action.type) { + case ACTION_UPDATE_FILE_CLUSTER_PARAMS: + return { + ...defaultReducer(state, action), + files: {}, + }; + case ACTION_FETCH_FILE_CLUSTER_SLICE_SUCCESS: + return { + ...defaultReducer(state, action), + files: extendEntityMap(state.files, action.files), + }; + default: + return defaultReducer(state, action); + } +} diff --git a/web/src/collection/state/fileCluster/sagas.js b/web/src/collection/state/fileCluster/sagas.js new file mode 100644 index 00000000..fffe96aa --- /dev/null +++ b/web/src/collection/state/fileCluster/sagas.js @@ -0,0 +1,33 @@ +import { + ACTION_FETCH_FILE_CLUSTER_SLICE, + fetchFileClusterSliceFailure, + fetchFileClusterSliceSuccess, +} from "./actions"; +import { takeLatest } from "redux-saga/effects"; +import fetchEntitiesSaga from "../fetchEntities/fetchEntitiesSaga"; + +/** + * Fetch the next slice of file cluster items. + */ +function* fetchFileClusterSliceSaga(server, selectFileCluster) { + yield* fetchEntitiesSaga({ + requestResource: [server, server.fetchFileCluster], + stateSelector: selectFileCluster, + success: fetchFileClusterSliceSuccess, + failure: fetchFileClusterSliceFailure, + resourceName: "matches", + }); +} + +/** + * Initialize collection-related sagas... + */ +export default function* fileClusterRootSaga(server, selectFileCluster) { + // Handle every slice fetch. + yield takeLatest( + ACTION_FETCH_FILE_CLUSTER_SLICE, + fetchFileClusterSliceSaga, + server, + selectFileCluster + ); +} diff --git a/web/src/collection/state/fileList/FileListType.js b/web/src/collection/state/fileList/FileListType.js new file mode 100644 index 00000000..398bb39d --- /dev/null +++ b/web/src/collection/state/fileList/FileListType.js @@ -0,0 +1,13 @@ +/** + * Enum for file list types. + */ +const FileListType = { + grid: "grid", + linear: "linear", + + values() { + return [this.grid, this.linear]; + }, +}; + +export default FileListType; diff --git a/web/src/collection/state/FileSort.js b/web/src/collection/state/fileList/FileSort.js similarity index 100% rename from web/src/collection/state/FileSort.js rename to web/src/collection/state/fileList/FileSort.js diff --git a/web/src/collection/state/MatchCategory.js b/web/src/collection/state/fileList/MatchCategory.js similarity index 100% rename from web/src/collection/state/MatchCategory.js rename to web/src/collection/state/fileList/MatchCategory.js diff --git a/web/src/collection/state/actions.js b/web/src/collection/state/fileList/actions.js similarity index 54% rename from web/src/collection/state/actions.js rename to web/src/collection/state/fileList/actions.js index a62b8f7c..f6bccfdb 100644 --- a/web/src/collection/state/actions.js +++ b/web/src/collection/state/fileList/actions.js @@ -1,3 +1,14 @@ +import FileListType from "./FileListType"; + +export const ACTION_CHANGE_FILE_LIST_VIEW = "coll.CHANGE_FILE_LIST_VIEW"; + +export function changeFileListView(view) { + if (FileListType.values().indexOf(view) === -1) { + throw new Error(`Unknown file list type: ${view}`); + } + return { type: ACTION_CHANGE_FILE_LIST_VIEW, view }; +} + export const ACTION_UPDATE_FILTERS = "coll.UPDATE_FILTERS"; export function updateFilters(filters) { @@ -36,38 +47,3 @@ export const ACTION_FETCH_FILES_FAILURE = "coll.FETCH_FILES_FAILURE"; export function fetchFilesFailure(error) { return { type: ACTION_FETCH_FILES_FAILURE, error }; } - -/** - * Add file to cache. - */ - -export const ACTION_CACHE_FILE = "coll.CACHE_FILE"; - -export function cacheFile(file) { - return { file, type: ACTION_CACHE_FILE }; -} - -/** - * Single file matches actions - */ - -export const ACTION_UPDATE_FILE_MATCH_FILTERS = - "coll.UPDATE_FILE_MATCH_FILTERS"; - -export function updateFileMatchFilters(fileId, filters) { - return { fileId, filters, type: ACTION_UPDATE_FILE_MATCH_FILTERS }; -} - -export const ACTION_UPDATE_FILE_MATCH_FILTERS_SUCCESS = - "coll.UPDATE_FILE_MATCH_FILTERS_SUCCESS"; - -export function updateFileMatchFiltersSuccess(matches, total) { - return { matches, total, type: ACTION_UPDATE_FILE_MATCH_FILTERS_SUCCESS }; -} - -export const ACTION_UPDATE_FILE_MATCH_FILTERS_FAILURE = - "coll.UPDATE_FILE_MATCH_FILTERS_FAILURE"; - -export function updateFileMatchFiltersFailure(error) { - return { type: ACTION_UPDATE_FILE_MATCH_FILTERS_FAILURE, error }; -} diff --git a/web/src/collection/state/fileList/initialState.js b/web/src/collection/state/fileList/initialState.js new file mode 100644 index 00000000..5f388348 --- /dev/null +++ b/web/src/collection/state/fileList/initialState.js @@ -0,0 +1,35 @@ +import { MatchCategory } from "./MatchCategory"; +import { FileSort } from "./FileSort"; +import FileListType from "./FileListType"; + +const initialState = { + neverLoaded: true, + error: false, + loading: false, + files: [], + filters: { + query: "", + extensions: [], + length: { lower: null, upper: null }, + date: { lower: null, upper: null }, + audio: null, + exif: null, + matches: MatchCategory.all, + sort: FileSort.date, + }, + fileListType: FileListType.grid, + limit: 20, + counts: { + all: 0, + related: 0, + duplicates: 0, + unique: 0, + }, +}; + +/** + * Default file list filters. + */ +export const defaultFilters = initialState.filters; + +export default initialState; diff --git a/web/src/collection/state/fileList/reducer.js b/web/src/collection/state/fileList/reducer.js new file mode 100644 index 00000000..e81bde23 --- /dev/null +++ b/web/src/collection/state/fileList/reducer.js @@ -0,0 +1,70 @@ +import { + ACTION_CHANGE_FILE_LIST_VIEW, + ACTION_FETCH_FILES, + ACTION_FETCH_FILES_FAILURE, + ACTION_FETCH_FILES_SUCCESS, + ACTION_UPDATE_FILTERS, + ACTION_UPDATE_FILTERS_FAILURE, + ACTION_UPDATE_FILTERS_SUCCESS, +} from "./actions"; +import extendEntityList from "../helpers/extendEntityList"; +import FileListType from "./FileListType"; +import initialState from "./initialState"; + +export default function fileListReducer(state = initialState, action) { + switch (action.type) { + case ACTION_UPDATE_FILTERS: + return { + ...state, + filters: { ...state.filters, ...action.filters }, + files: [], + loading: true, + neverLoaded: false, + }; + case ACTION_UPDATE_FILTERS_SUCCESS: + return { + ...state, + files: [...action.files], + counts: { ...action.counts }, + error: false, + loading: false, + }; + case ACTION_UPDATE_FILTERS_FAILURE: + return { + ...state, + files: [], + error: true, + loading: false, + }; + case ACTION_FETCH_FILES: + return { + ...state, + loading: true, + neverLoaded: false, + }; + case ACTION_FETCH_FILES_SUCCESS: + return { + ...state, + error: false, + files: extendEntityList(state.files, action.files), + counts: { ...action.counts }, + loading: false, + }; + case ACTION_FETCH_FILES_FAILURE: + return { + ...state, + error: true, + loading: false, + }; + case ACTION_CHANGE_FILE_LIST_VIEW: + if (FileListType.values().indexOf(action.view) === -1) { + throw new Error(`Unknown file list type: ${action.view}`); + } + return { + ...state, + fileListType: action.view, + }; + default: + return state; + } +} diff --git a/web/src/collection/state/fileList/sagas.js b/web/src/collection/state/fileList/sagas.js new file mode 100644 index 00000000..8e90d16b --- /dev/null +++ b/web/src/collection/state/fileList/sagas.js @@ -0,0 +1,67 @@ +import { call, put, select, takeLatest } from "redux-saga/effects"; +import { + ACTION_FETCH_FILES, + ACTION_UPDATE_FILTERS, + fetchFilesFailure, + fetchFilesSuccess, + updateFiltersFailure, + updateFiltersSuccess, +} from "./actions"; + +function resolveReportActions(fetchAction) { + switch (fetchAction.type) { + case ACTION_UPDATE_FILTERS: + return [updateFiltersSuccess, updateFiltersFailure]; + case ACTION_FETCH_FILES: + return [fetchFilesSuccess, fetchFilesFailure]; + default: + throw new Error(`Unsupported fetch action type: ${fetchAction.type}`); + } +} + +/** + * Fetch next page of files. + */ +function* fetchFilesSaga(server, selectFileList, action) { + // Determine report-result actions + const [success, failure] = resolveReportActions(action); + + try { + // Determine current limit, offset and filters from the state + const { limit, files: loadedFiles, filters } = yield select(selectFileList); + const offset = loadedFiles.length; + + // Send request to the server + const resp = yield call([server, server.fetchFiles], { + limit, + offset, + filters, + }); + + // Handle error + if (resp.failure) { + console.error("Fetch files error", resp.error); + yield put(failure(resp.error)); + return; + } + + // Update state + const { counts, files } = resp.data; + yield put(success(files, counts)); + } catch (error) { + console.error(error); + yield put(failure(error)); + } +} + +/** + * Initialize collection-related sagas... + */ +export default function* fileListRootSaga(server, selectFileList) { + yield takeLatest( + [ACTION_UPDATE_FILTERS, ACTION_FETCH_FILES], + fetchFilesSaga, + server, + selectFileList + ); +} diff --git a/web/src/collection/state/fileMatches/actions.js b/web/src/collection/state/fileMatches/actions.js new file mode 100644 index 00000000..403ab343 --- /dev/null +++ b/web/src/collection/state/fileMatches/actions.js @@ -0,0 +1,57 @@ +/** + * "Update matches params" action type. + * @type {string} + */ +export const ACTION_UPDATE_FILE_MATCHES_PARAMS = + "coll.UPDATE_FILE_MATCHES_PARAMS"; + +/** + * Create new "Update matches params" action. + */ +export function updateFileMatchesParams(params) { + return { params, type: ACTION_UPDATE_FILE_MATCHES_PARAMS }; +} + +/** + * "Fetch the next matches slice" action type. + * @type {string} + */ +export const ACTION_FETCH_FILE_MATCHES_SLICE = "coll.FETCH_FILE_MATCHES_SLICE"; + +/** + * Create new "Fetch the next matches slice" action. + * @return {{type: string}} + */ +export function fetchFileMatchesSlice() { + return { type: ACTION_FETCH_FILE_MATCHES_SLICE }; +} + +/** + * "Success of matches slice fetching" action type. + * @type {string} + */ +export const ACTION_FETCH_FILE_MATCHES_SLICE_SUCCESS = + "coll.FETCH_FILE_MATCHES_SLICE_SUCCESS"; + +/** + * Create new "Success of matches slice fetching" action. + */ +export function fetchFileMatchesSliceSuccess({ matches, total }) { + return { matches, total, type: ACTION_FETCH_FILE_MATCHES_SLICE_SUCCESS }; +} + +/** + * "Failure of matches slice fetching" action type. + * @type {string} + */ +export const ACTION_FETCH_FILE_MATCHES_SLICE_FAILURE = + "coll.FETCH_FILE_MATCHES_SLICE_FAILURE"; + +/** + * Create new "Failure of matches slice fetching" action. + * @param error + * @return {{error: *, type: string}} + */ +export function fetchFileMatchesSliceFailure(error) { + return { error, type: ACTION_FETCH_FILE_MATCHES_SLICE_FAILURE }; +} diff --git a/web/src/collection/state/fileMatches/initialState.js b/web/src/collection/state/fileMatches/initialState.js new file mode 100644 index 00000000..aa969e49 --- /dev/null +++ b/web/src/collection/state/fileMatches/initialState.js @@ -0,0 +1,18 @@ +/** + * Initial state of the fetched matches collection. + * @type {Object} + */ +const initialState = { + params: { + fileId: undefined, + filters: {}, + fields: ["meta", "exif"], + }, + total: undefined, + error: false, + loading: false, + limit: 100, + matches: [], +}; + +export default initialState; diff --git a/web/src/collection/state/fileMatches/reducer.js b/web/src/collection/state/fileMatches/reducer.js new file mode 100644 index 00000000..ed3f983d --- /dev/null +++ b/web/src/collection/state/fileMatches/reducer.js @@ -0,0 +1,19 @@ +import { + ACTION_FETCH_FILE_MATCHES_SLICE, + ACTION_FETCH_FILE_MATCHES_SLICE_FAILURE, + ACTION_FETCH_FILE_MATCHES_SLICE_SUCCESS, + ACTION_UPDATE_FILE_MATCHES_PARAMS, +} from "./actions"; +import initialState from "./initialState"; +import makeEntityReducer from "../fetchEntities/makeEntityReducer"; + +const fileMatchesReducer = makeEntityReducer({ + updateParams: ACTION_UPDATE_FILE_MATCHES_PARAMS, + fetchSlice: ACTION_FETCH_FILE_MATCHES_SLICE, + fetchSliceSuccess: ACTION_FETCH_FILE_MATCHES_SLICE_SUCCESS, + fetchSliceFailure: ACTION_FETCH_FILE_MATCHES_SLICE_FAILURE, + initialState: initialState, + resourceName: "matches", +}); + +export default fileMatchesReducer; diff --git a/web/src/collection/state/fileMatches/sagas.js b/web/src/collection/state/fileMatches/sagas.js new file mode 100644 index 00000000..6eacd1bc --- /dev/null +++ b/web/src/collection/state/fileMatches/sagas.js @@ -0,0 +1,33 @@ +import { takeLatest } from "redux-saga/effects"; +import { + ACTION_FETCH_FILE_MATCHES_SLICE, + fetchFileMatchesSliceFailure, + fetchFileMatchesSliceSuccess, +} from "./actions"; +import fetchEntitiesSaga from "../fetchEntities/fetchEntitiesSaga"; + +/** + * Fetch the next slice of file matches. + */ +function* fetchFileMatchesSliceSaga(server, selectFileMatches) { + yield* fetchEntitiesSaga({ + requestResource: [server, server.fetchFileMatches], + stateSelector: selectFileMatches, + success: fetchFileMatchesSliceSuccess, + failure: fetchFileMatchesSliceFailure, + resourceName: "matches", + }); +} + +/** + * Initialize collection-related sagas... + */ +export default function* fileMatchRootSaga(server, selectFileMatches) { + // Handle every slice fetch. + yield takeLatest( + ACTION_FETCH_FILE_MATCHES_SLICE, + fetchFileMatchesSliceSaga, + server, + selectFileMatches + ); +} diff --git a/web/src/collection/state/helpers/extendEntityList.js b/web/src/collection/state/helpers/extendEntityList.js new file mode 100644 index 00000000..cd48c7d4 --- /dev/null +++ b/web/src/collection/state/helpers/extendEntityList.js @@ -0,0 +1,22 @@ +/** + * Get set of entity ids. + */ +function ids(entities) { + const result = new Set(); + for (let entity of entities) { + result.add(entity.id); + } + return result; +} + +/** + * Add new entities to the entity list. + * @param {Object} existing - The existing mapping that should be updated. + * @param {[{id: any}]} loaded _ The new entities that should be added. + * @returns {Object} The updated mapping. + */ +export default function extendEntityList(existing, loaded) { + const existingIds = ids(existing); + const newEntities = loaded.filter((item) => !existingIds.has(item.id)); + return [...existing, ...newEntities]; +} diff --git a/web/src/collection/state/helpers/extendEntityMap.js b/web/src/collection/state/helpers/extendEntityMap.js new file mode 100644 index 00000000..7496cb74 --- /dev/null +++ b/web/src/collection/state/helpers/extendEntityMap.js @@ -0,0 +1,11 @@ +/** + * Add new entities to the `id=>entity` mapping object. + * @param {Object} existing - The existing mapping that should be updated. + * @param {[{id: any}]} loaded _ The new entities that should be added. + * @returns {Object} The updated mapping. + */ +export default function extendEntityMap(existing, loaded) { + const result = { ...existing }; + loaded.forEach((entity) => (result[entity.id] = entity)); + return result; +} diff --git a/web/src/collection/state/index.js b/web/src/collection/state/index.js deleted file mode 100644 index d4389a93..00000000 --- a/web/src/collection/state/index.js +++ /dev/null @@ -1,13 +0,0 @@ -export { - ACTION_FETCH_FILES_FAILURE, - ACTION_FETCH_FILES, - ACTION_FETCH_FILES_SUCCESS, - ACTION_UPDATE_FILTERS, - fetchFiles, - fetchFilesFailure, - fetchFilesSuccess, - updateFilters, -} from "./actions"; -export { initialState, collRootReducer } from "./reducers"; -export { default as collRootSaga } from "./sagas"; -export { selectColl } from "./selectors"; diff --git a/web/src/collection/state/initialState.js b/web/src/collection/state/initialState.js new file mode 100644 index 00000000..70c21072 --- /dev/null +++ b/web/src/collection/state/initialState.js @@ -0,0 +1,29 @@ +import fileCacheInitialState from "./fileCache/initialState"; +import fileClusterInitialState from "./fileCluster/initialState"; +import fileMatchesInitialState from "./fileMatches/initialState"; +import fileListInitialState from "./fileList/initialState"; + +/** + * Initial State for file collection management. + */ +const initialState = { + /** + * Files loaded and displayed on the file browser page ('My Collection'). + */ + fileList: fileListInitialState, + /** + * Cached individual files with fully-loaded data. + */ + fileCache: fileCacheInitialState, + /** + * Single file neighboring cluster (closely-connected files). + */ + fileCluster: fileClusterInitialState, + /** + * Single-file's immediate matches (used in 'NN Files Matched' and 'Compare' + * pages). + */ + fileMatches: fileMatchesInitialState, +}; + +export default initialState; diff --git a/web/src/collection/state/reducers.js b/web/src/collection/state/reducers.js index e7325ca4..4dcf0f00 100644 --- a/web/src/collection/state/reducers.js +++ b/web/src/collection/state/reducers.js @@ -1,180 +1,14 @@ -import { - ACTION_CACHE_FILE, - ACTION_FETCH_FILES, - ACTION_FETCH_FILES_FAILURE, - ACTION_FETCH_FILES_SUCCESS, - ACTION_UPDATE_FILE_MATCH_FILTERS, - ACTION_UPDATE_FILE_MATCH_FILTERS_FAILURE, - ACTION_UPDATE_FILE_MATCH_FILTERS_SUCCESS, - ACTION_UPDATE_FILTERS, - ACTION_UPDATE_FILTERS_FAILURE, - ACTION_UPDATE_FILTERS_SUCCESS, -} from "./actions"; -import { MatchCategory } from "./MatchCategory"; -import { FileSort } from "./FileSort"; - -export const initialState = { - error: false, - loading: false, - files: [], - filters: { - query: "", - extensions: [], - length: { lower: null, upper: null }, - date: { lower: null, upper: null }, - audio: null, - exif: null, - matches: MatchCategory.all, - sort: FileSort.date, - }, - limit: 20, - counts: { - total: 0, - related: 0, - duplicates: 0, - unique: 0, - }, - /** - * File id=>file LRU cache - */ - fileCache: { - maxSize: 100, - files: {}, - history: [], - }, - /** - * File matches - */ - fileMatches: { - fileId: undefined, - filters: {}, - total: 0, - error: false, - loading: false, - limit: 100, - offset: 0, - matches: [], - }, -}; - -function filenames(files) { - const result = new Set(); - for (let file of files) { - result.add(file.filename); - } - return result; -} - -function extendFiles(existing, loaded) { - const existingNames = filenames(existing); - const newFiles = loaded.filter((item) => !existingNames.has(item.filename)); - return [...existing, ...newFiles]; -} - -function fileCacheReducer(state = initialState.fileCache, action) { - switch (action.type) { - case ACTION_CACHE_FILE: { - const files = { ...state.files, [action.file.id]: action.file }; - const history = [ - action.file.id, - ...state.history.filter((id) => id !== action.file.id), - ]; - if (history.length > state.maxSize) { - const evicted = history.pop(); - delete files[evicted]; - } - return { ...state, history, files }; - } - default: - return state; - } -} - -function fileMatchesReducer(state = initialState.fileMatches, action) { - switch (action.type) { - case ACTION_UPDATE_FILE_MATCH_FILTERS: - return { - ...state, - filters: { ...state.filters, ...action.filters, fileId: action.fileId }, - matches: [], - loading: true, - }; - case ACTION_UPDATE_FILE_MATCH_FILTERS_SUCCESS: - return { - ...state, - total: action.total, - matches: [...action.matches], - error: false, - loading: false, - }; - case ACTION_UPDATE_FILE_MATCH_FILTERS_FAILURE: - return { - matches: [], - total: 0, - error: true, - loading: false, - }; - default: - return state; - } -} - -export function collRootReducer(state = initialState, action) { - switch (action.type) { - case ACTION_UPDATE_FILTERS: - return { - ...state, - filters: { ...state.filters, ...action.filters }, - files: [], - loading: true, - }; - case ACTION_UPDATE_FILTERS_SUCCESS: - return { - ...state, - files: [...action.files], - counts: { ...action.counts }, - error: false, - loading: false, - }; - case ACTION_UPDATE_FILTERS_FAILURE: - return { - ...state, - files: [], - error: true, - loading: false, - }; - case ACTION_FETCH_FILES: - return { - ...state, - loading: true, - }; - case ACTION_FETCH_FILES_SUCCESS: - return { - ...state, - error: false, - files: extendFiles(state.files, action.files), - counts: { ...action.counts }, - loading: false, - }; - case ACTION_FETCH_FILES_FAILURE: - return { - ...state, - error: true, - loading: false, - }; - case ACTION_CACHE_FILE: - return { - ...state, - fileCache: fileCacheReducer(state.fileCache, action), - }; - case ACTION_UPDATE_FILE_MATCH_FILTERS: - case ACTION_UPDATE_FILE_MATCH_FILTERS_SUCCESS: - case ACTION_UPDATE_FILE_MATCH_FILTERS_FAILURE: - return { - ...state, - fileMatches: fileMatchesReducer(state.fileMatches, action), - }; - default: - return state; - } -} +import fileCacheReducer from "./fileCache/reducer"; +import fileMatchesReducer from "./fileMatches/reducer"; +import fileClusterReducer from "./fileCluster/reducer"; +import { combineReducers } from "redux"; +import fileListReducer from "./fileList/reducer"; + +const collRootReducer = combineReducers({ + fileList: fileListReducer, + fileCache: fileCacheReducer, + fileCluster: fileClusterReducer, + fileMatches: fileMatchesReducer, +}); + +export default collRootReducer; diff --git a/web/src/collection/state/sagas.js b/web/src/collection/state/sagas.js index b7464633..949a3ae2 100644 --- a/web/src/collection/state/sagas.js +++ b/web/src/collection/state/sagas.js @@ -1,104 +1,18 @@ -import { call, put, select, takeLatest } from "redux-saga/effects"; +import { fork } from "redux-saga/effects"; import { - ACTION_FETCH_FILES, - ACTION_UPDATE_FILE_MATCH_FILTERS, - ACTION_UPDATE_FILTERS, - fetchFilesFailure, - fetchFilesSuccess, - updateFileMatchFiltersFailure, - updateFileMatchFiltersSuccess, - updateFiltersFailure, - updateFiltersSuccess, -} from "./actions"; -import { selectColl, selectFileMatches } from "./selectors"; - -function* fetchFileMatchesSaga(server, action) { - try { - // Determine current query params - const { limit, offset } = yield select(selectFileMatches); - - // Send request to the server - const resp = yield call([server, server.fetchFileMatches], { - limit, - offset, - id: action.fileId, - }); - - // Handle error - if (resp.failure) { - console.error("Fetch file matches error", resp.error); - yield put(updateFileMatchFiltersFailure(resp.error)); - return; - } - - // Update state - const { total, matches } = resp.data; - yield put(updateFileMatchFiltersSuccess(matches, total)); - } catch (error) { - console.error(error); - yield put(updateFileMatchFiltersFailure(error)); - } -} - -function resolveReportActions(fetchAction) { - switch (fetchAction.type) { - case ACTION_UPDATE_FILTERS: - return [updateFiltersSuccess, updateFiltersFailure]; - case ACTION_FETCH_FILES: - return [fetchFilesSuccess, fetchFilesFailure]; - default: - throw new Error(`Unsupported fetch action type: ${fetchAction.type}`); - } -} - -/** - * Fetch next page of files. - */ -function* fetchFilesSaga(server, action) { - // Determine report-result actions - const [success, failure] = resolveReportActions(action); - - try { - // Determine current limit, offset and filters from the state - const { limit, files: loadedFiles, filters } = yield select(selectColl); - const offset = loadedFiles.length; - - // Send request to the server - const resp = yield call([server, server.fetchFiles], { - limit, - offset, - filters, - }); - - // Handle error - if (resp.failure) { - console.error("Fetch files error", resp.error); - yield put(failure(resp.error)); - return; - } - - // Update state - const { counts, files } = resp.data; - yield put(success(files, counts)); - } catch (error) { - console.error(error); - yield put(failure(error)); - } -} + selectFileCluster, + selectFileList, + selectFileMatches, +} from "./selectors"; +import fileMatchRootSaga from "./fileMatches/sagas"; +import fileClusterRootSaga from "./fileCluster/sagas"; +import fileListRootSaga from "./fileList/sagas"; /** * Initialize collection-related sagas... */ export default function* collRootSaga(server) { - console.log("coll root saga"); - yield takeLatest( - [ACTION_UPDATE_FILTERS, ACTION_FETCH_FILES], - fetchFilesSaga, - server - ); - yield takeLatest( - ACTION_UPDATE_FILE_MATCH_FILTERS, - fetchFileMatchesSaga, - server - ); + yield fork(fileListRootSaga, server, selectFileList); + yield fork(fileMatchRootSaga, server, selectFileMatches); + yield fork(fileClusterRootSaga, server, selectFileCluster); } diff --git a/web/src/collection/state/selectors.js b/web/src/collection/state/selectors.js index 40a1ff3e..652ec379 100644 --- a/web/src/collection/state/selectors.js +++ b/web/src/collection/state/selectors.js @@ -3,15 +3,17 @@ */ export const selectColl = (state) => state.coll; -export const selectFiles = (state) => selectColl(state).files; +export const selectFileList = (state) => selectColl(state).fileList; -export const selectFilters = (state) => selectColl(state).filters; +export const selectFiles = (state) => selectFileList(state).files; -export const selectCounts = (state) => selectColl(state).counts; +export const selectFileFilters = (state) => selectFileList(state).filters; -export const selectLoading = (state) => selectColl(state).loading; +export const selectFileCounts = (state) => selectFileList(state).counts; -export const selectError = (state) => selectColl(state).error; +export const selectFileLoading = (state) => selectFileList(state).loading; + +export const selectFileError = (state) => selectFileList(state).error; /** * Select cached file by id. @@ -23,3 +25,8 @@ export const selectCachedFile = (id) => (state) => * Select file matches. */ export const selectFileMatches = (state) => selectColl(state).fileMatches; + +/** + * Select file cluster. + */ +export const selectFileCluster = (state) => selectColl(state).fileCluster; diff --git a/web/src/common/components/CollapseButton/CollapseButton.js b/web/src/common/components/CollapseButton/CollapseButton.js new file mode 100644 index 00000000..e7732481 --- /dev/null +++ b/web/src/common/components/CollapseButton/CollapseButton.js @@ -0,0 +1,31 @@ +import React from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { IconButton } from "@material-ui/core"; +import ExpandLessOutlinedIcon from "@material-ui/icons/ExpandLessOutlined"; +import ExpandMoreOutlinedIcon from "@material-ui/icons/ExpandMoreOutlined"; + +function CollapseButton(props) { + const { collapsed, onClick, className, ...other } = props; + const Icon = collapsed ? ExpandMoreOutlinedIcon : ExpandLessOutlinedIcon; + + return ( + + + + ); +} + +CollapseButton.propTypes = { + /** + * Button state (collapsed or not). + */ + collapsed: PropTypes.bool, + /** + * Mouse click handler. + */ + onClick: PropTypes.func, + className: PropTypes.string, +}; + +export default CollapseButton; diff --git a/web/src/common/components/CollapseButton/index.js b/web/src/common/components/CollapseButton/index.js new file mode 100644 index 00000000..030a2096 --- /dev/null +++ b/web/src/common/components/CollapseButton/index.js @@ -0,0 +1 @@ +export { default } from "./CollapseButton"; diff --git a/web/src/collection/components/FileMatchesPage/MatchPreview/Distance.js b/web/src/common/components/Distance/Distance.js similarity index 79% rename from web/src/collection/components/FileMatchesPage/MatchPreview/Distance.js rename to web/src/common/components/Distance/Distance.js index 4a0f2f29..105ff995 100644 --- a/web/src/collection/components/FileMatchesPage/MatchPreview/Distance.js +++ b/web/src/common/components/Distance/Distance.js @@ -10,7 +10,7 @@ const useStyles = makeStyles((theme) => ({ display: "flex", flexDirection: "column", alignItems: "stretch", - padding: theme.spacing(1), + padding: (props) => (props.dense ? 0 : theme.spacing(1)), }, title: { ...theme.mixins.text, @@ -19,11 +19,11 @@ const useStyles = makeStyles((theme) => ({ valueContainer: { display: "flex", alignItems: "center", - marginTop: theme.spacing(1), + marginTop: (props) => (props.dense ? 0 : theme.spacing(1)), }, indicator: { flexGrow: 1, - margin: theme.spacing(1), + margin: (props) => (props.dense ? theme.spacing(0.5) : theme.spacing(1)), }, })); @@ -62,11 +62,11 @@ function score(value) { } function Distance(props) { - const { value, className } = props; - const classes = useStyles(); + const { value, dense = false, className, ...other } = props; + const classes = useStyles({ dense }); const messages = useMessages(value); return ( -
+
{messages.score}
({ + root: { + display: "flex", + justifyContent: "center", + alignItems: "center", + }, + errorMessage: { + display: "flex", + alignItems: "center", + justifyContent: "center", + flexDirection: "column", + ...theme.mixins.title4, + }, + retryLink: { + color: theme.palette.primary.main, + cursor: "pointer", + paddingTop: theme.spacing(1), + }, +})); + +/** + * Get i18n text. + */ +function useMessages() { + const intl = useIntl(); + return { + retry: intl.formatMessage({ id: "actions.retry" }), + }; +} + +/** + * Interactive loading indicator. + */ +function Loading(props) { + const { error, errorMessage, onRetry, progress, className } = props; + const classes = useStyles(); + const messages = useMessages(); + const variant = progress == null ? "indeterminate" : "determinate"; + + return ( +
+ {!error && ( + + )} + {error && ( +
+ {errorMessage} +
+ {messages.retry} +
+
+ )} +
+ ); +} + +Loading.propTypes = { + /** + * Indicate loading error + */ + error: PropTypes.bool, + /** + * The value of the progress indicator for the determinate and static variants. + * Value between 0 and 1. + */ + progress: PropTypes.number, + /** + * Trigger loading of the next portion of files + */ + onRetry: PropTypes.func.isRequired, + /** + * Message displayed when error=true + */ + errorMessage: PropTypes.string.isRequired, + className: PropTypes.string, +}; + +export default Loading; diff --git a/web/src/common/components/Loading/index.js b/web/src/common/components/Loading/index.js new file mode 100644 index 00000000..61edb381 --- /dev/null +++ b/web/src/common/components/Loading/index.js @@ -0,0 +1 @@ +export { default } from "./Loading"; diff --git a/web/src/common/components/LoadingTrigger/LoadTrigger.js b/web/src/common/components/LoadingTrigger/LoadTrigger.js new file mode 100644 index 00000000..9962dc93 --- /dev/null +++ b/web/src/common/components/LoadingTrigger/LoadTrigger.js @@ -0,0 +1,121 @@ +import React, { useCallback } from "react"; +import clsx from "clsx"; +import PropTypes from "prop-types"; +import { makeStyles } from "@material-ui/styles"; +import { useIntl } from "react-intl"; +import VisibilitySensor from "react-visibility-sensor"; +import CircularProgress from "@material-ui/core/CircularProgress"; + +const useStyles = makeStyles((theme) => ({ + trigger: { + display: "flex", + alignItems: "center", + justifyContent: "center", + }, + triggerArea: { + minWidth: 1, + minHeight: 1, + }, + errorMessage: { + display: "flex", + alignItems: "center", + justifyContent: "center", + flexDirection: "column", + ...theme.mixins.title4, + }, + retryLink: { + color: theme.palette.primary.main, + cursor: "pointer", + paddingTop: theme.spacing(1), + }, +})); + +/** + * Get i18n text. + */ +function useMessages() { + const intl = useIntl(); + return { + retry: intl.formatMessage({ id: "actions.retry" }), + }; +} + +/** + * Loading trigger + */ +function LoadTrigger(props) { + const { + error, + container: Container, + hasMore, + loading, + onLoad, + errorMessage, + className, + ...other + } = props; + const classes = useStyles(); + const messages = useMessages(); + + const handleVisibilityChange = useCallback( + (visible) => { + if (visible && !loading && hasMore) { + onLoad(); + } + }, + [onLoad, loading, hasMore] + ); + + if (!hasMore) { + return null; + } + + return ( + + {!loading && !error && ( + +
+ + )} + {loading && } + {!loading && error && ( +
+ {errorMessage} +
+ {messages.retry} +
+
+ )} + + ); +} + +LoadTrigger.propTypes = { + /** + * Indicate loading error + */ + error: PropTypes.bool, + /** + * Loading is in progress + */ + loading: PropTypes.bool.isRequired, + /** + * Trigger loading of the next portion of items + */ + onLoad: PropTypes.func.isRequired, + /** + * Whether more items could be loaded + */ + hasMore: PropTypes.bool.isRequired, + /** + * Container component + */ + container: PropTypes.elementType.isRequired, + /** + * Message displayed when error=true + */ + errorMessage: PropTypes.string.isRequired, + className: PropTypes.string, +}; + +export default LoadTrigger; diff --git a/web/src/common/components/LoadingTrigger/index.js b/web/src/common/components/LoadingTrigger/index.js new file mode 100644 index 00000000..d51b96f7 --- /dev/null +++ b/web/src/common/components/LoadingTrigger/index.js @@ -0,0 +1 @@ +export { default } from "./LoadingTrigger"; diff --git a/web/src/common/components/SelectableTabs/SelectableTab.js b/web/src/common/components/SelectableTabs/SelectableTab.js index f48d5366..2dce0ad5 100644 --- a/web/src/common/components/SelectableTabs/SelectableTab.js +++ b/web/src/common/components/SelectableTabs/SelectableTab.js @@ -2,36 +2,33 @@ import React, { useCallback } from "react"; import clsx from "clsx"; import PropTypes from "prop-types"; import { makeStyles } from "@material-ui/styles"; -import SelectionDecorator from "../SelectionDecorator"; import { ButtonBase } from "@material-ui/core"; +import Badge from "@material-ui/core/Badge"; const useStyles = makeStyles((theme) => ({ tab: { cursor: "pointer", - - /** - * Ensure selection decorator is displayed correctly. - */ - transform: "translate(0%, 0px)", + borderBottom: `3px solid rgba(0,0,0,0)`, + paddingBottom: theme.spacing(0.5), }, sizeLarge: { ...theme.mixins.navlinkLarge, fontWeight: 500, - marginBottom: theme.spacing(1), }, sizeMedium: { ...theme.mixins.navlink, fontWeight: 500, - marginBottom: theme.spacing(1), }, sizeSmall: { ...theme.mixins.navlinkSmall, fontWeight: 500, - marginBottom: theme.spacing(0.5), }, inactive: { color: theme.palette.action.textInactive, }, + selected: { + borderBottom: `3px solid ${theme.palette.primary.main}`, + }, })); /** @@ -57,6 +54,9 @@ function SelectableTab(props) { value, size = "medium", className, + badge, + badgeMax, + badgeColor = "default", ...other } = props; const classes = useStyles(); @@ -65,7 +65,7 @@ function SelectableTab(props) { return ( -
{label}
- {selected && } + +
{label}
+
); } @@ -100,6 +101,18 @@ SelectableTab.propTypes = { * Size variants */ size: PropTypes.oneOf(["small", "medium", "large"]), + /** + * The value displayed with the optional badge. + */ + badge: PropTypes.node, + /** + * The color of the component. It supports those theme colors that make sense for this component. + */ + badgeColor: PropTypes.oneOf(["default", "error", "primary", "secondary"]), + /** + * Max count to show in badge (if the value is numeric). + */ + badgeMax: PropTypes.number, className: PropTypes.string, }; diff --git a/web/src/common/helpers/objectDiff.js b/web/src/common/helpers/objectDiff.js new file mode 100644 index 00000000..fe5e32e5 --- /dev/null +++ b/web/src/common/helpers/objectDiff.js @@ -0,0 +1,26 @@ +import lodash from "lodash"; + +/** + * Get keys of multiple objects. + * @param objects any list of plain objects. + * @returns {Set} + */ +function keys(...objects) { + const result = new Set(); + for (const object of objects) { + Object.keys(object).forEach(result.add, result); + } + return result; +} + +/** + * Compare two plain objects, perform deep comparison on each attribute and + * return a new object where for each attribute there is a comparison result. + */ +export default function objectDiff(object, otherObject) { + const result = {}; + for (const key of keys(object, otherObject)) { + result[key] = !lodash.isEqual(object[key], otherObject[key]); + } + return result; +} diff --git a/web/src/common/helpers/paths.js b/web/src/common/helpers/paths.js new file mode 100644 index 00000000..05efbfac --- /dev/null +++ b/web/src/common/helpers/paths.js @@ -0,0 +1,6 @@ +/** + * Get file name from path. + */ +export function basename(filename) { + return filename.substring(filename.lastIndexOf("/") + 1); +} diff --git a/web/src/i18n/locales/default.en-US.json b/web/src/i18n/locales/default.en-US.json index 96df34bc..97ef7f46 100644 --- a/web/src/i18n/locales/default.en-US.json +++ b/web/src/i18n/locales/default.en-US.json @@ -37,6 +37,8 @@ "aria.label.matchedFile": "Matched File {name}", "aria.label.changeLowerDate": "Change lower date bound", "aria.label.changeUpperDate": "Change upper date bound", + "aria.label.nextMatch": "Next match", + "aria.label.prevMatch": "Previous match", "actions.showFiltersPane": "Show Filters", "actions.hideFiltersPane": "Hide Filters", "actions.saveFilters": "Save Filters", @@ -141,11 +143,14 @@ "file.tabExif": "EXIF Data", "file.load.error": "Error loading files.", "file.load.error.single": "Error loading file.", + "file.load.error.notFound": "File not found.", "file.details": "Details", "file.oneMatch": "01 File Matched", "file.manyMatches": "{count} Files Matched", "file.matched": "{count} Matched Files", "file.cluster": "Cluster", + "file.mother": "Mother file", + "file.match": "Match", "distance.score": "Match score: {value}", "filter.title": "Filters", "filter.content": "Content", @@ -170,6 +175,12 @@ "filter.defaultMinDate": "minimal date", "filter.creationDate": "Creation date (mm/dd/yyyy)", "filter.creationDate.help": "Based on file creation date.", - "preview.notAvailable": "Preview not available." + "preview.notAvailable": "Preview not available.", + "match.load.error": "Error loading matches.", + "match.notMatch": "Match not found.", + "match.noMatches": "No matches found.", + "video.error.missing": "File Missing", + "video.error.load": "Loading Error", + "video.error.playback": "Playback Error" } } diff --git a/web/src/routing/routes.js b/web/src/routing/routes.js index 9df4367f..31fa366c 100644 --- a/web/src/routing/routes.js +++ b/web/src/routing/routes.js @@ -17,6 +17,9 @@ export const routes = { get fileCluster() { return `${this.file}/cluster`; }, + get fileComparison() { + return `${this.file}/compare/:matchFileId?`; + }, fileURL(id) { return `${this.fingerprints}/${id}`; }, @@ -26,6 +29,9 @@ export const routes = { fileClusterURL(id) { return `${this.fileURL(id)}/cluster`; }, + fileComparisonURL(id, matchFileId = "") { + return `${this.fileURL(id)}/compare/${matchFileId}`; + }, }, database: { home: "/database", diff --git a/web/src/server-api/Server/Server.js b/web/src/server-api/Server/Server.js index 87d31da7..7056bf3f 100644 --- a/web/src/server-api/Server/Server.js +++ b/web/src/server-api/Server/Server.js @@ -2,7 +2,9 @@ import axios from "axios"; import * as HttpStatus from "http-status-codes"; import Transform from "./Transform"; import { Response } from "../Response"; -import { filtersToQueryParams } from "./helpers"; +import fileFiltersToQueryParams from "./helpers/fileFiltersToQueryParams"; +import clusterFiltersToQueryParams from "./helpers/clusterFiltersToQueryParams"; +import matchesFiltersToQueryParams from "./helpers/matchesFiltersToQueryParams"; export default class Server { constructor({ baseURL = "/api/v1", timeout = 10 * 1000, headers = {} } = {}) { @@ -21,7 +23,7 @@ export default class Server { offset, limit, include: ["signature", "meta", "exif"].join(","), - ...filtersToQueryParams(filters), + ...fileFiltersToQueryParams(filters), }, }); const data = this.transform.fetchFileResults(response.data); @@ -45,18 +47,41 @@ export default class Server { } } + async fetchFileCluster({ + fileId, + limit = 20, + offset = 0, + fields = [], + filters, + }) { + try { + const response = await this.axios.get(`/files/${fileId}/cluster`, { + params: { + limit, + offset, + ...clusterFiltersToQueryParams({ filters, fields }), + }, + }); + const data = this.transform.fetchFileClusterResults(response.data); + return Response.ok(data); + } catch (error) { + return this.errorResponse(error); + } + } + async fetchFileMatches({ - id, + fileId, limit = 20, offset = 0, - fields = ["meta", "exif"], + fields = ["meta", "exif", "scenes"], + filters = {}, }) { try { - const response = await this.axios.get(`/files/${id}/matches`, { + const response = await this.axios.get(`/files/${fileId}/matches`, { params: { limit, offset, - include: fields.join(","), + ...matchesFiltersToQueryParams({ filters, fields }), }, }); const data = this.transform.fetchFileMatchesResults(response.data); @@ -66,6 +91,15 @@ export default class Server { } } + async probeVideoFile({ id }) { + try { + await this.axios.head(`/files/${id}/watch`); + return Response.ok(null); + } catch (error) { + return this.errorResponse(error); + } + } + errorResponse(error) { if (error.response == null) { return Response.clientError(error); diff --git a/web/src/server-api/Server/Transform.js b/web/src/server-api/Server/Transform.js index 9cc7d95e..a9f7cd9e 100644 --- a/web/src/server-api/Server/Transform.js +++ b/web/src/server-api/Server/Transform.js @@ -1,5 +1,4 @@ import { randomObjects } from "../MockServer/fake-data/objects"; -import { parse as parseDate } from "date-fns"; /** * Data-transfer object and internal data format may evolve independently, the @@ -48,7 +47,7 @@ export default class Transform { if (value == null) { return null; } - return parseDate(value, "'UTC' yyyy-MM-dd HH", new Date()); + return new Date(value * 1000); } fileMetadata(data) { @@ -58,13 +57,9 @@ export default class Transform { }; } return { - grayAverage: data.meta.gray_avg, grayMax: data.meta.gray_max, - grayStd: data.meta.gray_std, - stdAverage: data.meta.video_avg_std, - maxDiff: data.meta.video_max_dif, flagged: data.meta.flagged, - length: data.meta.video_length * 1000 || data.exif?.General_Duration, + length: data.exif?.General_Duration || 0, }; } @@ -103,8 +98,21 @@ export default class Transform { return scenes; } + fetchFileClusterResults(data) { + return { + total: data.total, + matches: data.matches.map((match) => this.fileClusterMatch(match)), + files: data.files.map((file) => this.videoFile(file)), + }; + } + + fileClusterMatch(match) { + return { ...match }; // No difference at the moment + } + fetchFileMatchesResults(data) { return { + offset: data.offset, total: data.total, matches: data.items.map((match) => this.fileMatch(match)), }; @@ -112,6 +120,7 @@ export default class Transform { fileMatch(match) { return { + id: match.id, distance: match.distance, file: this.videoFile(match.file), }; diff --git a/web/src/server-api/Server/helpers/clusterFiltersToQueryParams.js b/web/src/server-api/Server/helpers/clusterFiltersToQueryParams.js new file mode 100644 index 00000000..518edbf4 --- /dev/null +++ b/web/src/server-api/Server/helpers/clusterFiltersToQueryParams.js @@ -0,0 +1,19 @@ +/** + * Convert file filters to axios request params. + */ +export default function clusterFiltersToQueryParams({ filters, fields }) { + const params = {}; + if (filters?.hops != null) { + params.hops = filters.hops; + } + if (filters?.minDistance != null) { + params.min_distance = filters.minDistance; + } + if (filters?.maxDistance != null) { + params.max_distance = filters.maxDistance; + } + if (fields != null && fields.length > 0) { + params.include = fields.join(","); + } + return params; +} diff --git a/web/src/server-api/Server/helpers.js b/web/src/server-api/Server/helpers/fileFiltersToQueryParams.js similarity index 90% rename from web/src/server-api/Server/helpers.js rename to web/src/server-api/Server/helpers/fileFiltersToQueryParams.js index ae30966e..00887206 100644 --- a/web/src/server-api/Server/helpers.js +++ b/web/src/server-api/Server/helpers/fileFiltersToQueryParams.js @@ -1,6 +1,9 @@ import { format as formatDate } from "date-fns"; -export function filtersToQueryParams(filters) { +/** + * Convert file filters to axios request params. + */ +export default function fileFiltersToQueryParams(filters) { const params = {}; if (filters.query) { params.path = filters.query; diff --git a/web/src/server-api/Server/helpers/matchesFiltersToQueryParams.js b/web/src/server-api/Server/helpers/matchesFiltersToQueryParams.js new file mode 100644 index 00000000..813d605f --- /dev/null +++ b/web/src/server-api/Server/helpers/matchesFiltersToQueryParams.js @@ -0,0 +1,10 @@ +/** + * Convert file match filters to axios request parameters. + */ +export default function matchesFiltersToQueryParams({ fields }) { + const params = {}; + if (fields != null && fields.length > 0) { + params.include = fields.join(","); + } + return params; +} diff --git a/winnow/annotation/.ipynb_checkpoints/tools-checkpoint.py b/winnow/annotation/.ipynb_checkpoints/tools-checkpoint.py deleted file mode 100644 index 224b3f16..00000000 --- a/winnow/annotation/.ipynb_checkpoints/tools-checkpoint.py +++ /dev/null @@ -1,50 +0,0 @@ -import pandas as pd -from .utils import create_interface - -class Annotator: - - def __init__(self,report_path,save_path,annotation_label = 'is_match',annotation_default_value=-1,transform_query_path=True): - - self.report_path = report_path - self.save_path = save_path - self.annotation_label = annotation_label - self.annotation_default_value = annotation_default_value - self.transform_query_path = transform_query_path - self.matches_df = None - self.unique_qs = None - self.build() - - def build(self): - - self.matches_df = pd.read_csv(self.report_path) - - if self.annotation_label not in self.matches_df.columns: - print('Creating new column for annotation: {} - default value: {}'.format(self.annotation_label,self.annotation_default_value)) - self.matches_df[self.annotation_label] = self.annotation_default_value - else: - print('Previous annotations loaded') - print(self.matches_df[self.annotation_label].value_counts()) - - - self.unique_qs = self.matches_df['query_video'].unique() - - - - - def run(self): - - grid = create_interface(self.matches_df,self.save_path,self.annotation_label,transform_query_path=self.transform_query_path) - return grid - - - def summary(self): - - - return pd.crosstab(self.matches_df['query_video'], - self.matches_df[self.annotation_label], - aggfunc='count', - values=self.matches_df[self.annotation_label], - margins=True).fillna(0).sort_values('All',ascending=False) - - - diff --git a/winnow/annotation/.ipynb_checkpoints/utils-checkpoint.py b/winnow/annotation/.ipynb_checkpoints/utils-checkpoint.py deleted file mode 100644 index 76911477..00000000 --- a/winnow/annotation/.ipynb_checkpoints/utils-checkpoint.py +++ /dev/null @@ -1,204 +0,0 @@ -import os -import numpy as np -import matplotlib.pyplot as plt -from IPython.display import display -from ipywidgets import interact, interactive, fixed, interact_manual,Button,Layout,GridspecLayout,Output - - - -def create_expanded_button(description, button_style): - return Button(description=description, button_style=button_style, layout=Layout(height='auto', width='auto')) - - -def create_interface(matches_df,save_path,annotation_label,transform_query_path = True): - - # Create Buttons - a = create_expanded_button('Next Video', 'info') - b = create_expanded_button('Previous Video', 'info') - c = create_expanded_button('Next Query', 'info') - d = create_expanded_button('Previous Query', 'info') - e = create_expanded_button('Save', 'warning') - f = create_expanded_button('Match', 'success') - g = create_expanded_button('Not a Match', 'danger') - - # Create Outputs to be later assigned - - output = Output() - output_2 = Output() - output_desc = Output() - output_2_desc = Output() - - - # Create event handlers and other utility functions - - def click_save(b): - fn = save_path - matches_df.to_csv(fn) - print("Saved on {}".format(fn)) - - - def create_strip(frames,beg): - - if frames.shape[0] < 1: - print(frames.shape) - plt.figure(figsize=(5 * frames.shape[0],10)) - else: - plt.figure(figsize=(20,10)) - - - plt.imshow(np.hstack(frames[beg::][:5])) - plt.show() - - def get_frame_summary(idx,video_list,beg=0,transform_query_path = True): - - fp = video_list[idx] - if transform_query_path: - FRAMES_PATH = os.path.join('data','representations','frame_level',fp+'_vgg_frames.npy') - else: - FRAMES_PATH = fp - - frames = np.load(FRAMES_PATH) - - - interact(create_strip,frames=fixed(frames),beg=(0,len(frames) // 5)) - - def display_row(out,info): - - with out: - out.clear_output() - info_var = ['query_video','match_video','distance',annotation_label] - for el in info_var: - - print("{}:{}".format(el,info[el])) - - def reset_current_video_match(): - with output: - output.clear_output() - global i,filtered - i = 0 - print('Match Video - {} / {}'.format(i + 1,len(filtered))) - get_frame_summary(i,filtered['match_video'].values) - display_row(output_desc,filtered.iloc[i,:]) - - - def move_video_match(inc): - global i - i+=inc - i = max(0,i) - i = min(len(filtered)-1,i) - print('Match Video - {} / {}'.format(i + 1,len(filtered))) - - def move_query_video(inc): - global j,msk,filtered - j+=inc - j = max(0,j) - j = min(len(unique_qs)-1,j) - msk = matches_df['query_video'] == unique_qs[j] - filtered = matches_df.loc[msk,:] - print('Query Video - {} / {}'.format(j + 1,len(unique_qs))) - - - - - def on_button_clicked_is_match(b): - with output: - output.clear_output() - global i,filtered - original_index = filtered.index[i] - filtered.loc[original_index,annotation_label] = 1 - matches_df.loc[original_index,annotation_label] = 1 - move_video_match(1) - get_frame_summary(i,filtered['match_video'].values) - display_row(output_desc,filtered.iloc[i,:]) - - - - def on_button_clicked_not_match(b): - with output: - output.clear_output() - global i,filtered - original_index = filtered.index[i] - filtered.loc[original_index,annotation_label] = 0 - matches_df.loc[original_index,annotation_label] = 0 - move_video_match(1) - get_frame_summary(i,filtered['match_video'].values) - display_row(output_desc,filtered.iloc[i,:]) - - def on_button_clicked_next_video_match(b): - with output: - output.clear_output() - move_video_match(1) - get_frame_summary(i,filtered['match_video'].values) - display_row(output_desc,filtered.iloc[i,:]) - - - def on_button_previous_video_match(b): - with output: - output.clear_output() - move_video_match(-1) - get_frame_summary(i,filtered['match_video'].values) - display_row(output_desc,filtered.iloc[i,:]) - - - def on_button_clicked_query(b): - with output_2: - output_2.clear_output() - move_query_video(1) - get_frame_summary(j,unique_qs,transform_query_path=transform_query_path) - reset_current_video_match() - - - - def on_button_previous_video_query(b): - with output_2: - output_2.clear_output() - move_query_video(-1) - get_frame_summary(j,unique_qs,transform_query_path=transform_query_path) - reset_current_video_match() - - - a.on_click(on_button_clicked_next_video_match) - b.on_click(on_button_previous_video_match) - c.on_click(on_button_clicked_query) - d.on_click(on_button_previous_video_query) - g.on_click(on_button_clicked_not_match) - f.on_click(on_button_clicked_is_match) - e.on_click(click_save) - - - - global i,j,msk,filtered - i = 0 - j = 0 - unique_qs = matches_df['query_video'].unique() - msk = matches_df['query_video'] == unique_qs[j] - filtered = matches_df.loc[msk] - - - # Initialize outputs with first - with output_2: - print('Query Video - {} / {}'.format(j + 1,len(unique_qs))) - get_frame_summary(j,unique_qs,transform_query_path=transform_query_path) - with output: - print('Match Video - {} / {}'.format(i + 1,len(filtered))) - get_frame_summary(i,filtered['match_video'].values) - display_row(output_desc,filtered.iloc[i,:]) - - grid = GridspecLayout(8, 4, height='1000px') - - - grid[0,:] = output_desc - grid[1:3, :] = output_2 - grid[3:5, :] = output - - grid[5, 1] = g - grid[5, 2] = f - - grid[6, 0] = d - grid[6, 1] = c - grid[6, 2] = b - grid[6, 3] = a - grid[7, 3] = e - - return grid - diff --git a/winnow/duplicate_detection/duplicate_detector.py b/winnow/duplicate_detection/duplicate_detector.py index b808d2b0..bf6731b6 100644 --- a/winnow/duplicate_detection/duplicate_detector.py +++ b/winnow/duplicate_detection/duplicate_detector.py @@ -2,14 +2,13 @@ from sklearn.cluster import DBSCAN from sklearn.metrics import pairwise_distances import matplotlib.pyplot as plt -from collections import Counter import pandas as pd -from .scene_summary import get_video_summary,get_video_summary_list +from .scene_summary import get_video_summary_list -class DuplicateDetector: +class DuplicateDetector: - def __init__(self,distance=0.001,signatures = None,metric='cosine'): + def __init__(self, distance=0.001, signatures=None, metric='cosine'): self.distance = distance self.file_index = signatures self.clustering = None @@ -18,46 +17,56 @@ def __init__(self,distance=0.001,signatures = None,metric='cosine'): self.video_signatures = None self.df = None - def find(self,video_signatures): + def find(self, video_signatures): self.video_signatures = video_signatures - self.clustering = DBSCAN(min_samples=1,eps=self.distance,metric=self.metric) + self.clustering = DBSCAN( + min_samples=1, + eps=self.distance, + metric=self.metric) self.clusters = self.clustering.fit_predict(self.video_signatures) - print('Number of Files:{} - Number of Clusters:{}'.format(video_signatures.shape[0],len(np.unique(self.clusters)))) - self.df = pd.DataFrame({'signature_fp':self.file_index,'cluster':self.clusters}) - self.df['file_name'] = self.df['signature_fp'].apply(lambda x:x.split('/')[-1].split('.')[0].split('_vgg')[0]) + print('Number of Files:{} - Number of Clusters:{}'.format( + video_signatures.shape[0], + len(np.unique(self.clusters)))) + self.df = pd.DataFrame({ + 'signature_fp': self.file_index, + 'cluster': self.clusters}) + + self.df['file_name'] = (self.df['signature_fp'] + .apply( + lambda x: x.split('/')[-1] + .split('.')[0] + .split('_vgg')[0])) return self.clusters def summary(self): return self.df['cluster'].value_counts() - - def show_distance_matrix(self,comparison=False): + def show_distance_matrix(self, comparison=False): D = pairwise_distances(self.video_signatures) sorting_msk = np.argsort(self.clusters) sorted_pd = np.array([x[sorting_msk] for x in D]) - sorted_pd = sorted_pd[sorting_msk,:] - _,ax = plt.subplots(nrows=1,ncols=2,figsize=(20,20)) - ax[0].imshow(D,zorder=5,cmap='Blues',interpolation=None) + sorted_pd = sorted_pd[sorting_msk, :] + _, ax = plt.subplots(nrows=1, ncols=2, figsize=(20, 20)) + ax[0].imshow(D, zorder=5, cmap='Blues', interpolation=None) ax[0].set_title('Original Distance Matrix') - ax[1].imshow(sorted_pd,zorder=5,cmap='Blues',interpolation=None) + ax[1].imshow(sorted_pd, zorder=5, cmap='Blues', interpolation=None) ax[1].set_title('Distance Matrix - Sorted by Cluster') - print('White Square should show concentrations of duplicated documents') + print('White Square should show concentrations of duplicated docs') - def attach_source_videos(self,fp,column = 'fp'): + def attach_source_videos(self, fp, column='fp'): print(fp) - video_list = pd.read_csv(fp,header=None,names=[column]) - video_list['file_name'] = video_list['fp'].apply(lambda x:x.split('/')[-1].split('.')[0]) - self.df = self.df.merge(video_list,on='file_name') - - def show_cluster(self,cluster_id): - subset = self.df.loc[self.df['cluster'] == cluster_id,:] - summaries = get_video_summary_list(subset.fp) - return summaries - - + video_list = pd.read_csv(fp, header=None, names=[column]) + def pars(x): + return x.split('/')[-1].split('.')[0] + video_list['file_name'] = (video_list['fp'].apply(pars)) + self.df = self.df.merge(video_list, on='file_name') + def show_cluster(self, cluster_id): + subset = self.df.loc[self.df['cluster'] == cluster_id, :] + summaries = get_video_summary_list(subset.fp) + return summaries diff --git a/winnow/duplicate_detection/scene_summary.py b/winnow/duplicate_detection/scene_summary.py index f5aa3884..f8419705 100644 --- a/winnow/duplicate_detection/scene_summary.py +++ b/winnow/duplicate_detection/scene_summary.py @@ -1,41 +1,37 @@ from __future__ import print_function -import os - -import scenedetect from scenedetect.video_manager import VideoManager from scenedetect.scene_manager import SceneManager -from scenedetect.frame_timecode import FrameTimecode from scenedetect.stats_manager import StatsManager from scenedetect.detectors import ContentDetector from PIL import Image from moviepy.editor import VideoFileClip -import matplotlib.pyplot as plt import numpy as np STATS_FILE_PATH = 'testvideo.stats.csv' - def get_scene_list(filename): - # Create a video_manager point to video file testvideo.mp4. Note that multiple - # videos can be appended by simply specifying more file paths in the list - # passed to the VideoManager constructor. Note that appending multiple videos - # requires that they all have the same frame size, and optionally, framerate. + # Create a video_manager point to video file testvideo.mp4. Note that + # multiple videos can be appended by simply specifying more file + # paths in the list passed to the VideoManager constructor. Note that + # appending multiple videos requires that they all have the same frame + # size, and optionally, framerate. video_manager = VideoManager([filename]) stats_manager = StatsManager() scene_manager = SceneManager(stats_manager) - # Add ContentDetector algorithm (constructor takes detector options like threshold). + # Add ContentDetector algorithm + # (constructor takes detector options like threshold). scene_manager.add_detector(ContentDetector()) base_timecode = video_manager.get_base_timecode() try: - start_time = base_timecode + 20 # 00:00:00.667 end_time = base_timecode + 20.0 # 00:00:20.000 # Set video_manager duration to read frames from 00:00:00 to 00:00:20. video_manager.set_duration(start_time=start_time, end_time=end_time) - # Set downscale factor to improve processing speed (no args means default). + # Set downscale factor to improve processing speed + # (no args means default). video_manager.set_downscale_factor() # Start video_manager. @@ -46,14 +42,13 @@ def get_scene_list(filename): # Obtain list of detected scenes. scene_list = scene_manager.get_scene_list(base_timecode) - # Like FrameTimecodes, each scene in the scene_list can be sorted if the - # list of scenes becomes unsorted. + # Like FrameTimecodes, each scene in the scene_list can be + # sorted if the list of scenes becomes unsorted. print(scene_list) return scene_list - - finally: + video_manager.release() @@ -61,22 +56,27 @@ def get_video_summary(filename): clip = VideoFileClip(filename) scenes = get_scene_list(filename) frame_list = [x[0].frame_num for x in scenes] - frames = [Image.fromarray(f).resize((120,120)) for i,f in enumerate(clip.iter_frames()) if i in frame_list] + frames = [ + Image.fromarray(f).resize((120, 120)) + for i, f in enumerate(clip.iter_frames()) + if i in frame_list] return np.hstack(frames) + def get_video_summary_list(list_of_videos): scenes_descriptors = [get_scene_list(x) for x in list_of_videos] - scenes_descriptors = sorted(scenes_descriptors,key= lambda x : len(x)) + scenes_descriptors = sorted(scenes_descriptors, key=lambda x: len(x)) main_scenes = scenes_descriptors[-1] frame_list = [x[0].frame_num for x in main_scenes] - summaries = [] + summaries = [] for vid in list_of_videos: clip = VideoFileClip(vid) - frames = [Image.fromarray(f).resize((120,120)) for i,f in enumerate(clip.iter_frames()) if i in frame_list] + frames = [ + Image.fromarray(f).resize((120, 120)) + for i, f in enumerate(clip.iter_frames()) + if i in frame_list + ] summaries.append(np.hstack(frames)) return summaries - - - diff --git a/winnow/feature_extraction/__init__.py b/winnow/feature_extraction/__init__.py index 38474914..ae81e2ab 100644 --- a/winnow/feature_extraction/__init__.py +++ b/winnow/feature_extraction/__init__.py @@ -1,4 +1,4 @@ from .intermediate_cnn import * from .frame_to_video import * -from .similarity_model import * +from .similarity_model import * \ No newline at end of file diff --git a/winnow/feature_extraction/extraction_routine.py b/winnow/feature_extraction/extraction_routine.py index bf4a9c43..a773040f 100644 --- a/winnow/feature_extraction/extraction_routine.py +++ b/winnow/feature_extraction/extraction_routine.py @@ -1,12 +1,12 @@ +import logging import os from multiprocessing import Pool -import logging + import numpy as np from tqdm import tqdm from .model_tf import CNN_tf from .utils import load_video -from ..utils import get_hash logger = logging.getLogger() logger.setLevel(logging.ERROR) @@ -21,7 +21,13 @@ def pload_video(p, size, frame_sampling): return load_video(p, size, frame_sampling) -def feature_extraction_videos(model, video_list, reprs, storepath, cores=4, batch_sz=8, frame_sampling=1, +def feature_extraction_videos(model, + video_list, + reprs, + reprkey, + cores=4, + batch_sz=8, + frame_sampling=1, save_frames=False): """ Function that extracts the intermediate CNN features @@ -31,12 +37,18 @@ def feature_extraction_videos(model, video_list, reprs, storepath, cores=4, batc cores: CPU cores for the parallel video loading batch_sz: batch size fed to the CNN network video_list: list of video to extract features - reprs (winnow.storage.repr_storage.ReprStorage): storage of video features - storepath: convert paths to relative paths inside content root folder + reprs (winnow.storage.repr_storage.ReprStorage): storage of + video features + reprkey: function to convert video file paths to representation + storage key. frame_sampling: Minimal distance (in sec.) between frames to be saved. save_frames: Save normalized video frames. """ - video_list = {i: video.strip() for i, video in enumerate(open(video_list, encoding="utf-8").readlines())} + video_list = { + i: video.strip() + for i, video in + enumerate(open(video_list, encoding="utf-8").readlines())} + print('\nNumber of videos: ', len(video_list)) print('Storage directory: ', reprs) print('CPU cores: ', cores) @@ -44,20 +56,27 @@ def feature_extraction_videos(model, video_list, reprs, storepath, cores=4, batc print('\nFeature Extraction Process') print('==========================') - + pool = Pool(cores) future_videos = dict() - progress_bar = tqdm(range(np.max(list(video_list.keys()))+1), mininterval=1.0, unit='video') + progress_bar = tqdm( + range(np.max(list(video_list.keys()))+1), + mininterval=1.0, + unit='video') for video in progress_bar: try: video_file_path = video_list[video] progress_bar.set_postfix(video=os.path.basename(video_file_path)) if os.path.exists(video_file_path): - + if video not in future_videos: - video_tensor = pload_video(video_file_path, model.desired_size, frame_sampling) + video_tensor = pload_video( + video_file_path, + model.desired_size, + frame_sampling) + else: video_tensor = future_videos[video].get() del future_videos[video] @@ -70,25 +89,27 @@ def feature_extraction_videos(model, video_list, reprs, storepath, cores=4, batc if next_video in video_list and \ next_video not in future_videos and \ os.path.exists(video_list[next_video]): - future_videos[next_video] = pool.apply_async(pload_video, - args=[video_list[next_video], model.desired_size,frame_sampling]) + future_videos[next_video] = pool.apply_async( + pload_video, + args=[ + video_list[next_video], + model.desired_size, frame_sampling]) # extract features features = model.extract(video_tensor, batch_sz) - + # save features - storage_path, sha256 = storepath(video_file_path), get_hash(video_file_path) - reprs.frame_level.write(storage_path, sha256, features) + key = reprkey(video_file_path) + reprs.frame_level.write(key, features) if save_frames: - reprs.frames.write(storage_path, sha256, video_tensor) + reprs.frames.write(key, video_tensor) except Exception as e: logger.error(f'Error processing file:{video_list[video]}') logger.error(e) - def load_featurizer(PRETRAINED_LOCAL_PATH): - + model = CNN_tf('vgg', PRETRAINED_LOCAL_PATH) - - return model \ No newline at end of file + + return model diff --git a/winnow/feature_extraction/frame_to_video.py b/winnow/feature_extraction/frame_to_video.py index a984a732..4c63febe 100644 --- a/winnow/feature_extraction/frame_to_video.py +++ b/winnow/feature_extraction/frame_to_video.py @@ -6,7 +6,8 @@ class FrameToVideoRepresentation: def __init__(self, reps): """ Args: - reps (winnow.storage.repr_storage.ReprStorage): Intermediate representations storage. + reps (winnow.storage.repr_storage.ReprStorage): Intermediate + representations storage. """ self.reps = reps diff --git a/winnow/feature_extraction/intermediate_cnn.py b/winnow/feature_extraction/intermediate_cnn.py index f2825d5f..37f98d2d 100644 --- a/winnow/feature_extraction/intermediate_cnn.py +++ b/winnow/feature_extraction/intermediate_cnn.py @@ -4,22 +4,30 @@ class IntermediateCnnExtractor: - def __init__(self, video_src, reprs, storepath, frame_sampling=1, save_frames=False, model=None): + def __init__( + self, + video_src, + reprs, + reprkey, + frame_sampling=1, + save_frames=False, + model=None): + self.video_src = video_src self.reprs = reprs - self.storepath = storepath + self.reprkey = reprkey self.frame_sampling = frame_sampling self.save_frames = save_frames self.model = model def start(self, batch_size=8, cores=4): - print('Starting feature extraction process from {}'.format(self.video_src)) + print('Starting feature extraction process: {}'.format(self.video_src)) self.model = self.model or load_featurizer(default_model_path()) feature_extraction_videos( model=self.model, video_list=self.video_src, reprs=self.reprs, - storepath=self.storepath, + reprkey=self.reprkey, batch_sz=batch_size, cores=cores, frame_sampling=self.frame_sampling, diff --git a/winnow/feature_extraction/loading_utils.py b/winnow/feature_extraction/loading_utils.py index 66187039..f454d815 100644 --- a/winnow/feature_extraction/loading_utils.py +++ b/winnow/feature_extraction/loading_utils.py @@ -3,9 +3,15 @@ import numpy as np import pickle as pk import matplotlib.pylab as plt -from glob import glob from sklearn.metrics import precision_recall_curve -import os +from scipy.spatial.distance import cdist +import logging + +logger = logging.getLogger("winnow") +logger.setLevel(logging.ERROR) +output_file_handler = logging.FileHandler("processing_error.log") +logger.addHandler(output_file_handler) + def load_dataset(dataset): """ @@ -31,18 +37,15 @@ def load_feature_files(feature_files): file is not in the right format """ try: - return {l.split('\t')[0]: l.split('\t')[1].strip() for l in open(feature_files, 'rb').readlines()} - except: - raise Exception('''--feature_files provided is in wrong format. Each line of the - file have to contain the video id (name of the video file) + return { + line.split('\t')[0]: line.split('\t')[1].strip() + for line in open(feature_files, 'rb').readlines() + } + except Exception: + raise Exception('''--feature_files provided is in wrong format. Each line of the + file have to contain the video id (name of the video file) and the full path to the corresponding .npy file, separated - by a tab character (\\t). Example: - - 23254771545e5d278548ba02d25d32add952b2a4 features/23254771545e5d278548ba02d25d32add952b2a4.npy - 468410600142c136d707b4cbc3ff0703c112575d features/468410600142c136d707b4cbc3ff0703c112575d.npy - 67f1feff7f624cf0b9ac2ebaf49f547a922b4971 features/67f1feff7f624cf0b9ac2ebaf49f547a922b4971.npy - 7deff9e47e47c98bb341c4355dfff9a82bfba221 features/7deff9e47e47c98bb341c4355dfff9a82bfba221.npy - ...''') + by a tab character (\\t). Example:[VIDEO_ID] features/[VIDEOID].npy''') def normalize(X): @@ -60,17 +63,15 @@ def normalize(X): def global_vector_from_tensor(video_tensor): - try: - X = video_tensor - X = normalize(X) - X = X.mean(axis=0, keepdims=True) - X = normalize(X) - return X - except Exception: - print('Error processing video tensor.') - return np.array([]) - - + try: + X = video_tensor + X = normalize(X) + X = X.mean(axis=0, keepdims=True) + X = normalize(X) + return X + except Exception: + print('Error processing video tensor.') + return np.array([]) def global_vector(frame_feature_vector): @@ -99,18 +100,27 @@ def global_vector(frame_feature_vector): def frame_to_global(representations): """ - Calculate and save global feature vectors based on frame-level representation. + Calculate and save global feature vectors based on frame-level + representation. Args: - representations (winnow.storage.repr_storage.ReprStorage): Intermediate representations storage. + representations (winnow.storage.repr_storage.ReprStorage): + Intermediate representations storage. """ - for path, sha256 in representations.frame_level.list(): + for key in representations.frame_level.list(): try: - frame_feature_vector = representations.frame_level.read(path, sha256) + + frame_feature_vector = \ + representations.frame_level.read(key) + video_representation = global_vector(frame_feature_vector) - representations.video_level.write(path, sha256, video_representation) + representations.video_level.write( + key, + video_representation) except Exception as e: - raise Exception('Cant save video to destination:{}'.format(e)) + + logger.error(f'Error processing file:{key}') + logger.error(e) def plot_pr_curve(pr_curve, title): @@ -136,16 +146,40 @@ def plot_pr_curve(pr_curve, title): plt.show() -def evaluate(ground_truth, similarities, positive_labels='ESLMV', all_videos=False): +def calculate_similarities(queries, features): + """ + Function that generates video triplets from CC_WEB_VIDEO. + + Args: + queries: indexes of the query videos + features: global features of the videos in CC_WEB_VIDEO + Returns: + similarities: the similarities of each query with the videos in the dataset + """ + + features = features[0] + similarities = dict() + dist = np.nan_to_num(cdist(features[queries], features, metric='euclidean')) + for i, v in enumerate(queries): + sim = np.round(1 - dist[i] / dist.max(), decimals=6) + similarities[i + 1] = [(s, sim[s]) for s in sim.argsort()[::-1] if not np.isnan(sim[s])] + return similarities + + +def evaluate(ground_truth, + similarities, + positive_labels='ESLMV', + all_videos=False): """ Function that plots the PR-curve. Args: ground_truth: the ground truth labels for each query - similarities: the similarities of each query with the videos in the dataset + similarities: the similarities of each query with the videos in the + dataset positive_labels: labels that are considered positives - all_videos: indicator of whether all videos are considered for the evaluation - or only the videos in the query subset + all_videos: indicator of whether all videos are considered for the + evaluation or only the videos in the query subset Returns: mAP: the mean Average Precision ps_curve: the values of the PR-curve @@ -166,9 +200,12 @@ def evaluate(ground_truth, similarities, positive_labels='ESLMV', all_videos=Fal s += i / ri y_target[-1] = 1.0 - mAP += s / np.sum([1.0 for label in labels.values() if label in positive_labels]) + mAP += s / np.sum([1.0 for label in labels.values() + if label in positive_labels]) - precision, recall, thresholds = precision_recall_curve(y_target, y_score) + precision, recall, thresholds = precision_recall_curve( + y_target, + y_score) p = [] for i in range(20, 0, -1): idx = np.where((recall >= i*0.05))[0] diff --git a/winnow/feature_extraction/model_tf.py b/winnow/feature_extraction/model_tf.py index bc1cee2a..dbfd5992 100644 --- a/winnow/feature_extraction/model_tf.py +++ b/winnow/feature_extraction/model_tf.py @@ -15,13 +15,15 @@ """ Caffe implementation of the feature extraction process described in: -[1] Giorgos Kordopatis-Zilos, Symeon Papadopoulos, Ioannis Patras, Yiannis Kompatsiaris +[1] Giorgos Kordopatis-Zilos, Symeon Papadopoulos, Ioannis Patras, + Yiannis Kompatsiaris Near-Duplicate Video Retrieval by Aggregating Intermediate CNN Layers. International Conference on Multimedia Modeling (MMM), 2017. This method is also used in: -[2] Giorgos Kordopatis-Zilos, Symeon Papadopoulos, Ioannis Patras, Yiannis Kompatsiaris +[2] Giorgos Kordopatis-Zilos, Symeon Papadopoulos, Ioannis Patras, Yiannis + Kompatsiaris Near-Duplicate Video Retrieval with Deep Metric Learning. IEEE International Conference on Computer Vision Workshop (ICCVW), 2017. """ @@ -31,7 +33,7 @@ warnings.filterwarnings("ignore") import tensorflow as tf tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR) -import sys + class CNN_tf(): @@ -55,7 +57,11 @@ def __init__(self, name, model_ckpt): arg_scope = inception_v4.inception_v4_arg_scope() network = inception_v4.inception_v4 preprocess = self.inc_preprocess - self.layers = ['Mixed_3a', 'Mixed_4a', 'Mixed_5e', 'Mixed_6h', 'Mixed_7b'] + self.layers = ['Mixed_3a', + 'Mixed_4a', + 'Mixed_5e', + 'Mixed_6h', + 'Mixed_7b'] elif name == 'resnet': from .nets import resnet_v1 self.desired_size = resnet_v1.resnet_v1.default_image_size @@ -70,28 +76,37 @@ def __init__(self, name, model_ckpt): arg_scope = vgg.vgg_arg_scope() network = vgg.vgg_16 preprocess = self.vgg_preprocess - self.layers = ['vgg_16/conv2/conv2_1', 'vgg_16/conv2/conv2_2', + self.layers = [ + 'vgg_16/conv2/conv2_1', 'vgg_16/conv2/conv2_2', 'vgg_16/conv3/conv3_1', 'vgg_16/conv3/conv3_2', 'vgg_16/conv3/conv3_3', 'vgg_16/conv4/conv4_1', 'vgg_16/conv4/conv4_2', 'vgg_16/conv4/conv4_3', 'vgg_16/conv5/conv5_1', 'vgg_16/conv5/conv5_2', 'vgg_16/conv5/conv5_3'] else: - raise ValueError('Network not found. Supported networks for Tensorflow framework: vgg, resnet, inception') + raise ValueError('Supported networks: vgg, resnet, inception') - self.input = tf.compat.v1.placeholder(tf.uint8, - shape=(None, self.desired_size, self.desired_size, 3), name='input') + self.input = tf.compat.v1.placeholder( + tf.uint8, + shape=(None, self.desired_size, self.desired_size, 3), + name='input') vid_processed = preprocess(self.input) # create the CNN network with tf.contrib.slim.arg_scope(arg_scope): - _, net = network(vid_processed, num_classes=None, is_training=False) + _, net = network( + vid_processed, + num_classes=None, + is_training=False) # 1. normalize on channel dimension # 2. global max-pooling on channel dimension # 3. normalize feature vector - net = [tf.nn.l2_normalize(tf.reduce_max(tf.nn.l2_normalize(tf.nn.relu(net[l]) - , 3, epsilon=1e-15), axis=(1, 2)), 1, epsilon=1e-15) for l in self.layers] + net = [tf.nn.l2_normalize( + tf.reduce_max( + tf.nn.l2_normalize( + tf.nn.relu(net[lay]), 3, epsilon=1e-15), + axis=(1, 2)), 1, epsilon=1e-15) for lay in self.layers] self.output = tf.concat(net, axis=1) self.final_sz = self.output.get_shape()[1] @@ -113,10 +128,18 @@ def load_model(self, model_ckpt): Returns: tf_init: variables initializer """ - previous_variables = [var_name for var_name, _ - in tf.contrib.framework.list_variables(model_ckpt)] - restore_map = {variable.op.name: variable for variable in tf.compat.v1.global_variables() - if variable.op.name in previous_variables} + previous_variables = [var_name + for var_name, _ + in tf.contrib.framework.list_variables( + model_ckpt + ) + ] + restore_map = { + variable.op.name: variable + for variable in tf.compat.v1.global_variables() + if variable.op.name in previous_variables + } + tf.contrib.framework.init_from_checkpoint(model_ckpt, restore_map) tf_init = tf.compat.v1.global_variables_initializer() return tf_init @@ -136,7 +159,9 @@ def vgg_preprocess(self, images): images = tf.to_float(images) num_channels = images.get_shape().as_list()[-1] ax = images.get_shape().ndims - 1 - channels = tf.split(axis=ax, num_or_size_splits=num_channels, value=images) + channels = tf.split(axis=ax, + num_or_size_splits=num_channels, + value=images) # subtract ImageNet means means = [122.68, 116.78, 103.94] for i in range(num_channels): diff --git a/winnow/feature_extraction/nets/inception_v4.py b/winnow/feature_extraction/nets/inception_v4.py deleted file mode 100644 index bab406a8..00000000 --- a/winnow/feature_extraction/nets/inception_v4.py +++ /dev/null @@ -1,337 +0,0 @@ -# Copyright 2016 The TensorFlow Authors. All Rights Reserved. -# -# 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. -# ============================================================================== -"""Contains the definition of the Inception V4 architecture. - -As described in http://arxiv.org/abs/1602.07261. - - Inception-v4, Inception-ResNet and the Impact of Residual Connections - on Learning - Christian Szegedy, Sergey Ioffe, Vincent Vanhoucke, Alex Alemi -""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import tensorflow as tf - -from nets import inception_utils - -slim = tf.contrib.slim - - -def block_inception_a(inputs, scope=None, reuse=None): - """Builds Inception-A block for Inception v4 network.""" - # By default use stride=1 and SAME padding - with slim.arg_scope([slim.conv2d, slim.avg_pool2d, slim.max_pool2d], - stride=1, padding='SAME'): - with tf.variable_scope(scope, 'BlockInceptionA', [inputs], reuse=reuse): - with tf.variable_scope('Branch_0'): - branch_0 = slim.conv2d(inputs, 96, [1, 1], scope='Conv2d_0a_1x1') - with tf.variable_scope('Branch_1'): - branch_1 = slim.conv2d(inputs, 64, [1, 1], scope='Conv2d_0a_1x1') - branch_1 = slim.conv2d(branch_1, 96, [3, 3], scope='Conv2d_0b_3x3') - with tf.variable_scope('Branch_2'): - branch_2 = slim.conv2d(inputs, 64, [1, 1], scope='Conv2d_0a_1x1') - branch_2 = slim.conv2d(branch_2, 96, [3, 3], scope='Conv2d_0b_3x3') - branch_2 = slim.conv2d(branch_2, 96, [3, 3], scope='Conv2d_0c_3x3') - with tf.variable_scope('Branch_3'): - branch_3 = slim.avg_pool2d(inputs, [3, 3], scope='AvgPool_0a_3x3') - branch_3 = slim.conv2d(branch_3, 96, [1, 1], scope='Conv2d_0b_1x1') - return tf.concat(axis=3, values=[branch_0, branch_1, branch_2, branch_3]) - - -def block_reduction_a(inputs, scope=None, reuse=None): - """Builds Reduction-A block for Inception v4 network.""" - # By default use stride=1 and SAME padding - with slim.arg_scope([slim.conv2d, slim.avg_pool2d, slim.max_pool2d], - stride=1, padding='SAME'): - with tf.variable_scope(scope, 'BlockReductionA', [inputs], reuse=reuse): - with tf.variable_scope('Branch_0'): - branch_0 = slim.conv2d(inputs, 384, [3, 3], stride=2, padding='VALID', - scope='Conv2d_1a_3x3') - with tf.variable_scope('Branch_1'): - branch_1 = slim.conv2d(inputs, 192, [1, 1], scope='Conv2d_0a_1x1') - branch_1 = slim.conv2d(branch_1, 224, [3, 3], scope='Conv2d_0b_3x3') - branch_1 = slim.conv2d(branch_1, 256, [3, 3], stride=2, - padding='VALID', scope='Conv2d_1a_3x3') - with tf.variable_scope('Branch_2'): - branch_2 = slim.max_pool2d(inputs, [3, 3], stride=2, padding='VALID', - scope='MaxPool_1a_3x3') - return tf.concat(axis=3, values=[branch_0, branch_1, branch_2]) - - -def block_inception_b(inputs, scope=None, reuse=None): - """Builds Inception-B block for Inception v4 network.""" - # By default use stride=1 and SAME padding - with slim.arg_scope([slim.conv2d, slim.avg_pool2d, slim.max_pool2d], - stride=1, padding='SAME'): - with tf.variable_scope(scope, 'BlockInceptionB', [inputs], reuse=reuse): - with tf.variable_scope('Branch_0'): - branch_0 = slim.conv2d(inputs, 384, [1, 1], scope='Conv2d_0a_1x1') - with tf.variable_scope('Branch_1'): - branch_1 = slim.conv2d(inputs, 192, [1, 1], scope='Conv2d_0a_1x1') - branch_1 = slim.conv2d(branch_1, 224, [1, 7], scope='Conv2d_0b_1x7') - branch_1 = slim.conv2d(branch_1, 256, [7, 1], scope='Conv2d_0c_7x1') - with tf.variable_scope('Branch_2'): - branch_2 = slim.conv2d(inputs, 192, [1, 1], scope='Conv2d_0a_1x1') - branch_2 = slim.conv2d(branch_2, 192, [7, 1], scope='Conv2d_0b_7x1') - branch_2 = slim.conv2d(branch_2, 224, [1, 7], scope='Conv2d_0c_1x7') - branch_2 = slim.conv2d(branch_2, 224, [7, 1], scope='Conv2d_0d_7x1') - branch_2 = slim.conv2d(branch_2, 256, [1, 7], scope='Conv2d_0e_1x7') - with tf.variable_scope('Branch_3'): - branch_3 = slim.avg_pool2d(inputs, [3, 3], scope='AvgPool_0a_3x3') - branch_3 = slim.conv2d(branch_3, 128, [1, 1], scope='Conv2d_0b_1x1') - return tf.concat(axis=3, values=[branch_0, branch_1, branch_2, branch_3]) - - -def block_reduction_b(inputs, scope=None, reuse=None): - """Builds Reduction-B block for Inception v4 network.""" - # By default use stride=1 and SAME padding - with slim.arg_scope([slim.conv2d, slim.avg_pool2d, slim.max_pool2d], - stride=1, padding='SAME'): - with tf.variable_scope(scope, 'BlockReductionB', [inputs], reuse=reuse): - with tf.variable_scope('Branch_0'): - branch_0 = slim.conv2d(inputs, 192, [1, 1], scope='Conv2d_0a_1x1') - branch_0 = slim.conv2d(branch_0, 192, [3, 3], stride=2, - padding='VALID', scope='Conv2d_1a_3x3') - with tf.variable_scope('Branch_1'): - branch_1 = slim.conv2d(inputs, 256, [1, 1], scope='Conv2d_0a_1x1') - branch_1 = slim.conv2d(branch_1, 256, [1, 7], scope='Conv2d_0b_1x7') - branch_1 = slim.conv2d(branch_1, 320, [7, 1], scope='Conv2d_0c_7x1') - branch_1 = slim.conv2d(branch_1, 320, [3, 3], stride=2, - padding='VALID', scope='Conv2d_1a_3x3') - with tf.variable_scope('Branch_2'): - branch_2 = slim.max_pool2d(inputs, [3, 3], stride=2, padding='VALID', - scope='MaxPool_1a_3x3') - return tf.concat(axis=3, values=[branch_0, branch_1, branch_2]) - - -def block_inception_c(inputs, scope=None, reuse=None): - """Builds Inception-C block for Inception v4 network.""" - # By default use stride=1 and SAME padding - with slim.arg_scope([slim.conv2d, slim.avg_pool2d, slim.max_pool2d], - stride=1, padding='SAME'): - with tf.variable_scope(scope, 'BlockInceptionC', [inputs], reuse=reuse): - with tf.variable_scope('Branch_0'): - branch_0 = slim.conv2d(inputs, 256, [1, 1], scope='Conv2d_0a_1x1') - with tf.variable_scope('Branch_1'): - branch_1 = slim.conv2d(inputs, 384, [1, 1], scope='Conv2d_0a_1x1') - branch_1 = tf.concat(axis=3, values=[ - slim.conv2d(branch_1, 256, [1, 3], scope='Conv2d_0b_1x3'), - slim.conv2d(branch_1, 256, [3, 1], scope='Conv2d_0c_3x1')]) - with tf.variable_scope('Branch_2'): - branch_2 = slim.conv2d(inputs, 384, [1, 1], scope='Conv2d_0a_1x1') - branch_2 = slim.conv2d(branch_2, 448, [3, 1], scope='Conv2d_0b_3x1') - branch_2 = slim.conv2d(branch_2, 512, [1, 3], scope='Conv2d_0c_1x3') - branch_2 = tf.concat(axis=3, values=[ - slim.conv2d(branch_2, 256, [1, 3], scope='Conv2d_0d_1x3'), - slim.conv2d(branch_2, 256, [3, 1], scope='Conv2d_0e_3x1')]) - with tf.variable_scope('Branch_3'): - branch_3 = slim.avg_pool2d(inputs, [3, 3], scope='AvgPool_0a_3x3') - branch_3 = slim.conv2d(branch_3, 256, [1, 1], scope='Conv2d_0b_1x1') - return tf.concat(axis=3, values=[branch_0, branch_1, branch_2, branch_3]) - - -def inception_v4_base(inputs, final_endpoint='Mixed_7d', scope=None): - """Creates the Inception V4 network up to the given final endpoint. - - Args: - inputs: a 4-D tensor of size [batch_size, height, width, 3]. - final_endpoint: specifies the endpoint to construct the network up to. - It can be one of [ 'Conv2d_1a_3x3', 'Conv2d_2a_3x3', 'Conv2d_2b_3x3', - 'Mixed_3a', 'Mixed_4a', 'Mixed_5a', 'Mixed_5b', 'Mixed_5c', 'Mixed_5d', - 'Mixed_5e', 'Mixed_6a', 'Mixed_6b', 'Mixed_6c', 'Mixed_6d', 'Mixed_6e', - 'Mixed_6f', 'Mixed_6g', 'Mixed_6h', 'Mixed_7a', 'Mixed_7b', 'Mixed_7c', - 'Mixed_7d'] - scope: Optional variable_scope. - - Returns: - logits: the logits outputs of the model. - end_points: the set of end_points from the inception model. - - Raises: - ValueError: if final_endpoint is not set to one of the predefined values, - """ - end_points = {} - - def add_and_check_final(name, net): - end_points[name] = net - return name == final_endpoint - - with tf.variable_scope(scope, 'InceptionV4', [inputs]): - with slim.arg_scope([slim.conv2d, slim.max_pool2d, slim.avg_pool2d], - stride=1, padding='SAME'): - # 299 x 299 x 3 - net = slim.conv2d(inputs, 32, [3, 3], stride=2, - padding='VALID', scope='Conv2d_1a_3x3') - if add_and_check_final('Conv2d_1a_3x3', net): return net, end_points - # 149 x 149 x 32 - net = slim.conv2d(net, 32, [3, 3], padding='VALID', - scope='Conv2d_2a_3x3') - if add_and_check_final('Conv2d_2a_3x3', net): return net, end_points - # 147 x 147 x 32 - net = slim.conv2d(net, 64, [3, 3], scope='Conv2d_2b_3x3') - if add_and_check_final('Conv2d_2b_3x3', net): return net, end_points - # 147 x 147 x 64 - with tf.variable_scope('Mixed_3a'): - with tf.variable_scope('Branch_0'): - branch_0 = slim.max_pool2d(net, [3, 3], stride=2, padding='VALID', - scope='MaxPool_0a_3x3') - with tf.variable_scope('Branch_1'): - branch_1 = slim.conv2d(net, 96, [3, 3], stride=2, padding='VALID', - scope='Conv2d_0a_3x3') - net = tf.concat(axis=3, values=[branch_0, branch_1]) - if add_and_check_final('Mixed_3a', net): return net, end_points - - # 73 x 73 x 160 - with tf.variable_scope('Mixed_4a'): - with tf.variable_scope('Branch_0'): - branch_0 = slim.conv2d(net, 64, [1, 1], scope='Conv2d_0a_1x1') - branch_0 = slim.conv2d(branch_0, 96, [3, 3], padding='VALID', - scope='Conv2d_1a_3x3') - with tf.variable_scope('Branch_1'): - branch_1 = slim.conv2d(net, 64, [1, 1], scope='Conv2d_0a_1x1') - branch_1 = slim.conv2d(branch_1, 64, [1, 7], scope='Conv2d_0b_1x7') - branch_1 = slim.conv2d(branch_1, 64, [7, 1], scope='Conv2d_0c_7x1') - branch_1 = slim.conv2d(branch_1, 96, [3, 3], padding='VALID', - scope='Conv2d_1a_3x3') - net = tf.concat(axis=3, values=[branch_0, branch_1]) - if add_and_check_final('Mixed_4a', net): return net, end_points - - # 71 x 71 x 192 - with tf.variable_scope('Mixed_5a'): - with tf.variable_scope('Branch_0'): - branch_0 = slim.conv2d(net, 192, [3, 3], stride=2, padding='VALID', - scope='Conv2d_1a_3x3') - with tf.variable_scope('Branch_1'): - branch_1 = slim.max_pool2d(net, [3, 3], stride=2, padding='VALID', - scope='MaxPool_1a_3x3') - net = tf.concat(axis=3, values=[branch_0, branch_1]) - if add_and_check_final('Mixed_5a', net): return net, end_points - - # 35 x 35 x 384 - # 4 x Inception-A blocks - for idx in range(4): - block_scope = 'Mixed_5' + chr(ord('b') + idx) - net = block_inception_a(net, block_scope) - if add_and_check_final(block_scope, net): return net, end_points - - # 35 x 35 x 384 - # Reduction-A block - net = block_reduction_a(net, 'Mixed_6a') - if add_and_check_final('Mixed_6a', net): return net, end_points - - # 17 x 17 x 1024 - # 7 x Inception-B blocks - for idx in range(7): - block_scope = 'Mixed_6' + chr(ord('b') + idx) - net = block_inception_b(net, block_scope) - if add_and_check_final(block_scope, net): return net, end_points - - # 17 x 17 x 1024 - # Reduction-B block - net = block_reduction_b(net, 'Mixed_7a') - if add_and_check_final('Mixed_7a', net): return net, end_points - - # 8 x 8 x 1536 - # 3 x Inception-C blocks - for idx in range(3): - block_scope = 'Mixed_7' + chr(ord('b') + idx) - net = block_inception_c(net, block_scope) - if add_and_check_final(block_scope, net): return net, end_points - raise ValueError('Unknown final endpoint %s' % final_endpoint) - - -def inception_v4(inputs, num_classes=1001, is_training=True, - dropout_keep_prob=0.8, - reuse=None, - scope='InceptionV4', - create_aux_logits=True): - """Creates the Inception V4 model. - - Args: - inputs: a 4-D tensor of size [batch_size, height, width, 3]. - num_classes: number of predicted classes. If 0 or None, the logits layer - is omitted and the input features to the logits layer (before dropout) - are returned instead. - is_training: whether is training or not. - dropout_keep_prob: float, the fraction to keep before final layer. - reuse: whether or not the network and its variables should be reused. To be - able to reuse 'scope' must be given. - scope: Optional variable_scope. - create_aux_logits: Whether to include the auxiliary logits. - - Returns: - net: a Tensor with the logits (pre-softmax activations) if num_classes - is a non-zero integer, or the non-dropped input to the logits layer - if num_classes is 0 or None. - end_points: the set of end_points from the inception model. - """ - end_points = {} - with tf.variable_scope(scope, 'InceptionV4', [inputs], reuse=reuse) as scope: - with slim.arg_scope([slim.batch_norm, slim.dropout], - is_training=is_training): - net, end_points = inception_v4_base(inputs, scope=scope) - - with slim.arg_scope([slim.conv2d, slim.max_pool2d, slim.avg_pool2d], - stride=1, padding='SAME'): - # Auxiliary Head logits - if create_aux_logits and num_classes: - with tf.variable_scope('AuxLogits'): - # 17 x 17 x 1024 - aux_logits = end_points['Mixed_6h'] - aux_logits = slim.avg_pool2d(aux_logits, [5, 5], stride=3, - padding='VALID', - scope='AvgPool_1a_5x5') - aux_logits = slim.conv2d(aux_logits, 128, [1, 1], - scope='Conv2d_1b_1x1') - aux_logits = slim.conv2d(aux_logits, 768, - aux_logits.get_shape()[1:3], - padding='VALID', scope='Conv2d_2a') - aux_logits = slim.flatten(aux_logits) - aux_logits = slim.fully_connected(aux_logits, num_classes, - activation_fn=None, - scope='Aux_logits') - end_points['AuxLogits'] = aux_logits - - # Final pooling and prediction - # TODO(sguada,arnoegw): Consider adding a parameter global_pool which - # can be set to False to disable pooling here (as in resnet_*()). - with tf.variable_scope('Logits'): - # 8 x 8 x 1536 - kernel_size = net.get_shape()[1:3] - if kernel_size.is_fully_defined(): - net = slim.avg_pool2d(net, kernel_size, padding='VALID', - scope='AvgPool_1a') - else: - net = tf.reduce_mean(net, [1, 2], keep_dims=True, - name='global_pool') - end_points['global_pool'] = net - if not num_classes: - return net, end_points - # 1 x 1 x 1536 - net = slim.dropout(net, dropout_keep_prob, scope='Dropout_1b') - net = slim.flatten(net, scope='PreLogitsFlatten') - end_points['PreLogitsFlatten'] = net - # 1536 - logits = slim.fully_connected(net, num_classes, activation_fn=None, - scope='Logits') - end_points['Logits'] = logits - end_points['Predictions'] = tf.nn.softmax(logits, name='Predictions') - return logits, end_points -inception_v4.default_image_size = 299 - - -inception_v4_arg_scope = inception_utils.inception_arg_scope diff --git a/winnow/feature_extraction/nets/resnet_utils.py b/winnow/feature_extraction/nets/resnet_utils.py deleted file mode 100644 index a16a1ba6..00000000 --- a/winnow/feature_extraction/nets/resnet_utils.py +++ /dev/null @@ -1,249 +0,0 @@ -# Copyright 2016 The TensorFlow Authors. All Rights Reserved. -# -# 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. -# ============================================================================== -"""Contains building blocks for various versions of Residual Networks. - -Residual networks (ResNets) were proposed in: - Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun - Deep Residual Learning for Image Recognition. arXiv:1512.03385, 2015 - -More variants were introduced in: - Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun - Identity Mappings in Deep Residual Networks. arXiv: 1603.05027, 2016 - -We can obtain different ResNet variants by changing the network depth, width, -and form of residual unit. This module implements the infrastructure for -building them. Concrete ResNet units and full ResNet networks are implemented in -the accompanying resnet_v1.py and resnet_v2.py modules. - -Compared to https://github.com/KaimingHe/deep-residual-networks, in the current -implementation we subsample the output activations in the last residual unit of -each block, instead of subsampling the input activations in the first residual -unit of each block. The two implementations give identical results but our -implementation is more memory efficient. -""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import collections -import tensorflow as tf - -slim = tf.contrib.slim - - -class Block(collections.namedtuple('Block', ['scope', 'unit_fn', 'args'])): - """A named tuple describing a ResNet block. - - Its parts are: - scope: The scope of the `Block`. - unit_fn: The ResNet unit function which takes as input a `Tensor` and - returns another `Tensor` with the output of the ResNet unit. - args: A list of length equal to the number of units in the `Block`. The list - contains one (depth, depth_bottleneck, stride) tuple for each unit in the - block to serve as argument to unit_fn. - """ - - -def subsample(inputs, factor, scope=None): - """Subsamples the input along the spatial dimensions. - - Args: - inputs: A `Tensor` of size [batch, height_in, width_in, channels]. - factor: The subsampling factor. - scope: Optional variable_scope. - - Returns: - output: A `Tensor` of size [batch, height_out, width_out, channels] with the - input, either intact (if factor == 1) or subsampled (if factor > 1). - """ - if factor == 1: - return inputs - else: - return slim.max_pool2d(inputs, [1, 1], stride=factor, scope=scope) - - -def conv2d_same(inputs, num_outputs, kernel_size, stride, rate=1, scope=None): - """Strided 2-D convolution with 'SAME' padding. - - When stride > 1, then we do explicit zero-padding, followed by conv2d with - 'VALID' padding. - - Note that - - net = conv2d_same(inputs, num_outputs, 3, stride=stride) - - is equivalent to - - net = slim.conv2d(inputs, num_outputs, 3, stride=1, padding='SAME') - net = subsample(net, factor=stride) - - whereas - - net = slim.conv2d(inputs, num_outputs, 3, stride=stride, padding='SAME') - - is different when the input's height or width is even, which is why we add the - current function. For more details, see ResnetUtilsTest.testConv2DSameEven(). - - Args: - inputs: A 4-D tensor of size [batch, height_in, width_in, channels]. - num_outputs: An integer, the number of output filters. - kernel_size: An int with the kernel_size of the filters. - stride: An integer, the output stride. - rate: An integer, rate for atrous convolution. - scope: Scope. - - Returns: - output: A 4-D tensor of size [batch, height_out, width_out, channels] with - the convolution output. - """ - if stride == 1: - return slim.conv2d(inputs, num_outputs, kernel_size, stride=1, rate=rate, - padding='SAME', scope=scope) - else: - kernel_size_effective = kernel_size + (kernel_size - 1) * (rate - 1) - pad_total = kernel_size_effective - 1 - pad_beg = pad_total // 2 - pad_end = pad_total - pad_beg - inputs = tf.pad(inputs, - [[0, 0], [pad_beg, pad_end], [pad_beg, pad_end], [0, 0]]) - return slim.conv2d(inputs, num_outputs, kernel_size, stride=stride, - rate=rate, padding='VALID', scope=scope) - - -@slim.add_arg_scope -def stack_blocks_dense(net, blocks, output_stride=None, - outputs_collections=None): - """Stacks ResNet `Blocks` and controls output feature density. - - First, this function creates scopes for the ResNet in the form of - 'block_name/unit_1', 'block_name/unit_2', etc. - - Second, this function allows the user to explicitly control the ResNet - output_stride, which is the ratio of the input to output spatial resolution. - This is useful for dense prediction tasks such as semantic segmentation or - object detection. - - Most ResNets consist of 4 ResNet blocks and subsample the activations by a - factor of 2 when transitioning between consecutive ResNet blocks. This results - to a nominal ResNet output_stride equal to 8. If we set the output_stride to - half the nominal network stride (e.g., output_stride=4), then we compute - responses twice. - - Control of the output feature density is implemented by atrous convolution. - - Args: - net: A `Tensor` of size [batch, height, width, channels]. - blocks: A list of length equal to the number of ResNet `Blocks`. Each - element is a ResNet `Block` object describing the units in the `Block`. - output_stride: If `None`, then the output will be computed at the nominal - network stride. If output_stride is not `None`, it specifies the requested - ratio of input to output spatial resolution, which needs to be equal to - the product of unit strides from the start up to some level of the ResNet. - For example, if the ResNet employs units with strides 1, 2, 1, 3, 4, 1, - then valid values for the output_stride are 1, 2, 6, 24 or None (which - is equivalent to output_stride=24). - outputs_collections: Collection to add the ResNet block outputs. - - Returns: - net: Output tensor with stride equal to the specified output_stride. - - Raises: - ValueError: If the target output_stride is not valid. - """ - # The current_stride variable keeps track of the effective stride of the - # activations. This allows us to invoke atrous convolution whenever applying - # the next residual unit would result in the activations having stride larger - # than the target output_stride. - current_stride = 1 - - # The atrous convolution rate parameter. - rate = 1 - - for block in blocks: - with tf.variable_scope(block.scope, 'block', [net]) as sc: - for i, unit in enumerate(block.args): - if output_stride is not None and current_stride > output_stride: - raise ValueError('The target output_stride cannot be reached.') - - with tf.variable_scope('unit_%d' % (i + 1), values=[net]): - # If we have reached the target output_stride, then we need to employ - # atrous convolution with stride=1 and multiply the atrous rate by the - # current unit's stride for use in subsequent layers. - if output_stride is not None and current_stride == output_stride: - net = block.unit_fn(net, rate=rate, **dict(unit, stride=1)) - rate *= unit.get('stride', 1) - - else: - net = block.unit_fn(net, rate=1, **unit) - current_stride *= unit.get('stride', 1) - net = slim.utils.collect_named_outputs(outputs_collections, sc.name, net) - - if output_stride is not None and current_stride != output_stride: - raise ValueError('The target output_stride cannot be reached.') - - return net - - -def resnet_arg_scope(weight_decay=0.0001, - batch_norm_decay=0.997, - batch_norm_epsilon=1e-5, - batch_norm_scale=True, - activation_fn=tf.nn.relu, - use_batch_norm=True): - """Defines the default ResNet arg scope. - - TODO(gpapan): The batch-normalization related default values above are - appropriate for use in conjunction with the reference ResNet models - released at https://github.com/KaimingHe/deep-residual-networks. When - training ResNets from scratch, they might need to be tuned. - - Args: - weight_decay: The weight decay to use for regularizing the model. - batch_norm_decay: The moving average decay when estimating layer activation - statistics in batch normalization. - batch_norm_epsilon: Small constant to prevent division by zero when - normalizing activations by their variance in batch normalization. - batch_norm_scale: If True, uses an explicit `gamma` multiplier to scale the - activations in the batch normalization layer. - activation_fn: The activation function which is used in ResNet. - use_batch_norm: Whether or not to use batch normalization. - - Returns: - An `arg_scope` to use for the resnet models. - """ - batch_norm_params = { - 'decay': batch_norm_decay, - 'epsilon': batch_norm_epsilon, - 'scale': batch_norm_scale, - 'updates_collections': tf.GraphKeys.UPDATE_OPS, - 'fused': None, # Use fused batch norm if possible. - } - - with slim.arg_scope( - [slim.conv2d], - weights_regularizer=slim.l2_regularizer(weight_decay), - weights_initializer=slim.variance_scaling_initializer(), - activation_fn=activation_fn, - normalizer_fn=slim.batch_norm if use_batch_norm else None, - normalizer_params=batch_norm_params): - with slim.arg_scope([slim.batch_norm], **batch_norm_params): - # The following implies padding='SAME' for pool1, which makes feature - # alignment easier for dense prediction tasks. This is also used in - # https://github.com/facebook/fb.resnet.torch. However the accompanying - # code of 'Deep Residual Learning for Image Recognition' uses - # padding='VALID' for pool1. You can switch to that choice by setting - # slim.arg_scope([slim.max_pool2d], padding='VALID'). - with slim.arg_scope([slim.max_pool2d], padding='SAME') as arg_sc: - return arg_sc diff --git a/winnow/feature_extraction/nets/resnet_v1.py b/winnow/feature_extraction/nets/resnet_v1.py deleted file mode 100644 index 32ff1fbf..00000000 --- a/winnow/feature_extraction/nets/resnet_v1.py +++ /dev/null @@ -1,346 +0,0 @@ -# Copyright 2016 The TensorFlow Authors. All Rights Reserved. -# -# 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. -# ============================================================================== -"""Contains definitions for the original form of Residual Networks. - -The 'v1' residual networks (ResNets) implemented in this module were proposed -by: -[1] Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun - Deep Residual Learning for Image Recognition. arXiv:1512.03385 - -Other variants were introduced in: -[2] Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun - Identity Mappings in Deep Residual Networks. arXiv: 1603.05027 - -The networks defined in this module utilize the bottleneck building block of -[1] with projection shortcuts only for increasing depths. They employ batch -normalization *after* every weight layer. This is the architecture used by -MSRA in the Imagenet and MSCOCO 2016 competition models ResNet-101 and -ResNet-152. See [2; Fig. 1a] for a comparison between the current 'v1' -architecture and the alternative 'v2' architecture of [2] which uses batch -normalization *before* every weight layer in the so-called full pre-activation -units. - -Typical use: - - from tensorflow.contrib.slim.nets import resnet_v1 - -ResNet-101 for image classification into 1000 classes: - - # inputs has shape [batch, 224, 224, 3] - with slim.arg_scope(resnet_v1.resnet_arg_scope()): - net, end_points = resnet_v1.resnet_v1_101(inputs, 1000, is_training=False) - -ResNet-101 for semantic segmentation into 21 classes: - - # inputs has shape [batch, 513, 513, 3] - with slim.arg_scope(resnet_v1.resnet_arg_scope()): - net, end_points = resnet_v1.resnet_v1_101(inputs, - 21, - is_training=False, - global_pool=False, - output_stride=16) -""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import tensorflow as tf - -from nets import resnet_utils - - -resnet_arg_scope = resnet_utils.resnet_arg_scope -slim = tf.contrib.slim - - -@slim.add_arg_scope -def bottleneck(inputs, - depth, - depth_bottleneck, - stride, - rate=1, - outputs_collections=None, - scope=None, - use_bounded_activations=False): - """Bottleneck residual unit variant with BN after convolutions. - - This is the original residual unit proposed in [1]. See Fig. 1(a) of [2] for - its definition. Note that we use here the bottleneck variant which has an - extra bottleneck layer. - - When putting together two consecutive ResNet blocks that use this unit, one - should use stride = 2 in the last unit of the first block. - - Args: - inputs: A tensor of size [batch, height, width, channels]. - depth: The depth of the ResNet unit output. - depth_bottleneck: The depth of the bottleneck layers. - stride: The ResNet unit's stride. Determines the amount of downsampling of - the units output compared to its input. - rate: An integer, rate for atrous convolution. - outputs_collections: Collection to add the ResNet unit output. - scope: Optional variable_scope. - use_bounded_activations: Whether or not to use bounded activations. Bounded - activations better lend themselves to quantized inference. - - Returns: - The ResNet unit's output. - """ - with tf.variable_scope(scope, 'bottleneck_v1', [inputs]) as sc: - depth_in = slim.utils.last_dimension(inputs.get_shape(), min_rank=4) - if depth == depth_in: - shortcut = resnet_utils.subsample(inputs, stride, 'shortcut') - else: - shortcut = slim.conv2d( - inputs, - depth, [1, 1], - stride=stride, - activation_fn=tf.nn.relu6 if use_bounded_activations else None, - scope='shortcut') - - residual = slim.conv2d(inputs, depth_bottleneck, [1, 1], stride=1, - scope='conv1') - residual = resnet_utils.conv2d_same(residual, depth_bottleneck, 3, stride, - rate=rate, scope='conv2') - residual = slim.conv2d(residual, depth, [1, 1], stride=1, - activation_fn=None, scope='conv3') - - if use_bounded_activations: - # Use clip_by_value to simulate bandpass activation. - residual = tf.clip_by_value(residual, -6.0, 6.0) - output = tf.nn.relu6(shortcut + residual) - else: - output = tf.nn.relu(shortcut + residual) - - return slim.utils.collect_named_outputs(outputs_collections, - sc.name, - output) - - -def resnet_v1(inputs, - blocks, - num_classes=None, - is_training=True, - global_pool=True, - output_stride=None, - include_root_block=True, - spatial_squeeze=True, - reuse=None, - scope=None): - """Generator for v1 ResNet models. - - This function generates a family of ResNet v1 models. See the resnet_v1_*() - methods for specific model instantiations, obtained by selecting different - block instantiations that produce ResNets of various depths. - - Training for image classification on Imagenet is usually done with [224, 224] - inputs, resulting in [7, 7] feature maps at the output of the last ResNet - block for the ResNets defined in [1] that have nominal stride equal to 32. - However, for dense prediction tasks we advise that one uses inputs with - spatial dimensions that are multiples of 32 plus 1, e.g., [321, 321]. In - this case the feature maps at the ResNet output will have spatial shape - [(height - 1) / output_stride + 1, (width - 1) / output_stride + 1] - and corners exactly aligned with the input image corners, which greatly - facilitates alignment of the features to the image. Using as input [225, 225] - images results in [8, 8] feature maps at the output of the last ResNet block. - - For dense prediction tasks, the ResNet needs to run in fully-convolutional - (FCN) mode and global_pool needs to be set to False. The ResNets in [1, 2] all - have nominal stride equal to 32 and a good choice in FCN mode is to use - output_stride=16 in order to increase the density of the computed features at - small computational and memory overhead, cf. http://arxiv.org/abs/1606.00915. - - Args: - inputs: A tensor of size [batch, height_in, width_in, channels]. - blocks: A list of length equal to the number of ResNet blocks. Each element - is a resnet_utils.Block object describing the units in the block. - num_classes: Number of predicted classes for classification tasks. - If 0 or None, we return the features before the logit layer. - is_training: whether batch_norm layers are in training mode. - global_pool: If True, we perform global average pooling before computing the - logits. Set to True for image classification, False for dense prediction. - output_stride: If None, then the output will be computed at the nominal - network stride. If output_stride is not None, it specifies the requested - ratio of input to output spatial resolution. - include_root_block: If True, include the initial convolution followed by - max-pooling, if False excludes it. - spatial_squeeze: if True, logits is of shape [B, C], if false logits is - of shape [B, 1, 1, C], where B is batch_size and C is number of classes. - To use this parameter, the input images must be smaller than 300x300 - pixels, in which case the output logit layer does not contain spatial - information and can be removed. - reuse: whether or not the network and its variables should be reused. To be - able to reuse 'scope' must be given. - scope: Optional variable_scope. - - Returns: - net: A rank-4 tensor of size [batch, height_out, width_out, channels_out]. - If global_pool is False, then height_out and width_out are reduced by a - factor of output_stride compared to the respective height_in and width_in, - else both height_out and width_out equal one. If num_classes is 0 or None, - then net is the output of the last ResNet block, potentially after global - average pooling. If num_classes a non-zero integer, net contains the - pre-softmax activations. - end_points: A dictionary from components of the network to the corresponding - activation. - - Raises: - ValueError: If the target output_stride is not valid. - """ - with tf.variable_scope(scope, 'resnet_v1', [inputs], reuse=reuse) as sc: - end_points_collection = sc.original_name_scope + '_end_points' - with slim.arg_scope([slim.conv2d, bottleneck, - resnet_utils.stack_blocks_dense], - outputs_collections=end_points_collection): - with slim.arg_scope([slim.batch_norm], is_training=is_training): - net = inputs - if include_root_block: - if output_stride is not None: - if output_stride % 4 != 0: - raise ValueError('The output_stride needs to be a multiple of 4.') - output_stride /= 4 - net = resnet_utils.conv2d_same(net, 64, 7, stride=2, scope='conv1') - net = slim.max_pool2d(net, [3, 3], stride=2, scope='pool1') - net = resnet_utils.stack_blocks_dense(net, blocks, output_stride) - # Convert end_points_collection into a dictionary of end_points. - end_points = slim.utils.convert_collection_to_dict( - end_points_collection) - - if global_pool: - # Global average pooling. - net = tf.reduce_mean(net, [1, 2], name='pool5', keep_dims=True) - end_points['global_pool'] = net - if num_classes: - net = slim.conv2d(net, num_classes, [1, 1], activation_fn=None, - normalizer_fn=None, scope='logits') - end_points[sc.name + '/logits'] = net - if spatial_squeeze: - net = tf.squeeze(net, [1, 2], name='SpatialSqueeze') - end_points[sc.name + '/spatial_squeeze'] = net - end_points['predictions'] = slim.softmax(net, scope='predictions') - return net, end_points -resnet_v1.default_image_size = 224 - - -def resnet_v1_block(scope, base_depth, num_units, stride): - """Helper function for creating a resnet_v1 bottleneck block. - - Args: - scope: The scope of the block. - base_depth: The depth of the bottleneck layer for each unit. - num_units: The number of units in the block. - stride: The stride of the block, implemented as a stride in the last unit. - All other units have stride=1. - - Returns: - A resnet_v1 bottleneck block. - """ - return resnet_utils.Block(scope, bottleneck, [{ - 'depth': base_depth * 4, - 'depth_bottleneck': base_depth, - 'stride': 1 - }] * (num_units - 1) + [{ - 'depth': base_depth * 4, - 'depth_bottleneck': base_depth, - 'stride': stride - }]) - - -def resnet_v1_50(inputs, - num_classes=None, - is_training=True, - global_pool=True, - output_stride=None, - spatial_squeeze=True, - reuse=None, - scope='resnet_v1_50'): - """ResNet-50 model of [1]. See resnet_v1() for arg and return description.""" - blocks = [ - resnet_v1_block('block1', base_depth=64, num_units=3, stride=2), - resnet_v1_block('block2', base_depth=128, num_units=4, stride=2), - resnet_v1_block('block3', base_depth=256, num_units=6, stride=2), - resnet_v1_block('block4', base_depth=512, num_units=3, stride=1), - ] - return resnet_v1(inputs, blocks, num_classes, is_training, - global_pool=global_pool, output_stride=output_stride, - include_root_block=True, spatial_squeeze=spatial_squeeze, - reuse=reuse, scope=scope) -resnet_v1_50.default_image_size = resnet_v1.default_image_size - - -def resnet_v1_101(inputs, - num_classes=None, - is_training=True, - global_pool=True, - output_stride=None, - spatial_squeeze=True, - reuse=None, - scope='resnet_v1_101'): - """ResNet-101 model of [1]. See resnet_v1() for arg and return description.""" - blocks = [ - resnet_v1_block('block1', base_depth=64, num_units=3, stride=2), - resnet_v1_block('block2', base_depth=128, num_units=4, stride=2), - resnet_v1_block('block3', base_depth=256, num_units=23, stride=2), - resnet_v1_block('block4', base_depth=512, num_units=3, stride=1), - ] - return resnet_v1(inputs, blocks, num_classes, is_training, - global_pool=global_pool, output_stride=output_stride, - include_root_block=True, spatial_squeeze=spatial_squeeze, - reuse=reuse, scope=scope) -resnet_v1_101.default_image_size = resnet_v1.default_image_size - - -def resnet_v1_152(inputs, - num_classes=None, - is_training=True, - global_pool=True, - output_stride=None, - spatial_squeeze=True, - reuse=None, - scope='resnet_v1_152'): - """ResNet-152 model of [1]. See resnet_v1() for arg and return description.""" - blocks = [ - resnet_v1_block('block1', base_depth=64, num_units=3, stride=2), - resnet_v1_block('block2', base_depth=128, num_units=8, stride=2), - resnet_v1_block('block3', base_depth=256, num_units=36, stride=2), - resnet_v1_block('block4', base_depth=512, num_units=3, stride=1), - ] - return resnet_v1(inputs, blocks, num_classes, is_training, - global_pool=global_pool, output_stride=output_stride, - include_root_block=True, spatial_squeeze=spatial_squeeze, - reuse=reuse, scope=scope) -resnet_v1_152.default_image_size = resnet_v1.default_image_size - - -def resnet_v1_200(inputs, - num_classes=None, - is_training=True, - global_pool=True, - output_stride=None, - spatial_squeeze=True, - reuse=None, - scope='resnet_v1_200'): - """ResNet-200 model of [2]. See resnet_v1() for arg and return description.""" - blocks = [ - resnet_v1_block('block1', base_depth=64, num_units=3, stride=2), - resnet_v1_block('block2', base_depth=128, num_units=24, stride=2), - resnet_v1_block('block3', base_depth=256, num_units=36, stride=2), - resnet_v1_block('block4', base_depth=512, num_units=3, stride=1), - ] - return resnet_v1(inputs, blocks, num_classes, is_training, - global_pool=global_pool, output_stride=output_stride, - include_root_block=True, spatial_squeeze=spatial_squeeze, - reuse=reuse, scope=scope) -resnet_v1_200.default_image_size = resnet_v1.default_image_size diff --git a/winnow/feature_extraction/nets/vgg.py b/winnow/feature_extraction/nets/vgg.py index 12052d93..66f98689 100644 --- a/winnow/feature_extraction/nets/vgg.py +++ b/winnow/feature_extraction/nets/vgg.py @@ -5,6 +5,7 @@ import warnings with warnings.catch_warnings(): + warnings.filterwarnings("ignore") import tensorflow as tf tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR) @@ -13,23 +14,25 @@ def vgg_arg_scope(weight_decay=0.0005): - """Defines the VGG arg scope. + """Defines the VGG arg scope. - Args: - weight_decay: The l2 regularization coefficient. + Args: + weight_decay: The l2 regularization coefficient. - Returns: - An arg_scope. - """ - with slim.arg_scope([slim.conv2d, slim.fully_connected], - activation_fn=tf.nn.relu, - weights_regularizer=slim.l2_regularizer(weight_decay), - biases_initializer=tf.zeros_initializer()): - with slim.arg_scope([slim.conv2d], padding='SAME') as arg_sc: - return arg_sc + Returns: + An arg_scope. + """ + with slim.arg_scope( + [slim.conv2d, slim.fully_connected], + activation_fn=tf.nn.relu, + weights_regularizer=slim.l2_regularizer(weight_decay), + biases_initializer=tf.zeros_initializer()): + with slim.arg_scope([slim.conv2d], padding='SAME') as arg_sc: + return arg_sc -def vgg_a(inputs, +def vgg_a( + inputs, num_classes=1000, is_training=True, dropout_keep_prob=0.5, @@ -37,230 +40,269 @@ def vgg_a(inputs, scope='vgg_a', fc_conv_padding='VALID', global_pool=False): - """Oxford Net VGG 11-Layers version A Example. + """Oxford Net VGG 11-Layers version A Example. - Note: All the fully_connected layers have been transformed to conv2d layers. - To use in classification mode, resize input to 224x224. + Note: All the fully_connected layers have been transformed to conv2d + layers.To use in classification mode, resize input to 224x224. - Args: + Args: inputs: a tensor of size [batch_size, height, width, channels]. - num_classes: number of predicted classes. If 0 or None, the logits layer is - omitted and the input features to the logits layer are returned instead. + num_classes: number of predicted classes. If 0 or None, the logits + layer is omitted and the input features to the logits layer are + returned instead. is_training: whether or not the model is being trained. - dropout_keep_prob: the probability that activations are kept in the dropout - layers during training. - spatial_squeeze: whether or not should squeeze the spatial dimensions of the - outputs. Useful to remove unnecessary dimensions for classification. + dropout_keep_prob: the probability that activations are kept in the + dropout layers during training. + spatial_squeeze: whether or not should squeeze the spatial dimensions + of the outputs. Useful to remove unnecessary dimensions for classification. scope: Optional scope for the variables. fc_conv_padding: the type of padding to use for the fully connected layer - that is implemented as a convolutional layer. Use 'SAME' padding if you - are applying the network in a fully convolutional manner and want to - get a prediction map downsampled by a factor of 32 as an output. - Otherwise, the output prediction map will be (input / 32) - 6 in case of - 'VALID' padding. - global_pool: Optional boolean flag. If True, the input to the classification - layer is avgpooled to size 1x1, for any input size. (This is not part - of the original VGG architecture.) - - Returns: + that is implemented as a convolutional layer. Use 'SAME' padding if you + are applying the network in a fully convolutional manner and want to + get a prediction map downsampled by a factor of 32 as an output. + Otherwise, the output prediction map will be (input / 32) - 6 in case + of 'VALID' padding. + global_pool: Optional boolean flag. If True, the input to the + classification layer is avgpooled to size 1x1, for any input size. (This is not part + of the original VGG architecture.) + + Returns: net: the output of the logits layer (if num_classes is a non-zero integer), - or the input to the logits layer (if num_classes is 0 or None). + or the input to the logits layer (if num_classes is 0 or None). end_points: a dict of tensors with intermediate activations. - """ - with tf.variable_scope(scope, 'vgg_a', [inputs]) as sc: - end_points_collection = sc.original_name_scope + '_end_points' - # Collect outputs for conv2d, fully_connected and max_pool2d. - with slim.arg_scope([slim.conv2d, slim.max_pool2d], - outputs_collections=end_points_collection): - net = slim.repeat(inputs, 1, slim.conv2d, 64, [3, 3], scope='conv1') - net = slim.max_pool2d(net, [2, 2], scope='pool1') - net = slim.repeat(net, 1, slim.conv2d, 128, [3, 3], scope='conv2') - net = slim.max_pool2d(net, [2, 2], scope='pool2') - net = slim.repeat(net, 2, slim.conv2d, 256, [3, 3], scope='conv3') - net = slim.max_pool2d(net, [2, 2], scope='pool3') - net = slim.repeat(net, 2, slim.conv2d, 512, [3, 3], scope='conv4') - net = slim.max_pool2d(net, [2, 2], scope='pool4') - net = slim.repeat(net, 2, slim.conv2d, 512, [3, 3], scope='conv5') - net = slim.max_pool2d(net, [2, 2], scope='pool5') - - # Use conv2d instead of fully_connected layers. - net = slim.conv2d(net, 4096, [7, 7], padding=fc_conv_padding, scope='fc6') - net = slim.dropout(net, dropout_keep_prob, is_training=is_training, - scope='dropout6') - net = slim.conv2d(net, 4096, [1, 1], scope='fc7') - # Convert end_points_collection into a end_point dict. - end_points = slim.utils.convert_collection_to_dict(end_points_collection) - if global_pool: - net = tf.reduce_mean(net, [1, 2], keep_dims=True, name='global_pool') - end_points['global_pool'] = net - if num_classes: - net = slim.dropout(net, dropout_keep_prob, is_training=is_training, - scope='dropout7') - net = slim.conv2d(net, num_classes, [1, 1], - activation_fn=None, - normalizer_fn=None, - scope='fc8') - if spatial_squeeze: - net = tf.squeeze(net, [1, 2], name='fc8/squeezed') - end_points[sc.name + '/fc8'] = net - return net, end_points + """ + with tf.variable_scope(scope, 'vgg_a', [inputs]) as sc: + end_points_collection = sc.original_name_scope + '_end_points' + # Collect outputs for conv2d, fully_connected and max_pool2d. + with slim.arg_scope( + [slim.conv2d, slim.max_pool2d], + outputs_collections=end_points_collection): + + net = slim.repeat( + inputs, 1, slim.conv2d, 64, [3, 3], scope='conv1') + net = slim.max_pool2d(net, [2, 2], scope='pool1') + net = slim.repeat(net, 1, slim.conv2d, 128, [3, 3], scope='conv2') + net = slim.max_pool2d(net, [2, 2], scope='pool2') + net = slim.repeat(net, 2, slim.conv2d, 256, [3, 3], scope='conv3') + net = slim.max_pool2d(net, [2, 2], scope='pool3') + net = slim.repeat(net, 2, slim.conv2d, 512, [3, 3], scope='conv4') + net = slim.max_pool2d(net, [2, 2], scope='pool4') + net = slim.repeat(net, 2, slim.conv2d, 512, [3, 3], scope='conv5') + net = slim.max_pool2d(net, [2, 2], scope='pool5') + + # Use conv2d instead of fully_connected layers. + net = slim.conv2d(net, 4096, [7, 7], padding=fc_conv_padding, scope='fc6') + net = slim.dropout(net, dropout_keep_prob, is_training=is_training, + scope='dropout6') + net = slim.conv2d(net, 4096, [1, 1], scope='fc7') + # Convert end_points_collection into a end_point dict. + end_points = slim.utils.convert_collection_to_dict(end_points_collection) + if global_pool: + net = tf.reduce_mean(net, [1, 2], keep_dims=True, name='global_pool') + end_points['global_pool'] = net + if num_classes: + net = slim.dropout(net, dropout_keep_prob, is_training=is_training, + scope='dropout7') + net = slim.conv2d(net, num_classes, [1, 1], + activation_fn=None, + normalizer_fn=None, + scope='fc8') + if spatial_squeeze: + net = tf.squeeze(net, [1, 2], name='fc8/squeezed') + end_points[sc.name + '/fc8'] = net + return net, end_points vgg_a.default_image_size = 224 def vgg_16(inputs, - num_classes=1000, - is_training=True, - dropout_keep_prob=0.5, - spatial_squeeze=True, - scope='vgg_16', - fc_conv_padding='VALID', - global_pool=False): - """Oxford Net VGG 16-Layers version D Example. - - Note: All the fully_connected layers have been transformed to conv2d layers. - To use in classification mode, resize input to 224x224. - - Args: - inputs: a tensor of size [batch_size, height, width, channels]. - num_classes: number of predicted classes. If 0 or None, the logits layer is - omitted and the input features to the logits layer are returned instead. - is_training: whether or not the model is being trained. - dropout_keep_prob: the probability that activations are kept in the dropout - layers during training. - spatial_squeeze: whether or not should squeeze the spatial dimensions of the - outputs. Useful to remove unnecessary dimensions for classification. - scope: Optional scope for the variables. - fc_conv_padding: the type of padding to use for the fully connected layer - that is implemented as a convolutional layer. Use 'SAME' padding if you - are applying the network in a fully convolutional manner and want to - get a prediction map downsampled by a factor of 32 as an output. - Otherwise, the output prediction map will be (input / 32) - 6 in case of - 'VALID' padding. - global_pool: Optional boolean flag. If True, the input to the classification - layer is avgpooled to size 1x1, for any input size. (This is not part - of the original VGG architecture.) - - Returns: - net: the output of the logits layer (if num_classes is a non-zero integer), - or the input to the logits layer (if num_classes is 0 or None). - end_points: a dict of tensors with intermediate activations. - """ - with tf.variable_scope(scope, 'vgg_16', [inputs]) as sc: - end_points_collection = sc.original_name_scope + '_end_points' - # Collect outputs for conv2d, fully_connected and max_pool2d. - with slim.arg_scope([slim.conv2d, slim.fully_connected, slim.max_pool2d], - outputs_collections=end_points_collection): - net = slim.repeat(inputs, 2, slim.conv2d, 64, [3, 3], scope='conv1') - net = slim.max_pool2d(net, [2, 2], scope='pool1') - net = slim.repeat(net, 2, slim.conv2d, 128, [3, 3], scope='conv2') - net = slim.max_pool2d(net, [2, 2], scope='pool2') - net = slim.repeat(net, 3, slim.conv2d, 256, [3, 3], scope='conv3') - net = slim.max_pool2d(net, [2, 2], scope='pool3') - net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv4') - net = slim.max_pool2d(net, [2, 2], scope='pool4') - net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv5') - net = slim.max_pool2d(net, [2, 2], scope='pool5') - - # Use conv2d instead of fully_connected layers. - net = slim.conv2d(net, 4096, [7, 7], padding=fc_conv_padding, scope='fc6') - net = slim.dropout(net, dropout_keep_prob, is_training=is_training, - scope='dropout6') - net = slim.conv2d(net, 4096, [1, 1], scope='fc7') - # Convert end_points_collection into a end_point dict. - end_points = slim.utils.convert_collection_to_dict(end_points_collection) - if global_pool: - net = tf.reduce_mean(net, [1, 2], keep_dims=True, name='global_pool') - end_points['global_pool'] = net - if num_classes: - net = slim.dropout(net, dropout_keep_prob, is_training=is_training, - scope='dropout7') - net = slim.conv2d(net, num_classes, [1, 1], - activation_fn=None, - normalizer_fn=None, - scope='fc8') - if spatial_squeeze and num_classes is not None: - net = tf.squeeze(net, [1, 2], name='fc8/squeezed') - end_points[sc.name + '/fc8'] = net - return net, end_points + num_classes=1000, + is_training=True, + dropout_keep_prob=0.5, + spatial_squeeze=True, + scope='vgg_16', + fc_conv_padding='VALID', + global_pool=False): + """Oxford Net VGG 16-Layers version D Example. + + Note: All the fully_connected layers have been transformed to conv2d layers. + To use in classification mode, resize input to 224x224. + + Args: + inputs: a tensor of size [batch_size, height, width, channels]. + num_classes: number of predicted classes. If 0 or None, the logits layer is + omitted and the input features to the logits layer are returned instead. + is_training: whether or not the model is being trained. + dropout_keep_prob: the probability that activations are kept in the dropout + layers during training. + spatial_squeeze: whether or not should squeeze the spatial dimensions of the + outputs. Useful to remove unnecessary dimensions for classification. + scope: Optional scope for the variables. + fc_conv_padding: the type of padding to use for the fully connected layer + that is implemented as a convolutional layer. Use 'SAME' padding if you + are applying the network in a fully convolutional manner and want to + get a prediction map downsampled by a factor of 32 as an output. + Otherwise, the output prediction map will be (input / 32) - 6 in case of + 'VALID' padding. + global_pool: Optional boolean flag. If True, the input to the classification + layer is avgpooled to size 1x1, for any input size. (This is not part + of the original VGG architecture.) + + Returns: + net: the output of the logits layer (if num_classes is a non-zero integer), + or the input to the logits layer (if num_classes is 0 or None). + end_points: a dict of tensors with intermediate activations. + """ + with tf.variable_scope(scope, 'vgg_16', [inputs]) as sc: + end_points_collection = sc.original_name_scope + '_end_points' + # Collect outputs for conv2d, fully_connected and max_pool2d. + with slim.arg_scope([slim.conv2d, slim.fully_connected, slim.max_pool2d], + outputs_collections=end_points_collection): + net = slim.repeat(inputs, 2, slim.conv2d, 64, [3, 3], scope='conv1') + net = slim.max_pool2d(net, [2, 2], scope='pool1') + net = slim.repeat(net, 2, slim.conv2d, 128, [3, 3], scope='conv2') + net = slim.max_pool2d(net, [2, 2], scope='pool2') + net = slim.repeat(net, 3, slim.conv2d, 256, [3, 3], scope='conv3') + net = slim.max_pool2d(net, [2, 2], scope='pool3') + net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv4') + net = slim.max_pool2d(net, [2, 2], scope='pool4') + net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv5') + net = slim.max_pool2d(net, [2, 2], scope='pool5') + + # Use conv2d instead of fully_connected layers. + net = slim.conv2d(net, 4096, [7, 7], padding=fc_conv_padding, scope='fc6') + net = slim.dropout(net, dropout_keep_prob, is_training=is_training, + scope='dropout6') + net = slim.conv2d(net, 4096, [1, 1], scope='fc7') + # Convert end_points_collection into a end_point dict. + end_points = slim.utils.convert_collection_to_dict(end_points_collection) + if global_pool: + net = tf.reduce_mean(net, [1, 2], keep_dims=True, name='global_pool') + end_points['global_pool'] = net + if num_classes: + net = slim.dropout(net, dropout_keep_prob, is_training=is_training, + scope='dropout7') + net = slim.conv2d(net, num_classes, [1, 1], + activation_fn=None, + normalizer_fn=None, + scope='fc8') + if spatial_squeeze and num_classes is not None: + net = tf.squeeze(net, [1, 2], name='fc8/squeezed') + end_points[sc.name + '/fc8'] = net + return net, end_points vgg_16.default_image_size = 224 -def vgg_19(inputs, - num_classes=1000, - is_training=True, - dropout_keep_prob=0.5, - spatial_squeeze=True, - scope='vgg_19', - fc_conv_padding='VALID', - global_pool=False): - """Oxford Net VGG 19-Layers version E Example. +def vgg_19( + inputs, + num_classes=1000, + is_training=True, + dropout_keep_prob=0.5, + spatial_squeeze=True, + scope='vgg_19', + fc_conv_padding='VALID', + global_pool=False): + """Oxford Net VGG 19-Layers version E Example. - Note: All the fully_connected layers have been transformed to conv2d layers. - To use in classification mode, resize input to 224x224. + Note: All the fully_connected layers have been transformed to conv2d + layers. + To use in classification mode, resize input to 224x224. + + Args: + inputs: a tensor of size [batch_size, height, width, channels]. + num_classes: number of predicted classes. If 0 or None, the logits + layer is omitted and the input features to the logits layer are + returned instead. + is_training: whether or not the model is being trained. + dropout_keep_prob: the probability that activations are kept in the + dropout layers during training. + spatial_squeeze: whether or not should squeeze the spatial dimensions + of the outputs. Useful to remove unnecessary dimensions + for classification. + scope: Optional scope for the variables. + fc_conv_padding: the type of padding to use for the fully connected layer + that is implemented as a convolutional layer. Use 'SAME' padding if you + are applying the network in a fully convolutional manner and want to + get a prediction map downsampled by a factor of 32 as an output. + Otherwise, the output prediction map will be (input / 32) - 6 in case of + 'VALID' padding. + global_pool: Optional boolean flag. If True, the input to the classification + layer is avgpooled to size 1x1, for any input size. (This is not part + of the original VGG architecture.) + + Returns: + net: the output of the logits layer (if num_classes is a non-zero integer), + or the non-dropped-out input to the logits layer (if num_classes is 0 or + None). + end_points: a dict of tensors with intermediate activations. + """ + with tf.variable_scope(scope, 'vgg_19', [inputs]) as sc: + end_points_collection = sc.original_name_scope + '_end_points' + # Collect outputs for conv2d, fully_connected and max_pool2d. + with slim.arg_scope( + [slim.conv2d, slim.fully_connected, slim.max_pool2d], + outputs_collections=end_points_collection): + + net = slim.repeat(inputs, + 2, + slim.conv2d, + 64, + [3, 3], + scope='conv1') + + net = slim.max_pool2d(net, [2, 2], scope='pool1') + net = slim.repeat(net, 2, slim.conv2d, 128, [3, 3], scope='conv2') + net = slim.max_pool2d(net, [2, 2], scope='pool2') + net = slim.repeat(net, 4, slim.conv2d, 256, [3, 3], scope='conv3') + net = slim.max_pool2d(net, [2, 2], scope='pool3') + net = slim.repeat(net, 4, slim.conv2d, 512, [3, 3], scope='conv4') + net = slim.max_pool2d(net, [2, 2], scope='pool4') + net = slim.repeat(net, 4, slim.conv2d, 512, [3, 3], scope='conv5') + net = slim.max_pool2d(net, [2, 2], scope='pool5') + + # Use conv2d instead of fully_connected layers. + net = slim.conv2d(net, + 4096, + [7, 7], + padding=fc_conv_padding, + scope='fc6') + + net = slim.dropout( + net, + dropout_keep_prob, + is_training=is_training, + scope='dropout6') + + net = slim.conv2d(net, 4096, [1, 1], scope='fc7') + # Convert end_points_collection into a end_point dict. + end_points = slim.utils.convert_collection_to_dict( + end_points_collection) + if global_pool: + net = tf.reduce_mean( + net, + [1, 2], + keep_dims=True, + name='global_pool') + end_points['global_pool'] = net + if num_classes: + net = slim.dropout( + net, + dropout_keep_prob, + is_training=is_training, + scope='dropout7') + + net = slim.conv2d( + net, + num_classes, + [1, 1], + activation_fn=None, + normalizer_fn=None, + scope='fc8') + + if spatial_squeeze: + net = tf.squeeze(net, [1, 2], name='fc8/squeezed') + end_points[sc.name + '/fc8'] = net + return net, end_points - Args: - inputs: a tensor of size [batch_size, height, width, channels]. - num_classes: number of predicted classes. If 0 or None, the logits layer is - omitted and the input features to the logits layer are returned instead. - is_training: whether or not the model is being trained. - dropout_keep_prob: the probability that activations are kept in the dropout - layers during training. - spatial_squeeze: whether or not should squeeze the spatial dimensions of the - outputs. Useful to remove unnecessary dimensions for classification. - scope: Optional scope for the variables. - fc_conv_padding: the type of padding to use for the fully connected layer - that is implemented as a convolutional layer. Use 'SAME' padding if you - are applying the network in a fully convolutional manner and want to - get a prediction map downsampled by a factor of 32 as an output. - Otherwise, the output prediction map will be (input / 32) - 6 in case of - 'VALID' padding. - global_pool: Optional boolean flag. If True, the input to the classification - layer is avgpooled to size 1x1, for any input size. (This is not part - of the original VGG architecture.) - - Returns: - net: the output of the logits layer (if num_classes is a non-zero integer), - or the non-dropped-out input to the logits layer (if num_classes is 0 or - None). - end_points: a dict of tensors with intermediate activations. - """ - with tf.variable_scope(scope, 'vgg_19', [inputs]) as sc: - end_points_collection = sc.original_name_scope + '_end_points' - # Collect outputs for conv2d, fully_connected and max_pool2d. - with slim.arg_scope([slim.conv2d, slim.fully_connected, slim.max_pool2d], - outputs_collections=end_points_collection): - net = slim.repeat(inputs, 2, slim.conv2d, 64, [3, 3], scope='conv1') - net = slim.max_pool2d(net, [2, 2], scope='pool1') - net = slim.repeat(net, 2, slim.conv2d, 128, [3, 3], scope='conv2') - net = slim.max_pool2d(net, [2, 2], scope='pool2') - net = slim.repeat(net, 4, slim.conv2d, 256, [3, 3], scope='conv3') - net = slim.max_pool2d(net, [2, 2], scope='pool3') - net = slim.repeat(net, 4, slim.conv2d, 512, [3, 3], scope='conv4') - net = slim.max_pool2d(net, [2, 2], scope='pool4') - net = slim.repeat(net, 4, slim.conv2d, 512, [3, 3], scope='conv5') - net = slim.max_pool2d(net, [2, 2], scope='pool5') - - # Use conv2d instead of fully_connected layers. - net = slim.conv2d(net, 4096, [7, 7], padding=fc_conv_padding, scope='fc6') - net = slim.dropout(net, dropout_keep_prob, is_training=is_training, - scope='dropout6') - net = slim.conv2d(net, 4096, [1, 1], scope='fc7') - # Convert end_points_collection into a end_point dict. - end_points = slim.utils.convert_collection_to_dict(end_points_collection) - if global_pool: - net = tf.reduce_mean(net, [1, 2], keep_dims=True, name='global_pool') - end_points['global_pool'] = net - if num_classes: - net = slim.dropout(net, dropout_keep_prob, is_training=is_training, - scope='dropout7') - net = slim.conv2d(net, num_classes, [1, 1], - activation_fn=None, - normalizer_fn=None, - scope='fc8') - if spatial_squeeze: - net = tf.squeeze(net, [1, 2], name='fc8/squeezed') - end_points[sc.name + '/fc8'] = net - return net, end_points vgg_19.default_image_size = 224 # Alias diff --git a/winnow/feature_extraction/siamese_net.py b/winnow/feature_extraction/siamese_net.py index 2687cca4..47ee295d 100644 --- a/winnow/feature_extraction/siamese_net.py +++ b/winnow/feature_extraction/siamese_net.py @@ -11,6 +11,7 @@ import warnings + class DNN(object): def __init__(self, @@ -33,13 +34,19 @@ def __init__(self, trainable: indicator of whether it is training or evaluation phase learning_rate: learning rate that weights are updated weight_decay: regularization parameter for weight decay - gamma: margin parameter between positive-query and negative-query distance + gamma: margin parameter between positive-query and + negative-query distance """ self.trainable = trainable self.path = os.path.join(model_path, 'model') - self.input = tf.compat.v1.placeholder(tf.float32, shape=(None, input_dimensions), name='input') - self.regularizer = tf.contrib.layers.l2_regularizer(scale=weight_decay) if trainable else None + self.input = tf.compat.v1.placeholder(tf.float32, + shape=(None, input_dimensions), + name='input') + + reg = tf.contrib.layers.l2_regularizer(scale=weight_decay) + + self.regularizer = reg if trainable else None if load_model: self.output = self.load_model() else: @@ -49,12 +56,23 @@ def __init__(self, if trainable: self.global_step = 1 with tf.name_scope('training'): - anchor, positive, negative = \ - tf.unstack(tf.reshape(self.output, [-1, 3, self.output.get_shape().as_list()[1]]), 3, 1) - loss, error = self.triplet_loss(anchor, positive, negative, gamma) - - reg_variables = tf.get_collection(tf.GraphKeys.REGULARIZATION_LOSSES) - reg_term = tf.contrib.layers.apply_regularization(self.regularizer, reg_variables) + anchor, positive, negative = tf.unstack( + tf.reshape( + self.output, + [-1, 3, self.output.get_shape().as_list()[1]]), 3, 1) + loss, error = self.triplet_loss( + anchor, + positive, + negative, + gamma) + + reg_variables = tf.get_collection( + tf.GraphKeys.REGULARIZATION_LOSSES) + + reg_term = tf.contrib.layers.apply_regularization( + self.regularizer, + reg_variables + ) with tf.name_scope('cost'): cost = loss + reg_term tf.summary.scalar('cost', cost) @@ -71,7 +89,10 @@ def __init__(self, self.sess = tf.compat.v1.Session(config=config) self.sess.run(init) if trainable: - self.summary_writer = tf.summary.FileWriter(model_path, self.sess.graph) + self.summary_writer = tf.summary.FileWriter( + model_path, + self.sess.graph + ) def build(self, hidden_layer_sizes): """ @@ -86,11 +107,14 @@ def build(self, hidden_layer_sizes): """ net = self.input for M in hidden_layer_sizes: - net = tf.contrib.layers.fully_connected(net, M, + net = tf.contrib.layers.fully_connected( + net, + M, activation_fn=tf.nn.tanh, weights_regularizer=self.regularizer, biases_regularizer=self.regularizer, trainable=self.trainable) + with tf.name_scope('embeddings'): net = tf.nn.l2_normalize(net, 1, 1e-15) tf.compat.v1.summary.histogram('embeddings', net) @@ -106,15 +130,18 @@ def load_model(self): net = self.build(previous_sizes) previous_variables = [var_name for var_name, _ - in tf.contrib.framework.list_variables(self.path)] - restore_map = {variable.op.name: variable for variable in tf.compat.v1.global_variables() + in tf.contrib.framework.list_variables(self.path) + ] + restore_map = {variable.op.name: variable + for variable in tf.compat.v1.global_variables() if variable.op.name in previous_variables} tf.contrib.framework.init_from_checkpoint(self.path, restore_map) return net def euclidean_distance(self, x, y): """ - Euclidean distance calculation between each sample N of two matrices (NxM). + Euclidean distance calculation between each sample N of two matrices + (NxM). Args: x: first feature matrix (NxM) @@ -129,7 +156,7 @@ def euclidean_distance(self, x, y): def triplet_loss(self, anchor, positive, negative, gamma): """ Triplet loss calculation. - + Args: anchor: anchor feature matrix (NxM) @@ -145,8 +172,12 @@ def triplet_loss(self, anchor, positive, negative, gamma): pos_dist = self.euclidean_distance(anchor, positive) neg_dist = self.euclidean_distance(anchor, negative) loss = tf.maximum(0., pos_dist - neg_dist + gamma) - error = tf.count_nonzero(loss, dtype=tf.float32) / \ - tf.cast(tf.shape(anchor)[0], tf.float32) * tf.constant(100.0) + + e1 = tf.count_nonzero(loss, dtype=tf.float32) + e2 = tf.cast(tf.shape(anchor)[0], tf.float32) + e3 = tf.constant(100.0) + + error = e1 / e2 * e3 loss = tf.reduce_mean(loss) tf.summary.scalar('loss', loss) tf.summary.scalar('error', error) @@ -186,7 +217,9 @@ def test(self, X): cost: total cost error: number of triplets with positive loss """ - summary, cost, error = self.sess.run(self.test_op, feed_dict={self.input: X}) + summary, cost, error = self.sess.run( + self.test_op, + feed_dict={self.input: X}) self.summary_writer.add_summary(summary, self.global_step) self.global_step += 1 return cost, error @@ -200,4 +233,4 @@ def embeddings(self, X): Returns: embeddings: embedding matrix (NxM) """ - return self.sess.run(self.output, feed_dict={self.input: X}) \ No newline at end of file + return self.sess.run(self.output, feed_dict={self.input: X}) diff --git a/winnow/feature_extraction/similarity_model.py b/winnow/feature_extraction/similarity_model.py index d118393e..55ea8ee9 100644 --- a/winnow/feature_extraction/similarity_model.py +++ b/winnow/feature_extraction/similarity_model.py @@ -16,17 +16,29 @@ def __init__(self): def predict(self, file_feature_dict): """ Args: - file_feature_dict: A dictionary mapping from original (path,hash) to video-level feature tensor. + file_feature_dict: A dictionary mapping from original (path,hash) + to video-level feature tensor. """ - # Get array of (path,hash) and array of corresponding feature values in the same order + # Get array of (path,hash) and array of corresponding feature + # values in the same order keys, features = zip(*file_feature_dict.items()) - features = np.array([tensor[0] for tensor in features]) # TODO: Need a comment concerning magical tensor[0]? + features = np.array([tensor[0] for tensor in features]) + embeddings = self.predict_from_features(features) + + return dict(zip(keys, embeddings)) + + def predict_from_features(self, features): # Create model if self.model is None: print(f"Creating similarity model for shape {features.shape}") - self.model = DNN(features.shape[1], None, similarity_model_pretrained, load_model=True, trainable=False) + self.model = DNN( + features.shape[1], + None, + similarity_model_pretrained, + load_model=True, + trainable=False) embeddings = self.model.embeddings(features) embeddings = np.nan_to_num(embeddings) - return dict(zip(keys, embeddings)) + return embeddings diff --git a/winnow/feature_extraction/utils.py b/winnow/feature_extraction/utils.py index c6a9933e..fd125e53 100644 --- a/winnow/feature_extraction/utils.py +++ b/winnow/feature_extraction/utils.py @@ -1,19 +1,28 @@ import os import shutil - +import yaml import cv2 import numpy as np import requests def download_file(local_filename, url): - r = requests.get(url, stream=True) - with open(local_filename, 'wb') as f: - shutil.copyfileobj(r.raw, f) - return local_filename + + with requests.get(url, stream=True) as r: + + r.raise_for_status() + with open(local_filename, 'wb') as f: + + for chunk in r.iter_content(chunk_size=8192): + + if chunk: + + f.write(chunk) + + return local_filename -def load_video(video, desired_size,frame_sampling): +def load_video(video, desired_size, frame_sampling): """ Function that loads a video and converts it to the desired size. @@ -39,14 +48,19 @@ def load_video(video, desired_size,frame_sampling): ret, frame = cap.read() if isinstance(frame, np.ndarray): try: - # When frame_sampling = 1 -> We sample one 1 frame per second - # When frame_sampling = 2 -> We sample one frame every 2 * frame_per_second -> 1 frame every 2 seconds + """ + When frame_sampling = 1 -> We sample one 1 + frame per second + When frame_sampling = 2 -> We sample one + frame every 2 * frame_per_second -> 1 frame + every 2 seconds + """ if int(count % round(fps * frame_sampling)) == 0: frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) if desired_size != 0: frame = pad_and_resize(frame, desired_size) frames.append(frame) - except: + except Exception: pass else: break @@ -108,25 +122,33 @@ def pad_and_resize(image, desired_size): left, right = delta_w // 2, delta_w - (delta_w // 2) image_processed = cv2.copyMakeBorder( - image_processed, top, bottom, left, right, cv2.BORDER_CONSTANT, value=[0, 0, 0]) + image_processed, + top, + bottom, + left, + right, + cv2.BORDER_CONSTANT, + value=[0, 0, 0]) + return image_processed + def download_pretrained(config_file): hit_exc = False try: CONFIG_FP = config_file - with open(CONFIG_FP,'r') as ymlfile: - cfg=yaml.load(ymlfile) + with open(CONFIG_FP, 'r') as ymlfile: + cfg = yaml.load(ymlfile) USE_LOCAL_PRETRAINED = cfg['use_pretrained_model_local_path'] PRETRAINED_LOCAL_PATH = cfg['pretrained_model_local_path'] DST_DIR = cfg['destination_folder'] - except Exception as e: + except Exception: hit_exc = True - print("In order to use the config file, please add its path to the OS environ as a variable eg:os.environ['WINNOW_CONFIG'] = [ABSFILEPATH]" ) - + print("Make sure path to config has been added to env") + finally: if hit_exc: @@ -134,18 +156,23 @@ def download_pretrained(config_file): USE_LOCAL_PRETRAINED = False DST_DIR = False - if not USE_LOCAL_PRETRAINED: PRETRAINED_MODEL = 'vgg_16.ckpt' if DST_DIR: - PRETRAINED_LOCAL_PATH = os.path.join(DST_DIR,'pretrained_models',PRETRAINED_MODEL) + PRETRAINED_LOCAL_PATH = os.path.join( + DST_DIR, + 'pretrained_models', + PRETRAINED_MODEL) else: package_directory = os.path.dirname(os.path.abspath(__file__)) - PRETRAINED_LOCAL_PATH = os.path.join(package_directory,'pretrained_models',PRETRAINED_MODEL) + PRETRAINED_LOCAL_PATH = os.path.join( + package_directory, + 'pretrained_models', + PRETRAINED_MODEL) # Pre-trained model file availability assessment @@ -154,19 +181,29 @@ def download_pretrained(config_file): else: if USE_LOCAL_PRETRAINED: try: - print('Downloading pretrained model to:{}'.format(PRETRAINED_LOCAL_PATH)) - download_file(PRETRAINED_LOCAL_PATH,"https://s3.amazonaws.com/winnowpretrainedmodels/vgg_16.ckpt") - except: - print('Copying from source directory (as defined in the config file') - print('Please check your config file and make sure you have a valid path to save the pretrained model ') - raise + print('Downloading pretrained model to:{}'.format( + PRETRAINED_LOCAL_PATH)) + download_file( + PRETRAINED_LOCAL_PATH, + "https://s3.amazonaws.com/winnowpretrainedmodels/vgg_16.ckpt" + ) + except Exception: + print('Copying from source dir') + + raise else: try: - os.makedirs(os.path.join(package_directory,'pretrained_models')) + os.makedirs(os.path.join( + package_directory, + 'pretrained_models')) except Exception as e: print(e) pass - print('Downloading pretrained model to:{}'.format(PRETRAINED_LOCAL_PATH)) - download_file(PRETRAINED_LOCAL_PATH,"https://s3.amazonaws.com/winnowpretrainedmodels/vgg_16.ckpt") + print('Downloading pretrained model to:{}'.format( + PRETRAINED_LOCAL_PATH)) + + download_file( + PRETRAINED_LOCAL_PATH, + "https://s3.amazonaws.com/winnowpretrainedmodels/vgg_16.ckpt") - return PRETRAINED_LOCAL_PATH \ No newline at end of file + return PRETRAINED_LOCAL_PATH diff --git a/winnow/search_engine/template_matching.py b/winnow/search_engine/template_matching.py index 25045a92..66e32246 100644 --- a/winnow/search_engine/template_matching.py +++ b/winnow/search_engine/template_matching.py @@ -1,22 +1,22 @@ -from collections import defaultdict import datetime +import os +import shutil +from collections import defaultdict from glob import glob + import matplotlib.pyplot as plt import numpy as np -import os import pandas as pd -import requests from scipy.spatial.distance import cdist -import shutil -from winnow.feature_extraction.extraction_routine import load_featurizer -from winnow.feature_extraction.utils import load_image,load_video,download_file + +from winnow.feature_extraction.utils import load_image, download_file from winnow.storage.repr_storage import ReprStorage -import yaml + class SearchEngine: def __init__(self, templates_root, reprs: ReprStorage, model): - templates_glob = os.path.join(templates_root,'*') + templates_glob = os.path.join(templates_root, '*') self.templates_root = templates_glob self.model = model @@ -24,93 +24,117 @@ def __init__(self, templates_root, reprs: ReprStorage, model): self.reprs = reprs self.template_cache = self.load_available_templates() self.results_cache = {} - - + def find_available_templates(self): - + folders = glob(self.templates_root) - available = dict(zip([x.split('/')[-1] for x in folders],folders)) - + available = dict( + zip([x.split('/')[-1] for x in folders], folders)) + return available - - def load_templates(self,files): - resized = np.array([load_image(x,224) for x in files]) - features = self.model.extract(resized,batch_sz=10) + + def load_templates(self, files): + + resized = np.array([load_image(x, 224) for x in files]) + features = self.model.extract(resized, batch_sz=10) return features - + def load_available_templates(self): - + cache = dict() - - for k,v in self.available_queries.items(): - + + for k, v in self.available_queries.items(): + cache[k] = self.load_templates(glob(v + '/**')) - + return cache - - def create_annotation_report(self,threshold = 0.07,fp = 'template_test.csv',queries = None,frame_sampling = 1): - """Creates an annotation report suitable for annotation (using our own Annotator class) - + def create_annotation_report( + self, + threshold=0.07, + fp='template_test.csv', + queries=None, + frame_sampling=1): + + """Creates an annotation report suitable for annotation + (using our own Annotator class) + Returns: - [pandas.DataFrame] -- Dataframe in the same format as the output from the "generate_matches.py" script + [pandas.DataFrame] -- Dataframe in the same format as the output + from the "generate_matches.py" script """ def create_template_summary(files): - resized = np.array([load_image(x,224) for x in files]) + resized = np.array([load_image(x, 224) for x in files]) return resized if queries is None: for q in self.available_queries: - self.find(q,threshold=threshold,plot=False) + self.find(q, threshold=threshold, plot=False) else: for q in queries: - self.find(q,threshold=threshold,plot=False) + self.find(q, threshold=threshold, plot=False) print(self.available_queries) if self.results_cache: - - records = pd.DataFrame.from_records(self.results_cache,index=None).reset_index() - + + records = pd.DataFrame.from_records( + self.results_cache, + index=None).reset_index() + # Massage template matching results - df = pd.melt(records,id_vars=['level_0','level_1']) + df = pd.melt(records, id_vars=['level_0', 'level_1']) msk = df['variable'] != 'Unnamed: 0' - df = df.loc[msk,:] + df = df.loc[msk, :] # Convert df into a more suitable format to be saved - df.rename(columns = {'level_0':'fn','level_1':'sha256','variable':'template_name'},inplace=True) - additional_info = df.loc[:,['value']].to_dict('records') + df.rename( + columns={ + 'level_0': 'fn', + 'level_1': 'sha256', + 'variable': 'template_name'}, + inplace=True) + + additional_info = df.loc[:, ['value']].to_dict('records') additional_info = [x['value'] for x in additional_info] add_df = pd.DataFrame.from_records(x for x in additional_info) df['distance'] = add_df['distance'] df['closest_match'] = add_df['closest_match'] - # This will adjust the time sampling to the sampling rate (ideally this should be sourced from the DB and not from the config file) - df['closest_match_time'] = df['closest_match'].apply(lambda x: datetime.timedelta(seconds=x * frame_sampling)) - df.drop(columns=['value'],inplace=True) + # This will adjust the time sampling to the sampling rate (ideally + # this should be sourced from the DB and not from the config file) + df['closest_match_time'] = df['closest_match'].apply( + lambda x: datetime.timedelta( + seconds=x * frame_sampling) + ) + df.drop(columns=['value'], inplace=True) return df - elif not self.available_queries: - raise Exception('No templates were found. Please check if the templates are located at {}'.format(self.templates_root)) - + raise Exception('No templates were found at {}'.format( + self.templates_root)) + else: - raise Exception('No matches were found at the current distance configuration ({})'.format(threshold)) + raise Exception('No matches were found at \ + the current distance configuration ({})'.format( + threshold)) + + def find(self, query, threshold=0.07, plot=True): - - def find(self,query,threshold=0.07,plot=True): - feats = self.template_cache[query] - print('Loaded query embeddings',feats.shape) + print('Loaded query embeddings', + feats.shape) self.results_cache[query] = defaultdict() - for path, sha256 in self.reprs.frame_level.list(): + for repr_key in self.reprs.frame_level.list(): try: - sample = self.reprs.frame_level.read(path, sha256) - video_frames = self.reprs.frames.read(path, sha256) - - distances = np.mean(cdist(feats,sample,metric='cosine'),axis=0) - - self.results_cache[query][(path, sha256)] = dict() + sample = self.reprs.frame_level.read(repr_key) + video_frames = self.reprs.frames.read(repr_key) + + distances = np.mean( + cdist(feats, sample, metric='cosine'), + axis=0) + + self.results_cache[query][repr_key] = dict() if len(distances) > 0: frame_of_interest_index = np.argmin(distances) @@ -118,28 +142,38 @@ def find(self,query,threshold=0.07,plot=True): else: frame_of_interest_index = 0 min_d = 1.0 - - - self.results_cache[query][(path, sha256)]["distance"] = min_d - self.results_cache[query][(path, sha256)]["closest_match"] = frame_of_interest_index - + + self.results_cache[query][repr_key]["distance"] = min_d + self.results_cache[query][repr_key]["closest_match"] = \ + frame_of_interest_index + if (min_d < threshold) and plot: - - frame_of_interest = np.hstack(video_frames[frame_of_interest_index:][:5]) - plt.figure(figsize=(20,10)) + + frame_of_interest = np.hstack( + video_frames[ + frame_of_interest_index:][:5]) + plt.figure(figsize=(20, 10)) plt.imshow(frame_of_interest) plt.show() except Exception as e: - print('Error:',e,distances,path,sha256,frame_of_interest_index) + print( + 'Error:', + e, + distances, + repr_key, + frame_of_interest_index) pass -def download_sample_templates(TEMPLATES_PATH,DOWNLOAD_URL="https://s3.amazonaws.com/winnowpretrainedmodels/templates.tar.gz"): +def download_sample_templates( + TEMPLATES_PATH, + URL="https://s3.amazonaws.com/winnowpretrainedmodels/templates.tar.gz"): + if os.path.exists(TEMPLATES_PATH): - print('Templates Found',glob(TEMPLATES_PATH + '/**')) + print('Templates Found', glob(TEMPLATES_PATH + '/**')) - else: + else: try: os.makedirs(TEMPLATES_PATH) except Exception as e: @@ -147,34 +181,8 @@ def download_sample_templates(TEMPLATES_PATH,DOWNLOAD_URL="https://s3.amazonaws. pass print('Downloading sample templates to:{}'.format(TEMPLATES_PATH)) DST = TEMPLATES_PATH + '/templates.tar.gz' - download_file(DST,DOWNLOAD_URL) + download_file(DST, URL) # unzip files - shutil.unpack_archive(DST,format='gztar') + shutil.unpack_archive(DST, format='gztar') # Delete tar os.unlink(DST) - - - - -def search_from_features(feats,threshold=0.07): - for i in range(len(frame_summaries)): - - try: - video_summary = frame_summaries[i] - sample = np.load(video_summary) - video_frames = np.load(video_summary.replace('features','frames')) - - distances = np.mean(cdist(feats,sample,metric='cosine'),axis=0) - min_d = min(distances) - - - if min_d < threshold: - print('Minimum distance:{}'.format(min_d)) - frame_of_interest = np.hstack(video_frames[np.argmin(distances):][:5]) - - plt.figure(figsize=(20,10)) - plt.imshow(frame_of_interest) - plt.show() - except Exception as e: - print(e) - \ No newline at end of file diff --git a/winnow/storage/db_result_storage.py b/winnow/storage/db_result_storage.py index 644ba535..5d81db2e 100644 --- a/winnow/storage/db_result_storage.py +++ b/winnow/storage/db_result_storage.py @@ -1,13 +1,20 @@ import itertools import logging from functools import wraps -from collections import defaultdict from time import time from sqlalchemy import tuple_ from sqlalchemy.orm import joinedload, aliased -from db.schema import Files, Signature, Scene, VideoMetadata, Matches, Exif,Templatematches +from db.schema import ( + Files, + Signature, + Scene, + VideoMetadata, + Matches, + Exif, + Templatematches + ) logger = logging.getLogger(__name__) @@ -30,7 +37,6 @@ def wrapped(*args, **kwargs): logger.debug(f"{func.__name__}(...) took {end - start:5.3} seconds") return result - wrapped.__name__ = func.__name__ return wrapped @@ -45,7 +51,8 @@ def __init__(self, database): """Create a new storage instance. Args: - database {db.Database}: A database instance to store and fetch results. + database {db.Database}: A database instance to store and fetch + results. """ self.database = database @@ -54,7 +61,8 @@ def add_file_signature(self, path, sha256, sig_value): """Add video file signature.""" with self.database.session_scope() as session: query = session.query(Files).options(joinedload(Files.signature)) - file = query.filter(Files.file_path == path, Files.sha256 == sha256).one_or_none() + file = query.filter(Files.file_path == path, + Files.sha256 == sha256).one_or_none() file = file or Files(file_path=path, sha256=sha256) sig_entity = file.signature or Signature(file_id=file.id) sig_entity.signature = sig_value @@ -72,8 +80,11 @@ def add_signatures(self, entries): for chunk in chunks(entries, size=1000): with self.database.session_scope() as session: index = {(path, sha256): sig for path, sha256, sig in chunk} - query = session.query(Files).options(joinedload(Files.signature)) - files = query.filter(self._by_path_and_hash(list(index.keys()))).all() + query = (session.query(Files).options( + joinedload(Files.signature))) + + files = query.filter( + self._by_path_and_hash(list(index.keys()))).all() # Update existing files for file in files: @@ -85,7 +96,13 @@ def add_signatures(self, entries): # Create missing files new_files = [] for (path, sha256), sig_value in index.items(): - new_files.append(Files(file_path=path, sha256=sha256, signature=Signature(signature=sig_value))) + new_files.append( + Files( + file_path=path, + sha256=sha256, + signature=Signature( + signature=sig_value))) + session.add_all(new_files) @benchmark @@ -93,7 +110,10 @@ def add_file_scenes(self, path, sha256, durations, override=False): """Add scenes for a single video file.""" with self.database.session_scope() as session: query = session.query(Files).options(joinedload(Files.scenes)) - file = query.filter(Files.file_path == path, Files.sha256 == sha256).one_or_none() + file = query.filter( + Files.file_path == path, + Files.sha256 == sha256).one_or_none() + file = file or Files(file_path=path, sha256=sha256) # Delete existing scenes if needed @@ -107,29 +127,31 @@ def add_file_scenes(self, path, sha256, durations, override=False): # Write new scenes file.scenes = self._create_scenes(file, durations) session.add_all(file.scenes) - - # @benchmark - def add_template_matches(self,entries,override=False): - + @benchmark + def add_template_matches(self, entries, override=False): + for chunk in chunks(entries, len(entries)): with self.database.session_scope() as session: index = {} - for path,sha256,template_match in chunk: - - if (path,sha256) in index: + for path, sha256, template_match in chunk: + + if (path, sha256) in index: - index[(path,sha256)].append(template_match) + index[(path, sha256)].append(template_match) else: - index[(path,sha256)] = [template_match] + index[(path, sha256)] = [template_match] - - query = session.query(Files).options(joinedload(Files.templatematches)) - files = query.filter(self._by_path_and_hash(list(index.keys()))).all() - print("Number of files found",len(files)) + query = session.query(Files).options( + joinedload(Files.templatematches)) + files = query.filter( + self._by_path_and_hash( + list(index.keys()))).all() + + print("Number of files found", len(files)) # Delete existing template_matches if override: self._delete_file_template_matches(session, *files) @@ -137,10 +159,11 @@ def add_template_matches(self,entries,override=False): # Update existing files for file in files: tm = index.pop((file.file_path, file.sha256)) - new_tm = self._create_template_matches(file,tm,file.templatematches) + new_tm = self._create_template_matches( + file, tm, file.templatematches) if len(new_tm) > 0: - - file.templatematches = file.templatematches + new_tm + + file.templatematches = file.templatematches + new_tm @benchmark def add_scenes(self, entries, override=False): @@ -154,9 +177,13 @@ def add_scenes(self, entries, override=False): # Split the work into chunks for chunk in chunks(entries, size=1000): with self.database.session_scope() as session: - index = {(path, sha256): durations for path, sha256, durations in chunk} + index = { + (path, sha256): durations + for path, sha256, durations in chunk} query = session.query(Files).options(joinedload(Files.scenes)) - files = query.filter(self._by_path_and_hash(list(index.keys()))).all() + files = query.filter( + self._by_path_and_hash( + list(index.keys()))).all() # Delete existing scenes if needed if override: @@ -192,7 +219,10 @@ def add_file_metadata(self, path, sha256, metadata): """ with self.database.session_scope() as session: query = session.query(Files).options(joinedload(Files.meta)) - file = query.filter(Files.file_path == path, Files.sha256 == sha256).one_or_none() + file = query.filter( + Files.file_path == path, + Files.sha256 == sha256).one_or_none() + file = file or Files(file_path=path, sha256=sha256) metadata_entity = file.meta or VideoMetadata(file=file) @@ -211,9 +241,13 @@ def add_metadata(self, entries): # Split the work into chunks for chunk in chunks(entries, size=1000): with self.database.session_scope() as session: - index = {(path, sha256): metadata for path, sha256, metadata in chunk} + index = { + (path, sha256): metadata + for path, sha256, metadata in chunk + } query = session.query(Files).options(joinedload(Files.meta)) - files = query.filter(self._by_path_and_hash(list(index.keys()))).all() + files = query.filter( + self._by_path_and_hash(list(index.keys()))).all() # Update existing files for file in files: @@ -231,37 +265,53 @@ def add_metadata(self, entries): new_file.meta = metadata_entity new_files.append(new_file) session.add_all(new_files) - + @benchmark def add_matches(self, entries): """Add file matches. Args: - entries: Iterable of (path_1,sha256_1,path_2,sha256_2,distance) tuples. + entries: Iterable of (path_1,sha256_1,path_2,sha256_2,distance) + tuples. """ # Split the work into chunks for chunk in chunks(entries, size=1000): with self.database.session_scope() as session: index = self._index_matches(chunk) - matches = self._matches_by_path_and_hash(session, list(index.keys())).all() + matches = self._matches_by_path_and_hash( + session, list(index.keys())).all() # Update existing matches for match in matches: source = match.query_video_file target = match.match_video_file - distance = index.pop((source.file_path, source.sha256, target.file_path, target.sha256)) + distance = index.pop(( + source.file_path, + source.sha256, + target.file_path, + target.sha256 + )) match.distance = distance # Collect files for missing matches files = self._files_for_matches(session, list(index.keys())) - file_index = {(file.file_path, file.sha256): file for file in files} + file_index = { + (file.file_path, file.sha256): file + for file in files} # Create missing matches: new_matches = [] - for (path_1, sha256_1, path_2, sha256_2), distance in index.items(): + + for (path_1, + sha256_1, + path_2, + sha256_2), distance in index.items(): query_file = file_index[(path_1, sha256_1)] match_file = file_index[(path_2, sha256_2)] - new_match = Matches(query_video_file=query_file, match_video_file=match_file, distance=distance) + new_match = Matches( + query_video_file=query_file, + match_video_file=match_file, + distance=distance) new_matches.append(new_match) session.add_all(new_matches) @@ -276,7 +326,8 @@ def add_file_exif(self, path, sha256, exif): """ with self.database.session_scope() as session: query = session.query(Files).options(joinedload(Files.exif)) - file = query.filter(Files.file_path == path, Files.sha256 == sha256).one_or_none() + file = query.filter(Files.file_path == path, + Files.sha256 == sha256).one_or_none() file = file or Files(file_path=path, sha256=sha256) exif_entity = file.exif or Exif(file=file) @@ -297,7 +348,8 @@ def add_exifs(self, entries): with self.database.session_scope() as session: index = {(path, sha256): exif for path, sha256, exif in chunk} query = session.query(Files).options(joinedload(Files.exif)) - files = query.filter(self._by_path_and_hash(list(index.keys()))).all() + files = query.filter( + self._by_path_and_hash(list(index.keys()))).all() # Update existing files for file in files: @@ -327,89 +379,111 @@ def _scene_ids(*files): scenes = itertools.chain(*(file.scenes or () for file in files)) return [scene.id for scene in scenes] - @staticmethod - def _template_matches_ids(session,*files): + def _template_matches_ids(session, *files): """Get all template_matches ids associated with the given files.""" - template_matches = itertools.chain(*(file.templatematches or () for file in files)) + template_matches = itertools.chain(*( + file.templatematches + or () for file in files)) return [template_match.id for template_match in template_matches] @staticmethod def _delete_file_scenes(session, *files): """Delete all scenes associated with the given files.""" existing_scene_ids = DBResultStorage._scene_ids(*files) - session.query(Scene).filter(Scene.id.in_(existing_scene_ids)).delete(synchronize_session="fetch") + session.query(Scene).filter(Scene.id.in_( + existing_scene_ids) + ).delete( + synchronize_session="fetch" + ) for file in files: file.scenes = [] @staticmethod def _delete_file_template_matches(session, *files): """Delete all scenes associated with the given files.""" - existing_template_matches_ids = DBResultStorage._template_matches_ids(*files) - - session.query(Templatematches).filter(Templatematches.id.in_(existing_template_matches_ids)).delete(synchronize_session="fetch") + existing_template_matches_ids = DBResultStorage._template_matches_ids( + *files) + + (session + .query(Templatematches) + .filter( + Templatematches.id.in_( + existing_template_matches_ids)).delete( + synchronize_session="fetch")) + for file in files: file.template_matches = [] @staticmethod - def _filter_unique_templates(old_templates,new_templates): + def _filter_unique_templates(old_templates, new_templates): filtered = [] - seen = dict({f'{element.file_id}{element.template_name}': True for element in old_templates}) + seen = dict({ + f'{element.file_id}{element.template_name}': True + for element in old_templates}) for element in new_templates: - hsh = f'{element["file_id"]}{element["template_name"]}' + hsh = f'{element["file_id"]}{element["template_name"]}' if hsh not in seen: filtered.append(element) seen[hsh] = True - + return filtered - + @staticmethod - def _create_template_matches(file, tp_match,old_templates): - """Create Template Matches entities for the given file from the durations.""" - seen = dict({f'{element.file_id}{element.template_name}': True for element in old_templates}) - tm = [] + def _create_template_matches(file, tp_match, old_templates): + + """Create Template Matches entities for the given file + from the durations. + """ + seen = dict({ + f'{element.file_id}{element.template_name}': True + for element in old_templates}) + tm = [] for match in tp_match: hsh = f'{file.id}{match["template_name"]}' - + if hsh not in seen: - + tm.append(Templatematches( file=file, - file_id = file.id, + file_id=file.id, distance=match['distance'], template_name=match['template_name'], - closest_match = match['closest_match'], + closest_match=match['closest_match'], closest_match_time=match['closest_match_time'])) - return tm - @staticmethod + @staticmethod def _create_scenes(file, durations): """Create scene entities for the given file from the durations.""" scenes = [] start_time = 0 for duration in durations: - scenes.append(Scene(file=file, start_time=int(start_time), duration=int(duration))) + scenes.append(Scene( + file=file, + start_time=int(start_time), + duration=int(duration))) start_time += duration return scenes @staticmethod def _update_metadata(metadata_entity, metadata): """Update metadata attributes""" - metadata_entity.video_length = metadata.get('video_length', metadata_entity.video_length) - metadata_entity.avg_act = metadata.get('avg_act', metadata_entity.avg_act) - metadata_entity.video_avg_std = metadata.get('video_avg_std', metadata_entity.video_avg_std) - metadata_entity.video_max_dif = metadata.get('video_max_dif', metadata_entity.video_max_dif) - metadata_entity.gray_avg = metadata.get('gray_avg', metadata_entity.gray_avg) - metadata_entity.gray_std = metadata.get('gray_std', metadata_entity.gray_std) - metadata_entity.gray_max = metadata.get('gray_max', metadata_entity.gray_max) - metadata_entity.video_dark_flag = metadata.get('video_dark_flag', metadata_entity.video_dark_flag) - metadata_entity.video_duration_flag = metadata.get('video_duration_flag', metadata_entity.video_duration_flag) - metadata_entity.flagged = metadata.get('flagged', metadata_entity.flagged) + metadata_entity.gray_max = metadata.get( + 'gray_max', + metadata_entity.gray_max) + + metadata_entity.video_dark_flag = metadata.get( + 'video_dark_flag', + metadata_entity.video_dark_flag) + + metadata_entity.flagged = metadata.get( + 'flagged', + metadata_entity.flagged) @staticmethod def _index_matches(chunk): @@ -437,7 +511,8 @@ def _matches_by_path_and_hash(session, file_identifiers): @staticmethod def _matches_file_identifiers(connections): - """Get file identifiers from connections of the form (path_1,sha256_1,path_2,sha256_2).""" + """Get file identifiers from connections of the form + (path_1,sha256_1,path_2,sha256_2).""" result = [] for path_1, sha256_1, path_2, sha256_2 in connections: result.append((path_1, sha256_1)) @@ -446,9 +521,19 @@ def _matches_file_identifiers(connections): @staticmethod def _files_for_matches(session, connections): - """Get or create files for connections of the form (path_1,sha256_1,path_2,sha256_2).""" - file_identifiers = set(DBResultStorage._matches_file_identifiers(connections)) - existing_files = session.query(Files).filter(DBResultStorage._by_path_and_hash(file_identifiers)).all() + """ + Get or create files for connections of the form + (path_1,sha256_1,path_2,sha256_2). + """ + file_identifiers = set( + DBResultStorage + ._matches_file_identifiers(connections) + ) + existing_files = (session + .query(Files) + .filter( + DBResultStorage._by_path_and_hash( + file_identifiers)).all()) # Get missing files (path,hash) ids for file in existing_files: @@ -465,30 +550,85 @@ def _files_for_matches(session, connections): @staticmethod def _update_exif(entity, exif): - entity.General_FileExtension = exif.get('General_FileExtension', entity.General_FileExtension) - entity.General_Format_Commercial = exif.get('General_Format_Commercial', entity.General_Format_Commercial) - entity.General_FileSize = exif.get('General_FileSize', entity.General_FileSize) - entity.General_Duration = exif.get('General_Duration', entity.General_Duration) - entity.General_OverallBitRate_Mode = exif.get('General_OverallBitRate_Mode', entity.General_OverallBitRate_Mode) - entity.General_OverallBitRate = exif.get('General_OverallBitRate', entity.General_OverallBitRate) - entity.General_FrameRate = exif.get('General_FrameRate', entity.General_FrameRate) - entity.General_FrameCount = exif.get('General_FrameCount', entity.General_FrameCount) - entity.General_Encoded_Date = exif.get('General_Encoded_Date', entity.General_Encoded_Date) - entity.General_File_Modified_Date = exif.get('General_File_Modified_Date', entity.General_File_Modified_Date) - entity.General_File_Modified_Date_Local = exif.get('General_File_Modified_Date_Local', - entity.General_File_Modified_Date_Local) - entity.General_Tagged_Date = exif.get('General_Tagged_Date', entity.General_Tagged_Date) - entity.Video_Format = exif.get('Video_Format', entity.Video_Format) - entity.Video_BitRate = exif.get('Video_BitRate', entity.Video_BitRate) - entity.Video_InternetMediaType = exif.get('Video_InternetMediaType', entity.Video_InternetMediaType) - entity.Video_Width = exif.get('Video_Width', entity.Video_Width) - entity.Video_Height = exif.get('Video_Height', entity.Video_Height) - entity.Video_FrameRate = exif.get('Video_FrameRate', entity.Video_FrameRate) - entity.Audio_Format = exif.get('Audio_Format', entity.Audio_Format) - entity.Audio_SamplingRate = exif.get('Audio_SamplingRate', entity.Audio_SamplingRate) - entity.Audio_Title = exif.get('Audio_Title', entity.Audio_Title) - entity.Audio_BitRate = exif.get('Audio_BitRate', entity.Audio_BitRate) - entity.Audio_Channels = exif.get('Audio_Channels', entity.Audio_Channels) - entity.Audio_Duration = exif.get('Audio_Duration', entity.Audio_Duration) - entity.Audio_Encoded_Date = exif.get('Audio_Encoded_Date', entity.Audio_Encoded_Date) - entity.Audio_Tagged_Date = exif.get('Audio_Tagged_Date', entity.Audio_Tagged_Date) + entity.General_FileExtension = exif.get( + 'General_FileExtension', + entity.General_FileExtension) + entity.General_Format_Commercial = exif.get( + 'General_Format_Commercial', + entity + .General_Format_Commercial) + entity.General_FileSize = exif.get( + 'General_FileSize', + entity.General_FileSize) + entity.General_Duration = exif.get( + 'General_Duration', + entity.General_Duration) + entity.General_OverallBitRate_Mode = exif.get( + 'General_OverallBitRate_Mode', + entity + .General_OverallBitRate_Mode) + entity.General_OverallBitRate = exif.get( + 'General_OverallBitRate', + entity.General_OverallBitRate) + entity.General_FrameRate = exif.get( + 'General_FrameRate', + entity.General_FrameRate) + entity.General_FrameCount = exif.get( + 'General_FrameCount', + entity.General_FrameCount) + entity.General_Encoded_Date = exif.get( + 'General_Encoded_Date', + entity.General_Encoded_Date) + entity.General_File_Modified_Date = exif.get( + 'General_File_Modified_Date', + entity + .General_File_Modified_Date) + entity.General_File_Modified_Date_Local = exif.get( + 'General_File_Modified_Date_Local', + entity + .General_File_Modified_Date_Local) + entity.General_Tagged_Date = exif.get( + 'General_Tagged_Date', + entity.General_Tagged_Date) + entity.Video_Format = exif.get( + 'Video_Format', + entity.Video_Format) + entity.Video_BitRate = exif.get( + 'Video_BitRate', + entity.Video_BitRate) + entity.Video_InternetMediaType = exif.get( + 'Video_InternetMediaType', + entity.Video_InternetMediaType) + entity.Video_Width = exif.get( + 'Video_Width', + entity.Video_Width) + entity.Video_Height = exif.get( + 'Video_Height', + entity.Video_Height) + entity.Video_FrameRate = exif.get( + 'Video_FrameRate', + entity.Video_FrameRate) + entity.Audio_Format = exif.get( + 'Audio_Format', + entity.Audio_Format) + entity.Audio_SamplingRate = exif.get( + 'Audio_SamplingRate', + entity.Audio_SamplingRate) + entity.Audio_Title = exif.get( + 'Audio_Title', + entity.Audio_Title) + entity.Audio_BitRate = exif.get( + 'Audio_BitRate', + entity.Audio_BitRate) + entity.Audio_Channels = exif.get( + 'Audio_Channels', + entity.Audio_Channels) + entity.Audio_Duration = exif.get( + 'Audio_Duration', + entity.Audio_Duration) + entity.Audio_Encoded_Date = exif.get( + 'Audio_Encoded_Date', + entity.Audio_Encoded_Date) + entity.Audio_Tagged_Date = exif.get( + 'Audio_Tagged_Date', + entity.Audio_Tagged_Date) diff --git a/winnow/storage/lmdb_repr_storage.py b/winnow/storage/lmdb_repr_storage.py new file mode 100644 index 00000000..8c3dac2e --- /dev/null +++ b/winnow/storage/lmdb_repr_storage.py @@ -0,0 +1,154 @@ +import json +import logging +import os +from glob import glob +from os.path import join, relpath, abspath, exists, dirname + +import lmdb +import numpy as np +from dataclasses import dataclass, asdict + +from winnow.storage.repr_key import ReprKey + +# Logger used in representation-storage module +logger = logging.getLogger(__name__) +output_file_handler = logging.FileHandler("processing_error.log") +logger.addHandler(output_file_handler) + +# String encoding used in tag storage +_METADATA_ENCODING = "utf-8" + + +@dataclass +class Metadata: + """Storage entry metadata.""" + hash: str # data file hash + tag: str # pipeline configuration tag + + def dump(self): + """Convert metadata to bytes.""" + return json.dumps(asdict(self)).encode(_METADATA_ENCODING) + + @staticmethod + def load(data: bytes): + """Load metadata from bytes.""" + return Metadata(**json.loads(data.decode(_METADATA_ENCODING))) + + @staticmethod + def from_key(key: ReprKey): + """Read metadata from representation storage key.""" + return Metadata(hash=key.hash, tag=key.tag) + + +class LMDBReprStorage: + """LMDB-based persistent storage for intermediate representations. + + For each dataset file path there is a single entry in the storage. + Each entry is associated with the file hash and configuration tag. + + The purpose of the file hash is to guarantee that whenever original + file content changes the client must be able to detect that to update + the stored representation value. + + Configuration tag purpose is to guarantee that whenever pipeline + configuration is changed the clint code must be able to detect that + to update the stored representation value. + + It is responsibility of client code to make sure that incompatible + pipeline configurations have different key tags. + """ + + def __init__(self, directory, save=np.save, load=np.load, suffix=".npy"): + """Create a new LMDBReprStorage instance. + + Args: + directory (String): A root directory in which representations will be stored. + save (Function): Function to write representation value to the file. + load (Function): Function to load representation value from file. + suffix (String): A common suffix of intermediate representation files. + """ + self.directory = abspath(directory) + self.suffix = suffix + self._save = save + self._load = load + if not exists(self.directory): + logger.info("Creating intermediate representations directory: %s", self.directory) + os.makedirs(self.directory) + self._metadata_storage = lmdb.open(join(self.directory, "store.lmdb")) + + def exists(self, key: ReprKey): + """Check if the representation exists.""" + try: + with self._metadata_storage.begin(write=False) as txn: + metadata = self._read_metadata(key.path, txn) + return exists(self._map(key.path)) and metadata == Metadata.from_key(key) + except Exception as e: + + logger.error(f'Error processing file:{key.path}') + logger.error(e) + return False + + def read(self, key: ReprKey): + """Read file's representation.""" + if not self.exists(key): + raise KeyError(repr(key)) + return self._load(self._map(key.path)) + + def write(self, key: ReprKey, value): + """Write the representation for the given file.""" + with self._metadata_storage.begin(write=True) as txn: + feature_file_path = self._map(key.path) + if not exists(dirname(feature_file_path)): + os.makedirs(dirname(feature_file_path)) + self._save(feature_file_path, value) + self._write_metadata(key, txn) + + def delete(self, path): + """Delete representation for the file.""" + with self._metadata_storage.begin(write=True) as txn: + os.remove(self._map(path)) + self._delete_metadata(path, txn) + + def list(self): + """Iterate over all storage keys.""" + path_pattern = join(self.directory, f"**/*{self.suffix}") + with self._metadata_storage.begin(write=False) as txn: + for repr_file_path in glob(path_pattern, recursive=True): + original_path = self._reverse(repr_file_path) + metadata = self._read_metadata(original_path, txn) + yield ReprKey(path=original_path, hash=metadata.hash, tag=metadata.tag) + + # Private methods + + def _map(self, path): + """Get corresponding file.""" + return join(self.directory, f"{path}{self.suffix}") + + def _reverse(self, mapped_path): + """Restore original path from mapped file path.""" + relative_path = relpath(abspath(mapped_path), self.directory) + if not relative_path.endswith(self.suffix): + raise ValueError(f"Not a reversible path: {mapped_path}") + return relative_path[:-len(self.suffix)] + + @staticmethod + def _read_metadata(path, txn): + """Read metadata for the given video-file.""" + metadata_key = path.encode(_METADATA_ENCODING) + serialized_metadata = txn.get(metadata_key) + if serialized_metadata is None: + return None + return Metadata.load(serialized_metadata) + + @staticmethod + def _write_metadata(key: ReprKey, txn): + """Write metadata for the given video-file.""" + metadata_key = key.path.encode(_METADATA_ENCODING) + metadata = Metadata.from_key(key) + txn.put(metadata_key, metadata.dump()) + + @staticmethod + def _delete_metadata(path, txn): + """Delete metadata for the given video-file.""" + key = path.encode(_METADATA_ENCODING) + txn.delete(key) diff --git a/winnow/storage/path_repr_storage.py b/winnow/storage/path_repr_storage.py deleted file mode 100644 index 9e2136b3..00000000 --- a/winnow/storage/path_repr_storage.py +++ /dev/null @@ -1,79 +0,0 @@ -import logging -import os -from glob import glob -from os.path import join, relpath, abspath, exists, dirname - -import numpy as np - -# Logger used in representation-storage module -logger = logging.getLogger(__name__) - - -class PathReprStorage: - """Metadata-less persistent storage of intermediate representations. - - For each source file (path,hash) there is no more than one - intermediate representation file in the storage directory. - Original path and hash are encoded in the representation file path. - """ - - def __init__(self, directory, save=np.save, load=np.load, suffix="_vgg_features.npy"): - """Create a new ReprStorage instance. - - Args: - directory (String): A root directory in which representations will be stored. - save (Function): Function to write representation value to the file. - load (Function): Function to load representation value from file. - suffix (String): A common suffix of intermediate representation files. - """ - self.directory = abspath(directory) - self.suffix = suffix - self._save = save - self._load = load - if not exists(self.directory): - logger.info("Creating intermediate representations directory: %s", self.directory) - os.makedirs(self.directory) - - def exists(self, path, sha256): - """Check if the file has the representation.""" - return exists(self._map(path, sha256)) - - def read(self, path, sha256): - """Read file's representation.""" - return self._load(self._map(path, sha256)) - - def write(self, path, sha256, value): - """Write the representation for the given file.""" - feature_file_path = self._map(path, sha256) - if not exists(dirname(feature_file_path)): - os.makedirs(dirname(feature_file_path)) - self._save(feature_file_path, value) - - def delete(self, path, sha256): - """Delete representation for the file.""" - os.remove(self._map(path, sha256)) - - def list(self): - """Iterate over all (path,sha256) pairs that already have this representation.""" - path_pattern = join(self.directory, f"**/*{self.suffix}") - for repr_file_path in glob(path_pattern, recursive=True): - yield self._reverse(repr_file_path) - - # Private methods - - def _map(self, path, sha256): - """Get corresponding file.""" - return join(self.directory, f"{path}_{sha256}{self.suffix}") - - def _reverse(self, mapped_path): - """Restore original (path, sha256) from mapped file path.""" - relative_path = relpath(abspath(mapped_path), self.directory) - if not relative_path.endswith(self.suffix): - raise ValueError(f"Not a reversible path: {mapped_path}") - path_hash = relative_path[:-len(self.suffix)] - split_index = path_hash.rfind("_") - if split_index < 0: - raise ValueError(f"Not a reversible path: {mapped_path}") - path = path_hash[:split_index] - sha256 = path_hash[split_index + 1:] - return path, sha256 diff --git a/winnow/storage/repr_key.py b/winnow/storage/repr_key.py new file mode 100644 index 00000000..8e878843 --- /dev/null +++ b/winnow/storage/repr_key.py @@ -0,0 +1,18 @@ +from dataclasses import dataclass + + +@dataclass(frozen=True) +class ReprKey: + """Intermediate representation storage key. + + The purpose of the file hash is to guarantee that whenever original + file content changes the client must be able to detect that to update + the stored representation value. + + Configuration tag purpose is to guarantee that whenever pipeline + configuration is changed the clint code must be able to detect that + to update the stored representation value. + """ + path: str # video file path relative to dataset root folder + hash: str # video file hash + tag: str = None # pipeline configuration tag diff --git a/winnow/storage/repr_storage.py b/winnow/storage/repr_storage.py index 16fdc529..9bd67c6e 100644 --- a/winnow/storage/repr_storage.py +++ b/winnow/storage/repr_storage.py @@ -1,12 +1,12 @@ from os.path import join, abspath -from .path_repr_storage import PathReprStorage +from .lmdb_repr_storage import LMDBReprStorage class ReprStorage: """Persistent storage of various intermediate representations.""" - def __init__(self, directory, storage_factory=PathReprStorage): + def __init__(self, directory, storage_factory=LMDBReprStorage): """Create new storage instance. Args: diff --git a/winnow/storage/repr_utils.py b/winnow/storage/repr_utils.py index 60a56207..b3435433 100644 --- a/winnow/storage/repr_utils.py +++ b/winnow/storage/repr_utils.py @@ -1,5 +1,11 @@ import os from pathlib import Path +import logging + +logger = logging.getLogger() +logger.setLevel(logging.ERROR) +output_file_handler = logging.FileHandler("processing_error.log") +logger.addHandler(output_file_handler) def path_resolver(source_root): @@ -9,7 +15,7 @@ def path_resolver(source_root): source_root (String): Path to the root folder in which all source video files are located. Returns: - Function converting file path to paths relative to the content root. If the argument is outside + function: Function to relativize paths to the dataset root folder. If the argument is outside the content root folder, the returned function will raise ValueError. """ @@ -27,19 +33,30 @@ def storepath(path): def bulk_read(store, select=None): - """Read representations for the given original files (path,hash) pairs. + """Read representations for the given storage keys. - If orig_files is None, all the entries from the provided representation store are loaded. + If select is None, all the entries from the provided representation store are loaded. Args: - store: Representation store for a single representation type (e.g. PathReprStorage) - select: List of original file (path, hash) pairs. + store: Representation store for a single representation type (e.g. LMBDBReprStorage) + select: Iterable over storage keys. Returns: - Dictionary mapping (path,hash) of the original file to the loaded representation value. + Dictionary mapping storage keys to the loaded representation value. """ - path_hash_pairs = select or store.list() - return {(path, sha256): store.read(path, sha256) for path, sha256 in path_hash_pairs} + keys = select or store.list() + + loaded_mapping = dict() + + for key in keys: + + try: + loaded_mapping[key] = store.read(key) + except Exception as e: + logger.error(f'Error processing file:{key}') + logger.error(e) + + return loaded_mapping def bulk_write(store, entries): @@ -47,7 +64,7 @@ def bulk_write(store, entries): Args: store: Representation store for a single representation type (e.g. PathReprStorage managing frame features). - entries: A dictionary mapping multiple files (path, hash) => value. + entries: A dictionary mapping multiple ReprKey => value. """ - for (path, sha256), value in entries.items(): - store.write(path, sha256, value) + for key, value in entries.items(): + store.write(key, value) diff --git a/winnow/storage/sqlite_repr_storage.py b/winnow/storage/sqlite_repr_storage.py index 3a3df983..7d6924ed 100644 --- a/winnow/storage/sqlite_repr_storage.py +++ b/winnow/storage/sqlite_repr_storage.py @@ -3,10 +3,11 @@ from uuid import uuid4 as uuid import numpy as np -from sqlalchemy import Column, String, Integer, UniqueConstraint +from sqlalchemy import Column, String, Integer from sqlalchemy.ext.declarative import declarative_base from db import Database +from winnow.storage.repr_key import ReprKey # Logger used in representation-storage module logger = logging.getLogger(__name__) @@ -19,28 +20,44 @@ class FeatureFile(Base): """A file containing some representation of source video file.""" __tablename__ = 'feature_files' - __table_args__ = (UniqueConstraint('source_path', 'source_sha256', name='_file_uc'),) id = Column(Integer, primary_key=True) - source_path = Column(String) # source video-file path - source_sha256 = Column(String) # source video-file hash + source_path = Column(String, unique=True) # source video-file path relative to dataset root directory + hash = Column(String) # original file hash (e.g. sha256) + tag = Column(String) # metadata tags as JSON feature_file_path = Column(String) # path to the file containing the feature + def to_key(self): + """Convert database record to ReprKey.""" + return ReprKey(path=self.source_path, hash=self.hash, tag=self.tag) + class SQLiteReprStorage: - """SQLite-based persistent storage of a single type of intermediate representation. + """SQLite-based persistent storage for intermediate representations. + + For each dataset file path there is a single entry in the storage. + Each entry is associated with the file hash and configuration tag. + + The purpose of the file hash is to guarantee that whenever original + file content changes the client must be able to detect that to update + the stored representation value. + + Configuration tag purpose is to guarantee that whenever pipeline + configuration is changed the clint code must be able to detect that + to update the stored representation value. - For each type of intermediate representation you should create separate instance of this storage. + It is responsibility of client code to make sure that incompatible + pipeline configurations have different key tags. """ # The storage is implemented as follows: # * All information is stored in some user-specified directory. # * SQLite database file is created at the root of the storage directory. # * For each saved representation there is a file containing the representation value in the storage directory. - # * For each saved representation there is database record matching source file's (path,sha256), feature-type and + # * For each saved representation there is database record matching source file's (path,hash,tag), and # the name of the file containing the corresponding representation value. - def __init__(self, directory, save=np.save, load=np.load, suffix="_vgg_features.npy"): + def __init__(self, directory, save=np.save, load=np.load, suffix=".npy"): """Create new storage instance. Args: @@ -61,66 +78,73 @@ def __init__(self, directory, save=np.save, load=np.load, suffix="_vgg_features. self.database = Database(f"sqlite:///{self.db_file}", base=Base) self.database.create_tables() - def exists(self, path, sha256): - """Check if the file has the representation.""" + def exists(self, key: ReprKey): + """Check if the representation exists.""" with self.database.session_scope() as session: - return self._exists(session, path, sha256) + return self._exists(session, key) - def read(self, path, sha256): + def read(self, key: ReprKey): """Read file's representation.""" with self.database.session_scope() as session: - record = self._record(session, path, sha256).one() + record = self._record(session, key).one_or_none() + if record is None: + raise KeyError(repr(key)) feature_file_path = os.path.join(self.directory, record.feature_file_path) return self._load(feature_file_path) - def write(self, path, sha256, value): + def write(self, key: ReprKey, value): """Write the representation for the given file.""" with self.database.session_scope() as session: - record = self._get_or_create(session, path, sha256) + record = self._get_or_create(session, key.path) + record.hash = key.hash + record.tag = key.tag feature_file_path = os.path.join(self.directory, record.feature_file_path) self._save(feature_file_path, value) - def delete(self, path, sha256): + def delete(self, path): """Delete representation for the file.""" with self.database.session_scope() as session: - record = self._record(session, path, sha256).one() + record = session.query(FeatureFile).filter(FeatureFile.source_path == path).one_or_none() + if record is None: + raise KeyError(path) feature_file_path = os.path.join(self.directory, record.feature_file_path) os.remove(feature_file_path) session.delete(record) def list(self): - """Iterate over all (path,sha256) pairs that already have this representation.""" + """Iterate over all storage keys.""" with self.database.session_scope() as session: for record in session.query(FeatureFile): - yield record.source_path, record.source_sha256 + yield record.to_key() # Private methods @staticmethod - def _record(session, path, sha256): + def _record(session, key: ReprKey): """Shortcut for querying record for the given feature-file.""" return session.query(FeatureFile).filter( - FeatureFile.source_path == path, - FeatureFile.source_sha256 == sha256, + FeatureFile.source_path == key.path, + FeatureFile.hash == key.hash, + FeatureFile.tag == key.tag, ) @staticmethod - def _exists(session, path, sha256): + def _exists(session, key: ReprKey): """Shortcut for checking record presence.""" return session.query(FeatureFile.id).filter( - FeatureFile.source_path == path, - FeatureFile.source_sha256 == sha256, + FeatureFile.source_path == key.path, + FeatureFile.hash == key.hash, + FeatureFile.tag == key.tag, ).scalar() is not None - def _get_or_create(self, session, path, sha256): + def _get_or_create(self, session, path): """Get feature-file record, create one with unique name if not exist.""" - feature_file = SQLiteReprStorage._record(session, path, sha256).first() + feature_file = session.query(FeatureFile).filter(FeatureFile.source_path == path).one_or_none() if feature_file is not None: return feature_file # Create a missing feature-file with unique path. feature_file = FeatureFile( source_path=path, - source_sha256=sha256, feature_file_path=f"{uuid()}{self._suffix}") session.add(feature_file) return feature_file diff --git a/winnow/utils/metadata_extraction.py b/winnow/utils/metadata_extraction.py index e601bd70..2f96161e 100644 --- a/winnow/utils/metadata_extraction.py +++ b/winnow/utils/metadata_extraction.py @@ -1,14 +1,19 @@ import logging +import math +import os import shlex import subprocess from collections import defaultdict -import pandas as pd -from pandas.io.json import json_normalize +from datetime import datetime, timezone + import cv2 -import os import numpy as np +import pandas as pd +from pandas import json_normalize + logger = logging.getLogger(__name__) + def findVideoMetada_mediainfo(pathToInputVideo): """Assumes the mediainfo cli is installed and runs it on the input video @@ -18,41 +23,38 @@ def findVideoMetada_mediainfo(pathToInputVideo): Returns: [String]: Text output from runnning the mediainfo command """ - - cmd = "mediainfo -f --Language=raw {}".format(shlex.quote(pathToInputVideo)) + mi = "mediainfo -f --Language=raw" + cmd = "{} {}".format(mi, shlex.quote(pathToInputVideo)) args = shlex.split(cmd) mediaInfo_output = subprocess.check_output(args).decode('utf-8') - return mediaInfo_output + def process_media_info(info): - lines = info.split('\n') section = None metadata = defaultdict(dict) - + for line in lines: - if ':' not in line: section = line else: - key,val,*_ = line.split(':') - section,key = section.strip(), key.strip() - metadata[section][key] = val - + key, val = line.split(':', maxsplit=1) + section, key = section.strip(), key.strip() + metadata[section][key] = val.lstrip() return dict(metadata) def get_duration(fp): - + cap = cv2.VideoCapture(fp) - fps = max(0,cap.get(cv2.CAP_PROP_FPS)) + fps = max(0, cap.get(cv2.CAP_PROP_FPS)) frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) if fps == 0: fps = 25 - + duration = frame_count/fps - + if duration < 0: count = 0 while cap.isOpened(): @@ -61,26 +63,29 @@ def get_duration(fp): try: if int(count % round(fps)) == 0: count += 1 - except: - pass + except Exception as exc: + logging.error("Problems processing file '%s': %s", fp, exc) + else: break - - duration = count / fps - + duration = count / fps cap.release() - + return duration * 1000 -def normalize_duration(metadata,file_path): - if 'Duration' not in metadata['General'] or int(metadata['General']['Duration']) < 0: +def normalize_duration(metadata, file_path): + + cond1 = 'Duration' not in metadata['General'] + cond2 = int(metadata['General']['Duration']) < 0 + + if (cond1) or (cond2): duration = get_duration(file_path) metadata['General']['Duration'] = duration - + return metadata @@ -97,23 +102,37 @@ def extract_from_list_of_videos(video_files): try: raw_metadata = findVideoMetada_mediainfo(file_path) metadata = process_media_info(raw_metadata) - metadata = normalize_duration(metadata,file_path) + metadata = normalize_duration(metadata, file_path) video_metadata.append(metadata) except Exception as exc: - print("Problems processing file '%s': %s", file_path, exc) - logging.error("Problems processing file '%s': %s", file_path, exc) - video_metadata.append({"General":{"FileName":os.path.basename(file_path)}}) + + logging.info("Problems processing file '%s': %s", file_path, exc) + video_metadata.append( + { + "General": { + "FileName": os.path.basename(file_path) + } + } + ) return video_metadata + def convert_to_df(video_metadata): df = json_normalize(video_metadata) - df.columns = [x.strip().replace('.','_').replace('(s)','s') for x in df.columns] + df.columns = [ + x.strip() + .replace('.', '_') + .replace('(s)', 's') for x in df.columns + ] return df -COLUMNS_OF_INTEREST = ['General_FileName', + +# Columns of interest +CI = [ + 'General_FileName', 'General_FileExtension', 'General_Format_Commercial', 'General_FileSize', @@ -141,8 +160,8 @@ def convert_to_df(video_metadata): 'Audio_Encoded_Date', 'Audio_Tagged_Date'] - -NUMERICAL_COLS_OF_INTEREST = [ +# Numerical columns of interest +NCI = [ 'General_FileSize', 'General_Duration', 'General_OverallBitRate', @@ -157,22 +176,90 @@ def convert_to_df(video_metadata): 'Audio_Channels', 'Audio_Duration'] +# Date column of interest +DCI = [ + 'General_Encoded_Date', + 'General_Tagged_Date', + 'General_File_Modified_Date', + 'General_File_Modified_Date_Local', + 'Audio_Encoded_Date', + 'Audio_Tagged_Date'] + +# Exif date format +_EXIF_DATE_FORMAT = "%Y-%m-%d %H:%M:%S" + + +def parse_timezone(str_value): + if str_value.startswith("UTC"): + return timezone.utc, str_value[3:].lstrip() + return None, str_value + + +def parse_date(raw_value): + try: + # After being processed by pandas.json_normalize + # the metadata may contain NaNs in place of missing + # values. See examples in pandas.json_normalize: + # https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.json_normalize.html + if raw_value is None or isinstance(raw_value, float) and math.isnan(raw_value): + return None + time_zone, date_time = parse_timezone(raw_value) + return datetime.strptime(date_time, _EXIF_DATE_FORMAT).replace(tzinfo=time_zone) + except ValueError: + logger.error(f"Cannot parse date: {raw_value}") + return None + + +def parse_date_series(series): + # pandas.Series heuristically determines type of + # the underlying data and tries to represent a + # missing values according to that data time. + # In case of datetime the missing values are + # represented by pandas.NaT which is not compatible + # with SQLAlchemy framework. To fix that we + # have to explicitly transform NaTs to Nones. + # See https://pandas.pydata.org/pandas-docs/stable/user_guide/missing_data.html#datetimes + parsed = series.apply(parse_date) + return parsed.astype(object).where(pd.notnull(parsed), other=None) def parse_and_filter_metadata_df(metadata_df): - - GROUP_COLUMNS_OF_INTEREST = [x for x in COLUMNS_OF_INTEREST if x in metadata_df.columns] - GROUP_NUMERICAL_COLS_OF_INTEREST = [x for x in NUMERICAL_COLS_OF_INTEREST if x in metadata_df.columns] - GROUP_STRING_COLS_OF_INTEREST = [x for x in GROUP_COLUMNS_OF_INTEREST if x not in GROUP_NUMERICAL_COLS_OF_INTEREST] - - filtered = metadata_df.loc[:,GROUP_COLUMNS_OF_INTEREST] + all_columns = [ + column_name for column_name in CI + if column_name in metadata_df.columns + ] + numeric_columns = [ + column_name for column_name in NCI + if column_name in metadata_df.columns + ] + date_columns = [ + column_name for column_name in DCI + if column_name in metadata_df.columns + ] + string_columns = [ + column_name for column_name in all_columns + if column_name not in numeric_columns and column_name not in date_columns + ] + + filtered = metadata_df.loc[:, all_columns] # Parsing numerical fields - filtered.loc[:,GROUP_NUMERICAL_COLS_OF_INTEREST] = filtered.loc[:,GROUP_NUMERICAL_COLS_OF_INTEREST].apply(lambda x: pd.to_numeric(x,errors='coerce')) - filtered.loc[:,GROUP_STRING_COLS_OF_INTEREST] = filtered.loc[:,GROUP_STRING_COLS_OF_INTEREST].fillna('N/A').apply(lambda x:x.str.strip()) - - return filtered - - - + filtered.loc[:, numeric_columns] = ( + filtered.loc[:, numeric_columns] + .apply(lambda x: pd.to_numeric(x, errors='coerce')) + ) + + # Parsing date fields + filtered.loc[:, date_columns] = ( + filtered.loc[:, date_columns] + .apply(parse_date_series) + ) + + filtered.loc[:, string_columns] = ( + filtered + .loc[:, string_columns] + .fillna('N/A') + .apply(lambda x: x.str.strip()) + ) + return filtered diff --git a/winnow/utils/scene_detection.py b/winnow/utils/scene_detection.py index af50c188..64186053 100644 --- a/winnow/utils/scene_detection.py +++ b/winnow/utils/scene_detection.py @@ -13,58 +13,62 @@ def cosine_series(arr): if i < len(arr)-1: a = arr[i] b = arr[i+1] - dist = cosine(a,b) + dist = cosine(a, b) output.append(dist) return np.array(output) - -def visualize_frames(fp,diffs=None): + +def visualize_frames(fp, diffs=None): video = np.load(fp) if diffs is not None: - frames_idx = (diffs > np.quantile(diffs,.90)) & (diffs > 0.05) + frames_idx = (diffs > np.quantile(diffs, .90)) & (diffs > 0.05) sample_frames = video[frames_idx] else: - sample_frames = video[0::1,:,:,:] + sample_frames = video[0::1, :, :, :] plot = sum(frames_idx) >= 3 - + if plot: - - plt.figure(figsize=(10,10)) + + plt.figure(figsize=(10, 10)) plt.imshow(np.hstack(sample_frames)) plt.show() - plt.figure(figsize=(5,5)) - plt.plot(list(range(len(diffs))),diffs) - plt.plot(list(range(len(diffs))),diffs*frames_idx,'bo') + plt.figure(figsize=(5, 5)) + plt.plot(list(range(len(diffs))), diffs) + plt.plot(list(range(len(diffs))), diffs*frames_idx, 'bo') plt.show() - - + + def naive_diff(arr): diffs = np.diff(arr) - sdiffs = np.absolute(np.sum(diffs,axis=1))**24 - return np.insert(sdiffs,0,[1]) - -def visualize_features(fp,diff_function=cosine_series): - nfp = fp.replace('frames','features') + sdiffs = np.absolute(np.sum(diffs, axis=1))**24 + return np.insert(sdiffs, 0, [1]) + + +def visualize_features(fp, diff_function=cosine_series): + nfp = fp.replace('frames', 'features') feats = np.load(nfp) sdiffs = diff_function(feats) return sdiffs + def visualize_vid(fp): sdiffs = visualize_features(fp) - visualize_frames(fp,diffs=sdiffs) + visualize_frames(fp, diffs=sdiffs) + def get_duration(scenes): - return [y-x for x,y in scenes] + return [y-x for x, y in scenes] def seconds_to_time(list_of_durations): - start = 0 + results = [] - for i,n in enumerate(list_of_durations): + for i, n in enumerate(list_of_durations): + n = int(n) - + if i == 0: start_time = datetime.timedelta(seconds=0) end_time = datetime.timedelta(seconds=n) @@ -72,7 +76,7 @@ def seconds_to_time(list_of_durations): start_time = end_time end_time = start_time + datetime.timedelta(seconds=n) - results.append((str(start_time),str(end_time))) + results.append((str(start_time), str(end_time))) return results @@ -87,7 +91,8 @@ class SceneExtractionResults: # List of original files sha256 hash digests video_sha256: List[str] = None - # List of lists containing duration (in seconds) of each scene where List i corresponds to filtered_video[i] + # List of lists containing duration (in seconds) of each scene where List + # i corresponds to filtered_video[i] scene_duration_seconds: List[List[int]] = None # List of list of scene timestamps (start, end) @@ -107,49 +112,62 @@ class SceneExtractionResults: def extract_scenes(frame_features_dict, minimum_duration=10): - """Extracts scenes from a list of files - + """ + + Extracts scenes from a list of files + Args: - frame_features_dict (dict): A dictionary mapping original file (path,hash) to its frame-level features. - + frame_features_dict (dict): A dictionary mapping original file + (path,hash) to its frame-level features. + Keyword Args: - minimum_duration (int): Minimum duration of video in seconds. (default: {10}) - + minimum_duration (int): Minimum duration of video in seconds. + (default: {10}) + Returns: - SceneExtractionResults: Data structure containing complete scene extraction results. + SceneExtractionResults: Data structure containing complete scene + extraction results. """ # Filter videos by duration - filtered_dict = {key: feature for key, feature in frame_features_dict.items() + filtered_dict = {key: feature + for key, feature in frame_features_dict.items() if feature.shape[0] > minimum_duration} # Unpack names, hashes and features as separate lists + assert len(filtered_dict) > 0, 'Frame level features not found.' keys, features = zip(*filtered_dict.items()) - paths, hashes = zip(*keys) + paths = [key.path for key in keys] + hashes = [key.hash for key in keys] raw_scenes = [cosine_series(frame_features) for frame_features in features] - scene_ident = [((diffs > np.quantile(diffs,.90)) & (diffs > 0.05)) for diffs in raw_scenes] + scene_ident = [((diffs > np.quantile(diffs, .90)) & + (diffs > 0.05)) for diffs in raw_scenes] video_scenes = [] for sid in scene_ident: idxs = np.array(list(range(len(sid))))[sid] scenes = [] - for z,i in enumerate(idxs): + for z, i in enumerate(idxs): start = i if z == (len(idxs) - 1): end = len(sid) - 1 else: end = idxs[z + 1] - scenes.append([start,end]) + scenes.append([start, end]) video_scenes.append(scenes) results = SceneExtractionResults() results.video_filename = paths results.video_sha256 = hashes results.scene_duration_seconds = [get_duration(x) for x in video_scenes] - results.scenes_timestamp = [seconds_to_time(d) for d in results.scene_duration_seconds] + results.scenes_timestamp = [seconds_to_time(d) + for d in results.scene_duration_seconds] results.num_scenes = [len(x) for x in video_scenes] - results.avg_duration_seconds = [np.mean(x) for x in results.scene_duration_seconds] + results.avg_duration_seconds = [np.mean(x) + for x in results.scene_duration_seconds] results.video_duration_seconds = [sid.shape[0] for sid in scene_ident] - results.total_video_duration_timestamp = [datetime.timedelta(seconds=x) for x in results.video_duration_seconds] + results.total_video_duration_timestamp = [ + datetime.timedelta(seconds=x) + for x in results.video_duration_seconds] return results diff --git a/winnow/utils/utils.py b/winnow/utils/utils.py index b8432cfb..88491b53 100644 --- a/winnow/utils/utils.py +++ b/winnow/utils/utils.py @@ -1,63 +1,69 @@ import hashlib +import json import os from glob import glob from pathlib import Path import cv2 import numpy as np +from joblib import load from winnow.config import Config from winnow.config.path import resolve_config_path -from joblib import load +from winnow.storage.repr_key import ReprKey +from winnow.storage.repr_utils import path_resolver DEFAULT_DIRECTORY = os.path.join(os.path.dirname(__file__), "models") -GRAY_ESTIMATION_MODEL = os.path.join(DEFAULT_DIRECTORY,"gb_gray_model.joblib") +GRAY_ESTIMATION_MODEL = os.path.join(DEFAULT_DIRECTORY, "gb_gray_model.joblib") -def create_directory(directories,root_dir,alias): + +def create_directory(directories, root_dir, alias): for r in directories: try: - os.makedirs(os.path.abspath(os.path.join(root_dir,alias,r))) + os.makedirs(os.path.abspath(os.path.join(root_dir, alias, r))) except Exception as e: print(e) -def filter_extensions(files,extensions): + +def filter_extensions(files, extensions): extensions = [f".{ext}" for ext in extensions] return [x for x in files if Path(x).suffix in extensions] - - - -def scan_videos(path,wildcard,extensions = []): +def scan_videos(path, wildcard, extensions=[]): """Scans a directory for a given wildcard Args: path (String): Root path of the directory to be scanned - wildcard (String): Wild card related to the files being searched (eg. ** for video files or **_vgg_features.npy for extracted features files) - extensions (list, optional): Filter files by giving a list of supported file extensions (eg a list of video extensions). Defaults to []. + wildcard (String): Wild card related to the files being searched + (eg. ** for video files or **_vgg_features.npy for extracted features + files) extensions (list, optional): Filter files by giving a list of + supported file extensions (eg a list of video extensions). + Defaults to []. Returns: List[String]: A list of file paths """ - files = glob(os.path.join(path,wildcard),recursive = True) + files = glob(os.path.join(path, wildcard), recursive=True) files = [x for x in files if os.path.isfile(x)] if len(extensions) > 0: - files = filter_extensions(files,extensions) + files = filter_extensions(files, extensions) return files -def scan_videos_from_txt(fp,extensions =[]): + +def scan_videos_from_txt(fp, extensions=[]): files = list(open(fp, encoding="utf-8").read().splitlines()) files = [x for x in files if os.path.isfile(x)] if len(extensions) > 0: - files = filter_extensions(files,extensions) + files = filter_extensions(files, extensions) return files -def create_video_list(videos_to_be_processed,fp): +def create_video_list(videos_to_be_processed, fp): with open(fp, 'w', encoding="utf-8") as f: for item in videos_to_be_processed: @@ -66,25 +72,28 @@ def create_video_list(videos_to_be_processed,fp): return os.path.abspath(fp) - -def filter_results(thr,distances,indices): +def filter_results(thr, distances, indices): results = [] results_distances = [] msk = distances < thr - for i,r in enumerate(msk): - results.append(indices[i,r]) - results_distances.append(distances[i,r]) - return results,results_distances + for i, r in enumerate(msk): + results.append(indices[i, r]) + results_distances.append(distances[i, r]) + return results, results_distances + def uniq(row): - - return ''.join([str(x) for x in sorted([row['query'],row['match']])]) + + return ''.join([str(x) for x in sorted([row['query'], row['match']])]) + def load_gray_estimation_model(): """ - Loads pretrained gray_max estimation model. This model has been trained to estimate the maximum - level of brightness detected within all sampled frames of a video from the video-level features. The model was optimized to - maximize precision instead of recall (so less false positives would be filtered out). + Loads pretrained gray_max estimation model. This model has been trained + to estimate the maximum level of brightness detected within all sampled + frames of a video from the video-level features. The model was optimized + to maximize precision instead of recall (so less false positives would + be filtered out). Returns: Scikit-learn[Estimator]: A pretrained GB model @@ -93,7 +102,6 @@ def load_gray_estimation_model(): return model - def get_gray_max(video_level_features): model = load_gray_estimation_model() @@ -102,51 +110,56 @@ def get_gray_max(video_level_features): return predictions -def get_brightness_estimation(reps,path,sha256): +def get_brightness_estimation(reps, repr_key): - vl_features = np.nan_to_num(reps.video_level.read(path, sha256)) + vl_features = np.nan_to_num(reps.video_level.read(repr_key)) estimates = get_gray_max(vl_features) return estimates - -def extract_additional_info(reps, path, sha256): +def extract_additional_info(reps, repr_key): """ Extract file metadata. Args: - reps (winnow.storage.repr_storage.ReprStorage): Intermediate representation storage. - path: Original file path inside content folder. - sha256: Original file sha256 hash digest. + reps (winnow.storage.repr_storage.ReprStorage): Intermediate + representation storage. + repr_key (winnow.storage.repr_key.ReprKey): Representation + storage key. """ - v = reps.frame_level.read(path, sha256) - frames = reps.frames.read(path, sha256) - grays = np.array([cv2.cvtColor(x,cv2.COLOR_BGR2GRAY) for x in frames]) + v = reps.frame_level.read(repr_key) + frames = reps.frames.read(repr_key) + grays = np.array([cv2.cvtColor(x, cv2.COLOR_BGR2GRAY) for x in frames]) grays = np.array([np.mean(x) for x in grays]) - grays_avg = np.mean(grays,axis=0) - grays_std = np.std(grays,axis=0) + grays_avg = np.mean(grays, axis=0) + grays_std = np.std(grays, axis=0) try: grays_max = np.max(grays) - except: + except Exception: grays_max = 0 shape = v.shape - intra_sum = np.sum(v,axis=1) + intra_sum = np.sum(v, axis=1) mean_act = np.mean(intra_sum) try: - + max_dif = np.max(intra_sum) - np.min(intra_sum) - - except: + + except Exception: max_dif = 0 std_sum = np.std(intra_sum) - - return shape[0],mean_act,std_sum,max_dif,grays_avg,grays_std,grays_max + return (shape[0], + mean_act, + std_sum, + max_dif, + grays_avg, + grays_std, + grays_max) + +def get_hash(fp, buffer_size=65536): -def get_hash(fp,buffer_size = 65536): - sha256 = hashlib.sha256() with open(fp, 'rb') as f: while True: @@ -163,5 +176,43 @@ def resolve_config(config_path=None, frame_sampling=None, save_frames=None): config_path = resolve_config_path(config_path) config = Config.read(config_path) config.proc.frame_sampling = frame_sampling or config.proc.frame_sampling - config.proc.save_frames = (save_frames is None) and config.proc.save_frames or save_frames + cond1 = save_frames is None and config.proc.save_frames + config.proc.save_frames = (cond1 or save_frames) return config + + +def get_config_tag(config): + """Get configuration tag. + + Whenever configuration changes making the intermediate representation + incompatible the tag value will change as well. + """ + + # Configuration attributes that affect representation value + config_attributes = dict( + frame_sampling=config.proc.frame_sampling + ) + + sha256 = hashlib.sha256() + sha256.update(json.dumps(config_attributes).encode("utf-8")) + return sha256.hexdigest()[:40] + + +def reprkey_resolver(config): + """Create a function to get intermediate storage key and tags by the file path. + + Args: + config (winnow.config.Config): Pipeline configuration. + """ + + storepath = path_resolver(config.sources.root) + config_tag = get_config_tag(config) + + def reprkey(path): + """Get intermediate representation storage key.""" + return ReprKey( + path=storepath(path), + hash=get_hash(path), + tag=config_tag) + + return reprkey \ No newline at end of file