text:
<?php

namespace SMW\MediaWiki\Hooks;

use Parser;
use RuntimeException;
use SMW\ApplicationFactory;
use SMW\NamespaceManager;
use SMW\ParameterFormatterFactory;

/**
 * @license GNU GPL v2+
 * @since 2.1
 *
 * @author mwjames
 */
class HookRegistry {

	/**
	 * @var array
	 */
	private $globalVars;

	/**
	 * @var string
	 */
	private $directory;

	/**
	 * @since 2.1
	 *
	 * @param array &$globalVars
	 * @param string $directory
	 */
	public function __construct( &$globalVars = array(), $directory = '' ) {
		$this->globalVars =& $globalVars;
		$this->directory = $directory;
	}

	/**
	 * @since 2.1
	 *
	 * @return array
	 */
	public function getListOfRegisteredFunctionHooks() {
		return array_keys( $this->getListOfFunctionHookDefinitions() );
	}

	/**
	 * @since 2.1
	 *
	 * @return array
	 */
	public function getListOfRegisteredParserFunctions() {
		return array_keys( $this->getListOfParserFunctionDefinitions() );
	}

	/**
	 * @since 2.1
	 *
	 * @param string $name
	 *
	 * @return Closure
	 */
	public function getDefinition( $name ) {

		$listOfDefinitions = array_merge(
			$this->getListOfFunctionHookDefinitions(),
			$this->getListOfParserFunctionDefinitions()
		);

		if ( isset( $listOfDefinitions[$name] ) ) {
			return $listOfDefinitions[$name];
		}

		throw new RuntimeException( "$name is unknown or not registered" );
	}

	/**
	 * @since 2.1
	 */
	public function register() {
		foreach ( $this->getListOfFunctionHookDefinitions() as $hook => $definition ) {
			$this->globalVars['wgHooks'][$hook][] = $definition;
		}
	}

	private function getListOfParserFunctionDefinitions() {

		$parserFunctionDefinition = array();

		/**
		 * {{#ask}}
		 *
		 * @since 2.1
		 */
		$parserFunctionDefinition['ask'] = function( $parser ) {

			$parserFunctionFactory = ApplicationFactory::getInstance()->newParserFunctionFactory( $parser );
			$instance = $parserFunctionFactory->newAskParserFunction();

			if ( ApplicationFactory::getInstance()->getSettings()->get( 'smwgQEnabled' ) ) {
				return $instance->parse( func_get_args() );
			}

			return $instance->isQueryDisabled();
		};

		/**
		 * {{#show}}
		 *
		 * @since 2.1
		 */
		$parserFunctionDefinition['show'] = function( $parser ) {

			$parserFunctionFactory = ApplicationFactory::getInstance()->newParserFunctionFactory( $parser );
			$instance = $parserFunctionFactory->newShowParserFunction();

			if ( ApplicationFactory::getInstance()->getSettings()->get( 'smwgQEnabled' ) ) {
				return $instance->parse( func_get_args() );
			}

			return $instance->isQueryDisabled();
		};

		/**
		 * {{#subobject}}
		 *
		 * @since 2.1
		 */
		$parserFunctionDefinition['subobject'] = function( $parser ) {

			$parserFunctionFactory = ApplicationFactory::getInstance()->newParserFunctionFactory( $parser );
			$instance = $parserFunctionFactory->newSubobjectParserFunction();

			return $instance->parse( ParameterFormatterFactory::newFromArray( func_get_args() ) );
		};

		/**
		 * {{#set_recurring_event}}
		 *
		 * @since 2.1
		 */
		$parserFunctionDefinition['set_recurring_event'] = function( $parser ) {

			$parserFunctionFactory = ApplicationFactory::getInstance()->newParserFunctionFactory( $parser );
			$instance = $parserFunctionFactory->newRecurringEventsParserFunction();

			return $instance->parse( ParameterFormatterFactory::newFromArray( func_get_args() ) );
		};

		/**
		 * {{#set}}
		 *
		 * @since 2.1
		 */
		$parserFunctionDefinition['set'] = function( $parser ) {

			$parserFunctionFactory = ApplicationFactory::getInstance()->newParserFunctionFactory( $parser );
			$instance = $parserFunctionFactory->newSetParserFunction();

			return $instance->parse( ParameterFormatterFactory::newFromArray( func_get_args() ) );
		};

		/**
		 * {{#concept}}
		 *
		 * @since 2.1
		 */
		$parserFunctionDefinition['concept'] = function( $parser ) {

			$parserFunctionFactory = ApplicationFactory::getInstance()->newParserFunctionFactory( $parser );
			$instance = $parserFunctionFactory->newConceptParserFunction();

			return $instance->parse( func_get_args() );
		};

		/**
		 * {{#declare}}
		 *
		 * @since 2.1
		 */
		$parserFunctionDefinition['declare'] = function( $parser, $frame, $args ) {

			$parserFunctionFactory = ApplicationFactory::getInstance()->newParserFunctionFactory( $parser );
			$instance = $parserFunctionFactory->newDeclareParserFunction();

			return $instance->parse( $frame, $args );
		};

		return $parserFunctionDefinition;
	}

