text:
Where were you in '77?- Jonny Rotten.
Where were you in '77 is the title of the Sex Pistols album the released as a bootleg in 1985. The title is meant to imply that you should have been at the front of the 100 Club pogoing like everyone else in the UK in 1977. The reality of course is that most of England was at home listening to 'Abba Arrival' or learning the bag pipes as reveled by the true Top Five Singles of the year on the British Charts for 1977 list:
1"Mull of Kintyre"Paul McCartney and Wings
2"Don't Give Up on Us" David Soul
3"Knowing Me Knowing You" Abba
4"Way Down"Elvis Presley
5"I Feel Love" Donna Summer
So too it is with surfboard design. Most surfers of the day were pretty slow to give up their flares and single fins and jump on the new multi finned surfboard designs, despite Simon Anderson effectively proving the functionality of the design by winning back to back contests at 20ft Bells, 2ft Manly and the Pipe Masters in Hawaii all in the space of a month in 1981.
Which brings me to this board of mine, quite obviously shaped in 82 or 83, based on the checker boards spray. But guys were still ordering single fins off Simon right up till the end of the 80's. Nice board though.
I wasn't yet listening to the pistols ( I started in 80) but was watching the surf comps... best times of board art, and those times were unbelievable to watch. it was christian surfers times for me...
where were you, I was old enough?
Man In Room 5 December 18, 2009 at 2:02 AM
That Sex Pistols album is a bootleg of a live concert and it was released around 1985 I believe. It was also included in the Sex Pistols box set bootleg called London's Outrage. Both of these were released years before the Pistol reunion in 1996.
'Old Faithful'- the famous MR Flame board. Part 3
$10,000 to be paid for first successful kick flip ...
Trap for young players.
University of Narrabeen, School of Design.
Peter Schroff the original Marc Newsom
Col Smith Channel bottom
The story so far.....


Once in a while you choose to #pack your merchandise independent from anyone else. With the experience of #moving areas ordinarily, you can carry out the occupation effortlessly. Be that as it may, with regards to stacking your products, you will require the assistance of the Packers and Movers Ahmedabad.
You may choose to employ a truck and welcome a few companions to help you with the #stacking. Once in a while you enlist any laborer accessible effortlessly to stack your merchandise. You are uncovering your valuable possessions to hurt by doing this. Your companions or the laborers might not have what it takes to comprehend the complexities of stacking and #emptying the products. Putting the bundles haphazardly into the truck can harm the delicate things, regardless of how pleasantly you #pack them.
Odds of a mishap remain when you stack or empty the merchandise. On the off chance that you do it without anyone's help, you can't guarantee any remuneration from the insurance agency. You have just yourself to fault, in case of an incidental harm to your resources. When you procure the presumed Movers and Packers Bhankoda Ahmedabad, the firm protects the products for any sudden misfortune.
In spite of the fact that stacking merchandise may appear to be a simple undertaking, it requires some arranging and abilities for immaculate execution. The #best possible marking of the containers and boxes helps the Packers and Movers in Ahmedabad to recognize the delicate things. The prepared group takes uncommon, care while stacking the delicate products and the overwhelming furniture.
The movers put the delicate things in an ensured range of the products transporter.
To profit the most proficient stacking and emptying answers for your family or business products, contact the Dependable Packers and Movers Ankleshwar. The accomplished staff from the firm knows the methodologies to apply while stacking various types of articles. To get more insights about all the movement help the organization offers, visit their site.


The finest white wines on the planet.
Some years ago we identified the need for new wines to come onto the uk scene, as people were tiring with the fruitiness of German Riesling ( unjustly so in my opinion) and so we began the search for new and exciting white wines with zip and acidity to contrast with our Chardonnay range from France and Australia particularly.
The answer lay in New Zealand, a cool climate New World country with a new and innovative wine industry based predominantly in the South Island, particularly around the town of Blenheim.
Cloudy Bay had long been sought after as a boutique label synonymous with great fruit and quality but had become extremely difficult to purchase.
In the Highfield Estate Barrels and Bottles found an exclusive partner with which to work in the UK, with a licence to sell their wines exclusively in the UK Ireland and Scandinavia.
The philosophy of Highfield is very simple. Grow the best grapes, employ the best winemaking staff and work with the best wine merchants around the world with small quantities of very good product. In the Highfield range are Sauvignon Blanc, Chardonnay and Riesling for whites, Pinot Noir for red and a cracking sparkling wine made with 50% pinot Noir and 50% Chardonnay.
Working as an agent Barrels and Bottles can ensure that the wines are only sold in the right stores and restaurants to maximize the profile of the brand. All wine merchants that are appointed to handle their region make a commitment to the quality of their customer service and that the brand will not be price cut to devalue its position in the market.
After 4 years of success in the worldwide wine competitions, Highfield has established itself as a sought after brand with elegant wine making and contemporary packaging, a stream of Gold medals in Sydney, Hong Kong and Auckland along with a loyal following of fans.
As consumer tastes alter, we continue to search for new and exciting brands to work with, a search that can take us all over the world, but we hope to find just one more jewel to add to the range, which will sparkle as much as Highfield Estate, Marlborough New Zealand which has become our number one brand.
The post The finest white wines on the planet. appeared first on The wine and accessories blog.


Our customer was recommended to us from a previous job we had completed close to there property. This property situated in Christchurch, was needing a total renovation and they wanted to add a single storey extension. We had the plans drawn up and then our amazing team completed all necessary requirements to get the job done.
Our work included the plumbing and electrics in the property. We plastered alot of the walls and decorated. We installed a new bathroom and kitchen. All the flooring was replaced also. After we finished the house we went into the garden and built the decking and patio.


text: Q: Bootstrap navbar stopped working in Chrome I have a website built from a template using bootstrap.min.css for the navbar, it was functioning perfectly a few days ago and has suddenly stopped working only in Chrome desktop. It functions fine on Chrome mobile and all other desktop browsers. Does anyone know if Google changed code that I need to adjust for? Thanks in advance.

redpajama_set_name: RedPajamaStackExchange


text:
Who'll Pay the Price of Beauty (and Privacy) on Ello?
Post-modern posts on Ello, this one courtesy of artist Mark Lovejoy
Rene Alegria has what tens of thousands of middle class immigrants streaming into New York City from the cultural deserts of America's Heartland can only dream of–a cheap apartment with nice landlords in a brownstone on the Lower East Side. On this day, however, he speaks to us from his new outpost in snowy Burlington, VT. He misses the city, yes, but he's on a mission. He's a marketing guy figuring out a way to commercially sustain a social network called Ello that accepts no advertising in order to keep users' personal data out of the hands of the world at large. So that if one, for instance, has seen Fifty Shades of Grey seven times and visited a B&D site to purchase four-way restraints and an Arabian leather whip, no one's the wiser for it. (I said one.)
"We don't collect data, we don't serve ads. Whoever enters Ello cannot serve ads on the network. There's a growing frustration about what social networks have become, and what they've become are advertising platforms," says Alegria, who previously was the CEO of Mamiverse, a digital platform for Latina moms, and the founding publisher of Rayo/Harpercollins, a Latino book imprint.
Problem is, there's this social network called Facebook that's got 1.3 billion active monthly users and has Facebook Ads and Facebook Audience Networks and rides herd over a global ad empire David Ogilvy never saw coming. And you have Twitter, whose survival is continually questioned by media pundits noting that it has merely 115 million monthly actives, hardly scalable.
"Our aim is not to have 2 billion people. Our goal is to have a social network with a different, positive vibe. People who are happy with each other," says Alegria. When you sign up for Ello, you're presented with a set of Utopian rules: Don't threaten people, don't hate, don't post others' personal information. Repeat offenders are warned they will be asked to leave the digital love-in.
But Alegria maintains that Ello–which is still in beta and which he claims signed up a quarter-million new users last week—does have a monetization plan. He's a bit sketchy on exactly what form it will take, however. The site caters to an arty set—and know this–the site is visually beautiful, a digital monument to the myriad undiscovered artistic talents in the world, an example of which heads this story. Artists are allowed to sell their art, and the monetization vision appears to be something along the lines of a social art marketplace in which Ello will extract a percentage of transactions.
"We're not a not-for-profit, but we feel strongly there's a better way of doing business in this world," proclaims Alegria (pictured below). "A lot of artists and celebrities have grown disillusioned with Facebook. We will never manipulate our algorithms. One hundred percent of the followers of any profile will see 100% of the posts."
Digital marketing experts are skeptical. "I think it's a shallow promise. It's not filling a need in a new way. Artists have Tumblr and Etsy on which to demonstrate and sell their work," says SapientNitro's Global Head of Social Experience Nathaniel Perez. "You can't survive on a warm and fuzzy premise alone, regardless of what it means to users."
Adds 3Q Digital COO Dave Yoo: "I'm not convinced that the ad-free model will sustain. It hasn't yet virally exploded for others that preached this model—like App.net and Diaspora—and Ello is relying on a passionate response to ad-free from the get-go."
For its part, Ello has a founder with a track record of succeeding with offbeat ideas. While still at Yale working on an art degree, Paul Budnitz sold artistically modified items of apparel in museum stores worldwide, a transmogrified pair of Air Jordans fetching as much as $16,000 a pair in Japan. He later founded the highly successful company Kidrobot, which blurred the lines between toys and art. "My grandfather was a small-town doctor and he used to say that I was missing a gene that told me that some giant risk I am about to take with my life is both stupid and dangerous," wrote Budnitz on the website of another of his ventures, Budnitz Bicycles. "I'm grateful for this. Everything beautiful that we create in life requires a leap of faith."
I'm rooting for Budnitz and Ello. I' m not as smart or creative or successful as he is, but I have something that the drivers of social media—members of the now-dominant Millennial Generation—don't have. As a Boomer, I remember a time when some dashboard jockey at an e-com in Oakland didn't know what I had for dinner, what my cat's name was, and what I bought from Macy's and Corona Cigar Company last month. I remember when you could "share" a secret with a friend and not have it broadcast to the world, when you could slide by a red light at two in the morning and not get a ticket in the mail with a picture of yourself in mid-perpetration.
So I'm hopeful that, some way or another, people longing to recapture the lost joy of anonymity will prove the digital agency guys wrong and find a way to make Ello survive and thrive. There will most certainly come a time when social media addicts will long to embrace the warm, safe feeling of being nobody. In the words of the great Emily Dickinson, "How dreary—to be—Somebody! How public—like a Frog."
Also, if this doesn't work, I'm going to have to…. I mean one is going to have to… make certain purchases the old-fashioned way–in a store, at night, wearing a hoodie.
Zipcar deal, QR codes illustrate evolution of campus marketing
Strolling across the quad of my college campus those many years ago, I was approached by a girl…
Melissa Hoffmann
Scrabulous on Facebook RIP
The developers of the popular online game Scrabulous have pulled the game from Facebook, after receiving legal threats…
Dianna Dilworth
Mobile will take power from the Web, but compliance won't be easy: DMA Mobile Day
To address the fast growing emerging mobile marketing space the DMA held its annual Mobile Marketing Day 2010…

