webpackJsonp([1],{"+66z":function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},"+99L":function(t,e,n){var r={"./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=r[t];return e?n.e(e[1]).then(function(){return n(e[0])}):Promise.reject(new Error("Cannot find module '"+t+"'."))}i.keys=function(){return Object.keys(r)},i.id="+99L",t.exports=i},"+gg+":function(t,e,n){var r=n("TQ3y")["__core-js_shared__"];t.exports=r},"/GnY":function(t,e,n){var r=n("HT7L"),i=n("W529"),o=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return i(t);var e=[];for(var n in Object(t))o.call(t,n)&&"constructor"!=n&&e.push(n);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,n){var r=n("1oyr"),i=n("p0bc"),o=n("wSKX"),a=i?function(t,e){return i(t,"toString",{configurable:!0,enumerable:!1,value:r(e),writable:!0})}:o;t.exports=a},"09Qt":function(t,e,n){var r=n("uIr7"),i=n("vi0E"),o=n("l9Lx"),a=n("C0hh"),s=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)r(e,o(t)),t=i(t);return e}:a;t.exports=s},"0DSl":function(t,e,n){var r=n("YkxI"),i=n("zBOP");t.exports=function(t){return r(function(e,n){var r=-1,o=n.length,a=o>1?n[o-1]:void 0,s=o>2?n[2]:void 0;for(a=t.length>3&&"function"==typeof a?(o--,a):void 0,s&&i(n[0],n[1],s)&&(a=o<3?void 0:a,o=1),e=Object(e);++r<o;){var c=n[r];c&&t(e,c,r,a)}return e})}},"0uX4":function(t,e,n){var r=n("NkRn"),i=r?r.prototype:void 0,o=i?i.valueOf:void 0;t.exports=function(t){return o?Object(o.call(t)):{}}},"1C79":function(t,e,n){var r=n("uIr7"),i=n("Qp3N");t.exports=function t(e,n,o,a,s){var c=-1,u=e.length;for(o||(o=i),s||(s=[]);++c<u;){var l=e[c];n>0&&o(l)?n>1?t(l,n-1,o,a,s):r(s,l):a||(s[s.length]=l)}return s}},"1QDk":function(t,e,n){var r=n("tv3T"),i=n("09Qt");t.exports=function(t,e){return r(t,i(t),e)}},"1Yb9":function(t,e,n){var r=n("mgnk"),i=n("UnEC"),o=Object.prototype,a=o.hasOwnProperty,s=o.propertyIsEnumerable,c=r(function(){return arguments}())?r: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,n){var r=n("imBK");t.exports=function(t){return r(this.__data__,t)>-1}},"2N6f":function(t,e,n){var r=n("rCVp"),i=n("Q2wK"),o=n("WHce");t.exports=function(t){return o(i(t,void 0,r),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,n,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}},"4yG7":function(t,e,n){var r=n("HAGj");t.exports=function(t,e,n){return null==t?t:r(t,e,n)}},"5/Qr":function(t,e,n){var r=n("Kzd6"),i=n("6Git"),o=n("Jqj6"),a=n("WyC4"),s=n("7jYp"),c=n("0uX4"),u=n("Ilb/"),l="[object Boolean]",f="[object Date]",p="[object Map]",d="[object Number]",v="[object RegExp]",h="[object Set]",m="[object String]",y="[object Symbol]",b="[object ArrayBuffer]",_="[object DataView]",x="[object Float32Array]",g="[object Float64Array]",j="[object Int8Array]",C="[object Int16Array]",O="[object Int32Array]",w="[object Uint8Array]",k="[object Uint8ClampedArray]",T="[object Uint16Array]",P="[object Uint32Array]";t.exports=function(t,e,n,A){var E=t.constructor;switch(e){case b:return r(t);case l:case f:return new E(+t);case _:return i(t,A);case x:case g:case j:case C:case O:case w:case k:case T:case P:return u(t,A);case p:return o(t,A,n);case d:case m:return new E(t);case v:return a(t);case h:return s(t,A,n);case y:return c(t)}}},"5N57":function(t,e,n){var r=n("ICSD")(n("TQ3y"),"Set");t.exports=r},"5PlU":function(t,e,n){var r=n("RY/4"),i=n("dSzd")("iterator"),o=n("/bQp");t.exports=n("FeBl").isIterable=function(t){var e=Object(t);return void 0!==e[i]||"@@iterator"in e||o.hasOwnProperty(r(e))}},"5pwE":function(t,e,n){(t.exports=n("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,n){n("zQR9"),n("qyJz"),t.exports=n("FeBl").Array.from},"6Git":function(t,e,n){var r=n("Kzd6");t.exports=function(t,e){var n=e?r(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}},"6MiT":function(t,e,n){var r=n("aCM0"),i=n("UnEC"),o="[object Symbol]";t.exports=function(t){return"symbol"==typeof t||i(t)&&r(t)==o}},"77aO":function(t,e,n){"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,n){var r=n("uieL"),i=n("1Yb9"),o=n("NGEn"),a=n("ggOT"),s=n("ZGh9"),c=n("YsVG"),u=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=o(t),l=!n&&i(t),f=!n&&!l&&a(t),p=!n&&!l&&!f&&c(t),d=n||l||f||p,v=d?r(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,n){var r=n("nWuj"),i=n("3rZI"),o=n("octw"),a=1;t.exports=function(t,e,n){var s=e?n(o(t),a):o(t);return i(s,r,new t.constructor)}},"8AZL":function(t,e){t.exports=function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}},"8gK5":function(t,e){t.exports=function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}},"94sX":function(t,e,n){var r=n("dCZQ");t.exports=function(){this.__data__=r?r(null):{},this.size=0}},"9UkZ":function(t,e,n){var r=n("aCM0"),i=n("vi0E"),o=n("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)||r(t)!=a)return!1;var e=i(t);if(null===e)return!0;var n=l.call(e,"constructor")&&e.constructor;return"function"==typeof n&&n instanceof n&&u.call(n)==f}},"9q7h":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n("NVRb"),i=n("Uu0y"),o=n("VU/8")(r.a,i.a,!1,null,null,null);o.options.__file="pages\\specification\\v3\\measurement-message.vue",e.default=o.exports},A51D:function(t,e,n){var r=n("5pwE");"string"==typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);n("rjj0")("188b52d2",r,!1)},A9mX:function(t,e,n){var r=n("pTUa");t.exports=function(t){var e=r(this,t).delete(t);return this.size-=e?1:0,e}},"Ai/T":function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},AxiT:function(t,e,n){var r=n("Lw7C");"string"==typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);n("rjj0")("0868896c",r,!1)},C0hh:function(t,e){t.exports=function(){return[]}},CW5P:function(t,e,n){var r=n("T/bE"),i=n("duB3"),o=n("POb3");t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(o||i),string:new r}}},Cf65:function(t,e,n){var r=n("uCi2"),i=n("M1c9");t.exports=function(t,e){return e.length<2?t:r(t,i(e,0,-1))}},D9sP:function(t,e,n){"use strict";var r=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"schemaDetail",class:{"is-loading":t.loading},attrs:{id:"schema-detail"}},[n("div",{staticClass:"accordion"},[null!==t.masterSchema?n("card",{attrs:{collapsed:!0}},[n("template",{slot:"header"},[t._v("\n        Structure of the payload\n      ")]),n("ul",t._l(t.masterSchema.properties,function(t,e){return n("schemaToc",{key:e,attrs:{schema:t}})}))],2):t._e(),t._t("default")],2),n("h1",[n("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 n("div",{key:e.$id,staticClass:"card property"},[n("header",{staticClass:"card-header"},[n("a",{attrs:{id:"p-"+e.$id}}),n("p",{staticClass:"card-header-title"},[n("span",{domProps:{innerHTML:t._s(e.getPath())}})]),n("nuxt-link",{staticClass:"card-header-icon",attrs:{to:"#schema-detail",title:"go up"}},[n("span",{staticClass:"icon"},[n("i",{staticClass:"fa fa-angle-up"})])])],1),n("div",{staticClass:"card-content"},[e.description||e.type?n("div",{staticClass:"field is-horizontal"},[t._m(0,!0),e.description?n("div",{staticClass:"field-body"},[t._v("\n          "+t._s(e.description)+"\n        ")]):e.type?n("div",{staticClass:"field-body"},[t._v("\n          A simple "+t._s(t._f("capitalize")(e.type))+"\n        ")]):t._e()]):t._e(),e.$parent?n("div",{staticClass:"field is-horizontal"},[t._m(1,!0),n("div",{staticClass:"field-body"},[n("nuxt-link",{attrs:{to:"#p-"+e.$parent.schema.$id}},[n("span",{domProps:{innerHTML:t._s(e.$parent.schema.getPath())}})])],1)]):t._e(),e.type?n("div",{staticClass:"field is-horizontal"},[t._m(2,!0),n("div",{staticClass:"field-body"},[t._v("\n          "+t._s(t._f("capitalize")(e.type,e))+"\n        ")])]):t._e(),e.format?n("div",{staticClass:"field is-horizontal"},[t._m(3,!0),n("div",{staticClass:"field-body"},[t._v("\n          "+t._s(e.format)+"\n          "),t.$static.formats[e.format]?n("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?n("div",{staticClass:"field is-horizontal"},[t._m(4,!0),n("div",{staticClass:"field-body"},[n("div",[t._v("\n            "+t._s(e.enum.join(", "))+"\n          ")])])]):t._e(),e.hasOwnProperty("default")?n("div",{staticClass:"field is-horizontal"},[t._m(5,!0),n("div",{staticClass:"field-body"},[n("div",[t._v("\n            "+t._s(e.default)+"\n          ")])])]):t._e(),e.maxLength?n("div",{staticClass:"field is-horizontal"},[t._m(6,!0),n("div",{staticClass:"field-body"},[n("div",[t._v("\n            "+t._s(e.maxLength)+"\n          ")])])]):t._e(),e.properties||e.patternProperties||e.items?n("div",{staticClass:"field is-horizontal"},[t._m(7,!0),n("div",{staticClass:"field-body"},[Object.keys(e.properties||{}).length>0?n("schemaLink",{attrs:{link:e.properties}}):t._e(),Object.keys(e.patternProperties||{}).length>0?n("schemaLink",{attrs:{link:e.patternProperties}},[n("div",[t._v("Matching regular expressions:")])]):t._e(),!e.items||e.items instanceof Array?e.items?n("schemaLink",{attrs:{link:e.items}},[n("div",[t._v("Ordered items of type:")])]):t._e():n("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?n("div",{staticClass:"field is-horizontal"},[t._m(8,!0),n("div",{staticClass:"field-body"},[n("div",[t._v("\n            "+t._s(e.minProperties)+"\n          ")])])]):t._e(),e.minItems?n("div",{staticClass:"field is-horizontal"},[t._m(9,!0),n("div",{staticClass:"field-body"},[n("div",[t._v("\n            "+t._s(e.minItems)+"\n          ")])])]):t._e(),e.hasOwnProperty("additionalProperties")?n("div",{staticClass:"field is-horizontal"},[t._m(10,!0),"boolean"==typeof e.additionalProperties?n("schemaLink",{staticClass:"field-body",attrs:{link:e.additionalProperties}}):n("div",{staticClass:"field-body"},[t._v("\n          if fulfilling "),n("schemaLink",{staticClass:"field-body",attrs:{link:e.additionalProperties}})],1)],1):t._e(),e.not||e.oneOf||e.allOf||e.anyOf?n("div",{staticClass:"field is-horizontal"},[t._m(11,!0),n("div",{staticClass:"field-body"},[e.not?n("schemaLink",{attrs:{link:e.not}},[t._v("\n            Not fulfilling \n          ")]):t._e(),e.oneOf?n("schemaLink",{attrs:{link:e.oneOf}},[n("div",[t._v("Fulfilling exactly one of:")])]):t._e(),e.allOf?n("schemaLink",{attrs:{link:e.allOf}},[n("div",[t._v("Fulfilling all of:")])]):t._e(),e.anyOf?n("schemaLink",{attrs:{link:e.anyOf}},[n("div",[t._v("Fulfilling one of:")])]):t._e()],1)]):t._e(),e.required&&e.required.length?n("div",{staticClass:"field is-horizontal"},[t._m(12,!0),n("div",{staticClass:"field-body"},[t._v("\n          "+t._s(e.required.join(", "))+"\n        ")])]):t._e(),e.examples?n("div",{staticClass:"field is-horizontal"},[t._m(13,!0),n("div",{staticClass:"field-body"},t._l(e.examples,function(e,r){return n("prism",{key:r,attrs:{language:"json"}},[t._v(t._s(t._f("stringify")(e)))])}))]):t._e()])])})],2)};r._withStripped=!0;var i={render:r,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,n){(function(t){var r=n("blYT"),i="object"==typeof e&&e&&!e.nodeType&&e,o=i&&"object"==typeof t&&t&&!t.nodeType&&t,a=o&&o.exports===i&&r.process,s=function(){try{return a&&a.binding&&a.binding("util")}catch(t){}}();t.exports=s}).call(e,n("3IRH")(t))},Dc7M:function(t,e,n){var r=n("Hxdr"),i=n("Fkvj"),o=n("Vi3P"),a=n("bIjD"),s=n("tv3T"),c=n("dYhQ"),u=n("2N6f"),l=n("xond"),f=u(function(t,e){var n={};if(null==t)return n;var u=!1;e=r(e,function(e){return e=a(e,t),u||(u=e.length>1),e}),s(t,l(t),n),u&&(n=i(n,7,c));for(var f=e.length;f--;)o(n,e[f]);return n});t.exports=f},Dv2r:function(t,e,n){var r=n("pTUa");t.exports=function(t,e){var n=r(this,t),i=n.size;return n.set(t,e),this.size+=n.size==i?0:1,this}},E4Hj:function(t,e){t.exports=function(t){return this.__data__.get(t)}},FCuZ:function(t,e,n){var r=n("uIr7"),i=n("NGEn");t.exports=function(t,e,n){var o=e(t);return i(t)?o:r(o,n(t))}},Fkvj:function(t,e,n){var r=n("bJWQ"),i=n("PqYH"),o=n("i4ON"),a=n("jD7S"),s=n("py9u"),c=n("mKB/"),u=n("hrPF"),l=n("Nkkh"),f=n("1QDk"),p=n("MoMe"),d=n("xond"),v=n("gHOb"),h=n("UfSK"),m=n("5/Qr"),y=n("WQFf"),b=n("NGEn"),_=n("ggOT"),x=n("yCNF"),g=n("ktak"),j=1,C=2,O=4,w="[object Arguments]",k="[object Function]",T="[object GeneratorFunction]",P="[object Object]",A={};A[w]=A["[object Array]"]=A["[object ArrayBuffer]"]=A["[object DataView]"]=A["[object Boolean]"]=A["[object Date]"]=A["[object Float32Array]"]=A["[object Float64Array]"]=A["[object Int8Array]"]=A["[object Int16Array]"]=A["[object Int32Array]"]=A["[object Map]"]=A["[object Number]"]=A[P]=A["[object RegExp]"]=A["[object Set]"]=A["[object String]"]=A["[object Symbol]"]=A["[object Uint8Array]"]=A["[object Uint8ClampedArray]"]=A["[object Uint16Array]"]=A["[object Uint32Array]"]=!0,A["[object Error]"]=A[k]=A["[object WeakMap]"]=!1,t.exports=function t(e,n,E,S,$,M){var I,F=n&j,D=n&C,z=n&O;if(E&&(I=$?E(e,S,$,M):E(e)),void 0!==I)return I;if(!x(e))return e;var N=b(e);if(N){if(I=h(e),!F)return u(e,I)}else{var U=v(e),Q=U==k||U==T;if(_(e))return c(e,F);if(U==P||U==w||Q&&!$){if(I=D||Q?{}:y(e),!F)return D?f(e,s(I,e)):l(e,a(I,e))}else{if(!A[U])return $?e:{};I=m(e,U,t,F)}}M||(M=new r);var G=M.get(e);if(G)return G;M.set(e,I);var H=z?D?d:p:D?keysIn:g,R=N?void 0:H(e);return i(R||e,function(r,i){R&&(r=e[i=r]),o(I,i,t(r,n,E,i,e,M))}),I}},Fp5l:function(t,e,n){var r=n("bGc4"),i=n("UnEC");t.exports=function(t){return i(t)&&r(t)}},G0Wc:function(t,e,n){var r=n("yCNF"),i=n("HT7L"),o=n("8gK5"),a=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return o(t);var e=i(t),n=[];for(var s in t)("constructor"!=s||!e&&a.call(t,s))&&n.push(s);return n}},G2xm:function(t,e){t.exports=function(t){return this.__data__.has(t)}},Gs0Q:function(t,e,n){"use strict";e.a={name:"schemaToc",props:{tag:{type:String,default:"li"},schema:{type:Object,required:!0}}}},Gu7T:function(t,e,n){"use strict";e.__esModule=!0;var r,i=n("c/Tr"),o=(r=i)&&r.__esModule?r:{default:r};e.default=function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return(0,o.default)(t)}},HAGj:function(t,e,n){var r=n("i4ON"),i=n("bIjD"),o=n("ZGh9"),a=n("yCNF"),s=n("Ubhr");t.exports=function(t,e,n,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=n;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])?[]:{})}r(p,d,v),p=p[d]}return t}},HN2V:function(t,e,n){var r=n("HbnZ"),i=n("0DSl")(function(t,e,n){r(t,e,n)});t.exports=i},HT7L:function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},HbnZ:function(t,e,n){var r=n("bJWQ"),i=n("O1jc"),o=n("rpnb"),a=n("jMi8"),s=n("yCNF"),c=n("t8rQ");t.exports=function t(e,n,u,l,f){e!==n&&o(n,function(o,c){if(s(o))f||(f=new r),a(e,n,c,u,t,l,f);else{var p=l?l(e[c],o,c+"",e,n,f):void 0;void 0===p&&(p=o),i(e,c,p)}},c)}},Hxdr:function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}},ICSD:function(t,e,n){var r=n("ITwD"),i=n("mTAn");t.exports=function(t,e){var n=i(t,e);return r(n)?n:void 0}},ITwD:function(t,e,n){var r=n("gGqR"),i=n("eFps"),o=n("yCNF"),a=n("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))&&(r(t)?p:s).test(a(t))}},"Ilb/":function(t,e,n){var r=n("Kzd6");t.exports=function(t,e){var n=e?r(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}},JBvZ:function(t,e,n){var r=n("imBK");t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},Jqj6:function(t,e,n){var r=n("U7Aq"),i=n("3rZI"),o=n("WFiI"),a=1;t.exports=function(t,e,n){var s=e?n(o(t),a):o(t);return i(s,r,new t.constructor)}},KmWZ:function(t,e,n){var r=n("duB3");t.exports=function(){this.__data__=new r,this.size=0}},Kzd6:function(t,e,n){var r=n("qwTf");t.exports=function(t){var e=new t.constructor(t.byteLength);return new r(e).set(new r(t)),e}},LJry:function(t,e,n){"use strict";var r={functional:!0,props:{code:{type:String},language:{type:String,default:"markup"}},render:function(t,e){var n=e.props.code||e.children[0].text,r=e.props.language,i=Prism.languages[r],o="language-"+r;return t("pre",function(t){for(var e=arguments,n=1;n<arguments.length;n++)for(var r in arguments[n])t[r]=e[n][r];return t}({},e.data,{class:[e.data.class,o]}),[t("code",{class:o,domProps:{innerHTML:Prism.highlight(n,i)}})])}};t.exports=r},Lw7C:function(t,e,n){(t.exports=n("YHym")(!1)).push([t.i,"@keyframes spinAround{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}",""])},M1c9:function(t,e){t.exports=function(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),(n=n>i?i:n)<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=Array(i);++r<i;)o[r]=t[r+e];return o}},MoMe:function(t,e,n){var r=n("FCuZ"),i=n("l9Lx"),o=n("ktak");t.exports=function(t){return r(t,o,i)}},NGEn:function(t,e){var n=Array.isArray;t.exports=n},NVRb:function(t,e,n){"use strict";var r=n("mvHQ"),i=n.n(r),o=n("d7EF"),a=n.n(o),s=n("Dd8w"),c=n.n(s),u=n("W3Iv"),l=n.n(u),f=n("LJry"),p=n.n(f),d=n("T9Hf"),v=n("Q7hp"),h=n.n(v),m=n("s8mu");e.a={head:function(){return{title:"Specification for measurement messages"}},created:function(){var t=this,e=new Date,n="a4927dad-58d4-4580-b460-79cefd56775b";this.$static={message:{"content-spec":"urn:spec://eclipse.org/unide/measurement-message#v3",device:{id:n},measurements:[{ts:e.toISOString(),series:{time:[0,23,24],temperature:[45.4231,46.4222,44.2432]}}]},complexMessage:{"content-spec":"urn:spec://eclipse.org/unide/measurement-message#v3",device:{id:n,mode:"maintenance",state:"WARN",swVersion:"2.0.3.13",swBuildID:"41535"},part:{code:"HUH289",id:"420003844",type:"BATCH",typeId:"F00VH07328",result:"OK",lotID:"845849",toolID:"32324-432143"},measurements:[{code:"190ABT",context:{temperature:{accuracy:[.112,.115,.129],limits:{lowerError:-2,lowerWarn:-1,target:1.21,upperError:5,upperWarn:1.5},offset:37,unit:"Cel"}},result:"OK",series:{time:[0,23,24],temperature:[.4231,2.4222,4.2432]},ts:e.toISOString()},{context:{scanData:{type:"BASE64"}},series:{time:[0,130,2633],pressure:[52.4,46.32,44.2432],scanData:["Zm9vCg==","YmFyCg==","Y2hlZXNlCg=="]},ts:new Date(e.valueOf()-5e3).toISOString()}]}},this.$static.examples=l()(c()({},["content-spec","device","device.id","device.mode","device.state","part","part.code","part.id","part.result","part.type","part.typeId","measurements","measurements[0].code","measurements[0].context","measurements[0].result","measurements[0].series","measurements[0].ts","part","part.code","part.id","part.typeId","part.result"].reduce(function(t,e){return t[e.replace(/(^|\.)/g,"$1properties.").replace(/\[[^]]*]/g,".items")]=e,t},{'properties.measurements.items.properties.context.patternProperties["^[^$]+"]':"measurements[0].context.temperature",'properties.measurements.items.properties.series.patternProperties["^[^$]+"]':"measurements[0].series.temperature"}),["accuracy","limits","offset","unit"].reduce(function(t,e){return t['properties.measurements.items.properties.context.patternProperties["^[^$]+"].properties.'+e]="measurements[0].context.temperature."+e,t},{}),["lowerError","lowerWarn","target","upperError","upperWarn"].reduce(function(t,e){return t['properties.measurements.items.properties.context.patternProperties["^[^$]+"].properties.limits.oneOf[0].properties.'+e]="measurements[0].context.temperature.limits."+e,t},{}))).reduce(function(e,n){var r=a()(n,2),i=r[0],o=r[1],s=h()(t.$static.message,o)||h()(t.$static.complexMessage,o);return s?e[i]=[s]:console.error('no example provided in measurement-message for:\n"'+i+'": "'+o+'"'),e},{})},filters:{stringify:function(t){return i()(t," ",2)}},components:{card:d.a,prism:p.a,schemaDetail:m.a}}},NVTU:function(t,e,n){"use strict";var r=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"card collapsibleCard",class:{collapsed:!t.expanded}},[t.$slots.header?n("header",{staticClass:"card-header",on:{click:function(e){e.preventDefault(),t.toggle()}}},[n("p",{staticClass:"card-header-title"},[!t.$slots.headerCollapsed||t.expanded?t._t("header"):t._t("headerCollapsed")],2),n("a",{staticClass:"card-header-icon"},[n("span",{staticClass:"icon"},[n("i",{staticClass:"fa",class:{"fa-angle-down":t.expanded,"fa-angle-up":!t.expanded}})])])]):t._e(),n("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}},[n("div",{directives:[{name:"show",rawName:"v-show",value:t.expanded,expression:"expanded"}]},[n("div",{staticClass:"card-content"},[t._t("default")],2)])])],1)};r._withStripped=!0;var i={render:r,staticRenderFns:[]};e.a=i},NkRn:function(t,e,n){var r=n("TQ3y").Symbol;t.exports=r},Nkkh:function(t,e,n){var r=n("tv3T"),i=n("l9Lx");t.exports=function(t,e){return r(t,i(t),e)}},NqZt:function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},O1jc:function(t,e,n){var r=n("nw3t"),i=n("22B7");t.exports=function(t,e,n){(void 0===n||i(t[e],n))&&(void 0!==n||e in t)||r(t,e,n)}},POb3:function(t,e,n){var r=n("ICSD")(n("TQ3y"),"Map");t.exports=r},PqYH:function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}},Q2wK:function(t,e,n){var r=n("8AZL"),i=Math.max;t.exports=function(t,e,n){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]=n(c),r(t,this,u)}}},Q7hp:function(t,e,n){var r=n("uCi2");t.exports=function(t,e,n){var i=null==t?void 0:r(t,e);return void 0===i?n:i}},Qp3N:function(t,e,n){var r=n("NkRn"),i=n("1Yb9"),o=n("NGEn"),a=r?r.isConcatSpreadable:void 0;t.exports=function(t){return o(t)||i(t)||!!(a&&t&&t[a])}},RGrk:function(t,e,n){var r=n("dCZQ"),i=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return r?void 0!==e[t]:i.call(e,t)}},Rh28:function(t,e){var n=9007199254740991;t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=n}},S7p9:function(t,e){t.exports=function(t){return function(e){return t(e)}}},"T/bE":function(t,e,n){var r=n("94sX"),i=n("ue/d"),o=n("eVIm"),a=n("RGrk"),s=n("Z2pD");function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=s,t.exports=c},T9Hf:function(t,e,n){"use strict";var r=n("77aO"),i=n("NVTU"),o=!1;var a=function(t){o||n("WVEp")},s=n("VU/8")(r.a,i.a,!1,a,null,null);s.options.__file="components\\collapsibleCard.vue",e.a=s.exports},TQ3y:function(t,e,n){var r=n("blYT"),i="object"==typeof self&&self&&self.Object===Object&&self,o=r||i||Function("return this")();t.exports=o},TlPD:function(t,e,n){var r=n("tv3T"),i=n("t8rQ");t.exports=function(t){return r(t,i(t))}},TmV0:function(t,e,n){n("fZOM"),t.exports=n("FeBl").Object.values},U7Aq:function(t,e){t.exports=function(t,e){return t.set(e[0],e[1]),t}},Ubhr:function(t,e,n){var r=n("6MiT"),i=1/0;t.exports=function(t){if("string"==typeof t||r(t))return t;var e=t+"";return"0"==e&&1/t==-i?"-0":e}},UfSK:function(t,e){var n=Object.prototype.hasOwnProperty;t.exports=function(t){var e=t.length,r=t.constructor(e);return e&&"string"==typeof t[0]&&n.call(t,"index")&&(r.index=t.index,r.input=t.input),r}},UnEC:function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},UnLw:function(t,e,n){var r=/^\./,i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,o=/\\(\\)?/g,a=n("fMqj")(function(t){var e=[];return r.test(t)&&e.push(""),t.replace(i,function(t,n,r,i){e.push(r?i.replace(o,"$1"):n||t)}),e});t.exports=a},Uu0y:function(t,e,n){"use strict";var r=function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"measurement-message content"},[this._m(0),e("p",[this._v("The measurement message is the format to exchange simple (non-structured, non-complex ) measurement data. It also allows to transport multiple measurement data (eg. values over time), called 'series'.")]),e("img",{staticClass:"is-centered",attrs:{src:"images/specification/v3/measurementPayload.svg",alt:"Class diagram of the Measurement Message payload",title:"Class diagram of the Measurement Message payload"}}),e("schemaDetail",{attrs:{type:"v3/measurement",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        Multiple message example\n      ")]),e("prism",{attrs:{language:"json"}},[this._v(this._s(this._f("stringify")(this.$static.complexMessage)))])],2)],1)],1)};r._withStripped=!0;var i={render:r,staticRenderFns:[function(){var t=this.$createElement,e=this._self._c||t;return e("h1",[e("a",{attrs:{id:"Measurement-Payload",title:"Measurement Message payload"}}),this._v("\n    Measurement Payload\n  ")])}]};e.a=i},VORN:function(t,e,n){var r=n("yCNF"),i=Object.create,o=function(){function t(){}return function(e){if(!r(e))return{};if(i)return i(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=o},Vi3P:function(t,e,n){var r=n("bIjD"),i=n("oqL2"),o=n("Cf65"),a=n("Ubhr");t.exports=function(t,e){return e=r(e,t),null==(t=o(t,e))||delete t[a(i(e))]}},W3Iv:function(t,e,n){t.exports={default:n("wEtr"),__esModule:!0}},W529:function(t,e,n){var r=n("f931")(Object.keys,Object);t.exports=r},WFiI:function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}},WHce:function(t,e,n){var r=n("037f"),i=n("Zk5a")(r);t.exports=i},WQFf:function(t,e,n){var r=n("VORN"),i=n("vi0E"),o=n("HT7L");t.exports=function(t){return"function"!=typeof t.constructor||o(t)?{}:r(i(t))}},WVEp:function(t,e,n){var r=n("a3hs");"string"==typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);n("rjj0")("52cedc5e",r,!1)},WxI4:function(t,e){t.exports=function(){this.__data__=[],this.size=0}},WyC4:function(t,e){var n=/\w*$/;t.exports=function(t){var e=new t.constructor(t.source,n.exec(t));return e.lastIndex=t.lastIndex,e}},Xd32:function(t,e,n){n("+tPU"),n("zQR9"),t.exports=n("5PlU")},YeCl:function(t,e,n){var r=n("CW5P"),i=n("A9mX"),o=n("v8Dt"),a=n("agim"),s=n("Dv2r");function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=s,t.exports=c},YkxI:function(t,e,n){var r=n("wSKX"),i=n("Q2wK"),o=n("WHce");t.exports=function(t,e){return o(i(t,e,r),t+"")}},YsVG:function(t,e,n){var r=n("z4hc"),i=n("S7p9"),o=n("Dc0G"),a=o&&o.isTypedArray,s=a?i(a):r;t.exports=s},Z2pD:function(t,e,n){var r=n("dCZQ"),i="__lodash_hash_undefined__";t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=r&&void 0===e?i:e,this}},ZGh9:function(t,e){var n=9007199254740991,r=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){return!!(e=null==e?n:e)&&("number"==typeof t||r.test(t))&&t>-1&&t%1==0&&t<e}},ZT2e:function(t,e,n){var r=n("o2mx");t.exports=function(t){return null==t?"":r(t)}},Zk5a:function(t,e){var n=800,r=16,i=Date.now;t.exports=function(t){var e=0,o=0;return function(){var a=i(),s=r-(a-o);if(o=a,s>0){if(++e>=n)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},Zrlr:function(t,e,n){"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,n){(t.exports=n("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,n){var r=n("NkRn"),i=n("uLhX"),o=n("+66z"),a="[object Null]",s="[object Undefined]",c=r?r.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,n){var r=n("pTUa");t.exports=function(t){return r(this,t).has(t)}},bGc4:function(t,e,n){var r=n("gGqR"),i=n("Rh28");t.exports=function(t){return null!=t&&i(t.length)&&!r(t)}},bIbi:function(t,e,n){var r=n("ICSD")(n("TQ3y"),"WeakMap");t.exports=r},bIjD:function(t,e,n){var r=n("NGEn"),i=n("hIPy"),o=n("UnLw"),a=n("ZT2e");t.exports=function(t,e){return r(t)?t:i(t,e)?[t]:o(a(t))}},bJWQ:function(t,e,n){var r=n("duB3"),i=n("KmWZ"),o=n("NqZt"),a=n("E4Hj"),s=n("G2xm"),c=n("zpVT");function u(t){var e=this.__data__=new r(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,n){var r=n("ICSD")(n("TQ3y"),"Promise");t.exports=r},"bXX+":function(t,e,n){"use strict";var r=n("jhkR"),i=n("fvMW"),o=n("VU/8")(r.a,i.a,!1,null,null,null);o.options.__file="components\\schemaLink.vue",e.a=o.exports},bklM:function(t,e,n){var r=n("Fkvj"),i=1,o=4;t.exports=function(t){return r(t,i|o)}},blYT:function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(e,n("DuR2"))},"c/Tr":function(t,e,n){t.exports={default:n("5zde"),__esModule:!0}},cER1:function(t,e,n){"use strict";var r=n("mvHQ"),i=n.n(r),o=n("fZjL"),a=n.n(o),s=n("Gu7T"),c=n.n(s),u=n("gRE1"),l=n.n(u),f=n("d7EF"),p=n.n(f),d=n("W3Iv"),v=n.n(d),h=n("T9Hf"),m=n("rVUV"),y=(n.n(m),n("Q7hp")),b=n.n(y),_=n("HN2V"),x=n.n(_),g=n("LJry"),j=n.n(g),C=n("lOo0"),O=n("bXX+"),w=n("mQxp"),k=n("4yG7"),T=n.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"}};n("+99L")("./"+this.type+"_schema.json").then(function(e){return t.masterSchema=new C.a("$",null,e),v()(t.examples).forEach(function(e){var n=p()(e,2),r=n[0],i=n[1];b()(t.masterSchema,r)?T()(t.masterSchema,r+".examples",i):console.error("schema path not found in "+t.type+": "+r)}),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 n=this;t instanceof C.a?(e(t),v()(t).filter(function(t){var e=p()(t,2),n=e[0];e[1];return"$parent"!==n}).forEach(function(t){var r=p()(t,2),i=(r[0],r[1]);return n.traverse(i,e)})):t instanceof Array?t.forEach(function(t){return n.traverse(t,e)}):t instanceof Object&&l()(t).forEach(function(t){return n.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 C.a(t.$step,t.$parent,x.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(n){if(n){var r=p()(n,2),i=r[0],o=r[1],a=i.$parent;a&&T()(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:O.a}}},d4US:function(t,e,n){var r=n("ICSD")(n("TQ3y"),"DataView");t.exports=r},d7EF:function(t,e,n){"use strict";e.__esModule=!0;var r=o(n("us/S")),i=o(n("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,r.default)(Object(t)))return function(t,e){var n=[],r=!0,o=!1,a=void 0;try{for(var s,c=(0,i.default)(t);!(r=(s=c.next()).done)&&(n.push(s.value),!e||n.length!==e);r=!0);}catch(t){o=!0,a=t}finally{try{!r&&c.return&&c.return()}finally{if(o)throw a}}return n}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},dCZQ:function(t,e,n){var r=n("ICSD")(Object,"create");t.exports=r},dFpP:function(t,e,n){var r=n("imBK"),i=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0||(n==e.length-1?e.pop():i.call(e,n,1),--this.size,0))}},dYhQ:function(t,e,n){var r=n("9UkZ");t.exports=function(t){return r(t)?void 0:t}},deUO:function(t,e,n){var r=n("imBK");t.exports=function(t,e){var n=this.__data__,i=r(n,t);return i<0?(++this.size,n.push([t,e])):n[i][1]=e,this}},duB3:function(t,e,n){var r=n("WxI4"),i=n("dFpP"),o=n("JBvZ"),a=n("2Hvv"),s=n("deUO");function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}c.prototype.clear=r,c.prototype.delete=i,c.prototype.get=o,c.prototype.has=a,c.prototype.set=s,t.exports=c},eFps:function(t,e,n){var r,i=n("+gg+"),o=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!o&&o in t}},eVIm:function(t,e,n){var r=n("dCZQ"),i="__lodash_hash_undefined__",o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(r){var n=e[t];return n===i?void 0:n}return o.call(e,t)?e[t]:void 0}},f931:function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},fBQ2:function(t,e,n){"use strict";var r=n("evD5"),i=n("X8DO");t.exports=function(t,e,n){e in t?r.f(t,e,i(0,n)):t[e]=n}},fMqj:function(t,e,n){var r=n("zGZ6"),i=500;t.exports=function(t){var e=r(t,function(t){return n.size===i&&n.clear(),t}),n=e.cache;return e}},fZOM:function(t,e,n){var r=n("kM2E"),i=n("mbce")(!1);r(r.S,"Object",{values:function(t){return i(t)}})},fvMW:function(t,e,n){"use strict";var r=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[t._t("default"),!0===t.link?[t._v("\n    yes \n  ")]:!1===t.link?[t._v("\n    no \n  ")]:t.isSchema(t.link)?[n("nuxt-link",{attrs:{to:"#p-"+t.link.$id}},[n("span",{domProps:{innerHTML:t._s(t.link.getPath())}})])]:t.link instanceof Array?n("ul",t._l(t.link,function(e){return n("li",{key:e.$id},[n("nuxt-link",{attrs:{to:"#p-"+e.$id}},[n("span",{domProps:{innerHTML:t._s(e.getPath())}})])],1)})):t.link instanceof Object?n("ul",t._l(t.link,function(e,r){return n("li",[n("nuxt-link",{attrs:{to:"#p-"+e.$id}},[t._v("\n        "+t._s(r)+"\n      ")])],1)})):t._e()],2)};r._withStripped=!0;var i={render:r,staticRenderFns:[]};e.a=i},gGqR:function(t,e,n){var r=n("aCM0"),i=n("yCNF"),o="[object AsyncFunction]",a="[object Function]",s="[object GeneratorFunction]",c="[object Proxy]";t.exports=function(t){if(!i(t))return!1;var e=r(t);return e==a||e==s||e==o||e==c}},gHOb:function(t,e,n){var r=n("d4US"),i=n("POb3"),o=n("bO0Y"),a=n("5N57"),s=n("bIbi"),c=n("aCM0"),u=n("Ai/T"),l="[object Promise]",f="[object WeakMap]",p="[object DataView]",d=u(r),v=u(i),h=u(o),m=u(a),y=u(s),b=c;(r&&b(new r(new ArrayBuffer(1)))!=p||i&&"[object Map]"!=b(new i)||o&&b(o.resolve())!=l||a&&"[object Set]"!=b(new a)||s&&b(new s)!=f)&&(b=function(t){var e=c(t),n="[object Object]"==e?t.constructor:void 0,r=n?u(n):"";if(r)switch(r){case d:return p;case v:return"[object Map]";case h:return l;case m:return"[object Set]";case y:return f}return e}),t.exports=b},gRE1:function(t,e,n){t.exports={default:n("TmV0"),__esModule:!0}},gSvA:function(t,e,n){var r=n("kM2E"),i=n("mbce")(!0);r(r.S,"Object",{entries:function(t){return i(t)}})},ggOT:function(t,e,n){(function(t){var r=n("TQ3y"),i=n("gwcX"),o="object"==typeof e&&e&&!e.nodeType&&e,a=o&&"object"==typeof t&&t&&!t.nodeType&&t,s=a&&a.exports===o?r.Buffer:void 0,c=(s?s.isBuffer:void 0)||i;t.exports=c}).call(e,n("3IRH")(t))},gwcX:function(t,e){t.exports=function(){return!1}},hIPy:function(t,e,n){var r=n("NGEn"),i=n("6MiT"),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&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 n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}},hvFG:function(t,e,n){"use strict";var r=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,n){return e("schemaToc",{key:n,attrs:{schema:t}})}),this._l(this.schema.patternProperties,function(t,n){return e("schemaToc",{key:n,attrs:{schema:t}})}),this.schema.items?[this.schema.items instanceof Array?this._l(this.schema.items,function(t,n){return e("schemaToc",{key:n,attrs:{schema:t}})}):e("schemaToc",{attrs:{schema:this.schema.items}})]:this._e()],2):this._e()],1)};r._withStripped=!0;var i={render:r,staticRenderFns:[]};e.a=i},i4ON:function(t,e,n){var r=n("nw3t"),i=n("22B7"),o=Object.prototype.hasOwnProperty;t.exports=function(t,e,n){var a=t[e];o.call(t,e)&&i(a,n)&&(void 0!==n||e in t)||r(t,e,n)}},imBK:function(t,e,n){var r=n("22B7");t.exports=function(t,e){for(var n=t.length;n--;)if(r(t[n][0],e))return n;return-1}},jD7S:function(t,e,n){var r=n("tv3T"),i=n("ktak");t.exports=function(t,e){return t&&r(e,i(e),t)}},jMi8:function(t,e,n){var r=n("O1jc"),i=n("mKB/"),o=n("Ilb/"),a=n("hrPF"),s=n("WQFf"),c=n("1Yb9"),u=n("NGEn"),l=n("Fp5l"),f=n("ggOT"),p=n("gGqR"),d=n("yCNF"),v=n("9UkZ"),h=n("YsVG"),m=n("TlPD");t.exports=function(t,e,n,y,b,_,x){var g=t[n],j=e[n],C=x.get(j);if(C)r(t,n,C);else{var O=_?_(g,j,n+"",t,e,x):void 0,w=void 0===O;if(w){var k=u(j),T=!k&&f(j),P=!k&&!T&&h(j);O=j,k||T||P?u(g)?O=g:l(g)?O=a(g):T?(w=!1,O=i(j,!0)):P?(w=!1,O=o(j,!0)):O=[]:v(j)||c(j)?(O=g,c(g)?O=m(g):(!d(g)||y&&p(g))&&(O=s(j))):w=!1}w&&(x.set(j,O),b(O,j,y,_,x),x.delete(j)),r(t,n,O)}}},jhkR:function(t,e,n){"use strict";var r=n("lOo0");e.a={props:{link:{required:!0}},methods:{isSchema:function(t){return t instanceof r.a}}}},ktak:function(t,e,n){var r=n("7e4z"),i=n("/GnY"),o=n("bGc4");t.exports=function(t){return o(t)?r(t):i(t)}},l9Lx:function(t,e,n){var r=n("lb6C"),i=n("C0hh"),o=Object.prototype.propertyIsEnumerable,a=Object.getOwnPropertySymbols,s=a?function(t){return null==t?[]:(t=Object(t),r(a(t),function(e){return o.call(t,e)}))}:i;t.exports=s},lOo0:function(t,e,n){"use strict";var r=n("woOf"),i=n.n(r),o=n("d7EF"),a=n.n(o),s=n("W3Iv"),c=n.n(s),u=n("Zrlr"),l=n.n(u),f=n("wxAW"),p=n.n(f),d=n("bklM"),v=n.n(d),h=n("rVUV"),m=n.n(h),y=n("Dc7M"),b=n.n(y),_=function(){function t(e,n,r){l()(this,t),this.$id=t.idx++,this.$step=e+"&#8203",this.$parent=n,r&&this.parseFrom(r)}return p()(t,[{key:"toJSON",value:function(){var e=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this;return m()(n,function(n,r,i,o){if(n instanceof t)return c()(n).filter(function(t){var e=a()(t,2),n=e[0];e[1];return["$id","$step","$parent"].indexOf(n)<0}).reduce(function(t,n){var r=a()(n,2),i=r[0],o=r[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 n=this;return!0===e?e={}:!1===e&&(e={not:!0}),i()(this,b()(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(r,i){return new t("["+i+"]",{schema:n,path:"items["+i+"]"},e.items[i])}):this.items=new t("[*]",{schema:this,path:"items"},e.items)),["properties","patternProperties"].filter(function(t){return e.hasOwnProperty(t)}).forEach(function(r){return c()(e[r]).forEach(function(e,i){var o=a()(e,2),s=o[0],c=o[1];n[r]=n[r]||{},n[r][s]=new t("patternProperties"===r?"&lt;field&gt;":s,{schema:n,path:r+'["'+s+'"]'},c)})}),["additionalItems","additionalProperties","contains","propertyNames","not"].filter(function(t){return e.hasOwnProperty(t)}).forEach(function(r){n[r]=new t("+",{schema:n,path:r},e[r])}),["allOf","anyOf","oneOf"].filter(function(t){return e.hasOwnProperty(t)}).forEach(function(r){return e[r].forEach(function(e,i){n[r]=n[r]||[],n[r].push(new t("("+i+")"+("anyOf"===r?"?":"+"),{schema:n,path:r+"["+i+"]"},e))})}),this}}]),t}();_.idx=0,e.a=_},lb6C:function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var a=t[n];e(a,n,t)&&(o[i++]=a)}return o}},"mKB/":function(t,e,n){(function(t){var r=n("TQ3y"),i="object"==typeof e&&e&&!e.nodeType&&e,o=i&&"object"==typeof t&&t&&!t.nodeType&&t,a=o&&o.exports===i?r.Buffer:void 0,s=a?a.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var n=t.length,r=s?s(n):new t.constructor(n);return t.copy(r),r}}).call(e,n("3IRH")(t))},mQxp:function(t,e,n){"use strict";var r=n("Gs0Q"),i=n("hvFG"),o=!1;var a=function(t){o||n("AxiT")},s=n("VU/8")(r.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,n){var r=n("lktj"),i=n("TcQ7"),o=n("NpIQ").f;t.exports=function(t){return function(e){for(var n,a=i(e),s=r(a),c=s.length,u=0,l=[];c>u;)o.call(a,n=s[u++])&&l.push(t?[n,a[n]]:a[n]);return l}}},mgnk:function(t,e,n){var r=n("aCM0"),i=n("UnEC"),o="[object Arguments]";t.exports=function(t){return i(t)&&r(t)==o}},nWuj:function(t,e){t.exports=function(t,e){return t.add(e),t}},nw3t:function(t,e,n){var r=n("p0bc");t.exports=function(t,e,n){"__proto__"==e&&r?r(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}},o2mx:function(t,e,n){var r=n("NkRn"),i=n("Hxdr"),o=n("NGEn"),a=n("6MiT"),s=1/0,c=r?r.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 n=e+"";return"0"==n&&1/e==-s?"-0":n}},octw:function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}},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,n){var r=n("ICSD"),i=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},pTUa:function(t,e,n){var r=n("/I3N");t.exports=function(t,e){var n=t.__data__;return r(e)?n["string"==typeof e?"string":"hash"]:n.map}},py9u:function(t,e,n){var r=n("tv3T"),i=n("t8rQ");t.exports=function(t,e){return t&&r(e,i(e),t)}},qwTf:function(t,e,n){var r=n("TQ3y").Uint8Array;t.exports=r},qyJz:function(t,e,n){"use strict";var r=n("+ZMJ"),i=n("kM2E"),o=n("sB3e"),a=n("msXi"),s=n("Mhyx"),c=n("QRG4"),u=n("fBQ2"),l=n("3fs2");i(i.S+i.F*!n("dY0y")(function(t){Array.from(t)}),"Array",{from:function(t){var e,n,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,y=0,b=l(p);if(m&&(h=r(h,v>2?arguments[2]:void 0,2)),void 0==b||d==Array&&s(b))for(n=new d(e=c(p.length));e>y;y++)u(n,y,m?h(p[y],y):p[y]);else for(f=b.call(p),n=new d;!(i=f.next()).done;y++)u(n,y,m?a(f,h,[i.value,y],!0):i.value);return n.length=y,n}})},rCVp:function(t,e,n){var r=n("1C79");t.exports=function(t){return null!=t&&t.length?r(t,1):[]}},rVUV:function(t,e,n){var r=n("Fkvj"),i=1,o=4;t.exports=function(t,e){return r(t,i|o,e="function"==typeof e?e:void 0)}},rpnb:function(t,e,n){var r=n("tHks")();t.exports=r},s8mu:function(t,e,n){"use strict";var r=n("cER1"),i=n("D9sP"),o=!1;var a=function(t){o||n("A51D")},s=n("VU/8")(r.a,i.a,!1,a,null,null);s.options.__file="components\\schemaDetail.vue",e.a=s.exports},t8rQ:function(t,e,n){var r=n("7e4z"),i=n("G0Wc"),o=n("bGc4");t.exports=function(t){return o(t)?r(t,!0):i(t)}},tHks:function(t,e){t.exports=function(t){return function(e,n,r){for(var i=-1,o=Object(e),a=r(e),s=a.length;s--;){var c=a[t?s:++i];if(!1===n(o[c],c,o))break}return e}}},tv3T:function(t,e,n){var r=n("i4ON"),i=n("nw3t");t.exports=function(t,e,n,o){var a=!n;n||(n={});for(var s=-1,c=e.length;++s<c;){var u=e[s],l=o?o(n[u],t[u],u,n,t):void 0;void 0===l&&(l=t[u]),a?i(n,u,l):r(n,u,l)}return n}},uCi2:function(t,e,n){var r=n("bIjD"),i=n("Ubhr");t.exports=function(t,e){for(var n=0,o=(e=r(e,t)).length;null!=t&&n<o;)t=t[i(e[n++])];return n&&n==o?t:void 0}},uIr7:function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}},uLhX:function(t,e,n){var r=n("NkRn"),i=Object.prototype,o=i.hasOwnProperty,a=i.toString,s=r?r.toStringTag:void 0;t.exports=function(t){var e=o.call(t,s),n=t[s];try{t[s]=void 0;var r=!0}catch(t){}var i=a.call(t);return r&&(e?t[s]=n: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 n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}},"us/S":function(t,e,n){t.exports={default:n("Xd32"),__esModule:!0}},v8Dt:function(t,e,n){var r=n("pTUa");t.exports=function(t){return r(this,t).get(t)}},vi0E:function(t,e,n){var r=n("f931")(Object.getPrototypeOf,Object);t.exports=r},wEtr:function(t,e,n){n("gSvA"),t.exports=n("FeBl").Object.entries},wSKX:function(t,e){t.exports=function(t){return t}},wxAW:function(t,e,n){"use strict";e.__esModule=!0;var r,i=n("C4MV"),o=(r=i)&&r.__esModule?r:{default:r};e.default=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),(0,o.default)(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}()},xond:function(t,e,n){var r=n("FCuZ"),i=n("09Qt"),o=n("t8rQ");t.exports=function(t){return r(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,n){var r=n("aCM0"),i=n("Rh28"),o=n("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[r(t)]}},zBOP:function(t,e,n){var r=n("22B7"),i=n("bGc4"),o=n("ZGh9"),a=n("yCNF");t.exports=function(t,e,n){if(!a(n))return!1;var s=typeof e;return!!("number"==s?i(n)&&o(e,n.length):"string"==s&&e in n)&&r(n[e],t)}},zGZ6:function(t,e,n){var r=n("YeCl"),i="Expected a function";function o(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError(i);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(o.Cache||r),n}o.Cache=r,t.exports=o},zpVT:function(t,e,n){var r=n("duB3"),i=n("POb3"),o=n("YeCl"),a=200;t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var s=n.__data__;if(!i||s.length<a-1)return s.push([t,e]),this.size=++n.size,this;n=this.__data__=new o(s)}return n.set(t,e),this.size=n.size,this}}});