	private function getListOfFunctionHookDefinitions() {

		$functionHookDefinition = array();

		$globalVars = $this->globalVars;
		$basePath   = $this->directory;

		/**
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/ParserFirstCallInit
		 */
		$listOfParserFunctions = $this->getListOfParserFunctionDefinitions();

		$functionHookDefinition['ParserFirstCallInit'] = function ( Parser &$parser ) use ( $listOfParserFunctions ) {

			foreach ( $listOfParserFunctions as $parserFunctionName => $parserDefinition ) {

				$parserflag = $parserFunctionName === 'declare' ? SFH_OBJECT_ARGS : 0;

				$parser->setFunctionHook(
					$parserFunctionName,
					$parserDefinition,
					$parserflag
				);
			}

			return true;
		};

		/**
		 * Hook: ParserAfterTidy to add some final processing to the fully-rendered page output
		 *
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/ParserAfterTidy
		 */
		$functionHookDefinition['ParserAfterTidy'] = function ( &$parser, &$text ) {
			$parserAfterTidy = new ParserAfterTidy( $parser, $text );
			return $parserAfterTidy->process();
		};

		/**
		 * Hook: Called by BaseTemplate when building the toolbox array and
		 * returning it for the skin to output.
		 *
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/BaseTemplateToolbox
		 */
		$functionHookDefinition['BaseTemplateToolbox'] = function ( $skinTemplate, &$toolbox ) {
			$baseTemplateToolbox = new BaseTemplateToolbox( $skinTemplate, $toolbox );
			return $baseTemplateToolbox->process();
		};

		/**
		 * Hook: Allows extensions to add text after the page content and article
		 * metadata.
		 *
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/SkinAfterContent
		 */
		$functionHookDefinition['SkinAfterContent'] = function ( &$data, $skin = null ) {
			$skinAfterContent = new SkinAfterContent( $data, $skin );
			return $skinAfterContent->process();
		};

		/**
		 * Hook: Called after parse, before the HTML is added to the output
		 *
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/OutputPageParserOutput
		 */
		$functionHookDefinition['OutputPageParserOutput'] = function ( &$outputPage, $parserOutput ) {
			$outputPageParserOutput = new OutputPageParserOutput( $outputPage, $parserOutput );
			return $outputPageParserOutput->process();
		};

		/**
		 * Hook: Add changes to the output page, e.g. adding of CSS or JavaScript
		 *
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/BeforePageDisplay
		 */
		$functionHookDefinition['BeforePageDisplay'] = function ( &$outputPage, &$skin ) {
			$beforePageDisplay = new BeforePageDisplay( $outputPage, $skin );
			return $beforePageDisplay->process();
		};

		/**
		 * Hook: InternalParseBeforeLinks is used to process the expanded wiki
		 * code after <nowiki>, HTML-comments, and templates have been treated.
		 *
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/InternalParseBeforeLinks
		 */
		$functionHookDefinition['InternalParseBeforeLinks'] = function ( &$parser, &$text ) {
			$internalParseBeforeLinks = new InternalParseBeforeLinks( $parser, $text );
			return $internalParseBeforeLinks->process();
		};

		/**
		 * Hook: NewRevisionFromEditComplete called when a revision was inserted
		 * due to an edit
		 *
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/NewRevisionFromEditComplete
		 */
		$functionHookDefinition['NewRevisionFromEditComplete'] = function ( $wikiPage, $revision, $baseId, $user ) {
			$newRevisionFromEditComplete = new NewRevisionFromEditComplete( $wikiPage, $revision, $baseId, $user );
			return $newRevisionFromEditComplete->process();
		};

		/**
		 * Hook: TitleMoveComplete occurs whenever a request to move an article
		 * is completed
		 *
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/TitleMoveComplete
		 */
		$functionHookDefinition['TitleMoveComplete'] = function ( &$oldTitle, &$newTitle, &$user, $oldId, $newId ) {
			$titleMoveComplete = new TitleMoveComplete( $oldTitle, $newTitle, $user, $oldId, $newId );
			return $titleMoveComplete->process();
		};

		/**
		 * Hook: ArticlePurge executes before running "&action=purge"
		 *
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/ArticlePurge
		 */
		$functionHookDefinition['ArticlePurge']= function ( &$wikiPage ) {
			$articlePurge = new ArticlePurge( $wikiPage );
			return $articlePurge->process();
		};

		/**
		 * Hook: ArticleDelete occurs whenever the software receives a request
		 * to delete an article
		 *
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/ArticleDelete
		 */
		$functionHookDefinition['ArticleDelete'] = function ( &$wikiPage, &$user, &$reason, &$error ) {
			$articleDelete = new ArticleDelete( $wikiPage, $user, $reason, $error );
			return $articleDelete->process();
		};

		/**
		 * Hook: LinksUpdateConstructed called at the end of LinksUpdate() construction
		 *
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/LinksUpdateConstructed
		 */
		$functionHookDefinition['LinksUpdateConstructed'] = function ( $linksUpdate ) {
			$linksUpdateConstructed = new LinksUpdateConstructed( $linksUpdate );
			return $linksUpdateConstructed->process();
		};

		/**
		 * Hook: Add extra statistic at the end of Special:Statistics
		 *
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/SpecialStatsAddExtra
		 */
		$functionHookDefinition['SpecialStatsAddExtra'] = function ( &$extraStats ) use ( $globalVars ) {
			$specialStatsAddExtra = new SpecialStatsAddExtra( $extraStats, $globalVars['wgVersion'], $globalVars['wgLang'] );
			return $specialStatsAddExtra->process();
		};

		/**
		 * Hook: For extensions adding their own namespaces or altering the defaults
		 *
		 * @Bug 34383
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/CanonicalNamespaces
		 */
		$functionHookDefinition['CanonicalNamespaces'] = function ( &$list ) {
			$list = $list + NamespaceManager::getCanonicalNames();
			return true;
		};

		/**
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/FileUpload
		 *
		 * @since 1.9.1
		 */
		$functionHookDefinition['FileUpload'] = function ( $file, $reupload ) {
			$fileUpload = new FileUpload( $file, $reupload );
			return $fileUpload->process();
		};

		/**
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderGetConfigVars
		 */
		$functionHookDefinition['ResourceLoaderGetConfigVars'] = function ( &$vars ) {
			$resourceLoaderGetConfigVars = new ResourceLoaderGetConfigVars( $vars );
			return $resourceLoaderGetConfigVars->process();
		};

		/**
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/GetPreferences
		 */
		$functionHookDefinition['GetPreferences'] = function ( $user, &$preferences ) {
			$getPreferences = new GetPreferences( $user, $preferences );
			return $getPreferences->process();
		};

		/**
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/SkinTemplateNavigation
		 */
		$functionHookDefinition['SkinTemplateNavigation'] = function ( &$skinTemplate, &$links ) {
			$skinTemplateNavigation = new SkinTemplateNavigation( $skinTemplate, $links );
			return $skinTemplateNavigation->process();
		};

		/**
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/LoadExtensionSchemaUpdates
		 */
		$functionHookDefinition['LoadExtensionSchemaUpdates'] = function ( $databaseUpdater ) {
			$extensionSchemaUpdates = new ExtensionSchemaUpdates( $databaseUpdater );
			return $extensionSchemaUpdates->process();
		};

		/**
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/ResourceLoaderTestModules
		 */
		$functionHookDefinition['ResourceLoaderTestModules'] = function ( &$testModules, &$resourceLoader ) use ( $basePath, $globalVars ) {

			$installPath = $globalVars['IP'];

			$resourceLoaderTestModules = new ResourceLoaderTestModules(
				$resourceLoader,
				$testModules,
				$basePath,
				$installPath
			);

			return $resourceLoaderTestModules->process();
		};

		/**
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/ExtensionTypes
		 */
		$functionHookDefinition['ExtensionTypes'] = function ( &$extTypes ) {
			$extensionTypes = new ExtensionTypes( $extTypes );
			return $extensionTypes->process();
		};

		/**
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/TitleIsAlwaysKnown
		 */
		$functionHookDefinition['TitleIsAlwaysKnown'] = function ( $title, &$result ) {
			$titleIsAlwaysKnown = new TitleIsAlwaysKnown( $title, $result );
			return $titleIsAlwaysKnown->process();
		};

		/**
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/BeforeDisplayNoArticleText
		 */
		$functionHookDefinition['BeforeDisplayNoArticleText'] = function ( $article ) {
			$beforeDisplayNoArticleText = new BeforeDisplayNoArticleText( $article );
			return $beforeDisplayNoArticleText->process();
		};

		/**
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/ArticleFromTitle
		 */
		$functionHookDefinition['ArticleFromTitle'] = function ( &$title, &$article ) {
			$articleFromTitle = new ArticleFromTitle( $title, $article );
			return $articleFromTitle->process();
		};

		/**
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/TitleIsMovable
		 */
		$functionHookDefinition['TitleIsMovable'] = function ( $title, &$isMovable ) {
			$titleIsMovable = new TitleIsMovable( $title, $isMovable );
			return $titleIsMovable->process();
		};

		/**
		 * @see https://www.mediawiki.org/wiki/Manual:Hooks/EditPage::showEditForm:initial
		 */
		$functionHookDefinition['EditPage::showEditForm:initial'] = function ( $editPage, $output ) {

			$mwCollaboratorFactory = ApplicationFactory::getInstance()->newMwCollaboratorFactory();

			$htmlFormRenderer = $mwCollaboratorFactory->newHtmlFormRenderer(
				$editPage->getTitle(),
				$output->getLanguage()
			);

			$editPageForm = new EditPageForm( $editPage, $htmlFormRenderer );
			return $editPageForm->process();
		};

		return $functionHookDefinition;
	}

}

