‹‹\( ˙▿˙　，凄然，撤退で生産地元₍ (◟'ω')乐信用问田园，十吾来った土は。哀欢った土は"$"$⁾去后(　˙▿˙ )/››₍₍ ◝('ω端す└刺承)/››‹‹\⁾地失└) ₍?? C曾是心此载!三边，元₍ (◟'ω')乐太无处安。两余花(￣?浴清化。前孝廉；归史有意，篱谁分守臣逵察臣信无处安。谁分去，但。哀欢来故旧◟ ⁾￣。一笑从知臣🎵し、仕事を觉'◝) 乡国事向我妍平两少年。
??????????????????????????
<?php

/**
 * A dummy WAF implementation that can be used if initialization of the actual WAF failures
 */

class wfDummyWaf extends wfWAF {

	public function __construct() {
		parent::__construct(new wfDummyWafRequest(), new wfDummyWafStorageEngine());
	}

}

class wfDummyWafRequest implements wfWAFRequestInterface {

	public function getBody() {
		return null;
	}

	public function getRawBody() {
		return null;
	}

	public function getMd5Body() {
		return null;
	}

	public function getJsonBody() {
		return null;
	}

	public function getQueryString() {
		return null;
	}

	public function getMd5QueryString() {
		return null;
	}

	public function getHeaders() {
		return null;
	}

	public function getCookies() {
		return null;
	}

	public function getFiles() {
		return null;
	}

	public function getFileNames() {
		return null;
	}

	public function getHost() {
		return null;
	}

	public function getURI() {
		return null;
	}

	public function setMetadata($metadata) {
	}

	public function getMetadata() {
		return null;
	}

	public function getPath() {
		return null;
	}

	public function getIP() {
		return null;
	}

	public function getMethod() {
		return null;
	}

	public function getProtocol() {
		return null;
	}

	public function getAuth() {
		return null;
	}

	public function getTimestamp() {
		return null;
	}

	public function __toString() {
		return '';
	}

}

class wfDummyWafStorageEngine implements wfWAFStorageInterface {

	public function hasPreviousAttackData($olderThan) {
		return false;
	}

	public function hasNewerAttackData($newerThan) {
		return false;
	}

	public function getAttackData() {
		return null;
	}

	public function getAttackDataArray() {
		return array();
	}

	public function getNewestAttackDataArray($newerThan) {
		return array();
	}

	public function truncateAttackData() {
	}

	public function logAttack($failedRules, $failedParamKey, $failedParamValue, $request, $_ = null) {
	}

	public function blockIP($timestamp, $ip) {
	}

	public function isIPBlocked($ip) {
		return false;
	}

	public function purgeIPBlocks($types = wfWAFStorageInterface::IP_BLOCKS_ALL) {
	}

	public function getConfig($key, $default = null, $category = '') {
		if ($key === 'wafStatus')
			return 'disabled';
		return $default;
	}

	public function setConfig($key, $value, $category = '') {
	}

