text:
Go to page: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
Pick of the week: Ingenious Jupe's expanding dining table takes £80,000 in New Year opener
The New Year sale at Woolley & Wallis in Salisbury included one of the most desirable and celebrated of all Victorian furniture types: a mahogany 'Jupe's patent' radially expanding dining table.
Halls to auction 400 works from Lloyds Bank collection
Halls of Shrewsbury is to sell more than 400 paintings on behalf of Lloyds Bank in an online sale later this month. The consignment will make up part of a Modern and Contemporary Art online auction, which starts on January 17 and ends on January 31.
Money laundering: art market must begin compliance
The art market must now comply with the latest anti-money laundering law – despite a lack of clarity around some elements of the regulation which came into force last week.
McAlpine signs stolen
Around 24 enamel advertising signs that were part of a private Victorian steam railway on the McAlpine estate at Fawley Hill in Buckinghamshire have been stolen.
Luba staff brings New Year cheer at Gildings' auction
Catalogued simply as an 'African ceremonial tribal spear' and estimated at £200-300, a Luba staff of office sold for an unexpected £18,500 (plus 15% buyer's premium) at Gildings' first sale of the new year in Market Harborough.
Sauce tureens serve up early highlight at The Mayfair Antiques & Fine Art Fair
A pair of George III sauce tureens by Daniel Smith and Robert Sharp was among the early sales on the opening day of The Mayfair Antiques & Fine Art Fair.
Bonhams opens its handbag department
Bonhams has bolstered its luxury division by launching a dedicated handbag and fashion department.
Chinese tariffs 'a disincentive for anyone selling or buying in the US' says Sotheby's
Sotheby's has added its weight to the art market's response against President Donald Trump's imposition of import tariffs on Chinese works of art in the US.
Elstob moves to permanent space in Ripon
Auction house Elstob & Elstob has relocated to larger premises after just a year of trading.
Discover a Battersea wonderland as Decorative fair goes for a theme in homage to the illustrator of Lewis Carroll's work
An original Queen Anne walnut wingback armchair is among the items featured in the showcase foyer at the next Decorative Antiques & Textiles Fair.
Anti-money laundering regulation - the art market must begin compliance
The art market must now comply with the latest anti-money laundering law – despite a lack of clarity around some elements of the regulation.
Two dozen vintage enamel advertising signs stolen from railway on the McAlpine estate
US tariffs on Chinese art "diverts market elsewhere", says Sotheby's
Regent's treat: Rediscovered Prince of Wales portrait sold for €325,000
This rediscovered drawing of the future George IV (1762-1830) is believed to have been owned by his true love Maria Fitzherbert (1756-1837).
Fleamarket find joins the national ceramics collection
A white porcelain sculpture made in the experimental years of the Chelsea factory has been acquired for the national ceramics collection at the Victoria and Albert Museum.
Antiques trade welcomes plan to slash some business rates from April
Trade bodies and dealers with shops have given a collective thumbs-up to the new Conservative government's pledge to slash small business rates by half.
Specialist firm adopts 'live but online' auction selling model
Scientific instruments and photographica specialist Flints Auctions has opened new premises and is launching a fresh type of sale.
Rusting BP enamel sign is The Winner in Welsh sale
Rescued from a skip, a rusting British enamel advertising sign sold for £10,400 (plus 24% buyer's premium) at auction in Carmarthen.
Falangcai enamel bowl heads Paris Asian series at €3.25m
A Yongzheng (1723-35) mark and period falangcai enamel bowl sold for €3.25m (£2.8m) to lead the recent round of Asian art sales in Paris.
Medals earned by a Hardy band of brothers
Peninsular War medals featuring 13 or 14 clasps – showing how many actions the recipient fought in – are impressive enough in themselves. But three of them awarded to brothers who served in the same regiment, offered as a single lot at auction, takes demand to a different level.


I forgot to share these snaps that I took with my phone a little while ago. I bought this lightweight cotton top at a thrift store a while back.
It didn't quite work as a dress and it didn't quite work as a top. I did like the colour (a lovely cornflower blue) and the style of the neckline, though.
I cut a few inches off the bottom and hemmed it, and cut the sleeves short and hemmed them and added elastic to pull them in a little. Voila, a comfy and cool summer top!
Thrift store items are inexpensive and the perfect pieces on which to practise tweaking. If it all goes wrong then you haven't lost much. If it goes right you have an item of clothing that suits you so much better and hardly cost a thing.


cracked glassware, or even crime scene.
Instruction: Press once will continue on.Press again will turn it off.
kingdom hearts keychain can connect the small keys together, thus make it easier to find them, and also promotional keyrings of delicate design can show your taste and characteristics. We provide custom keyrings of different types to suit the taste of different age groups. Simple and plain design of leather key ring for office ladies, cute cartoon pattern of unique keychains for young teenagers, and leather or metal texture of keychain for businessmen. You can always find the one you love.


text:
Rhymes With Aguilera
On February 21, 2001, Eminem and Elton John performed "Stan" at the Grammy Awards. The performance came after nine months of controversy concerning the homophobic lyrics on Eminem's second album, The Marshall Mathers LP, and before the show gay activist groups had protested outside the Staples Center. "Believe it or not, it was my idea to perform with Elton," writes Eminem (with ghostwriting by Sacha Jenkins) in his recent autobiography, The Way I Am. "Elton and me—we're friends … He's gay! And we're friends! And who cares?" To the protesters' relief, Eminem failed to win Best Album that night. He lost to Steely Dan, a band named after a dildo. One song on Two Against Nature is delivered from the perspective of a pedophile.
It wasn't just Elton's homosexuality and Eminem's lyrical homophobia that made the performance so significant. Twenty-five years ago, Elton John was also a white guy in black music. In May 1975, he appeared on Don Cornelius's trendsetting variety show Soul Train to perform "Bennie and the Jets." It was John's first (and only) hit with black audiences, and it was not an anticipated success. MCA had not even planned to release the song as a single, but when radio stations starting picking it up in Detroit—then the epicenter of black musical cool, and home to a two-year-old Eminem—the song went number 1 on the R&B charts. The difference, a quarter century on, was that Eminem planned out his success beforehand. The Marshall Mathers LP is about the public reception of The Marshall Mathers LP; Eminem's best music is almost always about its own cultural place.
Now Eminem has released his sixth album, Relapse, and it is hard to remember how the great white hope of hip-hop could once have provoked such anger and disgust. Along with Marilyn Manson and Britney Spears, Eminem was part of a wave of musicians who briefly turned mainstream pop into something shocking. The three of them complement each other so well it reads like a marketing plan (which it was). Manson was a religious grotesque: his best-selling album is titled Antichrist Superstar. Britney was a sexual grotesque. Eminem, more complex than Britney or Manson, put on a far bigger freak-show. He turned himself into a cartoon version of the whole pop culture, tracing out the moment's tangle of racial confusions and running through celebrity gossip with all the focus of a blogger. His first two albums are like a Rosetta Stone for turn-of-the-century mainstream pop. They make the rest of it make sense.
G.L.A.A.D. and the U.S. Congress never really posed a threat to Eminem's success, but black hip-hop fans did. Vanilla Ice had given them reasons to be skeptical of white rappers. As a teenager growing up in Detroit, Eminem's best friend was a black rapper named Proof, whose violent death outside a nightclub in 2006 sent Eminem into a year of rehab (sleeping pills, among other things) and seclusion. "[Proof] was the only reason I stopped getting my ass whipped," Eminem said. "He was my ghetto pass." Eminem's nationwide ghetto pass would turn out to be Dr. Dre, who heard Eminem at the Los Angeles Rap Olympics and signed him to Interscope in 1998.
Eminem's plan was to conquer the suburbs, and the suburbs offered little resistance. From the opening line of his first hit, "My Name Is," Eminem had his audience pegged: "Hi kids / Do you like violence? / Wanna see me stick nine inch nails through each one of my eyelids?" The fan that many of Eminem's songs imagine is a hyperactive male adolescent who watches TRL and a lot of stupid horror movies. Eminem's music ventriloquizes this kind of listener. Rapping over bouncy, cartoon caricatures of hip-hop beats with a high whine in his voice, he evokes nothing so much as the atmosphere of a middle-school cafeteria. He's even got the cafeteria jokes, which are funny because they're so dumb and blunt: "And Dr. Dre said … / Nothing, you idiots / Dr. Dre's dead / He's locked in my basement." Suburban white kids had been hip-hop fans ever since they figured out what hip-hop was, but Eminem's sales went through the roof because he talked directly to his audience. Tupac and Biggie made whites feel like voyeurs. Eminem put whites at the center. He wears hoodies and do-rags, but he never uses the word "nigga" on record.
Every other offensive word in the language, however, was fair game. Eminem pushed the logic of popular offense to its final extreme, and he was so good at it that pop musicians have now basically stopped trying to offend people. The trick was that Eminem made the performance of his own pop-cultural role the subject of his music. Instead of music about violence, he made music about our awkward, hypocritical relationship with violence. Instead of music with swear words, he made music about the moralizing around bad language. He summed this up best on "The Real Slim Shady," where he rapped, "Will Smith don't gotta cuss in his raps to sell records / Well I do, so fuck him and fuck you, too." Lynne Cheney's public campaign to persuade record companies to censor their own products was prompted by the opening lines of "Kill You," the first song on The Marshall Mathers LP: "Slut, you think I won't choke no whore / Till the vocal cords don't work in the throat no more?!" At one point, Cheney made the argument that Eminem's music eroded First Amendment rights by "ironically" convincing "good citizens" that government regulation of the entertainment industry was appropriate. It's a measure of Eminem's success that Cheney was forced to attack him for his irony.
What Eminem and Dre didn't bet on was that a previous generation already knew more than enough about shocking music. Parents may have hated Eminem at first, but it wasn't long before they began to feel a satisfying adolescent shiver—this was the kind of music they had grown up inflicting on their parents. By the end of 2002, as the media buzz surrounding his 'not' autobiographical film 8 Mile was getting louder, Eminem began to attract some weirdly respectable fans. Frank Rich wrote a cover story for the New York Times Magazine in which he asked, "Could it be that in just two years the scourge of bourgeois values is now entering the American mainstream?" As one of the ushers, Rich was in a terrific position to lead the way.
Rich made the argument, one of many in a growing chorus of mainstream columnists, that there was more to Eminem than violence and bad words, that if you cleared away the teenage venom you would find hip-hop's great (and only) redeeming trait: social consciousness. "[8 Mile] makes a credible case for hip-hop as a positive social good," he wrote. "After all, the rap battles that form the crux of the film … make the legitimate point that it is a rapper's imagination that counts most in hip-hop success." It's hard to figure out how something as personal and intangible as imagination counts as a social good, but the code word had been dropped.
Other middle-aged converts were not so serious. "A gaggle of my girlfriends are surreptitiously smitten with Eminem," Maureen Dowd wrote in a column called "The Boomer's Crooner." "They buy his posters on eBay." Paul Slansky described the new audience of Eminem fans in the New York Observer:
You're middle aged, you have a fabulous wife and kid, you see a shrink, you really should lose 15 pounds, you think Albert Brooks is funny and Billy Crystal is not … And sometime in the past couple of years, you had your Eminem moment.
In part, Slansky is using music like teenagers use music—as a way to reinforce finely calibrated social distinctions ("Albert Brooks is funny and Billy Crystal is not"). This music, he's arguing, is not for every adult. It's for the ones who are cool enough to get it. Slansky went on to write a New Yorker quiz on Eminem, which taught me that Charles Barkley—not Chris Rock—was the one who said, "You know it's gone to hell when the best rapper out there is a white guy and the best golfer is a black guy." He might have said that you know it's gone to hell when, as Slansky wrote in the Observer, parents "drop off the kids, roll down the windows, and blast Eminem on the way home."
Eminem didn't make hip-hop palatable to suburban kids; he made hip-hop palatable to suburban parents. It's not as though Eminem's lyrical content was anything new in hip-hop—a lot of gangster rap is more serious, and much scarier—but Eminem enunciated so well. Pronunciation was part of his whiteness. He literally made rap intelligible to the people who had always hated it. The baby boomer generation grew up using culture to make authority figures angry, and four decades later Eminem made it possible for their children to do the same. Then, to the entertainment industry's delight, the offended fogies began to listen to the music, and remembered that they liked culture that pushed their buttons.
Eminem's biggest challenge on Relapse is addressing an audience who no longer think he's offensive. The rapper's been out of the pop culture mix for four years, and his celebrity insults come in a little behind the times. There are jokes about Sarah Palin, who is no longer in danger of becoming Vice President. There are jokes about Lindsay Lohan and Samantha Ronson, who are no longer dating. There is an entire verse devoted to Christopher Reeve, who's been dead for half a decade.
Eminem's not completely unaware of the problem. In recent interviews he has claimed, a little anxiously, that he only goes after people whose names rhyme with a lot of other words. (He told Jimmy Kimmel that Jimmy Kimmel doesn't really need to worry: nimble, cymbal, and thimble isn't a list that screams potential.) That argument doesn't hold up too well. "Aguilera" doesn't rhyme with much either, but Eminem attacked her along with almost every other late nineties pop star because that's who he used to share the airwaves with. His new claim is just a subtle way of admitting that he doesn't know the landscape like he used to. (It's worth putting this in some kind of perspective: Eminem is still the most attended-to rapper on the planet, and Relapse is the fastest-selling album of 2009.)
What he does still know is how to rap. Eminem once characterized his obsession as literally autistic: "I have a fascination with the movie Rain Man, hence my song 'Rain Man.' … What it meant was, this is all I know how to do: rap." Along with fame and family, rap is one of Eminem's favorite subjects; it also happens to be the one that makes him most perceptive:
And since birth I've been cursed with this curse to just
Curse, and just blurt this beserk and bizarre shit that works,
And it sells, and it helps in itself to relieve all this
Tension, dispensin' these sentences getting this
Stress that's been eatin' me recently off of this
Chest, and I rest again peacefully.
That's from a song called "The Way I Am," and it's really hard to do. Eminem's greatest talent has always been the ability to hone in on two or three isolated sounds without abandoning the natural rhythms of everyday language. His best lines sound so much like talking that you don't notice the constricted phonetic range he's working with ("tension, dispensin' these sentences").
Critics have written that the biggest problem with Relapse is that Eminem's jokes are lame, but all of Eminem's albums have included stale humor: rape fantasies with Dr. Dre, a slobbering homosexual named Ken Kaniff, fart noises. What makes Relapse so boring to listen to are Eminem's rap mechanics. Trying to compensate for his diminished relevance, Eminem leans too much on his own technique. Almost every line on the record showcases an exhausting tangle of improbable rhymes, and while this kind of thing can be dazzling in thirty-second spurts, it's exhausting when it lasts five minutes. Here, for example, are the opening lines of "We Made You," the album's first single:
Back by popular demand
Now pop a little Zantac or antacid if you can
You're ready to tackle any task that is at hand
How does it feel, is it fantastic? Is it grand?
Well look at all the massive masses in the stands…
And on and on and on. It takes talent to do it, but who cares? Who ever says "massive masses"? Eminem raps well on Relapse, but he used to rap so well you almost couldn't tell he was rapping: "Hi kids, do you like violence?" (The other problem with Relapse is Dr. Dre. As a producer, the master has completely lost his touch. Eminem raps over beats that sound like a hip-hop soundtrack to Scooby-Doo.)
The best rap happens when a rapper's flow and a rapper's personality are in complete agreement, when psychology and phonetics converge. On their own, things like maturity and political consciousness have no bearing on whether a song is good or not. This is why Killer Mike and T.I. are great rappers while Common and FloRida are not. The problem with Relapse isn't that Eminem has failed to grow up. (Actually, the record contains some rather complex reflections on his addiction.) The problem is that Eminem the rapper smothers Eminem the persona. There are a few songs where he relaxes—never quite enough, but it's a start—and these are the record's best tracks. One of them is "Déjà Vu," where Eminem lays out a verbal diagram for how to fall off the wagon. Early on, when he can still remember things, he raps:
And maybe if I just drink half I'll be half-buzzed half the time
Who's the mastermind behind that little line?
With that kind of rationale I got half a mind
To have another half a glass of wine. Sound asinine?
Perceptive as this is, it's not the introspection that makes the verse work. It's the way Eminem tosses off the final non-rhyme, "Yeah, I know." As a conversational aside, it makes him sound like a person who's been through addiction; the rest of the verse makes him sound like a person who came up with a word puzzle about addiction. And that, in the end, is the difference between virtuosity and greatness. It's only when Eminem simplifies that you can actually hear him speak.
What You've Done to My World
Qualify Your Buyer
Must We Mean What We Say?
Charles Petersen
It was hard to find things to masturbate to if you weren't ready to admit…that you were a disgusting pervert.
Wesley Yang
History happens to the composers of the book's first half; by the second half, it seems to have left them.
Developing Variations
Nikil Saval
I resist the interpretation of Britney as a Site of Resistance. I resist the interpretation of her as something worthwhile.
A Hot Dog Wearing Versace
Carlene Bauer
Hip-hop is a music before it is a sociological lens, an urban newscast, an adolescent fantasy, or anything else.
Issue 12 Conversion Experience
In the last decade, no organ of music criticism has wielded as much influence as Pitchfork
Gun Violence and the War on Terror
My mom sent me a text message which read: "Such thrilling news, but sobering, too, as counterattacks are anticipated."
Ground Zero, May 1, 2011

redpajama_set_name: RedPajamaCommonCrawl


The amazing Angel Payne is rocking the summer with #SummerofCimarron and it's happening through September 1st!
#INTOHERFANTASIES will be 0.99 until September 1!
--Stay tuned for more Angel fun with our #SummerofCimarron spokesman, the epic Vikkas Bhardwaj!!


Give it to someone who: is moving, is yoga-obsessed, is starting something new, is in need of good vibes only.
Step 1: put the herbs, crystal, palo santo, and whatever else you're bundling together in a way that will be easily wrappable.
Step 2: wrap the twine tightly around the bundle several times, leaving enough length at the ends to tie a knot.
Step 3: Remove the St Christopher medallion from the chain and attach it to one end of the twine. Tie a knot so that it's attached, face up, at the front of the bundle.
Step 4: Cut the extra length.
Step 1: Take a look at the collar. Can you attach the medallion directly to it? Most collars have a silver jump ring- the thing that the name tag is hanging from. If that's the case, just remove the medallion from the chain and slip it on!
Step 2: If it doesn't have the jump ring (like ours) then you might still be able to slip it on somehow, or you can cut the chain to a keychain length with just regular scissors. Slip the medallion onto the cut chain and then attach it to the collar.
Give it to: anyone you're giving a gift to who deserves a bonus gift!
Step 1: Prepare your gift to be wrapped.
Step 2: Flatten out a piece of newspaper with NO BAD NEWS on it (v important- we chose the comics section!) and place your gift box, upside-down, right in the middle.
Step 3: Tape one flap of newspaper onto the middle of the box.
Step 4: Cut the opposite flap so that they're even and then tape that one overtop the other.
Step 5: Fold each end of the newspaper into triangles and tape down so that the gift is wrapped nice & tight.
Step 6: Tie the string or twine around the gift in whichever way you'd like, leaving length at the ends to tie a bow.
Step 7: Remove the medallion from the chain and slip onto one end of the string. Tie it in a bow and slide the tree cutting underneath for an extra natural touch. Trim the ends if necessary.
Meaningful gifts make the best gifts :) Happy holidays from us here at Get Back!