redpajama_set_name: RedPajamaCommonCrawl


text:
package org.sandsoft.acefx.model;

import org.sandsoft.acefx.util.Commons;
import java.util.ArrayList;
import java.util.Map;
import netscape.javascript.JSException;
import netscape.javascript.JSObject;

/**
 *
 * @author Sudipto Chandra
 */
public class EditSession {

    private final JSObject mSession;
    private UndoManager mUndoManager;

    /**
     * Creates a new wrapper for EditorSession in ace editor.
     *
     * @param session Main object to wrap.
     */
    public EditSession(JSObject session) throws JSException {
        mSession = session;
        JSObject undoManager = (JSObject) session.call("getUndoManager");
        mUndoManager = new UndoManager(undoManager);
    }

    /**
     * Gets the java script object wrapped by this instance.
     *
     * @return java script object being wrapped.
     */
    public final JSObject getModel() {
        return mSession;
    }

    /**
     * Adds a dynamic marker to the session.
     *
     * @param marker Required. object with update method
     * @param inFront Required. Set to true to establish a front marker
     * @return
     */
    @Deprecated
    public Object addDynamicMarker(JSObject marker, Boolean inFront) throws JSException {
        return mSession.call("addDynamicMarker", marker, inFront);
    }

    /**
     * Adds fold for the given range with the given placeholder.
     *
     * @param placeholder an instance of Fold.
     * @param range Range to apply fold.
     * @return Fold that has been applied.
     */
    public Object addFold(Object placeholder, JSObject range) {
        return mSession.call("addFold", placeholder, range);
    }

    /**
     * Adds className to the row, to be used for CSS styling and whatnot.
     *
     * @param row Required. The row number
     * @param className Required. The class to add
     */
    public void addGutterDecoration(Integer row, String className) throws JSException {
        mSession.call("addGutterDecoration", row, className);
    }

    /**
     * Adds a new marker to the given Range. If inFront is true, a front marker
     * is defined, and the 'changeFrontMarker' event fires; otherwise, the
     * 'changeBackMarker' event fires.
     *
     * @param range Required. Define the range of the marker
     * @param clazz Required. Set the CSS class for the marker
     * @param type Required. Identify the type of the marker
     * @param inFront Required. Set to true to establish a front marker
     * @return
     */
    @Deprecated
    public int addMarker(Range range, String clazz, String type, Boolean inFront) throws JSException {
        return (int) mSession.call("addMarker", Commons.getObject(mSession, range), clazz, type, inFront);
    }

    public boolean adjustWrapLimit(Integer limit, boolean printMargin) throws JSException {
        return (boolean) mSession.call("adjustWrapLimit", limit, printMargin);
    }

    /**
     * Clears all the annotations for this session. This function also triggers
     * the 'changeAnnotation' event.
     */
    public void clearAnnotations() throws JSException {
        mSession.call("clearAnnotations");
    }

    /**
     * Removes a breakpoint on the row number given by rows. This function also
     * emits the 'changeBreakpoint' event.
     *
     * @param row Required. A row index
     */
    public void clearBreakpoint(Integer row) throws JSException {
        mSession.call("clearBreakpoint", row);
    }

    /**
     * Removes all breakpoints on the rows. This function also emits the
     * 'changeBreakpoint' event.
     */
    public void clearBreakpoints() throws JSException {
        mSession.call("clearBreakpoints");
    }

    @Deprecated
    public void destroy() {
        mSession.call("destroy");
    }

    /**
     * For the given document row and column, returns the screen column.
     *
     * @param docRow Required. The document row to check
     * @param docColumn Required. The document column to check
     * @return the screen column.
     */
    public int documentToScreenColumn(Integer docRow, Integer docColumn) throws JSException {
        return (int) mSession.call("documentToScreenColumn", docRow, docColumn);
    }

    /**
     * Converts document coordinates to screen coordinates. This takes into
     * account code folding, word wrap, tab size, and any other visual
     * modifications.
     *
     * @param docRow Required. The document row to check
     * @param docColumn Required. The document column to check
     * @return screen coordinates.
     */
    public DocPos documentToScreenPosition(Integer docRow, Integer docColumn) throws JSException {
        return new DocPos((JSObject) mSession.call("documentToScreenPosition", docRow, docColumn));
    }

    /**
     * For the given document row and column, returns the screen row.
     *
     * @param docRow Required. The document row to check
     * @param docColumn Required. The document column to check
     * @return the screen row.
     */
    public int documentToScreenRow(Integer docRow, Integer docColumn) throws JSException {
        return (int) mSession.call("documentToScreenRow", docRow, docColumn);
    }

    /**
     * Duplicates all the text between firstRow and lastRow.
     *
     * @param firstRow Required. The starting row to duplicate
     * @param lastRow Required. The final row to duplicate
     * @return number of lines copied.
     */
    public int duplicateLines(Integer firstRow, Integer lastRow) throws JSException {
        return (int) mSession.call("duplicateLines", firstRow, lastRow);
    }

    @Deprecated
    public void expandFold(JSObject fold) {
        mSession.call("expandFold", fold);
    }

    /**
     * Find the position of the matching bracket.
     *
     * @param position Position in the document by "{row,column}"
     * @param chr Character to find the match.
     * @return Position of either closing or opening bracket.
     */
    @Deprecated
    public DocPos findMatchingBracket(DocPos position, Character chr) {
        return new DocPos((JSObject) mSession.call("findMatchingBracket", Commons.getObject(mSession, position), chr));
    }

    /**
     * Folds all foldable regions between startRow and endRow. The depth is the
     * maximum number of level of a child fold region to be folded along with
     * its parent.
     *
     * @param startRow Start row to start folding.
     * @param endRow End row to stop folding.
     * @param depth Depth of the foldable region.
     */
    public void foldAll(Integer startRow, Integer endRow, Integer depth) {
        mSession.call("foldAll", startRow, endRow, depth);
    }

    /**
     * Gets the range of a word, including its right whitespace.
     *
     * @param row Required. The row number to start from
     * @param column Required. The column number to start from
     * @return the range of a word, including its right whitespace.
     */
    public JSObject getAWordRange(Integer row, Integer column) {
        return (JSObject) mSession.call("getAWordRange", row, column);
    }

    public JSObject getAllFolds() {
        return (JSObject) mSession.call("getAllFolds");
    }

    /**
     * Gets the annotations for the EditSession.
     *
     * @return the annotations for the EditSession.
     */
    @Deprecated
    public JSObject getAnnotations() throws JSException {
        return (JSObject) mSession.call("getAnnotations");
    }

    @Deprecated
    public Range getBracketRange(DocPos pos) {
        JSObject obj = (JSObject) mSession.call("getBracketRange", Commons.getObject(mSession, pos));
        return obj == null ? null : new Range(obj);
    }

    /**
     * Gets an array of numbers, indicating which rows have breakpoints.
     *
     * @return an array of numbers, indicating which rows have breakpoints.
     */
    public int getBreakpoints() throws JSException {
        return (int) mSession.call("getBreakpoints");
    }

    /**
     *
     * @param row
     * @param column
     * @param dir If 1 move forward, else move backward.
     * @return
     */
    @Deprecated
    public Range getCommentFoldRange(Integer row, Integer column, Integer dir) {
        return new Range((JSObject) mSession.call("getCommentFoldRange", row, column, dir));
    }

    @Deprecated
    public JSObject getDisplayLine(Integer endRow, Integer endColumn, Integer startRow, Integer startColumn) {
        return (JSObject) mSession.call("getDisplayLine", endRow, endColumn, startRow, startColumn);
    }

    /**
     * Gets the underlying document object.
     *
     * @return Document object.
     */
    @Deprecated
    private JSObject getDocument() throws JSException {
        return (JSObject) mSession.call("getDocument");
    }

