var aa=' HashAnchorStringItemRenderer',ba=' jsonly',ca=' swfonly',da='#ffeeee',ea='$ID0',fa='$ID1',ha='$ID2',ia='$ID3',ja='$ID4',ka='$ID5',la='$ID6',ma="' class='HashAnchorAnchor'>",na='.json',oa="<a href='#!",pa='?_escaped_fragment_=',qa='ASDoc',ra='ASDocClass',sa='ASDocClassAccessor',ta='ASDocClassAttribute',ua='ASDocClassData',va='ASDocClassEvents',wa='ASDocClassFunction',xa='ASDocClassMembers',ya='ASDocClassTags',Aa='ASDocMainView',Ba='ASDocMainView.AltBGRenderer',Ca='AlternatingBackgroundColorHashAnchorStringItemRenderer',
e='Array',Da='AttributeRenderer',Ea='Bindable',h='Boolean',Fa='Class',Ga='ClassPickerHashAnchorStringItemRenderer',Ha='Content-type',Ia='DataItemRenderer',Ja='Error #1034: Type Coercion failed: cannot convert ',Ka='Error #1126: Cannot change the length of a fixed Vector',La='EventDetailRenderer',Ma='EventDetails',Na='EventDispatcher',Oa='EventSummaryRenderer',Pa='Function',Qa='HashAnchorStringItemRenderer',Ra='MXMLItemRenderer',Sa='MethodDetailRenderer',Ta='MethodDetails',Ua='MethodSummaryRenderer',
k='Number',m='Object',Va='OptionalHashAnchorStringItemRenderer',Wa='ParameterRenderer',Xa='PropertyDetailRenderer',Ya='Signika',n='String',Za='StringItemRenderer',$a='SummaryRenderer',ab='Top Level',bb='Vector.<*>',cb='__NoChangeEvent__',p='_id',db='absolute',eb='application/x-www-form-urlencoded',gb='applicationModel',hb='array',ib='attributeList',jb='attributes',kb='auto',lb='backgroundImage',mb='baseName',nb='beads',ob='beadsAdded',pb='block',qb='bold',rb='border-box',sb='border-style:none',tb=
'center',ub='change',vb='changeHandler',wb='childrenAdded',q='class',xb='classList',r='className',yb='classesCompleteHandler',zb='click',Ab='complete',Bb='completeClassHandler',Cb='completeHandler',Db='completeInterfaceHandler',Eb='configCompleteHandler',Fb='constructorDetails',Gb='constructorList',Hb='controllers.ASDocController',Ib='createFromClass',Jb='currentClassChanged',Kb='currentDataChanged',Lb='currentPackage',Mb='currentPackageChanged',Nb='currentStateChange',Ob='data',Pb='dataChange',Qb=
'dataProvider',Rb='dataProviderChangeHandler',Sb='dataProviderChanged',Tb='deferredSizeHandler',Ub='description',Vb='destination',Wb='detailCaption',Xb='detailInfo',Zb='detailList',$b='detailsPane',ac='document',bc='eventTypeGroup',cc='explicitHeightChanged',dc='explicitWidthChanged',ec='findMemberDetail',fc='flexibleChild',gc='function',hc='getBoundingClientRect',ic='goog.events.BrowserEvent',jc='handleInitComplete',kc='heightChanged',lc='href',mc='htmlText',nc='httpResponseStatus',oc='iBeadModel',
pc='iItemRendererClassFactory',t='id',qc='idChanged',rc='inherit',sc='inheritance',tc='initBindings',uc='initComplete',vc='inline-block',u='int',v='interface',wc='itemClicked',xc='itemRenderer',yc='itemRendererCreated',zc='itemRollOut',Ac='itemRollOver',Bc='itemsDescriptorIndex',Cc='label',Dc='labelFieldChanged',Ec='layoutNeeded',Fc='leftSide',Gc='link',Hc='method',Ic='modelChanged',Jc='models.ASDocModel',Kc='monospace',Lc='mouseover',Mc='mxmlContent',Nc='none',Oc='number',Pc='obj',Qc='object',Rc=
'org.apache.royale.binding.ConstantBinding',Sc='org.apache.royale.binding.DataBindingBase',Tc='org.apache.royale.binding.GenericBinding',Uc='org.apache.royale.binding.ItemRendererDataBinding',Vc='org.apache.royale.binding.ItemRendererSimpleBinding',Wc='org.apache.royale.binding.PropertyWatcher',Xc='org.apache.royale.binding.SimpleBinding',Yc='org.apache.royale.binding.ViewDataBinding',Zc='org.apache.royale.binding.WatcherBase',$c='org.apache.royale.core.Application',ad='org.apache.royale.core.ApplicationBase',
bd='org.apache.royale.core.BeadViewBase',cd='org.apache.royale.core.CallLaterBead',dd='org.apache.royale.core.ClassFactory',ed='org.apache.royale.core.ContainerBase',fd='org.apache.royale.core.ContainerBaseStrandChildren',gd='org.apache.royale.core.DataContainerBase',hd='org.apache.royale.core.ElementWrapper',id='org.apache.royale.core.GroupBase',jd='org.apache.royale.core.HTMLElementWrapper',kd='org.apache.royale.core.IApplicationView',ld='org.apache.royale.core.IBead',md='org.apache.royale.core.IBeadController',
nd='org.apache.royale.core.IBeadLayout',od='org.apache.royale.core.IBeadModel',pd='org.apache.royale.core.IBeadView',qd='org.apache.royale.core.IBinding',rd='org.apache.royale.core.IBorderPaddingMarginValuesImpl',sd='org.apache.royale.core.ICSSImpl',td='org.apache.royale.core.IChild',ud='org.apache.royale.core.IContainer',vd='org.apache.royale.core.IContainerBaseStrandChildrenHost',wd='org.apache.royale.core.IContentViewHost',xd='org.apache.royale.core.IDataProviderItemRendererMapper',yd='org.apache.royale.core.IDataProviderModel',
zd='org.apache.royale.core.IDocument',Ad='org.apache.royale.core.IFactory',Bd='org.apache.royale.core.IFlexInfo',Cd='org.apache.royale.core.IId',Dd='org.apache.royale.core.IInitialViewApplication',Ed='org.apache.royale.core.IItemRenderer',Fd='org.apache.royale.core.IItemRendererClassFactory',Gd='org.apache.royale.core.IItemRendererParent',Hd='org.apache.royale.core.IItemRendererProvider',Id='org.apache.royale.core.ILayoutChild',Jd='org.apache.royale.core.ILayoutHost',Kd='org.apache.royale.core.ILayoutParent',
Md='org.apache.royale.core.ILayoutView',Nd='org.apache.royale.core.IListPresentationModel',Od='org.apache.royale.core.IMXMLDocument',Pd='org.apache.royale.core.IMeasurementBead',Qd='org.apache.royale.core.IParent',Rd='org.apache.royale.core.IParentIUIBase',Sd='org.apache.royale.core.IPopUpHost',Td='org.apache.royale.core.IPopUpHostParent',Ud='org.apache.royale.core.IRenderedObject',Vd='org.apache.royale.core.IRollOverModel',Wd='org.apache.royale.core.IRoyaleElement',Xd='org.apache.royale.core.IScrollingViewport',
Yd='org.apache.royale.core.ISelectableItemRenderer',Zd='org.apache.royale.core.ISelectionModel',$d='org.apache.royale.core.IState',ae='org.apache.royale.core.IStatesImpl',be='org.apache.royale.core.IStatesObject',ce='org.apache.royale.core.IStrand',de='org.apache.royale.core.IStrandWithModel',ee='org.apache.royale.core.IStrandWithModelView',fe='org.apache.royale.core.IStrandWithPresentationModel',ge='org.apache.royale.core.IStyleObject',he='org.apache.royale.core.IStyleableObject',ie='org.apache.royale.core.IUIBase',
je='org.apache.royale.core.IValuesImpl',ke='org.apache.royale.core.IViewport',le='org.apache.royale.core.IViewportModel',me='org.apache.royale.core.ItemRendererClassFactory',ne='org.apache.royale.core.LayoutBase',oe='org.apache.royale.core.SimpleCSSStyles',pe='org.apache.royale.core.SimpleCSSValuesImpl',qe='org.apache.royale.core.SimpleStatesImpl',re='org.apache.royale.core.Strand',se='org.apache.royale.core.UIBase',te='org.apache.royale.core.ValuesManager',ue='org.apache.royale.core.View',ve='org.apache.royale.core.ViewBase',
we='org.apache.royale.core.WrappedHTMLElement',xe='org.apache.royale.core.layout.EdgeData',ye='org.apache.royale.core.layout.LayoutData',ze='org.apache.royale.core.layout.MarginData',Ae='org.apache.royale.core.styles.BorderStyles',Be='org.apache.royale.events.BrowserEvent',Ce='org.apache.royale.events.CustomEvent',De='org.apache.royale.events.DetailEvent',Ee='org.apache.royale.events.ElementEvents',Fe='org.apache.royale.events.Event',Ge='org.apache.royale.events.EventDispatcher',He='org.apache.royale.events.IBrowserEvent',
Ie='org.apache.royale.events.IEventDispatcher',Je='org.apache.royale.events.IRoyaleEvent',Ke='org.apache.royale.events.ItemAddedEvent',Le='org.apache.royale.events.ItemClickedEvent',Me='org.apache.royale.events.ItemRemovedEvent',Ne='org.apache.royale.events.ItemRendererEvent',Oe='org.apache.royale.events.MouseEvent',Pe='org.apache.royale.events.ValueChangeEvent',Qe='org.apache.royale.events.ValueEvent',Re='org.apache.royale.events.utils.EventUtils',Se='org.apache.royale.events.utils.MouseEventConverter',
Te='org.apache.royale.geom.Point',Ue='org.apache.royale.geom.Size',Ve='org.apache.royale.html.CheckBox',We='org.apache.royale.html.Container',Xe='org.apache.royale.html.DataContainer',Ye='org.apache.royale.html.Group',Ze='org.apache.royale.html.Label',$e='org.apache.royale.html.List',af='org.apache.royale.html.MultilineLabel',bf='org.apache.royale.html.NodeElementBase',cf='org.apache.royale.html.PopUpList',df='org.apache.royale.html.Spacer',ef='org.apache.royale.html.TextInput',ff='org.apache.royale.html.TextNodeContainerBase',
gf='org.apache.royale.html.beads.ContainerView',hf='org.apache.royale.html.beads.DataContainerView',jf='org.apache.royale.html.beads.DataFieldProviderBead',kf='org.apache.royale.html.beads.DataItemRendererFactoryForArrayData',lf='org.apache.royale.html.beads.GroupView',mf='org.apache.royale.html.beads.IListView',nf='org.apache.royale.html.beads.ITextItemRenderer',of='org.apache.royale.html.beads.ListView',pf='org.apache.royale.html.beads.controllers.ItemRendererMouseController',qf='org.apache.royale.html.beads.controllers.ListSingleSelectionMouseController',
rf='org.apache.royale.html.beads.layouts.BasicLayout',sf='org.apache.royale.html.beads.layouts.HorizontalLayout',tf='org.apache.royale.html.beads.layouts.IOneFlexibleChildLayout',uf='org.apache.royale.html.beads.layouts.LayoutChangeNotifier',vf='org.apache.royale.html.beads.layouts.OneFlexibleChildHorizontalLayoutForOverflow',wf='org.apache.royale.html.beads.layouts.OneFlexibleChildVerticalLayoutForOverflow',xf='org.apache.royale.html.beads.layouts.VerticalFlexLayout',yf='org.apache.royale.html.beads.layouts.VerticalLayout',
zf='org.apache.royale.html.beads.models.ArraySelectionModel',Af='org.apache.royale.html.beads.models.DataProviderModel',Bf='org.apache.royale.html.beads.models.ListPresentationModel',Cf='org.apache.royale.html.beads.models.ViewportModel',Df='org.apache.royale.html.elements.A',Ef='org.apache.royale.html.elements.Div',Ff='org.apache.royale.html.elements.Img',Gf='org.apache.royale.html.supportClasses.CheckBoxIcon',Hf='org.apache.royale.html.supportClasses.DataItemRenderer',If='org.apache.royale.html.supportClasses.MXMLItemRenderer',
Jf='org.apache.royale.html.supportClasses.ScrollingViewport',Kf='org.apache.royale.html.supportClasses.StringItemRenderer',Lf='org.apache.royale.html.supportClasses.UIItemRendererBase',Mf='org.apache.royale.html.supportClasses.Viewport',Nf='org.apache.royale.net.HTTPConstants',Of='org.apache.royale.net.HTTPHeader',Pf='org.apache.royale.net.HTTPService',Qf='org.apache.royale.net.HTTPServiceBase',Rf='org.apache.royale.reflection.beads.JSONReviver',Sf='org.apache.royale.routing.EscapedFragmentBead',
eg='org.apache.royale.routing.HashChangeNotifierBead',fg='org.apache.royale.routing.HashChangeNotifierBeadWithTitle',gg='org.apache.royale.routing.URLParameterBead',hg='org.apache.royale.site.DocPage',ig='org.apache.royale.site.DocTagline',jg='org.apache.royale.site.DocTopBar',kg='org.apache.royale.site.SocialButtons',lg='org.apache.royale.site.TopMenu',mg='org.apache.royale.site.TopMenuBase',ng='org.apache.royale.site.TopMenuButton',og='org.apache.royale.states.AddItems',pg='org.apache.royale.states.ItemAndDescriptor',
qg='org.apache.royale.states.SetEventHandler',rg='org.apache.royale.states.SetProperty',sg='org.apache.royale.states.State',tg='org.apache.royale.utils.CSSUtils',ug='org.apache.royale.utils.MXMLDataInterpreter',vg='org.apache.royale.utils.PointUtils',wg='org.apache.royale.utils.StringPadder',xg='org.apache.royale.utils.StringTrimmer',yg='org.apache.royale.utils.StringUtil',zg='org.apache.royale.utils.Timer',Ag='org.apache.royale.utils.ViewSourceContextMenuOption',Bg='overrides',Cg='packageChanged',
Dg='packageList',Eg='packageListChanged',Fg='packageListPane',Gg='packageName',Hg='packagePaneList',Ig='packages',Jg='params',Kg='parentSizeChangedHandler',Lg='percentHeight',Mg='percentHeightChanged',Ng='percentWidth',Og='percentWidthChanged',Pg='position',Qg='property',Rg='propertyDetails',Sg='propertyName',Tg='propertyQNameTitle',Ug='propertyTypeGroup',Vg='propertyTypeLink',Wg='publicEventList',Xg='publicEvents',Yg='publicMethodList',Zg='publicMethods',$g='publicProperties',ah='publicPropertyList',
bh='px',ch='qname',w='readonly',y='readwrite',dh='relativeTo',eh='removeTag',fh='resizeHandler',gh='return',hh='returnhref',ih='rightSide',jh='rollOverIndexChanged',kh='rolloutHandler',lh='rolloverHandler',mh='sans-serif',nh='searchTI',oh='sectionLabel',ph='selectedHandler',qh='selectedIndexChanged',rh='selectedItemChanged',sh='short',th='shortDescription',uh='sizeChangeHandler',vh='sizeChanged',wh='solid',xh='static',yh='stopImmediatePropagation',zh='string',Ah='summaryDescription',Bh='summaryList',
Ch='summaryTypeLink',Dh='tagsCompleteHandler',Eh='target',z='text',Fh='textChange',Gh='titleGroup',Hh='topContainer',Ih='typeGroup',Jh='uint',Kh='updateProperty',Lh='valueChange',Mh='viewChangeHandler',Nh='viewChanged',Oh='visibleChanged',B='void',Ph='widthChanged',C='writeonly';function D(){return function(){}}function E(a){return function(b){this[a]=b}}function F(a){return function(){return this[a]}}function Qh(a){return function(){return a}}
var G,Rh=typeof Object.defineProperties==gc?Object.defineProperty:function(a,b,c){a!=Array.prototype&&a!=Object.prototype&&(a[b]=c.value)},Sh='undefined'!=typeof window&&window===this?this:'undefined'!=typeof global&&null!=global?global:this;function Th(a,b){if(b){var c=Sh;a=a.split('.');for(var d=0;d<a.length-1;d++){var f=a[d];f in c||(c[f]={});c=c[f]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&Rh(c,a,{configurable:!0,writable:!0,value:b})}}
function Uh(a){var b=0;return function(){return b<a.length?{done:!1,value:a[b++]}:{done:!0}}}function Vh(){Vh=D();Sh.Symbol||(Sh.Symbol=Wh)}var Wh=function(){var a=0;return function(b){return'jscomp_symbol_'+(b||'')+a++}}();function Xh(){Vh();var a=Sh.Symbol.iterator;a||(a=Sh.Symbol.iterator=Sh.Symbol('iterator'));typeof Array.prototype[a]!=gc&&Rh(Array.prototype,a,{configurable:!0,writable:!0,value:function(){return Yh(Uh(this))}});Xh=D()}
function Yh(a){Xh();a={next:a};a[Sh.Symbol.iterator]=function(){return this};return a}function Zh(a,b){Xh();a instanceof String&&(a+='');var c=0,d={next:function(){if(c<a.length){var f=c++;return{value:b(f,a[f]),done:!1}}d.next=function(){return{done:!0,value:void 0}};return d.next()}};d[Symbol.iterator]=function(){return d};return d}function $h(a){var b='undefined'!=typeof Symbol&&Symbol.iterator&&a[Symbol.iterator];return b?b.call(a):{next:Uh(a)}}
function ai(a,b){return Object.prototype.hasOwnProperty.call(a,b)}
Th('WeakMap',function(a){function b(a){this.ic=(l+=Math.random()+1).toString();if(a){a=$h(a);for(var b;!(b=a.next()).done;)b=b.value,this.set(b[0],b[1])}}function c(){}function d(a){ai(a,g)||Rh(a,g,{value:new c})}function f(a){var b=Object[a];b&&(Object[a]=function(a){if(a instanceof c)return a;d(a);return b(a)})}if(function(){if(!a||!Object.seal)return!1;try{var b=Object.seal({}),c=Object.seal({}),d=new a([[b,2],[c,3]]);if(2!=d.get(b)||3!=d.get(c))return!1;d.delete(b);d.set(c,4);return!d.has(b)&&
4==d.get(c)}catch(Q){return!1}}())return a;var g='$jscomp_hidden_'+Math.random();f('freeze');f('preventExtensions');f('seal');var l=0;b.prototype.set=function(a,b){d(a);if(!ai(a,g))throw Error('WeakMap key fail: '+a);a[g][this.ic]=b;return this};b.prototype.get=function(a){return ai(a,g)?a[g][this.ic]:void 0};b.prototype.has=function(a){return ai(a,g)&&ai(a[g],this.ic)};b.prototype.delete=function(a){return ai(a,g)&&ai(a[g],this.ic)?delete a[g][this.ic]:!1};return b});
Th('Map',function(a){function b(){var a={};return a.Ea=a.next=a.head=a}function c(a,b){var c=a.Ba;return Yh(function(){if(c){for(;c.head!=a.Ba;)c=c.Ea;for(;c.next!=c.head;)return c=c.next,{done:!1,value:b(c)};c=null}return{done:!0,value:void 0}})}function d(a,b){var c=b&&typeof b;c==Qc||c==gc?g.has(b)?c=g.get(b):(c=''+ ++l,g.set(b,c)):c='p_'+b;var d=a.Tb[c];if(d&&ai(a.Tb,c))for(a=0;a<d.length;a++){var f=d[a];if(b!==b&&f.key!==f.key||b===f.key)return{id:c,list:d,index:a,fa:f}}return{id:c,list:d,index:-1,
fa:void 0}}function f(a){this.Tb={};this.Ba=b();this.size=0;if(a){a=$h(a);for(var c;!(c=a.next()).done;)c=c.value,this.set(c[0],c[1])}}if(function(){if(!a||typeof a!=gc||!a.prototype.entries||typeof Object.seal!=gc)return!1;try{var b=Object.seal({x:4}),c=new a($h([[b,'s']]));if('s'!=c.get(b)||1!=c.size||c.get({x:4})||c.set({x:4},'t')!=c||2!=c.size)return!1;var d=c.entries(),f=d.next();if(f.done||f.value[0]!=b||'s'!=f.value[1])return!1;f=d.next();return f.done||4!=f.value[0].x||'t'!=f.value[1]||!d.next().done?
!1:!0}catch(za){return!1}}())return a;Xh();var g=new WeakMap;f.prototype.set=function(a,b){a=0===a?0:a;var c=d(this,a);c.list||(c.list=this.Tb[c.id]=[]);c.fa?c.fa.value=b:(c.fa={next:this.Ba,Ea:this.Ba.Ea,head:this.Ba,key:a,value:b},c.list.push(c.fa),this.Ba.Ea.next=c.fa,this.Ba.Ea=c.fa,this.size++);return this};f.prototype.delete=function(a){a=d(this,a);return a.fa&&a.list?(a.list.splice(a.index,1),a.list.length||delete this.Tb[a.id],a.fa.Ea.next=a.fa.next,a.fa.next.Ea=a.fa.Ea,a.fa.head=null,this.size--,
!0):!1};f.prototype.clear=function(){this.Tb={};this.Ba=this.Ba.Ea=b();this.size=0};f.prototype.has=function(a){return!!d(this,a).fa};f.prototype.get=function(a){return(a=d(this,a).fa)&&a.value};f.prototype.entries=function(){return c(this,function(a){return[a.key,a.value]})};f.prototype.keys=function(){return c(this,function(a){return a.key})};f.prototype.values=function(){return c(this,function(a){return a.value})};f.prototype.forEach=function(a,b){for(var c=this.entries(),d;!(d=c.next()).done;)d=
d.value,a.call(b,d[1],d[0],this)};f.prototype[Symbol.iterator]=f.prototype.entries;var l=0;return f});var bi=typeof Object.assign==gc?Object.assign:function(a,b){for(var c=1;c<arguments.length;c++){var d=arguments[c];if(d)for(var f in d)ai(d,f)&&(a[f]=d[f])}return a};Th('Object.assign',function(a){return a||bi});Th('Array.prototype.values',function(a){return a?a:function(){return Zh(this,function(a,c){return c})}});var ci=this;function di(a){return typeof a==zh}function ei(){}
function fi(a){var b=typeof a;if(b==Qc)if(a){if(a instanceof Array)return hb;if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if('[object Window]'==c)return Qc;if('[object Array]'==c||typeof a.length==Oc&&'undefined'!=typeof a.splice&&'undefined'!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable('splice'))return hb;if('[object Function]'==c||'undefined'!=typeof a.call&&'undefined'!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable('call'))return gc}else return'null';
else if(b==gc&&'undefined'==typeof a.call)return Qc;return b}function gi(a){var b=typeof a;return b==Qc&&null!=a||b==gc}var hi='closure_uid_'+(1E9*Math.random()>>>0),ii=0;function ji(a,b,c){return a.call.apply(a.bind,arguments)}
function ki(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}function li(a,b,c){li=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf('native code')?ji:ki;return li.apply(null,arguments)}
function H(a,b){a=a.split('.');var c=ci;a[0]in c||'undefined'==typeof c.execScript||c.execScript('var '+a[0]);for(var d;a.length&&(d=a.shift());)a.length||void 0===b?c=c[d]&&c[d]!==Object.prototype[d]?c[d]:c[d]={}:c[d]=b}function I(a,b){function c(){}c.prototype=b.prototype;a.w=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.Wp=function(a,c,g){for(var d=Array(arguments.length-2),f=2;f<arguments.length;f++)d[f-2]=arguments[f];return b.prototype[c].apply(a,d)}};function mi(a,b){for(var c in a)if(b.call(void 0,a[c],c,a))return!0;return!1}var ni='constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf'.split(' ');function oi(a,b){for(var c,d,f=1;f<arguments.length;f++){d=arguments[f];for(c in d)a[c]=d[c];for(var g=0;g<ni.length;g++)c=ni[g],Object.prototype.hasOwnProperty.call(d,c)&&(a[c]=d[c])}};var pi='closure_listenable_'+(1E6*Math.random()|0);function qi(a){return!(!a||!a[pi])}var ri=0;function si(a,b,c,d,f){this.listener=a;this.proxy=null;this.src=b;this.type=c;this.capture=!!d;this.hc=f;this.key=++ri;this.Hb=this.Vc=!1}function ti(a){a.Hb=!0;a.listener=null;a.proxy=null;a.src=null;a.hc=null};var ui=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if(di(a))return di(b)&&1==b.length?a.indexOf(b,0):-1;for(var c=0;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1};function vi(a){this.src=a;this.V={};this.ud=0}vi.prototype.add=function(a,b,c,d,f){var g=a.toString();a=this.V[g];a||(a=this.V[g]=[],this.ud++);var l=wi(a,b,d,f);-1<l?(b=a[l],c||(b.Vc=!1)):(b=new si(b,this.src,g,!!d,f),b.Vc=c,a.push(b));return b};vi.prototype.remove=function(a,b,c,d){a=a.toString();if(!(a in this.V))return!1;var f=this.V[a];b=wi(f,b,c,d);return-1<b?(ti(f[b]),Array.prototype.splice.call(f,b,1),0==f.length&&(delete this.V[a],this.ud--),!0):!1};
function xi(a,b){var c=b.type;if(c in a.V){var d=a.V[c],f=ui(d,b),g;(g=0<=f)&&Array.prototype.splice.call(d,f,1);g&&(ti(b),0==a.V[c].length&&(delete a.V[c],a.ud--))}}vi.prototype.Md=function(a,b,c,d){a=this.V[a.toString()];var f=-1;a&&(f=wi(a,b,c,d));return-1<f?a[f]:null};vi.prototype.ad=function(a,b){var c=void 0!==a,d=c?a.toString():'',f=void 0!==b;return mi(this.V,function(a){for(var g=0;g<a.length;++g)if(!(c&&a[g].type!=d||f&&a[g].capture!=b))return!0;return!1})};
function wi(a,b,c,d){for(var f=0;f<a.length;++f){var g=a[f];if(!g.Hb&&g.listener==b&&g.capture==!!c&&g.hc==d)return f}return-1};function yi(){0!=zi&&(this[hi]||(this[hi]=++ii))}var zi=0;function Ai(a,b){this.type=a;this.currentTarget=this.target=b;this.defaultPrevented=this.ob=!1;this.ki=!0}Ai.prototype.stopPropagation=function(){this.ob=!0};Ai.prototype.preventDefault=function(){this.defaultPrevented=!0;this.ki=!1};var Bi=String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\s\xa0]*([\s\S]*?)[\s\xa0]*$/.exec(a)[1]};function Ci(a,b){return-1!=a.indexOf(b)}function Di(a,b){return a<b?-1:a>b?1:0};function Ei(a){Ei[' '](a);return a}Ei[' ']=ei;var Fi;a:{var Gi=ci.navigator;if(Gi){var Hi=Gi.userAgent;if(Hi){Fi=Hi;break a}}Fi=''};var Ii=Ci(Fi,'Opera'),Ji=Ci(Fi,'Trident')||Ci(Fi,'MSIE'),Ki=Ci(Fi,'Edge'),Li=Ci(Fi,'Gecko')&&!(Ci(Fi.toLowerCase(),'webkit')&&!Ci(Fi,'Edge'))&&!(Ci(Fi,'Trident')||Ci(Fi,'MSIE'))&&!Ci(Fi,'Edge'),Mi=Ci(Fi.toLowerCase(),'webkit')&&!Ci(Fi,'Edge'),Ni=Ci(Fi,'Macintosh');function Oi(){var a=ci.document;return a?a.documentMode:void 0}var Pi;
a:{var Qi='',Ri=function(){var a=Fi;if(Li)return/rv:([^\);]+)(\)|;)/.exec(a);if(Ki)return/Edge\/([\d\.]+)/.exec(a);if(Ji)return/\b(?:MSIE|rv)[: ]([^\);]+)(\)|;)/.exec(a);if(Mi)return/WebKit\/(\S+)/.exec(a);if(Ii)return/(?:Version)[ \/]?(\S+)/.exec(a)}();Ri&&(Qi=Ri?Ri[1]:'');if(Ji){var Si=Oi();if(null!=Si&&Si>parseFloat(Qi)){Pi=String(Si);break a}}Pi=Qi}var Ti={},Ui;var Vi=ci.document;Ui=Vi&&Ji?Oi()||('CSS1Compat'==Vi.compatMode?parseInt(Pi,10):5):void 0;var Wi=!Ji||9<=Number(Ui),Xi=!Ji||9<=Number(Ui),Yi;
if(Yi=Ji){var Zi;if(Object.prototype.hasOwnProperty.call(Ti,'9'))Zi=Ti['9'];else{for(var $i,aj=0,bj=Bi(String(Pi)).split('.'),cj=Bi('9').split('.'),dj=Math.max(bj.length,cj.length),ej=0;0==aj&&ej<dj;ej++){var fj=bj[ej]||'',gj=cj[ej]||'';do{var hj=/(\d*)(\D*)(.*)/.exec(fj)||['','','',''],ij=/(\d*)(\D*)(.*)/.exec(gj)||['','','',''];if(0==hj[0].length&&0==ij[0].length)break;aj=Di(0==hj[1].length?0:parseInt(hj[1],10),0==ij[1].length?0:parseInt(ij[1],10))||Di(0==hj[2].length,0==ij[2].length)||Di(hj[2],
ij[2]);fj=hj[3];gj=ij[3]}while(0==aj)}$i=0<=aj;Zi=Ti['9']=$i}Yi=!Zi}var jj=Yi,kj=function(){if(!ci.addEventListener||!Object.defineProperty)return!1;var a=!1,b=Object.defineProperty({},'passive',{get:function(){a=!0}});try{ci.addEventListener('test',ei,b),ci.removeEventListener('test',ei,b)}catch(c){}return a}();function lj(a,b){Ai.call(this,a?a.type:'');this.relatedTarget=this.currentTarget=this.target=null;this.button=this.screenY=this.screenX=this.clientY=this.clientX=this.offsetY=this.offsetX=0;this.key='';this.charCode=this.keyCode=0;this.metaKey=this.shiftKey=this.altKey=this.ctrlKey=!1;this.state=null;this.platformModifierKey=!1;this.pointerId=0;this.pointerType='';this.Ha=null;a&&this.ta(a,b)}I(lj,Ai);var mj=[1,4,2],nj={2:'touch',3:'pen',4:'mouse'};G=lj.prototype;
G.ta=function(a,b){var c=this.type=a.type,d=a.changedTouches?a.changedTouches[0]:null;this.target=a.target||a.srcElement;this.currentTarget=b;if(b=a.relatedTarget){if(Li){a:{try{Ei(b.nodeName);var f=!0;break a}catch(g){}f=!1}f||(b=null)}}else c==Lc?b=a.fromElement:'mouseout'==c&&(b=a.toElement);this.relatedTarget=b;null===d?(this.offsetX=Mi||void 0!==a.offsetX?a.offsetX:a.layerX,this.offsetY=Mi||void 0!==a.offsetY?a.offsetY:a.layerY,this.clientX=void 0!==a.clientX?a.clientX:a.pageX,this.clientY=void 0!==
a.clientY?a.clientY:a.pageY,this.screenX=a.screenX||0,this.screenY=a.screenY||0):(this.clientX=void 0!==d.clientX?d.clientX:d.pageX,this.clientY=void 0!==d.clientY?d.clientY:d.pageY,this.screenX=d.screenX||0,this.screenY=d.screenY||0);this.button=a.button;this.keyCode=a.keyCode||0;this.key=a.key||'';this.charCode=a.charCode||('keypress'==c?a.keyCode:0);this.ctrlKey=a.ctrlKey;this.altKey=a.altKey;this.shiftKey=a.shiftKey;this.metaKey=a.metaKey;this.platformModifierKey=Ni?a.metaKey:a.ctrlKey;this.pointerId=
a.pointerId||0;this.pointerType=di(a.pointerType)?a.pointerType:nj[a.pointerType]||'';this.state=a.state;this.Ha=a;a.defaultPrevented&&this.preventDefault()};G.bd=function(a){return Wi?this.Ha.button==a:this.type==zb?0==a:!!(this.Ha.button&mj[a])};G.ze=function(){return this.bd(0)&&!(Mi&&Ni&&this.ctrlKey)};G.stopPropagation=function(){lj.w.stopPropagation.call(this);this.Ha.stopPropagation?this.Ha.stopPropagation():this.Ha.cancelBubble=!0};
G.preventDefault=function(){lj.w.preventDefault.call(this);var a=this.Ha;if(a.preventDefault)a.preventDefault();else if(a.returnValue=!1,jj)try{if(a.ctrlKey||112<=a.keyCode&&123>=a.keyCode)a.keyCode=-1}catch(b){}};G.za=F('Ha');var oj='closure_lm_'+(1E6*Math.random()|0),pj={},qj=0;function rj(a,b,c,d,f){if(d&&d.once)sj(a,b,c,d,f);else if(fi(b)==hb)for(var g=0;g<b.length;g++)rj(a,b[g],c,d,f);else c=tj(c),qi(a)?a.Ga.add(String(b),c,!1,gi(d)?!!d.capture:!!d,f):uj(a,b,c,!1,d,f)}
function uj(a,b,c,d,f,g){if(!b)throw Error('Invalid event type');var l=gi(f)?!!f.capture:!!f,x=vj(a);x||(a[oj]=x=new vi(a));c=x.add(b,c,d,l,g);if(!c.proxy){d=wj();c.proxy=d;d.src=a;d.listener=c;if(a.addEventListener)kj||(f=l),void 0===f&&(f=!1),a.addEventListener(b.toString(),d,f);else if(a.attachEvent)a.attachEvent(xj(b.toString()),d);else if(a.addListener&&a.removeListener)a.addListener(d);else throw Error('addEventListener and attachEvent are unavailable.');qj++}}
function wj(){var a=yj,b=Xi?function(c){return a.call(b.src,b.listener,c)}:function(c){c=a.call(b.src,b.listener,c);if(!c)return c};return b}function sj(a,b,c,d,f){if(fi(b)==hb)for(var g=0;g<b.length;g++)sj(a,b[g],c,d,f);else c=tj(c),qi(a)?a.Ga.add(String(b),c,!0,gi(d)?!!d.capture:!!d,f):uj(a,b,c,!0,d,f)}function zj(a,b,c,d,f){if(fi(b)==hb)for(var g=0;g<b.length;g++)zj(a,b[g],c,d,f);else d=gi(d)?!!d.capture:!!d,c=tj(c),qi(a)?a.Ga.remove(String(b),c,d,f):a&&(a=vj(a))&&(b=a.Md(b,c,d,f))&&Aj(b)}
function Aj(a){if(typeof a!=Oc&&a&&!a.Hb){var b=a.src;if(qi(b))xi(b.Ga,a);else{var c=a.type,d=a.proxy;b.removeEventListener?b.removeEventListener(c,d,a.capture):b.detachEvent?b.detachEvent(xj(c),d):b.addListener&&b.removeListener&&b.removeListener(d);qj--;(c=vj(b))?(xi(c,a),0==c.ud&&(c.src=null,b[oj]=null)):ti(a)}}}function Bj(a,b){if(qi(a))return a.ad(b,void 0);a=vj(a);return!!a&&a.ad(b,void 0)}function xj(a){return a in pj?pj[a]:pj[a]='on'+a}
function Cj(a,b,c,d){var f=!0;if(a=vj(a))if(b=a.V[b.toString()])for(b=b.concat(),a=0;a<b.length;a++){var g=b[a];g&&g.capture==c&&!g.Hb&&(g=Dj(g,d),f=f&&!1!==g)}return f}function Dj(a,b){var c=a.listener,d=a.hc||a.src;a.Vc&&Aj(a);return c.call(d,b)}
function yj(a,b){if(a.Hb)return!0;if(!Xi){if(!b)a:{b=['window','event'];for(var c=ci,d=0;d<b.length;d++)if(c=c[b[d]],null==c){b=null;break a}b=c}d=b;b=new lj(d,this);c=!0;if(!(0>d.keyCode||void 0!=d.returnValue)){a:{var f=!1;if(0==d.keyCode)try{d.keyCode=-1;break a}catch(l){f=!0}if(f||void 0==d.returnValue)d.returnValue=!0}d=[];for(f=b.currentTarget;f;f=f.parentNode)d.push(f);a=a.type;for(f=d.length-1;!b.ob&&0<=f;f--){b.currentTarget=d[f];var g=Cj(d[f],a,!0,b);c=c&&g}for(f=0;!b.ob&&f<d.length;f++)b.currentTarget=
d[f],g=Cj(d[f],a,!1,b),c=c&&g}return c}return Dj(a,new lj(b,this))}function vj(a){a=a[oj];return a instanceof vi?a:null}var Ej='__closure_events_fn_'+(1E9*Math.random()>>>0);function tj(a){if(fi(a)==gc)return a;a[Ej]||(a[Ej]=function(b){return a.handleEvent(b)});return a[Ej]};function Fj(){yi.call(this);this.Ga=new vi(this);this.Ji=this}I(Fj,yi);Fj.prototype[pi]=!0;G=Fj.prototype;G.addEventListener=function(a,b,c,d){rj(this,a,b,c,d)};G.removeEventListener=function(a,b,c,d){zj(this,a,b,c,d)};G.dispatchEvent=function(a){return Gj(this.Ji,a,void 0)};
function Hj(a,b,c,d){b=a.Ga.V[String(b)];if(!b)return!0;b=b.concat();for(var f=!0,g=0;g<b.length;++g){var l=b[g];if(l&&!l.Hb&&l.capture==c){var x=l.listener,A=l.hc||l.src;l.Vc&&xi(a.Ga,l);f=!1!==x.call(A,d)&&f}}return f&&0!=d.ki}G.Md=function(a,b,c,d){return this.Ga.Md(String(a),b,c,d)};G.ad=function(a,b){return this.Ga.ad(void 0!==a?String(a):void 0,b)};
function Gj(a,b,c){var d=b.type||b;if(di(b))b=new Ai(b,a);else if(b instanceof Ai)b.target=b.target||a;else{var f=b;b=new Ai(d,a);oi(b,f)}f=!0;if(c)for(var g=c.length-1;!b.ob&&0<=g;g--){var l=b.currentTarget=c[g];f=Hj(l,d,!0,b)&&f}b.ob||(l=b.currentTarget=a,f=Hj(l,d,!0,b)&&f,b.ob||(f=Hj(l,d,!1,b)&&f));if(c)for(g=0;!b.ob&&g<c.length;g++)l=b.currentTarget=c[g],f=Hj(l,d,!1,b)&&f;return f};function Ij(){}H(Ie,Ij);Ij.prototype.addEventListener=D();Ij.prototype.addEventListener=Ij.prototype.addEventListener;Ij.prototype.removeEventListener=D();Ij.prototype.removeEventListener=Ij.prototype.removeEventListener;Ij.prototype.fb=D();Ij.prototype.hasEventListener=Ij.prototype.fb;Ij.prototype.dispatchEvent=D();Ij.prototype.dispatchEvent=Ij.prototype.dispatchEvent;Ij.prototype.i={names:[{name:'IEventDispatcher',j:Ie,kind:v}]};
Ij.prototype.h=function(){return{l:function(){return{}},methods:function(){return{addEventListener:{type:B,g:Ie,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:Pa,optional:!1},{index:3,type:h,optional:!0},{index:4,type:m,optional:!0}]}},removeEventListener:{type:B,g:Ie,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:Pa,optional:!1},{index:3,type:h,optional:!0},{index:4,type:m,optional:!0}]}},hasEventListener:{type:h,g:Ie,parameters:function(){return[{index:1,
type:n,optional:!1}]}},dispatchEvent:{type:h,g:Ie,parameters:function(){return[{index:1,type:m,optional:!1}]}}}}}};Ij.prototype.h.m=10;function Jj(){}H(ld,Jj);Jj.prototype.i={names:[{name:'IBead',j:ld,kind:v}]};Jj.prototype.h=function(){return{l:function(){return{strand:{type:ce,access:C,g:ld}}},methods:function(){return{}}}};Jj.prototype.h.m=10;function Kj(){}H(od,Kj);Kj.prototype.i={names:[{name:'IBeadModel',j:od,kind:v}],s:[Jj,Ij]};Kj.prototype.h=function(){return{l:function(){return{}},methods:function(){return{}}}};Kj.prototype.h.m=10;function Lj(){}H(yd,Lj);Lj.prototype.i={names:[{name:'IDataProviderModel',j:yd,kind:v}],s:[Ij,Kj]};Lj.prototype.h=function(){return{l:function(){return{dataProvider:{type:m,access:y,g:yd},labelField:{type:n,access:y,g:yd}}},methods:function(){return{}}}};Lj.prototype.h.m=10;function Mj(){}H(Bd,Mj);Mj.prototype.info=D();Mj.prototype.info=Mj.prototype.info;Mj.prototype.i={names:[{name:'IFlexInfo',j:Bd,kind:v}]};Mj.prototype.h=function(){return{l:function(){return{}},methods:function(){return{info:{type:m,g:Bd}}}}};Mj.prototype.h.m=10;function Nj(){}H(ce,Nj);Nj.prototype.I=D();Nj.prototype.addBead=Nj.prototype.I;Nj.prototype.aa=D();Nj.prototype.getBeadByType=Nj.prototype.aa;Nj.prototype.pb=D();Nj.prototype.removeBead=Nj.prototype.pb;Nj.prototype.i={names:[{name:'IStrand',j:ce,kind:v}]};
Nj.prototype.h=function(){return{l:function(){return{}},methods:function(){return{addBead:{type:B,g:ce,parameters:function(){return[{index:1,type:ld,optional:!1}]}},getBeadByType:{type:ld,g:ce,parameters:function(){return[{index:1,type:Fa,optional:!1}]}},removeBead:{type:ld,g:ce,parameters:function(){return[{index:1,type:ld,optional:!1}]}}}}}};Nj.prototype.h.m=10;function J(a){Fj.call(this);this.uh=('undefined'!==typeof a?a:null)||this}I(J,Fj);H(Ge,J);J.prototype.fb=function(a){return Bj(this,a)};J.prototype.hasEventListener=J.prototype.fb;J.prototype.dispatchEvent=function(a){try{if(a)typeof a==zh?(a=new K(''+a),a.target=this.uh):Eh in a&&(a.target=this.uh);else return!1;return J.w.dispatchEvent.apply(this,[a])}catch(b){if(b.name!=yh)throw b;}return!1};J.prototype.dispatchEvent=J.prototype.dispatchEvent;J.prototype.toString=Qh(Na);J.prototype.toString=J.prototype.toString;
J.prototype.i={names:[{name:Na,j:Ge,kind:q}],s:[Ij]};J.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{EventDispatcher:{type:'',g:Ge,parameters:function(){return[{index:1,type:Ie,optional:!0}]}},hasEventListener:{type:h,g:Ge,parameters:function(){return[{index:1,type:n,optional:!1}]}},dispatchEvent:{type:h,g:Ge,parameters:function(){return[{index:1,type:m,optional:!1}]}},toString:{type:n,g:Ge}}}}};J.prototype.h.m=10;function Oj(){J.call(this)}var Pj;I(Oj,J);H(jd,Oj);function Qj(a,b){var c=b.za();var d=Rj[c.constructor.name];c=d?d.convert(c):new L;c.yb(b);return!!Pj(a,c)}H('org.apache.royale.core.HTMLElementWrapper.fireListenerOverride',Qj);var Rj={};H('org.apache.royale.core.HTMLElementWrapper.converterMap',Rj);function Sj(){Pj=Dj;Dj=Qj;return!0}H('org.apache.royale.core.HTMLElementWrapper.installOverride',Sj);Oj.prototype.I=function(a){this.Oa||(this.Oa=[]);this.Oa.push(a);M(a,Kj)&&(this.Mb=a);a.strand=this};
Oj.prototype.addBead=Oj.prototype.I;Oj.prototype.aa=function(a){var b;if(!this.Oa)return null;var c=this.Oa.length>>>0;for(b=0;b<c;b++){var d=this.Oa[b];if(M(d,a))return d}return null};Oj.prototype.getBeadByType=Oj.prototype.aa;Oj.prototype.pb=function(a){var b;var c=this.Oa.length>>>0;for(b=0;b<c;b++){var d=this.Oa[b];if(a===d)return this.Oa.splice(b,1),a.strand=null,a}return null};Oj.prototype.removeBead=Oj.prototype.pb;Oj.prototype.addEventListener=function(a,b){rj(Tj(this,a),a,b)};
Oj.prototype.addEventListener=Oj.prototype.addEventListener;Oj.prototype.removeEventListener=function(a,b){zj(Tj(this,a),a,b)};Oj.prototype.removeEventListener=Oj.prototype.removeEventListener;function Tj(a,b){var c=a;Uj[b]&&(c=a.element);return c}Oj.prototype.fb=function(a){return Bj(Tj(this,a),a)};Oj.prototype.hasEventListener=Oj.prototype.fb;
Oj.prototype.dispatchEvent=function(a){if(typeof a===zh){var b=a;a===ub&&(a=Vj(b,!!a.bubbles))}else b=O(a.type),Uj[b]&&(a=Vj(b,!!a.bubbles));b=Tj(this,b);return a.bubbles?this.Rg(b,a):b==this?Oj.w.dispatchEvent.apply(this,[a]):!!b.dispatchEvent(a)};Oj.prototype.dispatchEvent=Oj.prototype.dispatchEvent;Oj.prototype.Rg=function(a,b){for(var c=[],d=a.parent;null!=d;)c.push(d),d=d.parent;return Gj(a,b,c)};Oj.prototype.dispatchBubblingEvent=Oj.prototype.Rg;Oj.prototype.Yd=F('lh');
Oj.prototype.sf=function(a){this.lh=a;this.lh.royale_wrapper=this};Oj.prototype.ac=function(){if(null==this.Mb){var a=new (Wj.valuesImpl.ba(this,oc));this.I(a)}return this.Mb};Oj.prototype.Bc=function(a){this.Mb!=a&&(M(a,Jj)?this.I(a):this.Mb=a,this.dispatchEvent(new K(Ic)))};Object.defineProperties(Oj.prototype,{element:{get:Oj.prototype.Yd,set:Oj.prototype.sf},model:{get:Oj.prototype.ac,set:Oj.prototype.Bc}});var Xj=Sj();Oj.prototype.i={names:[{name:'HTMLElementWrapper',j:jd,kind:q}],s:[Nj]};
Oj.prototype.h=function(){return{o:function(){return{'|converterMap':{type:m,u:function(a){return void 0!==a?Rj=a:Rj}},'|googFireListener':{type:Pa,u:function(a){return void 0!==a?Pj=a:Pj}},'|installedOverride':{type:h,u:function(a){return void 0!==a?Xj=a:Xj}}}},l:function(){return{element:{type:we,access:y,g:jd},model:{type:m,access:y,g:jd,W:function(){return[{name:Ea,O:[{key:'',value:Ic}]}]}}}},methods:function(){return{'|fireListenerOverride':{type:h,g:jd,parameters:function(){return[{index:1,
type:m,optional:!1},{index:2,type:ic,optional:!1}]}},'|installOverride':{type:h,g:jd},addBead:{type:B,g:jd,parameters:function(){return[{index:1,type:ld,optional:!1}]}},getBeadByType:{type:ld,g:jd,parameters:function(){return[{index:1,type:Fa,optional:!1}]}},removeBead:{type:ld,g:jd,parameters:function(){return[{index:1,type:ld,optional:!1}]}},addEventListener:{type:B,g:jd,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:Pa,optional:!1},{index:3,type:h,optional:!0},{index:4,
type:m,optional:!0}]}},removeEventListener:{type:B,g:jd,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:Pa,optional:!1},{index:3,type:h,optional:!0},{index:4,type:m,optional:!0}]}},hasEventListener:{type:h,g:jd,parameters:function(){return[{index:1,type:n,optional:!1}]}},dispatchEvent:{type:h,g:jd,parameters:function(){return[{index:1,type:m,optional:!1}]}},dispatchBubblingEvent:{type:h,g:jd,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:m,optional:!1}]}}}}}};
Oj.prototype.h.m=10;function Yj(){J.call(this)}I(Yj,Oj);H(ad,Yj);Yj.prototype.info=F('eq');Yj.prototype.info=Yj.prototype.info;Yj.prototype.qb=function(a,b){this.mm!=a&&(this.mm=a,this.element.style.height=a.toString()+bh,'undefined'!==typeof b&&b||this.dispatchEvent(new K(kc)))};Yj.prototype.setHeight=Yj.prototype.qb;Yj.prototype.Sa=function(a,b){this.nm!=a&&(this.nm=a,this.element.style.width=a.toString()+bh,'undefined'!==typeof b&&b||this.dispatchEvent(new K(Ph)))};Yj.prototype.setWidth=Yj.prototype.Sa;G=Yj.prototype;
G.fc=function(){var a=this.element.style.width;a=null==a?NaN:Zj(a,NaN);isNaN(a)&&(a=this.element.offsetWidth,0===a&&0!==this.element.scrollWidth&&(a=this.element.scrollWidth));return a};G.Ec=function(a){this.explicitWidth!=a&&(this.explicitWidth=a);this.Sa(a)};G.be=function(){var a=this.element.style.height;a=null==a?NaN:Zj(a,NaN);isNaN(a)&&(a=this.element.offsetHeight,0===a&&0!==this.element.scrollHeight&&(a=this.element.scrollHeight));return a};
G.wf=function(a){this.explicitHeight!=a&&(this.explicitHeight=a);this.qb(a)};G.$d=F('Le');G.uf=function(a){this.Le!=a&&(isNaN(a)||(this.ih=NaN),this.Le=a,this.dispatchEvent(new K(dc)))};G.Zd=F('Ke');G.tf=function(a){this.Ke!=a&&(isNaN(a)||(this.hh=NaN),this.Ke=a,this.dispatchEvent(new K(cc)))};G.ie=F('ih');G.Bf=function(a){this.ih=a;this.element.style.width=a.toString()+'%';isNaN(a)||(this.Le=NaN);this.dispatchEvent(new K(Og))};G.he=F('hh');
G.Af=function(a){this.hh=a;this.element.style.height=a.toString()+'%';isNaN(a)||(this.Ke=NaN);this.dispatchEvent(new K(Mg))};Object.defineProperties(Yj.prototype,{width:{get:Yj.prototype.fc,set:Yj.prototype.Ec},height:{get:Yj.prototype.be,set:Yj.prototype.wf},explicitWidth:{get:Yj.prototype.$d,set:Yj.prototype.uf},explicitHeight:{get:Yj.prototype.Zd,set:Yj.prototype.tf},percentWidth:{get:Yj.prototype.ie,set:Yj.prototype.Bf},percentHeight:{get:Yj.prototype.he,set:Yj.prototype.Af}});
Yj.prototype.i={names:[{name:'ApplicationBase',j:ad,kind:q}],s:[Mj]};
Yj.prototype.h=function(){return{o:function(){return{}},l:function(){return{width:{type:k,access:y,g:ad,W:function(){return[{name:Ea,O:[{key:'',value:Ph}]}]}},height:{type:k,access:y,g:ad,W:function(){return[{name:Ea,O:[{key:'',value:kc}]}]}},explicitWidth:{type:k,access:y,g:ad},explicitHeight:{type:k,access:y,g:ad},percentWidth:{type:k,access:y,g:ad},percentHeight:{type:k,access:y,g:ad}}},methods:function(){return{ApplicationBase:{type:'',g:ad},info:{type:m,g:ad},setHeight:{type:B,g:ad,parameters:function(){return[{index:1,
type:k,optional:!1},{index:2,type:h,optional:!0}]}},setWidth:{type:B,g:ad,parameters:function(){return[{index:1,type:k,optional:!1},{index:2,type:h,optional:!0}]}}}}}};Yj.prototype.h.m=10;function ak(){}H(Dd,ak);ak.prototype.i={names:[{name:'IInitialViewApplication',j:Dd,kind:v}],s:[Ij]};ak.prototype.h=function(){return{l:function(){return{initialView:{type:kd,access:w,g:Dd},element:{type:we,access:w,g:Dd}}},methods:function(){return{}}}};ak.prototype.h.m=10;function bk(){J.call(this)}I(bk,J);H(eg,bk);bk.prototype.mn=function(){this.dispatchEvent(new K('hashChange'))};bk.prototype.v=function(){window.addEventListener('hashchange',P(this.mn,this,'hashChangeHandler'))};bk.prototype.Nj=function(){return location.hash};Object.defineProperties(bk.prototype,{strand:{set:bk.prototype.v},hash:{get:bk.prototype.Nj}});bk.prototype.i={names:[{name:'HashChangeNotifierBead',j:eg,kind:q}],s:[Jj]};
bk.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:eg},hash:{type:n,access:w,g:eg}}},methods:function(){return{HashChangeNotifierBead:{type:'',g:eg}}}}};bk.prototype.h.m=10;function ck(){J.call(this)}I(ck,J);H(re,ck);ck.prototype.I=function(a){this.Eb||(this.Eb=new (dk(ld)));this.Eb.push(a);M(a,Kj)&&(this.Re=a);a.strand=this};ck.prototype.addBead=ck.prototype.I;ck.prototype.aa=function(a){var b=this.Eb,c;for(c in b){var d=b[c];if(M(d,a))return d}return null};ck.prototype.getBeadByType=ck.prototype.aa;ck.prototype.pb=function(a){for(var b=this.Eb.length>>0,c=0;c<b;c++){var d=this.Eb[c];if(d==a)return this.Eb.splice(c,1),d}return null};ck.prototype.removeBead=ck.prototype.pb;
ck.prototype.ac=function(){null==this.Re&&this.I(new (Wj.valuesImpl.ba(this,oc)));return this.Re};ck.prototype.Bc=function(a){this.Re!=a&&(this.I(a),this.dispatchEvent(new K(Ic)))};ck.prototype.bb=F('ph');ck.prototype.tb=function(a){this.ph!=a&&(this.ph=a,this.dispatchEvent(new K(qc)))};Object.defineProperties(ck.prototype,{model:{get:ck.prototype.ac,set:ck.prototype.Bc},id:{get:ck.prototype.bb,set:ck.prototype.tb}});ck.prototype.i={names:[{name:'Strand',j:re,kind:q}],s:[Nj]};
ck.prototype.h=function(){return{o:function(){return{beads:{type:e,u:function(a,b){return void 0!==b?a.beads=b:a.beads}}}},l:function(){return{model:{type:od,access:y,g:re},id:{type:n,access:y,g:re}}},methods:function(){return{Strand:{type:'',g:re},addBead:{type:B,g:re,parameters:function(){return[{index:1,type:ld,optional:!1}]}},getBeadByType:{type:ld,g:re,parameters:function(){return[{index:1,type:Fa,optional:!1}]}},removeBead:{type:ld,g:re,parameters:function(){return[{index:1,type:ld,optional:!1}]}}}}}};
ck.prototype.h.m=10;function ek(){}H(Wd,ek);ek.prototype.i={names:[{name:'IRoyaleElement',j:Wd,kind:v}]};ek.prototype.h=function(){return{l:function(){return{}},methods:function(){return{}}}};ek.prototype.h.m=10;function fk(){}H(he,fk);fk.prototype.i={names:[{name:'IStyleableObject',j:he,kind:v}],s:[Ij]};fk.prototype.h=function(){return{l:function(){return{className:{type:n,access:y,g:he},id:{type:n,access:w,g:he},style:{type:m,access:w,g:he}}},methods:function(){return{}}}};fk.prototype.h.m=10;function gk(){}H(de,gk);gk.prototype.i={names:[{name:'IStrandWithModel',j:de,kind:v}],s:[Nj]};gk.prototype.h=function(){return{l:function(){return{model:{type:m,access:w,g:de}}},methods:function(){return{}}}};gk.prototype.h.m=10;function hk(){}H(ee,hk);hk.prototype.i={names:[{name:'IStrandWithModelView',j:ee,kind:v}],s:[gk]};hk.prototype.h=function(){return{l:function(){return{view:{type:pd,access:w,g:ee}}},methods:function(){return{}}}};hk.prototype.h.m=10;function ik(){}H(Ud,ik);ik.prototype.i={names:[{name:'IRenderedObject',j:Ud,kind:v}]};ik.prototype.h=function(){return{l:function(){return{element:{type:we,access:w,g:Ud}}},methods:function(){return{}}}};ik.prototype.h.m=10;function jk(){}H(td,jk);jk.prototype.i={names:[{name:'IChild',j:td,kind:v}],s:[ik]};jk.prototype.h=function(){return{l:function(){return{parent:{type:Qd,access:w,g:td},positioner:{type:we,access:w,g:td}}},methods:function(){return{}}}};jk.prototype.h.m=10;function kk(){}H(ie,kk);kk.prototype.C=D();kk.prototype.i={names:[{name:'IUIBase',j:ie,kind:v}],s:[Nj,Ij,jk]};kk.prototype.h=function(){return{l:function(){return{alpha:{type:k,access:y,g:ie},x:{type:k,access:y,g:ie},y:{type:k,access:y,g:ie},width:{type:k,access:y,g:ie},height:{type:k,access:y,g:ie},visible:{type:h,access:y,g:ie},topMostEventDispatcher:{type:Ie,access:w,g:ie},positioner:{type:we,access:C,g:ie}}},methods:function(){return{addedToParent:{type:B,g:ie}}}}};kk.prototype.h.m=10;function lk(){}H(Id,lk);lk.prototype.qb=D();lk.prototype.setHeight=lk.prototype.qb;lk.prototype.Sa=D();lk.prototype.setWidth=lk.prototype.Sa;lk.prototype.sd=D();lk.prototype.setX=lk.prototype.sd;lk.prototype.td=D();lk.prototype.setY=lk.prototype.td;lk.prototype.mf=D();lk.prototype.setWidthAndHeight=lk.prototype.mf;lk.prototype.dd=D();lk.prototype.isWidthSizedToContent=lk.prototype.dd;lk.prototype.cd=D();lk.prototype.isHeightSizedToContent=lk.prototype.cd;
lk.prototype.i={names:[{name:'ILayoutChild',j:Id,kind:v}],s:[jk,kk]};
lk.prototype.h=function(){return{l:function(){return{percentWidth:{type:k,access:y,g:Id},percentHeight:{type:k,access:y,g:Id},explicitWidth:{type:k,access:y,g:Id},explicitHeight:{type:k,access:y,g:Id}}},methods:function(){return{setHeight:{type:B,g:Id,parameters:function(){return[{index:1,type:k,optional:!1},{index:2,type:h,optional:!0}]}},setWidth:{type:B,g:Id,parameters:function(){return[{index:1,type:k,optional:!1},{index:2,type:h,optional:!0}]}},setX:{type:B,g:Id,parameters:function(){return[{index:1,
type:k,optional:!1}]}},setY:{type:B,g:Id,parameters:function(){return[{index:1,type:k,optional:!1}]}},setWidthAndHeight:{type:B,g:Id,parameters:function(){return[{index:1,type:k,optional:!1},{index:2,type:k,optional:!1},{index:3,type:h,optional:!0}]}},isWidthSizedToContent:{type:h,g:Id},isHeightSizedToContent:{type:h,g:Id}}}}};lk.prototype.h.m=10;function nk(){}H(Cd,nk);nk.prototype.i={names:[{name:'IId',j:Cd,kind:v}]};nk.prototype.h=function(){return{l:function(){return{id:{type:n,access:y,g:Cd}}},methods:function(){return{}}}};nk.prototype.h.m=10;function ok(){}H(Qd,ok);ok.prototype.addElement=D();ok.prototype.addElement=ok.prototype.addElement;ok.prototype.ga=D();ok.prototype.addElementAt=ok.prototype.ga;ok.prototype.ma=D();ok.prototype.getElementIndex=ok.prototype.ma;ok.prototype.L=D();ok.prototype.removeElement=ok.prototype.L;ok.prototype.U=D();ok.prototype.getElementAt=ok.prototype.U;ok.prototype.i={names:[{name:'IParent',j:Qd,kind:v}]};
ok.prototype.h=function(){return{l:function(){return{numElements:{type:u,access:w,g:Qd}}},methods:function(){return{addElement:{type:B,g:Qd,parameters:function(){return[{index:1,type:td,optional:!1},{index:2,type:h,optional:!0}]}},addElementAt:{type:B,g:Qd,parameters:function(){return[{index:1,type:td,optional:!1},{index:2,type:u,optional:!1},{index:3,type:h,optional:!0}]}},getElementIndex:{type:u,g:Qd,parameters:function(){return[{index:1,type:td,optional:!1}]}},removeElement:{type:B,g:Qd,parameters:function(){return[{index:1,
type:td,optional:!1},{index:2,type:h,optional:!0}]}},getElementAt:{type:td,g:Qd,parameters:function(){return[{index:1,type:u,optional:!1}]}}}}}};ok.prototype.h.m=10;function pk(){}H(Rd,pk);pk.prototype.i={names:[{name:'IParentIUIBase',j:Rd,kind:v}],s:[ok,kk]};pk.prototype.h=function(){return{l:function(){return{}},methods:function(){return{}}}};pk.prototype.h.m=10;function R(){J.call(this);this.createElement()}I(R,Oj);H(se,R);R.prototype.qb=function(a,b){this.jb!==a&&(this.jb=a,this.positioner.style.height=a.toString()+bh,'undefined'!==typeof b&&b||this.dispatchEvent(new K(kc)))};R.prototype.setHeight=R.prototype.qb;R.prototype.Sa=function(a,b){this.lb!==a&&(this.lb=a,this.positioner.style.width=a.toString()+bh,'undefined'!==typeof b&&b||this.dispatchEvent(new K(Ph)))};R.prototype.setWidth=R.prototype.Sa;
R.prototype.mf=function(a,b,c){c='undefined'!==typeof c?c:!1;this.lb!==a&&(this.lb=a,this.positioner.style.width=a.toString()+bh,c||this.dispatchEvent(new K(Ph)));this.jb!==b&&(this.jb=b,this.positioner.style.height=b.toString()+bh,c||this.dispatchEvent(new K(kc)));this.dispatchEvent(new K(vh))};R.prototype.setWidthAndHeight=R.prototype.mf;
R.prototype.dd=function(){if(!isNaN(this.xa)||!isNaN(this.pc))return!1;var a=Wj.valuesImpl.ba(this,'left'),b=Wj.valuesImpl.ba(this,'right');return void 0===a||void 0===b};R.prototype.isWidthSizedToContent=R.prototype.dd;R.prototype.cd=function(){if(!isNaN(this.wa)||!isNaN(this.oc))return!1;var a=Wj.valuesImpl.ba(this,'top'),b=Wj.valuesImpl.ba(this,'bottom');return void 0===a||void 0===b};R.prototype.isHeightSizedToContent=R.prototype.cd;
R.prototype.sd=function(a){isNaN(a)?this.positioner.style.left='initial':(this.positioner.parentNode!=this.positioner.offsetParent&&(a+=this.positioner.parentNode.offsetLeft),this.positioner.style.left=a.toString()+bh)};R.prototype.setX=R.prototype.sd;R.prototype.td=function(a){isNaN(a)?this.positioner.style.top='initial':(this.positioner.parentNode!=this.positioner.offsetParent&&(a+=this.positioner.parentNode.offsetTop),this.positioner.style.top=a.toString()+bh)};R.prototype.setY=R.prototype.td;
R.prototype.rd=function(a){this.displayStyleForLayout=a;this.positioner.style.display!==Nc&&(this.positioner.style.display=a)};R.prototype.setDisplayStyleForLayout=R.prototype.rd;R.prototype.na=function(){return this.element.childNodes};R.prototype.internalChildren=R.prototype.na;R.prototype.D='';R.prototype.typeNames=R.prototype.D;R.prototype.I=function(a){R.w.I.apply(this,[a]);if(this.Mb!==a&&M(a,qk)){this.kd=a;var b=!0}b&&this.dispatchEvent(new K(Nh))};R.prototype.addBead=R.prototype.I;
R.prototype.addElement=function(a){this.element.appendChild(a.positioner);a.C()};R.prototype.addElement=R.prototype.addElement;R.prototype.ga=function(a,b){var c=this.na();b>=c.length?this.addElement(a):(this.element.insertBefore(a.positioner,c[b]),a.C())};R.prototype.addElementAt=R.prototype.ga;R.prototype.U=function(a){var b=this.na();return 0==b.length?null:b[a].royale_wrapper};R.prototype.getElementAt=R.prototype.U;
R.prototype.ma=function(a){for(var b=this.na(),c=b.length>>0,d=0;d<c;d++)if(b[d]===a.positioner)return d;return-1};R.prototype.getElementIndex=R.prototype.ma;R.prototype.L=function(a){this.element.removeChild(a.positioner)};R.prototype.removeElement=R.prototype.L;
R.prototype.C=function(){if(!this.Am){this.Am=!0;this.element.className=this.Fb?this.Fb+' '+this.D:this.D;this.style&&Wj.valuesImpl.Qb(this,this.style);if(isNaN(this.xa)&&isNaN(this.pc)){var a=Wj.valuesImpl.ba(this,'width');void 0!==a&&(M(a,String)?(a=String(a),-1<a.indexOf('%')?this.pc=Number(a.substring(0,a.length-1)):(-1!==a.indexOf(bh)&&(a=a.substring(0,a.length-2)),this.lb=this.xa=Number(a))):this.lb=this.xa=a)}isNaN(this.wa)&&isNaN(this.oc)&&(a=Wj.valuesImpl.ba(this,'height'),void 0!==a&&(M(a,
String)?(a=String(a),-1!==a.indexOf('%')?this.oc=Number(a.substring(0,a.length-1)):(-1!==a.indexOf(bh)&&(a=a.substring(0,a.length-2)),this.jb=this.wa=Number(a))):this.jb=this.wa=a));a=this.beads;for(var b in a)this.I(a[b]);rk(Kj,oc,this);rk(qk,'iBeadView',this);rk(sk,'iBeadController',this);this.dispatchEvent(new K(ob))}};R.prototype.addedToParent=R.prototype.C;G=R.prototype;G.createElement=function(){tk(this,'div');this.positioner.style.display=pb;return this.element};G.Xk=function(){return this};
G.tp=D();G.$d=F('xa');G.uf=function(a){this.xa!=a&&(isNaN(a)||(this.pc=NaN),this.xa=a,this.dispatchEvent(new K(dc)))};G.Zd=F('wa');G.tf=function(a){this.wa!=a&&(isNaN(a)||(this.oc=NaN),this.wa=a,this.dispatchEvent(new K(cc)))};G.ie=F('pc');G.Bf=function(a){this.pc=a;this.positioner.style.width=a.toString()+'%';isNaN(a)||(this.xa=NaN);this.dispatchEvent(new K(Og))};G.he=F('oc');G.Af=function(a){this.oc=a;this.positioner.style.height=a.toString()+'%';isNaN(a)||(this.wa=NaN);this.dispatchEvent(new K(Mg))};
G.fc=function(){if(!isNaN(this.lb))return this.lb;if(!isNaN(this.xa))return this.xa;var a=this.element.style.width;a=null==a?NaN:Zj(a,NaN);isNaN(a)&&(a=this.positioner.offsetWidth,0==a&&0!=this.positioner.scrollWidth&&(a=this.positioner.scrollWidth));return a};G.Ec=function(a){this.explicitWidth!==a&&(this.explicitWidth=a);this.Sa(a)};
G.be=function(){if(!isNaN(this.jb))return this.jb;if(!isNaN(this.wa))return this.wa;var a=this.element.style.height;a=null==a?NaN:Zj(a,NaN);isNaN(a)&&(a=this.positioner.offsetHeight,0==a&&0!=this.positioner.scrollHeight&&(a=this.positioner.scrollHeight));return a};G.wf=function(a){this.explicitHeight!==a&&(this.explicitHeight=a);this.qb(a)};
G.Al=function(){if(!isNaN(this.ld))return this.ld;var a=parseFloat(this.positioner.style.left);isNaN(a)&&(a=this.positioner.offsetLeft,this.positioner.parentNode!=this.positioner.offsetParent&&(a-=this.positioner.parentNode.offsetLeft));return a};G.Qp=function(a){this.ld=a;this.sd(a)};
G.Bl=function(){if(!isNaN(this.md))return this.md;var a=parseFloat(this.positioner.style.top);isNaN(a)&&(a=this.positioner.offsetTop,this.positioner.parentNode!=this.positioner.offsetParent&&(a-=this.positioner.parentNode.offsetTop));return a};G.Rp=function(a){this.md=a;this.td(a)};G.zl=function(){return this.positioner.style.display!==Nc};
G.Np=function(a){!!a!==(this.positioner.style.display!==Nc)&&(a?(null!=this.displayStyleForLayout&&(this.positioner.style.display=this.displayStyleForLayout),this.dispatchEvent(new K('show'))):(this.displayStyleForLayout=this.positioner.style.display,this.positioner.style.display=Nc,this.dispatchEvent(new K('hide'))),this.dispatchEvent(new K(Oh)))};G.xl=function(){this.kd||(this.kd=rk(qk,'iBeadView',this));return this.kd};G.Mp=function(a){this.kd!=a&&(this.I(a),this.dispatchEvent(new K(Nh)))};
G.bb=F('Se');G.tb=function(a){this.Se!==a&&(this.Se=a,this.dispatchEvent(new K(qc)));this.element.id=this.Se};G.ue=F('kb');G.Jf=function(a){this.kb!==a&&(M(a,String)?this.kb=Wj.valuesImpl.qd(a):this.kb=a,isNaN(this.md)||(this.kb.top=this.md),isNaN(this.ld)||(this.kb.left=this.ld),this.parent&&Wj.valuesImpl.Qb(this,this.kb),this.dispatchEvent(new K('stylesChanged')),a=uk(this.kb,vk))&&(a.object=this)};G.Sd=F('Fb');
G.pf=function(a){this.Fb!==a&&(this.Fb=a,this.parent&&(this.element.className=this.Fb?this.Fb+' '+this.D:this.D),this.dispatchEvent(new K('classNameChanged')))};G.Ab=function(){return this.na().length>>0};G.lk=function(){this.qh||(this.qh=rk(wk,'iMeasurementBead',this));return this.qh};G.ql=function(){return document.body.royale_wrapper};G.Gk=F('element');G.kp=E('element');G.Yi=function(){return parseFloat(this.positioner.style.opacity)};G.Tn=function(a){this.positioner.style.opacity=a};
G.Ck=function(){var a=this.positioner.parentNode;return a?a.royale_wrapper:null};G.rl=F('element');
Object.defineProperties(R.prototype,{royale_wrapper:{get:R.prototype.Xk,set:R.prototype.tp},explicitWidth:{get:R.prototype.$d,set:R.prototype.uf},explicitHeight:{get:R.prototype.Zd,set:R.prototype.tf},percentWidth:{get:R.prototype.ie,set:R.prototype.Bf},percentHeight:{get:R.prototype.he,set:R.prototype.Af},width:{get:R.prototype.fc,set:R.prototype.Ec},height:{get:R.prototype.be,set:R.prototype.wf},x:{get:R.prototype.Al,set:R.prototype.Qp},y:{get:R.prototype.Bl,set:R.prototype.Rp},visible:{get:R.prototype.zl,
set:R.prototype.Np},view:{get:R.prototype.xl,set:R.prototype.Mp},id:{get:R.prototype.bb,set:R.prototype.tb},style:{get:R.prototype.ue,set:R.prototype.Jf},className:{get:R.prototype.Sd,set:R.prototype.pf},numElements:{get:R.prototype.Ab},measurementBead:{get:R.prototype.lk},topMostEventDispatcher:{get:R.prototype.ql},positioner:{get:R.prototype.Gk,set:R.prototype.kp},alpha:{get:R.prototype.Yi,set:R.prototype.Tn},parent:{get:R.prototype.Ck},transformElement:{get:R.prototype.rl}});
R.prototype.i={names:[{name:'UIBase',j:se,kind:q}],s:[hk,Ij,pk,fk,lk,ek,nk]};
R.prototype.h=function(){return{o:function(){return{displayStyleForLayout:{type:n,u:function(a,b){return void 0!==b?a.displayStyleForLayout=b:a.displayStyleForLayout}},typeNames:{type:n,u:function(a,b){return void 0!==b?a.D=b:a.D}},beads:{type:e,u:function(a,b){return void 0!==b?a.beads=b:a.beads}}}},l:function(){return{royale_wrapper:{type:m,access:y,g:se},explicitWidth:{type:k,access:y,g:se},explicitHeight:{type:k,access:y,g:se},percentWidth:{type:k,access:y,g:se},percentHeight:{type:k,access:y,
g:se},width:{type:k,access:y,g:se,W:function(){return[{name:Ea,O:[{key:'',value:Ph}]}]}},height:{type:k,access:y,g:se,W:function(){return[{name:Ea,O:[{key:'',value:kc}]}]}},x:{type:k,access:y,g:se},y:{type:k,access:y,g:se},visible:{type:h,access:y,g:se,W:function(){return[{name:Ea,O:[{key:'',value:Oh}]}]}},view:{type:pd,access:y,g:se},id:{type:n,access:y,g:se},style:{type:m,access:y,g:se},className:{type:n,access:y,g:se},numElements:{type:u,access:w,g:se},measurementBead:{type:Pd,access:w,g:se},topMostEventDispatcher:{type:Ie,
access:w,g:se},positioner:{type:we,access:y,g:se},alpha:{type:k,access:y,g:se},parent:{type:Qd,access:w,g:se},transformElement:{type:we,access:w,g:se}}},methods:function(){return{UIBase:{type:'',g:se},setHeight:{type:B,g:se,parameters:function(){return[{index:1,type:k,optional:!1},{index:2,type:h,optional:!0}]}},setWidth:{type:B,g:se,parameters:function(){return[{index:1,type:k,optional:!1},{index:2,type:h,optional:!0}]}},setWidthAndHeight:{type:B,g:se,parameters:function(){return[{index:1,type:k,
optional:!1},{index:2,type:k,optional:!1},{index:3,type:h,optional:!0}]}},isWidthSizedToContent:{type:h,g:se},isHeightSizedToContent:{type:h,g:se},setX:{type:B,g:se,parameters:function(){return[{index:1,type:k,optional:!1}]}},setY:{type:B,g:se,parameters:function(){return[{index:1,type:k,optional:!1}]}},setDisplayStyleForLayout:{type:B,g:se,parameters:function(){return[{index:1,type:n,optional:!1}]}},internalChildren:{type:e,g:se},addBead:{type:B,g:se,parameters:function(){return[{index:1,type:ld,
optional:!1}]}},addElement:{type:B,g:se,parameters:function(){return[{index:1,type:td,optional:!1},{index:2,type:h,optional:!0}]}},addElementAt:{type:B,g:se,parameters:function(){return[{index:1,type:td,optional:!1},{index:2,type:u,optional:!1},{index:3,type:h,optional:!0}]}},getElementAt:{type:td,g:se,parameters:function(){return[{index:1,type:u,optional:!1}]}},getElementIndex:{type:u,g:se,parameters:function(){return[{index:1,type:td,optional:!1}]}},removeElement:{type:B,g:se,parameters:function(){return[{index:1,
type:td,optional:!1},{index:2,type:h,optional:!0}]}},addedToParent:{type:B,g:se}}}}};R.prototype.h.m=10;function xk(){}H(uf,xk);xk.prototype.Ye=void 0;xk.prototype.v=E('Xe');xk.prototype.No=E('Ye');xk.prototype.Op=function(a){this.Ye!==a&&(this.Ye=a,M(this.Xe,qk)?this.Xe.host.dispatchEvent(new K(Ec)):this.Xe.dispatchEvent(new K(Ec)))};Object.defineProperties(xk.prototype,{strand:{set:xk.prototype.v},initialValue:{set:xk.prototype.No},watchedProperty:{set:xk.prototype.Op}});xk.prototype.i={names:[{name:'LayoutChangeNotifier',j:uf,kind:q}],s:[Jj]};
xk.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:uf},initialValue:{type:m,access:C,g:uf},watchedProperty:{type:m,access:C,g:uf}}},methods:function(){return{LayoutChangeNotifier:{type:'',g:uf}}}}};xk.prototype.h.m=10;function yk(){}H(Vd,yk);yk.prototype.i={names:[{name:'IRollOverModel',j:Vd,kind:v}],s:[Ij,Kj]};yk.prototype.h=function(){return{l:function(){return{rollOverIndex:{type:u,access:y,g:Vd}}},methods:function(){return{}}}};yk.prototype.h.m=10;function zk(){}H(Ed,zk);zk.prototype.i={names:[{name:'IItemRenderer',j:Ed,kind:v}],s:[Ij,jk]};zk.prototype.h=function(){return{l:function(){return{data:{type:m,access:y,g:Ed},listData:{type:m,access:y,g:Ed},itemRendererParent:{type:m,access:y,g:Ed}}},methods:function(){return{}}}};zk.prototype.h.m=10;function Ak(){}H(Yd,Ak);Ak.prototype.i={names:[{name:'ISelectableItemRenderer',j:Yd,kind:v}],s:[zk]};Ak.prototype.h=function(){return{l:function(){return{labelField:{type:n,access:y,g:Yd},index:{type:u,access:y,g:Yd},selected:{type:h,access:y,g:Yd},hovered:{type:h,access:y,g:Yd},down:{type:h,access:y,g:Yd}}},methods:function(){return{}}}};Ak.prototype.h.m=10;function S(){R.call(this)}I(S,R);H(Lf,S);S.prototype.C=function(){Bk(this,this.kn);Ck(this,this,this.MXMLDescriptor);S.w.C.apply(this);this.addEventListener(Ph,P(this.bf,this,uh));this.addEventListener(kc,P(this.bf,this,uh));this.addEventListener(vh,P(this.bf,this,uh));Wj.valuesImpl.ta(this);this.dispatchEvent(new K(tc));this.dispatchEvent(new K(uc))};S.prototype.addedToParent=S.prototype.C;S.prototype.R=E('kn');S.prototype.generateMXMLAttributes=S.prototype.R;G=S.prototype;G.Rh=16777215;G.Th=13556719;
G.Wh=11060974;G.Sh=8421504;G.Vh=Cc;G.Uh=0;G.$=D();S.prototype.updateRenderer=S.prototype.$;S.prototype.bf=function(){this.Ob()};S.prototype.Ob=D();S.prototype.adjustSize=S.prototype.Ob;G=S.prototype;G.$j=F('gn');G.So=E('gn');G.S=Qh(null);G.cj=F('Rh');G.Yn=E('Rh');G.Pj=F('Th');G.Io=E('Th');G.Yk=F('Wh');G.up=E('Wh');G.Hj=F('Sh');G.Bo=E('Sh');G.ra=F('dn');G.M=E('dn');G.jk=F('hn');G.Xo=E('hn');G.cb=F('Vh');G.ub=E('Vh');G.Uj=F('Uh');G.Mo=E('Uh');G.Sj=F('fn');G.Ko=function(a){this.fn=a;this.$()};G.pe=F('jn');
G.Ff=function(a){this.jn=a;this.$()};G.Gj=F('en');G.Ao=function(a){this.en=a;this.$()};
Object.defineProperties(S.prototype,{itemRendererParent:{get:S.prototype.$j,set:S.prototype.So},MXMLDescriptor:{get:S.prototype.S},backgroundColor:{get:S.prototype.cj,set:S.prototype.Yn},highlightColor:{get:S.prototype.Pj,set:S.prototype.Io},selectedColor:{get:S.prototype.Yk,set:S.prototype.up},downColor:{get:S.prototype.Hj,set:S.prototype.Bo},data:{get:S.prototype.ra,set:S.prototype.M},listData:{get:S.prototype.jk,set:S.prototype.Xo},labelField:{get:S.prototype.cb,set:S.prototype.ub},index:{get:S.prototype.Uj,
set:S.prototype.Mo},hovered:{get:S.prototype.Sj,set:S.prototype.Ko},selected:{get:S.prototype.pe,set:S.prototype.Ff},down:{get:S.prototype.Gj,set:S.prototype.Ao}});S.prototype.i={names:[{name:'UIItemRendererBase',j:Lf,kind:q}],s:[Ak]};
S.prototype.h=function(){return{o:function(){return{mxmlContent:{type:e,u:function(a,b){return void 0!==b?a.mxmlContent=b:a.mxmlContent}}}},l:function(){return{itemRendererParent:{type:m,access:y,g:Lf},MXMLDescriptor:{type:e,access:w,g:Lf},backgroundColor:{type:Jh,access:y,g:Lf},highlightColor:{type:Jh,access:y,g:Lf},selectedColor:{type:Jh,access:y,g:Lf},downColor:{type:Jh,access:y,g:Lf},data:{type:m,access:y,g:Lf,W:function(){return[{name:Ea,O:[{key:'',value:cb}]}]}},listData:{type:m,access:y,g:Lf,
W:function(){return[{name:Ea,O:[{key:'',value:cb}]}]}},labelField:{type:n,access:y,g:Lf},index:{type:u,access:y,g:Lf},hovered:{type:h,access:y,g:Lf},selected:{type:h,access:y,g:Lf},down:{type:h,access:y,g:Lf}}},methods:function(){return{UIItemRendererBase:{type:'',g:Lf},addedToParent:{type:B,g:Lf},generateMXMLAttributes:{type:B,g:Lf,parameters:function(){return[{index:1,type:e,optional:!1}]}},updateRenderer:{type:B,g:Lf},adjustSize:{type:B,g:Lf}}}}};S.prototype.h.m=10;function Dk(){R.call(this)}I(Dk,S);H(Hf,Dk);Dk.prototype.Ph=0;Dk.prototype.Qh=0;Dk.prototype.$=function(){this.element.style.backgroundColor=this.selected?'#9C9C9C':this.hovered?'#ECECEC':'transparent'};Dk.prototype.updateRenderer=Dk.prototype.$;G=Dk.prototype;G.createElement=function(){tk(this,'div');this.className=Ia;return this.element};G.oj=F('Ph');G.ko=E('Ph');G.Wk=F('Qh');G.sp=E('Qh');G.Wd=F('cn');G.qf=E('cn');
Object.defineProperties(Dk.prototype,{columnIndex:{get:Dk.prototype.oj,set:Dk.prototype.ko},rowIndex:{get:Dk.prototype.Wk,set:Dk.prototype.sp},dataField:{get:Dk.prototype.Wd,set:Dk.prototype.qf}});Dk.prototype.i={names:[{name:Ia,j:Hf,kind:q}]};
Dk.prototype.h=function(){return{o:function(){return{}},l:function(){return{columnIndex:{type:u,access:y,g:Hf},rowIndex:{type:u,access:y,g:Hf},dataField:{type:n,access:y,g:Hf}}},methods:function(){return{DataItemRenderer:{type:'',g:Hf},updateRenderer:{type:B,g:Hf}}}}};Dk.prototype.h.m=10;function Ek(){}H(Jd,Ek);G=Ek.prototype;G.Rb=D();G.Pb=D();G.i={names:[{name:'ILayoutHost',j:Jd,kind:v}]};G.h=function(){return{l:function(){return{contentView:{type:Md,access:w,g:Jd}}},methods:function(){return{beforeLayout:{type:B,g:Jd},afterLayout:{type:B,g:Jd}}}}};G.h.m=10;function Fk(){}H(Md,Fk);Fk.prototype.U=D();Fk.prototype.getElementAt=Fk.prototype.U;Fk.prototype.i={names:[{name:'ILayoutView',j:Md,kind:v}]};Fk.prototype.h=function(){return{l:function(){return{width:{type:k,access:w,g:Md},height:{type:k,access:w,g:Md},numElements:{type:u,access:w,g:Md}}},methods:function(){return{getElementAt:{type:td,g:Md,parameters:function(){return[{index:1,type:u,optional:!1}]}}}}}};Fk.prototype.h.m=10;function Gk(){}H(Kd,Gk);Gk.prototype.Ya=D();Gk.prototype.getLayoutHost=Gk.prototype.Ya;Gk.prototype.i={names:[{name:'ILayoutParent',j:Kd,kind:v}]};Gk.prototype.h=function(){return{l:function(){return{}},methods:function(){return{getLayoutHost:{type:Jd,g:Kd}}}}};Gk.prototype.h.m=10;function Hk(){R.call(this);this.D=Ra}I(Hk,Dk);H(If,Hk);Hk.prototype.Ya=function(){return this};Hk.prototype.getLayoutHost=Hk.prototype.Ya;Hk.prototype.Ob=function(){var a=uk(this.aa(Ik),Ik);null!=a&&a.da()};Hk.prototype.adjustSize=Hk.prototype.Ob;Hk.prototype.Rb=D();Hk.prototype.beforeLayout=Hk.prototype.Rb;Hk.prototype.Pb=D();Hk.prototype.afterLayout=Hk.prototype.Pb;Hk.prototype.M=function(a){a!=this.data&&(Hk.w.M.apply(this,[a]),this.dispatchEvent(new K(Pb)))};Hk.prototype.ab=function(){return this};
Object.defineProperties(Hk.prototype,{data:{get:S.prototype.ra,set:Hk.prototype.M},contentView:{get:Hk.prototype.ab}});Hk.prototype.i={names:[{name:Ra,j:If,kind:q}],s:[Gk,Ek,Nj,Fk]};
Hk.prototype.h=function(){return{o:function(){return{}},l:function(){return{data:{type:m,access:C,g:If,W:function(){return[{name:Ea,O:[{key:'',value:Pb}]}]}},contentView:{type:Md,access:w,g:If}}},methods:function(){return{MXMLItemRenderer:{type:'',g:If},getLayoutHost:{type:Jd,g:If},adjustSize:{type:B,g:If},beforeLayout:{type:B,g:If},afterLayout:{type:B,g:If}}}}};Hk.prototype.h.m=10;function Jk(){Hk.call(this);this.R([3,r,!0,'summary',Ng,!0,100,nb,null,[Kk,1,p,!0,ea,0,0,null,Lk,1,p,!0,fa,0,0,null],0,0])}I(Jk,Hk);H(Oa,Jk);Jk.prototype.Oc='#fff';Jk.prototype.Pc=da;Jk.prototype.zd=!1;Jk.prototype.C=function(){Jk.w.C.apply(this);this.zd=1==this.parent.ma(this)%2;this.element.style.backgroundColor=this.zd?this.Pc:this.Oc};Jk.prototype.addedToParent=Jk.prototype.C;
Jk.prototype.$=function(){Jk.w.$.apply(this);if(null==this.element.style.backgroundColor||''==this.element.style.backgroundColor)this.element.style.backgroundColor=this.zd?this.Pc:this.Oc};Jk.prototype.updateRenderer=Jk.prototype.$;G=Jk.prototype;G.Za=F('Oc');G.rb=E('Oc');G.$a=F('Pc');G.sb=E('Pc');
G.M=function(a){Jk.w.M.apply(this,[a]);this.qname.href='#!'+this.obj.ownerhref+'/'+this.obj.qname;1==this.obj.platforms.length&&('swf'==this.obj.platforms[0]&&(this.qname.className+=ca),'js'==this.obj.platforms[0]&&(this.qname.className+=ba))};G.sa=F(Ob);Object.defineProperties(Jk.prototype,{backgroundColor0:{get:Jk.prototype.Za,set:Jk.prototype.rb},backgroundColor1:{get:Jk.prototype.$a,set:Jk.prototype.sb},data:{get:S.prototype.ra,set:Jk.prototype.M},obj:{get:Jk.prototype.sa}});
Object.defineProperties(Jk.prototype,{typeGroup:{get:F('Ua'),set:function(a){a!=this.Ua&&(this.Ua=a,this.dispatchEvent(T(this,Ih,null,a)))}},qname:{get:F('Qa'),set:function(a){a!=this.Qa&&(this.Qa=a,this.dispatchEvent(T(this,ch,null,a)))}},label:{get:F('ca'),set:function(a){a!=this.ca&&(this.ca=a,this.dispatchEvent(T(this,Cc,null,a)))}},MXMLDescriptor:{get:function(){if(void 0==this.K){var a=Jk.w.S.apply(this),b=[Mk,2,t,!0,Ih,nb,null,[Nk,1,p,!0,ha,0,0,null],0,0,[Ok,2,t,!0,ch,r,!0,'eventSummaryQName',
0,0,null,U,2,t,!0,Cc,r,!0,'eventDescription',0,0,null]];this.K=a?a.concat(b):b}return this.K}}});Jk.prototype.ka=[2,[Ob,ch],null,[ch,z],[Ob,th],null,[Cc,z],0,2,Ob,[Pb,cb],[0,1],null,[1,2,ch,cb,0,null,null,2,2,th,cb,1,null,null,null]];Jk.prototype._bindings=Jk.prototype.ka;Jk.prototype.i={names:[{name:Oa,j:Oa,kind:q}]};
Jk.prototype.h=function(){return{o:function(){return{}},l:function(){return{backgroundColor0:{type:n,access:y,g:Oa},backgroundColor1:{type:n,access:y,g:Oa},data:{type:m,access:C,g:Oa},obj:{type:va,access:w,g:Oa},typeGroup:{type:Ye,access:y,g:Oa},qname:{type:Df,access:y,g:Oa},label:{type:Ze,access:y,g:Oa}}},methods:function(){return{addedToParent:{type:B,g:Oa},updateRenderer:{type:B,g:Oa},EventSummaryRenderer:{type:'',g:Oa}}}}};Jk.prototype.h.m=9;function Pk(){}H(Ag,Pk);Pk.prototype.v=D();Object.defineProperties(Pk.prototype,{strand:{set:Pk.prototype.v}});Pk.prototype.i={names:[{name:'ViewSourceContextMenuOption',j:Ag,kind:q}],s:[Jj]};Pk.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:Ag}}},methods:function(){return{ViewSourceContextMenuOption:{type:'',g:Ag}}}}};Pk.prototype.h.m=10;function Qk(){}H(Je,Qk);Qk.prototype.P=D();Qk.prototype.cloneEvent=Qk.prototype.P;Qk.prototype.i={names:[{name:'IRoyaleEvent',j:Je,kind:v}]};Qk.prototype.h=function(){return{l:function(){return{}},methods:function(){return{cloneEvent:{type:Je,g:Je}}}}};Qk.prototype.h.m=10;function K(a,b,c){b='undefined'!==typeof b?b:!1;c='undefined'!==typeof c?c:!1;Ai.call(this,a);this.bubbles=b;this.cancelable=c}I(K,Ai);H(Fe,K);H('org.apache.royale.events.Event.CHANGE',ub);H('org.apache.royale.events.Event.COMPLETE',Ab);H('org.apache.royale.events.Event.SELECT','select');H('org.apache.royale.events.Event.OPEN','open');K.prototype.stopImmediatePropagation=function(){throw Error(yh);};K.prototype.stopImmediatePropagation=K.prototype.stopImmediatePropagation;
K.prototype.P=function(){return new K(this.type,this.bubbles,this.cancelable)};K.prototype.cloneEvent=K.prototype.P;K.prototype.Pl=F('defaultPrevented');K.prototype.isDefaultPrevented=K.prototype.Pl;K.prototype.Ql=function(a){return a===this.target||M(this.target,ek)&&this.target.royale_wrapper===a?!0:!1};K.prototype.isSameTarget=K.prototype.Ql;K.prototype.i={names:[{name:'Event',j:Fe,kind:q}],s:[Qk]};
K.prototype.h=function(){return{o:function(){return{bubbles:{type:h,u:function(a,b){return void 0!==b?a.bubbles=b:a.bubbles}},cancelable:{type:h,u:function(a,b){return void 0!==b?a.cancelable=b:a.cancelable}}}},l:function(){return{}},methods:function(){return{Event:{type:'',g:Fe,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:h,optional:!0},{index:3,type:h,optional:!0}]}},stopImmediatePropagation:{type:B,g:Fe},cloneEvent:{type:Je,g:Fe},isDefaultPrevented:{type:h,g:Fe},isSameTarget:{type:h,
g:Fe,parameters:function(){return[{index:1,type:Ie,optional:!1}]}}}}}};K.prototype.h.m=10;function Rk(){}H(pg,Rk);Rk.prototype.ee=F('xn');Rk.prototype.zf=E('xn');Rk.prototype.Dj=F('wn');Rk.prototype.xo=E('wn');Object.defineProperties(Rk.prototype,{items:{get:Rk.prototype.ee,set:Rk.prototype.zf},descriptor:{get:Rk.prototype.Dj,set:Rk.prototype.xo}});Rk.prototype.i={names:[{name:'ItemAndDescriptor',j:pg,kind:q}]};
Rk.prototype.h=function(){return{o:function(){return{}},l:function(){return{items:{type:m,access:y,g:pg},descriptor:{type:e,access:y,g:pg}}},methods:function(){return{ItemAndDescriptor:{type:'',g:pg}}}}};Rk.prototype.h.m=10;function Sk(a,b,c){K.call(this,a,'undefined'!==typeof b?b:!1,'undefined'!==typeof c?c:!1)}I(Sk,K);H(Ce,Sk);Sk.prototype.P=function(){return new Sk(this.type,this.bubbles,this.cancelable)};Sk.prototype.cloneEvent=Sk.prototype.P;Sk.prototype.i={names:[{name:'CustomEvent',j:Ce,kind:q}]};
Sk.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{CustomEvent:{type:'',g:Ce,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:h,optional:!0},{index:3,type:h,optional:!0}]}},cloneEvent:{type:Je,g:Ce}}}}};Sk.prototype.h.m=10;function Tk(a){Sk.call(this);Sk.call(this,a);this.item=null}I(Tk,Sk);H(Me,Tk);Tk.prototype.P=function(){var a=new Tk(this.type);a.item=this.item;return a};Tk.prototype.cloneEvent=Tk.prototype.P;Tk.prototype.i={names:[{name:'ItemRemovedEvent',j:Me,kind:q}]};
Tk.prototype.h=function(){return{o:function(){return{item:{type:m,u:function(a,b){return void 0!==b?a.item=b:a.item}}}},l:function(){return{}},methods:function(){return{ItemRemovedEvent:{type:'',g:Me,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:h,optional:!0},{index:3,type:h,optional:!0}]}},cloneEvent:{type:Je,g:Me}}}}};Tk.prototype.h.m=10;function Uk(a){if(a){if(a.royale_wrapper)return a.royale_wrapper;if(a.parentNode&&a.parentNode.royale_wrapper)return a.parentNode.royale_wrapper}return a}H('org.apache.royale.events.getTargetWrapper',Uk);function Vk(){}H(fe,Vk);Vk.prototype.i={names:[{name:'IStrandWithPresentationModel',j:fe,kind:v}]};Vk.prototype.h=function(){return{l:function(){return{presentationModel:{type:ld,access:w,g:fe}}},methods:function(){return{}}}};Vk.prototype.h.m=10;function Wk(){}H(vd,Wk);Wk.prototype.Gc=D();Wk.prototype.$addElement=Wk.prototype.Gc;Wk.prototype.Hc=D();Wk.prototype.$addElementAt=Wk.prototype.Hc;Wk.prototype.Kc=D();Wk.prototype.$removeElement=Wk.prototype.Kc;Wk.prototype.Jc=D();Wk.prototype.$getElementIndex=Wk.prototype.Jc;Wk.prototype.Ic=D();Wk.prototype.$getElementAt=Wk.prototype.Ic;Wk.prototype.i={names:[{name:'IContainerBaseStrandChildrenHost',j:vd,kind:v}]};
Wk.prototype.h=function(){return{l:function(){return{$numElements:{type:u,access:w,g:vd}}},methods:function(){return{$addElement:{type:B,g:vd,parameters:function(){return[{index:1,type:td,optional:!1},{index:2,type:h,optional:!0}]}},$addElementAt:{type:B,g:vd,parameters:function(){return[{index:1,type:td,optional:!1},{index:2,type:u,optional:!1},{index:3,type:h,optional:!0}]}},$removeElement:{type:B,g:vd,parameters:function(){return[{index:1,type:td,optional:!1},{index:2,type:h,optional:!0}]}},$getElementIndex:{type:u,
g:vd,parameters:function(){return[{index:1,type:td,optional:!1}]}},$getElementAt:{type:td,g:vd,parameters:function(){return[{index:1,type:u,optional:!1}]}}}}}};Wk.prototype.h.m=10;function Xk(){}H(wd,Xk);Xk.prototype.i={names:[{name:'IContentViewHost',j:wd,kind:v}],s:[ok]};Xk.prototype.h=function(){return{l:function(){return{strandChildren:{type:Qd,access:w,g:wd}}},methods:function(){return{}}}};Xk.prototype.h.m=10;function Yk(){}H(ud,Yk);Yk.prototype.Sb=D();Yk.prototype.i={names:[{name:'IContainer',j:ud,kind:v}],s:[ok]};Yk.prototype.h=function(){return{l:function(){return{strandChildren:{type:Qd,access:w,g:ud}}},methods:function(){return{childrenAdded:{type:B,g:ud}}}}};Yk.prototype.h.m=10;function Zk(){}H(be,Zk);Zk.prototype.i={names:[{name:'IStatesObject',j:be,kind:v}],s:[Ij]};Zk.prototype.h=function(){return{l:function(){return{states:{type:e,access:w,g:be},currentState:{type:n,access:y,g:be},transitions:{type:e,access:w,g:be}}},methods:function(){return{}}}};Zk.prototype.h.m=10;function V(){R.call(this)}I(V,R);H(id,V);V.prototype.createElement=function(){return tk(this,'div')};V.prototype.C=function(){V.w.C.apply(this);rk(Ik,'iBeadLayout',this)};V.prototype.addedToParent=V.prototype.C;V.prototype.Sb=function(){this.dispatchEvent(new $k(wb))};V.prototype.childrenAdded=V.prototype.Sb;V.prototype.Sl=function(){this.dispatchEvent(new K(Ec))};V.prototype.layoutNeeded=V.prototype.Sl;V.prototype.Ya=F('view');V.prototype.getLayoutHost=V.prototype.Ya;
V.prototype.Nl=function(a){var b=this.Oe,c;for(c in b)if(b[c].name==a)return!0;return!1};V.prototype.hasState=V.prototype.Nl;V.prototype.addElement=function(a,b){b='undefined'!==typeof b?b:!0;V.w.addElement.apply(this,[a,b]);b&&this.dispatchEvent(new $k(wb,a))};V.prototype.addElement=V.prototype.addElement;V.prototype.ga=function(a,b,c){c='undefined'!==typeof c?c:!0;V.w.ga.apply(this,[a,b,c]);c&&this.dispatchEvent(new $k(wb,a))};V.prototype.addElementAt=V.prototype.ga;
V.prototype.L=function(a,b){b='undefined'!==typeof b?b:!0;V.w.L.apply(this,[a,b]);b&&this.dispatchEvent(new $k('childrenRemoved',a))};V.prototype.removeElement=V.prototype.L;G=V.prototype;G.te=function(){return this};G.hl=F('Oe');G.Bp=function(a){this.Oe=a;this.Ne=O(this.Oe[0].name);try{rk(al,'iStatesImpl',this)}catch(b){}};G.xj=F('Ne');G.qo=function(a){var b=new bl(Nb,!1,!1,this.Ne,a);this.Ne=a;this.dispatchEvent(b)};G.sl=F('tm');G.Gp=E('tm');
Object.defineProperties(V.prototype,{strandChildren:{get:V.prototype.te},states:{get:V.prototype.hl,set:V.prototype.Bp},currentState:{get:V.prototype.xj,set:V.prototype.qo},transitions:{get:V.prototype.sl,set:V.prototype.Gp}});V.prototype.i={names:[{name:'GroupBase',j:id,kind:q}],s:[Zk,Yk,Gk,Fk,Xk]};
V.prototype.h=function(){return{o:function(){return{}},l:function(){return{strandChildren:{type:Qd,access:w,g:id},states:{type:e,access:y,g:id},currentState:{type:n,access:y,g:id,W:function(){return[{name:Ea,O:[{key:'',value:Nb}]}]}},transitions:{type:e,access:y,g:id}}},methods:function(){return{GroupBase:{type:'',g:id},addedToParent:{type:B,g:id},childrenAdded:{type:B,g:id},layoutNeeded:{type:B,g:id},getLayoutHost:{type:Jd,g:id},hasState:{type:h,g:id,parameters:function(){return[{index:1,type:n,
optional:!1}]}},addElement:{type:B,g:id,parameters:function(){return[{index:1,type:td,optional:!1},{index:2,type:h,optional:!0}]}},addElementAt:{type:B,g:id,parameters:function(){return[{index:1,type:td,optional:!1},{index:2,type:u,optional:!1},{index:3,type:h,optional:!0}]}},removeElement:{type:B,g:id,parameters:function(){return[{index:1,type:td,optional:!1},{index:2,type:h,optional:!0}]}}}}}};V.prototype.h.m=10;function cl(){R.call(this)}I(cl,V);H(ed,cl);cl.prototype.Gc=function(a,b){cl.w.addElement.apply(this,[a,'undefined'!==typeof b?b:!0])};cl.prototype.$addElement=cl.prototype.Gc;cl.prototype.Hc=function(a,b,c){cl.w.ga.apply(this,[a,b,'undefined'!==typeof c?c:!0])};cl.prototype.$addElementAt=cl.prototype.Hc;cl.prototype.Kc=function(a,b){cl.w.L.apply(this,[a,'undefined'!==typeof b?b:!0])};cl.prototype.$removeElement=cl.prototype.Kc;cl.prototype.Jc=function(a){return cl.w.ma.apply(this,[a])};
cl.prototype.$getElementIndex=cl.prototype.Jc;cl.prototype.Ic=function(a){return cl.w.U.apply(this,[a])};cl.prototype.$getElementAt=cl.prototype.Ic;cl.prototype.te=function(){null==this.jh&&(this.jh=new dl(this));return this.jh};cl.prototype.Vi=function(){return cl.w.Ab.apply(this)};Object.defineProperties(cl.prototype,{strandChildren:{get:cl.prototype.te},$numElements:{get:cl.prototype.Vi}});cl.prototype.i={names:[{name:'ContainerBase',j:ed,kind:q}],s:[Wk]};
cl.prototype.h=function(){return{o:function(){return{}},l:function(){return{strandChildren:{type:Qd,access:w,g:ed},$numElements:{type:u,access:w,g:ed}}},methods:function(){return{ContainerBase:{type:'',g:ed},$addElement:{type:B,g:ed,parameters:function(){return[{index:1,type:td,optional:!1},{index:2,type:h,optional:!0}]}},$addElementAt:{type:B,g:ed,parameters:function(){return[{index:1,type:td,optional:!1},{index:2,type:u,optional:!1},{index:3,type:h,optional:!0}]}},$removeElement:{type:B,g:ed,parameters:function(){return[{index:1,
type:td,optional:!1},{index:2,type:h,optional:!0}]}},$getElementIndex:{type:u,g:ed,parameters:function(){return[{index:1,type:td,optional:!1}]}},$getElementAt:{type:td,g:ed,parameters:function(){return[{index:1,type:u,optional:!1}]}}}}}};cl.prototype.h.m=10;function el(){}H(Hd,el);el.prototype.i={names:[{name:'IItemRendererProvider',j:Hd,kind:v}]};el.prototype.h=function(){return{l:function(){return{itemRenderer:{type:Ad,access:y,g:Hd}}},methods:function(){return{}}}};el.prototype.h.m=10;function fl(){R.call(this)}I(fl,cl);H(gd,fl);fl.prototype.C=function(){this.sm||(Wj.valuesImpl.ta(this),this.sm=!0);fl.w.C.apply(this);this.dispatchEvent(new K(uc))};fl.prototype.addedToParent=fl.prototype.C;fl.prototype.kh=null;fl.prototype.Yj=F('kh');fl.prototype.Qo=E('kh');Object.defineProperties(fl.prototype,{itemRenderer:{get:fl.prototype.Yj,set:fl.prototype.Qo}});fl.prototype.i={names:[{name:'DataContainerBase',j:gd,kind:q}],s:[el]};
fl.prototype.h=function(){return{o:function(){return{}},l:function(){return{itemRenderer:{type:Ad,access:y,g:gd}}},methods:function(){return{DataContainerBase:{type:'',g:gd},addedToParent:{type:B,g:gd}}}}};fl.prototype.h.m=10;function gl(){R.call(this);this.D='DataContainer'}I(gl,fl);H(Xe,gl);G=gl.prototype;G.cb=function(){return this.model.labelField};G.ub=function(a){this.model.labelField=a};G.Wb=function(){return this.model.dataProvider};G.xc=function(a){this.model.dataProvider=a};G.Hk=function(){var a=this.aa(hl);null==a&&(a=new il,this.I(a));return a};Object.defineProperties(gl.prototype,{labelField:{get:gl.prototype.cb,set:gl.prototype.ub},dataProvider:{get:gl.prototype.Wb,set:gl.prototype.xc},presentationModel:{get:gl.prototype.Hk}});
gl.prototype.i={names:[{name:'DataContainer',j:Xe,kind:q}],s:[Vk]};gl.prototype.h=function(){return{o:function(){return{}},l:function(){return{labelField:{type:n,access:y,g:Xe},dataProvider:{type:m,access:y,g:Xe},presentationModel:{type:ld,access:w,g:Xe}}},methods:function(){return{DataContainer:{type:'',g:Xe}}}}};gl.prototype.h.m=10;function jl(){gl.call(this);this.D+=' List'}I(jl,gl);H($e,jl);G=jl.prototype;G.qe=function(){return this.model.selectedIndex};G.Gf=function(a){this.model.selectedIndex=a};G.le=function(){return this.model.rollOverIndex};G.Df=function(a){this.model.rollOverIndex=a};G.me=function(){return this.presentationModel.rowHeight};G.Ef=function(a){uk(this.presentationModel,hl).rowHeight=a};G.re=function(){return this.model.selectedItem};G.Hf=function(a){this.model.selectedItem=a};
Object.defineProperties(jl.prototype,{selectedIndex:{get:jl.prototype.qe,set:jl.prototype.Gf},rollOverIndex:{get:jl.prototype.le,set:jl.prototype.Df},rowHeight:{get:jl.prototype.me,set:jl.prototype.Ef},selectedItem:{get:jl.prototype.re,set:jl.prototype.Hf}});jl.prototype.i={names:[{name:'List',j:$e,kind:q}]};
jl.prototype.h=function(){return{o:function(){return{}},l:function(){return{selectedIndex:{type:u,access:y,g:$e,W:function(){return[{name:Ea,O:[{key:'',value:ub}]}]}},rollOverIndex:{type:u,access:y,g:$e},rowHeight:{type:k,access:y,g:$e},selectedItem:{type:m,access:y,g:$e,W:function(){return[{name:Ea,O:[{key:'',value:ub}]}]}}}},methods:function(){return{List:{type:'',g:$e}}}}};jl.prototype.h.m=10;function qk(){}H(pd,qk);qk.prototype.i={names:[{name:'IBeadView',j:pd,kind:v}],s:[Jj]};qk.prototype.h=function(){return{l:function(){return{host:{type:ie,access:w,g:pd}}},methods:function(){return{}}}};qk.prototype.h.m=10;function kl(){J.call(this)}I(kl,J);H(bd,kl);kl.prototype.v=E('G');kl.prototype.Rj=F('G');Object.defineProperties(kl.prototype,{strand:{set:kl.prototype.v},host:{get:kl.prototype.Rj}});kl.prototype.i={names:[{name:'BeadViewBase',j:bd,kind:q}],s:[qk]};kl.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:bd},host:{type:ie,access:w,g:bd}}},methods:function(){return{BeadViewBase:{type:'',g:bd}}}}};kl.prototype.h.m=10;function ll(){J.call(this)}I(ll,kl);H(lf,ll);ll.prototype.gc=function(){var a=this.host;!a.cd()&&isNaN(a.explicitHeight)&&isNaN(a.percentHeight)||!a.dd()&&isNaN(a.explicitWidth)&&isNaN(a.percentWidth)?(this.host.addEventListener(vh,P(this.zb,this,Tb)),this.host.addEventListener(Ph,P(this.zb,this,Tb)),this.host.addEventListener(kc,P(this.zb,this,Tb))):ml(this)};
ll.prototype.zb=function(){this.host.removeEventListener(vh,P(this.zb,this,Tb));this.host.removeEventListener(Ph,P(this.zb,this,Tb));this.host.removeEventListener(kc,P(this.zb,this,Tb));ml(this)};function ml(a){a.host.addEventListener(vh,P(a.lf,a,fh));a.host.addEventListener(Ph,P(a.lf,a,fh));a.host.addEventListener(kc,P(a.lf,a,fh))}ll.prototype.lf=D();ll.prototype.Rb=D();ll.prototype.beforeLayout=ll.prototype.Rb;ll.prototype.Pa=D();ll.prototype.Pb=D();ll.prototype.afterLayout=ll.prototype.Pb;
ll.prototype.ab=F('host');ll.prototype.Qk=F('host');ll.prototype.v=function(a){ll.w.v.apply(this,[a]);this.host.addEventListener(uc,P(this.gc,this,jc))};Object.defineProperties(ll.prototype,{contentView:{get:ll.prototype.ab},resizableView:{get:ll.prototype.Qk},strand:{set:ll.prototype.v}});ll.prototype.i={names:[{name:'GroupView',j:lf,kind:q}],s:[qk,Ek]};
ll.prototype.h=function(){return{o:function(){return{}},l:function(){return{contentView:{type:Md,access:w,g:lf},resizableView:{type:ie,access:w,g:lf},strand:{type:ce,access:C,g:lf}}},methods:function(){return{GroupView:{type:'',g:lf},beforeLayout:{type:B,g:lf},afterLayout:{type:B,g:lf}}}}};ll.prototype.h.m=10;function nl(){J.call(this)}I(nl,ll);H(gf,nl);nl.prototype.yl=F('rc');nl.prototype.ab=function(){return null!=this.viewport?this.viewport.contentView:this.host};nl.prototype.v=function(a){this.G=a;nl.w.v.apply(this,[a]);this.rc||(this.rc=rk(ol,'iViewport',this.G));this.rc&&(a=this.host,null!=a&&a!=this.rc.contentView&&a.addElement(this.rc.contentView))};Object.defineProperties(nl.prototype,{viewport:{get:nl.prototype.yl},contentView:{get:nl.prototype.ab},strand:{set:nl.prototype.v}});
nl.prototype.i={names:[{name:'ContainerView',j:gf,kind:q}]};nl.prototype.h=function(){return{o:function(){return{}},l:function(){return{contentView:{type:Md,access:w,g:gf},strand:{type:ce,access:C,g:gf}}},methods:function(){return{}}}};nl.prototype.h.m=10;function Ik(){}H(nd,Ik);Ik.prototype.da=D();Ik.prototype.layout=Ik.prototype.da;Ik.prototype.i={names:[{name:'IBeadLayout',j:nd,kind:v}],s:[Jj]};Ik.prototype.h=function(){return{l:function(){return{}},methods:function(){return{layout:{type:h,g:nd}}}}};Ik.prototype.h.m=10;function pl(){}H(ne,pl);G=pl.prototype;G.nh=-1;G.mh=-1;G.Ll=function(){if(this.host.width!=this.nh||this.host.height!=this.mh)this.Pa(),this.nh=this.host.width,this.mh=this.host.height};G.Cl=function(){this.vm&&this.Pa()};G.Fl=function(){this.Pa()};G.gc=function(){this.vm=!0;this.Pa()};G.Pe=!1;G.Pa=function(){if(!this.Pe){this.Pe=!0;var a=this.host.Ya();a.Rb();this.da()&&a.Pb();this.Pe=!1;this.host.dispatchEvent(new K('layoutComplete'))}};pl.prototype.performLayout=pl.prototype.Pa;
pl.prototype.da=Qh(!1);pl.prototype.layout=pl.prototype.da;pl.prototype.v=function(a){this.host=a;var b=P(this.Ll,this,'handleSizeChange');a.addEventListener(Ph,b);a.addEventListener(kc,b);a.addEventListener(vh,b);a.addEventListener(wb,P(this.Cl,this,'handleChildrenAdded'));a.addEventListener(uc,P(this.gc,this,jc));a.addEventListener(Ec,P(this.Fl,this,'handleLayoutNeeded'))};pl.prototype.gk=function(){return this.host.Ya().contentView};
Object.defineProperties(pl.prototype,{strand:{set:pl.prototype.v},layoutView:{get:pl.prototype.gk}});pl.prototype.i={names:[{name:'LayoutBase',j:ne,kind:q}],s:[Ik]};pl.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:ne}}},methods:function(){return{LayoutBase:{type:'',g:ne},performLayout:{type:B,g:ne},layout:{type:h,g:ne}}}}};pl.prototype.h.m=10;function ql(){}I(ql,pl);H(xf,ql);ql.prototype.Hh=-1;ql.prototype.Ih=-1;ql.prototype.da=function(){var a=this.layoutView;a.rd('flex');a.element.style['flex-flow']='column';var b=a.numElements;if(0==b)return!1;for(var c=0;c<b;c++){var d=a.U(c);d&&(0<=this.grow&&(d.element.style['flex-grow']=String(this.grow)),0<=this.shrink&&(d.element.style['flex-shrink']=String(this.shrink)),isNaN(d.percentHeight)||(d.element.style['flex-basis']=d.percentHeight.toString()+'%'),d.dispatchEvent(new K(Ec)))}return!0};
ql.prototype.layout=ql.prototype.da;ql.prototype.Lj=F('Hh');ql.prototype.Fo=E('Hh');ql.prototype.cl=F('Ih');ql.prototype.yp=E('Ih');Object.defineProperties(ql.prototype,{grow:{get:ql.prototype.Lj,set:ql.prototype.Fo},shrink:{get:ql.prototype.cl,set:ql.prototype.yp}});ql.prototype.i={names:[{name:'VerticalFlexLayout',j:xf,kind:q}]};
ql.prototype.h=function(){return{o:function(){return{}},l:function(){return{grow:{type:k,access:y,g:xf},shrink:{type:k,access:y,g:xf}}},methods:function(){return{VerticalFlexLayout:{type:'',g:xf},layout:{type:h,g:xf}}}}};ql.prototype.h.m=10;function rl(){J.call(this)}I(rl,J);H(va,rl);H('ASDocClassEvents.key','description:string;qname:string;tags:object;type:string');G=rl.prototype;G.gg=null;G.ag=null;G.dg=null;G.fg=null;G.eg=null;G.$f=null;G.hg=null;G.bg=null;G.cg=null;G.ec=F('gg');G.Lf=E('gg');G.Xb=F('ag');G.rf=E('ag');G.ke=F('dg');G.Cf=E('dg');G.ve=F('fg');G.Kf=E('fg');G.bl=F('eg');G.xp=E('eg');G.Od=F('$f');G.Wn=E('$f');G.tl=F('hg');G.Hp=E('hg');G.yk=F('bg');G.gp=E('bg');G.bc=F('cg');G.Cc=E('cg');
Object.defineProperties(rl.prototype,{type:{get:rl.prototype.ec,set:rl.prototype.Lf},description:{get:rl.prototype.Xb,set:rl.prototype.rf},qname:{get:rl.prototype.ke,set:rl.prototype.Cf},tags:{get:rl.prototype.ve,set:rl.prototype.Kf},shortDescription:{get:rl.prototype.bl,set:rl.prototype.xp},attributes:{get:rl.prototype.Od,set:rl.prototype.Wn},typehref:{get:rl.prototype.tl,set:rl.prototype.Hp},ownerhref:{get:rl.prototype.yk,set:rl.prototype.gp},platforms:{get:rl.prototype.bc,set:rl.prototype.Cc}});
rl.prototype.i={names:[{name:va,j:va,kind:q}]};rl.prototype.h=function(){return{o:function(){return{}},l:function(){return{type:{type:n,access:y,g:va},description:{type:n,access:y,g:va},qname:{type:n,access:y,g:va},tags:{type:e,access:y,g:va},shortDescription:{type:n,access:y,g:va},attributes:{type:e,access:y,g:va},typehref:{type:n,access:y,g:va},ownerhref:{type:n,access:y,g:va},platforms:{type:e,access:y,g:va}}},methods:function(){return{}}}};rl.prototype.h.m=9;rl.prototype.h.xb=Object.keys(rl);function sl(){J.call(this)}I(sl,rl);H(wa,sl);G=sl.prototype;G.ig=null;G.kg=null;G.jg=null;G.lg=null;G.mg=null;G.ng=null;G.fj=F('ig');G.ao=E('ig');G.Fj=F('kg');G.zo=E('kg');G.Cj=F('jg');G.wo=E('jg');G.qk=F('lg');G.cp=E('lg');G.Tk=F('mg');G.pp=E('mg');G.Uk=F('ng');G.qp=E('ng');
Object.defineProperties(sl.prototype,{bindable:{get:sl.prototype.fj,set:sl.prototype.ao},details:{get:sl.prototype.Fj,set:sl.prototype.zo},deprecated:{get:sl.prototype.Cj,set:sl.prototype.wo},namespace:{get:sl.prototype.qk,set:sl.prototype.cp},return:{get:sl.prototype.Tk,set:sl.prototype.pp},returnhref:{get:sl.prototype.Uk,set:sl.prototype.qp}});sl.prototype.i={names:[{name:wa,j:wa,kind:q}]};
sl.prototype.h=function(){return{o:function(){return{}},l:function(){return{bindable:{type:e,access:y,g:wa},details:{type:e,access:y,g:wa},deprecated:{type:e,access:y,g:wa},namespace:{type:n,access:y,g:wa},'return':{type:n,access:y,g:wa},returnhref:{type:n,access:y,g:wa}}},methods:function(){return{}}}};sl.prototype.h.m=9;function al(){}H(ae,al);al.prototype.i={names:[{name:'IStatesImpl',j:ae,kind:v}],s:[Ij,Jj]};al.prototype.h=function(){return{l:function(){return{}},methods:function(){return{}}}};al.prototype.h.m=10;var tl;Object.defineProperties(D(),{isRelevant:{get:Qh(!0)}});function vk(){}H(ge,vk);vk.prototype.i={names:[{name:'IStyleObject',j:ge,kind:v}]};vk.prototype.h=function(){return{l:function(){return{object:{type:he,access:C,g:ge}}},methods:function(){return{}}}};vk.prototype.h.m=10;function ul(){}I(ul,pl);H(rf,ul);ul.prototype.da=function(){var a,b=this.layoutView;var c=b.numElements;b.element.style.position!=db&&'relative'!=b.element.style.position&&(b.element.style.position='relative');for(a=0;a<c;a++)b.U(a).positioner.style.position=db;return!0};ul.prototype.layout=ul.prototype.da;ul.prototype.i={names:[{name:'BasicLayout',j:rf,kind:q}],s:[Ik]};
ul.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{BasicLayout:{type:'',g:rf},layout:{type:h,g:rf}}}}};ul.prototype.h.m=10;function vl(){}H(kd,vl);vl.prototype.i={names:[{name:'IApplicationView',j:kd,kind:v}],s:[kk,Zk]};vl.prototype.h=function(){return{l:function(){return{applicationModel:{type:m,access:C,g:kd}}},methods:function(){return{}}}};vl.prototype.h.m=10;H('org.apache.royale.reflection.nativejs.AS3uint',function(){var a={};a.classRef=wl(Jh);a.name=Jh;a.SYNTHETIC_TYPE=!0;a.ROYALE_CLASS_INFO={names:[{name:Jh,j:Jh,kind:q}]};a.ROYALE_REFLECTION_INFO=function(){return{methods:function(){return{uint:{parameters:function(){return[{index:1,optional:!0,type:'*'}]},type:'',declaredBy:Jh}}}}};return a});function xl(){}H(Od,xl);xl.prototype.Ra=D();xl.prototype.setMXMLDescriptor=xl.prototype.Ra;xl.prototype.R=D();xl.prototype.generateMXMLAttributes=xl.prototype.R;xl.prototype.i={names:[{name:'IMXMLDocument',j:Od,kind:v}]};
xl.prototype.h=function(){return{l:function(){return{MXMLDescriptor:{type:e,access:w,g:Od}}},methods:function(){return{setMXMLDescriptor:{type:B,g:Od,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:e,optional:!1}]}},generateMXMLAttributes:{type:B,g:Od,parameters:function(){return[{index:1,type:e,optional:!1}]}}}}}};xl.prototype.h.m=10;function yl(){}H(Sd,yl);yl.prototype.i={names:[{name:'IPopUpHost',j:Sd,kind:v}]};yl.prototype.h=function(){return{l:function(){return{popUpParent:{type:Td,access:w,g:Sd}}},methods:function(){return{}}}};yl.prototype.h.m=10;function zl(){}H(Td,zl);zl.prototype.i={names:[{name:'IPopUpHostParent',j:Td,kind:v}],s:[ok]};zl.prototype.h=function(){return{l:function(){return{popUpHost:{type:Sd,access:w,g:Td}}},methods:function(){return{}}}};zl.prototype.h.m=10;function Al(){R.call(this);this.D='royale'}I(Al,V);H(ve,Al);Al.prototype.aj=F('Bm');Al.prototype.Vn=function(a){this.Bm=a;this.dispatchEvent(new K(Ic))};Al.prototype.je=function(){return this};Al.prototype.cc=function(){return this};Object.defineProperties(Al.prototype,{applicationModel:{get:Al.prototype.aj,set:Al.prototype.Vn},popUpParent:{get:Al.prototype.je},popUpHost:{get:Al.prototype.cc}});Al.prototype.i={names:[{name:'ViewBase',j:ve,kind:q}],s:[yl,zl,vl]};
Al.prototype.h=function(){return{o:function(){return{}},l:function(){return{applicationModel:{type:m,access:y,g:ve,W:function(){return[{name:Ea,O:[{key:'',value:Ic}]}]}},popUpParent:{type:Td,access:w,g:ve},popUpHost:{type:Sd,access:w,g:ve}}},methods:function(){return{ViewBase:{type:'',g:ve}}}}};Al.prototype.h.m=10;function Bl(){this.sh=this;Al.call(this)}I(Bl,Al);H(ue,Bl);Bl.prototype.C=function(){this.rh||Wj.valuesImpl.ta(this);Bl.w.C.apply(this);this.rh||(Ck(this.sh,this,this.MXMLDescriptor),this.dispatchEvent(new K(tc)),this.dispatchEvent(new K(uc)),this.rh=!0)};Bl.prototype.addedToParent=Bl.prototype.C;Bl.prototype.Ra=function(a,b){this.sh=a;this.Cm=b};Bl.prototype.setMXMLDescriptor=Bl.prototype.Ra;Bl.prototype.R=function(a){Bk(this,a)};Bl.prototype.generateMXMLAttributes=Bl.prototype.R;
Bl.prototype.S=F('Cm');Object.defineProperties(Bl.prototype,{MXMLDescriptor:{get:Bl.prototype.S}});Bl.prototype.i={names:[{name:'View',j:ue,kind:q}],s:[xl]};
Bl.prototype.h=function(){return{o:function(){return{mxmlContent:{type:e,u:function(a,b){return void 0!==b?a.mxmlContent=b:a.mxmlContent}}}},l:function(){return{MXMLDescriptor:{type:e,access:w,g:ue}}},methods:function(){return{View:{type:'',g:ue},addedToParent:{type:B,g:ue},setMXMLDescriptor:{type:B,g:ue,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:e,optional:!1}]}},generateMXMLAttributes:{type:B,g:ue,parameters:function(){return[{index:1,type:e,optional:!1}]}}}}}};
Bl.prototype.h.m=10;function Cl(){}H(zd,Cl);Cl.prototype.F=D();Cl.prototype.setDocument=Cl.prototype.F;Cl.prototype.i={names:[{name:'IDocument',j:zd,kind:v}]};Cl.prototype.h=function(){return{l:function(){return{}},methods:function(){return{setDocument:{type:B,g:zd,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:n,optional:!0}]}}}}}};Cl.prototype.h.m=10;function Dl(){}H(Vc,Dl);Dl.prototype.F=E(ac);Dl.prototype.setDocument=Dl.prototype.F;G=Dl.prototype;G.em=function(){'this'==this.destinationID?this.document[this.destinationPropertyName]=this.document.data[this.sourcePropertyName]:this.document[this.destinationID][this.destinationPropertyName]=this.document.data[this.sourcePropertyName]};G.Ej=F('bm');G.yo=E('bm');G.dc=F('dm');G.Dc=E('dm');G.Zb=F('cm');G.zc=E('cm');G.v=function(){this.document.addEventListener(Pb,P(this.em,this,'dataChangeHandler'))};
Object.defineProperties(Dl.prototype,{destinationID:{get:Dl.prototype.Ej,set:Dl.prototype.yo},sourcePropertyName:{get:Dl.prototype.dc,set:Dl.prototype.Dc},destinationPropertyName:{get:Dl.prototype.Zb,set:Dl.prototype.zc},strand:{set:Dl.prototype.v}});Dl.prototype.i={names:[{name:'ItemRendererSimpleBinding',j:Vc,kind:q}],s:[Jj,Cl]};
Dl.prototype.h=function(){return{o:function(){return{}},l:function(){return{destinationID:{type:n,access:y,g:Vc},sourcePropertyName:{type:n,access:y,g:Vc},destinationPropertyName:{type:n,access:y,g:Vc},strand:{type:ce,access:C,g:Vc}}},methods:function(){return{ItemRendererSimpleBinding:{type:'',g:Vc},setDocument:{type:B,g:Vc,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:n,optional:!0}]}}}}}};Dl.prototype.h.m=10;function El(a,b,c,d){d='undefined'!==typeof d?d:null;K.call(this,a,'undefined'!==typeof b?b:!1,'undefined'!==typeof c?c:!1);this.detail=d}I(El,K);H(De,El);El.prototype.P=function(){return new El(this.type,this.bubbles,this.cancelable,this.detail)};El.prototype.cloneEvent=El.prototype.P;El.prototype.i={names:[{name:'DetailEvent',j:De,kind:q}]};
El.prototype.h=function(){return{o:function(){return{detail:{type:n,u:function(a,b){return void 0!==b?a.detail=b:a.detail}}}},l:function(){return{}},methods:function(){return{DetailEvent:{type:'',g:De,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:h,optional:!0},{index:3,type:h,optional:!0},{index:4,type:n,optional:!0}]}},cloneEvent:{type:Je,g:De}}}}};El.prototype.h.m=10;function Fl(){}H(xd,Fl);Fl.prototype.i={names:[{name:'IDataProviderItemRendererMapper',j:xd,kind:v}],s:[Jj]};Fl.prototype.h=function(){return{l:function(){return{itemRendererFactory:{type:Fd,access:y,g:xd}}},methods:function(){return{}}}};Fl.prototype.h.m=10;function Gl(){this.Ch=this;this.D='Container';R.call(this)}I(Gl,cl);H(We,Gl);Gl.prototype.C=function(){this.Bh||Wj.valuesImpl.ta(this);Gl.w.C.apply(this);this.Bh||(Ck(this.Ch,this,this.MXMLDescriptor),this.dispatchEvent(new K(tc)),this.dispatchEvent(new K(uc)),this.Bh=!0)};Gl.prototype.addedToParent=Gl.prototype.C;Gl.prototype.Ra=function(a,b){this.Ch=a;this.Pm=b};Gl.prototype.setMXMLDescriptor=Gl.prototype.Ra;Gl.prototype.R=function(a){Bk(this,a)};Gl.prototype.generateMXMLAttributes=Gl.prototype.R;
Gl.prototype.S=F('Pm');Object.defineProperties(Gl.prototype,{MXMLDescriptor:{get:Gl.prototype.S}});Gl.prototype.i={names:[{name:'Container',j:We,kind:q}],s:[xl]};
Gl.prototype.h=function(){return{o:function(){return{mxmlContent:{type:e,u:function(a,b){return void 0!==b?a.mxmlContent=b:a.mxmlContent}}}},l:function(){return{MXMLDescriptor:{type:e,access:w,g:We}}},methods:function(){return{Container:{type:'',g:We},addedToParent:{type:B,g:We},setMXMLDescriptor:{type:B,g:We,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:e,optional:!1}]}},generateMXMLAttributes:{type:B,g:We,parameters:function(){return[{index:1,type:e,optional:!1}]}}}}}};
Gl.prototype.h.m=10;function sk(){}H(md,sk);sk.prototype.i={names:[{name:'IBeadController',j:md,kind:v}],s:[Jj]};sk.prototype.h=function(){return{l:function(){return{}},methods:function(){return{}}}};sk.prototype.h.m=10;function Hl(){}H(qf,Hl);G=Hl.prototype;G.Dl=function(a){a.item.addEventListener(wc,P(this.si,this,ph));a.item.addEventListener(Ac,P(this.oi,this,lh));a.item.addEventListener(zc,P(this.ni,this,kh))};G.El=function(a){a.item.removeEventListener(wc,P(this.si,this,ph));a.item.removeEventListener(Ac,P(this.oi,this,lh));a.item.removeEventListener(zc,P(this.ni,this,kh))};G.si=function(a){this.ua.selectedIndex=a.index>>0;this.ua.selectedItem=a.data;this.Tl.host.dispatchEvent(new K(ub))};
G.oi=function(a){if(a=uk(a.currentTarget,Ak))this.ua.rollOverIndex=a.index};G.ni=function(a){if(a=uk(a.currentTarget,Ak))a.hovered=!1,a.down=!1,this.ua.rollOverIndex=-1};G.v=function(a){this.Gh=a;this.ua=a.aa(Il);this.Tl=a.aa(Jl);this.Gh.addEventListener('itemAdded',P(this.Dl,this,'handleItemAdded'));this.Gh.addEventListener('itemRemoved',P(this.El,this,'handleItemRemoved'))};Object.defineProperties(Hl.prototype,{strand:{set:Hl.prototype.v}});
Hl.prototype.i={names:[{name:'ListSingleSelectionMouseController',j:qf,kind:q}],s:[sk]};Hl.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:qf}}},methods:function(){return{ListSingleSelectionMouseController:{type:'',g:qf}}}}};Hl.prototype.h.m=10;function Kl(){}H(og,Kl);Kl.prototype.bi=0;Kl.prototype.F=function(a){this.document=a;var b=a.mxmlsd[this.itemsDescriptorIndex];M(b,Array)?(this.itemsDescriptor=new Rk,this.itemsDescriptor.descriptor=b,a.mxmlsd[this.itemsDescriptorIndex]=this.itemsDescriptor):this.itemsDescriptor=b};Kl.prototype.setDocument=Kl.prototype.F;Kl.prototype.kc=function(a){for(var b in a)this[b]=a[b];return Ll(Object(this))};Kl.prototype.initializeFromObject=Kl.prototype.kc;G=Kl.prototype;G.ee=F('rn');G.zf=E('rn');G.bk=F('bi');
G.Uo=E('bi');G.ak=F('sn');G.To=E('sn');G.Yb=F('pn');G.yc=E('pn');G.Jk=F('un');G.mp=E('un');G.Fk=F('tn');G.jp=E('tn');G.Pk=F('vn');G.op=E('vn');G.$b=F('qn');G.Ac=E('qn');
Object.defineProperties(Kl.prototype,{items:{get:Kl.prototype.ee,set:Kl.prototype.zf},itemsDescriptorIndex:{get:Kl.prototype.bk,set:Kl.prototype.Uo},itemsDescriptor:{get:Kl.prototype.ak,set:Kl.prototype.To},destination:{get:Kl.prototype.Yb,set:Kl.prototype.yc},propertyName:{get:Kl.prototype.Jk,set:Kl.prototype.mp},position:{get:Kl.prototype.Fk,set:Kl.prototype.jp},relativeTo:{get:Kl.prototype.Pk,set:Kl.prototype.op},document:{get:Kl.prototype.$b,set:Kl.prototype.Ac}});
Kl.prototype.i={names:[{name:'AddItems',j:og,kind:q}],s:[Cl]};
Kl.prototype.h=function(){return{o:function(){return{}},l:function(){return{items:{type:e,access:y,g:og},itemsDescriptorIndex:{type:u,access:y,g:og},itemsDescriptor:{type:pg,access:y,g:og},destination:{type:n,access:y,g:og},propertyName:{type:n,access:y,g:og},position:{type:n,access:y,g:og},relativeTo:{type:n,access:y,g:og},document:{type:m,access:y,g:og}}},methods:function(){return{AddItems:{type:'',g:og},setDocument:{type:B,g:og,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,
type:n,optional:!0}]}},initializeFromObject:{type:m,g:og,parameters:function(){return[{index:1,type:m,optional:!1}]}}}}}};Kl.prototype.h.m=10;function Ml(){throw Error('StringTrimmer should not be instantiated.');}H(xg,Ml);function Nl(a){return null==a?'':a.trim()}H('org.apache.royale.utils.StringTrimmer.trim',Nl);function Ol(a,b){if(''!=a&&null!=a){a=a.split(b);b=a.length>>0;for(var c=0;c<b;c++)a[c]=Nl(O(a[c]));return a}return[]}H('org.apache.royale.utils.StringTrimmer.splitAndTrim',Ol);function Pl(a,b){if(''!=a&&null!=a){var c=Ol(a,b);0<c.length&&(a=c.join(b))}return a}H('org.apache.royale.utils.StringTrimmer.trimArrayElements',Pl);
function Ql(a){switch(a){case ' ':case '\t':case '\r':case '\n':case '\f':case '\u00a0':case '\u2028':case '\u2029':case '\u3000':return!0;default:return!1}}H('org.apache.royale.utils.StringTrimmer.isWhitespace',Ql);Ml.prototype.i={names:[{name:'StringTrimmer',j:xg,kind:q}]};
Ml.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{StringTrimmer:{type:'',g:xg},'|trim':{type:n,g:xg,parameters:function(){return[{index:1,type:n,optional:!1}]}},'|splitAndTrim':{type:e,g:xg,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:n,optional:!1}]}},'|trimArrayElements':{type:n,g:xg,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:n,optional:!1}]}},'|isWhitespace':{type:h,g:xg,parameters:function(){return[{index:1,
type:n,optional:!1}]}}}}}};Ml.prototype.h.m=10;function Rl(a){Sk.call(this);Sk.call(this,a);this.itemRenderer=null}I(Rl,Sk);H(Ne,Rl);H('org.apache.royale.events.ItemRendererEvent.CREATED',yc);Rl.prototype.P=function(){var a=new Rl(this.type);a.itemRenderer=this.itemRenderer;return a};Rl.prototype.cloneEvent=Rl.prototype.P;Rl.prototype.i={names:[{name:'ItemRendererEvent',j:Ne,kind:q}]};
Rl.prototype.h=function(){return{o:function(){return{itemRenderer:{type:Ed,u:function(a,b){return void 0!==b?a.itemRenderer=b:a.itemRenderer}}}},l:function(){return{}},methods:function(){return{ItemRendererEvent:{type:'',g:Ne,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:h,optional:!0},{index:3,type:h,optional:!0}]}},cloneEvent:{type:Je,g:Ne}}}}};Rl.prototype.h.m=10;H('org.apache.royale.reflection.nativejs.AS3Array',function(){var a={};a.classRef=Array;a.name=e;a.NATIVE_TYPE=!0;a.ROYALE_CLASS_INFO={names:[{name:e,j:e,kind:q}]};a.ROYALE_REFLECTION_INFO=function(){return{accessors:function(){return{length:{access:y,type:Jh,declaredBy:e}}},methods:function(){return{Array:{declaredBy:e,type:''}}}}};return a});function $k(a,b,c,d){b='undefined'!==typeof b?b:null;K.call(this,a,'undefined'!==typeof c?c:!1,'undefined'!==typeof d?d:!1);this.value=b}I($k,K);H(Qe,$k);$k.prototype.P=function(){return new $k(this.type,this.value,this.bubbles,this.cancelable)};$k.prototype.cloneEvent=$k.prototype.P;$k.prototype.i={names:[{name:'ValueEvent',j:Qe,kind:q}]};
$k.prototype.h=function(){return{o:function(){return{value:{type:'*',u:function d(b,c){return c!==d?b.value=c:b.value}}}},l:function(){return{}},methods:function(){return{ValueEvent:{type:'',g:Qe,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:'*',optional:!0},{index:3,type:h,optional:!0},{index:4,type:h,optional:!0}]}},cloneEvent:{type:Je,g:Qe}}}}};$k.prototype.h.m=10;function ol(){}H(ke,ol);ol.prototype.setPosition=D();ol.prototype.setPosition=ol.prototype.setPosition;ol.prototype.Be=D();ol.prototype.layoutViewportBeforeContentLayout=ol.prototype.Be;ol.prototype.Ae=D();ol.prototype.layoutViewportAfterContentLayout=ol.prototype.Ae;ol.prototype.i={names:[{name:'IViewport',j:ke,kind:v}],s:[Jj]};
ol.prototype.h=function(){return{l:function(){return{contentView:{type:ie,access:w,g:ke}}},methods:function(){return{setPosition:{type:B,g:ke,parameters:function(){return[{index:1,type:k,optional:!1},{index:2,type:k,optional:!1}]}},layoutViewportBeforeContentLayout:{type:B,g:ke,parameters:function(){return[{index:1,type:k,optional:!1},{index:2,type:k,optional:!1}]}},layoutViewportAfterContentLayout:{type:B,g:ke,parameters:function(){return[{index:1,type:Ue,optional:!1}]}}}}}};ol.prototype.h.m=10;function Sl(){J.call(this)}I(Sl,J);H(Mf,Sl);Sl.prototype.ui=function(){this.la.element.style.overflow='hidden'};Sl.prototype.setPosition=D();Sl.prototype.setPosition=Sl.prototype.setPosition;Sl.prototype.Be=D();Sl.prototype.layoutViewportBeforeContentLayout=Sl.prototype.Be;Sl.prototype.Ae=D();Sl.prototype.layoutViewportAfterContentLayout=Sl.prototype.Ae;Sl.prototype.ab=F('la');
Sl.prototype.v=function(a){this.G=a;var b=uk(Wj.valuesImpl.ba(a,'iContentView'),Function);b&&(this.la=new b);this.la||(this.la=a);this.ui()};Object.defineProperties(Sl.prototype,{contentView:{get:Sl.prototype.ab},strand:{set:Sl.prototype.v}});Sl.prototype.i={names:[{name:'Viewport',j:Mf,kind:q}],s:[Jj,ol]};
Sl.prototype.h=function(){return{o:function(){return{}},l:function(){return{contentView:{type:ie,access:w,g:Mf},strand:{type:ce,access:C,g:Mf}}},methods:function(){return{Viewport:{type:'',g:Mf},setPosition:{type:B,g:Mf,parameters:function(){return[{index:1,type:k,optional:!1},{index:2,type:k,optional:!1}]}},layoutViewportBeforeContentLayout:{type:B,g:Mf,parameters:function(){return[{index:1,type:k,optional:!1},{index:2,type:k,optional:!1}]}},layoutViewportAfterContentLayout:{type:B,g:Mf,parameters:function(){return[{index:1,
type:Ue,optional:!1}]}}}}}};Sl.prototype.h.m=10;function Il(){}H(Zd,Il);Il.prototype.i={names:[{name:'ISelectionModel',j:Zd,kind:v}],s:[Lj]};Il.prototype.h=function(){return{l:function(){return{selectedIndex:{type:u,access:y,g:Zd},selectedItem:{type:m,access:y,g:Zd}}},methods:function(){return{}}}};Il.prototype.h.m=10;function Tl(){J.call(this)}I(Tl,J);H(zf,Tl);G=Tl.prototype;G.Da=-1;G.Jh=-1;G.Ze=null;G.v=D();G.Wb=F('oa');G.xc=function(a){if(a!=this.oa){this.oa=a;if(!this.oa||this.Da>=this.oa.length)this.Da=-1;this.tc=-1==this.Da?null:this.oa[this.Da];this.dispatchEvent(new K(Sb))}};G.cb=F('Ze');G.ub=function(a){a!=this.Ze&&(this.Ze=a,this.dispatchEvent(new K(Dc)))};G.qe=F('Da');G.Gf=function(a){a!=this.Da&&(this.Da=a,this.tc=-1==a||null==this.oa?null:a<this.oa.length?this.oa[a]:null,this.dispatchEvent(new K(qh)))};
G.le=F('Jh');G.Df=function(a){this.Jh=a;this.dispatchEvent(new K(jh))};G.re=F('tc');G.Hf=function(a){if(a!=this.tc){this.tc=a;for(var b=this.oa.length>>0,c=0;c<b;c++)if(this.oa[c]==a){this.Da=c;break}this.dispatchEvent(new K(rh));this.dispatchEvent(new K(qh))}};G.Zk=function(){return String(this.tc)};G.vp=function(a){for(var b=this.oa.length>>0,c=0;c<b;c++)if(String(this.oa[c])==a){this.Da=c;break}this.dispatchEvent(new K(rh));this.dispatchEvent(new K(qh))};
Object.defineProperties(Tl.prototype,{strand:{set:Tl.prototype.v},dataProvider:{get:Tl.prototype.Wb,set:Tl.prototype.xc},labelField:{get:Tl.prototype.cb,set:Tl.prototype.ub},selectedIndex:{get:Tl.prototype.qe,set:Tl.prototype.Gf},rollOverIndex:{get:Tl.prototype.le,set:Tl.prototype.Df},selectedItem:{get:Tl.prototype.re,set:Tl.prototype.Hf},selectedString:{get:Tl.prototype.Zk,set:Tl.prototype.vp}});Tl.prototype.i={names:[{name:'ArraySelectionModel',j:zf,kind:q}],s:[Il,yk]};
Tl.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:zf},dataProvider:{type:m,access:y,g:zf},labelField:{type:n,access:y,g:zf},selectedIndex:{type:u,access:y,g:zf},rollOverIndex:{type:u,access:y,g:zf},selectedItem:{type:m,access:y,g:zf},selectedString:{type:n,access:y,g:zf}}},methods:function(){return{ArraySelectionModel:{type:'',g:zf}}}}};Tl.prototype.h.m=10;function Ul(){Hk.call(this);this.R([3,r,!0,Qg,Ng,!0,100,nb,null,[ql,1,p,!0,ea,0,0,null,Lk,1,p,!0,fa,0,0,null],0,0])}I(Ul,Hk);H(La,Ul);Ul.prototype.M=function(a){Ul.w.M.apply(this,[a]);a.typehref?this.eventTypeGroup.L(this.label):this.eventTypeGroup.L(this.link);this.target.element.id=this.obj.qname;1==this.obj.platforms.length&&('swf'==this.obj.platforms[0]&&(this.target.className+=ca),'js'==this.obj.platforms[0]&&(this.target.className+=ba))};Ul.prototype.sa=F(Ob);
Object.defineProperties(Ul.prototype,{data:{get:S.prototype.ra,set:Ul.prototype.M},obj:{get:Ul.prototype.sa}});
Object.defineProperties(Ul.prototype,{target:{get:F('Ta'),set:function(a){a!=this.Ta&&(this.Ta=a,this.dispatchEvent(T(this,Eh,null,a)))}},eventTypeGroup:{get:F('Tg'),set:function(a){a!=this.Tg&&(this.Tg=a,this.dispatchEvent(T(this,bc,null,a)))}},label:{get:F('ca'),set:function(a){a!=this.ca&&(this.ca=a,this.dispatchEvent(T(this,Cc,null,a)))}},link:{get:F('ia'),set:function(a){a!=this.ia&&(this.ia=a,this.dispatchEvent(T(this,Gc,null,a)))}},attributes:{get:F('pa'),set:function(a){a!=this.pa&&(this.pa=
a,this.dispatchEvent(T(this,jb,null,a)))}},description:{get:F('qa'),set:function(a){a!=this.qa&&(this.qa=a,this.dispatchEvent(T(this,Ub,null,a)))}},MXMLDescriptor:{get:function(){if(void 0==this.K){var a=Ul.w.S.apply(this),b=[Mk,2,p,!0,ja,nb,null,[Nk,1,p,!0,ha,0,0,null],0,0,[U,2,t,!0,Eh,r,!0,Tg,0,0,null,U,2,p,!0,ia,z,!0,'event',0,0,null],Mk,3,t,!0,bc,r,!0,bc,nb,null,[Nk,1,p,!0,ka,0,0,null],0,0,[U,3,p,!0,la,r,!0,'eventQName',z,!0,'Event Object Type:',0,0,null,U,2,t,!0,Cc,r,!0,'eventType',0,0,null,
Ok,2,t,!0,Gc,r,!0,'eventTypeLink',0,0,null],gl,4,t,!0,jb,r,!0,ib,xc,!0,new Vl(Wl),Ng,!0,100,0,0,null,Xl,2,t,!0,Ub,Ng,!0,100,0,0,null];this.K=a?a.concat(b):b}return this.K}}});
Ul.prototype.ka=[6,[Pc,ch],null,[Eh,z],[Ob,'type'],null,[Cc,z],[Ob,'type'],null,[Gc,z],[Ob,'typehref'],null,[Gc,lc],[Ob,jb],null,[jb,Qb],[Pc,Ub],null,[Ub,z],0,2,Pc,Pb,[0,5],null,[1,2,ch,cb,0,null,null,2,2,Ub,cb,5,null,null,null],3,2,Ob,[Pb,cb],[1,2,3,4],null,[4,2,'type',cb,[1,2],null,null,5,2,'typehref',cb,3,null,null,6,2,jb,cb,4,null,null,null]];Ul.prototype._bindings=Ul.prototype.ka;Ul.prototype.i={names:[{name:La,j:La,kind:q}]};
Ul.prototype.h=function(){return{o:function(){return{}},l:function(){return{data:{type:m,access:C,g:La},obj:{type:va,access:w,g:La},target:{type:Ze,access:y,g:La},eventTypeGroup:{type:Ye,access:y,g:La},label:{type:Ze,access:y,g:La},link:{type:Df,access:y,g:La},attributes:{type:Xe,access:y,g:La},description:{type:af,access:y,g:La}}},methods:function(){return{EventDetailRenderer:{type:'',g:La}}}}};Ul.prototype.h.m=9;function Yl(){}H(wg,Yl);function Zl(a,b,c,d){a=a?a:'';c=c+1-(a.length>>0);b=Array(c).join(b);return'undefined'!==typeof d&&d?a+b:b+a}H('org.apache.royale.utils.StringPadder.pad',Zl);Yl.prototype.i={names:[{name:'StringPadder',j:wg,kind:q}]};Yl.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{'|pad':{type:n,g:wg,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:n,optional:!1},{index:3,type:u,optional:!1},{index:4,type:h,optional:!0}]}}}}}};
Yl.prototype.h.m=10;function $l(){this.createElement();this.className='CheckBoxIcon'}H(Gf,$l);G=$l.prototype;G.createElement=function(){var a=document.createElement('input');a.type='checkbox';return this.element=a};G.Sd=F('an');G.pf=function(a){this.an=a;this.element.className=a};G.bb=F('bn');G.tb=function(a){this.bn=a;this.element.id=a};Object.defineProperties($l.prototype,{className:{get:$l.prototype.Sd,set:$l.prototype.pf},id:{get:$l.prototype.bb,set:$l.prototype.tb}});
$l.prototype.i={names:[{name:'CheckBoxIcon',j:Gf,kind:q}]};$l.prototype.h=function(){return{o:function(){return{element:{type:we,u:function(a,b){return void 0!==b?a.element=b:a.element}},positioner:{type:we,u:function(a,b){return void 0!==b?a.positioner=b:a.positioner}}}},l:function(){return{className:{type:n,access:y,g:Gf},id:{type:n,access:y,g:Gf}}},methods:function(){return{CheckBoxIcon:{type:'',g:Gf}}}}};$l.prototype.h.m=10;function am(){J.call(this)}I(am,J);H(qe,am);am.prototype.ym=function(){this.zm=!0;this.oh(new bl(Nb,!1,!1,null,this.jd.currentState))};
am.prototype.oh=function(a){if(this.zm){var b=this.jd,c=b.states;for(f in c){var d=c[f];if(d.name==a.oldValue){var f=void 0;d=d.overrides;for(f in d){var g=d[f];if(M(g,Kl)){g=g.items;for(var l in g){var x=g[l],A=x.parent;A&&A.L(x)}M(A,Yk)&&A.Sb()}else M(g,bm)?null!=g.target?g.document[g.target][g.name]=g.previousValue:g.document[g.name]=g.previousValue:M(g,cm)&&(null!=g.target?g.document[g.target].removeEventListener(g.name,g.handlerFunction):g.document.removeEventListener(g.name,g.handlerFunction))}break}}for(var N in c)if(d=
c[N],d.name==a.newValue){a=void 0;c=d.overrides;for(a in c)if(l=c[a],M(l,Kl)){null==l.items&&(l.items=l.itemsDescriptor.items,null==l.items&&(l.items=dm(l.document,null,l.itemsDescriptor.descriptor),l.itemsDescriptor.items=l.items));A=l.items;for(var Q in A){N=A[Q];var za=l.document;null!=l.destination&&(za=za[l.destination]);null!=l.relativeTo?(f=l.document[l.relativeTo],null==l.destination&&(za=f.parent),f=za.ma(f),'after'==l.position&&f++,za.ga(N,f)):'first'==l.position?za.ga(N,0):za.addElement(N)}M(za,
Yk)&&za.Sb()}else M(l,bm)?null!=l.target?(l.previousValue=l.document[l.target][l.name],l.document[l.target][l.name]=l.value):(l.previousValue=l.document[l.name],l.document[l.name]=l.value):M(l,cm)&&(null!=l.target?l.document[l.target].addEventListener(l.name,l.handlerFunction):l.document.addEventListener(l.name,l.handlerFunction));break}b.dispatchEvent(new K('stateChangeComplete'))}};
am.prototype.v=function(a){this.jd=a;this.jd.addEventListener(Nb,P(this.oh,this,'stateChangeHandler'));this.jd.addEventListener(uc,P(this.ym,this,'initialStateHandler'))};Object.defineProperties(am.prototype,{strand:{set:am.prototype.v}});am.prototype.i={names:[{name:'SimpleStatesImpl',j:qe,kind:q}],s:[al,Jj]};am.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:qe}}},methods:function(){return{SimpleStatesImpl:{type:'',g:qe}}}}};am.prototype.h.m=10;function em(){J.call(this)}I(em,J);H(gg,em);em.prototype.v=function(a){this.G=a;this.dispatchEvent(new K('ready'))};em.prototype.we=function(){return location.search};Object.defineProperties(em.prototype,{strand:{set:em.prototype.v},urlParameters:{get:em.prototype.we}});em.prototype.i={names:[{name:'URLParameterBead',j:gg,kind:q}],s:[Jj]};
em.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:gg},urlParameters:{type:n,access:w,g:gg}}},methods:function(){return{URLParameterBead:{type:'',g:gg}}}}};em.prototype.h.m=10;function fm(){J.call(this)}I(fm,em);H(Sf,fm);fm.prototype.v=function(a){this.G=a;-1!=location.search.indexOf(pa)&&this.dispatchEvent(new K('ready'))};fm.prototype.we=function(){var a=location.search,b=a.indexOf(pa)>>0;-1!=b&&(a=a.substring(b+20));return a};Object.defineProperties(fm.prototype,{strand:{set:fm.prototype.v},urlParameters:{get:fm.prototype.we}});fm.prototype.i={names:[{name:'EscapedFragmentBead',j:Sf,kind:q}]};
fm.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:Sf},urlParameters:{type:n,access:w,g:Sf}}},methods:function(){return{EscapedFragmentBead:{type:'',g:Sf}}}}};fm.prototype.h.m=10;function gm(){Hk.call(this);this.R([3,r,!0,Qg,Ng,!0,100,nb,null,[ql,1,p,!0,ea,0,0,null,Lk,1,p,!0,fa,0,0,null],0,0])}I(gm,Hk);H(Sa,gm);var hm={addEventListener:1,removeEventListener:1,hasEventListener:1,dispatchEvent:1,toString:1};
gm.prototype.M=function(a){gm.w.M.apply(this,[a]);a.returnhref?this.propertyTypeGroup.L(this.label):this.propertyTypeGroup.L(this.link);this.target.element.id=this.obj.qname;1!=this.obj.platforms.length||hm[this.obj.qname]||('swf'==this.obj.platforms[0]&&(this.target.className+=ca),'js'==this.obj.platforms[0]&&(this.target.className+=ba))};gm.prototype.sa=F(Ob);Object.defineProperties(gm.prototype,{data:{get:S.prototype.ra,set:gm.prototype.M},obj:{get:gm.prototype.sa}});
Object.defineProperties(gm.prototype,{target:{get:F('Ta'),set:function(a){a!=this.Ta&&(this.Ta=a,this.dispatchEvent(T(this,Eh,null,a)))}},propertyTypeGroup:{get:F('wc'),set:function(a){a!=this.wc&&(this.wc=a,this.dispatchEvent(T(this,Ug,null,a)))}},params:{get:F('vc'),set:function(a){a!=this.vc&&(this.vc=a,this.dispatchEvent(T(this,Jg,null,a)))}},label:{get:F('ca'),set:function(a){a!=this.ca&&(this.ca=a,this.dispatchEvent(T(this,Cc,null,a)))}},link:{get:F('ia'),set:function(a){a!=this.ia&&(this.ia=
a,this.dispatchEvent(T(this,Gc,null,a)))}},attributes:{get:F('pa'),set:function(a){a!=this.pa&&(this.pa=a,this.dispatchEvent(T(this,jb,null,a)))}},description:{get:F('qa'),set:function(a){a!=this.qa&&(this.qa=a,this.dispatchEvent(T(this,Ub,null,a)))}},MXMLDescriptor:{get:function(){if(void 0==this.K){var a=gm.w.S.apply(this),b=[Mk,2,p,!0,ja,nb,null,[Nk,1,p,!0,ha,0,0,null],0,0,[U,2,t,!0,Eh,r,!0,Tg,0,0,null,U,2,p,!0,ia,z,!0,Hc,0,0,null],Mk,3,t,!0,Ug,r,!0,Ug,nb,null,[Nk,1,p,!0,ka,0,0,null],0,0,[U,2,
p,!0,la,r,!0,'propertyQName',0,0,null,U,2,p,!0,'$ID7',z,!0,'(',0,0,null,gl,4,t,!0,Jg,'style',!0,sb,xc,!0,new Vl(im),nb,null,[Nk,1,p,!0,'$ID8',0,0,null],0,0,null,U,2,p,!0,'$ID9',z,!0,'):',0,0,null,U,2,t,!0,Cc,r,!0,'propertyType',0,0,null,Ok,2,t,!0,Gc,r,!0,Vg,0,0,null],gl,4,t,!0,jb,r,!0,ib,xc,!0,new Vl(Wl),Ng,!0,100,0,0,null,Xl,2,t,!0,Ub,Ng,!0,100,0,0,null];this.K=a?a.concat(b):b}return this.K}}});
gm.prototype.ka=[8,[Pc,ch],null,[Eh,z],[Ob,ch],null,[la,z],[Ob,Jg],null,[Jg,Qb],[Ob,gh],null,[Cc,z],[Ob,gh],null,[Gc,z],[Ob,hh],null,[Gc,lc],[Ob,jb],null,[jb,Qb],[Pc,Ub],null,[Ub,z],0,2,Pc,Pb,[0,7],null,[1,2,ch,cb,0,null,null,2,2,Ub,cb,7,null,null,null],3,2,Ob,[Pb,cb],[1,2,3,4,5,6],null,[4,2,ch,cb,1,null,null,5,2,Jg,cb,2,null,null,6,2,gh,cb,[3,4],null,null,7,2,hh,cb,5,null,null,8,2,jb,cb,6,null,null,null]];gm.prototype._bindings=gm.prototype.ka;gm.prototype.i={names:[{name:Sa,j:Sa,kind:q}]};
gm.prototype.h=function(){return{o:function(){return{}},l:function(){return{data:{type:m,access:C,g:Sa},obj:{type:xa,access:w,g:Sa},target:{type:Ze,access:y,g:Sa},propertyTypeGroup:{type:Ye,access:y,g:Sa},params:{type:Xe,access:y,g:Sa},label:{type:Ze,access:y,g:Sa},link:{type:Df,access:y,g:Sa},attributes:{type:Xe,access:y,g:Sa},description:{type:af,access:y,g:Sa}}},methods:function(){return{MethodDetailRenderer:{type:'',g:Sa}}}}};gm.prototype.h.m=9;gm.prototype.h.xb=Object.keys(gm);function dl(a){this.owner=a}H(fd,dl);dl.prototype.addElement=function(a,b){this.owner.Gc(a,'undefined'!==typeof b?b:!0)};dl.prototype.addElement=dl.prototype.addElement;dl.prototype.ga=function(a,b,c){this.owner.Hc(a,b,'undefined'!==typeof c?c:!0)};dl.prototype.addElementAt=dl.prototype.ga;dl.prototype.L=function(a,b){this.owner.Kc(a,'undefined'!==typeof b?b:!0)};dl.prototype.removeElement=dl.prototype.L;dl.prototype.ma=function(a){return this.owner.Jc(a)};dl.prototype.getElementIndex=dl.prototype.ma;
dl.prototype.U=function(a){return this.owner.Ic(a)};dl.prototype.getElementAt=dl.prototype.U;dl.prototype.Ab=function(){return this.owner.$numElements};dl.prototype.cc=function(){return uk(this.owner,yl)};Object.defineProperties(dl.prototype,{numElements:{get:dl.prototype.Ab},popUpHost:{get:dl.prototype.cc}});dl.prototype.i={names:[{name:'ContainerBaseStrandChildren',j:fd,kind:q}],s:[zl]};
dl.prototype.h=function(){return{o:function(){return{owner:{type:vd,u:function(a,b){return void 0!==b?a.owner=b:a.owner}}}},l:function(){return{numElements:{type:u,access:w,g:fd},popUpHost:{type:Sd,access:w,g:fd}}},methods:function(){return{ContainerBaseStrandChildren:{type:'',g:fd,parameters:function(){return[{index:1,type:Qd,optional:!1}]}},addElement:{type:B,g:fd,parameters:function(){return[{index:1,type:td,optional:!1},{index:2,type:h,optional:!0}]}},addElementAt:{type:B,g:fd,parameters:function(){return[{index:1,
type:td,optional:!1},{index:2,type:u,optional:!1},{index:3,type:h,optional:!0}]}},removeElement:{type:B,g:fd,parameters:function(){return[{index:1,type:td,optional:!1},{index:2,type:h,optional:!0}]}},getElementIndex:{type:u,g:fd,parameters:function(){return[{index:1,type:td,optional:!1}]}},getElementAt:{type:td,g:fd,parameters:function(){return[{index:1,type:u,optional:!1}]}}}}}};dl.prototype.h.m=10;function jm(){}H(Fd,jm);jm.prototype.Yc=D();jm.prototype.createItemRenderer=jm.prototype.Yc;jm.prototype.i={names:[{name:'IItemRendererClassFactory',j:Fd,kind:v}],s:[Jj]};jm.prototype.h=function(){return{l:function(){return{}},methods:function(){return{createItemRenderer:{type:Ed,g:Fd,parameters:function(){return[{index:1,type:Gd,optional:!1}]}}}}}};jm.prototype.h.m=10;function km(a,b){J.call(this);this.Lc=[];this.wd=a;this.Lc.push(b)}I(km,J);H(ua,km);G=km.prototype;G.wd=null;G.Lc=null;G.fk=F('wd');G.Vo=E('wd');G.bc=F('Lc');G.Cc=E('Lc');Object.defineProperties(km.prototype,{label:{get:km.prototype.fk,set:km.prototype.Vo},platforms:{get:km.prototype.bc,set:km.prototype.Cc}});km.prototype.i={names:[{name:ua,j:ua,kind:q}]};
km.prototype.h=function(){return{o:function(){return{}},l:function(){return{label:{type:n,access:y,g:ua},platforms:{type:e,access:y,g:ua}}},methods:function(){return{ASDocClassData:{type:'',g:ua,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:n,optional:!1}]}}}}}};km.prototype.h.m=9;function lm(){J.call(this)}I(lm,J);H(ya,lm);H('ASDocClassTags.key','tagName:string;values:object');G=lm.prototype;G.pg=null;G.qg=null;G.kl=F('pg');G.Cp=E('pg');G.vl=F('qg');G.Jp=E('qg');Object.defineProperties(lm.prototype,{tagName:{get:lm.prototype.kl,set:lm.prototype.Cp},values:{get:lm.prototype.vl,set:lm.prototype.Jp}});lm.prototype.i={names:[{name:ya,j:ya,kind:q}]};
lm.prototype.h=function(){return{o:function(){return{}},l:function(){return{tagName:{type:n,access:y,g:ya},values:{type:e,access:y,g:ya}}},methods:function(){return{}}}};lm.prototype.h.m=9;lm.prototype.h.xb=Object.keys(lm);var mm,nm,om,pm=[],qm=String.fromCharCode(0);function uk(a,b,c){var d=M(a,b);if(!d&&c){if(b.constructor===om)return b.coerce(a);if(-1!=[Boolean,Number,String].indexOf(b))return b(a);if(Object===b)return b(a).valueOf();if(null==a)return null;throw new TypeError(Ja+(a.i?a.i.names[0].j:String(a))+' to '+(''+(b.prototype&&b.prototype.i?b.prototype.i.names[0].j:String(b))));}return d?a:null}function rm(a){return a>>0}function O(a){return null==a?null:''+a}
function M(a,b){if(null==a||null==b)return!1;if(b===Array)return Array.isArray(a)&&!('_s'in a);if(a instanceof b||b===Object)return!0;var c=typeof a;if(c===zh)return b===String;if(c===Oc&&b===Number)return!0;if('boolean'===c)return b===Boolean;if(b.constructor===om)return!!b.checkIs(a);if(void 0===a.i)return!1;if(a.i.s&&sm(a,b))return!0;if(a=a.constructor.w)for(;a&&a.i;){if(a.i.s&&sm(a,b))return!0;a=a.constructor.w}return!1}
function sm(a,b){var c=a.i.s;for(a=c.length-1>>0;-1<a;a--)if(c[a]===b||c[a].prototype.i.s&&sm(c[a].prototype,b))return!0;return!1}function tm(a){return a>>>0}function P(a,b,c){if(b.hasOwnProperty(c))return b[c];a=li(a,b);Object.defineProperty(b,c,{value:a});return a}function um(a){var b='undefined'!==typeof b?b:0;M(ch,Array)?mm=uk(ch,Array):(pm[0]=ch,mm=pm);if(M(b,Array)){var c=0,d;for(d in b)c|=b[d]}else c=(b>>0==b?b>>0:0)>>0;nm=0<(2&c)?-1:1;c&16?a.sort(vm):c&1?a.sort(wm):a.sort(xm)}
function wm(a,b){var c=mm,d;for(d in c){var f=c[d];f=(a[f]||qm).toString().toLowerCase().localeCompare((b[f]||qm).toString().toLowerCase())>>0;if(0!=f)return f*nm>>0}return 0}function xm(a,b){var c=mm,d;for(d in c){var f=c[d];f=(a[f]||qm).toString().localeCompare((b[f]||qm).toString())>>0;if(0!=f)return f*nm>>0}return 0}function vm(a,b){var c=mm,d;for(d in c){var f=c[d];if(a[f]>b[f])return nm>>0;if(a[f]<b[f])return-nm>>0}return 0}
function Ll(a){if(a){var b=a.constructor;if(b==String||b==Number||b==Boolean||b.constructor==om)a=a.valueOf()}return a}
function wl(a,b){om||(om=Function('return function(b,c,d,e,n){var f=function(){var t=this;var a=Array.prototype.slice.call(arguments);a.push(t);t.type=f.type;t.value=f.construct.apply(t,a);return f.noWrap?t.value:t};f.type=b;f.toString=function(){return b};f.construct=c;f.checkIs=d;f.coerce=e;f.noWrap=!!n;var p=f.prototype;p.valueOf=function(){return this.value};p.constructor=f;f.constructor=arguments.callee;return f}')(),Object.defineProperties(om,{_types:{value:{}}}));var c=om._types;b&&(c[a]=new om(a,
b.construct,b.checkIs,b.coerce,b.noWrap));b=c[a];if(!b)switch(a){case u:b=c[u]=new om(u,rm,function(a){return a>>0===a.valueOf()},rm);break;case Jh:b=c.uint=new om(Jh,tm,function(a){return a>>>0===a.valueOf()},tm);break;case Fa:var d=/^name$|^name,|,name$|,name(?=,)/,f=Object.getOwnPropertyNames(D()).join().replace(d,''),g=function(a){return!(typeof a!=gc||!a.prototype||a.prototype.constructor!=a||!a.prototype.i&&a.constructor!=om&&Object.getOwnPropertyNames(a).join().replace(d,'')==f)};b=c.Class=
new om(Fa,function(){throw new TypeError('Error #1115: Class is not a constructor.');},g,function(a){if(null!=a&&!g(a))throw new TypeError('Error #1034: Type Coercion failed: cannot convert "'+O(a)+'" to Class.');return a?a:null});break;default:throw new TypeError('unknown synthetic type:'+a);}return b}
function dk(a){var b='Vector';null!==a&&(b+='.<'+a+'>');if(!om||!om._types[b]){var c=wl(b,{construct:function(c,d,f){var g=arguments,l=g.length;f=g[--l];d=!(2!=l||!g[--l]);c=(1==l?g[0]:0)>>0;f.type=b;f.fL=d?c:-1;return ym([],c,a,d,f)},checkIs:function(a){return zm(a,b)},coerce:function(c){if(c&&Array.isArray(c))return c=uk(c,Array),zm(c,b)?c:ym(c.slice(),c.length>>0,a,!1,null,!1);throw new TypeError(Ja+c+' to '+b);},noWrap:!0});Am=om;Bm(a,c,!1);Cm(a,c);c.prototype=Object.create(c.prototype);var d=
Dm(),f={length:{get:d.ye,set:d.Nf},toString:{value:d.toString},map:{value:d.map},splice:{value:d.splice},slice:{value:d.slice},concat:{value:d.concat},filter:{value:d.filter},insertAt:{value:d.Pf},removeAt:{value:d.Qf},constructor:{value:c}};f._ci={value:d._ci};f.eT={value:a};f.type={value:b};f.cE={value:c.cE,configurable:!0};f.dV={value:c.dV};Object.defineProperties(c.prototype,f)}return om._types[b]}function Em(){}var Am,Fm,Gm,Hm,Im;
function Jm(a,b){return'Error #1125: The index '+a+' is out of range '+b}function zm(a,b){var c=!!(a&&'_s'in a),d=c&&a._s instanceof Am._types[b];!d&&c&&b==bb&&(a=O(a._s.eT),d=a!=u&&a!=Jh&&a!=k);return d}function Cm(a,b){if(void 0===b.dV){var c={'int':0,uint:0,Number:0,String:'',Boolean:!1},d=null;a in c&&(d=c[a]);b.dV=d}}
function Bm(a,b,c){function d(a){return void 0===a?null:a}if(b.cE)return b.cE;var f={'int':rm,uint:tm,Number:Number,String:O,Boolean:Boolean,'*':d,Object:d};f=a==Fa?wl(Fa,null).coerce:f[a];if(null==f)if(0==a.indexOf('Vector.<'))f=function(b){if(null===b||dk(a.slice(8,-1)).checkIs(b))return b;throw new TypeError(Ja+b+' to '+a);};else{f=!1;for(var g=a.split('.'),l=g.length>>0,x=ci,A=0;A<l;A++)if(x=x&&x[g[A]],!x){if(c)throw new TypeError('missing dependency '+a);f=!0;break}f=f?null:function(a){return uk(a,
x,!0)}}b.cE=f;c&&Object.defineProperty(b.prototype,'cE',{value:f});return f}function Km(a,b,c){var d=c.cE;null==d&&(d=Bm(O(c.eT),c.constructor,!0));for(var f,g=0;g<b;g++){var l=a[g];void 0===l&&(l=null);try{a[g]=d(l)}catch(x){Lm(a,c.dV,g>>>0);f=x;break}}return f}
function ym(a,b,c,d,f,g){g='undefined'!==typeof g?g:!0;b>>>=0;if(null==c)throw new TypeError('Error #1007: Instantiation attempted on a non-constructor.');Mm(a,c,d,f);f||(f=a._s);if(b)if(g)a.length=b,Lm(a,f.dV,0);else if(b=Km(a,b>>>0,f))throw new b.constructor(b.message);return a}
function Mm(a,b,c,d){b=d?d.constructor:Am._types['Vector.<'+b+'>'];d||(d=(new b)._s);d.value=a;b=Object.assign||function(a,b){for(var c in b)a[c]=b[c];return a};var f={fixed:{get:function(){return-1<d.fL},set:function(b){-1<d.fL!=b&&(d.fL=b?a.length:-1,Object.defineProperties(a,Nm(b)))}},splice:{value:d.splice},slice:{value:d.slice},concat:{value:d.concat},map:{value:d.map},filter:{value:d.filter},toString:{value:d.toString},constructor:{value:d.constructor}};f._ci={value:d._ci};f._s={value:d};b(f,
Nm(c));Object.defineProperties(a,f);return a}function Lm(a,b,c){if(a.fill)a.fill(b,c);else{c>>>=0;for(var d=a.length>>>0;c<d;)a[c]=b,c++}}function Dm(){if(Gm)return Gm;Fm=new Em;Gm={};var a=Fm;Gm.toString=a.toString;Gm.map=a.map;Gm.splice=a.splice;Gm.slice=a.slice;Gm.concat=a.concat;Gm.filter=a.filter;Gm.Pf=a.Pf;Gm.Qf=a.Qf;Gm.ye=a.ye;Gm.Nf=a.Nf;Gm._ci=a.Li;return Gm}
function Nm(a){if(Hm)return a?Im:Hm;var b=Fm;Hm={pop:{value:Array.prototype.pop,configurable:!0},push:{value:b.push,configurable:!0},shift:{value:Array.prototype.shift,configurable:!0},unshift:{value:b.unshift,configurable:!0},insertAt:{value:b.Ol,configurable:!0},removeAt:{value:b.Mn,configurable:!0}};b={value:b.Tp,configurable:!0};Im={pop:b,push:b,shift:b,unshift:b,insertAt:b,removeAt:b};return a?Im:Hm}G=Em.prototype;G.toString=function(){return Array.prototype.map.call(this,String).toString()};
G.map=function(a){var b=this._s;return Mm(Array.prototype.map.call(this,function(c,d,f){return b.cE(a(c,d,f))}),O(b.eT),!1,null)};G.splice=function(){var a=Array.prototype.slice.call(arguments),b=this._s;a=Array.prototype.splice.apply(this,a);-1<b.fL&&(b.fL=this.length);return Mm(a,O(b.eT),!1,null)};G.slice=function(){var a=Array.prototype.slice.call(arguments),b=this._s;a=Array.prototype.slice.apply(this,a);return Mm(a,O(b.eT),!1,null)};
G.filter=function(){var a=Array.prototype.slice.call(arguments),b=this._s;a=Array.prototype.filter.apply(this,a);return Mm(a,O(b.eT),!1,null)};G.concat=function(){for(var a=Array.prototype.slice.call(arguments),b=this._s,c=a.length>>>0,d=0;d<c;d++){var f=a[d];if(!zm(f,b.type))throw new TypeError(Ja+f._s.type+' to '+b.type);}a=Array.prototype.concat.apply(this,a);return Mm(a,O(b.eT),!1,null)};G.Pf=function(a,b){return Array.prototype.splice.call(this,a,0,b)};
G.Qf=function(a){return Array.prototype.splice.call(this,a,1)[0]};G.ye=function(){return Number(this.value.length)};G.Nf=function(a){if(-1!=this.fL)throw new RangeError(Ka);var b=Number(this.value.length);this.value.length=a;b<a&&Lm(this.value,this.dV,b>>>0)};G.push=function(a){var b=Array.prototype.slice.call(arguments),c=Km(b,b.length>>>0,this._s);b=Array.prototype.push.apply(this,b)>>>0;if(c)throw new c.constructor(c.message);return b};
G.unshift=function(a){var b=Array.prototype.slice.call(arguments),c=Km(b,b.length>>>0,this._s);b=Array.prototype.unshift.apply(this,b)>>>0;if(c)throw new c.constructor(c.message);return b};G.Ol=function(a,b){this._s.insertAt.call(this,a,b)};G.Mn=function(a){var b=(0>a?Math.max(this.length+a,0):a)>>0;if(b>=this.length)throw new RangeError(Jm(a,this.length>>>0));return this._s.removeAt.call(this,b)};G.Tp=function(){throw new RangeError(Ka);};
G.Li=function(a){var b=Number(this._s.fL);if(a>>>0!==a||(-1==b?a>(b=Number(this.length)):a>=b))throw new RangeError(Jm(a,b>>>0));return a};function Om(){J.call(this)}I(Om,sl);H(sa,Om);H('ASDocClassAccessor.key','access:string;bindable:object;deprecated:object;description:string;details:object;namespace:string;qname:string;return:string;tags:object;type:string');Om.prototype.Xf=null;Om.prototype.Wi=F('Xf');Om.prototype.Sn=E('Xf');Object.defineProperties(Om.prototype,{access:{get:Om.prototype.Wi,set:Om.prototype.Sn}});Om.prototype.i={names:[{name:sa,j:sa,kind:q}]};
Om.prototype.h=function(){return{o:function(){return{}},l:function(){return{access:{type:e,access:y,g:sa}}},methods:function(){return{}}}};Om.prototype.h.m=9;Om.prototype.h.xb=Object.keys(Om);H('org.apache.royale.reflection.nativejs.AS3Number',function(){var a={};a.classRef=Number;a.name=k;a.NATIVE_TYPE=!0;a.ROYALE_CLASS_INFO={names:[{name:k,j:k,kind:q}]};a.ROYALE_REFLECTION_INFO=function(){return{methods:function(){return{Number:{parameters:function(){return[{index:1,optional:!0,type:'*'}]},type:'',declaredBy:k},'|sin':{parameters:function(){return[{index:1,optional:!1,type:k}]},declaredBy:k,type:k},'|random':{declaredBy:k,type:k},'|atan2':{parameters:function(){return[{index:1,optional:!1,
type:k},{index:2,optional:!1,type:k}]},declaredBy:k,type:k},'|sqrt':{parameters:function(){return[{index:1,optional:!1,type:k}]},declaredBy:k,type:k},'|cos':{parameters:function(){return[{index:1,optional:!1,type:k}]},declaredBy:k,type:k},'|asin':{parameters:function(){return[{index:1,optional:!1,type:k}]},declaredBy:k,type:k},'|tan':{parameters:function(){return[{index:1,optional:!1,type:k}]},declaredBy:k,type:k},'|floor':{parameters:function(){return[{index:1,optional:!1,type:k}]},declaredBy:k,
type:k},'|max':{parameters:function(){return[{index:1,optional:!0,type:k},{index:2,optional:!0,type:k}]},declaredBy:k,type:k},'|abs':{parameters:function(){return[{index:1,optional:!1,type:k}]},declaredBy:k,type:k},'|exp':{parameters:function(){return[{index:1,optional:!1,type:k}]},declaredBy:k,type:k},'|atan':{parameters:function(){return[{index:1,optional:!1,type:k}]},declaredBy:k,type:k},'|round':{parameters:function(){return[{index:1,optional:!1,type:k}]},declaredBy:k,type:k},'|log':{parameters:function(){return[{index:1,
optional:!1,type:k}]},declaredBy:k,type:k},'|min':{parameters:function(){return[{index:1,optional:!0,type:k},{index:2,optional:!0,type:k}]},declaredBy:k,type:k},'|acos':{parameters:function(){return[{index:1,optional:!1,type:k}]},declaredBy:k,type:k},'|ceil':{parameters:function(){return[{index:1,optional:!1,type:k}]},declaredBy:k,type:k},'|pow':{parameters:function(){return[{index:1,optional:!1,type:k},{index:2,optional:!1,type:k}]},declaredBy:k,type:k}}}}};return a});function Mk(){this.Eh=this;R.call(this);this.D='Group'}I(Mk,V);H(Ye,Mk);Mk.prototype.C=function(){this.Dh||Wj.valuesImpl.ta(this);Mk.w.C.apply(this);this.Dh||(Ck(this.Eh,this,this.MXMLDescriptor),this.dispatchEvent(new K(tc)),this.dispatchEvent(new K(uc)),this.Dh=!0)};Mk.prototype.addedToParent=Mk.prototype.C;Mk.prototype.Ra=function(a,b){this.Eh=a;this.Qm=b};Mk.prototype.setMXMLDescriptor=Mk.prototype.Ra;Mk.prototype.R=function(a){Bk(this,a)};Mk.prototype.generateMXMLAttributes=Mk.prototype.R;
Mk.prototype.S=F('Qm');Object.defineProperties(Mk.prototype,{MXMLDescriptor:{get:Mk.prototype.S}});Mk.prototype.i={names:[{name:'Group',j:Ye,kind:q}],s:[xl]};
Mk.prototype.h=function(){return{o:function(){return{mxmlContent:{type:e,u:function(a,b){return void 0!==b?a.mxmlContent=b:a.mxmlContent}}}},l:function(){return{MXMLDescriptor:{type:e,access:w,g:Ye}}},methods:function(){return{Group:{type:'',g:Ye},addedToParent:{type:B,g:Ye},setMXMLDescriptor:{type:B,g:Ye,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:e,optional:!1}]}},generateMXMLAttributes:{type:B,g:Ye,parameters:function(){return[{index:1,type:e,optional:!1}]}}}}}};
Mk.prototype.h.m=10;function Pm(){Mk.call(this);this.D=''}I(Pm,Mk);H(bf,Pm);Pm.prototype.rk=function(){return this.element.nodeValue};Pm.prototype.ep=function(a){this.element.nodeValue=a};Object.defineProperties(Pm.prototype,{nodeValue:{get:Pm.prototype.rk,set:Pm.prototype.ep}});Pm.prototype.i={names:[{name:'NodeElementBase',j:bf,kind:q}]};Pm.prototype.h=function(){return{o:function(){return{}},l:function(){return{nodeValue:{type:n,access:y,g:bf}}},methods:function(){return{NodeElementBase:{type:'',g:bf}}}}};
Pm.prototype.h.m=10;function Qm(){Pm.call(this)}I(Qm,Pm);H(ff,Qm);G=Qm.prototype;G.Fh='';G.ha=F('Fh');G.X=function(a){this.Fh=a;null==this.Fa&&(this.Fa=document.createTextNode(''),this.element.appendChild(this.Fa));this.Fa.nodeValue=a};G.Xj=function(){return this.element.innerHTML};G.Po=function(a){this.element.innerHTML=a};Object.defineProperties(Qm.prototype,{text:{get:Qm.prototype.ha,set:Qm.prototype.X},innerHTML:{get:Qm.prototype.Xj,set:Qm.prototype.Po}});
Qm.prototype.i={names:[{name:'TextNodeContainerBase',j:ff,kind:q}]};Qm.prototype.h=function(){return{o:function(){return{}},l:function(){return{text:{type:n,access:y,g:ff},innerHTML:{type:n,access:y,g:ff}}},methods:function(){return{TextNodeContainerBase:{type:'',g:ff}}}}};Qm.prototype.h.m=10;function Ok(){Pm.call(this)}I(Ok,Qm);H(Df,Ok);G=Ok.prototype;G.af='#';G.Oh='_self';G.Nh='';G.createElement=function(){tk(this,'a');this.element.setAttribute(lc,this.af);return this.element};G.ce=F('af');G.xf=function(a){this.af=a;this.element.setAttribute(lc,a)};G.Aa=F('Oh');G.wb=function(a){this.Oh=a;this.element.setAttribute(Eh,a)};G.Nk=F('Nh');G.np=function(a){this.Nh=a;this.element.setAttribute('rel',a)};
Object.defineProperties(Ok.prototype,{href:{get:Ok.prototype.ce,set:Ok.prototype.xf},target:{get:Ok.prototype.Aa,set:Ok.prototype.wb},rel:{get:Ok.prototype.Nk,set:Ok.prototype.np}});Ok.prototype.i={names:[{name:'A',j:Df,kind:q}]};Ok.prototype.h=function(){return{o:function(){return{}},l:function(){return{href:{type:n,access:y,g:Df},target:{type:n,access:y,g:Df},rel:{type:n,access:y,g:Df}}},methods:function(){return{A:{type:'',g:Df}}}}};Ok.prototype.h.m=10;function Rm(){}H(tf,Rm);Rm.prototype.i={names:[{name:'IOneFlexibleChildLayout',j:tf,kind:v}],s:[Ik]};Rm.prototype.h=function(){return{l:function(){return{flexibleChild:{type:n,access:y,g:tf}}},methods:function(){return{}}}};Rm.prototype.h.m=10;function Sm(){}I(Sm,pl);H(vf,Sm);Sm.prototype.Vm=function(){this.Pa()};Sm.prototype.da=function(){if(null==this.flexibleChild)return!1;var a=this.layoutView;this.Nb=this.Um[this.flexibleChild];var b=a.numElements;if(0==b)return!1;for(var c=0;c<b;c++){var d=uk(a.U(c),R);'inline-flex'!=d.element.style.display&&d.element.style.display!=Nc&&(d.element.style.display=vc)}var f=this.host.width-1;for(c=0;c<b;c++)d=uk(a.U(c),R),d!=this.Nb&&(f-=d.width);this.Nb.width=f;return!0};Sm.prototype.layout=Sm.prototype.da;
Sm.prototype.F=E('Um');Sm.prototype.setDocument=Sm.prototype.F;Sm.prototype.v=function(a){Sm.w.v.apply(this,[a]);uk(this.host.parent,Ij).addEventListener(vh,P(this.Vm,this,Kg))};Sm.prototype.ae=F('Tm');Sm.prototype.vf=E('Tm');Object.defineProperties(Sm.prototype,{strand:{set:Sm.prototype.v},flexibleChild:{get:Sm.prototype.ae,set:Sm.prototype.vf}});Sm.prototype.i={names:[{name:'OneFlexibleChildHorizontalLayoutForOverflow',j:vf,kind:q}],s:[Rm,Cl]};
Sm.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:vf},flexibleChild:{type:n,access:y,g:vf}}},methods:function(){return{OneFlexibleChildHorizontalLayoutForOverflow:{type:'',g:vf},layout:{type:h,g:vf},setDocument:{type:B,g:vf,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:n,optional:!0}]}}}}}};Sm.prototype.h.m=10;H('org.apache.royale.reflection.nativejs.AS3String',function(){var a={};a.classRef=String;a.name=n;a.NATIVE_TYPE=!0;a.ROYALE_CLASS_INFO={names:[{name:n,j:n,kind:q}]};a.ROYALE_REFLECTION_INFO=function(){return{accessors:function(){return{length:{access:w,type:u,declaredBy:n}}},methods:function(){return{String:{parameters:function(){return[{index:1,optional:!0,type:'*'}]},type:'',declaredBy:n}}}}};return a});function U(){R.call(this);this.D='Label'}I(U,R);H(Ze,U);G=U.prototype;G.Ve='';G.createElement=function(){tk(this,'span');this.Fa=document.createTextNode(this.Ve);this.element.appendChild(this.Fa);this.element.style.whiteSpace='nowrap';return this.element};G.ha=F('Ve');G.X=function(a){this.Fa&&(this.Ve=a,this.Fa.nodeValue=a,this.dispatchEvent(Fh))};G.de=function(){return this.element.innerHTML};G.yf=function(a){this.element.innerHTML=a;this.dispatchEvent(Fh)};
Object.defineProperties(U.prototype,{text:{get:U.prototype.ha,set:U.prototype.X},html:{get:U.prototype.de,set:U.prototype.yf}});U.prototype.i={names:[{name:'Label',j:Ze,kind:q}]};U.prototype.h=function(){return{o:function(){return{}},l:function(){return{text:{type:n,access:y,g:Ze,W:function(){return[{name:Ea,O:[{key:'',value:Fh}]}]}},html:{type:n,access:y,g:Ze,W:function(){return[{name:Ea,O:[{key:'',value:'htmlChange'}]}]}}}},methods:function(){return{Label:{type:'',g:Ze}}}}};U.prototype.h.m=10;function Tm(){}H(Ae,Tm);G=Tm.prototype;G.th=0;G.ue=F('Lm');G.Jf=E('Lm');G.mj=F('th');G.jo=E('th');G.fc=F('Mm');G.Ec=E('Mm');Object.defineProperties(Tm.prototype,{style:{get:Tm.prototype.ue,set:Tm.prototype.Jf},color:{get:Tm.prototype.mj,set:Tm.prototype.jo},width:{get:Tm.prototype.fc,set:Tm.prototype.Ec}});Tm.prototype.i={names:[{name:'BorderStyles',j:Ae,kind:q}]};
Tm.prototype.h=function(){return{o:function(){return{}},l:function(){return{style:{type:n,access:y,g:Ae},color:{type:Jh,access:y,g:Ae},width:{type:k,access:y,g:Ae}}},methods:function(){return{BorderStyles:{type:'',g:Ae}}}}};Tm.prototype.h.m=10;function Um(a){a='undefined'!==typeof a?a:bb;var b={};b.classRef=dk(a.substring(8,a.length-1));b.name=a;b.SYNTHETIC_TYPE=!0;b.ROYALE_CLASS_INFO={names:[{name:a,j:a,kind:q}]};b.ROYALE_REFLECTION_INFO=function(){return{accessors:function(){return{length:{access:y,type:Jh,declaredBy:a},fixed:{access:y,type:h,declaredBy:a}}},methods:function(){var b={};b[a]={parameters:function(){return[{index:1,optional:!0,type:Jh},{index:2,optional:!0,type:h}]},type:'',declaredBy:a};return b}}};a==bb&&(b.variant=function(a){return Um(a)});
return b}H('org.apache.royale.reflection.nativejs.AS3Vector',Um);function bm(){}H(rg,bm);bm.prototype.F=E(ac);bm.prototype.setDocument=bm.prototype.F;bm.prototype.kc=function(a){for(var b in a)this[b]=a[b];return Ll(Object(this))};bm.prototype.initializeFromObject=bm.prototype.kc;G=bm.prototype;G.Aa=F('Fn');G.wb=E('Fn');G.eb=F('Dn');G.vb=E('Dn');G.xe=F('Gn');G.Mf=E('Gn');G.Ik=F('En');G.lp=E('En');G.$b=F('Cn');G.Ac=E('Cn');
Object.defineProperties(bm.prototype,{target:{get:bm.prototype.Aa,set:bm.prototype.wb},name:{get:bm.prototype.eb,set:bm.prototype.vb},value:{get:bm.prototype.xe,set:bm.prototype.Mf},previousValue:{get:bm.prototype.Ik,set:bm.prototype.lp},document:{get:bm.prototype.$b,set:bm.prototype.Ac}});bm.prototype.i={names:[{name:'SetProperty',j:rg,kind:q}],s:[Cl]};
bm.prototype.h=function(){return{o:function(){return{}},l:function(){return{target:{type:n,access:y,g:rg},name:{type:n,access:y,g:rg},value:{type:'*',access:y,g:rg},previousValue:{type:'*',access:y,g:rg},document:{type:m,access:y,g:rg}}},methods:function(){return{SetProperty:{type:'',g:rg},setDocument:{type:B,g:rg,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:n,optional:!0}]}},initializeFromObject:{type:m,g:rg,parameters:function(){return[{index:1,type:m,optional:!1}]}}}}}};
bm.prototype.h.m=10;function Vm(){J.call(this)}I(Vm,J);H(ra,Vm);H('ASDocClass.key','baseClassname:string;description:string;events:object;members:object;qname:string;tags:object;type:string');G=Vm.prototype;G.sg=null;G.rg=null;G.tg=null;G.vg=null;G.xg=null;G.yg=null;G.wg=null;G.ug=null;G.ej=F('sg');G.$n=E('sg');G.dj=F('rg');G.Zn=E('rg');G.Xb=F('tg');G.rf=E('tg');G.mk=F('vg');G.ap=E('vg');G.ve=F('xg');G.Kf=E('xg');G.ec=F('yg');G.Lf=E('yg');G.ke=F('wg');G.Cf=E('wg');G.Jj=F('ug');G.Do=E('ug');
Object.defineProperties(Vm.prototype,{baseInterfaceNames:{get:Vm.prototype.ej,set:Vm.prototype.$n},baseClassname:{get:Vm.prototype.dj,set:Vm.prototype.Zn},description:{get:Vm.prototype.Xb,set:Vm.prototype.rf},members:{get:Vm.prototype.mk,set:Vm.prototype.ap},tags:{get:Vm.prototype.ve,set:Vm.prototype.Kf},type:{get:Vm.prototype.ec,set:Vm.prototype.Lf},qname:{get:Vm.prototype.ke,set:Vm.prototype.Cf},events:{get:Vm.prototype.Jj,set:Vm.prototype.Do}});Vm.prototype.i={names:[{name:ra,j:ra,kind:q}]};
Vm.prototype.h=function(){return{o:function(){return{}},l:function(){return{baseInterfaceNames:{type:e,access:y,g:ra},baseClassname:{type:n,access:y,g:ra},description:{type:n,access:y,g:ra},members:{type:e,access:y,g:ra},tags:{type:e,access:y,g:ra},type:{type:n,access:y,g:ra},qname:{type:n,access:y,g:ra},events:{type:e,access:y,g:ra}}},methods:function(){return{}}}};Vm.prototype.h.m=9;Vm.prototype.h.xb=Object.keys(Vm);function Wm(){throw Error('StringUtil should not be instantiated.');}H(yg,Wm);H('org.apache.royale.utils.StringUtil.substitute',function(a,b){b=Array.prototype.slice.call(arguments,1);if(null===a)return'';var c=b.length>>>0;if(1===c&&M(b[0],Array)){var d=b[0];c=d.length>>>0}else d=b;for(var f=0;f<c;f++)a=a.replace(new RegExp('\\{'+f+'\\}','g'),d[f]);return a});H('org.apache.royale.utils.StringUtil.repeat',function(a,b){if(0===b)return'';for(var c=[],d=0;d<b;d++)c.push(a);return c.join('')});
H('org.apache.royale.utils.StringUtil.restrict',function(a,b){if(null===b)return a;if(''===b)return'';for(var c=[],d=a.length>>0,f=0;f<d;f++){var g=a.charCodeAt(f)>>>0,l=!1,x=!1,A=!1,N=!0,Q=0,za=b.length>>0;if(0<za){var fb=b.charCodeAt(0)>>>0;94===fb&&(l=!0)}for(var Yb=0;Yb<za;Yb++){fb=b.charCodeAt(Yb)>>>0;var Ld=!1;x?(Ld=!0,x=!1):45===fb?A=!0:94===fb?N=!N:92===fb?x=!0:Ld=!0;Ld&&(A?(Q<=g&&g<=fb&&(l=N),A=!1,Q=0):(g===fb&&(l=N),Q=fb))}l&&c.push(g)}return O(String.fromCharCode.apply(null,c))});
H('org.apache.royale.utils.StringUtil.trim',function(a){return Nl(a)});H('org.apache.royale.utils.StringUtil.splitAndTrim',function(a,b){return Ol(a,b)});H('org.apache.royale.utils.StringUtil.trimArrayElements',function(a,b){return Pl(a,b)});H('org.apache.royale.utils.StringUtil.isWhitespace',function(a){return Ql(a)});H('org.apache.royale.utils.StringUtil.removeWord',function(a,b){for(var c;-1<a.search(b);)c=a.search(b),a=a.substring(0,c)+a.substring(c+b.length,a.length);return a});
Wm.prototype.i={names:[{name:'StringUtil',j:yg,kind:q}]};
Wm.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{StringUtil:{type:'',g:yg},'|substitute':{type:n,g:yg,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:e,optional:!1}]}},'|repeat':{type:n,g:yg,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:u,optional:!1}]}},'|restrict':{type:n,g:yg,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:n,optional:!1}]}},'|trim':{type:n,g:yg,parameters:function(){return[{index:1,
type:n,optional:!1}]}},'|splitAndTrim':{type:e,g:yg,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:n,optional:!1}]}},'|trimArrayElements':{type:n,g:yg,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:n,optional:!1}]}},'|isWhitespace':{type:h,g:yg,parameters:function(){return[{index:1,type:n,optional:!1}]}},'|removeWord':{type:n,g:yg,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:n,optional:!1}]}}}}}};Wm.prototype.h.m=10;function Xm(){}H(Tc,Xm);function Ym(a){if(M(a.source,Array)){var b=a.source,c=b.length>>0;a=a.isStatic?a.staticRoot:a.document[b[0]];if(null==a)return null;for(var d=1;d<c;d++)if(a=a[b[d]],null==a)return null;return a}return M(a.source,Function)?a=a.source.apply(a.document):M(a.source,String)?a=a.isStatic?a.staticRoot[a.source]:a.document[a.source]:null}
function Zm(a,b){if(null!=a.destinationFunction)a.destinationFunction.apply(a.document,[b]);else if(M(a.destinationData,Array)){var c=a.destinationData,d=c.length>>0,f=a.document[c[0]];if(null==f)a.$l||(a.document.addEventListener(Lh,P(a.am,a,'destinationChangeHandler')),a.$l=!0);else{for(a=1;a<d-1;a++)if(f=f[c[a]],null==f)return;f[c[d-1]]=b}}}Xm.prototype.F=E(ac);Xm.prototype.setDocument=Xm.prototype.F;Xm.prototype.Jb=function(a,b){try{b&&(a=Ym(this)),Zm(this,a)}catch(c){}};
Xm.prototype.valueChanged=Xm.prototype.Jb;Xm.prototype.am=function(a){a.propertyName==this.destinationData[0]&&this.Jb(null,!0)};Xm.prototype.v=function(a){this.destination=a;try{var b=Ym(this);Zm(this,b)}catch(c){}};Object.defineProperties(Xm.prototype,{strand:{set:Xm.prototype.v}});Xm.prototype.i={names:[{name:'GenericBinding',j:Tc,kind:q}],s:[Jj,Cl]};
Xm.prototype.h=function(){return{o:function(){return{source:{type:m,u:function(a,b){return void 0!==b?a.source=b:a.source}},destinationData:{type:m,u:function(a,b){return void 0!==b?a.destinationData=b:a.destinationData}},destinationFunction:{type:Pa,u:function(a,b){return void 0!==b?a.destinationFunction=b:a.destinationFunction}},isStatic:{type:h,u:function(a,b){return void 0!==b?a.isStatic=b:a.isStatic}},staticRoot:{type:m,u:function(a,b){return void 0!==b?a.staticRoot=b:a.staticRoot}}}},l:function(){return{strand:{type:ce,
access:C,g:Tc}}},methods:function(){return{GenericBinding:{type:'',g:Tc},setDocument:{type:B,g:Tc,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:n,optional:!0}]}},valueChanged:{type:B,g:Tc,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:h,optional:!1}]}}}}}};Xm.prototype.h.m=10;function $m(){Bl.call(this);this.D+=' DocPage'}I($m,Bl);H(hg,$m);$m.prototype.i={names:[{name:'DocPage',j:hg,kind:q}]};$m.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{DocPage:{type:'',g:hg}}}}};$m.prototype.h.m=10;function an(){}H(Ee,an);var Uj={click:1,dblclick:1,change:1,keyup:1,keydown:1,load:1,mouseover:1,mouseout:1,mouseup:1,mousedown:1,mousemove:1,rollover:1,rollout:1,wheel:1};H('org.apache.royale.events.ElementEvents.elementEvents',Uj);an.prototype.i={names:[{name:'ElementEvents',j:Ee,kind:q}]};an.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{}}}};an.prototype.h.m=10;function bn(){}H(Gd,bn);bn.prototype.Uc=D();bn.prototype.addItemRenderer=bn.prototype.Uc;bn.prototype.Cd=D();bn.prototype.addItemRendererAt=bn.prototype.Cd;bn.prototype.kf=D();bn.prototype.removeItemRenderer=bn.prototype.kf;bn.prototype.Ia=D();bn.prototype.getItemRendererForIndex=bn.prototype.Ia;bn.prototype.Ld=D();bn.prototype.getItemRendererAt=bn.prototype.Ld;G=bn.prototype;G.jf=D();G.Di=D();G.i={names:[{name:'IItemRendererParent',j:Gd,kind:v}],s:[Ij]};
G.h=function(){return{l:function(){return{numItemRenderers:{type:u,access:w,g:Gd}}},methods:function(){return{addItemRenderer:{type:B,g:Gd,parameters:function(){return[{index:1,type:Ed,optional:!1},{index:2,type:h,optional:!1}]}},addItemRendererAt:{type:B,g:Gd,parameters:function(){return[{index:1,type:Ed,optional:!1},{index:2,type:u,optional:!1}]}},removeItemRenderer:{type:B,g:Gd,parameters:function(){return[{index:1,type:Ed,optional:!1}]}},getItemRendererForIndex:{type:Ed,g:Gd,parameters:function(){return[{index:1,
type:u,optional:!1}]}},getItemRendererAt:{type:Ed,g:Gd,parameters:function(){return[{index:1,type:u,optional:!1}]}},removeAllItemRenderers:{type:B,g:Gd},updateAllItemRenderers:{type:B,g:Gd}}}}};G.h.m=10;function hl(){}H(Nd,hl);hl.prototype.i={names:[{name:'IListPresentationModel',j:Nd,kind:v}],s:[Jj]};hl.prototype.h=function(){return{l:function(){return{rowHeight:{type:k,access:y,g:Nd},separatorThickness:{type:k,access:y,g:Nd}}},methods:function(){return{}}}};hl.prototype.h.m=10;function il(){J.call(this)}I(il,J);H(Bf,il);G=il.prototype;G.Lh=30;G.Mh=0;G.me=F('Lh');G.Ef=function(a){this.Lh=a;this.dispatchEvent(new K('rowHeightChanged'))};G.$k=F('Mh');G.wp=function(a){this.Mh=a;this.dispatchEvent(new K('separatorThicknessChanged'))};G.v=D();Object.defineProperties(il.prototype,{rowHeight:{get:il.prototype.me,set:il.prototype.Ef},separatorThickness:{get:il.prototype.$k,set:il.prototype.wp},strand:{set:il.prototype.v}});
il.prototype.i={names:[{name:'ListPresentationModel',j:Bf,kind:q}],s:[hl]};il.prototype.h=function(){return{o:function(){return{}},l:function(){return{rowHeight:{type:k,access:y,g:Bf},separatorThickness:{type:k,access:y,g:Bf},strand:{type:ce,access:C,g:Bf}}},methods:function(){return{ListPresentationModel:{type:'',g:Bf}}}}};il.prototype.h.m=10;function cn(){}H(Re,cn);function Vj(a,b,c){b='undefined'!==typeof b?b:!1;c='undefined'!==typeof c?c:!1;var d=null;try{return d=new Event(a,dn(b,c))}catch(f){}d||(d=document.createEvent('Event'),d.initEvent(a,b,c));return d}H('org.apache.royale.events.utils.EventUtils.createEvent',Vj);cn.prototype.i={names:[{name:'EventUtils',j:Re,kind:q}]};
cn.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{'|createEvent':{type:m,g:Re,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:h,optional:!0},{index:3,type:h,optional:!0}]}}}}}};cn.prototype.h.m=10;function en(){Hk.call(this);this.R([3,r,!0,'summary',Ng,!0,100,nb,null,[Kk,1,p,!0,ea,0,0,null,Lk,1,p,!0,fa,0,0,null],0,0])}I(en,Hk);H($a,en);en.prototype.Sc='#fff';en.prototype.Tc=da;en.prototype.Bd=!1;en.prototype.C=function(){en.w.C.apply(this);this.Bd=1==this.parent.ma(this)%2;this.element.style.backgroundColor=this.Bd?this.Tc:this.Sc};en.prototype.addedToParent=en.prototype.C;
en.prototype.$=function(){en.w.$.apply(this);if(null==this.element.style.backgroundColor||''==this.element.style.backgroundColor)this.element.style.backgroundColor=this.Bd?this.Tc:this.Sc};en.prototype.updateRenderer=en.prototype.$;G=en.prototype;G.Za=F('Sc');G.rb=E('Sc');G.$a=F('Tc');G.sb=E('Tc');
G.M=function(a){en.w.M.apply(this,[a]);a.returnhref?this.typeGroup.L(this.label):this.typeGroup.L(this.link);this.qname.href='#!'+this.obj.ownerhref+'/'+this.obj.qname;1==this.obj.platforms.length&&('swf'==this.obj.platforms[0]&&(this.qname.className+=ca),'js'==this.obj.platforms[0]&&(this.qname.className+=ba))};G.sa=F(Ob);
Object.defineProperties(en.prototype,{backgroundColor0:{get:en.prototype.Za,set:en.prototype.rb},backgroundColor1:{get:en.prototype.$a,set:en.prototype.sb},data:{get:S.prototype.ra,set:en.prototype.M},obj:{get:en.prototype.sa}});
Object.defineProperties(en.prototype,{typeGroup:{get:F('Ua'),set:function(a){a!=this.Ua&&(this.Ua=a,this.dispatchEvent(T(this,Ih,null,a)))}},qname:{get:F('Qa'),set:function(a){a!=this.Qa&&(this.Qa=a,this.dispatchEvent(T(this,ch,null,a)))}},label:{get:F('ca'),set:function(a){a!=this.ca&&(this.ca=a,this.dispatchEvent(T(this,Cc,null,a)))}},link:{get:F('ia'),set:function(a){a!=this.ia&&(this.ia=a,this.dispatchEvent(T(this,Gc,null,a)))}},short:{get:F('Fc'),set:function(a){a!=this.Fc&&(this.Fc=a,this.dispatchEvent(T(this,
sh,null,a)))}},MXMLDescriptor:{get:function(){if(void 0==this.K){var a=en.w.S.apply(this),b=[Mk,2,t,!0,Ih,nb,null,[Nk,1,p,!0,ha,0,0,null],0,0,[Ok,2,t,!0,ch,r,!0,'summaryQName',0,0,null,U,2,p,!0,ia,z,!0,':',0,0,null,U,2,t,!0,Cc,r,!0,'summaryType',0,0,null,Ok,2,t,!0,Gc,r,!0,Ch,0,0,null],Xl,3,t,!0,sh,r,!0,Ah,Ng,!0,100,0,0,null];this.K=a?a.concat(b):b}return this.K}}});
en.prototype.ka=[5,[Ob,ch],null,[ch,z],[Ob,gh],null,[Cc,z],[Ob,gh],null,[Gc,z],[Ob,hh],null,[Gc,lc],[Ob,th],null,[sh,z],0,2,Ob,[Pb,cb],[0,1,2,3,4],null,[1,2,ch,cb,0,null,null,2,2,gh,cb,[1,2],null,null,3,2,hh,cb,3,null,null,4,2,th,cb,4,null,null,null]];en.prototype._bindings=en.prototype.ka;en.prototype.i={names:[{name:$a,j:$a,kind:q}]};
en.prototype.h=function(){return{o:function(){return{}},l:function(){return{backgroundColor0:{type:n,access:y,g:$a},backgroundColor1:{type:n,access:y,g:$a},data:{type:m,access:C,g:$a},obj:{type:xa,access:w,g:$a},typeGroup:{type:Ye,access:y,g:$a},qname:{type:Df,access:y,g:$a},label:{type:Ze,access:y,g:$a},link:{type:Df,access:y,g:$a},'short':{type:af,access:y,g:$a}}},methods:function(){return{addedToParent:{type:B,g:$a},updateRenderer:{type:B,g:$a},SummaryRenderer:{type:'',g:$a}}}}};
en.prototype.h.m=9;function fn(){}H(jf,fn);fn.prototype.We=null;fn.prototype.v=D();fn.prototype.Wd=F('We');fn.prototype.qf=function(a){a!=this.We&&(this.We=a)};Object.defineProperties(fn.prototype,{strand:{set:fn.prototype.v},dataField:{get:fn.prototype.Wd,set:fn.prototype.qf}});fn.prototype.i={names:[{name:'DataFieldProviderBead',j:jf,kind:q}],s:[Jj]};
fn.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:jf},dataField:{type:n,access:y,g:jf}}},methods:function(){return{DataFieldProviderBead:{type:'',g:jf}}}}};fn.prototype.h.m=10;function gn(){}H(Sc,gn);gn.prototype.jc=D();function hn(a,b,c){var d;(d='undefined'!==typeof d?d:null)||(d=a.G[c.destination[0]]);var f=uk(d,Nj);f?f.I(b):d?(b.destination=d,a.G.I(b)):(a.Xa||(a.Xa={},a.G.addEventListener(Lh,P(a.Zl,a,'deferredBindingsHandler'))),a.Xa[c.destination[0]]=b)}function jn(a,b,c){b=b?b.vd:null;var d=!1;if(b)for(var f=b.length>>>0;f--;){var g=b[f];d=typeof g.ya==Oc?g.ya==c:-1!=g.ya.indexOf(c);!d&&g.children&&(d=jn(a,g.children,c));if(d)break}return d}
function kn(a,b,c,d,f){for(var g=!1,l=d.length>>0,x=0;x<l;x++){var A=d[x];if(typeof A.ya==Oc?A.ya==c:-1!=A.ya.indexOf(c)){var N=jn(a,A.children,c),Q=a.G;switch(A.type){case xh:Q=A.hf;b.staticRoot=Q;b.isStatic=!0;break;case Qg:g=A.getterFunction,typeof b.source!==gc||N||(g=b.source),g=new ln(a.G,A.propertyName,A.eventNames,g),A.Up=g,f?g.nb(f.value):g.nb(Q),f&&f.Ig(g),N||g.Hg(b),g=!0}N&&kn(a,b,c,A.children.vd,A.Up)}}g||(f?b.Jb(f.value,!0):b.Jb(null,!0))}
function mn(a,b){for(var c={},d=[],f=b.length>>0,g=0,l;g<f-1;){var x=b[g++]>>0;switch(b[g++]>>0){case 0:l={type:gc};l.functionName=b[g++];l.hq=b[g++];l.eventNames=b[g++];l.ya=b[g++];break;case 1:l={type:xh};l.propertyName=b[g++];l.eventNames=b[g++];l.ya=b[g++];l.getterFunction=b[g++];l.hf=b[g++];c[l.propertyName]=l;break;case 2:l={type:Qg};l.propertyName=b[g++];l.eventNames=b[g++];l.ya=b[g++];l.getterFunction=b[g++];c[l.propertyName]=l;break;case 3:l={type:'xml'},l.propertyName=b[g++],l.ya=b[g++],
c[l.propertyName]=l}l.children=b[g++];null!=l.children&&(l.children=mn(a,l.children));l.index=x;d.push(l)}return{vd:d,Kb:c}}function nn(a,b){var c=new on;c.destinationPropertyName=O(b.destination[1]);M(b.source,String)?c.sourcePropertyName=O(b.source):(c.sourceID=O(b.source[0]),c.sourcePropertyName=O(b.source[1]));c.F(a.G);hn(a,c,b)}
gn.prototype.Zl=function(){for(var a in this.Xa)if(null!=this.G[a]){var b=uk(this.G[a],Nj);if(b)b.I(this.Xa[a]);else if(b=this.G[a])this.Xa[a].destination=b,this.G.I(this.Xa[a]);delete this.Xa[a]}};gn.prototype.v=function(a){this.G=a;this.G.addEventListener(tc,P(this.jc,this,'initBindingsHandler'))};Object.defineProperties(gn.prototype,{strand:{set:gn.prototype.v}});gn.prototype.i={names:[{name:'DataBindingBase',j:Sc,kind:q}],s:[Jj]};
gn.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:Sc}}},methods:function(){return{DataBindingBase:{type:'',g:Sc}}}}};gn.prototype.h.m=10;function Lk(){}I(Lk,gn);H(Uc,Lk);
Lk.prototype.jc=function(a){Lk.w.jc.apply(this,[a]);if('_bindings'in this.G){var b=this.G._bindings,c=b[0]>>0,d=[];var f=1;for(a=0;a<c;a++){var g={};g.source=b[f++];g.Gd=b[f++];g.destination=b[f++];d.push(g)}b=mn(this,b.slice(f));for(a=0;a<c;a++){g=d[a];if(M(g.source,String)){var l=b.Kb[g.source];if(!l)nn(this,g);else if(M(l.eventNames,String)){var x=l.type==xh;f=new pn(x);f.destinationPropertyName=O(g.destination[1]);f.eventName=uk(l.eventNames,String);f.sourcePropertyName=O(g.source);x?f.F(l.hf):
f.F(this.G);hn(this,uk(f,qn),g)}}else M(g.source,Array)&&2==g.source.length&&2==g.destination.length?((f=b.Kb[g.source[0]])&&(l=f.children.Kb[g.source[1]]),f&&l&&(g.source[0]==Ob||M(f.eventNames,String)&&f.eventNames==Pb)?(l=new Dl,l.destinationID=O(g.destination[0]),l.destinationPropertyName=O(g.destination[1]),l.sourcePropertyName=O(g.source[1]),l.F(this.G),this.G.I(l)):null!=l&&M(l.eventNames,String)?(f=new pn,f.destinationPropertyName=O(g.destination[1]),f.eventName=uk(l.eventNames,String),f.sourceID=
O(g.source[0]),f.sourcePropertyName=O(g.source[1]),f.F(this.G),hn(this,uk(f,qn),g)):null!=l&&null!=l.eventNames||nn(this,g)):(l=g,g=a,f=b,x=new Xm,x.F(this.G),x.destinationData=l.destination,x.destinationFunction=l.Gd,x.source=l.source,kn(this,x,g,f.vd,null));l=null}}};Lk.prototype.i={names:[{name:'ItemRendererDataBinding',j:Uc,kind:q}]};Lk.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{ItemRendererDataBinding:{type:'',g:Uc}}}}};
Lk.prototype.h.m=10;function rn(){}H(Ad,rn);rn.prototype.Na=D();rn.prototype.newInstance=rn.prototype.Na;rn.prototype.i={names:[{name:'IFactory',j:Ad,kind:v}]};rn.prototype.h=function(){return{l:function(){return{}},methods:function(){return{newInstance:{type:'*',g:Ad}}}}};rn.prototype.h.m=10;function Vl(a){this.generator='undefined'!==typeof a?a:null}H(dd,Vl);Vl.prototype.Na=function(){var a=new this.generator;if(this.properties)for(var b in this.properties)a[b]=this.properties[b];return a};Vl.prototype.newInstance=Vl.prototype.Na;Vl.prototype.i={names:[{name:'ClassFactory',j:dd,kind:q}],s:[rn]};
Vl.prototype.h=function(){return{o:function(){return{generator:{type:Fa,u:function(a,b){return void 0!==b?a.generator=b:a.generator}},properties:{type:m,u:function(a,b){return void 0!==b?a.properties=b:a.properties}}}},l:function(){return{}},methods:function(){return{ClassFactory:{type:'',g:dd,parameters:function(){return[{index:1,type:Fa,optional:!0}]}},newInstance:{type:'*',g:dd}}}}};Vl.prototype.h.m=10;function sn(){}I(sn,gn);H(Yc,sn);
sn.prototype.jc=function(a){sn.w.jc.apply(this,[a]);if('_bindings'in this.G){var b=this.G._bindings,c=b[0]>>0,d=[];var f=1;for(a=0;a<c;a++){var g={};g.source=b[f++];g.Gd=b[f++];g.destination=b[f++];d.push(g)}b=mn(this,b.slice(f));for(a=0;a<c;a++){g=d[a];if(M(g.source,String)){var l=b.Kb[g.source];if(!l)nn(this,g);else if(M(l.eventNames,String)){var x=l.type==xh;f=new pn(x);f.destinationPropertyName=O(g.destination[1]);f.eventName=uk(l.eventNames,String);f.sourcePropertyName=O(g.source);x?f.F(l.hf):
f.F(this.G);hn(this,uk(f,qn),g)}}else M(g.source,Array)&&2==g.source.length&&2==g.destination.length?((f=b.Kb[g.source[0]])&&(l=f.children.Kb[g.source[1]]),l&&M(l.eventNames,String)?(f=new pn,f.destinationPropertyName=O(g.destination[1]),f.eventName=uk(l.eventNames,String),f.sourceID=O(g.source[0]),f.sourcePropertyName=O(g.source[1]),f.F(this.G),hn(this,uk(f,qn),g)):l&&null!=l.eventNames||(l=new on,l.destinationPropertyName=O(g.destination[1]),l.sourceID=O(g.source[0]),l.sourcePropertyName=O(g.source[1]),
l.F(this.G),hn(this,uk(l,qn),g))):(l=g,g=a,f=b,x=new Xm,x.F(this.G),x.destinationData=l.destination,x.destinationFunction=l.Gd,x.source=l.source,kn(this,x,g,f.vd,null));l=null}}};sn.prototype.i={names:[{name:'ViewDataBinding',j:Yc,kind:q}]};sn.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{ViewDataBinding:{type:'',g:Yc}}}}};sn.prototype.h.m=10;function tn(){}H(nf,tn);tn.prototype.i={names:[{name:'ITextItemRenderer',j:nf,kind:v}],s:[Ak]};tn.prototype.h=function(){return{l:function(){return{text:{type:n,access:y,g:nf}}},methods:function(){return{}}}};tn.prototype.h.m=10;function un(){R.call(this);this.D=Za}I(un,Dk);H(Kf,un);un.prototype.createElement=function(){return tk(this,'span')};un.prototype.ha=function(){return this.element.textContent};un.prototype.X=function(a){this.element.textContent=a};un.prototype.M=function(a){un.w.M.apply(this,[a]);this.text=vn(this,a)};Object.defineProperties(un.prototype,{text:{get:un.prototype.ha,set:un.prototype.X},data:{get:S.prototype.ra,set:un.prototype.M}});un.prototype.i={names:[{name:Za,j:Kf,kind:q}],s:[tn]};
un.prototype.h=function(){return{o:function(){return{}},l:function(){return{text:{type:n,access:y,g:Kf},data:{type:m,access:C,g:Kf}}},methods:function(){return{StringItemRenderer:{type:'',g:Kf}}}}};un.prototype.h.m=10;function rk(a,b,c){a=c.aa(a);!a&&(b=Wj.valuesImpl.ba(c,b))&&(a=new b,c.I(a));return a}H('org.apache.royale.utils.loadBeadFromValuesManager',rk);function wn(a){Sk.call(this);Sk.call(this,a);this.index=-1;this.data=null;this.multipleSelection=!1}I(wn,Sk);H(Le,wn);wn.prototype.P=function(){var a=new wn(this.type);a.index=this.index;a.data=this.data;a.multipleSelection=this.multipleSelection;return a};wn.prototype.cloneEvent=wn.prototype.P;wn.prototype.i={names:[{name:'ItemClickedEvent',j:Le,kind:q}]};
wn.prototype.h=function(){return{o:function(){return{index:{type:k,u:function(a,b){return void 0!==b?a.index=b:a.index}},data:{type:m,u:function(a,b){return void 0!==b?a.data=b:a.data}},multipleSelection:{type:h,u:function(a,b){return void 0!==b?a.multipleSelection=b:a.multipleSelection}}}},l:function(){return{}},methods:function(){return{ItemClickedEvent:{type:'',g:Le,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:h,optional:!0},{index:3,type:h,optional:!0}]}},cloneEvent:{type:Je,
g:Le}}}}};wn.prototype.h.m=10;function xn(){}H(Xd,xn);xn.prototype.i={names:[{name:'IScrollingViewport',j:Xd,kind:v}],s:[ol,Ij]};xn.prototype.h=function(){return{l:function(){return{verticalScrollPosition:{type:k,access:w,g:Xd},horizontalScrollPosition:{type:k,access:w,g:Xd}}},methods:function(){return{}}}};xn.prototype.h.m=10;function yn(){J.call(this)}I(yn,Sl);H(Jf,yn);G=yn.prototype;G.ui=function(){this.la.element.style.overflow=kb;this.G!=this.la&&(this.la.percentHeight=100,this.la.percentWidth=100,this.la.element.style.position=db)};G.wl=function(){return this.la.element.scrollTop};G.Lp=function(a){this.la.element.scrollTop=a};G.Qj=function(){return this.la.element.scrollLeft};G.Jo=function(a){this.la.element.scrollLeft=a};
Object.defineProperties(yn.prototype,{verticalScrollPosition:{get:yn.prototype.wl,set:yn.prototype.Lp},horizontalScrollPosition:{get:yn.prototype.Qj,set:yn.prototype.Jo}});yn.prototype.i={names:[{name:'ScrollingViewport',j:Jf,kind:q}],s:[Jj,xn]};yn.prototype.h=function(){return{o:function(){return{}},l:function(){return{verticalScrollPosition:{type:k,access:y,g:Jf},horizontalScrollPosition:{type:k,access:y,g:Jf}}},methods:function(){return{ScrollingViewport:{type:'',g:Jf}}}}};yn.prototype.h.m=10;function zn(){Mk.call(this);this.D='TopMenu'}I(zn,Mk);H(mg,zn);zn.prototype.createElement=function(){return this.element=document.createElement('ul')};zn.prototype.i={names:[{name:'TopMenuBase',j:mg,kind:q}]};zn.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{TopMenuBase:{type:'',g:mg}}}}};zn.prototype.h.m=10;function An(){}H(ye,An);G=An.prototype;G.gj=F('Hm');G.bo=E('Hm');G.Ak=F('Jm');G.hp=E('Jm');G.kk=F('Im');G.$o=E('Im');Object.defineProperties(An.prototype,{border:{get:An.prototype.gj,set:An.prototype.bo},padding:{get:An.prototype.Ak,set:An.prototype.hp},margins:{get:An.prototype.kk,set:An.prototype.$o}});An.prototype.i={names:[{name:'LayoutData',j:ye,kind:q}]};
An.prototype.h=function(){return{o:function(){return{}},l:function(){return{border:{type:xe,access:y,g:ye},padding:{type:xe,access:y,g:ye},margins:{type:ze,access:y,g:ye}}},methods:function(){return{LayoutData:{type:'',g:ye}}}}};An.prototype.h.m=10;function qn(){}H(qd,qn);qn.prototype.i={names:[{name:'IBinding',j:qd,kind:v}]};qn.prototype.h=function(){return{l:function(){return{destination:{type:m,access:y,g:qd},sourceID:{type:n,access:y,g:qd},sourcePropertyName:{type:n,access:y,g:qd},destinationPropertyName:{type:n,access:y,g:qd}}},methods:function(){return{}}}};qn.prototype.h.m=10;function on(){}H(Rc,on);on.prototype.F=E(ac);on.prototype.setDocument=on.prototype.F;function Bn(a){var b=window;a=a.split('.');var c=a.length>>0;if(0==c)return null;for(var d=0;d<c;d++)b=b[a[d]];return b}G=on.prototype;G.Yb=F('Vl');G.yc=E('Vl');G.se=F('Xl');G.If=E('Xl');G.Zb=F('Wl');G.zc=E('Wl');G.dc=F('Yl');G.Dc=E('Yl');
G.v=function(a){var b=null,c=null;null==this.destination&&(this.destination=a);if(this.source=null!=this.sourceID?this.document[this.sourceID]:this.document)if(this.sourcePropertyName in this.source)try{b=this.source[this.sourcePropertyName],this.destination[this.destinationPropertyName]=b}catch(d){}else if(this.sourcePropertyName in this.source.constructor)try{b=this.source.constructor[this.sourcePropertyName],this.destination[this.destinationPropertyName]=b}catch(d){}else{if(a=this.source.i)a=a.names[0].j,
(c=Bn(a))&&(b=c[this.sourcePropertyName]),this.destination[this.destinationPropertyName]=b}else try{(c=Bn(this.sourceID))&&(b=c[this.sourcePropertyName]),this.destination[this.destinationPropertyName]=b}catch(d){}};Object.defineProperties(on.prototype,{destination:{get:on.prototype.Yb,set:on.prototype.yc},sourceID:{get:on.prototype.se,set:on.prototype.If},destinationPropertyName:{get:on.prototype.Zb,set:on.prototype.zc},sourcePropertyName:{get:on.prototype.dc,set:on.prototype.Dc},strand:{set:on.prototype.v}});
on.prototype.i={names:[{name:'ConstantBinding',j:Rc,kind:q}],s:[Jj,Cl,qn]};on.prototype.h=function(){return{o:function(){return{}},l:function(){return{destination:{type:m,access:y,g:Rc},sourceID:{type:n,access:y,g:Rc},destinationPropertyName:{type:n,access:y,g:Rc},sourcePropertyName:{type:n,access:y,g:Rc},strand:{type:ce,access:C,g:Rc}}},methods:function(){return{ConstantBinding:{type:'',g:Rc},setDocument:{type:B,g:Rc,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:n,optional:!0}]}}}}}};
on.prototype.h.m=10;function Cn(){}H(pf,Cn);G=Cn.prototype;G.Jl=function(a){(a=uk(a.currentTarget,Ak))&&a.dispatchEvent(new Ai(Ac,!0))};G.Il=function(a){(a=uk(a.currentTarget,Ak))&&a.dispatchEvent(new Ai(zc,!0))};G.Hl=function(a){var b=uk(a.currentTarget,Ak);if(b){b.down=!0;b.hovered=!1;var c=new wn('itemMouseDown');c.data=b.data;c.multipleSelection=a.shiftKey;c.index=b.index;b.dispatchEvent(c)}};
G.Gl=function(a){var b=uk(a.currentTarget,Ak);if(b){var c=new wn(wc);c.data=b.data;c.multipleSelection=a.shiftKey;c.index=b.index;b.dispatchEvent(c)}};G.Kl=function(a){var b=uk(a.currentTarget,Ak);if(b){var c=new wn('itemMouseUp');c.data=b.data;c.multipleSelection=a.shiftKey;c.index=b.index;b.dispatchEvent(c)}};
G.v=function(a){this.Sm=a;a=this.Sm.element;rj(a,Lc,P(this.Jl,this,'handleMouseOver'));rj(a,'mouseout',P(this.Il,this,'handleMouseOut'));rj(a,'mousedown',P(this.Hl,this,'handleMouseDown'));rj(a,zb,P(this.Gl,this,'handleMouseClick'));rj(a,'mouseup',P(this.Kl,this,'handleMouseUp'))};Object.defineProperties(Cn.prototype,{strand:{set:Cn.prototype.v}});Cn.prototype.i={names:[{name:'ItemRendererMouseController',j:pf,kind:q}],s:[sk]};
Cn.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:pf}}},methods:function(){return{ItemRendererMouseController:{type:'',g:pf}}}}};Cn.prototype.h.m=10;function Dn(){}H(tg,Dn);function En(a){var b=a.toString(16);if(16777215<a){a=b.match(/.{2}/g);for(b=0;4>b;b++)a[b]=parseInt(a[b],16);a[3]=parseInt(''+a[3]/255*1E3,10)/1E3;return'rgba('+a.join(',')+')'}return'#'+Zl(b,'0',6)}H('org.apache.royale.utils.CSSUtils.attributeFromColor',En);function Zj(a,b){if(''===a)return NaN;var c=a.indexOf(bh)>>0;if(-1<c)return Number(a.substr(0,c));c=a.indexOf('%')>>0;return-1<c?Number(a.substr(0,c))*('undefined'!==typeof b?b:0)/100:Number(a)}
H('org.apache.royale.utils.CSSUtils.toNumber',Zj);function Fn(a){return(Gn(a)&16777215)>>>0}H('org.apache.royale.utils.CSSUtils.toColor',Fn);
function Gn(a){if(!M(a,String))return(a>>>0|4278190080)>>>0;var b=a;if('transparent'===b)return 4294967295;if('#'===b.charAt(0))return 4===b.length?'0x'+b.charAt(1)+b.charAt(1)+b.charAt(2)+b.charAt(2)+b.charAt(3)+b.charAt(3)>>>0:7===b.length?'0xFF'+b.substr(1)>>>0:'0x'+b.substr(1)>>>0;if(-1!==(a=b.indexOf('rgb(')>>0)){var c=b.indexOf(')')>>0;b=b.substring(a+4,c);a=b.split(',');return 4278190080+(a[0]>>>0<<16)+(a[1]>>>0<<8)+(a[2]>>>0)>>>0}return-1!==(a=b.indexOf('rgba(')>>0)?(c=b.indexOf(')')>>0,b=
b.substring(a+5,c),a=b.split(','),a[3]*=255,(a[3]>>>0<<24)+(a[0]>>>0<<16)+(a[1]>>>0<<8)+(a[2]>>>0)>>>0):Hn.hasOwnProperty(b)?Hn[b]>>>0:b>>>0}H('org.apache.royale.utils.CSSUtils.toColorWithAlpha',Gn);H('org.apache.royale.utils.CSSUtils.getTopValue',function(a,b,c){c='undefined'!==typeof c?c:NaN;return In(a,b,0,c)});H('org.apache.royale.utils.CSSUtils.getRightValue',function(a,b,c){c='undefined'!==typeof c?c:NaN;return In(a,b,1,c)});
H('org.apache.royale.utils.CSSUtils.getBottomValue',function(a,b,c){c='undefined'!==typeof c?c:NaN;return In(a,b,2,c)});H('org.apache.royale.utils.CSSUtils.getLeftValue',function(a,b,c){c='undefined'!==typeof c?c:NaN;return In(a,b,3,c)});
function In(a,b,c,d){d='undefined'!==typeof d?d:NaN;if(M(a,Number))return a;if(M(b,Number))return b;if(null!=a)return Zj(a,d);if(null==b)return 0;if(M(b,Array)){a=c;c=b.length>>0;switch(a){case 2:a=(2===c?0:2)>>0;break;case 3:a=(3>c?1:3)>>0}a=b[a];return M(a,String)?Zj(a,d):a}return Zj(b,d)}H('org.apache.royale.utils.CSSUtils.getSideValue',In);
var Hn={nq:0,oq:4294967295,lq:4290822336,Zp:4286611584,Xp:4278190080,red:4294901760,aq:4286578688,pq:4294967040,cq:4286611456,$p:4278255360,green:4278222848,Vp:4278255615,mq:4278222976,blue:4278190335,bq:4278190208,Yp:4294902015,iq:4286578816};H('org.apache.royale.utils.CSSUtils.colorMap',Hn);Dn.prototype.i={names:[{name:'CSSUtils',j:tg,kind:q}]};
Dn.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{'|attributeFromColor':{type:n,g:tg,parameters:function(){return[{index:1,type:Jh,optional:!1}]}},'|toNumber':{type:k,g:tg,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:k,optional:!0}]}},'|toColor':{type:Jh,g:tg,parameters:function(){return[{index:1,type:m,optional:!1}]}},'|toColorWithAlpha':{type:Jh,g:tg,parameters:function(){return[{index:1,type:m,optional:!1}]}},'|getTopValue':{type:k,
g:tg,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:m,optional:!1},{index:3,type:k,optional:!0}]}},'|getRightValue':{type:k,g:tg,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:m,optional:!1},{index:3,type:k,optional:!0}]}},'|getBottomValue':{type:k,g:tg,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:m,optional:!1},{index:3,type:k,optional:!0}]}},'|getLeftValue':{type:k,g:tg,parameters:function(){return[{index:1,type:m,optional:!1},
{index:2,type:m,optional:!1},{index:3,type:k,optional:!0}]}},'|getSideValue':{type:k,g:tg,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:m,optional:!1},{index:3,type:u,optional:!1},{index:4,type:k,optional:!0}]}}}}}};Dn.prototype.h.m=10;function Jn(){HTMLElement.call(this)}I(Jn,HTMLElement);H(we,Jn);Jn.prototype.i={names:[{name:'WrappedHTMLElement',j:we,kind:q}],s:[ek]};Jn.prototype.h=function(){return{o:function(){return{royale_wrapper:{type:m,u:function(a,b){return void 0!==b?a.royale_wrapper=b:a.royale_wrapper}}}},l:function(){return{}},methods:function(){return{}}}};Jn.prototype.h.m=10;function Kn(){J.call(this);this.De=['js','swf']}I(Kn,J);H(Jc,Kn);H('models.ASDocModel.DELIMITER','/');G=Kn.prototype;G.B=null;G.Ul=function(){this.B.service.addEventListener(Ab,P(this.fh,this,Eb));this.B.service.url='config.json';this.B.service.send()};G.He=null;G.De=null;G.mc=null;G.Z=null;G.N=null;
G.fh=function(){this.B.service.removeEventListener(Ab,P(this.fh,this,Eb));this.He=JSON.parse(this.B.service.data).tagNames;this.Z=this.platforms.slice();this.N=O(this.Z.shift());var a='.'+this.N;this.B.service.addEventListener(Ab,P(this.Ie,this,Dh));this.B.service.url='tags'+a+na;this.B.service.send()};
G.Ie=function(){this.B.service.removeEventListener(Ab,P(this.Ie,this,Dh));var a=JSON.parse(this.B.service.data);if(this.mc){a=uk(a.tags,Array,!0);for(var b=a.length>>0,c=0;c<b;c++){var d=O(a[c]);-1==this.mc.indexOf(d)&&this.mc.push(d)}}else this.mc=uk(a.tags,Array,!0);this.Z.length?(this.N=O(this.Z.shift()),a='.'+this.N,this.B.service.addEventListener(Ab,P(this.Ie,this,Dh)),this.B.service.url='tags'+a+na):(this.Z=this.platforms.slice(),this.N=O(this.Z.shift()),a='.'+this.N,this.B.service.addEventListener(Ab,
P(this.Ge,this,Cb)),this.B.service.url='classlist'+a+na);this.B.service.send()};G.ea=null;
G.Ge=function(){this.B.service.removeEventListener(Ab,P(this.Ge,this,Cb));this.ea||(this.ea={classnames:[],data:[]});var a=this.allClasses;var b=JSON.parse(this.B.service.data);for(var c=uk(b.classnames,Array,!0),d=c.length>>0,f=0;f<d;f++){var g=O(c[f]);-1!=a.indexOf(g)>>0?(b=this.ea.data[f],b.platforms.push(this.N)):(b=new km(g,this.N),this.ea.data.push(b),this.ea.classnames.push(g))}this.Z.length?(this.N=O(this.Z.shift()),a='.'+this.N,this.B.service.addEventListener(Ab,P(this.Ge,this,Cb)),this.B.service.url=
'classlist'+a+na):(Ln(this),this.Z=this.platforms.slice(),this.N=O(this.Z.shift()),a='.'+this.N,this.B.service.addEventListener(Ab,P(this.Fe,this,yb)),this.B.service.url='classes'+a+na);this.B.service.send()};
G.Fe=function(){this.B.service.removeEventListener(Ab,P(this.Fe,this,yb));this.ea.filterData||(this.ea.filterData={});var a=JSON.parse(this.B.service.data);for(var b=uk(a.classes,Array,!0),c=b.length>>0,d=0;d<c;d++){var f=O(b[d].name);(a=this.ea.filterData[f])?Mn(a,uk(b[d].tags,Array,!0)):(a=new Vm,a.qname=f,a.description=O(b[d].description),Mn(a,uk(b[d].tags,Array,!0)),this.ea.filterData[f]=a)}this.Z.length&&(this.N=O(this.Z.shift()),a='.'+this.N,this.B.service.addEventListener(Ab,P(this.Fe,this,
yb)),this.B.service.url='classes'+a+na,this.B.service.send())};function Mn(a,b){if(b)if(a.tags)for(var c in b){var d=b[c];var f=!1,g=a.tags,l;for(l in g)if(g[l].tagName==d.tagName){f=!0;break}f||a.tags.push(d)}else a.tags=b}
function Ln(a){var b={},c=a.ea.data,d;for(d in c){var f=c[d].label,g=f.lastIndexOf('.')>>0;if(-1==g)var l=ab;else l=f.substr(0,g),f=f.substr(g+1);null==b[l]&&(b[l]={});b[l][f]={}}l=[];for(var x in b)null==a.nc?l.push(x):a.Vg(x)&&l.push(x);l.sort();a.eh=l;a.Ee=b;a.dispatchEvent(new K(Eg))}G.Ee=null;G.eh=null;G.La=null;G.dh=null;G.Ka=null;G.Db=null;G.Cb=null;G.Ja=null;
G.ed=function(){this.B.service.removeEventListener(Ab,P(this.ed,this,Bb));var a=this.B.reviver.parse(this.B.service.data);null==this.Db?(this.Db=a,this.ib=[],this.hb=[],this.gb=[],this.Ca=[],this.Cb=[],this.lc=null,this.Ja={},this.Bb=null):this.N==this.platforms[0]&&this.Cb.push(a.qname);var b=a.members;for(N in b){var c=b[N];c.platforms||(c.platforms=[]);c.platforms.push(this.N);c.shortDescription=Nn(c.description);if(c.type==Hc)if(c.qname==this.La+'.'+this.Ka){for(var d=!1,f=this.Ca.length>>0,g=
0;g<f;g++){var l=this.Ca[g],x=c;if(l.params.length==x.params.length){d=!0;-1==l.platforms.indexOf(x.platforms[0])&&l.platforms.push(x.platforms[0]);break}}d||this.Ca.push(c)}else c.qname!=a.qname&&On(this,this.hb,c);else'accessor'==c.type&&On(this,this.ib,c);-1!=this.ea.classnames.indexOf(c.return)&&(d=c.return,f=d.lastIndexOf('.')>>0,-1!=f&&(c.return=d.substr(f+1),d=d.substr(0,f)+'/'+d.substr(f+1)),c.returnhref='#!'+d)}b=a.events;for(var A in b){var N=b[A];N.platforms||(N.platforms=[]);N.platforms.push(this.N);
N.shortDescription=Nn(N.description);On(this,this.gb,N);-1!=this.ea.classnames.indexOf(N.type)&&(d=N.type,f=d.lastIndexOf('.')>>0,-1!=f&&(N.type=d.substr(f+1),d=d.substr(0,f)+'/'+d.substr(f+1)),N.typehref='#!'+d)}A=a.tags;for(var Q in A)b=A[Q],this.Ja[b.tagName]||(this.Ja[b.tagName]=b.values);a.type==q&&a.baseClassname&&0!=a.baseClassname.indexOf('flash.')&&0!=a.baseClassname.indexOf('goog.')?(this.B.service.addEventListener(Ab,P(this.ed,this,Bb)),this.B.service.url=Pn(this,a.baseClassname),this.B.service.send()):
a.type==v&&a.baseInterfaceNames&&0!=a.baseInterfaceNames[0].indexOf('flash.')&&0!=a.baseInterfaceNames[0].indexOf('goog.')?(this.B.service.addEventListener(Ab,P(this.fd,this,Db)),this.Ma=a.baseInterfaceNames,this.B.service.url=Pn(this,O(a.baseInterfaceNames[0])),this.B.service.send()):this.Z.length?(this.N=O(this.Z.shift()),this.B.service.addEventListener(Ab,P(this.ed,this,Bb)),this.B.service.url=Pn(this,this.La+'.'+this.Ka),this.B.service.send()):(um(this.hb),um(this.gb),um(this.ib),this.dispatchEvent(new K(Kb)))};
function On(a,b,c){for(var d=b.length>>0,f=0;f<d;f++){var g=b[f];if(g.qname==c.qname){d=O(c.platforms[0]);-1==g.platforms.indexOf(d)&&g.platforms.push(d);''==g.description&&''!=c.description?(Qn(a,c,c),b.splice(f,1,c),c.ownerhref=a.currentPackage+'/'+a.currentClass):Qn(a,g,c);return}}Qn(a,c,c);if(c.type==Hc)for(f=c.params.length>>0,g=0;g<f;g++)if(d=c.params[g],-1!=a.ea.classnames.indexOf(d.type)){var l=O(d.type),x=l.lastIndexOf('.')>>0;-1!=x&&(d.type=l.substr(x+1),l=l.substr(0,x)+'/'+l.substr(x+1));
d.typehref='#!'+l}c.ownerhref=a.currentPackage+'/'+a.currentClass;b.push(c)}function Qn(a,b,c){if(c.tags){b.attributes||(b.attributes=[]);b=b.attributes;for(var d={},f=b.length>>0,g=0;g<f;g++){var l=b[g];d[l.name]=l.value}f=c.tags.length>>0;for(g=0;g<f;g++){var x=c.tags[g];if(!d[x.tagName]){l=new Rn;var A=O(a.He[x.tagName]);l.name=null!=A?A:x.tagName;A='';var N=!0;x=x.values;for(var Q in x){var za=x[Q];N||(A+=', ');N=!1;A+=za}d[l.name]?d[l.name].value+=','+A:(l.value=A,b.push(l))}}}}
function Pn(a,b){return b.replace(/\./g,'/')+'.'+a.N+na}function Nn(a){if(!a)return'';var b=a.indexOf('.')>>0;return-1==b?a:a.substr(0,b+1)}G.Ma=null;
G.fd=function(){this.B.service.removeEventListener(Ab,P(this.fd,this,Db));var a=this.B.reviver.parse(this.B.service.data);null==this.Db?(this.Db=a,this.ib=[],this.hb=[],this.gb=[],this.Ca=[],this.Cb=[],this.lc=null,this.Ja={},this.Bb=null):this.N==this.platforms[0]&&this.Cb.push(a.qname);var b=a.members;for(A in b){var c=b[A];c.platforms||(c.platforms=[]);c.platforms.push(this.N);c.shortDescription=Nn(c.description);if(c.type==Hc)if(c.qname==this.La+'.'+this.Ka){for(var d=!1,f=this.Ca.length>>0,g=
0;g<f;g++){var l=this.Ca[g];if(l.params.length==c.params.length){d=!0;-1==l.platforms.indexOf(c.platforms[0])&&l.platforms.push(c.platforms[0]);break}}d||this.Ca.push(c)}else c.qname!=a.qname&&On(this,this.hb,c);else On(this,this.ib,c)}b=a.events;for(var x in b){var A=b[x];A.platforms||(A.platforms=[]);A.platforms.push(this.N);A.shortDescription=Nn(A.description);On(this,this.gb,A);-1!=this.ea.classnames.indexOf(A.type)&&(c=A.type,d=c.lastIndexOf('.')>>0,-1!=d&&(A.type=c.substr(d+1),c=c.substr(0,
d)+'/'+c.substr(d+1)),A.typehref='#!'+c)}x=a.tags;for(var N in x)b=x[N],this.Ja[b.tagName]||(this.Ja[b.tagName]=b.values);a.baseInterfaceNames&&(this.Ma=this.Ma.concat(a.baseInterfaceNames));for(;this.Ma.length&&0==this.Ma[0].indexOf('flash.');)this.Ma.shift();this.Ma.length?(this.B.service.addEventListener(Ab,P(this.fd,this,Db)),this.B.service.url=Pn(this,O(this.Ma.shift())),this.B.service.send()):this.Z.length?(this.N=O(this.Z.shift()),this.B.service.addEventListener(Ab,P(this.fd,this,Db)),this.B.service.url=
Pn(this,this.La+'.'+this.Ka),this.B.service.send()):(um(this.hb),um(this.gb),um(this.ib),this.dispatchEvent(new K(Kb)))};G.ib=null;G.hb=null;G.Ca=null;G.gb=null;G.lc=null;G.Bb=null;G.Vg=function(a){var b=this.Ee[a],c;for(c in b)if(this.nc(a==ab?c:a+'.'+c))return!0;return!1};Kn.prototype.filterPackage=Kn.prototype.Vg;Kn.prototype.nc=null;Kn.prototype.Ce=null;
Kn.prototype.Ug=function(a){a=this.ea.filterData[a].tags;if(!a)return!1;for(var b in a){var c=a[b],d=this.filterTags,f;for(f in d){var g=d[f];if(g.name==c.tagName){if(null==c.values||0==c.values.length)return!0;var l=c.values,x;for(x in l)if(l[x]==g.value)return!0}}}return!1};Kn.prototype.filterByTags=Kn.prototype.Ug;G=Kn.prototype;G.v=function(a){this.B=a;this.B.addEventListener('initialize',P(this.Ul,this,'initializeHandler'))};G.bc=F('De');G.Cc=E('De');G.ek=F('mc');G.Xi=function(){return this.ea.classnames};
G.zk=F('eh');G.wj=F('La');G.po=function(a){if(a!=this.La){this.La=a;var b=this.Ee[a],c=[],d;for(d in b)null==this.nc?c.push({label:d,href:a+'/'+d}):this.nc(a==ab?d:a+'.'+d)&&c.push({label:d,href:a+'/'+d});c.sort();this.dh=c;this.dispatchEvent(new K(Mb))}};G.lj=F('dh');G.uj=F('Ka');
G.oo=function(a){a!=this.Ka&&(this.Ka=a,this.dispatchEvent(new K(Jb)),this.Z=this.platforms.slice(),this.N=O(this.Z.shift()),this.B.service.addEventListener(Ab,P(this.ed,this,Bb)),this.B.service.url=Pn(this,this.La+'.'+this.Ka),this.B.service.send(),this.Db=null)};G.Mk=F('ib');G.Lk=F('hb');G.pj=F('Ca');G.Kk=F('gb');G.Xb=function(){return O(this.Db.description)};
G.Vj=function(){if(!this.lc){if(0==this.Cb.length)var a=[{label:this.currentClass},{label:m}];else{a=[{label:this.currentClass}];var b=this.Cb,c;for(c in b){var d=b[c],f=d,g=f.lastIndexOf('.')>>0;-1!=g&&(f=f.substr(g+1));f={label:f};-1!=this.ea.classnames.indexOf(d)&&(g=d.lastIndexOf('.')>>0,d=-1!=g?d.substr(0,g)+'/'+d.substr(g+1):'/'+d,f.href=d);a.push(f)}}this.lc=a}return this.lc};
G.Od=function(){if(!this.Bb){this.Bb=[];for(var a in this.Ja){var b={},c=this.Ja[a],d=O(this.He[a]);b.name=null!=d?d:a;d='';var f=!0,g=', ';'commentary'==a&&(g='  ');'example'==a&&(g='<br/>',f=!1);for(var l in c){var x=c[l];f||(d+=g);f=!1;d+=x}b.value=d;this.Bb.push(b)}}return this.Bb};G.Kj=F('Ce');G.Eo=function(a){this.nc=(this.Ce=a)?P(this.Ug,this,'filterByTags'):null;Ln(this)};
Object.defineProperties(Kn.prototype,{strand:{set:Kn.prototype.v},platforms:{get:Kn.prototype.bc,set:Kn.prototype.Cc},knownTags:{get:Kn.prototype.ek},allClasses:{get:Kn.prototype.Xi},packageList:{get:Kn.prototype.zk},currentPackage:{get:Kn.prototype.wj,set:Kn.prototype.po},classList:{get:Kn.prototype.lj},currentClass:{get:Kn.prototype.uj,set:Kn.prototype.oo},publicProperties:{get:Kn.prototype.Mk},publicMethods:{get:Kn.prototype.Lk},constructorList:{get:Kn.prototype.pj},publicEvents:{get:Kn.prototype.Kk},
description:{get:Kn.prototype.Xb},inheritance:{get:Kn.prototype.Vj},attributes:{get:Kn.prototype.Od},filterTags:{get:Kn.prototype.Kj,set:Kn.prototype.Eo}});Kn.prototype.i={names:[{name:'ASDocModel',j:Jc,kind:q}],s:[Kj]};
Kn.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:Jc},platforms:{type:e,access:y,g:Jc},knownTags:{type:e,access:w,g:Jc},allClasses:{type:e,access:w,g:Jc},packageList:{type:e,access:w,g:Jc},currentPackage:{type:n,access:y,g:Jc},classList:{type:e,access:w,g:Jc},currentClass:{type:n,access:y,g:Jc},publicProperties:{type:e,access:w,g:Jc},publicMethods:{type:e,access:w,g:Jc},constructorList:{type:e,access:w,g:Jc},publicEvents:{type:e,access:w,g:Jc},
description:{type:n,access:w,g:Jc},inheritance:{type:e,access:w,g:Jc},attributes:{type:e,access:w,g:Jc},filterTags:{type:e,access:y,g:Jc}}},methods:function(){return{ASDocModel:{type:'',g:Jc},filterPackage:{type:h,g:Jc,parameters:function(){return[{index:1,type:n,optional:!1}]}},filterByTags:{type:h,g:Jc,parameters:function(){return[{index:1,type:n,optional:!1}]}}}}}};Kn.prototype.h.m=9;Kn.prototype.h.xb=Object.keys(Kn);function Sn(){R.call(this);this.D='SocialButtons'}I(Sn,R);H(kg,Sn);
Sn.prototype.createElement=function(){this.element=document.createElement('ul');var a=document.createElement('li');a.className='fa SocialButton fa-search';a.innerHTML="<a href='http://royale.apache.org/#grve-search-modal'></a>";this.element.appendChild(a);a=document.createElement('li');a.className='fa SocialButton fa-share-alt';a.innerHTML="<a href='http://royale.apache.org/#grve-social-modal'></a>";this.element.appendChild(a);a=document.createElement('li');a.className='fa SocialButton fa-th';a.innerHTML=
"<a href='http://royale.apache.org/#grve-toggle-menu'></a>";this.element.appendChild(a);return this.element};Sn.prototype.i={names:[{name:'SocialButtons',j:kg,kind:q}]};Sn.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{SocialButtons:{type:'',g:kg}}}}};Sn.prototype.h.m=10;function Jl(){}H(mf,Jl);Jl.prototype.i={names:[{name:'IListView',j:mf,kind:v}],s:[qk]};Jl.prototype.h=function(){return{l:function(){return{dataGroup:{type:Gd,access:w,g:mf}}},methods:function(){return{}}}};Jl.prototype.h.m=10;function Tn(){J.call(this)}I(Tn,nl);H(hf,Tn);Tn.prototype.Ki=function(){this.Ti=this.G.aa(Lj);this.host.addEventListener('itemsCreated',P(this.Rl,this,'itemsCreatedHandler'));this.Ti.addEventListener(Sb,P(this.Zc,this,Rb))};Tn.prototype.Rl=function(){this.host.dispatchEvent(new K(Ec))};Tn.prototype.Zc=function(){this.host.dispatchEvent(new K(Ec))};Tn.prototype.Uc=function(a,b){this.contentView.addElement(a,b);Un(this,a)};Tn.prototype.addItemRenderer=Tn.prototype.Uc;
Tn.prototype.Cd=function(a,b){this.contentView.ga(a,b,!0);Un(this,a)};Tn.prototype.addItemRendererAt=Tn.prototype.Cd;function Un(a,b){var c=new Vn('itemAdded');c.item=b;a.host.dispatchEvent(c)}Tn.prototype.kf=function(a){this.contentView.L(a);var b=new Tk('itemRemoved');b.item=a;this.host.dispatchEvent(b)};Tn.prototype.removeItemRenderer=Tn.prototype.kf;Tn.prototype.jf=function(){for(;0<this.contentView.numElements;){var a=this.contentView.U(0);this.contentView.L(a)}};
Tn.prototype.removeAllItemRenderers=Tn.prototype.jf;Tn.prototype.Ia=function(a){return 0>a||a>=uk(this.contentView,ok).numElements?null:uk(this.contentView,ok).U(a)};Tn.prototype.getItemRendererForIndex=Tn.prototype.Ia;Tn.prototype.Ld=function(a){return 0>a||a>=this.contentView.numElements?null:this.contentView.U(a)};Tn.prototype.getItemRendererAt=Tn.prototype.Ld;Tn.prototype.Di=function(){for(var a=this.contentView.numElements,b=0;b<a;b++){var c=this.Ia(b>>0);c&&(c.Sa(this.host.width,!0),c.Ob())}};
Tn.prototype.updateAllItemRenderers=Tn.prototype.Di;Tn.prototype.v=function(a){this.G=a;Tn.w.v.apply(this,[a]);rk(Fl,'iDataProviderItemRendererMapper',a);rk(jm,pc,a);this.host.addEventListener(ob,P(this.Ki,this,'beadsAddedHandler'))};Tn.prototype.yj=function(){return this};Tn.prototype.sk=function(){return this.contentView.numElements};Object.defineProperties(Tn.prototype,{strand:{set:Tn.prototype.v},dataGroup:{get:Tn.prototype.yj},numItemRenderers:{get:Tn.prototype.sk}});
Tn.prototype.i={names:[{name:'DataContainerView',j:hf,kind:q}],s:[Jl,bn]};
Tn.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:hf},dataGroup:{type:Gd,access:w,g:hf},numItemRenderers:{type:u,access:w,g:hf}}},methods:function(){return{DataContainerView:{type:'',g:hf},addItemRenderer:{type:B,g:hf,parameters:function(){return[{index:1,type:Ed,optional:!1},{index:2,type:h,optional:!1}]}},addItemRendererAt:{type:B,g:hf,parameters:function(){return[{index:1,type:Ed,optional:!1},{index:2,type:u,optional:!1}]}},removeItemRenderer:{type:B,
g:hf,parameters:function(){return[{index:1,type:Ed,optional:!1}]}},removeAllItemRenderers:{type:B,g:hf},getItemRendererForIndex:{type:Ed,g:hf,parameters:function(){return[{index:1,type:u,optional:!1}]}},getItemRendererAt:{type:Ed,g:hf,parameters:function(){return[{index:1,type:u,optional:!1}]}},updateAllItemRenderers:{type:B,g:hf}}}}};Tn.prototype.h.m=10;function Wn(){J.call(this)}I(Wn,Tn);H(of,Wn);G=Wn.prototype;G.Zg=-1;G.gc=function(a){this.ua=this.G.aa(Il);this.ua.addEventListener(qh,P(this.Pn,this,'selectionChangeHandler'));this.ua.addEventListener(jh,P(this.Nn,this,'rollOverIndexChangeHandler'));Wn.w.gc.apply(this,[a])};G.Pn=function(){var a=this.dataGroup.Ia(this.Zg);a&&(a.selected=!1);if(a=this.dataGroup.Ia(this.ua.selectedIndex))a.selected=!0;this.Zg=this.ua.selectedIndex};G.Yg=-1;
G.Nn=function(){var a=this.dataGroup.Ia(this.Yg);a&&(a.hovered=!1);if(a=this.dataGroup.Ia(this.ua.rollOverIndex))a.hovered=!0;this.Yg=this.ua.rollOverIndex};G.i={names:[{name:'ListView',j:of,kind:q}]};G.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{ListView:{type:'',g:of}}}}};G.h.m=10;function Xn(a){var b=a.split('.');if('Vector'!=b[0]){var c=b.length>>0;var d=ci;for(var f=0;f<c;f++)d=d[b[f]]}else'<*>'!=b[1]&&(tl&&tl.has(a)?d=tl.get(a).classRef:tl&&tl.has(bb)&&(b=tl.get(bb).variant(a),tl||(tl=new Map),tl.set(b.name,b),tl.set(b.classRef,b),d=b.classRef));null==d&&tl&&tl.has(a)&&(d=tl.get(a).classRef);return d}H('org.apache.royale.reflection.getDefinitionByName',Xn);function bl(a,b,c,d,f){d='undefined'!==typeof d?d:null;f='undefined'!==typeof f?f:null;K.call(this,a,'undefined'!==typeof b?b:!1,'undefined'!==typeof c?c:!1);this.oldValue=d;this.newValue=f}I(bl,K);H(Pe,bl);H('org.apache.royale.events.ValueChangeEvent.VALUE_CHANGE',Lh);function T(a,b,c,d){c=new bl(Lh,!1,!1,c,d);c.propertyName=b;c.source=a;return c}H('org.apache.royale.events.ValueChangeEvent.createUpdateEvent',T);
bl.prototype.P=function(){return new bl(this.type,this.bubbles,this.cancelable,this.oldValue,this.newValue)};bl.prototype.cloneEvent=bl.prototype.P;bl.prototype.i={names:[{name:'ValueChangeEvent',j:Pe,kind:q}]};
bl.prototype.h=function(){return{o:function(){return{oldValue:{type:m,u:function(a,b){return void 0!==b?a.oldValue=b:a.oldValue}},newValue:{type:m,u:function(a,b){return void 0!==b?a.newValue=b:a.newValue}},propertyName:{type:n,u:function(a,b){return void 0!==b?a.propertyName=b:a.propertyName}},source:{type:m,u:function(a,b){return void 0!==b?a.source=b:a.source}}}},l:function(){return{}},methods:function(){return{ValueChangeEvent:{type:'',g:Pe,parameters:function(){return[{index:1,type:n,optional:!1},
{index:2,type:h,optional:!0},{index:3,type:h,optional:!0},{index:4,type:m,optional:!0},{index:5,type:m,optional:!0}]}},'|createUpdateEvent':{type:Pe,g:Pe,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:n,optional:!1},{index:3,type:m,optional:!1},{index:4,type:m,optional:!1}]}},cloneEvent:{type:Je,g:Pe}}}}};bl.prototype.h.m=10;function Yn(){J.call(this)}var Zn;I(Yn,J);H(hd,Yn);function $n(a,b){var c=new L;c.yb(b);return!!Zn(a,c)}H('org.apache.royale.core.ElementWrapper.fireListenerOverride',$n);function ao(){Zn=Dj;Dj=$n;return!0}H('org.apache.royale.core.ElementWrapper.installOverride',ao);Yn.prototype.I=function(a){this.va||(this.va=new (dk(ld)));this.va.push(a);a.strand=this};Yn.prototype.addBead=Yn.prototype.I;
Yn.prototype.aa=function(a){var b;if(!this.va)return null;var c=this.va.length;for(b=0;b<c;b++){var d=this.va[b];if(M(d,a))return d}return null};Yn.prototype.getBeadByType=Yn.prototype.aa;Yn.prototype.pb=function(a){var b;var c=this.va.length;for(b=0;b<c;b++){var d=this.va[b];if(a===d)return this.va.splice(b>>0,1),a}return null};Yn.prototype.removeBead=Yn.prototype.pb;Yn.prototype.addEventListener=function(a,b){rj(bo(this,a),a,b)};Yn.prototype.addEventListener=Yn.prototype.addEventListener;
Yn.prototype.removeEventListener=function(a,b){zj(bo(this,a),a,b)};Yn.prototype.removeEventListener=Yn.prototype.removeEventListener;function bo(a,b){var c=a;Uj[b]&&(c=a.element);return c}Yn.prototype.fb=function(a){return Bj(bo(this,a),a)};Yn.prototype.hasEventListener=Yn.prototype.fb;Yn.prototype.dispatchEvent=function(a){if(typeof a===zh){var b=a;a===ub&&(a=Vj(b))}else b=O(a.type),Uj[b]&&(a=Vj(b));b=bo(this,b);return b==this?Yn.w.dispatchEvent.apply(this,[a]):!!b.dispatchEvent(a)};
Yn.prototype.dispatchEvent=Yn.prototype.dispatchEvent;Yn.prototype.Yd=F('Gg');Yn.prototype.sf=function(a){this.Gg=a;this.Gg.royale_wrapper=this};Object.defineProperties(Yn.prototype,{element:{get:Yn.prototype.Yd,set:Yn.prototype.sf}});var co=ao();Yn.prototype.i={names:[{name:'ElementWrapper',j:hd,kind:q}],s:[Nj]};
Yn.prototype.h=function(){return{o:function(){return{'|googFireListener':{type:Pa,u:function(a){return void 0!==a?Zn=a:Zn}},'|installedOverride':{type:h,u:function(a){return void 0!==a?co=a:co}}}},l:function(){return{element:{type:we,access:y,g:hd}}},methods:function(){return{'|fireListenerOverride':{type:h,g:hd,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:ic,optional:!1}]}},'|installOverride':{type:h,g:hd},addBead:{type:B,g:hd,parameters:function(){return[{index:1,type:ld,
optional:!1}]}},getBeadByType:{type:ld,g:hd,parameters:function(){return[{index:1,type:Fa,optional:!1}]}},removeBead:{type:ld,g:hd,parameters:function(){return[{index:1,type:ld,optional:!1}]}},addEventListener:{type:B,g:hd,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:Pa,optional:!1},{index:3,type:h,optional:!0},{index:4,type:m,optional:!0}]}},removeEventListener:{type:B,g:hd,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:Pa,optional:!1},{index:3,
type:h,optional:!0},{index:4,type:m,optional:!0}]}},hasEventListener:{type:h,g:hd,parameters:function(){return[{index:1,type:n,optional:!1}]}},dispatchEvent:{type:h,g:hd,parameters:function(){return[{index:1,type:m,optional:!1}]}}}}}};Yn.prototype.h.m=10;function eo(){un.call(this);this.D+=' OptionalHashAnchorStringItemRenderer'}I(eo,un);H(Va,eo);eo.prototype.X=function(a){var b=!1;this.itemRendererParent&&(b=this.parent.dataProvider.length>>0==this.index+1);var c=O(this.data.href);this.element.innerHTML=c?oa+c+ma+a+'</a>'+(b?'':' -> '):a+(b?'':' -> ')};Object.defineProperties(eo.prototype,{text:{get:un.prototype.ha,set:eo.prototype.X}});eo.prototype.i={names:[{name:Va,j:Va,kind:q}]};
eo.prototype.h=function(){return{o:function(){return{}},l:function(){return{text:{type:n,access:C,g:Va}}},methods:function(){return{OptionalHashAnchorStringItemRenderer:{type:'',g:Va}}}}};eo.prototype.h.m=9;function fo(){}H(je,fo);fo.prototype.ba=D();fo.prototype.getValue=fo.prototype.ba;fo.prototype.Na=D();fo.prototype.newInstance=fo.prototype.Na;fo.prototype.Kd=D();fo.prototype.getInstance=fo.prototype.Kd;fo.prototype.ta=D();fo.prototype.init=fo.prototype.ta;fo.prototype.Ed=D();fo.prototype.convertColor=fo.prototype.Ed;fo.prototype.qd=D();fo.prototype.parseStyles=fo.prototype.qd;fo.prototype.addRule=D();fo.prototype.addRule=fo.prototype.addRule;fo.prototype.Qb=D();fo.prototype.applyStyles=fo.prototype.Qb;
fo.prototype.i={names:[{name:'IValuesImpl',j:je,kind:v}]};
fo.prototype.h=function(){return{l:function(){return{}},methods:function(){return{getValue:{type:'*',g:je,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:n,optional:!1},{index:3,type:n,optional:!0},{index:4,type:m,optional:!0}]}},newInstance:{type:'*',g:je,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:n,optional:!1},{index:3,type:n,optional:!0},{index:4,type:m,optional:!0}]}},getInstance:{type:m,g:je,parameters:function(){return[{index:1,type:n,optional:!1}]}},
init:{type:B,g:je,parameters:function(){return[{index:1,type:m,optional:!1}]}},convertColor:{type:Jh,g:je,parameters:function(){return[{index:1,type:m,optional:!1}]}},parseStyles:{type:m,g:je,parameters:function(){return[{index:1,type:n,optional:!1}]}},addRule:{type:B,g:je,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:m,optional:!1}]}},applyStyles:{type:B,g:je,parameters:function(){return[{index:1,type:ie,optional:!1},{index:2,type:m,optional:!1}]}}}}}};
fo.prototype.h.m=10;function Nk(){}I(Nk,pl);H(sf,Nk);Nk.prototype.da=function(){var a=this.layoutView;a.element.style['white-space']='nowrap';var b=a.na();var c=b.length>>0;for(a=0;a<c;a++){var d=b[a];null!=d&&(d.royale_wrapper.rd(vc),d.style.display!==Nc&&(d.style.display=vc))}return!0};Nk.prototype.layout=Nk.prototype.da;Nk.prototype.v=function(a){Nk.w.v.apply(this,[a]);a.element.style.display!==Nc&&(a.element.style.display=pb)};Object.defineProperties(Nk.prototype,{strand:{set:Nk.prototype.v}});
Nk.prototype.i={names:[{name:'HorizontalLayout',j:sf,kind:q}],s:[Ik]};Nk.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:sf}}},methods:function(){return{HorizontalLayout:{type:'',g:sf},layout:{type:h,g:sf}}}}};Nk.prototype.h.m=10;function Xl(){U.call(this);this.D+=' MultilineLabel'}I(Xl,U);H(af,Xl);Xl.prototype.createElement=function(){tk(this,'div');this.Fa=document.createTextNode(this.text);this.element.appendChild(this.Fa);this.element.style.whiteSpace='pre-wrap';return this.element};Xl.prototype.i={names:[{name:'MultilineLabel',j:af,kind:q}]};Xl.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{MultilineLabel:{type:'',g:af}}}}};Xl.prototype.h.m=10;function go(){R.call(this);this.D='TopMenuButton'}I(go,R);H(ng,go);go.prototype.createElement=function(){return this.element=document.createElement('li')};go.prototype.C=function(){go.w.C.apply(this);var a=document.createElement('a');a.className='TopMenuButtonContent';a.href=this.href;a.textContent=this.htmlText;this.element.appendChild(a)};go.prototype.addedToParent=go.prototype.C;go.prototype.Tj=F('on');go.prototype.Lo=E('on');go.prototype.ce=F('nn');go.prototype.xf=E('nn');
Object.defineProperties(go.prototype,{htmlText:{get:go.prototype.Tj,set:go.prototype.Lo},href:{get:go.prototype.ce,set:go.prototype.xf}});go.prototype.i={names:[{name:'TopMenuButton',j:ng,kind:q}]};go.prototype.h=function(){return{o:function(){return{}},l:function(){return{htmlText:{type:n,access:y,g:ng},href:{type:n,access:y,g:ng}}},methods:function(){return{TopMenuButton:{type:'',g:ng},addedToParent:{type:B,g:ng}}}}};go.prototype.h.m=10;function ho(){zn.call(this)}I(ho,zn);H(lg,ho);
Object.defineProperties(ho.prototype,{MXMLDescriptor:{get:function(){if(void 0==this.K){var a=ho.w.S.apply(this),b=[go,3,p,!0,ea,lc,!0,'https://royale.apache.org/features/',mc,!0,'FEATURES',0,0,null,go,3,p,!0,fa,lc,!0,'https://apache.github.io/royale-docs/get-started',mc,!0,'GET STARTED',0,0,null,go,3,p,!0,ha,lc,!0,'https://royale.apache.org/download/',mc,!0,'DOWNLOAD',0,0,null,go,3,p,!0,ia,lc,!0,'https://royale.apache.org/docs/',mc,!0,'DOCS',0,0,null,go,3,p,!0,ja,lc,!0,'https://royale.apache.org/blog/',
mc,!0,'BLOG',0,0,null,go,3,p,!0,ka,lc,!0,'https://github.com/apache/royale-asjs/wiki/Apache-Royale-Source-Code-Repositories',mc,!0,'GITHUB',0,0,null];this.K=a?a.concat(b):b}return this.K}}});ho.prototype.i={names:[{name:'TopMenu',j:lg,kind:q}]};ho.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{TopMenu:{type:'',g:lg}}}}};ho.prototype.h.m=10;function io(){this.styleList={top:1,bottom:1,left:1,right:1,padding:1,paddingLeft:1,paddingRight:1,paddingTop:1,paddingBottom:1,margin:1,marginLeft:1,marginRight:1,marginTop:1,marginBottom:1,verticalAlign:1,fontFamily:1,fontSize:1,color:1,fontWeight:1,fontStyle:1,backgroundColor:1,backgroundImage:1,borderColor:1,borderStyle:1,borderRadius:1,borderWidth:1}}H(oe,io);io.prototype.i={names:[{name:'SimpleCSSStyles',j:oe,kind:q}]};
io.prototype.h=function(){return{o:function(){return{styleList:{type:m,u:function(a,b){return void 0!==b?a.styleList=b:a.styleList}},top:{type:'*',u:function d(b,c){return c!==d?b.top=c:b.top}},bottom:{type:'*',u:function f(c,d){return d!==f?c.bottom=d:c.bottom}},left:{type:'*',u:function g(d,f){return f!==g?d.left=f:d.left}},right:{type:'*',u:function l(f,g){return g!==l?f.right=g:f.right}},padding:{type:'*',u:function x(g,l){return l!==x?g.padding=l:g.padding}},paddingLeft:{type:'*',u:function A(l,
x){return x!==A?l.paddingLeft=x:l.paddingLeft}},paddingRight:{type:'*',u:function N(x,A){return A!==N?x.paddingRight=A:x.paddingRight}},paddingTop:{type:'*',u:function Q(A,N){return N!==Q?A.paddingTop=N:A.paddingTop}},paddingBottom:{type:'*',u:function za(N,Q){return Q!==za?N.paddingBottom=Q:N.paddingBottom}},margin:{type:'*',u:function fb(Q,za){return za!==fb?Q.margin=za:Q.margin}},marginLeft:{type:'*',u:function Yb(za,fb){return fb!==Yb?za.marginLeft=fb:za.marginLeft}},marginRight:{type:'*',u:function Ld(fb,
Yb){return Yb!==Ld?fb.marginRight=Yb:fb.marginRight}},marginTop:{type:'*',u:function Tf(Yb,Ld){return Ld!==Tf?Yb.marginTop=Ld:Yb.marginTop}},marginBottom:{type:'*',u:function Uf(Ld,Tf){return Tf!==Uf?Ld.marginBottom=Tf:Ld.marginBottom}},verticalAlign:{type:'*',u:function Vf(Tf,Uf){return Uf!==Vf?Tf.verticalAlign=Uf:Tf.verticalAlign}},fontFamily:{type:'*',u:function Wf(Uf,Vf){return Vf!==Wf?Uf.fontFamily=Vf:Uf.fontFamily}},fontSize:{type:'*',u:function Xf(Vf,Wf){return Wf!==Xf?Vf.fontSize=Wf:Vf.fontSize}},
color:{type:'*',u:function Yf(Wf,Xf){return Xf!==Yf?Wf.color=Xf:Wf.color}},fontWeight:{type:'*',u:function Zf(Xf,Yf){return Yf!==Zf?Xf.fontWeight=Yf:Xf.fontWeight}},fontStyle:{type:'*',u:function $f(Yf,Zf){return Zf!==$f?Yf.fontStyle=Zf:Yf.fontStyle}},backgroundColor:{type:'*',u:function ag(Zf,$f){return $f!==ag?Zf.backgroundColor=$f:Zf.backgroundColor}},backgroundImage:{type:'*',u:function bg($f,ag){return ag!==bg?$f.backgroundImage=ag:$f.backgroundImage}},borderColor:{type:'*',u:function cg(ag,
bg){return bg!==cg?ag.borderColor=bg:ag.borderColor}},borderStyle:{type:'*',u:function dg(bg,cg){return cg!==dg?bg.borderStyle=cg:bg.borderStyle}},borderRadius:{type:'*',u:function mk(cg,dg){return dg!==mk?cg.borderRadius=dg:cg.borderRadius}},borderWidth:{type:'*',u:function tp(dg,mk){return mk!==tp?dg.borderWidth=mk:dg.borderWidth}}}},l:function(){return{}},methods:function(){return{SimpleCSSStyles:{type:'',g:oe}}}}};io.prototype.h.m=10;function im(){un.call(this);this.D=Da}I(im,un);H(Wa,im);im.prototype.X=function(){var a=!1;this.itemRendererParent&&(a=this.parent.dataProvider.length>>0==this.index+1);var b="<span class='paramName'>"+this.data.name+':</span>';b=this.data.typehref?b+("<a href='"+this.data.typehref+"' class='paramLink'>"+this.data.type+'</a>'):b+("<span class='paramType'>"+this.data.type+'</span>');a||(b+=', ');this.element.innerHTML=b};Object.defineProperties(im.prototype,{text:{get:un.prototype.ha,set:im.prototype.X}});
im.prototype.i={names:[{name:Wa,j:Wa,kind:q}]};im.prototype.h=function(){return{o:function(){return{}},l:function(){return{text:{type:n,access:C,g:Wa}}},methods:function(){return{ParameterRenderer:{type:'',g:Wa}}}}};im.prototype.h.m=9;function jo(){J.call(this)}I(jo,J);H(Af,jo);G=jo.prototype;G.$e=null;G.v=D();G.Wb=F('Kh');G.xc=function(a){a!==this.Kh&&(this.Kh=a,this.dispatchEvent(new K(Sb)))};G.cb=F('$e');G.ub=function(a){a!=this.$e&&(this.$e=a,this.dispatchEvent(new K(Dc)))};Object.defineProperties(jo.prototype,{strand:{set:jo.prototype.v},dataProvider:{get:jo.prototype.Wb,set:jo.prototype.xc},labelField:{get:jo.prototype.cb,set:jo.prototype.ub}});jo.prototype.i={names:[{name:'DataProviderModel',j:Af,kind:q}],s:[Lj]};
jo.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:Af},dataProvider:{type:m,access:y,g:Af},labelField:{type:n,access:y,g:Af}}},methods:function(){return{DataProviderModel:{type:'',g:Af}}}}};jo.prototype.h.m=10;function ko(){R.call(this)}I(ko,R);H(df,ko);ko.prototype.i={names:[{name:'Spacer',j:df,kind:q}]};ko.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{Spacer:{type:'',g:df}}}}};ko.prototype.h.m=10;function W(a,b){this.x='undefined'!==typeof a?a:0;this.y='undefined'!==typeof b?b:0}H(Te,W);H('org.apache.royale.geom.Point.interpolate',function(a,b,c){return new W(b.x+c*(a.x-b.x),b.y+c*(a.y-b.y))});H('org.apache.royale.geom.Point.distance',function(a,b){return a.wi(b).length});H('org.apache.royale.geom.Point.polar',function(a,b){return new W(a*Math.cos(b),a*Math.sin(b))});W.prototype.clone=function(){return new W(this.x,this.y)};W.prototype.clone=W.prototype.clone;
W.prototype.offset=function(a,b){this.x+=a;this.y+=b};W.prototype.offset=W.prototype.offset;W.prototype.Ui=function(a){return a.x==this.x&&a.y==this.y};W.prototype.equals=W.prototype.Ui;W.prototype.wi=function(a){return new W(this.x-a.x,this.y-a.y)};W.prototype.subtract=W.prototype.wi;W.prototype.add=function(a){return new W(this.x+a.x,this.y+a.y)};W.prototype.add=W.prototype.add;W.prototype.normalize=function(a){var b=this.length;0<b&&(b=a/b,this.x*=b,this.y*=b)};W.prototype.normalize=W.prototype.normalize;
W.prototype.toString=function(){return'(x='+this.x+', y='+this.y+')'};W.prototype.toString=W.prototype.toString;W.prototype.Qi=function(a){this.x=a.x;this.y=a.y};W.prototype.copyFrom=W.prototype.Qi;W.prototype.Qn=function(a,b){this.x=a;this.y=b};W.prototype.setTo=W.prototype.Qn;W.prototype.ik=function(){return Math.sqrt(this.x*this.x+this.y*this.y)};Object.defineProperties(W.prototype,{length:{get:W.prototype.ik}});W.prototype.i={names:[{name:'Point',j:Te,kind:q}]};
W.prototype.h=function(){return{o:function(){return{x:{type:k,u:function(a,b){return void 0!==b?a.x=b:a.x}},y:{type:k,u:function(a,b){return void 0!==b?a.y=b:a.y}}}},l:function(){return{length:{type:k,access:w,g:Te}}},methods:function(){return{Point:{type:'',g:Te,parameters:function(){return[{index:1,type:k,optional:!0},{index:2,type:k,optional:!0}]}},'|interpolate':{type:Te,g:Te,parameters:function(){return[{index:1,type:Te,optional:!1},{index:2,type:Te,optional:!1},{index:3,type:k,optional:!1}]}},
'|distance':{type:k,g:Te,parameters:function(){return[{index:1,type:Te,optional:!1},{index:2,type:Te,optional:!1}]}},'|polar':{type:Te,g:Te,parameters:function(){return[{index:1,type:k,optional:!1},{index:2,type:k,optional:!1}]}},clone:{type:Te,g:Te},offset:{type:B,g:Te,parameters:function(){return[{index:1,type:k,optional:!1},{index:2,type:k,optional:!1}]}},equals:{type:h,g:Te,parameters:function(){return[{index:1,type:Te,optional:!1}]}},subtract:{type:Te,g:Te,parameters:function(){return[{index:1,
type:Te,optional:!1}]}},add:{type:Te,g:Te,parameters:function(){return[{index:1,type:Te,optional:!1}]}},normalize:{type:B,g:Te,parameters:function(){return[{index:1,type:k,optional:!1}]}},toString:{type:n,g:Te},copyFrom:{type:B,g:Te,parameters:function(){return[{index:1,type:Te,optional:!1}]}},setTo:{type:B,g:Te,parameters:function(){return[{index:1,type:k,optional:!1},{index:2,type:k,optional:!1}]}}}}}};W.prototype.h.m=10;function lo(){R.call(this)}I(lo,R);H(Ve,lo);G=lo.prototype;G.createElement=function(){tk(this,Cc);this.Ah=this.element;this.od=new $l;this.element.appendChild(this.od.element);this.element.appendChild(document.createTextNode(''));this.od.element.royale_wrapper=this;this.D='CheckBox CheckBoxIcon';return this.element};G.ha=function(){return O(this.Ah.childNodes.item(1).nodeValue)};G.X=function(a){this.Ah.childNodes.item(1).nodeValue=a};G.pe=function(){return this.od.element.checked};
G.Ff=function(a){this.od.element.checked=a};Object.defineProperties(lo.prototype,{text:{get:lo.prototype.ha,set:lo.prototype.X},selected:{get:lo.prototype.pe,set:lo.prototype.Ff}});lo.prototype.i={names:[{name:'CheckBox',j:Ve,kind:q}]};lo.prototype.h=function(){return{o:function(){return{}},l:function(){return{text:{type:n,access:y,g:Ve},selected:{type:h,access:y,g:Ve,W:function(){return[{name:Ea,O:[{key:'',value:ub}]}]}}}},methods:function(){return{}}}};lo.prototype.h.m=10;function mo(){un.call(this);this.D+=aa}I(mo,un);H(Qa,mo);mo.prototype.X=function(a){var b=O(this.data.href);b||(b=a);this.element.innerHTML=oa+b+ma+a+'</a>'};Object.defineProperties(mo.prototype,{text:{get:un.prototype.ha,set:mo.prototype.X}});mo.prototype.i={names:[{name:Qa,j:Qa,kind:q}]};mo.prototype.h=function(){return{o:function(){return{}},l:function(){return{text:{type:n,access:C,g:Qa}}},methods:function(){return{HashAnchorStringItemRenderer:{type:'',g:Qa}}}}};mo.prototype.h.m=9;function Rn(){J.call(this)}I(Rn,J);H(ta,Rn);G=Rn.prototype;G.Yf=null;G.Zf=null;G.eb=F('Yf');G.vb=E('Yf');G.xe=F('Zf');G.Mf=E('Zf');Object.defineProperties(Rn.prototype,{name:{get:Rn.prototype.eb,set:Rn.prototype.vb},value:{get:Rn.prototype.xe,set:Rn.prototype.Mf}});Rn.prototype.i={names:[{name:ta,j:ta,kind:q}]};Rn.prototype.h=function(){return{o:function(){return{}},l:function(){return{name:{type:n,access:y,g:ta},value:{type:n,access:y,g:ta}}},methods:function(){return{}}}};Rn.prototype.h.m=9;function tk(a,b){b=document.createElement(b);return a.element=b}H('org.apache.royale.html.util.addElementToWrapper',tk);function no(){Hk.call(this);this.R([3,r,!0,'summary',Ng,!0,100,nb,null,[Kk,1,p,!0,ea,0,0,null,Lk,1,p,!0,fa,0,0,null],0,0])}I(no,Hk);H(Ua,no);var oo={addEventListener:1,removeEventListener:1,hasEventListener:1,dispatchEvent:1,toString:1};no.prototype.Qc='#fff';no.prototype.Rc=da;no.prototype.Ad=!1;no.prototype.C=function(){no.w.C.apply(this);this.Ad=1==this.parent.ma(this)%2;this.element.style.backgroundColor=this.Ad?this.Rc:this.Qc};no.prototype.addedToParent=no.prototype.C;
no.prototype.$=function(){no.w.$.apply(this);if(null==this.element.style.backgroundColor||''==this.element.style.backgroundColor)this.element.style.backgroundColor=this.Ad?this.Rc:this.Qc};no.prototype.updateRenderer=no.prototype.$;G=no.prototype;G.Za=F('Qc');G.rb=E('Qc');G.$a=F('Rc');G.sb=E('Rc');
G.M=function(a){no.w.M.apply(this,[a]);a.returnhref?this.typeGroup.L(this.label):this.typeGroup.L(this.link);this.qname.href='#!'+this.obj.ownerhref+'/'+this.obj.qname;1!=this.obj.platforms.length||oo[this.obj.qname]||('swf'==this.obj.platforms[0]&&(this.qname.className+=ca),'js'==this.obj.platforms[0]&&(this.qname.className+=ba))};G.sa=F(Ob);
Object.defineProperties(no.prototype,{backgroundColor0:{get:no.prototype.Za,set:no.prototype.rb},backgroundColor1:{get:no.prototype.$a,set:no.prototype.sb},data:{get:S.prototype.ra,set:no.prototype.M},obj:{get:no.prototype.sa}});
Object.defineProperties(no.prototype,{typeGroup:{get:F('Ua'),set:function(a){a!=this.Ua&&(this.Ua=a,this.dispatchEvent(T(this,Ih,null,a)))}},qname:{get:F('Qa'),set:function(a){a!=this.Qa&&(this.Qa=a,this.dispatchEvent(T(this,ch,null,a)))}},params:{get:F('vc'),set:function(a){a!=this.vc&&(this.vc=a,this.dispatchEvent(T(this,Jg,null,a)))}},label:{get:F('ca'),set:function(a){a!=this.ca&&(this.ca=a,this.dispatchEvent(T(this,Cc,null,a)))}},link:{get:F('ia'),set:function(a){a!=this.ia&&(this.ia=a,this.dispatchEvent(T(this,
Gc,null,a)))}},short:{get:F('Fc'),set:function(a){a!=this.Fc&&(this.Fc=a,this.dispatchEvent(T(this,sh,null,a)))}},MXMLDescriptor:{get:function(){if(void 0==this.K){var a=no.w.S.apply(this),b=[Mk,2,t,!0,Ih,nb,null,[Nk,1,p,!0,ha,0,0,null],0,0,[Ok,2,t,!0,ch,r,!0,'summaryQName',0,0,null,U,2,p,!0,ia,z,!0,'(',0,0,null,gl,4,t,!0,Jg,'style',!0,sb,xc,!0,new Vl(im),nb,null,[Nk,1,p,!0,ja,0,0,null],0,0,null,U,2,p,!0,ka,z,!0,'):',0,0,null,U,2,t,!0,Cc,r,!0,'summaryType',0,0,null,Ok,2,t,!0,Gc,r,!0,Ch,0,0,null],
Xl,3,t,!0,sh,r,!0,Ah,Ng,!0,100,0,0,null];this.K=a?a.concat(b):b}return this.K}}});no.prototype.ka=[6,[Ob,ch],null,[ch,z],[Ob,Jg],null,[Jg,Qb],[Ob,gh],null,[Cc,z],[Ob,gh],null,[Gc,z],[Ob,hh],null,[Gc,lc],[Ob,th],null,[sh,z],0,2,Ob,[Pb,cb],[0,1,2,3,4,5],null,[1,2,ch,cb,0,null,null,2,2,Jg,cb,1,null,null,3,2,gh,cb,[2,3],null,null,4,2,hh,cb,4,null,null,5,2,th,cb,5,null,null,null]];no.prototype._bindings=no.prototype.ka;no.prototype.i={names:[{name:Ua,j:Ua,kind:q}]};
no.prototype.h=function(){return{o:function(){return{}},l:function(){return{backgroundColor0:{type:n,access:y,g:Ua},backgroundColor1:{type:n,access:y,g:Ua},data:{type:m,access:C,g:Ua},obj:{type:xa,access:w,g:Ua},typeGroup:{type:Ye,access:y,g:Ua},qname:{type:Df,access:y,g:Ua},params:{type:Xe,access:y,g:Ua},label:{type:Ze,access:y,g:Ua},link:{type:Df,access:y,g:Ua},'short':{type:af,access:y,g:Ua}}},methods:function(){return{addedToParent:{type:B,g:Ua},updateRenderer:{type:B,g:Ua},MethodSummaryRenderer:{type:'',
g:Ua}}}}};no.prototype.h.m=9;no.prototype.h.xb=Object.keys(no);function po(){}H(le,po);po.prototype.i={names:[{name:'IViewportModel',j:le,kind:v}],s:[Jj]};po.prototype.h=function(){return{l:function(){return{borderMetrics:{type:xe,access:y,g:le},chromeMetrics:{type:xe,access:y,g:le}}},methods:function(){return{}}}};po.prototype.h.m=10;function qo(){J.call(this)}I(qo,J);H(Cf,qo);G=qo.prototype;G.hj=F('Zm');G.co=E('Zm');G.kj=F('$m');G.io=E('$m');G.v=D();Object.defineProperties(qo.prototype,{borderMetrics:{get:qo.prototype.hj,set:qo.prototype.co},chromeMetrics:{get:qo.prototype.kj,set:qo.prototype.io},strand:{set:qo.prototype.v}});qo.prototype.i={names:[{name:'ViewportModel',j:Cf,kind:q}],s:[po]};
qo.prototype.h=function(){return{o:function(){return{}},l:function(){return{borderMetrics:{type:xe,access:y,g:Cf},chromeMetrics:{type:xe,access:y,g:Cf},strand:{type:ce,access:C,g:Cf}}},methods:function(){return{ViewportModel:{type:'',g:Cf}}}}};qo.prototype.h.m=10;function ro(){}I(ro,pl);H(wf,ro);ro.prototype.Ym=function(){this.Pa()};ro.prototype.da=function(){if(null==this.flexibleChild)return!1;var a=this.layoutView;this.Nb=this.Xm[this.flexibleChild];var b=a.numElements;if(0==b)return!1;for(var c=0;c<b;c++){var d=uk(a.U(c),R),f=O(getComputedStyle(d.element).display);'flex'!=f&&f!=Nc&&(d.element.style.display=pb)}f=this.host.height-1;for(c=0;c<b;c++)d=uk(a.U(c),R),d!=this.Nb&&(f-=d.height);this.Nb.height=f;return!0};ro.prototype.layout=ro.prototype.da;
ro.prototype.F=E('Xm');ro.prototype.setDocument=ro.prototype.F;ro.prototype.v=function(a){ro.w.v.apply(this,[a]);uk(this.host.parent,Ij).addEventListener(vh,P(this.Ym,this,Kg))};ro.prototype.ae=F('Wm');ro.prototype.vf=E('Wm');Object.defineProperties(ro.prototype,{strand:{set:ro.prototype.v},flexibleChild:{get:ro.prototype.ae,set:ro.prototype.vf}});ro.prototype.i={names:[{name:'OneFlexibleChildVerticalLayoutForOverflow',j:wf,kind:q}],s:[Rm,Cl]};
ro.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:wf},flexibleChild:{type:n,access:y,g:wf}}},methods:function(){return{OneFlexibleChildVerticalLayoutForOverflow:{type:'',g:wf},layout:{type:h,g:wf},setDocument:{type:B,g:wf,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:n,optional:!0}]}}}}}};ro.prototype.h.m=10;function so(){J.call(this)}I(so,bk);H(fg,so);so.prototype.ol=function(){return document.title};so.prototype.Ep=function(a){document.title=a};Object.defineProperties(so.prototype,{title:{get:so.prototype.ol,set:so.prototype.Ep}});so.prototype.i={names:[{name:'HashChangeNotifierBeadWithTitle',j:fg,kind:q}]};so.prototype.h=function(){return{o:function(){return{}},l:function(){return{title:{type:n,access:y,g:fg}}},methods:function(){return{HashChangeNotifierBeadWithTitle:{type:'',g:fg}}}}};
so.prototype.h.m=10;function Vn(a){Sk.call(this);Sk.call(this,a);this.item=null}I(Vn,Sk);H(Ke,Vn);Vn.prototype.P=function(){var a=new Vn(this.type);a.item=this.item;return a};Vn.prototype.cloneEvent=Vn.prototype.P;Vn.prototype.i={names:[{name:'ItemAddedEvent',j:Ke,kind:q}]};
Vn.prototype.h=function(){return{o:function(){return{item:{type:m,u:function(a,b){return void 0!==b?a.item=b:a.item}}}},l:function(){return{}},methods:function(){return{ItemAddedEvent:{type:'',g:Ke,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:h,optional:!0},{index:3,type:h,optional:!0}]}},cloneEvent:{type:Je,g:Ke}}}}};Vn.prototype.h.m=10;function dn(a,b){return{bubbles:'undefined'!==typeof a?a:!1,cancelable:'undefined'!==typeof b?b:!1}}H('org.apache.royale.conversions.createEventInit',dn);function Wj(){}var to;H(te,Wj);Object.defineProperties(Wj,{valuesImpl:{get:function(){return to},set:function(a){to=a}}});Wj.prototype.i={names:[{name:'ValuesManager',j:te,kind:q}]};Wj.prototype.h=function(){return{o:function(){return{}},l:function(){return{'|valuesImpl':{type:je,access:y,g:te}}},methods:function(){return{ValuesManager:{type:'',g:te}}}}};Wj.prototype.h.m=10;function uo(){this.ai={}}H(Rf,uo);uo.prototype.parse=function(a){return JSON.parse(a,P(this.ln,this,'reviver'))};uo.prototype.parse=uo.prototype.parse;uo.prototype.ln=function(a,b){if(typeof b===Qc&&(a=vo(b),a=this.ai[a])){a=new a;for(var c in b)a[c]=b[c]}return b};function vo(a){var b=[],c;for(c in a)if('__JSON2ASVO__'!=c){var d='';d+=c;d+=':';d+=typeof a[c];b.push(d)}b.sort();return b.join(';')}H('org.apache.royale.reflection.beads.JSONReviver.generateKey',vo);
uo.prototype.v=function(a){if(a=a.info().jq)for(var b in a)(a=Xn(b))&&(this.ai[a.key]=a)};Object.defineProperties(uo.prototype,{strand:{set:uo.prototype.v}});uo.prototype.i={names:[{name:'JSONReviver',j:Rf,kind:q}],s:[Jj]};
uo.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:Rf}}},methods:function(){return{JSONReviver:{type:'',g:Rf},parse:{type:m,g:Rf,parameters:function(){return[{index:1,type:n,optional:!1}]}},'|generateKey':{type:n,g:Rf,parameters:function(){return[{index:1,type:m,optional:!1}]}}}}}};uo.prototype.h.m=10;function pn(a){this.im='undefined'!==typeof a?a:!1}H(Xc,pn);pn.prototype.F=E(ac);pn.prototype.setDocument=pn.prototype.F;G=pn.prototype;G.gd=function(a){if(a.type!=Lh||a.propertyName==this.sourcePropertyName)this.destination[this.destinationPropertyName]=this.source[this.sourcePropertyName]};
G.lm=function(a){a.propertyName==this.sourceID&&(this.Y&&this.Y.removeEventListener(this.eventName,P(this.gd,this,vb)),(this.source=this.Y=this.document[this.sourceID])?(this.Y.addEventListener(this.eventName,P(this.gd,this,vb)),this.destination[this.destinationPropertyName]=this.source[this.sourcePropertyName]):this.destination[this.destinationPropertyName]=null)};G.Ij=F('hm');G.Co=E('hm');G.Yb=F('fm');G.yc=E('fm');G.se=F('jm');G.If=E('jm');G.Zb=F('gm');G.zc=E('gm');G.dc=F('km');G.Dc=E('km');
G.v=function(a){this.Y&&this.Y.removeEventListener(this.eventName,P(this.gd,this,vb));null==this.destination&&(this.destination=a);if(this.im)this.source=this.document,this.Y=this.source.Sp;else if(null!=this.sourceID){if(this.source=this.Y=this.document[this.sourceID],null==this.source){this.document.addEventListener(Lh,P(this.lm,this,'sourceChangeHandler'));return}}else this.source=this.Y=this.document;this.Y.addEventListener(this.eventName,P(this.gd,this,vb));try{this.destination[this.destinationPropertyName]=
this.source[this.sourcePropertyName]}catch(b){}};Object.defineProperties(pn.prototype,{eventName:{get:pn.prototype.Ij,set:pn.prototype.Co},destination:{get:pn.prototype.Yb,set:pn.prototype.yc},sourceID:{get:pn.prototype.se,set:pn.prototype.If},destinationPropertyName:{get:pn.prototype.Zb,set:pn.prototype.zc},sourcePropertyName:{get:pn.prototype.dc,set:pn.prototype.Dc},strand:{set:pn.prototype.v}});pn.prototype.i={names:[{name:'SimpleBinding',j:Xc,kind:q}],s:[Jj,Cl,qn]};
pn.prototype.h=function(){return{o:function(){return{}},l:function(){return{eventName:{type:n,access:y,g:Xc},destination:{type:m,access:y,g:Xc},sourceID:{type:n,access:y,g:Xc},destinationPropertyName:{type:n,access:y,g:Xc},sourcePropertyName:{type:n,access:y,g:Xc},strand:{type:ce,access:C,g:Xc}}},methods:function(){return{SimpleBinding:{type:'',g:Xc,parameters:function(){return[{index:1,type:h,optional:!0}]}},setDocument:{type:B,g:Xc,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,
type:n,optional:!0}]}}}}}};pn.prototype.h.m=10;function wo(a){(a='undefined'!==typeof a?a:null)&&a.addEventListener(Nh,P(this.Og,this,Mh))}H(Hb,wo);G=wo.prototype;G.Wa=null;G.Va=null;G.Og=function(a){a=a.target;this.Va=a.mainView;this.Va.addEventListener(Cg,P(this.Oi,this,'packageChangedHandler'));this.Va.addEventListener('classChanged',P(this.Ni,this,'classChangedHandler'));this.Va.addEventListener('addTag',P(this.Mi,this,'addTagHandler'));this.Va.addEventListener(eh,P(this.Pi,this,'removeTagHandler'));this.Wa=a.model};
G.Mi=function(a){var b=this.Wa.filterTags;b||(b=[]);b.push({name:a.detail});this.Wa.filterTags=b};G.Pi=function(a){for(var b=this.Wa.filterTags,c=b.length>>0,d=0;d<c;d++)if(b[d].name==a.detail){b.splice(d,1);break}this.Wa.filterTags=0==b.length?null:b};G.Oi=function(){this.Wa.currentPackage=this.Va.currentPackage};G.Ni=function(){this.Wa.currentClass=this.Va.currentClass};G.F=function(a){a.addEventListener(Nh,P(this.Og,this,Mh))};wo.prototype.setDocument=wo.prototype.F;
wo.prototype.i={names:[{name:'ASDocController',j:Hb,kind:q}],s:[Cl]};wo.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{ASDocController:{type:'',g:Hb,parameters:function(){return[{index:1,type:$c,optional:!0}]}},setDocument:{type:B,g:Hb,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:n,optional:!0}]}}}}}};wo.prototype.h.m=9;function xo(){}H(cd,xo);xo.prototype.Dd=function(a,b,c){b='undefined'!==typeof b?b:null;c='undefined'!==typeof c?c:null;null==this.Me?this.Me=[{yi:c,Wg:a,O:b}]:this.Me.push({yi:c,Wg:a,O:b});setTimeout(P(this.rm,this,'makeCalls'),0)};xo.prototype.callLater=xo.prototype.Dd;xo.prototype.rm=function(){for(var a=this.Me,b=a.length>>0,c=0;c<b;c++){var d=a.shift();d.Wg.apply(d.yi,d.O)}};xo.prototype.v=D();Object.defineProperties(xo.prototype,{strand:{set:xo.prototype.v}});
xo.prototype.i={names:[{name:'CallLaterBead',j:cd,kind:q}],s:[Jj]};xo.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:cd}}},methods:function(){return{CallLaterBead:{type:'',g:cd},callLater:{type:B,g:cd,parameters:function(){return[{index:1,type:Pa,optional:!1},{index:2,type:e,optional:!0},{index:3,type:m,optional:!0}]}}}}}};xo.prototype.h.m=10;function yo(){}H(Nf,yo);H('org.apache.royale.net.HTTPConstants.GET','GET');H('org.apache.royale.net.HTTPConstants.POST','POST');H('org.apache.royale.net.HTTPConstants.PUT','PUT');H('org.apache.royale.net.HTTPConstants.FORM_URL_ENCODED',eb);H('org.apache.royale.net.HTTPConstants.DELETE','DELETE');H('org.apache.royale.net.HTTPConstants.OPEN','open');H('org.apache.royale.net.HTTPConstants.COMPLETE',Ab);H('org.apache.royale.net.HTTPConstants.COMMUNICATION_ERROR','communicationError');
H('org.apache.royale.net.HTTPConstants.IO_ERROR','ioError');H('org.apache.royale.net.HTTPConstants.SECURITY_ERROR','securityError');H('org.apache.royale.net.HTTPConstants.STATUS','httpStatus');H('org.apache.royale.net.HTTPConstants.RESPONSE_STATUS',nc);yo.prototype.i={names:[{name:'HTTPConstants',j:Nf,kind:q}]};yo.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{HTTPConstants:{type:'',g:Nf}}}}};yo.prototype.h.m=10;function zo(){}H(sd,zo);zo.prototype.i={names:[{name:'ICSSImpl',j:sd,kind:v}]};zo.prototype.h=function(){return{l:function(){return{}},methods:function(){return{}}}};zo.prototype.h.m=10;function Ao(a){J.call(this,'undefined'!==typeof a?a:null)}I(Ao,J);H(kf,Ao);G=Ao.prototype;G.Rm=function(){this.Fd=this.mb.aa(Lj);this.Fd.addEventListener(Sb,P(this.Zc,this,Rb));this.labelField=this.Fd.labelField;if(this.Pg=this.mb.aa(fn))this.dataField=this.Pg.dataField;this.sc||(this.sc=rk(jm,pc,this.mb));this.Zc(null)};
G.Zc=function(){var a=this.Fd.dataProvider;if(a){var b=this.mb.view.dataGroup;b.jf();for(var c=this.mb.aa(hl),d=a.length>>0,f=0;f<d;f++){var g=this.itemRendererFactory.Yc(b),l=g;b.Uc(g,!1);g.index=f;g.labelField=this.labelField;l&&(l.dataField=this.dataField);c&&(l=new io,l.marginBottom=c.separatorThickness,g.style=l,g.height=c.rowHeight,g.percentWidth=100);g.data=a[f];l=new Rl(yc);l.itemRenderer=g;this.dispatchEvent(l)}this.mb.dispatchEvent(new K('itemsCreated'))}};
G.v=function(a){this.mb=a;a.addEventListener(uc,P(this.Rm,this,'finishSetup'))};G.Zj=function(){this.sc||(this.sc=rk(jm,pc,this.mb));return this.sc};G.Ro=E('sc');Object.defineProperties(Ao.prototype,{strand:{set:Ao.prototype.v},itemRendererFactory:{get:Ao.prototype.Zj,set:Ao.prototype.Ro}});Ao.prototype.i={names:[{name:'DataItemRendererFactoryForArrayData',j:kf,kind:q}],s:[Jj,Fl]};
Ao.prototype.h=function(){return{o:function(){return{}},l:function(){return{strand:{type:ce,access:C,g:kf},itemRendererFactory:{type:Fd,access:y,g:kf}}},methods:function(){return{DataItemRendererFactoryForArrayData:{type:'',g:kf,parameters:function(){return[{index:1,type:m,optional:!0}]}}}}}};Ao.prototype.h.m=10;function wk(){}H(Pd,wk);wk.prototype.i={names:[{name:'IMeasurementBead',j:Pd,kind:v}],s:[Jj]};wk.prototype.h=function(){return{l:function(){return{measuredWidth:{type:k,access:w,g:Pd},measuredHeight:{type:k,access:w,g:Pd}}},methods:function(){return{}}}};wk.prototype.h.m=10;function Bo(a,b){this.name='undefined'!==typeof a?a:null;this.value='undefined'!==typeof b?b:null}H(Of,Bo);H('org.apache.royale.net.HTTPHeader.CONTENT_TYPE',Ha);H('org.apache.royale.net.HTTPHeader.CONTENT_LENGTH','Content-length');H('org.apache.royale.net.HTTPHeader.CONNECTION','Connection');Bo.prototype.i={names:[{name:'HTTPHeader',j:Of,kind:q}]};
Bo.prototype.h=function(){return{o:function(){return{name:{type:n,u:function(a,b){return void 0!==b?a.name=b:a.name}},value:{type:n,u:function(a,b){return void 0!==b?a.value=b:a.value}}}},l:function(){return{}},methods:function(){return{HTTPHeader:{type:'',g:Of,parameters:function(){return[{index:1,type:n,optional:!0},{index:2,type:n,optional:!0}]}}}}}};Bo.prototype.h.m=10;function Co(a,b){this.width='undefined'!==typeof a?a:0;this.height='undefined'!==typeof b?b:0}H(Ue,Co);Co.prototype.i={names:[{name:'Size',j:Ue,kind:q}]};Co.prototype.h=function(){return{o:function(){return{width:{type:k,u:function(a,b){return void 0!==b?a.width=b:a.width}},height:{type:k,u:function(a,b){return void 0!==b?a.height=b:a.height}}}},l:function(){return{}},methods:function(){return{Size:{type:'',g:Ue,parameters:function(){return[{index:1,type:k,optional:!0},{index:2,type:k,optional:!0}]}}}}}};
Co.prototype.h.m=10;function Do(){}H(Zc,Do);Do.prototype.nb=D();Do.prototype.parentChanged=Do.prototype.nb;Do.prototype.Ig=function(a){this.children?this.children.push(a):this.children=[a];a.nb(this)};Do.prototype.addChild=Do.prototype.Ig;Do.prototype.Hg=function(a){this.V?this.V.push(a):this.V=[a];a.Jb(this.value,!1)};Do.prototype.addBinding=Do.prototype.Hg;Do.prototype.Ei=function(){if(this.children)for(var a=this.children.length>>0,b=0;b<a;++b)this.children[b].nb(this)};Do.prototype.updateChildren=Do.prototype.Ei;
function Eo(a,b){try{b.apply(a)}catch(g){for(var c=Fo.length>>0,d=0;d<c;d++)if(M(g,Fo[d].type)){var f=Fo[d].hc;a.value=null!=f?f(a,b):null}a=g.message;c=Go.length>>0;for(d=0;d<c;d++)if(-1!=a.indexOf(O(Go[d])))return;throw g;}}var Go='Call attempted on an object that is not a function.;null has no properties.;undefined has no properties.;undefined is not an object;has no properties.;and there is no default value;invalid null argument.'.split(';');
H('org.apache.royale.binding.WatcherBase.allowedErrors',Go);var Fo=[{type:RangeError}];H('org.apache.royale.binding.WatcherBase.allowedErrorTypes',Fo);Do.prototype.Je=function(){if(this.V)for(var a=this.V.length>>0,b=0;b<a;b++)this.V[b].Jb(this.value,!1)};Do.prototype.notifyListeners=Do.prototype.Je;Do.prototype.i={names:[{name:'WatcherBase',j:Zc,kind:q}]};
Do.prototype.h=function(){return{o:function(){return{value:{type:m,u:function(a,b){return void 0!==b?a.value=b:a.value}},'|allowedErrors':{type:e,u:function(a){return void 0!==a?Go=a:Go}},'|allowedErrorTypes':{type:e,u:function(a){return void 0!==a?Fo=a:Fo}}}},l:function(){return{}},methods:function(){return{WatcherBase:{type:'',g:Zc},parentChanged:{type:B,g:Zc,parameters:function(){return[{index:1,type:m,optional:!1}]}},addChild:{type:B,g:Zc,parameters:function(){return[{index:1,type:Zc,optional:!1}]}},
addBinding:{type:B,g:Zc,parameters:function(){return[{index:1,type:Tc,optional:!1}]}},updateChildren:{type:B,g:Zc},notifyListeners:{type:B,g:Zc}}}}};Do.prototype.h.m=10;function ln(a,b,c,d){this.document=a;this.propertyName=b;this.getterFunction=d;this.eventNames=c}I(ln,Do);H(Wc,ln);ln.prototype.Kg=function(a){M(a,bl)&&a.propertyName!=this.propertyName||(Eo(this,P(this.gh,this,Kh)),this.Je())};
ln.prototype.nb=function(a){this.Y&&Ho(this,!1);M(a,ln)?this.source=a.value:this.source=a;this.source&&(M(this.source,Ij)?this.Y=this.source:M(this.source,wl(Fa))&&null!=this.source.staticEventDispatcher&&(this.Y=this.source.Sp));this.Y&&Ho(this,!0);Eo(this,P(this.gh,this,Kh));this.Je()};ln.prototype.parentChanged=ln.prototype.nb;
function Ho(a,b){var c=b?P(a.Y.addEventListener,a.Y,'addEventListener'):P(a.Y.removeEventListener,a.Y,'removeEventListener');if(M(a.eventNames,String))c(a.eventNames,P(a.Kg,a,vb));else if(M(a.eventNames,Array))for(var d=a.eventNames.length>>0,f=0;f<d;f++)c(O(a.eventNames[f]),P(a.Kg,a,vb));b||(a.Y=null)}
ln.prototype.gh=function(){if(this.source)if('this'==this.propertyName)this.value=this.source;else if(null!=this.getterFunction)try{this.value=this.getterFunction.apply(this.document,[this.propertyName])}catch(a){this.value=null}else this.value=this.source[this.propertyName];else this.value=null;this.Ei()};ln.prototype.i={names:[{name:'PropertyWatcher',j:Wc,kind:q}]};
ln.prototype.h=function(){return{o:function(){return{document:{type:m,u:function(a,b){return void 0!==b?a.document=b:a.document}},source:{type:m,u:function(a,b){return void 0!==b?a.source=b:a.source}},propertyName:{type:n,u:function(a,b){return void 0!==b?a.propertyName=b:a.propertyName}},eventNames:{type:m,u:function(a,b){return void 0!==b?a.eventNames=b:a.eventNames}},getterFunction:{type:Pa,u:function(a,b){return void 0!==b?a.getterFunction=b:a.getterFunction}}}},l:function(){return{}},methods:function(){return{PropertyWatcher:{type:'',
g:Wc,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:n,optional:!1},{index:3,type:m,optional:!1},{index:4,type:Pa,optional:!1}]}},parentChanged:{type:B,g:Wc,parameters:function(){return[{index:1,type:m,optional:!1}]}}}}}};ln.prototype.h.m=10;function Io(){Pm.call(this)}I(Io,Qm);H(Ef,Io);Io.prototype.i={names:[{name:'Div',j:Ef,kind:q}]};Io.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{Div:{type:'',g:Ef}}}}};Io.prototype.h.m=10;function Jo(){Pm.call(this);this.R([1,r,!0,'DocTopBar TopBar',0,0])}I(Jo,Io);H(jg,Jo);Object.defineProperties(Jo.prototype,{MXMLDescriptor:{get:function(){if(void 0==this.K){var a=Jo.w.S.apply(this),b=[Ko,3,p,!0,ea,r,!0,'logo','src',!0,'https://royale.apache.org/img/apache-royale-tm-logo-light.svg',0,0,null,ho,1,p,!0,fa,0,0,null,Sn,1,p,!0,ha,0,0,null];this.K=a?a.concat(b):b}return this.K}}});Jo.prototype.i={names:[{name:'DocTopBar',j:jg,kind:q}]};
Jo.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{DocTopBar:{type:'',g:jg}}}}};Jo.prototype.h.m=10;function cm(){}H(qg,cm);cm.prototype.F=E(ac);cm.prototype.setDocument=cm.prototype.F;cm.prototype.kc=function(a){for(var b in a)this[b]=a[b];return Ll(Object(this))};cm.prototype.initializeFromObject=cm.prototype.kc;G=cm.prototype;G.Aa=F('Bn');G.wb=E('Bn');G.eb=F('An');G.vb=E('An');G.Mj=F('zn');G.Go=E('zn');G.$b=F('yn');G.Ac=E('yn');
Object.defineProperties(cm.prototype,{target:{get:cm.prototype.Aa,set:cm.prototype.wb},name:{get:cm.prototype.eb,set:cm.prototype.vb},handlerFunction:{get:cm.prototype.Mj,set:cm.prototype.Go},document:{get:cm.prototype.$b,set:cm.prototype.Ac}});cm.prototype.i={names:[{name:'SetEventHandler',j:qg,kind:q}],s:[Cl]};
cm.prototype.h=function(){return{o:function(){return{}},l:function(){return{target:{type:n,access:y,g:qg},name:{type:n,access:y,g:qg},handlerFunction:{type:Pa,access:y,g:qg},document:{type:m,access:y,g:qg}}},methods:function(){return{SetEventHandler:{type:'',g:qg},setDocument:{type:B,g:qg,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:n,optional:!0}]}},initializeFromObject:{type:m,g:qg,parameters:function(){return[{index:1,type:m,optional:!1}]}}}}}};cm.prototype.h.m=10;function Kk(){}I(Kk,pl);H(yf,Kk);Kk.prototype.da=function(){var a=this.layoutView;a.element.style['vertical-align']='top';var b=a.na();var c=b.length>>0;for(a=0;a<c;a++){var d=b[a];null!=d&&(d.royale_wrapper.displayStyleForLayout||(d.royale_wrapper.visible?(d.style.display=vc,d.style.display=pb):d.royale_wrapper.rd(pb)),d.royale_wrapper.dispatchEvent(vh))}return!0};Kk.prototype.layout=Kk.prototype.da;Kk.prototype.i={names:[{name:'VerticalLayout',j:yf,kind:q}],s:[Ik]};
Kk.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{VerticalLayout:{type:'',g:yf},layout:{type:h,g:yf}}}}};Kk.prototype.h.m=10;function Lo(){}H(xe,Lo);G=Lo.prototype;G.hk=F('Em');G.Wo=E('Em');G.pl=F('Gm');G.Fp=E('Gm');G.Vk=F('Fm');G.rp=E('Fm');G.ij=F('Dm');G.eo=E('Dm');Object.defineProperties(Lo.prototype,{left:{get:Lo.prototype.hk,set:Lo.prototype.Wo},top:{get:Lo.prototype.pl,set:Lo.prototype.Fp},right:{get:Lo.prototype.Vk,set:Lo.prototype.rp},bottom:{get:Lo.prototype.ij,set:Lo.prototype.eo}});Lo.prototype.i={names:[{name:'EdgeData',j:xe,kind:q}]};
Lo.prototype.h=function(){return{o:function(){return{}},l:function(){return{left:{type:k,access:y,g:xe},top:{type:k,access:y,g:xe},right:{type:k,access:y,g:xe},bottom:{type:k,access:y,g:xe}}},methods:function(){return{EdgeData:{type:'',g:xe}}}}};Lo.prototype.h.m=10;function Mo(){}I(Mo,Lo);H(ze,Mo);Mo.prototype.bj=F('Km');Mo.prototype.Xn=E('Km');Object.defineProperties(Mo.prototype,{auto:{get:Mo.prototype.bj,set:Mo.prototype.Xn}});Mo.prototype.i={names:[{name:'MarginData',j:ze,kind:q}]};Mo.prototype.h=function(){return{o:function(){return{}},l:function(){return{auto:{type:h,access:y,g:ze}}},methods:function(){return{MarginData:{type:'',g:ze}}}}};Mo.prototype.h.m=10;H('org.apache.royale.debugging.assert',D());H('org.apache.royale.reflection.nativejs.AS3int',function(){var a={};a.classRef=wl(u);a.name=u;a.SYNTHETIC_TYPE=!0;a.ROYALE_CLASS_INFO={names:[{name:u,j:u,kind:q}]};a.ROYALE_REFLECTION_INFO=function(){return{methods:function(){return{'int':{parameters:function(){return[{index:1,optional:!0,type:'*'}]},type:'',declaredBy:u}}}}};return a});function No(){}H(rd,No);No.prototype.Jd=D();No.prototype.getBorderStyles=No.prototype.Jd;No.prototype.Ub=D();No.prototype.getBorderMetrics=No.prototype.Ub;No.prototype.Vb=D();No.prototype.getPaddingMetrics=No.prototype.Vb;No.prototype.Hd=D();No.prototype.getBorderAndPaddingMetrics=No.prototype.Hd;No.prototype.$c=D();No.prototype.getMargins=No.prototype.$c;No.prototype.Nd=D();No.prototype.getPositions=No.prototype.Nd;No.prototype.Id=D();No.prototype.getBorderPaddingAndMargins=No.prototype.Id;
No.prototype.i={names:[{name:'IBorderPaddingMarginValuesImpl',j:rd,kind:v}],s:[fo]};
No.prototype.h=function(){return{l:function(){return{}},methods:function(){return{getBorderStyles:{type:Ae,g:rd,parameters:function(){return[{index:1,type:ie,optional:!1},{index:2,type:n,optional:!0}]}},getBorderMetrics:{type:xe,g:rd,parameters:function(){return[{index:1,type:ie,optional:!1},{index:2,type:n,optional:!0}]}},getPaddingMetrics:{type:xe,g:rd,parameters:function(){return[{index:1,type:ie,optional:!1},{index:2,type:k,optional:!0},{index:3,type:k,optional:!0},{index:4,type:n,optional:!0}]}},
getBorderAndPaddingMetrics:{type:xe,g:rd,parameters:function(){return[{index:1,type:ie,optional:!1},{index:2,type:k,optional:!0},{index:3,type:k,optional:!0},{index:4,type:n,optional:!0}]}},getMargins:{type:ze,g:rd,parameters:function(){return[{index:1,type:ie,optional:!1},{index:2,type:k,optional:!0},{index:3,type:k,optional:!0},{index:4,type:n,optional:!0}]}},getPositions:{type:xe,g:rd,parameters:function(){return[{index:1,type:ie,optional:!1},{index:2,type:k,optional:!0},{index:3,type:k,optional:!0},
{index:4,type:n,optional:!0}]}},getBorderPaddingAndMargins:{type:ye,g:rd,parameters:function(){return[{index:1,type:ie,optional:!1},{index:2,type:k,optional:!0},{index:3,type:k,optional:!0},{index:4,type:n,optional:!0}]}}}}}};No.prototype.h.m=10;function Oo(){jl.call(this);this.D+=' PopUpList'}I(Oo,jl);H(cf,Oo);Oo.prototype.i={names:[{name:'PopUpList',j:cf,kind:q}]};Oo.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{PopUpList:{type:'',g:cf}}}}};Oo.prototype.h.m=10;function Po(){Hk.call(this);this.R([3,r,!0,Qg,Ng,!0,100,nb,null,[ql,1,p,!0,ea,0,0,null,Lk,1,p,!0,fa,0,0,null],0,0])}I(Po,Hk);H(Xa,Po);Po.prototype.M=function(a){Po.w.M.apply(this,[a]);a.returnhref?this.propertyTypeGroup.L(this.label):this.propertyTypeGroup.L(this.link);this.target.element.id=this.obj.qname;1==this.obj.platforms.length&&('swf'==this.obj.platforms[0]&&(this.target.className+=ca),'js'==this.obj.platforms[0]&&(this.target.className+=ba))};Po.prototype.sa=F(Ob);
Object.defineProperties(Po.prototype,{data:{get:S.prototype.ra,set:Po.prototype.M},obj:{get:Po.prototype.sa}});
Object.defineProperties(Po.prototype,{target:{get:F('Ta'),set:function(a){a!=this.Ta&&(this.Ta=a,this.dispatchEvent(T(this,Eh,null,a)))}},propertyTypeGroup:{get:F('wc'),set:function(a){a!=this.wc&&(this.wc=a,this.dispatchEvent(T(this,Ug,null,a)))}},label:{get:F('ca'),set:function(a){a!=this.ca&&(this.ca=a,this.dispatchEvent(T(this,Cc,null,a)))}},link:{get:F('ia'),set:function(a){a!=this.ia&&(this.ia=a,this.dispatchEvent(T(this,Gc,null,a)))}},attributes:{get:F('pa'),set:function(a){a!=this.pa&&(this.pa=
a,this.dispatchEvent(T(this,jb,null,a)))}},description:{get:F('qa'),set:function(a){a!=this.qa&&(this.qa=a,this.dispatchEvent(T(this,Ub,null,a)))}},MXMLDescriptor:{get:function(){if(void 0==this.K){var a=Po.w.S.apply(this),b=[Mk,2,p,!0,ja,nb,null,[Nk,1,p,!0,ha,0,0,null],0,0,[U,2,t,!0,Eh,r,!0,Tg,0,0,null,U,2,p,!0,ia,z,!0,Qg,0,0,null],Mk,3,t,!0,Ug,r,!0,Ug,nb,null,[Nk,1,p,!0,ka,0,0,null],0,0,[U,2,p,!0,la,r,!0,'propertyQName',0,0,null,U,2,p,!0,'$ID7',z,!0,':',0,0,null,U,2,t,!0,Cc,r,!0,'propertyType',
0,0,null,Ok,2,t,!0,Gc,r,!0,Vg,0,0,null],gl,4,t,!0,jb,r,!0,ib,xc,!0,new Vl(Wl),Ng,!0,100,0,0,null,Xl,2,t,!0,Ub,Ng,!0,100,0,0,null];this.K=a?a.concat(b):b}return this.K}}});
Po.prototype.ka=[7,[Pc,ch],null,[Eh,z],[Ob,ch],null,[la,z],[Ob,gh],null,[Cc,z],[Ob,gh],null,[Gc,z],[Ob,hh],null,[Gc,lc],[Ob,jb],null,[jb,Qb],[Pc,Ub],null,[Ub,z],0,2,Pc,Pb,[0,6],null,[1,2,ch,cb,0,null,null,2,2,Ub,cb,6,null,null,null],3,2,Ob,[Pb,cb],[1,2,3,4,5],null,[4,2,ch,cb,1,null,null,5,2,gh,cb,[2,3],null,null,6,2,hh,cb,4,null,null,7,2,jb,cb,5,null,null,null]];Po.prototype._bindings=Po.prototype.ka;Po.prototype.i={names:[{name:Xa,j:Xa,kind:q}]};
Po.prototype.h=function(){return{o:function(){return{}},l:function(){return{data:{type:m,access:C,g:Xa},obj:{type:xa,access:w,g:Xa},target:{type:Ze,access:y,g:Xa},propertyTypeGroup:{type:Ye,access:y,g:Xa},label:{type:Ze,access:y,g:Xa},link:{type:Df,access:y,g:Xa},attributes:{type:Xe,access:y,g:Xa},description:{type:af,access:y,g:Xa}}},methods:function(){return{PropertyDetailRenderer:{type:'',g:Xa}}}}};Po.prototype.h.m=9;function Qo(){}H($d,Qo);Qo.prototype.i={names:[{name:'IState',j:$d,kind:v}]};Qo.prototype.h=function(){return{l:function(){return{name:{type:n,access:w,g:$d}}},methods:function(){return{}}}};Qo.prototype.h.m=10;function Ro(){}H(sg,Ro);G=Ro.prototype;G.eb=F('Hn');G.vb=E('Hn');G.gl=F('Jn');G.Ap=E('Jn');G.xk=F('In');G.fp=E('In');Object.defineProperties(Ro.prototype,{name:{get:Ro.prototype.eb,set:Ro.prototype.vb},stateGroups:{get:Ro.prototype.gl,set:Ro.prototype.Ap},overrides:{get:Ro.prototype.xk,set:Ro.prototype.fp}});Ro.prototype.i={names:[{name:'State',j:sg,kind:q}],s:[Qo]};
Ro.prototype.h=function(){return{o:function(){return{}},l:function(){return{name:{type:n,access:y,g:sg},stateGroups:{type:n,access:y,g:sg},overrides:{type:e,access:y,g:sg}}},methods:function(){return{State:{type:'',g:sg,parameters:function(){return[{index:1,type:m,optional:!0}]}}}}}};Ro.prototype.h.m=10;function Ko(){Pm.call(this)}I(Ko,Pm);H(Ff,Ko);G=Ko.prototype;G.createElement=function(){return tk(this,'img')};G.el=function(){return this.element.src};G.zp=function(a){this.element.src=a};G.Zi=function(){return this.element.alt};G.Un=function(a){this.element.alt=a};Object.defineProperties(Ko.prototype,{src:{get:Ko.prototype.el,set:Ko.prototype.zp},alt:{get:Ko.prototype.Zi,set:Ko.prototype.Un}});Ko.prototype.i={names:[{name:'Img',j:Ff,kind:q}]};
Ko.prototype.h=function(){return{o:function(){return{}},l:function(){return{src:{type:n,access:y,g:Ff},alt:{type:n,access:y,g:Ff}}},methods:function(){return{Img:{type:'',g:Ff}}}}};Ko.prototype.h.m=10;function vn(a,b){if(M(b,String))return''+b;if(!b)return'';if(a.labelField)return''+b[a.labelField];if(a.dataField)return''+b[a.dataField];a=O(b.label);return null!=a?a:''+b}H('org.apache.royale.html.util.getLabelFromData',vn);function So(){}H(He,So);So.prototype.yb=D();So.prototype.wrapEvent=So.prototype.yb;So.prototype.i={names:[{name:'IBrowserEvent',j:He,kind:v}]};So.prototype.h=function(){return{l:function(){return{}},methods:function(){return{wrapEvent:{type:B,g:He,parameters:function(){return[{index:1,type:ic,optional:!1}]}}}}}};So.prototype.h.m=10;function L(){}H(Be,L);L.prototype.yb=function(a){this.J=a;this.nativeEvent=a.za()};L.prototype.wrapEvent=L.prototype.yb;L.prototype.za=function(){return this.J.za()};L.prototype.getBrowserEvent=L.prototype.za;L.prototype.bd=function(a){return!!this.J.bd(a)};L.prototype.isButton=L.prototype.bd;L.prototype.ze=function(){return!!this.J.ze()};L.prototype.isMouseActionButton=L.prototype.ze;L.prototype.preventDefault=function(){this.J.preventDefault()};L.prototype.preventDefault=L.prototype.preventDefault;
L.prototype.stopImmediatePropagation=function(){this.J.za().stopImmediatePropagation();this.J.stopPropagation()};L.prototype.stopImmediatePropagation=L.prototype.stopImmediatePropagation;L.prototype.stopPropagation=function(){this.J.stopPropagation()};L.prototype.stopPropagation=L.prototype.stopPropagation;G=L.prototype;G.Te=-1;G.$i=function(){return!!this.J.altKey};G.Pd=function(){return this.J.button>>>0};G.jj=function(){return this.J.charCode>>>0};G.Td=function(){return Number(this.J.clientX)};
G.fe=F('clientX');G.Ud=function(){return Number(this.J.clientY)};G.ge=F('clientY');G.tj=function(){return!!this.J.ctrlKey};G.Vd=function(){return Uk(this.J.currentTarget)};G.Xd=function(){return!!this.J.defaultPrevented};G.dk=function(){return this.J.keyCode>>>0};G.nk=function(){return!!this.J.metaKey};G.uk=function(){return Number(this.J.offsetX)};G.vk=function(){return Number(this.J.offsetY)};G.Ek=F('platformModifierKey');G.Ok=function(){return Uk(this.J.relatedTarget)};G.ne=function(){return Number(this.J.screenX)};
G.oe=function(){return Number(this.J.screenY)};G.al=function(){return!!this.J.shiftKey};G.fl=function(){return this.J.state};G.Aa=function(){return Uk(this.J.target)};G.nl=function(){return this.J.timestamp};G.ec=function(){return O(this.J.type)};G.Qd=function(){if(-1<this.Te)return 1==this.Te;var a=this.J.za();return'buttons'in a?1==a.buttons:1==a.which};G.nf=function(a){this.Te=(a?1:0)>>0};G.Rd=function(){return this.J.za().buttons>>0};
Object.defineProperties(L.prototype,{altKey:{get:L.prototype.$i},button:{get:L.prototype.Pd},charCode:{get:L.prototype.jj},clientX:{get:L.prototype.Td},localX:{get:L.prototype.fe},clientY:{get:L.prototype.Ud},localY:{get:L.prototype.ge},ctrlKey:{get:L.prototype.tj},currentTarget:{get:L.prototype.Vd},defaultPrevented:{get:L.prototype.Xd},keyCode:{get:L.prototype.dk},metaKey:{get:L.prototype.nk},offsetX:{get:L.prototype.uk},offsetY:{get:L.prototype.vk},platformModifierKey:{get:L.prototype.Ek},relatedTarget:{get:L.prototype.Ok},
screenX:{get:L.prototype.ne},screenY:{get:L.prototype.oe},shiftKey:{get:L.prototype.al},state:{get:L.prototype.fl},target:{get:L.prototype.Aa},timestamp:{get:L.prototype.nl},type:{get:L.prototype.ec},buttonDown:{get:L.prototype.Qd,set:L.prototype.nf},buttons:{get:L.prototype.Rd}});L.prototype.i={names:[{name:'BrowserEvent',j:Be,kind:q}],s:[So]};
L.prototype.h=function(){return{o:function(){return{nativeEvent:{type:m,u:function(a,b){return void 0!==b?a.nativeEvent=b:a.nativeEvent}}}},l:function(){return{altKey:{type:h,access:w,g:Be},button:{type:Jh,access:w,g:Be},charCode:{type:Jh,access:w,g:Be},clientX:{type:k,access:w,g:Be},localX:{type:k,access:w,g:Be},clientY:{type:k,access:w,g:Be},localY:{type:k,access:w,g:Be},ctrlKey:{type:h,access:w,g:Be},currentTarget:{type:m,access:w,g:Be},defaultPrevented:{type:h,access:w,g:Be},keyCode:{type:Jh,
access:w,g:Be},metaKey:{type:h,access:w,g:Be},offsetX:{type:k,access:w,g:Be},offsetY:{type:k,access:w,g:Be},platformModifierKey:{type:h,access:w,g:Be},relatedTarget:{type:m,access:w,g:Be},screenX:{type:k,access:w,g:Be},screenY:{type:k,access:w,g:Be},shiftKey:{type:h,access:w,g:Be},state:{type:m,access:w,g:Be},target:{type:m,access:w,g:Be},timestamp:{type:'Date',access:w,g:Be},type:{type:n,access:w,g:Be},buttonDown:{type:h,access:y,g:Be},buttons:{type:u,access:w,g:Be}}},methods:function(){return{wrapEvent:{type:B,
g:Be,parameters:function(){return[{index:1,type:ic,optional:!1}]}},getBrowserEvent:{type:m,g:Be},isButton:{type:h,g:Be,parameters:function(){return[{index:1,type:u,optional:!1}]}},isMouseActionButton:{type:h,g:Be},preventDefault:{type:B,g:Be},stopImmediatePropagation:{type:B,g:Be},stopPropagation:{type:B,g:Be}}}}};L.prototype.h.m=10;function To(){mo.call(this)}I(To,mo);H(Ca,To);To.prototype.Mc=null;To.prototype.Nc=null;To.prototype.yd=!1;To.prototype.C=function(){To.w.C.apply(this);this.yd=1==this.parent.ma(this)%2;this.element.style.backgroundColor=this.yd?this.Nc:this.Mc};To.prototype.addedToParent=To.prototype.C;To.prototype.$=function(){To.w.$.apply(this);if(null==this.element.style.backgroundColor||''==this.element.style.backgroundColor)this.element.style.backgroundColor=this.yd?this.Nc:this.Mc};
To.prototype.updateRenderer=To.prototype.$;To.prototype.Za=F('Mc');To.prototype.rb=E('Mc');To.prototype.$a=F('Nc');To.prototype.sb=E('Nc');Object.defineProperties(To.prototype,{backgroundColor0:{get:To.prototype.Za,set:To.prototype.rb},backgroundColor1:{get:To.prototype.$a,set:To.prototype.sb}});To.prototype.i={names:[{name:Ca,j:Ca,kind:q}]};
To.prototype.h=function(){return{o:function(){return{}},l:function(){return{backgroundColor0:{type:n,access:y,g:Ca},backgroundColor1:{type:n,access:y,g:Ca}}},methods:function(){return{AlternatingBackgroundColorHashAnchorStringItemRenderer:{type:'',g:Ca},addedToParent:{type:B,g:Ca},updateRenderer:{type:B,g:Ca}}}}};To.prototype.h.m=9;function Uo(){$m.call(this);this.xd=['Too many search results'];this.mxmlsd=[[Mk,3,t,!0,Fg,Ng,!0,100,nb,null,[Kk,1,p,!0,'$ID16',0,0,null],0,0,[jl,3,t,!0,Hg,r,!0,'paneList',xc,!0,new Vl(Vo),0,0,null]],[Mk,2,t,!0,'loadingPane',Ng,!0,100,0,0,[U,3,p,!0,'$ID17',r,!0,'loading',z,!0,'Loading...',0,0,null]],[Mk,4,t,!0,$b,r,!0,$b,Ng,!0,100,nb,null,[Kk,1,p,!0,'$ID18',0,0,null],0,0,[Mk,2,p,!0,'$ID21',nb,null,[Nk,1,p,!0,'$ID19',0,0,null],0,0,[U,3,p,!0,'$ID20',r,!0,Wb,z,!0,'Package',0,0,null,U,2,t,!0,Gg,r,!0,
Xb,0,0,null],Mk,2,p,!0,'$ID25',nb,null,[Nk,1,p,!0,'$ID22',0,0,null],0,0,[U,3,p,!0,'$ID23',r,!0,Wb,z,!0,Fa,0,0,null,U,2,p,!0,'$ID24',r,!0,Xb,0,0,null],Mk,2,p,!0,'$ID29',nb,null,[Nk,1,p,!0,'$ID26',0,0,null],0,0,[U,3,p,!0,'$ID27',r,!0,Wb,z,!0,'Inheritance',0,0,null,jl,5,t,!0,sc,r,!0,Xb,xc,!0,new Vl(eo),'labelField',!0,Cc,nb,null,[Nk,1,p,!0,'$ID28',0,0,null],0,0,null],gl,4,t,!0,jb,r,!0,ib,xc,!0,new Vl(Wl),Ng,!0,100,0,0,null,Xl,3,t,!0,Ub,r,!0,Ub,Ng,!0,100,0,0,null,U,3,p,!0,'$ID30',z,!0,'Public Properties',
r,!0,oh,0,0,null,jl,4,t,!0,ah,r,!0,Bh,xc,!0,new Vl(en),Ng,!0,100,0,0,null,U,3,p,!0,'$ID31',z,!0,'Public Methods',r,!0,oh,0,0,null,jl,4,t,!0,Yg,r,!0,Bh,xc,!0,new Vl(no),Ng,!0,100,0,0,null,U,3,p,!0,'$ID32',z,!0,'Events',r,!0,oh,0,0,null,jl,4,t,!0,Wg,r,!0,Bh,xc,!0,new Vl(Jk),Ng,!0,100,0,0,null,U,3,p,!0,'$ID33',z,!0,'Property Details',r,!0,oh,0,0,null,gl,4,t,!0,Rg,r,!0,Zb,xc,!0,new Vl(Po),Ng,!0,100,0,0,null,U,3,p,!0,'$ID34',z,!0,'Constructor Details',r,!0,oh,0,0,null,gl,4,t,!0,Fb,r,!0,Zb,xc,!0,new Vl(gm),
Ng,!0,100,0,0,null,U,3,p,!0,'$ID35',z,!0,'Method Details',r,!0,oh,0,0,null,gl,4,t,!0,Ta,r,!0,Zb,xc,!0,new Vl(gm),Ng,!0,100,0,0,null,U,3,p,!0,'$ID36',z,!0,'Event Details',r,!0,oh,0,0,null,gl,4,t,!0,Ma,r,!0,Zb,xc,!0,new Vl(Ul),Ng,!0,100,0,0,null]],null];this.R([4,Ng,!0,100,Lg,!0,100,'states',null,[Ro,3,p,!0,fa,'name',!0,Ig,Bg,null,[Kl,5,Bc,!0,0,Vb,!0,ih,Sg,!0,Mc,Pg,!0,'after',dh,!0,mb,0,0,null],0,0,null,Ro,3,p,!0,ha,'name',!0,'loading',Bg,null,[Kl,5,Bc,!0,1,Vb,!0,ih,Sg,!0,Mc,Pg,!0,'after',dh,!0,mb,
0,0,null],0,0,null,Ro,3,p,!0,ia,'name',!0,'classDetail',Bg,null,[Kl,5,Bc,!0,2,Vb,!0,ih,Sg,!0,Mc,Pg,!0,'after',dh,!0,mb,0,0,null],0,0,null],nb,null,[sn,1,p,!0,ja,0,0,null,ro,2,p,!0,ka,fc,!0,Hh,0,0,null,so,1,t,!0,'router',0,1,'hashChange',this.Sf,null,fm,1,t,!0,'efb',0,1,'ready',this.Tf,null,xo,1,t,!0,'clb',0,0,null],0,1,uc,this.Rf])}I(Uo,$m);H(Aa,Uo);function Vo(){mo.call(this);this.R([2,'backgroundColor0',!0,'#ffffff','backgroundColor1',!0,da,0,0])}I(Vo,To);H(Ba,Vo);
Vo.prototype.i={names:[{name:'AltBGRenderer',j:Ba,kind:q}]};Vo.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{AltBGRenderer:{type:'',g:'AltBGRenderer'}}}}};Vo.prototype.h.m=9;Uo.prototype.Bg=!1;Uo.prototype.Ii=function(){this.Bg=!0;Wo(this)};Uo.prototype.currentPackage=null;Uo.prototype.currentPackage=Uo.prototype.currentPackage;function Xo(a){a.currentPackage=a.packageList.selectedItem;a.dispatchEvent(new K(Cg))}Uo.prototype.currentClass=null;
Uo.prototype.currentClass=Uo.prototype.currentClass;G=Uo.prototype;G.Lb=null;G.Cg=function(){this.Bg?Yo(this,this.efb.urlParameters):this.clb.Dd(P(this.Cg,this,'paramsReady'))};function Wo(a){a.ja&&(a.L(a.ja),a.ja=null,a.searchTI.text='');var b=a.router.hash;'#!'==b.substr(0,2)&&(b=b.substring(2));'#'==b.charAt(0)&&(b=b.substring(1));Yo(a,b)}
function Yo(a,b){if(b){var c='/',d=b.indexOf(c)>>0;-1==d&&(d=b.indexOf('$')>>0,-1!=d&&(c='$'));if(-1!=d){var f=b.substr(0,d);a.packageList.selectedItem=f;Xo(a);b=b.substr(d+1);d=b.indexOf(c)>>0;if(-1!=d&&(a.Lb=b.substr(d+1),b=b.substr(0,d),document.getElementById(a.Lb)&&a.classList.selectedItem==b)){a.Dg();return}a.applicationModel.addEventListener(Kb,P(a.Ag,a,ec));c=a.classList.selectedItem=b;1<f.length&&(c+=' ('+f+')');a.router.title=c;a.currentState='loading';a.currentClass=a.classList.selectedItem;
a.dispatchEvent(new K('classChanged'))}else a.packageList.selectedItem=b,a.router.title=b,Xo(a)}else a.currentState=Ig}G.Ag=function(){this.currentState='classDetail';this.applicationModel.removeEventListener(Kb,P(this.Ag,this,ec));this.Lb&&this.clb.Dd(P(this.Dg,this,'scrollMemberIntoView'))};G.Dg=function(){document.getElementById(this.Lb).scrollIntoView();this.Lb=null};G.ja=null;G.Hi=200;G.xd=null;G.zg=null;G.Gi=function(a){return this.zg.test(a)};
G.Rf=function(){this.applicationModel.addEventListener(Eg,P(this.Ii,this,'packagesReadyHandler'))};Uo.prototype.$EH0=Uo.prototype.Rf;Uo.prototype.Sf=function(){Wo(this)};Uo.prototype.$EH1=Uo.prototype.Sf;Uo.prototype.Tf=function(){this.Cg()};Uo.prototype.$EH2=Uo.prototype.Tf;
Uo.prototype.Uf=function(){if(!this.ja){this.ja=new Oo;this.ja.itemRenderer=new Vl(Zo);this.ja.dataProvider=this.xd;this.addElement(this.ja);var a=new W(this.searchTI.x,this.searchTI.y);a.y+=this.searchTI.height;a=$o(a,this.titleGroup);this.ja.x=a.x;this.ja.y=a.y;this.ja.width=this.searchTI.width;this.ja.height=200}this.zg=new RegExp(this.searchTI.text,'i');a=this.applicationModel.allClasses.filter(P(this.Gi,this,'filterClasses'),this);this.ja.dataProvider=a.length<this.Hi?a:this.xd};
Uo.prototype.$EH3=Uo.prototype.Uf;Uo.prototype.Vf=function(){this.dispatchEvent(new El(this.topLevel.selected?'addTag':eh,!1,!1,'toplevel'))};Uo.prototype.$EH4=Uo.prototype.Vf;Uo.prototype.Wf=function(){this.dispatchEvent(new El(this.viewBeads.selected?'addTag':eh,!1,!1,'viewbead'))};Uo.prototype.$EH5=Uo.prototype.Wf;
Object.defineProperties(Uo.prototype,{packageListPane:{get:F('ci'),set:function(a){a!=this.ci&&(this.ci=a,this.dispatchEvent(T(this,Fg,null,a)))}},packagePaneList:{get:F('fi'),set:function(a){a!=this.fi&&(this.fi=a,this.dispatchEvent(T(this,Hg,null,a)))}},loadingPane:{get:F('ah'),set:function(a){a!=this.ah&&(this.ah=a,this.dispatchEvent(T(this,'loadingPane',null,a)))}},detailsPane:{get:F('Qg'),set:function(a){a!=this.Qg&&(this.Qg=a,this.dispatchEvent(T(this,$b,null,a)))}},packageName:{get:F('ei'),
set:function(a){a!=this.ei&&(this.ei=a,this.dispatchEvent(T(this,Gg,null,a)))}},inheritance:{get:F('Xg'),set:function(a){a!=this.Xg&&(this.Xg=a,this.dispatchEvent(T(this,sc,null,a)))}},attributes:{get:F('pa'),set:function(a){a!=this.pa&&(this.pa=a,this.dispatchEvent(T(this,jb,null,a)))}},description:{get:F('qa'),set:function(a){a!=this.qa&&(this.qa=a,this.dispatchEvent(T(this,Ub,null,a)))}},publicPropertyList:{get:F('ji'),set:function(a){a!=this.ji&&(this.ji=a,this.dispatchEvent(T(this,ah,null,a)))}},
publicMethodList:{get:F('ii'),set:function(a){a!=this.ii&&(this.ii=a,this.dispatchEvent(T(this,Yg,null,a)))}},publicEventList:{get:F('hi'),set:function(a){a!=this.hi&&(this.hi=a,this.dispatchEvent(T(this,Wg,null,a)))}},propertyDetails:{get:F('gi'),set:function(a){a!=this.gi&&(this.gi=a,this.dispatchEvent(T(this,Rg,null,a)))}},constructorDetails:{get:F('Ng'),set:function(a){a!=this.Ng&&(this.Ng=a,this.dispatchEvent(T(this,Fb,null,a)))}},MethodDetails:{get:F('Fg'),set:function(a){a!=this.Fg&&(this.Fg=
a,this.dispatchEvent(T(this,Ta,null,a)))}},EventDetails:{get:F('Eg'),set:function(a){a!=this.Eg&&(this.Eg=a,this.dispatchEvent(T(this,Ma,null,a)))}},router:{get:F('pi'),set:function(a){a!=this.pi&&(this.pi=a,this.dispatchEvent(T(this,'router',null,a)))}},efb:{get:F('Sg'),set:function(a){a!=this.Sg&&(this.Sg=a,this.dispatchEvent(T(this,'efb',null,a)))}},clb:{get:F('Mg'),set:function(a){a!=this.Mg&&(this.Mg=a,this.dispatchEvent(T(this,'clb',null,a)))}},titleGroup:{get:F('zi'),set:function(a){a!=this.zi&&
(this.zi=a,this.dispatchEvent(T(this,Gh,null,a)))}},title:{get:F('Ai'),set:function(a){a!=this.Ai&&(this.Ai=a,this.dispatchEvent(T(this,'title',null,a)))}},searchTI:{get:F('ri'),set:function(a){a!=this.ri&&(this.ri=a,this.dispatchEvent(T(this,nh,null,a)))}},spacer:{get:F('vi'),set:function(a){a!=this.vi&&(this.vi=a,this.dispatchEvent(T(this,'spacer',null,a)))}},topLevel:{get:F('Ci'),set:function(a){a!=this.Ci&&(this.Ci=a,this.dispatchEvent(T(this,'topLevel',null,a)))}},viewBeads:{get:F('Fi'),set:function(a){a!=
this.Fi&&(this.Fi=a,this.dispatchEvent(T(this,'viewBeads',null,a)))}},topContainer:{get:F('Bi'),set:function(a){a!=this.Bi&&(this.Bi=a,this.dispatchEvent(T(this,Hh,null,a)))}},leftSide:{get:F('$g'),set:function(a){a!=this.$g&&(this.$g=a,this.dispatchEvent(T(this,Fc,null,a)))}},packageList:{get:F('di'),set:function(a){a!=this.di&&(this.di=a,this.dispatchEvent(T(this,Dg,null,a)))}},classList:{get:F('Lg'),set:function(a){a!=this.Lg&&(this.Lg=a,this.dispatchEvent(T(this,xb,null,a)))}},rightSide:{get:F('mi'),
set:function(a){a!=this.mi&&(this.mi=a,this.dispatchEvent(T(this,ih,null,a)))}},baseName:{get:F('Jg'),set:function(a){a!=this.Jg&&(this.Jg=a,this.dispatchEvent(T(this,mb,null,a)))}},MXMLDescriptor:{get:function(){if(void 0==this.K){var a=Uo.w.S.apply(this),b=[Jo,1,p,!0,la,0,0,null,ap,1,p,!0,'$ID7',0,0,null,Mk,4,t,!0,Gh,Ng,!0,100,r,!0,Gh,nb,null,[Sm,2,p,!0,'$ID8',fc,!0,'spacer',0,0,null],0,0,[U,4,t,!0,'title',z,!0,'Apache Royale ActionScript Library Reference','height',!0,30,r,!0,'title',0,0,null,
ko,2,p,!0,'$ID9','width',!0,20,0,0,null,U,3,p,!0,'$ID10',z,!0,'Find a class',r,!0,'findClassLabel',0,0,null,bp,2,t,!0,nh,r,!0,nh,0,1,ub,this.Uf,null,ko,1,t,!0,'spacer',0,0,null,lo,2,t,!0,'topLevel',z,!0,'Top-Level',0,1,zb,this.Vf,null,lo,2,t,!0,'viewBeads',z,!0,'View Bead',0,1,zb,this.Wf,null],Mk,4,t,!0,Hh,Ng,!0,100,r,!0,Hh,nb,null,[Sm,2,p,!0,'$ID11',fc,!0,ih,0,0,null,xk,2,p,!0,'$ID12','initialValue',!0,'null',0,0,null],0,0,[Mk,5,t,!0,Fc,'width',!0,300,Lg,!0,100,r,!0,Fc,nb,null,[Kk,1,p,!0,'$ID13',
0,0,null],0,0,[jl,4,t,!0,Dg,Ng,!0,100,Lg,!0,50,xc,!0,new Vl(mo),0,0,null,jl,5,t,!0,xb,Ng,!0,100,Lg,!0,50,xc,!0,new Vl(mo),'labelField',!0,Cc,0,0,null],Gl,4,t,!0,ih,r,!0,ih,Lg,!0,100,nb,null,[Kk,1,p,!0,'$ID14',0,0,null,yn,1,p,!0,'$ID15',0,0,null],0,0,[U,4,t,!0,mb,r,!0,'paneTitle',Ng,!0,100,'style',!0,'fontSize:20',0,0,null]]];this.K=a?a.concat(b):b}return this.K}}});
Uo.prototype.ka=[17,[gb,Dg],null,[Hg,Qb],[gb,Lb],null,[Gg,z],[gb,'currentClass'],null,['$ID24',z],[gb,sc],null,[sc,Qb],[gb,jb],null,[jb,Qb],[gb,Ub],null,[Ub,'html'],[gb,$g],null,[ah,Qb],[gb,Zg],null,[Yg,Qb],[gb,Xg],null,[Wg,Qb],[gb,$g],null,[Rg,Qb],[gb,Gb],null,[Fb,Qb],[gb,Zg],null,[Ta,Qb],[gb,Xg],null,[Ma,Qb],[gb,Dg],null,['$ID12','watchedProperty'],[gb,Dg],null,[Dg,Qb],[gb,xb],null,[xb,Qb],function(){return this.currentState==Ig?'All Packages':uk(this.applicationModel,Kn,!0).currentClass},null,
[mb,z],0,2,gb,Ic,[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],null,[1,2,Dg,Eg,[0,13,14],null,null,2,2,Lb,Mb,1,null,null,3,2,'currentClass',Jb,[2,16],null,null,4,2,sc,Kb,3,null,null,5,2,jb,Kb,4,null,null,6,2,Ub,Kb,5,null,null,7,2,$g,Kb,[6,9],null,null,8,2,Zg,Kb,[7,11],null,null,9,2,Xg,Kb,[8,12],null,null,10,2,Gb,Kb,10,null,null,11,2,xb,Mb,15,null,null,null],12,2,'currentState',Nb,16,null,null];Uo.prototype._bindings=Uo.prototype.ka;Uo.prototype.i={names:[{name:Aa,j:Aa,kind:q}]};
Uo.prototype.h=function(){return{o:function(){return{currentPackage:{type:n,u:function(a,b){return void 0!==b?a.currentPackage=b:a.currentPackage}},currentClass:{type:n,u:function(a,b){return void 0!==b?a.currentClass=b:a.currentClass}}}},l:function(){return{packageListPane:{type:Ye,access:y,g:Aa},packagePaneList:{type:$e,access:y,g:Aa},loadingPane:{type:Ye,access:y,g:Aa},detailsPane:{type:Ye,access:y,g:Aa},packageName:{type:Ze,access:y,g:Aa},inheritance:{type:$e,access:y,g:Aa},attributes:{type:Xe,
access:y,g:Aa},description:{type:af,access:y,g:Aa},publicPropertyList:{type:$e,access:y,g:Aa},publicMethodList:{type:$e,access:y,g:Aa},publicEventList:{type:$e,access:y,g:Aa},propertyDetails:{type:Xe,access:y,g:Aa},constructorDetails:{type:Xe,access:y,g:Aa},MethodDetails:{type:Xe,access:y,g:Aa},EventDetails:{type:Xe,access:y,g:Aa},router:{type:fg,access:y,g:Aa},efb:{type:Sf,access:y,g:Aa},clb:{type:cd,access:y,g:Aa},titleGroup:{type:Ye,access:y,g:Aa},title:{type:Ze,access:y,g:Aa},searchTI:{type:ef,
access:y,g:Aa},spacer:{type:df,access:y,g:Aa},topLevel:{type:Ve,access:y,g:Aa},viewBeads:{type:Ve,access:y,g:Aa},topContainer:{type:Ye,access:y,g:Aa},leftSide:{type:Ye,access:y,g:Aa},packageList:{type:$e,access:y,g:Aa},classList:{type:$e,access:y,g:Aa},rightSide:{type:We,access:y,g:Aa},baseName:{type:Ze,access:y,g:Aa}}},methods:function(){return{ASDocMainView:{type:'',g:Aa}}}}};Uo.prototype.h.m=9;function cp(){J.call(this)}I(cp,Yn);H(Qf,cp);cp.prototype.i={names:[{name:'HTTPServiceBase',j:Qf,kind:q}]};cp.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{}}}};cp.prototype.h.m=10;function dp(){this.cf=eb;this.df='GET';J.call(this);this.element=new XMLHttpRequest}I(dp,cp);H(Pf,dp);dp.prototype.$h=0;dp.prototype.ef=0;
dp.prototype.send=function(){if(null==this.va){var a=this.beads;for(b in a)this.I(a[b])}this.dispatchEvent(new K('preSend'));a=this.element;a.onreadystatechange=P(this.Ln,this,'progressHandler');this.url=this.ff;var b=null;null!=this.contentData&&('GET'==this.method?this.url=-1!=this.url.indexOf('?')?this.url+String(this.contentData):this.url+('?'+String(this.contentData)):b=this.contentData);a.open(this.method,this.url,!0);a.timeout=this.timeout;var c=!1;if(this.headers)for(var d=this.headers.length>>
0,f=0;f<d;f++){var g=this.headers[f];g.name==Ha&&(c=!0);a.setRequestHeader(g.name,g.value)}'GET'!=this.method&&!c&&b&&a.setRequestHeader(Ha,this.contentType);b?a.send(b):a.send();this.dispatchEvent(new K('postSend'))};dp.prototype.send=dp.prototype.send;G=dp.prototype;G.Ln=function(){var a=this.element;2==a.readyState?(this.$h=a.status>>0,this.dispatchEvent(nc),this.dispatchEvent('httpStatus')):4==a.readyState&&this.dispatchEvent(Ab)};G.rj=F('cf');G.mo=function(a){this.cf!=a&&(this.cf=a,this.dispatchEvent(new K('contentTypeChanged')))};
G.qj=F('Xh');G.lo=function(a){this.Xh!=a&&(this.Xh=a,this.dispatchEvent(new K('contentDataChanged')))};G.Oj=function(){null==this.pd&&(this.pd=[]);return this.pd};G.Ho=function(a){this.pd!=a&&(this.pd=a,this.dispatchEvent(new K('headersChanged')))};G.pk=F('df');G.bp=function(a){this.df!=a&&(this.df=a,this.dispatchEvent(new K('methodChanged')))};
G.Rk=function(){var a=this.element;if(!this.uc){a=a.getAllResponseHeaders();this.uc=a.split('\n');var b=this.uc.length>>0;for(a=0;a<b;a++){var c=O(this.uc[a]);var d=c.indexOf(':')>>0;var f=c.substring(0,d);d=c.substring(d+2);this.uc[a]=new Bo(f,d)}}return this.uc};G.Sk=F('gq');G.il=F('$h');G.jl=function(){return this.element.statusText};G.ul=F('ff');G.Ip=function(a){this.ff!=a&&(this.ff=a,this.dispatchEvent(new K('urlChanged')))};G.ml=F('ef');G.Dp=function(a){this.ef!=a&&(this.ef=a,this.dispatchEvent(new K('timeoutChanged')))};
G.bb=F('Yh');G.tb=function(a){this.Yh!=a&&(this.Yh=a,this.dispatchEvent(new K(qc)))};G.v=function(){if(null==this.va){var a=this.beads,b;for(b in a)this.I(a[b])}this.dispatchEvent(new K(ob))};G.Pp=function(a){this.element.withCredentials=a};G.ra=function(){return this.element.responseText};G.ck=function(){if(!this.Zh)try{this.Zh=JSON.parse(this.data)}catch(a){throw Error('JSON is not valid: '+this.data);}return this.Zh};
Object.defineProperties(dp.prototype,{contentType:{get:dp.prototype.rj,set:dp.prototype.mo},contentData:{get:dp.prototype.qj,set:dp.prototype.lo},headers:{get:dp.prototype.Oj,set:dp.prototype.Ho},method:{get:dp.prototype.pk,set:dp.prototype.bp},responseHeaders:{get:dp.prototype.Rk},responseURL:{get:dp.prototype.Sk},status:{get:dp.prototype.il},statusText:{get:dp.prototype.jl},url:{get:dp.prototype.ul,set:dp.prototype.Ip},timeout:{get:dp.prototype.ml,set:dp.prototype.Dp},id:{get:dp.prototype.bb,set:dp.prototype.tb},
strand:{set:dp.prototype.v},withCredentials:{set:dp.prototype.Pp},data:{get:dp.prototype.ra},json:{get:dp.prototype.ck}});dp.prototype.i={names:[{name:'HTTPService',j:Pf,kind:q}],s:[Nj,Jj]};
dp.prototype.h=function(){return{o:function(){return{beads:{type:e,u:function(a,b){return void 0!==b?a.beads=b:a.beads}}}},l:function(){return{contentType:{type:n,access:y,g:Pf},contentData:{type:m,access:y,g:Pf},headers:{type:e,access:y,g:Pf},method:{type:n,access:y,g:Pf},responseHeaders:{type:e,access:w,g:Pf},responseURL:{type:n,access:w,g:Pf},status:{type:u,access:w,g:Pf},statusText:{type:n,access:w,g:Pf},url:{type:n,access:y,g:Pf},timeout:{type:k,access:y,g:Pf},id:{type:n,access:y,g:Pf},strand:{type:ce,
access:C,g:Pf},withCredentials:{type:h,access:C,g:Pf},data:{type:n,access:w,g:Pf},json:{type:m,access:w,g:Pf}}},methods:function(){return{HTTPService:{type:'',g:Pf},send:{type:B,g:Pf}}}}};dp.prototype.h.m=10;function ep(a,b){J.call(this);this.delay=a;this.Ib='undefined'!==typeof b?b:0}I(ep,J);H(zg,ep);H('org.apache.royale.utils.Timer.TIMER','timer');ep.prototype.Ib=0;ep.prototype.repeatCount=ep.prototype.Ib;ep.prototype.On=function(){return-1!=this.Gb};ep.prototype.running=ep.prototype.On;ep.prototype.gf=0;ep.prototype.Gb=-1;ep.prototype.reset=function(){this.stop();this.gf=0};ep.prototype.reset=ep.prototype.reset;ep.prototype.stop=function(){clearInterval(this.Gb);this.Gb=-1};ep.prototype.stop=ep.prototype.stop;
ep.prototype.start=function(){-1==this.Gb&&(this.Gb=setInterval(P(this.Kn,this,'timerHandler'),this.delay)>>0)};ep.prototype.start=ep.prototype.start;ep.prototype.Kn=function(){-1!=this.Gb&&(this.gf++,0<this.Ib&&this.currentCount>=this.Ib&&this.stop(),this.dispatchEvent(new K('timer')))};ep.prototype.vj=F('gf');Object.defineProperties(ep.prototype,{currentCount:{get:ep.prototype.vj}});ep.prototype.i={names:[{name:'Timer',j:zg,kind:q}]};
ep.prototype.h=function(){return{o:function(){return{delay:{type:k,u:function(a,b){return void 0!==b?a.delay=b:a.delay}},repeatCount:{type:u,u:function(a,b){return void 0!==b?a.Ib=b:a.Ib}}}},l:function(){return{currentCount:{type:u,access:w,g:zg}}},methods:function(){return{Timer:{type:'',g:zg,parameters:function(){return[{index:1,type:k,optional:!1},{index:2,type:u,optional:!0}]}},running:{type:h,g:zg},reset:{type:B,g:zg},stop:{type:B,g:zg},start:{type:B,g:zg}}}}};ep.prototype.h.m=10;function fp(){}H(Se,fp);H('org.apache.royale.events.utils.MouseEventConverter.convert',function(a){return new X(a.type,a.bubbles,a.cancelable)});fp.prototype.i={names:[{name:'MouseEventConverter',j:Se,kind:q}]};fp.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{'|convert':{type:Oe,g:Se,parameters:function(){return[{index:1,type:m,optional:!1}]}}}}}};fp.prototype.h.m=10;function X(a,b,c,d,f,g,l,x,A,N,Q,za,fb,Yb){d='undefined'!==typeof d?d:NaN;f='undefined'!==typeof f?f:NaN;g='undefined'!==typeof g?g:null;l='undefined'!==typeof l?l:!1;x='undefined'!==typeof x?x:!1;A='undefined'!==typeof A?A:!1;N='undefined'!==typeof N?N:!1;Q='undefined'!==typeof Q?Q:0;za='undefined'!==typeof za?za:!1;fb='undefined'!==typeof fb?fb:!1;Yb='undefined'!==typeof Yb?Yb:0;K.call(this,a,'undefined'!==typeof b?b:!1,'undefined'!==typeof c?c:!1);this.localX=d;this.localY=f;this.relatedObject=
g;this.ctrlKey=l;this.altKey=x;this.shiftKey=A;this.buttonDown=N;this.delta=Q;this.commandKey=za;this.controlKey=fb;this.Wc=Yb}var gp;I(X,K);H(Oe,X);H('org.apache.royale.events.MouseEvent.CLICK',zb);H('org.apache.royale.events.MouseEvent.DOUBLE_CLICK','dblclick');H('org.apache.royale.events.MouseEvent.WHEEL','wheel');X.prototype.yb=function(a){this.T=a;this.nativeEvent=a.za();this.nd=this.qc=-1};X.prototype.wrapEvent=X.prototype.yb;G=X.prototype;G.nd=-1;G.qc=-1;G.wh=0;G.xh=0;G.yh=0;G.Wc=0;
X.prototype.clickCount=X.prototype.Wc;X.prototype.preventDefault=function(){this.T?this.T.preventDefault():(X.w.preventDefault.apply(this),this.vh=!0)};X.prototype.preventDefault=X.prototype.preventDefault;var hp=[];function ip(a,b){return jp(a,!1,!1,{view:b.view,detail:b.detail,screenX:b.screenX,screenY:b.screenY,clientX:b.clientX,clientY:b.clientY,ctrlKey:b.ctrlKey,altKey:b.altKey,shiftKey:b.shiftKey,metaKey:b.metaKey,button:b.button,relatedTarget:b.relatedTarget})}
X.prototype.P=function(){return new X(this.type,this.bubbles,this.cancelable,this.localX,this.localY,this.relatedObject,this.ctrlKey,this.altKey,this.shiftKey,this.buttonDown,this.delta)};X.prototype.cloneEvent=X.prototype.P;X.prototype.stopImmediatePropagation=function(){this.T&&(this.T.stopPropagation(),this.nativeEvent.stopImmediatePropagation())};X.prototype.stopImmediatePropagation=X.prototype.stopImmediatePropagation;X.prototype.stopPropagation=function(){this.T&&this.T.stopPropagation()};
X.prototype.stopPropagation=X.prototype.stopPropagation;function kp(){Rj.MouseEvent=fp;gp=typeof window.MouseEvent==gc;return!0}H('org.apache.royale.events.MouseEvent.setupConverter',kp);
function jp(a,b,c,d){b='undefined'!==typeof b?b:!1;c='undefined'!==typeof c?c:!1;d='undefined'!==typeof d?d:null;d||(d={});if(gp){d.bubbles=b;d.cancelable=c;var f=new MouseEvent(a,d)}else f=document.createEvent('MouseEvent'),f.initMouseEvent(a,b,c,d.view,d.detail,d.screenX,d.screenY,d.clientX,d.clientY,d.ctrlKey,d.altKey,d.shiftKey,d.metaKey,d.button,d.relatedTarget);return f}H('org.apache.royale.events.MouseEvent.createMouseEvent',jp);G=X.prototype;G.Qd=function(){return-1<this.button&&3>this.button};
G.nf=function(a){this.qc=(a?0:9)>>0};G.Pd=function(){return-1<this.qc?this.qc:this.nativeEvent.button>>0};G.fo=E('qc');G.Rd=function(){return-1<this.nd?this.nd:this.nativeEvent.buttons>>0};G.ho=E('nd');G.zj=function(){return(this.nativeEvent?this.nativeEvent.deltaY:this.wh)>>0};G.to=E('wh');G.Aj=function(){return(this.nativeEvent?this.nativeEvent.deltaX:this.xh)>>0};G.uo=E('xh');G.Bj=function(){return(this.nativeEvent?this.nativeEvent.deltaY:this.yh)>>0};G.vo=E('yh');
G.Aa=function(){return this.T?Uk(this.T.target):this.Ue};G.wb=E('Ue');G.Vd=function(){return this.T?Uk(this.T.currentTarget):this.Ue};G.ro=E('Ue');G.ll=F(Eh);G.Td=function(){return Number(this.T?this.T.clientX:this.Nm)};G.fe=F('clientX');G.Yo=E('Nm');G.Ud=function(){return Number(this.T?this.T.clientY:this.Om)};G.ge=F('clientY');G.Zo=E('Om');G.ne=function(){return this.T?Number(this.T.screenX):this.target?this.org_apache_royale_events_MouseEvent_stagePoint.x:this.localX};
G.oe=function(){return this.T?Number(this.T.screenY):this.target?this.org_apache_royale_events_MouseEvent_stagePoint.y:this.localY};G.wk=function(){this.zh||(this.zh=$o(new W(this.localX,this.localY),this.target));return this.zh};G.Xd=function(){return!(this.T?!this.T.defaultPrevented:!this.vh)};G.so=E('vh');
Object.defineProperties(X.prototype,{buttonDown:{get:X.prototype.Qd,set:X.prototype.nf},button:{get:X.prototype.Pd,set:X.prototype.fo},buttons:{get:X.prototype.Rd,set:X.prototype.ho},delta:{get:X.prototype.zj,set:X.prototype.to},deltaX:{get:X.prototype.Aj,set:X.prototype.uo},deltaY:{get:X.prototype.Bj,set:X.prototype.vo},target:{get:X.prototype.Aa,set:X.prototype.wb},currentTarget:{get:X.prototype.Vd,set:X.prototype.ro},targetBeforeBubbling:{get:X.prototype.ll},clientX:{get:X.prototype.Td},localX:{get:X.prototype.fe,
set:X.prototype.Yo},clientY:{get:X.prototype.Ud},localY:{get:X.prototype.ge,set:X.prototype.Zo},screenX:{get:X.prototype.ne},screenY:{get:X.prototype.oe},org_apache_royale_events_MouseEvent_stagePoint:{get:X.prototype.wk},defaultPrevented:{get:X.prototype.Xd,set:X.prototype.so}});
window.addEventListener(Lc,function(a){var b;var c=a.target.royale_wrapper;if(null!=c){var d=hp,f=d.indexOf(c)>>0;if(-1!=f){var g=d.slice(f+1);var l=g.length>>0;for(b=0;b<l;b++)c=ip('rollout',a),g[b].element.dispatchEvent(c);hp=d.slice(0,f+1)}else{var x=[c];c='parent'in c?c.parent:null;for(;c;)if(f=d.indexOf(c)>>0,-1==f){x.unshift(c);if(!('parent'in c))break;c=c.parent}else{g=d.slice(f+1);l=g.length>>0;for(b=0;b<l;b++)c=ip('rollout',a),g[b].element.dispatchEvent(c);d=d.slice(0,f+1);break}f=x.length>>
0;for(b=0;b<f;b++)c=ip('rollover',a),x[b].element.dispatchEvent(c);hp=d.concat(x)}}},!1);var lp=kp();X.prototype.i={names:[{name:'MouseEvent',j:Oe,kind:q}],s:[Qk,So]};
X.prototype.h=function(){return{o:function(){return{nativeEvent:{type:m,u:function(a,b){return void 0!==b?a.nativeEvent=b:a.nativeEvent}},relatedObject:{type:m,u:function(a,b){return void 0!==b?a.relatedObject=b:a.relatedObject}},ctrlKey:{type:h,u:function(a,b){return void 0!==b?a.ctrlKey=b:a.ctrlKey}},altKey:{type:h,u:function(a,b){return void 0!==b?a.altKey=b:a.altKey}},shiftKey:{type:h,u:function(a,b){return void 0!==b?a.shiftKey=b:a.shiftKey}},commandKey:{type:h,u:function(a,b){return void 0!==
b?a.commandKey=b:a.commandKey}},controlKey:{type:h,u:function(a,b){return void 0!==b?a.controlKey=b:a.controlKey}},clickCount:{type:u,u:function(a,b){return void 0!==b?a.Wc=b:a.Wc}},'|initialized':{type:h,u:function(a){return void 0!==a?lp=a:lp}}}},l:function(){return{buttonDown:{type:h,access:y,g:Oe},button:{type:u,access:y,g:Oe},buttons:{type:u,access:y,g:Oe},delta:{type:u,access:y,g:Oe},deltaX:{type:u,access:y,g:Oe},deltaY:{type:u,access:y,g:Oe},target:{type:m,access:y,g:Oe},currentTarget:{type:m,
access:y,g:Oe},targetBeforeBubbling:{type:m,access:w,g:Oe},clientX:{type:k,access:w,g:Oe},localX:{type:k,access:y,g:Oe},clientY:{type:k,access:w,g:Oe},localY:{type:k,access:y,g:Oe},screenX:{type:k,access:w,g:Oe},screenY:{type:k,access:w,g:Oe},defaultPrevented:{type:h,access:y,g:Oe}}},methods:function(){return{MouseEvent:{type:'',g:Oe,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:h,optional:!0},{index:3,type:h,optional:!0},{index:4,type:k,optional:!0},{index:5,type:k,optional:!0},
{index:6,type:m,optional:!0},{index:7,type:h,optional:!0},{index:8,type:h,optional:!0},{index:9,type:h,optional:!0},{index:10,type:h,optional:!0},{index:11,type:u,optional:!0},{index:12,type:h,optional:!0},{index:13,type:h,optional:!0},{index:14,type:u,optional:!0},{index:15,type:Ie,optional:!0}]}},wrapEvent:{type:B,g:Oe,parameters:function(){return[{index:1,type:ic,optional:!1}]}},preventDefault:{type:B,g:Oe},cloneEvent:{type:Je,g:Oe},stopImmediatePropagation:{type:B,g:Oe},stopPropagation:{type:B,
g:Oe},'|setupConverter':{type:h,g:Oe},'|createMouseEvent':{type:m,g:Oe,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:h,optional:!0},{index:3,type:h,optional:!0},{index:4,type:m,optional:!0}]}}}}}};X.prototype.h.m=10;function mp(){}H(ug,mp);function np(a,b){var c,d=0,f=new b[d++];if(M(f,Nj))op(a,null,f,b,d);else{var g;var l=b[d++]>>0;for(c=0;c<l;c++){var x=O(b[d++]);var A=b[d++];var N=b[d++];null==A?N=dm(a,null,N):0==A&&(N=np(a,N));x==t&&(g=N);if(x!=ac||f.document)if(x==p)g=N;else if(x==t)try{f.id=N}catch(Q){}else f[x]=N;else f.document=a}g&&(a[g]=f);M(f,Cl)&&f.F(a,g)}return f}H('org.apache.royale.utils.MXMLDataInterpreter.generateMXMLObject',np);
function dm(a,b,c){for(var d=[],f=c.length>>0,g=0;g<f;){var l=new c[g++];g=op(a,b,l,c,g);d.push(l)}return d}H('org.apache.royale.utils.MXMLDataInterpreter.generateMXMLArray',dm);
function op(a,b,c,d,f){var g,l=null;var x=d[f++]>>0;if(0<x&&'model'==d[0]){x--;var A=O(d[f++]);var N=d[f++];var Q=d[f++];null==N?Q=dm(a,b,Q):0==N&&(Q=np(a,Q));c[A]=Q;M(Q,Jj)&&M(c,Nj)&&c.I(Q)}var za=f+3*(x-1)>>0;0<x&&d[za]==nb?x--:za=-1;for(g=0;g<x;g++)if(A=O(d[f++]),N=d[f++],Q=d[f++],null==N?Q=dm(a,null,Q):0==N&&(Q=np(a,Q)),A==t&&(l=Q),A!=ac||c.document)if(A==p)l=Q;else if(A==t)try{c.id=Q}catch(Yb){}else c[A]=Q;else c.document=a;-1<za&&(A=O(d[f++]),N=d[f++],Q=d[f++],null==N?Q=dm(a,null,Q):0==N&&(Q=
np(a,Q)),c[A]=Q);x=d[f++]>>0;for(g=0;g<x;g++)A=O(d[f++]),N=d[f++],Q=d[f++],null==N?Q=dm(a,null,Q):0==N&&(Q=np(a,Q)),c.kq(A,Q);x=d[f++]>>0;for(g=0;g<x;g++)A=O(d[f++]),Q=d[f++],c.addEventListener(A,li(Q,a));l&&(a[l]=c);M(c,Cl)&&c.F(a,l);if((d=d[f++])&&M(c,xl)){c.Ra(a,d);var fb=!0}b&&M(c,jk)&&b.addElement(c,!M(b,Yk));d&&(fb||M(c,xl)||Ck(a,c,d));return f}function Ck(a,b,c){null!=c&&dm(a,b,c);M(b,Yk)&&b.Sb()}H('org.apache.royale.utils.MXMLDataInterpreter.generateMXMLInstances',Ck);
function Bk(a,b){var c;if(b){var d=0;var f=b[d++]>>0;var g=d+3*(f-1)>>0;0<f&&b[g]==nb?f--:g=-1;for(c=0;c<f;c++){var l=O(b[d++]);var x=b[d++];var A=b[d++];null==x?A=dm(a,null,A):0==x&&(A=np(a,A));l!=p&&(a[l]=A)}-1<g&&(l=O(b[d++]),x=b[d++],A=b[d++],null==x?A=dm(a,null,A):0==x&&(A=np(a,A)),a[l]=A);f=b[d++]>>0;for(c=0;c<f;c++)l=O(b[d++]),x=b[d++],A=b[d++],null==x?A=dm(a,null,A):0==x&&(A=np(a,A)),a[l]=A;f=b[d++]>>0;for(c=0;c<f;c++)l=O(b[d++]),A=b[d++],a.addEventListener(l,li(A,a))}}
H('org.apache.royale.utils.MXMLDataInterpreter.generateMXMLProperties',Bk);mp.prototype.i={names:[{name:'MXMLDataInterpreter',j:ug,kind:q}]};
mp.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{MXMLDataInterpreter:{type:'',g:ug},'|generateMXMLObject':{type:m,g:ug,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:e,optional:!1}]}},'|generateMXMLArray':{type:e,g:ug,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:Qd,optional:!1},{index:3,type:e,optional:!1}]}},'|generateMXMLInstances':{type:B,g:ug,parameters:function(){return[{index:1,type:m,
optional:!1},{index:2,type:Qd,optional:!1},{index:3,type:e,optional:!1}]}},'|generateMXMLProperties':{type:B,g:ug,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:e,optional:!1}]}}}}}};mp.prototype.h.m=10;function Y(){J.call(this)}I(Y,J);H(pe,Y);Y.prototype.wm=0;Y.prototype.ta=function(a){var b=a.Si,c=this.values;this.xm=a;null==c&&(c={});if(b){a=b.length>>0;for(var d=0;d<a;){var f=b[d++]>>0;0<f&&(d+=f);f=b[d++]>>0;for(var g=b[d+f],l,x=0;x<f;x++){var A=O(b[d++]);c[A]&&(l=c[A],g.prototype=l);c[A]=new g;c[A].__index__=this.wm++}d++}}this.values=c};Y.prototype.init=Y.prototype.ta;
Y.prototype.ba=function(a,b,c,d){c='undefined'!==typeof c?c:null;d='undefined'!==typeof d?d:null;for(var f=b.indexOf('-')>>0;-1<f;)b=b.substr(0,f)+b.charAt(f+1).toUpperCase()+b.substr(f+2),f=b.indexOf('-')>>0;if(M(a,fk)){if(null!=a.style){var g=a.style[b];if(g===rc)return pp(this,a,b,c,d);if(void 0!==g)return g}if(null!=a.id&&(g=this.values['#'+a.id],void 0!==g)){g=g[b];if(g===rc)return pp(this,a,b,c,d);if(void 0!==g)return g}f=a.className;var l;if(null!=f){var x=f.split(' '),A;for(A in x)f=x[A],
null!=c&&(g=f+':'+c,g=this.values['.'+g],void 0!==g&&(g=g[b],g===rc&&(l=pp(this,a,b,c,d)),void 0!==g&&(l=g))),g=this.values['.'+f],void 0!==g&&(g=g[b],g===rc&&(l=pp(this,a,b,c,d)),void 0!==g&&(l=g))}if(void 0!==l)return l}g=this.values['*'];if(void 0!==g&&(g=g[b],void 0!==g))return g;f=O(a.i.names[0].j);for(l=a;f!=m;){if(null!=c&&(g=f+':'+c,g=this.values[g],void 0!==g)){g=g[b];if(g===rc)return pp(this,a,b,c,d);if(void 0!==g)return g}g=this.values[f];if(void 0!==g){g=g[b];if(g===rc)return pp(this,
a,b,c,d);if(void 0!==g)return g}l=l.constructor.w;if(!l||!l.i)break;f=O(l.i.names[0].j)}if(void 0!==qp[b]&&M(a,jk)&&(a=a.parent))return this.ba(a,b,c,d);g=this.values.global;if(void 0!==g)return g[b]};Y.prototype.getValue=Y.prototype.ba;function pp(a,b,c,d,f){d='undefined'!==typeof d?d:null;f='undefined'!==typeof f?f:null;if(M(b,jk)){var g=b.parent;if(g)return b=a.ba(g,c,d,f),b===rc||void 0===b?pp(a,g,c,d,f):b}else return rc}
Y.prototype.Rn=function(a,b,c){for(a=b.indexOf('-')>>0;-1<a;)b=b.substr(0,a)+b.charAt(a+1).toUpperCase()+b.substr(a+2),a=b.indexOf('-')>>0;a=this.values[b];a!==c&&(this.values[b]=c,this.dispatchEvent(new bl(Lh,!1,!1,a,c)))};Y.prototype.setValue=Y.prototype.Rn;Y.prototype.Na=function(a,b,c,d){return(a=this.ba(a,b,'undefined'!==typeof c?c:null,'undefined'!==typeof d?d:null))?new a:null};Y.prototype.newInstance=Y.prototype.Na;
Y.prototype.Kd=function(a){var b=this.values.global;b=b[a];var c=null;typeof b==gc&&(c=b);c&&(b[a]=new c,(a=b[a])&&a.F(this.xm));return b};Y.prototype.getInstance=Y.prototype.Kd;Y.prototype.Ed=function(a){return Fn(a)};Y.prototype.convertColor=Y.prototype.Ed;
Y.prototype.qd=function(a){var b={};a=a.split(';');for(var c in a){var d=Ol(a[c],':');if(!(2>d.length)){for(var f=O(d[0]),g=f.indexOf('-')>>0;-1!=g;)f=f.substr(0,g)+f.charAt(g+1).toUpperCase()+f.substr(g+2),g=f.indexOf('-')>>0;d=O(d[1]);'null'==d?b[f]=null:'true'==d?b[f]=!0:'false'==d?b[f]=!1:(g=Number(d),isNaN(g)?'#'==d.charAt(0)||0==d.indexOf('rgb')?b[f]=Fn(d):("'"==d.charAt(0)?d=d.substr(1,d.length-2):'"'==d.charAt(0)&&(d=d.substr(1,d.length-2)),b[f]=d):b[f]=g)}}return b};
Y.prototype.parseStyles=Y.prototype.qd;
Y.prototype.addRule=function(a,b){var c={};for(g in b){for(var d=b[g],f=g.indexOf('-')>>0;-1<f;){var g=g.substr(0,f)+g.charAt(f+1).toUpperCase()+g.substr(f+2);f=g.indexOf('-')>>0}c[g]=d}this.values[a]=c;this.Qe||(b=document.createElement('style'),document.head.appendChild(b),this.Qe=b.sheet);a+=' {';for(var l in this.values)b=this.values[l],typeof b!=gc&&(a+=l+': ',typeof b==Oc?b=this.colorStyles[l]?En(b>>>0):b.toString()+bh:l==lb&&0!=l.indexOf('url')&&(b='url('+b+')'),a+=b+';');this.Qe.insertRule(a+
'}',this.Qe.cssRules.length)};Y.prototype.addRule=Y.prototype.addRule;var qp={color:1,fontFamily:1,fontSize:1,fontStyle:1,textAlign:1},rp={backgroundColor:1,backgroundImage:1,color:1,fontFamily:1,fontWeight:1,fontSize:1,fontStyle:1},sp={background:1,backgroundColor:1,borderColor:1,color:1},up={constructor:1},vp={};
Y.prototype.Qb=function(a,b){var c=this.colorStyles,d=this.skipStyles,f=this.numericStyles,g=b;b&&b.styleList&&(g=b.styleList);for(var l in g)d[l]||(g=b[l],void 0!==g&&(typeof g==Oc?g=c[l]?En(g>>>0):f[l]?g.toString():g.toString()+bh:l==lb&&0!=g.indexOf('url')&&(g='url('+g+')'),a.element.style[l]=g))};Y.prototype.applyStyles=Y.prototype.Qb;
Y.prototype.Jd=function(a,b){b='undefined'!==typeof b?b:null;var c=new Tm;if(!this.H){this.H=getComputedStyle(a.element,b);var d=!0}c.style=O(this.H['border-style']);c.width=Zj(O(this.H['border-width']));c.color=Fn(this.H['border-color']);d&&(this.H=null);return c};Y.prototype.getBorderStyles=Y.prototype.Jd;
Y.prototype.Ub=function(a,b){var c=new Lo;if(!this.H){this.H=getComputedStyle(a.element,'undefined'!==typeof b?b:null);var d=!0}c.left=Zj(O(this.H['border-left-width']));c.right=Zj(O(this.H['border-right-width']));c.top=Zj(O(this.H['border-top-width']));c.bottom=Zj(O(this.H['border-bottom-width']));d&&(this.H=null);return c};Y.prototype.getBorderMetrics=Y.prototype.Ub;
Y.prototype.Vb=function(a,b,c,d){b=new Lo;if(!this.H){this.H=getComputedStyle(a.element,'undefined'!==typeof d?d:null);var f=!0}b.left=Zj(O(this.H['padding-left']));b.right=Zj(O(this.H['padding-right']));b.top=Zj(O(this.H['padding-top']));b.bottom=Zj(O(this.H['padding-bottom']));f&&(this.H=null);return b};Y.prototype.getPaddingMetrics=Y.prototype.Vb;
Y.prototype.Hd=function(a,b,c,d){d='undefined'!==typeof d?d:null;if(!this.H){this.H=getComputedStyle(a.element,d);var f=!0}b=this.Ub(a);a=this.Vb(a);b.left+=a.left;b.top+=a.top;b.right+=a.right;b.bottom+=a.bottom;f&&(this.H=null);return b};Y.prototype.getBorderAndPaddingMetrics=Y.prototype.Hd;
Y.prototype.$c=function(a,b,c,d){b=new Mo;if(!this.H){this.H=getComputedStyle(a.element,'undefined'!==typeof d?d:null);var f=!0}a=this.H['margin-left'];d=this.H['margin-right'];c=this.H['margin-top'];var g=this.H['margin-bottom'];b.left=a==kb?0:Zj(a);b.right=c==kb?0:Zj(c);b.top=d==kb?0:Zj(d);b.bottom=g==kb?0:Zj(g);f&&(this.H=null);b.auto=a==kb&&c==kb;return b};Y.prototype.getMargins=Y.prototype.$c;
Y.prototype.Nd=function(a,b,c,d){b=new Lo;a=getComputedStyle(a.element,'undefined'!==typeof d?d:null);b.left=Zj(a.left);b.right=Zj(a.right);b.top=Zj(a.top);b.bottom=Zj(a.bottom);return b};Y.prototype.getPositions=Y.prototype.Nd;Y.prototype.Id=function(a,b,c,d){b='undefined'!==typeof b?b:NaN;c='undefined'!==typeof c?c:NaN;d='undefined'!==typeof d?d:null;this.H=getComputedStyle(a.element,d);var f=new An;f.border=this.Ub(a,d);f.padding=this.Vb(a,b,c,d);f.margins=this.$c(a,b,c,d);this.H=null;return f};
Y.prototype.getBorderPaddingAndMargins=Y.prototype.Id;Y.prototype.Dk=function(){return rp};Y.prototype.nj=function(){return sp};Y.prototype.dl=function(){return up};Y.prototype.tk=function(){return vp};Object.defineProperties(Y.prototype,{perInstanceStyles:{get:Y.prototype.Dk},colorStyles:{get:Y.prototype.nj},skipStyles:{get:Y.prototype.dl},numericStyles:{get:Y.prototype.tk}});Y.prototype.i={names:[{name:'SimpleCSSValuesImpl',j:pe,kind:q}],s:[No,zo]};
Y.prototype.h=function(){return{o:function(){return{values:{type:m,u:function(a,b){return void 0!==b?a.values=b:a.values}}}},l:function(){return{}},methods:function(){return{SimpleCSSValuesImpl:{type:'',g:pe},init:{type:B,g:pe,parameters:function(){return[{index:1,type:m,optional:!1}]}},getValue:{type:'*',g:pe,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:n,optional:!1},{index:3,type:n,optional:!0},{index:4,type:m,optional:!0}]}},setValue:{type:B,g:pe,parameters:function(){return[{index:1,
type:m,optional:!1},{index:2,type:n,optional:!1},{index:3,type:'*',optional:!1}]}},newInstance:{type:'*',g:pe,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:n,optional:!1},{index:3,type:n,optional:!0},{index:4,type:m,optional:!0}]}},getInstance:{type:m,g:pe,parameters:function(){return[{index:1,type:n,optional:!1}]}},convertColor:{type:Jh,g:pe,parameters:function(){return[{index:1,type:m,optional:!1}]}},parseStyles:{type:m,g:pe,parameters:function(){return[{index:1,type:n,
optional:!1}]}},addRule:{type:B,g:pe,parameters:function(){return[{index:1,type:n,optional:!1},{index:2,type:m,optional:!1}]}},applyStyles:{type:B,g:pe,parameters:function(){return[{index:1,type:ie,optional:!1},{index:2,type:m,optional:!1}]}},getBorderStyles:{type:Ae,g:pe,parameters:function(){return[{index:1,type:ie,optional:!1},{index:2,type:n,optional:!0}]}},getBorderMetrics:{type:xe,g:pe,parameters:function(){return[{index:1,type:ie,optional:!1},{index:2,type:n,optional:!0}]}},getPaddingMetrics:{type:xe,
g:pe,parameters:function(){return[{index:1,type:ie,optional:!1},{index:2,type:k,optional:!0},{index:3,type:k,optional:!0},{index:4,type:n,optional:!0}]}},getBorderAndPaddingMetrics:{type:xe,g:pe,parameters:function(){return[{index:1,type:ie,optional:!1},{index:2,type:k,optional:!0},{index:3,type:k,optional:!0},{index:4,type:n,optional:!0}]}},getMargins:{type:ze,g:pe,parameters:function(){return[{index:1,type:ie,optional:!1},{index:2,type:k,optional:!0},{index:3,type:k,optional:!0},{index:4,type:n,
optional:!0}]}},getPositions:{type:xe,g:pe,parameters:function(){return[{index:1,type:ie,optional:!1},{index:2,type:k,optional:!0},{index:3,type:k,optional:!0},{index:4,type:n,optional:!0}]}},getBorderPaddingAndMargins:{type:ye,g:pe,parameters:function(){return[{index:1,type:ie,optional:!1},{index:2,type:k,optional:!0},{index:3,type:k,optional:!0},{index:4,type:n,optional:!0}]}}}}}};Y.prototype.h.m=10;function Wl(){un.call(this);this.D+=' AttributeRenderer'}I(Wl,un);H(Da,Wl);Wl.prototype.X=function(){var a="<span class='attributeCaption'>"+this.data.name+'</span>';a+="<span class='attributeValue'>"+this.data.value+'</span>';this.element.innerHTML=a};Object.defineProperties(Wl.prototype,{text:{get:un.prototype.ha,set:Wl.prototype.X}});Wl.prototype.i={names:[{name:Da,j:Da,kind:q}]};
Wl.prototype.h=function(){return{o:function(){return{}},l:function(){return{text:{type:n,access:C,g:Da}}},methods:function(){return{AttributeRenderer:{type:'',g:Da}}}}};Wl.prototype.h.m=9;function wp(){J.call(this)}I(wp,sl);H(xa,wp);H('ASDocClassMembers.key','bindable:object;deprecated:object;description:string;details:object;namespace:string;params:object;qname:string;return:string;tags:object;type:string');wp.prototype.og=null;wp.prototype.Bk=F('og');wp.prototype.ip=E('og');Object.defineProperties(wp.prototype,{params:{get:wp.prototype.Bk,set:wp.prototype.ip}});wp.prototype.i={names:[{name:xa,j:xa,kind:q}]};
wp.prototype.h=function(){return{o:function(){return{}},l:function(){return{params:{type:e,access:y,g:xa}}},methods:function(){return{}}}};wp.prototype.h.m=9;wp.prototype.h.xb=Object.keys(wp);function Z(){J.call(this);this.element=document.getElementsByTagName('body')[0];this.element.className='Application'}I(Z,Yj);H($c,Z);Z.prototype.R=function(a){for(var b=a[0]>>0,c=a.length>>0,d=1;d<c;d+=3)if('initialView'==a[d]){var f=a.splice(d,3);a.splice(3*(b-1)+1>>0,0,f[0],f[1],f[2])}Bk(this,a)};Z.prototype.generateMXMLAttributes=Z.prototype.R;Z.prototype.addElement=function(a){this.element.appendChild(a.element);a.C()};Z.prototype.addElement=Z.prototype.addElement;
Z.prototype.ga=function(a,b){var c=this.na();b>=c.length?this.addElement(a):(this.element.insertBefore(a.positioner,c[b]),a.C())};Z.prototype.addElementAt=Z.prototype.ga;Z.prototype.U=function(a){return this.na()[a].royale_wrapper};Z.prototype.getElementAt=Z.prototype.U;Z.prototype.ma=function(a){for(var b=this.na(),c=b.length>>0,d=0;d<c;d++)if(b[d]==a.element)return d;return-1};Z.prototype.getElementIndex=Z.prototype.ma;Z.prototype.L=function(a){this.element.removeChild(a.element)};
Z.prototype.removeElement=Z.prototype.L;Z.prototype.na=function(){return this.element.childNodes};Z.prototype.start=function(){M(this.model,Jj)&&this.I(this.model);M(this.controller,Jj)&&this.I(this.controller);for(var a in this.beads)this.I(this.beads[a]);this.dispatchEvent(new K(ob));this.dispatchEvent(new K('preinitialize',!1,!0))?this.initialize():(this.Of=new ep(34,0),this.Of.addEventListener('timer',P(this.Ml,this,'handleStartupTimer')),this.Of.start())};Z.prototype.start=Z.prototype.start;
G=Z.prototype;G.Ml=function(){this.dispatchEvent(new K('preinitialize',!1,!0))&&(this.Of.stop(),this.initialize())};
G.initialize=function(){Ck(this,null,this.MXMLDescriptor);this.dispatchEvent('initialize');if(this.initialView){this.initialView.applicationModel=this.model;this.addElement(this.initialView);var a=this.initialView;isNaN(a.percentWidth)&&isNaN(a.percentHeight)||(this.element.style.height=window.innerHeight.toString()+bh,this.element.style.width=window.innerWidth.toString()+bh,this.initialView.dispatchEvent(new K(vh)));this.dispatchEvent(new K(Nh))}this.dispatchEvent(new K('applicationComplete'))};
G.Kp=function(a){Wj.valuesImpl=a;Wj.valuesImpl.ta(this)};G.Wj=F('pm');G.Oo=E('pm');G.ac=F('qm');G.Bc=E('qm');G.sj=F('om');G.no=E('om');G.je=function(){return this};G.S=Qh(null);G.Ab=function(){return this.na().length>>0};G.cc=function(){return this};
Object.defineProperties(Z.prototype,{valuesImpl:{set:Z.prototype.Kp},initialView:{get:Z.prototype.Wj,set:Z.prototype.Oo},model:{get:Z.prototype.ac,set:Z.prototype.Bc},controller:{get:Z.prototype.sj,set:Z.prototype.no},popUpParent:{get:Z.prototype.je},MXMLDescriptor:{get:Z.prototype.S},numElements:{get:Z.prototype.Ab},popUpHost:{get:Z.prototype.cc}});Z.prototype.i={names:[{name:'Application',j:$c,kind:q}],s:[Nj,ok,Ij,ak,yl,zl,ik]};
Z.prototype.h=function(){return{o:function(){return{beads:{type:e,u:function(a,b){return void 0!==b?a.beads=b:a.beads}}}},l:function(){return{valuesImpl:{type:je,access:C,g:$c},initialView:{type:kd,access:y,g:$c},model:{type:m,access:y,g:$c,W:function(){return[{name:Ea,O:[{key:'',value:cb}]}]}},controller:{type:m,access:y,g:$c,W:function(){return[{name:Ea,O:[{key:'',value:cb}]}]}},popUpParent:{type:Td,access:w,g:$c},MXMLDescriptor:{type:e,access:w,g:$c},numElements:{type:u,access:w,g:$c},popUpHost:{type:Sd,
access:w,g:$c}}},methods:function(){return{Application:{type:'',g:$c},generateMXMLAttributes:{type:B,g:$c,parameters:function(){return[{index:1,type:e,optional:!1}]}},addElement:{type:B,g:$c,parameters:function(){return[{index:1,type:td,optional:!1},{index:2,type:h,optional:!0}]}},addElementAt:{type:B,g:$c,parameters:function(){return[{index:1,type:td,optional:!1},{index:2,type:u,optional:!1},{index:3,type:h,optional:!0}]}},getElementAt:{type:td,g:$c,parameters:function(){return[{index:1,type:u,optional:!1}]}},
getElementIndex:{type:u,g:$c,parameters:function(){return[{index:1,type:td,optional:!1}]}},removeElement:{type:B,g:$c,parameters:function(){return[{index:1,type:td,optional:!1},{index:2,type:h,optional:!0}]}},start:{type:B,g:$c}}}}};Z.prototype.h.m=10;function xp(){this.createFunction=P(this.Ri,this,'createFromMXMLContent');J.call(this)}I(xp,ck);H(me,xp);xp.prototype.Yc=function(a){return this.createFunction(a)};xp.prototype.createItemRenderer=xp.prototype.Yc;xp.prototype.Ri=function(a){return dm(this.um,a,this.MXMLDescriptor)[0]};xp.prototype.Xc=function(a){var b=this.itemRendererFactory.Na();b.itemRendererParent=a;return b};xp.prototype.createFromClass=xp.prototype.Xc;xp.prototype.F=E('um');xp.prototype.setDocument=xp.prototype.F;
xp.prototype.v=function(a){this.hd=a;M(this.hd,el)&&this.hd.itemRenderer?(this.itemRendererFactory=this.hd.itemRenderer,this.createFunction=P(this.Xc,this,Ib)):(a=Wj.valuesImpl.ba(this.hd,'iItemRenderer'))?(this.itemRendererFactory=new Vl(a),this.createFunction=P(this.Xc,this,Ib)):this.MXMLDescriptor||(this.createFunction=P(this.Xc,this,Ib))};xp.prototype.S=Qh(null);Object.defineProperties(xp.prototype,{strand:{set:xp.prototype.v},MXMLDescriptor:{get:xp.prototype.S}});
xp.prototype.i={names:[{name:'ItemRendererClassFactory',j:me,kind:q}],s:[jm,Cl,Jj]};
xp.prototype.h=function(){return{o:function(){return{mxmlContent:{type:e,u:function(a,b){return void 0!==b?a.mxmlContent=b:a.mxmlContent}},createFunction:{type:Pa,u:function(a,b){return void 0!==b?a.createFunction=b:a.createFunction}},itemRendererFactory:{type:Ad,u:function(a,b){return void 0!==b?a.itemRendererFactory=b:a.itemRendererFactory}}}},l:function(){return{strand:{type:ce,access:C,g:me},MXMLDescriptor:{type:e,access:w,g:me}}},methods:function(){return{ItemRendererClassFactory:{type:'',g:me},
createItemRenderer:{type:Ed,g:me,parameters:function(){return[{index:1,type:Gd,optional:!1}]}},createFromClass:{type:Ed,g:me,parameters:function(){return[{index:1,type:Gd,optional:!1}]}},setDocument:{type:B,g:me,parameters:function(){return[{index:1,type:m,optional:!1},{index:2,type:n,optional:!0}]}}}}}};xp.prototype.h.m=10;function ap(){R.call(this);this.D='DocTagline Tagline'}I(ap,R);H(ig,ap);ap.prototype.createElement=function(){ap.w.createElement.apply(this);this.element.innerHTML='Designed for the future.  Code once.  Run everywhere.';return this.element};ap.prototype.i={names:[{name:'DocTagline',j:ig,kind:q}]};ap.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{DocTagline:{type:'',g:ig}}}}};ap.prototype.h.m=10;function yp(){throw Error('PointUtils should not be instantiated.');}H(vg,yp);H('org.apache.royale.utils.PointUtils.globalToLocal',function(a,b){var c=a.x;a=a.y;var d=b.element;if(P(d.getBoundingClientRect,d,hc))b=d.getBoundingClientRect(),c=c-b.left-window.pageXOffset,a=a-b.top-window.pageYOffset;else{do c-=d.offsetLeft,a-=d.offsetTop,d=void 0!==b.parent?(b=b.parent)?b.element:null:null;while(d)}return new W(c,a)});
function $o(a,b){var c=a.x;a=a.y;b=b.element;if(P(b.getBoundingClientRect,b,hc))b=b.getBoundingClientRect(),c=Number(b.left+c+window.pageXOffset),a=Number(b.top+a+window.pageYOffset);else{do c+=b.offsetLeft,a+=b.offsetTop,b=b.offsetParent;while(b)}return new W(c,a)}H('org.apache.royale.utils.PointUtils.localToGlobal',$o);yp.prototype.i={names:[{name:'PointUtils',j:vg,kind:q}]};
yp.prototype.h=function(){return{o:function(){return{}},l:function(){return{}},methods:function(){return{PointUtils:{type:'',g:vg},'|globalToLocal':{type:Te,g:vg,parameters:function(){return[{index:1,type:Te,optional:!1},{index:2,type:m,optional:!1}]}},'|localToGlobal':{type:Te,g:vg,parameters:function(){return[{index:1,type:Te,optional:!1},{index:2,type:m,optional:!1}]}}}}}};yp.prototype.h.m=10;function bp(){R.call(this)}I(bp,R);H(ef,bp);bp.prototype.xi=function(){this.fq||this.dispatchEvent(new K(ub))};bp.prototype.textChangeHandler=bp.prototype.xi;G=bp.prototype;G.createElement=function(){tk(this,'input');this.element.setAttribute('type',z);this.D='TextInput';rj(this.element,'input',P(this.xi,this,'textChangeHandler'));return this.element};G.ha=function(){return this.element.value};G.X=function(a){this.element.value=a;this.dispatchEvent(new K(Fh))};G.de=function(){return this.element.value};
G.yf=function(a){this.element.value=a;this.dispatchEvent(new K(Fh))};Object.defineProperties(bp.prototype,{text:{get:bp.prototype.ha,set:bp.prototype.X},html:{get:bp.prototype.de,set:bp.prototype.yf}});bp.prototype.i={names:[{name:'TextInput',j:ef,kind:q}]};
bp.prototype.h=function(){return{o:function(){return{}},l:function(){return{text:{type:n,access:y,g:ef,W:function(){return[{name:Ea,O:[{key:'',value:ub}]}]}},html:{type:n,access:y,g:ef,W:function(){return[{name:Ea,O:[{key:'',value:ub}]}]}}}},methods:function(){return{TextInput:{type:'',g:ef},textChangeHandler:{type:B,g:ef,parameters:function(){return[{index:1,type:Fe,optional:!1}]}}}}}};bp.prototype.h.m=10;H('org.apache.royale.reflection.nativejs.AS3Boolean',function(){var a={};a.classRef=Boolean;a.name=h;a.NATIVE_TYPE=!0;a.ROYALE_CLASS_INFO={names:[{name:h,j:h,kind:q}]};a.ROYALE_REFLECTION_INFO=function(){return{methods:function(){return{Boolean:{parameters:function(){return[{index:1,optional:!0,type:'*'}]},type:'',declaredBy:h}}}}};return a});function Zo(){un.call(this);this.D+=aa}I(Zo,un);H(Ga,Zo);Zo.prototype.X=function(a){var b=a;var c=b.lastIndexOf('.')>>0;if(-1!=c){var d=b.substr(0,c);b=b.substr(c+1);b=d+'/'+b}else b='/'+a;this.element.innerHTML=oa+b+ma+a+'</a>'};Object.defineProperties(Zo.prototype,{text:{get:un.prototype.ha,set:Zo.prototype.X}});Zo.prototype.i={names:[{name:Ga,j:Ga,kind:q}]};
Zo.prototype.h=function(){return{o:function(){return{}},l:function(){return{text:{type:n,access:C,g:Ga}}},methods:function(){return{ClassPickerHashAnchorStringItemRenderer:{type:'',g:Ga}}}}};Zo.prototype.h.m=9;function zp(){Z.call(this);this.R([7,'model',!1,[Kn,1,p,!0,fa,0,0,null],'width',!0,900,'height',!0,500,'valuesImpl',!1,[Y,1,p,!0,ea,0,0,null],'initialView',!1,[Uo,1,t,!0,'mainView',0,0,null],'controller',!1,[wo,1,p,!0,ha,0,0,null],nb,null,[dp,1,t,!0,'service',0,0,null,uo,1,t,!0,'reviver',0,0,null,Pk,1,p,!0,ia,0,0,null],0,0])}I(zp,Z);H(qa,zp);
Object.defineProperties(zp.prototype,{mainView:{get:F('bh'),set:function(a){a!=this.bh&&(this.bh=a,this.dispatchEvent(T(this,'mainView',null,a)))}},service:{get:F('ti'),set:function(a){a!=this.ti&&(this.ti=a,this.dispatchEvent(T(this,'service',null,a)))}},reviver:{get:F('li'),set:function(a){a!=this.li&&(this.li=a,this.dispatchEvent(T(this,'reviver',null,a)))}}});G=zp.prototype;G.i={names:[{name:qa,j:qa,kind:q}]};
G.h=function(){return{o:function(){return{}},l:function(){return{mainView:{type:Aa,access:y,g:qa},service:{type:Pf,access:y,g:qa},reviver:{type:Rf,access:y,g:qa}}},methods:function(){return{ASDoc:{type:'',g:qa}}}}};G.h.m=9;G.info=function(){return{remoteClassAliases:{ASDocClassTags:ya,ASDocClassMembers:xa,ASDocClassEvents:va,ASDocClassAccessor:sa,ASDocClass:ra},compiledLocales:['en_US']}};
G.Si=[0,1,'.Application *',function(){this.MozBoxSizing=this.boxSizing=this.WebkitBoxSizing=rb},0,1,'.royale *',function(){this.MozBoxSizing=this.boxSizing=this.WebkitBoxSizing=rb},0,1,'.royale *:before',function(){this.MozBoxSizing=this.boxSizing=this.WebkitBoxSizing=rb},0,1,'.royale *:after',function(){this.MozBoxSizing=this.boxSizing=this.WebkitBoxSizing=rb},0,1,$c,function(){this.margin=this.padding=0},0,1,We,function(){this.iBeadView=nl;this.iViewport=Sl;this.iBeadLayout=ul;this.alignItems='flex-start';
this.iViewportModel=qo},0,1,Xe,function(){this.iBeadView=Tn;this.iItemRenderer=un;this.iViewport=Sl;this.verticalAlign='bottom';this.borderColor=2236962;this.iBeadLayout=Kk;this.iBeadModel=jo;this.borderWidth=1;this.iItemRendererClassFactory=xp;this.iViewportModel=qo;this.iDataProviderItemRendererMapper=Ao;this.borderStyle=wh},0,1,Hf,function(){this.iBeadController=Cn},0,1,Ye,function(){this.iBeadView=ll;this.borderWidth=1},0,1,$e,function(){this.iBeadView=Wn;this.iItemRenderer=un;this.iViewport=
yn;this.border=[1,wh,2236962];this.iBeadLayout=Kk;this.iBeadModel=Tl;this.iBeadController=Hl;this.iItemRendererClassFactory=xp;this.iViewportModel=qo;this.iDataProviderItemRendererMapper=Ao},0,1,cf,function(){this.backgroundColor=16777215;this.position=db},0,1,Kf,function(){this.cursor='pointer';this.paddingBottom=4;this.flexGrow=1;this.fontFamily=mh;this.flexShrink=0;this.iBeadController=Cn;this.fontSize=12;this.paddingTop=4},0,1,ef,function(){this.border=[1,wh,8421504];this.padding=4;this.margin=
0;this.borderRadius=2},0,1,ue,function(){this.iBeadView=ll;this.iBeadLayout=ul},0,1,'global',function(){this.effectTimerInterval=10;this.iStatesImpl=am},0,1,'h1',function(){this.marginTop=0},0,1,ig,function(){this.top=60;this.color=16777215;this.right=this.fontSize=10;this.position=db},0,1,'.ResponsiveTableTileText',function(){this.marginTop=16;this.marginLeft=60},0,1,'.ResponsiveTableTileIcon',function(){this.fontSize=40;this['float']='left'},0,1,'.ResponsiveTableTileTitle',function(){this.color=
65535},0,1,'.ResponsiveTableTextContent',D(),0,1,'.big-buttons',D(),0,1,'.BigButtonContent',function(){this.color=16777215;this.textDecoration=Nc},0,1,'.red-button',function(){this.borderColor=this.backgroundColor=16711680},0,1,'.blue-button',function(){this.borderColor=this.backgroundColor=255},0,1,'.centerButton',function(){this.display='flex';this.justifyContent=tb},0,1,'.white-border-button',function(){this.borderColor=16777215;this.borderStyle=wh},0,1,'.intro',function(){this.fontFamily=['Verdana',
'Geneva',mh];this.width=40},0,1,hg,function(){this.backgroundImage='https://royale.apache.org/img/page-bg-1-1920x300.png';this.backgroundSize=this.width=100;this.backgroundRepeat='no-repeat';this.marginTop=0},0,1,kg,function(){this.display='inline';this.marginTop=0;this.height=40},0,1,'.SocialButton',function(){this.marginRight=20;this.color=rc;this.display='inline';this.lineHeight=70;this.fontSize=16},0,1,jg,function(){this.color=16777215;this.flexWrap='wrap';this.display=
'flex';this.paddingLeft=this.paddingRight=54;this.justifyContent='space-between'},0,1,lg,function(){this.verticalAlign='top';this.listStyle=Nc;this.display=vc;this.marginTop=this.marginBottom=0;this.height=40},0,1,ng,function(){this.marginRight=20;this.fontFamily=Ya;this.color=rc;this.display='inline';this.letterSpacing=1;this.fontSize=14;this.lineHeight=70;this.fontWeight=600},0,1,'.TopMenuButtonContent',function(){this.color=rc;this.textDecoration=Nc},0,1,'.orange-box',function(){this.backgroundColor=
16750899;this.paddingBottom=20;this.width=100;this.paddingTop=20},0,1,'.orange-box-text',function(){this.margin=[20,200]},0,1,'.orange-box-code',function(){this.backgroundColor=16763904;this.margin=[20,200];this.fontFamily=['Courier New','Courier',Kc];this.textAlign='left'},0,1,'.npm-title',function(){this.color=16777215;this.textAlign=tb},0,1,'.npm-command',function(){this.backgroundColor=0;this.margin=[20,300];this.color=16777215;this.textAlign=tb},0,1,'.apache',function(){this.fontFamily=Ya;this.color=
10486432;this.lineHeight=30;this.fontWeight=600},0,1,'.apacheroyale',function(){this.fontFamily=Ya;this.color=16401950;this.lineHeight=30;this.fontWeight=600},0,1,'.documentation',function(){this.fontFamily=Ya;this.color=0;this.lineHeight=30;this.fontWeight=600},0,1,'.development',function(){this.fontFamily=Ya;this.color=15976295;this.lineHeight=30;this.fontWeight=600},0,1,'.community',function(){this.fontFamily=Ya;this.color=2788138;this.lineHeight=30;this.fontWeight=600},0,1,'.footer-column',function(){this.flexGrow=
1},0,1,'.footer-list',function(){this.listStyle=Nc;this.marginBottom=20;this.paddingLeft=0},0,1,'.footer-list_a',function(){this.color=4428739;this.textDecoration=Nc;this.lineHeight=26},0,1,'.aboutusdiv',function(){this.flexGrow=1;this.flexBasis=33;this.minWidth=150},0,1,'.aboutus',function(){this.fontFamily=Ya;this.color=0;this.lineHeight=30;this.fontWeight=600},0,1,'.aboutus_p',function(){this.paddingBottom=38},0,1,'.aboutus_a',function(){this.color=4428739;this.textDecoration=Nc},0,1,'.aboutus-logo',
function(){this.paddingRight=this.paddingBottom=14;this.width=100;this['float']='left'},0,1,'.aboutus-apache-logo',function(){this.paddingRight=this.paddingBottom=14;this.width=100;this['float']='right'},0,1,'.AnchorListContent',function(){this.textDecoration=Nc},0,1,'.logo',function(){this.width=190;this.marginBottom=5;this.marginTop=15;this.height=40},0,1,Ve,function(){this.fontFamily=mh;this.fontSize=12},0,1,Ze,function(){this.fontFamily=mh;this.fontSize=12},0,1,If,function(){this.fontFamily=mh;
this.fontSize=12},0,1,'.sectionLabel',function(){this.backgroundColor=16624509;this.paddingBottom=3;this.textAlign=tb;this.fontSize=16;this.paddingTop=3;this.fontWeight=qb},0,1,'.titleGroup',function(){this.marginTop=30;this.marginLeft=5},0,1,'.detailsPane',function(){this.paddingRight=10;this.paddingLeft=20},0,1,'.paneTitle',function(){this.backgroundColor=16624509;this.fontSize=24;this.paddingLeft=20;this.fontWeight=qb},0,1,'.paneList',function(){this.marginRight=20;this.borderStyle=wh;this.marginTop=
50;this.marginLeft=20},0,1,'.HashAnchorAnchor',function(){this.textDecoration=Nc},0,1,Qa,function(){this.paddingLeft=5},0,1,Va,function(){this.paddingRight=3},0,1,'.summary',function(){this.paddingTop=this.paddingBottom=3},0,1,'.detailCaption',function(){this.width=80;this.lineHeight=20;this.fontWeight=qb},0,1,'.title',function(){this.fontSize=20},0,1,'.attributeList',function(){this.marginBottom=10;this.borderStyle=Nc;this.marginTop=10},0,1,'.description',function(){this.fontFamily=mh;this.marginBottom=
10;this.fontSize=12;this.marginTop=10},0,1,'.attributeCaption',function(){this.marginRight=3;this.fontWeight=qb},0,1,'.summaryQName',function(){this.textDecoration=Nc;this.fontWeight=qb;this.marginTop=3;this.marginLeft=10},0,1,'.summaryType',D(),0,1,'.summaryTypeLink',function(){this.textDecoration=Nc},0,1,'.summaryDescription',function(){this.marginBottom=3;this.marginLeft=10},0,1,'.summaryList',function(){this.marginBottom=20;this.borderStyle=wh},0,1,'.detailList',function(){this.marginBottom=20},
0,1,'.property',function(){this.paddingBottom=20;this.borderWidth=1;this.paddingRight=10;this.borderBottomStyle=wh;this.paddingLeft=20},0,1,'.propertyQName',function(){this.fontFamily=Kc},0,1,'.propertyType',function(){this.fontFamily=Kc},0,1,'.propertyQNameTitle',function(){this.marginRight=3;this.fontSize=18;this.fontWeight=qb;this.marginTop=3},0,1,'.propertyTypeLink',function(){this.fontFamily=Kc;this.textDecoration=Nc},0,1,'.paramName',function(){this.fontFamily=Kc},0,1,'.paramType',function(){this.fontFamily=
Kc},0,1,'.paramLink',function(){this.fontFamily=Kc;this.textDecoration=Nc},0,1,'.eventQName',function(){this.fontWeight=qb},0,1,'.eventLink',function(){this.textDecoration=Nc},0,1,'.eventSummaryQName',function(){this.marginRight=10;this.width=120;this.textDecoration=Nc;this.fontWeight=qb;this.marginTop=3;this.marginLeft=10},0,1,'.findClassLabel',function(){this.paddingRight=3},0,1,'.searchTI',function(){this.width=300},0,1,'.swfonly',function(){this.color=16711680},0,1,'.jsonly',function(){this.color=
36930},0,1,'.loading',function(){this.fontSize=40}];