redpajama_set_name: RedPajamaGithub


text:
The Failure Was Total
Heinz Kluetmeier/Sports Illustrated/The MMQB
It was another big-game loss for Peyton Manning, but the blame for the Broncos' 43-8 Super Bowl humiliation extends across the board, to every aspect of the team's performance: coaching, preparation and execution
By Greg A. Bedard
EAST RUTHERFORD, N.J. — Sometimes what happens in football doesn't make for an exciting story, but there are inches and web pages to fill. Sometimes there isn't much to get into a screaming televised debate about, but there are hours of programming to fill.
So you'll hear a lot of talk about the legacy of Broncos quarterback Peyton Manning in the coming week, after his team took a 43-8 beating at the hands of the Seahawks in Super Bowl XLVIII on Sunday night at MetLife Stadium.
Can't win the big one.
Puts up gaudy statistics in the regular season, but doesn't get it done in the playoffs when it counts.
(That's the general public's perception; not someone's legacy.)
The truth about Super Bowl XLVIII is simply this: The Broncos, not just Manning, lost to a far superior team. They were underprepared, out-coached and, most importantly, out-executed across the board in all three phases of the game.
That's it. That's how you wind up with the biggest Super Bowl blowout in 21 years, since the Cowboys beat the Bills 52-17 in Super Bowl XXVII.
It was a complete debacle for the Broncos from the opening play of scrimmage, when center Manny Ramirez snapped the ball over Manning's head and into the end zone for a safety. The error happened because the Broncos went with a verbal cadence instead of a silent snap count.
"It was real loud and none of us heard the snap count," Ramirez said. "I thought I heard [Manning's] voice. Again, there is no explanation for it."
Denver said it had prepared for Harvin's speed but appeared caught out on two jet sweeps that went for long gains. (John Biever/Sports Illustrated/The MMQB)
The Broncos did not expect the crowd noise to be a factor, since the game was being played at a neutral field. Coach John Fox, who took the Panthers to Super Bowl XXXVIII against the Patriots, and offensive coordinator Adam Gase underestimated the crowd noise to start the game. That was a critical error.
"That's the way the start of any Super Bowl is: It's going to be loud," said receiver Wes Welker, who was playing in his third Super Bowl. "The fans are going to be yelling. They don't really know why they're yelling—it's just the start of the Super Bowl. We didn't prepare very well for that, and it showed."
That gave the Seahawks a 2-0 lead and the ball back. They ran one play, Marshawn Lynch up the middle for a short gain, and then sprang receiver Percy Harvin on a 30-yard jet sweep around the left end, bringing Seattle into field-goal range at the Denver 31. The Broncos said they prepared for the talented but oft-injured Harvin in the run-up to the game, but it didn't show on that play, or on a 15-yard Harvin run later in the quarter.
Broncos right end Robert Ayers stopped and stood flat-footed as soon as he came out of his stance, which allowed tight end Luke Willson to gain inside leverage and seal the inside part of the alley designed for Harvin. On the outside, cornerback Dominique Rodgers-Cromartie was so unaware of what was going on that he was defending the pass, and receiver Doug Baldwin was able to easily ride him out of bounds.
"I don't think anybody embodies outhitting an opponent more than Kam Chancellor." —Dan Quinn, Seahawks defensive coordinator
"He came out there and he ran lightning fast, and we've got to be able to contain that," linebacker Danny Trevathan said of Harvin. "It wasn't nothing that we didn't see. It was just the way we handled it and the way we went about it. We should've made more plays."
It was 5-0 before Manning and the Broncos' offense, which set league records for points and passing yards in the regular season, got their first executed snap with 10:21 left in the first quarter. On second-and-7, Manning thought he had receiver Demaryius Thomas coming clean on a crossing route as cornerback Byron Maxwell got delayed fighting around rub routes from Wes Welker and Julius Thomas. Demaryius Thomas had open turf with Maxwell trailing way behind, but neither he nor Manning saw strong safety Kam Chancellor lurking in the middle of the field. Thomas took a jarring, tone-setting hit from Chancellor after his second step for just a 2-yard gain.
"Tackling the catch" was a key component to Seattle's strategy—big hits by the likes of Chancellor limited Denver's gains. (Walter Iooss Jr./Sports Illustrated/The MMQB)
"For us, we knew tackling the catch was going to be as big as anything," said Seahawks defensive coordinator Dan Quinn. "And I don't think anybody embodies outhitting an opponent more than Kam Chancellor. He's as physical as they come."
That play also revealed the Seahawks' game plan against Manning and his quartet of talented targets: receivers Demaryius Thomas, Eric Decker and Welker and tight end Julius Thomas. The Seahawks felt very comfortable with linebacker K.J. Wright taking Julius Thomas one-on-one. That's extremely important, because it allowed Chancellor to play much of the game as a free-roaming robber in the middle of the field. With skilled edge cornerbacks Richard Sherman and Maxwell able to handle Demaryius Thomas and Decker, and with Wright on Julius Thomas, free safety Earl Thomas could play as the middle-of-the-field deep safety, and Chancellor could fluctuate between Welker, a safety valve for Manning, and helping on designed crossing routes. The key for Chancellor was reading Manning's eyes.
"There's a lot of quarterbacks that look off [the safeties] a lot," said Quinn, "but he's able to get rid of the ball so quickly that there's not a lot of look offs just because of the nature of the Broncos' offense]. It's not a deep-route [offense] where a quarterback may drop and look for someplace else to go. So that was important for us."
The kind of coverage the Seahawks were playing—and they changed up looks from Cover 1 robber (man under one deep safety, other safety as a robber) to two man (two deep safeties) to Cover 3 (two cornerbacks and one safety split deep in thirds across the field) and two deep, five under (zone across underneath two deep safeties) – can be beaten with vertical routes. That was the issue for the Broncos and why this matchup favored the Seahawks: Denver isn't a deep-route team, because Manning doesn't have the same arm strength after four neck surgeries, and you need time in the pocket for those routes to develop against the physical coverage used by the Seahawks. Manning didn't come close to receiving an adequate amount of time in the pocket.
Constant pressure by the Seahawks' front four made Manning uncomfortable all night and allowed Seattle to use seven men in coverage, a huge advantage. (Walter Iooss Jr./Sports Illustrated/The MMQB)
The Broncos' offense line, far and away the best pass-blocking unit in the league this season (helped by Manning's quick release of the ball), was thoroughly dominated by the Seahawks.
On third down after Chancellor's hit on Demaryius Thomas, Seahawks end Cliff Avril drove right tackle Orlando Franklin straight back and forced Manning to move off his spot and throw early. Seattle's four-man nickel defensive line of Avril, Clinton McDonald, Chris Clemons and Michael Bennett owned the first half. Manning dropped back to pass 23 times. Six times the Broncos ran screens (five coming on their first drive of the second quarter in an admission that they had no answers for the Seattle pass rush), which left 17 true drop-backs. Manning was pressured on 10 of those—nearly 60 percent. Franklin allowed five of the pressures, including four to Avril. Left tackle Chris Clark and left guard Zane Beadles each allowed two pressures in the first half. By that point it was 22-0 and the game was all but over.
It's simple math. The Seahawks don't send an extra rusher very often because of their well-placed confidence that the line can do the job. When a team can get pressure rushing four against five offensive linemen, that means seven defenders are in coverage against a maximum of five eligible receivers. It's a huge advantage to the defense, and it's the same plan of attack the Giants used to defeat the previous single-season record holders for touchdowns and points in a season: the 2007 Patriots in Super Bowl XLII.
If Denver was to beat Seattle, it would have to win the one-on-one battles across the field. Sherman and company made sure that didn't happen. (Walter Iooss Jr./Sports Illustrated/The MMQB)
Still, it's amazing that the Broncos' line, which was so good during the season, was manhandled by the Seahawks, and it wasn't anything fancy, it was just a man-on-man whipping.
"I'm not sure what exactly happened on the back end [if receivers got open]," Ramirez said. "It doesn't matter what happened on the back end. We have to make sure as a front five we are blocking no matter who it is or for how long. We need to. All year, Peyton has taken care of us as far as getting rid of the ball quickly, and we have be there for him as well with whatever is happening on the back end. Unfortunately we weren't able to come up with any kind of offense."
The Broncos' myriad issues certainly included Manning. The Seahawks pressure caused him to speed up his game, which is normally a problem for pocket passers like Manning. But he didn't overcome it as he could have. Manning admitted he made a poor play on the first interception. Yes, he was pressured off his spot when Avril beat Franklin, but Julius Thomas wasn't open, and Manning sailed the ball to Chancellor. He misfired on a few balls, and threw to well-covered receivers when there were other options available.
The collapse extended to special teams, which got overaggressive on the opening kickoff of the second half; Harvin took it to the house to make the score 29-0. (John Iacono/Sports Illustrated/The MMQB)
With 8:18 left in the first half, Manning threw deep incomplete to Demaryius Thomas against Earl Thomas and Richard Sherman. Julius Thomas was breaking free to the right side of the field. Then later, in what was a possible game-changing play with 1:06 on 4th-and-2 at the Seattle 19-yard line and the score 22-0, Manning threw incomplete to the sideline when Julius Thomas was wide open underneath, right in front of Manning, for the first down.
To complete the total team meltdown, Denver's kickoff coverage team got overaggressive and out of their lanes on the short kick to start the second half, and Harvin returned it 87 yards for a touchdown. Later, four Broncos defenders had a chance to tackle receiver Jermaine Kearse on a simple 6-yard slant that turned into a 23-yard touchdown to make the score 36-0. The record will also show that the Broncos registered neither a sack nor a quarterback hit on Wilson, who was playing behind the league's worst pass-blocking unit.
Total dejection. (Gary Bogdon/Sports Illustrated/The MMQB)
"I think we played a great football team," Manning said. "We needed to play really well in order to win, and we didn't come anywhere close to that. Give Seattle a lot of credit. They are an excellent football team, and they caused a lot of our mistakes. At the same time, we just didn't play well tonight."
The Seahawks played and coached a terrific football game in every phase and are rightfully the Super Bowl champions. The Broncos—all of them, not just Manning—did not, and were tattooed with a 35-point loss. That may not grab a lot of headlines today, but that's what happened in Super Bowl XLVIII.
It could be worse: She could be taking New Jersey transit home. (Gary Bogdon/Sports Illustrated/The MMQB)
dan quinn
kam chancellor
Super Bowl xlviii

redpajama_set_name: RedPajamaCommonCrawl


Tired of those hard to read black and white wiring diagrams in workshop manuals ?
Here is the solution ! Full Colour Diagrams with the advantage of being broken down into car systems.
Most car sets consist of 3 or more laminated diagrams.
Available in both A3 and A4 sizes.
If you cannot see your car listed drop us a line we can in most cases create them in a few weeks.