paint | Ruby gem for ANSI terminal colors 🎨︎ VERY FAST | Command Line Interface library

 by   janlelis Ruby Version: v2.3.0 License: MIT

kandi X-RAY | paint Summary

kandi X-RAY | paint Summary

paint is a Ruby library typically used in Utilities, Command Line Interface applications. paint has no bugs, it has no vulnerabilities, it has a Permissive License and it has low support. You can download it from GitHub.

Terminal colors/effects get created by ANSI escape sequences. These are strings that look like this: \e[X;X;X;X;X]m where X are integers with some meaning. For example, 0 means reset, 31 means red foreground and 41 stands for red background. When you tell Paint to use one of the eight ANSI base colors as foreground color, it just inserts a number between 30 and 37 into the sequence. The following colors are available:. When combined with the :bright (= :bold) effect, the color in the terminal emulator often differs a little bit, thus it is possible to represent 16 colors. Through special sequences it's also possible to set 256-colors, or even 16777215 colors, instead of only the 8 ANSI ones. However, this is not supported by all terminals. Paint automatically translates given RGB colors to a suitable color of the supported color spectrum. When using the Paint.[] method, Paint wraps the given string between the calculated escape sequence and an reset sequence ("\e[0m"). You can get the raw escape sequence by using the Paint.color method.
Support
    Quality
      Security
        License
          Reuse

            kandi-support Support

              paint has a low active ecosystem.
              It has 349 star(s) with 19 fork(s). There are 12 watchers for this library.
              OutlinedDot
              It had no major release in the last 6 months.
              There are 0 open issues and 18 have been closed. On average issues are closed in 101 days. There are no pull requests.
              It has a neutral sentiment in the developer community.
              The latest version of paint is v2.3.0

            kandi-Quality Quality

              paint has 0 bugs and 0 code smells.

            kandi-Security Security

              paint has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.
              paint code analysis shows 0 unresolved vulnerabilities.
              There are 0 security hotspots that need review.

            kandi-License License

              paint is licensed under the MIT License. This license is Permissive.
              Permissive licenses have the least restrictions, and you can use them in most projects.

            kandi-Reuse Reuse

              paint releases are not available. You will need to build from source code and install.
              Installation instructions, examples and code snippets are available.
              It has 727 lines of code, 19 functions and 14 files.
              It has high code complexity. Code complexity directly impacts maintainability of the code.

            Top functions reviewed by kandi - BETA

            kandi's functional review helps you automatically verify the functionalities of the libraries and avoid rework.
            Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of paint
            Get all kandi verified functions for this library.

            paint Key Features

            No Key Features are available at this moment for paint.

            paint Examples and Code Snippets

            Paint a fill rectangle .
            javadot img1Lines of Code : 13dot img1no licencesLicense : No License
            copy iconCopy
            public static boolean PaintFill(Color[][] screen, int r, int c, Color ocolor, Color ncolor) {
            		if (r < 0 || r >= screen.length || c < 0 || c >= screen[0].length) {
            			return false;
            		}
            		if (screen[r][c] == ocolor) {
            			screen[r][c] = nc  
            Checks whether or not a paint character is in CSS
            javascriptdot img2Lines of Code : 8dot img2License : Permissive (MIT License)
            copy iconCopy
            function isPalindromeBrute(head) {
              const arr = [];
              for (let i = head; i; i = i.next) arr.push(i.value); // <1>
              let lo = 0;
              let hi = arr.length - 1;
              while (lo < hi) if (arr[lo++] !== arr[hi--]) return false; // <2>
              return tr  
            Paint the relative size of a list
            javadot img3Lines of Code : 6dot img3License : Permissive (MIT License)
            copy iconCopy
            public static void paint(List l){
                    l.forEach(r -> { r.setAbsoluteSize(42, 42); });
            
                    //TODO: uncomment, read the README for instructions
                    //l.forEach(r -> { r.setRelativeSize(2, 2); });
                }  

            Community Discussions

            QUESTION

            Export painted model from Blender to Three.js
            Asked 2022-Mar-14 at 12:12

            I tried to export GLTF model from Blender to Three.js. It works. But I have some artifacts on Three.js with lighting and painting. I have lines and squares in Three.js and I don't know why.

            I used only Principled BSDF node in Blender to painting my model. If I set material in Three.js (MeshPhongMaterial) it works fine. But not with Principled BSDF node from Blender. Any ideas?

            I'm trying to make the object cast a shadow and react to the lighting. This works well with MeshPhongMaterial and with Principled BSDF. But in the second option, I don't like these black stripes.

            ...

            ANSWER

            Answered 2022-Mar-14 at 12:12

            The usual approach to mitigate self-shadowing artifacts is to modulate the bias property of your shadow-casting light. Try it with:

            Source https://stackoverflow.com/questions/71466789

            QUESTION

            Hide and show background image when keyboard pressed, preserving overlay elements
            Asked 2022-Feb-28 at 19:58

            I would like to paint ellipses over an image when clicking the mouse, and when I press the keyboard, hide and show the underneath image alternatively, without cleaning the ellipses.

            I'm using createGraphics() to store the image data, and remove() so when the keyboard is pressed I spect the image disappear but it doesn't work

            Here is a sketch of what I trying to do:

            ...

            ANSWER

            Answered 2022-Feb-28 at 19:58

            The best approach is probably to draw the ellipses to a separate buffer (p5.Graphics), and then draw that on top of the image or blank background as needed. An alternative approach would be to record the position of each ellipse in an array so that they can be redrawn. However, the latter approach will use more memory and switching the image on and off will have a noticeable delay after many ellipses have been drawn.

            Approach #1 (render via p5.Graphics)

            Source https://stackoverflow.com/questions/71288527

            QUESTION

            Drawing with transparency on JavaFX Canvas using PixelWriter
            Asked 2022-Feb-21 at 20:51

            Does anyone know why transparency drawing on a Canvas works perfectly fine using drawImage(), but doesn't work at all with a PixelWriter? I initially thought it may have something to do with Blend or some other mode/setting on the canvas/context, but haven't had any luck with that yet.

            I need per-pixel variable transparency, not a single transparency value for the entire draw operation. I'll be rendering a number of "layers" (similar to how GIMP layers work, with optional transparency per-pixel). An additional open question is whether I'm better off first drawing the FINAL intended output to a WritableImage and then just drawing to the Canvas, for performance reasons, but that seems to defeat the point of using a Canvas in the first place...

            Below is an example which shows a partially transparent Color being first drawn to an Image and then to the Canvas, and directly to the Canvas with setColor(). The transparent area is the Image draw, the opaque area is the setColor part. How do we get setColor() to respect Color alpha transparency for each pixel?

            ...

            ANSWER

            Answered 2022-Feb-21 at 20:51

            The GraphicsContext begins with the default BlendMode, and all forms of drawImage() use the current mode. In contrast, PixelWriter methods replace values, ignoring the BlendMode.

            The example below lets you experiment with the supported BlendMode values to see the effect. Related examples are shown here and here.

            Source https://stackoverflow.com/questions/70085482

            QUESTION

            Delegate mouse events to all children in a JavaFX StackPane
            Asked 2022-Feb-09 at 18:34

            I'm trying to come up with a solution to allow multiple Pane nodes handle mouse events independently when assembled into a StackPane

            ...

            ANSWER

            Answered 2022-Feb-09 at 18:34

            Using the hint from @jewelsea I was able to use a custom chain. I've done this from a "catcher" Pane which is added to the front of the StackPane. This then builds a chain using all the children, in reverse order, excluding itself.

            Source https://stackoverflow.com/questions/71053623

            QUESTION

            Animate adding components to a pane
            Asked 2022-Jan-29 at 09:45

            I want to implement some kind of notification system in my application but I have trouble with the calculation of the actual position of my notification. All notifications should appear in a separate stage and each notification should be aligned among themselves and each notification is a simple VBox with two labels (title and message).

            I created a little standalone application with the issue I have.

            As soon as you press the button on the main stage, a VBox will be created and added to a second notification stage. As soon as a seconds notification needs to be added, this second notification should be below the first notification and so on. Therefore I need to find the height of the first notification in order to position the second notification underneath.

            I know I could use a VBox instead, but in my application the notification should make a smooth animation and push the other notifications further down. I removed the whole animation and removing part of notifications so the example stays as small as possible.

            The problem is that all notification boxes have the same height - but they don't (if you modify the text and make it longer / smaller).

            ...

            ANSWER

            Answered 2022-Jan-29 at 09:43

            The short answer is use applyCss():

            Source https://stackoverflow.com/questions/70900403

            QUESTION

            How to set condition for array value inside v-for in Vuejs?
            Asked 2022-Jan-05 at 11:32

            HelloWorld.vue

            ...

            ANSWER

            Answered 2021-Dec-30 at 07:19

            Your usage of computed property is wrong.

            You have to bind the computed property status, to each objects inside paints array.

            The best option for this one will be creating a seperate component to display the status.

            I have refered to this answer for your solution implementation.

            Logic

            Create a component StatusComponent inside HelloWorld component and pass box, paint and matchingdata as props to it.

            So your HelloWorld.vue component will be as below.

            template

            Source https://stackoverflow.com/questions/70136714

            QUESTION

            Android: Iterative queue-based flood fill algorithm 'expandToNeighborsWithMap()' function is unusually slow
            Asked 2021-Dec-30 at 04:27

            (Solution has been found, please avoid reading on.)

            I am creating a pixel art editor for Android, and as for all pixel art editors, a paint bucket (fill tool) is a must need.

            To do this, I did some research on flood fill algorithms online.

            I stumbled across the following video which explained how to implement an iterative flood fill algorithm in your code. The code used in the video was JavaScript, but I was easily able to convert the code from the video to Kotlin:

            https://www.youtube.com/watch?v=5Bochyn8MMI&t=72s&ab_channel=crayoncode

            Here is an excerpt of the JavaScript code from the video:

            Converted code:

            ...

            ANSWER

            Answered 2021-Dec-29 at 08:28

            I think the performance issue is because of expandToNeighbors method generates 4 points all the time. It becomes crucial on the border, where you'd better generate 3 (or even 2 on corner) points, so extra point is current position again. So first border point doubles following points count, second one doubles it again (now it's x4) and so on.

            If I'm right, you saw not the slow method work, but it was called too often.

            Source https://stackoverflow.com/questions/70490938

            QUESTION

            Update the Painted Decoration of The Widget from a Function
            Asked 2021-Dec-28 at 02:03

            I don't know if the title is worded correctly, but I will try my best to explain my problem. I now have a function that updates the current user's location, which works fine. The problem is that the painted pointer remains at that exact position because the decoration is painted once inside the widget and never changes.

            I have looked at how google does it with the marker object, but that didn't seem to work for my app because I am not using a normal map.

            ...

            ANSWER

            Answered 2021-Dec-28 at 02:03

            QUESTION

            I have a dataset in which i have two columns with time in it but the dat
            Asked 2021-Dec-22 at 17:00
            Unnamed: 0     Created Date             Closed Date            Agency   Agency Name  Complaint Type Descriptor  Location Type   Incident Zip    Address Type    City    Landmark    Status  Borough
            2869    2869    10/30/2013 09:14:47 AM  10/30/2013 10:48:51 AM  NYPD    New York City Police Department Illegal Parking Double Parked Blocking Traffic  Street/Sidewalk 11217.0 PLACENAME   BROOKLYN    BARCLAYS CENTER Closed  BROOKLYN
            23571   23571   10/25/2013 02:33:54 PM  10/25/2013 03:36:36 PM  NYPD    New York City Police Department Noise - Park    Loud Music/Party    Park/Playground 10000   PLACENAME   NEW YORK    CENTRAL PARK    Closed  MANHATTAN
            41625   41625   10/22/2013 09:33:56 PM  10/24/2013 05:37:24 PM  TLC Taxi and Limousine Commission   For Hire Vehicle Complaint  Car Service Company Complaint   Street  11430   PLACENAME   JAMAICA J F K AIRPORT   Closed  QUEENS
            44331   44331   10/22/2013 07:25:35 AM  10/25/2013 10:40:35 AM  TLC Taxi and Limousine Commission   Taxi Complaint  Driver Complaint    Street  11430   PLACENAME   JAMAICA J F K AIRPORT   Closed  QUEENS
            46913   46913   10/21/2013 05:03:26 PM  10/23/2013 09:59:23 AM  DPR Department of Parks and Recreation  Dead Tree   Dead/Dying Tree Street  11215   PLACENAME   BROOKLYN    BARTEL PRITCHARD SQUARE Closed  BROOKLYN
            47459   47459   10/21/2013 02:56:08 PM  10/29/2013 06:17:10 PM  TLC Taxi and Limousine Commission   Taxi Complaint  Driver Complaint    Street  10031   PLACENAME   NEW YORK    CITY COLLEGE    Closed  MANHATTAN
            48465   48465   10/21/2013 10:44:10 AM  10/21/2013 11:17:47 AM  NYPD    New York City Police Department Illegal Parking Posted Parking Sign Violation   Street/Sidewalk 11434   PLACENAME   JAMAICA PS 37   Closed  QUEENS
            51837   51837   10/20/2013 04:36:12 PM  10/20/2013 06:35:49 PM  NYPD    New York City Police Department Noise - Park    Loud Music/Party    Park/Playground 10031.0 PLACENAME   NEW YORK    JACKIE ROBINSON PARK    Closed  MANHATTAN
            51848   51848   10/20/2013 04:26:03 PM  10/20/2013 06:34:47 PM  NYPD    New York City Police Department Noise - Park    Loud Music/Party    Park/Playground 10031.0 PLACENAME   NEW YORK    JACKIE ROBINSON PARK    Closed  MANHATTAN
            54089   54089   10/19/2013 03:45:47 PM  10/19/2013 04:10:11 PM  NYPD    New York City Police Department Noise - Park    Loud Music/Party    Park/Playground 10000.0 PLACENAME   NEW YORK    CENTRAL PARK    Closed  MANHATTAN
            54343   54343   10/19/2013 01:27:43 PM  10/28/2013 08:42:12 AM  DOT Department of Transportation    Street Condition    Rough, Pitted or Cracked Roads  Street  10003.0 PLACENAME   NEW YORK    UNION SQUARE PARK   Closed  MANHATTAN
            55140   55140   10/19/2013 02:02:28 AM  10/19/2013 02:19:55 AM  NYPD    New York City Police Department Noise - Vehicle Car/Truck Music Street/Sidewalk 11368.0 PLACENAME   CORONA  WORLDS FAIR MARINA  Closed  QUEENS
            57789   57789   10/18/2013 11:55:44 AM  10/23/2013 02:42:14 PM  TLC Taxi and Limousine Commission   Taxi Complaint  Driver Complaint    Street  11369.0 PLACENAME   EAST ELMHURST   LA GUARDIA AIRPORT  Closed  QUEENS
            63119   63119   10/17/2013 06:52:37 AM  10/25/2013 06:49:59 PM  TLC Taxi and Limousine Commission   Taxi Complaint  Driver Complaint    Street  11430.0 PLACENAME   JAMAICA J F K AIRPORT   Closed  QUEENS
            66242   66242   10/16/2013 01:56:24 PM  10/22/2013 03:09:11 PM  TLC Taxi and Limousine Commission   Taxi Complaint  Driver Complaint    Street  11369   PLACENAME   EAST ELMHURST   LA GUARDIA AIRPORT  Closed  QUEENS
            66758   66758   10/16/2013 11:52:43 AM  10/16/2013 04:35:34 PM  NYPD    New York City Police Department Vending Unlicensed  Park/Playground 10036   PLACENAME   NEW YORK    BRYANT PARK Closed  MANHATTAN
            66786   66786   10/16/2013 11:42:23 AM  10/18/2013 04:57:04 PM  TLC Taxi and Limousine Commission   Taxi Complaint  Insurance Information Requested Street  10003   PLACENAME   NEW YORK    BETH ISRAEL MED CENTER  Closed  MANHATTAN
            66809   66809   10/16/2013 11:36:54 AM  10/16/2013 12:34:23 PM  NYPD    New York City Police Department Traffic Congestion/Gridlock Street/Sidewalk 11430   PLACENAME   JAMAICA J F K AIRPORT   Closed  QUEENS
            67465   67465   10/16/2013 09:14:35 AM  10/16/2013 12:43:06 PM  NYPD    New York City Police Department Traffic Drag Racing Street/Sidewalk 11367   PLACENAME   FLUSHING    QUEENS COLLEGE  Closed  QUEENS
            72424   72424   10/15/2013 12:22:00 AM  10/21/2013 12:16:15 PM  TLC Taxi and Limousine Commission   Taxi Complaint  Driver Complaint    Street  11217   PLACENAME   BROOKLYN    BARCLAYS CENTER Closed  BROOKLYN
            75531   75531   10/14/2013 10:59:20 AM  10/14/2013 03:09:51 PM  NYPD    New York City Police Department Vending In Prohibited Area  Park/Playground 10000   PLACENAME   NEW YORK    CENTRAL PARK    Closed  MANHATTAN
            77918   77918   10/13/2013 03:16:03 PM  10/13/2013 03:25:45 PM  NYPD    New York City Police Department Noise - Park    Loud Music/Party    Park/Playground 10000   PLACENAME   NEW YORK    CENTRAL PARK    Closed  MANHATTAN
            78048   78048   10/13/2013 01:06:02 PM  10/21/2013 10:20:21 AM  TLC Taxi and Limousine Commission   Taxi Complaint  Driver Complaint    Street  11369   PLACENAME   EAST ELMHURST   LA GUARDIA AIRPORT  Closed  QUEENS
            78352   78352   10/13/2013 05:14:33 AM  10/16/2013 01:42:42 PM  TLC Taxi and Limousine Commission   For Hire Vehicle Complaint  Car Service Company Complaint   Street  11217   PLACENAME   BROOKLYN    BARCLAYS CENTER Closed  BROOKLYN
            78383   78383   10/13/2013 03:50:02 AM  10/13/2013 05:03:13 AM  NYPD    New York City Police Department Noise - Vehicle Car/Truck Music Street/Sidewalk 11368   PLACENAME   CORONA  WORLDS FAIR MARINA  Closed  QUEENS
            79078   79078   10/12/2013 09:53:17 PM  10/13/2013 02:52:07 AM  NYPD    New York City Police Department Noise - Park    Loud Music/Party    Park/Playground 10011   PLACENAME   NEW YORK    WASHINGTON SQUARE PARK  Closed  MANHATTAN
            84489   84489   10/10/2013 07:16:16 PM  10/10/2013 10:29:16 PM  NYPD    New York City Police Department Noise - Park    Loud Music/Party    Park/Playground 11215   PLACENAME   BROOKLYN    PROSPECT PARK   Closed  BROOKLYN
            84518   84518   10/10/2013 07:02:29 PM  10/10/2013 10:29:16 PM  NYPD    New York City Police Department Noise - Park    Loud Music/Party    Park/Playground 11215   PLACENAME   BROOKLYN    PROSPECT PARK   Closed  BROOKLYN
            84688   84688   10/10/2013 05:39:19 PM  10/10/2013 10:29:17 PM  NYPD    New York City Police Department Noise - Park    Loud Music/Party    Park/Playground 11215   PLACENAME   BROOKLYN    PROSPECT PARK   Closed  BROOKLYN
            84695   84695   10/10/2013 05:37:04 PM  10/10/2013 10:30:19 PM  NYPD    New York City Police Department Noise - Park    Loud Music/Party    Park/Playground 11215   PLACENAME   BROOKLYN    PROSPECT PARK   Closed  BROOKLYN
            88812   88812   10/09/2013 09:17:15 PM  10/23/2013 02:15:21 PM  TLC Taxi and Limousine Commission   Taxi Complaint  Driver Complaint    Street  11430   PLACENAME   JAMAICA J F K AIRPORT   Closed  QUEENS
            89205   89205   10/09/2013 06:01:48 PM  10/09/2013 09:04:26 PM  NYPD    New York City Police Department Vending Unlicensed  Park/Playground 10000   PLACENAME   NEW YORK    CENTRAL PARK    Closed  MANHATTAN
            89382   89382   10/09/2013 04:53:01 PM  10/18/2013 08:35:02 AM  DOT Department of Transportation    Public Toilet   Damaged Door    Sidewalk    11238   PLACENAME   BROOKLYN    GRAND ARMY PLAZA    Closed  BROOKLYN
            89734   89734   10/09/2013 03:13:23 PM  10/09/2013 05:10:45 PM  NYPD    New York City Police Department Noise - Park    Loud Music/Party    Park/Playground 10036   PLACENAME   NEW YORK    BRYANT PARK Closed  MANHATTAN
            93990   93990   10/08/2013 06:14:15 PM  10/09/2013 04:00:59 PM  TLC Taxi and Limousine Commission   Taxi Complaint  Driver Complaint    Street  10003   PLACENAME   NEW YORK    BETH ISRAEL MED CENTER  Closed  MANHATTAN
            99407   99407   10/07/2013 03:56:11 PM  10/08/2013 07:04:14 AM  DPR Department of Parks and Recreation  Overgrown Tree/Branches Traffic Sign or Signal Blocked  Street  11430.0 PLACENAME   JAMAICA J F K AIRPORT   Closed  QUEENS
            99847   99847   10/07/2013 02:33:21 PM  10/09/2013 02:36:42 PM  TLC Taxi and Limousine Commission   Taxi Complaint  Driver Complaint    Street  10036.0 PLACENAME   NEW YORK    PORT AUTH 42 STREET Closed  MANHATTAN
            100073  100073  10/07/2013 01:36:02 PM  10/09/2013 09:56:55 AM  TLC Taxi and Limousine Commission   Taxi Complaint  Driver Complaint    Street  10024.0 PLACENAME   NEW YORK    MUSEUM NATURAL HIST Closed  MANHATTAN
            101013  101013  10/07/2013 10:05:18 AM  10/09/2013 03:36:23 PM  TLC Taxi and Limousine Commission   Taxi Complaint  Driver Complaint    Street  10017.0 PLACENAME   NEW YORK    GRAND CENTRAL TERM  Closed  MANHATTAN
            104020  104020  10/06/2013 02:58:47 PM  10/07/2013 12:11:16 PM  TLC Taxi and Limousine Commission   For Hire Vehicle Complaint  Car Service Company Complaint   Street  11430.0 PLACENAME   JAMAICA JFK Closed  QUEENS
            106118  106118  10/05/2013 03:24:47 PM  10/05/2013 04:20:34 PM  NYPD    New York City Police Department Noise - Park    Loud Music/Party    Park/Playground 10000.0 PLACENAME   NEW YORK    CENTRAL PARK    Closed  MANHATTAN
            106499  106499  10/05/2013 11:52:13 AM  10/07/2013 08:00:28 AM  DOT Department of Transportation    Public Toilet   Dirty/Graffiti  Sidewalk    11369.0 PLACENAME   EAST ELMHURST   LA GUARDIA AIRPORT  Closed  QUEENS
            
            ...

            ANSWER

            Answered 2021-Dec-22 at 17:00

            You can first start by converting your date columns to datetime type using pd.to_datetime():

            Source https://stackoverflow.com/questions/70447276

            QUESTION

            How to add y axis title for each facet row in ggplot?
            Asked 2021-Dec-22 at 09:47

            I am doing a scatterplot with a facet_grid() like that:

            ...

            ANSWER

            Answered 2021-Nov-18 at 16:45

            You may consider switching to library(cowplot) for more control

            The following code could be added to a function, but I left it long for clarity. Create 4 dataframes and feed them to four plots. Then arrange the plots

            Source https://stackoverflow.com/questions/70022117

            Community Discussions, Code Snippets contain sources that include Stack Exchange Network

            Vulnerabilities

            No vulnerabilities reported

            Install paint

            and run bundle install.

            Support

            Starting with Paint 2.0, true color mode is the new default mode, since most major terminals now support 24bit colors. If it happens to not work in your setup:.
            Find more information at:

            Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items

            Find more libraries
            CLONE
          • HTTPS

            https://github.com/janlelis/paint.git

          • CLI

            gh repo clone janlelis/paint

          • sshUrl

            git@github.com:janlelis/paint.git

          • Stay Updated

            Subscribe to our newsletter for trending solutions and developer bootcamps

            Agree to Sign up and Terms & Conditions

            Share this Page

            share link

            Explore Related Topics

            Consider Popular Command Line Interface Libraries

            ohmyzsh

            by ohmyzsh

            terminal

            by microsoft

            thefuck

            by nvbn

            fzf

            by junegunn

            hyper

            by vercel

            Try Top Libraries by janlelis

            irbtools

            by janlelisRuby

            clipboard

            by janlelisRuby

            idiosyncratic-ruby.com

            by janlelisJavaScript

            whirly

            by janlelisRuby

            uniscribe

            by janlelisRuby