diff --git a/test-files/cmd/glacial/serial/ServiceChangesetReplacement.sh.off b/test-files/cmd/glacial/serial/ServiceChangesetReplacement.sh.off
new file mode 100755
index 0000000..835def6
--- /dev/null
+++ b/test-files/cmd/glacial/serial/ServiceChangesetReplacement.sh.off
@@ -0,0 +1,331 @@
+#!/bin/bash
+set -e
+
+# This script tests the replacement changeset generation workflow for various geometry types. It is called from the
+# ServiceChangesetReplacement*.sh tests
+#
+# Multiple input formats are tested here. Each time the resultant changeset is written back to an OSM API database regardless of the
+# source format, as that allows for ease of visual inspection of the changes and makes debugging easier.
+#
+# Pay close attention to the modify change counts, as you can end up with output that looks correct but isn't due to ways being deleted and
+# re-created when they should have been modified.
+
+# TODO:
+# - consolidate the three replacement workflows into a single function
+# - can maybe also ditch the single geometry tests, as they may be redundant with the multiple geometry tests (except for the POI test)
+
+TEST_NAME=$1
+echo "test name: " $TEST_NAME
+SOURCE_FILE_1=$2
+echo "source file 1: " $SOURCE_FILE_1
+CROP_AOI=$5
+echo "crop aoi: " $CROP_AOI
+CROP_OPTS="-D crop.bounds=$CROP_AOI"
+if [[ "$CROP_AOI" == "-180,-90,180,90" ]]; then # if a global crop bounds was passed in, then don't crop
+ CROP_OPTS=""
+fi
+SOURCE_FILE_2=$3
+# If only one source file was passed in, we'll perturb it and use the original data for the secondary and the perturbed for the ref.
+if [ "$SOURCE_FILE_2" == "" ]; then
+ SOURCE_FILE_2=$SOURCE_FILE_1
+ if [ "$CROP_OPTS" == "" ]; then
+ REF_CONVERT_OPS="hoot::SetTagValueVisitor;hoot::PertyOp"
+ SEC_CONVERT_OPS="hoot::SetTagValueVisitor"
+ else
+ REF_CONVERT_OPS="hoot::MapCropper;hoot::SetTagValueVisitor;hoot::PertyOp"
+ SEC_CONVERT_OPS="hoot::MapCropper;hoot::SetTagValueVisitor"
+ fi
+ PERTURBING_REF="true"
+else
+ if [ "$CROP_OPTS" == "" ]; then
+ REF_CONVERT_OPS="hoot::SetTagValueVisitor"
+ SEC_CONVERT_OPS="hoot::SetTagValueVisitor"
+ else
+ REF_CONVERT_OPS="hoot::MapCropper;hoot::SetTagValueVisitor"
+ SEC_CONVERT_OPS="hoot::MapCropper;hoot::SetTagValueVisitor"
+ fi
+ PERTURBING_REF="false"
+fi
+echo "source file 2: " $SOURCE_FILE_2
+echo "REF_CONVERT_OPS: " $REF_CONVERT_OPS
+echo "SEC_CONVERT_OPS: " $SEC_CONVERT_OPS
+REPLACEMENT_AOI=$4
+echo "replacement aoi: " $REPLACEMENT_AOI
+FULL_REPLACEMENT=$6
+if [ "$FULL_REPLACEMENT" == "true" ]; then
+ FULL_REPLACEMENT="--full-replacement"
+else
+ FULL_REPLACEMENT=""
+fi
+echo "full replacement: " $FULL_REPLACEMENT
+STRICT_BOUNDS=$7
+if [ "$STRICT_BOUNDS" == "true" ]; then
+ STRICT_BOUNDS="--strict-bounds"
+else
+ STRICT_BOUNDS=""
+fi
+echo "strict bounds: " $STRICT_BOUNDS
+if [ "$8" == "" ]; then
+ GEOMETRY_FILTERS=""
+ TAG_ELEMENT_CRITERIA="hoot::BuildingCriterion;hoot::HighwayCriterion;hoot::PoiCriterion"
+else
+ GEOMETRY_FILTERS=" --geometry-filters "$8
+ TAG_ELEMENT_CRITERIA=$8
+fi
+echo "geometry filters: " $GEOMETRY_FILTERS
+echo "tag element criteria: " $TAG_ELEMENT_CRITERIA
+if [ "$9" == "" ]; then
+ REPLACEMENT_FILTERS=""
+else
+ REPLACEMENT_FILTERS=" --replacement-filters "$9
+fi
+echo "replacement filters: " $REPLACEMENT_FILTERS
+CHAIN_REPLACEMENT_FILTERS=${10}
+if [ "$CHAIN_REPLACEMENT_FILTERS" == "true" ]; then
+ CHAIN_REPLACEMENT_FILTERS="--chain-replacement-filters"
+else
+ CHAIN_REPLACEMENT_FILTERS=""
+fi
+echo "chain replacement filters: " $CHAIN_REPLACEMENT_FILTERS
+if [ "${11}" == "" ]; then
+ REPLACEMENT_FILTER_OPTIONS=""
+else
+ REPLACEMENT_FILTER_OPTIONS=" --replacement-filter-options "${11}
+fi
+echo "replacement filter options: " $REPLACEMENT_FILTER_OPTIONS
+if [ "${12}" == "" ]; then
+ RETAINMENT_FILTERS=""
+else
+ RETAINMENT_FILTERS=" --retainment-filters "${12}
+fi
+echo "retainment filters: " $REPLACEMENT_FILTERS
+CHAIN_RETAINMENT_FILTERS=${13}
+if [ "$CHAIN_RETAINMENT_FILTERS" == "true" ]; then
+ CHAIN_RETAINMENT_FILTERS="--chain-retainment-filters"
+else
+ CHAIN_RETAINMENT_FILTERS=""
+fi
+echo "chain retainment filters: " $CHAIN_RETAINMENT_FILTERS
+if [ "${14}" == "" ]; then
+ RETAINMENT_FILTER_OPTIONS=""
+else
+ RETAINMENT_FILTER_OPTIONS=" --retainment-filter-options "${14}
+fi
+echo "retainment filter options: " $RETAINMENT_FILTER_OPTIONS
+SOURCE_FORMATS=${15}
+echo "source formats: " $SOURCE_FORMATS
+if [ "${16}" == "" ]; then
+ WAY_SNAP_TOLERANCE="0.0"
+else
+ WAY_SNAP_TOLERANCE=${16}
+fi
+echo "way snap tolerance: " $WAY_SNAP_TOLERANCE
+if [ "${17}" == "" ]; then
+ EXISTING_WAY_NODE_TOLERANCE="0.0"
+else
+ EXISTING_WAY_NODE_TOLERANCE=${17}
+fi
+echo "existing way node tolerance: " $EXISTING_WAY_NODE_TOLERANCE
+CUSTOM_TAG_KEY="note"
+CUSTOM_TAG_VAL="Source"
+
+IN_DIR=test-files/cmd/glacial/serial/$TEST_NAME
+OUT_DIR=test-output/cmd/glacial/serial/$TEST_NAME
+rm -rf $OUT_DIR
+mkdir -p $OUT_DIR
+
+source conf/database/DatabaseConfig.sh
+export OSM_API_DB_URL="osmapidb://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME_OSMAPI"
+export OSM_API_DB_AUTH="-h $DB_HOST -p $DB_PORT -U $DB_USER"
+export PGPASSWORD=$DB_PASSWORD_OSMAPI
+REF_DB_INPUT=$OSM_API_DB_URL
+
+GENERAL_OPTS="--warn -C UnifyingAlgorithm.conf -C Testing.conf -D log.class.filter= -D uuid.helper.repeatable=true -D writer.include.debug.tags=true -D reader.add.source.datetime=false -D writer.include.circular.error.tags=false -D debug.maps.write=false"
+DB_OPTS="-D [email protected] -D hootapi.db.writer.create.user=true -D hootapi.db.writer.overwrite.map=true -D changeset.user.id=1"
+PERTY_OPTS="-D random.seed=1 -D perty.systematic.error.x=15 -D perty.systematic.error.y=15 -D perty.ops= "
+CHANGESET_DERIVE_OPTS="-D changeset.user.id=1 -D bounds.output.file=$OUT_DIR/$TEST_NAME-bounds.osm -D snap.unconnected.ways.existing.way.node.tolerance=$EXISTING_WAY_NODE_TOLERANCE -D snap.unconnected.ways.snap.tolerance=$WAY_SNAP_TOLERANCE "
+
+# DB SOURCE WORKFLOW
+
+if [[ $SOURCE_FORMATS == *"db"* ]]; then
+
+ HOOT_DB_URL="hootapidb://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME"
+ SEC_DB_INPUT="$HOOT_DB_URL/$TEST_NAME-sec"
+ CHANGESET_DB=$OUT_DIR/$TEST_NAME-changeset-db.osc.sql
+ CHANGESET_DB_DEBUG=$OUT_DIR/$TEST_NAME-changeset-db.osc
+ OUT_DB=$TEST_NAME-db-replaced.osm
+
+ # DATA PREP
+
+ echo ""
+ if [[ "$CROP_OPTS" == "" ]]; then
+ echo "Writing reference dataset from: $SOURCE_FILE_1 to an osm api db (contains features to be replaced)..."
+ else
+ echo "Cropping the reference dataset from: $SOURCE_FILE_1 to: $CROP_AOI, then writing to an osm api db (contains features to be replaced)..."
+ fi
+ echo ""
+ scripts/database/CleanAndInitializeOsmApiDb.sh
+ hoot convert $GENERAL_OPTS $DB_OPTS $CROP_OPTS $PERTY_OPTS -D debug.maps.filename=$OUT_DIR/data-prep-ref-db.osm -D reader.use.data.source.ids=false -D id.generator=hoot::PositiveIdGenerator -D convert.ops=$REF_CONVERT_OPS -D set.tag.value.visitor.element.criteria=$TAG_ELEMENT_CRITERIA -D set.tag.value.visitor.keys=$CUSTOM_TAG_KEY -D set.tag.value.visitor.values=$CUSTOM_TAG_VAL" 1" $SOURCE_FILE_1 $REF_DB_INPUT
+ # needed for debugging only:
+ #hoot convert $GENERAL_OPTS $DB_OPTS -D debug.maps.filename=$OUT_DIR/data-prep-ref.osm -D reader.use.data.source.ids=true $REF_DB_INPUT $OUT_DIR/ref-original-tmp.osm
+ echo ""
+ if [[ "$CROP_OPTS" == "" ]]; then
+ echo "Writing the secondary dataset from: $SOURCE_FILE_2 to a hoot api db (contains features to replace with)..."
+ else
+ echo "Cropping the secondary dataset from: $SOURCE_FILE_2 to: $CROP_AOI, then writing it to a hoot api db (contains features to replace with)..."
+ fi
+ echo ""
+ hoot convert $GENERAL_OPTS $DB_OPTS $CROP_OPTS -D debug.maps.filename=$OUT_DIR/data-prep-sec-db.osm -D reader.use.data.source.ids=false -D convert.ops=$SEC_CONVERT_OPS -D set.tag.value.visitor.element.criteria=$TAG_ELEMENT_CRITERIA -D set.tag.value.visitor.keys=$CUSTOM_TAG_KEY -D set.tag.value.visitor.values=$CUSTOM_TAG_VAL" 2" $SOURCE_FILE_2 $SEC_DB_INPUT
+ # needed for debugging only:
+ #hoot convert $GENERAL_OPTS $DB_OPTS -D debug.maps.filename=$OUT_DIR/data-prep-sec.osm -D reader.use.data.source.ids=true $SEC_DB_INPUT $OUT_DIR/sec-original-tmp.osm
+
+ # CHANGESET DERIVATION
+
+ echo ""
+ echo "Deriving a changeset between the osm api db and the hoot api db layers over: $REPLACEMENT_AOI, to file: $CHANGESET_DB that replaces features in the reference dataset with those from a secondary dataset..."
+ echo ""
+ hoot changeset-derive-replacement $GENERAL_OPTS $DB_OPTS $CHANGESET_DERIVE_OPTS -D debug.maps.filename=$OUT_DIR/changeset-derive-db.osm $REF_DB_INPUT $SEC_DB_INPUT $REPLACEMENT_AOI $CHANGESET_DB $REF_DB_INPUT $FULL_REPLACEMENT $STRICT_BOUNDS $GEOMETRY_FILTERS $REPLACEMENT_FILTERS $CHAIN_REPLACEMENT_FILTERS $REPLACEMENT_FILTER_OPTIONS --write-bounds
+ # debug only
+ # hoot changeset-derive-replacement $GENERAL_OPTS $DB_OPTS $CHANGESET_DERIVE_OPTS -D debug.maps.filename=$OUT_DIR/changeset-derive-db.osm $REF_DB_INPUT $SEC_DB_INPUT $REPLACEMENT_AOI $CHANGESET_DB_DEBUG $REF_DB_INPUT $FULL_REPLACEMENT $STRICT_BOUNDS $GEOMETRY_FILTERS $REPLACEMENT_FILTERS $CHAIN_REPLACEMENT_FILTERS $REPLACEMENT_FILTER_OPTIONS --write-bounds
+
+ # CHANGESET APPLICATION
+
+ echo ""
+ echo "Applying the changeset: $CHANGESET_DB to the reference data in the osm api db..."
+ echo ""
+ hoot changeset-apply $GENERAL_OPTS $DB_OPTS $CHANGESET_DERIVE_OPTS -D debug.maps.filename=$OUT_DIR/changeset-apply-db.osm $CHANGESET_DB $OSM_API_DB_URL
+ echo ""
+ echo "Reading the entire reference dataset out of the osm api db to: $OUT_DB for verification..."
+ echo ""
+ hoot convert $GENERAL_OPTS $DB_OPTS -D debug.maps.filename=$OUT_DIR/final-write-db.osm $OSM_API_DB_URL $OUT_DIR/$OUT_DB
+ hoot diff $GENERAL_OPTS $IN_DIR/$OUT_DB $OUT_DIR/$OUT_DB
+
+ # CLEANUP
+
+ hoot db-delete-map $HOOT_OPTS $DB_OPTS -D debug.maps.filename=$OUT_DIR/cleanup-db.osm $SEC_DB_INPUT
+
+fi
+
+# XML SOURCE WORKFLOW
+
+if [[ $SOURCE_FORMATS == *"xml"* ]]; then
+
+ if [ "$PERTURBING_REF" == "true" ]; then
+ REF_XML_INPUT=$OUT_DIR/ref-perturbed-original.osm
+ else
+ REF_XML_INPUT=$OUT_DIR/ref-original.osm
+ fi
+ SEC_XML_INPUT=$OUT_DIR/sec-original.osm
+ CHANGESET_XML=$OUT_DIR/$TEST_NAME-changeset-xml.osc.sql
+ CHANGESET_XML_DEBUG=$OUT_DIR/$TEST_NAME-changeset-xml.osc
+ OUT_XML=$TEST_NAME-xml-replaced.osm
+
+ # DATA PREP
+
+ echo ""
+ if [[ "$CROP_OPTS" == "" ]]; then
+ echo "Writing the reference dataset from: $SOURCE_FILE_1 to an osm api db (contains features to be replaced)..."
+ else
+ echo "Cropping the reference dataset from: $SOURCE_FILE_1 to: $CROP_AOI, then writing it to an osm api db (contains features to be replaced)..."
+ fi
+ echo ""
+ scripts/database/CleanAndInitializeOsmApiDb.sh
+ hoot convert $GENERAL_OPTS $DB_OPTS $CROP_OPTS $PERTY_OPTS -D debug.maps.filename=$OUT_DIR/data-prep-ref-xml.osm -D reader.use.data.source.ids=false -D id.generator=hoot::PositiveIdGenerator -D convert.ops=$REF_CONVERT_OPS -D set.tag.value.visitor.element.criteria=$TAG_ELEMENT_CRITERIA -D set.tag.value.visitor.keys=$CUSTOM_TAG_KEY -D set.tag.value.visitor.values=$CUSTOM_TAG_VAL" 1" $SOURCE_FILE_1 $REF_DB_INPUT
+ echo ""
+ echo "Writing the reference dataset from the osm apidb to an xml file: $REF_XML_INPUT (contains features to be replaced)..."
+ echo ""
+ hoot convert $GENERAL_OPTS $DB_OPTS -D debug.maps.filename=$OUT_DIR/data-prep-ref-xml.osm -D reader.use.data.source.ids=true $REF_DB_INPUT $REF_XML_INPUT
+ echo ""
+ if [[ "$CROP_OPTS" == "" ]]; then
+ echo "Writing the secondary dataset from: $SOURCE_FILE_2 to an xml file: $SEC_XML_INPUT (contains features to replace with)..."
+ else
+ echo "Cropping the secondary dataset from: $SOURCE_FILE_2 to: $CROP_AOI, then writing it to an xml file: $SEC_XML_INPUT (contains features to replace with)..."
+ fi
+ echo ""
+ hoot convert $GENERAL_OPTS $CROP_OPTS -D debug.maps.filename=$OUT_DIR/data-prep-sec-xml.osm -D reader.use.data.source.ids=false -D convert.ops=$SEC_CONVERT_OPS -D set.tag.value.visitor.element.criteria=$TAG_ELEMENT_CRITERIA -D set.tag.value.visitor.keys=$CUSTOM_TAG_KEY -D set.tag.value.visitor.values=$CUSTOM_TAG_VAL" 2" $SOURCE_FILE_2 $SEC_XML_INPUT
+
+ # CHANGESET DERIVATION
+
+ echo ""
+ echo "Deriving a changeset between $REF_XML_INPUT and $SEC_XML_INPUT over: $REPLACEMENT_AOI, to file: $CHANGESET_XML that replaces features in the reference dataset with those from a secondary dataset..."
+ echo ""
+ hoot changeset-derive-replacement $GENERAL_OPTS $CHANGESET_DERIVE_OPTS -D debug.maps.filename=$OUT_DIR/changeset-derive-xml.osm $REF_XML_INPUT $SEC_XML_INPUT $REPLACEMENT_AOI $CHANGESET_XML $REF_DB_INPUT $FULL_REPLACEMENT $STRICT_BOUNDS $GEOMETRY_FILTERS $REPLACEMENT_FILTERS $CHAIN_REPLACEMENT_FILTERS $REPLACEMENT_FILTER_OPTIONS --write-bounds
+ # debug only
+ # hoot changeset-derive-replacement $GENERAL_OPTS $CHANGESET_DERIVE_OPTS -D debug.maps.filename=$OUT_DIR/changeset-derive-xml.osm $REF_XML_INPUT $SEC_XML_INPUT $REPLACEMENT_AOI $CHANGESET_XML_DEBUG $REF_DB_INPUT $FULL_REPLACEMENT $STRICT_BOUNDS $GEOMETRY_FILTERS $REPLACEMENT_FILTERS $CHAIN_REPLACEMENT_FILTERS $REPLACEMENT_FILTER_OPTIONS --write-bounds
+
+ # CHANGESET APPLICATION
+
+ echo ""
+ echo "Applying the changeset: $CHANGESET_XML to the reference data in the osm api db..."
+ echo ""
+ hoot changeset-apply $GENERAL_OPTS $DB_OPTS $CHANGESET_DERIVE_OPTS -D debug.maps.filename=$OUT_DIR/changeset-apply-xml.osm $CHANGESET_XML $OSM_API_DB_URL
+ echo ""
+ echo "Reading the entire reference dataset out of the osm api db to: $OUT_XML for verification..."
+ echo ""
+ hoot convert $GENERAL_OPTS $DB_OPTS -D debug.maps.filename=$OUT_DIR/final-write-xml.osm $OSM_API_DB_URL $OUT_DIR/$OUT_XML
+ # Not completely sure what the differences between the xml output and db output are yet, but the output maps look identical.
+ hoot diff $GENERAL_OPTS $IN_DIR/$OUT_XML $OUT_DIR/$OUT_XML
+
+fi
+
+# JSON SOURCE WORKFLOW
+
+if [[ $SOURCE_FORMATS == *"json"* ]]; then
+
+ if [ "$PERTURBING_REF" == "true" ]; then
+ REF_JSON_INPUT=$OUT_DIR/ref-perturbed-original.json
+ else
+ REF_JSON_INPUT=$OUT_DIR/ref-original.json
+ fi
+ SEC_JSON_INPUT=$OUT_DIR/sec-original.json
+ CHANGESET_JSON=$OUT_DIR/$TEST_NAME-changeset-json.osc.sql
+ CHANGESET_JSON_DEBUG=$OUT_DIR/$TEST_NAME-changeset-json.osc
+ OUT_JSON=$TEST_NAME-json-replaced.osm
+
+ # DATA PREP
+
+ echo ""
+ if [[ "$CROP_OPTS" == "" ]]; then
+ echo "Writing the reference dataset from: $SOURCE_FILE_1 to an osm api db (contains features to be replaced)..."
+ else
+ echo "Cropping the reference dataset from: $SOURCE_FILE_1 to: $CROP_AOI, then writing it to an osm api db (contains features to be replaced)..."
+ fi
+ echo ""
+ scripts/database/CleanAndInitializeOsmApiDb.sh
+ hoot convert $GENERAL_OPTS $DB_OPTS $CROP_OPTS $PERTY_OPTS -D debug.maps.filename=$OUT_DIR/data-prep-ref-json.osm -D reader.use.data.source.ids=false -D id.generator=hoot::PositiveIdGenerator -D convert.ops=$REF_CONVERT_OPS -D set.tag.value.visitor.element.criteria=$TAG_ELEMENT_CRITERIA -D set.tag.value.visitor.keys=$CUSTOM_TAG_KEY -D set.tag.value.visitor.values=$CUSTOM_TAG_VAL" 1" $SOURCE_FILE_1 $REF_DB_INPUT
+ echo ""
+ echo "Writing the reference dataset from the osm api db to a json file: $REF_JSON_INPUT (contains features to be replaced)..."
+ echo ""
+ hoot convert $GENERAL_OPTS $DB_OPTS -D debug.maps.filename=$OUT_DIR/data-prep-ref-json.osm -D reader.use.data.source.ids=true $REF_DB_INPUT $REF_JSON_INPUT
+ echo ""
+ if [[ "$CROP_OPTS" == "" ]]; then
+ echo "Writing the secondary dataset from: $SOURCE_FILE_2 to a json file: $SEC_JSON_INPUT (contains features to replace with)..."
+ else
+ echo "Cropping the secondary dataset from: $SOURCE_FILE_2 to: $CROP_AOI, then writing it to a json file: $SEC_JSON_INPUT (contains features to replace with)..."
+ fi
+ echo ""
+ hoot convert $GENERAL_OPTS $CROP_OPTS -D debug.maps.filename=$OUT_DIR/data-prep-sec-json.osm -D reader.use.data.source.ids=false -D convert.ops=$SEC_CONVERT_OPS -D set.tag.value.visitor.element.criteria=$TAG_ELEMENT_CRITERIA -D set.tag.value.visitor.keys=$CUSTOM_TAG_KEY -D set.tag.value.visitor.values=$CUSTOM_TAG_VAL" 2" $SOURCE_FILE_2 $SEC_JSON_INPUT
+
+ # CHANGESET DERIVATION
+
+ echo ""
+ echo "Deriving a changeset between $REF_JSON_INPUT and $SEC_JSON_INPUT over: $REPLACEMENT_AOI, to file: $CHANGESET_JSON that replaces features in the reference dataset with those from a secondary dataset..."
+ echo ""
+ hoot changeset-derive-replacement $GENERAL_OPTS $CHANGESET_DERIVE_OPTS -D debug.maps.filename=$OUT_DIR/changeset-derive-json.osm $REF_JSON_INPUT $SEC_JSON_INPUT $REPLACEMENT_AOI $CHANGESET_JSON $REF_DB_INPUT $FULL_REPLACEMENT $STRICT_BOUNDS $GEOMETRY_FILTERS $REPLACEMENT_FILTERS $CHAIN_REPLACEMENT_FILTERS $REPLACEMENT_FILTER_OPTIONS --write-bounds
+ # debug only
+ # hoot changeset-derive-replacement $GENERAL_OPTS $CHANGESET_DERIVE_OPTS -D debug.maps.filename=$OUT_DIR/changeset-derive-json.osm $REF_JSON_INPUT $SEC_JSON_INPUT $REPLACEMENT_AOI $CHANGESET_JSON_DEBUG $REF_DB_INPUT $FULL_REPLACEMENT $STRICT_BOUNDS $GEOMETRY_FILTERS $REPLACEMENT_FILTERS $CHAIN_REPLACEMENT_FILTERS $REPLACEMENT_FILTER_OPTIONS --write-bounds
+
+ # CHANGESET APPLICATION
+
+ echo ""
+ echo "Applying the changeset: $CHANGESET_JSON to the reference data in the osm api db..."
+ echo ""
+ hoot changeset-apply $GENERAL_OPTS $DB_OPTS $CHANGESET_DERIVE_OPTS -D debug.maps.filename=$OUT_DIR/changeset-apply-json.osm $CHANGESET_JSON $OSM_API_DB_URL
+ echo ""
+ echo "Reading the entire reference dataset out of the osm api db to: $OUT_JSON for verification..."
+ echo ""
+ hoot convert $GENERAL_OPTS $DB_OPTS -D debug.maps.filename=$OUT_DIR/final-write-json.osm $OSM_API_DB_URL $OUT_DIR/$OUT_JSON
+ # json output matches xml output
+ hoot diff $GENERAL_OPTS $IN_DIR/$OUT_XML $OUT_DIR/$OUT_JSON
+
+fi