├── mybranch.md ├── images └── logo.png ├── Frontend ├── images │ ├── icons8-search-50.png │ └── Screenshot 2024-05-15 185512.png ├── index.html └── styles │ └── searchBox.css ├── script.js ├── index.html ├── LICENSE ├── README.md ├── styles.css ├── landingPage.html ├── page.css ├── page.html ├── CODE_OF_CONDUCT.md └── landingPage.css /mybranch.md: -------------------------------------------------------------------------------- 1 | Hello everyone 2 | This is branch of Ankit Singh Bisht -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RituKumari98/imgIN/HEAD/images/logo.png -------------------------------------------------------------------------------- /Frontend/images/icons8-search-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RituKumari98/imgIN/HEAD/Frontend/images/icons8-search-50.png -------------------------------------------------------------------------------- /Frontend/images/Screenshot 2024-05-15 185512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RituKumari98/imgIN/HEAD/Frontend/images/Screenshot 2024-05-15 185512.png -------------------------------------------------------------------------------- /script.js: -------------------------------------------------------------------------------- 1 | const toggleButton = document.getElementsByClassName('toggle-button')[0] 2 | const navbarLinks = document.getElementsByClassName('navbar-links')[0] 3 | 4 | toggleButton.addEventListener('click', () => { 5 | navbarLinks.classList.toggle('active') 6 | }) -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | imgIN - Image Scraping Tool 7 | 8 | 9 | 10 |
11 | 20 |
21 |
22 |
23 | 24 | 25 |
26 |
27 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 RituKumari98 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # imgIN 2 | 3 | 4 |

About imgIN

5 |

imgIN is a cutting-edge web tool designed to simplify the process of image scraping. With its intuitive interface and powerful functionality, imgIN revolutionizes the way users gather images from the web. Whether you're a designer, researcher, or simply someone who appreciates visual content, imgIN offers a seamless solution to extract images from various online sources.

6 | 7 |
8 |

Features

9 | 17 |
18 |
19 |

Get Started with imgIN

