/*-
 * ============LICENSE_START=======================================================
 * ONAP CLAMP
 * ================================================================================
 * Copyright (C) 2019 AT&T Intellectual Property. All rights
 *                             reserved.
 * ================================================================================
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and 
 * limitations under the License.
 * ============LICENSE_END============================================
 * ===================================================================
 * 
 */

import React from 'react';
import './index.css';

class ClampLogo extends React.Component {
	render() {
		return (
			<div className="col-md-4 col-lg-4">
				<img className="image_style" alt="" src={require('./images/logo_onap_2017.png')}
				height="50px"
				width="234px"/>
				<div className="navbar-brand logo">
					&nbsp;&nbsp;
					<b>CLAMP</b>
				</div>
			</div>
		);
	}
}

export default ClampLogo;
