# install.packages(c("bioacoustics", "tuneR", "seewave", "dplyr", "tidyverse", "lubridate", "tools", "ggplot2", "ggpmisc", "plotly", "stringr", "monitoR", "pbapply", "foreach", "doParallel", "R.utils"), type="binary")
library(bioacoustics)
library(tuneR)
library(seewave)
library(dplyr)
library(tidyverse)
library(lubridate)
library(tools)
library(ggplot2)
library(ggpmisc)
library(plotly)
library(stringr)
library(foreach)
library(doParallel)
library(R.utils)
library(readxl)
library(pbapply)
library(monitoR)
ymd_hms = function(dt) {
lubridate::ymd_hms(dt, tz="Pacific/Auckland")
}
dmy_hms = function(dt) {
lubridate::dmy_hms(dt, tz="Pacific/Auckland")
}
options(stringsAsFactors = FALSE)
files = list.files("data/2019 RFID", pattern = "*.TXT$", recursive = TRUE, full.names=TRUE)
csvs = lapply(files, function(path) {
csv = read.csv(path, header=FALSE, col.names = c("year", "month", "day", "hour","minute_sec", "id", "ext", "int", "msg"))
csv$site = strsplit(strsplit(path, "/")[[1]][4], "_")[[1]][1]
csv
})
rfid = do.call(rbind, csvs)
rm(csvs)
rfid$datetime = paste0(rfid$year, "-", rfid$month, "-", rfid$day, " ", rfid$hour, ":", rfid$minute_sec)
rfid$datetime = ymd_hms(rfid$datetime)
ggplot(rfid, aes(datetime)) +
geom_freqpoly(binwidth = 60 * 60)
html_tag_audio <- function(file, type = c("wav")) {
type <- match.arg(type)
htmltools::tags$h3(
basename(file),
htmltools::tags$audio(
controls = "",
htmltools::tags$source(
src = file,
type = glue::glue("audio/{type}", type = type)
)
)
)
}
files = Sys.glob("./clips/PB*.wav")
PB_wavs = lapply(files, function(f) {
wav = read_audio(f)
wav_length = round(length(wav) / wav@samp.rate, 2)
spectro(wav, main=paste0(basename(f), " ", wav_length, "s"), osc=TRUE)
print(html_tag_audio(f))
data.frame(filename=basename(f), wav_length)
})
PB_wavs = do.call(rbind, PB_wavs)
read_BAR_metadata = function(files) {
df = pblapply(files, function(f) {
bits = strsplit(basename(f), "_")[[1]]
start = ymd_hms(paste(bits[2], bits[3]))
site = strsplit(f, "/")[[1]][4]
try({
wav_header = readWave(f, header=TRUE)
duration = wav_header$samples / wav_header$sample.rate
end = start + duration
return(data.frame(filename = f, base_filename = basename(f), site = site, start = start, end = end, samples = wav_header$samples, sr = wav_header$sample.rate, duration=duration, interval = interval(start, end)))
})
NULL
})
df = do.call(rbind, df)
df
}
if (file.exists("misc/BAR_timespans.csv")) {
df = read.csv("misc/BAR_timespans.csv")
df$start = ymd_hms(df$start)
df$end = ymd_hms(df$end)
df$interval = interval(df$start, df$end)
} else {
files = list.files("data/2019 BAR recordings", pattern = "*.wav$", recursive = TRUE, full.names=TRUE)
df = read_BAR_metadata(files)
write.csv(df, "misc/BAR_timespans.csv", row.names = FALSE)
}
df[c("site", "interval")]
PB_to_check = "PB0023.wav"
site_to_check = "NNK30"
filtered_rfid = filter(rfid, msg == PB_to_check & site == site_to_check)
filtered_df = filter(df, site == site_to_check)
filtered_rfid$corrected_datetime = filtered_rfid$datetime
filtered_rfid$match = lapply(1:nrow(filtered_rfid), function(i) {
dt = filtered_rfid$corrected_datetime[i]
site = filtered_rfid$site[i]
indices = which(dt %within% filtered_df$interval)
if (length(indices) == 0) indices = NA
indices
})
print(paste("There are", nrow(filtered_rfid), PB_to_check, "playbacks, of which", sum(!is.na(filtered_rfid$match)), "have recordings"))
[1] "There are 307 PB0023.wav playbacks, of which 48 have recordings"
# A few randomly
datetimes_to_check = sort(sample(filtered_rfid$corrected_datetime[!is.na(filtered_rfid$match)], 5))
# Ones from the 13th
#datetimes_to_check = filtered_rfid$corrected_datetime[!is.na(filtered_rfid$match) & filtered_rfid$datetime > ymd_hms("2019-11-20 00:00:00") & filtered_rfid$datetime < ymd_hms("2019-11-20 23:59:59")]
#datetimes_to_check = filtered_rfid$corrected_datetime[!is.na(filtered_rfid$match) & filtered_rfid$corrected_datetime %within% interval(ymd_hms("2019-12-13 16:45:00"), ymd_hms("2019-12-13 17:13:00"))]
print(datetimes_to_check)
[1] "2019-12-13 15:04:16 NZDT" "2019-12-13 15:24:06 NZDT" "2019-12-13 16:38:35 NZDT" "2019-12-14 06:20:17 NZDT"
[5] "2019-12-14 06:39:53 NZDT"
#dt = ymd_hms("2019-12-13 16:45:04")
setWavPlayer("play") # OS dependent
checked_clips = lapply(datetimes_to_check, function(dt) {
match = filtered_rfid$match[filtered_rfid$corrected_datetime == dt][[1]]
f = filtered_df$filename[match]
clip_start = time_length(dt - filtered_df$start[match], unit = "seconds")
clip_end = clip_start + 1
print(paste(f, dt, clip_start, clip_end))
wav = read_audio(f, from = clip_start, to = clip_end)
spectro(wav, main=dt, osc=TRUE)
#play(wav)
wav
})
[1] "data/2019 BAR recordings/NNK Kamahi nests/NNK30/NNK30_20191213_STUDY [-39.1072 176.8183]/NNK30_20191213_144041_SunriseToSunset [-39.1072 176.8183].wav 2019-12-13 15:04:16 1415 1416"
[1] "data/2019 BAR recordings/NNK Kamahi nests/NNK30/NNK30_20191213_STUDY [-39.1072 176.8183]/NNK30_20191213_144041_SunriseToSunset [-39.1072 176.8183].wav 2019-12-13 15:24:06 2605 2606"
[1] "data/2019 BAR recordings/NNK Kamahi nests/NNK30/NNK30_20191213_STUDY [-39.1072 176.8183]/NNK30_20191213_144041_SunriseToSunset [-39.1072 176.8183].wav 2019-12-13 16:38:35 7074 7075"
[1] "data/2019 BAR recordings/NNK Kamahi nests/NNK30/NNK30_20191214_STUDY [-39.1072 176.8183]/NNK30_20191214_044000_SunriseToSunset [-39.1072 176.8183].wav 2019-12-14 06:20:17 6017 6018"
[1] "data/2019 BAR recordings/NNK Kamahi nests/NNK30/NNK30_20191214_STUDY [-39.1072 176.8183]/NNK30_20191214_044000_SunriseToSunset [-39.1072 176.8183].wav 2019-12-14 06:39:53 7193 7194"
if (file.exists("misc/approx_offsets.csv")) {
approx_offsets_guide = read.csv("misc/approx_offsets.csv")
} else {
filtered_rfid = rfid[str_extract(rfid$msg, "^.{2}") == "PB",]
approx_offsets = lapply(1:nrow(df), function(i) {
matched_events = filtered_rfid[filtered_rfid$site == df$site[i] & filtered_rfid$datetime %within% df$interval[i],]
if (nrow(matched_events) == 0) {
return(NULL)
}
if (nrow(matched_events) > 10) {
matched_events = sample_n(matched_events, 10)
}
offsets = time_length(matched_events$datetime - df$start[i])
data.frame(filename = df$filename[i], offset = offsets, site = matched_events$site, pb = matched_events$msg, datetime = matched_events$datetime)
})
approx_offsets_guide = do.call(rbind, approx_offsets)
write.csv(approx_offsets, "misc/approx_offsets.csv", row.names = FALSE)
}
annotations = lapply(list.files("misc", "*.txt", full.names=TRUE), function(f) {
if (str_detect(f, "ZOOM")) {
return(NULL)
} else if (str_detect(f, "selections")) {
x = read.table(f, sep="\t", header=TRUE)
x$datetime = ymd_hms(paste(x$Begin.Date, x$Begin.Clock.Time))
x = x[c("Begin.Time..s.", "End.Time..s.", "Individual.ID", "Nest.ID", "datetime")]
} else {
x = read.table(f, col.names = c("Begin.Time..s.", "End.Time..s.", "Individual.ID"))[c(TRUE, FALSE),]
x$Begin.Time..s. = as.numeric(x$Begin.Time..s.)
x$End.Time..s. = as.numeric(x$Begin.Time..s.)
x$Nest.ID = strsplit(basename(f), "_")[[1]][1]
x$datetime = df$start[df$base_filename == str_replace(basename(f), ".txt", ".wav")] + x$Begin.Time..s.
}
x$filename = paste0(str_replace(basename(f), ".Band.Limited.Energy.Detector.selections.txt|.txt", ""), ".wav")
x
})
annotations = do.call(rbind, annotations)
annotations$offset = rep(NA, nrow(annotations))
annotations$Individual.ID[annotations$Individual.ID == "PB0009" | annotations$Individual.ID == "PB009"] = "PB0009zp"
annotations$Nest.ID[annotations$Nest.ID == "NKN31"] = "NNK31"
for (i in 1:nrow(annotations)) {
if (substring(annotations$Individual.ID[i], 0, 2) == "PB") {
filtered_rfid = filter(rfid, annotations$Nest.ID[i] == site & msg == paste0(annotations$Individual.ID[i], ".wav"))
matched_rec_start = df$start[df$site == annotations$Nest.ID[i] & annotations$datetime[i] %within% df$interval]
diffs = time_length(filtered_rfid$datetime - annotations$datetime[i])
min_i = which.min(abs(diffs))
offset = diffs[min_i]
if (length(offset) == 1) {
annotations$offset[i] = offset
}
}
}
approx_offsets = read_excel("misc/approx_offsets.xlsx")
Expecting numeric in E3899 / R3899C5: got 'Wind'Expecting numeric in E3900 / R3900C5: got 'Wind'Expecting numeric in E3909 / R3909C5: got 'Wind'Expecting numeric in E3910 / R3910C5: got 'Wind'Expecting numeric in E3919 / R3919C5: got 'Wind'Expecting numeric in E3920 / R3920C5: got 'Wind'Expecting numeric in E3929 / R3929C5: got 'Wind'Expecting numeric in E3930 / R3930C5: got 'Wind'Expecting numeric in E3939 / R3939C5: got 'Wind'Expecting numeric in E3940 / R3940C5: got 'Wind'Expecting numeric in E3949 / R3949C5: got 'Wind'Expecting numeric in E3950 / R3950C5: got 'Wind'Expecting numeric in E3959 / R3959C5: got 'Wind'Expecting numeric in E3960 / R3960C5: got 'PB didn't play'Expecting numeric in E3969 / R3969C5: got 'PB didn't play'Expecting numeric in E4908 / R4908C5: got 'not found- in next rec'Expecting numeric in E4959 / R4959C5: got 'PB not playing'Expecting numeric in E4988 / R4988C5: got 'PB not playing'Expecting numeric in E4989 / R4989C5: got 'PB not playing'Expecting numeric in E4993 / R4993C5: got 'PB not playing'Expecting numeric in E4996 / R4996C5: got 'PB not playing'Expecting numeric in E4998 / R4998C5: got 'PB not playing'
names(approx_offsets) = c("filename", "guide_start", NA, NA, "Begin.Time..s.", "Nest.ID", "Individual.ID", "datetime", NA)
annotations = within(annotations, rm(End.Time..s.))
approx_offsets$offset = approx_offsets$guide_start - approx_offsets$Begin.Time..s.
approx_offsets$filename = basename(approx_offsets$filename)
approx_offsets$Individual.ID = str_replace(approx_offsets$Individual.ID, ".wav", "")
annotations = rbind(annotations, approx_offsets[names(annotations)])
annotations = na.omit(annotations)
filtered_annotations = filter(annotations, offset > -60 & Nest.ID == "NNS1")
ggplot(data = filtered_annotations, aes(x=Begin.Time..s., y=offset, color=substr(basename(filename), start = 6, stop = 20))) +
geom_point() +
geom_smooth(method = "lm") +
stat_poly_eq(formula = y ~ x,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
labs(color='file datetime')
filtered_annotations = filter(annotations, Nest.ID == "NNBB12")
ggplot(data = filtered_annotations, aes(x=Begin.Time..s., y=offset)) +
geom_point() +
geom_smooth(method = "lm") +
stat_poly_eq(formula = y ~ x,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE)
ggplot(data = annotations, aes(x=Begin.Time..s., y=offset, color=Nest.ID)) +
geom_point() +
geom_smooth(method = "lm") +
stat_poly_eq(formula = y ~ x,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE)
Something is wrong with the RFID chip clock - it’s drifting significantly. More data points will help - let’s autodetect PB in the audio files
monitoR seems too unreliable for this task, unfortunately
The reason for the drift is SD card write speed. BAR logfiles indicate the true time packed, so if we read the BAR logfiles we can determine the true sampling rate, and correct it. In some cases, it’ll be just under 44.1KHz.
files = list.files("data/2019 BAR recordings", pattern = "logfile.*txt$", recursive = TRUE, full.names=TRUE)
sites = sapply(strsplit(files, "/"), "[[", 4)
df$true_length = rep(NA, nrow(df))
for (site in unique(sites)) {
files_for_site = files[site == sites]
lines = unlist(lapply(files_for_site, readLines))
rec = str_subset(lines, "Recording")
dt = dmy_hms(str_extract(rec, "^.{19}"))
rec = rec[order(dt)]
dt = sort(dt)
for (i in 1:(length(rec) - 1)) {
if (str_detect(rec[i], "started") && str_detect(rec[i + 1], "stopped")) {
filtered_df = df[df$site == site,]
diffs = time_length(filtered_df$start - dt[i])
min_i = which.min(abs(diffs))
min_i = which(df$filename == filtered_df$filename[min_i])
df$true_length[min_i] = time_length(dt[i+1] - dt[i])
}
}
}
ggplot(df[df$site != "KAKA Aviary_20191101_20191113_BAR",], aes(x=start, y=true_length - duration, color = site)) +
geom_point() +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10))
The problem with that though, is that sampling rates in wave files are integers - there’s a loss of precision there. It should be possible to multiply a desired second offset by the true sampling rate and slice a wav file that way.
df$true_sr = df$samples / df$true_length
df$true_sr[!is.na(df$true_sr) & df$true_sr > 44000] = 44100
write.csv(df, "misc/BAR_timespans.csv", row.names = FALSE)
ggplot(df[df$duration > 100,], aes(x=true_sr)) +
geom_histogram(binwidth=5)
annotations$corrected_begin = sapply(1:nrow(annotations), function(i) {
true_sr = df$true_sr[str_detect(df$base_filename, fixed(annotations$filename[i]))]
annotations$Begin.Time..s.[i] * 44100 / true_sr
})
annotations$offset = NA
for (i in 1:nrow(annotations)) {
if (substring(annotations$Individual.ID[i], 0, 2) == "PB") {
filtered_rfid = filter(rfid, annotations$Nest.ID[i] == site & msg == paste0(annotations$Individual.ID[i], ".wav"))
matched_rec_start = df$start[str_detect(df$base_filename, fixed(annotations$filename[i]))]
rfid_offset = time_length(filtered_rfid$datetime - matched_rec_start)
diffs = time_length(annotations$corrected_begin[i] - rfid_offset)
min_i = which.min(abs(diffs))
offset = diffs[min_i]
if (length(offset) == 1) {
annotations$offset[i] = offset
}
}
}
filtered_annotations = filter(annotations, Nest.ID == "NNS1" & abs(offset) < 60)
ggplot(data = filtered_annotations, aes(x=corrected_begin, y=offset, color=substr(basename(filename), start = 6, stop = 20))) +
geom_point() +
geom_smooth(method = "lm") +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10)) +
labs(color='file datetime') +
stat_poly_eq(formula = y ~ x,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
ggtitle("Drift per file at NNS1")
ggplot(data = filtered_annotations, aes(x=datetime, y=offset)) +
geom_point() +
geom_smooth(method = "lm") +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10)) +
labs(color='file datetime') +
stat_poly_eq(formula = y ~ x,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
ggtitle("Drift per day at NNS1")
ggplot(data = annotations, aes(x=corrected_begin, y=offset, color=Nest.ID)) +
geom_point() +
geom_smooth(method = "lm") +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10))
filtered_annotations = filter(annotations, Nest.ID == "NNBB12")
ggplot(data = filtered_annotations, aes(x=datetime, y=offset)) +
geom_point() +
geom_smooth(method = "lm") +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10)) +
labs(color='file datetime') +
stat_poly_eq(formula = y ~ x,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
ggtitle("Drift per day at NNBB12")
filtered_annotations = filter(annotations, Nest.ID == "NNK34")
ggplot(data = filtered_annotations, aes(x=datetime, y=offset)) +
geom_point() +
geom_smooth(method = "lm") +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10)) +
labs(color='file datetime') +
stat_poly_eq(formula = y ~ x,
aes(label = paste(..eq.label.., ..rr.label.., sep = "~~~")),
parse = TRUE) +
ggtitle("Drift per day at NNK34")
f = "NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav"
offset = median(annotations$offset[annotations$filename == f], na.rm=TRUE) # offset for this file
matched_df = df[df$base_filename == f,]
matched_event_offsets = time_length(rfid$datetime[rfid$msg == "PB0023.wav" & rfid$datetime %within% matched_df$interval & rfid$site == matched_df$site] - matched_df$start)
for (begin_time in matched_event_offsets) {
sr = matched_df$true_sr
clip_start = round((begin_time + offset) * sr)
clip_end = round(clip_start + (sr * 2))
print(paste(matched_df$filename, matched_df$true_sr, clip_start, clip_end))
wav = readWave(filename = matched_df$filename, from = clip_start, to = clip_end, units="samples")
wav@samp.rate = sr
spectro(wav, main=begin_time, osc=TRUE)
#play(wav)
}
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 18528754 18616403"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 35751704 35839353"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 53193776 53281425"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 71074091 71161740"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 89129703 89217352"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 106527950 106615599"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 144961862 145049511"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 162579231 162666880"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 179714533 179802182"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 197375726 197463375"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 215518987 215606636"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 232566640 232654289"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 270781430 270869079"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 288092029 288179678"
[1] "data/2019 BAR recordings/NNS DOC Station nests/NNS1/NNS1_20191203_STUDY [-39.0986 176.8061]/NNS1_20191203_064040_SunriseToSunset [-39.0986 176.8061].wav 43824.3009169214 305139682 305227331"
Not bad.
unique_rfids = unique(rfid$msg[str_extract(rfid$msg, "^.{2}") == "RF"])
#human_readable_rfids = paste0("bird", 1:length(unique_rfids))
human_readable_rfids = c("alpha", "bravo", "charlie", "delta", "echo", "foxtrot", "golf", "hotel", "india", "juliet", "kilo", "lima", "mike", "november")
human_readable_rfids = setNames(human_readable_rfids, unique_rfids)
unique_rfids = setNames(unique_rfids, human_readable_rfids)
processed_rfid = rfid
mask = str_extract(processed_rfid$msg, "^.{2}") == "RF"
processed_rfid$msg[mask] = human_readable_rfids[processed_rfid$msg[mask]]
ggplot(processed_rfid[mask,], aes(x = datetime, color = msg)) +
geom_freqpoly(binwidth = 60 * 60 * 24) +
ggtitle("RFID detections per day")
if (file.exists("misc/processed_rfid.csv")) {
processed_rfid2 = read.csv("misc/processed_rfid.csv")
processed_rfid2$datetime = ymd_hms(processed_rfid2$datetime)
} else {
time_threshold = 2
LG_threshold = 1
processed_rfid2 = pblapply(1:sum(mask), function(i) {
dt = processed_rfid$datetime[mask][i]
this_site = processed_rfid$site[mask][i]
bird = processed_rfid$msg[mask][i]
LG = filter(processed_rfid, site == this_site & abs(datetime - dt) < time_threshold & msg == "Light Gate Change")
if (nrow(LG) > 2) {
event_type = NULL
ext_g = mean(diff(LG$ext))
int_g = mean(diff(LG$int))
if (ext_g < 0 & int_g > 0) {
event_type = "entry"
} else if (int_g < 0 & ext_g > 0) {
event_type = "exit"
}
if (length(event_type) == 1) {
print(paste(i, bird, event_type, this_site, dt))
return(data.frame(i = i, bird = bird, event_type = event_type, ext_g = ext_g, int_g = int_g, site = this_site, datetime = dt))
}
}
})
processed_rfid2 = do.call(rbind, processed_rfid)
write.csv(processed_rfid2, "misc/processed_rfid.csv", row.names=FALSE)
}
ggplot(processed_rfid2, aes(x = datetime, y = bird, color = event_type)) + geom_point()
ggplot(filter(processed_rfid2, datetime > ymd("2019-12-28") & datetime < ymd("2019-12-29")), aes(x = datetime, y = bird, color = event_type)) + geom_point()
Seems a bit too unreliable - the light gates might be too sensitive. Looks like we’ll have to just slice around RFID passes.
time_threshold = 5
events_to_ignore = c("Power-on Reset", "Low-voltage Detect Reset", "Light Gate Change",
"Watchdog(COP) Reset", "Playback Error! Restarting", "Software Reset"
)
if (file.exists("misc/dts_to_slice_deduplicated.csv")) {
dts_to_slice_deduplicated = read.csv("misc/dts_to_slice_deduplicated.csv")
dts_to_slice_deduplicated$start = ymd_hms(dts_to_slice_deduplicated$start)
dts_to_slice_deduplicated$end = ymd_hms(dts_to_slice_deduplicated$end)
} else {
dts_to_slice = pblapply(1:sum(mask), function(i) {
dt = processed_rfid$datetime[mask][i]
this_site = processed_rfid$site[mask][i]
bird = processed_rfid$msg[mask][i]
this_id = processed_rfid$id[mask][i]
start = dt - time_threshold
end = dt + time_threshold
nearby_events = filter(processed_rfid, id != this_id & site == this_site & abs(time_length(datetime - dt)) < time_threshold & !(msg %in% events_to_ignore))
other_birds = human_readable_rfids[!human_readable_rfids == bird]
if (any(other_birds %in% nearby_events$msg)) {
print(paste(i, "another bird within threshold"))
return(NULL)
}
if (any(str_extract(nearby_events$msg, "^.{2}") == "PB")) {
print(paste(i, "playback within threshold"))
return(NULL)
}
data.frame(i = i, site = this_site, bird = bird, start = start, end = end, interval = interval(start, end))
})
dts_to_slice = do.call(rbind, dts_to_slice)
write.csv(dts_to_slice, "misc/dts_to_slice.csv", row.names = FALSE)
dts_to_slice_deduplicated = dts_to_slice %>% group_by(site, bird) %>% arrange(start) %>%
mutate(indx = c(0, cumsum(as.numeric(lead(start)) >
cummax(as.numeric(end)))[-n()])) %>%
group_by(site, bird, indx) %>%
summarise(start = min(start), end = max(end)) %>%
select(-indx)
dts_to_slice_deduplicated$duration = time_length(dts_to_slice_deduplicated$end - dts_to_slice_deduplicated$start)
write.csv(dts_to_slice_deduplicated, "misc/dts_to_slice_deduplicated.csv", row.names = FALSE)
}
ggplot(dts_to_slice_deduplicated, aes(duration)) + geom_histogram(binwidth = 1)
df$offset = sapply(df$base_filename, function(f) {
median(annotations$offset[paste0(annotations$filename) == f], na.rm = TRUE)
})
invisible(pblapply(1:nrow(dts_to_slice_deduplicated), function(i) {
start = dts_to_slice_deduplicated$start[i]
duration = dts_to_slice_deduplicated$duration[i]
bird = dts_to_slice_deduplicated$bird[i]
site = dts_to_slice_deduplicated$site[i]
formatted_date = format(start, "%Y-%m-%d_%H%M%S_NZDT")
output_filename = paste0("data/2019 BAR recordings - individual bird clips/", bird, "/", site, "_", formatted_date, ".wav")
if (file.exists(output_filename)) {
return(NULL)
}
matched_df = df[df$site == site & start %within% df$interval & !is.na(df$offset) & !is.na(df$true_sr),]
if (nrow(matched_df) == 1) {
sr = matched_df$true_sr
clip_start_s = time_length(start - matched_df$start) + matched_df$offset
clip_start_samples = round(clip_start_s * sr)
clip_end_samples = round(clip_start_samples + (sr * duration))
#print(paste(i, bird, site, start, duration, matched_df$filename, matched_df$true_sr, clip_start_samples, clip_end_samples))
try({
wav = readWave(filename = matched_df$filename, from = clip_start_samples, to = clip_end_samples, units="samples")
wav@samp.rate = sr
if (sr != 44100) {
wav = resamp(wav, g = 44100, output = "Wave")
}
wav@left = round(wav@left)
mkdirs(dirname(output_filename))
writeWave(wav, filename = output_filename, extensible = F)
})
}
}))
| | 0 % ~calculating
|+ | 1 % ~01m 13s
|+ | 2 % ~01m 16s
|++ | 3 % ~01m 10s
|++ | 4 % ~01m 06s
|+++ | 5 % ~01m 10s
|+++ | 6 % ~01m 07s
|++++ | 7 % ~01m 08s
|++++ | 8 % ~01m 06s
|+++++ | 9 % ~01m 04s
|+++++ | 10% ~01m 05s
|++++++ | 11% ~01m 04s
|++++++ | 12% ~01m 05s
|+++++++ | 13% ~01m 03s
|+++++++ | 14% ~01m 02s
|++++++++ | 15% ~01m 02s
|++++++++ | 16% ~01m 01s
|+++++++++ | 17% ~60s
|+++++++++ | 18% ~60s
|++++++++++ | 19% ~59s
|++++++++++ | 20% ~59s
|+++++++++++ | 21% ~58s
|+++++++++++ | 22% ~57s
|++++++++++++ | 23% ~56s
|++++++++++++ | 24% ~56s
|+++++++++++++ | 25% ~55s
|+++++++++++++ | 26% ~54s
|++++++++++++++ | 27% ~53s
|++++++++++++++ | 28% ~52s
|+++++++++++++++ | 29% ~51s
|+++++++++++++++ | 30% ~51s
|++++++++++++++++ | 31% ~50s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|++++++++++++++++ | 32% ~49s
|+++++++++++++++++ | 33% ~50s
|+++++++++++++++++ | 34% ~49s
|++++++++++++++++++ | 35% ~48s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|++++++++++++++++++ | 36% ~47s
|+++++++++++++++++++ | 37% ~47s
|+++++++++++++++++++ | 38% ~46s
|++++++++++++++++++++ | 39% ~45s
|++++++++++++++++++++ | 40% ~45s
|+++++++++++++++++++++ | 41% ~44s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|+++++++++++++++++++++ | 42% ~43s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|++++++++++++++++++++++ | 43% ~43s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|++++++++++++++++++++++ | 44% ~42s
|+++++++++++++++++++++++ | 45% ~41s
|+++++++++++++++++++++++ | 46% ~40s
|++++++++++++++++++++++++ | 47% ~40s
|++++++++++++++++++++++++ | 48% ~39s
|+++++++++++++++++++++++++ | 49% ~38s
|+++++++++++++++++++++++++ | 50% ~37s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|++++++++++++++++++++++++++ | 51% ~36s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|++++++++++++++++++++++++++ | 52% ~36s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|+++++++++++++++++++++++++++ | 53% ~35s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|+++++++++++++++++++++++++++ | 54% ~35s
|++++++++++++++++++++++++++++ | 55% ~34s
|++++++++++++++++++++++++++++ | 56% ~33s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|+++++++++++++++++++++++++++++ | 57% ~32s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|+++++++++++++++++++++++++++++ | 58% ~32s
|++++++++++++++++++++++++++++++ | 59% ~31s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|++++++++++++++++++++++++++++++ | 60% ~30s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|+++++++++++++++++++++++++++++++ | 61% ~29s
|+++++++++++++++++++++++++++++++ | 62% ~29s
|++++++++++++++++++++++++++++++++ | 63% ~28s
|++++++++++++++++++++++++++++++++ | 64% ~27s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|+++++++++++++++++++++++++++++++++ | 65% ~26s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|+++++++++++++++++++++++++++++++++ | 66% ~26s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|++++++++++++++++++++++++++++++++++ | 67% ~25s
|++++++++++++++++++++++++++++++++++ | 68% ~24s
|+++++++++++++++++++++++++++++++++++ | 69% ~23s
|+++++++++++++++++++++++++++++++++++ | 70% ~23s
|++++++++++++++++++++++++++++++++++++ | 71% ~22s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|++++++++++++++++++++++++++++++++++++ | 72% ~21s
|+++++++++++++++++++++++++++++++++++++ | 73% ~20s
|+++++++++++++++++++++++++++++++++++++ | 74% ~20s
|++++++++++++++++++++++++++++++++++++++ | 75% ~19s
|++++++++++++++++++++++++++++++++++++++ | 76% ~18s
|+++++++++++++++++++++++++++++++++++++++ | 77% ~17s
|+++++++++++++++++++++++++++++++++++++++ | 78% ~17s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|++++++++++++++++++++++++++++++++++++++++ | 79% ~16s
|++++++++++++++++++++++++++++++++++++++++ | 80% ~15s
|+++++++++++++++++++++++++++++++++++++++++ | 81% ~14s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|+++++++++++++++++++++++++++++++++++++++++ | 82% ~14s
|++++++++++++++++++++++++++++++++++++++++++ | 83% ~13s
|++++++++++++++++++++++++++++++++++++++++++ | 84% ~12s
|+++++++++++++++++++++++++++++++++++++++++++ | 85% ~11s
|+++++++++++++++++++++++++++++++++++++++++++ | 86% ~11s
|++++++++++++++++++++++++++++++++++++++++++++ | 87% ~10s
|++++++++++++++++++++++++++++++++++++++++++++ | 88% ~09s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|+++++++++++++++++++++++++++++++++++++++++++++ | 89% ~08s
|+++++++++++++++++++++++++++++++++++++++++++++ | 90% ~08s
|++++++++++++++++++++++++++++++++++++++++++++++ | 91% ~07s
|++++++++++++++++++++++++++++++++++++++++++++++ | 92% ~06s
Error in readBin(con, int, n = N, size = bytes, signed = (bytes != 1), :
invalid 'n' argument
|+++++++++++++++++++++++++++++++++++++++++++++++ | 93% ~05s
|+++++++++++++++++++++++++++++++++++++++++++++++ | 94% ~05s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 95% ~04s
|++++++++++++++++++++++++++++++++++++++++++++++++ | 96% ~03s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 97% ~02s
|+++++++++++++++++++++++++++++++++++++++++++++++++ | 98% ~02s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 99% ~01s
|++++++++++++++++++++++++++++++++++++++++++++++++++| 100% elapsed=01m 15s
files = list.files("data/Sound templates", pattern = "*.txt$", full.names=TRUE)
f = files[1]
selection_table = read.table(f, header=TRUE, sep="\t")
freq_lim = c(selection_table$Low.Freq..Hz., selection_table$High.Freq..Hz.)/1000
wave_filename = str_replace(f, ".Table.1.selections.txt", ".wav")
template_id = substr(basename(f), 1, 8)
template_wav = readWave(wave_filename, from = selection_table$Begin.Time..s., to = selection_table$End.Time..s., units="seconds")
template_wav = resamp(template_wav, g = 44100, output = "Wave")
template_duration = length(template_wav@left) / 44100
processed_template_wave_filename = paste0("misc/", basename(wave_filename))
savewav(template_wav, filename = processed_template_wave_filename)
ctemps = makeCorTemplate(processed_template_wave_filename, wl = 300, frq.lim = freq_lim, name = template_id)
Automatic point selection.
Done.
templateCutoff(ctemps) = c(default=.5)
buffer = 0
for (bird in human_readable_rfids) {
files_for_bird = Sys.glob(paste0("data/2019 BAR recordings - individual bird clips/", bird, "/*.wav"))
clips = c()
if (length(files_for_bird) == 0) {
next
}
for (i in 1:length(files_for_bird)) {
f = files_for_bird[i]
cscores = corMatch(f, ctemps, quiet=TRUE)
cdetects = findPeaks(cscores)
detects = getDetections(cdetects)
if (i == 1) {
plot(cdetects)
}
if (nrow(detects) > 1) {
for (j in 1:nrow(detects)) {
start_time = detects$time[j]
clip = readWave(f, from = start_time - buffer, to = start_time + template_duration + buffer, units = "seconds")@left
clips = c(clips, clip)
}
}
}
if (length(clips) > 10) {
wav = Wave(clips, samp.rate = 44100, bit = 16)
output_filename = paste0("data/2019 BAR recordings - individual bird clips/", bird, ".wav")
writeWave(wav, output_filename, extensible = F)
}
}
Done with ZOOM0003
Done
0 to 10.000022675737 seconds
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done
Done with ZOOM0003
Done