20 | -------------------------------------------------------------------------------- /Frontend/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /Frontend/styles/searchBox.css: -------------------------------------------------------------------------------- 1 | * { 2 | box-sizing: border-box; 3 | } 4 | 5 | body { 6 | margin: 0; 7 | padding: 0; 8 | } 9 | 10 | .navbar { 11 | display: flex; 12 | position: relative; 13 | justify-content: space-between; 14 | align-items: center; 15 | background-color: #333; 16 | color: white; 17 | } 18 | 19 | .brand-title { 20 | font-size: 1.5rem; 21 | margin: .5rem; 22 | } 23 | 24 | .navbar-links { 25 | height: 100%; 26 | } 27 | 28 | .navbar-links ul { 29 | display: flex; 30 | margin: 0; 31 | padding: 0; 32 | } 33 | 34 | .navbar-links li { 35 | list-style: none; 36 | } 37 | 38 | .navbar-links li a { 39 | display: block; 40 | text-decoration: none; 41 | color: white; 42 | padding: 1rem; 43 | } 44 | 45 | .navbar-links li:hover { 46 | background-color: #555; 47 | } 48 | 49 | .toggle-button { 50 | position: absolute; 51 | top: .75rem; 52 | right: 1rem; 53 | display: none; 54 | flex-direction: column; 55 | justify-content: space-between; 56 | width: 30px; 57 | height: 21px; 58 | } 59 | 60 | .toggle-button .bar { 61 | height: 3px; 62 | width: 100%; 63 | background-color: white; 64 | border-radius: 10px; 65 | } 66 | 67 | .image{ 68 | width: 10rem; 69 | } 70 | 71 | @media (max-width: 800px) { 72 | .navbar { 73 | flex-direction: column; 74 | align-items: flex-start; 75 | } 76 | 77 | .toggle-button { 78 | display: flex; 79 | } 80 | 81 | .navbar-links { 82 | display: none; 83 | width: 100%; 84 | } 85 | 86 | .navbar-links ul { 87 | width: 100%; 88 | flex-direction: column; 89 | } 90 | 91 | .navbar-links ul li { 92 | text-align: center; 93 | } 94 | 95 | .navbar-links ul li a { 96 | padding: .5rem 1rem; 97 | } 98 | 99 | .navbar-links.active { 100 | display: flex; 101 | } 102 | } -------------------------------------------------------------------------------- /styles.css: -------------------------------------------------------------------------------- 1 | body, h1, h2, h3, h4, h5, h6, p, ul { 2 | margin: 0; 3 | padding: 0; 4 | box-sizing: border-box; 5 | } 6 | 7 | body { 8 | font-family: Arial, sans-serif; 9 | line-height: 1.6; 10 | display: flex; 11 | flex-direction: column; 12 | min-height: 100vh; 13 | background-color: #000000; 14 | color: #ffffff; 15 | } 16 | 17 | header { 18 | background-color: #333; 19 | color: #fff; 20 | padding: 10px 0; 21 | } 22 | 23 | nav { 24 | display: flex; 25 | justify-content: space-between; 26 | align-items: center; 27 | width: 80%; 28 | margin: 0 auto; 29 | } 30 | 31 | .nav-links { 32 | list-style: none; 33 | display: flex; 34 | } 35 | 36 | .nav-links li { 37 | margin-left: 20px; 38 | } 39 | 40 | .nav-links a { 41 | color: #fff; 42 | text-decoration: none; 43 | font-size: 16px; 44 | } 45 | 46 | .logo { 47 | font-size: 24px; 48 | font-weight: bold; 49 | font-family: 'Pacifico', cursive; 50 | color: #1e90ff; 51 | } 52 | 53 | main { 54 | flex: 1; 55 | display: flex; 56 | justify-content: center; 57 | align-items: center; 58 | padding: 20px; 59 | background-color: #1a1a1a; 60 | border-radius: 8px; 61 | box-shadow: 0 4px 8px rgba(0, 0, 0, 0.5); 62 | margin: 20px; 63 | } 64 | 65 | .search-container { 66 | display: flex; 67 | justify-content: center; 68 | align-items: center; 69 | } 70 | 71 | .search-bar { 72 | padding: 10px; 73 | font-size: 16px; 74 | width: 300px; 75 | margin-right: 10px; 76 | border: 1px solid #ccc; 77 | border-radius: 4px; 78 | background-color: #fff; 79 | color: #000; 80 | } 81 | 82 | .generate-button { 83 | padding: 10px 20px; 84 | font-size: 16px; 85 | border: none; 86 | background-color: #28a745; 87 | color: #fff; 88 | border-radius: 4px; 89 | cursor: pointer; 90 | } 91 | 92 | .generate-button:hover { 93 | background-color: #218838; 94 | } 95 | 96 | footer { 97 | background-color: #333; 98 | color: #fff; 99 | text-align: center; 100 | padding: 10px 0; 101 | width: 100%; 102 | position: relative; 103 | } -------------------------------------------------------------------------------- /landingPage.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | imgIN - AI image Generator 7 | 8 | 9 | 10 | 11 |
12 | 29 |
30 | 31 |
32 |
33 |

Transforming Ideas into Reality: AI Image Generation at Your Fingertips

34 |
35 | 36 | 37 |
38 |
39 |
40 | 48 | 49 | 58 | 59 | -------------------------------------------------------------------------------- /page.css: -------------------------------------------------------------------------------- 1 | body { 2 | font-family: Arial, sans-serif; 3 | background-color: #f9f9f9; 4 | } 5 | .page{ 6 | position: fixed; 7 | align-items: center; 8 | width:1410px; 9 | } 10 | 11 | .header{ 12 | max-width: 1500px; 13 | height: 60px; 14 | background-color: #808080; 15 | position: relative; 16 | bottom:16px; 17 | right:7px; 18 | } 19 | #imgNI{ 20 | color: #BCFD4C; 21 | position: relative; 22 | top:20px; 23 | } 24 | #home{ 25 | position: relative; 26 | top:20px; 27 | left: 700px; 28 | font-size: large; 29 | } 30 | #contact{ 31 | position: relative; 32 | top:20px; 33 | left: 880px; 34 | font-size: large; 35 | } 36 | #about{ 37 | position: relative; 38 | top:20px; 39 | left: 910px; 40 | font-size: large; 41 | } 42 | #help{ 43 | position: relative; 44 | top:20px; 45 | left: 980px; 46 | font-size: large; 47 | } 48 | 49 | 50 | .mainbody{ 51 | position: relative; 52 | bottom: 18px; 53 | right:7px; 54 | max-width: 1520px; 55 | height: 580px; 56 | background-color: #A0AECD; 57 | } 58 | .container { 59 | 60 | position:absolute; 61 | top: 40%; 62 | left: 30%; 63 | max-width: 800px; 64 | margin: 0 auto; 65 | padding: 20px; 66 | background-color: #ffffff; 67 | border-radius: 8px; 68 | box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 69 | } 70 | 71 | 72 | .image-gallery { 73 | display: flex; 74 | flex-wrap: wrap; 75 | gap: 20px; 76 | } 77 | .image-card { 78 | width: 200px; 79 | border: 1px solid #ddd; 80 | border-radius: 4px; 81 | overflow: hidden; 82 | } 83 | .image-card img { 84 | width: 100%; 85 | height: auto; 86 | } 87 | .download-button { 88 | display: block; 89 | text-align: center; 90 | margin-top: 10px; 91 | } 92 | 93 | footer{ 94 | position: relative; 95 | bottom: 18px; 96 | right:7px; 97 | background-color: rgba(23, 2, 2, 0.982); 98 | height: 100px; 99 | border-width:3px; 100 | border-style: solid; 101 | border-color: rgb(6, 37, 84); 102 | color: aliceblue; 103 | } -------------------------------------------------------------------------------- /page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | AI Image Generator 8 | 9 | 10 | 11 | 12 |
13 |
14 | imgNi.com 15 | contact 16 | home 17 | about 18 | help 19 |
20 |
21 |
22 |
23 |

AI Image Generator

24 |
25 | 26 | 27 | 28 |
29 | 32 |
33 |
34 | 42 | 43 | 44 | 75 | 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, religion, or sexual identity 10 | and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, 13 | diverse, inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our 18 | community include: 19 | 20 | * Demonstrating empathy and kindness toward other people 21 | * Being respectful of differing opinions, viewpoints, and experiences 22 | * Giving and gracefully accepting constructive feedback 23 | * Accepting responsibility and apologizing to those affected by our mistakes, 24 | and learning from the experience 25 | * Focusing on what is best not just for us as individuals, but for the 26 | overall community 27 | 28 | Examples of unacceptable behavior include: 29 | 30 | * The use of sexualized language or imagery, and sexual attention or 31 | advances of any kind 32 | * Trolling, insulting or derogatory comments, and personal or political attacks 33 | * Public or private harassment 34 | * Publishing others' private information, such as a physical or email 35 | address, without their explicit permission 36 | * Other conduct which could reasonably be considered inappropriate in a 37 | professional setting 38 | 39 | ## Enforcement Responsibilities 40 | 41 | Community leaders are responsible for clarifying and enforcing our standards of 42 | acceptable behavior and will take appropriate and fair corrective action in 43 | response to any behavior that they deem inappropriate, threatening, offensive, 44 | or harmful. 45 | 46 | Community leaders have the right and responsibility to remove, edit, or reject 47 | comments, commits, code, wiki edits, issues, and other contributions that are 48 | not aligned to this Code of Conduct, and will communicate reasons for moderation 49 | decisions when appropriate. 50 | 51 | ## Scope 52 | 53 | This Code of Conduct applies within all community spaces, and also applies when 54 | an individual is officially representing the community in public spaces. 55 | Examples of representing our community include using an official e-mail address, 56 | posting via an official social media account, or acting as an appointed 57 | representative at an online or offline event. 58 | 59 | ## Enforcement 60 | 61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 | reported to the community leaders responsible for enforcement at https://chat.whatsapp.com/IurxHlwWNEy5rHDrFPvde0 . 63 | All complaints will be reviewed and investigated promptly and fairly. 64 | 65 | All community leaders are obligated to respect the privacy and security of the 66 | reporter of any incident. 67 | 68 | ## Enforcement Guidelines 69 | 70 | Community leaders will follow these Community Impact Guidelines in determining 71 | the consequences for any action they deem in violation of this Code of Conduct: 72 | 73 | ### 1. Correction 74 | 75 | **Community Impact**: Use of inappropriate language or other behavior deemed 76 | unprofessional or unwelcome in the community. 77 | 78 | **Consequence**: A private, written warning from community leaders, providing 79 | clarity around the nature of the violation and an explanation of why the 80 | behavior was inappropriate. A public apology may be requested. 81 | 82 | ### 2. Warning 83 | 84 | **Community Impact**: A violation through a single incident or series 85 | of actions. 86 | 87 | **Consequence**: A warning with consequences for continued behavior. No 88 | interaction with the people involved, including unsolicited interaction with 89 | those enforcing the Code of Conduct, for a specified period of time. This 90 | includes avoiding interactions in community spaces as well as external channels 91 | like social media. Violating these terms may lead to a temporary or 92 | permanent ban. 93 | 94 | ### 3. Temporary Ban 95 | 96 | **Community Impact**: A serious violation of community standards, including 97 | sustained inappropriate behavior. 98 | 99 | **Consequence**: A temporary ban from any sort of interaction or public 100 | communication with the community for a specified period of time. No public or 101 | private interaction with the people involved, including unsolicited interaction 102 | with those enforcing the Code of Conduct, is allowed during this period. 103 | Violating these terms may lead to a permanent ban. 104 | 105 | ### 4. Permanent Ban 106 | 107 | **Community Impact**: Demonstrating a pattern of violation of community 108 | standards, including sustained inappropriate behavior, harassment of an 109 | individual, or aggression toward or disparagement of classes of individuals. 110 | 111 | **Consequence**: A permanent ban from any sort of public interaction within 112 | the community. 113 | 114 | ## Attribution 115 | 116 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 117 | version 2.0, available at 118 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 119 | 120 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 121 | enforcement ladder](https://github.com/mozilla/diversity). 122 | 123 | [homepage]: https://www.contributor-covenant.org 124 | 125 | For answers to common questions about this code of conduct, see the FAQ at 126 | https://www.contributor-covenant.org/faq. Translations are available at 127 | https://www.contributor-covenant.org/translations. 128 | -------------------------------------------------------------------------------- /landingPage.css: -------------------------------------------------------------------------------- 1 | /* Importing Google font - Fira Sans */ 2 | @import url('https://fonts.googleapis.com/css2?family=Fira+Sans:wght@300;400;500;600;700&display=swap'); 3 | * { 4 | margin: 0; 5 | padding: 0; 6 | box-sizing: border-box; 7 | font-family: 'Fira Sans', sans-serif; 8 | } 9 | 10 | body { 11 | background: #1B1B1D; 12 | } 13 | 14 | header { 15 | position: fixed; 16 | left: 0; 17 | top: 0; 18 | width: 100%; 19 | z-index: 1; 20 | padding: 20px; 21 | } 22 | 23 | .navbar { 24 | margin: 0 auto; 25 | display: flex; 26 | align-items: flex-end; 27 | flex-direction: column; 28 | padding: 14px; 29 | background-color: rgb(72, 70, 70); 30 | border-radius: 10px; 31 | } 32 | 33 | .logo-img{ 34 | height: 47px; 35 | width: 47px; 36 | border-radius: 30%; 37 | margin-right: 10px; 38 | } 39 | 40 | 41 | .navbar .menu-links { 42 | display: flex; 43 | align-items: center; 44 | list-style: none; 45 | gap: 30px; 46 | right: 20px; 47 | } 48 | .footer .menu-links{ 49 | display: flex; 50 | align-items: center; 51 | list-style: none; 52 | gap: 30px; 53 | right: 20px; 54 | } 55 | 56 | .footer .menu-links li a{ 57 | color: #fff; 58 | font-weight: 500; 59 | text-decoration: none; 60 | transition: 0.2s ease; 61 | } 62 | 63 | .navbar .menu-links li a { 64 | color: #fff; 65 | font-weight: 500; 66 | text-decoration: none; 67 | transition: 0.2s ease; 68 | } 69 | 70 | .navbar .menu-links .footer li a:hover { 71 | color: #1dbf73; 72 | } 73 | 74 | .navbar .menu-links .footer a { 75 | border: 1px solid #fff; 76 | padding: 8px 15px; 77 | border-radius: 4px; 78 | } 79 | 80 | .img-generator-sec { 81 | height: 100vh; 82 | background-position: center; 83 | background-size: cover; 84 | position: relative; 85 | display: flex; 86 | padding: 0 20px; 87 | align-items: center; 88 | } 89 | 90 | .img-generator-sec .content { 91 | max-width: 1280px; 92 | margin: 0 auto 40px; 93 | width: 100%; 94 | 95 | 96 | } 97 | 98 | .img-generator-sec .content h1 { 99 | color: #fff; 100 | font-size: 3rem; 101 | max-width: 630px; 102 | line-height: 65px; 103 | } 104 | .navbar .logo{ 105 | position: absolute; 106 | top: 20px; 107 | left: 20px; 108 | display: flex; 109 | gap: 10px; 110 | align-items: center; 111 | color: #1a75eb; 112 | font-size: x-large; 113 | } 114 | .img-generator-sec .search-form { 115 | height: 48px; 116 | display: flex; 117 | max-width: 630px; 118 | margin-top: 30px; 119 | border-radius: 4px; 120 | overflow: hidden; 121 | gap: 10px; 122 | 123 | } 124 | 125 | .img-generator-sec .search-form input { 126 | height: 100%; 127 | width: 100%; 128 | border: none; 129 | outline: none; 130 | padding: 0 15px; 131 | font-size: 1rem; 132 | border-radius: 4px 0 0 4px; 133 | background: #fff; 134 | color: #000; 135 | 136 | } 137 | 138 | .img-generator-sec .search-form button { 139 | height: 100%; 140 | width: 70px; 141 | border: none; 142 | outline: none; 143 | cursor: pointer; 144 | background: #1dbf73; 145 | color: #fff; 146 | border-radius: 0 4px 4px 0; 147 | transition: background 0.2s ease; 148 | 149 | } 150 | 151 | .img-generator-sec .search-form button:hover { 152 | background: #19a463; 153 | } 154 | 155 | .img-generator-sec .tags li a { 156 | text-decoration: none; 157 | color: #fff; 158 | border: 1px solid #fff; 159 | padding: 4px 12px; 160 | border-radius: 50px; 161 | transition: 0.2s ease; 162 | } 163 | 164 | .img-generator-sec .tags li a:hover { 165 | color: #000; 166 | background: #fff; 167 | } 168 | 169 | .navbar #hamburger-btn { 170 | color: #fff; 171 | cursor: pointer; 172 | display: none; 173 | font-size: 1.7rem; 174 | } 175 | 176 | .navbar #close-menu-btn { 177 | position: absolute; 178 | display: none; 179 | color: #000; 180 | top: 20px; 181 | right: 20px; 182 | cursor: pointer; 183 | font-size: 1.7rem; 184 | } 185 | footer{ 186 | margin: 0 auto; 187 | display: flex; 188 | align-items: flex-end; 189 | flex-direction: column; 190 | padding: 14px; 191 | background-color: rgb(72, 70, 70); 192 | border-radius: 10px; 193 | 194 | } 195 | 196 | @media screen and (max-width: 900px) { 197 | header.show-mobile-menu::before { 198 | min-width: 285px; 199 | content: ""; 200 | height: 100%; 201 | width: 100%; 202 | position: fixed; 203 | left: 0; 204 | top: 0; 205 | backdrop-filter: blur(5px); 206 | } 207 | 208 | .navbar .menu-links { 209 | height: 100vh; 210 | max-width: 300px; 211 | width: 100%; 212 | background: #fff; 213 | position: fixed; 214 | left: -300px; 215 | top: 0; 216 | display: block; 217 | padding: 75px 40px 0; 218 | transition: left 0.2s ease; 219 | } 220 | 221 | header.show-mobile-menu .navbar .menu-links { 222 | left: 0; 223 | } 224 | 225 | .navbar .menu-links li { 226 | margin-bottom: 30px; 227 | } 228 | 229 | .navbar .menu-links li a { 230 | color: #000; 231 | font-size: 1.1rem; 232 | } 233 | 234 | .navbar :is(#close-menu-btn, #hamburger-btn) { 235 | display: block; 236 | } 237 | 238 | .img-generator-sec { 239 | background: none; 240 | } 241 | 242 | .img-generator-sec .content { 243 | margin: 0 auto 80px; 244 | } 245 | 246 | .img-generator-sec .content :is(h1, .search-form) { 247 | max-width: 100%; 248 | } 249 | 250 | .img-generator-sec .content h1 { 251 | text-align: center; 252 | font-size: 2.5rem; 253 | line-height: 55px; 254 | } 255 | 256 | .img-generator-sec .search-form { 257 | display: block; 258 | margin-top: 20px; 259 | } 260 | 261 | .img-generator-sec .search-form input { 262 | border-radius: 4px; 263 | } 264 | 265 | .img-generator-sec .search-form button { 266 | margin-top: 10px; 267 | border-radius: 4px; 268 | width: 100%; 269 | font-size: auto; 270 | } 271 | .logo-img{ 272 | height: 57px; 273 | width: 53.94px; 274 | border-radius: 20%; 275 | } 276 | 277 | 278 | } --------------------------------------------------------------------------------