    /**
     * For the given document row and column, this returns the column position
     * of the last screen row.
     *
     * @param docRow Required. The document row to check
     * @param docColumn Required. The document column to check
     * @return the column position of the last screen row.
     */
    public int getDocumentLastRowColumn(Integer docRow, Integer docColumn) throws JSException {
        return (int) mSession.call("getDocumentLastRowColumn", docRow, docColumn);
    }

    /**
     * For the given document row and column, this returns the document position
     * of the last row.
     *
     * @param docRow Required. The document row to check
     * @param docColumn Required. The document column to check
     * @return the document position of the last row.
     */
    public int getDocumentLastRowColumnPosition(Integer docRow, Integer docColumn) throws JSException {
        return (int) mSession.call("getDocumentLastRowColumnPosition", docRow, docColumn);
    }

    @Deprecated
    public JSObject getFoldAt(Integer row, Integer column, Integer side) throws JSException {
        return (JSObject) mSession.call("getFoldAt", row, column, side);
    }

    @Deprecated
    public JSObject getFoldDisplayLine(JSObject foldLine, Integer endRow, Integer endColumn, Integer startRow, Integer startColumn) {
        return (JSObject) mSession.call("getFoldDisplayLine", foldLine, endRow, endColumn, startRow, startColumn);
    }

    @Deprecated
    public JSObject getFoldLine(Integer docRow, JSObject startFoldLine) {
        return (JSObject) mSession.call("getFoldLine", docRow, startFoldLine);
    }

    /**
     *
     * @param row
     * @param column
     * @param trim either -1, 1 or other
     * @param foldLine
     * @return
     * @deprecated
     */
    @Deprecated
    public String getFoldStringAt(Integer row, Integer column, Integer trim, JSObject foldLine) {
        return (String) mSession.call("getFoldStringAt", row, column, trim, foldLine);
    }

    @Deprecated
    public int getFoldedRowCount(Integer first, Integer last) {
        return (int) mSession.call("getFoldedRowCount", first, last);
    }

    @Deprecated
    public JSObject getFoldsInRange(Range range) {
        return (JSObject) mSession.call("getFoldsInRange", Commons.getObject(mSession, range));
    }

    @Deprecated
    public JSObject getFoldsInRangeList(ArrayList<Range> range) {
        return (JSObject) mSession.call("getFoldsInRangeList", Commons.getObjectByList(mSession, range));
    }

    /**
     * Returns the number of rows in the document.
     *
     * @return the number of rows in the document.
     */
    public int getLength() throws JSException {
        return (int) mSession.call("getLength");
    }

    /**
     * Returns a verbatim copy of the given line as it is in the document
     *
     * @param row Required. The row to retrieve from
     * @return a verbatim copy of the given line as it is in the document
     */
    public String getLine(Integer row) throws JSException {
        return (String) mSession.call("getLine", row);
    }

    @Deprecated
    public String getLineWidgetMaxWidth() throws JSException {
        return (String) mSession.call("getLineWidgetMaxWidth");
    }

    /**
     * Returns an array of strings of the rows between firstRow and lastRow.
     * This function is inclusive of lastRow.
     *
     * @param firstRow Required. The first row index to retrieve
     * @param lastRow Required. The final row index to retrieve
     * @return a verbatim copy of the given lines as it is in the document
     */
    @Deprecated
    public JSObject getLines(Integer firstRow, Integer lastRow) throws JSException {
        return (JSObject) mSession.call("getLines", firstRow, lastRow);
    }

    /**
     * Returns an array containing the IDs of all the markers, either front or
     * back.
     *
     * @param inFront Required. If true, indicates you only want front markers;
     * false indicates only back markers
     * @return an array containing the IDs of all the markers
     */
    @Deprecated
    public JSObject getMarkers(Boolean inFront) throws JSException {
        return (JSObject) mSession.call("getMarkers", inFront);
    }

    /**
     * Currently enabled language mode.
     *
     * @return the current mode.
     */
    @Deprecated
    public String getMode() throws JSException {
        return (String) mSession.eval("this.getMode().$id");
    }

    /**
     * @return the current new line mode.
     */
    public String getNewLineMode() throws JSException {
        return (String) mSession.call("getNewLineMode");
    }

    @Deprecated
    public JSObject getNextFoldLine(Integer docRow, JSObject startFoldLine) {
        return (JSObject) mSession.call("getNextFoldLine", docRow, startFoldLine);
    }

    /**
     * Gets the value of an option by its name.
     *
     * @param name Name of the options.
     * @return value of the option.
     */
    @Deprecated
    public Object getOption(String name) {
        return mSession.call("getOption", name);
    }

    /**
     * Gets all values of the given list of options.
     *
     * @param optionNames list of option names.
     * @return values of the options.
     */
    @Deprecated
    public Object getOptions(Object optionNames) {
        return mSession.call("getOptions", optionNames);
    }

    /**
     * @return true if overwrites are enabled; false otherwise.
     */
    public boolean getOverwrite() throws JSException {
        return (boolean) mSession.call("getOverwrite");
    }

    @Deprecated
    public JSObject getParentFoldRangeData(Integer docRow, Boolean ignoreCurrent) {
        return (JSObject) mSession.call("getParentFoldRangeData", docRow, ignoreCurrent);
    }

    @Deprecated
    public int getRowFoldEnd(Integer docRow, Integer startFoldRow) throws JSException {
        return (int) mSession.call("getRowFoldEnd", docRow, startFoldRow);
    }

    @Deprecated
    public int getRowFoldStart(Integer docRow, Integer startFoldRow) throws JSException {
        return (int) mSession.call("getRowFoldStart", docRow, startFoldRow);
    }

    /**
     * @return number of screen rows in a wrapped line.
     * @param row Required. The row number to check
     */
    public int getRowLength(Integer row) throws JSException {
        return (int) mSession.call("getRowLength", row);
    }

    @Deprecated
    public int getRowLineCount(Integer row) throws JSException {
        return (int) mSession.call("getRowFoldStart", row);
    }

    /**
     * For the given row, this returns the split data.
     *
     * @param row Required.
     * @return the split data.
     */
    @Deprecated
    public String getRowSplitData(Integer row) throws JSException {
        return (String) mSession.call("getRowSplitData", row);
    }

    @Deprecated
    public int getRowWrapIndent(Integer screenRow) throws JSException {
        return (int) mSession.call("getRowWrapIndent", screenRow);
    }

    /**
     * Returns the position (on screen) for the last character in the provided
     * screen row.
     *
     * @param screenRow Required. The screen row to check.
     * @return the position (on screen) for the last character in the provided
     * screen row.
     */
    public int getScreenLastRowColumn(Integer screenRow) throws JSException {
        return (int) mSession.call("getScreenLastRowColumn", screenRow);
    }

    /**
     * Returns the length of the screen.
     *
     * @return the length of the screen.
     */
    public int getScreenLength() throws JSException {
        return (int) mSession.call("getScreenLength");
    }

    /**
     * The distance to the next tab stop at the specified screen column.
     *
     * @param screenColumn Required. The screen column to check
     * @return the distance to the next tab stop at the specified screen column.
     */
    public int getScreenTabSize(Integer screenColumn) throws JSException {
        return (int) mSession.call("getScreenTabSize", screenColumn);
    }

    /**
     * Returns the width of the screen.
     *
     * @return the width of the screen.
     */
    public int getScreenWidth() throws JSException {
        return (int) mSession.call("getScreenWidth");
    }

    /**
     * Returns the value of the distance between the left of the editor and the
     * leftmost part of the visible content.
     *
     * @return the value of the distance
     */
    public int getScrollLeft() throws JSException {
        return (int) mSession.call("getScrollLeft");
    }

    /**
     * Returns the value of the distance between the top of the editor and the
     * topmost part of the visible content.
     *
     * @return the value of the distance
     */
    public int getScrollTop() throws JSException {
        return (int) mSession.call("getScrollTop");
    }

    /**
     * Returns the string of the current selection.
     *
     * @return the current selection.
     */
    @Deprecated
    public JSObject getSelection() throws JSException {
        return (JSObject) mSession.call("getSelection");
    }

    /**
     * Returns the string of the current selection.
     *
     * @return the current selection.
     */
    @Deprecated
    public JSObject getSelectionMarkers() throws JSException {
        return (JSObject) mSession.call("getSelectionMarkers");
    }

    /**
     * Returns the state of tokenization at the end of a row.
     *
     * @param row Required. The row to start at
     * @return
     */
    @Deprecated
    public JSObject getState(Integer row) throws JSException {
        return (JSObject) mSession.call("getState", row);
    }

    /**
     * Gets the current tab size.
     *
     * @return the current tab size.
     */
    public int getTabSize() throws JSException {
        return (int) mSession.call("getTabSize");
    }

    /**
     * Gets the current value for tabs. If the user is using soft tabs, this
     * will be a series of spaces (defined by getTabSize()); otherwise it's
     * simply '\t'.
     *
     * @return the current value for tabs.
     */
    public String getTabString() throws JSException {
        return (String) mSession.call("getTabString");
    }

    /**
     * Given a range within the document, this function returns all the text
     * within that range as a single string.
     *
     * @param range Required. The range to work with.
     * @return all the text within the range
     */
    @Deprecated
    public String getTextRange(JSObject range) throws JSException {
        return (String) mSession.call("getTextRange", range.toString());
    }