Great Christmas Decorations Popular Christmas Decor is just one of the many collections of best interior design ideas Reference that we have on this website. We have a lot of best interior design ideas or wall decorating and any other things concerning in this website. We're not just providing info about , but , you can get a lot more reference to create your dream home as well. So , don't forget to keep visiting eldiariodelanovia.com to get the latest update about best interior design ideas , wall decorating ideas , Sample home design and more.
Great Christmas Decorations Popular Christmas Decor was posted in February 22, 2017 at 3:57 am. Great Christmas Decorations Popular Christmas Decor has viewed by 44 users. Click it and download the Great Christmas Decorations Popular Christmas Decor.
Christmas, Country Christmas Home Decor was posted March 27, 2017 at 12:20 am by eldiariodelanovia.com . More over Country Christmas Home Decor has viewed by 5313 visitor.
Christmas, Themed Christmas Wreaths was posted March 14, 2017 at 7:16 pm by eldiariodelanovia.com . More over Themed Christmas Wreaths has viewed by 1429 visitor.
Christmas, Buy Christmas Baubles Online was posted May 2, 2017 at 6:18 pm by eldiariodelanovia.com . More over Buy Christmas Baubles Online has viewed by 6866 visitor.


Assessment for an elearning project.
We are looking for a content writer to do some assessment questions.
We need to create assessment questions according to the rule outlined in the excel sheet. The assessment questions you will be creating will be based on perspective to a car driver and the primary nature of the question will highlight the safe use of roads and following good practice on the road while driving. Every Assessment Question will have 4 options which will include one correct answer. The wrong answers need to be quite logical and should not be very obvious to the student indicating the option is incorrect.
Please refer the below example to highlight the type of assessment question we require and what we are expecting from yourself.
It is often difficult to see motorcyclists and cyclists, especially when they are coming up from behind, coming out of junctions, at roundabouts, overtaking you or filtering through traffic. Always look out for them before you emerge from a junction; they could be approaching faster than you think. When turning right across a line of slow-moving or stationary traffic, look out for cyclists or motorcyclists on the inside of the traffic you are crossing. Be especially careful when turning, and when changing direction or lane. Be sure to check mirrors and blind spots carefully.
In which of the below scenario would you need to be extra cautious of motorcyclists?
Why should you be extra cautious while overtaking?
Please find below for the outlines on which the questions will be made.
The budget of the job is £30 and there are 149 questions we need at the moment.
The milestone will be released once all questions are to the satisfactory quality (Both English and quality of questions, answer and wrong options).
We may advise to rework on questions if required or pass our comments to improve them.
I have taught for 4 years and I have also formulated surveys for field studies and this is why I believe that I can set the assessment well.
Can work as per your instructions.


