{{# def.definitions }}
							 | 
						|
								{{# def.errors }}
							 | 
						|
								{{# def.missing }}
							 | 
						|
								{{# def.setupKeyword }}
							 | 
						|
								{{# def.$data }}
							 | 
						|
								
							 | 
						|
								{{ var $vSchema = 'schema' + $lvl; }}
							 | 
						|
								
							 | 
						|
								{{## def.setupLoop:
							 | 
						|
								  {{? !$isData }}
							 | 
						|
								    var {{=$vSchema}} = validate.schema{{=$schemaPath}};
							 | 
						|
								  {{?}}
							 | 
						|
								
							 | 
						|
								  {{
							 | 
						|
								    var $i = 'i' + $lvl
							 | 
						|
								      , $propertyPath = 'schema' + $lvl + '[' + $i + ']'
							 | 
						|
								      , $missingProperty = '\' + ' + $propertyPath + ' + \'';
							 | 
						|
								    if (it.opts._errorDataPathProperty) {
							 | 
						|
								      it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);
							 | 
						|
								    }
							 | 
						|
								  }}
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{## def.isRequiredOwnProperty:
							 | 
						|
								  Object.prototype.hasOwnProperty.call({{=$data}}, {{=$vSchema}}[{{=$i}}])
							 | 
						|
								#}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{? !$isData }}
							 | 
						|
								  {{? $schema.length < it.opts.loopRequired &&
							 | 
						|
								      it.schema.properties && Object.keys(it.schema.properties).length }}
							 | 
						|
								    {{ var $required = []; }}
							 | 
						|
								    {{~ $schema:$property }}
							 | 
						|
								      {{ var $propertySch = it.schema.properties[$property]; }}
							 | 
						|
								      {{? !($propertySch && {{# def.nonEmptySchema:$propertySch}}) }}
							 | 
						|
								        {{ $required[$required.length] = $property; }}
							 | 
						|
								      {{?}}
							 | 
						|
								    {{~}}
							 | 
						|
								  {{??}}
							 | 
						|
								    {{ var $required = $schema; }}
							 | 
						|
								  {{?}}
							 | 
						|
								{{?}}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
								{{? $isData || $required.length }}
							 | 
						|
								  {{
							 | 
						|
								    var $currentErrorPath = it.errorPath
							 | 
						|
								      , $loopRequired = $isData || $required.length >= it.opts.loopRequired
							 | 
						|
								      , $ownProperties = it.opts.ownProperties;
							 | 
						|
								  }}
							 | 
						|
								
							 | 
						|
								  {{? $breakOnError }}
							 | 
						|
								    var missing{{=$lvl}};
							 | 
						|
								    {{? $loopRequired }}
							 | 
						|
								      {{# def.setupLoop }}
							 | 
						|
								      var {{=$valid}} = true;
							 | 
						|
								
							 | 
						|
								      {{?$isData}}{{# def.check$dataIsArray }}{{?}}
							 | 
						|
								
							 | 
						|
								      for (var {{=$i}} = 0; {{=$i}} < {{=$vSchema}}.length; {{=$i}}++) {
							 | 
						|
								        {{=$valid}} = {{=$data}}[{{=$vSchema}}[{{=$i}}]] !== undefined
							 | 
						|
								                      {{? $ownProperties }}
							 | 
						|
								                        && {{# def.isRequiredOwnProperty }}
							 | 
						|
								                      {{?}};
							 | 
						|
								        if (!{{=$valid}}) break;
							 | 
						|
								      }
							 | 
						|
								
							 | 
						|
								      {{? $isData }}  }  {{?}}
							 | 
						|
								
							 | 
						|
								      {{# def.checkError:'required' }}
							 | 
						|
								      else {
							 | 
						|
								    {{??}}
							 | 
						|
								      if ({{# def.checkMissingProperty:$required }}) {
							 | 
						|
								        {{# def.errorMissingProperty:'required' }}
							 | 
						|
								      } else {
							 | 
						|
								    {{?}}
							 | 
						|
								  {{??}}
							 | 
						|
								    {{? $loopRequired }}
							 | 
						|
								      {{# def.setupLoop }}
							 | 
						|
								      {{? $isData }}
							 | 
						|
								        if ({{=$vSchema}} && !Array.isArray({{=$vSchema}})) {
							 | 
						|
								          {{# def.addError:'required' }}
							 | 
						|
								        } else if ({{=$vSchema}} !== undefined) {
							 | 
						|
								      {{?}}
							 | 
						|
								
							 | 
						|
								      for (var {{=$i}} = 0; {{=$i}} < {{=$vSchema}}.length; {{=$i}}++) {
							 | 
						|
								        if ({{=$data}}[{{=$vSchema}}[{{=$i}}]] === undefined
							 | 
						|
								            {{? $ownProperties }}
							 | 
						|
								              || !{{# def.isRequiredOwnProperty }}
							 | 
						|
								            {{?}}) {
							 | 
						|
								          {{# def.addError:'required' }}
							 | 
						|
								        }
							 | 
						|
								      }
							 | 
						|
								
							 | 
						|
								      {{? $isData }}  }  {{?}}
							 | 
						|
								    {{??}}
							 | 
						|
								      {{~ $required:$propertyKey }}
							 | 
						|
								        {{# def.allErrorsMissingProperty:'required' }}
							 | 
						|
								      {{~}}
							 | 
						|
								    {{?}}
							 | 
						|
								  {{?}}
							 | 
						|
								
							 | 
						|
								  {{ it.errorPath = $currentErrorPath; }}
							 | 
						|
								
							 | 
						|
								{{?? $breakOnError }}
							 | 
						|
								  if (true) {
							 | 
						|
								{{?}}
							 |