    /**
     * Returns an object indicating the token at the current row. The object has
     * two properties: index and start.
     *
     * @param row Required. The row number to retrieve from
     * @param column Required. The column number to retrieve from
     * @return the token at the current row
     */
    @Deprecated
    public JSObject getTokenAt(Integer row, Integer column) throws JSException {
        return (JSObject) mSession.call("getTokenAt", row, column);
    }

    /**
     * Starts tokenizing at the row indicated. Returns a list of objects of the
     * tokenized rows.
     *
     * @returna list of objects of the tokenized rows.
     */
    @Deprecated
    public JSObject getTokens(Integer row) throws JSException {
        return (JSObject) mSession.call("getTokens", row);
    }

    /**
     * Returns the current undo manager.
     *
     * @return the current undo manager.
     */
    public UndoManager getUndoManager() throws JSException {
        return mUndoManager;
    }

    /**
     * Returns true if soft tabs are being used, false otherwise.
     *
     * @return true if soft tabs are being used, false otherwise.
     */
    public boolean getUseSoftTabs() throws JSException {
        return (boolean) mSession.call("getUseSoftTabs");
    }

    /**
     * Returns true if workers are being used.
     *
     * @return true if workers are being used.
     */
    public boolean getUseWorker() throws JSException {
        return (boolean) mSession.call("getUseWorker");
    }

    /**
     * Returns true if wrap mode is being used; false otherwise.
     *
     * @return true if wrap mode is being used; false otherwise.
     */
    public boolean getUseWrapMode() throws JSException {
        return (boolean) mSession.call("getUseWrapMode");
    }

    /**
     * Returns the current Document as a string.
     *
     * @return the current Document as a string.
     */
    public String getValue() throws JSException {
        return (String) mSession.call("getValue");
    }

    /**
     * Given a starting row and column, this method returns the Range of the
     * first word boundary it finds.
     *
     * @param row Required. The row number to retrieve from
     * @param column Required. The column number to retrieve from
     * @return the Range of the first word boundary it finds.
     */
    @Deprecated
    public JSObject getWordRange(Integer row, Integer column) throws JSException {
        return (JSObject) mSession.call("getWordRange", row, column);
    }

    /**
     * Returns the value of wrap limit.
     *
     * @return the value of wrap limit.
     */
    public int getWrapLimit() throws JSException {
        return (int) mSession.call("getWrapLimit");
    }

    /**
     * Returns an object that defines the minimum and maximum of the wrap limit;
     * it looks something like this:<br/>
     * <code> { min: wrapLimitRange_min, max: wrapLimitRange_max } </code>
     *
     * @return n object that defines the minimum and maximum of the wrap limit
     */
    @Deprecated
    public JSObject getWrapLimitRange() throws JSException {
        return (JSObject) mSession.call("getWrapLimitRange");
    }

    /**
     * Highlight all text that matches with given regular expression.
     *
     * @param regExp Regular expression to highlight.
     */
    @Deprecated
    public void highlight(String regExp) throws JSException {
        mSession.call("highlight", regExp);
    }

    /**
     * Highlight lines
     *
     * @param startRow Required. Starting row
     * @param endRow Required. Ending row
     * @param clazz Required. Class name
     * @param inFront Required. true to select front marker
     * @return range of lines that has been highlighted.
     */
    @Deprecated
    public JSObject highlightLines(Integer startRow, Integer endRow, String clazz, Boolean inFront) throws JSException {
        return (JSObject) mSession.call("highlightLines", startRow, endRow, clazz, inFront);
    }

    /**
     * Indents all the rows, from startRow to endRow (inclusive), by prefixing
     * each row with the token in indentString. If indentString contains the
     * '\t' character, it's replaced by whatever is defined by getTabString().
     *
     * @param startRow Required. Starting row
     * @param endRow Required. Ending row
     * @param indentString Required. The indent token
     */
    public void indentRows(int startRow, int endRow, String indentString) throws JSException {
        mSession.call("indentRows", startRow, endRow, indentString);
    }

    /**
     * Inserts a block of text and the indicated position.
     *
     * @param position Required. The position {row, column} to start inserting
     * at
     * @param text Required. A chunk of text to insert
     */
    @Deprecated
    public void insert(JSObject position, String text) throws JSException {
        mSession.call("insert", position, text);
    }

    /**
     * Returns true if the character at the position is a soft tab.
     *
     * @return
     */
    public boolean isRowFolded(Integer docRow, Integer startFoldRow) throws JSException {
        return (boolean) mSession.call("isRowFolded", docRow, startFoldRow);
    }

    /**
     * Returns true if the character at the position is a soft tab.
     *
     * @param position
     * @return
     */
    @Deprecated
    public boolean isTabStop(JSObject position) throws JSException {
        return (boolean) mSession.call("isTabStop", position);
    }

    public void markUndoGroup() {
        mSession.call("markUndoGroup");
    }

    /**
     * Shifts all the lines in the document down one, starting from firstRow and
     * ending at lastRow.
     *
     * @param firstRow Required. The starting row to move down
     * @param lastRow Required. The final row to move down
     * @return number of lines moved.
     */
    public int moveLinesDown(Integer firstRow, Integer lastRow) throws JSException {
        return (int) mSession.call("moveLinesDown", firstRow, lastRow);
    }

    /**
     * Shifts all the lines in the document up one, starting from firstRow and
     * ending at lastRow.
     *
     * @param firstRow Required. The starting row to move down
     * @param lastRow Required. The final row to move down
     * @return number of lines moved.
     */
    public int moveLinesUp(Integer firstRow, Integer lastRow) throws JSException {
        return (int) mSession.call("moveLinesUp", firstRow, lastRow);
    }

    /**
     * Moves a range of text from the given range to the given position.
     * toPosition is an object that looks like this: <br/>
     * <code>{ row: newRowLocation, column: newColumnLocation }</code>
     *
     * @param fromRange Required. The range of text you want moved within the
     * document
     * @param toPosition Required. The location (row and column) where you want
     * to move the text to
     * @return new range
     */
    @Deprecated
    public JSObject moveText(JSObject fromRange, DocPos toPosition) throws JSException {
        return (JSObject) mSession.call("moveText", fromRange.toString(), toPosition.toString());
    }

    @Deprecated
    public void off(String eventName, Object callback) throws JSException {
        mSession.call("off", eventName, callback);
    }

    @Deprecated
    public void on(String eventName, Object callback, Boolean capturing) throws JSException {
        mSession.call("off", eventName, callback, capturing);
    }

    //
    //---------------------------------------------------------------------------------------------
    //
    // onChange() Undocumented
    // onChangeFold() Undocumented
    // Reloads all the tokens on the current session. This function calls BackgroundTokenizer.start () to all the rows; it also emits the 'tokenizerUpdate' event.
    // onReloadTokenizer(Object e)
    //
    //---------------------------------------------------------------------------------------------
    //
    /**
     * Outdents all the rows defined by the start and end properties of range.
     *
     * @param range Required. A range of rows
     */
    @Deprecated
    public void outdentRows(JSObject range) throws JSException {
        mSession.call("outdentRows", range.toString());
    }

    /**
     * Same as getUndoManager().redo(true)
     */
    public void redo() throws JSException {
        mUndoManager.redo(true);
    }

    /**
     * Re-implements a previously undone change to your document.
     *
     * @param deltas Array of deltas
     */
    @Deprecated
    private JSObject redoChanges(JSObject deltas, Boolean dontSelect) {
        return (JSObject) mSession.call("redoChanges", deltas, dontSelect);
    }

    /**
     * Removes the range from the document.
     *
     * @param range Required. A specified Range to remove
     * @return the range from the document.
     */
    @Deprecated
    public JSObject remove(JSObject range) throws JSException {
        return (JSObject) mSession.call("remove", range.toString());
    }

    @Deprecated
    public void removeFold(JSObject fold) {
        mSession.call("removeFold", fold);
    }

    @Deprecated
    public void removeFullLines(Integer firstRow, Integer lastRow) {
        mSession.call("removeFold", firstRow, lastRow);
    }

    /**
     * Removes className from the row.
     *
     * @param row Required. The row number
     * @param className Required. The class to add
     */
    public void removeGutterDecoration(Integer row, String className) throws JSException {
        mSession.call("removeGutterDecoration", row, className);
    }

    /**
     * Removes the marker with the specified ID. If this marker was in front,
     * the 'changeFrontMarker' event is emitted. If the marker was in the back,
     * the 'changeBackMarker' event is emitted.
     *
     * @param markerId Required. A number representing a marker
     */
    public void removeMarker(Integer markerId) throws JSException {
        mSession.call("removeMarker", markerId);
    }

    /**
     * Replaces a range in the document with the new text.
     *
     * @param range Required. A specified Range to replace
     * @param text Required. The new text to use as a replacement
     * @return
     */
    @Deprecated
    public JSObject replace(JSObject range, String text) throws JSException {
        return (JSObject) mSession.call("replace", range.toString(), text);
    }

    /**
     * Clear caches. Clears wrap data, row caches, tokenizer etc.
     */
    public void resetCaches() throws JSException {
        mSession.call("resetCaches");
    }

    /**
     * Converts characters coordinates on the screen to characters coordinates
     * within the document. This takes into account code folding, word wrap, tab
     * size, and any other visual modifications.
     *
     * @param screenRow Required. The screen row to check
     * @param screenColumn Required. The screen column to check
     * @return column of the converted coordinate.
     */
    public int screenToDocumentColumn(Integer screenRow, Integer screenColumn) throws JSException {
        return screenToDocumentPosition(screenRow, screenColumn).getColumn();
    }

