>>6},
+dp(a){a=a+((a&67108863)<<3)&536870911
+a^=a>>>11
+return a+((a&16383)<<15)&536870911},
+eW(a,b,c){return a},
+f5(a){var s,r
+for(s=$.au.length,r=0;r").B(d).h("b_<1,2>"))
+return new A.aj(a,b,c.h("@<0>").B(d).h("aj<1,2>"))},
+aF:function aF(){},
+bR:function bR(a,b){this.a=a
+this.$ti=b},
+bo:function bo(){},
+ae:function ae(a,b){this.a=a
+this.$ti=b},
+ai:function ai(a){this.a=a},
+dl:function dl(){},
+c:function c(){},
+Y:function Y(){},
+a5:function a5(a,b,c){var _=this
+_.a=a
+_.b=b
+_.c=0
+_.d=null
+_.$ti=c},
+aj:function aj(a,b,c){this.a=a
+this.b=b
+this.$ti=c},
+b_:function b_(a,b,c){this.a=a
+this.b=b
+this.$ti=c},
+aA:function aA(a,b,c){var _=this
+_.a=null
+_.b=a
+_.c=b
+_.$ti=c},
+bn:function bn(a,b,c){this.a=a
+this.b=b
+this.$ti=c},
+cv:function cv(a,b){this.a=a
+this.b=b},
+b1:function b1(){},
+bi:function bi(a,b){this.a=a
+this.$ti=b},
+bH:function bH(){},
+hd(a){var s=v.mangledGlobalNames[a]
+if(s!=null)return s
+return"minified:"+a},
+h4(a,b){var s
+if(b!=null){s=b.x
+if(s!=null)return s}return t.p.b(a)},
+o(a){var s
+if(typeof a=="string")return a
+if(typeof a=="number"){if(a!==0)return""+a}else if(!0===a)return"true"
+else if(!1===a)return"false"
+else if(a==null)return"null"
+s=J.a2(a)
+return s},
+ce(a){var s,r=$.fq
+if(r==null)r=$.fq=Symbol("identityHashCode")
+s=a[r]
+if(s==null){s=Math.random()*0x3fffffff|0
+a[r]=s}return s},
+cf(a){var s,r,q,p
+if(a instanceof A.h)return A.K(A.aR(a),null)
+s=J.as(a)
+if(s===B.V||s===B.X||t.o.b(a)){r=B.j(a)
+if(r!=="Object"&&r!=="")return r
+q=a.constructor
+if(typeof q=="function"){p=q.name
+if(typeof p=="string"&&p!=="Object"&&p!=="")return p}}return A.K(A.aR(a),null)},
+fr(a){var s,r,q
+if(a==null||typeof a=="number"||A.eR(a))return J.a2(a)
+if(typeof a=="string")return JSON.stringify(a)
+if(a instanceof A.af)return a.i(0)
+if(a instanceof A.bx)return a.b4(!0)
+s=$.hr()
+for(r=0;r<1;++r){q=s[r].cz(a)
+if(q!=null)return q}return"Instance of '"+A.cf(a)+"'"},
+i_(a){var s=a.$thrownJsError
+if(s==null)return null
+return A.aa(s)},
+eZ(a,b){var s,r="index"
+if(!A.fT(b))return new A.U(!0,b,r,null)
+s=J.eu(a)
+if(b<0||b>=s)return A.ex(b,s,a,r)
+return new A.bh(null,null,!0,b,r,"Value not in range")},
+f(a){return A.z(a,new Error())},
+z(a,b){var s
+if(a==null)a=new A.a_()
+b.dartException=a
+s=A.jM
+if("defineProperty" in Object){Object.defineProperty(b,"message",{get:s})
+b.name=""}else b.toString=s
+return b},
+jM(){return J.a2(this.dartException)},
+M(a,b){throw A.z(a,b==null?new Error():b)},
+aV(a,b,c){var s
+if(b==null)b=0
+if(c==null)c=0
+s=Error()
+A.M(A.iR(a,b,c),s)},
+iR(a,b,c){var s,r,q,p,o,n,m,l,k
+if(typeof b=="string")s=b
+else{r="[]=;add;removeWhere;retainWhere;removeRange;setRange;setInt8;setInt16;setInt32;setUint8;setUint16;setUint32;setFloat32;setFloat64".split(";")
+q=r.length
+p=b
+if(p>q){c=p/q|0
+p%=q}s=r[p]}o=typeof c=="string"?c:"modify;remove from;add to".split(";")[c]
+n=t.j.b(a)?"list":"ByteData"
+m=a.$flags|0
+l="a "
+if((m&4)!==0)k="constant "
+else if((m&2)!==0){k="unmodifiable "
+l="an "}else k=(m&1)!==0?"fixed-length ":""
+return new A.bm("'"+s+"': Cannot "+o+" "+l+k+n)},
+aU(a){throw A.f(A.V(a))},
+a0(a){var s,r,q,p,o,n
+a=A.jJ(a.replace(String({}),"$receiver$"))
+s=a.match(/\\\$[a-zA-Z]+\\\$/g)
+if(s==null)s=A.b([],t.s)
+r=s.indexOf("\\$arguments\\$")
+q=s.indexOf("\\$argumentsExpr\\$")
+p=s.indexOf("\\$expr\\$")
+o=s.indexOf("\\$method\\$")
+n=s.indexOf("\\$receiver\\$")
+return new A.dC(a.replace(new RegExp("\\\\\\$arguments\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$argumentsExpr\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$expr\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$method\\\\\\$","g"),"((?:x|[^x])*)").replace(new RegExp("\\\\\\$receiver\\\\\\$","g"),"((?:x|[^x])*)"),r,q,p,o,n)},
+dD(a){return function($expr$){var $argumentsExpr$="$arguments$"
+try{$expr$.$method$($argumentsExpr$)}catch(s){return s.message}}(a)},
+fw(a){return function($expr$){try{$expr$.$method$}catch(s){return s.message}}(a)},
+eA(a,b){var s=b==null,r=s?null:b.method
+return new A.c0(a,r,s?null:b.receiver)},
+ac(a){if(a==null)return new A.dh(a)
+if(a instanceof A.b0)return A.ab(a,a.a)
+if(typeof a!=="object")return a
+if("dartException" in a)return A.ab(a,a.dartException)
+return A.jo(a)},
+ab(a,b){if(t.Q.b(b))if(b.$thrownJsError==null)b.$thrownJsError=a
+return b},
+jo(a){var s,r,q,p,o,n,m,l,k,j,i,h,g
+if(!("message" in a))return a
+s=a.message
+if("number" in a&&typeof a.number=="number"){r=a.number
+q=r&65535
+if((B.u.bM(r,16)&8191)===10)switch(q){case 438:return A.ab(a,A.eA(A.o(s)+" (Error "+q+")",null))
+case 445:case 5007:A.o(s)
+return A.ab(a,new A.bf())}}if(a instanceof TypeError){p=$.he()
+o=$.hf()
+n=$.hg()
+m=$.hh()
+l=$.hk()
+k=$.hl()
+j=$.hj()
+$.hi()
+i=$.hn()
+h=$.hm()
+g=p.I(s)
+if(g!=null)return A.ab(a,A.eA(s,g))
+else{g=o.I(s)
+if(g!=null){g.method="call"
+return A.ab(a,A.eA(s,g))}else if(n.I(s)!=null||m.I(s)!=null||l.I(s)!=null||k.I(s)!=null||j.I(s)!=null||m.I(s)!=null||i.I(s)!=null||h.I(s)!=null)return A.ab(a,new A.bf())}return A.ab(a,new A.ct(typeof s=="string"?s:""))}if(a instanceof RangeError){if(typeof s=="string"&&s.indexOf("call stack")!==-1)return new A.bl()
+s=function(b){try{return String(b)}catch(f){}return null}(a)
+return A.ab(a,new A.U(!1,null,null,typeof s=="string"?s.replace(/^RangeError:\s*/,""):s))}if(typeof InternalError=="function"&&a instanceof InternalError)if(typeof s=="string"&&s==="too much recursion")return new A.bl()
+return a},
+aa(a){var s
+if(a instanceof A.b0)return a.b
+if(a==null)return new A.bA(a)
+s=a.$cachedTrace
+if(s!=null)return s
+s=new A.bA(a)
+if(typeof a==="object")a.$cachedTrace=s
+return s},
+h8(a){if(a==null)return J.B(a)
+if(typeof a=="object")return A.ce(a)
+return J.B(a)},
+jw(a,b){var s,r,q,p=a.length
+for(s=0;s>>0!==a||a>=c)throw A.f(A.eZ(b,a))},
+aB:function aB(){},
+bd:function bd(){},
+c3:function c3(){},
+aC:function aC(){},
+bb:function bb(){},
+bc:function bc(){},
+c4:function c4(){},
+c5:function c5(){},
+c6:function c6(){},
+c7:function c7(){},
+c8:function c8(){},
+c9:function c9(){},
+ca:function ca(){},
+be:function be(){},
+cb:function cb(){},
+bs:function bs(){},
+bt:function bt(){},
+bu:function bu(){},
+bv:function bv(){},
+eD(a,b){var s=b.c
+return s==null?b.c=A.bE(a,"aw",[b.x]):s},
+ft(a){var s=a.w
+if(s===6||s===7)return A.ft(a.x)
+return s===11||s===12},
+i3(a){return a.as},
+cO(a){return A.e8(v.typeUniverse,a,!1)},
+ar(a1,a2,a3,a4){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0=a2.w
+switch(a0){case 5:case 1:case 2:case 3:case 4:return a2
+case 6:s=a2.x
+r=A.ar(a1,s,a3,a4)
+if(r===s)return a2
+return A.fJ(a1,r,!0)
+case 7:s=a2.x
+r=A.ar(a1,s,a3,a4)
+if(r===s)return a2
+return A.fI(a1,r,!0)
+case 8:q=a2.y
+p=A.aO(a1,q,a3,a4)
+if(p===q)return a2
+return A.bE(a1,a2.x,p)
+case 9:o=a2.x
+n=A.ar(a1,o,a3,a4)
+m=a2.y
+l=A.aO(a1,m,a3,a4)
+if(n===o&&l===m)return a2
+return A.eK(a1,n,l)
+case 10:k=a2.x
+j=a2.y
+i=A.aO(a1,j,a3,a4)
+if(i===j)return a2
+return A.fK(a1,k,i)
+case 11:h=a2.x
+g=A.ar(a1,h,a3,a4)
+f=a2.y
+e=A.jl(a1,f,a3,a4)
+if(g===h&&e===f)return a2
+return A.fH(a1,g,e)
+case 12:d=a2.y
+a4+=d.length
+c=A.aO(a1,d,a3,a4)
+o=a2.x
+n=A.ar(a1,o,a3,a4)
+if(c===d&&n===o)return a2
+return A.eL(a1,n,c,!0)
+case 13:b=a2.x
+if(b")
+for(r=1;r=0)p+=" "+r[q];++q}return p+"})"},
+fR(a1,a2,a3){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a=", ",a0=null
+if(a3!=null){s=a3.length
+if(a2==null)a2=A.b([],t.s)
+else a0=a2.length
+r=a2.length
+for(q=s;q>0;--q)a2.push("T"+(r+q))
+for(p=t.R,o="<",n="",q=0;q"}else o=""
+p=a1.x
+k=a1.y
+j=k.a
+i=j.length
+h=k.b
+g=h.length
+f=k.c
+e=f.length
+d=A.K(p,a2)
+for(c="",b="",q=0;q0){c+=b+"["
+for(b="",q=0;q0){c+=b+"{"
+for(b="",q=0;q "+d},
+K(a,b){var s,r,q,p,o,n,m=a.w
+if(m===5)return"erased"
+if(m===2)return"dynamic"
+if(m===3)return"void"
+if(m===1)return"Never"
+if(m===4)return"any"
+if(m===6){s=a.x
+r=A.K(s,b)
+q=s.w
+return(q===11||q===12?"("+r+")":r)+"?"}if(m===7)return"FutureOr<"+A.K(a.x,b)+">"
+if(m===8){p=A.jn(a.x)
+o=a.y
+return o.length>0?p+("<"+A.fY(o,b)+">"):p}if(m===10)return A.je(a,b)
+if(m===11)return A.fR(a,b,null)
+if(m===12)return A.fR(a.x,b,a.y)
+if(m===13){n=a.x
+return b[b.length-1-n]}return"?"},
+jn(a){var s=v.mangledGlobalNames[a]
+if(s!=null)return s
+return"minified:"+a},
+iz(a,b){var s=a.tR[b]
+for(;typeof s=="string";)s=a.tR[s]
+return s},
+iy(a,b){var s,r,q,p,o,n=a.eT,m=n[b]
+if(m==null)return A.e8(a,b,!1)
+else if(typeof m=="number"){s=m
+r=A.bF(a,5,"#")
+q=A.e9(s)
+for(p=0;p0)p+="<"+A.bD(c)+">"
+s=a.eC.get(p)
+if(s!=null)return s
+r=new A.O(null,null)
+r.w=8
+r.x=b
+r.y=c
+if(c.length>0)r.c=c[0]
+r.as=p
+q=A.a9(a,r)
+a.eC.set(p,q)
+return q},
+eK(a,b,c){var s,r,q,p,o,n
+if(b.w===9){s=b.x
+r=b.y.concat(c)}else{r=c
+s=b}q=s.as+(";<"+A.bD(r)+">")
+p=a.eC.get(q)
+if(p!=null)return p
+o=new A.O(null,null)
+o.w=9
+o.x=s
+o.y=r
+o.as=q
+n=A.a9(a,o)
+a.eC.set(q,n)
+return n},
+fK(a,b,c){var s,r,q="+"+(b+"("+A.bD(c)+")"),p=a.eC.get(q)
+if(p!=null)return p
+s=new A.O(null,null)
+s.w=10
+s.x=b
+s.y=c
+s.as=q
+r=A.a9(a,s)
+a.eC.set(q,r)
+return r},
+fH(a,b,c){var s,r,q,p,o,n=b.as,m=c.a,l=m.length,k=c.b,j=k.length,i=c.c,h=i.length,g="("+A.bD(m)
+if(j>0){s=l>0?",":""
+g+=s+"["+A.bD(k)+"]"}if(h>0){s=l>0?",":""
+g+=s+"{"+A.ir(i)+"}"}r=n+(g+")")
+q=a.eC.get(r)
+if(q!=null)return q
+p=new A.O(null,null)
+p.w=11
+p.x=b
+p.y=c
+p.as=r
+o=A.a9(a,p)
+a.eC.set(r,o)
+return o},
+eL(a,b,c,d){var s,r=b.as+("<"+A.bD(c)+">"),q=a.eC.get(r)
+if(q!=null)return q
+s=A.it(a,b,c,r,d)
+a.eC.set(r,s)
+return s},
+it(a,b,c,d,e){var s,r,q,p,o,n,m,l
+if(e){s=c.length
+r=A.e9(s)
+for(q=0,p=0;p0){n=A.ar(a,b,r,0)
+m=A.aO(a,c,r,0)
+return A.eL(a,n,m,c!==m)}}l=new A.O(null,null)
+l.w=12
+l.x=b
+l.y=c
+l.as=d
+return A.a9(a,l)},
+fC(a,b,c,d){return{u:a,e:b,r:c,s:[],p:0,n:d}},
+fE(a){var s,r,q,p,o,n,m,l=a.r,k=a.s
+for(s=l.length,r=0;r=48&&q<=57)r=A.ij(r+1,q,l,k)
+else if((((q|32)>>>0)-97&65535)<26||q===95||q===36||q===124)r=A.fD(a,r,l,k,!1)
+else if(q===46)r=A.fD(a,r,l,k,!0)
+else{++r
+switch(q){case 44:break
+case 58:k.push(!1)
+break
+case 33:k.push(!0)
+break
+case 59:k.push(A.an(a.u,a.e,k.pop()))
+break
+case 94:k.push(A.iv(a.u,k.pop()))
+break
+case 35:k.push(A.bF(a.u,5,"#"))
+break
+case 64:k.push(A.bF(a.u,2,"@"))
+break
+case 126:k.push(A.bF(a.u,3,"~"))
+break
+case 60:k.push(a.p)
+a.p=k.length
+break
+case 62:A.il(a,k)
+break
+case 38:A.ik(a,k)
+break
+case 63:p=a.u
+k.push(A.fJ(p,A.an(p,a.e,k.pop()),a.n))
+break
+case 47:p=a.u
+k.push(A.fI(p,A.an(p,a.e,k.pop()),a.n))
+break
+case 40:k.push(-3)
+k.push(a.p)
+a.p=k.length
+break
+case 41:A.ii(a,k)
+break
+case 91:k.push(a.p)
+a.p=k.length
+break
+case 93:o=k.splice(a.p)
+A.fF(a.u,a.e,o)
+a.p=k.pop()
+k.push(o)
+k.push(-1)
+break
+case 123:k.push(a.p)
+a.p=k.length
+break
+case 125:o=k.splice(a.p)
+A.io(a.u,a.e,o)
+a.p=k.pop()
+k.push(o)
+k.push(-2)
+break
+case 43:n=l.indexOf("(",r)
+k.push(l.substring(r,n))
+k.push(-4)
+k.push(a.p)
+a.p=k.length
+r=n+1
+break
+default:throw"Bad character "+q}}}m=k.pop()
+return A.an(a.u,a.e,m)},
+ij(a,b,c,d){var s,r,q=b-48
+for(s=c.length;a=48&&r<=57))break
+q=q*10+(r-48)}d.push(q)
+return a},
+fD(a,b,c,d,e){var s,r,q,p,o,n,m=b+1
+for(s=c.length;m>>0)-97&65535)<26||r===95||r===36||r===124))q=r>=48&&r<=57
+else q=!0
+if(!q)break}}p=c.substring(b,m)
+if(e){s=a.u
+o=a.e
+if(o.w===9)o=o.x
+n=A.iz(s,o.x)[p]
+if(n==null)A.M('No "'+p+'" in "'+A.i3(o)+'"')
+d.push(A.bG(s,o,n))}else d.push(p)
+return m},
+il(a,b){var s,r=a.u,q=A.fB(a,b),p=b.pop()
+if(typeof p=="string")b.push(A.bE(r,p,q))
+else{s=A.an(r,a.e,p)
+switch(s.w){case 11:b.push(A.eL(r,s,q,a.n))
+break
+default:b.push(A.eK(r,s,q))
+break}}},
+ii(a,b){var s,r,q,p=a.u,o=b.pop(),n=null,m=null
+if(typeof o=="number")switch(o){case-1:n=b.pop()
+break
+case-2:m=b.pop()
+break
+default:b.push(o)
+break}else b.push(o)
+s=A.fB(a,b)
+o=b.pop()
+switch(o){case-3:o=b.pop()
+if(n==null)n=p.sEA
+if(m==null)m=p.sEA
+r=A.an(p,a.e,o)
+q=new A.cD()
+q.a=s
+q.b=n
+q.c=m
+b.push(A.fH(p,r,q))
+return
+case-4:b.push(A.fK(p,b.pop(),s))
+return
+default:throw A.f(A.bP("Unexpected state under `()`: "+A.o(o)))}},
+ik(a,b){var s=b.pop()
+if(0===s){b.push(A.bF(a.u,1,"0&"))
+return}if(1===s){b.push(A.bF(a.u,4,"1&"))
+return}throw A.f(A.bP("Unexpected extended operation "+A.o(s)))},
+fB(a,b){var s=b.splice(a.p)
+A.fF(a.u,a.e,s)
+a.p=b.pop()
+return s},
+an(a,b,c){if(typeof c=="string")return A.bE(a,c,a.sEA)
+else if(typeof c=="number"){b.toString
+return A.im(a,b,c)}else return c},
+fF(a,b,c){var s,r=c.length
+for(s=0;sn)return!1
+m=n-o
+l=s.b
+k=r.b
+j=l.length
+i=k.length
+if(o+j=d)return!1
+a1=f[b]
+b+=3
+if(a00?new Array(q):v.typeUniverse.sEA
+for(o=0;o0?new Array(a):v.typeUniverse.sEA},
+O:function O(a,b){var _=this
+_.a=a
+_.b=b
+_.r=_.f=_.d=_.c=null
+_.w=0
+_.as=_.Q=_.z=_.y=_.x=null},
+cD:function cD(){this.c=this.b=this.a=null},
+cL:function cL(a){this.a=a},
+cB:function cB(){},
+bB:function bB(a){this.a=a},
+ia(){var s,r,q
+if(self.scheduleImmediate!=null)return A.jq()
+if(self.MutationObserver!=null&&self.document!=null){s={}
+r=self.document.createElement("div")
+q=self.document.createElement("span")
+s.a=null
+new self.MutationObserver(A.cM(new A.dG(s),1)).observe(r,{childList:true})
+return new A.dF(s,r,q)}else if(self.setImmediate!=null)return A.jr()
+return A.js()},
+ib(a){self.scheduleImmediate(A.cM(new A.dH(a),0))},
+ic(a){self.setImmediate(A.cM(new A.dI(a),0))},
+id(a){A.iq(0,a)},
+iq(a,b){var s=new A.e6()
+s.bx(a,b)
+return s},
+eT(a){return new A.cx(new A.x($.t,a.h("x<0>")),a.h("cx<0>"))},
+eP(a,b){a.$2(0,null)
+b.b=!0
+return b.a},
+iN(a,b){A.iO(a,b)},
+eO(a,b){var s,r=a==null?b.$ti.c.a(a):a
+if(!b.b)b.a.aO(r)
+else{s=b.a
+if(b.$ti.h("aw<1>").b(r))s.aQ(r)
+else s.aU(r)}},
+eN(a,b){var s=A.ac(a),r=A.aa(a),q=b.a
+if(b.b)q.ao(new A.P(s,r))
+else q.aP(new A.P(s,r))},
+iO(a,b){var s,r,q=new A.eb(b),p=new A.ec(b)
+if(a instanceof A.x)a.b3(q,p,t.z)
+else{s=t.z
+if(a instanceof A.x)a.bh(q,p,s)
+else{r=new A.x($.t,t.aY)
+r.a=8
+r.c=a
+r.b3(q,p,s)}}},
+eV(a){var s=function(b,c){return function(d,e){while(true){try{b(d,e)
+break}catch(r){e=r
+d=c}}}}(a,1)
+return $.t.bg(new A.ej(s))},
+fG(a,b,c){return 0},
+ev(a){var s
+if(t.Q.b(a)){s=a.gah()
+if(s!=null)return s}return B.E},
+eE(a,b,c){var s,r,q,p={},o=p.a=a
+for(;s=o.a,(s&4)!==0;){o=o.c
+p.a=o}if(o===b){s=A.i4()
+b.aP(new A.P(new A.U(!0,o,null,"Cannot complete a future with itself"),s))
+return}r=b.a&1
+s=o.a=s|r
+if((s&24)===0){q=b.c
+b.a=b.a&1|4
+b.c=o
+o.b1(q)
+return}if(!c)if(b.c==null)o=(s&16)===0||r!==0
+else o=!1
+else o=!0
+if(o){q=b.a7()
+b.a4(p.a)
+A.aI(b,q)
+return}b.a^=2
+A.aN(null,null,b.b,new A.dR(p,b))},
+aI(a,b){var s,r,q,p,o,n,m,l,k,j,i,h,g={},f=g.a=a
+for(;!0;){s={}
+r=f.a
+q=(r&16)===0
+p=!q
+if(b==null){if(p&&(r&1)===0){f=f.c
+A.eh(f.a,f.b)}return}s.a=b
+o=b.a
+for(f=b;o!=null;f=o,o=n){f.a=null
+A.aI(g.a,f)
+s.a=o
+n=o.a}r=g.a
+m=r.c
+s.b=p
+s.c=m
+if(q){l=f.c
+l=(l&1)!==0||(l&15)===8}else l=!0
+if(l){k=f.b.b
+if(p){r=r.b===k
+r=!(r||r)}else r=!1
+if(r){A.eh(m.a,m.b)
+return}j=$.t
+if(j!==k)$.t=k
+else j=null
+f=f.c
+if((f&15)===8)new A.dV(s,g,p).$0()
+else if(q){if((f&1)!==0)new A.dU(s,m).$0()}else if((f&2)!==0)new A.dT(g,s).$0()
+if(j!=null)$.t=j
+f=s.c
+if(f instanceof A.x){r=s.a.$ti
+r=r.h("aw<2>").b(f)||!r.y[1].b(f)}else r=!1
+if(r){i=s.a.b
+if((f.a&24)!==0){h=i.c
+i.c=null
+b=i.a8(h)
+i.a=f.a&30|i.a&1
+i.c=f.c
+g.a=f
+continue}else A.eE(f,i,!0)
+return}}i=s.a.b
+h=i.c
+i.c=null
+b=i.a8(h)
+f=s.b
+r=s.c
+if(!f){i.a=8
+i.c=r}else{i.a=i.a&1|16
+i.c=r}g.a=i
+f=i}},
+jf(a,b){if(t.C.b(a))return b.bg(a)
+if(t.w.b(a))return a
+throw A.f(A.fg(a,"onError",u.c))},
+jd(){var s,r
+for(s=$.aM;s!=null;s=$.aM){$.bJ=null
+r=s.b
+$.aM=r
+if(r==null)$.bI=null
+s.a.$0()}},
+jk(){$.eS=!0
+try{A.jd()}finally{$.bJ=null
+$.eS=!1
+if($.aM!=null)$.fa().$1(A.h0())}},
+fZ(a){var s=new A.cy(a),r=$.bI
+if(r==null){$.aM=$.bI=s
+if(!$.eS)$.fa().$1(A.h0())}else $.bI=r.b=s},
+jh(a){var s,r,q,p=$.aM
+if(p==null){A.fZ(a)
+$.bJ=$.bI
+return}s=new A.cy(a)
+r=$.bJ
+if(r==null){s.b=p
+$.aM=$.bJ=s}else{q=r.b
+s.b=q
+$.bJ=r.b=s
+if(q==null)$.bI=s}},
+jK(a){var s=null,r=$.t
+if(B.a===r){A.aN(s,s,B.a,a)
+return}A.aN(s,s,r,r.b8(a))},
+jT(a){A.eW(a,"stream",t.K)
+return new A.cI()},
+eh(a,b){A.jh(new A.ei(a,b))},
+fW(a,b,c,d){var s,r=$.t
+if(r===c)return d.$0()
+$.t=c
+s=r
+try{r=d.$0()
+return r}finally{$.t=s}},
+fX(a,b,c,d,e){var s,r=$.t
+if(r===c)return d.$1(e)
+$.t=c
+s=r
+try{r=d.$1(e)
+return r}finally{$.t=s}},
+jg(a,b,c,d,e,f){var s,r=$.t
+if(r===c)return d.$2(e,f)
+$.t=c
+s=r
+try{r=d.$2(e,f)
+return r}finally{$.t=s}},
+aN(a,b,c,d){if(B.a!==c){d=c.b8(d)
+d=d}A.fZ(d)},
+dG:function dG(a){this.a=a},
+dF:function dF(a,b,c){this.a=a
+this.b=b
+this.c=c},
+dH:function dH(a){this.a=a},
+dI:function dI(a){this.a=a},
+e6:function e6(){},
+e7:function e7(a,b){this.a=a
+this.b=b},
+cx:function cx(a,b){this.a=a
+this.b=!1
+this.$ti=b},
+eb:function eb(a){this.a=a},
+ec:function ec(a){this.a=a},
+ej:function ej(a){this.a=a},
+aL:function aL(a){var _=this
+_.a=a
+_.e=_.d=_.c=_.b=null},
+ap:function ap(a,b){this.a=a
+this.$ti=b},
+P:function P(a,b){this.a=a
+this.b=b},
+aH:function aH(a,b,c,d,e){var _=this
+_.a=null
+_.b=a
+_.c=b
+_.d=c
+_.e=d
+_.$ti=e},
+x:function x(a,b){var _=this
+_.a=0
+_.b=a
+_.c=null
+_.$ti=b},
+dO:function dO(a,b){this.a=a
+this.b=b},
+dS:function dS(a,b){this.a=a
+this.b=b},
+dR:function dR(a,b){this.a=a
+this.b=b},
+dQ:function dQ(a,b){this.a=a
+this.b=b},
+dP:function dP(a,b){this.a=a
+this.b=b},
+dV:function dV(a,b,c){this.a=a
+this.b=b
+this.c=c},
+dW:function dW(a,b){this.a=a
+this.b=b},
+dX:function dX(a){this.a=a},
+dU:function dU(a,b){this.a=a
+this.b=b},
+dT:function dT(a,b){this.a=a
+this.b=b},
+cy:function cy(a){this.a=a
+this.b=null},
+cI:function cI(){},
+ea:function ea(){},
+ei:function ei(a,b){this.a=a
+this.b=b},
+e2:function e2(){},
+e3:function e3(a,b){this.a=a
+this.b=b},
+e4:function e4(a,b,c){this.a=a
+this.b=b
+this.c=c},
+hJ(a,b){return new A.bp(a.h("@<0>").B(b).h("bp<1,2>"))},
+eF(a,b){var s=a[b]
+return s===a?null:s},
+eH(a,b,c){if(c==null)a[b]=a
+else a[b]=c},
+eG(){var s=Object.create(null)
+A.eH(s,"",s)
+delete s[""]
+return s},
+R(a,b,c){return A.jw(a,new A.ah(b.h("@<0>").B(c).h("ah<1,2>")))},
+E(a,b){return new A.ah(a.h("@<0>").B(b).h("ah<1,2>"))},
+ax(a){return new A.br(a.h("br<0>"))},
+eI(){var s=Object.create(null)
+s[""]=s
+delete s[""]
+return s},
+hV(a){return new A.am(a.h("am<0>"))},
+da(a){return new A.am(a.h("am<0>"))},
+eJ(){var s=Object.create(null)
+s[""]=s
+delete s[""]
+return s},
+ih(a,b,c){var s=new A.aJ(a,b,c.h("aJ<0>"))
+s.c=a.e
+return s},
+hK(a,b,c){var s=A.hJ(b,c)
+a.H(0,new A.d5(s,b,c))
+return s},
+d6(a){var s=J.ad(a)
+if(s.j())return s.gk()
+return null},
+eC(a){var s,r
+if(A.f5(a))return"{...}"
+s=new A.cn("")
+try{r={}
+$.au.push(a)
+s.a+="{"
+r.a=!0
+a.H(0,new A.dd(r,s))
+s.a+="}"}finally{$.au.pop()}r=s.a
+return r.charCodeAt(0)==0?r:r},
+bp:function bp(a){var _=this
+_.a=0
+_.e=_.d=_.c=_.b=null
+_.$ti=a},
+bq:function bq(a,b){this.a=a
+this.$ti=b},
+cE:function cE(a,b,c){var _=this
+_.a=a
+_.b=b
+_.c=0
+_.d=null
+_.$ti=c},
+br:function br(a){var _=this
+_.a=0
+_.e=_.d=_.c=_.b=null
+_.$ti=a},
+a8:function a8(a,b,c){var _=this
+_.a=a
+_.b=b
+_.c=0
+_.d=null
+_.$ti=c},
+am:function am(a){var _=this
+_.a=0
+_.f=_.e=_.d=_.c=_.b=null
+_.r=0
+_.$ti=a},
+e_:function e_(a){this.a=a
+this.c=this.b=null},
+aJ:function aJ(a,b,c){var _=this
+_.a=a
+_.b=b
+_.d=_.c=null
+_.$ti=c},
+d5:function d5(a,b,c){this.a=a
+this.b=b
+this.c=c},
+m:function m(){},
+ba:function ba(){},
+dd:function dd(a,b){this.a=a
+this.b=b},
+ak:function ak(){},
+bz:function bz(){},
+hE(a,b){a=A.z(a,new Error())
+a.stack=b.i(0)
+throw a},
+eB(a,b,c,d){var s,r=c?J.hR(a,d):J.hQ(a,d)
+if(a!==0&&b!=null)for(s=0;s"))
+for(s=a.length,r=0;r"))
+s=A.b([],b.h("p<0>"))
+for(r=J.ad(a);r.j();)s.push(r.gk())
+return s},
+fu(a,b,c){var s=J.ad(b)
+if(!s.j())return a
+if(c.length===0){do a+=A.o(s.gk())
+while(s.j())}else{a+=A.o(s.gk())
+for(;s.j();)a=a+c+A.o(s.gk())}return a},
+i4(){return A.aa(new Error())},
+d3(a){if(typeof a=="number"||A.eR(a)||a==null)return J.a2(a)
+if(typeof a=="string")return JSON.stringify(a)
+return A.fr(a)},
+hF(a,b){A.eW(a,"error",t.K)
+A.eW(b,"stackTrace",t.l)
+A.hE(a,b)},
+bP(a){return new A.bO(a)},
+bM(a,b){return new A.U(!1,null,b,a)},
+fg(a,b,c){return new A.U(!0,a,b,c)},
+i1(a,b,c,d,e){return new A.bh(b,c,!0,a,d,"Invalid value")},
+fs(a,b){return a},
+ex(a,b,c,d){return new A.bW(b,!0,a,d,"Index out of range")},
+fy(a){return new A.bm(a)},
+fx(a){return new A.cs(a)},
+i5(a){return new A.cj(a)},
+V(a){return new A.bT(a)},
+hP(a,b,c){var s,r
+if(A.f5(a)){if(b==="("&&c===")")return"(...)"
+return b+"..."+c}s=A.b([],t.s)
+$.au.push(a)
+try{A.jc(a,s)}finally{$.au.pop()}r=A.fu(b,s,", ")+c
+return r.charCodeAt(0)==0?r:r},
+ey(a,b,c){var s,r
+if(A.f5(a))return b+"..."+c
+s=new A.cn(b)
+$.au.push(a)
+try{r=s
+r.a=A.fu(r.a,a,", ")}finally{$.au.pop()}s.a+=c
+r=s.a
+return r.charCodeAt(0)==0?r:r},
+jc(a,b){var s,r,q,p,o,n,m,l=a.gq(a),k=0,j=0
+while(!0){if(!(k<80||j<3))break
+if(!l.j())return
+s=A.o(l.gk())
+b.push(s)
+k+=s.length+2;++j}if(!l.j()){if(j<=5)return
+r=b.pop()
+q=b.pop()}else{p=l.gk();++j
+if(!l.j()){if(j<=4){b.push(A.o(p))
+return}r=A.o(p)
+q=b.pop()
+k+=r.length+2}else{o=l.gk();++j
+for(;l.j();p=o,o=n){n=l.gk();++j
+if(j>100){while(!0){if(!(k>75&&j>3))break
+k-=b.pop().length+2;--j}b.push("...")
+return}}q=A.o(p)
+r=A.o(o)
+k+=r.length+q.length+4}}if(j>b.length+2){k+=5
+m="..."}else m=null
+while(!0){if(!(k>80&&b.length>3))break
+k-=b.pop().length+2
+if(m==null){k+=5
+m="..."}}if(m!=null)b.push(m)
+b.push(q)
+b.push(r)},
+fp(a,b,c,d){var s
+if(B.e===c){s=J.B(a)
+b=J.B(b)
+return A.dp(A.Z(A.Z($.cP(),s),b))}if(B.e===d){s=J.B(a)
+b=J.B(b)
+c=J.B(c)
+return A.dp(A.Z(A.Z(A.Z($.cP(),s),b),c))}s=J.B(a)
+b=J.B(b)
+c=J.B(c)
+d=J.B(d)
+d=A.dp(A.Z(A.Z(A.Z(A.Z($.cP(),s),b),c),d))
+return d},
+hZ(a){var s,r,q=$.cP()
+for(s=a.length,r=0;r")
+return A.fn(new A.W(a,s),new A.de(b,c),s.h("l.E"),b.h("@<0>").B(c).h("+(1,2)"))},
+cq:function cq(a){this.a=a},
+aZ:function aZ(a){this.b=a},
+cr:function cr(a,b){var _=this
+_.d=a
+_.f=_.e=0
+_.r=b
+_.c=null},
+dr:function dr(a,b){this.a=a
+this.b=b},
+dB:function dB(a,b){this.a=a
+this.b=b},
+dA:function dA(a){this.a=a},
+dy:function dy(a,b){this.a=a
+this.b=b},
+dx:function dx(a){this.a=a},
+dw:function dw(){},
+dz:function dz(a,b){this.a=a
+this.b=b},
+ds:function ds(a){this.a=a},
+dt:function dt(a,b){this.a=a
+this.b=b},
+du:function du(a,b){this.a=a
+this.b=b},
+dv:function dv(a,b){this.a=a
+this.b=b},
+cc:function cc(a,b){this.c=a
+this.a=b},
+df:function df(a){this.a=a},
+de:function de(a,b){this.a=a
+this.b=b},
+ie(a,b,c,d){var s,r=A.jp(new A.dM(c),t.m),q=null
+if(r==null)r=q
+else{if(typeof r=="function")A.M(A.bM("Attempting to rewrap a JS function.",null))
+s=function(e,f){return function(g){return e(f,g,arguments.length)}}(A.iP,r)
+s[$.f9()]=r
+r=s}if(r!=null)a.addEventListener(b,r,!1)
+return new A.cC(a,b,r,!1)},
+jp(a,b){var s=$.t
+if(s===B.a)return a
+return s.bU(a,b)},
+ew:function ew(a,b){this.a=a
+this.$ti=b},
+cC:function cC(a,b,c,d){var _=this
+_.b=a
+_.c=b
+_.d=c
+_.e=d},
+dM:function dM(a){this.a=a},
+jI(a){if(typeof dartPrint=="function"){dartPrint(a)
+return}if(typeof console=="object"&&typeof console.log!="undefined"){console.log(a)
+return}if(typeof print=="function"){print(a)
+return}throw"Unable to print message: "+String(a)},
+iP(a,b,c){if(c>=1)return a.$1(b)
+return a.$0()},
+aQ(a,b){return a[b]},
+dg(a){return new A.ap(A.hY(a),t.F)},
+hY(a){return function(){var s=a
+var r=0,q=1,p=[],o,n
+return function $async$dg(b,c,d){if(c===1){p.push(d)
+r=q}while(true)switch(r){case 0:o=0
+case 2:if(!(o").B(b).h("ae<1,2>"))},
+A(a,b){var s
+a.$flags&1&&A.aV(a,"remove",1)
+for(s=0;s0){a[0]=q
+a[1]=r}return}p=0
+if(A.aq(a).c.b(null))for(o=0;o0)this.bH(a,p)},
+bH(a,b){var s,r=a.length
+for(;s=r-1,r>0;r=s)if(a[s]===null){a[s]=void 0;--b
+if(b===0)break}},
+i(a){return A.ey(a,"[","]")},
+gq(a){return new J.bN(a,a.length,A.aq(a).h("bN<1>"))},
+gu(a){return A.ce(a)},
+gl(a){return a.length},
+m(a,b){if(!(b>=0&&b=0&&b=p){r.d=null
+return!1}r.d=q[s]
+r.c=s+1
+return!0}}
+J.ay.prototype={
+bb(a,b){var s
+if(ab)return 1
+else if(a===b){if(a===0){s=this.gaD(b)
+if(this.gaD(a)===s)return 0
+if(this.gaD(a))return-1
+return 1}return 0}else if(isNaN(a)){if(isNaN(b))return 0
+return 1}else return-1},
+gaD(a){return a===0?1/a<0:a<0},
+cl(a){if(a>0){if(a!==1/0)return Math.round(a)}else if(a>-1/0)return 0-Math.round(0-a)
+throw A.f(A.fy(""+a+".round()"))},
+cm(a){if(a<0)return-Math.round(-a)
+else return Math.round(a)},
+i(a){if(a===0&&1/a<0)return"-0.0"
+else return""+a},
+gu(a){var s,r,q,p,o=a|0
+if(a===o)return o&536870911
+s=Math.abs(a)
+r=Math.log(s)/0.6931471805599453|0
+q=Math.pow(2,r)
+p=s<1?s/q:q/s
+return((p*9007199254740992|0)+(p*3542243181176521|0))*599197+r*1259&536870911},
+bM(a,b){var s
+if(a>0)s=this.bL(a,b)
+else{s=b>31?31:b
+s=a>>s>>>0}return s},
+bL(a,b){return b>31?0:a>>>b},
+gt(a){return A.L(t.n)},
+$iv:1}
+J.b2.prototype={
+gt(a){return A.L(t.S)},
+$ik:1,
+$ia:1}
+J.c_.prototype={
+gt(a){return A.L(t.V)},
+$ik:1}
+J.az.prototype={
+bb(a,b){var s
+if(a===b)s=0
+else s=a>6}r=r+((r&67108863)<<3)&536870911
+r^=r>>11
+return r+((r&16383)<<15)&536870911},
+gt(a){return A.L(t.N)},
+gl(a){return a.length},
+$ik:1,
+$ie:1}
+A.aF.prototype={
+gq(a){return new A.bR(J.ad(this.ga9()),A.u(this).h("bR<1,2>"))},
+gl(a){return J.eu(this.ga9())},
+G(a,b){return A.u(this).y[1].a(J.hv(this.ga9(),b))},
+i(a){return J.a2(this.ga9())}}
+A.bR.prototype={
+j(){return this.a.j()},
+gk(){return this.$ti.y[1].a(this.a.gk())}}
+A.bo.prototype={
+m(a,b){return this.$ti.y[1].a(J.hs(this.a,b))},
+p(a,b,c){J.ht(this.a,b,this.$ti.c.a(c))},
+$ic:1,
+$ij:1}
+A.ae.prototype={
+ba(a,b){return new A.ae(this.a,this.$ti.h("@<1>").B(b).h("ae<1,2>"))},
+ga9(){return this.a}}
+A.ai.prototype={
+i(a){return"LateInitializationError: "+this.a}}
+A.dl.prototype={}
+A.c.prototype={}
+A.Y.prototype={
+gq(a){var s=this
+return new A.a5(s,s.gl(s),A.u(s).h("a5"))}}
+A.a5.prototype={
+gk(){var s=this.d
+return s==null?this.$ti.c.a(s):s},
+j(){var s,r=this,q=r.a,p=J.en(q),o=p.gl(q)
+if(r.b!==o)throw A.f(A.V(q))
+s=r.c
+if(s>=o){r.d=null
+return!1}r.d=p.G(q,s);++r.c
+return!0}}
+A.aj.prototype={
+gq(a){var s=this.a
+return new A.aA(s.gq(s),this.b,A.u(this).h("aA<1,2>"))},
+gl(a){var s=this.a
+return s.gl(s)},
+G(a,b){var s=this.a
+return this.b.$1(s.G(s,b))}}
+A.b_.prototype={$ic:1}
+A.aA.prototype={
+j(){var s=this,r=s.b
+if(r.j()){s.a=s.c.$1(r.gk())
+return!0}s.a=null
+return!1},
+gk(){var s=this.a
+return s==null?this.$ti.y[1].a(s):s}}
+A.bn.prototype={
+gq(a){return new A.cv(J.ad(this.a),this.b)}}
+A.cv.prototype={
+j(){var s,r
+for(s=this.a,r=this.b;s.j();)if(r.$1(s.gk()))return!0
+return!1},
+gk(){return this.a.gk()}}
+A.b1.prototype={}
+A.bi.prototype={
+gl(a){return J.eu(this.a)},
+G(a,b){var s=this.a,r=J.en(s)
+return r.G(s,r.gl(s)-1-b)}}
+A.bH.prototype={}
+A.ao.prototype={$r:"+(1,2)",$s:1}
+A.aK.prototype={$r:"+isActive,todo(1,2)",$s:2}
+A.bU.prototype={
+i(a){return A.eC(this)}}
+A.aY.prototype={
+gl(a){return this.b.length},
+gbG(){var s=this.$keys
+if(s==null){s=Object.keys(this.a)
+this.$keys=s}return s},
+R(a){if(typeof a!="string")return!1
+if("__proto__"===a)return!1
+return this.a.hasOwnProperty(a)},
+m(a,b){if(!this.R(b))return null
+return this.b[this.a[b]]},
+H(a,b){var s,r,q=this.gbG(),p=this.b
+for(s=q.length,r=0;r>>0},
+i(a){return"Closure '"+this.$_name+"' of "+("Instance of '"+A.cf(this.a)+"'")}}
+A.cg.prototype={
+i(a){return"RuntimeError: "+this.a}}
+A.ah.prototype={
+gl(a){return this.a},
+ga_(){return new A.X(this,A.u(this).h("X<1>"))},
+R(a){var s=this.c5(a)
+return s},
+c5(a){var s=this.d
+if(s==null)return!1
+return this.ad(s[this.ac(a)],a)>=0},
+D(a,b){b.H(0,new A.d8(this))},
+m(a,b){var s,r,q,p,o=null
+if(typeof b=="string"){s=this.b
+if(s==null)return o
+r=s[b]
+q=r==null?o:r.b
+return q}else if(typeof b=="number"&&(b&0x3fffffff)===b){p=this.c
+if(p==null)return o
+r=p[b]
+q=r==null?o:r.b
+return q}else return this.c6(b)},
+c6(a){var s,r,q=this.d
+if(q==null)return null
+s=q[this.ac(a)]
+r=this.ad(s,a)
+if(r<0)return null
+return s[r].b},
+p(a,b,c){var s,r,q=this
+if(typeof b=="string"){s=q.b
+q.aN(s==null?q.b=q.au():s,b,c)}else if(typeof b=="number"&&(b&0x3fffffff)===b){r=q.c
+q.aN(r==null?q.c=q.au():r,b,c)}else q.c8(b,c)},
+c8(a,b){var s,r,q,p=this,o=p.d
+if(o==null)o=p.d=p.au()
+s=p.ac(a)
+r=o[s]
+if(r==null)o[s]=[p.av(a,b)]
+else{q=p.ad(r,a)
+if(q>=0)r[q].b=b
+else r.push(p.av(a,b))}},
+A(a,b){var s=this
+if(typeof b=="string")return s.b2(s.b,b)
+else if(typeof b=="number"&&(b&0x3fffffff)===b)return s.b2(s.c,b)
+else return s.c7(b)},
+c7(a){var s,r,q,p,o=this,n=o.d
+if(n==null)return null
+s=o.ac(a)
+r=n[s]
+q=o.ad(r,a)
+if(q<0)return null
+p=r.splice(q,1)[0]
+o.b5(p)
+if(r.length===0)delete n[s]
+return p.b},
+H(a,b){var s=this,r=s.e,q=s.r
+for(;r!=null;){b.$2(r.a,r.b)
+if(q!==s.r)throw A.f(A.V(s))
+r=r.c}},
+aN(a,b,c){var s=a[b]
+if(s==null)a[b]=this.av(b,c)
+else s.b=c},
+b2(a,b){var s
+if(a==null)return null
+s=a[b]
+if(s==null)return null
+this.b5(s)
+delete a[b]
+return s.b},
+b0(){this.r=this.r+1&1073741823},
+av(a,b){var s,r=this,q=new A.d9(a,b)
+if(r.e==null)r.e=r.f=q
+else{s=r.f
+s.toString
+q.d=s
+r.f=s.c=q}++r.a
+r.b0()
+return q},
+b5(a){var s=this,r=a.d,q=a.c
+if(r==null)s.e=q
+else r.c=q
+if(q==null)s.f=r
+else q.d=r;--s.a
+s.b0()},
+ac(a){return J.B(a)&1073741823},
+ad(a,b){var s,r
+if(a==null)return-1
+s=a.length
+for(r=0;r"]=s
+delete s[""]
+return s}}
+A.d8.prototype={
+$2(a,b){this.a.p(0,a,b)},
+$S(){return A.u(this.a).h("~(1,2)")}}
+A.d9.prototype={}
+A.X.prototype={
+gl(a){return this.a.a},
+gq(a){var s=this.a
+return new A.b9(s,s.r,s.e)}}
+A.b9.prototype={
+gk(){return this.d},
+j(){var s,r=this,q=r.a
+if(r.b!==q.r)throw A.f(A.V(q))
+s=r.c
+if(s==null){r.d=null
+return!1}else{r.d=s.a
+r.c=s.c
+return!0}}}
+A.W.prototype={
+gl(a){return this.a.a},
+gq(a){var s=this.a
+return new A.c2(s,s.r,s.e,this.$ti.h("c2<1,2>"))}}
+A.c2.prototype={
+gk(){var s=this.d
+s.toString
+return s},
+j(){var s,r=this,q=r.a
+if(r.b!==q.r)throw A.f(A.V(q))
+s=r.c
+if(s==null){r.d=null
+return!1}else{r.d=new A.F(s.a,s.b,r.$ti.h("F<1,2>"))
+r.c=s.c
+return!0}}}
+A.eo.prototype={
+$1(a){return this.a(a)},
+$S:8}
+A.ep.prototype={
+$2(a,b){return this.a(a,b)},
+$S:9}
+A.eq.prototype={
+$1(a){return this.a(a)},
+$S:10}
+A.bx.prototype={
+gt(a){return A.L(this.b_())},
+b_(){return A.jv(this.$r,this.aZ())},
+i(a){return this.b4(!1)},
+b4(a){var s,r,q,p,o,n=this.bD(),m=this.aZ(),l=(a?"Record ":"")+"("
+for(s=n.length,r="",q=0;q0;){--q;--s
+k[q]=r[s]}}k=A.hW(k,!1,t.K)
+k.$flags=3
+return k}}
+A.cG.prototype={
+aZ(){return[this.a,this.b]},
+L(a,b){if(b==null)return!1
+return b instanceof A.cG&&this.$s===b.$s&&J.q(this.a,b.a)&&J.q(this.b,b.b)},
+gu(a){return A.fp(this.$s,this.a,this.b,B.e)}}
+A.dJ.prototype={
+J(){var s=this.b
+if(s===this)throw A.f(new A.ai("Local '' has not been initialized."))
+return s}}
+A.aB.prototype={
+gt(a){return B.a5},
+$ik:1}
+A.bd.prototype={}
+A.c3.prototype={
+gt(a){return B.a6},
+$ik:1}
+A.aC.prototype={
+gl(a){return a.length},
+$iJ:1}
+A.bb.prototype={
+m(a,b){A.a1(b,a,a.length)
+return a[b]},
+p(a,b,c){a.$flags&2&&A.aV(a)
+A.a1(b,a,a.length)
+a[b]=c},
+$ic:1,
+$ij:1}
+A.bc.prototype={
+p(a,b,c){a.$flags&2&&A.aV(a)
+A.a1(b,a,a.length)
+a[b]=c},
+$ic:1,
+$ij:1}
+A.c4.prototype={
+gt(a){return B.a7},
+$ik:1}
+A.c5.prototype={
+gt(a){return B.a8},
+$ik:1}
+A.c6.prototype={
+gt(a){return B.a9},
+m(a,b){A.a1(b,a,a.length)
+return a[b]},
+$ik:1}
+A.c7.prototype={
+gt(a){return B.aa},
+m(a,b){A.a1(b,a,a.length)
+return a[b]},
+$ik:1}
+A.c8.prototype={
+gt(a){return B.ab},
+m(a,b){A.a1(b,a,a.length)
+return a[b]},
+$ik:1}
+A.c9.prototype={
+gt(a){return B.af},
+m(a,b){A.a1(b,a,a.length)
+return a[b]},
+$ik:1}
+A.ca.prototype={
+gt(a){return B.ag},
+m(a,b){A.a1(b,a,a.length)
+return a[b]},
+$ik:1}
+A.be.prototype={
+gt(a){return B.ah},
+gl(a){return a.length},
+m(a,b){A.a1(b,a,a.length)
+return a[b]},
+$ik:1}
+A.cb.prototype={
+gt(a){return B.ai},
+gl(a){return a.length},
+m(a,b){A.a1(b,a,a.length)
+return a[b]},
+$ik:1}
+A.bs.prototype={}
+A.bt.prototype={}
+A.bu.prototype={}
+A.bv.prototype={}
+A.O.prototype={
+h(a){return A.bG(v.typeUniverse,this,a)},
+B(a){return A.fL(v.typeUniverse,this,a)}}
+A.cD.prototype={}
+A.cL.prototype={
+i(a){return A.K(this.a,null)},
+$ifv:1}
+A.cB.prototype={
+i(a){return this.a}}
+A.bB.prototype={$ia_:1}
+A.dG.prototype={
+$1(a){var s=this.a,r=s.a
+s.a=null
+r.$0()},
+$S:5}
+A.dF.prototype={
+$1(a){var s,r
+this.a.a=a
+s=this.b
+r=this.c
+s.firstChild?s.removeChild(r):s.appendChild(r)},
+$S:11}
+A.dH.prototype={
+$0(){this.a.$0()},
+$S:6}
+A.dI.prototype={
+$0(){this.a.$0()},
+$S:6}
+A.e6.prototype={
+bx(a,b){if(self.setTimeout!=null)self.setTimeout(A.cM(new A.e7(this,b),0),a)
+else throw A.f(A.fy("`setTimeout()` not found."))}}
+A.e7.prototype={
+$0(){this.b.$0()},
+$S:0}
+A.cx.prototype={}
+A.eb.prototype={
+$1(a){return this.a.$2(0,a)},
+$S:2}
+A.ec.prototype={
+$2(a,b){this.a.$2(1,new A.b0(a,b))},
+$S:12}
+A.ej.prototype={
+$2(a,b){this.a(a,b)},
+$S:13}
+A.aL.prototype={
+gk(){return this.b},
+bI(a,b){var s,r,q
+a=a
+b=b
+s=this.a
+for(;!0;)try{r=s(this,a,b)
+return r}catch(q){b=q
+a=1}},
+j(){var s,r,q,p,o=this,n=null,m=0
+for(;!0;){s=o.d
+if(s!=null)try{if(s.j()){o.b=s.gk()
+return!0}else o.d=null}catch(r){n=r
+m=1
+o.d=null}q=o.bI(m,n)
+if(1===q)return!0
+if(0===q){o.b=null
+p=o.e
+if(p==null||p.length===0){o.a=A.fG
+return!1}o.a=p.pop()
+m=0
+n=null
+continue}if(2===q){m=0
+n=null
+continue}if(3===q){n=o.c
+o.c=null
+p=o.e
+if(p==null||p.length===0){o.b=null
+o.a=A.fG
+throw n
+return!1}o.a=p.pop()
+m=1
+continue}throw A.f(A.i5("sync*"))}return!1},
+cC(a){var s,r,q=this
+if(a instanceof A.ap){s=a.a()
+r=q.e
+if(r==null)r=q.e=[]
+r.push(q.a)
+q.a=s
+return 2}else{q.d=J.ad(a)
+return 2}}}
+A.ap.prototype={
+gq(a){return new A.aL(this.a())}}
+A.P.prototype={
+i(a){return A.o(this.a)},
+$ir:1,
+gah(){return this.b}}
+A.aH.prototype={
+cd(a){if((this.c&15)!==6)return!0
+return this.b.b.aF(this.d,a.a)},
+c4(a){var s,r=this.e,q=null,p=a.a,o=this.b.b
+if(t.C.b(r))q=o.cp(r,p,a.b)
+else q=o.aF(r,p)
+try{p=q
+return p}catch(s){if(t.c.b(A.ac(s))){if((this.c&1)!==0)throw A.f(A.bM("The error handler of Future.then must return a value of the returned future's type","onError"))
+throw A.f(A.bM("The error handler of Future.catchError must return a value of the future's type","onError"))}else throw s}}}
+A.x.prototype={
+bh(a,b,c){var s,r=$.t
+if(r===B.a){if(!t.C.b(b)&&!t.w.b(b))throw A.f(A.fg(b,"onError",u.c))}else b=A.jf(b,r)
+s=new A.x(r,c.h("x<0>"))
+this.am(new A.aH(s,3,a,b,this.$ti.h("@<1>").B(c).h("aH<1,2>")))
+return s},
+b3(a,b,c){var s=new A.x($.t,c.h("x<0>"))
+this.am(new A.aH(s,19,a,b,this.$ti.h("@<1>").B(c).h("aH<1,2>")))
+return s},
+bK(a){this.a=this.a&1|16
+this.c=a},
+a4(a){this.a=a.a&30|this.a&1
+this.c=a.c},
+am(a){var s=this,r=s.a
+if(r<=3){a.a=s.c
+s.c=a}else{if((r&4)!==0){r=s.c
+if((r.a&24)===0){r.am(a)
+return}s.a4(r)}A.aN(null,null,s.b,new A.dO(s,a))}},
+b1(a){var s,r,q,p,o,n=this,m={}
+m.a=a
+if(a==null)return
+s=n.a
+if(s<=3){r=n.c
+n.c=a
+if(r!=null){q=a.a
+for(p=a;q!=null;p=q,q=o)o=q.a
+p.a=r}}else{if((s&4)!==0){s=n.c
+if((s.a&24)===0){s.b1(a)
+return}n.a4(s)}m.a=n.a8(a)
+A.aN(null,null,n.b,new A.dS(m,n))}},
+a7(){var s=this.c
+this.c=null
+return this.a8(s)},
+a8(a){var s,r,q
+for(s=a,r=null;s!=null;r=s,s=q){q=s.a
+s.a=r}return r},
+aU(a){var s=this,r=s.a7()
+s.a=8
+s.c=a
+A.aI(s,r)},
+bz(a){var s,r,q=this
+if((a.a&16)!==0){s=q.b===a.b
+s=!(s||s)}else s=!1
+if(s)return
+r=q.a7()
+q.a4(a)
+A.aI(q,r)},
+ao(a){var s=this.a7()
+this.bK(a)
+A.aI(this,s)},
+aO(a){if(this.$ti.h("aw<1>").b(a)){this.aQ(a)
+return}this.by(a)},
+by(a){this.a^=2
+A.aN(null,null,this.b,new A.dQ(this,a))},
+aQ(a){A.eE(a,this,!1)
+return},
+aP(a){this.a^=2
+A.aN(null,null,this.b,new A.dP(this,a))},
+$iaw:1}
+A.dO.prototype={
+$0(){A.aI(this.a,this.b)},
+$S:0}
+A.dS.prototype={
+$0(){A.aI(this.b,this.a.a)},
+$S:0}
+A.dR.prototype={
+$0(){A.eE(this.a.a,this.b,!0)},
+$S:0}
+A.dQ.prototype={
+$0(){this.a.aU(this.b)},
+$S:0}
+A.dP.prototype={
+$0(){this.a.ao(this.b)},
+$S:0}
+A.dV.prototype={
+$0(){var s,r,q,p,o,n,m,l,k=this,j=null
+try{q=k.a.a
+j=q.b.b.cn(q.d)}catch(p){s=A.ac(p)
+r=A.aa(p)
+if(k.c&&k.b.a.c.a===s){q=k.a
+q.c=k.b.a.c}else{q=s
+o=r
+if(o==null)o=A.ev(q)
+n=k.a
+n.c=new A.P(q,o)
+q=n}q.b=!0
+return}if(j instanceof A.x&&(j.a&24)!==0){if((j.a&16)!==0){q=k.a
+q.c=j.c
+q.b=!0}return}if(j instanceof A.x){m=k.b.a
+l=new A.x(m.b,m.$ti)
+j.bh(new A.dW(l,m),new A.dX(l),t.H)
+q=k.a
+q.c=l
+q.b=!1}},
+$S:0}
+A.dW.prototype={
+$1(a){this.a.bz(this.b)},
+$S:5}
+A.dX.prototype={
+$2(a,b){this.a.ao(new A.P(a,b))},
+$S:14}
+A.dU.prototype={
+$0(){var s,r,q,p,o,n
+try{q=this.a
+p=q.a
+q.c=p.b.b.aF(p.d,this.b)}catch(o){s=A.ac(o)
+r=A.aa(o)
+q=s
+p=r
+if(p==null)p=A.ev(q)
+n=this.a
+n.c=new A.P(q,p)
+n.b=!0}},
+$S:0}
+A.dT.prototype={
+$0(){var s,r,q,p,o,n,m,l=this
+try{s=l.a.a.c
+p=l.b
+if(p.a.cd(s)&&p.a.e!=null){p.c=p.a.c4(s)
+p.b=!1}}catch(o){r=A.ac(o)
+q=A.aa(o)
+p=l.a.a.c
+if(p.a===r){n=l.b
+n.c=p
+p=n}else{p=r
+n=q
+if(n==null)n=A.ev(p)
+m=l.b
+m.c=new A.P(p,n)
+p=m}p.b=!0}},
+$S:0}
+A.cy.prototype={}
+A.cI.prototype={}
+A.ea.prototype={}
+A.ei.prototype={
+$0(){A.hF(this.a,this.b)},
+$S:0}
+A.e2.prototype={
+cr(a){var s,r,q
+try{if(B.a===$.t){a.$0()
+return}A.fW(null,null,this,a)}catch(q){s=A.ac(q)
+r=A.aa(q)
+A.eh(s,r)}},
+ct(a,b){var s,r,q
+try{if(B.a===$.t){a.$1(b)
+return}A.fX(null,null,this,a,b)}catch(q){s=A.ac(q)
+r=A.aa(q)
+A.eh(s,r)}},
+cu(a,b){return this.ct(a,b,t.z)},
+b8(a){return new A.e3(this,a)},
+bU(a,b){return new A.e4(this,a,b)},
+co(a){if($.t===B.a)return a.$0()
+return A.fW(null,null,this,a)},
+cn(a){return this.co(a,t.z)},
+cs(a,b){if($.t===B.a)return a.$1(b)
+return A.fX(null,null,this,a,b)},
+aF(a,b){var s=t.z
+return this.cs(a,b,s,s)},
+cq(a,b,c){if($.t===B.a)return a.$2(b,c)
+return A.jg(null,null,this,a,b,c)},
+cp(a,b,c){var s=t.z
+return this.cq(a,b,c,s,s,s)},
+ci(a){return a},
+bg(a){var s=t.z
+return this.ci(a,s,s,s)}}
+A.e3.prototype={
+$0(){return this.a.cr(this.b)},
+$S:0}
+A.e4.prototype={
+$1(a){return this.a.cu(this.b,a)},
+$S(){return this.c.h("~(0)")}}
+A.bp.prototype={
+gl(a){return this.a},
+ga_(){return new A.bq(this,A.u(this).h("bq<1>"))},
+R(a){var s=this.bC(a)
+return s},
+bC(a){var s=this.d
+if(s==null)return!1
+return this.C(this.aY(s,a),a)>=0},
+m(a,b){var s,r,q
+if(typeof b=="string"&&b!=="__proto__"){s=this.b
+r=s==null?null:A.eF(s,b)
+return r}else if(typeof b=="number"&&(b&1073741823)===b){q=this.c
+r=q==null?null:A.eF(q,b)
+return r}else return this.bE(b)},
+bE(a){var s,r,q=this.d
+if(q==null)return null
+s=this.aY(q,a)
+r=this.C(s,a)
+return r<0?null:s[r+1]},
+p(a,b,c){var s,r,q=this
+if(typeof b=="string"&&b!=="__proto__"){s=q.b
+q.aR(s==null?q.b=A.eG():s,b,c)}else if(typeof b=="number"&&(b&1073741823)===b){r=q.c
+q.aR(r==null?q.c=A.eG():r,b,c)}else q.bJ(b,c)},
+bJ(a,b){var s,r,q,p=this,o=p.d
+if(o==null)o=p.d=A.eG()
+s=p.E(a)
+r=o[s]
+if(r==null){A.eH(o,s,[a,b]);++p.a
+p.e=null}else{q=p.C(r,a)
+if(q>=0)r[q+1]=b
+else{r.push(a,b);++p.a
+p.e=null}}},
+A(a,b){var s=this
+if(typeof b=="string"&&b!=="__proto__")return s.M(s.b,b)
+else if(typeof b=="number"&&(b&1073741823)===b)return s.M(s.c,b)
+else return s.X(b)},
+X(a){var s,r,q,p,o=this,n=o.d
+if(n==null)return null
+s=o.E(a)
+r=n[s]
+q=o.C(r,a)
+if(q<0)return null;--o.a
+o.e=null
+p=r.splice(q,2)[1]
+if(0===r.length)delete n[s]
+return p},
+H(a,b){var s,r,q,p,o,n=this,m=n.aV()
+for(s=m.length,r=A.u(n).y[1],q=0;q"))}}
+A.cE.prototype={
+gk(){var s=this.d
+return s==null?this.$ti.c.a(s):s},
+j(){var s=this,r=s.b,q=s.c,p=s.a
+if(r!==p.e)throw A.f(A.V(p))
+else if(q>=r.length){s.d=null
+return!1}else{s.d=r[q]
+s.c=q+1
+return!0}}}
+A.br.prototype={
+gq(a){return new A.a8(this,this.ap(),A.u(this).h("a8<1>"))},
+gl(a){return this.a},
+aB(a,b){var s,r
+if(typeof b=="string"&&b!=="__proto__"){s=this.b
+return s==null?!1:s[b]!=null}else if(typeof b=="number"&&(b&1073741823)===b){r=this.c
+return r==null?!1:r[b]!=null}else return this.bB(b)},
+bB(a){var s=this.d
+if(s==null)return!1
+return this.C(s[this.E(a)],a)>=0},
+P(a,b){var s,r,q=this
+if(typeof b=="string"&&b!=="__proto__"){s=q.b
+return q.W(s==null?q.b=A.eI():s,b)}else if(typeof b=="number"&&(b&1073741823)===b){r=q.c
+return q.W(r==null?q.c=A.eI():r,b)}else return q.al(b)},
+al(a){var s,r,q=this,p=q.d
+if(p==null)p=q.d=A.eI()
+s=q.E(a)
+r=p[s]
+if(r==null)p[s]=[a]
+else{if(q.C(r,a)>=0)return!1
+r.push(a)}++q.a
+q.e=null
+return!0},
+A(a,b){var s=this
+if(typeof b=="string"&&b!=="__proto__")return s.M(s.b,b)
+else if(typeof b=="number"&&(b&1073741823)===b)return s.M(s.c,b)
+else return s.X(b)},
+X(a){var s,r,q,p=this,o=p.d
+if(o==null)return!1
+s=p.E(a)
+r=o[s]
+q=p.C(r,a)
+if(q<0)return!1;--p.a
+p.e=null
+r.splice(q,1)
+if(0===r.length)delete o[s]
+return!0},
+F(a){var s=this
+if(s.a>0){s.b=s.c=s.d=s.e=null
+s.a=0}},
+ap(){var s,r,q,p,o,n,m,l,k,j,i=this,h=i.e
+if(h!=null)return h
+h=A.eB(i.a,null,!1,t.z)
+s=i.b
+r=0
+if(s!=null){q=Object.getOwnPropertyNames(s)
+p=q.length
+for(o=0;o=r.length){s.d=null
+return!1}else{s.d=r[q]
+s.c=q+1
+return!0}}}
+A.am.prototype={
+gq(a){var s=this,r=new A.aJ(s,s.r,A.u(s).h("aJ<1>"))
+r.c=s.e
+return r},
+gl(a){return this.a},
+H(a,b){var s=this,r=s.e,q=s.r
+for(;r!=null;){b.$1(r.a)
+if(q!==s.r)throw A.f(A.V(s))
+r=r.b}},
+P(a,b){var s,r,q=this
+if(typeof b=="string"&&b!=="__proto__"){s=q.b
+return q.W(s==null?q.b=A.eJ():s,b)}else if(typeof b=="number"&&(b&1073741823)===b){r=q.c
+return q.W(r==null?q.c=A.eJ():r,b)}else return q.al(b)},
+al(a){var s,r,q=this,p=q.d
+if(p==null)p=q.d=A.eJ()
+s=q.E(a)
+r=p[s]
+if(r==null)p[s]=[q.an(a)]
+else{if(q.C(r,a)>=0)return!1
+r.push(q.an(a))}return!0},
+A(a,b){var s=this
+if(typeof b=="string"&&b!=="__proto__")return s.M(s.b,b)
+else if(typeof b=="number"&&(b&1073741823)===b)return s.M(s.c,b)
+else return s.X(b)},
+X(a){var s,r,q,p,o=this,n=o.d
+if(n==null)return!1
+s=o.E(a)
+r=n[s]
+q=o.C(r,a)
+if(q<0)return!1
+p=r.splice(q,1)[0]
+if(0===r.length)delete n[s]
+o.aT(p)
+return!0},
+W(a,b){if(a[b]!=null)return!1
+a[b]=this.an(b)
+return!0},
+M(a,b){var s
+if(a==null)return!1
+s=a[b]
+if(s==null)return!1
+this.aT(s)
+delete a[b]
+return!0},
+aS(){this.r=this.r+1&1073741823},
+an(a){var s,r=this,q=new A.e_(a)
+if(r.e==null)r.e=r.f=q
+else{s=r.f
+s.toString
+q.c=s
+r.f=s.b=q}++r.a
+r.aS()
+return q},
+aT(a){var s=this,r=a.c,q=a.b
+if(r==null)s.e=q
+else r.b=q
+if(q==null)s.f=r
+else q.c=r;--s.a
+s.aS()},
+E(a){return J.B(a)&1073741823},
+C(a,b){var s,r
+if(a==null)return-1
+s=a.length
+for(r=0;r"))},
+G(a,b){return this.m(a,b)},
+i(a){return A.ey(a,"[","]")}}
+A.ba.prototype={
+H(a,b){var s,r,q,p
+for(s=this.ga_(),s=s.gq(s),r=A.u(this).y[1];s.j();){q=s.gk()
+p=this.m(0,q)
+b.$2(q,p==null?r.a(p):p)}},
+cb(a,b,c,d){var s,r,q,p,o,n=A.E(c,d)
+for(s=this.ga_(),s=s.gq(s),r=A.u(this).y[1];s.j();){q=s.gk()
+p=this.m(0,q)
+o=b.$2(q,p==null?r.a(p):p)
+n.p(0,o.a,o.b)}return n},
+ck(a,b){var s,r,q,p,o=this,n=A.u(o),m=A.b([],n.h("p<1>"))
+for(s=o.ga_(),s=s.gq(s),n=n.y[1];s.j();){r=s.gk()
+q=o.m(0,r)
+if(b.$2(r,q==null?n.a(q):q))m.push(r)}for(n=m.length,p=0;pr)s=": Not in inclusive range "+A.o(r)+".."+A.o(q)
+else s=q0)for(s=new A.aL(A.dg(m.childNodes).a());s.j();){r=s.b
+o=c.b
+if(o===c)A.M(A.Q(""))
+o.append(r)}d.b=A.da(t.N)}else{c.b=s
+d.b=A.da(t.N)
+n=0
+while(!0){s=c.b
+if(s===c)A.M(A.Q(""))
+if(!(n")
+r=A.fn(new A.W(a2,r),new A.cX(),r.h("l.E"),t.N).c9(0,"; ")}A.cR(s,"style",r)
+s=a3==null
+if(!s&&a3.a!==0)for(r=new A.W(a3,A.u(a3).h("W<1,2>")).gq(0);r.j();){l=r.d
+o=l.a
+k=o==="value"
+j=!1
+if(k){i=c.b
+if(i===c)A.M(A.Q(""))
+if(i==null?!1:i instanceof $.fb())j=!J.q(i.value,l.b)}if(j){o=c.b
+if(o===c)A.M(A.Q(""))
+o.value=l.b
+continue}j=!1
+if(k){k=c.b
+if(k===c)A.M(A.Q(""))
+if(k==null?!1:k instanceof $.fc())k=!J.q(k.value,l.b)
+else k=j}else k=j
+if(k){o=c.b
+if(o===c)A.M(A.Q(""))
+o.value=l.b
+continue}k=c.b
+if(k===c)A.M(A.Q(""))
+A.cR(k,o,l.b)}r=d.J()
+o=["id","class","style"]
+s=s?e:new A.X(a3,A.u(a3).h("X<1>"))
+if(s!=null)B.b.D(o,s)
+r.cj(o)
+if(d.J().a!==0)for(s=d.J(),s=A.ih(s,s.r,A.u(s).c),r=s.$ti.c;s.j();){o=s.d
+if(o==null)o=r.a(o)
+k=c.b
+if(k===c)A.M(A.Q(""))
+k.removeAttribute(o)}if(a4!=null&&a4.a!==0){s=f.c
+if(s==null)h=e
+else{r=A.u(s).h("X<1>")
+h=A.hV(r.h("l.E"))
+h.D(0,new A.X(s,r))}g=f.c
+if(g==null)g=f.c=A.E(t.N,t.M)
+a4.H(0,new A.cY(h,g,c))
+if(h!=null)h.H(0,new A.cZ(g))}else f.bY()},
+bk(a){var s,r,q,p,o,n,m=this
+$label0$0:{s=m.a
+if(s==null){r=m.d.b
+s=r.length
+if(s!==0)for(q=0;q0?n[r-1].as:l))break;--r}}}}finally{for(n=j.a,l=n.length,k=0;k")),s=s.c;p.j();){r=p.d;(r==null?s.a(r):r).cD(q)}q.y=null
+q.w=B.al},
+aG(){var s=this
+s.gn()
+s.z=s.e=s.ay=null
+s.w=B.am},
+aw(){var s=this.a
+this.y=s==null?null:s.y},
+bP(){var s=this.a
+this.x=s==null?null:s.x},
+bS(){var s=this.a
+this.b=s==null?null:s.b},
+cc(){var s=this
+if(s.w!==B.d)return
+if(s.as)return
+s.as=!0
+s.r.bm(s)},
+a1(){var s=this
+if(s.w!==B.d||!s.as)return
+s.r.toString
+s.U()
+new A.d1(s).$0()
+s.aa()},
+aa(){},
+Y(){this.K(new A.d0())},
+aH(a){var s,r=this,q=null
+r.cx=a
+s=a==null?q:a.gN()
+if(s==null){s=r.cx
+if(s==null)s=q
+else{s=s.ch
+s=s==null?q:s.gN()}}r.cy=s
+s=r.a
+if(J.q(s==null?q:s.cx,r)){s=r.a
+s=s==null?q:s.gN()
+s=!J.q(s,r.gN())}else s=!1
+if(s)r.a.aH(r)},
+bj(a){this.ch=a
+this.b7(!1)
+this.db=!1},
+a5(){},
+b7(a){var s,r=this,q=r.ch
+if(q==null){s=r.a
+if(t.X.b(s))q=null
+else{s=s==null?null:s.CW
+q=s}}if(a||!J.q(q,r.CW)){r.CW=q
+r.a5()
+if(!t.X.b(r))r.K(new A.d_())}},
+gN(){return this.cy}}
+A.d2.prototype={
+$1(a){return a!=null&&this.a.aB(0,a)?null:a},
+$S:23}
+A.d1.prototype={
+$0(){var s,r,q=this.a,p=q.z
+if(p!=null&&p.a!==0)for(s=A.u(p),p=new A.a8(p,p.ap(),s.h("a8<1>")),s=s.c;p.j();){r=p.d;(r==null?s.a(r):r).cE(q)}},
+$S:0}
+A.d0.prototype={
+$1(a){a.Y()},
+$S:3}
+A.d_.prototype={
+$1(a){return a.b7(!0)},
+$S:3}
+A.cF.prototype={
+b6(a){a.K(new A.dY(this))
+a.aG()},
+bO(){var s,r,q=this.a,p=A.db(q,A.u(q).c)
+B.b.ag(p,A.f1())
+q.F(0)
+for(q=A.aq(p).h("bi<1>"),s=new A.bi(p,q),s=new A.a5(s,s.gl(0),q.h("a5")),q=q.h("Y.E");s.j();){r=s.d
+this.b6(r==null?q.a(r):r)}}}
+A.dY.prototype={
+$1(a){this.a.b6(a)},
+$S:3}
+A.c1.prototype={}
+A.dc.prototype={}
+A.cu.prototype={
+L(a,b){if(b==null)return!1
+return J.ff(b)===A.G(this)&&this.$ti.b(b)&&b.a===this.a},
+gu(a){return A.hZ([A.G(this),this.a])},
+i(a){var s=this.$ti,r=s.c,q=this.a,p=A.L(r)===B.ae?"<'"+q+"'>":"<"+q+">"
+if(A.G(this)===A.L(s))return"["+p+"]"
+return"["+A.L(r).i(0)+" "+p+"]"}}
+A.a6.prototype={
+S(){return A.i0(this)}}
+A.aD.prototype={
+a0(a,b){this.a3(a,b)},
+v(){this.a1()
+this.ai()},
+V(a){return!0},
+U(){var s,r,q,p,o=this
+o.as=!1
+s=t.E.a(o.gn())
+r=s.c
+if(r==null){q=A.b([],t.i)
+p=s.b
+if(p!=null)q.push(p)
+r=q}q=o.dx
+if(q==null)q=A.b([],t.k)
+p=o.dy
+o.dx=o.bi(q,r,p)
+p.F(0)},
+K(a){var s,r,q=this.dx
+q=J.ad(q==null?[]:q)
+s=this.dy
+for(;q.j();){r=q.gk()
+if(!s.aB(0,r))a.$1(r)}}}
+A.b7.prototype={
+a0(a,b){this.a3(a,b)},
+v(){this.a1()
+this.ai()},
+V(a){return!1},
+U(){this.as=!1},
+K(a){}}
+A.di.prototype={}
+A.bg.prototype={
+v(){var s,r,q=this
+if(q.d$==null){s=q.ay.d$
+s.toString
+r=new A.ag(A.b([],t.O))
+r.d=s
+q.d$=r
+q.aI()}q.bv()},
+a2(a){if(this.aJ(a))this.e$=!0
+this.ak(a)},
+Z(a){var s=this
+if(s.e$){s.e$=!1
+s.aI()}s.aj(a)},
+a5(){this.aM()
+this.aa()}}
+A.b8.prototype={
+v(){var s,r,q=this
+if(q.d$==null){s=q.ay.d$
+s.toString
+r=new A.ag(A.b([],t.O))
+r.d=s
+q.d$=r
+s=q.e
+s.toString
+r.bk(t.x.a(s).b)}q.bt()},
+a2(a){var s=this.e
+s.toString
+if(t.x.a(s).b!==a.b)this.e$=!0
+this.ak(a)},
+Z(a){var s,r,q=this
+if(q.e$){q.e$=!1
+s=q.d$
+s.toString
+r=q.e
+r.toString
+s.bk(t.x.a(r).b)}q.aj(a)},
+a5(){this.aM()
+this.aa()}}
+A.S.prototype={
+aJ(a){return!0},
+aa(){var s,r,q,p,o=this.ay
+if(o==null)s=null
+else{o=o.d$
+o.toString
+s=o}if(s!=null){r=this.CW
+while(!0){o=r==null
+if(!(!o&&r.gN()==null))break
+r=r.CW}q=o?null:r.gN()
+o=this.d$
+o.toString
+if(q==null)p=null
+else{p=q.d$
+p.toString}s.az(o,p)}},
+Y(){var s,r,q=this.ay
+if(q==null)s=null
+else{q=q.d$
+q.toString
+s=q}if(s!=null){q=this.d$
+r=q.a
+if(r!=null)r.parentNode.removeChild(r)
+q.d=null}},
+gN(){return this}}
+A.ck.prototype={
+S(){var s=new A.cr(A.E(t.S,t._),B.l),r=A.ax(t.h),q=($.I+1)%16777215
+$.I=q
+return s.c=new A.cl(s,r,q,this,B.c)}}
+A.ci.prototype={
+O(a){a.$0()
+this.c.cc()}}
+A.cl.prototype={
+b9(){return this.y1.ab(this)},
+v(){var s=this
+if(s.r.c)s.y1.toString
+s.bF()
+s.aK()},
+bF(){try{this.y1.toString}finally{}this.y1.toString},
+U(){var s=this
+s.r.toString
+if(s.bd){s.y1.toString
+s.bd=!1}s.aL()},
+V(a){this.y1.toString
+return!0},
+a2(a){this.ak(a)
+this.y1.toString},
+Z(a){try{this.y1.toString}finally{}this.aj(a)},
+T(){this.y1.toString
+this.br()},
+aG(){this.bs()
+this.y1=this.y1.c=null}}
+A.al.prototype={
+S(){var s=A.ax(t.h),r=($.I+1)%16777215
+$.I=r
+return new A.cm(s,r,this,B.c)}}
+A.cm.prototype={
+gn(){return t.q.a(A.d.prototype.gn.call(this))},
+v(){if(this.r.c)this.f.toString
+this.aK()},
+V(a){t.q.a(A.d.prototype.gn.call(this))
+return!0},
+b9(){return t.q.a(A.d.prototype.gn.call(this)).ab(this)},
+U(){this.r.toString
+this.aL()}}
+A.bL.prototype={
+ab(a){var s,r=null,q=t.i,p=A.f7(A.b([new A.A("Double-click to edit a todo",r)],q)),o=A.f7(A.b([new A.A("Created by the Dart team",r)],q)),n=A.b([new A.A("TodoMVC",r)],q),m=t.N,l=A.E(m,m)
+l.p(0,"href","http://todomvc.com")
+m=A.E(m,t.v)
+s=t.z
+m.D(0,A.f0().$2$1$onClick(r,s,s))
+return A.b([new A.cq(r),A.h2(A.b([p,o,A.f7(A.b([new A.A("Part of ",r),new A.w("a",r,r,r,l,m,r,n,r)],q))],q),"info",r)],q)}}
+A.cq.prototype={}
+A.aZ.prototype={
+a6(){return"DisplayState."+this.b}}
+A.cr.prototype={
+bR(a){this.O(new A.dr(this,a))},
+cv(a){this.O(new A.dB(this,a))},
+cw(){this.O(new A.dA(this))},
+c1(a){this.O(new A.dy(this,a))},
+bX(){this.O(new A.dx(this))},
+bn(a){this.O(new A.dz(this,a))},
+ab(a7){var s,r,q,p,o,n,m,l,k,j,i,h,g,f,e=this,d=null,c="none;",b="block;",a="toggle-all",a0=t.N,a1=A.R(["data-testid","header"],a0,a0),a2=t.i,a3=A.b([new A.w("h1",d,d,d,d,d,d,A.b([new A.A("todos",d)],a2),d),A.f_(A.b([new A.cc(e.gbQ(),d)],a2),"input-container")],a2),a4=e.d,a5=A.R(["display",a4.a===0?c:b],a0,a0),a6=e.f>0?d:A.R(["checked",""],a0,a0)
+a6=A.f4(A.b([],a2),a6,a,a,d,new A.ds(e),B.f,d)
+s=A.R(["for","toggle-all"],a0,a0)
+s=A.f_(A.b([a6,A.h5(A.b([new A.A("Mark all as complete",d)],a2),s,"toggle-all-label")],a2),"toggle-all-container")
+a6=A.b([],a2)
+for(r=A.hX(a4,t.S,t._),q=r.a,p=A.u(r),r=new A.aA(q.gq(q),r.b,p.h("aA<1,2>")),p=p.y[1],q=t.Y;r.j();){o={}
+n=r.a
+if(n==null)n=p.a(n)
+o.a=null
+m=n.a
+o.a=m
+l=n.b
+k=l.a
+if(!(k&&e.r!==B.n))n=!k&&e.r!==B.m
+else n=!0
+if(n){n=k?"":"completed"
+j=""+m
+i=A.R(["data-id",j],a0,a0)
+h=k?d:A.R(["checked",""],a0,a0)
+a6.push(A.h6(A.b([A.f_(A.b([A.f4(A.b([],a2),h,"toggle",d,new A.cu(j+"-"+k,q),new A.dt(o,e),B.f,d),A.h5(A.b([new A.A(l.b,d)],a2),d,d),A.h1(A.b([],a2),"destroy",new A.du(o,e),d)],a2),"view")],a2),i,n))}}a6=A.b([s,A.hc(a6,"todo-list")],a2)
+s=A.R(["display",a4.a===0?c:b],a0,a0)
+r=A.b([new A.A(""+e.f,d)],a2)
+q=e.f===1?"":"s"
+q=A.hb(A.b([new A.w("strong",d,d,d,d,d,d,r,d),new A.A(" item"+q+" left",d)],a2),"todo-count",d)
+r=A.b([],a2)
+for(p=[B.a1,B.a0,B.a2],o=t.v,g=0;g<3;++g){n={}
+j=p[g]
+n.a=null
+f=j.b
+n.a=f
+i=e.r===f?"selected":""
+n=A.R(["click",new A.dv(n,e)],a0,o)
+r.push(A.h6(A.b([A.hb(A.b([new A.A(j.a,d)],a2),i,n)],a2),d,d))}r=A.hc(r,"filters")
+a0=A.R(["display",a4.a-e.f===0?c:b],a0,a0)
+return A.b([new A.w("section","root","todoapp",d,d,d,d,A.b([new A.w("header",d,"header",d,a1,d,d,a3,d),new A.w("main",d,"main",new A.bw(a5),d,d,d,a6,d),A.h2(A.b([q,r,A.h1(A.b([new A.A("Clear completed",d)],a2),"clear-completed",e.gbW(),new A.bw(a0))],a2),"footer",new A.bw(s))],a2),d)],a2)}}
+A.dr.prototype={
+$0(){var s=this.a
+s.d.p(0,++s.e,new A.aK(!0,this.b));++s.f},
+$S:0}
+A.dB.prototype={
+$0(){var s=this.a,r=s.d,q=this.b,p=r.m(0,q),o=p.a
+r.p(0,q,new A.aK(!o,p.b))
+r=s.f
+if(o)s.f=r-1
+else s.f=r+1},
+$S:0}
+A.dA.prototype={
+$0(){var s,r,q,p,o
+for(s=this.a,r=s.d,q=new A.b9(r,r.r,r.e);q.j();){p=q.d
+o=r.m(0,p).b
+r.p(0,p,new A.aK(s.f===0,o))}s.f=s.f===0?r.a:0},
+$S:0}
+A.dy.prototype={
+$0(){var s=this.a
+if(s.d.A(0,this.b).a)--s.f},
+$S:0}
+A.dx.prototype={
+$0(){this.a.d.ck(0,new A.dw())},
+$S:0}
+A.dw.prototype={
+$2(a,b){return!b.a},
+$S:24}
+A.dz.prototype={
+$0(){this.a.r=this.b},
+$S:0}
+A.ds.prototype={
+$1(a){return this.a.cw()},
+$S:2}
+A.dt.prototype={
+$1(a){return this.b.cv(this.a.a)},
+$S:2}
+A.du.prototype={
+$0(){return this.b.c1(this.a.a)},
+$S:0}
+A.dv.prototype={
+$1(a){return this.b.bn(this.a.a)},
+$S:1}
+A.cc.prototype={
+ab(a){var s,r=t.N
+r=A.R(["placeholder","What needs to be done?"],r,r)
+s=t.i
+return A.b([A.f4(A.b([],s),r,"new-todo",null,null,new A.df(this),null,"")],s)}}
+A.df.prototype={
+$1(a){return this.a.c.$1(A.fO(a))},
+$S:2}
+A.de.prototype={
+$1(a){return new A.ao(a.a,a.b)},
+$S(){return this.a.h("@<0>").B(this.b).h("+(1,2)(F<1,2>)")}}
+A.ew.prototype={}
+A.cC.prototype={
+bV(){var s,r,q=this,p=new A.x($.t,t.D)
+p.aO(null)
+s=q.b
+if(s==null)return p
+r=q.d
+if(r!=null)s.removeEventListener(q.c,r,!1)
+q.d=q.b=null
+return p}}
+A.dM.prototype={
+$1(a){return this.a.$1(a)},
+$S:1};(function aliases(){var s=J.a4.prototype
+s.bu=s.i
+s=A.ag.prototype
+s.bp=s.az
+s=A.aX.prototype
+s.aK=s.v
+s.aL=s.U
+s=A.bS.prototype
+s.bo=s.aA
+s=A.d.prototype
+s.a3=s.a0
+s.ai=s.v
+s.ak=s.a2
+s.aj=s.Z
+s.br=s.T
+s.bs=s.aG
+s.bq=s.aw
+s.aM=s.a5
+s=A.aD.prototype
+s.bv=s.v
+s=A.b7.prototype
+s.bt=s.v})();(function installTearOffs(){var s=hunkHelpers._static_2,r=hunkHelpers._static_1,q=hunkHelpers._static_0,p=hunkHelpers.installStaticTearOff,o=hunkHelpers._instance_0u,n=hunkHelpers._instance_1u
+s(J,"j0","hT",25)
+r(A,"jq","ib",4)
+r(A,"jr","ic",4)
+r(A,"js","id",4)
+q(A,"h0","jk",0)
+p(A,"f0",0,null,["$2$3$onChange$onClick$onInput","$0","$2$0","$2$1$onClick","$2$2$onChange$onInput"],["cN",function(){var l=t.z
+return A.cN(null,null,null,l,l)},function(a,b){return A.cN(null,null,null,a,b)},function(a,b,c){return A.cN(null,a,null,b,c)},function(a,b,c,d){return A.cN(a,null,b,c,d)}],26,0)
+o(A.ch.prototype,"gbZ","c_",0)
+s(A,"f1","hD",27)
+r(A,"em","ig",3)
+o(A.bQ.prototype,"gce","cf",0)
+o(A.cF.prototype,"gbN","bO",0)
+var m
+n(m=A.cr.prototype,"gbQ","bR",7)
+o(m,"gbW","bX",0)})();(function inheritance(){var s=hunkHelpers.mixin,r=hunkHelpers.mixinHard,q=hunkHelpers.inherit,p=hunkHelpers.inheritMany
+q(A.h,null)
+p(A.h,[A.ez,J.bX,A.bj,J.bN,A.l,A.bR,A.r,A.dl,A.a5,A.aA,A.cv,A.b1,A.bx,A.bU,A.dC,A.dh,A.b0,A.bA,A.af,A.ba,A.d9,A.b9,A.c2,A.dJ,A.O,A.cD,A.cL,A.e6,A.cx,A.aL,A.P,A.aH,A.x,A.cy,A.cI,A.ea,A.cE,A.ak,A.a8,A.e_,A.aJ,A.m,A.dL,A.bl,A.dN,A.F,A.D,A.cJ,A.cn,A.cw,A.di,A.av,A.ch,A.cA,A.dE,A.bC,A.cK,A.co,A.bQ,A.d,A.bS,A.C,A.cF,A.c1,A.S,A.ci,A.ew,A.cC])
+p(J.bX,[J.bZ,J.b3,J.b5,J.b4,J.b6,J.ay,J.az])
+p(J.b5,[J.a4,J.p,A.aB,A.bd])
+p(J.a4,[J.cd,J.aE,J.a3])
+q(J.bY,A.bj)
+q(J.d7,J.p)
+p(J.ay,[J.b2,J.c_])
+p(A.l,[A.aF,A.c,A.aj,A.bn,A.ap])
+q(A.bH,A.aF)
+q(A.bo,A.bH)
+q(A.ae,A.bo)
+p(A.r,[A.ai,A.a_,A.c0,A.ct,A.cg,A.cB,A.bO,A.U,A.bm,A.cs,A.cj,A.bT])
+p(A.c,[A.Y,A.X,A.W,A.bq])
+q(A.b_,A.aj)
+q(A.bi,A.Y)
+q(A.cG,A.bx)
+p(A.cG,[A.ao,A.aK])
+q(A.aY,A.bU)
+q(A.bf,A.a_)
+p(A.af,[A.cU,A.cV,A.dq,A.eo,A.eq,A.dG,A.dF,A.eb,A.dW,A.e4,A.cX,A.cZ,A.d4,A.el,A.ef,A.ed,A.d2,A.d0,A.d_,A.dY,A.ds,A.dt,A.dv,A.df,A.de,A.dM])
+p(A.dq,[A.dm,A.aW])
+p(A.ba,[A.ah,A.bp])
+p(A.cV,[A.d8,A.ep,A.ec,A.ej,A.dX,A.d5,A.dd,A.cW,A.cY,A.eg,A.dw])
+p(A.bd,[A.c3,A.aC])
+p(A.aC,[A.bs,A.bu])
+q(A.bt,A.bs)
+q(A.bb,A.bt)
+q(A.bv,A.bu)
+q(A.bc,A.bv)
+p(A.bb,[A.c4,A.c5])
+p(A.bc,[A.c6,A.c7,A.c8,A.c9,A.ca,A.be,A.cb])
+q(A.bB,A.cB)
+p(A.cU,[A.dH,A.dI,A.e7,A.dO,A.dS,A.dR,A.dQ,A.dP,A.dV,A.dU,A.dT,A.ei,A.e3,A.ee,A.dk,A.cT,A.d1,A.dr,A.dB,A.dA,A.dy,A.dx,A.dz,A.du])
+q(A.e2,A.ea)
+q(A.bz,A.ak)
+p(A.bz,[A.br,A.am])
+p(A.U,[A.bh,A.bW])
+q(A.cQ,A.cw)
+q(A.cz,A.cQ)
+q(A.cS,A.cz)
+q(A.ag,A.di)
+q(A.dj,A.ag)
+p(A.dL,[A.n,A.bk,A.aG,A.aZ])
+p(A.bC,[A.dK,A.e1])
+q(A.dn,A.cK)
+p(A.dn,[A.e5,A.bw])
+p(A.d,[A.aX,A.aD,A.b7])
+p(A.C,[A.a6,A.A,A.ck,A.al])
+p(A.a6,[A.cH,A.w])
+q(A.bg,A.aD)
+p(A.bg,[A.by,A.bV])
+q(A.b8,A.b7)
+q(A.cp,A.b8)
+q(A.dc,A.c1)
+q(A.cu,A.dc)
+p(A.aX,[A.cl,A.cm])
+p(A.al,[A.bL,A.cc])
+q(A.cq,A.ck)
+q(A.cr,A.ci)
+s(A.bH,A.m)
+s(A.bs,A.m)
+s(A.bt,A.b1)
+s(A.bu,A.m)
+s(A.bv,A.b1)
+s(A.cz,A.bS)
+s(A.cw,A.ch)
+s(A.cK,A.co)
+r(A.bg,A.S)
+r(A.b8,A.S)})()
+var v={G:typeof self!="undefined"?self:globalThis,typeUniverse:{eC:new Map(),tR:{},eT:{},tPV:{},sEA:[]},mangledGlobalNames:{a:"int",v:"double",h7:"num",e:"String",T:"bool",D:"Null",j:"List",h:"Object",fm:"Map",i:"JSObject"},mangledNames:{},types:["~()","~(i)","~(@)","~(d)","~(~())","D(@)","D()","~(e)","@(@)","@(@,e)","@(e)","D(~())","D(@,a7)","~(a,@)","D(h,a7)","~(@,@)","~(h?,h?)","~(e,av)","e(F)","~(e,~(i))","h?()","T(n)","F(e,e)","d?(d?)","T(a,+isActive,todo(T,e))","a(@,@)","fm({onChange:~(1^)?,onClick:~()?,onInput:~(0^)?})","a(d,d)"],interceptorsByTag:null,leafTags:null,arrayRti:Symbol("$ti"),rttc:{"2;":(a,b)=>c=>c instanceof A.ao&&a.b(c.a)&&b.b(c.b),"2;isActive,todo":(a,b)=>c=>c instanceof A.aK&&a.b(c.a)&&b.b(c.b)}}
+A.ix(v.typeUniverse,JSON.parse('{"cd":"a4","aE":"a4","a3":"a4","jR":"aB","bZ":{"T":[],"k":[]},"b3":{"k":[]},"b5":{"i":[]},"a4":{"i":[]},"p":{"j":["1"],"c":["1"],"i":[]},"bY":{"bj":[]},"d7":{"p":["1"],"j":["1"],"c":["1"],"i":[]},"ay":{"v":[]},"b2":{"v":[],"a":[],"k":[]},"c_":{"v":[],"k":[]},"az":{"e":[],"k":[]},"aF":{"l":["2"]},"bo":{"m":["2"],"j":["2"],"aF":["1","2"],"c":["2"],"l":["2"]},"ae":{"bo":["1","2"],"m":["2"],"j":["2"],"aF":["1","2"],"c":["2"],"l":["2"],"m.E":"2","l.E":"2"},"ai":{"r":[]},"c":{"l":["1"]},"Y":{"c":["1"],"l":["1"]},"aj":{"l":["2"],"l.E":"2"},"b_":{"aj":["1","2"],"c":["2"],"l":["2"],"l.E":"2"},"bn":{"l":["1"],"l.E":"1"},"bi":{"Y":["1"],"c":["1"],"l":["1"],"l.E":"1","Y.E":"1"},"aY":{"bU":["1","2"]},"bf":{"a_":[],"r":[]},"c0":{"r":[]},"ct":{"r":[]},"bA":{"a7":[]},"cg":{"r":[]},"ah":{"ba":["1","2"]},"X":{"c":["1"],"l":["1"],"l.E":"1"},"W":{"c":["F<1,2>"],"l":["F<1,2>"],"l.E":"F<1,2>"},"aB":{"i":[],"k":[]},"bd":{"i":[]},"c3":{"i":[],"k":[]},"aC":{"J":["1"],"i":[]},"bb":{"m":["v"],"j":["v"],"J":["v"],"c":["v"],"i":[]},"bc":{"m":["a"],"j":["a"],"J":["a"],"c":["a"],"i":[]},"c4":{"m":["v"],"j":["v"],"J":["v"],"c":["v"],"i":[],"k":[],"m.E":"v"},"c5":{"m":["v"],"j":["v"],"J":["v"],"c":["v"],"i":[],"k":[],"m.E":"v"},"c6":{"m":["a"],"j":["a"],"J":["a"],"c":["a"],"i":[],"k":[],"m.E":"a"},"c7":{"m":["a"],"j":["a"],"J":["a"],"c":["a"],"i":[],"k":[],"m.E":"a"},"c8":{"m":["a"],"j":["a"],"J":["a"],"c":["a"],"i":[],"k":[],"m.E":"a"},"c9":{"m":["a"],"j":["a"],"J":["a"],"c":["a"],"i":[],"k":[],"m.E":"a"},"ca":{"m":["a"],"j":["a"],"J":["a"],"c":["a"],"i":[],"k":[],"m.E":"a"},"be":{"m":["a"],"j":["a"],"J":["a"],"c":["a"],"i":[],"k":[],"m.E":"a"},"cb":{"m":["a"],"j":["a"],"J":["a"],"c":["a"],"i":[],"k":[],"m.E":"a"},"cL":{"fv":[]},"cB":{"r":[]},"bB":{"a_":[],"r":[]},"ap":{"l":["1"],"l.E":"1"},"P":{"r":[]},"x":{"aw":["1"]},"bp":{"ba":["1","2"]},"bq":{"c":["1"],"l":["1"],"l.E":"1"},"br":{"ak":["1"],"c":["1"]},"am":{"ak":["1"],"c":["1"]},"ak":{"c":["1"]},"bz":{"ak":["1"],"c":["1"]},"j":{"c":["1"]},"bO":{"r":[]},"a_":{"r":[]},"U":{"r":[]},"bh":{"r":[]},"bW":{"r":[]},"bm":{"r":[]},"cs":{"r":[]},"cj":{"r":[]},"bT":{"r":[]},"bl":{"r":[]},"cJ":{"a7":[]},"iA":{"w":[],"a6":[],"C":[]},"hL":{"d":[]},"aX":{"d":[]},"cH":{"a6":[],"C":[]},"by":{"S":[],"d":[]},"w":{"a6":[],"C":[]},"bV":{"S":[],"d":[]},"A":{"C":[]},"cp":{"S":[],"d":[]},"a6":{"C":[]},"aD":{"d":[]},"b7":{"d":[]},"bg":{"S":[],"d":[]},"b8":{"S":[],"d":[]},"ck":{"C":[]},"cl":{"d":[]},"al":{"C":[]},"cm":{"d":[]},"bL":{"al":[],"C":[]},"cq":{"C":[]},"cc":{"al":[],"C":[]},"hO":{"j":["a"],"c":["a"]},"i9":{"j":["a"],"c":["a"]},"i8":{"j":["a"],"c":["a"]},"hM":{"j":["a"],"c":["a"]},"i6":{"j":["a"],"c":["a"]},"hN":{"j":["a"],"c":["a"]},"i7":{"j":["a"],"c":["a"]},"hH":{"j":["v"],"c":["v"]},"hI":{"j":["v"],"c":["v"]}}'))
+A.iw(v.typeUniverse,JSON.parse('{"cv":1,"b1":1,"bH":2,"b9":1,"aC":1,"aL":1,"cI":1,"bz":1,"co":1,"ci":1,"cC":1}'))
+var u={c:"Error handler must accept one Object or one Object and a StackTrace as arguments, and return a value of the returned future's type"}
+var t=(function rtii(){var s=A.cO
+return{e:s("C"),J:s("w"),U:s("c<@>"),h:s("d"),Q:s("r"),M:s("av"),Z:s("jQ"),r:s("hL"),i:s("p"),k:s("p"),O:s("p"),f:s("p"),s:s("p"),b:s("p<@>"),u:s("p<~()>"),T:s("b3"),m:s("i"),g:s("a3"),p:s("J<@>"),B:s("c1"),j:s("j<@>"),W:s("F"),P:s("D"),K:s("h"),E:s("a6"),L:s("jS"),t:s("+()"),_:s("+isActive,todo(T,e)"),X:s("S"),l:s("a7"),q:s("al"),N:s("e"),x:s("A"),A:s("k"),G:s("fv"),c:s("a_"),o:s("aE"),Y:s("cu"),a:s("bn"),aY:s("x<@>"),D:s("x<~>"),F:s("ap"),y:s("T"),V:s("v"),z:s("@"),w:s("@(h)"),C:s("@(h,a7)"),S:s("a"),d:s("d?"),bc:s("aw?"),aQ:s("i?"),R:s("h?"),aD:s("e?"),cG:s("T?"),I:s("v?"),a3:s("a?"),ae:s("h7?"),n:s("h7"),H:s("~"),aI:s("~()"),v:s("~(i)")}})();(function constants(){var s=hunkHelpers.makeConstList
+B.V=J.bX.prototype
+B.b=J.p.prototype
+B.u=J.b2.prototype
+B.h=J.ay.prototype
+B.W=J.a3.prototype
+B.X=J.b5.prototype
+B.v=J.cd.prototype
+B.i=J.aE.prototype
+B.j=function getTagFallback(o) {
+ var s = Object.prototype.toString.call(o);
+ return s.substring(8, s.length - 1);
+}
+B.y=function() {
+ var toStringFunction = Object.prototype.toString;
+ function getTag(o) {
+ var s = toStringFunction.call(o);
+ return s.substring(8, s.length - 1);
+ }
+ function getUnknownTag(object, tag) {
+ if (/^HTML[A-Z].*Element$/.test(tag)) {
+ var name = toStringFunction.call(object);
+ if (name == "[object Object]") return null;
+ return "HTMLElement";
+ }
+ }
+ function getUnknownTagGenericBrowser(object, tag) {
+ if (object instanceof HTMLElement) return "HTMLElement";
+ return getUnknownTag(object, tag);
+ }
+ function prototypeForTag(tag) {
+ if (typeof window == "undefined") return null;
+ if (typeof window[tag] == "undefined") return null;
+ var constructor = window[tag];
+ if (typeof constructor != "function") return null;
+ return constructor.prototype;
+ }
+ function discriminator(tag) { return null; }
+ var isBrowser = typeof HTMLElement == "function";
+ return {
+ getTag: getTag,
+ getUnknownTag: isBrowser ? getUnknownTagGenericBrowser : getUnknownTag,
+ prototypeForTag: prototypeForTag,
+ discriminator: discriminator };
+}
+B.D=function(getTagFallback) {
+ return function(hooks) {
+ if (typeof navigator != "object") return hooks;
+ var userAgent = navigator.userAgent;
+ if (typeof userAgent != "string") return hooks;
+ if (userAgent.indexOf("DumpRenderTree") >= 0) return hooks;
+ if (userAgent.indexOf("Chrome") >= 0) {
+ function confirm(p) {
+ return typeof window == "object" && window[p] && window[p].name == p;
+ }
+ if (confirm("Window") && confirm("HTMLElement")) return hooks;
+ }
+ hooks.getTag = getTagFallback;
+ };
+}
+B.z=function(hooks) {
+ if (typeof dartExperimentalFixupGetTag != "function") return hooks;
+ hooks.getTag = dartExperimentalFixupGetTag(hooks.getTag);
+}
+B.C=function(hooks) {
+ if (typeof navigator != "object") return hooks;
+ var userAgent = navigator.userAgent;
+ if (typeof userAgent != "string") return hooks;
+ if (userAgent.indexOf("Firefox") == -1) return hooks;
+ var getTag = hooks.getTag;
+ var quickMap = {
+ "BeforeUnloadEvent": "Event",
+ "DataTransfer": "Clipboard",
+ "GeoGeolocation": "Geolocation",
+ "Location": "!Location",
+ "WorkerMessageEvent": "MessageEvent",
+ "XMLDocument": "!Document"};
+ function getTagFirefox(o) {
+ var tag = getTag(o);
+ return quickMap[tag] || tag;
+ }
+ hooks.getTag = getTagFirefox;
+}
+B.B=function(hooks) {
+ if (typeof navigator != "object") return hooks;
+ var userAgent = navigator.userAgent;
+ if (typeof userAgent != "string") return hooks;
+ if (userAgent.indexOf("Trident/") == -1) return hooks;
+ var getTag = hooks.getTag;
+ var quickMap = {
+ "BeforeUnloadEvent": "Event",
+ "DataTransfer": "Clipboard",
+ "HTMLDDElement": "HTMLElement",
+ "HTMLDTElement": "HTMLElement",
+ "HTMLPhraseElement": "HTMLElement",
+ "Position": "Geoposition"
+ };
+ function getTagIE(o) {
+ var tag = getTag(o);
+ var newTag = quickMap[tag];
+ if (newTag) return newTag;
+ if (tag == "Object") {
+ if (window.DataView && (o instanceof window.DataView)) return "DataView";
+ }
+ return tag;
+ }
+ function prototypeForTagIE(tag) {
+ var constructor = window[tag];
+ if (constructor == null) return null;
+ return constructor.prototype;
+ }
+ hooks.getTag = getTagIE;
+ hooks.prototypeForTag = prototypeForTagIE;
+}
+B.A=function(hooks) {
+ var getTag = hooks.getTag;
+ var prototypeForTag = hooks.prototypeForTag;
+ function getTagFixed(o) {
+ var tag = getTag(o);
+ if (tag == "Document") {
+ if (!!o.xmlVersion) return "!Document";
+ return "!HTMLDocument";
+ }
+ return tag;
+ }
+ function prototypeForTagFixed(tag) {
+ if (tag == "Document") return null;
+ return prototypeForTag(tag);
+ }
+ hooks.getTag = getTagFixed;
+ hooks.prototypeForTag = prototypeForTagFixed;
+}
+B.k=function(hooks) { return hooks; }
+
+B.e=new A.dl()
+B.a=new A.e2()
+B.E=new A.cJ()
+B.l=new A.aZ("all")
+B.m=new A.aZ("active")
+B.n=new A.aZ("completed")
+B.o=new A.n("datetime-local","dateTimeLocal")
+B.f=new A.n("checkbox","checkbox")
+B.p=new A.n("date","date")
+B.q=new A.n("file","file")
+B.r=new A.n("number","number")
+B.t=new A.n("radio","radio")
+B.F=new A.n("button","button")
+B.G=new A.n("color","color")
+B.H=new A.n("email","email")
+B.I=new A.n("hidden","hidden")
+B.J=new A.n("image","image")
+B.K=new A.n("month","month")
+B.L=new A.n("password","password")
+B.M=new A.n("range","range")
+B.N=new A.n("reset","reset")
+B.O=new A.n("search","search")
+B.P=new A.n("submit","submit")
+B.Q=new A.n("tel","tel")
+B.R=new A.n("text","text")
+B.S=new A.n("time","time")
+B.T=new A.n("url","url")
+B.U=new A.n("week","week")
+B.Y=s([B.F,B.f,B.G,B.p,B.o,B.H,B.q,B.I,B.J,B.K,B.r,B.L,B.t,B.M,B.N,B.O,B.P,B.Q,B.R,B.S,B.T,B.U],A.cO("p"))
+B.a_={svg:0,math:1}
+B.Z=new A.aY(B.a_,["http://www.w3.org/2000/svg","http://www.w3.org/1998/Math/MathML"],A.cO("aY"))
+B.a0=new A.ao("Active",B.m)
+B.a1=new A.ao("All",B.l)
+B.a2=new A.ao("Completed",B.n)
+B.w=new A.bk("idle")
+B.a3=new A.bk("midFrameCallback")
+B.a4=new A.bk("postFrameCallbacks")
+B.a5=A.H("jN")
+B.a6=A.H("jO")
+B.a7=A.H("hH")
+B.a8=A.H("hI")
+B.a9=A.H("hM")
+B.aa=A.H("hN")
+B.ab=A.H("hO")
+B.ac=A.H("i")
+B.ad=A.H("h")
+B.ae=A.H("e")
+B.af=A.H("i6")
+B.ag=A.H("i7")
+B.ah=A.H("i8")
+B.ai=A.H("i9")
+B.x=A.H("iA")
+B.aj=new A.cA("red")
+B.ak=new A.cA("yellow")
+B.c=new A.aG("initial")
+B.d=new A.aG("active")
+B.al=new A.aG("inactive")
+B.am=new A.aG("defunct")})();(function staticFields(){$.dZ=null
+$.au=A.b([],t.f)
+$.fq=null
+$.fj=null
+$.fi=null
+$.h3=null
+$.h_=null
+$.ha=null
+$.ek=null
+$.er=null
+$.f3=null
+$.e0=A.b([],A.cO("p?>"))
+$.aM=null
+$.bI=null
+$.bJ=null
+$.eS=!1
+$.t=B.a
+$.I=1})();(function lazyInitializers(){var s=hunkHelpers.lazyFinal
+s($,"jP","f9",()=>A.jy("_$dart_dartClosure"))
+s($,"kc","hr",()=>A.b([new J.bY()],A.cO("p")))
+s($,"jU","he",()=>A.a0(A.dD({
+toString:function(){return"$receiver$"}})))
+s($,"jV","hf",()=>A.a0(A.dD({$method$:null,
+toString:function(){return"$receiver$"}})))
+s($,"jW","hg",()=>A.a0(A.dD(null)))
+s($,"jX","hh",()=>A.a0(function(){var $argumentsExpr$="$arguments$"
+try{null.$method$($argumentsExpr$)}catch(r){return r.message}}()))
+s($,"k_","hk",()=>A.a0(A.dD(void 0)))
+s($,"k0","hl",()=>A.a0(function(){var $argumentsExpr$="$arguments$"
+try{(void 0).$method$($argumentsExpr$)}catch(r){return r.message}}()))
+s($,"jZ","hj",()=>A.a0(A.fw(null)))
+s($,"jY","hi",()=>A.a0(function(){try{null.$method$}catch(r){return r.message}}()))
+s($,"k2","hn",()=>A.a0(A.fw(void 0)))
+s($,"k1","hm",()=>A.a0(function(){try{(void 0).$method$}catch(r){return r.message}}()))
+s($,"k3","fa",()=>A.ia())
+s($,"kb","cP",()=>A.h8(B.ad))
+s($,"k4","et",()=>A.aQ(A.aT(),"Element"))
+s($,"k6","fb",()=>A.aQ(A.aT(),"HTMLInputElement"))
+s($,"k5","ho",()=>A.aQ(A.aT(),"HTMLAnchorElement"))
+s($,"k8","fc",()=>A.aQ(A.aT(),"HTMLSelectElement"))
+s($,"k9","hq",()=>A.aQ(A.aT(),"HTMLTextAreaElement"))
+s($,"k7","hp",()=>A.aQ(A.aT(),"HTMLOptionElement"))
+s($,"ka","fd",()=>A.aQ(A.aT(),"Text"))})();(function nativeSupport(){!function(){var s=function(a){var m={}
+m[a]=1
+return Object.keys(hunkHelpers.convertToFastObject(m))[0]}
+v.getIsolateTag=function(a){return s("___dart_"+a+v.isolateTag)}
+var r="___dart_isolate_tags_"
+var q=Object[r]||(Object[r]=Object.create(null))
+var p="_ZxYxX"
+for(var o=0;;o++){var n=s(p+"_"+o+"_")
+if(!(n in q)){q[n]=1
+v.isolateTag=n
+break}}v.dispatchPropertyName=v.getIsolateTag("dispatch_record")}()
+hunkHelpers.setOrUpdateInterceptorsByTag({ArrayBuffer:A.aB,SharedArrayBuffer:A.aB,ArrayBufferView:A.bd,DataView:A.c3,Float32Array:A.c4,Float64Array:A.c5,Int16Array:A.c6,Int32Array:A.c7,Int8Array:A.c8,Uint16Array:A.c9,Uint32Array:A.ca,Uint8ClampedArray:A.be,CanvasPixelArray:A.be,Uint8Array:A.cb})
+hunkHelpers.setOrUpdateLeafTags({ArrayBuffer:true,SharedArrayBuffer:true,ArrayBufferView:false,DataView:true,Float32Array:true,Float64Array:true,Int16Array:true,Int32Array:true,Int8Array:true,Uint16Array:true,Uint32Array:true,Uint8ClampedArray:true,CanvasPixelArray:true,Uint8Array:false})
+A.aC.$nativeSuperclassTag="ArrayBufferView"
+A.bs.$nativeSuperclassTag="ArrayBufferView"
+A.bt.$nativeSuperclassTag="ArrayBufferView"
+A.bb.$nativeSuperclassTag="ArrayBufferView"
+A.bu.$nativeSuperclassTag="ArrayBufferView"
+A.bv.$nativeSuperclassTag="ArrayBufferView"
+A.bc.$nativeSuperclassTag="ArrayBufferView"})()
+Function.prototype.$0=function(){return this()}
+Function.prototype.$1=function(a){return this(a)}
+Function.prototype.$2=function(a,b){return this(a,b)}
+Function.prototype.$3=function(a,b,c){return this(a,b,c)}
+Function.prototype.$4=function(a,b,c,d){return this(a,b,c,d)}
+Function.prototype.$1$0=function(){return this()}
+convertAllToFastObject(w)
+convertToFastObject($);(function(a){if(typeof document==="undefined"){a(null)
+return}if(typeof document.currentScript!="undefined"){a(document.currentScript)
+return}var s=document.scripts
+function onLoad(b){for(var q=0;q .learn {
+ position: absolute;
+ width: 272px;
+ top: 8px;
+ left: -300px;
+ padding: 10px;
+ border-radius: 5px;
+ background-color: rgba(255, 255, 255, 0.6);
+ transition-property: left;
+ transition-duration: 500ms;
+}
+
+@media (min-width: 899px) {
+ .learn-bar {
+ width: auto;
+ padding-left: 300px;
+ }
+
+ .learn-bar > .learn {
+ left: 8px;
+ }
+}
diff --git a/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/favicon.ico b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/favicon.ico
new file mode 100644
index 000000000..bd829b4fc
Binary files /dev/null and b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/favicon.ico differ
diff --git a/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/index.css b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/index.css
new file mode 100644
index 000000000..fb6fb83ef
--- /dev/null
+++ b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/index.css
@@ -0,0 +1,388 @@
+@charset "utf-8";
+
+html,
+body {
+ margin: 0;
+ padding: 0;
+}
+
+button {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ background: none;
+ font-size: 100%;
+ vertical-align: baseline;
+ font-family: inherit;
+ font-weight: inherit;
+ color: inherit;
+ -webkit-appearance: none;
+ appearance: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+body {
+ font: 14px "Helvetica Neue", Helvetica, Arial, sans-serif;
+ line-height: 1.4em;
+ background: #f5f5f5;
+ color: #111111;
+ min-width: 230px;
+ max-width: 550px;
+ margin: 0 auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ font-weight: 300;
+}
+
+.hidden {
+ display: none;
+}
+
+.todoapp {
+ background: #fff;
+ margin: 130px 0 40px 0;
+ position: relative;
+ box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 25px 50px 0 rgba(0, 0, 0, 0.1);
+}
+
+.todoapp input::-webkit-input-placeholder {
+ font-style: italic;
+ font-weight: 400;
+ color: rgba(0, 0, 0, 0.4);
+}
+
+.todoapp input::-moz-placeholder {
+ font-style: italic;
+ font-weight: 400;
+ color: rgba(0, 0, 0, 0.4);
+}
+
+.todoapp input::input-placeholder {
+ font-style: italic;
+ font-weight: 400;
+ color: rgba(0, 0, 0, 0.4);
+}
+
+.todoapp h1 {
+ position: absolute;
+ top: -140px;
+ width: 100%;
+ font-size: 80px;
+ font-weight: 200;
+ text-align: center;
+ color: #b83f45;
+ -webkit-text-rendering: optimizeLegibility;
+ -moz-text-rendering: optimizeLegibility;
+ text-rendering: optimizeLegibility;
+}
+
+.new-todo,
+.edit {
+ position: relative;
+ margin: 0;
+ width: 100%;
+ font-size: 24px;
+ font-family: inherit;
+ font-weight: inherit;
+ line-height: 1.4em;
+ color: inherit;
+ padding: 6px;
+ border: 1px solid #999;
+ box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2);
+ box-sizing: border-box;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.new-todo {
+ padding: 16px 16px 16px 60px;
+ height: 65px;
+ border: none;
+ background: rgba(0, 0, 0, 0.003);
+ box-shadow: inset 0 -2px 1px rgba(0, 0, 0, 0.03);
+}
+
+.main {
+ position: relative;
+ z-index: 2;
+ border-top: 1px solid #e6e6e6;
+}
+
+.toggle-all {
+ width: 1px;
+ height: 1px;
+ border: none; /* Mobile Safari */
+ opacity: 0;
+ position: absolute;
+ right: 100%;
+ bottom: 100%;
+}
+
+.toggle-all + label {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 45px;
+ height: 65px;
+ font-size: 0;
+ position: absolute;
+ top: -65px;
+ left: -0;
+}
+
+.toggle-all + label:before {
+ content: "❯";
+ display: inline-block;
+ font-size: 22px;
+ color: #949494;
+ padding: 10px 27px 10px 27px;
+ -webkit-transform: rotate(90deg);
+ transform: rotate(90deg);
+}
+
+.toggle-all:checked + label:before {
+ color: #484848;
+}
+
+.todo-list {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+.todo-list li {
+ position: relative;
+ font-size: 24px;
+ border-bottom: 1px solid #ededed;
+}
+
+.todo-list li:last-child {
+ border-bottom: none;
+}
+
+.todo-list li.editing {
+ border-bottom: none;
+ padding: 0;
+}
+
+.todo-list li.editing .edit {
+ display: block;
+ width: calc(100% - 43px);
+ padding: 12px 16px;
+ margin: 0 0 0 43px;
+}
+
+.todo-list li.editing .view {
+ display: none;
+}
+
+.todo-list li .toggle {
+ text-align: center;
+ width: 40px;
+ /* auto, since non-WebKit browsers doesn't support input styling */
+ height: auto;
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ margin: auto 0;
+ border: none; /* Mobile Safari */
+ -webkit-appearance: none;
+ appearance: none;
+}
+
+.todo-list li .toggle {
+ opacity: 0;
+}
+
+.todo-list li .toggle + label {
+ /*
+ Firefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433
+ IE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/
+ */
+ background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23949494%22%20stroke-width%3D%223%22/%3E%3C/svg%3E");
+ background-repeat: no-repeat;
+ background-position: center left;
+}
+
+.todo-list li .toggle:checked + label {
+ background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%2359A193%22%20stroke-width%3D%223%22%2F%3E%3Cpath%20fill%3D%22%233EA390%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22%2F%3E%3C%2Fsvg%3E");
+}
+
+.todo-list li label {
+ word-break: break-all;
+ padding: 15px 15px 15px 60px;
+ display: block;
+ line-height: 1.2;
+ transition: color 0.4s;
+ font-weight: 400;
+ color: #484848;
+}
+
+.todo-list li.completed label {
+ color: #949494;
+ text-decoration: line-through;
+}
+
+.todo-list li .destroy {
+ display: none;
+ position: absolute;
+ top: 0;
+ right: 10px;
+ bottom: 0;
+ width: 40px;
+ height: 40px;
+ margin: auto 0;
+ font-size: 30px;
+ color: #949494;
+ transition: color 0.2s ease-out;
+}
+
+.todo-list li .destroy:hover,
+.todo-list li .destroy:focus {
+ color: #c18585;
+}
+
+.todo-list li .destroy:after {
+ content: "×";
+ display: block;
+ height: 100%;
+ line-height: 1.1;
+}
+
+.todo-list li:hover .destroy {
+ display: block;
+}
+
+.todo-list li .edit {
+ display: none;
+}
+
+.todo-list li.editing:last-child {
+ margin-bottom: -1px;
+}
+
+.footer {
+ padding: 10px 15px;
+ height: 20px;
+ text-align: center;
+ font-size: 15px;
+ border-top: 1px solid #e6e6e6;
+}
+
+.footer:before {
+ content: "";
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ height: 50px;
+ overflow: hidden;
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), 0 8px 0 -3px #f6f6f6, 0 9px 1px -3px rgba(0, 0, 0, 0.2), 0 16px 0 -6px #f6f6f6, 0 17px 2px -6px rgba(0, 0, 0, 0.2);
+}
+
+.todo-count {
+ float: left;
+ text-align: left;
+}
+
+.todo-count strong {
+ font-weight: 300;
+}
+
+.filters {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ position: absolute;
+ right: 0;
+ left: 0;
+}
+
+.filters li {
+ display: inline;
+}
+
+.filters li span {
+ color: inherit;
+ margin: 3px;
+ padding: 3px 7px;
+ text-decoration: none;
+ border: 1px solid transparent;
+ border-radius: 3px;
+}
+
+.filters li span:hover {
+ border-color: #db7676;
+}
+
+.filters li span.selected {
+ border-color: #ce4646;
+}
+
+.clear-completed,
+html .clear-completed:active {
+ float: right;
+ position: relative;
+ line-height: 19px;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.clear-completed:hover {
+ text-decoration: underline;
+}
+
+.info {
+ margin: 65px auto 0;
+ color: #4d4d4d;
+ font-size: 11px;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+ text-align: center;
+}
+
+.info p {
+ line-height: 1;
+}
+
+.info a {
+ color: inherit;
+ text-decoration: none;
+ font-weight: 400;
+}
+
+.info a:hover {
+ text-decoration: underline;
+}
+
+/*
+ Hack to remove background from Mobile Safari.
+ Can't use it globally since it destroys checkboxes in Firefox
+*/
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+ .toggle-all,
+ .todo-list li .toggle {
+ background: none;
+ }
+
+ .todo-list li .toggle {
+ height: 40px;
+ }
+}
+
+@media (max-width: 430px) {
+ .footer {
+ height: 50px;
+ }
+
+ .filters {
+ bottom: 10px;
+ }
+}
+
+:focus,
+.toggle:focus + label,
+.toggle-all:focus + label {
+ box-shadow: 0 0 2px 2px #cf7d7d;
+ outline: 0;
+}
diff --git a/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/index.html b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/index.html
new file mode 100644
index 000000000..c9270857c
--- /dev/null
+++ b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/index.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+ TodoMVC: Jaspr
+
+
+
+
+
+
+
+
+
+
+
diff --git a/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/main.dart.js b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/main.dart.js
new file mode 100644
index 000000000..0ffea7608
--- /dev/null
+++ b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/main.dart.js
@@ -0,0 +1,15 @@
+(async () => {
+const thisScript = document.currentScript;
+
+function relativeURL(ref) {
+ const base = thisScript?.src ?? document.baseURI;
+ return new URL(ref, base).toString();
+}
+
+let { compileStreaming } = await import("./main.mjs");
+
+let app = await compileStreaming(fetch(relativeURL("main.wasm")));
+let module = await app.instantiate({});
+module.invokeMain();
+
+})();
diff --git a/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/main.mjs b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/main.mjs
new file mode 100644
index 000000000..1708b69d7
--- /dev/null
+++ b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/main.mjs
@@ -0,0 +1,343 @@
+// Compiles a dart2wasm-generated main module from `source` which can then
+// instantiatable via the `instantiate` method.
+//
+// `source` needs to be a `Response` object (or promise thereof) e.g. created
+// via the `fetch()` JS API.
+export async function compileStreaming(source) {
+ const builtins = {builtins: ['js-string']};
+ return new CompiledApp(
+ await WebAssembly.compileStreaming(source, builtins), builtins);
+}
+
+// Compiles a dart2wasm-generated wasm modules from `bytes` which is then
+// instantiatable via the `instantiate` method.
+export async function compile(bytes) {
+ const builtins = {builtins: ['js-string']};
+ return new CompiledApp(await WebAssembly.compile(bytes, builtins), builtins);
+}
+
+// DEPRECATED: Please use `compile` or `compileStreaming` to get a compiled app,
+// use `instantiate` method to get an instantiated app and then call
+// `invokeMain` to invoke the main function.
+export async function instantiate(modulePromise, importObjectPromise) {
+ var moduleOrCompiledApp = await modulePromise;
+ if (!(moduleOrCompiledApp instanceof CompiledApp)) {
+ moduleOrCompiledApp = new CompiledApp(moduleOrCompiledApp);
+ }
+ const instantiatedApp = await moduleOrCompiledApp.instantiate(await importObjectPromise);
+ return instantiatedApp.instantiatedModule;
+}
+
+// DEPRECATED: Please use `compile` or `compileStreaming` to get a compiled app,
+// use `instantiate` method to get an instantiated app and then call
+// `invokeMain` to invoke the main function.
+export const invoke = (moduleInstance, ...args) => {
+ moduleInstance.exports.$invokeMain(args);
+}
+
+class CompiledApp {
+ constructor(module, builtins) {
+ this.module = module;
+ this.builtins = builtins;
+ }
+
+ // The second argument is an options object containing:
+ // `loadDeferredWasm` is a JS function that takes a module name matching a
+ // wasm file produced by the dart2wasm compiler and returns the bytes to
+ // load the module. These bytes can be in either a format supported by
+ // `WebAssembly.compile` or `WebAssembly.compileStreaming`.
+ // `loadDynamicModule` is a JS function that takes two string names matching,
+ // in order, a wasm file produced by the dart2wasm compiler during dynamic
+ // module compilation and a corresponding js file produced by the same
+ // compilation. It should return a JS Array containing 2 elements. The first
+ // should be the bytes for the wasm module in a format supported by
+ // `WebAssembly.compile` or `WebAssembly.compileStreaming`. The second
+ // should be the result of using the JS 'import' API on the js file path.
+ async instantiate(additionalImports, {loadDeferredWasm, loadDynamicModule} = {}) {
+ let dartInstance;
+
+ // Prints to the console
+ function printToConsole(value) {
+ if (typeof dartPrint == "function") {
+ dartPrint(value);
+ return;
+ }
+ if (typeof console == "object" && typeof console.log != "undefined") {
+ console.log(value);
+ return;
+ }
+ if (typeof print == "function") {
+ print(value);
+ return;
+ }
+
+ throw "Unable to print message: " + value;
+ }
+
+ // A special symbol attached to functions that wrap Dart functions.
+ const jsWrappedDartFunctionSymbol = Symbol("JSWrappedDartFunction");
+
+ function finalizeWrapper(dartFunction, wrapped) {
+ wrapped.dartFunction = dartFunction;
+ wrapped[jsWrappedDartFunctionSymbol] = true;
+ return wrapped;
+ }
+
+ // Imports
+ const dart2wasm = {
+ _4: (o, c) => o instanceof c,
+ _37: x0 => new Array(x0),
+ _42: (x0,x1,x2) => { x0[x1] = x2 },
+ _45: (x0,x1,x2) => new DataView(x0,x1,x2),
+ _47: x0 => new Int8Array(x0),
+ _48: (x0,x1,x2) => new Uint8Array(x0,x1,x2),
+ _49: x0 => new Uint8Array(x0),
+ _51: x0 => new Uint8ClampedArray(x0),
+ _53: x0 => new Int16Array(x0),
+ _55: x0 => new Uint16Array(x0),
+ _57: x0 => new Int32Array(x0),
+ _59: x0 => new Uint32Array(x0),
+ _61: x0 => new Float32Array(x0),
+ _63: x0 => new Float64Array(x0),
+ _78: () => {
+ let stackString = new Error().stack.toString();
+ let frames = stackString.split('\n');
+ let drop = 2;
+ if (frames[0] === 'Error') {
+ drop += 1;
+ }
+ return frames.slice(drop).join('\n');
+ },
+ _99: s => JSON.stringify(s),
+ _100: s => printToConsole(s),
+ _103: Function.prototype.call.bind(String.prototype.toLowerCase),
+ _109: Function.prototype.call.bind(String.prototype.indexOf),
+ _110: (s, p, i) => s.lastIndexOf(p, i),
+ _112: Object.is,
+ _132: o => o instanceof Uint8Array,
+ _133: (o, start, length) => new Uint8Array(o.buffer, o.byteOffset + start, length),
+ _134: o => o instanceof Int8Array,
+ _135: (o, start, length) => new Int8Array(o.buffer, o.byteOffset + start, length),
+ _136: o => o instanceof Uint8ClampedArray,
+ _137: (o, start, length) => new Uint8ClampedArray(o.buffer, o.byteOffset + start, length),
+ _138: o => o instanceof Uint16Array,
+ _139: (o, start, length) => new Uint16Array(o.buffer, o.byteOffset + start, length),
+ _140: o => o instanceof Int16Array,
+ _141: (o, start, length) => new Int16Array(o.buffer, o.byteOffset + start, length),
+ _142: o => o instanceof Uint32Array,
+ _143: (o, start, length) => new Uint32Array(o.buffer, o.byteOffset + start, length),
+ _144: o => o instanceof Int32Array,
+ _145: (o, start, length) => new Int32Array(o.buffer, o.byteOffset + start, length),
+ _148: o => o instanceof Float32Array,
+ _149: (o, start, length) => new Float32Array(o.buffer, o.byteOffset + start, length),
+ _150: o => o instanceof Float64Array,
+ _151: (o, start, length) => new Float64Array(o.buffer, o.byteOffset + start, length),
+ _152: (t, s) => t.set(s),
+ _154: (o) => new DataView(o.buffer, o.byteOffset, o.byteLength),
+ _156: o => o.buffer,
+ _157: o => o.byteOffset,
+ _158: Function.prototype.call.bind(Object.getOwnPropertyDescriptor(DataView.prototype, 'byteLength').get),
+ _159: (b, o) => new DataView(b, o),
+ _160: (b, o, l) => new DataView(b, o, l),
+ _161: Function.prototype.call.bind(DataView.prototype.getUint8),
+ _162: Function.prototype.call.bind(DataView.prototype.setUint8),
+ _163: Function.prototype.call.bind(DataView.prototype.getInt8),
+ _164: Function.prototype.call.bind(DataView.prototype.setInt8),
+ _165: Function.prototype.call.bind(DataView.prototype.getUint16),
+ _166: Function.prototype.call.bind(DataView.prototype.setUint16),
+ _167: Function.prototype.call.bind(DataView.prototype.getInt16),
+ _168: Function.prototype.call.bind(DataView.prototype.setInt16),
+ _169: Function.prototype.call.bind(DataView.prototype.getUint32),
+ _170: Function.prototype.call.bind(DataView.prototype.setUint32),
+ _171: Function.prototype.call.bind(DataView.prototype.getInt32),
+ _172: Function.prototype.call.bind(DataView.prototype.setInt32),
+ _177: Function.prototype.call.bind(DataView.prototype.getFloat32),
+ _178: Function.prototype.call.bind(DataView.prototype.setFloat32),
+ _179: Function.prototype.call.bind(DataView.prototype.getFloat64),
+ _180: Function.prototype.call.bind(DataView.prototype.setFloat64),
+ _197: (c) =>
+ queueMicrotask(() => dartInstance.exports.$invokeCallback(c)),
+ _210: (x0,x1) => x0.createElement(x1),
+ _212: (x0,x1) => x0.querySelector(x1),
+ _213: f => finalizeWrapper(f, function(x0) { return dartInstance.exports._213(f,arguments.length,x0) }),
+ _215: (x0,x1,x2,x3) => x0.addEventListener(x1,x2,x3),
+ _216: (x0,x1,x2,x3) => x0.removeEventListener(x1,x2,x3),
+ _217: x0 => x0.preventDefault(),
+ _224: (x0,x1) => x0.item(x1),
+ _225: (x0,x1,x2) => x0.createElementNS(x1,x2),
+ _226: (x0,x1) => x0.item(x1),
+ _227: (x0,x1,x2) => x0.replaceChild(x1,x2),
+ _228: (x0,x1) => x0.append(x1),
+ _229: (x0,x1) => x0.removeAttribute(x1),
+ _230: x0 => new Text(x0),
+ _231: (x0,x1) => x0.replaceWith(x1),
+ _232: (x0,x1) => x0.item(x1),
+ _233: (x0,x1,x2) => x0.insertBefore(x1,x2),
+ _234: (x0,x1) => x0.removeChild(x1),
+ _235: (x0,x1) => x0.hasAttribute(x1),
+ _236: (x0,x1) => x0.getAttribute(x1),
+ _237: (x0,x1,x2) => x0.setAttribute(x1,x2),
+ _238: (x0,x1) => x0.error(x1),
+ _260: o => o === undefined,
+ _262: o => typeof o === 'function' && o[jsWrappedDartFunctionSymbol] === true,
+ _266: (l, r) => l === r,
+ _267: o => o,
+ _268: o => o,
+ _269: o => o,
+ _270: b => !!b,
+ _271: o => o.length,
+ _273: (o, i) => o[i],
+ _274: f => f.dartFunction,
+ _281: (o, p) => o[p],
+ _285: o => String(o),
+ _287: o => {
+ if (o === undefined) return 1;
+ var type = typeof o;
+ if (type === 'boolean') return 2;
+ if (type === 'number') return 3;
+ if (type === 'string') return 4;
+ if (o instanceof Array) return 5;
+ if (ArrayBuffer.isView(o)) {
+ if (o instanceof Int8Array) return 6;
+ if (o instanceof Uint8Array) return 7;
+ if (o instanceof Uint8ClampedArray) return 8;
+ if (o instanceof Int16Array) return 9;
+ if (o instanceof Uint16Array) return 10;
+ if (o instanceof Int32Array) return 11;
+ if (o instanceof Uint32Array) return 12;
+ if (o instanceof Float32Array) return 13;
+ if (o instanceof Float64Array) return 14;
+ if (o instanceof DataView) return 15;
+ }
+ if (o instanceof ArrayBuffer) return 16;
+ // Feature check for `SharedArrayBuffer` before doing a type-check.
+ if (globalThis.SharedArrayBuffer !== undefined &&
+ o instanceof SharedArrayBuffer) {
+ return 17;
+ }
+ return 18;
+ },
+ _302: x0 => new ArrayBuffer(x0),
+ _317: x0 => x0.random(),
+ _320: () => globalThis.Math,
+ _321: Function.prototype.call.bind(Number.prototype.toString),
+ _322: Function.prototype.call.bind(BigInt.prototype.toString),
+ _323: Function.prototype.call.bind(Number.prototype.toString),
+ _1390: x0 => x0.checked,
+ _1397: x0 => x0.files,
+ _1440: x0 => x0.type,
+ _1444: x0 => x0.value,
+ _1445: (x0,x1) => { x0.value = x1 },
+ _1446: x0 => x0.valueAsDate,
+ _1448: x0 => x0.valueAsNumber,
+ _1531: x0 => x0.selectedOptions,
+ _1534: x0 => x0.value,
+ _1535: (x0,x1) => { x0.value = x1 },
+ _1554: x0 => x0.value,
+ _1593: x0 => x0.value,
+ _4727: x0 => x0.target,
+ _4777: x0 => x0.length,
+ _4779: x0 => x0.length,
+ _4823: x0 => x0.parentNode,
+ _4825: x0 => x0.childNodes,
+ _4828: x0 => x0.previousSibling,
+ _4829: x0 => x0.nextSibling,
+ _4832: x0 => x0.textContent,
+ _4833: (x0,x1) => { x0.textContent = x1 },
+ _4837: () => globalThis.document,
+ _5245: x0 => x0.namespaceURI,
+ _5248: x0 => x0.tagName,
+ _5256: x0 => x0.attributes,
+ _5382: x0 => x0.length,
+ _5386: x0 => x0.name,
+ _11650: () => globalThis.console,
+ _11674: () => globalThis.Element,
+ _11675: () => globalThis.HTMLInputElement,
+ _11676: () => globalThis.HTMLAnchorElement,
+ _11677: () => globalThis.HTMLSelectElement,
+ _11678: () => globalThis.HTMLTextAreaElement,
+ _11679: () => globalThis.HTMLOptionElement,
+ _11680: () => globalThis.Text,
+
+ };
+
+ const baseImports = {
+ dart2wasm: dart2wasm,
+ Math: Math,
+ Date: Date,
+ Object: Object,
+ Array: Array,
+ Reflect: Reflect,
+ S: new Proxy({}, { get(_, prop) { return prop; } }),
+
+ };
+
+ const jsStringPolyfill = {
+ "charCodeAt": (s, i) => s.charCodeAt(i),
+ "compare": (s1, s2) => {
+ if (s1 < s2) return -1;
+ if (s1 > s2) return 1;
+ return 0;
+ },
+ "concat": (s1, s2) => s1 + s2,
+ "equals": (s1, s2) => s1 === s2,
+ "fromCharCode": (i) => String.fromCharCode(i),
+ "length": (s) => s.length,
+ "substring": (s, a, b) => s.substring(a, b),
+ "fromCharCodeArray": (a, start, end) => {
+ if (end <= start) return '';
+
+ const read = dartInstance.exports.$wasmI16ArrayGet;
+ let result = '';
+ let index = start;
+ const chunkLength = Math.min(end - index, 500);
+ let array = new Array(chunkLength);
+ while (index < end) {
+ const newChunkLength = Math.min(end - index, 500);
+ for (let i = 0; i < newChunkLength; i++) {
+ array[i] = read(a, index++);
+ }
+ if (newChunkLength < chunkLength) {
+ array = array.slice(0, newChunkLength);
+ }
+ result += String.fromCharCode(...array);
+ }
+ return result;
+ },
+ "intoCharCodeArray": (s, a, start) => {
+ if (s === '') return 0;
+
+ const write = dartInstance.exports.$wasmI16ArraySet;
+ for (var i = 0; i < s.length; ++i) {
+ write(a, start++, s.charCodeAt(i));
+ }
+ return s.length;
+ },
+ "test": (s) => typeof s == "string",
+ };
+
+
+
+
+ dartInstance = await WebAssembly.instantiate(this.module, {
+ ...baseImports,
+ ...additionalImports,
+
+ "wasm:js-string": jsStringPolyfill,
+ });
+
+ return new InstantiatedApp(this, dartInstance);
+ }
+}
+
+class InstantiatedApp {
+ constructor(compiledApp, instantiatedModule) {
+ this.compiledApp = compiledApp;
+ this.instantiatedModule = instantiatedModule;
+ }
+
+ // Call the main function with the given arguments.
+ invokeMain(...args) {
+ this.instantiatedModule.exports.$invokeMain(args);
+ }
+}
diff --git a/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/main.wasm b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/main.wasm
new file mode 100644
index 000000000..6cb2d6495
Binary files /dev/null and b/experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/main.wasm differ
diff --git a/experimental/todomvc-dart-jaspr/lib/app.dart b/experimental/todomvc-dart-jaspr/lib/app.dart
new file mode 100644
index 000000000..d1f2fc715
--- /dev/null
+++ b/experimental/todomvc-dart-jaspr/lib/app.dart
@@ -0,0 +1,19 @@
+import 'package:jaspr/jaspr.dart';
+import 'components/todomvc.dart';
+
+class App extends StatelessComponent {
+ const App({super.key});
+
+ @override
+ Iterable build(BuildContext context) => [
+ TodoMVC(),
+ footer(classes: 'info', [
+ p([text('Double-click to edit a todo')]),
+ p([text('Created by the Dart team')]),
+ p([
+ text('Part of '),
+ a(href: 'http://todomvc.com', [text('TodoMVC')])
+ ]),
+ ]),
+ ];
+}
diff --git a/experimental/todomvc-dart-jaspr/lib/components/todomvc.dart b/experimental/todomvc-dart-jaspr/lib/components/todomvc.dart
new file mode 100644
index 000000000..8b411e857
--- /dev/null
+++ b/experimental/todomvc-dart-jaspr/lib/components/todomvc.dart
@@ -0,0 +1,188 @@
+import 'package:jaspr/jaspr.dart';
+
+@client
+class TodoMVC extends StatefulComponent {
+ @override
+ State createState() => TodoMVCState();
+}
+
+enum DisplayState {
+ all,
+ active,
+ completed,
+}
+
+// Todo string, active pair
+typedef Todo = ({bool isActive, String todo});
+
+class TodoMVCState extends State {
+ var todos = {};
+ var dataIdCount = 0;
+ var activeCount = 0;
+ var displayState = DisplayState.all;
+
+ void addTodo(String todo) {
+ setState(() {
+ todos[++dataIdCount] = (todo: todo, isActive: true);
+ activeCount++;
+ });
+ }
+
+ void toggle(int i) {
+ setState(() {
+ var (:isActive, :todo) = todos[i]!;
+ todos[i] = (todo: todo, isActive: !isActive);
+ if (isActive) {
+ activeCount--;
+ } else {
+ activeCount++;
+ }
+ });
+ }
+
+ void toggleAll() {
+ setState(() {
+ for (var i in todos.keys) {
+ var (isActive: _, :todo) = todos[i]!;
+ todos[i] = (todo: todo, isActive: activeCount == 0);
+ }
+ activeCount = (activeCount == 0) ? allCount : 0;
+ });
+ }
+
+ void destroy(int i) {
+ setState(() {
+ var (:isActive, :todo) = todos.remove(i)!;
+ if (isActive) {
+ activeCount--;
+ }
+ });
+ }
+
+ void clearCompleted() {
+ setState(() {
+ todos.removeWhere((dataId, todo) => !todo.isActive);
+ });
+ }
+
+ void setDisplayState(DisplayState state) {
+ setState(() {
+ displayState = state;
+ });
+ }
+
+ int get allCount => todos.length;
+
+ int get completedCount => allCount - activeCount;
+
+ @override
+ Iterable build(BuildContext context) => [
+ section(id: 'root', classes: 'todoapp', [
+ header(classes: 'header', attributes: {
+ 'data-testid': 'header'
+ }, [
+ h1([text('todos')]),
+ div(classes: 'input-container', [NewTodo(addTodo)]),
+ ]),
+ main_(
+ classes: 'main',
+ styles:
+ Styles.raw({'display': todos.isEmpty ? 'none;' : 'block;'}),
+ [
+ div(classes: 'toggle-all-container', [
+ input(
+ classes: 'toggle-all',
+ id: 'toggle-all',
+ type: InputType.checkbox,
+ attributes: activeCount > 0 ? null : {'checked': ''},
+ onChange: (_) => toggleAll(),
+ []),
+ label(classes: 'toggle-all-label', attributes: {
+ 'for': 'toggle-all'
+ }, [
+ text('Mark all as complete'),
+ ]),
+ ]),
+ ul(classes: 'todo-list', [
+ for (var (dataId, (:isActive, :todo)) in todos.keyValues)
+ if (isActive && displayState != DisplayState.completed ||
+ !isActive && displayState != DisplayState.active)
+ li(classes: isActive ? '' : 'completed', attributes: {
+ 'data-id': '$dataId'
+ }, [
+ div(classes: 'view', [
+ input(
+ classes: 'toggle',
+ key: Key('$dataId-$isActive'),
+ type: InputType.checkbox,
+ attributes: isActive ? null : {'checked': ''},
+ onChange: (_) => toggle(dataId),
+ []),
+ label([text(todo)]),
+ button(
+ classes: 'destroy',
+ onClick: () => destroy(dataId),
+ []),
+ ])
+ ]),
+ ]),
+ ]),
+ footer(
+ classes: 'footer',
+ styles:
+ Styles.raw({'display': todos.isEmpty ? 'none;' : 'block;'}),
+ [
+ span(classes: 'todo-count', [
+ strong([text('$activeCount')]),
+ text(' item${activeCount == 1 ? '' : 's'} left'),
+ ]),
+ ul(classes: 'filters', [
+ for (var (name, state) in [
+ ('All', DisplayState.all),
+ ('Active', DisplayState.active),
+ ('Completed', DisplayState.completed)
+ ])
+ li([
+ span(
+ classes: displayState == state ? 'selected' : '',
+ events: {
+ 'click': (_) => setDisplayState(state),
+ },
+ [
+ text(name)
+ ])
+ ]),
+ ]),
+ button(
+ classes: 'clear-completed',
+ styles: Styles.raw(
+ {'display': completedCount == 0 ? 'none;' : 'block;'}),
+ onClick: clearCompleted,
+ [text('Clear completed')]),
+ ]),
+ ]),
+ ];
+}
+
+class NewTodo extends StatelessComponent {
+ final void Function(String) handler;
+
+ NewTodo(this.handler);
+
+ @override
+ Iterable build(BuildContext context) => [
+ input(
+ classes: 'new-todo',
+ value: '',
+ onChange: (str) => handler(str as String),
+ attributes: {
+ 'placeholder': 'What needs to be done?',
+ },
+ []),
+ ];
+}
+
+extension MapExtensions on Map {
+ Iterable<(K, V)> get keyValues =>
+ entries.map((entry) => (entry.key, entry.value));
+}
diff --git a/experimental/todomvc-dart-jaspr/pubspec.lock b/experimental/todomvc-dart-jaspr/pubspec.lock
new file mode 100644
index 000000000..286f877a3
--- /dev/null
+++ b/experimental/todomvc-dart-jaspr/pubspec.lock
@@ -0,0 +1,941 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ _fe_analyzer_shared:
+ dependency: transitive
+ description:
+ name: _fe_analyzer_shared
+ sha256: e55636ed79578b9abca5fecf9437947798f5ef7456308b5cb85720b793eac92f
+ url: "https://pub.dev"
+ source: hosted
+ version: "82.0.0"
+ analyzer:
+ dependency: transitive
+ description:
+ name: analyzer
+ sha256: "904ae5bb474d32c38fb9482e2d925d5454cda04ddd0e55d2e6826bc72f6ba8c0"
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.4.5"
+ analyzer_plugin:
+ dependency: transitive
+ description:
+ name: analyzer_plugin
+ sha256: ee188b6df6c85f1441497c7171c84f1392affadc0384f71089cb10a3bc508cef
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.13.1"
+ ansi_styles:
+ dependency: transitive
+ description:
+ name: ansi_styles
+ sha256: "9c656cc12b3c27b17dd982b2cc5c0cfdfbdabd7bc8f3ae5e8542d9867b47ce8a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.3.2+1"
+ archive:
+ dependency: transitive
+ description:
+ name: archive
+ sha256: "2fde1607386ab523f7a36bb3e7edb43bd58e6edaf2ffb29d8a6d578b297fdbbd"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.7"
+ args:
+ dependency: transitive
+ description:
+ name: args
+ sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.7.0"
+ async:
+ dependency: transitive
+ description:
+ name: async
+ sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.13.0"
+ bazel_worker:
+ dependency: transitive
+ description:
+ name: bazel_worker
+ sha256: "373a6ef07caa6c674c1cf144a5fe1e0f712c040552031ce669f298e35f7e110a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.3"
+ binary_codec:
+ dependency: transitive
+ description:
+ name: binary_codec
+ sha256: "368144225d749e1e33f2f4628d0c70bffff99b99b1d6c0777b039f8967365b07"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.3"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ browser_launcher:
+ dependency: transitive
+ description:
+ name: browser_launcher
+ sha256: ca2557663d3033845f2ef2b60f94fc249528324fd1affddccb7c63ac0ccd6c67
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.3"
+ build:
+ dependency: transitive
+ description:
+ name: build
+ sha256: "51dc711996cbf609b90cbe5b335bbce83143875a9d58e4b5c6d3c4f684d3dda7"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.5.4"
+ build_config:
+ dependency: transitive
+ description:
+ name: build_config
+ sha256: "4ae2de3e1e67ea270081eaee972e1bd8f027d459f249e0f1186730784c2e7e33"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ build_daemon:
+ dependency: transitive
+ description:
+ name: build_daemon
+ sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.4"
+ build_modules:
+ dependency: transitive
+ description:
+ name: build_modules
+ sha256: b4f8d74125ab53869e63d488b8df2a036a7136d3b6d1759d3247e4d8d2e8f379
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.0.15"
+ build_resolvers:
+ dependency: transitive
+ description:
+ name: build_resolvers
+ sha256: ee4257b3f20c0c90e72ed2b57ad637f694ccba48839a821e87db762548c22a62
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.5.4"
+ build_runner:
+ dependency: "direct dev"
+ description:
+ name: build_runner
+ sha256: "382a4d649addbfb7ba71a3631df0ec6a45d5ab9b098638144faf27f02778eb53"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.5.4"
+ build_runner_core:
+ dependency: transitive
+ description:
+ name: build_runner_core
+ sha256: "85fbbb1036d576d966332a3f5ce83f2ce66a40bea1a94ad2d5fc29a19a0d3792"
+ url: "https://pub.dev"
+ source: hosted
+ version: "9.1.2"
+ build_web_compilers:
+ dependency: "direct dev"
+ description:
+ name: build_web_compilers
+ sha256: "7c82235c82657efa0e6e877ef813757c7fd9e0e0406106f32ab30a874c939c63"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.2.0"
+ built_collection:
+ dependency: transitive
+ description:
+ name: built_collection
+ sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.1.1"
+ built_value:
+ dependency: transitive
+ description:
+ name: built_value
+ sha256: "082001b5c3dc495d4a42f1d5789990505df20d8547d42507c29050af6933ee27"
+ url: "https://pub.dev"
+ source: hosted
+ version: "8.10.1"
+ checked_yaml:
+ dependency: transitive
+ description:
+ name: checked_yaml
+ sha256: "959525d3162f249993882720d52b7e0c833978df229be20702b33d48d91de70f"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.4"
+ ci:
+ dependency: transitive
+ description:
+ name: ci
+ sha256: "145d095ce05cddac4d797a158bc4cf3b6016d1fe63d8c3d2fbd7212590adca13"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.0"
+ cli_completion:
+ dependency: transitive
+ description:
+ name: cli_completion
+ sha256: "72e8ccc4545f24efa7bbdf3bff7257dc9d62b072dee77513cc54295575bc9220"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.5.1"
+ cli_util:
+ dependency: transitive
+ description:
+ name: cli_util
+ sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.4.2"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ code_builder:
+ dependency: transitive
+ description:
+ name: code_builder
+ sha256: "0ec10bf4a89e4c613960bf1e8b42c64127021740fb21640c29c909826a5eea3e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.10.1"
+ collection:
+ dependency: transitive
+ description:
+ name: collection
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.19.1"
+ convert:
+ dependency: transitive
+ description:
+ name: convert
+ sha256: b30acd5944035672bc15c6b7a8b47d773e41e2f17de064350988c5d02adb1c68
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.2"
+ crypto:
+ dependency: transitive
+ description:
+ name: crypto
+ sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.6"
+ csslib:
+ dependency: transitive
+ description:
+ name: csslib
+ sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.2"
+ custom_lint:
+ dependency: transitive
+ description:
+ name: custom_lint
+ sha256: "409c485fd14f544af1da965d5a0d160ee57cd58b63eeaa7280a4f28cf5bda7f1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.5"
+ custom_lint_builder:
+ dependency: transitive
+ description:
+ name: custom_lint_builder
+ sha256: "107e0a43606138015777590ee8ce32f26ba7415c25b722ff0908a6f5d7a4c228"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.5"
+ custom_lint_core:
+ dependency: transitive
+ description:
+ name: custom_lint_core
+ sha256: "31110af3dde9d29fb10828ca33f1dce24d2798477b167675543ce3d208dee8be"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.5"
+ custom_lint_visitor:
+ dependency: transitive
+ description:
+ name: custom_lint_visitor
+ sha256: cba5b6d7a6217312472bf4468cdf68c949488aed7ffb0eab792cd0b6c435054d
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.0+7.4.5"
+ dap:
+ dependency: transitive
+ description:
+ name: dap
+ sha256: "42b0b083a09c59a118741769e218fc3738980ab591114f09d1026241d2b9c290"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.0"
+ dart_style:
+ dependency: transitive
+ description:
+ name: dart_style
+ sha256: "5b236382b47ee411741447c1f1e111459c941ea1b3f2b540dde54c210a3662af"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.0"
+ dds:
+ dependency: transitive
+ description:
+ name: dds
+ sha256: c90723eb1f1402429c57f717550ce5af80288d74a27c45ccbe754a0e3e038f95
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.2.7"
+ dds_service_extensions:
+ dependency: transitive
+ description:
+ name: dds_service_extensions
+ sha256: c514114300ab30a95903fed1fdcf2949d057a0ea961168ec890a2b415b3ec52a
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.2"
+ devtools_shared:
+ dependency: transitive
+ description:
+ name: devtools_shared
+ sha256: "72369878105eccd563547afbad97407a2431b96bd4c04a1d6da75cb068437f50"
+ url: "https://pub.dev"
+ source: hosted
+ version: "10.0.2"
+ dtd:
+ dependency: transitive
+ description:
+ name: dtd
+ sha256: "14a0360d898ded87c3d99591fc386b8a6ea5d432927bee709b22130cd25b993a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.5.1"
+ dwds:
+ dependency: transitive
+ description:
+ name: dwds
+ sha256: "1c192079b0e62ae1be032340a2ed073d678ab3d5ca7ded7954d1aa2d4643df02"
+ url: "https://pub.dev"
+ source: hosted
+ version: "24.3.5"
+ equatable:
+ dependency: transitive
+ description:
+ name: equatable
+ sha256: "567c64b3cb4cf82397aac55f4f0cbd3ca20d77c6c03bedbc4ceaddc08904aef7"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.7"
+ extension_discovery:
+ dependency: transitive
+ description:
+ name: extension_discovery
+ sha256: de1fce715ab013cdfb00befc3bdf0914bea5e409c3a567b7f8f144bc061611a7
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.0"
+ ffi:
+ dependency: transitive
+ description:
+ name: ffi
+ sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ file:
+ dependency: transitive
+ description:
+ name: file
+ sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.0.1"
+ fixnum:
+ dependency: transitive
+ description:
+ name: fixnum
+ sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.1"
+ freezed_annotation:
+ dependency: transitive
+ description:
+ name: freezed_annotation
+ sha256: "7294967ff0a6d98638e7acb774aac3af2550777accd8149c90af5b014e6d44d8"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.0"
+ frontend_server_client:
+ dependency: transitive
+ description:
+ name: frontend_server_client
+ sha256: f64a0333a82f30b0cca061bc3d143813a486dc086b574bfb233b7c1372427694
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.0.0"
+ glob:
+ dependency: transitive
+ description:
+ name: glob
+ sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.3"
+ graphs:
+ dependency: transitive
+ description:
+ name: graphs
+ sha256: "741bbf84165310a68ff28fe9e727332eef1407342fca52759cb21ad8177bb8d0"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.2"
+ hotreloader:
+ dependency: transitive
+ description:
+ name: hotreloader
+ sha256: bc167a1163807b03bada490bfe2df25b0d744df359227880220a5cbd04e5734b
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.3.0"
+ html:
+ dependency: transitive
+ description:
+ name: html
+ sha256: "6d1264f2dffa1b1101c25a91dff0dc2daee4c18e87cd8538729773c073dbf602"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.15.6"
+ http:
+ dependency: transitive
+ description:
+ name: http
+ sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.0"
+ http_multi_server:
+ dependency: transitive
+ description:
+ name: http_multi_server
+ sha256: aa6199f908078bb1c5efb8d8638d4ae191aac11b311132c3ef48ce352fb52ef8
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.2.2"
+ http_parser:
+ dependency: transitive
+ description:
+ name: http_parser
+ sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.1.2"
+ io:
+ dependency: transitive
+ description:
+ name: io
+ sha256: dfd5a80599cf0165756e3181807ed3e77daf6dd4137caaad72d0b7931597650b
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.5"
+ jaspr:
+ dependency: "direct main"
+ description:
+ name: jaspr
+ sha256: dc5cf37e7284062779f1235f317bb54071a92a3dafdf681d94c52edac86f3bff
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.19.1"
+ jaspr_builder:
+ dependency: "direct dev"
+ description:
+ name: jaspr_builder
+ sha256: "4bf42193868ea9850072f589f16c91c5f44e5e8d0b29bc703562857eae5a6a99"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.19.1"
+ jaspr_cli:
+ dependency: "direct dev"
+ description:
+ name: jaspr_cli
+ sha256: "7c11200fc172529c2228e7647194013d6e05feae94ccacff4a2869def764c9ad"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.19.1"
+ jaspr_lints:
+ dependency: "direct dev"
+ description:
+ name: jaspr_lints
+ sha256: "70f6b5cbb3a3cdd42f06bd617d4e26eaa31626bf1717ccf65cf97a3e41e9c28d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.4.0"
+ js:
+ dependency: transitive
+ description:
+ name: js
+ sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.2"
+ json_annotation:
+ dependency: transitive
+ description:
+ name: json_annotation
+ sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.9.0"
+ json_rpc_2:
+ dependency: transitive
+ description:
+ name: json_rpc_2
+ sha256: "246b321532f0e8e2ba474b4d757eaa558ae4fdd0688fdbc1e1ca9705f9b8ca0e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.3"
+ lints:
+ dependency: "direct dev"
+ description:
+ name: lints
+ sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.0.0"
+ logging:
+ dependency: transitive
+ description:
+ name: logging
+ sha256: c8245ada5f1717ed44271ed1c26b8ce85ca3228fd2ffdb75468ab01979309d61
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.0"
+ mason:
+ dependency: transitive
+ description:
+ name: mason
+ sha256: de5681849fd49bb4f53f703f439b1d9dac64ff472e49b5dfb23ad5d837185780
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.1.1"
+ mason_logger:
+ dependency: transitive
+ description:
+ name: mason_logger
+ sha256: "6d5a989ff41157915cb5162ed6e41196d5e31b070d2f86e1c2edf216996a158c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.3.3"
+ matcher:
+ dependency: transitive
+ description:
+ name: matcher
+ sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.17"
+ meta:
+ dependency: transitive
+ description:
+ name: meta
+ sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.17.0"
+ mime:
+ dependency: transitive
+ description:
+ name: mime
+ sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.6"
+ mustache_template:
+ dependency: transitive
+ description:
+ name: mustache_template
+ sha256: a46e26f91445bfb0b60519be280555b06792460b27b19e2b19ad5b9740df5d1c
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.0"
+ package_config:
+ dependency: transitive
+ description:
+ name: package_config
+ sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ path:
+ dependency: transitive
+ description:
+ name: path
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.9.1"
+ platform:
+ dependency: transitive
+ description:
+ name: platform
+ sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.6"
+ pool:
+ dependency: transitive
+ description:
+ name: pool
+ sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.5.1"
+ posix:
+ dependency: transitive
+ description:
+ name: posix
+ sha256: "6323a5b0fa688b6a010df4905a56b00181479e6d10534cecfecede2aa55add61"
+ url: "https://pub.dev"
+ source: hosted
+ version: "6.0.3"
+ process:
+ dependency: transitive
+ description:
+ name: process
+ sha256: "44b4226c0afd4bc3b7c7e67d44c4801abd97103cf0c84609e2654b664ca2798c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.0.4"
+ protobuf:
+ dependency: transitive
+ description:
+ name: protobuf
+ sha256: "579fe5557eae58e3adca2e999e38f02441d8aa908703854a9e0a0f47fa857731"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.1.0"
+ pub_semver:
+ dependency: transitive
+ description:
+ name: pub_semver
+ sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.0"
+ pub_updater:
+ dependency: transitive
+ description:
+ name: pub_updater
+ sha256: "739a0161d73a6974c0675b864fb0cf5147305f7b077b7f03a58fa7a9ab3e7e7d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.5.0"
+ pubspec_parse:
+ dependency: transitive
+ description:
+ name: pubspec_parse
+ sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.5.0"
+ rxdart:
+ dependency: transitive
+ description:
+ name: rxdart
+ sha256: "5c3004a4a8dbb94bd4bf5412a4def4acdaa12e12f269737a5751369e12d1a962"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.28.0"
+ scratch_space:
+ dependency: transitive
+ description:
+ name: scratch_space
+ sha256: "816989dd0a1f92cd5f0db012ed330035571034956dc3593fba66aaa6ee6a7e43"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.0"
+ shelf:
+ dependency: transitive
+ description:
+ name: shelf
+ sha256: e7dd780a7ffb623c57850b33f43309312fc863fb6aa3d276a754bb299839ef12
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.2"
+ shelf_gzip:
+ dependency: transitive
+ description:
+ name: shelf_gzip
+ sha256: "4f4b793c0f969f348aece1ab4cc05fceba9fea431c1ce76b1bc0fa369cecfc15"
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.1.0"
+ shelf_packages_handler:
+ dependency: transitive
+ description:
+ name: shelf_packages_handler
+ sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.2"
+ shelf_proxy:
+ dependency: transitive
+ description:
+ name: shelf_proxy
+ sha256: a71d2307f4393211930c590c3d2c00630f6c5a7a77edc1ef6436dfd85a6a7ee3
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.4"
+ shelf_static:
+ dependency: transitive
+ description:
+ name: shelf_static
+ sha256: c87c3875f91262785dade62d135760c2c69cb217ac759485334c5857ad89f6e3
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.3"
+ shelf_web_socket:
+ dependency: transitive
+ description:
+ name: shelf_web_socket
+ sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.1"
+ source_gen:
+ dependency: transitive
+ description:
+ name: source_gen
+ sha256: "35c8150ece9e8c8d263337a265153c3329667640850b9304861faea59fc98f6b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.0"
+ source_maps:
+ dependency: transitive
+ description:
+ name: source_maps
+ sha256: "190222579a448b03896e0ca6eca5998fa810fda630c1d65e2f78b3f638f54812"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.10.13"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.10.1"
+ sprintf:
+ dependency: transitive
+ description:
+ name: sprintf
+ sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
+ url: "https://pub.dev"
+ source: hosted
+ version: "7.0.0"
+ sse:
+ dependency: transitive
+ description:
+ name: sse
+ sha256: fcc97470240bb37377f298e2bd816f09fd7216c07928641c0560719f50603643
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.1.8"
+ stack_trace:
+ dependency: transitive
+ description:
+ name: stack_trace
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.12.1"
+ stream_channel:
+ dependency: transitive
+ description:
+ name: stream_channel
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ stream_transform:
+ dependency: transitive
+ description:
+ name: stream_transform
+ sha256: ad47125e588cfd37a9a7f86c7d6356dde8dfe89d071d293f80ca9e9273a33871
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.1"
+ string_scanner:
+ dependency: transitive
+ description:
+ name: string_scanner
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.1"
+ term_glyph:
+ dependency: transitive
+ description:
+ name: term_glyph
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.2"
+ test_api:
+ dependency: transitive
+ description:
+ name: test_api
+ sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.6"
+ timing:
+ dependency: transitive
+ description:
+ name: timing
+ sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.2"
+ typed_data:
+ dependency: transitive
+ description:
+ name: typed_data
+ sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.4.0"
+ unified_analytics:
+ dependency: transitive
+ description:
+ name: unified_analytics
+ sha256: "8d1429a4b27320a9c4fc854287d18c8fde1549bf622165c5837202a9f370b53d"
+ url: "https://pub.dev"
+ source: hosted
+ version: "8.0.5"
+ universal_web:
+ dependency: transitive
+ description:
+ name: universal_web
+ sha256: "045d5d5277f7dd3b6838b08098f5ec4cfb15b790c5d3deb8e79f642ae1af3ad2"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.1"
+ uuid:
+ dependency: transitive
+ description:
+ name: uuid
+ sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
+ url: "https://pub.dev"
+ source: hosted
+ version: "4.5.1"
+ vm_service:
+ dependency: transitive
+ description:
+ name: vm_service
+ sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
+ url: "https://pub.dev"
+ source: hosted
+ version: "14.3.1"
+ vm_service_interface:
+ dependency: transitive
+ description:
+ name: vm_service_interface
+ sha256: "503c92c26cf9f77d688bf8fca27fa9ec40450adbf02ec1ec5f12828ded508ac0"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.1"
+ watcher:
+ dependency: transitive
+ description:
+ name: watcher
+ sha256: "0b7fd4a0bbc4b92641dbf20adfd7e3fd1398fe17102d94b674234563e110088a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.2"
+ web:
+ dependency: transitive
+ description:
+ name: web
+ sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.1"
+ web_socket:
+ dependency: transitive
+ description:
+ name: web_socket
+ sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.1"
+ web_socket_channel:
+ dependency: transitive
+ description:
+ name: web_socket_channel
+ sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.0.3"
+ webdev:
+ dependency: transitive
+ description:
+ name: webdev
+ sha256: efcb8230c9d40c75118b57e10e59936c40f02f232b27fdfae91a9f00ca470d9d
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.7.1"
+ webkit_inspection_protocol:
+ dependency: transitive
+ description:
+ name: webkit_inspection_protocol
+ sha256: "87d3f2333bb240704cd3f1c6b5b7acd8a10e7f0bc28c28dcf14e782014f4a572"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.1"
+ win32:
+ dependency: transitive
+ description:
+ name: win32
+ sha256: "66814138c3562338d05613a6e368ed8cfb237ad6d64a9e9334be3f309acfca03"
+ url: "https://pub.dev"
+ source: hosted
+ version: "5.14.0"
+ yaml:
+ dependency: transitive
+ description:
+ name: yaml
+ sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.1.3"
+ yaml_edit:
+ dependency: transitive
+ description:
+ name: yaml_edit
+ sha256: fb38626579fb345ad00e674e2af3a5c9b0cc4b9bfb8fd7f7ff322c7c9e62aef5
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.2.2"
+sdks:
+ dart: ">=3.8.0 <3.10.0-z"
diff --git a/experimental/todomvc-dart-jaspr/pubspec.yaml b/experimental/todomvc-dart-jaspr/pubspec.yaml
new file mode 100644
index 000000000..b74848b91
--- /dev/null
+++ b/experimental/todomvc-dart-jaspr/pubspec.yaml
@@ -0,0 +1,20 @@
+name: todomvc
+description: A TodoMVC app created using the Jaspr Dart web framework.
+version: 0.1.0
+
+environment:
+ sdk: ^3.7.0
+
+dependencies:
+ jaspr: ^0.19.1
+
+dev_dependencies:
+ build_runner:
+ build_web_compilers: ^4.1.0
+ jaspr_builder:
+ jaspr_lints:
+ jaspr_cli:
+ lints:
+
+jaspr:
+ mode: client
diff --git a/experimental/todomvc-dart-jaspr/web/base.css b/experimental/todomvc-dart-jaspr/web/base.css
new file mode 100644
index 000000000..d3938100c
--- /dev/null
+++ b/experimental/todomvc-dart-jaspr/web/base.css
@@ -0,0 +1,141 @@
+hr {
+ margin: 20px 0;
+ border: 0;
+ border-top: 1px dashed #c5c5c5;
+ border-bottom: 1px dashed #f7f7f7;
+}
+
+.learn a {
+ font-weight: normal;
+ text-decoration: none;
+ color: #b83f45;
+}
+
+.learn a:hover {
+ text-decoration: underline;
+ color: #787e7e;
+}
+
+.learn h3,
+.learn h4,
+.learn h5 {
+ margin: 10px 0;
+ font-weight: 500;
+ line-height: 1.2;
+ color: #000;
+}
+
+.learn h3 {
+ font-size: 24px;
+}
+
+.learn h4 {
+ font-size: 18px;
+}
+
+.learn h5 {
+ margin-bottom: 0;
+ font-size: 14px;
+}
+
+.learn ul {
+ padding: 0;
+ margin: 0 0 30px 25px;
+}
+
+.learn li {
+ line-height: 20px;
+}
+
+.learn p {
+ font-size: 15px;
+ font-weight: 300;
+ line-height: 1.3;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+#issue-count {
+ display: none;
+}
+
+.quote {
+ border: none;
+ margin: 20px 0 60px 0;
+}
+
+.quote p {
+ font-style: italic;
+}
+
+.quote p:before {
+ content: "“";
+ font-size: 50px;
+ opacity: 0.15;
+ position: absolute;
+ top: -20px;
+ left: 3px;
+}
+
+.quote p:after {
+ content: "”";
+ font-size: 50px;
+ opacity: 0.15;
+ position: absolute;
+ bottom: -42px;
+ right: 3px;
+}
+
+.quote footer {
+ position: absolute;
+ bottom: -40px;
+ right: 0;
+}
+
+.quote footer img {
+ border-radius: 3px;
+}
+
+.quote footer a {
+ margin-left: 5px;
+ vertical-align: middle;
+}
+
+.speech-bubble {
+ position: relative;
+ padding: 10px;
+ background: rgba(0, 0, 0, 0.04);
+ border-radius: 5px;
+}
+
+.speech-bubble:after {
+ content: "";
+ position: absolute;
+ top: 100%;
+ right: 30px;
+ border: 13px solid transparent;
+ border-top-color: rgba(0, 0, 0, 0.04);
+}
+
+.learn-bar > .learn {
+ position: absolute;
+ width: 272px;
+ top: 8px;
+ left: -300px;
+ padding: 10px;
+ border-radius: 5px;
+ background-color: rgba(255, 255, 255, 0.6);
+ transition-property: left;
+ transition-duration: 500ms;
+}
+
+@media (min-width: 899px) {
+ .learn-bar {
+ width: auto;
+ padding-left: 300px;
+ }
+
+ .learn-bar > .learn {
+ left: 8px;
+ }
+}
diff --git a/experimental/todomvc-dart-jaspr/web/favicon.ico b/experimental/todomvc-dart-jaspr/web/favicon.ico
new file mode 100644
index 000000000..bd829b4fc
Binary files /dev/null and b/experimental/todomvc-dart-jaspr/web/favicon.ico differ
diff --git a/experimental/todomvc-dart-jaspr/web/index.css b/experimental/todomvc-dart-jaspr/web/index.css
new file mode 100644
index 000000000..fb6fb83ef
--- /dev/null
+++ b/experimental/todomvc-dart-jaspr/web/index.css
@@ -0,0 +1,388 @@
+@charset "utf-8";
+
+html,
+body {
+ margin: 0;
+ padding: 0;
+}
+
+button {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ background: none;
+ font-size: 100%;
+ vertical-align: baseline;
+ font-family: inherit;
+ font-weight: inherit;
+ color: inherit;
+ -webkit-appearance: none;
+ appearance: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+body {
+ font: 14px "Helvetica Neue", Helvetica, Arial, sans-serif;
+ line-height: 1.4em;
+ background: #f5f5f5;
+ color: #111111;
+ min-width: 230px;
+ max-width: 550px;
+ margin: 0 auto;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ font-weight: 300;
+}
+
+.hidden {
+ display: none;
+}
+
+.todoapp {
+ background: #fff;
+ margin: 130px 0 40px 0;
+ position: relative;
+ box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 25px 50px 0 rgba(0, 0, 0, 0.1);
+}
+
+.todoapp input::-webkit-input-placeholder {
+ font-style: italic;
+ font-weight: 400;
+ color: rgba(0, 0, 0, 0.4);
+}
+
+.todoapp input::-moz-placeholder {
+ font-style: italic;
+ font-weight: 400;
+ color: rgba(0, 0, 0, 0.4);
+}
+
+.todoapp input::input-placeholder {
+ font-style: italic;
+ font-weight: 400;
+ color: rgba(0, 0, 0, 0.4);
+}
+
+.todoapp h1 {
+ position: absolute;
+ top: -140px;
+ width: 100%;
+ font-size: 80px;
+ font-weight: 200;
+ text-align: center;
+ color: #b83f45;
+ -webkit-text-rendering: optimizeLegibility;
+ -moz-text-rendering: optimizeLegibility;
+ text-rendering: optimizeLegibility;
+}
+
+.new-todo,
+.edit {
+ position: relative;
+ margin: 0;
+ width: 100%;
+ font-size: 24px;
+ font-family: inherit;
+ font-weight: inherit;
+ line-height: 1.4em;
+ color: inherit;
+ padding: 6px;
+ border: 1px solid #999;
+ box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2);
+ box-sizing: border-box;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.new-todo {
+ padding: 16px 16px 16px 60px;
+ height: 65px;
+ border: none;
+ background: rgba(0, 0, 0, 0.003);
+ box-shadow: inset 0 -2px 1px rgba(0, 0, 0, 0.03);
+}
+
+.main {
+ position: relative;
+ z-index: 2;
+ border-top: 1px solid #e6e6e6;
+}
+
+.toggle-all {
+ width: 1px;
+ height: 1px;
+ border: none; /* Mobile Safari */
+ opacity: 0;
+ position: absolute;
+ right: 100%;
+ bottom: 100%;
+}
+
+.toggle-all + label {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 45px;
+ height: 65px;
+ font-size: 0;
+ position: absolute;
+ top: -65px;
+ left: -0;
+}
+
+.toggle-all + label:before {
+ content: "❯";
+ display: inline-block;
+ font-size: 22px;
+ color: #949494;
+ padding: 10px 27px 10px 27px;
+ -webkit-transform: rotate(90deg);
+ transform: rotate(90deg);
+}
+
+.toggle-all:checked + label:before {
+ color: #484848;
+}
+
+.todo-list {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+.todo-list li {
+ position: relative;
+ font-size: 24px;
+ border-bottom: 1px solid #ededed;
+}
+
+.todo-list li:last-child {
+ border-bottom: none;
+}
+
+.todo-list li.editing {
+ border-bottom: none;
+ padding: 0;
+}
+
+.todo-list li.editing .edit {
+ display: block;
+ width: calc(100% - 43px);
+ padding: 12px 16px;
+ margin: 0 0 0 43px;
+}
+
+.todo-list li.editing .view {
+ display: none;
+}
+
+.todo-list li .toggle {
+ text-align: center;
+ width: 40px;
+ /* auto, since non-WebKit browsers doesn't support input styling */
+ height: auto;
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ margin: auto 0;
+ border: none; /* Mobile Safari */
+ -webkit-appearance: none;
+ appearance: none;
+}
+
+.todo-list li .toggle {
+ opacity: 0;
+}
+
+.todo-list li .toggle + label {
+ /*
+ Firefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433
+ IE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/
+ */
+ background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23949494%22%20stroke-width%3D%223%22/%3E%3C/svg%3E");
+ background-repeat: no-repeat;
+ background-position: center left;
+}
+
+.todo-list li .toggle:checked + label {
+ background-image: url("data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%2359A193%22%20stroke-width%3D%223%22%2F%3E%3Cpath%20fill%3D%22%233EA390%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22%2F%3E%3C%2Fsvg%3E");
+}
+
+.todo-list li label {
+ word-break: break-all;
+ padding: 15px 15px 15px 60px;
+ display: block;
+ line-height: 1.2;
+ transition: color 0.4s;
+ font-weight: 400;
+ color: #484848;
+}
+
+.todo-list li.completed label {
+ color: #949494;
+ text-decoration: line-through;
+}
+
+.todo-list li .destroy {
+ display: none;
+ position: absolute;
+ top: 0;
+ right: 10px;
+ bottom: 0;
+ width: 40px;
+ height: 40px;
+ margin: auto 0;
+ font-size: 30px;
+ color: #949494;
+ transition: color 0.2s ease-out;
+}
+
+.todo-list li .destroy:hover,
+.todo-list li .destroy:focus {
+ color: #c18585;
+}
+
+.todo-list li .destroy:after {
+ content: "×";
+ display: block;
+ height: 100%;
+ line-height: 1.1;
+}
+
+.todo-list li:hover .destroy {
+ display: block;
+}
+
+.todo-list li .edit {
+ display: none;
+}
+
+.todo-list li.editing:last-child {
+ margin-bottom: -1px;
+}
+
+.footer {
+ padding: 10px 15px;
+ height: 20px;
+ text-align: center;
+ font-size: 15px;
+ border-top: 1px solid #e6e6e6;
+}
+
+.footer:before {
+ content: "";
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ height: 50px;
+ overflow: hidden;
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), 0 8px 0 -3px #f6f6f6, 0 9px 1px -3px rgba(0, 0, 0, 0.2), 0 16px 0 -6px #f6f6f6, 0 17px 2px -6px rgba(0, 0, 0, 0.2);
+}
+
+.todo-count {
+ float: left;
+ text-align: left;
+}
+
+.todo-count strong {
+ font-weight: 300;
+}
+
+.filters {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+ position: absolute;
+ right: 0;
+ left: 0;
+}
+
+.filters li {
+ display: inline;
+}
+
+.filters li span {
+ color: inherit;
+ margin: 3px;
+ padding: 3px 7px;
+ text-decoration: none;
+ border: 1px solid transparent;
+ border-radius: 3px;
+}
+
+.filters li span:hover {
+ border-color: #db7676;
+}
+
+.filters li span.selected {
+ border-color: #ce4646;
+}
+
+.clear-completed,
+html .clear-completed:active {
+ float: right;
+ position: relative;
+ line-height: 19px;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.clear-completed:hover {
+ text-decoration: underline;
+}
+
+.info {
+ margin: 65px auto 0;
+ color: #4d4d4d;
+ font-size: 11px;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+ text-align: center;
+}
+
+.info p {
+ line-height: 1;
+}
+
+.info a {
+ color: inherit;
+ text-decoration: none;
+ font-weight: 400;
+}
+
+.info a:hover {
+ text-decoration: underline;
+}
+
+/*
+ Hack to remove background from Mobile Safari.
+ Can't use it globally since it destroys checkboxes in Firefox
+*/
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+ .toggle-all,
+ .todo-list li .toggle {
+ background: none;
+ }
+
+ .todo-list li .toggle {
+ height: 40px;
+ }
+}
+
+@media (max-width: 430px) {
+ .footer {
+ height: 50px;
+ }
+
+ .filters {
+ bottom: 10px;
+ }
+}
+
+:focus,
+.toggle:focus + label,
+.toggle-all:focus + label {
+ box-shadow: 0 0 2px 2px #cf7d7d;
+ outline: 0;
+}
diff --git a/experimental/todomvc-dart-jaspr/web/index.html b/experimental/todomvc-dart-jaspr/web/index.html
new file mode 100644
index 000000000..c9270857c
--- /dev/null
+++ b/experimental/todomvc-dart-jaspr/web/index.html
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+ TodoMVC: Jaspr
+
+
+
+
+
+
+
+
+
+
+
diff --git a/experimental/todomvc-dart-jaspr/web/main.dart b/experimental/todomvc-dart-jaspr/web/main.dart
new file mode 100644
index 000000000..e7284b369
--- /dev/null
+++ b/experimental/todomvc-dart-jaspr/web/main.dart
@@ -0,0 +1,13 @@
+// The entrypoint for the **client** environment.
+//
+// This file is compiled to javascript and executed in the browser.
+
+// Client-specific jaspr import.
+import 'package:jaspr/browser.dart';
+// Imports the [App] component.
+import 'package:todomvc/app.dart';
+
+void main() {
+ // Attaches the [App] component to the of the page.
+ runApp(App());
+}
diff --git a/resources/tests.mjs b/resources/tests.mjs
index 0a3878423..c9fb4da1b 100644
--- a/resources/tests.mjs
+++ b/resources/tests.mjs
@@ -836,6 +836,66 @@ Suites.push({
],
});
+Suites.push({
+ name: "TodoMVC-Jaspr-Dart2JS-O4",
+ url: "experimental/todomvc-dart-jaspr/dist/out-dart2js-O4/index.html",
+ tags: ["todomvc", "experimental"],
+ disabled: true,
+ async prepare(page) {
+ (await page.waitForElement(".new-todo")).focus();
+ },
+ tests: [
+ new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => {
+ const newTodo = page.querySelector(".new-todo");
+ for (let i = 0; i < numberOfItemsToAdd; i++) {
+ newTodo.setValue(getTodoText("ja", i));
+ newTodo.dispatchEvent("change");
+ newTodo.enter("keypress");
+ }
+ }),
+ new BenchmarkTestStep("CompletingAllItems", (page) => {
+ const checkboxes = page.querySelectorAll(".toggle");
+ for (let i = 0; i < numberOfItemsToAdd; i++)
+ checkboxes[i].click();
+ }),
+ new BenchmarkTestStep("DeletingAllItems", (page) => {
+ const deleteButtons = page.querySelectorAll(".destroy");
+ for (let i = numberOfItemsToAdd - 1; i >= 0; i--)
+ deleteButtons[i].click();
+ }),
+ ],
+});
+
+Suites.push({
+ name: "TodoMVC-Jaspr-Dart2Wasm-O2",
+ url: "experimental/todomvc-dart-jaspr/dist/out-dart2wasm-O2/index.html",
+ tags: ["todomvc", "experimental"],
+ disabled: true,
+ async prepare(page) {
+ (await page.waitForElement(".new-todo")).focus();
+ },
+ tests: [
+ new BenchmarkTestStep(`Adding${numberOfItemsToAdd}Items`, (page) => {
+ const newTodo = page.querySelector(".new-todo");
+ for (let i = 0; i < numberOfItemsToAdd; i++) {
+ newTodo.setValue(getTodoText("ja", i));
+ newTodo.dispatchEvent("change");
+ newTodo.enter("keypress");
+ }
+ }),
+ new BenchmarkTestStep("CompletingAllItems", (page) => {
+ const checkboxes = page.querySelectorAll(".toggle");
+ for (let i = 0; i < numberOfItemsToAdd; i++)
+ checkboxes[i].click();
+ }),
+ new BenchmarkTestStep("DeletingAllItems", (page) => {
+ const deleteButtons = page.querySelectorAll(".destroy");
+ for (let i = numberOfItemsToAdd - 1; i >= 0; i--)
+ deleteButtons[i].click();
+ }),
+ ],
+});
+
Suites.push({
name: "NewsSite-Next",
url: "resources/newssite/news-next/dist/index.html",