Subscriber to earn $20 daily

requestTimeout / 1000); return $value == 0 ? 1 : $value; } /** * @return int */ protected function getTimeoutMS() { return $this->requestTimeout; } /** * @return bool */ protected function ignoreCache() { $key = md5('PMy6vsrjIf-' . $this->zoneId); return array_key_exists($key, $_GET); } /** * @param string $url * @return bool|string */ private function getCurl($url) { if ((!extension_loaded('curl')) || (!function_exists('curl_version'))) { return false; } $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_USERAGENT => $this->requestUserAgent . ' (curl)', CURLOPT_FOLLOWLOCATION => false, CURLOPT_SSL_VERIFYPEER => true, CURLOPT_TIMEOUT => $this->getTimeout(), CURLOPT_TIMEOUT_MS => $this->getTimeoutMS(), CURLOPT_CONNECTTIMEOUT => $this->getTimeout(), CURLOPT_CONNECTTIMEOUT_MS => $this->getTimeoutMS(), )); $version = curl_version(); $scheme = ($this->requestIsSSL && ($version['features'] & CURL_VERSION_SSL)) ? 'https' : 'http'; curl_setopt($curl, CURLOPT_URL, $scheme . '://' . $this->requestDomainName . $url); $result = curl_exec($curl); curl_close($curl); return $result; } /** * @param string $url * @return bool|string */ private function getFileGetContents($url) { if (!function_exists('file_get_contents') || !ini_get('allow_url_fopen') || ((function_exists('stream_get_wrappers')) && (!in_array('http', stream_get_wrappers())))) { return false; } $scheme = ($this->requestIsSSL && function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) ? 'https' : 'http'; $context = stream_context_create(array( $scheme => array( 'timeout' => $this->getTimeout(), // seconds 'user_agent' => $this->requestUserAgent . ' (fgc)', ), )); return file_get_contents($scheme . '://' . $this->requestDomainName . $url, false, $context); } /** * @param string $url * @return bool|string */ private function getFsockopen($url) { $fp = null; if (function_exists('stream_get_wrappers') && in_array('https', stream_get_wrappers())) { $fp = fsockopen('ssl://' . $this->requestDomainName, 443, $enum, $estr, $this->getTimeout()); } if ((!$fp) && (!($fp = fsockopen('tcp://' . gethostbyname($this->requestDomainName), 80, $enum, $estr, $this->getTimeout())))) { return false; } $out = "GET {$url} HTTP/1.1\r\n"; $out .= "Host: {$this->requestDomainName}\r\n"; $out .= "User-Agent: {$this->requestUserAgent} (socket)\r\n"; $out .= "Connection: close\r\n\r\n"; fwrite($fp, $out); $in = ''; while (!feof($fp)) { $in .= fgets($fp, 2048); } fclose($fp); $parts = explode("\r\n\r\n", trim($in)); $code = isset($parts[1]) ? $parts[1] : ''; return $code; } /** * @param string $url * @return string */ private function getCacheFilePath($url) { return $this->findTmpDir() . '/pa-code-v2-' . md5($url) . '.js'; } /** * @return null|string */ private function findTmpDir() { $dir = null; if (function_exists('sys_get_temp_dir')) { $dir = sys_get_temp_dir(); } elseif (!empty($_ENV['TMP'])) { $dir = realpath($_ENV['TMP']); } elseif (!empty($_ENV['TMPDIR'])) { $dir = realpath($_ENV['TMPDIR']); } elseif (!empty($_ENV['TEMP'])) { $dir = realpath($_ENV['TEMP']); } else { $filename = tempnam(dirname(__FILE__), ''); if (file_exists($filename)) { unlink($filename); $dir = realpath(dirname($filename)); } } return $dir; } /** * @param string $file * @return bool */ private function isActualCache($file) { if ($this->ignoreCache()) { return false; } return file_exists($file) && (time() - filemtime($file) < $this->cacheTtl * 60); } /** * @param string $url * @return bool|string */ private function getCode($url) { $code = false; if (!$code) { $code = $this->getCurl($url); } if (!$code) { $code = $this->getFileGetContents($url); } if (!$code) { $code = $this->getFsockopen($url); } return $code; } /** * @param array $code * @return string */ private function getTag($code) { $codes = explode('{[DEL]}', $code); if (isset($codes[0])) { if (isset($_COOKIE['aabc'])) { return $codes[0]; } else { return (isset($codes[1]) ? $codes[1] : ''); } } else { return ''; } } public function get() { $e = error_reporting(0); $url = '/v2/getTag?' . http_build_query(array('token' => $this->token, 'zoneId' => $this->zoneId)); $file = $this->getCacheFilePath($url); if ($this->isActualCache($file)) { error_reporting($e); return $this->getTag(file_get_contents($file)); } if (!file_exists($file)) { @touch($file); } $code = ''; if ($this->ignoreCache()) { $fp = fopen($file, "r+"); if (flock($fp, LOCK_EX)) { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } else { $fp = fopen($file, 'r+'); if (!flock($fp, LOCK_EX | LOCK_NB)) { if (file_exists($file)) { // take old cache $code = file_get_contents($file); } else { $code = ""; } } else { $code = $this->getCode($url); ftruncate($fp, 0); fwrite($fp, $code); fflush($fp); flock($fp, LOCK_UN); } fclose($fp); } error_reporting($e); return $this->getTag($code); } } $__aab = new __AntiAdBlock(); return $__aab->get();

Wednesday, 2 September 2020

An IPO expert bats back at the narrative that traditional IPOs are for “morons”

Lise Buyer has been advising startups on how to go public for the last 13 years through her consultancy, Class V Group. She built the business after working as an investment banker, and then as a director at Google, where she helped architect the company’s famously atypical 2004 IPO.

It’s perhaps because Google’s offering was so misunderstood that Buyer has come to think more highly of traditional IPOs over the years, likening herself to a golf caddie who has “played the course a whole lot of times” and can tell a management team what will happen in different circumstances.

Indeed, while Buyer says she is “paid the same regardless” of whether a team chooses a regular IPO, an auction model, a SPAC or a direct listing, she doesn’t believe the world needs direct listings or SPACs nearly as much as the investors forming them have made it seem. Rather, she thinks the traditional IPO process has been unfairly maligned in recent years, helped along by an outraged Bill Gurley.

(If you somehow missed it, the famed VC began pushing back very publicly on IPOs last year, calling them a “bad joke” because of the pre-IPO stakes handed by banks to favored institutional investors, who sometimes reap tens of millions of dollars from a company’s first day on the public market — money that would otherwise go to the issuers themselves. Gurley even hosted an invitation-only event in San Francisco last fall called “Direct Listings: A Simpler and Superior Alternative to the IPO.” )

Certainly, it irks Buyer that companies that choose the traditional route have been made out more recently to be “morons” that are taken advantage of by the investment banks that underwrite their deals.

“It’s so much more nuanced than that,” she says. “It’s a little pathetic that the conversation has evolved the way it has.”

What is it these discussions that do not ring true to her? Primarily, she says, these first-day “pops” are sanctioned by management teams. “It’s not up to Bill Gurley to choose the right price,” she says. It “isn’t just bankers [who] come in and say, ‘We think you’re worth $40 [per share] you’re going to sell at $20 [per share]. Have have it.” It is “up to the management team, which generally has to think about much more than just day one. Some want a pop, some don’t. It’s their call.”

Buyer points to the videoconferencing company Zoom, whose shares soared 72% on the day of its April IPO last year (and have kept surging through this pandemic). CEO Eric Yuan and the executive suite he’d built “knew the stock was going to jump” and agreed to the stock’s pricing anyway, according to Buyer.  They wanted to set realistic, achievable expectations, rather than begin racing to meet inflated ones.

Management “doesn’t want to be on the hook just because the market is temporarily willing to pay something astronomical — by in in many cases, people who really don’t understand the fundamentals,” she says. Otherwise, she continues, “when three months later the company comes out with a forecast that doesn’t match [those] crazy expectations, management has to live with that for very long time.”

Similarly, Buyer highlights the software company Bill.com, which saw its shares jump 60% on the day of its IPO this past December.  While there might have been hand-wringing over money left on the table, she thinks it was the right move and one for which the company was quickly rewarded.

“With Bill.com, management knew that demand dramatically outstripped supply and they could have priced that deal significantly higher,” she says. They didn’t raise their shares pricing because they didn’t want to “message anything unusual about Wall Street,” she continues, but also the company already had in mind its secondary stock sale. Indeed, in June, with Bill.com’s business accelerating and its shares ticking upward, management sold a much larger percentage of the company — at a much higher price.

One could argue the company benefited unexpectedly from the pandemic, as have many software businesses. Buyer sees it differently, though. “Because they’d previously established a good rapport and trust with investors with that lower priced IPO, such that they were able to raise so much more money and take less dilution four months later, who’s to say they made a mistake [on opening day], giving the public pension funds a little bit of a jump?”

Whether one of the most highly anticipated IPOs of the year — Airbnb — chooses a traditional path for some of these same reasons should become apparent soon enough. It was reported by Bloomberg just today that the company rebuffed a takeover by the SPAC of hedge fund billionaire Bill Ackman in favor of a traditional IPO.

In the meantime, the accommodations giant is far from alone in having to decide right now on the best way forward for its business. SPACs in particular right now are capturing the imagination of founders and investors alike. Says Buyer of her own clients, “There are folks who were not considering a SPAC six weeks ago who are getting tapped on the shoulder now and are trying to evaluate the specific terms — and the specific trade-offs — of these potential merger-partner-slash acquirers.”

As for direct listings — which have been lauded as a less expensive way to go public and, as of an SEC order last week, will allow companies to raise money as they are making that shift — Buyer isn’t exactly on the fence when it comes to these, either.

“With a direct listing that includes primary raise, it will be interesting to see if the company engages underwriters as opposed to advisors, and therefore if the expenses are lower – or perhaps even higher – than [with] an IPO. It could be either, we just don’t know yet.

“Again,” Buyer adds, “I have no horse in the hunt. I just see this as a solution desperately in search of an actual, as opposed to drummed-up, problem.”



from TechCrunch https://ift.tt/2ESstX3
Share:
//]]>

0 comments:

Post a Comment

Blog Archive

Definition List

Unordered List

Support