    /**
     * Converts characters coordinates on the screen to characters coordinates
     * within the document. This takes into account code folding, word wrap, tab
     * size, and any other visual modifications.
     *
     * @param screenRow Required. The screen row to check
     * @param screenColumn Required. The screen column to check
     * @return the converted coordinate.
     */
    public DocPos screenToDocumentPosition(Integer screenRow, Integer screenColumn) throws JSException {
        return new DocPos((JSObject) mSession.call("screenToDocumentPosition", screenRow, screenColumn));
    }

    /**
     * Converts characters coordinates on the screen to characters coordinates
     * within the document. This takes into account code folding, word wrap, tab
     * size, and any other visual modifications.
     *
     * @param screenRow Required. The screen row to check
     * @param screenColumn Required. The screen column to check
     * @return row of the converted coordinate.
     */
    public int screenToDocumentRow(Integer screenRow, Integer screenColumn) throws JSException {
        return screenToDocumentPosition(screenRow, screenColumn).getRow();
    }

    /**
     * Sets annotations for the EditSession. This functions emits the
     * 'changeAnnotation' event.
     *
     * @param annotations Required. A list of annotations
     */
    @Deprecated
    public void setAnnotations(JSObject annotations) throws JSException {
        mSession.call("setAnnotations", annotations);
    }

    /**
     * Sets a breakpoint on the row number given by rows. This function also
     * emites the 'changeBreakpoint' event.
     *
     * @param row Required. A row index
     * @param className Required. Class of the breakpoint
     */
    public void setBreakpoint(Integer row, String className) throws JSException {
        mSession.call("setBreakpoint", row, className);
    }

    /**
     * Sets a breakpoint on every row number given by rows. This function also
     * emites the 'changeBreakpoint' event.
     *
     * @param rows Required. An array of row indices
     */
    @Deprecated
    public void setBreakpoints(JSObject rows) throws JSException {
        mSession.call("setBreakpoints", rows);
    }

    /**
     * Sets the EditSession to point to a new Document. If a BackgroundTokenizer
     * exists, it also points to doc.
     *
     * @param doc Document to add.
     */
    @Deprecated
    public void setDocument(JSObject doc) {
        mSession.call("setDocument", doc);
    }

    @Deprecated
    public void setFoldStyle(JSObject style) {
        mSession.call("setFoldStyle", style);
    }

    /**
     * By default, the editor supports plain text mode. All other language modes
     * are available as separate modules. Mode should be provided like this:
     * <code>"ace/mode/javascript"</code>
     *
     * @param mode Required. Mode to set.
     */
    @Deprecated
    public void setMode(String mode) {
        mSession.call("setMode", mode);
    }

    /**
     * Sets the new line mode.
     *
     * @param newLineMode Required. The newline mode to use; can be either
     * windows, unix, or auto
     */
    public void setNewLineMode(String newLineMode) throws JSException {
        mSession.call("setNewLineMode", newLineMode);
    }

    @Deprecated
    public void setOption(String name, Object value) throws JSException {
        mSession.call("setOption", name, value);
    }

    @Deprecated
    public void setOptions(Map<String, Object> opList) throws JSException {
        for (String name : opList.keySet()) {
            this.setOption(name, opList.get(name));
        }
    }

    /**
     * Pass in true to enable overwrites in your session, or false to disable.
     *
     * @param overwrite Pass in true to enable overwrites in your session, or
     * false to disable.
     */
    public void setOverwrite(Boolean overwrite) throws JSException {
        mSession.call("setOverwrite", overwrite);
    }

    /**
     * Sets the value of the distance between the left of the editor and the
     * leftmost part of the visible content.
     *
     * @param scrollLeft Required. The new scroll left value.
     */
    public void setScrollLeft(Integer scrollLeft) throws JSException {
        mSession.call("setScrollLeft", scrollLeft);
    }

    /**
     * This function sets the scroll top value. It also emits the
     * 'changeScrollTop' event.
     *
     * @param scrollTop Required. The new scroll top value.
     */
    public void setScrollTop(Integer scrollTop) throws JSException {
        mSession.call("setScrollTop", scrollTop);
    }

    /**
     * Set the number of spaces that define a soft tab; for example, passing in
     * 4 transforms the soft tabs to be equivalent to four spaces. This function
     * also emits the changeTabSize event.
     *
     * @param tabSize Required. The new scroll top value
     */
    public void setTabSize(Integer tabSize) throws JSException {
        mSession.call("setTabSize", tabSize);
    }

    /**
     * Sets the undo manager
     */
    @Deprecated
    public void setUndoManager(JSObject undoManager) {
        mSession.call("setUndoManager", undoManager);
        mUndoManager = new UndoManager(undoManager);
    }

    /**
     * Enables or disables highlighting of the range where an undo occurred.
     *
     * @param enable Required. If true, selects the range of the reinserted
     * change
     */
    public void setUndoSelect(Boolean enable) throws JSException {
        mSession.call("setUndoSelect", enable);
    }

    /**
     * Pass true to enable the use of soft tabs. Soft tabs means you're using
     * spaces instead of the tab character ('\t').
     *
     * @param useSoftTabs Required. Value indicating whether or not to use soft
     * tabs
     */
    public void setUseSoftTabs(Boolean useSoftTabs) throws JSException {
        mSession.call("setUseSoftTabs", useSoftTabs);
    }

    /**
     * Identifies if you want to use a worker for the EditSession.
     *
     * @param useWorker Required. Set to true to use a worker
     */
    public void setUseWorker(Boolean useWorker) throws JSException {
        mSession.call("setUseWorker", useWorker);
    }

    /**
     * Sets whether or not line wrapping is enabled. If useWrapMode is different
     * than the current value, the 'changeWrapMode' event is emitted.
     *
     * @param useWrapMode Required. Enable (or disable) wrap mode
     */
    public void setUseWrapMode(Boolean useWrapMode) throws JSException {
        mSession.call("setUseWrapMode", useWrapMode);
    }

    /**
     * Sets the session text.
     *
     * @param text Required. The new text to place
     */
    public void setValue(String text) throws JSException {
        mSession.call("setValue", text);
    }

    /**
     * Sets the boundaries of wrap. Either value can be null to have an
     * unconstrained wrap, or, they can be the same number to pin the limit. If
     * the wrap limits for min or max are different, this method also emits the
     * 'changeWrapMode' event.
     *
     * @param min Required. The minimum wrap value (the left side wrap)
     * @param max Required. The maximum wrap value (the right side wrap)
     */
    public void setWrapLimitRange(Integer min, Integer max) throws JSException {
        mSession.call("setWrapLimitRange", min, max);
    }

    /**
     * Returns the current Document as a string.
     *
     * @return the current Document as a string.
     */
    @Override
    public String toString() throws JSException {
        return (String) mSession.call("toString");
    }

    /**
     * Toggles all the folds.
     *
     * @param tryToUnfold true if unfold the folded regions.
     */
    public void toggleFold(Boolean tryToUnfold) {
        mSession.call("toggleFold", tryToUnfold);
    }

    @Deprecated
    public void toggleFoldWidget(JSObject toggleParent) {
        mSession.call("toggleFoldWidget", toggleParent);
    }

    /**
     * Sets the value of overwrite to the opposite of whatever it currently is.
     */
    public void toggleOverwrite() throws JSException {
        mSession.call("toggleOverwrite");
    }

    /**
     * Same as getUndoManager.undo(true)
     */
    public void undo() throws JSException {
        mUndoManager.undo(true);
    }

    @Deprecated
    public void unfold(Object location, Boolean expandInner) {
        mSession.call("unfold", location, expandInner);
    }

    /**
     * Reverts previous changes to your document.
     *
     * @param deltas Array of deltas
     * @param dontSelect true to disable selection.
     * @return
     */
    @Deprecated
    public JSObject undoChanges(JSObject deltas, Boolean dontSelect) {
        return (JSObject) mSession.call("undoChanges", deltas, dontSelect);
    }
}

redpajama_set_name: RedPajamaGithub


