/*
 * Copyright (c) <INITIAL YEAR, LATEST YEAR MODIFIED> <Initial Company/Contributor>. All rights reserved.
 * Copyright (c) <INITIAL YEAR, LATEST YEAR MODIFIED> <Initial Company/Contributor>. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

// Contributors:
//     <CONTRIBUTOR/COMPANY> - Bug ######: <Description>
package org.eclipse.persistence;

/**
 * <Class Comments>
 *
 * @author <commiter id>
 * @since EclipseLink <target version>
 */
public class Sample {
}