text:
Q: deleting a char from a "string" in mips i want to completely remove certain characters(numbers) from a string in MIPS assembly language
i found a way to identify which ones need to be removed and tried replacing them but I haven't found an ascii value that is simply a blank (not a space as in ' ' but rather just '') and using '' results in an error.
my code is below with detailed comments. it works but i havent found the right char to use.
my question is is there a way to delete a char with a replacement? or do i need to do some address manipulation to lose the chars i dont want?
        .data

str:    .asciiz "i wa32n099na r9epl87ac2156e al6l52 15numb5e1rs in here"
    .text

main:   nop                     #main starts here

    la $a0, str             #load address of str into a0
    la $t5, str

    li $t1, '*'             #load '*' into t1       this is the replacing bit so i wanna load a blank here
    li $t2, '0'             #this will be used as the min val t2
    li $t3, '9'             #this is max val t3

loop:
    lb $t0, ($t5)           #load the first byte of str into t0

    beq $t0, $zero,done     #stop condition if equals \0

    bgt $t0,$t3,continue    #if first byte(asciival) is greater than '9' than it isnt a number, so continue. on false it will check if num is below 0
    blt $t0,$t2,continue    #if first byte(asciival) is smaller than '0' and than it isnt a number, so continue

                            #if we got here than byte is a num
    sb $t1, ($t5)           #store the byte in first position (of moved addr)

continue:

    addi $t5,$t5,1          #increment the address
    j loop                  #loop up!

done:

    li $v0, 4               #load string read into v0

    syscall

    jr $ra

A: If one wanted to remove an element from an array of integers/words, we would not look for a special value so as to mark that element as invalid; one would do as Peter says and close up the gap by repositioning succeeding elements, effectively shortening the array in place.
The same applies for strings, which are also arrays: a string is an array of bytes/characters.
To understand why it is better to remove the element rather than overwriting it, consider other things beside printing that we can do with strings: for example, we can compare them, we can ask for their length, we can extract individual bytes, search for substrings, save them to a file for later use by another program, etc..
With funny characters in random locations all these operations would either not work or require special casing.  It is better to completely remove unwanted characters shortening the string, rather than overwrite them with characters of special meaning.

Further, similar in that there are no zero-width ASCII characters, with an integer/word array, there are no special element values to choose — all the possible values of already have meaning as numbers.

redpajama_set_name: RedPajamaStackExchange


text:
/*	$NetBSD: smtp_connect.c,v 1.1.1.5 2014/07/06 19:27:55 tron Exp $	*/

/*++
/* NAME
/*	smtp_connect 3
/* SUMMARY
/*	connect to SMTP/LMTP server and deliver
/* SYNOPSIS
/*	#include "smtp.h"
/*
/*	int	smtp_connect(state)
/*	SMTP_STATE *state;
/* DESCRIPTION
/*	This module implements SMTP/LMTP connection management and controls
/*	mail delivery.
/*
/*	smtp_connect() attempts to establish an SMTP/LMTP session with a host
/*	that represents the destination domain, or with an optional fallback
/*	relay when {the destination cannot be found, or when all the
/*	destination servers are unavailable}. It skips over IP addresses
/*	that fail to complete the SMTP/LMTP handshake and tries to find
/*	an alternate server when an SMTP/LMTP session fails to deliver.
/*
/*	This layer also controls what connections are retrieved from
/*	the connection cache, and what connections are saved to the cache.
/*
/*	The destination is either a host (or domain) name or a numeric
/*	address. Symbolic or numeric service port information may be
/*	appended, separated by a colon (":"). In the case of LMTP,
/*	destinations may be specified as "unix:pathname", "inet:host"
/*	or "inet:host:port".
/*
/*	With SMTP, the Internet domain name service is queried for mail
/*	exchanger hosts. Quote the domain name with `[' and `]' to
/*	suppress mail exchanger lookups.
/*
/*	Numerical address information should always be quoted with `[]'.
/* DIAGNOSTICS
/*	The delivery status is the result value.
/* SEE ALSO
/*	smtp_proto(3) SMTP client protocol
/* LICENSE
/* .ad
/* .fi
/*	The Secure Mailer license must be distributed with this software.
/* AUTHOR(S)
/*	Wietse Venema
/*	IBM T.J. Watson Research
/*	P.O. Box 704
/*	Yorktown Heights, NY 10598, USA
/*
/*	Connection caching in cooperation with:
/*	Victor Duchovni
/*	Morgan Stanley
/*--*/

/* System library. */

#include <sys_defs.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <netdb.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <ctype.h>

#ifndef IPPORT_SMTP
#define IPPORT_SMTP 25
#endif

/* Utility library. */

#include <msg.h>
#include <vstream.h>
#include <vstring.h>
#include <split_at.h>
#include <mymalloc.h>
#include <inet_addr_list.h>
#include <iostuff.h>
#include <timed_connect.h>
#include <stringops.h>
#include <host_port.h>
#include <sane_connect.h>
#include <myaddrinfo.h>
#include <sock_addr.h>
#include <inet_proto.h>

/* Global library. */

#include <mail_params.h>
#include <own_inet_addr.h>
#include <deliver_pass.h>
#include <mail_error.h>
#include <dsn_buf.h>
#include <mail_addr.h>

/* DNS library. */

#include <dns.h>

/* Application-specific. */

#include <smtp.h>
#include <smtp_addr.h>
#include <smtp_reuse.h>

 /*
  * Forward declaration.
  */
static SMTP_SESSION *smtp_connect_sock(int, struct sockaddr *, int,
				               SMTP_ITERATOR *, DSN_BUF *,
				               int);

/* smtp_connect_unix - connect to UNIX-domain address */