Liverpool have claimed that Fan X sexually assaulted 2 different female stewards at 2 separate matches - only days apart. The actions were lewd, crude and morally & physically repulsive. That it happened isn't in much doubt. Whether it was Fan X who committed the incidents, in question, is.
And so leads us to an intriguing tale of a claim of racial discrimination against the club, of the club denying deliberately destroying video evidence, banning Fan X indefinitely from attending matches and - at best - a hugely flawed investigation by Liverpool Football Club.
This is a break from the usual type of journalism that Football And The City undertakes and marks our first foray into investigative journalism.
Liverpool FC have provided a statement to Football And The City (FATC,) Kick It Out have said they will provide me with some form of clarification in their involvement but that it would be after publishing, the IFO have provided details on how their investigation was run and SOS & the FSF have provided answers to several questions I sent to them about their experiences and their involvement in the case.
I have also spoken with Fan X for a total of at least 15 hours in the course of my investigation. He has remained consistent in his reading of the case against him. He cannot be identified publicly whilst the case is ongoing. He has however provided a few words for the end of this piece. His time has been invaluable and has allowed me a deep understanding of the inner workings of this case. The same goes for all of those I have spoken with.
I have been privy to the knowledge contained in other documents and materials relating to the case that weren't in the IFO report (as have all of the above bodies.) These documents cannot be made public yet until the racial discrimination complaint has been dealt with. What I can say is that they cast yet further doubt on Fan X's alleged guilt.
As the case is still ongoing I cannot include certain names in this article - other than those whose names have already been made public relating to the case.
Aside from the statement Liverpool have provided to FATC, I was told by the club that they were going to review their appeals' procedure. They have also reinstated Fan X's season ticket which implies heavily that they have their own grave doubts as to his guilt.
Kick It Out are involved but, at the time of writing, I haven't been able to ascertain with absolute clarity what their level of involvement is, other than in general terms.
On 22 September 2018 at the Southampton match an experienced female steward at Gate D reported that a male described as "mixed race" asked to be searched by a female and that during the search he "was moving his body towards me trying to push me back". While searching his right leg, "that was when he tried to put his clutch (sic) near me". No report on the incident was submitted at the time and the steward commented "I just carried on doing my job". The incident assumed significance only in the light subsequent events.
A young female steward still in training was deployed at Gate D and was engaged in searching a party of three males, one of whom "proceeded to open his arms and push me against the wall". She reported that he then "turned round, bent over in front of me laughing" and when searching his ankles "he thrusted (sic) his crotch in my face". She gave no description of the man in the original Incident Report Card and this was supplied by the male steward working with her, as "black…wearing a black zip jacket and black baseball cap". The steward was clearly distressed by the incident and requested deployment to another zone. At the next home game, against Manchester City, the Ticketing Investigation Manager met with her in the company of the Club's Safeguarding Officer and she gave further details. The person was now described as "mixed race, possibly of African origins…no facial hair and his head was partially covered with a sports cap…wearing a dark hoody top and jeans". A police officer was summoned to the meeting, who advised that a potential crime had been committed and a crime incident number was recorded. The steward later decided not to pursue police action, preferring the Club to deal with the incident.
The IFO state explicitly that the club did not know the identity of the man involved at this stage. At the next Liverpool home match, at Anfield, the ticketing investigation officer positioned himself at Gate D, deploying the same male steward who was witness to both events in the hope of a positive identification of the perpetrator of both incidents.
In fact, the complainant approached the Manager to thank him for some previous assistance with a ticketing problem and after this conversation the steward confirmed that the complainant was indeed the man who had been involved in both incidents.
This was sent, in a letter dated 16th October 2018, to Fan X. They advised him that he had 10 days to appeal.
He also conveyed an apology to the steward saying that "there was no intention to offend, disrespect or belittle".
The incident assumed significance only in the light (of) subsequent events………….
I first came across this case on Twitter, of all places. I've been mutually following a club called Mersey Royal for some time & their sister club Mersey Royal Girls. A number of non-club tweets started appearing that caught my eye.
The words Liverpool & racism immediately rang alarm bells. I delved a little deeper. I found that Fan X had had his season ticket rescinded for "an indefinite period" and that he felt it was a case of mistaken identity. He also felt that he had been picked out simply because he was black.
I have shouted and been ignored.
I am left to walk alone!
This is not foundations on which is LFC is built!
@PeterMooreLFC @John_W_Henry is there any wonder there is so few black supporters at Anfield when there is employees if the club who treat us like animals, and it is so difficult to get a response from the clubs hierachy!!
When I asked Liverpool about whether Fan X had put in a case of racial discrimination against the club, they only acknowledged that Kick It Out were now involved in the case.
Fan X is a well-respected educator & heavily involved in his own community. His background is whiter than white (if you'll excuse the expression) and has no criminal record of any kind. His professional and personal reputation were crucially at stake in this case.
As the Southampton incident may or may not have been worthy of inclusion, there is little point in covering it in depth. And so I'm going to focus on the Chelsea incident, which is pivotal to the entire saga.
Fan X has, at every stage, always protested his total innocence. He has always maintained that this was simply a case of mistaken identity. He didn't even have the full facts of the case until he put in a data access request to the club. At the time that Liverpool held the appeal meeting, he hadn't been given the facts of the case. That bears repeating - he hadn't been given the facts of the case. He was also not involved in any part of the appeals' process & was constantly rebuffed in his attempts to have a meeting with the club.
It was only when he got his data archive back from the club that he realised the severity of the accusations.
Only he wasn't - that was the point. They had essentially held a kangaroo court, behind closed doors, with no chance of Fan X being able to state his own case properly.
You can understand why Liverpool wanted to deal with the matter quickly. This was a serious allegation & in the climate of the "Me Too" movement, the club had to be seen to deal with this swiftly. The problem is that most of the facts pertaining to the case seem to reflect that they had got the wrong person but, perhaps, thought that the Vandermonde-like secrecy would see them through it all.
Why am I convinced that Liverpool realised that they had the wrong person & that Fan X wasn't the perpetrator? They reinstated his season ticket after the IFO ruling was released publicly and it was printed, more or less verbatim, in a local newspaper. There is no way, in a million years, that if the club thought that they had the right person they would have done this. He wouldn't have been let within a thousand miles of Anfield.
Fan X has sworn to fight this until the bitter end - until he feels that justice has been served and he has been completely exonerated. He requested a meeting with Liverpool CEO, Peter Moore. He wanted this as he felt that the Ticketing Investigation Officer was covering his tracks. When this was denied he hand-delivered a letter, dated Wednesday 19th December, 2018, to the club, addressed to Moore, with a request of a couriered receipt. I asked Liverpool if this was the first Peter Moore knew about it, but they declined to comment.
There are so many inconsistencies in Liverpool's own investigation into this matter, that it stretches the bounds of incredulity.
There is a handwritten entry which records (presumably from CCTV) "1953 hrs male from D turnstile Block 306". If the person so identified was the perpetrator then the timings would fit - entering at 19.50 and hurrying to the Kop because the match had started and reaching his seat three minutes later. Yet in the Club's own data report the complainant did not enter till 19.57.
Here Will Rivard explores everything wrong with the Liverpool internal investigation into the accusations of sexual assault on a female steward by Fan X.
The Club stated that there was no CCTV of either incident because cameras at the entrances are trained on the surrounding area not the turnstiles themselves.
The complainant was both surprised and disappointed at the outcome. He supplied the IFO with photographs of cameras installed near his seat and expressed disbelief that he couldn't be found in a single image.
In the papers for the internal panel it is stated that "CCTV images…show him arriving on the stadium concourse in the company of one other person".
The Club has explained to the IFO that this was inconclusive in the context of the case and thus of no evidential value. The Club denies that it has deliberately discarded visual evidence and maintains that it has operated within the requirements on data protection regulations.
The last point is very curious - they deny deliberately discarding the visual evidence.
When I spoke with the club, they said something along the lines of CCTV regularly being wiped in accordance with data regulations.
Again - if the club claimed to have CCTV images showing Fan X arriving on the concourse of the stadium and genuinely believed he was the perpetrator of a sexual assault on their own staff - why would they not have kept this?
The complainant asserts that the timings prove his innocence, a claim disputed by the Club.
So, even by their own timed records, it seems that Liverpool have no basis for the claims made against Fan X.
Both witnesses to the Chelsea incident state that the man wore a baseball cap and one of them says he wore jeans. The complainant denies that he ever wears either to a match and always wears a track suit (which was his garb when he met with the IFO). The complainant challenges the Club to find an image of him wearing a baseball cap at any match he has ever attended.
The complainant also queries the report of the steward at the Chelsea match who describes him as "male season ticket holder" who was often a late arrival. The complainant asks how the steward knew these things, when at the time the complainant had not yet been identified.
Precisely. How did the steward know this when Fan X hadn't actually been identified at this point?
Witness A confirmed that they were late and were in regular contact with the complainant by phone and when they arrived, the complainant "took my lad in I ask him for a bit of help as I didn't know what to do with the card, and they waited for me…there was NO stewards, then we ran up stairs".
Witness B reported that the complainant "was calling us to see where we was as we was ten minutes late the game had already kicked off before we got in he was waiting for us outside the ground, we went in with no search".
The record of the complainant's telephone calls corroborates both his and the witnesses' accounts; he was clearly making calls immediately before, during, and for four minutes after the time of the incident with the steward.
There were no calls between 19.52, which suggests that by then his friends were either at or close to the stadium, and 21.47. These statements and evidence support the complainant's contention that he entered the ground at 19.57 and hence could not have been the person who accosted the steward at 19.48 and then went straight through the turnstile.
The club's own records show that his Season Ticket was tapped in at 19:57. And yet a witness statement for the club maintain that after the assault at 19:47, he made his way directly to the turnstile.
There is basically no way that he could have been the perpetrator.
1. In light of the IFO report, are you going to review your appeal's process?
2. How do you explain the discrepancy in the timings given by Fan X, the steward and your club's own Fortress system in relation to the incident at the Chelsea match?
3. How can you explain the lack of CCTV evidence of Fan X, given that there is a camera directly pointing at his seat? Specifically in relation to the fact that Fan X believed this would have exonerated him completely.
4. Did your Ticketing Investigation Officer inform Peter Moore of the ongoing situation before receipt of the courier letter (to Peter Moore from Fan X) before the 19th December?
5. Do the club still believe Fan X is the perpetrator of the incidents & if not, at what stage did you realise you had pinned it on the wrong person?
A) The appeal team was in full knowledge that they hadn't released any information to Fan X of why Fan X had been banned in the first place?
B) Why wasn't Fan X allowed to attend the appeal hearing?
7. If you do believe that Fan X is the perpetrator, then why was their season ticket restored?
9. Do the club feel that the ban was racially motivated? Do the club feel that racial discrimination has occurred? Why are Kick It Out involved?
10. How does the club plan to compensate Fan X if he has been exonerated?
11. What steps will the club take to ensure this sort of situation doesn't occur again?
"Liverpool Football Club has an obligation to investigate any and all allegations of inappropriate behaviour.
Any such allegations are taken extremely seriously which, where appropriate, can lead to action being taken up to and including a lifetime stadium ban.
"We provide an appeals process to ticket holders and encourage those who are not satisfied with the outcome to take their case to the Independent Football Ombudsman.
I would be keen to stress that Liverpool also clarified that they will be reviewing their appeal's process in line with the various involved bodies' recommendations.
Spirit Of Shankly are the Liverpool supporter's union. I spoke with Jay McKenna - the chair of SOS. Jay is helping Fan X on behalf of SOS.
FATC: What do you make of the case & how did Spirit Of Shankly get involved?
JM: We were (aware) of an issue after we had a message from Fan X but we became fully aware of the extent of the case and the issues involved after the decision of the IFO was announced this year. I contacted Fan X and had an in-depth discussion about what had occurred and I've spoken regularly with them since, about current progress, seeking to try and help resolve this issue and ensure similar doesn't happen again.
For Spirit Of Shankly, the case highlights very serious problems and concerns with the way investigations at LFC are handled but sadly, this is not the first time we have seen problems for supporters. Whilst no other cases we have been involved with have been in similar circumstances, there are similarities in the problems with the investigation process, letters sent to supporters, lack of evidence and inconsistencies. That fan X has had to go through this, and to such lengths, to seek any kid of resolution that is close to being just, is concerning and frankly unacceptable.
FATC: How do you feel that Liverpool have handled the case?
JM: It would be an understatement to say badly. We are aware of the details of the case and the evidence, as the IFO alludes to, points to serious failings in how this has been handled from start to finish. It's clear that the club have made mistakes and they should be looking to get to the bottom of these and rectify them so this does not occur again. But at the same time, they need to bring this to a reasonable and amicable resolution with the supporter concerned. From our understanding this hasn't yet happened, despite offers to do so, and it brings frustrations and does nothing to help supporters feel confident in the systems or processes in place.
It seems that the club don't appreciate how they do things can have a big impact on an individual and the wider supporter base. Taking someones ticket is a serious sanction, they don't quite appreciate how that feels to a supporter, particularly when there is alleged wrongdoing that the person is innocent of. The supporter has had to go through all the stress and angst and suffer, yet at the end is just expected to move on. That's not very fair.
As worrying for me is that in investigating this issue and identifying the wrong supporter, the actual person involved has not received any sanction and the lack of evidence would suggest they no longer will. As well as a duty of care to supporters, the club have one to the member of staff who reported such an incident. In how they have handled this, they've failed both supporters and their own staff.
FATC: What do you think LFC need to do to resolve this case fully?
JM: The club needs to be honest about its failings and seek to make amends with the supporter. We've offered to sit down with the club and the supporter, and independent mediators if necessary, to discuss what has happened, understand what both sides are saying and agree next steps and an outcome that is suitable for all sides. That hasn't been taken up and what we seem to have now is a supporter complaint, a very serious one, about what they feel has occurred, which he is told is being investigated and reviewed and the supporter not being aware of the parameters of such an investigation, any time tables for resolution and any possible outcomes. They are left waiting when it is not they who have done anything wrong. The lack of information at times, and one-way nature of communication, breeds further frustration.
They need to tell the supporter what they are investigating, who is doing it, when they will hear. They need to clearly apologise – not a call or email but a letter like the very serious one the supporter received in the post at the beginning that acknowledges what they got wrong. And the supporter needs to return to the same place they were at in the beginning of this process, no worse off ticket wise or financially. If they can't acknowledge or rectify their mistakes, it does need to enable supporters to trust that it won't happen again or that the club understands.
FATC: What safeguards do Spirit Of Shankly feel the club need to put in place to ensure this sort of thing never happens again?
JM: The club needs to urgently reviews its processes and practices, and if necessary, the culture that allows things like this to happen. This isn't the first case were there have been failings to investigate, provide evidence, or even apologise when they get it wrong. We've spoken with the club several times over the past 12 months, making them aware of these issues and ways to fix them. We've offered to work in conjunction with them to do so but that has stalled and not really got going again. We've approached them again recently, about other cases with significant problems, and they have indicated they would look to improve and work with us to fix them. This needs to happen sooner rather than later otherwise there will be, sadly, more cases like this.
I spoke with Amanda Jacks - a case worker for the FSF. She is involved in the case on behalf of the FSF.
FATC: How does the FSF feel that Liverpool Football Club have handled the case of Fan X, from the original incident(s) to now?
AJ: As the Ombudsman's adjudication made clear, Liverpool FC have handled this case poorly. However, it wouldn't be unreasonable to say that had this incident arisen at any number of clubs I have little confidence that they would have managed it differently. Too often we see at best a token approach to an "investigation" and even more football clubs acting a Judge, Jury and Executioner.
FATC: How do you feel that LFC should have handled this case?
AJ: In any case where allegations have been made against an individual, the most important thing is to secure any CCTV and take statements from any club staff or contractors who were involved or who witnessed the incident. Then that evidence should be disclosed to the individual (with necessary safeguards to protect the privacy of others undertaken) and allow them to answer the allegations providing their own evidence and witness statements. While there is, of course, no obligation for a private organisation to test a case to a criminal standard I don't feel it is unreasonable for a club to apply to natural tenets of justice to cases. It's also important that those responsible for deciding the outcome consider that just because somebody works for the club it doesn't necessarily make them wholly reliable; I say this since there is a tendency throughout football to place more onus on what their staff/contractors tell them over and above what the supporter may say.
FATC: What safeguards do LFC need to put in place to ensure that this type of situation never happens again?
Any club needs to be aware of the possibility of an Ombudsman's report or even, in worse case scenarios, legal action so they need to be as thorough as they possibly can be. They should have in place a clear and transparent sanctions and appeal process that ideally includes external people. A club ban is often a two fold punishment - as well as being barred from following their side it's also a de facto financial penalty since they will probably not be refunded for missed games.
FATC: What is the FSF's involvement in the case?
We have been supporting the supporter concerned while working towards a realistic and satisfactory outcome for him.
I wrote to Professor Derek Fraser - one of the ombudsman who compiled the IFO report. Whilst he couldn't comment on the specifics of the case, for obvious reasons, he was kind enough to provide me with an explanation as to how the IFO undertook their investigation.
"When a complaint is submitted, the IFO asks for a report from the Club and requests the complainant submit further evidence. In this case, as the report makes clear, both parties submitted extensive dossiers of information.
In many cases the IFO is able to come to a determination on the basis of the written evidence alone. Given the seriousness of the accusation and the potential impact on the complainant's professional standing, I deemed it right to meet with both parties personally on the same day, but separately, again as made clear in the report.
Thereafter, there was a detailed evaluation of the evidence by myself, the Deputy Ombudsman and the IFO Advisory Panel. As you will see there were witness statements submitted to the IFO and additional evidence, such as phone records.
The reality is that we will probably never know if this was a case of racial discrimination or if it was just a genuine case of mistaken identity.
What we do know, however, is that Liverpool have bungled their investigation in a major way. IFO reports don't tend to be this damning and cast such major doubt on a series of unfortunate events. At the very least it looks like an employee (maybe employees) of the club, in their efforts to act swiftly, picked out a random black guy. The club told me that the C.C.T.V. tends to get wiped in line with data regulations - fair enough.
However you do wonder - when they felt that a serious incident of sexual assault against a female steward had occurred - why exactly they wouldn't have kept every scrap of video evidence available to them. Perhaps they genuinely had none.
Which leads to a further problem - how did they get the exact time of Fan X's entry into the stadium? Even the IFO stated this was "presumably from CCTV." And so this leads back to the idea that if they had CCTV, why would they wipe it when such a serious allegation had been made against Fan X?
Should this not have been a matter for the police?
The steward said that she wouldn't want this reported to the police and would prefer for the club to handle it. But surely the club should have a duty of care to their staff & if a serious sexual assault had occurred, you would have thought they were at least morally obliged to get the police involved. There is evidence pointing towards claims of police involvement, but again cannot be revealed whilst the case is ongoing.
There is no CCTV (despite the IFO assuming there must have been for the club to get pinpoint timings,) the club's own timings of the Chelsea incident differ wildly, the description didn't fit Fan X (other than the fact that he is black,) the witness statements on behalf of Fan X completely corroborate his version of events too. The club have denied deliberately destroying video evidence.
In my investigation of this, I've spoken with everyone involved and have come to the conclusion that whilst this may not have been racially motivated, per se, it has been a series of catastrophic failures towards one of their own fans that has made his life a living hell.
This kindly teacher who organises for groups of school-children to go to games had to take time off work due to the stress of the allegations.
The club (in their own statement to FATC) have said that it wouldn't be appropriate for them to comment whilst a specialist (and independent) body are reviewing case. The problem with this is that they have brought Kick It Out to look into it. Kick It Out (as per their website) don't actually undertake investigations - they merely provide support and guidance; if they feel it is necessary they pass it onto the relevant investigatory bodies.
I have. That's the point. Evade. Brush off. Hope it goes away.
This is a shameful episode from Liverpool Football Club. The IFO Report has condemned quite a few elements of the case, the FSF feel that the broken system is always going to discriminate against fans & Spirit Of Shankly have roundly condemned the club's actions from start to finish.
As for me, I think it's a case that is not going to go away for the club in a hurry. When 3 separate, credible, bodies (FSF, SOS & IFO) have either roundly condemned the club's actions or cast major doubts on how the club have approached the whole sorry affair, then people really should start listening.
That includes Liverpool Football Club.
As for Fan X - I hope he gets the justice he deserves on this.
What it boils down to essentially is this: Liverpool Football Club have, at best, bungled an investigation so catastrophically that they have allowed the perpetrator of two sexual assaults on female stewards go completely unpunished whilst basically pinning it on a random black man.
Additional words by Will Rivard.
Timeline of events provided by Maia Freeman.


