function $AdfObjectTransferable$$($objectsForFlavors$$, $dataFlavors$$, $baseObjects$$, $converters$$) {
  this.Init($objectsForFlavors$$, $dataFlavors$$, $baseObjects$$, $converters$$);
}
$goog$exportSymbol$$("AdfObjectTransferable", $AdfObjectTransferable$$);
$AdfObject$$.$createSubclass$($AdfObjectTransferable$$, $AdfTransferable$$);
$AdfObjectTransferable$$.$createSingleObjectTransferable$ = function $$AdfObjectTransferable$$$$createSingleObjectTransferable$$($data$$40$$, $dataFlavor$$1$$) {
  $AdfAssert$$.assert($data$$40$$);
  $AdfAssert$$.$assertPrototypeOrNull$($dataFlavor$$1$$, $AdfDataFlavor$$);
  var $dataFlavors$$1$$;
  $dataFlavor$$1$$ && ($AdfAssert$$.$assertPrototype$($dataFlavor$$1$$, $AdfDataFlavor$$), $dataFlavors$$1$$ = [$dataFlavor$$1$$]);
  return new $AdfObjectTransferable$$([[$data$$40$$]], $dataFlavors$$1$$);
};
$goog$exportSymbol$$("AdfObjectTransferable.createSingleObjectTransferable", $AdfObjectTransferable$$.$createSingleObjectTransferable$);
$AdfObjectTransferable$$.$createMultiObjectTransferable$ = function $$AdfObjectTransferable$$$$createMultiObjectTransferable$$($dataObjects$$, $dataFlavor$$2$$) {
  $AdfAssert$$.$assertArray$($dataObjects$$);
  $AdfAssert$$.$assertPrototype$($dataFlavor$$2$$, $AdfDataFlavor$$);
  return new $AdfObjectTransferable$$([$dataObjects$$], [$dataFlavor$$2$$]);
};
$goog$exportSymbol$$("AdfObjectTransferable.createMultiObjectTransferable", $AdfObjectTransferable$$.$createMultiObjectTransferable$);
$AdfObjectTransferable$$.prototype.Init = function $$AdfObjectTransferable$$$$Init$($objectsForFlavors$$1$$, $dataFlavors$$2$$, $baseObjects$$1$$, $converters$$1$$) {
  $AdfObjectTransferable$$.$superclass$.Init.call(this);
  $AdfAssert$$.$assertArrayOrNull$($objectsForFlavors$$1$$);
  $AdfAssert$$.$assertArrayOrNull$($dataFlavors$$2$$);
  $AdfAssert$$.$assertArrayOrNull$($baseObjects$$1$$);
  $AdfAssert$$.$assertArrayOrNull$($converters$$1$$);
  $AdfAssert$$.assert(null != $objectsForFlavors$$1$$ || null != $baseObjects$$1$$ && null != $converters$$1$$ && null != $dataFlavors$$2$$, "Either the objects for the AdfTransferable have to be specified, or base objects and converters must be specified");
  $AdfAssert$$.assert(!$dataFlavors$$2$$ || $objectsForFlavors$$1$$.length == $dataFlavors$$2$$.length, "data Objects and AdfDataFlavor arrays lengths must be identical:data objects:[" + $objectsForFlavors$$1$$ + "] data flavors:[" + $dataFlavors$$2$$ + "]");
  this.$_baseObjects$ = $baseObjects$$1$$;
  this.$_converters$ = $converters$$1$$;
  this.$_dataFlavors$ = $AdfObjectTransferable$$.$_createDataFlavors$($objectsForFlavors$$1$$, $dataFlavors$$2$$);
  $AdfLogger$$.$LOGGER$.fine("data flavors for:", $objectsForFlavors$$1$$, "\x3d", this.$_dataFlavors$);
  null == $objectsForFlavors$$1$$ && ($objectsForFlavors$$1$$ = []);
  this.$_objectsForFlavors$ = $objectsForFlavors$$1$$;
};
$AdfObject$$.$exportPrototypeSymbol$("AdfObjectTransferable.prototype.Init", {Init:$AdfObjectTransferable$$.prototype.Init});
$AdfObjectTransferable$$.prototype.$getTransferData$ = function $$AdfObjectTransferable$$$$$getTransferData$$($dataFlavor$$3_transferData$$) {
  var $dataObjectIndex$$ = this.$_dataFlavors$[$dataFlavor$$3_transferData$$.$getStringForm$()];
  void 0 === $dataObjectIndex$$ && $dataFlavor$$3_transferData$$ === $AdfDataFlavor$$.$ANY_FLAVOR$ && ($dataObjectIndex$$ = 0);
  if (void 0 != $dataObjectIndex$$) {
    $dataFlavor$$3_transferData$$ = this.$_objectsForFlavors$[$dataObjectIndex$$];
    if (null == $dataFlavor$$3_transferData$$) {
      var $baseObjects$$2$$ = this.$_baseObjects$;
      if (null != $baseObjects$$2$$) {
        var $converter$$ = this.$_converters$[$dataObjectIndex$$], $baseObjectCount$$ = $baseObjects$$2$$.length;
        $dataFlavor$$3_transferData$$ = Array($baseObjectCount$$);
        for (var $i$$45$$ = 0;$i$$45$$ < $baseObjectCount$$;$i$$45$$++) {
          $dataFlavor$$3_transferData$$[$i$$45$$] = $converter$$($baseObjects$$2$$[$i$$45$$]);
        }
        this.$_objectsForFlavors$[$dataObjectIndex$$] = $dataFlavor$$3_transferData$$;
      }
    }
    return $dataFlavor$$3_transferData$$;
  }
};
$AdfObject$$.$exportPrototypeSymbol$("AdfObjectTransferable.prototype.getTransferData", {$getTransferData$:$AdfObjectTransferable$$.prototype.$getTransferData$});
$AdfObjectTransferable$$.prototype.$getTransferDataFlavors$ = function $$AdfObjectTransferable$$$$$getTransferDataFlavors$$() {
  return this.$_dataFlavors$;
};
$AdfObject$$.$exportPrototypeSymbol$("AdfObjectTransferable.prototype.getTransferDataFlavors", {$getTransferDataFlavors$:$AdfObjectTransferable$$.prototype.$getTransferDataFlavors$});
$AdfObjectTransferable$$.prototype.$isDataFlavorSupported$ = function $$AdfObjectTransferable$$$$$isDataFlavorSupported$$($dataFlavor$$4$$) {
  return $dataFlavor$$4$$ === $AdfDataFlavor$$.$ANY_FLAVOR$ ? !0 : $dataFlavor$$4$$.$getStringForm$() in this.$_dataFlavors$;
};
$AdfObject$$.$exportPrototypeSymbol$("AdfObjectTransferable.prototype.isDataFlavorSupported", {$isDataFlavorSupported$:$AdfObjectTransferable$$.prototype.$isDataFlavorSupported$});
$AdfObjectTransferable$$.prototype.$toDebugString$ = function $$AdfObjectTransferable$$$$$toDebugString$$() {
  return $AdfObjectTransferable$$.$superclass$.$toDebugString$.call(this) + "[ dataObjects:" + this.$_objectsForFlavors$ + " dataFlavors:" + this.$_dataFlavors$ + "]";
};
$AdfObject$$.$exportPrototypeSymbol$("AdfObjectTransferable.prototype.toDebugString", {$toDebugString$:$AdfObjectTransferable$$.prototype.$toDebugString$});
$AdfObjectTransferable$$.$_createDataFlavors$ = function $$AdfObjectTransferable$$$$_createDataFlavors$$($objectsForFlavors$$2$$, $dataFlavors$$3$$) {
  for (var $dataObjectCount$$ = $objectsForFlavors$$2$$.length, $associativeFlavors$$ = [], $dataObjectIndex$$1$$ = 0;$dataObjectIndex$$1$$ < $dataObjectCount$$;$dataObjectIndex$$1$$++) {
    var $objectsForFlavor$$ = $objectsForFlavors$$2$$[$dataObjectIndex$$1$$];
    $AdfAssert$$.$assertArray$($objectsForFlavor$$);
    var $currDataFlavor$$ = $dataFlavors$$3$$ ? $dataFlavors$$3$$[$dataObjectIndex$$1$$] : null;
    $currDataFlavor$$ || ($currDataFlavor$$ = $AdfDataFlavor$$.$getObjectFlavor$($objectsForFlavor$$[0]));
    $AdfAssert$$.$assertPrototype$($currDataFlavor$$, $AdfDataFlavor$$);
    $AdfObjectTransferable$$.$_addSuperclassFlavors$($currDataFlavor$$, $associativeFlavors$$, $dataObjectIndex$$1$$);
  }
  return $associativeFlavors$$;
};
$AdfObjectTransferable$$.$_addSuperclassFlavors$ = function $$AdfObjectTransferable$$$$_addSuperclassFlavors$$($baseDataFlavor_objectFlavor$$, $associativeFlavors$$1$$, $dataObjectIndex$$2$$) {
  $AdfObjectTransferable$$.$_addFlavorIfNecessary$($baseDataFlavor_objectFlavor$$, $associativeFlavors$$1$$, $dataObjectIndex$$2$$);
  if ($baseDataFlavor_objectFlavor$$ !== $AdfDataFlavor$$.$ANY_FLAVOR$) {
    var $flavorClass_flavorString$$ = $baseDataFlavor_objectFlavor$$.$getStringForm$(), $currFlavor_prefixString$$ = $AdfDataFlavor$$.$_JSOBJECT_PREFIX_STRING$;
    if (!$flavorClass_flavorString$$.indexOf($currFlavor_prefixString$$)) {
      $baseDataFlavor_objectFlavor$$ = $AdfDataFlavor$$.$OBJECT_FLAVOR$;
      if (($flavorClass_flavorString$$ = window[$flavorClass_flavorString$$.substr($currFlavor_prefixString$$.length)]) && $AdfObject$$.prototype.isPrototypeOf($flavorClass_flavorString$$)) {
        for ($flavorClass_flavorString$$ = $flavorClass_flavorString$$.$superclass$;$flavorClass_flavorString$$;) {
          $currFlavor_prefixString$$ = $AdfDataFlavor$$.$getDataFlavorForClass$($flavorClass_flavorString$$), $AdfObjectTransferable$$.$_addFlavorIfNecessary$($currFlavor_prefixString$$, $associativeFlavors$$1$$, $dataObjectIndex$$2$$), $flavorClass_flavorString$$ = $flavorClass_flavorString$$.$superclass$;
        }
      }
      $AdfObjectTransferable$$.$_addFlavorIfNecessary$($baseDataFlavor_objectFlavor$$, $associativeFlavors$$1$$, $dataObjectIndex$$2$$);
    }
  }
};
$AdfObjectTransferable$$.$_addFlavorIfNecessary$ = function $$AdfObjectTransferable$$$$_addFlavorIfNecessary$$($dataFlavor$$5$$, $associativeFlavors$$2$$, $dataObjectIndex$$3$$) {
  var $flavorString$$1$$ = $dataFlavor$$5$$.$getStringForm$();
  $flavorString$$1$$ in $associativeFlavors$$2$$ || ($associativeFlavors$$2$$.push($dataFlavor$$5$$), $associativeFlavors$$2$$[$flavorString$$1$$] = $dataObjectIndex$$3$$);
};
