Best JavaScript code snippet using best
aboutpage.js
Source:aboutpage.js
1import React, { useEffect, useState } from "react"2import Navbar from "../components/Navbar"3function getGitQuery(email, login) {4 const t = JSON.stringify({5 query: `6 {7 repository(owner: "kunalJa", name: "461L-Stock-Project") {8 issues {9 totalCount10 }11 object(expression: "master") {12 ... on Commit {13 total: history {14 totalCount15 }16 history (author : {emails: ["${email}"]} ) {17 edges {18 node {19 messageHeadline20 oid21 message22 author {23 name24 email25 date26 }27 }28 }29 totalCount30 }31 }32 }33 }34 user(login: "${login}") {35 avatarUrl36 bio37 issues {38 totalCount39 }40 }41 }`,42 })43 return t44}45function getGitEmails() {46 const t = JSON.stringify({47 query: `48 {49 repository(owner: "kunalJa", name: "461L-Stock-Project") {50 issues {51 totalCount52 }53 collaborators {54 nodes {55 name56 login57 email58 }59 totalCount60 }61 }62 }`,63 })64 return t65}66function sendGitRequest(email, login, info, setInfo) {67 const xhr = new XMLHttpRequest()68 xhr.addEventListener("load", function() {69 const resp = JSON.parse(this.responseText)70 info.content = {71 ...info.content,72 [email]: resp,73 [login]: resp,74 }75 setInfo({76 content: {77 ...info.content,78 [email]: resp,79 [login]: resp,80 },81 })82 })83 xhr.open("POST", "https://api.github.com/graphql")84 xhr.setRequestHeader(85 "Authorization",86 `bearer ${process.env.GATSBY_PERSONAL_ACCESS_TOKEN}`87 )88 xhr.setRequestHeader("Content-Type", "application/json")89 let query = getGitQuery(email, login)90 xhr.send(query)91}92function requestEmails(info, setInfo) {93 const xhr2 = new XMLHttpRequest()94 xhr2.addEventListener("load", function() {95 const resp = JSON.parse(this.responseText)96 for (const node of resp.data.repository.collaborators.nodes) {97 const email = node.email98 const login = node.login99 sendGitRequest(email, login, info, setInfo)100 }101 })102 xhr2.open("POST", "https://api.github.com/graphql")103 xhr2.setRequestHeader(104 "Authorization",105 `bearer ${process.env.GATSBY_PERSONAL_ACCESS_TOKEN}`106 )107 xhr2.setRequestHeader("Content-Type", "application/json")108 let query = getGitEmails()109 xhr2.send(query)110}111const Aboutpage = () => {112 const [info, setInfo] = useState({ content: {} })113 useEffect(() => {114 requestEmails(info, setInfo)115 }, [])116 let commitCounts = null117 let avatars = null118 let bio = null119 let issues = null120 let totalIssues = null121 let totalCommits = null122 console.log(info)123 if (Object.keys(info.content).length) {124 commitCounts = {}125 avatars = {}126 bio = {}127 issues = {}128 for (const key of Object.keys(info.content)) {129 commitCounts[key] =130 info.content[key].data.repository.object.history.totalCount131 avatars[key] = info.content[key].data.user.avatarUrl132 bio[key] = info.content[key].data.user.bio133 issues[key] = info.content[key].data.user.issues.totalCount134 totalIssues = info.content[key].data.repository.issues.totalCount135 totalCommits = info.content[key].data.repository.object.total.totalCount136 }137 }138 const group1 = [139 {140 name: "Kunal Jain",141 bio: bio ? bio["kunaljain@utexas.edu"] : "",142 major: "Major/Track: ECE/Software Engineering",143 responsibilities:144 "Backend development, database management, API management",145 commitCount: commitCounts ? commitCounts["kunaljain@utexas.edu"] : "",146 avatar: avatars ? avatars["kunaljain@utexas.edu"] : "",147 issues: issues ? issues["kunaljain@utexas.edu"] : "",148 },149 {150 name: "Yulei Xu",151 bio: bio ? bio["yuleixu@utexas.edu"] : "",152 major: "Major/Track: ECE/Software Engineering",153 responsibilities:154 "Backend development, database management, API management",155 commitCount: commitCounts ? commitCounts["yuleixu@utexas.edu"] : "",156 avatar: avatars ? avatars["yuleixu@utexas.edu"] : "",157 issues: issues ? issues["yuleixu@utexas.edu"] : "",158 },159 {160 name: "Justin Liu",161 bio: bio ? bio["justin.jac.liu@utexas.edu"] : "",162 major: "Major/Track: ECE/Software Engineering",163 responsibilities:164 "Backend development, database management, API management",165 commitCount: commitCounts166 ? commitCounts["justin.jac.liu@utexas.edu"]167 : "",168 avatar: avatars ? avatars["justin.jac.liu@utexas.edu"] : "",169 issues: issues ? issues["justin.jac.liu@utexas.edu"] : "",170 },171 ]172 const group2 = [173 {174 name: "Naveen Yarlagadda",175 bio: bio ? bio["nyar99@gmail.com"] : "",176 major: "Major/Track: ECE/Software Engineering",177 responsibilities:178 "Backend development, database management, API management",179 commitCount: commitCounts ? commitCounts["nyar99@gmail.com"] : "",180 avatar: avatars ? avatars["nyar99@gmail.com"] : "",181 issues: issues ? issues["nyar99@gmail.com"] : "",182 },183 {184 name: "Balakumaran Balasubramanian",185 bio: bio ? bio["balakumaran55@gmail.com"] : "",186 major: "Major/Track: ECE/Software Engineering",187 responsibilities:188 "Backend development, database management, API management",189 commitCount: commitCounts ? commitCounts["balakumaran55@gmail.com"] : "",190 avatar: avatars ? avatars["balakumaran55@gmail.com"] : "",191 issues: issues ? issues["balakumaran55@gmail.com"] : "",192 },193 {194 name: "Jacob Poston",195 bio: "I am an honest man",196 major: "Major/Track: ECE/Software Engineering",197 responsibilities:198 "Primary responsibilites: Writing, CSS Styling, Frontend Design, Moral Support",199 commitCount: commitCounts ? commitCounts["jacob.poston.6@gmail.com"] : "",200 avatar: avatars ? avatars["jacob.poston.6@gmail.com"] : "",201 issues: issues ? issues["jacob.poston.6@gmail.com"] : "",202 },203 ]204 return (205 <>206 <Navbar />207 <div>208 <h2209 className="home"210 style={{ marginTop: 15, fontWeight: "bold" }}211 align="center"212 >213 {" "}214 About Us{" "}215 </h2>216 </div>217 <br />218 <div className="card-group" style={{ padding: 15 }}>219 {group1.map(person => (220 <PersonCard221 avatar={person.avatar}222 name={person.name}223 bio={person.bio}224 major={person.major}225 responsibilities={person.responsibilities}226 commitCount={person.commitCount}227 issues={person.issues}228 key={person.name}229 />230 ))}231 </div>232 <div className="card-group" style={{ padding: 15 }}>233 {group2.map(person => (234 <PersonCard235 avatar={person.avatar}236 name={person.name}237 bio={person.bio}238 major={person.major}239 responsibilities={person.responsibilities}240 commitCount={person.commitCount}241 issues={person.issues}242 key={person.name}243 />244 ))}245 </div>246 <div>247 <h2 className="home" style={{ marginTop: 15 }} align="center">248 {" "}249 Our Motivation{" "}250 </h2>251 </div>252 <p style={{ marginLeft: 150, marginRight: 150 }} align="left | right">253 The primary goal for developing this website was twofold: a topic out of254 learning interest, and of self interest. For the former, many of us255 found stocks as a fascinating subject, with many broad elements to learn256 from. Data is rich, multiple APIs provide extremely detailed data about257 the subject, and graphical elements to track individual stocks were258 necessary. The tracking website seemed like an interesting challenge259 with real world application. Our application keeps things simple for its260 users. You see exactly all the pertinent information for a casual261 trader, and can stay informed on the ratings and performances of stocks262 based on the opinions of those who know more than you.263 </p>264 <div>265 <h2266 className="home"267 style={{ marginTop: 15, fontWeight: "bold" }}268 align="center"269 >270 {" "}271 Data{" "}272 </h2>273 </div>274 <p style={{ marginLeft: 150, marginRight: 150 }} align="left | right">275 The intention of the application is to serve as a central hub for stocks276 and financial information. We have three models of interest: stocks,277 industries/sectors, and financial news. Users that are interested in278 learning about stocks can do so from a variety of sources. Stocks are279 intrinsically linked with the industries and sectors that they are280 associated with, and we have also created financial news that is sector281 oriented as well. Financial news is useful to users as well, so that282 they can get a general sentiment of how the stock market is performing283 overall. We provide that in a news tab that users can access which will284 contain news information both about the stocks that we serve and about285 the market as a whole.286 <br />287 Our stock information comes from a free API called financial modeling288 prep. This website comes with very rich information about each stock,289 including volume, high, low, close, and start for each day going back290 five years. We only grab some of this information, including name,291 industry, sector, and image for each stock. We also grab all the close292 price data for the last few years in order to create a graph. The news293 information comes from an api called stock news api. It allows us to294 grab news about stocks by tickers, company, or by sector/industry. We295 use these results to associate news objects for both stocks and sectors296 which are stored as well as separate models. The news objects are also297 rich in information. One piece of information that we use from our API298 is a general sentiment of each article. We also grab sector for each299 article, companies associated, and tickers associated. We use this300 information to gauge whether the outlook on specific sectors and301 industries is positive, negative, or neutral.302 </p>303 <div>304 <h2305 className="home"306 style={{ marginTop: 15, fontWeight: "bold" }}307 align="center"308 >309 {" "}310 Tools{" "}311 </h2>312 </div>313 <p style={{ marginLeft: 150, marginRight: 150 }} align="left | right">314 Our website was created on Gatsby, which is a React framework for315 creating static web applications. This works well for our application316 because we only have three models we need to serve. Each instance of our317 model swaps out data, so we simply created templates for our stock page318 and our industry page, which are configured based on the database319 information for whatever stock is being served. We also use GraphQL to320 manipulate and grab our data. For example, the graph on each stock page321 is created in GraphQL using information in the database. The database is322 maintained on MongoDB and populated using a Python script. The Python323 script accesses two separate APIs that work together to synthesize324 instances of three different models which are stored in the database325 under different collections. It is this data that is then manipulated by326 Gatsby to create our webpages.327 </p>328 <div>329 <h2330 className="home"331 style={{ marginTop: 15, fontWeight: "bold" }}332 align="center"333 >334 {" "}335 Team Stats{" "}336 </h2>337 </div>338 <p style={{ fontSize: 20 }} align="center">339 Total Commits: {totalCommits}340 </p>341 <p style={{ fontSize: 20 }} align="center">342 Total Issues: {totalIssues}343 </p>344 <p style={{ fontSize: 20 }} align="center">345 Link to <a href="https://github.com/kunalJa/461L-Stock-Project">Repo</a>346 </p>347 </>348 )349}350const PersonCard = ({351 avatar,352 name,353 bio,354 major,355 responsibilities,356 commitCount,357 issues,358}) => (359 <div className="card text-white bg-dark mb-3">360 <img className="card-img-top" src={avatar} alt="" />361 <div className="card-body">362 <h5 className="card-title">{name}</h5>363 <p className="card-text">{bio}</p>364 <p>{major}</p>365 <p>{responsibilities}</p>366 <p>Commits: {commitCount}</p>367 <p>Open/Closed Issues: {issues}</p>368 </div>369 <div className="card-footer">370 <small className="text-muted"></small>371 </div>372 </div>373)...
github.service.ts
Source:github.service.ts
1import { Injectable } from '@angular/core';2import { HttpClient } from '@angular/common/http';3import { map } from "rxjs/operators";4import { Observable } from "rxjs";5import { GitRepoInfo } from './gitrepoinfo';6import { Issue } from './issues';7@Injectable({8 providedIn: 'root'9})10export class GithubService { 11 constructor(private httpClient: HttpClient) { }12 getUserRepos(): Observable<GitRepoInfo> {13 return this.httpClient.get(`https://api.github.com/repositories/168768624/stats/contributors`).14 pipe(15 map((item: any) => item.map(p => <GitRepoInfo>16 {17 user: p.author.login,18 url: p.author.html_url,19 commits: p.total20 }))); 21 }22 getUserCommits(urlString: string, page: number){23 //var urlString = `https://api.github.com/repositories/168768624/commits?page=` + 0;24 var urlReq = urlString + page; 25 let commits = [];26 let commitCounts: number[] = [0, 0, 0, 0, 0, 0];27 return this.httpClient.get(`${urlReq}`);28 /*29 .subscribe(res => {30 res.map(item => {commits.push(item)});31 if(page < 20) {32 33 var prev = this.getUserCommits(urlString, ++page);34 //prev.map(item => {commits.push(item)});35 // console.log(prev[0]);36 for(let commit of prev) {37 console.log(commit);38 commits.push(commit);39 //res.push(commit);40 }41 }42 console.log(commits.length);43 return res;44 45 //return this.get(`${url}&pageSize=2&page=${page}`);46 });47 */48 /*49 try{50 let i = 0;51 //while(i < 30) {52 console.log(urlString);53 this.httpClient.get(urlString).pipe(54 map((item: any) => item.map(p => <GitRepoInfo>55 {56 user: p.author.login as string,57 url: p.author.url as string,58 commits: '1'59 })) 60 ).subscribe((datas) => {61 console.log(datas.length);62 if(datas.length == 0) {63 64 }65 for(let data of datas) {66 commits.push(data);67 if(data.user === "vivianmnguyen"){68 commitCounts[0]++;69 }70 if(data.user === "KaiboCai"){71 commitCounts[1]++;72 }73 if(data.user === "NFinks"){74 commitCounts[2]++;75 }76 if(data.user === "prilak"){77 commitCounts[3]++;78 }79 if(data.user === "NickPattie"){80 commitCounts[4]++;81 }82 if(data.user === "rkoripalli"){83 commitCounts[5]++;84 }85 let sortedCommits: GitRepoInfo[] = [86 {87 user: 'vivianmnguyen',88 commits: commitCounts[0].toString() 89 },90 {91 user: 'KaiboCai',92 commits: commitCounts[1].toString() 93 },94 {95 user: 'NFinks',96 commits: commitCounts[2].toString() 97 },98 {99 user: 'prilak',100 commits: commitCounts[3].toString() 101 },102 {103 user: 'NickPattie',104 commits: commitCounts[4].toString() 105 },106 {107 user: 'rkoripalli',108 commits: commitCounts[5].toString() 109 }110 ];111 console.log(sortedCommits);112 return sortedCommits;113 }114 });115 i++;116 //}117 }118 catch(e){119 // console.log(commits);120 }121 finally{122 console.log(commits);123 //console.log(commits);124 for(let i of commits) {125 console.log('made it');126 }127 // console.log(commitCounts);128 }*/129 }130 getIssues(): Observable<Issue> {131 return this.httpClient.get(`https://api.github.com/repositories/168768624/issues`).132 pipe(133 map((item: any) => item.map(p => <Issue>134 {135 title: p.title,136 state: p.state,137 user: p.login138 }139 )));140 }...
autosquashing.test.ts
Source:autosquashing.test.ts
1import { flatten } from "lodash";2import { CommitMessage, Ref } from "shared-github-internals/lib/git";3import { getRefCommitsFromGitRepo } from "shared-github-internals/lib/tests/git";4import {5 AutosquashingStep,6 CommitDetails,7 getAutosquashingSteps,8} from "./autosquashing";9import { createGitRepoAndRebase } from "./tests-utils";1011const getCommit = ({12 commitCounts,13 message,14 position,15}: {16 commitCounts: number;17 message: CommitMessage;18 position: number;19}) => ({20 lines: new Array(commitCounts - 1)21 .fill("initial")22 .map((value, index) => (index < position ? String(index) : value)),23 message,24});2526const commitsDetailsToInitialState = ({27 commitsDetails,28 ref,29}: {30 commitsDetails: CommitDetails[];31 ref: Ref;32}) => {33 const commitCounts = commitsDetails.length + 1;34 return {35 initialCommit: getCommit({ commitCounts, message: "initial", position: 0 }),36 refsCommits: {37 [ref]: commitsDetails.map(({ message }, index) =>38 getCommit({ commitCounts, message, position: index + 1 }),39 ),40 },41 };42};4344const autosquashingStepsToCommitMessages = ({45 commitsDetails,46 steps,47}: {48 commitsDetails: CommitDetails[];49 steps: AutosquashingStep[];50}) =>51 flatten(52 steps.map(({ autosquashMessage, shas }) =>53 autosquashMessage === null54 ? shas.map(55 stepSha =>56 // @ts-ignore We know that the commit details will be found.57 commitsDetails.find(({ sha }) => sha === stepSha).message,58 )59 : autosquashMessage,60 ),61 );6263test.each([64 ["nothing to do with", ["a", "fixup! b"]],65 ["simple fixup", ["a", "b", "fixup! a"]],66 ["fixup first commit only", ["a", "fixup! a", "fixup! a"]],67 [68 "simple squash",69 ["a\n\nSome details", "b", "squash! a\n\nSome more details"],70 ],71 [72 "lot of things to do",73 [74 "a\n\nSome details\non two lines",75 "b",76 "fixup! a\n\nSome unnecessary details",77 "c",78 "d",79 "squash! fixup! a\n\nAgain some more details",80 "squash! b",81 "squash! a\n\nLast fix",82 ],83 ],84])(85 "%s",86 // @ts-ignore87 async (tmp, commitMessages: CommitMessage[]) => {88 const ref = "feature";89 const commitsDetails = commitMessages.map(90 (message: CommitMessage, index: number) => ({91 message,92 sha: new Array(7).fill(index).join(""),93 }),94 );95 const directory = await createGitRepoAndRebase({96 initialState: commitsDetailsToInitialState({97 commitsDetails,98 ref,99 }),100 ref,101 });102 const expectedCommits = await getRefCommitsFromGitRepo({103 directory,104 ref,105 });106 const expectedMessages = expectedCommits107 .slice(1)108 .map(({ message }) => message);109 expect({ commitsDetails, expectedMessages }).toMatchSnapshot();110 const steps = getAutosquashingSteps(commitsDetails);111 expect(112 autosquashingStepsToCommitMessages({ commitsDetails, steps }),113 ).toEqual(expectedMessages);114 },
...
Using AI Code Generation
1var BestCommit = require('./bestCommit');2var bestCommit = new BestCommit();3var commits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];4var result = bestCommit.commitCounts(commits);5console.log(result);6var BestCommit = require('./bestCommit');7var bestCommit = new BestCommit();8var commits = [1, 2, 5, 6, 8, 9, 10];9var result = bestCommit.commitCounts(commits);10console.log(result);11var BestCommit = require('./bestCommit');12var bestCommit = new BestCommit();13var commits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];14var result = bestCommit.commitCounts(commits);15console.log(result);16var BestCommit = require('./bestCommit');17var bestCommit = new BestCommit();18var commits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];19var result = bestCommit.commitCounts(commits);20console.log(result);21var BestCommit = require('./bestCommit');22var bestCommit = new BestCommit();23var commits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];24var result = bestCommit.commitCounts(commits);25console.log(result);26var BestCommit = require('./bestCommit');27var bestCommit = new BestCommit();28var commits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];29var result = bestCommit.commitCounts(commits);30console.log(result);31var BestCommit = require('./bestCommit');
Using AI Code Generation
1var BestCommiter = require('./BestCommiter');2var bc = new BestCommiter();3bc.commitCounts();4var BestCommiter = function() {5 this.commitCounts = function() {6 console.log('commitCounts method');7 }8}9module.exports = BestCommiter;
Using AI Code Generation
1var BestRepos = require("./BestRepos.js");2var bestRepos = new BestRepos();3bestRepos.commitCounts(function(commits) {4 console.log(commits);5});6function BestRepos() {7 this.commitCounts = function(callback) {8 var request = require("request");9 var commits = JSON.parse(body);10 var count = commits.length;11 callback(count);12 });13 };14}15module.exports = BestRepos;16var BestRepos = require("./BestRepos.js");17var bestRepos = new BestRepos();18bestRepos.commitCounts(function(commits) {19 console.log(commits);20});21function BestRepos() {22 this.commitCounts = function(callback) {23 var request = require("request");24 var commits = JSON.parse(body);25 var count = commits.length;26 callback(count);27 });28 };29}30module.exports = BestRepos;31var BestRepos = require("./BestRepos.js");32var bestRepos = new BestRepos();33bestRepos.commitCounts(function(commits) {34 console.log(commits);35});36function BestRepos() {37 this.commitCounts = function(callback) {38 var request = require("request");39 var commits = JSON.parse(body);40 var count = commits.length;41 callback(count);42 });43 };44}45module.exports = BestRepos;46var BestRepos = require("./BestRepos.js");47var bestRepos = new BestRepos();48bestRepos.commitCounts(function(commits) {49 console.log(commits);50});
Using AI Code Generation
1var bestCommit = require('./bestCommit.js');2 if (err) {3 console.log(err);4 } else {5 console.log(result);6 }7});8var BestCommit = require('./bestCommit.js');9var bestCommit = new BestCommit();10 if (err) {11 console.log(err);12 } else {13 console.log(result);14 }15});16var BestCommit = require('./bestCommit.js');17var bestCommit = new BestCommit();18 if (err) {19 console.log(err);20 } else {21 console.log(result);22 }23});24var BestCommit = require('./bestCommit.js');25var bestCommit = new BestCommit();26 if (err) {27 console.log(err);28 } else {29 console.log(result);30 }31});32var BestCommit = require('./bestCommit.js');33var bestCommit = new BestCommit();
Using AI Code Generation
1var BestCommit = require('./bestCommit.js');2var bestCommit = new BestCommit();3var commitCounts = bestCommit.commitCounts();4var commitCounts = bestCommit.commitCounts();5var Commit = require('./commit.js');6var commit = new Commit();7var BestCommit = function(){};8BestCommit.prototype.commitCounts = function(){9 var commitCounts = commit.counts();10 return commitCounts;11};12module.exports = BestCommit;13var Commit = function(){};14Commit.prototype.counts = function(){15 var commitCounts = [1,2,3,4];16 return commitCounts;17};18module.exports = Commit;19var module = require('./module.js');20module.doSomething();21module.exports = {22doSomething: function() {23}24}25throw err;26at Function.Module._resolveFilename (module.js:336:15)27at Function.Module._load (module.js:278:25)28at Module.require (module.js:365:17)29at require (module.js:384:17)30at Object. (/home/username/app.js:1:17)31at Module._compile (module.js:460:26)32at Object.Module._extensions..js (module.js:478:10)33at Module.load (module.js:355:32)34at Function.Module._load (module.js:310:12)35at Function.Module.runMain (module.js:501:10)
Using AI Code Generation
1var BestCommit = require('./bestCommit.js');2var bestCommit = new BestCommit();3var bestCommitForFile = bestCommit.commitCounts('test4.js');4console.log(bestCommitForFile);5var BestCommit = require('./bestCommit.js');6var bestCommit = new BestCommit();7var bestCommitForFile = bestCommit.commitCounts('test5.js');8console.log(bestCommitForFile);9var BestCommit = require('./bestCommit.js');10var bestCommit = new BestCommit();11var bestCommitForFile = bestCommit.commitCounts('test6.js');12console.log(bestCommitForFile);13var BestCommit = require('./bestCommit.js');14var bestCommit = new BestCommit();15var bestCommitForFile = bestCommit.commitCounts('test7.js');16console.log(bestCommitForFile);17var BestCommit = require('./bestCommit.js');18var bestCommit = new BestCommit();19var bestCommitForFile = bestCommit.commitCounts('test8.js');20console.log(bestCommitForFile);21var BestCommit = require('./bestCommit.js');22var bestCommit = new BestCommit();23var bestCommitForFile = bestCommit.commitCounts('test9.js');24console.log(bestCommitForFile);25var BestCommit = require('./bestCommit.js');26var bestCommit = new BestCommit();27var bestCommitForFile = bestCommit.commitCounts('test10.js');28console.log(bestCommitForFile);
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!