webpackJsonp([3],{"+66z":function(t,e){var r=Object.prototype.toString;t.exports=function(t){return r.call(t)}},"+99L":function(t,e,r){var n={"./v2/measurement_schema.json":["oGp6",23],"./v2/message_schema.json":["2BTs",22],"./v2/process_schema.json":["rRyJ",21],"./v3/measurement_schema.json":["PpY5",20],"./v3/message_schema.json":["1SJ2",19],"./v3/process_schema.json":["uwRd",18]};function i(t){var e=n[t];return e?r.e(e[1]).then(function(){return r(e[0])}):Promise.reject(new Error("Cannot find module '"+t+"'."))}i.keys=function(){return Object.keys(n)},i.id="+99L",t.exports=i},"+gg+":function(t,e,r){var n=r("TQ3y")["__core-js_shared__"];t.exports=n},"/GnY":function(t,e,r){var n=r("HT7L"),i=r("W529"),o=Object.prototype.hasOwnProperty;t.exports=function(t){if(!n(t))return i(t);var e=[];for(var r in Object(t))o.call(t,r)&&"constructor"!=r&&e.push(r);return e}},"/I3N":function(t,e){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},"037f":function(t,e,r){var n=r("1oyr"),i=r("p0bc"),o=r("wSKX"),a=i?function(t,e){return i(t,"toString",{configurable:!0,enumerable:!1,value:n(e),writable:!0})}:o;t.exports=a},"09Qt":function(t,e,r){var n=r("uIr7"),i=r("vi0E"),o=r("l9Lx"),a=r("C0hh"),s=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)n(e,o(t)),t=i(t);return e}:a;t.exports=s},"0DSl":function(t,e,r){var n=r("YkxI"),i=r("zBOP");t.exports=function(t){return n(function(e,r){var n=-1,o=r.length,a=o>1?r[o-1]:void 0,s=o>2?r[2]:void 0;for(a=t.length>3&&"function"==typeof a?(o--,a):void 0,s&&i(r[0],r[1],s)&&(a=o<3?void 0:a,o=1),e=Object(e);++n<o;){var c=r[n];c&&t(e,c,n,a)}return e})}},"0uX4":function(t,e,r){var n=r("NkRn"),i=n?n.prototype:void 0,o=i?i.valueOf:void 0;t.exports=function(t){return o?Object(o.call(t)):{}}},"1C79":function(t,e,r){var n=r("uIr7"),i=r("Qp3N");t.exports=function t(e,r,o,a,s){var c=-1,u=e.length;for(o||(o=i),s||(s=[]);++c<u;){var l=e[c];r>0&&o(l)?r>1?t(l,r-1,o,a,s):n(s,l):a||(s[s.length]=l)}return s}},"1QDk":function(t,e,r){var n=r("tv3T"),i=r("09Qt");t.exports=function(t,e){return n(t,i(t),e)}},"1Yb9":function(t,e,r){var n=r("mgnk"),i=r("UnEC"),o=Object.prototype,a=o.hasOwnProperty,s=o.propertyIsEnumerable,c=n(function(){return arguments}())?n:function(t){return i(t)&&a.call(t,"callee")&&!s.call(t,"callee")};t.exports=c},"1oyr":function(t,e){t.exports=function(t){return function(){return t}}},"22B7":function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},"2Hvv":function(t,e,r){var n=r("imBK");t.exports=function(t){return n(this.__data__,t)>-1}},"2N6f":function(t,e,r){var n=r("rCVp"),i=r("Q2wK"),o=r("WHce");t.exports=function(t){return o(i(t,void 0,n),t+"")}},"3IRH":function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},"3rZI":function(t,e){t.exports=function(t,e,r,n){var i=-1,o=null==t?0:t.length;for(n&&o&&(r=t[++i]);++i<o;)r=e(r,t[i],i,t);return r}},"4yG7":function(t,e,r){var n=r("HAGj");t.exports=function(t,e,r){return null==t?t:n(t,e,r)}},"5/Qr":function(t,e,r){var n=r("Kzd6"),i=r("6Git"),o=r("Jqj6"),a=r("WyC4"),s=r("7jYp"),c=r("0uX4"),u=r("Ilb/"),l="[object Boolean]",f="[object Date]",p="[object Map]",d="[object Number]",v="[object RegExp]",h="[object Set]",m="[object String]",b="[object Symbol]",y="[object ArrayBuffer]",_="[object DataView]",g="[object Float32Array]",x="[object Float64Array]",j="[object Int8Array]",O="[object Int16Array]",C="[object Int32Array]",w="[object Uint8Array]",k="[object Uint8ClampedArray]",P="[object Uint16Array]",E="[object Uint32Array]";t.exports=function(t,e,r,T){var S=t.constructor;switch(e){case y:return n(t);case l:case f:return new S(+t);case _:return i(t,T);case g:case x:case j:case O:case C:case w:case k:case P:case E:return u(t,T);case p:return o(t,T,r);case d:case m:return new S(t);case v:return a(t);case h:return s(t,T,r);case b:return c(t)}}},"5N57":function(t,e,r){var n=r("ICSD")(r("TQ3y"),"Set");t.exports=n},"5PlU":function(t,e,r){var n=r("RY/4"),i=r("dSzd")("iterator"),o=r("/bQp");t.exports=r("FeBl").isIterable=function(t){var e=Object(t);return void 0!==e[i]||"@@iterator"in e||o.hasOwnProperty(n(e))}},"5pwE":function(t,e,r){(t.exports=r("YHym")(!1)).push([t.i,".schemaDetail a{text-decoration:none}.schemaDetail .property ul{list-style-type:disc;padding-left:1em;margin-left:0;margin-top:0}",""])},"5zde":function(t,e,r){r("zQR9"),r("qyJz"),t.exports=r("FeBl").Array.from},"6Git":function(t,e,r){var n=r("Kzd6");t.exports=function(t,e){var r=e?n(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}},"6MiT":function(t,e,r){var n=r("aCM0"),i=r("UnEC"),o="[object Symbol]";t.exports=function(t){return"symbol"==typeof t||i(t)&&n(t)==o}},"77aO":function(t,e,r){"use strict";e.a={props:{collapsed:{type:Boolean,default:!1}},data:function(){return{expanded:!this.collapsed,transitioning:!1}},watch:{collapsed:function(t){this.expanded=!t}},methods:{beforeenter:function(t){this.transitioning=!0,t.style.height=0},enter:function(t){t.style.height=t.scrollHeight+"px"},afterenter:function(t){t.style.height="",this.transitioning=!1},beforeleave:function(t){this.transitioning=!0,t.style.height=t.offsetHeight+"px",t.offsetHeight},leave:function(t){t.style.height=0,t.offsetHeight},afterleave:function(t){this.transitioning=!1},toggle:function(){this.transitioning||(this.expanded=!this.expanded,this.$emit(this.expanded?"expanding":"collapsing",this.id))}}}},"7e4z":function(t,e,r){var n=r("uieL"),i=r("1Yb9"),o=r("NGEn"),a=r("ggOT"),s=r("ZGh9"),c=r("YsVG"),u=Object.prototype.hasOwnProperty;t.exports=function(t,e){var r=o(t),l=!r&&i(t),f=!r&&!l&&a(t),p=!r&&!l&&!f&&c(t),d=r||l||f||p,v=d?n(t.length,String):[],h=v.length;for(var m in t)!e&&!u.call(t,m)||d&&("length"==m||f&&("offset"==m||"parent"==m)||p&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||s(m,h))||v.push(m);return v}},"7jYp":function(t,e,r){var n=r("nWuj"),i=r("3rZI"),o=r("octw"),a=1;t.exports=function(t,e,r){var s=e?r(o(t),a):o(t);return i(s,n,new t.constructor)}},"8AZL":function(t,e){t.exports=function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}},"8gK5":function(t,e){t.exports=function(t){var e=[];if(null!=t)for(var r in Object(t))e.push(r);return e}},"94sX":function(t,e,r){var n=r("dCZQ");t.exports=function(){this.__data__=n?n(null):{},this.size=0}},"9UkZ":function(t,e,r){var n=r("aCM0"),i=r("vi0E"),o=r("UnEC"),a="[object Object]",s=Function.prototype,c=Object.prototype,u=s.toString,l=c.hasOwnProperty,f=u.call(Object);t.exports=function(t){if(!o(t)||n(t)!=a)return!1;var e=i(t);if(null===e)return!0;var r=l.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&u.call(r)==f}},A51D:function(t,e,r){var n=r("5pwE");"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);r("rjj0")("188b52d2",n,!1)},A9mX:function(t,e,r){var n=r("pTUa");t.exports=function(t){var e=n(this,t).delete(t);return this.size-=e?1:0,e}},"Ai/T":function(t,e){var r=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return r.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},AxiT:function(t,e,r){var n=r("Lw7C");"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);r("rjj0")("0868896c",n,!1)},C0hh:function(t,e){t.exports=function(){return[]}},CW5P:function(t,e,r){var n=r("T/bE"),i=r("duB3"),o=r("POb3");t.exports=function(){this.size=0,this.__data__={hash:new n,map:new(o||i),string:new n}}},Cf65:function(t,e,r){var n=r("uCi2"),i=r("M1c9");t.exports=function(t,e){return e.length<2?t:n(t,i(e,0,-1))}},D9sP:function(t,e,r){"use strict";var n=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticClass:"schemaDetail",class:{"is-loading":t.loading},attrs:{id:"schema-detail"}},[r("div",{staticClass:"accordion"},[null!==t.masterSchema?r("card",{attrs:{collapsed:!0}},[r("template",{slot:"header"},[t._v("\n        Structure of the payload\n      ")]),r("ul",t._l(t.masterSchema.properties,function(t,e){return r("schemaToc",{key:e,attrs:{schema:t}})}))],2):t._e(),t._t("default")],2),r("h1",[r("a",{attrs:{id:t.type+"-schema-detail",title:t.type+" Fields definition"}}),t._v("\n    Fields definition\n  ")]),t._l(t.schemas,function(e){return r("div",{key:e.$id,staticClass:"card property"},[r("header",{staticClass:"card-header"},[r("a",{attrs:{id:"p-"+e.$id}}),r("p",{staticClass:"card-header-title"},[r("span",{domProps:{innerHTML:t._s(e.getPath())}})]),r("nuxt-link",{staticClass:"card-header-icon",attrs:{to:"#schema-detail",title:"go up"}},[r("span",{staticClass:"icon"},[r("i",{staticClass:"fa fa-angle-up"})])])],1),r("div",{staticClass:"card-content"},[e.description||e.type?r("div",{staticClass:"field is-horizontal"},[t._m(0,!0),e.description?r("div",{staticClass:"field-body"},[t._v("\n          "+t._s(e.description)+"\n        ")]):e.type?r("div",{staticClass:"field-body"},[t._v("\n          A simple "+t._s(t._f("capitalize")(e.type))+"\n        ")]):t._e()]):t._e(),e.$parent?r("div",{staticClass:"field is-horizontal"},[t._m(1,!0),r("div",{staticClass:"field-body"},[r("nuxt-link",{attrs:{to:"#p-"+e.$parent.schema.$id}},[r("span",{domProps:{innerHTML:t._s(e.$parent.schema.getPath())}})])],1)]):t._e(),e.type?r("div",{staticClass:"field is-horizontal"},[t._m(2,!0),r("div",{staticClass:"field-body"},[t._v("\n          "+t._s(t._f("capitalize")(e.type,e))+"\n        ")])]):t._e(),e.format?r("div",{staticClass:"field is-horizontal"},[t._m(3,!0),r("div",{staticClass:"field-body"},[t._v("\n          "+t._s(e.format)+"\n          "),t.$static.formats[e.format]?r("a",{attrs:{href:t.$static.formats[e.format].link}},[t._v(" ("+t._s(t.$static.formats[e.format].name)+")")]):t._e()])]):t._e(),e.enum&&e.enum.length?r("div",{staticClass:"field is-horizontal"},[t._m(4,!0),r("div",{staticClass:"field-body"},[r("div",[t._v("\n            "+t._s(e.enum.join(", "))+"\n          ")])])]):t._e(),e.hasOwnProperty("default")?r("div",{staticClass:"field is-horizontal"},[t._m(5,!0),r("div",{staticClass:"field-body"},[r("div",[t._v("\n            "+t._s(e.default)+"\n          ")])])]):t._e(),e.maxLength?r("div",{staticClass:"field is-horizontal"},[t._m(6,!0),r("div",{staticClass:"field-body"},[r("div",[t._v("\n            "+t._s(e.maxLength)+"\n          ")])])]):t._e(),e.properties||e.patternProperties||e.items?r("div",{staticClass:"field is-horizontal"},[t._m(7,!0),r("div",{staticClass:"field-body"},[Object.keys(e.properties||{}).length>0?r("schemaLink",{attrs:{link:e.properties}}):t._e(),Object.keys(e.patternProperties||{}).length>0?r("schemaLink",{attrs:{link:e.patternProperties}},[r("div",[t._v("Matching regular expressions:")])]):t._e(),!e.items||e.items instanceof Array?e.items?r("schemaLink",{attrs:{link:e.items}},[r("div",[t._v("Ordered items of type:")])]):t._e():r("schemaLink",{attrs:{link:e.items}}),Object.keys(e.properties||{}).length+Object.keys(e.patternProperties||{}).length!==0||e.items?t._e():[t._v("none")]],2)]):t._e(),e.minProperties?r("div",{staticClass:"field is-horizontal"},[t._m(8,!0),r("div",{staticClass:"field-body"},[r("div",[t._v("\n            "+t._s(e.minProperties)+"\n          ")])])]):t._e(),e.minItems?r("div",{staticClass:"field is-horizontal"},[t._m(9,!0),r("div",{staticClass:"field-body"},[r("div",[t._v("\n            "+t._s(e.minItems)+"\n          ")])])]):t._e(),e.hasOwnProperty("additionalProperties")?r("div",{staticClass:"field is-horizontal"},[t._m(10,!0),"boolean"==typeof e.additionalProperties?r("schemaLink",{staticClass:"field-body",attrs:{link:e.additionalProperties}}):r("div",{staticClass:"field-body"},[t._v("\n          if fulfilling "),r("schemaLink",{staticClass:"field-body",attrs:{link:e.additionalProperties}})],1)],1):t._e(),e.not||e.oneOf||e.allOf||e.anyOf?r("div",{staticClass:"field is-horizontal"},[t._m(11,!0),r("div",{staticClass:"field-body"},[e.not?r("schemaLink",{attrs:{link:e.not}},[t._v("\n            Not fulfilling \n          ")]):t._e(),e.oneOf?r("schemaLink",{attrs:{link:e.oneOf}},[r("div",[t._v("Fulfilling exactly one of:")])]):t._e(),e.allOf?r("schemaLink",{attrs:{link:e.allOf}},[r("div",[t._v("Fulfilling all of:")])]):t._e(),e.anyOf?r("schemaLink",{attrs:{link:e.anyOf}},[r("div",[t._v("Fulfilling one of:")])]):t._e()],1)]):t._e(),e.required&&e.required.length?r("div",{staticClass:"field is-horizontal"},[t._m(12,!0),r("div",{staticClass:"field-body"},[t._v("\n          "+t._s(e.required.join(", "))+"\n        ")])]):t._e(),e.examples?r("div",{staticClass:"field is-horizontal"},[t._m(13,!0),r("div",{staticClass:"field-body"},t._l(e.examples,function(e,n){return r("prism",{key:n,attrs:{language:"json"}},[t._v(t._s(t._f("stringify")(e)))])}))]):t._e()])])})],2)};n._withStripped=!0;var i={render:n,staticRenderFns:[function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Description:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Parent:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Type:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Format:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Possible values:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Defaults to:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Maximum length:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Restriction on subfields:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Minimum amount of subfields:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Minimum amount of items:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Allows additional fields:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Restriction with boolean logic:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Required fields:")])])},function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"field-label"},[e("label",{staticClass:"label"},[this._v("Example:")])])}]};e.a=i},Dc0G:function(t,e,r){(function(t){var n=r("blYT"),i="object"==typeof e&&e&&!e.nodeType&&e,o=i&&"object"==typeof t&&t&&!t.nodeType&&t,a=o&&o.exports===i&&n.process,s=function(){try{return a&&a.binding&&a.binding("util")}catch(t){}}();t.exports=s}).call(e,r("3IRH")(t))},Dc7M:function(t,e,r){var n=r("Hxdr"),i=r("Fkvj"),o=r("Vi3P"),a=r("bIjD"),s=r("tv3T"),c=r("dYhQ"),u=r("2N6f"),l=r("xond"),f=u(function(t,e){var r={};if(null==t)return r;var u=!1;e=n(e,function(e){return e=a(e,t),u||(u=e.length>1),e}),s(t,l(t),r),u&&(r=i(r,7,c));for(var f=e.length;f--;)o(r,e[f]);return r});t.exports=f},Dv2r:function(t,e,r){var n=r("pTUa");t.exports=function(t,e){var r=n(this,t),i=r.size;return r.set(t,e),this.size+=r.size==i?0:1,this}},E4Hj:function(t,e){t.exports=function(t){return this.__data__.get(t)}},EXfj:function(t,e,r){"use strict";var n=r("mvHQ"),i=r.n(n),o=r("d7EF"),a=r.n(o),s=r("Dd8w"),c=r.n(s),u=r("W3Iv"),l=r.n(u),f=r("LJry"),p=r.n(f),d=r("T9Hf"),v=r("Q7hp"),h=r.n(v),m=r("s8mu");e.a={head:function(){return{title:"Specification for process messages"}},created:function(){var t=this,e=new Date,r="a4927dad-58d4-4580-b460-79cefd56775b";this.$static={message:{"content-spec":"urn:spec://eclipse.org/unide/process-message#v2",device:{deviceID:r},process:{ts:e.toISOString()},measurements:[{ts:new Date(e.valueOf()+100).toISOString(),series:{force:[26,23,24],pressure:[52.4,46.32,44.2432]}}]},complexMessage:{"content-spec":"urn:spec://eclipse.org/unide/process-message#v2",device:{deviceID:r,operationalStatus:"normal",metaData:{swVersion:"2.0.3.13",swBuildId:"41535"}},part:{type:"SINGLE",partTypeID:"F00VH07328",partID:"420003844",result:"NOK",code:"HUH289",metaData:{toolId:"32324-432143"}},process:{externalProcessId:"b4927dad-58d4-4580-b460-79cefd56775b",ts:e.toISOString(),result:"NOK",shutoffPhase:"phase 2",program:{id:"1",name:"Programm 1",lastChangedDate:"2002-05-30T09:30:10.123+02:00"},shutoffValues:{force:{ts:new Date(e.valueOf()+1e4).toISOString(),value:24,upperError:26,lowerError:22,upperWarn:25,lowerWarn:23,target:24},pressure:{value:50,upperError:52,lowerError:48}},metaData:{maxDuration:"30min",escalation:"shift leader"}},measurements:[{ts:new Date(e.valueOf()+100).toISOString(),phase:"phase 1",name:"heating up",result:"OK",code:"0000 EE01",limits:{pressure:{upperError:4444,lowerError:44,upperWarn:2222,lowerWarn:46,target:35},force:{upperError:[27,24,25],lowerError:[25,22,23]}},specialValues:[{$_time:12,name:"turning point",value:{pressure:24,force:50}}],series:{time:[30,36,42],force:[26,23,24],pressure:[52.4,46.32,44.2432],temperature:[45.4243,46.42342,44.2432]}},{ts:new Date(e.valueOf()+430).toISOString(),phase:"phase 2",name:"processing",result:"OK",series:{$_time:[0,23,24],temperature:[49.2,48.8,50]}}]}},this.$static.examples=l()(c()({},["content-spec","device","device.deviceID","device.metaData","device.operationalStatus","measurements","measurements[0].code","measurements[0].limits","measurements[0].name","measurements[0].phase","measurements[0].result","measurements[0].series","measurements[0].series.$_time","measurements[0].specialValues","measurements[0].specialValues[0].$_time","measurements[0].specialValues[0].name","measurements[0].specialValues[0].value","measurements[0].ts","part","part.code","part.metaData","part.partID","part.partTypeID","part.result","part.type","process","process.externalProcessId","process.metaData","process.program","process.program.id","process.program.lastChangedDate","process.program.name","process.result","process.shutoffPhase","process.shutoffValues","process.ts"].reduce(function(t,e){return t[e.replace(/(^|\.)/g,"$1properties.").replace(/\[[^]]*]/g,".items")]=e,t},{'properties.measurements.items.properties.limits.patternProperties["^[^$]+"].oneOf[0]':"measurements[0].limits.pressure",'properties.measurements.items.properties.limits.patternProperties["^[^$]+"].oneOf[1]':"measurements[0].limits.force",'properties.measurements.items.properties.series.patternProperties["^[^$]+"]':"measurements[0].series.force",'properties.process.properties.shutoffValues.patternProperties["^[^$]+"]':"process.shutoffValues.force"}),["lowerError","lowerWarn","target","upperError","upperWarn"].reduce(function(t,e){return t['properties.measurements.items.properties.limits.patternProperties["^[^$]+"].oneOf[0].properties.'+e]="measurements[0].limits.pressure."+e,t['properties.measurements.items.properties.limits.patternProperties["^[^$]+"].oneOf[1].properties.'+e]="measurements[0].limits.force."+e,t['properties.process.properties.shutoffValues.patternProperties["^[^$]+"].properties.'+e]="process.shutoffValues.force."+e,t},{}))).reduce(function(e,r){var n=a()(r,2),i=n[0],o=n[1],s=h()(t.$static.message,o)||h()(t.$static.complexMessage,o);return s&&(e[i]=[s]),e},{})},filters:{stringify:function(t){return i()(t," ",2)}},components:{card:d.a,prism:p.a,schemaDetail:m.a}}},FCuZ:function(t,e,r){var n=r("uIr7"),i=r("NGEn");t.exports=function(t,e,r){var o=e(t);return i(t)?o:n(o,r(t))}},Fkvj:function(t,e,r){var n=r("bJWQ"),i=r("PqYH"),o=r("i4ON"),a=r("jD7S"),s=r("py9u"),c=r("mKB/"),u=r("hrPF"),l=r("Nkkh"),f=r("1QDk"),p=r("MoMe"),d=r("xond"),v=r("gHOb"),h=r("UfSK"),m=r("5/Qr"),b=r("WQFf"),y=r("NGEn"),_=r("ggOT"),g=r("yCNF"),x=r("ktak"),j=1,O=2,C=4,w="[object Arguments]",k="[object Function]",P="[object GeneratorFunction]",E="[object Object]",T={};T[w]=T["[object Array]"]=T["[object ArrayBuffer]"]=T["[object DataView]"]=T["[object Boolean]"]=T["[object Date]"]=T["[object Float32Array]"]=T["[object Float64Array]"]=T["[object Int8Array]"]=T["[object Int16Array]"]=T["[object Int32Array]"]=T["[object Map]"]=T["[object Number]"]=T[E]=T["[object RegExp]"]=T["[object Set]"]=T["[object String]"]=T["[object Symbol]"]=T["[object Uint8Array]"]=T["[object Uint8ClampedArray]"]=T["[object Uint16Array]"]=T["[object Uint32Array]"]=!0,T["[object Error]"]=T[k]=T["[object WeakMap]"]=!1,t.exports=function t(e,r,S,A,$,I){var D,F=r&j,M=r&O,z=r&C;if(S&&(D=$?S(e,A,$,I):S(e)),void 0!==D)return D;if(!g(e))return e;var N=y(e);if(N){if(D=h(e),!F)return u(e,D)}else{var U=v(e),Q=U==k||U==P;if(_(e))return c(e,F);if(U==E||U==w||Q&&!$){if(D=M||Q?{}:b(e),!F)return M?f(e,s(D,e)):l(e,a(D,e))}else{if(!T[U])return $?e:{};D=m(e,U,t,F)}}I||(I=new n);var G=I.get(e);if(G)return G;I.set(e,D);var L=z?M?d:p:M?keysIn:x,H=N?void 0:L(e);return i(H||e,function(n,i){H&&(n=e[i=n]),o(D,i,t(n,r,S,i,e,I))}),D}},Fp5l:function(t,e,r){var n=r("bGc4"),i=r("UnEC");t.exports=function(t){return i(t)&&n(t)}},G0Wc:function(t,e,r){var n=r("yCNF"),i=r("HT7L"),o=r("8gK5"),a=Object.prototype.hasOwnProperty;t.exports=function(t){if(!n(t))return o(t);var e=i(t),r=[];for(var s in t)("constructor"!=s||!e&&a.call(t,s))&&r.push(s);return r}},G2xm:function(t,e){t.exports=function(t){return this.__data__.has(t)}},Gs0Q:function(t,e,r){"use strict";e.a={name:"schemaToc",props:{tag:{type:String,default:"li"},schema:{type:Object,required:!0}}}},Gu7T:function(t,e,r){"use strict";e.__esModule=!0;var n,i=r("c/Tr"),o=(n=i)&&n.__esModule?n:{default:n};e.default=function(t){if(Array.isArray(t)){for(var e=0,r=Array(t.length);e<t.length;e++)r[e]=t[e];return r}return(0,o.default)(t)}},HAGj:function(t,e,r){var n=r("i4ON"),i=r("bIjD"),o=r("ZGh9"),a=r("yCNF"),s=r("Ubhr");t.exports=function(t,e,r,c){if(!a(t))return t;for(var u=-1,l=(e=i(e,t)).length,f=l-1,p=t;null!=p&&++u<l;){var d=s(e[u]),v=r;if(u!=f){var h=p[d];void 0===(v=c?c(h,d,p):void 0)&&(v=a(h)?h:o(e[u+1])?[]:{})}n(p,d,v),p=p[d]}return t}},HN2V:function(t,e,r){var n=r("HbnZ"),i=r("0DSl")(function(t,e,r){n(t,e,r)});t.exports=i},HT7L:function(t,e){var r=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||r)}},HbnZ:function(t,e,r){var n=r("bJWQ"),i=r("O1jc"),o=r("rpnb"),a=r("jMi8"),s=r("yCNF"),c=r("t8rQ");t.exports=function t(e,r,u,l,f){e!==r&&o(r,function(o,c){if(s(o))f||(f=new n),a(e,r,c,u,t,l,f);else{var p=l?l(e[c],o,c+"",e,r,f):void 0;void 0===p&&(p=o),i(e,c,p)}},c)}},Hxdr:function(t,e){t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}},ICSD:function(t,e,r){var n=r("ITwD"),i=r("mTAn");t.exports=function(t,e){var r=i(t,e);return n(r)?r:void 0}},ITwD:function(t,e,r){var n=r("gGqR"),i=r("eFps"),o=r("yCNF"),a=r("Ai/T"),s=/^\[object .+?Constructor\]$/,c=Function.prototype,u=Object.prototype,l=c.toString,f=u.hasOwnProperty,p=RegExp("^"+l.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!o(t)||i(t))&&(n(t)?p:s).test(a(t))}},"Ilb/":function(t,e,r){var n=r("Kzd6");t.exports=function(t,e){var r=e?n(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}},JBvZ:function(t,e,r){var n=r("imBK");t.exports=function(t){var e=this.__data__,r=n(e,t);return r<0?void 0:e[r][1]}},Jqj6:function(t,e,r){var n=r("U7Aq"),i=r("3rZI"),o=r("WFiI"),a=1;t.exports=function(t,e,r){var s=e?r(o(t),a):o(t);return i(s,n,new t.constructor)}},KmWZ:function(t,e,r){var n=r("duB3");t.exports=function(){this.__data__=new n,this.size=0}},Kzd6:function(t,e,r){var n=r("qwTf");t.exports=function(t){var e=new t.constructor(t.byteLength);return new n(e).set(new n(t)),e}},LJry:function(t,e,r){"use strict";var n={functional:!0,props:{code:{type:String},language:{type:String,default:"markup"}},render:function(t,e){var r=e.props.code||e.children[0].text,n=e.props.language,i=Prism.languages[n],o="language-"+n;return t("pre",function(t){for(var e=arguments,r=1;r<arguments.length;r++)for(var n in arguments[r])t[n]=e[r][n];return t}({},e.data,{class:[e.data.class,o]}),[t("code",{class:o,domProps:{innerHTML:Prism.highlight(r,i)}})])}};t.exports=n},Lw7C:function(t,e,r){(t.exports=r("YHym")(!1)).push([t.i,"@keyframes spinAround{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}",""])},M1c9:function(t,e){t.exports=function(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(r=r>i?i:r)<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var o=Array(i);++n<i;)o[n]=t[n+e];return o}},MoMe:function(t,e,r){var n=r("FCuZ"),i=r("l9Lx"),o=r("ktak");t.exports=function(t){return n(t,o,i)}},NGEn:function(t,e){var r=Array.isArray;t.exports=r},NLIh:function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r("EXfj"),i=r("WWdk"),o=r("VU/8")(n.a,i.a,!1,null,null,null);o.options.__file="pages\\specification\\v2\\process-message.vue",e.default=o.exports},NVTU:function(t,e,r){"use strict";var n=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",{staticClass:"card collapsibleCard",class:{collapsed:!t.expanded}},[t.$slots.header?r("header",{staticClass:"card-header",on:{click:function(e){e.preventDefault(),t.toggle()}}},[r("p",{staticClass:"card-header-title"},[!t.$slots.headerCollapsed||t.expanded?t._t("header"):t._t("headerCollapsed")],2),r("a",{staticClass:"card-header-icon"},[r("span",{staticClass:"icon"},[r("i",{staticClass:"fa",class:{"fa-angle-down":t.expanded,"fa-angle-up":!t.expanded}})])])]):t._e(),r("transition",{attrs:{name:"rollup","leave-active-class":"collapsing","enter-active-class":"collapsing"},on:{"before-leave":t.beforeleave,leave:t.leave,"after-leave":t.afterleave,"before-enter":t.beforeenter,enter:t.enter,"after-enter":t.afterenter}},[r("div",{directives:[{name:"show",rawName:"v-show",value:t.expanded,expression:"expanded"}]},[r("div",{staticClass:"card-content"},[t._t("default")],2)])])],1)};n._withStripped=!0;var i={render:n,staticRenderFns:[]};e.a=i},NkRn:function(t,e,r){var n=r("TQ3y").Symbol;t.exports=n},Nkkh:function(t,e,r){var n=r("tv3T"),i=r("l9Lx");t.exports=function(t,e){return n(t,i(t),e)}},NqZt:function(t,e){t.exports=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}},O1jc:function(t,e,r){var n=r("nw3t"),i=r("22B7");t.exports=function(t,e,r){(void 0===r||i(t[e],r))&&(void 0!==r||e in t)||n(t,e,r)}},POb3:function(t,e,r){var n=r("ICSD")(r("TQ3y"),"Map");t.exports=n},PqYH:function(t,e){t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length;++r<n&&!1!==e(t[r],r,t););return t}},Q2wK:function(t,e,r){var n=r("8AZL"),i=Math.max;t.exports=function(t,e,r){return e=i(void 0===e?t.length-1:e,0),function(){for(var o=arguments,a=-1,s=i(o.length-e,0),c=Array(s);++a<s;)c[a]=o[e+a];a=-1;for(var u=Array(e+1);++a<e;)u[a]=o[a];return u[e]=r(c),n(t,this,u)}}},Q7hp:function(t,e,r){var n=r("uCi2");t.exports=function(t,e,r){var i=null==t?void 0:n(t,e);return void 0===i?r:i}},Qp3N:function(t,e,r){var n=r("NkRn"),i=r("1Yb9"),o=r("NGEn"),a=n?n.isConcatSpreadable:void 0;t.exports=function(t){return o(t)||i(t)||!!(a&&t&&t[a])}},RGrk:function(t,e,r){var n=r("dCZQ"),i=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return n?void 0!==e[t]:i.call(e,t)}},Rh28:function(t,e){var r=9007199254740991;t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=r}},S7p9:function(t,e){t.exports=function(t){return function(e){return t(e)}}},"T/bE":function(t,e,r){var n=r("94sX"),i=r("ue/d"),o=r("eVIm"),a=r("RGrk"),s=r("Z2pD");function c(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}c.prototype.clear=n,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=s,t.exports=c},T9Hf:function(t,e,r){"use strict";var n=r("77aO"),i=r("NVTU"),o=!1;var a=function(t){o||r("WVEp")},s=r("VU/8")(n.a,i.a,!1,a,null,null);s.options.__file="components\\collapsibleCard.vue",e.a=s.exports},TQ3y:function(t,e,r){var n=r("blYT"),i="object"==typeof self&&self&&self.Object===Object&&self,o=n||i||Function("return this")();t.exports=o},TlPD:function(t,e,r){var n=r("tv3T"),i=r("t8rQ");t.exports=function(t){return n(t,i(t))}},TmV0:function(t,e,r){r("fZOM"),t.exports=r("FeBl").Object.values},U7Aq:function(t,e){t.exports=function(t,e){return t.set(e[0],e[1]),t}},Ubhr:function(t,e,r){var n=r("6MiT"),i=1/0;t.exports=function(t){if("string"==typeof t||n(t))return t;var e=t+"";return"0"==e&&1/t==-i?"-0":e}},UfSK:function(t,e){var r=Object.prototype.hasOwnProperty;t.exports=function(t){var e=t.length,n=t.constructor(e);return e&&"string"==typeof t[0]&&r.call(t,"index")&&(n.index=t.index,n.input=t.input),n}},UnEC:function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},UnLw:function(t,e,r){var n=/^\./,i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g,a=r("fMqj")(function(t){var e=[];return n.test(t)&&e.push(""),t.replace(i,function(t,r,n,i){e.push(n?i.replace(o,"$1"):r||t)}),e});t.exports=a},VORN:function(t,e,r){var n=r("yCNF"),i=Object.create,o=function(){function t(){}return function(e){if(!n(e))return{};if(i)return i(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}}();t.exports=o},Vi3P:function(t,e,r){var n=r("bIjD"),i=r("oqL2"),o=r("Cf65"),a=r("Ubhr");t.exports=function(t,e){return e=n(e,t),null==(t=o(t,e))||delete t[a(i(e))]}},W3Iv:function(t,e,r){t.exports={default:r("wEtr"),__esModule:!0}},W529:function(t,e,r){var n=r("f931")(Object.keys,Object);t.exports=n},WFiI:function(t,e){t.exports=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t,n){r[++e]=[n,t]}),r}},WHce:function(t,e,r){var n=r("037f"),i=r("Zk5a")(n);t.exports=i},WQFf:function(t,e,r){var n=r("VORN"),i=r("vi0E"),o=r("HT7L");t.exports=function(t){return"function"!=typeof t.constructor||o(t)?{}:n(i(t))}},WVEp:function(t,e,r){var n=r("a3hs");"string"==typeof n&&(n=[[t.i,n,""]]),n.locals&&(t.exports=n.locals);r("rjj0")("52cedc5e",n,!1)},WWdk:function(t,e,r){"use strict";var n=function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"process-message content"},[this._m(0),e("p",[this._v("The process message is the format to exchange data out of discrete processes. It also allows to transport process information, part information and measurement data for each phase of the process.")]),e("img",{staticClass:"is-center",attrs:{src:"images/specification/v2/processPayload.svg",alt:"Class diagram of the process data payload",title:"Class diagram of the process data payload"}}),e("schemaDetail",{attrs:{type:"v2/process",examples:this.$static.examples}},[e("card",{attrs:{collapsed:!0}},[e("template",{slot:"header"},[this._v("\n        Minimal message example \n      ")]),e("prism",{attrs:{language:"json"}},[this._v(this._s(this._f("stringify")(this.$static.message)))])],2),e("card",{attrs:{collapsed:!0}},[e("template",{slot:"header"},[this._v("\n        Process message example \n      ")]),e("prism",{attrs:{language:"json"}},[this._v(this._s(this._f("stringify")(this.$static.complexMessage)))])],2)],1)],1)};n._withStripped=!0;var i={render:n,staticRenderFns:[function(){var t=this.$createElement,e=this._self._c||t;return e("h1",[e("a",{attrs:{id:"Process-Payload",title:"Process Payload"}}),this._v("\n    Process Payload\n  ")])}]};e.a=i},WxI4:function(t,e){t.exports=function(){this.__data__=[],this.size=0}},WyC4:function(t,e){var r=/\w*$/;t.exports=function(t){var e=new t.constructor(t.source,r.exec(t));return e.lastIndex=t.lastIndex,e}},Xd32:function(t,e,r){r("+tPU"),r("zQR9"),t.exports=r("5PlU")},YeCl:function(t,e,r){var n=r("CW5P"),i=r("A9mX"),o=r("v8Dt"),a=r("agim"),s=r("Dv2r");function c(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}c.prototype.clear=n,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=s,t.exports=c},YkxI:function(t,e,r){var n=r("wSKX"),i=r("Q2wK"),o=r("WHce");t.exports=function(t,e){return o(i(t,e,n),t+"")}},YsVG:function(t,e,r){var n=r("z4hc"),i=r("S7p9"),o=r("Dc0G"),a=o&&o.isTypedArray,s=a?i(a):n;t.exports=s},Z2pD:function(t,e,r){var n=r("dCZQ"),i="__lodash_hash_undefined__";t.exports=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=n&&void 0===e?i:e,this}},ZGh9:function(t,e){var r=9007199254740991,n=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){return!!(e=null==e?r:e)&&("number"==typeof t||n.test(t))&&t>-1&&t%1==0&&t<e}},ZT2e:function(t,e,r){var n=r("o2mx");t.exports=function(t){return null==t?"":n(t)}},Zk5a:function(t,e){var r=800,n=16,i=Date.now;t.exports=function(t){var e=0,o=0;return function(){var a=i(),s=n-(a-o);if(o=a,s>0){if(++e>=r)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},Zrlr:function(t,e,r){"use strict";e.__esModule=!0,e.default=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}},a3hs:function(t,e,r){(t.exports=r("YHym")(!1)).push([t.i,"@keyframes spinAround{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.card.collapsibleCard>header{cursor:pointer;background-color:#f5f5f5;border-bottom:1px solid hsla(0,0%,4%,.1)}.card.collapsibleCard>header .card-header-icon{text-decoration:none}.card.collapsibleCard>header .card-header-title{font-weight:400}.card.collapsibleCard>header p{margin-bottom:0}.card.collapsibleCard.collapsed header{border-bottom:none}.card.collapsibleCard>div.collapsing{position:relative;height:0;overflow:hidden;display:block;transition-property:height;transition-duration:.35s;transition-timing-function:ease}",""])},aCM0:function(t,e,r){var n=r("NkRn"),i=r("uLhX"),o=r("+66z"),a="[object Null]",s="[object Undefined]",c=n?n.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?s:a:c&&c in Object(t)?i(t):o(t)}},agim:function(t,e,r){var n=r("pTUa");t.exports=function(t){return n(this,t).has(t)}},bGc4:function(t,e,r){var n=r("gGqR"),i=r("Rh28");t.exports=function(t){return null!=t&&i(t.length)&&!n(t)}},bIbi:function(t,e,r){var n=r("ICSD")(r("TQ3y"),"WeakMap");t.exports=n},bIjD:function(t,e,r){var n=r("NGEn"),i=r("hIPy"),o=r("UnLw"),a=r("ZT2e");t.exports=function(t,e){return n(t)?t:i(t,e)?[t]:o(a(t))}},bJWQ:function(t,e,r){var n=r("duB3"),i=r("KmWZ"),o=r("NqZt"),a=r("E4Hj"),s=r("G2xm"),c=r("zpVT");function u(t){var e=this.__data__=new n(t);this.size=e.size}u.prototype.clear=i,u.prototype.delete=o,u.prototype.get=a,u.prototype.has=s,u.prototype.set=c,t.exports=u},bO0Y:function(t,e,r){var n=r("ICSD")(r("TQ3y"),"Promise");t.exports=n},"bXX+":function(t,e,r){"use strict";var n=r("jhkR"),i=r("fvMW"),o=r("VU/8")(n.a,i.a,!1,null,null,null);o.options.__file="components\\schemaLink.vue",e.a=o.exports},bklM:function(t,e,r){var n=r("Fkvj"),i=1,o=4;t.exports=function(t){return n(t,i|o)}},blYT:function(t,e,r){(function(e){var r="object"==typeof e&&e&&e.Object===Object&&e;t.exports=r}).call(e,r("DuR2"))},"c/Tr":function(t,e,r){t.exports={default:r("5zde"),__esModule:!0}},cER1:function(t,e,r){"use strict";var n=r("mvHQ"),i=r.n(n),o=r("fZjL"),a=r.n(o),s=r("Gu7T"),c=r.n(s),u=r("gRE1"),l=r.n(u),f=r("d7EF"),p=r.n(f),d=r("W3Iv"),v=r.n(d),h=r("T9Hf"),m=r("rVUV"),b=(r.n(m),r("Q7hp")),y=r.n(b),_=r("HN2V"),g=r.n(_),x=r("LJry"),j=r.n(x),O=r("lOo0"),C=r("bXX+"),w=r("mQxp"),k=r("4yG7"),P=r.n(k);e.a={props:{type:{type:String,required:!0},examples:{type:Object,required:!1,default:function(){return{}}}},data:function(){return{masterSchema:null,loading:!0}},created:function(){var t=this,e={date:{link:"https://tools.ietf.org/html/rfc3339#section-5.6",name:"RFC3339, 5.6"},email:{link:"https://tools.ietf.org/html/rfc5322#section-3.4.1",name:"RFC5322, 3.4.1"}};r("+99L")("./"+this.type+"_schema.json").then(function(e){return console.time("parsing Schema"),t.masterSchema=new O.a("$",null,e),v()(t.examples).forEach(function(e){var r=p()(e,2),n=r[0],i=r[1];y()(t.masterSchema,n)&&P()(t.masterSchema,n+".examples",i)}),console.timeEnd("parsing Schema"),t.loading=!1,e}).catch(function(t){throw t}),this.$static={formats:{"date-time":e.date,date:e.date,time:e.date,email:e.email}}},methods:{traverse:function(t,e){var r=this;t instanceof O.a?(e(t),v()(t).filter(function(t){var e=p()(t,2),r=e[0];e[1];return"$parent"!==r}).forEach(function(t){var n=p()(t,2),i=(n[0],n[1]);return r.traverse(i,e)})):t instanceof Array?t.forEach(function(t){return r.traverse(t,e)}):t instanceof Object&&l()(t).forEach(function(t){return r.traverse(t,e)})},simplifySchema:function(t){var e=function(t){return t.anyOf&&t.anyOf.indexOf(!0)>=0?[t,!0]:t.allOf&&t.allOf.indexOf(!1)>=0?[t,!1]:t.allOf&&t.allOf.length?[t,new O.a(t.$step,t.$parent,g.a.apply(void 0,[{}].concat(c()(t.allOf.map(function(t){return t.toJSON()})))))]:!0===t.not?[t,!1]:0===a()(t).filter(function(t){return"$"!==t[0]}).length?[t,!0]:null};return this.traverse(t,function(t){!function t(r){if(r){var n=p()(r,2),i=n[0],o=n[1],a=i.$parent;a&&P()(a.schema,a.path,o),i.$parent=null,t(e(a.schema))}}(e(t))}),t}},computed:{schemas:function(){if(!this.masterSchema)return null;var t={};return this.traverse(this.simplifySchema(this.masterSchema),function(e){t[e.$id]=e}),t}},filters:{stringify:function(t){return i()(t," ",2)},capitalize:function(t,e){return t?(t instanceof Array||(t=[t]),t.map(function(t){return""+t[0].toUpperCase()+t.slice(1)}).join(", ")):""}},components:{card:h.a,prism:j.a,schemaToc:w.a,schemaLink:C.a}}},d4US:function(t,e,r){var n=r("ICSD")(r("TQ3y"),"DataView");t.exports=n},d7EF:function(t,e,r){"use strict";e.__esModule=!0;var n=o(r("us/S")),i=o(r("BO1k"));function o(t){return t&&t.__esModule?t:{default:t}}e.default=function(){return function(t,e){if(Array.isArray(t))return t;if((0,n.default)(Object(t)))return function(t,e){var r=[],n=!0,o=!1,a=void 0;try{for(var s,c=(0,i.default)(t);!(n=(s=c.next()).done)&&(r.push(s.value),!e||r.length!==e);n=!0);}catch(t){o=!0,a=t}finally{try{!n&&c.return&&c.return()}finally{if(o)throw a}}return r}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},dCZQ:function(t,e,r){var n=r("ICSD")(Object,"create");t.exports=n},dFpP:function(t,e,r){var n=r("imBK"),i=Array.prototype.splice;t.exports=function(t){var e=this.__data__,r=n(e,t);return!(r<0||(r==e.length-1?e.pop():i.call(e,r,1),--this.size,0))}},dYhQ:function(t,e,r){var n=r("9UkZ");t.exports=function(t){return n(t)?void 0:t}},deUO:function(t,e,r){var n=r("imBK");t.exports=function(t,e){var r=this.__data__,i=n(r,t);return i<0?(++this.size,r.push([t,e])):r[i][1]=e,this}},duB3:function(t,e,r){var n=r("WxI4"),i=r("dFpP"),o=r("JBvZ"),a=r("2Hvv"),s=r("deUO");function c(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}c.prototype.clear=n,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=s,t.exports=c},eFps:function(t,e,r){var n,i=r("+gg+"),o=(n=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"";t.exports=function(t){return!!o&&o in t}},eVIm:function(t,e,r){var n=r("dCZQ"),i="__lodash_hash_undefined__",o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(n){var r=e[t];return r===i?void 0:r}return o.call(e,t)?e[t]:void 0}},f931:function(t,e){t.exports=function(t,e){return function(r){return t(e(r))}}},fBQ2:function(t,e,r){"use strict";var n=r("evD5"),i=r("X8DO");t.exports=function(t,e,r){e in t?n.f(t,e,i(0,r)):t[e]=r}},fMqj:function(t,e,r){var n=r("zGZ6"),i=500;t.exports=function(t){var e=n(t,function(t){return r.size===i&&r.clear(),t}),r=e.cache;return e}},fZOM:function(t,e,r){var n=r("kM2E"),i=r("mbce")(!1);n(n.S,"Object",{values:function(t){return i(t)}})},fvMW:function(t,e,r){"use strict";var n=function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("div",[t._t("default"),!0===t.link?[t._v("\n    yes \n  ")]:!1===t.link?[t._v("\n    no \n  ")]:t.isSchema(t.link)?[r("nuxt-link",{attrs:{to:"#p-"+t.link.$id}},[r("span",{domProps:{innerHTML:t._s(t.link.getPath())}})])]:t.link instanceof Array?r("ul",t._l(t.link,function(e){return r("li",{key:e.$id},[r("nuxt-link",{attrs:{to:"#p-"+e.$id}},[r("span",{domProps:{innerHTML:t._s(e.getPath())}})])],1)})):t.link instanceof Object?r("ul",t._l(t.link,function(e,n){return r("li",[r("nuxt-link",{attrs:{to:"#p-"+e.$id}},[t._v("\n        "+t._s(n)+"\n      ")])],1)})):t._e()],2)};n._withStripped=!0;var i={render:n,staticRenderFns:[]};e.a=i},gGqR:function(t,e,r){var n=r("aCM0"),i=r("yCNF"),o="[object AsyncFunction]",a="[object Function]",s="[object GeneratorFunction]",c="[object Proxy]";t.exports=function(t){if(!i(t))return!1;var e=n(t);return e==a||e==s||e==o||e==c}},gHOb:function(t,e,r){var n=r("d4US"),i=r("POb3"),o=r("bO0Y"),a=r("5N57"),s=r("bIbi"),c=r("aCM0"),u=r("Ai/T"),l="[object Promise]",f="[object WeakMap]",p="[object DataView]",d=u(n),v=u(i),h=u(o),m=u(a),b=u(s),y=c;(n&&y(new n(new ArrayBuffer(1)))!=p||i&&"[object Map]"!=y(new i)||o&&y(o.resolve())!=l||a&&"[object Set]"!=y(new a)||s&&y(new s)!=f)&&(y=function(t){var e=c(t),r="[object Object]"==e?t.constructor:void 0,n=r?u(r):"";if(n)switch(n){case d:return p;case v:return"[object Map]";case h:return l;case m:return"[object Set]";case b:return f}return e}),t.exports=y},gRE1:function(t,e,r){t.exports={default:r("TmV0"),__esModule:!0}},gSvA:function(t,e,r){var n=r("kM2E"),i=r("mbce")(!0);n(n.S,"Object",{entries:function(t){return i(t)}})},ggOT:function(t,e,r){(function(t){var n=r("TQ3y"),i=r("gwcX"),o="object"==typeof e&&e&&!e.nodeType&&e,a=o&&"object"==typeof t&&t&&!t.nodeType&&t,s=a&&a.exports===o?n.Buffer:void 0,c=(s?s.isBuffer:void 0)||i;t.exports=c}).call(e,r("3IRH")(t))},gwcX:function(t,e){t.exports=function(){return!1}},hIPy:function(t,e,r){var n=r("NGEn"),i=r("6MiT"),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;t.exports=function(t,e){if(n(t))return!1;var r=typeof t;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=t&&!i(t))||a.test(t)||!o.test(t)||null!=e&&t in Object(e)}},hrPF:function(t,e){t.exports=function(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}},hvFG:function(t,e,r){"use strict";var n=function(){var t=this.$createElement,e=this._self._c||t;return e(this.tag,{tag:"component"},[e("nuxt-link",{attrs:{to:"#p-"+this.schema.$id}},[e("span",{domProps:{innerHTML:this._s(this.schema.$step)}})]),this.schema.properties||this.schema.patternProperties||this.schema.items?e("ul",[this._l(this.schema.properties,function(t,r){return e("schemaToc",{key:r,attrs:{schema:t}})}),this._l(this.schema.patternProperties,function(t,r){return e("schemaToc",{key:r,attrs:{schema:t}})}),this.schema.items?[this.schema.items instanceof Array?this._l(this.schema.items,function(t,r){return e("schemaToc",{key:r,attrs:{schema:t}})}):e("schemaToc",{attrs:{schema:this.schema.items}})]:this._e()],2):this._e()],1)};n._withStripped=!0;var i={render:n,staticRenderFns:[]};e.a=i},i4ON:function(t,e,r){var n=r("nw3t"),i=r("22B7"),o=Object.prototype.hasOwnProperty;t.exports=function(t,e,r){var a=t[e];o.call(t,e)&&i(a,r)&&(void 0!==r||e in t)||n(t,e,r)}},imBK:function(t,e,r){var n=r("22B7");t.exports=function(t,e){for(var r=t.length;r--;)if(n(t[r][0],e))return r;return-1}},jD7S:function(t,e,r){var n=r("tv3T"),i=r("ktak");t.exports=function(t,e){return t&&n(e,i(e),t)}},jMi8:function(t,e,r){var n=r("O1jc"),i=r("mKB/"),o=r("Ilb/"),a=r("hrPF"),s=r("WQFf"),c=r("1Yb9"),u=r("NGEn"),l=r("Fp5l"),f=r("ggOT"),p=r("gGqR"),d=r("yCNF"),v=r("9UkZ"),h=r("YsVG"),m=r("TlPD");t.exports=function(t,e,r,b,y,_,g){var x=t[r],j=e[r],O=g.get(j);if(O)n(t,r,O);else{var C=_?_(x,j,r+"",t,e,g):void 0,w=void 0===C;if(w){var k=u(j),P=!k&&f(j),E=!k&&!P&&h(j);C=j,k||P||E?u(x)?C=x:l(x)?C=a(x):P?(w=!1,C=i(j,!0)):E?(w=!1,C=o(j,!0)):C=[]:v(j)||c(j)?(C=x,c(x)?C=m(x):(!d(x)||b&&p(x))&&(C=s(j))):w=!1}w&&(g.set(j,C),y(C,j,b,_,g),g.delete(j)),n(t,r,C)}}},jhkR:function(t,e,r){"use strict";var n=r("lOo0");e.a={props:{link:{required:!0}},methods:{isSchema:function(t){return t instanceof n.a}}}},ktak:function(t,e,r){var n=r("7e4z"),i=r("/GnY"),o=r("bGc4");t.exports=function(t){return o(t)?n(t):i(t)}},l9Lx:function(t,e,r){var n=r("lb6C"),i=r("C0hh"),o=Object.prototype.propertyIsEnumerable,a=Object.getOwnPropertySymbols,s=a?function(t){return null==t?[]:(t=Object(t),n(a(t),function(e){return o.call(t,e)}))}:i;t.exports=s},lOo0:function(t,e,r){"use strict";var n=r("woOf"),i=r.n(n),o=r("d7EF"),a=r.n(o),s=r("W3Iv"),c=r.n(s),u=r("Zrlr"),l=r.n(u),f=r("wxAW"),p=r.n(f),d=r("bklM"),v=r.n(d),h=r("rVUV"),m=r.n(h),b=r("Dc7M"),y=r.n(b),_=function(){function t(e,r,n){l()(this,t),this.$id=t.idx++,this.$step=e,this.$parent=r,n&&this.parseFrom(n)}return p()(t,[{key:"toJSON",value:function(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this;return m()(r,function(r,n,i,o){if(r instanceof t)return c()(r).filter(function(t){var e=a()(t,2),r=e[0];e[1];return["$id","$step","$parent"].indexOf(r)<0}).reduce(function(t,r){var n=a()(r,2),i=n[0],o=n[1];return t[i]=e.toJSON(o),t},{})})}},{key:"getPath",value:function(){var t="";return this.$parent&&(t+=this.$parent.schema.getPath(),"object"===this.$parent.schema.type&&(t+=".")),t+=this.$step,this.getPath=function(){return t},t}},{key:"parseFrom",value:function(e){var r=this;return!0===e?e={}:!1===e&&(e={not:!0}),i()(this,y()(v()(e),["$step","$id","$parent","items","properties","patternProperties","additionalItems","additionalProperties","contains","propertyNames","not","allOf","anyOf","oneOf"])),e.items&&(e.items instanceof Array?this.items=e.items.map(function(n,i){return new t("["+i+"]",{schema:r,path:"items["+i+"]"}).parseFrom(e.items[i])}):this.items=new t("[*]",{schema:this,path:"items"}).parseFrom(e.items)),["properties","patternProperties"].filter(function(t){return e.hasOwnProperty(t)}).forEach(function(n){return c()(e[n]).forEach(function(e,i){var o=a()(e,2),s=o[0],c=o[1];r[n]=r[n]||{},r[n][s]=new t(""+("patternProperties"===n?"&lt;field&gt;":s),{schema:r,path:n+'["'+s+'"]'}).parseFrom(c)})}),["additionalItems","additionalProperties","contains","propertyNames","not"].filter(function(t){return e.hasOwnProperty(t)}).forEach(function(n){r[n]=new t("+",{schema:r,path:n}).parseFrom(e[n])}),["allOf","anyOf","oneOf"].filter(function(t){return e.hasOwnProperty(t)}).forEach(function(n){return e[n].forEach(function(e,i){r[n]=r[n]||[],r[n].push(new t("("+i+")"+("anyOf"===n?"?":"+"),{schema:r,path:n+"["+i+"]"}).parseFrom(e))})}),this}}]),t}();_.idx=0,e.a=_},lb6C:function(t,e){t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length,i=0,o=[];++r<n;){var a=t[r];e(a,r,t)&&(o[i++]=a)}return o}},"mKB/":function(t,e,r){(function(t){var n=r("TQ3y"),i="object"==typeof e&&e&&!e.nodeType&&e,o=i&&"object"==typeof t&&t&&!t.nodeType&&t,a=o&&o.exports===i?n.Buffer:void 0,s=a?a.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var r=t.length,n=s?s(r):new t.constructor(r);return t.copy(n),n}}).call(e,r("3IRH")(t))},mQxp:function(t,e,r){"use strict";var n=r("Gs0Q"),i=r("hvFG"),o=!1;var a=function(t){o||r("AxiT")},s=r("VU/8")(n.a,i.a,!1,a,null,null);s.options.__file="components\\schemaToc.vue",e.a=s.exports},mTAn:function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},mbce:function(t,e,r){var n=r("lktj"),i=r("TcQ7"),o=r("NpIQ").f;t.exports=function(t){return function(e){for(var r,a=i(e),s=n(a),c=s.length,u=0,l=[];c>u;)o.call(a,r=s[u++])&&l.push(t?[r,a[r]]:a[r]);return l}}},mgnk:function(t,e,r){var n=r("aCM0"),i=r("UnEC"),o="[object Arguments]";t.exports=function(t){return i(t)&&n(t)==o}},nWuj:function(t,e){t.exports=function(t,e){return t.add(e),t}},nw3t:function(t,e,r){var n=r("p0bc");t.exports=function(t,e,r){"__proto__"==e&&n?n(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}},o2mx:function(t,e,r){var n=r("NkRn"),i=r("Hxdr"),o=r("NGEn"),a=r("6MiT"),s=1/0,c=n?n.prototype:void 0,u=c?c.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(o(e))return i(e,t)+"";if(a(e))return u?u.call(e):"";var r=e+"";return"0"==r&&1/e==-s?"-0":r}},octw:function(t,e){t.exports=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t){r[++e]=t}),r}},oqL2:function(t,e){t.exports=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}},p0bc:function(t,e,r){var n=r("ICSD"),i=function(){try{var t=n(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},pTUa:function(t,e,r){var n=r("/I3N");t.exports=function(t,e){var r=t.__data__;return n(e)?r["string"==typeof e?"string":"hash"]:r.map}},py9u:function(t,e,r){var n=r("tv3T"),i=r("t8rQ");t.exports=function(t,e){return t&&n(e,i(e),t)}},qwTf:function(t,e,r){var n=r("TQ3y").Uint8Array;t.exports=n},qyJz:function(t,e,r){"use strict";var n=r("+ZMJ"),i=r("kM2E"),o=r("sB3e"),a=r("msXi"),s=r("Mhyx"),c=r("QRG4"),u=r("fBQ2"),l=r("3fs2");i(i.S+i.F*!r("dY0y")(function(t){Array.from(t)}),"Array",{from:function(t){var e,r,i,f,p=o(t),d="function"==typeof this?this:Array,v=arguments.length,h=v>1?arguments[1]:void 0,m=void 0!==h,b=0,y=l(p);if(m&&(h=n(h,v>2?arguments[2]:void 0,2)),void 0==y||d==Array&&s(y))for(r=new d(e=c(p.length));e>b;b++)u(r,b,m?h(p[b],b):p[b]);else for(f=y.call(p),r=new d;!(i=f.next()).done;b++)u(r,b,m?a(f,h,[i.value,b],!0):i.value);return r.length=b,r}})},rCVp:function(t,e,r){var n=r("1C79");t.exports=function(t){return null!=t&&t.length?n(t,1):[]}},rVUV:function(t,e,r){var n=r("Fkvj"),i=1,o=4;t.exports=function(t,e){return n(t,i|o,e="function"==typeof e?e:void 0)}},rpnb:function(t,e,r){var n=r("tHks")();t.exports=n},s8mu:function(t,e,r){"use strict";var n=r("cER1"),i=r("D9sP"),o=!1;var a=function(t){o||r("A51D")},s=r("VU/8")(n.a,i.a,!1,a,null,null);s.options.__file="components\\schemaDetail.vue",e.a=s.exports},t8rQ:function(t,e,r){var n=r("7e4z"),i=r("G0Wc"),o=r("bGc4");t.exports=function(t){return o(t)?n(t,!0):i(t)}},tHks:function(t,e){t.exports=function(t){return function(e,r,n){for(var i=-1,o=Object(e),a=n(e),s=a.length;s--;){var c=a[t?s:++i];if(!1===r(o[c],c,o))break}return e}}},tv3T:function(t,e,r){var n=r("i4ON"),i=r("nw3t");t.exports=function(t,e,r,o){var a=!r;r||(r={});for(var s=-1,c=e.length;++s<c;){var u=e[s],l=o?o(r[u],t[u],u,r,t):void 0;void 0===l&&(l=t[u]),a?i(r,u,l):n(r,u,l)}return r}},uCi2:function(t,e,r){var n=r("bIjD"),i=r("Ubhr");t.exports=function(t,e){for(var r=0,o=(e=n(e,t)).length;null!=t&&r<o;)t=t[i(e[r++])];return r&&r==o?t:void 0}},uIr7:function(t,e){t.exports=function(t,e){for(var r=-1,n=e.length,i=t.length;++r<n;)t[i+r]=e[r];return t}},uLhX:function(t,e,r){var n=r("NkRn"),i=Object.prototype,o=i.hasOwnProperty,a=i.toString,s=n?n.toStringTag:void 0;t.exports=function(t){var e=o.call(t,s),r=t[s];try{t[s]=void 0;var n=!0}catch(t){}var i=a.call(t);return n&&(e?t[s]=r:delete t[s]),i}},"ue/d":function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},uieL:function(t,e){t.exports=function(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}},"us/S":function(t,e,r){t.exports={default:r("Xd32"),__esModule:!0}},v8Dt:function(t,e,r){var n=r("pTUa");t.exports=function(t){return n(this,t).get(t)}},vi0E:function(t,e,r){var n=r("f931")(Object.getPrototypeOf,Object);t.exports=n},wEtr:function(t,e,r){r("gSvA"),t.exports=r("FeBl").Object.entries},wSKX:function(t,e){t.exports=function(t){return t}},wxAW:function(t,e,r){"use strict";e.__esModule=!0;var n,i=r("C4MV"),o=(n=i)&&n.__esModule?n:{default:n};e.default=function(){function t(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),(0,o.default)(t,n.key,n)}}return function(e,r,n){return r&&t(e.prototype,r),n&&t(e,n),e}}()},xond:function(t,e,r){var n=r("FCuZ"),i=r("09Qt"),o=r("t8rQ");t.exports=function(t){return n(t,o,i)}},yCNF:function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},z4hc:function(t,e,r){var n=r("aCM0"),i=r("Rh28"),o=r("UnEC"),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1,t.exports=function(t){return o(t)&&i(t.length)&&!!a[n(t)]}},zBOP:function(t,e,r){var n=r("22B7"),i=r("bGc4"),o=r("ZGh9"),a=r("yCNF");t.exports=function(t,e,r){if(!a(r))return!1;var s=typeof e;return!!("number"==s?i(r)&&o(e,r.length):"string"==s&&e in r)&&n(r[e],t)}},zGZ6:function(t,e,r){var n=r("YeCl"),i="Expected a function";function o(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError(i);var r=function(){var n=arguments,i=e?e.apply(this,n):n[0],o=r.cache;if(o.has(i))return o.get(i);var a=t.apply(this,n);return r.cache=o.set(i,a)||o,a};return r.cache=new(o.Cache||n),r}o.Cache=n,t.exports=o},zpVT:function(t,e,r){var n=r("duB3"),i=r("POb3"),o=r("YeCl"),a=200;t.exports=function(t,e){var r=this.__data__;if(r instanceof n){var s=r.__data__;if(!i||s.length<a-1)return s.push([t,e]),this.size=++r.size,this;r=this.__data__=new o(s)}return r.set(t,e),this.size=r.size,this}}});