"Simplicity is the ultimate sophistication".
You don't have to be Leonardo Da Vinci to appreciate the minimalist beauty of the Aegean architecture. But, the amazing about the island of Skyros is its cycladic domestic architecture, although it belongs to Sporades group.
You will not find even one house without its white flat-roofed shape and without blue doors and windows. They all climb, one beside other, up to the rocky peak, whitening its slopes. Near the central park of the town (plateia) the pedestrian zone begins with narrow cobblestone roads. Anyone can enjoy his walk in the small shops of "agora" (market place), the tavernas and the coffee-bars under symmetric arches and bright flowers of bougainvillea trees that embrace the white walls and the small balconies.
From there you can go up to the 13th century fortress and the monastery of Saint George or you can walk to the square of the poet Rupert Brooke and the two small museums that are located near, the archaeological museum and the Faltaits museum. The other choice is to wander in the quaint "Chora" (town) where simplicity and beauty meet the ancient Greek myths of Achilleus and Theseus and the former centuries' stories of exile and piracy in an attractive mixture of colors, aromas and folk art.
Πανέμορφο νησί Ιωάννα μου!Ο φακός σου αποτύπωσε , εξαιρετικά, τήν μαγεία τού τοπίου!!
Σ' ευχαριστώ πολύ Dimi μου !!! Είναι από τις λίγες φωτογραφίες που διασώθηκαν μετά το black out του παλιού μου υπολογιστή [σνιφ…] !!! Καλό ΣΚ και σε σένα !!! Πολλά φιλιά !!!
Amazing place! I absolutely love greece.
Skyros island is a really beautiful place !!! Thank you very much for your comment, Marisa !!! My greetings !!!