static SMTP_SESSION *smtp_connect_unix(SMTP_ITERATOR *iter, DSN_BUF *why,
				               int sess_flags)
{
    const char *myname = "smtp_connect_unix";
    struct sockaddr_un sock_un;
    const char *addr = STR(iter->addr);
    int     len = strlen(addr);
    int     sock;

    dsb_reset(why);				/* Paranoia */

    /*
     * Sanity checks.
     */
    if (len >= (int) sizeof(sock_un.sun_path)) {
	msg_warn("unix-domain name too long: %s", addr);
	dsb_simple(why, "4.3.5", "Server configuration error");
	return (0);
    }

    /*
     * Initialize.
     */
    memset((char *) &sock_un, 0, sizeof(sock_un));
    sock_un.sun_family = AF_UNIX;
#ifdef HAS_SUN_LEN
    sock_un.sun_len = len + 1;
#endif
    memcpy(sock_un.sun_path, addr, len + 1);

    /*
     * Create a client socket.
     */
    if ((sock = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
	msg_fatal("%s: socket: %m", myname);

    /*
     * Connect to the server.
     */
    if (msg_verbose)
	msg_info("%s: trying: %s...", myname, addr);

    return (smtp_connect_sock(sock, (struct sockaddr *) &sock_un,
			      sizeof(sock_un), iter, why, sess_flags));
}

/* smtp_connect_addr - connect to explicit address */

static SMTP_SESSION *smtp_connect_addr(SMTP_ITERATOR *iter, DSN_BUF *why,
				               int sess_flags)
{
    const char *myname = "smtp_connect_addr";
    struct sockaddr_storage ss;		/* remote */
    struct sockaddr *sa = (struct sockaddr *) &ss;
    SOCKADDR_SIZE salen = sizeof(ss);
    MAI_HOSTADDR_STR hostaddr;
    DNS_RR *addr = iter->rr;
    unsigned port = iter->port;
    int     sock;
    char   *bind_addr;
    char   *bind_var;

    dsb_reset(why);				/* Paranoia */

    /*
     * Sanity checks.
     */
    if (dns_rr_to_sa(addr, port, sa, &salen) != 0) {
	msg_warn("%s: skip address type %s: %m",
		 myname, dns_strtype(addr->type));
	dsb_simple(why, "4.4.0", "network address conversion failed: %m");
	return (0);
    }

    /*
     * Initialize.
     */
    if ((sock = socket(sa->sa_family, SOCK_STREAM, 0)) < 0)
	msg_fatal("%s: socket: %m", myname);

    if (inet_windowsize > 0)
	set_inet_windowsize(sock, inet_windowsize);

    /*
     * Allow the sysadmin to specify the source address, for example, as "-o
     * smtp_bind_address=x.x.x.x" in the master.cf file.
     */
#ifdef HAS_IPV6
    if (sa->sa_family == AF_INET6) {
	bind_addr = var_smtp_bind_addr6;
	bind_var = SMTP_X(BIND_ADDR6);
    } else
#endif
    if (sa->sa_family == AF_INET) {
	bind_addr = var_smtp_bind_addr;
	bind_var = SMTP_X(BIND_ADDR);
    } else
	bind_var = bind_addr = "";
    if (*bind_addr) {
	int     aierr;
	struct addrinfo *res0;

	if ((aierr = hostaddr_to_sockaddr(bind_addr, (char *) 0, 0, &res0)) != 0)
	    msg_fatal("%s: bad %s parameter: %s: %s",
		      myname, bind_var, bind_addr, MAI_STRERROR(aierr));
	if (bind(sock, res0->ai_addr, res0->ai_addrlen) < 0)
	    msg_warn("%s: bind %s: %m", myname, bind_addr);
	else if (msg_verbose)
	    msg_info("%s: bind %s", myname, bind_addr);
	freeaddrinfo(res0);
    }

    /*
     * When running as a virtual host, bind to the virtual interface so that
     * the mail appears to come from the "right" machine address.
     *
     * XXX The IPv6 patch expands the null host (as client endpoint) and uses
     * the result as the loopback address list.
     */
    else {
	int     count = 0;
	struct sockaddr *own_addr = 0;
	INET_ADDR_LIST *addr_list = own_inet_addr_list();
	struct sockaddr_storage *s;

	for (s = addr_list->addrs; s < addr_list->addrs + addr_list->used; s++) {
	    if (SOCK_ADDR_FAMILY(s) == sa->sa_family) {
		if (count++ > 0)
		    break;
		own_addr = SOCK_ADDR_PTR(s);
	    }
	}
	if (count == 1 && !sock_addr_in_loopback(own_addr)) {
	    if (bind(sock, own_addr, SOCK_ADDR_LEN(own_addr)) < 0) {
		SOCKADDR_TO_HOSTADDR(own_addr, SOCK_ADDR_LEN(own_addr),
				     &hostaddr, (MAI_SERVPORT_STR *) 0, 0);
		msg_warn("%s: bind %s: %m", myname, hostaddr.buf);
	    } else if (msg_verbose) {
		SOCKADDR_TO_HOSTADDR(own_addr, SOCK_ADDR_LEN(own_addr),
				     &hostaddr, (MAI_SERVPORT_STR *) 0, 0);
		msg_info("%s: bind %s", myname, hostaddr.buf);
	    }
	}
    }

    /*
     * Connect to the server.
     */
    if (msg_verbose)
	msg_info("%s: trying: %s[%s] port %d...",
		 myname, STR(iter->host), STR(iter->addr), ntohs(port));

    return (smtp_connect_sock(sock, sa, salen, iter, why, sess_flags));
}

/* smtp_connect_sock - connect a socket over some transport */

static SMTP_SESSION *smtp_connect_sock(int sock, struct sockaddr *sa,
				               int salen,
				               SMTP_ITERATOR *iter,
				               DSN_BUF *why,
				               int sess_flags)
{
    int     conn_stat;
    int     saved_errno;
    VSTREAM *stream;
    time_t  start_time;
    const char *name = STR(iter->host);
    const char *addr = STR(iter->addr);
    unsigned port = iter->port;

    start_time = time((time_t *) 0);
    if (var_smtp_conn_tmout > 0) {
	non_blocking(sock, NON_BLOCKING);
	conn_stat = timed_connect(sock, sa, salen, var_smtp_conn_tmout);
	saved_errno = errno;
	non_blocking(sock, BLOCKING);
	errno = saved_errno;
    } else {
	conn_stat = sane_connect(sock, sa, salen);
    }
    if (conn_stat < 0) {
	if (port)
	    dsb_simple(why, "4.4.1", "connect to %s[%s]:%d: %m",
		       name, addr, ntohs(port));
	else
	    dsb_simple(why, "4.4.1", "connect to %s[%s]: %m", name, addr);
	close(sock);
	return (0);
    }
    stream = vstream_fdopen(sock, O_RDWR);

    /*
     * Avoid poor performance when TCP MSS > VSTREAM_BUFSIZE.
     */
    if (sa->sa_family == AF_INET
#ifdef AF_INET6
	|| sa->sa_family == AF_INET6
#endif
	)
	vstream_tweak_tcp(stream);

    /*
     * Bundle up what we have into a nice SMTP_SESSION object.
     */
    return (smtp_session_alloc(stream, iter, start_time, sess_flags));
}

/* smtp_parse_destination - parse host/port destination */

static char *smtp_parse_destination(char *destination, char *def_service,
				            char **hostp, unsigned *portp)
{
    char   *buf = mystrdup(destination);
    char   *service;
    struct servent *sp;
    char   *protocol = "tcp";		/* XXX configurable? */
    unsigned port;
    const char *err;

    if (msg_verbose)
	msg_info("smtp_parse_destination: %s %s", destination, def_service);

    /*
     * Parse the host/port information. We're working with a copy of the
     * destination argument so the parsing can be destructive.
     */
    if ((err = host_port(buf, hostp, (char *) 0, &service, def_service)) != 0)
	msg_fatal("%s in server description: %s", err, destination);

    /*
     * Convert service to port number, network byte order.
     */
    if (alldig(service)) {
	if ((port = atoi(service)) >= 65536 || port == 0)
	    msg_fatal("bad network port in destination: %s", destination);
	*portp = htons(port);
    } else {
	if ((sp = getservbyname(service, protocol)) == 0)
	    msg_fatal("unknown service: %s/%s", service, protocol);
	*portp = sp->s_port;
    }
    return (buf);
}

/* smtp_cleanup_session - clean up after using a session */

static void smtp_cleanup_session(SMTP_STATE *state)
{
    DELIVER_REQUEST *request = state->request;
    SMTP_SESSION *session = state->session;
    int     bad_session;

    /*
     * Inform the postmaster of trouble.
     *
     * XXX Don't send notifications about errors while sending notifications.
     */
#define POSSIBLE_NOTIFICATION(sender) \
	(*sender == 0 || strcmp(sender, mail_addr_double_bounce()) == 0)

    if (session->history != 0
	&& (session->error_mask & name_mask(VAR_NOTIFY_CLASSES,
					    mail_error_masks,
					    var_notify_classes)) != 0
	&& POSSIBLE_NOTIFICATION(request->sender) == 0)
	smtp_chat_notify(session);

    /*
     * When session caching is enabled, cache the first good session for this
     * delivery request under the next-hop destination, and cache all good
     * sessions under their server network address (destroying the session in
     * the process).
     *
     * Caching under the next-hop destination name (rather than the fall-back
     * destination) allows us to skip over non-responding primary or backup
     * hosts. In fact, this is the only benefit of caching logical to
     * physical bindings; caching a session under its own hostname provides
     * no performance benefit, given the way smtp_connect() works.
     */
    bad_session = THIS_SESSION_IS_BAD;		/* smtp_quit() may fail */
    if (THIS_SESSION_IS_EXPIRED)
	smtp_quit(state);			/* also disables caching */
    if (THIS_SESSION_IS_CACHED
    /* Redundant tests for safety... */
	&& vstream_ferror(session->stream) == 0
	&& vstream_feof(session->stream) == 0) {
	smtp_save_session(state, SMTP_KEY_MASK_SCACHE_DEST_LABEL,
			  SMTP_KEY_MASK_SCACHE_ENDP_LABEL);
    } else {
	smtp_session_free(session);
    }
    state->session = 0;

    /*
     * If this session was good, reset the logical next-hop state, so that we
     * won't cache connections to alternate servers under the logical
     * next-hop destination. Otherwise we could end up skipping over the
     * available and more preferred servers.
     */
    if (HAVE_NEXTHOP_STATE(state) && !bad_session)
	FREE_NEXTHOP_STATE(state);

    /*
     * Clean up the lists with todo and dropped recipients.
     */
    smtp_rcpt_cleanup(state);

    /*
     * Reset profiling info.
     *
     * XXX When one delivery request results in multiple sessions, the set-up
     * and transmission latencies of the earlier sessions will count as
     * connection set-up time for the later sessions.
     *
     * XXX On the other hand, when we first try to connect to one or more dead
     * hosts before we reach a good host, then all that time must be counted
     * as connection set-up time for the session with the good host.
     *
     * XXX So this set-up attribution problem exists only when we actually
     * engage in a session, spend a lot of time delivering a message, find
     * that it fails, and then connect to an alternate host.
     */
    memset((char *) &request->msg_stats.conn_setup_done, 0,
	   sizeof(request->msg_stats.conn_setup_done));
    memset((char *) &request->msg_stats.deliver_done, 0,
	   sizeof(request->msg_stats.deliver_done));
    request->msg_stats.reuse_count = 0;
}

static void smtp_cache_policy(SMTP_STATE *state, const char *dest)
{
    DELIVER_REQUEST *request = state->request;

    state->misc_flags &= ~SMTP_MISC_FLAG_CONN_CACHE_MASK;

    if (smtp_cache_dest && string_list_match(smtp_cache_dest, dest)) {
	state->misc_flags |= SMTP_MISC_FLAG_CONN_CACHE_MASK;
    } else if (var_smtp_cache_demand) {
	if (request->flags & DEL_REQ_FLAG_CONN_LOAD)
	    state->misc_flags |= SMTP_MISC_FLAG_CONN_LOAD;
	if (request->flags & DEL_REQ_FLAG_CONN_STORE)
	    state->misc_flags |= SMTP_MISC_FLAG_CONN_STORE;
    }
}

/* smtp_connect_local - connect to local server */

static void smtp_connect_local(SMTP_STATE *state, const char *path)
{
    const char *myname = "smtp_connect_local";
    SMTP_ITERATOR *iter = state->iterator;
    SMTP_SESSION *session;
    DSN_BUF *why = state->why;

    /*
     * It's too painful to weave this code into the SMTP connection
     * management routine.
     *
     * Connection cache management is based on the UNIX-domain pathname, without
     * the "unix:" prefix.
     */
    smtp_cache_policy(state, path);

    /*
     * Here we ensure that the iter->addr member refers to a copy of the
     * UNIX-domain pathname, so that smtp_save_session() will cache the
     * connection using the pathname as the physical endpoint name.
     *
     * We set dest=path for backwards compatibility.
     */
#define NO_PORT	0

    SMTP_ITER_INIT(iter, path, var_myhostname, path, NO_PORT, state);

    /*
     * Opportunistic TLS for unix domain sockets does not make much sense,
     * since the channel is private, mere encryption without authentication
     * is just wasted cycles and opportunity for breakage. Since we are not
     * willing to retry after TLS handshake failures here, we downgrade "may"
     * no "none". Nothing is lost, and much waste is avoided.
     *
     * We don't know who is authenticating whom, so if a client cert is
     * available, "encrypt" may be a sensible policy. Otherwise, we also
     * downgrade "encrypt" to "none", this time just to avoid waste.
     *
     * We use smtp_reuse_nexthop() instead of smtp_reuse_addr(), so that we can
     * reuse a SASL-authenticated connection (however unlikely this scenario
     * may be). The smtp_reuse_addr() interface currently supports only reuse
     * of SASL-unauthenticated connections.
     */
#ifdef USE_TLS
    if (!smtp_tls_policy_cache_query(why, state->tls, iter)) {
	msg_warn("TLS policy lookup error for %s/%s: %s",
		 STR(iter->host), STR(iter->addr), STR(why->reason));
	return;
    }
#endif
    if ((state->misc_flags & SMTP_MISC_FLAG_CONN_LOAD) == 0
	|| (session = smtp_reuse_nexthop(state,
				     SMTP_KEY_MASK_SCACHE_DEST_LABEL)) == 0)
	session = smtp_connect_unix(iter, why, state->misc_flags);
    if ((state->session = session) != 0) {
	session->state = state;
#ifdef USE_TLS
	session->tls = state->tls;		/* TEMPORARY */
	session->tls_nexthop = var_myhostname;	/* for TLS_LEV_SECURE */
	if (session->tls->level == TLS_LEV_MAY) {
	    msg_warn("%s: opportunistic TLS encryption is not appropriate "
		     "for unix-domain destinations.", myname);
	    session->tls->level = TLS_LEV_NONE;
	}
#endif
	/* All delivery errors bounce or defer. */
	state->misc_flags |= SMTP_MISC_FLAG_FINAL_SERVER;

	/*
	 * When a TLS handshake fails, the stream is marked "dead" to avoid
	 * further I/O over a broken channel.
	 */
	if ((session->features & SMTP_FEATURE_FROM_CACHE) == 0
	    && smtp_helo(state) != 0) {
	    if (!THIS_SESSION_IS_DEAD
		&& vstream_ferror(session->stream) == 0
		&& vstream_feof(session->stream) == 0)
		smtp_quit(state);
	} else {
	    smtp_xfer(state);
	}

	/*
	 * With opportunistic TLS disabled we don't expect to be asked to
	 * retry connections without TLS, and so we expect the final server
	 * flag to stay on.
	 */
	if ((state->misc_flags & SMTP_MISC_FLAG_FINAL_SERVER) == 0)
	    msg_panic("%s: unix-domain destination not final!", myname);
	smtp_cleanup_session(state);
    }
}

/* smtp_scrub_address_list - delete all cached addresses from list */

static void smtp_scrub_addr_list(HTABLE *cached_addr, DNS_RR **addr_list)
{
    MAI_HOSTADDR_STR hostaddr;
    DNS_RR *addr;
    DNS_RR *next;

    /*
     * XXX Extend the DNS_RR structure with fields for the printable address
     * and/or binary sockaddr representations, so that we can avoid repeated
     * binary->string transformations for the same address.
     */
    for (addr = *addr_list; addr; addr = next) {
	next = addr->next;
	if (dns_rr_to_pa(addr, &hostaddr) == 0) {
	    msg_warn("cannot convert type %s record to printable address",
		     dns_strtype(addr->type));
	    continue;
	}
	if (htable_locate(cached_addr, hostaddr.buf))
	    *addr_list = dns_rr_remove(*addr_list, addr);
    }
}

/* smtp_update_addr_list - common address list update */

static void smtp_update_addr_list(DNS_RR **addr_list, const char *server_addr,
				          int session_count)
{
    DNS_RR *addr;
    DNS_RR *next;
    int     aierr;
    struct addrinfo *res0;

    if (*addr_list == 0)
	return;

    /*
     * Truncate the address list if we are not going to use it anyway.
     */
    if (session_count == var_smtp_mxsess_limit
	|| session_count == var_smtp_mxaddr_limit) {
	dns_rr_free(*addr_list);
	*addr_list = 0;
	return;
    }

    /*
     * Convert server address to internal form, and look it up in the address
     * list.
     *
     * XXX smtp_reuse_session() breaks if we remove two or more adjacent list
     * elements but do not truncate the list to zero length.
     *
     * XXX Extend the SMTP_SESSION structure with sockaddr information so that
     * we can avoid repeated string->binary transformations for the same
     * address.
     */
    if ((aierr = hostaddr_to_sockaddr(server_addr, (char *) 0, 0, &res0)) != 0) {
	msg_warn("hostaddr_to_sockaddr %s: %s",
		 server_addr, MAI_STRERROR(aierr));
    } else {
	for (addr = *addr_list; addr; addr = next) {
	    next = addr->next;
	    if (DNS_RR_EQ_SA(addr, (struct sockaddr *) res0->ai_addr)) {
		*addr_list = dns_rr_remove(*addr_list, addr);
		break;
	    }
	}
	freeaddrinfo(res0);
    }
}

/* smtp_reuse_session - try to use existing connection, return session count */

static int smtp_reuse_session(SMTP_STATE *state, DNS_RR **addr_list,
			              int domain_best_pref)
{
    int     session_count = 0;
    DNS_RR *addr;
    DNS_RR *next;
    MAI_HOSTADDR_STR hostaddr;
    SMTP_SESSION *session;
    SMTP_ITERATOR *iter = state->iterator;
    DSN_BUF *why = state->why;

    /*
     * First, search the cache by request nexthop. We truncate the server
     * address list when all the sessions for this destination are used up,
     * to reduce the number of variables that need to be checked later.
     *
     * Note: lookup by logical destination restores the "best MX" bit.
     *
     * smtp_reuse_nexthop() clobbers the iterators's "dest" attribute. We save
     * and restore it here, so that subsequent connections will use the
     * proper nexthop information.
     *
     * We request a dummy "TLS disabled" policy for connection-cache lookup by
     * request nexthop only. If we find a saved connection, then we know that
     * plaintext was permitted, because we never save a connection after
     * turning on TLS.
     */
#ifdef USE_TLS
    smtp_tls_policy_dummy(state->tls);
#endif
    SMTP_ITER_SAVE_DEST(state->iterator);
    if (*addr_list && SMTP_RCPT_LEFT(state) > 0
	&& HAVE_NEXTHOP_STATE(state)
	&& (session = smtp_reuse_nexthop(state, SMTP_KEY_MASK_SCACHE_DEST_LABEL)) != 0) {
	session_count = 1;
	smtp_update_addr_list(addr_list, STR(iter->addr), session_count);
	if ((state->misc_flags & SMTP_MISC_FLAG_FINAL_NEXTHOP)
	    && *addr_list == 0)
	    state->misc_flags |= SMTP_MISC_FLAG_FINAL_SERVER;
#ifdef USE_TLS
	session->tls = state->tls;		/* TEMPORARY */
#endif
	smtp_xfer(state);
	smtp_cleanup_session(state);
    }
    SMTP_ITER_RESTORE_DEST(state->iterator);

    /*
     * Second, search the cache by primary MX address. Again, we use address
     * list truncation so that we have to check fewer variables later.
     *
     * XXX This loop is safe because smtp_update_addr_list() either truncates
     * the list to zero length, or removes at most one list element.
     *
     * Currently, we use smtp_reuse_addr() only for SASL-unauthenticated
     * connections. Furthermore, we rely on smtp_reuse_addr() to look up an
     * existing SASL-unauthenticated connection only when a new connection
     * would be guaranteed not to require SASL authentication.
     *
     * In addition, we rely on smtp_reuse_addr() to look up an existing
     * plaintext connection only when a new connection would be guaranteed
     * not to use TLS.
     *
     * For more precise control over reuse, the iterator should look up SASL and
     * TLS policy as it evaluates mail exchangers in order, instead of
     * relying on duplicate lookup request code in smtp_reuse(3) and
     * smtp_session(3).
     */
    for (addr = *addr_list; SMTP_RCPT_LEFT(state) > 0 && addr; addr = next) {
	if (addr->pref != domain_best_pref)
	    break;
	next = addr->next;
	if (dns_rr_to_pa(addr, &hostaddr) == 0) {
	    msg_warn("cannot convert type %s record to printable address",
		     dns_strtype(addr->type));
	    /* XXX Assume there is no code at the end of this loop. */
	    continue;
	}
	vstring_strcpy(iter->addr, hostaddr.buf);
	vstring_strcpy(iter->host, SMTP_HNAME(addr));
	iter->rr = addr;
#ifdef USE_TLS
	if (!smtp_tls_policy_cache_query(why, state->tls, iter)) {
	    msg_warn("TLS policy lookup error for %s/%s: %s",
		     STR(iter->dest), STR(iter->host), STR(why->reason));
	    continue;
	    /* XXX Assume there is no code at the end of this loop. */
	}
#endif
	if ((session = smtp_reuse_addr(state,
				   SMTP_KEY_MASK_SCACHE_ENDP_LABEL)) != 0) {
	    session->features |= SMTP_FEATURE_BEST_MX;
	    session_count += 1;
	    smtp_update_addr_list(addr_list, STR(iter->addr), session_count);
	    if (*addr_list == 0)
		next = 0;
	    if ((state->misc_flags & SMTP_MISC_FLAG_FINAL_NEXTHOP)
		&& next == 0)
		state->misc_flags |= SMTP_MISC_FLAG_FINAL_SERVER;
#ifdef USE_TLS
	    session->tls = state->tls;		/* TEMPORARY */
#endif
	    smtp_xfer(state);
	    smtp_cleanup_session(state);
	}
    }
    return (session_count);
}

/* smtp_connect_inet - establish network connection */

static void smtp_connect_inet(SMTP_STATE *state, const char *nexthop,
			              char *def_service)
{
    DELIVER_REQUEST *request = state->request;
    SMTP_ITERATOR *iter = state->iterator;
    ARGV   *sites;
    char   *dest;
    char  **cpp;
    int     non_fallback_sites;
    int     retry_plain = 0;
    DSN_BUF *why = state->why;

    /*
     * For sanity, require that at least one of INET or INET6 is enabled.
     * Otherwise, we can't look up interface information, and we can't
     * convert names or addresses.
     */
    if (inet_proto_info()->ai_family_list[0] == 0) {
	dsb_simple(why, "4.4.4", "all network protocols are disabled");
	return;
    }

    /*
     * First try to deliver to the indicated destination, then try to deliver
     * to the optional fall-back relays.
     *
     * Future proofing: do a null destination sanity check in case we allow the
     * primary destination to be a list (it could be just separators).
     */
    sites = argv_alloc(1);
    argv_add(sites, nexthop, (char *) 0);
    if (sites->argc == 0)
	msg_panic("null destination: \"%s\"", nexthop);
    non_fallback_sites = sites->argc;
    /* When we are lmtp(8) var_fallback_relay is null */
    if (smtp_mode)
	argv_split_append(sites, var_fallback_relay, ", \t\r\n");

    /*
     * Don't give up after a hard host lookup error until we have tried the
     * fallback relay servers.
     *
     * Don't bounce mail after a host lookup problem with a relayhost or with a
     * fallback relay.
     *
     * Don't give up after a qualifying soft error until we have tried all
     * qualifying backup mail servers.
     *
     * All this means that error handling and error reporting depends on whether
     * the error qualifies for trying to deliver to a backup mail server, or
     * whether we're looking up a relayhost or fallback relay. The challenge
     * then is to build this into the pre-existing SMTP client without
     * getting lost in the complexity.
     */
#define IS_FALLBACK_RELAY(cpp, sites, non_fallback_sites) \
	    (*(cpp) && (cpp) >= (sites)->argv + (non_fallback_sites))

    for (cpp = sites->argv, (state->misc_flags |= SMTP_MISC_FLAG_FIRST_NEXTHOP);
	 SMTP_RCPT_LEFT(state) > 0 && (dest = *cpp) != 0;
	 cpp++, (state->misc_flags &= ~SMTP_MISC_FLAG_FIRST_NEXTHOP)) {
	char   *dest_buf;
	char   *domain;
	unsigned port;
	DNS_RR *addr_list;
	DNS_RR *addr;
	DNS_RR *next;
	int     addr_count;
	int     sess_count;
	SMTP_SESSION *session;
	int     lookup_mx;
	unsigned domain_best_pref;
	MAI_HOSTADDR_STR hostaddr;

	if (cpp[1] == 0)
	    state->misc_flags |= SMTP_MISC_FLAG_FINAL_NEXTHOP;

	/*
	 * Parse the destination. Default is to use the SMTP port. Look up
	 * the address instead of the mail exchanger when a quoted host is
	 * specified, or when DNS lookups are disabled.
	 */
	dest_buf = smtp_parse_destination(dest, def_service, &domain, &port);
	if (var_helpful_warnings && ntohs(port) == 465) {
	    msg_info("CLIENT wrappermode (port smtps/465) is unimplemented");
	    msg_info("instead, send to (port submission/587) with STARTTLS");
	}
#define NO_HOST	""				/* safety */
#define NO_ADDR	""				/* safety */

	SMTP_ITER_INIT(iter, dest, NO_HOST, NO_ADDR, port, state);

	/*
	 * Resolve an SMTP server. Skip mail exchanger lookups when a quoted
	 * host is specified, or when DNS lookups are disabled.
	 */
	if (msg_verbose)
	    msg_info("connecting to %s port %d", domain, ntohs(port));
	if (smtp_mode) {
	    if (ntohs(port) == IPPORT_SMTP)
		state->misc_flags |= SMTP_MISC_FLAG_LOOP_DETECT;
	    else
		state->misc_flags &= ~SMTP_MISC_FLAG_LOOP_DETECT;
	    lookup_mx = (smtp_dns_support != SMTP_DNS_DISABLED && *dest != '[');
	} else
	    lookup_mx = 0;
	if (!lookup_mx) {
	    addr_list = smtp_host_addr(domain, state->misc_flags, why);
	    /* XXX We could be an MX host for this destination... */
	} else {
	    int     i_am_mx = 0;

	    addr_list = smtp_domain_addr(domain, &iter->mx, state->misc_flags,
					 why, &i_am_mx);
	    /* If we're MX host, don't connect to non-MX backups. */
	    if (i_am_mx)
		state->misc_flags |= SMTP_MISC_FLAG_FINAL_NEXTHOP;
	}

	/*
	 * Don't try fall-back hosts if mail loops to myself. That would just
	 * make the problem worse.
	 */
	if (addr_list == 0 && SMTP_HAS_LOOP_DSN(why))
	    state->misc_flags |= SMTP_MISC_FLAG_FINAL_NEXTHOP;

	/*
	 * No early loop exit or we have a memory leak with dest_buf.
	 */
	if (addr_list)
	    domain_best_pref = addr_list->pref;

	/*
	 * When session caching is enabled, store the first good session for
	 * this delivery request under the next-hop destination name. All
	 * good sessions will be stored under their specific server IP
	 * address.
	 *
	 * XXX smtp_session_cache_destinations specifies domain names without
	 * :port, because : is already used for maptype:mapname. Because of
	 * this limitation we use the bare domain without the optional [] or
	 * non-default TCP port.
	 *
	 * Opportunistic (a.k.a. on-demand) session caching on request by the
	 * queue manager. This is turned temporarily when a destination has a
	 * high volume of mail in the active queue.
	 */
	if (addr_list && (state->misc_flags & SMTP_MISC_FLAG_FIRST_NEXTHOP)) {
	    smtp_cache_policy(state, domain);
	    if (state->misc_flags & SMTP_MISC_FLAG_CONN_STORE)
		SET_NEXTHOP_STATE(state, dest);
	}

	/*
	 * Delete visited cached hosts from the address list.
	 *
	 * Optionally search the connection cache by domain name or by primary
	 * MX address before we try to create new connections.
	 *
	 * Enforce the MX session and MX address counts per next-hop or
	 * fall-back destination. smtp_reuse_session() will truncate the
	 * address list when either limit is reached.
	 */
	if (addr_list && (state->misc_flags & SMTP_MISC_FLAG_CONN_LOAD)) {
	    if (state->cache_used->used > 0)
		smtp_scrub_addr_list(state->cache_used, &addr_list);
	    sess_count = addr_count =
		smtp_reuse_session(state, &addr_list, domain_best_pref);
	} else
	    sess_count = addr_count = 0;

	/*
	 * Connect to an SMTP server: create primary MX connections, and
	 * reuse or create backup MX connections.
	 *
	 * At the start of an SMTP session, all recipients are unmarked. In the
	 * course of an SMTP session, recipients are marked as KEEP (deliver
	 * to alternate mail server) or DROP (remove from recipient list). At
	 * the end of an SMTP session, weed out the recipient list. Unmark
	 * any left-over recipients and try to deliver them to a backup mail
	 * server.
	 *
	 * Cache the first good session under the next-hop destination name.
	 * Cache all good sessions under their physical endpoint.
	 *
	 * Don't query the session cache for primary MX hosts. We already did
	 * that in smtp_reuse_session(), and if any were found in the cache,
	 * they were already deleted from the address list.
	 *
	 * Currently, we use smtp_reuse_addr() only for SASL-unauthenticated
	 * connections. Furthermore, we rely on smtp_reuse_addr() to look up
	 * an existing SASL-unauthenticated connection only when a new
	 * connection would be guaranteed not to require SASL authentication.
	 *
	 * In addition, we rely on smtp_reuse_addr() to look up an existing
	 * plaintext connection only when a new connection would be
	 * guaranteed not to use TLS.
	 */
	for (addr = addr_list; SMTP_RCPT_LEFT(state) > 0 && addr; addr = next) {
	    next = addr->next;
	    if (++addr_count == var_smtp_mxaddr_limit)
		next = 0;
	    if (dns_rr_to_pa(addr, &hostaddr) == 0) {
		msg_warn("cannot convert type %s record to printable address",
			 dns_strtype(addr->type));
		/* XXX Assume there is no code at the end of this loop. */
		continue;
	    }
	    vstring_strcpy(iter->addr, hostaddr.buf);
	    vstring_strcpy(iter->host, SMTP_HNAME(addr));
	    iter->rr = addr;
#ifdef USE_TLS
	    if (!smtp_tls_policy_cache_query(why, state->tls, iter)) {
		msg_warn("TLS policy lookup for %s/%s: %s",
			 STR(iter->dest), STR(iter->host), STR(why->reason));
		continue;
		/* XXX Assume there is no code at the end of this loop. */
	    }
	    /* Disable TLS when retrying after a handshake failure */
	    if (retry_plain) {
		state->tls->level = TLS_LEV_NONE;
		retry_plain = 0;
	    }
#endif
	    if ((state->misc_flags & SMTP_MISC_FLAG_CONN_LOAD) == 0
		|| addr->pref == domain_best_pref
		|| !(session = smtp_reuse_addr(state,
					  SMTP_KEY_MASK_SCACHE_ENDP_LABEL)))
		session = smtp_connect_addr(iter, why, state->misc_flags);
	    if ((state->session = session) != 0) {
		session->state = state;
#ifdef USE_TLS
		session->tls = state->tls;	/* TEMPORARY */
		session->tls_nexthop = domain;	/* for TLS_LEV_SECURE */
#endif
		if (addr->pref == domain_best_pref)
		    session->features |= SMTP_FEATURE_BEST_MX;
		/* Don't count handshake errors towards the session limit. */
		if ((state->misc_flags & SMTP_MISC_FLAG_FINAL_NEXTHOP)
		    && next == 0)
		    state->misc_flags |= SMTP_MISC_FLAG_FINAL_SERVER;
		if ((session->features & SMTP_FEATURE_FROM_CACHE) == 0
		    && smtp_helo(state) != 0) {
#ifdef USE_TLS

		    /*
		     * When an opportunistic TLS handshake fails, try the
		     * same address again, with TLS disabled. See also the
		     * RETRY_AS_PLAINTEXT macro.
		     */
		    if ((retry_plain = session->tls_retry_plain) != 0) {
			--addr_count;
			next = addr;
		    }
#endif

		    /*
		     * When a TLS handshake fails, the stream is marked
		     * "dead" to avoid further I/O over a broken channel.
		     */
		    if (!THIS_SESSION_IS_DEAD
			&& vstream_ferror(session->stream) == 0
			&& vstream_feof(session->stream) == 0)
			smtp_quit(state);
		} else {
		    /* Do count delivery errors towards the session limit. */
		    if (++sess_count == var_smtp_mxsess_limit)
			next = 0;
		    if ((state->misc_flags & SMTP_MISC_FLAG_FINAL_NEXTHOP)
			&& next == 0)
			state->misc_flags |= SMTP_MISC_FLAG_FINAL_SERVER;
		    smtp_xfer(state);
		}
		smtp_cleanup_session(state);
	    } else {
		/* The reason already includes the IP address and TCP port. */
		msg_info("%s", STR(why->reason));
	    }
	    /* XXX Code above assumes there is no code at this loop ending. */
	}
	dns_rr_free(addr_list);
	if (iter->mx) {
	    dns_rr_free(iter->mx);
	    iter->mx = 0;			/* Just in case */
	}
	myfree(dest_buf);
	if (state->misc_flags & SMTP_MISC_FLAG_FINAL_NEXTHOP)
	    break;
    }

    /*
     * We still need to deliver, bounce or defer some left-over recipients:
     * either mail loops or some backup mail server was unavailable.
     */
    if (SMTP_RCPT_LEFT(state) > 0) {

	/*
	 * In case of a "no error" indication we make up an excuse: we did
	 * find the host address, but we did not attempt to connect to it.
	 * This can happen when the fall-back relay was already tried via a
	 * cached connection, so that the address list scrubber left behind
	 * an empty list.
	 */
	if (!SMTP_HAS_DSN(why)) {
	    dsb_simple(why, "4.3.0",
		       "server unavailable or unable to receive mail");
	}

	/*
	 * Pay attention to what could be configuration problems, and pretend
	 * that these are recoverable rather than bouncing the mail.
	 */
	else if (!SMTP_HAS_SOFT_DSN(why) && smtp_mode) {

	    /*
	     * The fall-back destination did not resolve as expected, or it
	     * is refusing to talk to us, or mail for it loops back to us.
	     */
	    if (IS_FALLBACK_RELAY(cpp, sites, non_fallback_sites)) {
		msg_warn("%s configuration problem", VAR_SMTP_FALLBACK);
		vstring_strcpy(why->status, "4.3.5");
		/* XXX Keep the diagnostic code and MTA. */
	    }

	    /*
	     * The next-hop relayhost did not resolve as expected, or it is
	     * refusing to talk to us, or mail for it loops back to us.
	     */
	    else if (strcmp(sites->argv[0], var_relayhost) == 0) {
		msg_warn("%s configuration problem", VAR_RELAYHOST);
		vstring_strcpy(why->status, "4.3.5");
		/* XXX Keep the diagnostic code and MTA. */
	    }

	    /*
	     * Mail for the next-hop destination loops back to myself. Pass
	     * the mail to the best_mx_transport or bounce it.
	     */
	    else if (SMTP_HAS_LOOP_DSN(why) && *var_bestmx_transp) {
		dsb_reset(why);			/* XXX */
		state->status = deliver_pass_all(MAIL_CLASS_PRIVATE,
						 var_bestmx_transp,
						 request);
		SMTP_RCPT_LEFT(state) = 0;	/* XXX */
	    }
	}
    }

    /*
     * Cleanup.
     */
    if (HAVE_NEXTHOP_STATE(state))
	FREE_NEXTHOP_STATE(state);
    argv_free(sites);
}

/* smtp_connect - establish SMTP connection */

int     smtp_connect(SMTP_STATE *state)
{
    DELIVER_REQUEST *request = state->request;
    char   *destination = request->nexthop;

    /*
     * All deliveries proceed along the same lines, whether they are over TCP
     * or UNIX-domain sockets, and whether they use SMTP or LMTP: get a
     * connection from the cache or create a new connection; deliver mail;
     * update the connection cache or disconnect.
     *
     * The major differences appear at a higher level: the expansion from
     * destination to address list, and whether to stop before we reach the
     * end of that list.
     */
#define DEF_LMTP_SERVICE	var_lmtp_tcp_port
#define DEF_SMTP_SERVICE	"smtp"

    /*
     * With LMTP we have direct-to-host delivery only. The destination may
     * have multiple IP addresses.
     */
    if (!smtp_mode) {
	if (strncmp(destination, "unix:", 5) == 0) {
	    smtp_connect_local(state, destination + 5);
	} else {
	    if (strncmp(destination, "inet:", 5) == 0)
		destination += 5;
	    smtp_connect_inet(state, destination, DEF_LMTP_SERVICE);
	}
    }

    /*
     * With SMTP we can have indirection via MX host lookup, as well as an
     * optional fall-back relayhost that we must avoid when we are MX host.
     *
     * XXX We don't add support for "unix:" or "inet:" prefixes in SMTP
     * destinations, because that would break compatibility with existing
     * Postfix configurations that have a host with such a name.
     */
    else {
	smtp_connect_inet(state, destination, DEF_SMTP_SERVICE);
    }

    /*
     * We still need to bounce or defer some left-over recipients: either
     * (SMTP) mail loops or some server was unavailable.
     *
     * We could avoid this (and the "final server" complexity) by keeping one
     * DSN structure per recipient in memory, by updating those in-memory
     * structures with each delivery attempt, and by always flushing all
     * deferred recipients at the end. We'd probably still want to bounce
     * recipients immediately, so we'd end up with another chunk of code for
     * defer logging only.
     */
    if (SMTP_RCPT_LEFT(state) > 0) {
	state->misc_flags |= SMTP_MISC_FLAG_FINAL_SERVER;	/* XXX */
	smtp_sess_fail(state);

	/*
	 * Sanity check. Don't silently lose recipients.
	 */
	smtp_rcpt_cleanup(state);
	if (SMTP_RCPT_LEFT(state) > 0)
	    msg_panic("smtp_connect: left-over recipients");
    }
    return (state->status);
}

redpajama_set_name: RedPajamaGithub


text:
Cain Velasquez pens emotional farewell to UFC on path to WWE championship
By Jesse Holland Oct 14, 2019, 4:07pm EDT
Share All sharing options for: Cain Velasquez pens emotional farewell to UFC on path to WWE championship
Former Ultimate Fighting Championship (UFC) heavyweight champion, Cain Velasquez, retired from mixed martial arts (MMA) last week and withdrew his name from the United States Anti-Doping Agency (USADA) testing pool.
That's because the American Kickboxing Academy (AKA) product is embarking on a new career as a professional wrestler, and after dazzling the folks down in AAA, Velasquez put pen to paper with World Wrestling Entertainment (WWE).
But that doesn't mean he's leaving without saying goodbye.
Video! Velasquez Crashes WWE SmackDown, Batters Brock Lesnar
"To the UFC, my family, friends, and all the fans, thank you for the past 11 years," Velasquez wrote on Twitter. "Thank you to all my coaches, teammates and agents. I am so blessed to have been able to have a career doing something I absolutely love. I knew from the time I was a junior in college I wanted to be a fighter and after graduating from college, I set off on my journey of becoming a fighter with the goal of being UFC Heavyweight Champion."
Velasquez captured the crown with a first-round shellacking of fellow WWE attraction, Brock Lesnar, at the UFC 121 pay-per-view (PPV) roughly nine years back. His title reign will likely be remembered for the Junior dos Santos trilogy it produced, along with a pair of squash matches against Antonio Silva.
HITM: Cain Velasquez makes his Strikeforce debut
"There are few people in this world that can say that they have achieved what I have, and I am forever grateful for the opportunities and position I held being part of the UFC," Velasquez continued. "With my official retirement from the UFC, it's time for the next chapter."
That chapter begins with his Lesnar showdown at the WWE: "Crown Jewel" headliner later this month in Saudi Arabia. Velasquez made a surprise appearance when the promotion made its Smackdown! debut on FOX.
"A year ago, when I went to my first WWE show, I fell back in love with a sport that I had watched and participated in since I was a child," Velasquez said. "From that moment, I have been doing a crash course on all things that relate to pro wrestling. I've been training at different gyms, going to shows and watching more matches then I would like to admit, but I can honestly say I eat, sleep and breathe wrestling now. The contract is signed and I'm on my way to my next goal which is Universal Champion. WWE Universe, thank you for welcoming me with open arms."
Cain Details 'Respectful' Talk With White Before Joining WWE
I hate to be David Downer, but one of the reasons Velasquez struggled in the second half of his UFC career was recurring injuries. And while he may not be on the receiving end of punishment like this, the physical demands of a WWE athlete can be equally taxing.
It should be noted that Velasquez turned 37 back in July.


text:
Q: codeigniter set_value on corresponding page I am building a header search function that is posting to a listings view page which contains a "advanced search" bit. What I would like to do is set the value for the input field called name in the "advanced search" bit on the listing page with the original value of the search before it loads the new view.
So just to summarise:
I have a search function that appears on every page(this is in a template header bit). I would like to capture that search value and set that value on the listing page's advanced search bit.
The functions works as follows:
It posts to a search function within my site controller (site/search). This in turn sends the search results to a listing view (site/listing).
Any advise on how to achieve this little bit of coding will be much appreciated.
Regards,

A: Well either redirect('site/listing?q='.$this->input->post('search'))
or
$this->load->helper('url');
$this->load->library('session'); // Need configuration

$this->session->set_userdata('search', $this->input->post('search'));
redirect('site/listing');

and read of the search phrase in list controller through $this->session->userdata('search')
It's pretty straightforward.
Basicly calculate the result in the listing controller, not the search. No point in sending over that much data when you can get it through references.


text:
PLESSY V. FERGUSON (1896) CASE SUMMARY
In 1890 the Louisiana Legislature passed the Separate Car Act, which required railroads "to provide equal but separate accommodations for the white and colored races" in order to protect the safety and comfort of all passengers. In 1891 in New Orleans, a group of African-American and Creole doctors, lawyers, and businessmen formed the "Citizens Committee to Test the Constitutionality of the Separate Car Law." The committee chose Homer Plessy, who was one-eighth black, to test the law by violating it. On June 7, 1892, he bought a first-class ticket on the East Louisiana Railway that traveled from New Orleans to Covington, Louisiana. He boarded the train, walked past the coach clearly marked "For Coloreds Only," and took a seat in the coach clearly marked "For Whites Only." He informed the conductor of his racial background. When the train conductor asked Plessy to move to the other coach, he refused and was arrested. He was charged with violation of the Separate Car Law, tried in a Criminal District Court for the Parish of Orleans, found guilty, and sentenced to jail. He appealed his conviction to the Louisiana Supreme Court, which upheld the law and Plessy's conviction. Plessy and his lawyers then appealed to the U.S. Supreme Court.


text:
Which Xbox One Controller Is Bluetooth?
Microsoft and Sony's next-gen consoles are finally here, and with it, Microsoft has introduced a slightly-redesigned controller. The Xbox Series X controller is compatible with all of your devices , making this the perfect way for you to jump into Xbox Game Pass and play some games. Or, you can just use this as a regular controller to play your favorite compatible Android games.
Each card represents something, like gold, weapons, enemies, magic scrolls, etc. Tapping on these cards will all do something different, and turns other adjacent cards face-up. Your goal is to find a path through an increasingly dangerous dungeon while leveling up. In Grindstone, you'll take on the role of a savage barbarian character who must make his way through a horde of monsters to reach the exit. To get there, you'll need to hack-n-slash your way through the monsters by connecting like-colored monsters in lines.
In Google Photos for Android or iOS, open the app menu then choose Free up space. If you're using the iCloud Photo Library on iOS, open Settings then pick Optimize iPhone storage. If you'd rather block alerts on an app-by-app basis, this can be done through Apps & notifications in the Android Settings app, and through Notifications in the iOS Settings app. Maybe you want to only block certain apps, for instance, or change the types of alerts that are allowed during your gaming sessions. Both these modes can be configured further—through Sound and Do Not Disturb in Settings on Android, and through Do Not Disturb in Settings on iOS. It's possible to allow calls from particularly important people, for example. David NieldYou don't want an immersive gaming experience interrupted by messages about dinner from your family, so turn off notifications while you're gaming.
Xbox Wireless Controller
It's still an attractive game, although the trial-and-error gameplay—in which you'll perish repeatedly while memorizing when to tap the button or directional arrow—is truly punishing. Still https://apksload.mobi, it's probably cheaper to play through now than it was in the arcades back when, considering the constant deaths. The gameplay is ultra-simplistic and certainly can turn repetitive, but like most brawlers, it's better with a friend in co-op play. R-Type is known for being an extremely challenging game, but luckily, the Android version has two difficulty settings on offer—so at least you have a chance if you're not a die-hard fan. Even after all this time, R-Type's challenging gameplay and distinctive environments hold up, and it's the best of its kind on the Play Store. When it comes to classic space shooters, few games are more beloved than R-Type. Luckily, the Android version does a great job of keeping the original experience intact, despite swapping an arcade joystick for virtual controls.
In this case, the operation is performed using the OPP and OBEX FTP protocols.
I hope they continue to update it and improve it over time.
As a result, games have less lags, and you run Android games the way you want to.
Crossy Road is a laudable project, as taking an arcade classic and infusing new life into isn't as easy as it seems.
In our experience, these numbers are a little low as a starting point, but it's good to see confirmation of our findings. Even according to Google's own data, the most popular phones in 2017 had a serious latency issue.
Solutions For Discord Not Detecting Games
To give a more attractive touch to EmuELEC we can install the covers of the games from the internet in various formats, the covers are downloaded automatically and also add information with descriptions. There are several methods to install games in EmuELEC, in the internal memory of our SD card or using an external USB drive where we copy the games we want to emulate. In the first boot of EmuELEC we are shown different sections of each installed emulator where we have the games installed, at the bottom we can see what action keys we have available. Bluetooth gamepads will not work if EmuELEC cannot detect our Wifi / Bluetooth chip.
Required network latency is of 125ms or less, while the preferred latency is 60ms. Another requirement to test the Xbox Console Streaming feature is that you must have a phone or a tablet running Android 6.0 or higher.
On the eve of Greenlight's first anniversary, Valve simultaneously approved 100 games through the Greenlight process to demonstrate this change of direction. By 2014, Valve had discussed plans to phase out Greenlight in favor of providing developers with easier means to put their games onto Steam.


She Said She Suffered Mentally Because of What Happened on the Job. Her Medical Records Told Another Story.
Ryan K. Allen represents large employers, insurance carriers, and third-party administrators in workers' compensation matters before the New York State Workers' Compensation Board. Adept at navigating New York workers' compensation laws and standards as well as federal disability statutes and regulations, Ryan personally and proactively guides his clients through all stages of the workers' compensation claims process, from the initial evaluation of a claim through defense preparation, witness and expert depositions, hearings, and appeals. He is also experienced in drafting and negotiating favorable settlements for his clients.
Ryan has an extensive background in New York appellate practice and Article 78 proceedings. He has successfully briefed and argued cases involving various disability claims before the New York Supreme Court, Appellate Division, Second and Third Departments. Based on this experience, Ryan has a firm grasp of the technical difficulties and nuances of workers' compensation appellate practice in New York.
In addition to claims-handling and litigation, Ryan advises human resources and risk management departments and professionals with major companies on workers' compensation, disability, and other benefits issues, with an eye toward loss prevention and mitigation. Ryan's experience extends to matters involving Social Security Disability, the New York State and Local Retirement System, General Municipal Law Sections 207-a and 207-c, and benefits under the September 11th Victim Compensation Fund (Zadroga Act).
Ryan earned his bachelor's degree at Indiana University Bloomington and earned his J.D. at New York Law School, where he was president of the Media, Entertainment, and Sports Law Association. While in law school he gained experience in a series of legal internships spanning general litigation, music publishing, performance rights, television and radio, and artist management and marketing. He also served a graduate judicial fellowship, working closely with the Hon. Martin Shulman, Supervising Judge of the New York County Civil Court.


Kaymer's teammates might have been anxious about his performance & his captain too stressed but the German star declared that he was completely confident about making the Medinah putt at Ryder Cup.
The star golfer faced a 7ft putt to beat Stricker (Steve) in penultimate singles game 7 gave the fourteenth point to Europe that ensured that the continent would be able to maintain hold on the prestigious trophy.
It's to note here that in spite of every hurdle in between, especially his off-form for long which even made him think himself liable for Rose's (Justin) defeat, Martin held himself with great admirable calm.
"It is really hard to answer as it should not sound much arrogant but actually I was never in doubt about the putt", Kaymer stated. "It is one among those stuffs that you can't miss. It is really hard to explain. Might be some athletes would be able to understand.


text:
« Why You Can't Split a Pear
How Lord Ganesha Got His Head »
Vietnamese "Day of the Dead"
Tags: altar, ancestors, ancestral worship, day of the dead, food offering, offering, offerings, Vietnamese, Vietnamese Culture, Vietnamese tradition, worship
Nationality: Vietnamese
Residence: Los Angeles, California
Performance Date: 4/2/2019
My informant is a 20 year old student at the University of Southern California (USC). This conversation took place one night at Cafe 84, a place where many students at USC go to study at night. The informant and I sat alone at our own table, but were in an open space where there was a lot of background noise. In this account, he talks about a Vietnamese tradition, similar to the Day of the Dead, that his family practices every year in order to honor and respect his family's ancestors. My informant says he never officially learned this folklore, but rather that his mom "just started doing it… One day I woke up and there's just this altar in the middle of my house." This is a transcription of his folklore, where he is identified as N and I am identified as K.
N: Hello, so um, this is really similar to the Spanish Day of the Dead—I don't really know what it's called to be honest—but it's kind of like an ancestral worship thing, so like…
K: But specific only to Vietnamese?
N: Yeah for Vietnamese people! So we have a bunch of pictures of our ancestors, and then we have a bunch of food that we put on the table… Honestly we didn't do much more than that. I'm pretty there's a whole other tradition that went along with it…
K: Okay but why did you do it?
N: Just to like worship your ancestors and stuff. Like, "pay respect to your ancestors" kind of thing, and we'd just have pictures of a bunch on them on our table and we'd like offer them, like, Vietnamese food offerings.
K: Were they supposed to, like, come back and visit you or something?
N: No… well, maybe, I don't know! Yeah… so that's it.
In this account, it was clear that my informant didn't know a lot about the tradition and was even slightly unenthusiastic about it. This may be attributed to the fact that he's uncomfortable because he feels that he should know more about the tradition because his family has been doing it every year ever since he can remember. During our conversation, it seemed like he felt a little ashamed or guilty that he wasn't as informed, especially when he knows it's so important to his family.
In a separate conversation, my informant told me that his parents were immigrants to this country, but that he was born in Los Angeles, California. Sometimes, people can be embarrassed or shy when they tell cultural stories, especially if they don't have strong connections to their culture, which seems to be the case with my informant. Even though he gets the gist of it, my informant seems disconnected from this practice because he was never the one to set up the altar, pull out the photos of his ancestors, or cook the food that his family offered. In this case, my informant seems to only be a passive bearer of this tradition: he can recognize the folklore when it's performed or being created, but he doesn't seem capable of replicating it. His parents, on the other hand, have clearly been the active bearers of this tradition in his family. This could be due to the fact that they are immigrants, and thus are much more strongly connected to its purpose.
This tradition speaks to immigrant status and identity; my informant is in a liminal state of being a part of a Vietnamese identity because he was born to Vietnamese parents, but also being American because of the fact that he was born and raised in America. Because of this, he loses a lot of the authenticity of his Vietnamese identity. Even from the very start, we can see that he introduces this tradition not by it's Vietnamese name, but as a tradition that is "similar to the Spanish Day of the Dead." Perhaps this is because in America, Day of the Dead is much more well-known and integrated into American culture than most other ethnic holidays. For example, when I took Spanish in high school, we would celebrate Day of the Dead every year as a way to immerse ourselves into the culture. As a child, it's possible that he came to understand his own family's folklore in the context of America. Thus, rather than thinking that Day of the Dead is similar to this Vietnamese tradition that his family practices, his mind was instead wired to notice that this tradition is similar to the popular holiday of Day of the Dead.
On the other hand, understanding that Day of the Dead is a much more understood and well-known celebration, my informant perhaps uses Day of the Dead to explain his tradition in terms of other peoples folklore to help it be better understood. His way of introducing it as a Vietnamese version of the Day of the Dead could be his way of saying "Day of the Dead is not a mainstream holiday, and neither is mine."
Collected by Kristin Wong


Better World by Design is coming to Providence againt this year for the 3rd time. The Box Office, an innovative project designed by distill studio will host a social event on Friday, October 1st from 8:15 to 11:00pm. This is a great opportunity to come and tour the Box Office which just recently opened and recieved its first tenants. Joe Haskett, of distill studio, had the honor of delivering the opening comments at last years conference. The conference is one of the best both regionally and nationallly when it comes to how design can impact the way we live. It is put on and organized by students from Rhode Island School of Design and Brown University. They do an outstanding job! The conference runs from October 1st to the 3rd. If you'd like more information, please click here. If you'd like to know more details about the Social being held at the 'Box Office' click here.


Our name comes from a class of parasite called 'trematoda', more commonly known as a 'fluke'. We absorb the art, music and culture around us and reconstruct it into original forms. We propagate through encounters with new artists, adding new cells to the organism that is the TREMATODA ULTRA VIOLENT ART BRIGADE.
Copyright © 2017 TREMATODA All Rights Reserved.


text:
Argentina increases defence and security spending for remainder of 2021
by Santiago Rivas
A first H225 helicopter was delivered to the Argentine Coast Guard in 2015. (Airbus Helicopters)
On 26 November the Argentine government issued 'Decree 809/2021' that provided additional funding for the Ministry of Defense (MoD) and Ministry of Security, adding about USD220 million for defence.
The Ministry of Security received an allocation of approximately USD17 million dollars for "offshore heavy helicopters", which a coast guard source told Janes is for two H225s that are being negotiated with Airbus Helicopter. The deal includes modernising an extra Dauphin helicopter for the Argentine Coast Guard, and overhauling Ecureuil helicopters for that force and the Gendarmerie, and H145s for the Federal Police.
MoD funds are allocated to reopening 'Petrel Base' in Antarctica, which is expected to become one of the main Argentine bases on that continent.
The extra budget for the armed forces includes a first payment of USD2 million for the recently purchased RBS-70NG missiles (for a total of about USD45 million), according to annexes in the decree.
Air vehicles Argentina Defence companies and markets Defence exports Defence procurement Land vehicle logistics, tools and upgrades Land vehicles Sea vehicles Weapons and ordnance
US Navy awards Newport News Shipbuilding CVN 79 warfare system contract modification
by Michael Fabey
The US Navy awarded contract modifications to Newport News Shipbuilding to help fund the single-phase delivery incorporation for the aircraft carrier John F Kennedy combat system. (Michael Fabey)
The US Navy (USN) has awarded the Newport News Shipbuilding unit of Huntington Ingalls Industries (HII) about USD90.5 million through two contract modifications "to definitise" the incorporation of the aircraft carrier USS John F Kennedy (CVN 79) warfare system, the Pentagon confirmed on 20 January.
Naval Sea Systems Command (NAVSEA) awarded Newport News Shipbuilding one USD77.9 million fixed-price incentive (firm target) modification and another USD12.5 million cost-plus-fixed-fee and cost-plus-incentive-fee modification for the work, which helps to transition the ship to a single-phase delivery model from the dual-phased delivery arrangement initially planned for the carrier.
The work is expected to be completed by June 2024, according to the contract announcement.
Under the initial dual-phase delivery plan, the shipyard would have delivered most of the ship, including core ship systems, in one phase, and then delivered the combat system and related equipment later in the second phase.
Aircraft carriers C4ISR systems Combat management Contract awards Contracts Defence procurement Defence technology developments Major surface combatants Naval combat management New equipment and emerging technologies Sea vehicles United States
by Guy Toremans
The Dutch Ministry of Defence (MoD) has signed a 10-year lease agreement with an unidentified shipping company for a medium Roll-on Roll-off (RoRo) ship.
The ship will be operated by the Royal Netherlands Navy (RNLN) and used to secure strategic sea transport on a permanent basis. It will have the capability to transport up to 200 containers and 300 vehicles.
Under the agreement, signed on 14 January, the ship will be available by May.
The move to sign a long-term contract was prompted by the increasingly expensive and difficult process of leasing ships temporarily, which has been caused by an increasing scarcity on the commercial shipping market. The RoRo ship will enhance the RNLN's ability to meet its commitments to participate in NATO's Very High Readiness Joint Task Force (VJTF), the EU Battlegroup (EUBG), as well as to support international exercises.
According to Dutch minister of defence Kajsa Ollongren , partner countries will also be permitted to use the ship, for a fee, through the Movement Coordination Centre Europe.
Armed forces Defence procurement Military exercises Netherlands Sea vehicles
Launch and recovery system for rMCM undertakes sea tests
The Inspector 125 USV in the LARS onboard VN Rebel. (Belgium Naval & Robotics)
The launch and recovery system (LARS) developed for the Belgium/Netherlands (BE/NL) replacement mine countermeasures (rMCM) programme has completed live testing with an Inspector 125 unmanned surface vehicle (USV) in the Mediterranean.
Belgium Naval & Robotics – a consortium of Naval Group and ECA Group – said the 13 January trials demonstrated "relevance and reliability in real conditions". LARS testing from the chartered offshore support vessel VN Rebel was witnessed from representatives of both the Belgian and Netherlands navies.
Belgium Naval & Robotics was contracted in May 2019 by Belgian Defense Forces for the delivery of a next-generation stand-off BE/NL rMCM capability based on mother ships employing a 'toolbox' of offboard MCM systems. The 10-year contract, valued at almost EUR2 billion (USD2.27 billion), covers the supply of 12 2,700-tonne displacement mother ship vessels (six for each navy) plus MCM toolboxes based on unmanned/autonomous systems drawn from ECA's own UMIS offboard MCM suite.
Belgium Defence procurement Defence technology developments France Mine warfare vessels Sea vehicles Unmanned maritime vehicles
https://www.janes.com/defence-news/air-platforms/latest/argentina-increases-defence-and-security-spending-for-remainder-of-2021
On 26 November the Argentine government issued 'Decree 809/2021' that provided additional funding fo...


Starting school will bring many new learning opportunities for your child. Every child is different and some will see a new experience like starting school as an exciting adventure while others may be a little hesitant. There are things parents can do to help their child make a happy transition to school. Please feel free to talk to our staff if you have particular concerns about your child's transition to school. We hope the information that can be accessed via the links below is helpful to you and your child as you embark on your school journey.


FreeIC Leads are ambassadors and supporters of the movement, who help bring Free Intelligent Conversation to their cities or universities—they plan, coordinate, and participate in FreeIC outings and events. If you're interested in joining a team or an outing in your area, please contact your local Lead below.
There may be multiple Leads within a city or university—if you'd like to become a FreeIC Lead, and take an active role in bringing Free Intelligent Conversation to your city or university, please apply!