webpackJsonp([2],{"3IRH":function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},"5PlU":function(e,t,s){var a=s("RY/4"),n=s("dSzd")("iterator"),i=s("/bQp");e.exports=s("FeBl").isIterable=function(e){var t=Object(e);return void 0!==t[n]||"@@iterator"in t||i.hasOwnProperty(a(t))}},"5pwE":function(e,t,s){(e.exports=s("YHym")(!1)).push([e.i,".schemaDetail a{text-decoration:none}.schemaDetail .property ul{list-style-type:disc;padding-left:1em;margin-left:0;margin-top:0}",""])},"77aO":function(e,t,s){"use strict";t.a={props:{collapsed:{type:Boolean,default:!1}},data:function(){return{expanded:!this.collapsed,transitioning:!1}},watch:{collapsed:function(e){this.expanded=!e}},methods:{beforeenter:function(e){this.transitioning=!0,e.style.height=0},enter:function(e){e.style.height=e.scrollHeight+"px"},afterenter:function(e){e.style.height="",this.transitioning=!1},beforeleave:function(e){this.transitioning=!0,e.style.height=e.offsetHeight+"px",e.offsetHeight},leave:function(e){e.style.height=0,e.offsetHeight},afterleave:function(e){this.transitioning=!1},toggle:function(){this.transitioning||(this.expanded=!this.expanded,this.$emit(this.expanded?"expanding":"collapsing",this.id))}}}},A51D:function(e,t,s){var a=s("5pwE");"string"==typeof a&&(a=[[e.i,a,""]]),a.locals&&(e.exports=a.locals);s("rjj0")("188b52d2",a,!1)},AxiT:function(e,t,s){var a=s("Lw7C");"string"==typeof a&&(a=[[e.i,a,""]]),a.locals&&(e.exports=a.locals);s("rjj0")("0868896c",a,!1)},D9sP:function(e,t,s){"use strict";var a=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"schemaDetail",class:{"is-loading":e.loading},attrs:{id:"schema-detail"}},[s("div",{staticClass:"accordion"},[null!==e.schemas?s("card",{attrs:{collapsed:!0}},[s("template",{slot:"header"},[e._v("\n          Structure of payload\n        ")]),s("schemaToc",{attrs:{schemas:e.schemas,tag:"div"}})],2):e._e(),e._t("default")],2),s("h1",[s("a",{attrs:{id:e.type+"-schema-detail",title:e.type+" Fields definition"}}),e._v("\n      Fields definition\n    ")]),e._l(e.schemas,function(t){return s("div",{key:t.$key,staticClass:"card property"},[s("header",{staticClass:"card-header"},[s("a",{attrs:{id:"p-"+t.$idx}}),s("p",{staticClass:"card-header-title"},[s("span",{domProps:{innerHTML:e._s(t.$path)}})]),s("nuxt-link",{staticClass:"card-header-icon",attrs:{to:"#schema-detail",title:"go up"}},[s("span",{staticClass:"icon"},[s("i",{staticClass:"fa fa-angle-up"})])])],1),s("div",{staticClass:"card-content"},[t.description||t.type?s("div",{staticClass:"field is-horizontal"},[e._m(0,!0),t.description?s("div",{staticClass:"field-body"},[e._v("\n            "+e._s(t.description)+"\n          ")]):t.type?s("div",{staticClass:"field-body"},[e._v("\n            A simple "+e._s(e._f("capitalize")(t.type))+"\n          ")]):e._e()]):e._e(),t.$parent?s("div",{staticClass:"field is-horizontal"},[e._m(1,!0),s("div",{staticClass:"field-body"},[s("nuxt-link",{attrs:{to:"#p-"+t.$parent[0].$idx}},[s("span",{domProps:{innerHTML:e._s(t.$parent[0].$path)}})])],1)]):e._e(),t.type?s("div",{staticClass:"field is-horizontal"},[e._m(2,!0),s("div",{staticClass:"field-body"},[e._v("\n            "+e._s(e._f("capitalize")(t.type,t))+"\n          ")])]):e._e(),t.format?s("div",{staticClass:"field is-horizontal"},[e._m(3,!0),s("div",{staticClass:"field-body"},[e._v("\n            "+e._s(t.format)+"\n            "),e.$static.formats[t.format]?s("a",{attrs:{href:e.$static.formats[t.format].link}},[e._v(" ("+e._s(e.$static.formats[t.format].name)+")")]):e._e()])]):e._e(),t.enum&&t.enum.length?s("div",{staticClass:"field is-horizontal"},[e._m(4,!0),s("div",{staticClass:"field-body"},[s("div",[e._v("\n              "+e._s(t.enum.join(", "))+"\n            ")])])]):e._e(),t.hasOwnProperty("default")?s("div",{staticClass:"field is-horizontal"},[e._m(5,!0),s("div",{staticClass:"field-body"},[s("div",[e._v("\n              "+e._s(t.default)+"\n            ")])])]):e._e(),t.maxLength?s("div",{staticClass:"field is-horizontal"},[e._m(6,!0),s("div",{staticClass:"field-body"},[s("div",[e._v("\n              "+e._s(t.maxLength)+"\n            ")])])]):e._e(),t.properties||t.patternProperties||t.items?s("div",{staticClass:"field is-horizontal"},[e._m(7,!0),s("div",{staticClass:"field-body"},[Object.keys(t.properties||{}).length>0?s("schemaLink",{attrs:{schemas:e.schemas,link:t.properties}}):e._e(),Object.keys(t.patternProperties||{}).length>0?s("schemaLink",{attrs:{schemas:e.schemas,link:t.patternProperties}},[s("div",[e._v("Matching regular expressions:")])]):e._e(),!t.items||t.items instanceof Array?t.items?s("schemaLink",{attrs:{schemas:e.schemas,link:t.items}},[s("div",[e._v("Ordered items of type:")])]):e._e():s("schemaLink",{attrs:{schemas:e.schemas,link:t.items}}),Object.keys(t.properties||{}).length+Object.keys(t.patternProperties||{}).length!==0||t.items?e._e():[e._v("none")]],2)]):e._e(),t.minProperties?s("div",{staticClass:"field is-horizontal"},[e._m(8,!0),s("div",{staticClass:"field-body"},[s("div",[e._v("\n              "+e._s(t.minProperties)+"\n            ")])])]):e._e(),t.minItems?s("div",{staticClass:"field is-horizontal"},[e._m(9,!0),s("div",{staticClass:"field-body"},[s("div",[e._v("\n              "+e._s(t.minItems)+"\n            ")])])]):e._e(),t.hasOwnProperty("additionalProperties")?s("div",{staticClass:"field is-horizontal"},[e._m(10,!0),"boolean"==typeof t.additionalProperties?s("schemaLink",{staticClass:"field-body",attrs:{schemas:e.schemas,link:t.additionalProperties}}):s("div",{staticClass:"field-body"},[e._v("\n            if fulfilling "),s("schemaLink",{staticClass:"field-body",attrs:{schemas:e.schemas,link:t.additionalProperties}})],1)],1):e._e(),t.not||t.oneOf||t.allOf||t.anyOf?s("div",{staticClass:"field is-horizontal"},[e._m(11,!0),s("div",{staticClass:"field-body"},[t.not?s("schemaLink",{attrs:{schemas:e.schemas,link:t.not}},[e._v("\n              Not fulfilling \n            ")]):e._e(),t.oneOf?s("schemaLink",{attrs:{schemas:e.schemas,link:t.oneOf}},[s("div",[e._v("Fulfilling exactly one of:")])]):e._e(),t.allOf?s("schemaLink",{attrs:{schemas:e.schemas,link:t.allOf}},[s("div",[e._v("Fulfilling all of:")])]):e._e(),t.anyOf?s("schemaLink",{attrs:{schemas:e.schemas,link:t.anyOf}},[s("div",[e._v("Fulfilling one of:")])]):e._e()],1)]):e._e(),t.required&&t.required.length?s("div",{staticClass:"field is-horizontal"},[e._m(12,!0),s("div",{staticClass:"field-body"},[e._v("\n            "+e._s(t.required.join(", "))+"\n          ")])]):e._e(),e.examples.hasOwnProperty(t.$key)?s("div",{staticClass:"field is-horizontal"},[e._m(13,!0),s("div",{staticClass:"field-body"},[s("prism",{attrs:{language:"json"}},[e._v('...\n"'+e._s(e.examples[t.$key][1])+'": '+e._s(e._f("stringify")(e.examples[t.$key][0][e.examples[t.$key][1]]))+"\n...")])],1)]):e._e()])])})],2)};a._withStripped=!0;var n={render:a,staticRenderFns:[function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Description:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Parent:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Type:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Format:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Possible values:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Defaults to:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Maximum length:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Restriction on subfields:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Minimum amount of subfields:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Minimum amount of items:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Allows additional fields:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Restriction with boolean logic:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Required fields:")])])},function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"field-label"},[t("label",{staticClass:"label"},[this._v("Example:")])])}]};t.a=n},Gs0Q:function(e,t,s){"use strict";t.a={name:"schemaToc",props:{tag:{type:String,default:"li"},schemas:{type:Object},entryNode:{type:String,default:"$"}},computed:{schema:function(){return this.schemas[this.entryNode]}}}},JHN9:function(e,t,s){"use strict";var a=function(){var e=this.$createElement,t=this._self._c||e;return t("div",{staticClass:"machine-message content"},[this._m(0),t("p",[this._v("The main purpose of the machine message format is to allow devices and integrators to send messages containing an interpretation of measurement data or status.")]),t("img",{staticClass:"is-centered",attrs:{src:"images/messagePayload.svg",alt:"Class diagram of the message payload",title:"Class diagram of the message payload"}}),t("schemaDetail",{attrs:{type:"message",examples:this.$static.examples}},[t("card",{attrs:{collapsed:!0}},[t("template",{slot:"header"},[this._v("\n        Minimal message example\n      ")]),t("prism",{attrs:{language:"json"}},[this._v(this._s(this._f("stringify")(this.$static.message)))])],2),t("card",{attrs:{collapsed:!0}},[t("template",{slot:"header"},[this._v("\n        Multiple message example\n      ")]),t("prism",{attrs:{language:"json"}},[this._v(this._s(this._f("stringify")(this.$static.multipleMachineMessages)))])],2)],1)],1)};a._withStripped=!0;var n={render:a,staticRenderFns:[function(){var e=this.$createElement,t=this._self._c||e;return t("h1",[t("a",{attrs:{id:"Message-Payload",title:"Machine Message Payload"}}),this._v("\n    Machine Message Payload\n  ")])}]};t.a=n},LJry:function(e,t,s){"use strict";var a={functional:!0,props:{code:{type:String},language:{type:String,default:"markup"}},render:function(e,t){var s=t.props.code||t.children[0].text,a=t.props.language,n=Prism.languages[a],i="language-"+a;return e("pre",function(e){for(var t=arguments,s=1;s<arguments.length;s++)for(var a in arguments[s])e[a]=t[s][a];return e}({},t.data,{class:[t.data.class,i]}),[e("code",{class:i,domProps:{innerHTML:Prism.highlight(s,n)}})])}};e.exports=a},Lw7C:function(e,t,s){(e.exports=s("YHym")(!1)).push([e.i,"@keyframes spinAround{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}",""])},NVTU:function(e,t,s){"use strict";var a=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"card collapsibleCard",class:{collapsed:!e.expanded}},[e.$slots.header?s("header",{staticClass:"card-header",on:{click:function(t){t.preventDefault(),e.toggle()}}},[s("p",{staticClass:"card-header-title"},[!e.$slots.headerCollapsed||e.expanded?e._t("header"):e._t("headerCollapsed")],2),s("a",{staticClass:"card-header-icon"},[s("span",{staticClass:"icon"},[s("i",{staticClass:"fa",class:{"fa-angle-down":e.expanded,"fa-angle-up":!e.expanded}})])])]):e._e(),s("transition",{attrs:{name:"rollup","leave-active-class":"collapsing","enter-active-class":"collapsing"},on:{"before-leave":e.beforeleave,leave:e.leave,"after-leave":e.afterleave,"before-enter":e.beforeenter,enter:e.enter,"after-enter":e.afterenter}},[s("div",{directives:[{name:"show",rawName:"v-show",value:e.expanded,expression:"expanded"}]},[s("div",{staticClass:"card-content"},[e._t("default")],2)])])],1)};a._withStripped=!0;var n={render:a,staticRenderFns:[]};t.a=n},T9Hf:function(e,t,s){"use strict";var a=s("77aO"),n=s("NVTU"),i=!1;var r=function(e){i||s("WVEp")},o=s("VU/8")(a.a,n.a,!1,r,null,null);o.options.__file="components\\collapsibleCard.vue",t.a=o.exports},TmV0:function(e,t,s){s("fZOM"),e.exports=s("FeBl").Object.values},W3Iv:function(e,t,s){e.exports={default:s("wEtr"),__esModule:!0}},WVEp:function(e,t,s){var a=s("a3hs");"string"==typeof a&&(a=[[e.i,a,""]]),a.locals&&(e.exports=a.locals);s("rjj0")("52cedc5e",a,!1)},Xd32:function(e,t,s){s("+tPU"),s("zQR9"),e.exports=s("5PlU")},a3hs:function(e,t,s){(e.exports=s("YHym")(!1)).push([e.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}",""])},bOdI:function(e,t,s){"use strict";t.__esModule=!0;var a,n=s("C4MV"),i=(a=n)&&a.__esModule?a:{default:a};t.default=function(e,t,s){return t in e?(0,i.default)(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}},"bXX+":function(e,t,s){"use strict";var a=s("jhkR"),n=s("fvMW"),i=s("VU/8")(a.a,n.a,!1,null,null,null);i.options.__file="components\\schemaLink.vue",t.a=i.exports},cER1:function(e,t,s){"use strict";var a=s("mvHQ"),n=s.n(a),i=s("gRE1"),r=s.n(i),o=s("fZjL"),c=s.n(o),l=s("d7EF"),u=s.n(l),f=s("W3Iv"),d=s.n(f),p=s("bOdI"),h=s.n(p),m=s("woOf"),v=s.n(m),_=s("LJry"),y=s.n(_),g=s("zM1N"),b=s.n(g),$=s("T9Hf"),C=s("mQxp"),k=s("bXX+");t.a={props:{type:{type:String,required:!0},examples:{type:Object,required:!1,default:function(){return{}}}},data:function(){return{schema:null,loading:!0}},created:function(){var e=this,t={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"}};s("kGrr")("./"+this.type+"_schema.json").then(function(t){return e.schema=t,e.loading=!1,e.idx=0,t}).catch(function(e){throw e}),this.$static={formats:{"date-time":t.date,date:t.date,time:t.date,email:t.email}}},methods:{flattenSchema:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{$key:"$",$path:"$"};!0===t?t={}:!1===t&&(t={not:!0});var a=h()({},s.$key,v()(t,s,{$idx:++this.idx}));if(t.items)if(t.items instanceof Array)t.items.forEach(function(n,i){var r={$key:s.$key+"/"+i,$path:s.$path+"["+i+"]",$parent:[t,t.items,i]};v()(a,e.flattenSchema(n,r)),t.items[i]=r.$key});else{var n={$key:s.$key+"/",$path:s.$path+"[*]",$parent:[t,t,"items"]};v()(a,this.flattenSchema(t.items,n)),t.items=n.$key}return["properties","patternProperties"].filter(function(e){return t.hasOwnProperty(e)}).forEach(function(n){return d()(t[n]).forEach(function(i,r){var o=u()(i,2),c=o[0],l=o[1],f={$key:s.$key+"/"+n+"/"+encodeURIComponent(c),$path:s.$path+"&#8203;.",$parent:[t,t[n],c]};f.$path+="patternProperties"===n?"&lt;field&gt;":c,v()(a,e.flattenSchema(l,f)),t[n][c]=f.$key})}),["additionalItems","additionalProperties","contains","propertyNames","not"].filter(function(e){return t.hasOwnProperty(e)}).forEach(function(n){var i={$key:s.$key+"/"+n,$path:s.$path+"+",$parent:[t,t,n]};v()(a,e.flattenSchema(t[n],i)),t[n]=i.$key}),["allOf","anyOf","oneOf"].filter(function(e){return t.hasOwnProperty(e)}).forEach(function(n){return t[n].forEach(function(i,r){var o={$key:s.$key+"/"+n+"/"+r,$path:s.$path+"("+r+")?",$parent:[t,t[n],r]};v()(a,e.flattenSchema(i,o)),t[n][r]=o.$key})}),a},shrinkSchemas:function(e){var t=function(e){return e.anyOf&&e.anyOf.indexOf(!0)>=0?[e,!0]:e.allOf&&e.allOf.indexOf(!1)>=0?[e,!1]:!0===e.not?[e,!1]:0===c()(e).filter(function(e){return"$"!==e[0]}).length?[e,!0]:null};return r()(e).map(t).filter(function(e){return e}).forEach(function s(a){if(a){var n=u()(a,2),i=n[0],r=n[1];i.$parent[1][i.$parent[2]]=r,delete e[i.$key],s(t(i.$parent[0]))}}),e}},computed:{schemas:function(){return null===this.schema?null:this.shrinkSchemas(this.flattenSchema(b()(this.schema)))}},filters:{stringify:function(e){return n()(e," ",2)},capitalize:function(e,t){return e?(e instanceof Array||(e=[e]),e.map(function(e){return""+e[0].toUpperCase()+e.slice(1)}).join(", ")):""}},components:{card:$.a,prism:y.a,schemaToc:C.a,schemaLink:k.a}}},d7EF:function(e,t,s){"use strict";t.__esModule=!0;var a=i(s("us/S")),n=i(s("BO1k"));function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(){return function(e,t){if(Array.isArray(e))return e;if((0,a.default)(Object(e)))return function(e,t){var s=[],a=!0,i=!1,r=void 0;try{for(var o,c=(0,n.default)(e);!(a=(o=c.next()).done)&&(s.push(o.value),!t||s.length!==t);a=!0);}catch(e){i=!0,r=e}finally{try{!a&&c.return&&c.return()}finally{if(i)throw r}}return s}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},fZOM:function(e,t,s){var a=s("kM2E"),n=s("mbce")(!1);a(a.S,"Object",{values:function(e){return n(e)}})},fvMW:function(e,t,s){"use strict";var a=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",[e._t("default"),!0===e.link?[e._v("\n    yes \n  ")]:!1===e.link?[e._v("\n    no \n  ")]:"string"==typeof e.link?[s("nuxt-link",{attrs:{to:"#p-"+e.schemas[e.link].$idx}},[s("span",{domProps:{innerHTML:e._s(e.schemas[e.link].$path)}})])]:e.link instanceof Array?s("ul",e._l(e.link,function(t){return s("li",[s("nuxt-link",{attrs:{to:"#p-"+e.schemas[t].$idx}},[s("span",{domProps:{innerHTML:e._s(e.schemas[t].$path)}})])],1)})):e.link instanceof Object?s("ul",e._l(e.link,function(t,a){return s("li",[s("nuxt-link",{attrs:{to:"#p-"+e.schemas[t].$idx}},[e._v("\n        "+e._s(a)+"\n      ")])],1)})):e._e()],2)};a._withStripped=!0;var n={render:a,staticRenderFns:[]};t.a=n},gRE1:function(e,t,s){e.exports={default:s("TmV0"),__esModule:!0}},gSvA:function(e,t,s){var a=s("kM2E"),n=s("mbce")(!0);a(a.S,"Object",{entries:function(e){return n(e)}})},hvFG:function(e,t,s){"use strict";var a=function(){var e=this,t=e.$createElement,s=e._self._c||t;return s(e.tag,{tag:"component"},[s("nuxt-link",{attrs:{to:"#p-"+e.schema.$idx}},[s("span",{domProps:{innerHTML:e._s(e.schema.$path)}})]),e.schema.properties||e.schema.patternProperties||e.schema.items?s("ul",[e._l(e.schema.properties,function(t,a){return s("schemaToc",{key:a,attrs:{schemas:e.schemas,entryNode:t}})}),e._l(e.schema.patternProperties,function(t,a){return s("schemaToc",{key:a,attrs:{schemas:e.schemas,entryNode:t}})}),e.schema.items?[e.schema.items instanceof Array?e._l(e.schema.items,function(t,a){return s("schemaToc",{key:a,attrs:{schemas:e.schemas,entryNode:t}})}):s("schemaToc",{attrs:{schemas:e.schemas,entryNode:e.schema.items}})]:e._e()],2):e._e()],1)};a._withStripped=!0;var n={render:a,staticRenderFns:[]};t.a=n},jhkR:function(e,t,s){"use strict";t.a={props:{schemas:{type:Object,required:!0},link:{required:!0}}}},kGrr:function(e,t,s){var a={"./measurement_schema.json":["oGp6",17],"./message_schema.json":["2BTs",16],"./process_schema.json":["rRyJ",15]};function n(e){var t=a[e];return t?s.e(t[1]).then(function(){return s(t[0])}):Promise.reject(new Error("Cannot find module '"+e+"'."))}n.keys=function(){return Object.keys(a)},n.id="kGrr",e.exports=n},mQxp:function(e,t,s){"use strict";var a=s("Gs0Q"),n=s("hvFG"),i=!1;var r=function(e){i||s("AxiT")},o=s("VU/8")(a.a,n.a,!1,r,null,null);o.options.__file="components\\schemaToc.vue",t.a=o.exports},mbce:function(e,t,s){var a=s("lktj"),n=s("TcQ7"),i=s("NpIQ").f;e.exports=function(e){return function(t){for(var s,r=n(t),o=a(r),c=o.length,l=0,u=[];c>l;)i.call(r,s=o[l++])&&u.push(e?[s,r[s]]:r[s]);return u}}},n1iW:function(e,t,s){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var a=s("rqHf"),n=s("JHN9"),i=s("VU/8")(a.a,n.a,!1,null,null,null);i.options.__file="pages\\specification\\machine-message.vue",t.default=i.exports},rqHf:function(e,t,s){"use strict";var a=s("mvHQ"),n=s.n(a),i=s("LJry"),r=s.n(i),o=s("T9Hf"),c=s("s8mu");t.a={head:function(){return{title:"Specification for machine messages"}},created:function(){var e=new Date,t="a4927dad-58d4-4580-b460-79cefd56775b";this.$static={message:{"content-spec":"urn:spec://eclipse.org/unide/machine-message#v2",device:{deviceID:t},messages:[{ts:e.toISOString(),code:"190ABT"}]},multipleMachineMessages:{"content-spec":"urn:spec://eclipse.org/unide/machine-message#v2",device:{deviceID:t,operationalStatus:"normal",metaData:{swVersion:"2.0.3.13",swBuildID:"41535"}},messages:[{origin:"sensor-id-992.2393.22",ts:e.toISOString(),type:"DEVICE",severity:"HIGH",code:"190ABT",title:"control board damaged",description:"Electronic control board or its electrical connections are damaged",hint:"Check the control board",metaData:{firmware:"20130304_22.020"}},{ts:new Date(e.valueOf()+100).toISOString(),type:"TECHNICAL_INFO",severity:"HIGH",code:"33-02",title:"Disk size limit reached",description:"Disk size has reached limit. Unable to write log files."}]}},this.$static.examples={"$/properties/content-spec":[this.$static.message,"content-spec"],"$/properties/device":[this.$static.message,"device"],"$/properties/device/properties/deviceID":[this.$static.message.device,"deviceID"],"$/properties/device/properties/operationalStatus":[this.$static.multipleMachineMessages.device,"operationalStatus"],"$/properties/device/properties/metaData":[this.$static.multipleMachineMessages.device,"metaData"],"$/properties/messages":[this.$static.message,"messages"],"$/properties/messages//properties/ts":[this.$static.message.messages[0],"ts"],"$/properties/messages//properties/origin":[this.$static.multipleMachineMessages.messages[0],"origin"],"$/properties/messages//properties/type":[this.$static.multipleMachineMessages.messages[0],"type"],"$/properties/messages//properties/severity":[this.$static.multipleMachineMessages.messages[0],"severity"],"$/properties/messages//properties/code":[this.$static.message.messages[0],"code"],"$/properties/messages//properties/title":[this.$static.multipleMachineMessages.messages[0],"title"],"$/properties/messages//properties/description":[this.$static.multipleMachineMessages.messages[0],"description"],"$/properties/messages//properties/hint":[this.$static.multipleMachineMessages.messages[0],"hint"],"$/properties/messages//properties/metaData":[this.$static.multipleMachineMessages.messages[0],"metaData"]}},filters:{stringify:function(e){return n()(e," ",2)}},components:{card:o.a,prism:r.a,schemaDetail:c.a}}},s8mu:function(e,t,s){"use strict";var a=s("cER1"),n=s("D9sP"),i=!1;var r=function(e){i||s("A51D")},o=s("VU/8")(a.a,n.a,!1,r,null,null);o.options.__file="components\\schemaDetail.vue",t.a=o.exports},"us/S":function(e,t,s){e.exports={default:s("Xd32"),__esModule:!0}},wEtr:function(e,t,s){s("gSvA"),e.exports=s("FeBl").Object.entries},zM1N:function(e,t,s){(function(e,s){var a=200,n="__lodash_hash_undefined__",i=9007199254740991,r="[object Arguments]",o="[object Boolean]",c="[object Date]",l="[object Function]",u="[object GeneratorFunction]",f="[object Map]",d="[object Number]",p="[object Object]",h="[object Promise]",m="[object RegExp]",v="[object Set]",_="[object String]",y="[object Symbol]",g="[object WeakMap]",b="[object ArrayBuffer]",$="[object DataView]",C="[object Float32Array]",k="[object Float64Array]",j="[object Int8Array]",x="[object Int16Array]",O="[object Int32Array]",w="[object Uint8Array]",M="[object Uint8ClampedArray]",E="[object Uint16Array]",P="[object Uint32Array]",S=/\w*$/,A=/^\[object .+?Constructor\]$/,T=/^(?:0|[1-9]\d*)$/,D={};D[r]=D["[object Array]"]=D[b]=D[$]=D[o]=D[c]=D[C]=D[k]=D[j]=D[x]=D[O]=D[f]=D[d]=D[p]=D[m]=D[v]=D[_]=D[y]=D[w]=D[M]=D[E]=D[P]=!0,D["[object Error]"]=D[l]=D[g]=!1;var I="object"==typeof e&&e&&e.Object===Object&&e,H="object"==typeof self&&self&&self.Object===Object&&self,L=I||H||Function("return this")(),F="object"==typeof t&&t&&!t.nodeType&&t,R=F&&"object"==typeof s&&s&&!s.nodeType&&s,z=R&&R.exports===F;function N(e,t){return e.set(t[0],t[1]),e}function U(e,t){return e.add(t),e}function V(e,t,s,a){var n=-1,i=e?e.length:0;for(a&&i&&(s=e[++n]);++n<i;)s=t(s,e[n],n,e);return s}function B(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}function G(e){var t=-1,s=Array(e.size);return e.forEach(function(e,a){s[++t]=[a,e]}),s}function q(e,t){return function(s){return e(t(s))}}function Q(e){var t=-1,s=Array(e.size);return e.forEach(function(e){s[++t]=e}),s}var W,J=Array.prototype,X=Function.prototype,Y=Object.prototype,Z=L["__core-js_shared__"],K=(W=/[^.]+$/.exec(Z&&Z.keys&&Z.keys.IE_PROTO||""))?"Symbol(src)_1."+W:"",ee=X.toString,te=Y.hasOwnProperty,se=Y.toString,ae=RegExp("^"+ee.call(te).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ne=z?L.Buffer:void 0,ie=L.Symbol,re=L.Uint8Array,oe=q(Object.getPrototypeOf,Object),ce=Object.create,le=Y.propertyIsEnumerable,ue=J.splice,fe=Object.getOwnPropertySymbols,de=ne?ne.isBuffer:void 0,pe=q(Object.keys,Object),he=Re(L,"DataView"),me=Re(L,"Map"),ve=Re(L,"Promise"),_e=Re(L,"Set"),ye=Re(L,"WeakMap"),ge=Re(Object,"create"),be=Be(he),$e=Be(me),Ce=Be(ve),ke=Be(_e),je=Be(ye),xe=ie?ie.prototype:void 0,Oe=xe?xe.valueOf:void 0;function we(e){var t=-1,s=e?e.length:0;for(this.clear();++t<s;){var a=e[t];this.set(a[0],a[1])}}function Me(e){var t=-1,s=e?e.length:0;for(this.clear();++t<s;){var a=e[t];this.set(a[0],a[1])}}function Ee(e){var t=-1,s=e?e.length:0;for(this.clear();++t<s;){var a=e[t];this.set(a[0],a[1])}}function Pe(e){this.__data__=new Me(e)}function Se(e,t){var s,a,n,i=qe(e)||(n=a=s=e)&&"object"==typeof n&&Qe(a)&&te.call(s,"callee")&&(!le.call(s,"callee")||se.call(s)==r)?function(e,t){for(var s=-1,a=Array(e);++s<e;)a[s]=t(s);return a}(e.length,String):[],o=i.length,c=!!o;for(var l in e)!t&&!te.call(e,l)||c&&("length"==l||Ue(l,o))||i.push(l);return i}function Ae(e,t,s){var a=e[t];te.call(e,t)&&Ge(a,s)&&(void 0!==s||t in e)||(e[t]=s)}function Te(e,t){for(var s=e.length;s--;)if(Ge(e[s][0],t))return s;return-1}function De(e,t,s,a,n,i,h){var g;if(a&&(g=i?a(e,n,i,h):a(e)),void 0!==g)return g;if(!Xe(e))return e;var A,T,I,H,L,F,R=qe(e);if(R){if(g=function(e){var t=e.length,s=e.constructor(t);t&&"string"==typeof e[0]&&te.call(e,"index")&&(s.index=e.index,s.input=e.input);return s}(e),!t)return function(e,t){var s=-1,a=e.length;t||(t=Array(a));for(;++s<a;)t[s]=e[s];return t}(e,g)}else{var z=Ne(e),q=z==l||z==u;if(We(e))return function(e,t){if(t)return e.slice();var s=new e.constructor(e.length);return e.copy(s),s}(e,t);if(z==p||z==r||q&&!i){if(B(e))return i?e:{};if(g="function"!=typeof(L=q?{}:e).constructor||Ve(L)?{}:Xe(F=oe(L))?ce(F):{},!t)return A=e,H=e,T=(I=g)&&Le(H,Ye(H),I),Le(A,ze(A),T)}else{if(!D[z])return i?e:{};g=function(e,t,s,a){var n=e.constructor;switch(t){case b:return He(e);case o:case c:return new n(+e);case $:return A=e,T=a?He(A.buffer):A.buffer,new A.constructor(T,A.byteOffset,A.byteLength);case C:case k:case j:case x:case O:case w:case M:case E:case P:return h=e,g=a?He(h.buffer):h.buffer,new h.constructor(g,h.byteOffset,h.length);case f:return p=e,V(a?s(G(p),!0):G(p),N,new p.constructor);case d:case _:return new n(e);case m:return(u=new(l=e).constructor(l.source,S.exec(l))).lastIndex=l.lastIndex,u;case v:return r=e,V(a?s(Q(r),!0):Q(r),U,new r.constructor);case y:return i=e,Oe?Object(Oe.call(i)):{}}var i;var r;var l,u;var p;var h,g;var A,T}(e,z,De,t)}}h||(h=new Pe);var W,J,X,Y=h.get(e);if(Y)return Y;if(h.set(e,g),!R)var Z=s?(J=ze,X=Ye(W=e),qe(W)?X:function(e,t){for(var s=-1,a=t.length,n=e.length;++s<a;)e[n+s]=t[s];return e}(X,J(W))):Ye(e);return function(e,t){for(var s=-1,a=e?e.length:0;++s<a&&!1!==t(e[s],s,e););}(Z||e,function(n,i){Z&&(n=e[i=n]),Ae(g,i,De(n,t,s,a,i,e,h))}),g}function Ie(e){return!(!Xe(e)||K&&K in e)&&(Je(e)||B(e)?ae:A).test(Be(e))}function He(e){var t=new e.constructor(e.byteLength);return new re(t).set(new re(e)),t}function Le(e,t,s,a){s||(s={});for(var n=-1,i=t.length;++n<i;){var r=t[n],o=a?a(s[r],e[r],r,s,e):void 0;Ae(s,r,void 0===o?e[r]:o)}return s}function Fe(e,t){var s,a,n=e.__data__;return("string"==(a=typeof(s=t))||"number"==a||"symbol"==a||"boolean"==a?"__proto__"!==s:null===s)?n["string"==typeof t?"string":"hash"]:n.map}function Re(e,t){var s,a=null==(s=e)?void 0:s[t];return Ie(a)?a:void 0}we.prototype.clear=function(){this.__data__=ge?ge(null):{}},we.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},we.prototype.get=function(e){var t=this.__data__;if(ge){var s=t[e];return s===n?void 0:s}return te.call(t,e)?t[e]:void 0},we.prototype.has=function(e){var t=this.__data__;return ge?void 0!==t[e]:te.call(t,e)},we.prototype.set=function(e,t){return this.__data__[e]=ge&&void 0===t?n:t,this},Me.prototype.clear=function(){this.__data__=[]},Me.prototype.delete=function(e){var t=this.__data__,s=Te(t,e);return!(s<0||(s==t.length-1?t.pop():ue.call(t,s,1),0))},Me.prototype.get=function(e){var t=this.__data__,s=Te(t,e);return s<0?void 0:t[s][1]},Me.prototype.has=function(e){return Te(this.__data__,e)>-1},Me.prototype.set=function(e,t){var s=this.__data__,a=Te(s,e);return a<0?s.push([e,t]):s[a][1]=t,this},Ee.prototype.clear=function(){this.__data__={hash:new we,map:new(me||Me),string:new we}},Ee.prototype.delete=function(e){return Fe(this,e).delete(e)},Ee.prototype.get=function(e){return Fe(this,e).get(e)},Ee.prototype.has=function(e){return Fe(this,e).has(e)},Ee.prototype.set=function(e,t){return Fe(this,e).set(e,t),this},Pe.prototype.clear=function(){this.__data__=new Me},Pe.prototype.delete=function(e){return this.__data__.delete(e)},Pe.prototype.get=function(e){return this.__data__.get(e)},Pe.prototype.has=function(e){return this.__data__.has(e)},Pe.prototype.set=function(e,t){var s=this.__data__;if(s instanceof Me){var n=s.__data__;if(!me||n.length<a-1)return n.push([e,t]),this;s=this.__data__=new Ee(n)}return s.set(e,t),this};var ze=fe?q(fe,Object):function(){return[]},Ne=function(e){return se.call(e)};function Ue(e,t){return!!(t=null==t?i:t)&&("number"==typeof e||T.test(e))&&e>-1&&e%1==0&&e<t}function Ve(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||Y)}function Be(e){if(null!=e){try{return ee.call(e)}catch(e){}try{return e+""}catch(e){}}return""}function Ge(e,t){return e===t||e!=e&&t!=t}(he&&Ne(new he(new ArrayBuffer(1)))!=$||me&&Ne(new me)!=f||ve&&Ne(ve.resolve())!=h||_e&&Ne(new _e)!=v||ye&&Ne(new ye)!=g)&&(Ne=function(e){var t=se.call(e),s=t==p?e.constructor:void 0,a=s?Be(s):void 0;if(a)switch(a){case be:return $;case $e:return f;case Ce:return h;case ke:return v;case je:return g}return t});var qe=Array.isArray;function Qe(e){return null!=e&&("number"==typeof(t=e.length)&&t>-1&&t%1==0&&t<=i)&&!Je(e);var t}var We=de||function(){return!1};function Je(e){var t=Xe(e)?se.call(e):"";return t==l||t==u}function Xe(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Ye(e){return Qe(e)?Se(e):function(e){if(!Ve(e))return pe(e);var t=[];for(var s in Object(e))te.call(e,s)&&"constructor"!=s&&t.push(s);return t}(e)}s.exports=function(e){return De(e,!0,!0)}}).call(t,s("DuR2"),s("3IRH")(e))}});