text:
Youri Tielemans: A Profile
By Adam Nisbet
Adam Nisbet
Living on the emotional rollercoaster that comes with being a Newcastle United fan, Adam also keeps a keen eye on the NBA, UFC and Formula One.
Youri Tielemans is a name that a vast number of footballing fans know… and not for the reason that you would normally expect. The young Belgian has long been touted as a future star, a central midfielder with the potential to be one of the best in the world. For years he has been the ultimate Football Manager or FIFA Career Mode purchase. This is the reason that many fans know his name. This is why so many people are excited to see what impact he can make in the Premier League.
Debut with Anderlecht
Tielemans burst onto the scene in 2013 with his hometown club Anderlecht, making his professional debut at just 16 years old – the fourth youngest player to ever make an appearance in the Belgian Pro League (now the Belgian First Division A). The youngster had come through the ranks as part of the colossal Belgian club's youth system, which he had been part of since 2002 – when he was just five years old.
He made his professional debut as a substitute against Lokeren, replacing the injured Sacha Kljestan. It didn't take long for him to make his presence known in the league, going on to make almost 70 appearances in his first two years, as well as picking up the Belgian Young Footballer of the Year award in his first two professional seasons.
After these two incredibly impressive seasons, especially for a player as young as 18, there was significant buzz around Tielemans. Already we were seeing speculation and interest from a vast number of Europe's biggest clubs, however the Belgian starlet decided to bide his time and remain at Anderlecht to continue honing his game and growing as a player. It's a trap that we see many young stars fall into – having a breakout season, securing a big move, and then being loaned out to various different clubs before ultimately fizzling out.
Breakout Season
Tielemans continued to impress throughout the 2015-16 season, picking up six goals in 36 appearances for the Purple and White. However it was the 2016-17 season in which he really took off, rather than showing glimpses of the potential we all knew he had, it felt like the young star had really arrived.
Tielemans scored 13 goals in 37 games in the Pro League, helping push Anderlecht on to their first title win since his debut season. Alongside this he won a number of individual awards, such as; the Ebony Shoe award (given to the best African or African origin player in the Pro League), the Belgian Professional Footballer of the Year award, and was named in the Europa League squad of the season.
Struggles in France
It was after this season that Tielemans made his long awaited big money move, leaving Anderlecht and heading to reigning Ligue 1 Champions A.S. Monaco for a fee around €25 million. A lot was expected of Tielemans, as Monaco were struggling to hold on to a number of their key players such as Kylian Mbappe and Thomas Lemar.
Unfortunately, his time in France has not provided the same kind of high level and consistent performances that we were used to during his time in Belgium. There have certainly been glimpses of his talent, as he has so far this season scored five goals and laid on a vast number of chances for a struggling Monaco side, however it is telling that a side currently sitting just 19th in the table would be willing to loan out one of their brightest young talents. His struggles have been so bad at times that France Football even went as far to name his as one of their biggest flops of the year.
The loan deal sees Adrien Silva go in the opposite direction, a player who is highly rated by recently reinstated manager Leonardo Jardim. It may be slightly worrying that Monaco were willing to send Tielemans to Leicester in return for a player in Silva that has barely been able to break into the starting XI at the King Power and has only made one start under Claude Puel this season.
The struggles that Tielemans have faced during his time at Monaco cannot be solely attributed to him, it has been a turbulent time for the club overall, and very few players have made it through the past two years with a positive shine. In fact it is entirely possible that a fresh start at Leicester could be exactly what he needs to kickstart his career once more, and return to the form that we know he can produce.
The most important thing to note here is that Tielemans is still only 21 years old – nowhere near his prime – and still has a lot of time to develop.
What can Leicester Fans expect?
Tielemans is a fairly versatile midfielder, during his first year with Anderlecht and subsequently a portion of his time at Monaco the Belgian was deployed as a holding midfielder, a role that he certainly performs well in.
However we have also seen him play further forward, as he possesses a keen eye for a pass as well as an absolute rocket of a right foot. It is this weapon that draws defenders out to him, immediately attempting to close off any chance of a shot, and therefore creating space in behind for Tielemans to tee up one of his teammates. It seems like this style could fit in incredibly well with the play of Leicester's attacking players.
However it is also possible that Puel will choose to play Tielemans in that defensive midfield role, to fill in the gaps where needed, and become the player that Leicester thought they were getting in Adrien Silva.
The youngster could have a huge impact for the former Champions, or his loan spell could somewhat resemble the time Renato Sanches spent in the Premier League with Swansea last season… only time will tell in this case.
What do you think of this signing? Let us know in the comments section below.
For more like this, visit our dedicated football page here. Meanwhile, follow us on Facebook for more opinions and analysis right to your timeline.


Maybe the question should be: Do we expect God's goodness in our lives?
Our answer gives us a hint to whether we think His goodness towards us is dependent on our goodness to Him. So many of us think God's blessings hinge on whether we do the right things.
God replied, "This is who I am, get used to it." That moment broke Graham and brought him to the end of himself and back into Jesus' arms.
I'm not making a theological point that we can do whatever we want and be assured of blessing. What I love in that story is seeing the nature of God. His goodness.
God knew the way to Graham's heart was not through punishment, but through His nature.
Is it possible that we may not see God's nature because our perspective of Him is clouded by lies? And when we believe lies about ourselves or about God we open doors to the enemy's torment, like clouds that block out the sun?
My very first plane ride was to New York City on a foggy, rainy day in December. Once the plane climbed above the clouds my fourteen-year-old brain was shocked to see the sun shining brilliantly above fluffy white clouds.
I wonder if that's how we live sometimes. With demonic entities speaking lies to our minds of stress, fear or anger. Our agreement brings a cloud cover that blocks out the light and truth and goodness of God.
How will we pay the bills this month?
He never does what he says he will.
I'm stuck in a dead end job.
College is so expensive, how will my kids ever succeed?
How can we identify the lie when there may seem to be a good chuck of truth to it? Bill Johnson says it best, "Any thought you have that doesn't inspire hope is under the influence of a lie." Which kingdom are our thoughts in alignment with? Alignment with God's kingdom keeps us in joy and peace and hope (Gal. 5:22-23). When we aren't alignment we can ask God to show us the lie. Sometimes it's obvious. Fear is one of the biggest lies we fall prey to.
To walk in freedom, we need only break agreement with the lying spirit and release it. (i.e. "I break agreements with fear and release it. I choose to stand firm with God as my Victor.") We have the authority when we are connected to Jesus to send lies packing.
Last night it occurred to me that my fifteen year old had been inordinately tired lately. Exhaustion covered his expression and had for a couple days. As Mat and I drove home from a late dinner, I mentioned it to him and just prayed a simple prayer commanding the assignment of exhaustion be broken off him.
Amazing how a simple prayer, walking in our authority as sons and daughters of the Most High King, sends the enemy fleeing.
We don't have to beg God to fix things. We are no longer orphans, but cherished children, walking with all the authority of our beloved Papa.
Dad, I want to walk in deeper intimacy with you. Deep in your heart. I want to understand the mysteries of Your kingdom. Teach me about the authority You've given me and how to take back the ground the enemy has stolen in my life and in my family's lives. I want to walk as a victorious overcomer in Your kingdom, Papa. In Jesus' name, amen.
Your words are inspiring and explain exactly how I feel daily.
I'm so happy to have met you Christina! God has great things in store for you!!