Skip to content

Instantly share code, notes, and snippets.

@timelyportfolio
Last active August 29, 2015 14:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timelyportfolio/5186ed143f773063a077 to your computer and use it in GitHub Desktop.
Save timelyportfolio/5186ed143f773063a077 to your computer and use it in GitHub Desktop.
listviewer htmlwidget view of par from R with jsoneditor

Install

devtools::install_github("timelyportfolio/listviewer")

Code

# helpful interactive view of par
jsonedit( par() )
# meta view of the above
jsonedit(jsonedit(par()))
This file has been truncated, but you can view the full file.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script src="data:application/x-javascript,%28function%28%29%20%7B%0A%20%20%2F%2F%20If%20window%2EHTMLWidgets%20is%20already%20defined%2C%20then%20use%20it%3B%20otherwise%20create%20a%0A%20%20%2F%2F%20new%20object%2E%20This%20allows%20preceding%20code%20to%20set%20options%20that%20affect%20the%0A%20%20%2F%2F%20initialization%20process%20%28though%20none%20currently%20exist%29%2E%0A%20%20window%2EHTMLWidgets%20%3D%20window%2EHTMLWidgets%20%7C%7C%20%7B%7D%3B%0A%0A%20%20%2F%2F%20See%20if%20we%27re%20running%20in%20a%20viewer%20pane%2E%20If%20not%2C%20we%27re%20in%20a%20web%20browser%2E%0A%20%20var%20viewerMode%20%3D%20window%2EHTMLWidgets%2EviewerMode%20%3D%0A%20%20%20%20%20%20%2F%5Cbviewer%5Fpane%3D1%5Cb%2F%2Etest%28window%2Elocation%29%3B%0A%0A%20%20%2F%2F%20See%20if%20we%27re%20running%20in%20Shiny%20mode%2E%20If%20not%2C%20it%27s%20a%20static%20document%2E%0A%20%20%2F%2F%20Note%20that%20static%20widgets%20can%20appear%20in%20both%20Shiny%20and%20static%20modes%2C%20but%0A%20%20%2F%2F%20obviously%2C%20Shiny%20widgets%20can%20only%20appear%20in%20Shiny%20apps%2Fdocuments%2E%0A%20%20var%20shinyMode%20%3D%20window%2EHTMLWidgets%2EshinyMode%20%3D%0A%20%20%20%20%20%20typeof%28window%2EShiny%29%20%21%3D%3D%20%22undefined%22%20%26%26%20%21%21window%2EShiny%2EoutputBindings%3B%0A%0A%20%20%2F%2F%20We%20can%27t%20count%20on%20jQuery%20being%20available%2C%20so%20we%20implement%20our%20own%0A%20%20%2F%2F%20version%20if%20necessary%2E%0A%20%20function%20querySelectorAll%28scope%2C%20selector%29%20%7B%0A%20%20%20%20if%20%28typeof%28jQuery%29%20%21%3D%3D%20%22undefined%22%20%26%26%20scope%20instanceof%20jQuery%29%20%7B%0A%20%20%20%20%20%20return%20scope%2Efind%28selector%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20%28scope%2EquerySelectorAll%29%20%7B%0A%20%20%20%20%20%20return%20scope%2EquerySelectorAll%28selector%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20function%20asArray%28value%29%20%7B%0A%20%20%20%20if%20%28value%20%3D%3D%3D%20null%29%0A%20%20%20%20%20%20return%20%5B%5D%3B%0A%20%20%20%20if%20%28%24%2EisArray%28value%29%29%0A%20%20%20%20%20%20return%20value%3B%0A%20%20%20%20return%20%5Bvalue%5D%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20Implement%20jQuery%27s%20extend%0A%20%20function%20extend%28target%20%2F%2A%2C%20%2E%2E%2E%20%2A%2F%29%20%7B%0A%20%20%20%20if%20%28arguments%2Elength%20%3D%3D%201%29%20%7B%0A%20%20%20%20%20%20return%20target%3B%0A%20%20%20%20%7D%0A%20%20%20%20for%20%28var%20i%20%3D%201%3B%20i%20%3C%20arguments%2Elength%3B%20i%2B%2B%29%20%7B%0A%20%20%20%20%20%20var%20source%20%3D%20arguments%5Bi%5D%3B%0A%20%20%20%20%20%20for%20%28var%20prop%20in%20source%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28source%2EhasOwnProperty%28prop%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20target%5Bprop%5D%20%3D%20source%5Bprop%5D%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20return%20target%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20Replaces%20the%20specified%20method%20with%20the%20return%20value%20of%20funcSource%2E%0A%20%20%2F%2F%0A%20%20%2F%2F%20Note%20that%20funcSource%20should%20not%20BE%20the%20new%20method%2C%20it%20should%20be%20a%20function%0A%20%20%2F%2F%20that%20RETURNS%20the%20new%20method%2E%20funcSource%20receives%20a%20single%20argument%20that%20is%0A%20%20%2F%2F%20the%20overridden%20method%2C%20it%20can%20be%20called%20from%20the%20new%20method%2E%20The%20overridden%0A%20%20%2F%2F%20method%20can%20be%20called%20like%20a%20regular%20function%2C%20it%20has%20the%20target%20permanently%0A%20%20%2F%2F%20bound%20to%20it%20so%20%22this%22%20will%20work%20correctly%2E%0A%20%20function%20overrideMethod%28target%2C%20methodName%2C%20funcSource%29%20%7B%0A%20%20%20%20var%20superFunc%20%3D%20target%5BmethodName%5D%20%7C%7C%20function%28%29%20%7B%7D%3B%0A%20%20%20%20var%20superFuncBound%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20return%20superFunc%2Eapply%28target%2C%20arguments%29%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20target%5BmethodName%5D%20%3D%20funcSource%28superFuncBound%29%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20Implement%20a%20vague%20facsimilie%20of%20jQuery%27s%20data%20method%0A%20%20function%20elementData%28el%2C%20name%2C%20value%29%20%7B%0A%20%20%20%20if%20%28arguments%2Elength%20%3D%3D%202%29%20%7B%0A%20%20%20%20%20%20return%20el%5B%22htmlwidget%5Fdata%5F%22%20%2B%20name%5D%3B%0A%20%20%20%20%7D%20else%20if%20%28arguments%2Elength%20%3D%3D%203%29%20%7B%0A%20%20%20%20%20%20el%5B%22htmlwidget%5Fdata%5F%22%20%2B%20name%5D%20%3D%20value%3B%0A%20%20%20%20%20%20return%20el%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20throw%20new%20Error%28%22Wrong%20number%20of%20arguments%20for%20elementData%3A%20%22%20%2B%0A%20%20%20%20%20%20%20%20arguments%2Elength%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20%2F%2F%20http%3A%2F%2Fstackoverflow%2Ecom%2Fquestions%2F3446170%2Fescape%2Dstring%2Dfor%2Duse%2Din%2Djavascript%2Dregex%0A%20%20function%20escapeRegExp%28str%29%20%7B%0A%20%20%20%20return%20str%2Ereplace%28%2F%5B%5C%2D%5C%5B%5C%5D%5C%2F%5C%7B%5C%7D%5C%28%5C%29%5C%2A%5C%2B%5C%3F%5C%2E%5C%5C%5C%5E%5C%24%5C%7C%5D%2Fg%2C%20%22%5C%5C%24%26%22%29%3B%0A%20%20%7D%0A%0A%20%20function%20hasClass%28el%2C%20className%29%20%7B%0A%20%20%20%20var%20re%20%3D%20new%20RegExp%28%22%5C%5Cb%22%20%2B%20escapeRegExp%28className%29%20%2B%20%22%5C%5Cb%22%29%3B%0A%20%20%20%20return%20re%2Etest%28el%2EclassName%29%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20elements%20%2D%20array%20%28or%20array%2Dlike%20object%29%20of%20HTML%20elements%0A%20%20%2F%2F%20className%20%2D%20class%20name%20to%20test%20for%0A%20%20%2F%2F%20include%20%2D%20if%20true%2C%20only%20return%20elements%20with%20given%20className%3B%0A%20%20%2F%2F%20%20%20if%20false%2C%20only%20return%20elements%20%2Awithout%2A%20given%20className%0A%20%20function%20filterByClass%28elements%2C%20className%2C%20include%29%20%7B%0A%20%20%20%20var%20results%20%3D%20%5B%5D%3B%0A%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20elements%2Elength%3B%20i%2B%2B%29%20%7B%0A%20%20%20%20%20%20if%20%28hasClass%28elements%5Bi%5D%2C%20className%29%20%3D%3D%20include%29%0A%20%20%20%20%20%20%20%20results%2Epush%28elements%5Bi%5D%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20results%3B%0A%20%20%7D%0A%0A%20%20function%20on%28obj%2C%20eventName%2C%20func%29%20%7B%0A%20%20%20%20if%20%28obj%2EaddEventListener%29%20%7B%0A%20%20%20%20%20%20obj%2EaddEventListener%28eventName%2C%20func%2C%20false%29%3B%0A%20%20%20%20%7D%20else%20if%20%28obj%2EattachEvent%29%20%7B%0A%20%20%20%20%20%20obj%2EattachEvent%28eventName%2C%20func%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20function%20off%28obj%2C%20eventName%2C%20func%29%20%7B%0A%20%20%20%20if%20%28obj%2EremoveEventListener%29%0A%20%20%20%20%20%20obj%2EremoveEventListener%28eventName%2C%20func%2C%20false%29%3B%0A%20%20%20%20else%20if%20%28obj%2EdetachEvent%29%20%7B%0A%20%20%20%20%20%20obj%2EdetachEvent%28eventName%2C%20func%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20%2F%2F%20Translate%20array%20of%20values%20to%20top%2Fright%2Fbottom%2Fleft%2C%20as%20usual%20with%0A%20%20%2F%2F%20the%20%22padding%22%20CSS%20property%0A%20%20%2F%2F%20https%3A%2F%2Fdeveloper%2Emozilla%2Eorg%2Fen%2DUS%2Fdocs%2FWeb%2FCSS%2Fpadding%0A%20%20function%20unpackPadding%28value%29%20%7B%0A%20%20%20%20if%20%28typeof%28value%29%20%3D%3D%3D%20%22number%22%29%0A%20%20%20%20%20%20value%20%3D%20%5Bvalue%5D%3B%0A%20%20%20%20if%20%28value%2Elength%20%3D%3D%3D%201%29%20%7B%0A%20%20%20%20%20%20return%20%7Btop%3A%20value%5B0%5D%2C%20right%3A%20value%5B0%5D%2C%20bottom%3A%20value%5B0%5D%2C%20left%3A%20value%5B0%5D%7D%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20%28value%2Elength%20%3D%3D%3D%202%29%20%7B%0A%20%20%20%20%20%20return%20%7Btop%3A%20value%5B0%5D%2C%20right%3A%20value%5B1%5D%2C%20bottom%3A%20value%5B0%5D%2C%20left%3A%20value%5B1%5D%7D%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20%28value%2Elength%20%3D%3D%3D%203%29%20%7B%0A%20%20%20%20%20%20return%20%7Btop%3A%20value%5B0%5D%2C%20right%3A%20value%5B1%5D%2C%20bottom%3A%20value%5B2%5D%2C%20left%3A%20value%5B1%5D%7D%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20%28value%2Elength%20%3D%3D%3D%204%29%20%7B%0A%20%20%20%20%20%20return%20%7Btop%3A%20value%5B0%5D%2C%20right%3A%20value%5B1%5D%2C%20bottom%3A%20value%5B2%5D%2C%20left%3A%20value%5B3%5D%7D%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20%2F%2F%20Convert%20an%20unpacked%20padding%20object%20to%20a%20CSS%20value%0A%20%20function%20paddingToCss%28paddingObj%29%20%7B%0A%20%20%20%20return%20paddingObj%2Etop%20%2B%20%22px%20%22%20%2B%20paddingObj%2Eright%20%2B%20%22px%20%22%20%2B%20paddingObj%2Ebottom%20%2B%20%22px%20%22%20%2B%20paddingObj%2Eleft%20%2B%20%22px%22%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20Makes%20a%20number%20suitable%20for%20CSS%0A%20%20function%20px%28x%29%20%7B%0A%20%20%20%20if%20%28typeof%28x%29%20%3D%3D%3D%20%22number%22%29%0A%20%20%20%20%20%20return%20x%20%2B%20%22px%22%3B%0A%20%20%20%20else%0A%20%20%20%20%20%20return%20x%3B%0A%20%20%7D%0A%0A%20%20%2F%2F%20Retrieves%20runtime%20widget%20sizing%20information%20for%20an%20element%2E%0A%20%20%2F%2F%20The%20return%20value%20is%20either%20null%2C%20or%20an%20object%20with%20fill%2C%20padding%2C%0A%20%20%2F%2F%20defaultWidth%2C%20defaultHeight%20fields%2E%0A%20%20function%20sizingPolicy%28el%29%20%7B%0A%20%20%20%20var%20sizingEl%20%3D%20document%2EquerySelector%28%22script%5Bdata%2Dfor%3D%27%22%20%2B%20el%2Eid%20%2B%20%22%27%5D%5Btype%3D%27application%2Fhtmlwidget%2Dsizing%27%5D%22%29%3B%0A%20%20%20%20if%20%28%21sizingEl%29%0A%20%20%20%20%20%20return%20null%3B%0A%20%20%20%20var%20sp%20%3D%20JSON%2Eparse%28sizingEl%2EtextContent%20%7C%7C%20sizingEl%2Etext%20%7C%7C%20%22%7B%7D%22%29%3B%0A%20%20%20%20if%20%28viewerMode%29%20%7B%0A%20%20%20%20%20%20return%20sp%2Eviewer%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20return%20sp%2Ebrowser%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20function%20initSizing%28el%29%20%7B%0A%20%20%20%20var%20sizing%20%3D%20sizingPolicy%28el%29%3B%0A%20%20%20%20if%20%28%21sizing%29%0A%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20var%20cel%20%3D%20document%2EgetElementById%28%22htmlwidget%5Fcontainer%22%29%3B%0A%20%20%20%20if%20%28%21cel%29%0A%20%20%20%20%20%20return%3B%0A%0A%20%20%20%20if%20%28typeof%28sizing%2Epadding%29%20%21%3D%3D%20%22undefined%22%29%20%7B%0A%20%20%20%20%20%20document%2Ebody%2Estyle%2Emargin%20%3D%20%220%22%3B%0A%20%20%20%20%20%20document%2Ebody%2Estyle%2Epadding%20%3D%20paddingToCss%28unpackPadding%28sizing%2Epadding%29%29%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20if%20%28sizing%2Efill%29%20%7B%0A%20%20%20%20%20%20document%2Ebody%2Estyle%2Eoverflow%20%3D%20%22hidden%22%3B%0A%20%20%20%20%20%20document%2Ebody%2Estyle%2Ewidth%20%3D%20%22100%25%22%3B%0A%20%20%20%20%20%20document%2Ebody%2Estyle%2Eheight%20%3D%20%22100%25%22%3B%0A%20%20%20%20%20%20document%2EdocumentElement%2Estyle%2Ewidth%20%3D%20%22100%25%22%3B%0A%20%20%20%20%20%20document%2EdocumentElement%2Estyle%2Eheight%20%3D%20%22100%25%22%3B%0A%20%20%20%20%20%20if%20%28cel%29%20%7B%0A%20%20%20%20%20%20%20%20cel%2Estyle%2Eposition%20%3D%20%22absolute%22%3B%0A%20%20%20%20%20%20%20%20var%20pad%20%3D%20unpackPadding%28sizing%2Epadding%29%3B%0A%20%20%20%20%20%20%20%20cel%2Estyle%2Etop%20%3D%20pad%2Etop%20%2B%20%22px%22%3B%0A%20%20%20%20%20%20%20%20cel%2Estyle%2Eright%20%3D%20pad%2Eright%20%2B%20%22px%22%3B%0A%20%20%20%20%20%20%20%20cel%2Estyle%2Ebottom%20%3D%20pad%2Ebottom%20%2B%20%22px%22%3B%0A%20%20%20%20%20%20%20%20cel%2Estyle%2Eleft%20%3D%20pad%2Eleft%20%2B%20%22px%22%3B%0A%20%20%20%20%20%20%20%20el%2Estyle%2Ewidth%20%3D%20%22100%25%22%3B%0A%20%20%20%20%20%20%20%20el%2Estyle%2Eheight%20%3D%20%22100%25%22%3B%0A%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20getWidth%3A%20function%28%29%20%7B%20return%20cel%2EoffsetWidth%3B%20%7D%2C%0A%20%20%20%20%20%20%20%20getHeight%3A%20function%28%29%20%7B%20return%20cel%2EoffsetHeight%3B%20%7D%0A%20%20%20%20%20%20%7D%3B%0A%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20el%2Estyle%2Ewidth%20%3D%20px%28sizing%2Ewidth%29%3B%0A%20%20%20%20%20%20el%2Estyle%2Eheight%20%3D%20px%28sizing%2Eheight%29%3B%0A%0A%20%20%20%20%20%20return%20%7B%0A%20%20%20%20%20%20%20%20getWidth%3A%20function%28%29%20%7B%20return%20el%2EoffsetWidth%3B%20%7D%2C%0A%20%20%20%20%20%20%20%20getHeight%3A%20function%28%29%20%7B%20return%20el%2EoffsetHeight%3B%20%7D%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20%2F%2F%20Default%20implementations%20for%20methods%0A%20%20var%20defaults%20%3D%20%7B%0A%20%20%20%20find%3A%20function%28scope%29%20%7B%0A%20%20%20%20%20%20return%20querySelectorAll%28scope%2C%20%22%2E%22%20%2B%20this%2Ename%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20renderError%3A%20function%28el%2C%20err%29%20%7B%0A%20%20%20%20%20%20var%20%24el%20%3D%20%24%28el%29%3B%0A%0A%20%20%20%20%20%20this%2EclearError%28el%29%3B%0A%0A%20%20%20%20%20%20%2F%2F%20Add%20all%20these%20error%20classes%2C%20as%20Shiny%20does%0A%20%20%20%20%20%20var%20errClass%20%3D%20%22shiny%2Doutput%2Derror%22%3B%0A%20%20%20%20%20%20if%20%28err%2Etype%20%21%3D%3D%20null%29%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20use%20the%20classes%20of%20the%20error%20condition%20as%20CSS%20class%20names%0A%20%20%20%20%20%20%20%20errClass%20%3D%20errClass%20%2B%20%22%20%22%20%2B%20%24%2Emap%28asArray%28err%2Etype%29%2C%20function%28type%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20errClass%20%2B%20%22%2D%22%20%2B%20type%3B%0A%20%20%20%20%20%20%20%20%7D%29%2Ejoin%28%22%20%22%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20errClass%20%3D%20errClass%20%2B%20%22%20htmlwidgets%2Derror%22%3B%0A%0A%20%20%20%20%20%20%2F%2F%20Is%20el%20inline%20or%20block%3F%20If%20inline%20or%20inline%2Dblock%2C%20just%20display%3Anone%20it%0A%20%20%20%20%20%20%2F%2F%20and%20add%20an%20inline%20error%2E%0A%20%20%20%20%20%20var%20display%20%3D%20%24el%2Ecss%28%22display%22%29%3B%0A%20%20%20%20%20%20%24el%2Edata%28%22restore%2Ddisplay%2Dmode%22%2C%20display%29%3B%0A%0A%20%20%20%20%20%20if%20%28display%20%3D%3D%3D%20%22inline%22%20%7C%7C%20display%20%3D%3D%3D%20%22inline%2Dblock%22%29%20%7B%0A%20%20%20%20%20%20%20%20%24el%2Ehide%28%29%3B%0A%20%20%20%20%20%20%20%20if%20%28err%2Emessage%20%21%3D%3D%20%22%22%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20errorSpan%20%3D%20%24%28%22%3Cspan%3E%22%29%2EaddClass%28errClass%29%3B%0A%20%20%20%20%20%20%20%20%20%20errorSpan%2Etext%28err%2Emessage%29%3B%0A%20%20%20%20%20%20%20%20%20%20%24el%2Eafter%28errorSpan%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20else%20if%20%28display%20%3D%3D%3D%20%22block%22%29%20%7B%0A%20%20%20%20%20%20%20%20%2F%2F%20If%20block%2C%20add%20an%20error%20just%20after%20the%20el%2C%20set%20visibility%3Anone%20on%20the%0A%20%20%20%20%20%20%20%20%2F%2F%20el%2C%20and%20position%20the%20error%20to%20be%20on%20top%20of%20the%20el%2E%0A%20%20%20%20%20%20%20%20%2F%2F%20Mark%20it%20with%20a%20unique%20ID%20and%20CSS%20class%20so%20we%20can%20remove%20it%20later%2E%0A%20%20%20%20%20%20%20%20%24el%2Ecss%28%22visibility%22%2C%20%22hidden%22%29%3B%0A%20%20%20%20%20%20%20%20if%20%28err%2Emessage%20%21%3D%3D%20%22%22%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20errorDiv%20%3D%20%24%28%22%3Cdiv%3E%22%29%2EaddClass%28errClass%29%2Ecss%28%22position%22%2C%20%22absolute%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%2Ecss%28%22top%22%2C%20el%2EoffsetTop%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%2Ecss%28%22left%22%2C%20el%2EoffsetLeft%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20setting%20width%20can%20push%20out%20the%20page%20size%2C%20forcing%20otherwise%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20unnecessary%20scrollbars%20to%20appear%20and%20making%20it%20impossible%20for%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20the%20element%20to%20shrink%3B%20so%20use%20max%2Dwidth%20instead%0A%20%20%20%20%20%20%20%20%20%20%20%20%2Ecss%28%22maxWidth%22%2C%20el%2EoffsetWidth%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%2Ecss%28%22height%22%2C%20el%2EoffsetHeight%29%3B%0A%20%20%20%20%20%20%20%20%20%20errorDiv%2Etext%28err%2Emessage%29%3B%0A%20%20%20%20%20%20%20%20%20%20%24el%2Eafter%28errorDiv%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20Really%20dumb%20way%20to%20keep%20the%20size%2Fposition%20of%20the%20error%20in%20sync%20with%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20the%20parent%20element%20as%20the%20window%20is%20resized%20or%20whatever%2E%0A%20%20%20%20%20%20%20%20%20%20var%20intId%20%3D%20setInterval%28function%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21errorDiv%5B0%5D%2EparentElement%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20clearInterval%28intId%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20errorDiv%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2Ecss%28%22top%22%2C%20el%2EoffsetTop%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2Ecss%28%22left%22%2C%20el%2EoffsetLeft%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2Ecss%28%22maxWidth%22%2C%20el%2EoffsetWidth%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2Ecss%28%22height%22%2C%20el%2EoffsetHeight%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%2C%20500%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%2C%0A%20%20%20%20clearError%3A%20function%28el%29%20%7B%0A%20%20%20%20%20%20var%20%24el%20%3D%20%24%28el%29%3B%0A%20%20%20%20%20%20var%20display%20%3D%20%24el%2Edata%28%22restore%2Ddisplay%2Dmode%22%29%3B%0A%20%20%20%20%20%20%24el%2Edata%28%22restore%2Ddisplay%2Dmode%22%2C%20null%29%3B%0A%0A%20%20%20%20%20%20if%20%28display%20%3D%3D%3D%20%22inline%22%20%7C%7C%20display%20%3D%3D%3D%20%22inline%2Dblock%22%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28display%29%0A%20%20%20%20%20%20%20%20%20%20%24el%2Ecss%28%22display%22%2C%20display%29%3B%0A%20%20%20%20%20%20%20%20%24%28el%2EnextSibling%29%2Efilter%28%22%2Ehtmlwidgets%2Derror%22%29%2Eremove%28%29%3B%0A%20%20%20%20%20%20%7D%20else%20if%20%28display%20%3D%3D%3D%20%22block%22%29%7B%0A%20%20%20%20%20%20%20%20%24el%2Ecss%28%22visibility%22%2C%20%22inherit%22%29%3B%0A%20%20%20%20%20%20%20%20%24%28el%2EnextSibling%29%2Efilter%28%22%2Ehtmlwidgets%2Derror%22%29%2Eremove%28%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%2C%0A%20%20%20%20sizing%3A%20%7B%7D%0A%20%20%7D%3B%0A%0A%20%20%2F%2F%20Called%20by%20widget%20bindings%20to%20register%20a%20new%20type%20of%20widget%2E%20The%20definition%0A%20%20%2F%2F%20object%20can%20contain%20the%20following%20properties%3A%0A%20%20%2F%2F%20%2D%20name%20%28required%29%20%2D%20A%20string%20indicating%20the%20binding%20name%2C%20which%20will%20be%0A%20%20%2F%2F%20%20%20used%20by%20default%20as%20the%20CSS%20classname%20to%20look%20for%2E%0A%20%20%2F%2F%20%2D%20initialize%20%28optional%29%20%2D%20A%20function%28el%29%20that%20will%20be%20called%20once%20per%0A%20%20%2F%2F%20%20%20widget%20element%3B%20if%20a%20value%20is%20returned%2C%20it%20will%20be%20passed%20as%20the%20third%0A%20%20%2F%2F%20%20%20value%20to%20renderValue%2E%0A%20%20%2F%2F%20%2D%20renderValue%20%28required%29%20%2D%20A%20function%28el%2C%20data%2C%20initValue%29%20that%20will%20be%0A%20%20%2F%2F%20%20%20called%20with%20data%2E%20Static%20contexts%20will%20cause%20this%20to%20be%20called%20once%20per%0A%20%20%2F%2F%20%20%20element%3B%20Shiny%20apps%20will%20cause%20this%20to%20be%20called%20multiple%20times%20per%0A%20%20%2F%2F%20%20%20element%2C%20as%20the%20data%20changes%2E%0A%20%20window%2EHTMLWidgets%2Ewidget%20%3D%20function%28definition%29%20%7B%0A%20%20%20%20if%20%28%21definition%2Ename%29%20%7B%0A%20%20%20%20%20%20throw%20new%20Error%28%22Widget%20must%20have%20a%20name%22%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20if%20%28%21definition%2Etype%29%20%7B%0A%20%20%20%20%20%20throw%20new%20Error%28%22Widget%20must%20have%20a%20type%22%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F%2F%20Currently%20we%20only%20support%20output%20widgets%0A%20%20%20%20if%20%28definition%2Etype%20%21%3D%3D%20%22output%22%29%20%7B%0A%20%20%20%20%20%20throw%20new%20Error%28%22Unrecognized%20widget%20type%20%27%22%20%2B%20definition%2Etype%20%2B%20%22%27%22%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20%2F%2F%20TODO%3A%20Verify%20that%20%2Ename%20is%20a%20valid%20CSS%20classname%0A%20%20%20%20if%20%28%21definition%2ErenderValue%29%20%7B%0A%20%20%20%20%20%20throw%20new%20Error%28%22Widget%20must%20have%20a%20renderValue%20function%22%29%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20%2F%2F%20For%20static%20rendering%20%28non%2DShiny%29%2C%20use%20a%20simple%20widget%20registration%0A%20%20%20%20%2F%2F%20scheme%2E%20We%20also%20use%20this%20scheme%20for%20Shiny%20apps%2Fdocuments%20that%20also%0A%20%20%20%20%2F%2F%20contain%20static%20widgets%2E%0A%20%20%20%20window%2EHTMLWidgets%2Ewidgets%20%3D%20window%2EHTMLWidgets%2Ewidgets%20%7C%7C%20%5B%5D%3B%0A%20%20%20%20%2F%2F%20Merge%20defaults%20into%20the%20definition%3B%20don%27t%20mutate%20the%20original%20definition%2E%0A%20%20%20%20var%20staticBinding%20%3D%20extend%28%7B%7D%2C%20defaults%2C%20definition%29%3B%0A%20%20%20%20overrideMethod%28staticBinding%2C%20%22find%22%2C%20function%28superfunc%29%20%7B%0A%20%20%20%20%20%20return%20function%28scope%29%20%7B%0A%20%20%20%20%20%20%20%20var%20results%20%3D%20superfunc%28scope%29%3B%0A%20%20%20%20%20%20%20%20%2F%2F%20Filter%20out%20Shiny%20outputs%2C%20we%20only%20want%20the%20static%20kind%0A%20%20%20%20%20%20%20%20return%20filterByClass%28results%2C%20%22html%2Dwidget%2Doutput%22%2C%20false%29%3B%0A%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%7D%29%3B%0A%20%20%20%20window%2EHTMLWidgets%2Ewidgets%2Epush%28staticBinding%29%3B%0A%0A%20%20%20%20if%20%28shinyMode%29%20%7B%0A%20%20%20%20%20%20%2F%2F%20Shiny%20is%20running%2E%20Register%20the%20definition%20as%20an%20output%20binding%2E%0A%0A%20%20%20%20%20%20%2F%2F%20Merge%20defaults%20into%20the%20definition%3B%20don%27t%20mutate%20the%20original%20definition%2E%0A%20%20%20%20%20%20%2F%2F%20The%20base%20object%20is%20a%20Shiny%20output%20binding%20if%20we%27re%20running%20in%20Shiny%20mode%2C%0A%20%20%20%20%20%20%2F%2F%20or%20an%20empty%20object%20if%20we%27re%20not%2E%0A%20%20%20%20%20%20var%20shinyBinding%20%3D%20extend%28new%20Shiny%2EOutputBinding%28%29%2C%20defaults%2C%20definition%29%3B%0A%0A%20%20%20%20%20%20%2F%2F%20Wrap%20renderValue%20to%20handle%20initialization%2C%20which%20unfortunately%20isn%27t%0A%20%20%20%20%20%20%2F%2F%20supported%20natively%20by%20Shiny%20at%20the%20time%20of%20this%20writing%2E%0A%0A%20%20%20%20%20%20%2F%2F%20NB%3A%20shinyBinding%2Einitialize%20may%20be%20undefined%2C%20as%20it%27s%20optional%2E%0A%0A%20%20%20%20%20%20%2F%2F%20Rename%20initialize%20to%20make%20sure%20it%20isn%27t%20called%20by%20a%20future%20version%0A%20%20%20%20%20%20%2F%2F%20of%20Shiny%20that%20does%20support%20initialize%20directly%2E%0A%20%20%20%20%20%20shinyBinding%2E%5Fhtmlwidgets%5Finitialize%20%3D%20shinyBinding%2Einitialize%3B%0A%20%20%20%20%20%20delete%20shinyBinding%2Einitialize%3B%0A%0A%20%20%20%20%20%20overrideMethod%28shinyBinding%2C%20%22find%22%2C%20function%28superfunc%29%20%7B%0A%20%20%20%20%20%20%20%20return%20function%28scope%29%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20var%20results%20%3D%20superfunc%28scope%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20Only%20return%20elements%20that%20are%20Shiny%20outputs%2C%20not%20static%20ones%0A%20%20%20%20%20%20%20%20%20%20var%20dynamicResults%20%3D%20results%2Efilter%28%22%2Ehtml%2Dwidget%2Doutput%22%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20It%27s%20possible%20that%20whatever%20caused%20Shiny%20to%20think%20there%20might%20be%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20new%20dynamic%20outputs%2C%20also%20caused%20there%20to%20be%20new%20static%20outputs%2E%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20Since%20there%20might%20be%20lots%20of%20different%20htmlwidgets%20bindings%2C%20we%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20schedule%20execution%20for%20later%2D%2Dno%20need%20to%20staticRender%20multiple%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20times%2E%0A%20%20%20%20%20%20%20%20%20%20if%20%28results%2Elength%20%21%3D%3D%20dynamicResults%2Elength%29%0A%20%20%20%20%20%20%20%20%20%20%20%20scheduleStaticRender%28%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20return%20dynamicResults%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%7D%29%3B%0A%0A%20%20%20%20%20%20overrideMethod%28shinyBinding%2C%20%22renderValue%22%2C%20function%28superfunc%29%20%7B%0A%20%20%20%20%20%20%20%20return%20function%28el%2C%20data%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20Resolve%20strings%20marked%20as%20javascript%20literals%20to%20objects%0A%20%20%20%20%20%20%20%20%20%20if%20%28%21%28data%2Eevals%20instanceof%20Array%29%29%20data%2Eevals%20%3D%20%5Bdata%2Eevals%5D%3B%0A%20%20%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20data%2Eevals%20%26%26%20i%20%3C%20data%2Eevals%2Elength%3B%20i%2B%2B%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20window%2EHTMLWidgets%2EevaluateStringMember%28data%2Ex%2C%20data%2Eevals%5Bi%5D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20%28%21this%2ErenderOnNullValue%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28data%2Ex%20%3D%3D%3D%20null%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20el%2Estyle%2Evisibility%20%3D%20%22hidden%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20el%2Estyle%2Evisibility%20%3D%20%22inherit%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20if%20%28%21elementData%28el%2C%20%22initialized%22%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20initSizing%28el%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20elementData%28el%2C%20%22initialized%22%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28this%2E%5Fhtmlwidgets%5Finitialize%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20result%20%3D%20this%2E%5Fhtmlwidgets%5Finitialize%28el%2C%20el%2EoffsetWidth%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20el%2EoffsetHeight%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20elementData%28el%2C%20%22init%5Fresult%22%2C%20result%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20Shiny%2ErenderDependencies%28data%2Edeps%29%3B%0A%20%20%20%20%20%20%20%20%20%20superfunc%28el%2C%20data%2Ex%2C%20elementData%28el%2C%20%22init%5Fresult%22%29%29%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%7D%29%3B%0A%0A%20%20%20%20%20%20overrideMethod%28shinyBinding%2C%20%22resize%22%2C%20function%28superfunc%29%20%7B%0A%20%20%20%20%20%20%20%20return%20function%28el%2C%20width%2C%20height%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20Shiny%20can%20call%20resize%20before%20initialize%2FrenderValue%20have%20been%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20called%2C%20which%20doesn%27t%20make%20sense%20for%20widgets%2E%0A%20%20%20%20%20%20%20%20%20%20if%20%28elementData%28el%2C%20%22initialized%22%29%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20superfunc%28el%2C%20width%2C%20height%2C%20elementData%28el%2C%20%22init%5Fresult%22%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%7D%29%3B%0A%0A%20%20%20%20%20%20Shiny%2EoutputBindings%2Eregister%28shinyBinding%2C%20shinyBinding%2Ename%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%0A%20%20var%20scheduleStaticRenderTimerId%20%3D%20null%3B%0A%20%20function%20scheduleStaticRender%28%29%20%7B%0A%20%20%20%20if%20%28%21scheduleStaticRenderTimerId%29%20%7B%0A%20%20%20%20%20%20scheduleStaticRenderTimerId%20%3D%20setTimeout%28function%28%29%20%7B%0A%20%20%20%20%20%20%20%20scheduleStaticRenderTimerId%20%3D%20null%3B%0A%20%20%20%20%20%20%20%20window%2EHTMLWidgets%2EstaticRender%28%29%3B%0A%20%20%20%20%20%20%7D%2C%201%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20%2F%2F%20Render%20static%20widgets%20after%20the%20document%20finishes%20loading%0A%20%20%2F%2F%20Statically%20render%20all%20elements%20that%20are%20of%20this%20widget%27s%20class%0A%20%20window%2EHTMLWidgets%2EstaticRender%20%3D%20function%28%29%20%7B%0A%20%20%20%20var%20bindings%20%3D%20window%2EHTMLWidgets%2Ewidgets%20%7C%7C%20%5B%5D%3B%0A%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20bindings%2Elength%3B%20i%2B%2B%29%20%7B%0A%20%20%20%20%20%20var%20binding%20%3D%20bindings%5Bi%5D%3B%0A%20%20%20%20%20%20var%20matches%20%3D%20binding%2Efind%28document%2EdocumentElement%29%3B%0A%20%20%20%20%20%20for%20%28var%20j%20%3D%200%3B%20j%20%3C%20matches%2Elength%3B%20j%2B%2B%29%20%7B%0A%20%20%20%20%20%20%20%20var%20el%20%3D%20matches%5Bj%5D%3B%0A%20%20%20%20%20%20%20%20var%20sizeObj%20%3D%20initSizing%28el%2C%20binding%29%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28hasClass%28el%2C%20%22html%2Dwidget%2Dstatic%2Dbound%22%29%29%0A%20%20%20%20%20%20%20%20%20%20continue%3B%0A%20%20%20%20%20%20%20%20el%2EclassName%20%3D%20el%2EclassName%20%2B%20%22%20html%2Dwidget%2Dstatic%2Dbound%22%3B%0A%0A%20%20%20%20%20%20%20%20var%20initResult%3B%0A%20%20%20%20%20%20%20%20if%20%28binding%2Einitialize%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20initResult%20%3D%20binding%2Einitialize%28el%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20sizeObj%20%3F%20sizeObj%2EgetWidth%28%29%20%3A%20el%2EoffsetWidth%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20sizeObj%20%3F%20sizeObj%2EgetHeight%28%29%20%3A%20el%2EoffsetHeight%0A%20%20%20%20%20%20%20%20%20%20%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20if%20%28binding%2Eresize%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20lastSize%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20%20%20on%28window%2C%20%22resize%22%2C%20function%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20size%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20w%3A%20sizeObj%20%3F%20sizeObj%2EgetWidth%28%29%20%3A%20el%2EoffsetWidth%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20h%3A%20sizeObj%20%3F%20sizeObj%2EgetHeight%28%29%20%3A%20el%2EoffsetHeight%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28size%2Ew%20%3D%3D%3D%200%20%26%26%20size%2Eh%20%3D%3D%3D%200%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28size%2Ew%20%3D%3D%3D%20lastSize%2Ew%20%26%26%20size%2Eh%20%3D%3D%3D%20lastSize%2Eh%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20lastSize%20%3D%20size%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20binding%2Eresize%28el%2C%20size%2Ew%2C%20size%2Eh%2C%20initResult%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20var%20scriptData%20%3D%20document%2EquerySelector%28%22script%5Bdata%2Dfor%3D%27%22%20%2B%20el%2Eid%20%2B%20%22%27%5D%5Btype%3D%27application%2Fjson%27%5D%22%29%3B%0A%20%20%20%20%20%20%20%20if%20%28scriptData%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20var%20data%20%3D%20JSON%2Eparse%28scriptData%2EtextContent%20%7C%7C%20scriptData%2Etext%29%3B%0A%20%20%20%20%20%20%20%20%20%20%2F%2F%20Resolve%20strings%20marked%20as%20javascript%20literals%20to%20objects%0A%20%20%20%20%20%20%20%20%20%20if%20%28%21%28data%2Eevals%20instanceof%20Array%29%29%20data%2Eevals%20%3D%20%5Bdata%2Eevals%5D%3B%0A%20%20%20%20%20%20%20%20%20%20for%20%28var%20k%20%3D%200%3B%20data%2Eevals%20%26%26%20k%20%3C%20data%2Eevals%2Elength%3B%20k%2B%2B%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20window%2EHTMLWidgets%2EevaluateStringMember%28data%2Ex%2C%20data%2Eevals%5Bk%5D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20binding%2ErenderValue%28el%2C%20data%2Ex%2C%20initResult%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20%2F%2F%20Wait%20until%20after%20the%20document%20has%20loaded%20to%20render%20the%20widgets%2E%0A%20%20if%20%28document%2EaddEventListener%29%20%7B%0A%20%20%20%20document%2EaddEventListener%28%22DOMContentLoaded%22%2C%20function%28%29%20%7B%0A%20%20%20%20%20%20document%2EremoveEventListener%28%22DOMContentLoaded%22%2C%20arguments%2Ecallee%2C%20false%29%3B%0A%20%20%20%20%20%20window%2EHTMLWidgets%2EstaticRender%28%29%3B%0A%20%20%20%20%7D%2C%20false%29%3B%0A%20%20%7D%20else%20if%20%28document%2EattachEvent%29%20%7B%0A%20%20%20%20document%2EattachEvent%28%22onreadystatechange%22%2C%20function%28%29%20%7B%0A%20%20%20%20%20%20if%20%28document%2EreadyState%20%3D%3D%3D%20%22complete%22%29%20%7B%0A%20%20%20%20%20%20%20%20document%2EdetachEvent%28%22onreadystatechange%22%2C%20arguments%2Ecallee%29%3B%0A%20%20%20%20%20%20%20%20window%2EHTMLWidgets%2EstaticRender%28%29%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%29%3B%0A%20%20%7D%0A%0A%0A%20%20window%2EHTMLWidgets%2EgetAttachmentUrl%20%3D%20function%28depname%2C%20key%29%20%7B%0A%20%20%20%20%2F%2F%20If%20no%20key%2C%20default%20to%20the%20first%20item%0A%20%20%20%20if%20%28typeof%28key%29%20%3D%3D%3D%20%22undefined%22%29%0A%20%20%20%20%20%20key%20%3D%201%3B%0A%0A%20%20%20%20var%20link%20%3D%20document%2EgetElementById%28depname%20%2B%20%22%2D%22%20%2B%20key%20%2B%20%22%2Dattachment%22%29%3B%0A%20%20%20%20if%20%28%21link%29%20%7B%0A%20%20%20%20%20%20throw%20new%20Error%28%22Attachment%20%22%20%2B%20depname%20%2B%20%22%2F%22%20%2B%20key%20%2B%20%22%20not%20found%20in%20document%22%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20link%2EgetAttribute%28%22href%22%29%3B%0A%20%20%7D%3B%0A%0A%20%20window%2EHTMLWidgets%2EdataframeToD3%20%3D%20function%28df%29%20%7B%0A%20%20%20%20var%20names%20%3D%20%5B%5D%3B%0A%20%20%20%20var%20length%3B%0A%20%20%20%20for%20%28var%20name%20in%20df%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28df%2EhasOwnProperty%28name%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20names%2Epush%28name%29%3B%0A%20%20%20%20%20%20%20%20if%20%28typeof%28df%5Bname%5D%29%20%21%3D%3D%20%22object%22%20%7C%7C%20typeof%28df%5Bname%5D%2Elength%29%20%3D%3D%3D%20%22undefined%22%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20Error%28%22All%20fields%20must%20be%20arrays%22%29%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20%28typeof%28length%29%20%21%3D%3D%20%22undefined%22%20%26%26%20length%20%21%3D%3D%20df%5Bname%5D%2Elength%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20Error%28%22All%20fields%20must%20be%20arrays%20of%20the%20same%20length%22%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20length%20%3D%20df%5Bname%5D%2Elength%3B%0A%20%20%20%20%7D%0A%20%20%20%20var%20results%20%3D%20%5B%5D%3B%0A%20%20%20%20var%20item%3B%0A%20%20%20%20for%20%28var%20row%20%3D%200%3B%20row%20%3C%20length%3B%20row%2B%2B%29%20%7B%0A%20%20%20%20%20%20%20%20item%20%3D%20%7B%7D%3B%0A%20%20%20%20%20%20%20%20for%20%28var%20col%20%3D%200%3B%20col%20%3C%20names%2Elength%3B%20col%2B%2B%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20item%5Bnames%5Bcol%5D%5D%20%3D%20df%5Bnames%5Bcol%5D%5D%5Brow%5D%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20results%2Epush%28item%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20results%3B%0A%20%20%7D%3B%0A%0A%20%20window%2EHTMLWidgets%2EtransposeArray2D%20%3D%20function%28array%29%20%7B%0A%20%20%20%20%20%20var%20newArray%20%3D%20array%5B0%5D%2Emap%28function%28col%2C%20i%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20array%2Emap%28function%28row%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20row%5Bi%5D%0A%20%20%20%20%20%20%20%20%20%20%7D%29%0A%20%20%20%20%20%20%7D%29%3B%0A%20%20%20%20%20%20return%20newArray%3B%0A%20%20%7D%3B%0A%20%20%2F%2F%20Split%20value%20at%20splitChar%2C%20but%20allow%20splitChar%20to%20be%20escaped%0A%20%20%2F%2F%20using%20escapeChar%2E%20Any%20other%20characters%20escaped%20by%20escapeChar%0A%20%20%2F%2F%20will%20be%20included%20as%20usual%20%28including%20escapeChar%20itself%29%2E%0A%20%20function%20splitWithEscape%28value%2C%20splitChar%2C%20escapeChar%29%20%7B%0A%20%20%20%20var%20results%20%3D%20%5B%5D%3B%0A%20%20%20%20var%20escapeMode%20%3D%20false%3B%0A%20%20%20%20var%20currentResult%20%3D%20%22%22%3B%0A%20%20%20%20for%20%28var%20pos%20%3D%200%3B%20pos%20%3C%20value%2Elength%3B%20pos%2B%2B%29%20%7B%0A%20%20%20%20%20%20if%20%28%21escapeMode%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28value%5Bpos%5D%20%3D%3D%3D%20splitChar%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20results%2Epush%28currentResult%29%3B%0A%20%20%20%20%20%20%20%20%20%20currentResult%20%3D%20%22%22%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20if%20%28value%5Bpos%5D%20%3D%3D%3D%20escapeChar%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20escapeMode%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20currentResult%20%2B%3D%20value%5Bpos%5D%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20currentResult%20%2B%3D%20value%5Bpos%5D%3B%0A%20%20%20%20%20%20%20%20escapeMode%20%3D%20false%3B%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20if%20%28currentResult%20%21%3D%3D%20%22%22%29%20%7B%0A%20%20%20%20%20%20results%2Epush%28currentResult%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20results%3B%0A%20%20%7D%0A%20%20%2F%2F%20Function%20authored%20by%20Yihui%2FJJ%20Allaire%0A%20%20window%2EHTMLWidgets%2EevaluateStringMember%20%3D%20function%28o%2C%20member%29%20%7B%0A%20%20%20%20var%20parts%20%3D%20splitWithEscape%28member%2C%20%27%2E%27%2C%20%27%5C%5C%27%29%3B%0A%20%20%20%20for%20%28var%20i%20%3D%200%2C%20l%20%3D%20parts%2Elength%3B%20i%20%3C%20l%3B%20i%2B%2B%29%20%7B%0A%20%20%20%20%20%20var%20part%20%3D%20parts%5Bi%5D%3B%0A%20%20%20%20%20%20%2F%2F%20part%20may%20be%20a%20character%20or%20%27numeric%27%20member%20name%0A%20%20%20%20%20%20if%20%28o%20%21%3D%3D%20null%20%26%26%20typeof%20o%20%3D%3D%3D%20%22object%22%20%26%26%20part%20in%20o%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28i%20%3D%3D%20%28l%20%2D%201%29%29%20%7B%20%2F%2F%20if%20we%20are%20at%20the%20end%20of%20the%20line%20then%20evalulate%0A%20%20%20%20%20%20%20%20%20%20if%20%28typeof%20o%5Bpart%5D%20%3D%3D%3D%20%22string%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%20o%5Bpart%5D%20%3D%20eval%28%22%28%22%20%2B%20o%5Bpart%5D%20%2B%20%22%29%22%29%3B%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%20%2F%2F%20otherwise%20continue%20to%20next%20embedded%20object%0A%20%20%20%20%20%20%20%20%20%20o%20%3D%20o%5Bpart%5D%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%3B%0A%7D%29%28%29%3B%0A%0A"></script>
<link href="data:text/css,%2Ejsoneditor%20%2Efield%2C%0A%2Ejsoneditor%20%2Evalue%2C%0A%2Ejsoneditor%20%2Ereadonly%20%7B%0A%20%20border%3A%201px%20solid%20transparent%3B%0A%20%20min%2Dheight%3A%2016px%3B%0A%20%20min%2Dwidth%3A%2032px%3B%0A%20%20padding%3A%202px%3B%0A%20%20margin%3A%201px%3B%0A%20%20word%2Dwrap%3A%20break%2Dword%3B%0A%20%20float%3A%20left%3B%0A%7D%0A%0A%2F%2A%20adjust%20margin%20of%20p%20elements%20inside%20editable%20divs%2C%20needed%20for%20Opera%2C%20IE%20%2A%2F%0A%0A%2Ejsoneditor%20%2Efield%20p%2C%0A%2Ejsoneditor%20%2Evalue%20p%20%7B%0A%20%20margin%3A%200%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Evalue%20%7B%0A%20%20word%2Dbreak%3A%20break%2Dword%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Ereadonly%20%7B%0A%20%20min%2Dwidth%3A%2016px%3B%0A%20%20color%3A%20gray%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Eempty%20%7B%0A%20%20border%2Dcolor%3A%20lightgray%3B%0A%20%20border%2Dstyle%3A%20dashed%3B%0A%20%20border%2Dradius%3A%202px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Efield%2Eempty%20%7B%0A%20%20background%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAANgAAACoEAYAAADSkvxvAAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA%2BUO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAANtZJREFUeNrt3XlcVFX7APDn3JlhR1CUVRRyQRDURDPfzFxyAWYGQsEsLX1TI3N5S3PprdS3svRnmen7SphL0etroKYzA7aoqGGlgYogLiCuyCoiDDACc8%2Fvj9txcJDYBu5gz%2FcfPty59845Z2buc89yzwFACCGEEEIIIYQQQgghhBBC6NFCGtvByWnvXgBKxUrg7dvh4QCk0XQ2hNLAQDHTT0hqamvSv3nzvn06nXjpf%2B21sDArK0w%2Fph%2FTj%2Bk3v%2FRLxUoYQg9jYSGTAQBUV9fU1N1uaSlsv3fvwe1isba2tCQEwM3Nyanuz%2BvevepqAIDc3OJinjds9%2FR0duY4AJlM%2BsBvju3HjkPNw74XlpYWFnU%2Fh4qKqipKAaRSobwtLWWyuq9rtcLrPF%2F3U0IdDQawDkomk0pbcl9VU1NbK9791IPpBwCYOPGJJ2QygG7dHB05DqCsrLKSUoDdu48cqXtJj4wcM8bCAkAq5TgAgKtX8%2FN5HiAp6fTp2tr2T3%2FXrg4OhACMHz90qHAJFRQW3rnD8wB79x47VvfS%2BNRTAQFSKYCjo51d3c%2Ftu%2B%2BOHaupASgoqK42h0upVCqRAAD87W%2F%2B%2FnVD7YkTmZm1teZzA8H4%2B3t7SyQAQ4f6%2BtZN7549R49WVwN4e7u5SSQAgwf37SvkTPDtt4cPV1cD3LlTXm4OvwfUMm0WwNasGThw0yYAmYzjZDKAmJjLlz%2F%2FHODChbKyc%2BfEznbHxQLXK6%2BEhFhYNP%2F4rVsTEqqrxQ9kfft6ekokAB4e3bpxHEBpqVZLKcD16wUFD7uQX7mSl8fzAN7erq4cB%2BDj06OHRAJw%2BfKtWzzf8HHtJS0tO1uvB7h06cYNvb7%2B6wcPpqTU1AD4%2BXl5SSSGv%2BaGfS7G6SsvF24sTp%2FOynpY%2FlDTREWFhlpaNvx6dPT%2B%2FffuiZ3Klqe%2FtZqbf66tEjJtWs%2Ber7wC8NJLXl5z5gB4eFhbe3q2XcZbrmtXNzcAgJ07T58GABg5Uql82H6PPebnBwDw7bfp6QAAvXsHBIid9vooFcJSQ3%2FNha3tgy3bGRk5OXo9wMmT588%2FrEaVnHz2bG0twMWLN27UDVT29jY2LW%2FhN527dysqKAW4fbus7GElXVx89y6lhkBgrvz9H3tMIgEoLCwtpRTg5s2iIp4H6N9fqOlwnDmUtkFV1cObXllNUaerrn5YeWOT7aMBmxDhzTc%2F%2FRQAoG%2FfQYMAAD76aNcuAIBFi8LCAABu3MjOBgDYuPH77wEAXFyEQLx27e7dAAAREf37AwDo9WI0ZTExMWr1vXsA1tYP9gUYI0R41cLiwSbI6ur2rZGxdDT3%2FY1rjsbnQS3j4dG1K8cBdOlib0%2BIoWm2urqmhlKACROEpt6ePYUaMKsRi624%2BO7duumorRXqh%2BxGgd04MCygVVbeuyfGjYS517A6WvpbHMCcnCwtu3UD6N7d2rpHj%2FqvE0IIV6d%2BFxDg4PD44wC1tZTWvdAXFOh0eXliNi2uW7dwIQBAnz4DBwIAeHv7%2BgIAfPrp%2Fv0AAHfvlpQAAHTr5u4OAFBZqdUCALz%2F%2FqxZAGIHLsbKSghc06dPmNCSpsVt24SmxfYKZJ07P9gX1NTOdL3%2Bwf2M%2B5RQy7CaF7vAX76cm6vXG8qbBQS2n7kEsJISocbL%2Buh0OqFmxVociotLS3ne8HplpTldflFrtTiAKRTu7pMmAaxbN2jQ5s2N7%2F%2FOO%2F37r15df%2Fv%2F%2Fnf9%2Bo4dAPPnp6bOnClGEZSUFBYCALz22tixAAAxMUeOAAD06NG3L0D9wLVwYXAwAMDp0z%2F%2FLEZ6OyaOE25nwsNHjrSwMAyCuHOnvJznAW7eLCxsygWRNWlVVAiDe319e%2FaUSAyBTKP55RfzGmZg3lgTrJeXULM6e%2FbyZb3eUJNhLly4dk2vNwyWcHLq1ImQhptM2wtLZ0N9c9XVwu2lufTdtbYPSewakLmlv836wDoeBwcnJwAAOztHx4e9bmVlbQ1gaEJELSGRcA985wgRGgGb2hTI9uN54bLJzieVSiRYE2u%2B%2Fv0fHKxx7tzVqw%2B70GdmXrvG84YaGesTQ0hMLa6B7dhx5Up0tOGvseLi556re2c2efLx4%2BPHA5w5c%2BdOSophe3U1z4vbndqzp48PgKGPq0sXZ2chB3l5AIaaV48effoAAKxYsX07AEBVVUUFAMDRo0JTI%2FozrIkwLi4pqbra0KfC7vw9PV1cOE4YxfdnNTH2PJW9vbU1IQCZmcIF99ixtDRzaMrtKNhweV9fIYDduyf0dbEabUNYEyMbrXjy5Pnzen3DgyXQg8SuQT1q6W%2B3QRxabW1teTlAaWlNzZ07Yme7rsjI118HAHB29vAAMDQpzp377LNCysvKAAxNi9279%2BoFADBr1rvvAgD8%2FLNGAwDA8%2B3RRMEGMbDh8ExHGczA%2BiaKioTnpVgAk0iaNr5NInkwp4WFd%2B7ghbP5evf28JBIDA8CFxQI5ditm6Pjn30OZWXCaEv2AHffvp6edZseEWpPOAoRPv30zTcBAGQyoW03Lm7TJgCAnJzMzLr7sT6yZcv%2B8x8AgFWrhD679glcxoxH47X0wWax6PUPhh1WI2gMm1mBodTcHhDoGAYM6N1bIjHMSLFv388%2F19Q0%2FXGLyMjRoy0sAAIChEEd6enCYxD4afw5c3uOytTpb%2B8aWpsFsDffPH361VcN%2F1%2B9WlGRk9N%2BGWs6Nopw9eq66a0vL%2B%2FaNQCAhQtDQsROc8fHRosx%2FfoJDyZbWws%2FD9Y0xbCZLLy83Nzq9qJVVOh0YucFwJBu9nwbG2TC2NkJTZ5stKhYXF2dnOoOlz916tKllgSeCxeuX9frDTN29OghNO1euybuA%2BXor6XNAtjXX1%2B9GhMjdvb%2BOmprH9602PTjjetEbSsrS5ix4rHHhIDk6tqlC8cJF8K6fStMnz7du3Oc4fm17OzcXGH0ojAqUWxDh%2FbrJ5UKz1PxPIBKdfx43dGQQUHDhslkAE5OwuhLsdjZWVkBGPoOz58XRhc218WLwufHRn%2ByuSHRnzO3PqSOnn5sQnxEsOAj9hRRTcVGsyUm%2FvZbTY2hL6ahtP%2FvfwcPVlcbagpseLRYSkqEOfSOHj1zpm5KKisfPnd3SsrFi7W19WtgbO7H9sICP%2FvbUmwmCxw8g8SEAQyZhcYmiTW3SWTZbOdNrcGYy4O%2FCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEELtpdHJX9LT09PT08Wb2yEgICAgIKDlk9Rg%2BjH9mH5MP6b%2F0Uw%2FzsSBzIpEIpFIJAB6vV5fd4aLhraLRSoV5sW3sbGxsbExbGfpq6ioqBDWixPY2dnZ2dkJK1M%2FOBmxsJ%2B55KujYd8L9pepqampqakxlHdDr%2BNqBh0bBrAOyvhC2FQ8z5aWNI%2F09%2BjRo0ePHoZAUF1dXV1dDZCdnZ2dnW3Yv3fv3r179zYcV1ZWVlZWBpCbm5ubm9v%2B6beysrKysjKkn6mqqqqqqgK4fPny5cuXDdvd3Nzc3NwALC0tLesuR5GTk5OTkwNQWVlZWVnZ%2FvkwxsrX1dXV1dXVsL2goKCgoMD8Am2XLl26dOkC4OLi4uLiYtjOyr9Tp06dOnUC6NatW7du3QyvZ2VlZWVlAdy7d%2B%2BeOU1Oi5qnzQKYu7u7u7u74f%2Fbt2%2Ffvn0bvzCtxS4wfn5%2Bfn5%2BzT8%2BMzMzMzNT%2FEDm6Ojo6OhoqJmw70V5eXl5eXn9%2FVnAYhekzp07d%2B7c2bC9oePaS3FxcXFxMUBpaWlpaWn912%2FevHnz5k1DutmF19ywz8U4fazGUlRUVFRUJHYqOy5%2Ff39%2Ff%2F%2BGX8%2FIyMjIyBA7lS1Pf2s1N%2F8tuIdvGuMfqkwmkwnzjZsX1hTE7vDt7e3t7e3r78funNl%2B7A4ctYzx94Hd4LA7fWN5eXl5eXn1A4SFhYWFhYXYuTHUHHU6ne5hK5SxmhkLBObKycnJycnJkF6tVqvVag2%2FY0LMa%2B3vhmqEbHtjr6OO7S%2FfhMiadlhA8vT09PT0BLh%2B%2Ffr169cNFyYvLy8vLy%2FDhZftx5q6xG5LP3fu3Llz5wwBuSHsAmTcJ8BqZGLlo6k1QrFrjo8qW1tbW1tbw40aa5plF3rWVMpu8FjNV2ws0DLs%2B8F%2Bt8avs%2FzU1tbWirEMjLnXsDpa%2BlscwNiFsqk1K2tra2tr6%2Frb2R2pWE2L7M6eBTD2A%2B7Zs2fPnj0NX3iWX%2FYDuXXr1q1bt8QPXAwLSD4%2BPj4%2BPs0%2F%2Fvz58%2BfPn2%2B%2FO1PjvqCmlqNxADOXGlhHx2pe7PO%2Fe%2Ffu3bt3DZ8L%2B52y%2FcwlgLHrBqu5GwcmFsAaeh11bC0OYKwvwrivqyHGnazMnTt37ty5I15nPPtCX7ly5cqVKwDe3t7e3t6GC6xx4Lp27dq1a9fqjzJDf47V%2FHr16tWrVy%2FDDQNrcmNNVY1h5c4uqKxpi31eV69evXr1qti57TjYDQCrWbGmXOMbhZKSkpKSEsPv2PjzEwtLZ0N9c4293t5a24ckdg3I3NLfZn1gHQ0LVMZNawy7AJtrX15HYdyHwgaltLRvhR3X0lGZf3XGfVssUBljN5qsRmaug1DQX0uLa2Dsi97QF944UrM7Y%2BM2abGb4IybDFkgYzUzdgfH7lQ9PDw8PDwM282lKcXcsc%2BZDV9m5c3u%2FNloxIZG8TFsP3Yjwb5%2FrEkXNQ0L%2BGywFWs6ZP83hO3HRiua6%2FB6cyV2DepRS3%2B7DeJgF3xz%2B6Ibj5I0blJk6WZNiyyQsedK2PDt9grELD1sOHxHxW5kWABrag3KeD%2FjGyLUNA4ODg4ODoYWB%2FYcWkN91Qzrc2KDPlggY02PCLWnv%2FwoxPz8%2FPz8%2FPpNKMaDSlhAY31%2BrM%2FOXEbtdbQmNOP0N7UJ0Xg%2FsWvwHVXXrl27du1q6Etk3%2B%2Bmlid7nISdh%2F1u8PP4c%2Bb2HJWp09%2FeNbQ2u%2BSxJh32lw1rNTfsB8fS2VCnNPuhs0EcOJqpdYxr4qzpqqHBPuxxB3bHz5jL59DYqFy2vaE%2B1vbCZjxhTeesyba5gYf1ibF8saZdhNpTm9XAGuobQ22jtU2L7f18FbtwstGs7MLKmhSNH2hmgYvVNNkw76aOXmxrzs7Ozs7OhqY1VqNhWJ%2Bf2A%2FAG%2FcdtvR3yj4%2F49G66M%2BZWx9SR08%2FfuUeMR3lQV92x89qtI3VTC5dunTp0iXDcWLnkzUxGz%2F%2B0VCNsLCwsLCwsH4%2B27tlggV%2B9relWA0aB88gMWEAQ2ahscE95jb4hzUps6a0xuBoVYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgj91bRgBSaETEehUCgUivqz8KnVarVabZi2t6n7iS2od1DvoN6WllI3qZvUbf58kIMc5NOmQT7kQ36PHvd3XAbLYNm1a8I%2F33xj9brV61avb9wYvzt%2Bd%2Fxuc5w1FCHzgzNxdDANXchNxdwCQkcRcjHkYshFDw8ukAvkAtVq8AVf8H38cUiGZEh%2ByAGzYBbMYitvDRqkW6lbqVs5daryH8p%2FKP%2BhVKpGqEaoRuAkTQj9GQxgCLUCq3Fxz3HPcc8lJsJoGA2jBwyA9bAe1l%2B6REtpKS1dulTYO%2Fl%2BKKP21J7aP%2F00p%2BAUnGLtWlgJK2FlYCBNokk0SaMRzjt8%2BIHsA9kHsusu7IMQYjCAdXAqlUqlUrX8eKVSqVQqxUt%2FU2t85lozlHWVdZV1nT2bdqPdaLcBA8AFXMDlwgWuF9eL6zV8%2BH6yn%2BwnDa0x%2Fd13ISEhISEhR45w67n13PrffoM34A144%2FHHZd1l3WXdo6IgG7Ihe8MGsfOJkDkyWQBTbFdsV2zfsoWbwc3gZnz4ofDDvXpV7AyaSigNpaHUy4vfwe%2Fgd%2Fzzn%2BqZ6pnqmbNni50uJC7qTJ2p80svAQUKFABmwkyYuWzZnwcug4SEhISEhDt3Qj4N%2BTTk02XLOOCAg717%2BVf4V%2FhXpk6FzbAZNrc%2BgCmWKZYplkVHwzk4B%2BdefbXNymMFXUFXbN6sGaIZohkyd25bvU9jlK8pX1O%2BtnAhaEEL2vJyVawqVhW7bZtY6UFtw2QBjDpSR%2Bo4cSJvyVvylhMmyDvJO8k77doFh%2BEwHF67VvhCFxeLneGmkqfIU%2BQpXbvCGBgDY5YsEfL1%2FPP0W%2Fot%2FdZ8agJi16D%2B6ugX9Av6ha8vmUPmkDkAhBJK6OHDzT0PH8KH8CGHDnG%2BnC%2FnC0AOk8PksK%2BvqdI5%2BKPBHw3%2BaO7c1PLU8tTybt3Ii%2BRF8mJ4uMkK4v%2Fg%2F%2BD%2Fdu8O9An0CfSZN08DGtCY7ORNpyhQFCgKpk2j%2B%2Bl%2Bun%2F9eiqnciqnVPmd8jvld6WlKq1Kq9Lu3StC0lAbMF0TYhzEQRwh9Bf6C%2F2FrXg0bRpEQRREKRTy9fL18vWbNrlnume6Z8bExGyJ2RKzpaZG7AJg5syeM3vObJnslt8tv1t%2Bc%2BYI6Z43TwjADg7sBhtuwA24YT4Le3T0JsSOPgqRHCQHyUHD%2B1t%2BZvmZ5WcmGGSzF%2FbCXtPlaxVZRVYRno%2BIiIiIiJg2TTdeN143%2FtAh%2BBF%2BhB%2BHD2%2FxiX3AB3ySk8t8ynzKfKZPZ%2B9jqnQ3lWKjYqNi45gxMBgGw%2BCtW4W%2FhBA1URM1IbSCVtCKb75RuindlG7jxqnyVHmqvOPH2zudyLS4Nn%2BHaIiGaAcHeBqehqf%2F%2Bc%2B8uLy4vLikJOFOadw4sQuApYOli6XzfrqN%2FRGoxU43MhPxEA%2FxhjWwdW%2Fo3tC9MXZsc0%2FDJXAJXILhOLqJbqKbWrK2diPJjY%2BPj4%2BvqqLD6XA6XKmEQAiEwKysZp%2FoIByEgxcvSl6RvCJ5JSzsKDlKjhKdztTpbYwyWZmsTPbxEQJWfLzw18Ki3o5ykIPc2poW0SJatH%2F%2F%2FeNQh2ayAEZOkBPkRBMu7B%2FAB%2FABxwmBQvxFyOlgOpgOlsnupwuh5iiDMii7cuX%2B%2F9thO2z%2F%2BGOhz9TRsbHDhUEcnTtzEk7CST7%2B%2BMFXd%2B5sq2SzJn2JVqKVaIOC4GV4GV4uKmr0wFIohdKCAlgLa2FtUNA%2B332%2B%2B3xv327DEn4o4cbTxYW%2BR9%2Bj7x04AB%2FDx%2FBxly6NHhgEQRDk5MSOC44LjguOc3Vt7%2FQj02j7C3YsxELs7dvEk3gSzyVLyuaVzSubN3Kk%2BpL6kvrSgQNiF4AmV5OryU1MZOli6WTpNt6%2FyYEaNQlrAjT%2B29L92ovCX%2BGv8P%2F4Y7AHe7CPjLz%2FQgEUQEG%2Ffvxl%2FjJ%2F%2BcQJoS81LEy447e3F4bHd%2BokPDf23HNcFpfFZZ08KYw%2B7NsXkiAJkk6f1j%2Bvf17%2F%2FBdftHU%2B9q3bt27fusuXqRf1ol7h4bAAFsCC%2BjUpGkNjaIxWy3fiO%2FGdQkLU89Xz1fPrBO52Mi5tXNq4NFtbKqESKtFowBZswdbbu9kn%2BuM4SS9JL0kvjSZicsTkiMl2du2dH9Q6JrsACD%2FUW7eEH0BNDfmV%2FEp%2BjYmxmmQ1yWrSpk3CDAN374qd4aYSvtAODro9uj26PfPmCU0uc%2BaQfJJP8qVSdY46R53j4dHe6TLuCzJ1H5jYgcG8ESLfLt8u3%2F7552Qv2Uv2zptnslOvhJWwMjWVVJEqUiXeg8xKhVKhVERE8F%2FwX%2FBf7NpFtpKtZCvP02gaTaNDQ9kNX3unS%2Bi7k0h0ubpcXe6%2BfeAETuAkl5vsDRzAARwOHCiLLYsti1UqhSbR2tr2zidqHtM14a2G1bD6p59oZ9qZdl61SkM1VENzcmA37IbdYmez%2BR4MuB9%2BGNI5pHNI5%2F%2F9D1zBFVxXrIAcyIEcsVOJ2gchir2KvYq9n30mNBE2IXDVQA3UnDtHn6XP0md1OnKFXCFX%2FP3Zy3QVXUVXpaeTa%2BQaubZli1u0W7Rb9PbtYg9uUqlVapU6Pl6ZokxRpnh786V8KV96546mSlOlqWr%2FwMVUTaiaUDVh9Wqyn%2Bwn%2B00YuJi7cBfuBgV1eq7Tc52eY48tvP66WPlFTYN32h3MozaVlHmPQiRE%2FrX8a%2FnXX35J4kk8if%2F73xs9xAVcwGXPHqtSq1Kr0hdewLkNEWo7og%2BiQMh8UQp%2B4Ad%2BaWmN7joTZsLMzz9Xh6vD1eH%2F%2BMf94xFCbQYDWAeDfVTtSxit9%2Fnn8qnyqfKpUinREi3RfvLJ%2FR3swA7s1q0TAteSJcJGDFwIIYTMjNJP6af0e%2F99xRuKNxRvsEl6EUIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYSQMZzRAYkqPT09PT29%2FswVAQEBAQEBhhlHmrqf2E6POD3i9Ihu3ST7Jfsl%2B5cvJ%2FbEntiHhpJIEkkie%2Fak2%2Bg2uk2ngxiIgZiTJ2kQDaJBmzcPGDhg4ICB8fFipx%2BhjsRsfvioaRq6kJtKeweERyWApXdL75bebfhwYTmUffvor%2FRX%2Bquzc5NPcAAOwIFdu6yuW123uj5jRp9NfTb12XTvntj5Qsic4VyICLVCRveM7hnde%2FWiJ%2BgJeiIhgZbQElrSuTMsh%2BWw%2FPBhEkpCSeh775EfyA%2Fkh99%2FF47q0kVYCTw8HA7BITi0ejX9jH5GP3v%2Bed1l3WXd5YoK2ASbYNOsWWLnDyGETIbVRNjf1jI%2Bn9j562iEmld8%2FP1yfD79%2BfTnd%2B8WSpdrdMXzjHkZ8zLmDRwoBMKKivSd6TvTd%2FL8ucnnJp%2Bb%2FMQTYucPIXOGNbAGBGcEZwRnjB4tHScdJx1XXa3KU%2BWp8o4fFztdyDwIAcbOjp%2FIT%2BQnKhQkjISRsNpayS3JLcmt%2BfMJIYQQnm%2FsPP6b%2FDf5b0pLS1%2Bevjx9%2Bb%2F%2FDQEQAAFvvcVv5jfzm6dOFfY6ebK16c0YmjE0Y2h0tNAH9%2BqrbVYwKZACKZs3B8wMmBkwc%2B7cNnufxvIbkBGQEbBwIX2NvkZfKy8PmBswN2Dutm1ipQe1jVYHMHmKPEWeEhcn%2FDdiRJMPnAWzYNaxY5ozmjOaM88%2FL3ZBMBGTIyZHTLaw0CXpknRJH37In%2BPP8edqagKfDXw28Nlnn009lXoq9ZR4K%2BYay8jIyMjIEDsVfz36fvp%2B%2Bn7e3mQYGUaGWVrCPbgH99LTfat8q3yr8vKaez4SS2JJ7MGD9AX6An3hrbfgbXgb3vbzgyAIgqDWp7f%2Fyf4n%2B5%2BcOzdjS8aWjC3dusFwGA7Dw8NNViBjYAyM2b3bv9C%2F0L9w3jxhfTSTFnmTCDcC06bRABpAA9avh3RIh3RKM4IzgjOCS0v9E%2F0T%2FRP37m3%2FlKG20PoaWCiEQug%2F%2F0nGkrFk7MGDdAFdQBfIZA3tTj4nn5PPa2qIFbEiVu%2B8I3YBGNMt1y3XLZ8xQ2gC8vKCHMiBHAD3me4z3We%2B9JIQwLZuFTudjL%2B%2Fv79hofrmEzsAdtRBHLSKVtEqSgkQYSTUUBgKQwmBm3ATbrbghNtgG2yrk49jcAyOma5Jl9UIf%2FX41eNXj2nT7EvsS%2BxLDh2iJ%2BlJenL48BafeA2sgTXJyXaFdoV2hdOnN7XmaWpCjXjMGD6MD%2BPDtm4FG7ABG0KEGi0hkAZpkPbNN0IAHzfOf7b%2FbP%2FZ2KLS0TXaRt8YTa4mV5OblUW30%2B10%2BzffNLa%2FEOC%2B%2Bkr1m%2Bo31W%2FZ2WIXADOh%2B4TuE7p36QIjYASMePPNeun%2Bin5Fv1q8%2BP5%2B6C%2BtZmrN1JqpOTlkKVlKllZVwVk4C2f79Ttvfd76vLWbW3PPR5NoEk0aO5b9T8pJOSk%2Fd87U6R6eOzx3eG5VlWy9bL1svVIJ62AdrMvKau55SDgJJ%2BEXL0qHSYdJh4WFeRNv4k10OtOX9J87a3fW7qydjw8%2Fk5%2FJz4yPFwKXhUW98l1D19A11ta0kBbSwv372XHtnV5kWq0OYIz1FOsp1lPWroWe0BN63rlj%2FDp5h7xD3ikpsf7Y%2BmPrj%2BusaGsmZNdk12TXFi2iP9Of6c%2BdOtXbIRqiIdrBwSLWItYi9q23xE4vEldOTk5OTs69e8JzXLm5dB%2FdR%2FdJpbWhtaG1oRs3NncQh9CE%2BPrrrMmL5JN8kv%2Ftt22Vfp8onyifqOJicogcIoeCgshr5DXyWlFRowdagRVYFRTolXqlXhkU5Dvfd77v%2FNu327n4%2F2gqdHHhvDlvzvvAAegBPaBHE24slaAEpZMTO06oubm6tnf6kWmYvOlFkapIVaTOmSP8gFeuvP9Ga8gasubtt9Xx6nh1%2FI4dYmecEfrw%2BvWDG3ADbvz0E3iCJ3hKJA0ecANuwA29XvKJ5BPJJxMm7E%2Fen7w%2FOTOzvdJr3JRm6iZEc3muylxdoVfoFWplpY3Txmnj4uPBD%2FzATy6vt6PRMHp%2BGD%2BMH5aZySfzyXyyjY20VFoqLQ0NfXAYvYMDXIbLcHnr1oCwgLCAsPYbRi9cyEeM4N15d979p59gNsyG2VZW93cohmIo1mqpE3WiTqNGDRgwYMCAAamp7V3%2BaYvSFqUtsrXlorgoLurIEdCBDnRDhrT0fGQUGUVGpaaS0WQ0GT1qVP%2Fd%2FXf3363Vtne%2BUMuYfBTirdm3Zt%2BavX27W5lbmVvZ9OnEkTgSx%2BpqK28rbyvv2FixM1zPalgNq5cvFzrN%2FyRwMX8EOL1Wr9Vr33tP2Gg%2Bg1BQ27jw5YUvL3xpb689rj2uPa5SCYFr1KgGD%2FgIPoKPxoyhQIHCmDGsr0zytORpydMAwnYAUIACFGD0IPPrr7d3%2FoQLd3Ly2bSzaWfTXnqJ7CQ7yc5du0gciSNxPE9v0Bv0xpQpA6oHVA%2Bobv%2FAFRcXFxcXJ5FwlKMc3bWrtYGLoUfoEXokMBA2wAbYEBeXRJNoElUqR5PRZDSprW3vfKLmabM7bUWBokBRMG6c8MWvqtIM0QzRDElOFjvDHR3WwNoXC1w1%2FWr61fRTqcABHMDhTwIX4w%2F%2B4H%2F0qPBAsocHhEM4hDs5sZfJCrKCrPjtN%2FoUfYo%2B9e9%2FC8POExLEzi8jDHZYskQIsHfu%2BLv6u%2Fq7btkiVnrS%2B6b3Te%2B7Zg3sgT2wZ8mSNnujlbASVv7nPwF7AvYE7Gn%2FGwnUPHih6mBwKqn2SW%2FK7ym%2Fp%2Fzu4GD5quWrlq%2F%2B8AN8BV%2FBV8OGNXrgYTgMh99%2BO2BhwMKAhR991F7liNBfkckGcSD0KMm5knMl54pWS14kL5IXL19uaD%2F2ADN4gzd4v%2FQSBi6E2g%2FOxNHBYBNf%2B4iMjIyMjNTrhb6Xl17yG%2Bk30m%2BkVEqP0WP0WGQk9IJe0Kumhn5Pv6ffT58eYBdgF2DXdqMGEUIIoRYRRulZWNyf%2B3B7%2Bvb07SEhYqcLIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQshctd1yKkk0iSbNmXP%2FjUaT0WR0TIw6UB2oDoyJaa8MPkOfoc9QqdThuMNxh%2BPW1qoRqhGqEeXl7PVQGkpDqaOjfox%2BjH6MUgm5kAu5o0ZBBVRAhYcHPUwP08NSqbDA4O3b8Al8Ap%2F89puwYq5azRb0bK%2F8GFM%2BqXxS%2BWTv3nwZX8aXRUTA1%2FA1fP3UU8IKv926wd%2Fh7%2FB3SiELsiCroIBaUStqdeyYNEwaJg3bs2c%2F2U%2F2k6tX2fkiIiIiIiKsrbWntae1p2WyA9kHsg9kl5WJlT%2BEEGrIIx%2FAFImKREXik08K6xstWFBrXWtdax0VJR0lHSUdNXEi7U17097z5oEUpCC1sWnyiWfADJhBKU2kiTTxhx%2B007XTtdM%2F%2BOAoOUqOtuHKtBGTIyZHTLawqFpWtaxq2Ztvkn%2BRf5F%2FhYfTkXQkHdn4AooMOUaOkWM8T8fT8XR8fDw3iBvEDYqO5v%2FO%2F53%2F%2B4YNwsq2iYmaM5ozmjO7d7c0vfJ18nXydSkpbVUejdEs1izWLG79shsIIfPTygBGiHyufK587ocfwmPwGDw2fnyTD90G22Dbnj2aTE2mJrPtJj8NKQkpCSlZsoRsI9vItshISIVUSL1yBTbCRtjo5QU7YAfsaP3cguQgOUgOpqfXZtdm12ZHRQk1l3v3TJWPwMGBgwMHy2Sum103u27euJH8TH4mP7f%2BwszFcrFcLKV0KB1Kh167RvvRfrSflxeJITEk5pdf1JfUl9SXFixo6fkxgCGE2korJ%2FOl1LrQutC6cOXKyoWVCysXdu9O1ERN1H5%2BDR7xNH2aPp2SYnPC5oTNibVrIRMyoc3WMyaE5JAckjNy5P1NgRAIgd7eQlNaYSE3mhvNjXZ2FlaQzskhu8lusvvrr%2BlkOplOPnuW2lN7aq%2FX0%2BV0OV3eqxe3i9vF7XruOfgcPofPn376fr6epc%2FSZwMCJGGSMEnYsmUQBVEQtWqVqXLi%2Bq7ru67vLljQYOBKgARIOHpUckVyRXIlLq5aWi2tlp4%2Fz16WhcpCZaGDBtFz9Bw9N3MmvUlv0psDBvCBfCAfWFAA%2FaAf9PPyup%2Bfx%2Bhj9LEhQ%2BQ75TvlO21shPXcKiubm24MIAihtmKyJsTguOC44DhXV2HF1NhYuAE34Ebnzvd38AAP8MjN1b%2Brf1f%2F7vTpbd23Euwe7B7s3rcv9yb3Jvfmzp0N7Ucfp4%2FTxy9ftom2ibaJnjEjPj4%2BPj6%2Bqqqx8yvtlHZKu%2FBwfiW%2Fkl%2F59tv3X%2FijaZEsI8vIshkz1F%2Bqv1R%2Fee5ci%2FMRHhweHN6zJ%2BfKuXKucXFCTdewcjSNolE0av36BLsEuwS7%2F%2F63aWeVSuVfy7%2BWf%2F3FF1AIhVA4cGBDexJLYkkslyxRz1fPV88%2FfNjkHxRCCLWQyZZTSYxMjEyMzM9XJiuTlcnLl%2FNH%2BaP80X%2F%2Fm%2FyX%2FJf8t6ZGb6u31du%2B9daBWwduHbjV9oMCOBWn4lQjR8IROAJHGt6PnCanyelevaqWVi2tWrp8OcRDPMSvXCm8yvMNHafSqrQq7d698kx5pjzTz09YYj4sjDVJ8lv4LfyWiAj4Er6EVgQw7m3ube7t0FAhH4bABY7gCI6HDjUvcBGiGKIYohjy9tu0kBbSPwlcDJVRGZWxmmbzAxg2ISKE2orJF7QURvmlpAij3zZsIL7El%2Fh%2B8EHircRbibcuXWrqeYJ6B%2FUO6t2pU0vTQd4h75B3nnqqsf1oX9qX9i0pgTEwBsZYWSk2KjYqNvbs2dT3oUvpUrp0%2B%2FZ673%2BX3CV3m7CCb2P2wT7Y98QT9d7XglpQi9jYpp5GniJPkac4OfE%2F8j%2FyP%2Bp04AZu4JaVxQZzNJg%2Fd%2BpO3Vk5Nn2QCEIItbVGmhAJEe6gf%2F%2B93VP2R1Ocpqumq6br0KFNPWxc2ri0cWnOzpZPWj5p%2BaRGA0VQBEUXL5IgEkSC0tJ4e96etz9zRhi9d%2BaM0LdTXNza5Mo%2FlH8o%2F%2FD778ESLMGya1eWfuso6yjrqKeeit8dvzt%2Bd3V1s8%2F7rfxb%2Bbc%2F%2FcSaZFnAsbK0srSyHD5caPLU61uabuExAysr23jbeNv4fv3ICXKCnBg4kHxEPiIfDRok1MAef5yMIWPImIULNUmaJE1SWlprywshhFqrkSZESkVL2VW4ClcNz2s1OUOTpJOkk3Q6vYfeQ%2B8REnLA7oDdAbuiono7JkIiJJouueQ8OU%2FO8zwdRAfRQQCsKVF7RntGe6YVoxyjIRqiCYEQCIE2WD7xwWH%2FZ87c%2F%2FsJfAKffPWVUBO2tBS2s78IISS%2BNluaXnFccVxxPDSURtJIGllTIzzwm2jCkGEews6HnQ877%2BSkX6pfql964AB7HosqqIIq7t5N8EnwSfAZO7al55e%2FI39H%2Fs433wh9Xv36se3UmTpT5xkzEl5KeCnhpYwMscuhwfSbqA8M%2B7IQQsZM3qch9LUMHkwtqSW1XL4c9sN%2B2P%2Fee2y72Bk2tRquhqvhpk41fpCYm8RN4iaZoOk1DMIg7ORJ483cWm4tt3baNLHzjxBCYjFZDey5xc8tfm6xs3P1yOqR1SO%2F%2BYZcIpfIpS5d2OtssAQ3jBvGDZs%2BXe2idlG7FBSIXQAtJQTkESOEB7I%2F%2BcR4eDvxI37Eb948dbA6WB3822%2Bte58ePYT3iY%2Bv9z6ryWqyesMGdYm6RF3S9EEdCCHU0bU6gLGpjXRanVan%2FeIL9kBvgwcsh%2BWw%2FOLF8ury6vLqV15p66mXWovNgOHyo8uPLj%2F27s1d5a5yV0ND4Wl4Gp4OD4f34X1431DzMtUMFsbkU%2BVT5VPffFN4EPuFF4xfZ%2B%2FLz%2BJn8bPi42UKmUKmyMzc57vPd5%2Fv7dtilyNCCJlaqwNYvamamvrGu8guskulUqeoU9Qp%2F%2FqX2AXRECFwxMezGTwazM9aspasvXmTK%2BAKuIIZM4RJcktLTZUONimx3Um7k3YnN21qbCop8j55n7yv06nvqu%2Bq744YIXY5IoSQqbX6QeaELgldErqsXSv8t3atuU3m29bY1FhCfpcvVxM1UZswcDFCTbW2VqjxLlig26Pbo9vz1lu0iBbRIsMD1GKXB0IItReTzcTxqCOxJJbE1tRAFVRB1e%2B%2F8xf5i%2FzFvXsTSAJJIEeOtFc6Hnye7MMP5VflV%2BVX9%2BwR5pScPJlUk2pS%2Fbe%2FCXM32tnBMlgGy8QuPYQQQu1OGETRjGVWEEIIIYQQQgghhBBCCCGEEEIIIYQQQggh1EpsMl%2B5h9xD7hEcLHZ6EEIIPVpM%2FuDrg5P2%2Fuc%2FD746d66w%2FtapU2JnHCGEUMf2yE%2FmGxERERERwSa%2FtbAQFoCsqmKvP7jys58f15fry%2FX19CRJJIkkOTrSMXQMHUOI8KBwZSXtQrvQLgUFZCfZSXZmZgrLpeTmtnU%2BGsIW8JRJZBKZpH9%2F4kW8iJe7O0yBKTDF1pbtR54gT5An7t4V1hXLza0JqwmrCcvM%2FOHmDzd%2FuFlSwvZjU1bZ9LHpY9NHIjmQfSD7QPa9e2LlDyGEGvLIT%2BZ7fzb3BEiAhOHDrTOsM6wzVKqKiIqIiggfH5gEk2BSYCBREiVRGmZ5b7J5MA%2FmXbumnaidqJ149Ghb5%2BfBAPPUU5wP58P5%2BPg09zzkMDlMDlMqLPyZnp61IGtB1oLTp%2FtW9K3oWzFxIt1Kt9KtWVlCAMvMbHH5z5XPlc89ccJ4Fn1TKV9Uvqh80ZNPsqm2TH1%2BhJD5avV6YJUxlTGVMf%2F4R6OBi%2FkIPoKPfHw6De00tNPQJUvaOoP0MD1MD%2FfsSU%2FSk%2FSkg4N2sHawdnBEBORCLuQOG9biwMVsgk2wqWdP%2B8ftH7d%2FXC5%2FcAVj02E1Sftl9svslwUFtTRw3S%2BXP2qW0nxpvjR%2F4MB%2B3%2FX7rt93U6aQZJJMkl1cYCWshJU9e5o6HwghZCom7wMzt8l8Q7xDvEO8p00DP%2FADP8OUUELAJYQG0SAaRAgJIAEkoKiIjCfjyfjTp6tXV6%2BuXl1QIJ0knSSdVFsrPS49Lj3u6Mg78868s68vyEEO8r59jd%2BP5tN8mn%2FlSmJqYmpi6k8%2FmSofQceCjgUde%2Bopbg23hlvTv3%2B9Hf6oCQo1nYwMPoQP4UOKiyW7JLsku1iA7toV4iEe4gcO5F15V97V3Z0cJAfJQUrr5UNFVVSl13eP6h7VPerrr2O2xGyJ2VJT016fG0IINeaRncxXqAl16wY%2B4AM%2B9ecyZBduqqM6qquqKggoCCgIUKlSE1ITUhNqaoQmxzoHuIAL3O%2BzKygICQkJCQm5fl1oihs7ltVoiCtxJa7e3spkZbIy2d1dNUI1QjXi1q2W5iOUhtJQ6uiot9Hb6G38%2FIT3qbPDFJgCU375JSEoISghKCOj3gmGwBC4v%2BjK9evC3xs3QoJDgkOCJ08GAgRI5871yuePmmnexLyJeRO7dxe2Xrki6oeKEEJ1PLLLbwRdCLoQdGHIEG4Rt4hbxEZF%2Fok%2FajBDJg6ZOGTiTz%2BtIqvIKsLzjR0mrBc2fDgto2W0zNCEyk3kJnITs7PV89Xz1fMPH25pPoKXBS8LXjZsGEkn6SR94EC2vaU1PcUQxRDFkGee4V14F96lCU2QGtCA5tKl9pp1X75Ovk6%2BLiXFVOfTLNYs1ixueN00hFDH1eo%2BsLby4OjA5iNdSVfStUePxvajPWlP2rO0lG6hW%2BiWqqozcAbOQDPedxEsgkVpacab9Un6JH2Sh0erC2IxLIbF9c%2FDfcF9wX1x%2BnRTT8Nm1a%2F9tPbT2k9ra0kuySW5JSVsMEeD5TOJTqKTPD3%2FKNVH9oYHIdTxNHJBIkS4I%2F7993ZP2QyYATMo1XTVdNV0HTq0qYcJTXf29nq9Xq%2FXR0RAJERCZEGB0JSWnw%2BfwqfwaX5%2B%2FtT8qflTCwtTT6WeSj3V%2Br6dEG2INkT74ovGw9e1Gq1Gq9m2raWj5EIWhSwKWfTyy3ABLsAFS0sWcDRVmipN1datwl6N1xQbwkY12sbbxtvGd%2B0qbHV1ffjf779PjEyMTIzMz29teSGEUGs10gfW8J15m7sKV%2BFqeXlzD7P8zPIzy8%2Fu3evcuXPnzp1jY2MKYgpiCur0aRn3bZk5OowOo8MIIRfIBXLB9Od%2FMLCywGQIUMbPhYldHgghxGCTUCuxpjm6gq6gK6ZNY9upJbWkllVViXsT9ybujY1t6fmDi4OLg4vDw8nL5GXyMqshAQgrQn%2F3nfCcVlGR2OXQWuwxgaphVcOqhp040eITvQvvwrs8L9RQn3hC7HwhhNqO2faBdRSkkBSSwgEDjLdzrpwr59ry0YcMfZI%2BSZ%2Bsfx7JeMl4yfj674sQQn8Vj%2FxzYG1FmKS4Tx8ogRIoGTXq%2FpRTf5AslyyXLNdoWjuMXhiu37mz0Pc1ebLx%2B5BKUkkqT5zQJGmSNEn1B5MghNCj6pF9DsxU2FRZFZEVkRWRXboID0T7%2BtKldCld2qeP8f5seHtrAxeTkJCQkJBw506IVYhViNW5c8JWf%2F%2F772dDbajNsGHBccFxwXFublJ3qbvU%2FezZmhk1M2pm3L6NcxkihB5Vra6BKWIVsYrYt9%2BmBbSAFoSHN%2FnAN%2BANeOOHHzQSjUQjeecdYaOIg0YaEDw3eG7w3MhIco1cI9ccHRvaj35Fv6JfFRfbRtlG2UZpNPG743fH766uNlU6VtAVdAXluBTXFNcU16AgYVTlnwzTXwJLYEltbcIzCc8kPLNtm1jlh891IYTaSqv7wKxUVior1Zo18Dq8Dq%2BnpjZ6wC%2FwC%2Fxy7pz1FOsp1lNWrRI2ml%2FgaipW42qrwMWwB6ttRtqMtBn5%2FffCIJELbTAuESGEOgaT9YFN6D6h%2B4TuXbrIxsrGysbGxkIABECAi8v9HWbBLJhVVATZkA3Z06cL64IVF4tdAI2RD5IPkg%2BaPFmfrE%2FWJ1tYcJFcJBdZWMhf4i%2Fxly5cEJrobt4UK32KAkWBosDFRV%2BkL9IX%2BfmRU%2BQUOeXiQq2oFbWyshKe29qxQ%2BxyRAghUzP5IA7hQWIfHz6Pz%2BPztm0jH5APyAccBz%2FCj%2FDjq68K64CdPSt2xhFCCKGHEkbpBQcLk8ZGRIidHoQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIoUdPs%2BdCDOod1Duot5%2BfZJdkl2TX3%2F5GxpPxZLxhvSl9tD5aH52eLnlG8ozkGZ4noSSUhLq7U3%2FqT%2F1v3KBRNIpGDR9ufBydTWfT2aWlEAEREJGVxek4Hafr21dYV0ulMk6HYpZilmJW%2F%2F7G56MD6UA6kBCyi%2Bwiu86c6ehzLyrtlHZKu%2FBwepleppezs1l%2B5CnyFHmKjY2w1wsvCOX17beuX7l%2B5fqVTpdXmleaV%2Frii8K6ZbduCZMn%2F%2FgjO69wfL9%2BTS1n4kk8iaeXl2qFaoVqRUKC8CrHCQuYzppVO6V2Su2UXbuko6SjpKM8PRv7nDVrNGs0a9RqscsXIdRxtXxBy3iIh%2FiCAnWJukRdUudCFAmREMlmSa%2B%2F5D2XwCVwCXl5qhJViaqEXQgBYA2sgTUA8gh5hDyiX7%2BmJsP4fEE3gm4E3ejUSbZYtli2ePJkYZb8mzd%2FuPnDzR9ulpSIXeDNxR%2Fhj%2FBHMjO5WdwsblZAgLD17Fl4C96Ct%2Fr0Ibkkl%2BTm5qouqS6pLpWXh34T%2Bk3oNwEBNJ2m0%2FTbt7kN3AZuQ%2Ffuz459duyzYx0cDh46eOjgobt32zrdjX3OCCHUWi1fDywCIiDCxUXRRdFF0WX6dPZXmI3e3r6hw%2FgQPoQPcXMzPk6RqEhUJD75ZGszJCxvUlYmrJel1UoHSgdKBza8EKW5Kw8sDywPzM4WlkextWXLp5BepBfp5eOj99f76%2F0zM4W9CeFlvIyX%2BftLaiQ1kpozZ8AZnME5O9tyguUEywn1byjaSlt%2Fzggh1PIA9kANLDaW%2FRWaosrLG3zDP%2B7MjY9TB6uD1cG%2F%2FdbaDI1LG5c2Ls3Wltwj98g9OzvZOtk62bq2r3G0laPkKDlKams5T86T87x0CQbDYBg8YoTQRCeVJu5N3Ju49%2Fr1kJCQkJAQb286g86gM%2Bzs%2BB38Dn7HqFH8Kf4Uf8rLi7PmrDnrvn0jIiIiIiKsrZv6%2FvQAPUAPVFeDDdiAjb39nNlzZs%2BZLZOF0lAaSjt1YvtVZlVmVWYZFvJs688ZIYRa3oTYQvfvzDcoNig2TJ%2FOttOFdCFdyC6AaWm8FW%2FFWzk7szt3th%2BxJJbEMieHAgUKpaX1zjcaRsNogNro2uja6FOnEn0TfRN9b98Wu6Bb7RP4BD7JzIQX4UV40d8fKFCgKSl%2FlB4lq8gqsmrAAKiESqg8eVKdpE5SJ6WlQRIkQRKA%2FAn5E%2FInFApdua5cV%2B7vLxxXXt5YObsGuwa7Bp88mb8nf0%2F%2Bnl698vvk98nvM306jaSRNJLn%2BQ%2F4D%2FgPzpwRAq1OJ%2FSZNf45a1ZoVmhWfPut2MWKEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEKo3f0%2FYCcRj5nKHu4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTMtMDItMDlUMTk6MzI6NTMrMDE6MDCs99SeAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEzLTAyLTA5VDE5OjMyOjUzKzAxOjAw3apsIgAAAHl0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9qb3MvRHJvcGJveC9Kb3MvcHJvZ3JhbW1pbmcvamF2YXNjcmlwdC9qc29uZWRpdG9yb25saW5lL2pzb25lZGl0b3IvY3NzL2ltZy9qc29uZWRpdG9yLWljb25zLnN2Z2GG7LgAAAAASUVORK5CYII%3D%29%3B%0A%20%20background%2Dposition%3A%200%20%2D144px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Evalue%2Eempty%20%7B%0A%20%20background%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAANgAAACoEAYAAADSkvxvAAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA%2BUO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAANtZJREFUeNrt3XlcVFX7APDn3JlhR1CUVRRyQRDURDPfzFxyAWYGQsEsLX1TI3N5S3PprdS3svRnmen7SphL0etroKYzA7aoqGGlgYogLiCuyCoiDDACc8%2Fvj9txcJDYBu5gz%2FcfPty59845Z2buc89yzwFACCGEEEIIIYQQQgghhBBC6NFCGtvByWnvXgBKxUrg7dvh4QCk0XQ2hNLAQDHTT0hqamvSv3nzvn06nXjpf%2B21sDArK0w%2Fph%2FTj%2Bk3v%2FRLxUoYQg9jYSGTAQBUV9fU1N1uaSlsv3fvwe1isba2tCQEwM3Nyanuz%2BvevepqAIDc3OJinjds9%2FR0duY4AJlM%2BsBvju3HjkPNw74XlpYWFnU%2Fh4qKqipKAaRSobwtLWWyuq9rtcLrPF%2F3U0IdDQawDkomk0pbcl9VU1NbK9791IPpBwCYOPGJJ2QygG7dHB05DqCsrLKSUoDdu48cqXtJj4wcM8bCAkAq5TgAgKtX8%2FN5HiAp6fTp2tr2T3%2FXrg4OhACMHz90qHAJFRQW3rnD8wB79x47VvfS%2BNRTAQFSKYCjo51d3c%2Ftu%2B%2BOHaupASgoqK42h0upVCqRAAD87W%2F%2B%2FnVD7YkTmZm1teZzA8H4%2B3t7SyQAQ4f6%2BtZN7549R49WVwN4e7u5SSQAgwf37SvkTPDtt4cPV1cD3LlTXm4OvwfUMm0WwNasGThw0yYAmYzjZDKAmJjLlz%2F%2FHODChbKyc%2BfEznbHxQLXK6%2BEhFhYNP%2F4rVsTEqqrxQ9kfft6ekokAB4e3bpxHEBpqVZLKcD16wUFD7uQX7mSl8fzAN7erq4cB%2BDj06OHRAJw%2BfKtWzzf8HHtJS0tO1uvB7h06cYNvb7%2B6wcPpqTU1AD4%2BXl5SSSGv%2BaGfS7G6SsvF24sTp%2FOynpY%2FlDTREWFhlpaNvx6dPT%2B%2FffuiZ3Klqe%2FtZqbf66tEjJtWs%2Ber7wC8NJLXl5z5gB4eFhbe3q2XcZbrmtXNzcAgJ07T58GABg5Uql82H6PPebnBwDw7bfp6QAAvXsHBIid9vooFcJSQ3%2FNha3tgy3bGRk5OXo9wMmT588%2FrEaVnHz2bG0twMWLN27UDVT29jY2LW%2FhN527dysqKAW4fbus7GElXVx89y6lhkBgrvz9H3tMIgEoLCwtpRTg5s2iIp4H6N9fqOlwnDmUtkFV1cObXllNUaerrn5YeWOT7aMBmxDhzTc%2F%2FRQAoG%2FfQYMAAD76aNcuAIBFi8LCAABu3MjOBgDYuPH77wEAXFyEQLx27e7dAAAREf37AwDo9WI0ZTExMWr1vXsA1tYP9gUYI0R41cLiwSbI6ur2rZGxdDT3%2FY1rjsbnQS3j4dG1K8cBdOlib0%2BIoWm2urqmhlKACROEpt6ePYUaMKsRi624%2BO7duumorRXqh%2BxGgd04MCygVVbeuyfGjYS517A6WvpbHMCcnCwtu3UD6N7d2rpHj%2FqvE0IIV6d%2BFxDg4PD44wC1tZTWvdAXFOh0eXliNi2uW7dwIQBAnz4DBwIAeHv7%2BgIAfPrp%2Fv0AAHfvlpQAAHTr5u4OAFBZqdUCALz%2F%2FqxZAGIHLsbKSghc06dPmNCSpsVt24SmxfYKZJ07P9gX1NTOdL3%2Bwf2M%2B5RQy7CaF7vAX76cm6vXG8qbBQS2n7kEsJISocbL%2Buh0OqFmxVociotLS3ne8HplpTldflFrtTiAKRTu7pMmAaxbN2jQ5s2N7%2F%2FOO%2F37r15df%2Fv%2F%2Fnf9%2Bo4dAPPnp6bOnClGEZSUFBYCALz22tixAAAxMUeOAAD06NG3L0D9wLVwYXAwAMDp0z%2F%2FLEZ6OyaOE25nwsNHjrSwMAyCuHOnvJznAW7eLCxsygWRNWlVVAiDe319e%2FaUSAyBTKP55RfzGmZg3lgTrJeXULM6e%2FbyZb3eUJNhLly4dk2vNwyWcHLq1ImQhptM2wtLZ0N9c9XVwu2lufTdtbYPSewakLmlv836wDoeBwcnJwAAOztHx4e9bmVlbQ1gaEJELSGRcA985wgRGgGb2hTI9uN54bLJzieVSiRYE2u%2B%2Fv0fHKxx7tzVqw%2B70GdmXrvG84YaGesTQ0hMLa6B7dhx5Up0tOGvseLi556re2c2efLx4%2BPHA5w5c%2BdOSophe3U1z4vbndqzp48PgKGPq0sXZ2chB3l5AIaaV48effoAAKxYsX07AEBVVUUFAMDRo0JTI%2FozrIkwLi4pqbra0KfC7vw9PV1cOE4YxfdnNTH2PJW9vbU1IQCZmcIF99ixtDRzaMrtKNhweV9fIYDduyf0dbEabUNYEyMbrXjy5Pnzen3DgyXQg8SuQT1q6W%2B3QRxabW1teTlAaWlNzZ07Yme7rsjI118HAHB29vAAMDQpzp377LNCysvKAAxNi9279%2BoFADBr1rvvAgD8%2FLNGAwDA8%2B3RRMEGMbDh8ExHGczA%2BiaKioTnpVgAk0iaNr5NInkwp4WFd%2B7ghbP5evf28JBIDA8CFxQI5ditm6Pjn30OZWXCaEv2AHffvp6edZseEWpPOAoRPv30zTcBAGQyoW03Lm7TJgCAnJzMzLr7sT6yZcv%2B8x8AgFWrhD679glcxoxH47X0wWax6PUPhh1WI2gMm1mBodTcHhDoGAYM6N1bIjHMSLFv388%2F19Q0%2FXGLyMjRoy0sAAIChEEd6enCYxD4afw5c3uOytTpb%2B8aWpsFsDffPH361VcN%2F1%2B9WlGRk9N%2BGWs6Nopw9eq66a0vL%2B%2FaNQCAhQtDQsROc8fHRosx%2FfoJDyZbWws%2FD9Y0xbCZLLy83Nzq9qJVVOh0YucFwJBu9nwbG2TC2NkJTZ5stKhYXF2dnOoOlz916tKllgSeCxeuX9frDTN29OghNO1euybuA%2BXor6XNAtjXX1%2B9GhMjdvb%2BOmprH9602PTjjetEbSsrS5ix4rHHhIDk6tqlC8cJF8K6fStMnz7du3Oc4fm17OzcXGH0ojAqUWxDh%2FbrJ5UKz1PxPIBKdfx43dGQQUHDhslkAE5OwuhLsdjZWVkBGPoOz58XRhc218WLwufHRn%2ByuSHRnzO3PqSOnn5sQnxEsOAj9hRRTcVGsyUm%2FvZbTY2hL6ahtP%2FvfwcPVlcbagpseLRYSkqEOfSOHj1zpm5KKisfPnd3SsrFi7W19WtgbO7H9sICP%2FvbUmwmCxw8g8SEAQyZhcYmiTW3SWTZbOdNrcGYy4O%2FCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEELtpdHJX9LT09PT08Wb2yEgICAgIKDlk9Rg%2BjH9mH5MP6b%2F0Uw%2FzsSBzIpEIpFIJAB6vV5fd4aLhraLRSoV5sW3sbGxsbExbGfpq6ioqBDWixPY2dnZ2dkJK1M%2FOBmxsJ%2B55KujYd8L9pepqampqakxlHdDr%2BNqBh0bBrAOyvhC2FQ8z5aWNI%2F09%2BjRo0ePHoZAUF1dXV1dDZCdnZ2dnW3Yv3fv3r179zYcV1ZWVlZWBpCbm5ubm9v%2B6beysrKysjKkn6mqqqqqqgK4fPny5cuXDdvd3Nzc3NwALC0tLesuR5GTk5OTkwNQWVlZWVnZ%2FvkwxsrX1dXV1dXVsL2goKCgoMD8Am2XLl26dOkC4OLi4uLiYtjOyr9Tp06dOnUC6NatW7du3QyvZ2VlZWVlAdy7d%2B%2BeOU1Oi5qnzQKYu7u7u7u74f%2Fbt2%2Ffvn0bvzCtxS4wfn5%2Bfn5%2BzT8%2BMzMzMzNT%2FEDm6Ojo6OhoqJmw70V5eXl5eXn9%2FVnAYhekzp07d%2B7c2bC9oePaS3FxcXFxMUBpaWlpaWn912%2FevHnz5k1DutmF19ywz8U4fazGUlRUVFRUJHYqOy5%2Ff39%2Ff%2F%2BGX8%2FIyMjIyBA7lS1Pf2s1N%2F8tuIdvGuMfqkwmkwnzjZsX1hTE7vDt7e3t7e3r78funNl%2B7A4ctYzx94Hd4LA7fWN5eXl5eXn1A4SFhYWFhYXYuTHUHHU6ne5hK5SxmhkLBObKycnJycnJkF6tVqvVag2%2FY0LMa%2B3vhmqEbHtjr6OO7S%2FfhMiadlhA8vT09PT0BLh%2B%2Ffr169cNFyYvLy8vLy%2FDhZftx5q6xG5LP3fu3Llz5wwBuSHsAmTcJ8BqZGLlo6k1QrFrjo8qW1tbW1tbw40aa5plF3rWVMpu8FjNV2ws0DLs%2B8F%2Bt8avs%2FzU1tbWirEMjLnXsDpa%2BlscwNiFsqk1K2tra2tr6%2Frb2R2pWE2L7M6eBTD2A%2B7Zs2fPnj0NX3iWX%2FYDuXXr1q1bt8QPXAwLSD4%2BPj4%2BPs0%2F%2Fvz58%2BfPn2%2B%2FO1PjvqCmlqNxADOXGlhHx2pe7PO%2Fe%2Ffu3bt3DZ8L%2B52y%2FcwlgLHrBqu5GwcmFsAaeh11bC0OYKwvwrivqyHGnazMnTt37ty5I15nPPtCX7ly5cqVKwDe3t7e3t6GC6xx4Lp27dq1a9fqjzJDf47V%2FHr16tWrVy%2FDDQNrcmNNVY1h5c4uqKxpi31eV69evXr1qti57TjYDQCrWbGmXOMbhZKSkpKSEsPv2PjzEwtLZ0N9c4293t5a24ckdg3I3NLfZn1gHQ0LVMZNawy7AJtrX15HYdyHwgaltLRvhR3X0lGZf3XGfVssUBljN5qsRmaug1DQX0uLa2Dsi97QF944UrM7Y%2BM2abGb4IybDFkgYzUzdgfH7lQ9PDw8PDwM282lKcXcsc%2BZDV9m5c3u%2FNloxIZG8TFsP3Yjwb5%2FrEkXNQ0L%2BGywFWs6ZP83hO3HRiua6%2FB6cyV2DepRS3%2B7DeJgF3xz%2B6Ibj5I0blJk6WZNiyyQsedK2PDt9grELD1sOHxHxW5kWABrag3KeD%2FjGyLUNA4ODg4ODoYWB%2FYcWkN91Qzrc2KDPlggY02PCLWnv%2FwoxPz8%2FPz8%2FPpNKMaDSlhAY31%2BrM%2FOXEbtdbQmNOP0N7UJ0Xg%2FsWvwHVXXrl27du1q6Etk3%2B%2Bmlid7nISdh%2F1u8PP4c%2Bb2HJWp09%2FeNbQ2u%2BSxJh32lw1rNTfsB8fS2VCnNPuhs0EcOJqpdYxr4qzpqqHBPuxxB3bHz5jL59DYqFy2vaE%2B1vbCZjxhTeesyba5gYf1ibF8saZdhNpTm9XAGuobQ22jtU2L7f18FbtwstGs7MLKmhSNH2hmgYvVNNkw76aOXmxrzs7Ozs7OhqY1VqNhWJ%2Bf2A%2FAG%2FcdtvR3yj4%2F49G66M%2BZWx9SR08%2FfuUeMR3lQV92x89qtI3VTC5dunTp0iXDcWLnkzUxGz%2F%2B0VCNsLCwsLCwsH4%2B27tlggV%2B9relWA0aB88gMWEAQ2ahscE95jb4hzUps6a0xuBoVYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgj91bRgBSaETEehUCgUivqz8KnVarVabZi2t6n7iS2od1DvoN6WllI3qZvUbf58kIMc5NOmQT7kQ36PHvd3XAbLYNm1a8I%2F33xj9brV61avb9wYvzt%2Bd%2Fxuc5w1FCHzgzNxdDANXchNxdwCQkcRcjHkYshFDw8ukAvkAtVq8AVf8H38cUiGZEh%2ByAGzYBbMYitvDRqkW6lbqVs5daryH8p%2FKP%2BhVKpGqEaoRuAkTQj9GQxgCLUCq3Fxz3HPcc8lJsJoGA2jBwyA9bAe1l%2B6REtpKS1dulTYO%2Fl%2BKKP21J7aP%2F00p%2BAUnGLtWlgJK2FlYCBNokk0SaMRzjt8%2BIHsA9kHsusu7IMQYjCAdXAqlUqlUrX8eKVSqVQqxUt%2FU2t85lozlHWVdZV1nT2bdqPdaLcBA8AFXMDlwgWuF9eL6zV8%2BH6yn%2BwnDa0x%2Fd13ISEhISEhR45w67n13PrffoM34A144%2FHHZd1l3WXdo6IgG7Ihe8MGsfOJkDkyWQBTbFdsV2zfsoWbwc3gZnz4ofDDvXpV7AyaSigNpaHUy4vfwe%2Fgd%2Fzzn%2BqZ6pnqmbNni50uJC7qTJ2p80svAQUKFABmwkyYuWzZnwcug4SEhISEhDt3Qj4N%2BTTk02XLOOCAg717%2BVf4V%2FhXpk6FzbAZNrc%2BgCmWKZYplkVHwzk4B%2BdefbXNymMFXUFXbN6sGaIZohkyd25bvU9jlK8pX1O%2BtnAhaEEL2vJyVawqVhW7bZtY6UFtw2QBjDpSR%2Bo4cSJvyVvylhMmyDvJO8k77doFh%2BEwHF67VvhCFxeLneGmkqfIU%2BQpXbvCGBgDY5YsEfL1%2FPP0W%2Fot%2FdZ8agJi16D%2B6ugX9Av6ha8vmUPmkDkAhBJK6OHDzT0PH8KH8CGHDnG%2BnC%2FnC0AOk8PksK%2BvqdI5%2BKPBHw3%2BaO7c1PLU8tTybt3Ii%2BRF8mJ4uMkK4v%2Fg%2F%2BD%2Fdu8O9An0CfSZN08DGtCY7ORNpyhQFCgKpk2j%2B%2Bl%2Bun%2F9eiqnciqnVPmd8jvld6WlKq1Kq9Lu3StC0lAbMF0TYhzEQRwh9Bf6C%2F2FrXg0bRpEQRREKRTy9fL18vWbNrlnume6Z8bExGyJ2RKzpaZG7AJg5syeM3vObJnslt8tv1t%2Bc%2BYI6Z43TwjADg7sBhtuwA24YT4Le3T0JsSOPgqRHCQHyUHD%2B1t%2BZvmZ5WcmGGSzF%2FbCXtPlaxVZRVYRno%2BIiIiIiJg2TTdeN143%2FtAh%2BBF%2BhB%2BHD2%2FxiX3AB3ySk8t8ynzKfKZPZ%2B9jqnQ3lWKjYqNi45gxMBgGw%2BCtW4W%2FhBA1URM1IbSCVtCKb75RuindlG7jxqnyVHmqvOPH2zudyLS4Nn%2BHaIiGaAcHeBqehqf%2F%2Bc%2B8uLy4vLikJOFOadw4sQuApYOli6XzfrqN%2FRGoxU43MhPxEA%2FxhjWwdW%2Fo3tC9MXZsc0%2FDJXAJXILhOLqJbqKbWrK2diPJjY%2BPj4%2BvqqLD6XA6XKmEQAiEwKysZp%2FoIByEgxcvSl6RvCJ5JSzsKDlKjhKdztTpbYwyWZmsTPbxEQJWfLzw18Ki3o5ykIPc2poW0SJatH%2F%2F%2FeNQh2ayAEZOkBPkRBMu7B%2FAB%2FABxwmBQvxFyOlgOpgOlsnupwuh5iiDMii7cuX%2B%2F9thO2z%2F%2BGOhz9TRsbHDhUEcnTtzEk7CST7%2B%2BMFXd%2B5sq2SzJn2JVqKVaIOC4GV4GV4uKmr0wFIohdKCAlgLa2FtUNA%2B332%2B%2B3xv327DEn4o4cbTxYW%2BR9%2Bj7x04AB%2FDx%2FBxly6NHhgEQRDk5MSOC44LjguOc3Vt7%2FQj02j7C3YsxELs7dvEk3gSzyVLyuaVzSubN3Kk%2BpL6kvrSgQNiF4AmV5OryU1MZOli6WTpNt6%2FyYEaNQlrAjT%2B29L92ovCX%2BGv8P%2F4Y7AHe7CPjLz%2FQgEUQEG%2Ffvxl%2FjJ%2F%2BcQJoS81LEy447e3F4bHd%2BokPDf23HNcFpfFZZ08KYw%2B7NsXkiAJkk6f1j%2Bvf17%2F%2FBdftHU%2B9q3bt27fusuXqRf1ol7h4bAAFsCC%2BjUpGkNjaIxWy3fiO%2FGdQkLU89Xz1fPrBO52Mi5tXNq4NFtbKqESKtFowBZswdbbu9kn%2BuM4SS9JL0kvjSZicsTkiMl2du2dH9Q6JrsACD%2FUW7eEH0BNDfmV%2FEp%2BjYmxmmQ1yWrSpk3CDAN374qd4aYSvtAODro9uj26PfPmCU0uc%2BaQfJJP8qVSdY46R53j4dHe6TLuCzJ1H5jYgcG8ESLfLt8u3%2F7552Qv2Uv2zptnslOvhJWwMjWVVJEqUiXeg8xKhVKhVERE8F%2FwX%2FBf7NpFtpKtZCvP02gaTaNDQ9kNX3unS%2Bi7k0h0ubpcXe6%2BfeAETuAkl5vsDRzAARwOHCiLLYsti1UqhSbR2tr2zidqHtM14a2G1bD6p59oZ9qZdl61SkM1VENzcmA37IbdYmez%2BR4MuB9%2BGNI5pHNI5%2F%2F9D1zBFVxXrIAcyIEcsVOJ2gchir2KvYq9n30mNBE2IXDVQA3UnDtHn6XP0md1OnKFXCFX%2FP3Zy3QVXUVXpaeTa%2BQaubZli1u0W7Rb9PbtYg9uUqlVapU6Pl6ZokxRpnh786V8KV96546mSlOlqWr%2FwMVUTaiaUDVh9Wqyn%2Bwn%2B00YuJi7cBfuBgV1eq7Tc52eY48tvP66WPlFTYN32h3MozaVlHmPQiRE%2FrX8a%2FnXX35J4kk8if%2F73xs9xAVcwGXPHqtSq1Kr0hdewLkNEWo7og%2BiQMh8UQp%2B4Ad%2BaWmN7joTZsLMzz9Xh6vD1eH%2F%2BMf94xFCbQYDWAeDfVTtSxit9%2Fnn8qnyqfKpUinREi3RfvLJ%2FR3swA7s1q0TAteSJcJGDFwIIYTMjNJP6af0e%2F99xRuKNxRvsEl6EUIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYSQMZzRAYkqPT09PT29%2FswVAQEBAQEBhhlHmrqf2E6POD3i9Ihu3ST7Jfsl%2B5cvJ%2FbEntiHhpJIEkkie%2Fak2%2Bg2uk2ngxiIgZiTJ2kQDaJBmzcPGDhg4ICB8fFipx%2BhjsRsfvioaRq6kJtKeweERyWApXdL75bebfhwYTmUffvor%2FRX%2Bquzc5NPcAAOwIFdu6yuW123uj5jRp9NfTb12XTvntj5Qsic4VyICLVCRveM7hnde%2FWiJ%2BgJeiIhgZbQElrSuTMsh%2BWw%2FPBhEkpCSeh775EfyA%2Fkh99%2FF47q0kVYCTw8HA7BITi0ejX9jH5GP3v%2Bed1l3WXd5YoK2ASbYNOsWWLnDyGETIbVRNjf1jI%2Bn9j562iEmld8%2FP1yfD79%2BfTnd%2B8WSpdrdMXzjHkZ8zLmDRwoBMKKivSd6TvTd%2FL8ucnnJp%2Bb%2FMQTYucPIXOGNbAGBGcEZwRnjB4tHScdJx1XXa3KU%2BWp8o4fFztdyDwIAcbOjp%2FIT%2BQnKhQkjISRsNpayS3JLcmt%2BfMJIYQQnm%2FsPP6b%2FDf5b0pLS1%2Bevjx9%2Bb%2F%2FDQEQAAFvvcVv5jfzm6dOFfY6ebK16c0YmjE0Y2h0tNAH9%2BqrbVYwKZACKZs3B8wMmBkwc%2B7cNnufxvIbkBGQEbBwIX2NvkZfKy8PmBswN2Dutm1ipQe1jVYHMHmKPEWeEhcn%2FDdiRJMPnAWzYNaxY5ozmjOaM88%2FL3ZBMBGTIyZHTLaw0CXpknRJH37In%2BPP8edqagKfDXw28Nlnn009lXoq9ZR4K%2BYay8jIyMjIEDsVfz36fvp%2B%2Bn7e3mQYGUaGWVrCPbgH99LTfat8q3yr8vKaez4SS2JJ7MGD9AX6An3hrbfgbXgb3vbzgyAIgqDWp7f%2Fyf4n%2B5%2BcOzdjS8aWjC3dusFwGA7Dw8NNViBjYAyM2b3bv9C%2F0L9w3jxhfTSTFnmTCDcC06bRABpAA9avh3RIh3RKM4IzgjOCS0v9E%2F0T%2FRP37m3%2FlKG20PoaWCiEQug%2F%2F0nGkrFk7MGDdAFdQBfIZA3tTj4nn5PPa2qIFbEiVu%2B8I3YBGNMt1y3XLZ8xQ2gC8vKCHMiBHAD3me4z3We%2B9JIQwLZuFTudjL%2B%2Fv79hofrmEzsAdtRBHLSKVtEqSgkQYSTUUBgKQwmBm3ATbrbghNtgG2yrk49jcAyOma5Jl9UIf%2FX41eNXj2nT7EvsS%2BxLDh2iJ%2BlJenL48BafeA2sgTXJyXaFdoV2hdOnN7XmaWpCjXjMGD6MD%2BPDtm4FG7ABG0KEGi0hkAZpkPbNN0IAHzfOf7b%2FbP%2FZ2KLS0TXaRt8YTa4mV5OblUW30%2B10%2BzffNLa%2FEOC%2B%2Bkr1m%2Bo31W%2FZ2WIXADOh%2B4TuE7p36QIjYASMePPNeun%2Bin5Fv1q8%2BP5%2B6C%2BtZmrN1JqpOTlkKVlKllZVwVk4C2f79Ttvfd76vLWbW3PPR5NoEk0aO5b9T8pJOSk%2Fd87U6R6eOzx3eG5VlWy9bL1svVIJ62AdrMvKau55SDgJJ%2BEXL0qHSYdJh4WFeRNv4k10OtOX9J87a3fW7qydjw8%2Fk5%2FJz4yPFwKXhUW98l1D19A11ta0kBbSwv372XHtnV5kWq0OYIz1FOsp1lPWroWe0BN63rlj%2FDp5h7xD3ikpsf7Y%2BmPrj%2BusaGsmZNdk12TXFi2iP9Of6c%2BdOtXbIRqiIdrBwSLWItYi9q23xE4vEldOTk5OTs69e8JzXLm5dB%2FdR%2FdJpbWhtaG1oRs3NncQh9CE%2BPrrrMmL5JN8kv%2Ftt22Vfp8onyifqOJicogcIoeCgshr5DXyWlFRowdagRVYFRTolXqlXhkU5Dvfd77v%2FNu327n4%2F2gqdHHhvDlvzvvAAegBPaBHE24slaAEpZMTO06oubm6tnf6kWmYvOlFkapIVaTOmSP8gFeuvP9Ga8gasubtt9Xx6nh1%2FI4dYmecEfrw%2BvWDG3ADbvz0E3iCJ3hKJA0ecANuwA29XvKJ5BPJJxMm7E%2Fen7w%2FOTOzvdJr3JRm6iZEc3muylxdoVfoFWplpY3Txmnj4uPBD%2FzATy6vt6PRMHp%2BGD%2BMH5aZySfzyXyyjY20VFoqLQ0NfXAYvYMDXIbLcHnr1oCwgLCAsPYbRi9cyEeM4N15d979p59gNsyG2VZW93cohmIo1mqpE3WiTqNGDRgwYMCAAamp7V3%2BaYvSFqUtsrXlorgoLurIEdCBDnRDhrT0fGQUGUVGpaaS0WQ0GT1qVP%2Fd%2FXf3363Vtne%2BUMuYfBTirdm3Zt%2BavX27W5lbmVvZ9OnEkTgSx%2BpqK28rbyvv2FixM1zPalgNq5cvFzrN%2FyRwMX8EOL1Wr9Vr33tP2Gg%2Bg1BQ27jw5YUvL3xpb689rj2uPa5SCYFr1KgGD%2FgIPoKPxoyhQIHCmDGsr0zytORpydMAwnYAUIACFGD0IPPrr7d3%2FoQLd3Ly2bSzaWfTXnqJ7CQ7yc5du0gciSNxPE9v0Bv0xpQpA6oHVA%2Bobv%2FAFRcXFxcXJ5FwlKMc3bWrtYGLoUfoEXokMBA2wAbYEBeXRJNoElUqR5PRZDSprW3vfKLmabM7bUWBokBRMG6c8MWvqtIM0QzRDElOFjvDHR3WwNoXC1w1%2FWr61fRTqcABHMDhTwIX4w%2F%2B4H%2F0qPBAsocHhEM4hDs5sZfJCrKCrPjtN%2FoUfYo%2B9e9%2FC8POExLEzi8jDHZYskQIsHfu%2BLv6u%2Fq7btkiVnrS%2B6b3Te%2B7Zg3sgT2wZ8mSNnujlbASVv7nPwF7AvYE7Gn%2FGwnUPHih6mBwKqn2SW%2FK7ym%2Fp%2Fzu4GD5quWrlq%2F%2B8AN8BV%2FBV8OGNXrgYTgMh99%2BO2BhwMKAhR991F7liNBfkckGcSD0KMm5knMl54pWS14kL5IXL19uaD%2F2ADN4gzd4v%2FQSBi6E2g%2FOxNHBYBNf%2B4iMjIyMjNTrhb6Xl17yG%2Bk30m%2BkVEqP0WP0WGQk9IJe0Kumhn5Pv6ffT58eYBdgF2DXdqMGEUIIoRYRRulZWNyf%2B3B7%2Bvb07SEhYqcLIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQshctd1yKkk0iSbNmXP%2FjUaT0WR0TIw6UB2oDoyJaa8MPkOfoc9QqdThuMNxh%2BPW1qoRqhGqEeXl7PVQGkpDqaOjfox%2BjH6MUgm5kAu5o0ZBBVRAhYcHPUwP08NSqbDA4O3b8Al8Ap%2F89puwYq5azRb0bK%2F8GFM%2BqXxS%2BWTv3nwZX8aXRUTA1%2FA1fP3UU8IKv926wd%2Fh7%2FB3SiELsiCroIBaUStqdeyYNEwaJg3bs2c%2F2U%2F2k6tX2fkiIiIiIiKsrbWntae1p2WyA9kHsg9kl5WJlT%2BEEGrIIx%2FAFImKREXik08K6xstWFBrXWtdax0VJR0lHSUdNXEi7U17097z5oEUpCC1sWnyiWfADJhBKU2kiTTxhx%2B007XTtdM%2F%2BOAoOUqOtuHKtBGTIyZHTLawqFpWtaxq2Ztvkn%2BRf5F%2FhYfTkXQkHdn4AooMOUaOkWM8T8fT8XR8fDw3iBvEDYqO5v%2FO%2F53%2F%2B4YNwsq2iYmaM5ozmjO7d7c0vfJ18nXydSkpbVUejdEs1izWLG79shsIIfPTygBGiHyufK587ocfwmPwGDw2fnyTD90G22Dbnj2aTE2mJrPtJj8NKQkpCSlZsoRsI9vItshISIVUSL1yBTbCRtjo5QU7YAfsaP3cguQgOUgOpqfXZtdm12ZHRQk1l3v3TJWPwMGBgwMHy2Sum103u27euJH8TH4mP7f%2BwszFcrFcLKV0KB1Kh167RvvRfrSflxeJITEk5pdf1JfUl9SXFixo6fkxgCGE2korJ%2FOl1LrQutC6cOXKyoWVCysXdu9O1ERN1H5%2BDR7xNH2aPp2SYnPC5oTNibVrIRMyoc3WMyaE5JAckjNy5P1NgRAIgd7eQlNaYSE3mhvNjXZ2FlaQzskhu8lusvvrr%2BlkOplOPnuW2lN7aq%2FX0%2BV0OV3eqxe3i9vF7XruOfgcPofPn376fr6epc%2FSZwMCJGGSMEnYsmUQBVEQtWqVqXLi%2Bq7ru67vLljQYOBKgARIOHpUckVyRXIlLq5aWi2tlp4%2Fz16WhcpCZaGDBtFz9Bw9N3MmvUlv0psDBvCBfCAfWFAA%2FaAf9PPyup%2Bfx%2Bhj9LEhQ%2BQ75TvlO21shPXcKiubm24MIAihtmKyJsTguOC44DhXV2HF1NhYuAE34Ebnzvd38AAP8MjN1b%2Brf1f%2F7vTpbd23Euwe7B7s3rcv9yb3Jvfmzp0N7Ucfp4%2FTxy9ftom2ibaJnjEjPj4%2BPj6%2Bqqqx8yvtlHZKu%2FBwfiW%2Fkl%2F59tv3X%2FijaZEsI8vIshkz1F%2Bqv1R%2Fee5ci%2FMRHhweHN6zJ%2BfKuXKucXFCTdewcjSNolE0av36BLsEuwS7%2F%2F63aWeVSuVfy7%2BWf%2F3FF1AIhVA4cGBDexJLYkkslyxRz1fPV88%2FfNjkHxRCCLWQyZZTSYxMjEyMzM9XJiuTlcnLl%2FNH%2BaP80X%2F%2Fm%2FyX%2FJf8t6ZGb6u31du%2B9daBWwduHbjV9oMCOBWn4lQjR8IROAJHGt6PnCanyelevaqWVi2tWrp8OcRDPMSvXCm8yvMNHafSqrQq7d698kx5pjzTz09YYj4sjDVJ8lv4LfyWiAj4Er6EVgQw7m3ube7t0FAhH4bABY7gCI6HDjUvcBGiGKIYohjy9tu0kBbSPwlcDJVRGZWxmmbzAxg2ISKE2orJF7QURvmlpAij3zZsIL7El%2Fh%2B8EHircRbibcuXWrqeYJ6B%2FUO6t2pU0vTQd4h75B3nnqqsf1oX9qX9i0pgTEwBsZYWSk2KjYqNvbs2dT3oUvpUrp0%2B%2FZ673%2BX3CV3m7CCb2P2wT7Y98QT9d7XglpQi9jYpp5GniJPkac4OfE%2F8j%2FyP%2Bp04AZu4JaVxQZzNJg%2Fd%2BpO3Vk5Nn2QCEIItbVGmhAJEe6gf%2F%2B93VP2R1Ocpqumq6br0KFNPWxc2ri0cWnOzpZPWj5p%2BaRGA0VQBEUXL5IgEkSC0tJ4e96etz9zRhi9d%2BaM0LdTXNza5Mo%2FlH8o%2F%2FD778ESLMGya1eWfuso6yjrqKeeit8dvzt%2Bd3V1s8%2F7rfxb%2Bbc%2F%2FcSaZFnAsbK0srSyHD5caPLU61uabuExAysr23jbeNv4fv3ICXKCnBg4kHxEPiIfDRok1MAef5yMIWPImIULNUmaJE1SWlprywshhFqrkSZESkVL2VW4ClcNz2s1OUOTpJOkk3Q6vYfeQ%2B8REnLA7oDdAbuiono7JkIiJJouueQ8OU%2FO8zwdRAfRQQCsKVF7RntGe6YVoxyjIRqiCYEQCIE2WD7xwWH%2FZ87c%2F%2FsJfAKffPWVUBO2tBS2s78IISS%2BNluaXnFccVxxPDSURtJIGllTIzzwm2jCkGEews6HnQ877%2BSkX6pfql964AB7HosqqIIq7t5N8EnwSfAZO7al55e%2FI39H%2Fs433wh9Xv36se3UmTpT5xkzEl5KeCnhpYwMscuhwfSbqA8M%2B7IQQsZM3qch9LUMHkwtqSW1XL4c9sN%2B2P%2Fee2y72Bk2tRquhqvhpk41fpCYm8RN4iaZoOk1DMIg7ORJ483cWm4tt3baNLHzjxBCYjFZDey5xc8tfm6xs3P1yOqR1SO%2F%2BYZcIpfIpS5d2OtssAQ3jBvGDZs%2BXe2idlG7FBSIXQAtJQTkESOEB7I%2F%2BcR4eDvxI37Eb948dbA6WB3822%2Bte58ePYT3iY%2Bv9z6ryWqyesMGdYm6RF3S9EEdCCHU0bU6gLGpjXRanVan%2FeIL9kBvgwcsh%2BWw%2FOLF8ury6vLqV15p66mXWovNgOHyo8uPLj%2F27s1d5a5yV0ND4Wl4Gp4OD4f34X1431DzMtUMFsbkU%2BVT5VPffFN4EPuFF4xfZ%2B%2FLz%2BJn8bPi42UKmUKmyMzc57vPd5%2Fv7dtilyNCCJlaqwNYvamamvrGu8guskulUqeoU9Qp%2F%2FqX2AXRECFwxMezGTwazM9aspasvXmTK%2BAKuIIZM4RJcktLTZUONimx3Um7k3YnN21qbCop8j55n7yv06nvqu%2Bq744YIXY5IoSQqbX6QeaELgldErqsXSv8t3atuU3m29bY1FhCfpcvVxM1UZswcDFCTbW2VqjxLlig26Pbo9vz1lu0iBbRIsMD1GKXB0IItReTzcTxqCOxJJbE1tRAFVRB1e%2B%2F8xf5i%2FzFvXsTSAJJIEeOtFc6Hnye7MMP5VflV%2BVX9%2BwR5pScPJlUk2pS%2Fbe%2FCXM32tnBMlgGy8QuPYQQQu1OGETRjGVWEEIIIYQQQgghhBBCCCGEEEIIIYQQQggh1EpsMl%2B5h9xD7hEcLHZ6EEIIPVpM%2FuDrg5P2%2Fuc%2FD746d66w%2FtapU2JnHCGEUMf2yE%2FmGxERERERwSa%2FtbAQFoCsqmKvP7jys58f15fry%2FX19CRJJIkkOTrSMXQMHUOI8KBwZSXtQrvQLgUFZCfZSXZmZgrLpeTmtnU%2BGsIW8JRJZBKZpH9%2F4kW8iJe7O0yBKTDF1pbtR54gT5An7t4V1hXLza0JqwmrCcvM%2FOHmDzd%2FuFlSwvZjU1bZ9LHpY9NHIjmQfSD7QPa9e2LlDyGEGvLIT%2BZ7fzb3BEiAhOHDrTOsM6wzVKqKiIqIiggfH5gEk2BSYCBREiVRGmZ5b7J5MA%2FmXbumnaidqJ149Ghb5%2BfBAPPUU5wP58P5%2BPg09zzkMDlMDlMqLPyZnp61IGtB1oLTp%2FtW9K3oWzFxIt1Kt9KtWVlCAMvMbHH5z5XPlc89ccJ4Fn1TKV9Uvqh80ZNPsqm2TH1%2BhJD5avV6YJUxlTGVMf%2F4R6OBi%2FkIPoKPfHw6De00tNPQJUvaOoP0MD1MD%2FfsSU%2FSk%2FSkg4N2sHawdnBEBORCLuQOG9biwMVsgk2wqWdP%2B8ftH7d%2FXC5%2FcAVj02E1Sftl9svslwUFtTRw3S%2BXP2qW0nxpvjR%2F4MB%2B3%2FX7rt93U6aQZJJMkl1cYCWshJU9e5o6HwghZCom7wMzt8l8Q7xDvEO8p00DP%2FADP8OUUELAJYQG0SAaRAgJIAEkoKiIjCfjyfjTp6tXV6%2BuXl1QIJ0knSSdVFsrPS49Lj3u6Mg78868s68vyEEO8r59jd%2BP5tN8mn%2FlSmJqYmpi6k8%2FmSofQceCjgUde%2Bopbg23hlvTv3%2B9Hf6oCQo1nYwMPoQP4UOKiyW7JLsku1iA7toV4iEe4gcO5F15V97V3Z0cJAfJQUrr5UNFVVSl13eP6h7VPerrr2O2xGyJ2VJT016fG0IINeaRncxXqAl16wY%2B4AM%2B9ecyZBduqqM6qquqKggoCCgIUKlSE1ITUhNqaoQmxzoHuIAL3O%2BzKygICQkJCQm5fl1oihs7ltVoiCtxJa7e3spkZbIy2d1dNUI1QjXi1q2W5iOUhtJQ6uiot9Hb6G38%2FIT3qbPDFJgCU375JSEoISghKCOj3gmGwBC4v%2BjK9evC3xs3QoJDgkOCJ08GAgRI5871yuePmmnexLyJeRO7dxe2Xrki6oeKEEJ1PLLLbwRdCLoQdGHIEG4Rt4hbxEZF%2Fok%2FajBDJg6ZOGTiTz%2BtIqvIKsLzjR0mrBc2fDgto2W0zNCEyk3kJnITs7PV89Xz1fMPH25pPoKXBS8LXjZsGEkn6SR94EC2vaU1PcUQxRDFkGee4V14F96lCU2QGtCA5tKl9pp1X75Ovk6%2BLiXFVOfTLNYs1ixueN00hFDH1eo%2BsLby4OjA5iNdSVfStUePxvajPWlP2rO0lG6hW%2BiWqqozcAbOQDPedxEsgkVpacab9Un6JH2Sh0erC2IxLIbF9c%2FDfcF9wX1x%2BnRTT8Nm1a%2F9tPbT2k9ra0kuySW5JSVsMEeD5TOJTqKTPD3%2FKNVH9oYHIdTxNHJBIkS4I%2F7993ZP2QyYATMo1XTVdNV0HTq0qYcJTXf29nq9Xq%2FXR0RAJERCZEGB0JSWnw%2BfwqfwaX5%2B%2FtT8qflTCwtTT6WeSj3V%2Br6dEG2INkT74ovGw9e1Gq1Gq9m2raWj5EIWhSwKWfTyy3ABLsAFS0sWcDRVmipN1datwl6N1xQbwkY12sbbxtvGd%2B0qbHV1ffjf779PjEyMTIzMz29teSGEUGs10gfW8J15m7sKV%2BFqeXlzD7P8zPIzy8%2Fu3evcuXPnzp1jY2MKYgpiCur0aRn3bZk5OowOo8MIIRfIBXLB9Od%2FMLCywGQIUMbPhYldHgghxGCTUCuxpjm6gq6gK6ZNY9upJbWkllVViXsT9ybujY1t6fmDi4OLg4vDw8nL5GXyMqshAQgrQn%2F3nfCcVlGR2OXQWuwxgaphVcOqhp040eITvQvvwrs8L9RQn3hC7HwhhNqO2faBdRSkkBSSwgEDjLdzrpwr59ry0YcMfZI%2BSZ%2Bsfx7JeMl4yfj674sQQn8Vj%2FxzYG1FmKS4Tx8ogRIoGTXq%2FpRTf5AslyyXLNdoWjuMXhiu37mz0Pc1ebLx%2B5BKUkkqT5zQJGmSNEn1B5MghNCj6pF9DsxU2FRZFZEVkRWRXboID0T7%2BtKldCld2qeP8f5seHtrAxeTkJCQkJBw506IVYhViNW5c8JWf%2F%2F772dDbajNsGHBccFxwXFublJ3qbvU%2FezZmhk1M2pm3L6NcxkihB5Vra6BKWIVsYrYt9%2BmBbSAFoSHN%2FnAN%2BANeOOHHzQSjUQjeecdYaOIg0YaEDw3eG7w3MhIco1cI9ccHRvaj35Fv6JfFRfbRtlG2UZpNPG743fH766uNlU6VtAVdAXluBTXFNcU16AgYVTlnwzTXwJLYEltbcIzCc8kPLNtm1jlh891IYTaSqv7wKxUVior1Zo18Dq8Dq%2BnpjZ6wC%2FwC%2Fxy7pz1FOsp1lNWrRI2ml%2FgaipW42qrwMWwB6ttRtqMtBn5%2FffCIJELbTAuESGEOgaT9YFN6D6h%2B4TuXbrIxsrGysbGxkIABECAi8v9HWbBLJhVVATZkA3Z06cL64IVF4tdAI2RD5IPkg%2BaPFmfrE%2FWJ1tYcJFcJBdZWMhf4i%2Fxly5cEJrobt4UK32KAkWBosDFRV%2BkL9IX%2BfmRU%2BQUOeXiQq2oFbWyshKe29qxQ%2BxyRAghUzP5IA7hQWIfHz6Pz%2BPztm0jH5APyAccBz%2FCj%2FDjq68K64CdPSt2xhFCCKGHEkbpBQcLk8ZGRIidHoQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIoUdPs%2BdCDOod1Duot5%2BfZJdkl2TX3%2F5GxpPxZLxhvSl9tD5aH52eLnlG8ozkGZ4noSSUhLq7U3%2FqT%2F1v3KBRNIpGDR9ufBydTWfT2aWlEAEREJGVxek4Hafr21dYV0ulMk6HYpZilmJW%2F%2F7G56MD6UA6kBCyi%2Bwiu86c6ehzLyrtlHZKu%2FBwepleppezs1l%2B5CnyFHmKjY2w1wsvCOX17beuX7l%2B5fqVTpdXmleaV%2Frii8K6ZbduCZMn%2F%2FgjO69wfL9%2BTS1n4kk8iaeXl2qFaoVqRUKC8CrHCQuYzppVO6V2Su2UXbuko6SjpKM8PRv7nDVrNGs0a9RqscsXIdRxtXxBy3iIh%2FiCAnWJukRdUudCFAmREMlmSa%2B%2F5D2XwCVwCXl5qhJViaqEXQgBYA2sgTUA8gh5hDyiX7%2BmJsP4fEE3gm4E3ejUSbZYtli2ePJkYZb8mzd%2FuPnDzR9ulpSIXeDNxR%2Fhj%2FBHMjO5WdwsblZAgLD17Fl4C96Ct%2Fr0Ibkkl%2BTm5qouqS6pLpWXh34T%2Bk3oNwEBNJ2m0%2FTbt7kN3AZuQ%2Ffuz459duyzYx0cDh46eOjgobt32zrdjX3OCCHUWi1fDywCIiDCxUXRRdFF0WX6dPZXmI3e3r6hw%2FgQPoQPcXMzPk6RqEhUJD75ZGszJCxvUlYmrJel1UoHSgdKBza8EKW5Kw8sDywPzM4WlkextWXLp5BepBfp5eOj99f76%2F0zM4W9CeFlvIyX%2BftLaiQ1kpozZ8AZnME5O9tyguUEywn1byjaSlt%2Fzggh1PIA9kANLDaW%2FRWaosrLG3zDP%2B7MjY9TB6uD1cG%2F%2FdbaDI1LG5c2Ls3Wltwj98g9OzvZOtk62bq2r3G0laPkKDlKams5T86T87x0CQbDYBg8YoTQRCeVJu5N3Ju49%2Fr1kJCQkJAQb286g86gM%2Bzs%2BB38Dn7HqFH8Kf4Uf8rLi7PmrDnrvn0jIiIiIiKsrZv6%2FvQAPUAPVFeDDdiAjb39nNlzZs%2BZLZOF0lAaSjt1YvtVZlVmVWYZFvJs688ZIYRa3oTYQvfvzDcoNig2TJ%2FOttOFdCFdyC6AaWm8FW%2FFWzk7szt3th%2BxJJbEMieHAgUKpaX1zjcaRsNogNro2uja6FOnEn0TfRN9b98Wu6Bb7RP4BD7JzIQX4UV40d8fKFCgKSl%2FlB4lq8gqsmrAAKiESqg8eVKdpE5SJ6WlQRIkQRKA%2FAn5E%2FInFApdua5cV%2B7vLxxXXt5YObsGuwa7Bp88mb8nf0%2F%2Bnl698vvk98nvM306jaSRNJLn%2BQ%2F4D%2FgPzpwRAq1OJ%2FSZNf45a1ZoVmhWfPut2MWKEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEKo3f0%2FYCcRj5nKHu4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTMtMDItMDlUMTk6MzI6NTMrMDE6MDCs99SeAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEzLTAyLTA5VDE5OjMyOjUzKzAxOjAw3apsIgAAAHl0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9qb3MvRHJvcGJveC9Kb3MvcHJvZ3JhbW1pbmcvamF2YXNjcmlwdC9qc29uZWRpdG9yb25saW5lL2pzb25lZGl0b3IvY3NzL2ltZy9qc29uZWRpdG9yLWljb25zLnN2Z2GG7LgAAAAASUVORK5CYII%3D%29%3B%0A%20%20background%2Dposition%3A%20%2D48px%20%2D144px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Evalue%2Eurl%20%7B%0A%20%20color%3A%20green%3B%0A%20%20text%2Ddecoration%3A%20underline%3B%0A%7D%0A%0A%2Ejsoneditor%20a%2Evalue%2Eurl%3Ahover%2C%0A%2Ejsoneditor%20a%2Evalue%2Eurl%3Afocus%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Eseparator%20%7B%0A%20%20padding%3A%203px%200%3B%0A%20%20vertical%2Dalign%3A%20top%3B%0A%20%20color%3A%20gray%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Efield%5Bcontenteditable%3Dtrue%5D%3Afocus%2C%0A%2Ejsoneditor%20%2Efield%5Bcontenteditable%3Dtrue%5D%3Ahover%2C%0A%2Ejsoneditor%20%2Evalue%5Bcontenteditable%3Dtrue%5D%3Afocus%2C%0A%2Ejsoneditor%20%2Evalue%5Bcontenteditable%3Dtrue%5D%3Ahover%2C%0A%2Ejsoneditor%20%2Efield%2Ehighlight%2C%0A%2Ejsoneditor%20%2Evalue%2Ehighlight%20%7B%0A%20%20background%2Dcolor%3A%20%23FFFFAB%3B%0A%20%20border%3A%201px%20solid%20yellow%3B%0A%20%20border%2Dradius%3A%202px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Efield%2Ehighlight%2Dactive%2C%0A%2Ejsoneditor%20%2Efield%2Ehighlight%2Dactive%3Afocus%2C%0A%2Ejsoneditor%20%2Efield%2Ehighlight%2Dactive%3Ahover%2C%0A%2Ejsoneditor%20%2Evalue%2Ehighlight%2Dactive%2C%0A%2Ejsoneditor%20%2Evalue%2Ehighlight%2Dactive%3Afocus%2C%0A%2Ejsoneditor%20%2Evalue%2Ehighlight%2Dactive%3Ahover%20%7B%0A%20%20background%2Dcolor%3A%20%23ffee00%3B%0A%20%20border%3A%201px%20solid%20%23ffc700%3B%0A%20%20border%2Dradius%3A%202px%3B%0A%7D%0A%0A%2Ejsoneditor%20div%2Etree%20button%20%7B%0A%20%20width%3A%2024px%3B%0A%20%20height%3A%2024px%3B%0A%20%20padding%3A%200%3B%0A%20%20margin%3A%200%3B%0A%20%20border%3A%20none%3B%0A%20%20cursor%3A%20pointer%3B%0A%20%20background%3A%20transparent%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAANgAAACoEAYAAADSkvxvAAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA%2BUO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAANtZJREFUeNrt3XlcVFX7APDn3JlhR1CUVRRyQRDURDPfzFxyAWYGQsEsLX1TI3N5S3PprdS3svRnmen7SphL0etroKYzA7aoqGGlgYogLiCuyCoiDDACc8%2Fvj9txcJDYBu5gz%2FcfPty59845Z2buc89yzwFACCGEEEIIIYQQQgghhBBC6NFCGtvByWnvXgBKxUrg7dvh4QCk0XQ2hNLAQDHTT0hqamvSv3nzvn06nXjpf%2B21sDArK0w%2Fph%2FTj%2Bk3v%2FRLxUoYQg9jYSGTAQBUV9fU1N1uaSlsv3fvwe1isba2tCQEwM3Nyanuz%2BvevepqAIDc3OJinjds9%2FR0duY4AJlM%2BsBvju3HjkPNw74XlpYWFnU%2Fh4qKqipKAaRSobwtLWWyuq9rtcLrPF%2F3U0IdDQawDkomk0pbcl9VU1NbK9791IPpBwCYOPGJJ2QygG7dHB05DqCsrLKSUoDdu48cqXtJj4wcM8bCAkAq5TgAgKtX8%2FN5HiAp6fTp2tr2T3%2FXrg4OhACMHz90qHAJFRQW3rnD8wB79x47VvfS%2BNRTAQFSKYCjo51d3c%2Ftu%2B%2BOHaupASgoqK42h0upVCqRAAD87W%2F%2B%2FnVD7YkTmZm1teZzA8H4%2B3t7SyQAQ4f6%2BtZN7549R49WVwN4e7u5SSQAgwf37SvkTPDtt4cPV1cD3LlTXm4OvwfUMm0WwNasGThw0yYAmYzjZDKAmJjLlz%2F%2FHODChbKyc%2BfEznbHxQLXK6%2BEhFhYNP%2F4rVsTEqqrxQ9kfft6ekokAB4e3bpxHEBpqVZLKcD16wUFD7uQX7mSl8fzAN7erq4cB%2BDj06OHRAJw%2BfKtWzzf8HHtJS0tO1uvB7h06cYNvb7%2B6wcPpqTU1AD4%2BXl5SSSGv%2BaGfS7G6SsvF24sTp%2FOynpY%2FlDTREWFhlpaNvx6dPT%2B%2FffuiZ3Klqe%2FtZqbf66tEjJtWs%2Ber7wC8NJLXl5z5gB4eFhbe3q2XcZbrmtXNzcAgJ07T58GABg5Uql82H6PPebnBwDw7bfp6QAAvXsHBIid9vooFcJSQ3%2FNha3tgy3bGRk5OXo9wMmT588%2FrEaVnHz2bG0twMWLN27UDVT29jY2LW%2FhN527dysqKAW4fbus7GElXVx89y6lhkBgrvz9H3tMIgEoLCwtpRTg5s2iIp4H6N9fqOlwnDmUtkFV1cObXllNUaerrn5YeWOT7aMBmxDhzTc%2F%2FRQAoG%2FfQYMAAD76aNcuAIBFi8LCAABu3MjOBgDYuPH77wEAXFyEQLx27e7dAAAREf37AwDo9WI0ZTExMWr1vXsA1tYP9gUYI0R41cLiwSbI6ur2rZGxdDT3%2FY1rjsbnQS3j4dG1K8cBdOlib0%2BIoWm2urqmhlKACROEpt6ePYUaMKsRi624%2BO7duumorRXqh%2BxGgd04MCygVVbeuyfGjYS517A6WvpbHMCcnCwtu3UD6N7d2rpHj%2FqvE0IIV6d%2BFxDg4PD44wC1tZTWvdAXFOh0eXliNi2uW7dwIQBAnz4DBwIAeHv7%2BgIAfPrp%2Fv0AAHfvlpQAAHTr5u4OAFBZqdUCALz%2F%2FqxZAGIHLsbKSghc06dPmNCSpsVt24SmxfYKZJ07P9gX1NTOdL3%2Bwf2M%2B5RQy7CaF7vAX76cm6vXG8qbBQS2n7kEsJISocbL%2Buh0OqFmxVociotLS3ne8HplpTldflFrtTiAKRTu7pMmAaxbN2jQ5s2N7%2F%2FOO%2F37r15df%2Fv%2F%2Fnf9%2Bo4dAPPnp6bOnClGEZSUFBYCALz22tixAAAxMUeOAAD06NG3L0D9wLVwYXAwAMDp0z%2F%2FLEZ6OyaOE25nwsNHjrSwMAyCuHOnvJznAW7eLCxsygWRNWlVVAiDe319e%2FaUSAyBTKP55RfzGmZg3lgTrJeXULM6e%2FbyZb3eUJNhLly4dk2vNwyWcHLq1ImQhptM2wtLZ0N9c9XVwu2lufTdtbYPSewakLmlv836wDoeBwcnJwAAOztHx4e9bmVlbQ1gaEJELSGRcA985wgRGgGb2hTI9uN54bLJzieVSiRYE2u%2B%2Fv0fHKxx7tzVqw%2B70GdmXrvG84YaGesTQ0hMLa6B7dhx5Up0tOGvseLi556re2c2efLx4%2BPHA5w5c%2BdOSophe3U1z4vbndqzp48PgKGPq0sXZ2chB3l5AIaaV48effoAAKxYsX07AEBVVUUFAMDRo0JTI%2FozrIkwLi4pqbra0KfC7vw9PV1cOE4YxfdnNTH2PJW9vbU1IQCZmcIF99ixtDRzaMrtKNhweV9fIYDduyf0dbEabUNYEyMbrXjy5Pnzen3DgyXQg8SuQT1q6W%2B3QRxabW1teTlAaWlNzZ07Yme7rsjI118HAHB29vAAMDQpzp377LNCysvKAAxNi9279%2BoFADBr1rvvAgD8%2FLNGAwDA8%2B3RRMEGMbDh8ExHGczA%2BiaKioTnpVgAk0iaNr5NInkwp4WFd%2B7ghbP5evf28JBIDA8CFxQI5ditm6Pjn30OZWXCaEv2AHffvp6edZseEWpPOAoRPv30zTcBAGQyoW03Lm7TJgCAnJzMzLr7sT6yZcv%2B8x8AgFWrhD679glcxoxH47X0wWax6PUPhh1WI2gMm1mBodTcHhDoGAYM6N1bIjHMSLFv388%2F19Q0%2FXGLyMjRoy0sAAIChEEd6enCYxD4afw5c3uOytTpb%2B8aWpsFsDffPH361VcN%2F1%2B9WlGRk9N%2BGWs6Nopw9eq66a0vL%2B%2FaNQCAhQtDQsROc8fHRosx%2FfoJDyZbWws%2FD9Y0xbCZLLy83Nzq9qJVVOh0YucFwJBu9nwbG2TC2NkJTZ5stKhYXF2dnOoOlz916tKllgSeCxeuX9frDTN29OghNO1euybuA%2BXor6XNAtjXX1%2B9GhMjdvb%2BOmprH9602PTjjetEbSsrS5ix4rHHhIDk6tqlC8cJF8K6fStMnz7du3Oc4fm17OzcXGH0ojAqUWxDh%2FbrJ5UKz1PxPIBKdfx43dGQQUHDhslkAE5OwuhLsdjZWVkBGPoOz58XRhc218WLwufHRn%2ByuSHRnzO3PqSOnn5sQnxEsOAj9hRRTcVGsyUm%2FvZbTY2hL6ahtP%2FvfwcPVlcbagpseLRYSkqEOfSOHj1zpm5KKisfPnd3SsrFi7W19WtgbO7H9sICP%2FvbUmwmCxw8g8SEAQyZhcYmiTW3SWTZbOdNrcGYy4O%2FCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEELtpdHJX9LT09PT08Wb2yEgICAgIKDlk9Rg%2BjH9mH5MP6b%2F0Uw%2FzsSBzIpEIpFIJAB6vV5fd4aLhraLRSoV5sW3sbGxsbExbGfpq6ioqBDWixPY2dnZ2dkJK1M%2FOBmxsJ%2B55KujYd8L9pepqampqakxlHdDr%2BNqBh0bBrAOyvhC2FQ8z5aWNI%2F09%2BjRo0ePHoZAUF1dXV1dDZCdnZ2dnW3Yv3fv3r179zYcV1ZWVlZWBpCbm5ubm9v%2B6beysrKysjKkn6mqqqqqqgK4fPny5cuXDdvd3Nzc3NwALC0tLesuR5GTk5OTkwNQWVlZWVnZ%2FvkwxsrX1dXV1dXVsL2goKCgoMD8Am2XLl26dOkC4OLi4uLiYtjOyr9Tp06dOnUC6NatW7du3QyvZ2VlZWVlAdy7d%2B%2BeOU1Oi5qnzQKYu7u7u7u74f%2Fbt2%2Ffvn0bvzCtxS4wfn5%2Bfn5%2BzT8%2BMzMzMzNT%2FEDm6Ojo6OhoqJmw70V5eXl5eXn9%2FVnAYhekzp07d%2B7c2bC9oePaS3FxcXFxMUBpaWlpaWn912%2FevHnz5k1DutmF19ywz8U4fazGUlRUVFRUJHYqOy5%2Ff39%2Ff%2F%2BGX8%2FIyMjIyBA7lS1Pf2s1N%2F8tuIdvGuMfqkwmkwnzjZsX1hTE7vDt7e3t7e3r78funNl%2B7A4ctYzx94Hd4LA7fWN5eXl5eXn1A4SFhYWFhYXYuTHUHHU6ne5hK5SxmhkLBObKycnJycnJkF6tVqvVag2%2FY0LMa%2B3vhmqEbHtjr6OO7S%2FfhMiadlhA8vT09PT0BLh%2B%2Ffr169cNFyYvLy8vLy%2FDhZftx5q6xG5LP3fu3Llz5wwBuSHsAmTcJ8BqZGLlo6k1QrFrjo8qW1tbW1tbw40aa5plF3rWVMpu8FjNV2ws0DLs%2B8F%2Bt8avs%2FzU1tbWirEMjLnXsDpa%2BlscwNiFsqk1K2tra2tr6%2Frb2R2pWE2L7M6eBTD2A%2B7Zs2fPnj0NX3iWX%2FYDuXXr1q1bt8QPXAwLSD4%2BPj4%2BPs0%2F%2Fvz58%2BfPn2%2B%2FO1PjvqCmlqNxADOXGlhHx2pe7PO%2Fe%2Ffu3bt3DZ8L%2B52y%2FcwlgLHrBqu5GwcmFsAaeh11bC0OYKwvwrivqyHGnazMnTt37ty5I15nPPtCX7ly5cqVKwDe3t7e3t6GC6xx4Lp27dq1a9fqjzJDf47V%2FHr16tWrVy%2FDDQNrcmNNVY1h5c4uqKxpi31eV69evXr1qti57TjYDQCrWbGmXOMbhZKSkpKSEsPv2PjzEwtLZ0N9c4293t5a24ckdg3I3NLfZn1gHQ0LVMZNawy7AJtrX15HYdyHwgaltLRvhR3X0lGZf3XGfVssUBljN5qsRmaug1DQX0uLa2Dsi97QF944UrM7Y%2BM2abGb4IybDFkgYzUzdgfH7lQ9PDw8PDwM282lKcXcsc%2BZDV9m5c3u%2FNloxIZG8TFsP3Yjwb5%2FrEkXNQ0L%2BGywFWs6ZP83hO3HRiua6%2FB6cyV2DepRS3%2B7DeJgF3xz%2B6Ibj5I0blJk6WZNiyyQsedK2PDt9grELD1sOHxHxW5kWABrag3KeD%2FjGyLUNA4ODg4ODoYWB%2FYcWkN91Qzrc2KDPlggY02PCLWnv%2FwoxPz8%2FPz8%2FPpNKMaDSlhAY31%2BrM%2FOXEbtdbQmNOP0N7UJ0Xg%2FsWvwHVXXrl27du1q6Etk3%2B%2Bmlid7nISdh%2F1u8PP4c%2Bb2HJWp09%2FeNbQ2u%2BSxJh32lw1rNTfsB8fS2VCnNPuhs0EcOJqpdYxr4qzpqqHBPuxxB3bHz5jL59DYqFy2vaE%2B1vbCZjxhTeesyba5gYf1ibF8saZdhNpTm9XAGuobQ22jtU2L7f18FbtwstGs7MLKmhSNH2hmgYvVNNkw76aOXmxrzs7Ozs7OhqY1VqNhWJ%2Bf2A%2FAG%2FcdtvR3yj4%2F49G66M%2BZWx9SR08%2FfuUeMR3lQV92x89qtI3VTC5dunTp0iXDcWLnkzUxGz%2F%2B0VCNsLCwsLCwsH4%2B27tlggV%2B9relWA0aB88gMWEAQ2ahscE95jb4hzUps6a0xuBoVYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgj91bRgBSaETEehUCgUivqz8KnVarVabZi2t6n7iS2od1DvoN6WllI3qZvUbf58kIMc5NOmQT7kQ36PHvd3XAbLYNm1a8I%2F33xj9brV61avb9wYvzt%2Bd%2Fxuc5w1FCHzgzNxdDANXchNxdwCQkcRcjHkYshFDw8ukAvkAtVq8AVf8H38cUiGZEh%2ByAGzYBbMYitvDRqkW6lbqVs5daryH8p%2FKP%2BhVKpGqEaoRuAkTQj9GQxgCLUCq3Fxz3HPcc8lJsJoGA2jBwyA9bAe1l%2B6REtpKS1dulTYO%2Fl%2BKKP21J7aP%2F00p%2BAUnGLtWlgJK2FlYCBNokk0SaMRzjt8%2BIHsA9kHsusu7IMQYjCAdXAqlUqlUrX8eKVSqVQqxUt%2FU2t85lozlHWVdZV1nT2bdqPdaLcBA8AFXMDlwgWuF9eL6zV8%2BH6yn%2BwnDa0x%2Fd13ISEhISEhR45w67n13PrffoM34A144%2FHHZd1l3WXdo6IgG7Ihe8MGsfOJkDkyWQBTbFdsV2zfsoWbwc3gZnz4ofDDvXpV7AyaSigNpaHUy4vfwe%2Fgd%2Fzzn%2BqZ6pnqmbNni50uJC7qTJ2p80svAQUKFABmwkyYuWzZnwcug4SEhISEhDt3Qj4N%2BTTk02XLOOCAg717%2BVf4V%2FhXpk6FzbAZNrc%2BgCmWKZYplkVHwzk4B%2BdefbXNymMFXUFXbN6sGaIZohkyd25bvU9jlK8pX1O%2BtnAhaEEL2vJyVawqVhW7bZtY6UFtw2QBjDpSR%2Bo4cSJvyVvylhMmyDvJO8k77doFh%2BEwHF67VvhCFxeLneGmkqfIU%2BQpXbvCGBgDY5YsEfL1%2FPP0W%2Fot%2FdZ8agJi16D%2B6ugX9Av6ha8vmUPmkDkAhBJK6OHDzT0PH8KH8CGHDnG%2BnC%2FnC0AOk8PksK%2BvqdI5%2BKPBHw3%2BaO7c1PLU8tTybt3Ii%2BRF8mJ4uMkK4v%2Fg%2F%2BD%2Fdu8O9An0CfSZN08DGtCY7ORNpyhQFCgKpk2j%2B%2Bl%2Bun%2F9eiqnciqnVPmd8jvld6WlKq1Kq9Lu3StC0lAbMF0TYhzEQRwh9Bf6C%2F2FrXg0bRpEQRREKRTy9fL18vWbNrlnume6Z8bExGyJ2RKzpaZG7AJg5syeM3vObJnslt8tv1t%2Bc%2BYI6Z43TwjADg7sBhtuwA24YT4Le3T0JsSOPgqRHCQHyUHD%2B1t%2BZvmZ5WcmGGSzF%2FbCXtPlaxVZRVYRno%2BIiIiIiJg2TTdeN143%2FtAh%2BBF%2BhB%2BHD2%2FxiX3AB3ySk8t8ynzKfKZPZ%2B9jqnQ3lWKjYqNi45gxMBgGw%2BCtW4W%2FhBA1URM1IbSCVtCKb75RuindlG7jxqnyVHmqvOPH2zudyLS4Nn%2BHaIiGaAcHeBqehqf%2F%2Bc%2B8uLy4vLikJOFOadw4sQuApYOli6XzfrqN%2FRGoxU43MhPxEA%2FxhjWwdW%2Fo3tC9MXZsc0%2FDJXAJXILhOLqJbqKbWrK2diPJjY%2BPj4%2BvqqLD6XA6XKmEQAiEwKysZp%2FoIByEgxcvSl6RvCJ5JSzsKDlKjhKdztTpbYwyWZmsTPbxEQJWfLzw18Ki3o5ykIPc2poW0SJatH%2F%2F%2FeNQh2ayAEZOkBPkRBMu7B%2FAB%2FABxwmBQvxFyOlgOpgOlsnupwuh5iiDMii7cuX%2B%2F9thO2z%2F%2BGOhz9TRsbHDhUEcnTtzEk7CST7%2B%2BMFXd%2B5sq2SzJn2JVqKVaIOC4GV4GV4uKmr0wFIohdKCAlgLa2FtUNA%2B332%2B%2B3xv327DEn4o4cbTxYW%2BR9%2Bj7x04AB%2FDx%2FBxly6NHhgEQRDk5MSOC44LjguOc3Vt7%2FQj02j7C3YsxELs7dvEk3gSzyVLyuaVzSubN3Kk%2BpL6kvrSgQNiF4AmV5OryU1MZOli6WTpNt6%2FyYEaNQlrAjT%2B29L92ovCX%2BGv8P%2F4Y7AHe7CPjLz%2FQgEUQEG%2Ffvxl%2FjJ%2F%2BcQJoS81LEy447e3F4bHd%2BokPDf23HNcFpfFZZ08KYw%2B7NsXkiAJkk6f1j%2Bvf17%2F%2FBdftHU%2B9q3bt27fusuXqRf1ol7h4bAAFsCC%2BjUpGkNjaIxWy3fiO%2FGdQkLU89Xz1fPrBO52Mi5tXNq4NFtbKqESKtFowBZswdbbu9kn%2BuM4SS9JL0kvjSZicsTkiMl2du2dH9Q6JrsACD%2FUW7eEH0BNDfmV%2FEp%2BjYmxmmQ1yWrSpk3CDAN374qd4aYSvtAODro9uj26PfPmCU0uc%2BaQfJJP8qVSdY46R53j4dHe6TLuCzJ1H5jYgcG8ESLfLt8u3%2F7552Qv2Uv2zptnslOvhJWwMjWVVJEqUiXeg8xKhVKhVERE8F%2FwX%2FBf7NpFtpKtZCvP02gaTaNDQ9kNX3unS%2Bi7k0h0ubpcXe6%2BfeAETuAkl5vsDRzAARwOHCiLLYsti1UqhSbR2tr2zidqHtM14a2G1bD6p59oZ9qZdl61SkM1VENzcmA37IbdYmez%2BR4MuB9%2BGNI5pHNI5%2F%2F9D1zBFVxXrIAcyIEcsVOJ2gchir2KvYq9n30mNBE2IXDVQA3UnDtHn6XP0md1OnKFXCFX%2FP3Zy3QVXUVXpaeTa%2BQaubZli1u0W7Rb9PbtYg9uUqlVapU6Pl6ZokxRpnh786V8KV96546mSlOlqWr%2FwMVUTaiaUDVh9Wqyn%2Bwn%2B00YuJi7cBfuBgV1eq7Tc52eY48tvP66WPlFTYN32h3MozaVlHmPQiRE%2FrX8a%2FnXX35J4kk8if%2F73xs9xAVcwGXPHqtSq1Kr0hdewLkNEWo7og%2BiQMh8UQp%2B4Ad%2BaWmN7joTZsLMzz9Xh6vD1eH%2F%2BMf94xFCbQYDWAeDfVTtSxit9%2Fnn8qnyqfKpUinREi3RfvLJ%2FR3swA7s1q0TAteSJcJGDFwIIYTMjNJP6af0e%2F99xRuKNxRvsEl6EUIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYSQMZzRAYkqPT09PT29%2FswVAQEBAQEBhhlHmrqf2E6POD3i9Ihu3ST7Jfsl%2B5cvJ%2FbEntiHhpJIEkkie%2Fak2%2Bg2uk2ngxiIgZiTJ2kQDaJBmzcPGDhg4ICB8fFipx%2BhjsRsfvioaRq6kJtKeweERyWApXdL75bebfhwYTmUffvor%2FRX%2Bquzc5NPcAAOwIFdu6yuW123uj5jRp9NfTb12XTvntj5Qsic4VyICLVCRveM7hnde%2FWiJ%2BgJeiIhgZbQElrSuTMsh%2BWw%2FPBhEkpCSeh775EfyA%2Fkh99%2FF47q0kVYCTw8HA7BITi0ejX9jH5GP3v%2Bed1l3WXd5YoK2ASbYNOsWWLnDyGETIbVRNjf1jI%2Bn9j562iEmld8%2FP1yfD79%2BfTnd%2B8WSpdrdMXzjHkZ8zLmDRwoBMKKivSd6TvTd%2FL8ucnnJp%2Bb%2FMQTYucPIXOGNbAGBGcEZwRnjB4tHScdJx1XXa3KU%2BWp8o4fFztdyDwIAcbOjp%2FIT%2BQnKhQkjISRsNpayS3JLcmt%2BfMJIYQQnm%2FsPP6b%2FDf5b0pLS1%2Bevjx9%2Bb%2F%2FDQEQAAFvvcVv5jfzm6dOFfY6ebK16c0YmjE0Y2h0tNAH9%2BqrbVYwKZACKZs3B8wMmBkwc%2B7cNnufxvIbkBGQEbBwIX2NvkZfKy8PmBswN2Dutm1ipQe1jVYHMHmKPEWeEhcn%2FDdiRJMPnAWzYNaxY5ozmjOaM88%2FL3ZBMBGTIyZHTLaw0CXpknRJH37In%2BPP8edqagKfDXw28Nlnn009lXoq9ZR4K%2BYay8jIyMjIEDsVfz36fvp%2B%2Bn7e3mQYGUaGWVrCPbgH99LTfat8q3yr8vKaez4SS2JJ7MGD9AX6An3hrbfgbXgb3vbzgyAIgqDWp7f%2Fyf4n%2B5%2BcOzdjS8aWjC3dusFwGA7Dw8NNViBjYAyM2b3bv9C%2F0L9w3jxhfTSTFnmTCDcC06bRABpAA9avh3RIh3RKM4IzgjOCS0v9E%2F0T%2FRP37m3%2FlKG20PoaWCiEQug%2F%2F0nGkrFk7MGDdAFdQBfIZA3tTj4nn5PPa2qIFbEiVu%2B8I3YBGNMt1y3XLZ8xQ2gC8vKCHMiBHAD3me4z3We%2B9JIQwLZuFTudjL%2B%2Fv79hofrmEzsAdtRBHLSKVtEqSgkQYSTUUBgKQwmBm3ATbrbghNtgG2yrk49jcAyOma5Jl9UIf%2FX41eNXj2nT7EvsS%2BxLDh2iJ%2BlJenL48BafeA2sgTXJyXaFdoV2hdOnN7XmaWpCjXjMGD6MD%2BPDtm4FG7ABG0KEGi0hkAZpkPbNN0IAHzfOf7b%2FbP%2FZ2KLS0TXaRt8YTa4mV5OblUW30%2B10%2BzffNLa%2FEOC%2B%2Bkr1m%2Bo31W%2FZ2WIXADOh%2B4TuE7p36QIjYASMePPNeun%2Bin5Fv1q8%2BP5%2B6C%2BtZmrN1JqpOTlkKVlKllZVwVk4C2f79Ttvfd76vLWbW3PPR5NoEk0aO5b9T8pJOSk%2Fd87U6R6eOzx3eG5VlWy9bL1svVIJ62AdrMvKau55SDgJJ%2BEXL0qHSYdJh4WFeRNv4k10OtOX9J87a3fW7qydjw8%2Fk5%2FJz4yPFwKXhUW98l1D19A11ta0kBbSwv372XHtnV5kWq0OYIz1FOsp1lPWroWe0BN63rlj%2FDp5h7xD3ikpsf7Y%2BmPrj%2BusaGsmZNdk12TXFi2iP9Of6c%2BdOtXbIRqiIdrBwSLWItYi9q23xE4vEldOTk5OTs69e8JzXLm5dB%2FdR%2FdJpbWhtaG1oRs3NncQh9CE%2BPrrrMmL5JN8kv%2Ftt22Vfp8onyifqOJicogcIoeCgshr5DXyWlFRowdagRVYFRTolXqlXhkU5Dvfd77v%2FNu327n4%2F2gqdHHhvDlvzvvAAegBPaBHE24slaAEpZMTO06oubm6tnf6kWmYvOlFkapIVaTOmSP8gFeuvP9Ga8gasubtt9Xx6nh1%2FI4dYmecEfrw%2BvWDG3ADbvz0E3iCJ3hKJA0ecANuwA29XvKJ5BPJJxMm7E%2Fen7w%2FOTOzvdJr3JRm6iZEc3muylxdoVfoFWplpY3Txmnj4uPBD%2FzATy6vt6PRMHp%2BGD%2BMH5aZySfzyXyyjY20VFoqLQ0NfXAYvYMDXIbLcHnr1oCwgLCAsPYbRi9cyEeM4N15d979p59gNsyG2VZW93cohmIo1mqpE3WiTqNGDRgwYMCAAamp7V3%2BaYvSFqUtsrXlorgoLurIEdCBDnRDhrT0fGQUGUVGpaaS0WQ0GT1qVP%2Fd%2FXf3363Vtne%2BUMuYfBTirdm3Zt%2BavX27W5lbmVvZ9OnEkTgSx%2BpqK28rbyvv2FixM1zPalgNq5cvFzrN%2FyRwMX8EOL1Wr9Vr33tP2Gg%2Bg1BQ27jw5YUvL3xpb689rj2uPa5SCYFr1KgGD%2FgIPoKPxoyhQIHCmDGsr0zytORpydMAwnYAUIACFGD0IPPrr7d3%2FoQLd3Ly2bSzaWfTXnqJ7CQ7yc5du0gciSNxPE9v0Bv0xpQpA6oHVA%2Bobv%2FAFRcXFxcXJ5FwlKMc3bWrtYGLoUfoEXokMBA2wAbYEBeXRJNoElUqR5PRZDSprW3vfKLmabM7bUWBokBRMG6c8MWvqtIM0QzRDElOFjvDHR3WwNoXC1w1%2FWr61fRTqcABHMDhTwIX4w%2F%2B4H%2F0qPBAsocHhEM4hDs5sZfJCrKCrPjtN%2FoUfYo%2B9e9%2FC8POExLEzi8jDHZYskQIsHfu%2BLv6u%2Fq7btkiVnrS%2B6b3Te%2B7Zg3sgT2wZ8mSNnujlbASVv7nPwF7AvYE7Gn%2FGwnUPHih6mBwKqn2SW%2FK7ym%2Fp%2Fzu4GD5quWrlq%2F%2B8AN8BV%2FBV8OGNXrgYTgMh99%2BO2BhwMKAhR991F7liNBfkckGcSD0KMm5knMl54pWS14kL5IXL19uaD%2F2ADN4gzd4v%2FQSBi6E2g%2FOxNHBYBNf%2B4iMjIyMjNTrhb6Xl17yG%2Bk30m%2BkVEqP0WP0WGQk9IJe0Kumhn5Pv6ffT58eYBdgF2DXdqMGEUIIoRYRRulZWNyf%2B3B7%2Bvb07SEhYqcLIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQshctd1yKkk0iSbNmXP%2FjUaT0WR0TIw6UB2oDoyJaa8MPkOfoc9QqdThuMNxh%2BPW1qoRqhGqEeXl7PVQGkpDqaOjfox%2BjH6MUgm5kAu5o0ZBBVRAhYcHPUwP08NSqbDA4O3b8Al8Ap%2F89puwYq5azRb0bK%2F8GFM%2BqXxS%2BWTv3nwZX8aXRUTA1%2FA1fP3UU8IKv926wd%2Fh7%2FB3SiELsiCroIBaUStqdeyYNEwaJg3bs2c%2F2U%2F2k6tX2fkiIiIiIiKsrbWntae1p2WyA9kHsg9kl5WJlT%2BEEGrIIx%2FAFImKREXik08K6xstWFBrXWtdax0VJR0lHSUdNXEi7U17097z5oEUpCC1sWnyiWfADJhBKU2kiTTxhx%2B007XTtdM%2F%2BOAoOUqOtuHKtBGTIyZHTLawqFpWtaxq2Ztvkn%2BRf5F%2FhYfTkXQkHdn4AooMOUaOkWM8T8fT8XR8fDw3iBvEDYqO5v%2FO%2F53%2F%2B4YNwsq2iYmaM5ozmjO7d7c0vfJ18nXydSkpbVUejdEs1izWLG79shsIIfPTygBGiHyufK587ocfwmPwGDw2fnyTD90G22Dbnj2aTE2mJrPtJj8NKQkpCSlZsoRsI9vItshISIVUSL1yBTbCRtjo5QU7YAfsaP3cguQgOUgOpqfXZtdm12ZHRQk1l3v3TJWPwMGBgwMHy2Sum103u27euJH8TH4mP7f%2BwszFcrFcLKV0KB1Kh167RvvRfrSflxeJITEk5pdf1JfUl9SXFixo6fkxgCGE2korJ%2FOl1LrQutC6cOXKyoWVCysXdu9O1ERN1H5%2BDR7xNH2aPp2SYnPC5oTNibVrIRMyoc3WMyaE5JAckjNy5P1NgRAIgd7eQlNaYSE3mhvNjXZ2FlaQzskhu8lusvvrr%2BlkOplOPnuW2lN7aq%2FX0%2BV0OV3eqxe3i9vF7XruOfgcPofPn376fr6epc%2FSZwMCJGGSMEnYsmUQBVEQtWqVqXLi%2Bq7ru67vLljQYOBKgARIOHpUckVyRXIlLq5aWi2tlp4%2Fz16WhcpCZaGDBtFz9Bw9N3MmvUlv0psDBvCBfCAfWFAA%2FaAf9PPyup%2Bfx%2Bhj9LEhQ%2BQ75TvlO21shPXcKiubm24MIAihtmKyJsTguOC44DhXV2HF1NhYuAE34Ebnzvd38AAP8MjN1b%2Brf1f%2F7vTpbd23Euwe7B7s3rcv9yb3Jvfmzp0N7Ucfp4%2FTxy9ftom2ibaJnjEjPj4%2BPj6%2Bqqqx8yvtlHZKu%2FBwfiW%2Fkl%2F59tv3X%2FijaZEsI8vIshkz1F%2Bqv1R%2Fee5ci%2FMRHhweHN6zJ%2BfKuXKucXFCTdewcjSNolE0av36BLsEuwS7%2F%2F63aWeVSuVfy7%2BWf%2F3FF1AIhVA4cGBDexJLYkkslyxRz1fPV88%2FfNjkHxRCCLWQyZZTSYxMjEyMzM9XJiuTlcnLl%2FNH%2BaP80X%2F%2Fm%2FyX%2FJf8t6ZGb6u31du%2B9daBWwduHbjV9oMCOBWn4lQjR8IROAJHGt6PnCanyelevaqWVi2tWrp8OcRDPMSvXCm8yvMNHafSqrQq7d698kx5pjzTz09YYj4sjDVJ8lv4LfyWiAj4Er6EVgQw7m3ube7t0FAhH4bABY7gCI6HDjUvcBGiGKIYohjy9tu0kBbSPwlcDJVRGZWxmmbzAxg2ISKE2orJF7QURvmlpAij3zZsIL7El%2Fh%2B8EHircRbibcuXWrqeYJ6B%2FUO6t2pU0vTQd4h75B3nnqqsf1oX9qX9i0pgTEwBsZYWSk2KjYqNvbs2dT3oUvpUrp0%2B%2FZ673%2BX3CV3m7CCb2P2wT7Y98QT9d7XglpQi9jYpp5GniJPkac4OfE%2F8j%2FyP%2Bp04AZu4JaVxQZzNJg%2Fd%2BpO3Vk5Nn2QCEIItbVGmhAJEe6gf%2F%2B93VP2R1Ocpqumq6br0KFNPWxc2ri0cWnOzpZPWj5p%2BaRGA0VQBEUXL5IgEkSC0tJ4e96etz9zRhi9d%2BaM0LdTXNza5Mo%2FlH8o%2F%2FD778ESLMGya1eWfuso6yjrqKeeit8dvzt%2Bd3V1s8%2F7rfxb%2Bbc%2F%2FcSaZFnAsbK0srSyHD5caPLU61uabuExAysr23jbeNv4fv3ICXKCnBg4kHxEPiIfDRok1MAef5yMIWPImIULNUmaJE1SWlprywshhFqrkSZESkVL2VW4ClcNz2s1OUOTpJOkk3Q6vYfeQ%2B8REnLA7oDdAbuiono7JkIiJJouueQ8OU%2FO8zwdRAfRQQCsKVF7RntGe6YVoxyjIRqiCYEQCIE2WD7xwWH%2FZ87c%2F%2FsJfAKffPWVUBO2tBS2s78IISS%2BNluaXnFccVxxPDSURtJIGllTIzzwm2jCkGEews6HnQ877%2BSkX6pfql964AB7HosqqIIq7t5N8EnwSfAZO7al55e%2FI39H%2Fs433wh9Xv36se3UmTpT5xkzEl5KeCnhpYwMscuhwfSbqA8M%2B7IQQsZM3qch9LUMHkwtqSW1XL4c9sN%2B2P%2Fee2y72Bk2tRquhqvhpk41fpCYm8RN4iaZoOk1DMIg7ORJ483cWm4tt3baNLHzjxBCYjFZDey5xc8tfm6xs3P1yOqR1SO%2F%2BYZcIpfIpS5d2OtssAQ3jBvGDZs%2BXe2idlG7FBSIXQAtJQTkESOEB7I%2F%2BcR4eDvxI37Eb948dbA6WB3822%2Bte58ePYT3iY%2Bv9z6ryWqyesMGdYm6RF3S9EEdCCHU0bU6gLGpjXRanVan%2FeIL9kBvgwcsh%2BWw%2FOLF8ury6vLqV15p66mXWovNgOHyo8uPLj%2F27s1d5a5yV0ND4Wl4Gp4OD4f34X1431DzMtUMFsbkU%2BVT5VPffFN4EPuFF4xfZ%2B%2FLz%2BJn8bPi42UKmUKmyMzc57vPd5%2Fv7dtilyNCCJlaqwNYvamamvrGu8guskulUqeoU9Qp%2F%2FqX2AXRECFwxMezGTwazM9aspasvXmTK%2BAKuIIZM4RJcktLTZUONimx3Um7k3YnN21qbCop8j55n7yv06nvqu%2Bq744YIXY5IoSQqbX6QeaELgldErqsXSv8t3atuU3m29bY1FhCfpcvVxM1UZswcDFCTbW2VqjxLlig26Pbo9vz1lu0iBbRIsMD1GKXB0IItReTzcTxqCOxJJbE1tRAFVRB1e%2B%2F8xf5i%2FzFvXsTSAJJIEeOtFc6Hnye7MMP5VflV%2BVX9%2BwR5pScPJlUk2pS%2Fbe%2FCXM32tnBMlgGy8QuPYQQQu1OGETRjGVWEEIIIYQQQgghhBBCCCGEEEIIIYQQQggh1EpsMl%2B5h9xD7hEcLHZ6EEIIPVpM%2FuDrg5P2%2Fuc%2FD746d66w%2FtapU2JnHCGEUMf2yE%2FmGxERERERwSa%2FtbAQFoCsqmKvP7jys58f15fry%2FX19CRJJIkkOTrSMXQMHUOI8KBwZSXtQrvQLgUFZCfZSXZmZgrLpeTmtnU%2BGsIW8JRJZBKZpH9%2F4kW8iJe7O0yBKTDF1pbtR54gT5An7t4V1hXLza0JqwmrCcvM%2FOHmDzd%2FuFlSwvZjU1bZ9LHpY9NHIjmQfSD7QPa9e2LlDyGEGvLIT%2BZ7fzb3BEiAhOHDrTOsM6wzVKqKiIqIiggfH5gEk2BSYCBREiVRGmZ5b7J5MA%2FmXbumnaidqJ149Ghb5%2BfBAPPUU5wP58P5%2BPg09zzkMDlMDlMqLPyZnp61IGtB1oLTp%2FtW9K3oWzFxIt1Kt9KtWVlCAMvMbHH5z5XPlc89ccJ4Fn1TKV9Uvqh80ZNPsqm2TH1%2BhJD5avV6YJUxlTGVMf%2F4R6OBi%2FkIPoKPfHw6De00tNPQJUvaOoP0MD1MD%2FfsSU%2FSk%2FSkg4N2sHawdnBEBORCLuQOG9biwMVsgk2wqWdP%2B8ftH7d%2FXC5%2FcAVj02E1Sftl9svslwUFtTRw3S%2BXP2qW0nxpvjR%2F4MB%2B3%2FX7rt93U6aQZJJMkl1cYCWshJU9e5o6HwghZCom7wMzt8l8Q7xDvEO8p00DP%2FADP8OUUELAJYQG0SAaRAgJIAEkoKiIjCfjyfjTp6tXV6%2BuXl1QIJ0knSSdVFsrPS49Lj3u6Mg78868s68vyEEO8r59jd%2BP5tN8mn%2FlSmJqYmpi6k8%2FmSofQceCjgUde%2Bopbg23hlvTv3%2B9Hf6oCQo1nYwMPoQP4UOKiyW7JLsku1iA7toV4iEe4gcO5F15V97V3Z0cJAfJQUrr5UNFVVSl13eP6h7VPerrr2O2xGyJ2VJT016fG0IINeaRncxXqAl16wY%2B4AM%2B9ecyZBduqqM6qquqKggoCCgIUKlSE1ITUhNqaoQmxzoHuIAL3O%2BzKygICQkJCQm5fl1oihs7ltVoiCtxJa7e3spkZbIy2d1dNUI1QjXi1q2W5iOUhtJQ6uiot9Hb6G38%2FIT3qbPDFJgCU375JSEoISghKCOj3gmGwBC4v%2BjK9evC3xs3QoJDgkOCJ08GAgRI5871yuePmmnexLyJeRO7dxe2Xrki6oeKEEJ1PLLLbwRdCLoQdGHIEG4Rt4hbxEZF%2Fok%2FajBDJg6ZOGTiTz%2BtIqvIKsLzjR0mrBc2fDgto2W0zNCEyk3kJnITs7PV89Xz1fMPH25pPoKXBS8LXjZsGEkn6SR94EC2vaU1PcUQxRDFkGee4V14F96lCU2QGtCA5tKl9pp1X75Ovk6%2BLiXFVOfTLNYs1ixueN00hFDH1eo%2BsLby4OjA5iNdSVfStUePxvajPWlP2rO0lG6hW%2BiWqqozcAbOQDPedxEsgkVpacab9Un6JH2Sh0erC2IxLIbF9c%2FDfcF9wX1x%2BnRTT8Nm1a%2F9tPbT2k9ra0kuySW5JSVsMEeD5TOJTqKTPD3%2FKNVH9oYHIdTxNHJBIkS4I%2F7993ZP2QyYATMo1XTVdNV0HTq0qYcJTXf29nq9Xq%2FXR0RAJERCZEGB0JSWnw%2BfwqfwaX5%2B%2FtT8qflTCwtTT6WeSj3V%2Br6dEG2INkT74ovGw9e1Gq1Gq9m2raWj5EIWhSwKWfTyy3ABLsAFS0sWcDRVmipN1datwl6N1xQbwkY12sbbxtvGd%2B0qbHV1ffjf779PjEyMTIzMz29teSGEUGs10gfW8J15m7sKV%2BFqeXlzD7P8zPIzy8%2Fu3evcuXPnzp1jY2MKYgpiCur0aRn3bZk5OowOo8MIIRfIBXLB9Od%2FMLCywGQIUMbPhYldHgghxGCTUCuxpjm6gq6gK6ZNY9upJbWkllVViXsT9ybujY1t6fmDi4OLg4vDw8nL5GXyMqshAQgrQn%2F3nfCcVlGR2OXQWuwxgaphVcOqhp040eITvQvvwrs8L9RQn3hC7HwhhNqO2faBdRSkkBSSwgEDjLdzrpwr59ry0YcMfZI%2BSZ%2Bsfx7JeMl4yfj674sQQn8Vj%2FxzYG1FmKS4Tx8ogRIoGTXq%2FpRTf5AslyyXLNdoWjuMXhiu37mz0Pc1ebLx%2B5BKUkkqT5zQJGmSNEn1B5MghNCj6pF9DsxU2FRZFZEVkRWRXboID0T7%2BtKldCld2qeP8f5seHtrAxeTkJCQkJBw506IVYhViNW5c8JWf%2F%2F772dDbajNsGHBccFxwXFublJ3qbvU%2FezZmhk1M2pm3L6NcxkihB5Vra6BKWIVsYrYt9%2BmBbSAFoSHN%2FnAN%2BANeOOHHzQSjUQjeecdYaOIg0YaEDw3eG7w3MhIco1cI9ccHRvaj35Fv6JfFRfbRtlG2UZpNPG743fH766uNlU6VtAVdAXluBTXFNcU16AgYVTlnwzTXwJLYEltbcIzCc8kPLNtm1jlh891IYTaSqv7wKxUVior1Zo18Dq8Dq%2BnpjZ6wC%2FwC%2Fxy7pz1FOsp1lNWrRI2ml%2FgaipW42qrwMWwB6ttRtqMtBn5%2FffCIJELbTAuESGEOgaT9YFN6D6h%2B4TuXbrIxsrGysbGxkIABECAi8v9HWbBLJhVVATZkA3Z06cL64IVF4tdAI2RD5IPkg%2BaPFmfrE%2FWJ1tYcJFcJBdZWMhf4i%2Fxly5cEJrobt4UK32KAkWBosDFRV%2BkL9IX%2BfmRU%2BQUOeXiQq2oFbWyshKe29qxQ%2BxyRAghUzP5IA7hQWIfHz6Pz%2BPztm0jH5APyAccBz%2FCj%2FDjq68K64CdPSt2xhFCCKGHEkbpBQcLk8ZGRIidHoQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIoUdPs%2BdCDOod1Duot5%2BfZJdkl2TX3%2F5GxpPxZLxhvSl9tD5aH52eLnlG8ozkGZ4noSSUhLq7U3%2FqT%2F1v3KBRNIpGDR9ufBydTWfT2aWlEAEREJGVxek4Hafr21dYV0ulMk6HYpZilmJW%2F%2F7G56MD6UA6kBCyi%2Bwiu86c6ehzLyrtlHZKu%2FBwepleppezs1l%2B5CnyFHmKjY2w1wsvCOX17beuX7l%2B5fqVTpdXmleaV%2Frii8K6ZbduCZMn%2F%2FgjO69wfL9%2BTS1n4kk8iaeXl2qFaoVqRUKC8CrHCQuYzppVO6V2Su2UXbuko6SjpKM8PRv7nDVrNGs0a9RqscsXIdRxtXxBy3iIh%2FiCAnWJukRdUudCFAmREMlmSa%2B%2F5D2XwCVwCXl5qhJViaqEXQgBYA2sgTUA8gh5hDyiX7%2BmJsP4fEE3gm4E3ejUSbZYtli2ePJkYZb8mzd%2FuPnDzR9ulpSIXeDNxR%2Fhj%2FBHMjO5WdwsblZAgLD17Fl4C96Ct%2Fr0Ibkkl%2BTm5qouqS6pLpWXh34T%2Bk3oNwEBNJ2m0%2FTbt7kN3AZuQ%2Ffuz459duyzYx0cDh46eOjgobt32zrdjX3OCCHUWi1fDywCIiDCxUXRRdFF0WX6dPZXmI3e3r6hw%2FgQPoQPcXMzPk6RqEhUJD75ZGszJCxvUlYmrJel1UoHSgdKBza8EKW5Kw8sDywPzM4WlkextWXLp5BepBfp5eOj99f76%2F0zM4W9CeFlvIyX%2BftLaiQ1kpozZ8AZnME5O9tyguUEywn1byjaSlt%2Fzggh1PIA9kANLDaW%2FRWaosrLG3zDP%2B7MjY9TB6uD1cG%2F%2FdbaDI1LG5c2Ls3Wltwj98g9OzvZOtk62bq2r3G0laPkKDlKams5T86T87x0CQbDYBg8YoTQRCeVJu5N3Ju49%2Fr1kJCQkJAQb286g86gM%2Bzs%2BB38Dn7HqFH8Kf4Uf8rLi7PmrDnrvn0jIiIiIiKsrZv6%2FvQAPUAPVFeDDdiAjb39nNlzZs%2BZLZOF0lAaSjt1YvtVZlVmVWYZFvJs688ZIYRa3oTYQvfvzDcoNig2TJ%2FOttOFdCFdyC6AaWm8FW%2FFWzk7szt3th%2BxJJbEMieHAgUKpaX1zjcaRsNogNro2uja6FOnEn0TfRN9b98Wu6Bb7RP4BD7JzIQX4UV40d8fKFCgKSl%2FlB4lq8gqsmrAAKiESqg8eVKdpE5SJ6WlQRIkQRKA%2FAn5E%2FInFApdua5cV%2B7vLxxXXt5YObsGuwa7Bp88mb8nf0%2F%2Bnl698vvk98nvM306jaSRNJLn%2BQ%2F4D%2FgPzpwRAq1OJ%2FSZNf45a1ZoVmhWfPut2MWKEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEKo3f0%2FYCcRj5nKHu4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTMtMDItMDlUMTk6MzI6NTMrMDE6MDCs99SeAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEzLTAyLTA5VDE5OjMyOjUzKzAxOjAw3apsIgAAAHl0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9qb3MvRHJvcGJveC9Kb3MvcHJvZ3JhbW1pbmcvamF2YXNjcmlwdC9qc29uZWRpdG9yb25saW5lL2pzb25lZGl0b3IvY3NzL2ltZy9qc29uZWRpdG9yLWljb25zLnN2Z2GG7LgAAAAASUVORK5CYII%3D%29%3B%0A%7D%0A%0A%2Ejsoneditor%20div%2Etree%20button%2Ecollapsed%20%7B%0A%20%20background%2Dposition%3A%200%20%2D48px%3B%0A%7D%0A%0A%2Ejsoneditor%20div%2Etree%20button%2Eexpanded%20%7B%0A%20%20background%2Dposition%3A%200%20%2D72px%3B%0A%7D%0A%0A%2Ejsoneditor%20div%2Etree%20button%2Econtextmenu%20%7B%0A%20%20background%2Dposition%3A%20%2D48px%20%2D72px%3B%0A%7D%0A%0A%2Ejsoneditor%20div%2Etree%20button%2Econtextmenu%3Ahover%2C%0A%2Ejsoneditor%20div%2Etree%20button%2Econtextmenu%3Afocus%2C%0A%2Ejsoneditor%20div%2Etree%20button%2Econtextmenu%2Eselected%20%7B%0A%20%20background%2Dposition%3A%20%2D48px%20%2D48px%3B%0A%7D%0A%0A%2Ejsoneditor%20div%2Etree%20%2A%3Afocus%20%7B%0A%20%20outline%3A%20none%3B%0A%7D%0A%0A%2Ejsoneditor%20div%2Etree%20button%3Afocus%20%7B%0A%20%20%2F%2A%20TODO%3A%20nice%20outline%20for%20buttons%20with%20focus%0A%20%20outline%3A%20%2397B0F8%20solid%202px%3B%0A%20%20box%2Dshadow%3A%200%200%208px%20%2397B0F8%3B%0A%20%20%2A%2F%0A%20%20background%2Dcolor%3A%20%23f5f5f5%3B%0A%20%20outline%3A%20%23e5e5e5%20solid%201px%3B%0A%7D%0A%0A%2Ejsoneditor%20div%2Etree%20button%2Einvisible%20%7B%0A%20%20visibility%3A%20hidden%3B%0A%20%20background%3A%20none%3B%0A%7D%0A%0A%2Ejsoneditor%20%7B%0A%20%20color%3A%20%231A1A1A%3B%0A%20%20border%3A%201px%20solid%20%2397B0F8%3B%0A%20%20%2Dmoz%2Dbox%2Dsizing%3A%20border%2Dbox%3B%0A%20%20%2Dwebkit%2Dbox%2Dsizing%3A%20border%2Dbox%3B%0A%20%20box%2Dsizing%3A%20border%2Dbox%3B%0A%20%20width%3A%20100%25%3B%0A%20%20height%3A%20100%25%3B%0A%20%20overflow%3A%20auto%3B%0A%20%20position%3A%20relative%3B%0A%20%20padding%3A%200%3B%0A%20%20line%2Dheight%3A%20100%25%3B%0A%7D%0A%0A%2Ejsoneditor%20div%2Etree%20table%2Etree%20%7B%0A%20%20border%2Dcollapse%3A%20collapse%3B%0A%20%20border%2Dspacing%3A%200%3B%0A%20%20width%3A%20100%25%3B%0A%20%20margin%3A%200%3B%0A%7D%0A%0A%2Ejsoneditor%20div%2Eouter%20%7B%0A%20%20width%3A%20100%25%3B%0A%20%20height%3A%20100%25%3B%0A%20%20margin%3A%20%2D35px%200%200%200%3B%0A%20%20padding%3A%2035px%200%200%200%3B%0A%20%20%2Dmoz%2Dbox%2Dsizing%3A%20border%2Dbox%3B%0A%20%20%2Dwebkit%2Dbox%2Dsizing%3A%20border%2Dbox%3B%0A%20%20box%2Dsizing%3A%20border%2Dbox%3B%0A%20%20overflow%3A%20hidden%3B%0A%7D%0A%0A%2Ejsoneditor%20div%2Etree%20%7B%0A%20%20width%3A%20100%25%3B%0A%20%20height%3A%20100%25%3B%0A%20%20position%3A%20relative%3B%0A%20%20overflow%3A%20auto%3B%0A%7D%0A%0A%2Ejsoneditor%20textarea%2Etext%20%7B%0A%20%20width%3A%20100%25%3B%0A%20%20height%3A%20100%25%3B%0A%20%20margin%3A%200%3B%0A%20%20%2Dmoz%2Dbox%2Dsizing%3A%20border%2Dbox%3B%0A%20%20%2Dwebkit%2Dbox%2Dsizing%3A%20border%2Dbox%3B%0A%20%20box%2Dsizing%3A%20border%2Dbox%3B%0A%20%20border%3A%20none%3B%0A%20%20background%2Dcolor%3A%20white%3B%0A%20%20resize%3A%20none%3B%0A%7D%0A%0A%2Ejsoneditor%20tr%2Ehighlight%20%7B%0A%20%20background%2Dcolor%3A%20%23FFFFAB%3B%0A%7D%0A%0A%2Ejsoneditor%20div%2Etree%20button%2Edragarea%20%7B%0A%20%20background%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAANgAAACoEAYAAADSkvxvAAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA%2BUO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAANtZJREFUeNrt3XlcVFX7APDn3JlhR1CUVRRyQRDURDPfzFxyAWYGQsEsLX1TI3N5S3PprdS3svRnmen7SphL0etroKYzA7aoqGGlgYogLiCuyCoiDDACc8%2Fvj9txcJDYBu5gz%2FcfPty59845Z2buc89yzwFACCGEEEIIIYQQQgghhBBC6NFCGtvByWnvXgBKxUrg7dvh4QCk0XQ2hNLAQDHTT0hqamvSv3nzvn06nXjpf%2B21sDArK0w%2Fph%2FTj%2Bk3v%2FRLxUoYQg9jYSGTAQBUV9fU1N1uaSlsv3fvwe1isba2tCQEwM3Nyanuz%2BvevepqAIDc3OJinjds9%2FR0duY4AJlM%2BsBvju3HjkPNw74XlpYWFnU%2Fh4qKqipKAaRSobwtLWWyuq9rtcLrPF%2F3U0IdDQawDkomk0pbcl9VU1NbK9791IPpBwCYOPGJJ2QygG7dHB05DqCsrLKSUoDdu48cqXtJj4wcM8bCAkAq5TgAgKtX8%2FN5HiAp6fTp2tr2T3%2FXrg4OhACMHz90qHAJFRQW3rnD8wB79x47VvfS%2BNRTAQFSKYCjo51d3c%2Ftu%2B%2BOHaupASgoqK42h0upVCqRAAD87W%2F%2B%2FnVD7YkTmZm1teZzA8H4%2B3t7SyQAQ4f6%2BtZN7549R49WVwN4e7u5SSQAgwf37SvkTPDtt4cPV1cD3LlTXm4OvwfUMm0WwNasGThw0yYAmYzjZDKAmJjLlz%2F%2FHODChbKyc%2BfEznbHxQLXK6%2BEhFhYNP%2F4rVsTEqqrxQ9kfft6ekokAB4e3bpxHEBpqVZLKcD16wUFD7uQX7mSl8fzAN7erq4cB%2BDj06OHRAJw%2BfKtWzzf8HHtJS0tO1uvB7h06cYNvb7%2B6wcPpqTU1AD4%2BXl5SSSGv%2BaGfS7G6SsvF24sTp%2FOynpY%2FlDTREWFhlpaNvx6dPT%2B%2FffuiZ3Klqe%2FtZqbf66tEjJtWs%2Ber7wC8NJLXl5z5gB4eFhbe3q2XcZbrmtXNzcAgJ07T58GABg5Uql82H6PPebnBwDw7bfp6QAAvXsHBIid9vooFcJSQ3%2FNha3tgy3bGRk5OXo9wMmT588%2FrEaVnHz2bG0twMWLN27UDVT29jY2LW%2FhN527dysqKAW4fbus7GElXVx89y6lhkBgrvz9H3tMIgEoLCwtpRTg5s2iIp4H6N9fqOlwnDmUtkFV1cObXllNUaerrn5YeWOT7aMBmxDhzTc%2F%2FRQAoG%2FfQYMAAD76aNcuAIBFi8LCAABu3MjOBgDYuPH77wEAXFyEQLx27e7dAAAREf37AwDo9WI0ZTExMWr1vXsA1tYP9gUYI0R41cLiwSbI6ur2rZGxdDT3%2FY1rjsbnQS3j4dG1K8cBdOlib0%2BIoWm2urqmhlKACROEpt6ePYUaMKsRi624%2BO7duumorRXqh%2BxGgd04MCygVVbeuyfGjYS517A6WvpbHMCcnCwtu3UD6N7d2rpHj%2FqvE0IIV6d%2BFxDg4PD44wC1tZTWvdAXFOh0eXliNi2uW7dwIQBAnz4DBwIAeHv7%2BgIAfPrp%2Fv0AAHfvlpQAAHTr5u4OAFBZqdUCALz%2F%2FqxZAGIHLsbKSghc06dPmNCSpsVt24SmxfYKZJ07P9gX1NTOdL3%2Bwf2M%2B5RQy7CaF7vAX76cm6vXG8qbBQS2n7kEsJISocbL%2Buh0OqFmxVociotLS3ne8HplpTldflFrtTiAKRTu7pMmAaxbN2jQ5s2N7%2F%2FOO%2F37r15df%2Fv%2F%2Fnf9%2Bo4dAPPnp6bOnClGEZSUFBYCALz22tixAAAxMUeOAAD06NG3L0D9wLVwYXAwAMDp0z%2F%2FLEZ6OyaOE25nwsNHjrSwMAyCuHOnvJznAW7eLCxsygWRNWlVVAiDe319e%2FaUSAyBTKP55RfzGmZg3lgTrJeXULM6e%2FbyZb3eUJNhLly4dk2vNwyWcHLq1ImQhptM2wtLZ0N9c9XVwu2lufTdtbYPSewakLmlv836wDoeBwcnJwAAOztHx4e9bmVlbQ1gaEJELSGRcA985wgRGgGb2hTI9uN54bLJzieVSiRYE2u%2B%2Fv0fHKxx7tzVqw%2B70GdmXrvG84YaGesTQ0hMLa6B7dhx5Up0tOGvseLi556re2c2efLx4%2BPHA5w5c%2BdOSophe3U1z4vbndqzp48PgKGPq0sXZ2chB3l5AIaaV48effoAAKxYsX07AEBVVUUFAMDRo0JTI%2FozrIkwLi4pqbra0KfC7vw9PV1cOE4YxfdnNTH2PJW9vbU1IQCZmcIF99ixtDRzaMrtKNhweV9fIYDduyf0dbEabUNYEyMbrXjy5Pnzen3DgyXQg8SuQT1q6W%2B3QRxabW1teTlAaWlNzZ07Yme7rsjI118HAHB29vAAMDQpzp377LNCysvKAAxNi9279%2BoFADBr1rvvAgD8%2FLNGAwDA8%2B3RRMEGMbDh8ExHGczA%2BiaKioTnpVgAk0iaNr5NInkwp4WFd%2B7ghbP5evf28JBIDA8CFxQI5ditm6Pjn30OZWXCaEv2AHffvp6edZseEWpPOAoRPv30zTcBAGQyoW03Lm7TJgCAnJzMzLr7sT6yZcv%2B8x8AgFWrhD679glcxoxH47X0wWax6PUPhh1WI2gMm1mBodTcHhDoGAYM6N1bIjHMSLFv388%2F19Q0%2FXGLyMjRoy0sAAIChEEd6enCYxD4afw5c3uOytTpb%2B8aWpsFsDffPH361VcN%2F1%2B9WlGRk9N%2BGWs6Nopw9eq66a0vL%2B%2FaNQCAhQtDQsROc8fHRosx%2FfoJDyZbWws%2FD9Y0xbCZLLy83Nzq9qJVVOh0YucFwJBu9nwbG2TC2NkJTZ5stKhYXF2dnOoOlz916tKllgSeCxeuX9frDTN29OghNO1euybuA%2BXor6XNAtjXX1%2B9GhMjdvb%2BOmprH9602PTjjetEbSsrS5ix4rHHhIDk6tqlC8cJF8K6fStMnz7du3Oc4fm17OzcXGH0ojAqUWxDh%2FbrJ5UKz1PxPIBKdfx43dGQQUHDhslkAE5OwuhLsdjZWVkBGPoOz58XRhc218WLwufHRn%2ByuSHRnzO3PqSOnn5sQnxEsOAj9hRRTcVGsyUm%2FvZbTY2hL6ahtP%2FvfwcPVlcbagpseLRYSkqEOfSOHj1zpm5KKisfPnd3SsrFi7W19WtgbO7H9sICP%2FvbUmwmCxw8g8SEAQyZhcYmiTW3SWTZbOdNrcGYy4O%2FCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEELtpdHJX9LT09PT08Wb2yEgICAgIKDlk9Rg%2BjH9mH5MP6b%2F0Uw%2FzsSBzIpEIpFIJAB6vV5fd4aLhraLRSoV5sW3sbGxsbExbGfpq6ioqBDWixPY2dnZ2dkJK1M%2FOBmxsJ%2B55KujYd8L9pepqampqakxlHdDr%2BNqBh0bBrAOyvhC2FQ8z5aWNI%2F09%2BjRo0ePHoZAUF1dXV1dDZCdnZ2dnW3Yv3fv3r179zYcV1ZWVlZWBpCbm5ubm9v%2B6beysrKysjKkn6mqqqqqqgK4fPny5cuXDdvd3Nzc3NwALC0tLesuR5GTk5OTkwNQWVlZWVnZ%2FvkwxsrX1dXV1dXVsL2goKCgoMD8Am2XLl26dOkC4OLi4uLiYtjOyr9Tp06dOnUC6NatW7du3QyvZ2VlZWVlAdy7d%2B%2BeOU1Oi5qnzQKYu7u7u7u74f%2Fbt2%2Ffvn0bvzCtxS4wfn5%2Bfn5%2BzT8%2BMzMzMzNT%2FEDm6Ojo6OhoqJmw70V5eXl5eXn9%2FVnAYhekzp07d%2B7c2bC9oePaS3FxcXFxMUBpaWlpaWn912%2FevHnz5k1DutmF19ywz8U4fazGUlRUVFRUJHYqOy5%2Ff39%2Ff%2F%2BGX8%2FIyMjIyBA7lS1Pf2s1N%2F8tuIdvGuMfqkwmkwnzjZsX1hTE7vDt7e3t7e3r78funNl%2B7A4ctYzx94Hd4LA7fWN5eXl5eXn1A4SFhYWFhYXYuTHUHHU6ne5hK5SxmhkLBObKycnJycnJkF6tVqvVag2%2FY0LMa%2B3vhmqEbHtjr6OO7S%2FfhMiadlhA8vT09PT0BLh%2B%2Ffr169cNFyYvLy8vLy%2FDhZftx5q6xG5LP3fu3Llz5wwBuSHsAmTcJ8BqZGLlo6k1QrFrjo8qW1tbW1tbw40aa5plF3rWVMpu8FjNV2ws0DLs%2B8F%2Bt8avs%2FzU1tbWirEMjLnXsDpa%2BlscwNiFsqk1K2tra2tr6%2Frb2R2pWE2L7M6eBTD2A%2B7Zs2fPnj0NX3iWX%2FYDuXXr1q1bt8QPXAwLSD4%2BPj4%2BPs0%2F%2Fvz58%2BfPn2%2B%2FO1PjvqCmlqNxADOXGlhHx2pe7PO%2Fe%2Ffu3bt3DZ8L%2B52y%2FcwlgLHrBqu5GwcmFsAaeh11bC0OYKwvwrivqyHGnazMnTt37ty5I15nPPtCX7ly5cqVKwDe3t7e3t6GC6xx4Lp27dq1a9fqjzJDf47V%2FHr16tWrVy%2FDDQNrcmNNVY1h5c4uqKxpi31eV69evXr1qti57TjYDQCrWbGmXOMbhZKSkpKSEsPv2PjzEwtLZ0N9c4293t5a24ckdg3I3NLfZn1gHQ0LVMZNawy7AJtrX15HYdyHwgaltLRvhR3X0lGZf3XGfVssUBljN5qsRmaug1DQX0uLa2Dsi97QF944UrM7Y%2BM2abGb4IybDFkgYzUzdgfH7lQ9PDw8PDwM282lKcXcsc%2BZDV9m5c3u%2FNloxIZG8TFsP3Yjwb5%2FrEkXNQ0L%2BGywFWs6ZP83hO3HRiua6%2FB6cyV2DepRS3%2B7DeJgF3xz%2B6Ibj5I0blJk6WZNiyyQsedK2PDt9grELD1sOHxHxW5kWABrag3KeD%2FjGyLUNA4ODg4ODoYWB%2FYcWkN91Qzrc2KDPlggY02PCLWnv%2FwoxPz8%2FPz8%2FPpNKMaDSlhAY31%2BrM%2FOXEbtdbQmNOP0N7UJ0Xg%2FsWvwHVXXrl27du1q6Etk3%2B%2Bmlid7nISdh%2F1u8PP4c%2Bb2HJWp09%2FeNbQ2u%2BSxJh32lw1rNTfsB8fS2VCnNPuhs0EcOJqpdYxr4qzpqqHBPuxxB3bHz5jL59DYqFy2vaE%2B1vbCZjxhTeesyba5gYf1ibF8saZdhNpTm9XAGuobQ22jtU2L7f18FbtwstGs7MLKmhSNH2hmgYvVNNkw76aOXmxrzs7Ozs7OhqY1VqNhWJ%2Bf2A%2FAG%2FcdtvR3yj4%2F49G66M%2BZWx9SR08%2FfuUeMR3lQV92x89qtI3VTC5dunTp0iXDcWLnkzUxGz%2F%2B0VCNsLCwsLCwsH4%2B27tlggV%2B9relWA0aB88gMWEAQ2ahscE95jb4hzUps6a0xuBoVYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgj91bRgBSaETEehUCgUivqz8KnVarVabZi2t6n7iS2od1DvoN6WllI3qZvUbf58kIMc5NOmQT7kQ36PHvd3XAbLYNm1a8I%2F33xj9brV61avb9wYvzt%2Bd%2Fxuc5w1FCHzgzNxdDANXchNxdwCQkcRcjHkYshFDw8ukAvkAtVq8AVf8H38cUiGZEh%2ByAGzYBbMYitvDRqkW6lbqVs5daryH8p%2FKP%2BhVKpGqEaoRuAkTQj9GQxgCLUCq3Fxz3HPcc8lJsJoGA2jBwyA9bAe1l%2B6REtpKS1dulTYO%2Fl%2BKKP21J7aP%2F00p%2BAUnGLtWlgJK2FlYCBNokk0SaMRzjt8%2BIHsA9kHsusu7IMQYjCAdXAqlUqlUrX8eKVSqVQqxUt%2FU2t85lozlHWVdZV1nT2bdqPdaLcBA8AFXMDlwgWuF9eL6zV8%2BH6yn%2BwnDa0x%2Fd13ISEhISEhR45w67n13PrffoM34A144%2FHHZd1l3WXdo6IgG7Ihe8MGsfOJkDkyWQBTbFdsV2zfsoWbwc3gZnz4ofDDvXpV7AyaSigNpaHUy4vfwe%2Fgd%2Fzzn%2BqZ6pnqmbNni50uJC7qTJ2p80svAQUKFABmwkyYuWzZnwcug4SEhISEhDt3Qj4N%2BTTk02XLOOCAg717%2BVf4V%2FhXpk6FzbAZNrc%2BgCmWKZYplkVHwzk4B%2BdefbXNymMFXUFXbN6sGaIZohkyd25bvU9jlK8pX1O%2BtnAhaEEL2vJyVawqVhW7bZtY6UFtw2QBjDpSR%2Bo4cSJvyVvylhMmyDvJO8k77doFh%2BEwHF67VvhCFxeLneGmkqfIU%2BQpXbvCGBgDY5YsEfL1%2FPP0W%2Fot%2FdZ8agJi16D%2B6ugX9Av6ha8vmUPmkDkAhBJK6OHDzT0PH8KH8CGHDnG%2BnC%2FnC0AOk8PksK%2BvqdI5%2BKPBHw3%2BaO7c1PLU8tTybt3Ii%2BRF8mJ4uMkK4v%2Fg%2F%2BD%2Fdu8O9An0CfSZN08DGtCY7ORNpyhQFCgKpk2j%2B%2Bl%2Bun%2F9eiqnciqnVPmd8jvld6WlKq1Kq9Lu3StC0lAbMF0TYhzEQRwh9Bf6C%2F2FrXg0bRpEQRREKRTy9fL18vWbNrlnume6Z8bExGyJ2RKzpaZG7AJg5syeM3vObJnslt8tv1t%2Bc%2BYI6Z43TwjADg7sBhtuwA24YT4Le3T0JsSOPgqRHCQHyUHD%2B1t%2BZvmZ5WcmGGSzF%2FbCXtPlaxVZRVYRno%2BIiIiIiJg2TTdeN143%2FtAh%2BBF%2BhB%2BHD2%2FxiX3AB3ySk8t8ynzKfKZPZ%2B9jqnQ3lWKjYqNi45gxMBgGw%2BCtW4W%2FhBA1URM1IbSCVtCKb75RuindlG7jxqnyVHmqvOPH2zudyLS4Nn%2BHaIiGaAcHeBqehqf%2F%2Bc%2B8uLy4vLikJOFOadw4sQuApYOli6XzfrqN%2FRGoxU43MhPxEA%2FxhjWwdW%2Fo3tC9MXZsc0%2FDJXAJXILhOLqJbqKbWrK2diPJjY%2BPj4%2BvqqLD6XA6XKmEQAiEwKysZp%2FoIByEgxcvSl6RvCJ5JSzsKDlKjhKdztTpbYwyWZmsTPbxEQJWfLzw18Ki3o5ykIPc2poW0SJatH%2F%2F%2FeNQh2ayAEZOkBPkRBMu7B%2FAB%2FABxwmBQvxFyOlgOpgOlsnupwuh5iiDMii7cuX%2B%2F9thO2z%2F%2BGOhz9TRsbHDhUEcnTtzEk7CST7%2B%2BMFXd%2B5sq2SzJn2JVqKVaIOC4GV4GV4uKmr0wFIohdKCAlgLa2FtUNA%2B332%2B%2B3xv327DEn4o4cbTxYW%2BR9%2Bj7x04AB%2FDx%2FBxly6NHhgEQRDk5MSOC44LjguOc3Vt7%2FQj02j7C3YsxELs7dvEk3gSzyVLyuaVzSubN3Kk%2BpL6kvrSgQNiF4AmV5OryU1MZOli6WTpNt6%2FyYEaNQlrAjT%2B29L92ovCX%2BGv8P%2F4Y7AHe7CPjLz%2FQgEUQEG%2Ffvxl%2FjJ%2F%2BcQJoS81LEy447e3F4bHd%2BokPDf23HNcFpfFZZ08KYw%2B7NsXkiAJkk6f1j%2Bvf17%2F%2FBdftHU%2B9q3bt27fusuXqRf1ol7h4bAAFsCC%2BjUpGkNjaIxWy3fiO%2FGdQkLU89Xz1fPrBO52Mi5tXNq4NFtbKqESKtFowBZswdbbu9kn%2BuM4SS9JL0kvjSZicsTkiMl2du2dH9Q6JrsACD%2FUW7eEH0BNDfmV%2FEp%2BjYmxmmQ1yWrSpk3CDAN374qd4aYSvtAODro9uj26PfPmCU0uc%2BaQfJJP8qVSdY46R53j4dHe6TLuCzJ1H5jYgcG8ESLfLt8u3%2F7552Qv2Uv2zptnslOvhJWwMjWVVJEqUiXeg8xKhVKhVERE8F%2FwX%2FBf7NpFtpKtZCvP02gaTaNDQ9kNX3unS%2Bi7k0h0ubpcXe6%2BfeAETuAkl5vsDRzAARwOHCiLLYsti1UqhSbR2tr2zidqHtM14a2G1bD6p59oZ9qZdl61SkM1VENzcmA37IbdYmez%2BR4MuB9%2BGNI5pHNI5%2F%2F9D1zBFVxXrIAcyIEcsVOJ2gchir2KvYq9n30mNBE2IXDVQA3UnDtHn6XP0md1OnKFXCFX%2FP3Zy3QVXUVXpaeTa%2BQaubZli1u0W7Rb9PbtYg9uUqlVapU6Pl6ZokxRpnh786V8KV96546mSlOlqWr%2FwMVUTaiaUDVh9Wqyn%2Bwn%2B00YuJi7cBfuBgV1eq7Tc52eY48tvP66WPlFTYN32h3MozaVlHmPQiRE%2FrX8a%2FnXX35J4kk8if%2F73xs9xAVcwGXPHqtSq1Kr0hdewLkNEWo7og%2BiQMh8UQp%2B4Ad%2BaWmN7joTZsLMzz9Xh6vD1eH%2F%2BMf94xFCbQYDWAeDfVTtSxit9%2Fnn8qnyqfKpUinREi3RfvLJ%2FR3swA7s1q0TAteSJcJGDFwIIYTMjNJP6af0e%2F99xRuKNxRvsEl6EUIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYSQMZzRAYkqPT09PT29%2FswVAQEBAQEBhhlHmrqf2E6POD3i9Ihu3ST7Jfsl%2B5cvJ%2FbEntiHhpJIEkkie%2Fak2%2Bg2uk2ngxiIgZiTJ2kQDaJBmzcPGDhg4ICB8fFipx%2BhjsRsfvioaRq6kJtKeweERyWApXdL75bebfhwYTmUffvor%2FRX%2Bquzc5NPcAAOwIFdu6yuW123uj5jRp9NfTb12XTvntj5Qsic4VyICLVCRveM7hnde%2FWiJ%2BgJeiIhgZbQElrSuTMsh%2BWw%2FPBhEkpCSeh775EfyA%2Fkh99%2FF47q0kVYCTw8HA7BITi0ejX9jH5GP3v%2Bed1l3WXd5YoK2ASbYNOsWWLnDyGETIbVRNjf1jI%2Bn9j562iEmld8%2FP1yfD79%2BfTnd%2B8WSpdrdMXzjHkZ8zLmDRwoBMKKivSd6TvTd%2FL8ucnnJp%2Bb%2FMQTYucPIXOGNbAGBGcEZwRnjB4tHScdJx1XXa3KU%2BWp8o4fFztdyDwIAcbOjp%2FIT%2BQnKhQkjISRsNpayS3JLcmt%2BfMJIYQQnm%2FsPP6b%2FDf5b0pLS1%2Bevjx9%2Bb%2F%2FDQEQAAFvvcVv5jfzm6dOFfY6ebK16c0YmjE0Y2h0tNAH9%2BqrbVYwKZACKZs3B8wMmBkwc%2B7cNnufxvIbkBGQEbBwIX2NvkZfKy8PmBswN2Dutm1ipQe1jVYHMHmKPEWeEhcn%2FDdiRJMPnAWzYNaxY5ozmjOaM88%2FL3ZBMBGTIyZHTLaw0CXpknRJH37In%2BPP8edqagKfDXw28Nlnn009lXoq9ZR4K%2BYay8jIyMjIEDsVfz36fvp%2B%2Bn7e3mQYGUaGWVrCPbgH99LTfat8q3yr8vKaez4SS2JJ7MGD9AX6An3hrbfgbXgb3vbzgyAIgqDWp7f%2Fyf4n%2B5%2BcOzdjS8aWjC3dusFwGA7Dw8NNViBjYAyM2b3bv9C%2F0L9w3jxhfTSTFnmTCDcC06bRABpAA9avh3RIh3RKM4IzgjOCS0v9E%2F0T%2FRP37m3%2FlKG20PoaWCiEQug%2F%2F0nGkrFk7MGDdAFdQBfIZA3tTj4nn5PPa2qIFbEiVu%2B8I3YBGNMt1y3XLZ8xQ2gC8vKCHMiBHAD3me4z3We%2B9JIQwLZuFTudjL%2B%2Fv79hofrmEzsAdtRBHLSKVtEqSgkQYSTUUBgKQwmBm3ATbrbghNtgG2yrk49jcAyOma5Jl9UIf%2FX41eNXj2nT7EvsS%2BxLDh2iJ%2BlJenL48BafeA2sgTXJyXaFdoV2hdOnN7XmaWpCjXjMGD6MD%2BPDtm4FG7ABG0KEGi0hkAZpkPbNN0IAHzfOf7b%2FbP%2FZ2KLS0TXaRt8YTa4mV5OblUW30%2B10%2BzffNLa%2FEOC%2B%2Bkr1m%2Bo31W%2FZ2WIXADOh%2B4TuE7p36QIjYASMePPNeun%2Bin5Fv1q8%2BP5%2B6C%2BtZmrN1JqpOTlkKVlKllZVwVk4C2f79Ttvfd76vLWbW3PPR5NoEk0aO5b9T8pJOSk%2Fd87U6R6eOzx3eG5VlWy9bL1svVIJ62AdrMvKau55SDgJJ%2BEXL0qHSYdJh4WFeRNv4k10OtOX9J87a3fW7qydjw8%2Fk5%2FJz4yPFwKXhUW98l1D19A11ta0kBbSwv372XHtnV5kWq0OYIz1FOsp1lPWroWe0BN63rlj%2FDp5h7xD3ikpsf7Y%2BmPrj%2BusaGsmZNdk12TXFi2iP9Of6c%2BdOtXbIRqiIdrBwSLWItYi9q23xE4vEldOTk5OTs69e8JzXLm5dB%2FdR%2FdJpbWhtaG1oRs3NncQh9CE%2BPrrrMmL5JN8kv%2Ftt22Vfp8onyifqOJicogcIoeCgshr5DXyWlFRowdagRVYFRTolXqlXhkU5Dvfd77v%2FNu327n4%2F2gqdHHhvDlvzvvAAegBPaBHE24slaAEpZMTO06oubm6tnf6kWmYvOlFkapIVaTOmSP8gFeuvP9Ga8gasubtt9Xx6nh1%2FI4dYmecEfrw%2BvWDG3ADbvz0E3iCJ3hKJA0ecANuwA29XvKJ5BPJJxMm7E%2Fen7w%2FOTOzvdJr3JRm6iZEc3muylxdoVfoFWplpY3Txmnj4uPBD%2FzATy6vt6PRMHp%2BGD%2BMH5aZySfzyXyyjY20VFoqLQ0NfXAYvYMDXIbLcHnr1oCwgLCAsPYbRi9cyEeM4N15d979p59gNsyG2VZW93cohmIo1mqpE3WiTqNGDRgwYMCAAamp7V3%2BaYvSFqUtsrXlorgoLurIEdCBDnRDhrT0fGQUGUVGpaaS0WQ0GT1qVP%2Fd%2FXf3363Vtne%2BUMuYfBTirdm3Zt%2BavX27W5lbmVvZ9OnEkTgSx%2BpqK28rbyvv2FixM1zPalgNq5cvFzrN%2FyRwMX8EOL1Wr9Vr33tP2Gg%2Bg1BQ27jw5YUvL3xpb689rj2uPa5SCYFr1KgGD%2FgIPoKPxoyhQIHCmDGsr0zytORpydMAwnYAUIACFGD0IPPrr7d3%2FoQLd3Ly2bSzaWfTXnqJ7CQ7yc5du0gciSNxPE9v0Bv0xpQpA6oHVA%2Bobv%2FAFRcXFxcXJ5FwlKMc3bWrtYGLoUfoEXokMBA2wAbYEBeXRJNoElUqR5PRZDSprW3vfKLmabM7bUWBokBRMG6c8MWvqtIM0QzRDElOFjvDHR3WwNoXC1w1%2FWr61fRTqcABHMDhTwIX4w%2F%2B4H%2F0qPBAsocHhEM4hDs5sZfJCrKCrPjtN%2FoUfYo%2B9e9%2FC8POExLEzi8jDHZYskQIsHfu%2BLv6u%2Fq7btkiVnrS%2B6b3Te%2B7Zg3sgT2wZ8mSNnujlbASVv7nPwF7AvYE7Gn%2FGwnUPHih6mBwKqn2SW%2FK7ym%2Fp%2Fzu4GD5quWrlq%2F%2B8AN8BV%2FBV8OGNXrgYTgMh99%2BO2BhwMKAhR991F7liNBfkckGcSD0KMm5knMl54pWS14kL5IXL19uaD%2F2ADN4gzd4v%2FQSBi6E2g%2FOxNHBYBNf%2B4iMjIyMjNTrhb6Xl17yG%2Bk30m%2BkVEqP0WP0WGQk9IJe0Kumhn5Pv6ffT58eYBdgF2DXdqMGEUIIoRYRRulZWNyf%2B3B7%2Bvb07SEhYqcLIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQshctd1yKkk0iSbNmXP%2FjUaT0WR0TIw6UB2oDoyJaa8MPkOfoc9QqdThuMNxh%2BPW1qoRqhGqEeXl7PVQGkpDqaOjfox%2BjH6MUgm5kAu5o0ZBBVRAhYcHPUwP08NSqbDA4O3b8Al8Ap%2F89puwYq5azRb0bK%2F8GFM%2BqXxS%2BWTv3nwZX8aXRUTA1%2FA1fP3UU8IKv926wd%2Fh7%2FB3SiELsiCroIBaUStqdeyYNEwaJg3bs2c%2F2U%2F2k6tX2fkiIiIiIiKsrbWntae1p2WyA9kHsg9kl5WJlT%2BEEGrIIx%2FAFImKREXik08K6xstWFBrXWtdax0VJR0lHSUdNXEi7U17097z5oEUpCC1sWnyiWfADJhBKU2kiTTxhx%2B007XTtdM%2F%2BOAoOUqOtuHKtBGTIyZHTLawqFpWtaxq2Ztvkn%2BRf5F%2FhYfTkXQkHdn4AooMOUaOkWM8T8fT8XR8fDw3iBvEDYqO5v%2FO%2F53%2F%2B4YNwsq2iYmaM5ozmjO7d7c0vfJ18nXydSkpbVUejdEs1izWLG79shsIIfPTygBGiHyufK587ocfwmPwGDw2fnyTD90G22Dbnj2aTE2mJrPtJj8NKQkpCSlZsoRsI9vItshISIVUSL1yBTbCRtjo5QU7YAfsaP3cguQgOUgOpqfXZtdm12ZHRQk1l3v3TJWPwMGBgwMHy2Sum103u27euJH8TH4mP7f%2BwszFcrFcLKV0KB1Kh167RvvRfrSflxeJITEk5pdf1JfUl9SXFixo6fkxgCGE2korJ%2FOl1LrQutC6cOXKyoWVCysXdu9O1ERN1H5%2BDR7xNH2aPp2SYnPC5oTNibVrIRMyoc3WMyaE5JAckjNy5P1NgRAIgd7eQlNaYSE3mhvNjXZ2FlaQzskhu8lusvvrr%2BlkOplOPnuW2lN7aq%2FX0%2BV0OV3eqxe3i9vF7XruOfgcPofPn376fr6epc%2FSZwMCJGGSMEnYsmUQBVEQtWqVqXLi%2Bq7ru67vLljQYOBKgARIOHpUckVyRXIlLq5aWi2tlp4%2Fz16WhcpCZaGDBtFz9Bw9N3MmvUlv0psDBvCBfCAfWFAA%2FaAf9PPyup%2Bfx%2Bhj9LEhQ%2BQ75TvlO21shPXcKiubm24MIAihtmKyJsTguOC44DhXV2HF1NhYuAE34Ebnzvd38AAP8MjN1b%2Brf1f%2F7vTpbd23Euwe7B7s3rcv9yb3Jvfmzp0N7Ucfp4%2FTxy9ftom2ibaJnjEjPj4%2BPj6%2Bqqqx8yvtlHZKu%2FBwfiW%2Fkl%2F59tv3X%2FijaZEsI8vIshkz1F%2Bqv1R%2Fee5ci%2FMRHhweHN6zJ%2BfKuXKucXFCTdewcjSNolE0av36BLsEuwS7%2F%2F63aWeVSuVfy7%2BWf%2F3FF1AIhVA4cGBDexJLYkkslyxRz1fPV88%2FfNjkHxRCCLWQyZZTSYxMjEyMzM9XJiuTlcnLl%2FNH%2BaP80X%2F%2Fm%2FyX%2FJf8t6ZGb6u31du%2B9daBWwduHbjV9oMCOBWn4lQjR8IROAJHGt6PnCanyelevaqWVi2tWrp8OcRDPMSvXCm8yvMNHafSqrQq7d698kx5pjzTz09YYj4sjDVJ8lv4LfyWiAj4Er6EVgQw7m3ube7t0FAhH4bABY7gCI6HDjUvcBGiGKIYohjy9tu0kBbSPwlcDJVRGZWxmmbzAxg2ISKE2orJF7QURvmlpAij3zZsIL7El%2Fh%2B8EHircRbibcuXWrqeYJ6B%2FUO6t2pU0vTQd4h75B3nnqqsf1oX9qX9i0pgTEwBsZYWSk2KjYqNvbs2dT3oUvpUrp0%2B%2FZ673%2BX3CV3m7CCb2P2wT7Y98QT9d7XglpQi9jYpp5GniJPkac4OfE%2F8j%2FyP%2Bp04AZu4JaVxQZzNJg%2Fd%2BpO3Vk5Nn2QCEIItbVGmhAJEe6gf%2F%2B93VP2R1Ocpqumq6br0KFNPWxc2ri0cWnOzpZPWj5p%2BaRGA0VQBEUXL5IgEkSC0tJ4e96etz9zRhi9d%2BaM0LdTXNza5Mo%2FlH8o%2F%2FD778ESLMGya1eWfuso6yjrqKeeit8dvzt%2Bd3V1s8%2F7rfxb%2Bbc%2F%2FcSaZFnAsbK0srSyHD5caPLU61uabuExAysr23jbeNv4fv3ICXKCnBg4kHxEPiIfDRok1MAef5yMIWPImIULNUmaJE1SWlprywshhFqrkSZESkVL2VW4ClcNz2s1OUOTpJOkk3Q6vYfeQ%2B8REnLA7oDdAbuiono7JkIiJJouueQ8OU%2FO8zwdRAfRQQCsKVF7RntGe6YVoxyjIRqiCYEQCIE2WD7xwWH%2FZ87c%2F%2FsJfAKffPWVUBO2tBS2s78IISS%2BNluaXnFccVxxPDSURtJIGllTIzzwm2jCkGEews6HnQ877%2BSkX6pfql964AB7HosqqIIq7t5N8EnwSfAZO7al55e%2FI39H%2Fs433wh9Xv36se3UmTpT5xkzEl5KeCnhpYwMscuhwfSbqA8M%2B7IQQsZM3qch9LUMHkwtqSW1XL4c9sN%2B2P%2Fee2y72Bk2tRquhqvhpk41fpCYm8RN4iaZoOk1DMIg7ORJ483cWm4tt3baNLHzjxBCYjFZDey5xc8tfm6xs3P1yOqR1SO%2F%2BYZcIpfIpS5d2OtssAQ3jBvGDZs%2BXe2idlG7FBSIXQAtJQTkESOEB7I%2F%2BcR4eDvxI37Eb948dbA6WB3822%2Bte58ePYT3iY%2Bv9z6ryWqyesMGdYm6RF3S9EEdCCHU0bU6gLGpjXRanVan%2FeIL9kBvgwcsh%2BWw%2FOLF8ury6vLqV15p66mXWovNgOHyo8uPLj%2F27s1d5a5yV0ND4Wl4Gp4OD4f34X1431DzMtUMFsbkU%2BVT5VPffFN4EPuFF4xfZ%2B%2FLz%2BJn8bPi42UKmUKmyMzc57vPd5%2Fv7dtilyNCCJlaqwNYvamamvrGu8guskulUqeoU9Qp%2F%2FqX2AXRECFwxMezGTwazM9aspasvXmTK%2BAKuIIZM4RJcktLTZUONimx3Um7k3YnN21qbCop8j55n7yv06nvqu%2Bq744YIXY5IoSQqbX6QeaELgldErqsXSv8t3atuU3m29bY1FhCfpcvVxM1UZswcDFCTbW2VqjxLlig26Pbo9vz1lu0iBbRIsMD1GKXB0IItReTzcTxqCOxJJbE1tRAFVRB1e%2B%2F8xf5i%2FzFvXsTSAJJIEeOtFc6Hnye7MMP5VflV%2BVX9%2BwR5pScPJlUk2pS%2Fbe%2FCXM32tnBMlgGy8QuPYQQQu1OGETRjGVWEEIIIYQQQgghhBBCCCGEEEIIIYQQQggh1EpsMl%2B5h9xD7hEcLHZ6EEIIPVpM%2FuDrg5P2%2Fuc%2FD746d66w%2FtapU2JnHCGEUMf2yE%2FmGxERERERwSa%2FtbAQFoCsqmKvP7jys58f15fry%2FX19CRJJIkkOTrSMXQMHUOI8KBwZSXtQrvQLgUFZCfZSXZmZgrLpeTmtnU%2BGsIW8JRJZBKZpH9%2F4kW8iJe7O0yBKTDF1pbtR54gT5An7t4V1hXLza0JqwmrCcvM%2FOHmDzd%2FuFlSwvZjU1bZ9LHpY9NHIjmQfSD7QPa9e2LlDyGEGvLIT%2BZ7fzb3BEiAhOHDrTOsM6wzVKqKiIqIiggfH5gEk2BSYCBREiVRGmZ5b7J5MA%2FmXbumnaidqJ149Ghb5%2BfBAPPUU5wP58P5%2BPg09zzkMDlMDlMqLPyZnp61IGtB1oLTp%2FtW9K3oWzFxIt1Kt9KtWVlCAMvMbHH5z5XPlc89ccJ4Fn1TKV9Uvqh80ZNPsqm2TH1%2BhJD5avV6YJUxlTGVMf%2F4R6OBi%2FkIPoKPfHw6De00tNPQJUvaOoP0MD1MD%2FfsSU%2FSk%2FSkg4N2sHawdnBEBORCLuQOG9biwMVsgk2wqWdP%2B8ftH7d%2FXC5%2FcAVj02E1Sftl9svslwUFtTRw3S%2BXP2qW0nxpvjR%2F4MB%2B3%2FX7rt93U6aQZJJMkl1cYCWshJU9e5o6HwghZCom7wMzt8l8Q7xDvEO8p00DP%2FADP8OUUELAJYQG0SAaRAgJIAEkoKiIjCfjyfjTp6tXV6%2BuXl1QIJ0knSSdVFsrPS49Lj3u6Mg78868s68vyEEO8r59jd%2BP5tN8mn%2FlSmJqYmpi6k8%2FmSofQceCjgUde%2Bopbg23hlvTv3%2B9Hf6oCQo1nYwMPoQP4UOKiyW7JLsku1iA7toV4iEe4gcO5F15V97V3Z0cJAfJQUrr5UNFVVSl13eP6h7VPerrr2O2xGyJ2VJT016fG0IINeaRncxXqAl16wY%2B4AM%2B9ecyZBduqqM6qquqKggoCCgIUKlSE1ITUhNqaoQmxzoHuIAL3O%2BzKygICQkJCQm5fl1oihs7ltVoiCtxJa7e3spkZbIy2d1dNUI1QjXi1q2W5iOUhtJQ6uiot9Hb6G38%2FIT3qbPDFJgCU375JSEoISghKCOj3gmGwBC4v%2BjK9evC3xs3QoJDgkOCJ08GAgRI5871yuePmmnexLyJeRO7dxe2Xrki6oeKEEJ1PLLLbwRdCLoQdGHIEG4Rt4hbxEZF%2Fok%2FajBDJg6ZOGTiTz%2BtIqvIKsLzjR0mrBc2fDgto2W0zNCEyk3kJnITs7PV89Xz1fMPH25pPoKXBS8LXjZsGEkn6SR94EC2vaU1PcUQxRDFkGee4V14F96lCU2QGtCA5tKl9pp1X75Ovk6%2BLiXFVOfTLNYs1ixueN00hFDH1eo%2BsLby4OjA5iNdSVfStUePxvajPWlP2rO0lG6hW%2BiWqqozcAbOQDPedxEsgkVpacab9Un6JH2Sh0erC2IxLIbF9c%2FDfcF9wX1x%2BnRTT8Nm1a%2F9tPbT2k9ra0kuySW5JSVsMEeD5TOJTqKTPD3%2FKNVH9oYHIdTxNHJBIkS4I%2F7993ZP2QyYATMo1XTVdNV0HTq0qYcJTXf29nq9Xq%2FXR0RAJERCZEGB0JSWnw%2BfwqfwaX5%2B%2FtT8qflTCwtTT6WeSj3V%2Br6dEG2INkT74ovGw9e1Gq1Gq9m2raWj5EIWhSwKWfTyy3ABLsAFS0sWcDRVmipN1datwl6N1xQbwkY12sbbxtvGd%2B0qbHV1ffjf779PjEyMTIzMz29teSGEUGs10gfW8J15m7sKV%2BFqeXlzD7P8zPIzy8%2Fu3evcuXPnzp1jY2MKYgpiCur0aRn3bZk5OowOo8MIIRfIBXLB9Od%2FMLCywGQIUMbPhYldHgghxGCTUCuxpjm6gq6gK6ZNY9upJbWkllVViXsT9ybujY1t6fmDi4OLg4vDw8nL5GXyMqshAQgrQn%2F3nfCcVlGR2OXQWuwxgaphVcOqhp040eITvQvvwrs8L9RQn3hC7HwhhNqO2faBdRSkkBSSwgEDjLdzrpwr59ry0YcMfZI%2BSZ%2Bsfx7JeMl4yfj674sQQn8Vj%2FxzYG1FmKS4Tx8ogRIoGTXq%2FpRTf5AslyyXLNdoWjuMXhiu37mz0Pc1ebLx%2B5BKUkkqT5zQJGmSNEn1B5MghNCj6pF9DsxU2FRZFZEVkRWRXboID0T7%2BtKldCld2qeP8f5seHtrAxeTkJCQkJBw506IVYhViNW5c8JWf%2F%2F772dDbajNsGHBccFxwXFublJ3qbvU%2FezZmhk1M2pm3L6NcxkihB5Vra6BKWIVsYrYt9%2BmBbSAFoSHN%2FnAN%2BANeOOHHzQSjUQjeecdYaOIg0YaEDw3eG7w3MhIco1cI9ccHRvaj35Fv6JfFRfbRtlG2UZpNPG743fH766uNlU6VtAVdAXluBTXFNcU16AgYVTlnwzTXwJLYEltbcIzCc8kPLNtm1jlh891IYTaSqv7wKxUVior1Zo18Dq8Dq%2BnpjZ6wC%2FwC%2Fxy7pz1FOsp1lNWrRI2ml%2FgaipW42qrwMWwB6ttRtqMtBn5%2FffCIJELbTAuESGEOgaT9YFN6D6h%2B4TuXbrIxsrGysbGxkIABECAi8v9HWbBLJhVVATZkA3Z06cL64IVF4tdAI2RD5IPkg%2BaPFmfrE%2FWJ1tYcJFcJBdZWMhf4i%2Fxly5cEJrobt4UK32KAkWBosDFRV%2BkL9IX%2BfmRU%2BQUOeXiQq2oFbWyshKe29qxQ%2BxyRAghUzP5IA7hQWIfHz6Pz%2BPztm0jH5APyAccBz%2FCj%2FDjq68K64CdPSt2xhFCCKGHEkbpBQcLk8ZGRIidHoQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIoUdPs%2BdCDOod1Duot5%2BfZJdkl2TX3%2F5GxpPxZLxhvSl9tD5aH52eLnlG8ozkGZ4noSSUhLq7U3%2FqT%2F1v3KBRNIpGDR9ufBydTWfT2aWlEAEREJGVxek4Hafr21dYV0ulMk6HYpZilmJW%2F%2F7G56MD6UA6kBCyi%2Bwiu86c6ehzLyrtlHZKu%2FBwepleppezs1l%2B5CnyFHmKjY2w1wsvCOX17beuX7l%2B5fqVTpdXmleaV%2Frii8K6ZbduCZMn%2F%2FgjO69wfL9%2BTS1n4kk8iaeXl2qFaoVqRUKC8CrHCQuYzppVO6V2Su2UXbuko6SjpKM8PRv7nDVrNGs0a9RqscsXIdRxtXxBy3iIh%2FiCAnWJukRdUudCFAmREMlmSa%2B%2F5D2XwCVwCXl5qhJViaqEXQgBYA2sgTUA8gh5hDyiX7%2BmJsP4fEE3gm4E3ejUSbZYtli2ePJkYZb8mzd%2FuPnDzR9ulpSIXeDNxR%2Fhj%2FBHMjO5WdwsblZAgLD17Fl4C96Ct%2Fr0Ibkkl%2BTm5qouqS6pLpWXh34T%2Bk3oNwEBNJ2m0%2FTbt7kN3AZuQ%2Ffuz459duyzYx0cDh46eOjgobt32zrdjX3OCCHUWi1fDywCIiDCxUXRRdFF0WX6dPZXmI3e3r6hw%2FgQPoQPcXMzPk6RqEhUJD75ZGszJCxvUlYmrJel1UoHSgdKBza8EKW5Kw8sDywPzM4WlkextWXLp5BepBfp5eOj99f76%2F0zM4W9CeFlvIyX%2BftLaiQ1kpozZ8AZnME5O9tyguUEywn1byjaSlt%2Fzggh1PIA9kANLDaW%2FRWaosrLG3zDP%2B7MjY9TB6uD1cG%2F%2FdbaDI1LG5c2Ls3Wltwj98g9OzvZOtk62bq2r3G0laPkKDlKams5T86T87x0CQbDYBg8YoTQRCeVJu5N3Ju49%2Fr1kJCQkJAQb286g86gM%2Bzs%2BB38Dn7HqFH8Kf4Uf8rLi7PmrDnrvn0jIiIiIiKsrZv6%2FvQAPUAPVFeDDdiAjb39nNlzZs%2BZLZOF0lAaSjt1YvtVZlVmVWYZFvJs688ZIYRa3oTYQvfvzDcoNig2TJ%2FOttOFdCFdyC6AaWm8FW%2FFWzk7szt3th%2BxJJbEMieHAgUKpaX1zjcaRsNogNro2uja6FOnEn0TfRN9b98Wu6Bb7RP4BD7JzIQX4UV40d8fKFCgKSl%2FlB4lq8gqsmrAAKiESqg8eVKdpE5SJ6WlQRIkQRKA%2FAn5E%2FInFApdua5cV%2B7vLxxXXt5YObsGuwa7Bp88mb8nf0%2F%2Bnl698vvk98nvM306jaSRNJLn%2BQ%2F4D%2FgPzpwRAq1OJ%2FSZNf45a1ZoVmhWfPut2MWKEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEKo3f0%2FYCcRj5nKHu4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTMtMDItMDlUMTk6MzI6NTMrMDE6MDCs99SeAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEzLTAyLTA5VDE5OjMyOjUzKzAxOjAw3apsIgAAAHl0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9qb3MvRHJvcGJveC9Kb3MvcHJvZ3JhbW1pbmcvamF2YXNjcmlwdC9qc29uZWRpdG9yb25saW5lL2pzb25lZGl0b3IvY3NzL2ltZy9qc29uZWRpdG9yLWljb25zLnN2Z2GG7LgAAAAASUVORK5CYII%3D%29%20%2D72px%20%2D72px%3B%0A%20%20cursor%3A%20move%3B%0A%7D%0A%0A%2Ejsoneditor%20div%2Etree%20button%2Edragarea%3Ahover%2C%0A%2Ejsoneditor%20div%2Etree%20button%2Edragarea%3Afocus%20%7B%0A%20%20background%2Dposition%3A%20%2D72px%20%2D48px%3B%0A%7D%0A%0A%2Ejsoneditor%20tr%2C%0A%2Ejsoneditor%20th%2C%0A%2Ejsoneditor%20td%20%7B%0A%20%20padding%3A%200%3B%0A%20%20margin%3A%200%3B%0A%7D%0A%0A%2Ejsoneditor%20td%20%7B%0A%20%20vertical%2Dalign%3A%20top%3B%0A%7D%0A%0A%2Ejsoneditor%20td%2Etree%20%7B%0A%20%20vertical%2Dalign%3A%20top%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Efield%2C%0A%2Ejsoneditor%20%2Evalue%2C%0A%2Ejsoneditor%20td%2C%0A%2Ejsoneditor%20th%2C%0A%2Ejsoneditor%20textarea%20%7B%0A%20%20font%2Dfamily%3A%20droid%20sans%20mono%2C%20monospace%2C%20courier%20new%2C%20courier%2C%20sans%2Dserif%3B%0A%20%20font%2Dsize%3A%2010pt%3B%0A%20%20color%3A%20%231A1A1A%3B%0A%7D%0A%2F%2A%20ContextMenu%20%2D%20main%20menu%20%2A%2F%0A%0A%2Ejsoneditor%2Dcontextmenu%20%7B%0A%20%20position%3A%20absolute%3B%0A%20%20z%2Dindex%3A%2099999%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20ul%20%7B%0A%20%20position%3A%20relative%3B%0A%20%20left%3A%200%3B%0A%20%20top%3A%200%3B%0A%20%20width%3A%20124px%3B%0A%20%20background%3A%20white%3B%0A%20%20border%3A%201px%20solid%20%23d3d3d3%3B%0A%20%20box%2Dshadow%3A%202px%202px%2012px%20rgba%28128%2C%20128%2C%20128%2C%200%2E3%29%3B%0A%20%20list%2Dstyle%3A%20none%3B%0A%20%20margin%3A%200%3B%0A%20%20padding%3A%200%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20ul%20li%20button%20%7B%0A%20%20padding%3A%200%3B%0A%20%20margin%3A%200%3B%0A%20%20width%3A%20124px%3B%0A%20%20height%3A%2024px%3B%0A%20%20border%3A%20none%3B%0A%20%20cursor%3A%20pointer%3B%0A%20%20color%3A%20%234d4d4d%3B%0A%20%20background%3A%20transparent%3B%0A%20%20line%2Dheight%3A%2026px%3B%0A%20%20text%2Dalign%3A%20left%3B%0A%7D%0A%0A%2F%2A%20Fix%20button%20padding%20in%20firefox%20%2A%2F%0A%0A%2Ejsoneditor%2Dcontextmenu%20ul%20li%20button%3A%3A%2Dmoz%2Dfocus%2Dinner%20%7B%0A%20%20padding%3A%200%3B%0A%20%20border%3A%200%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20ul%20li%20button%3Ahover%2C%0A%2Ejsoneditor%2Dcontextmenu%20ul%20li%20button%3Afocus%20%7B%0A%20%20color%3A%20%231a1a1a%3B%0A%20%20background%2Dcolor%3A%20%23f5f5f5%3B%0A%20%20outline%3A%20none%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20ul%20li%20button%2Edefault%20%7B%0A%20%20width%3A%2092px%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20ul%20li%20button%2Eexpand%20%7B%0A%20%20float%3A%20right%3B%0A%20%20width%3A%2032px%3B%0A%20%20height%3A%2024px%3B%0A%20%20border%2Dleft%3A%201px%20solid%20%23e5e5e5%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20div%2Eicon%20%7B%0A%20%20float%3A%20left%3B%0A%20%20width%3A%2024px%3B%0A%20%20height%3A%2024px%3B%0A%20%20border%3A%20none%3B%0A%20%20padding%3A%200%3B%0A%20%20margin%3A%200%3B%0A%20%20background%2Dimage%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAANgAAACoEAYAAADSkvxvAAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA%2BUO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAANtZJREFUeNrt3XlcVFX7APDn3JlhR1CUVRRyQRDURDPfzFxyAWYGQsEsLX1TI3N5S3PprdS3svRnmen7SphL0etroKYzA7aoqGGlgYogLiCuyCoiDDACc8%2Fvj9txcJDYBu5gz%2FcfPty59845Z2buc89yzwFACCGEEEIIIYQQQgghhBBC6NFCGtvByWnvXgBKxUrg7dvh4QCk0XQ2hNLAQDHTT0hqamvSv3nzvn06nXjpf%2B21sDArK0w%2Fph%2FTj%2Bk3v%2FRLxUoYQg9jYSGTAQBUV9fU1N1uaSlsv3fvwe1isba2tCQEwM3Nyanuz%2BvevepqAIDc3OJinjds9%2FR0duY4AJlM%2BsBvju3HjkPNw74XlpYWFnU%2Fh4qKqipKAaRSobwtLWWyuq9rtcLrPF%2F3U0IdDQawDkomk0pbcl9VU1NbK9791IPpBwCYOPGJJ2QygG7dHB05DqCsrLKSUoDdu48cqXtJj4wcM8bCAkAq5TgAgKtX8%2FN5HiAp6fTp2tr2T3%2FXrg4OhACMHz90qHAJFRQW3rnD8wB79x47VvfS%2BNRTAQFSKYCjo51d3c%2Ftu%2B%2BOHaupASgoqK42h0upVCqRAAD87W%2F%2B%2FnVD7YkTmZm1teZzA8H4%2B3t7SyQAQ4f6%2BtZN7549R49WVwN4e7u5SSQAgwf37SvkTPDtt4cPV1cD3LlTXm4OvwfUMm0WwNasGThw0yYAmYzjZDKAmJjLlz%2F%2FHODChbKyc%2BfEznbHxQLXK6%2BEhFhYNP%2F4rVsTEqqrxQ9kfft6ekokAB4e3bpxHEBpqVZLKcD16wUFD7uQX7mSl8fzAN7erq4cB%2BDj06OHRAJw%2BfKtWzzf8HHtJS0tO1uvB7h06cYNvb7%2B6wcPpqTU1AD4%2BXl5SSSGv%2BaGfS7G6SsvF24sTp%2FOynpY%2FlDTREWFhlpaNvx6dPT%2B%2FffuiZ3Klqe%2FtZqbf66tEjJtWs%2Ber7wC8NJLXl5z5gB4eFhbe3q2XcZbrmtXNzcAgJ07T58GABg5Uql82H6PPebnBwDw7bfp6QAAvXsHBIid9vooFcJSQ3%2FNha3tgy3bGRk5OXo9wMmT588%2FrEaVnHz2bG0twMWLN27UDVT29jY2LW%2FhN527dysqKAW4fbus7GElXVx89y6lhkBgrvz9H3tMIgEoLCwtpRTg5s2iIp4H6N9fqOlwnDmUtkFV1cObXllNUaerrn5YeWOT7aMBmxDhzTc%2F%2FRQAoG%2FfQYMAAD76aNcuAIBFi8LCAABu3MjOBgDYuPH77wEAXFyEQLx27e7dAAAREf37AwDo9WI0ZTExMWr1vXsA1tYP9gUYI0R41cLiwSbI6ur2rZGxdDT3%2FY1rjsbnQS3j4dG1K8cBdOlib0%2BIoWm2urqmhlKACROEpt6ePYUaMKsRi624%2BO7duumorRXqh%2BxGgd04MCygVVbeuyfGjYS517A6WvpbHMCcnCwtu3UD6N7d2rpHj%2FqvE0IIV6d%2BFxDg4PD44wC1tZTWvdAXFOh0eXliNi2uW7dwIQBAnz4DBwIAeHv7%2BgIAfPrp%2Fv0AAHfvlpQAAHTr5u4OAFBZqdUCALz%2F%2FqxZAGIHLsbKSghc06dPmNCSpsVt24SmxfYKZJ07P9gX1NTOdL3%2Bwf2M%2B5RQy7CaF7vAX76cm6vXG8qbBQS2n7kEsJISocbL%2Buh0OqFmxVociotLS3ne8HplpTldflFrtTiAKRTu7pMmAaxbN2jQ5s2N7%2F%2FOO%2F37r15df%2Fv%2F%2Fnf9%2Bo4dAPPnp6bOnClGEZSUFBYCALz22tixAAAxMUeOAAD06NG3L0D9wLVwYXAwAMDp0z%2F%2FLEZ6OyaOE25nwsNHjrSwMAyCuHOnvJznAW7eLCxsygWRNWlVVAiDe319e%2FaUSAyBTKP55RfzGmZg3lgTrJeXULM6e%2FbyZb3eUJNhLly4dk2vNwyWcHLq1ImQhptM2wtLZ0N9c9XVwu2lufTdtbYPSewakLmlv836wDoeBwcnJwAAOztHx4e9bmVlbQ1gaEJELSGRcA985wgRGgGb2hTI9uN54bLJzieVSiRYE2u%2B%2Fv0fHKxx7tzVqw%2B70GdmXrvG84YaGesTQ0hMLa6B7dhx5Up0tOGvseLi556re2c2efLx4%2BPHA5w5c%2BdOSophe3U1z4vbndqzp48PgKGPq0sXZ2chB3l5AIaaV48effoAAKxYsX07AEBVVUUFAMDRo0JTI%2FozrIkwLi4pqbra0KfC7vw9PV1cOE4YxfdnNTH2PJW9vbU1IQCZmcIF99ixtDRzaMrtKNhweV9fIYDduyf0dbEabUNYEyMbrXjy5Pnzen3DgyXQg8SuQT1q6W%2B3QRxabW1teTlAaWlNzZ07Yme7rsjI118HAHB29vAAMDQpzp377LNCysvKAAxNi9279%2BoFADBr1rvvAgD8%2FLNGAwDA8%2B3RRMEGMbDh8ExHGczA%2BiaKioTnpVgAk0iaNr5NInkwp4WFd%2B7ghbP5evf28JBIDA8CFxQI5ditm6Pjn30OZWXCaEv2AHffvp6edZseEWpPOAoRPv30zTcBAGQyoW03Lm7TJgCAnJzMzLr7sT6yZcv%2B8x8AgFWrhD679glcxoxH47X0wWax6PUPhh1WI2gMm1mBodTcHhDoGAYM6N1bIjHMSLFv388%2F19Q0%2FXGLyMjRoy0sAAIChEEd6enCYxD4afw5c3uOytTpb%2B8aWpsFsDffPH361VcN%2F1%2B9WlGRk9N%2BGWs6Nopw9eq66a0vL%2B%2FaNQCAhQtDQsROc8fHRosx%2FfoJDyZbWws%2FD9Y0xbCZLLy83Nzq9qJVVOh0YucFwJBu9nwbG2TC2NkJTZ5stKhYXF2dnOoOlz916tKllgSeCxeuX9frDTN29OghNO1euybuA%2BXor6XNAtjXX1%2B9GhMjdvb%2BOmprH9602PTjjetEbSsrS5ix4rHHhIDk6tqlC8cJF8K6fStMnz7du3Oc4fm17OzcXGH0ojAqUWxDh%2FbrJ5UKz1PxPIBKdfx43dGQQUHDhslkAE5OwuhLsdjZWVkBGPoOz58XRhc218WLwufHRn%2ByuSHRnzO3PqSOnn5sQnxEsOAj9hRRTcVGsyUm%2FvZbTY2hL6ahtP%2FvfwcPVlcbagpseLRYSkqEOfSOHj1zpm5KKisfPnd3SsrFi7W19WtgbO7H9sICP%2FvbUmwmCxw8g8SEAQyZhcYmiTW3SWTZbOdNrcGYy4O%2FCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEELtpdHJX9LT09PT08Wb2yEgICAgIKDlk9Rg%2BjH9mH5MP6b%2F0Uw%2FzsSBzIpEIpFIJAB6vV5fd4aLhraLRSoV5sW3sbGxsbExbGfpq6ioqBDWixPY2dnZ2dkJK1M%2FOBmxsJ%2B55KujYd8L9pepqampqakxlHdDr%2BNqBh0bBrAOyvhC2FQ8z5aWNI%2F09%2BjRo0ePHoZAUF1dXV1dDZCdnZ2dnW3Yv3fv3r179zYcV1ZWVlZWBpCbm5ubm9v%2B6beysrKysjKkn6mqqqqqqgK4fPny5cuXDdvd3Nzc3NwALC0tLesuR5GTk5OTkwNQWVlZWVnZ%2FvkwxsrX1dXV1dXVsL2goKCgoMD8Am2XLl26dOkC4OLi4uLiYtjOyr9Tp06dOnUC6NatW7du3QyvZ2VlZWVlAdy7d%2B%2BeOU1Oi5qnzQKYu7u7u7u74f%2Fbt2%2Ffvn0bvzCtxS4wfn5%2Bfn5%2BzT8%2BMzMzMzNT%2FEDm6Ojo6OhoqJmw70V5eXl5eXn9%2FVnAYhekzp07d%2B7c2bC9oePaS3FxcXFxMUBpaWlpaWn912%2FevHnz5k1DutmF19ywz8U4fazGUlRUVFRUJHYqOy5%2Ff39%2Ff%2F%2BGX8%2FIyMjIyBA7lS1Pf2s1N%2F8tuIdvGuMfqkwmkwnzjZsX1hTE7vDt7e3t7e3r78funNl%2B7A4ctYzx94Hd4LA7fWN5eXl5eXn1A4SFhYWFhYXYuTHUHHU6ne5hK5SxmhkLBObKycnJycnJkF6tVqvVag2%2FY0LMa%2B3vhmqEbHtjr6OO7S%2FfhMiadlhA8vT09PT0BLh%2B%2Ffr169cNFyYvLy8vLy%2FDhZftx5q6xG5LP3fu3Llz5wwBuSHsAmTcJ8BqZGLlo6k1QrFrjo8qW1tbW1tbw40aa5plF3rWVMpu8FjNV2ws0DLs%2B8F%2Bt8avs%2FzU1tbWirEMjLnXsDpa%2BlscwNiFsqk1K2tra2tr6%2Frb2R2pWE2L7M6eBTD2A%2B7Zs2fPnj0NX3iWX%2FYDuXXr1q1bt8QPXAwLSD4%2BPj4%2BPs0%2F%2Fvz58%2BfPn2%2B%2FO1PjvqCmlqNxADOXGlhHx2pe7PO%2Fe%2Ffu3bt3DZ8L%2B52y%2FcwlgLHrBqu5GwcmFsAaeh11bC0OYKwvwrivqyHGnazMnTt37ty5I15nPPtCX7ly5cqVKwDe3t7e3t6GC6xx4Lp27dq1a9fqjzJDf47V%2FHr16tWrVy%2FDDQNrcmNNVY1h5c4uqKxpi31eV69evXr1qti57TjYDQCrWbGmXOMbhZKSkpKSEsPv2PjzEwtLZ0N9c4293t5a24ckdg3I3NLfZn1gHQ0LVMZNawy7AJtrX15HYdyHwgaltLRvhR3X0lGZf3XGfVssUBljN5qsRmaug1DQX0uLa2Dsi97QF944UrM7Y%2BM2abGb4IybDFkgYzUzdgfH7lQ9PDw8PDwM282lKcXcsc%2BZDV9m5c3u%2FNloxIZG8TFsP3Yjwb5%2FrEkXNQ0L%2BGywFWs6ZP83hO3HRiua6%2FB6cyV2DepRS3%2B7DeJgF3xz%2B6Ibj5I0blJk6WZNiyyQsedK2PDt9grELD1sOHxHxW5kWABrag3KeD%2FjGyLUNA4ODg4ODoYWB%2FYcWkN91Qzrc2KDPlggY02PCLWnv%2FwoxPz8%2FPz8%2FPpNKMaDSlhAY31%2BrM%2FOXEbtdbQmNOP0N7UJ0Xg%2FsWvwHVXXrl27du1q6Etk3%2B%2Bmlid7nISdh%2F1u8PP4c%2Bb2HJWp09%2FeNbQ2u%2BSxJh32lw1rNTfsB8fS2VCnNPuhs0EcOJqpdYxr4qzpqqHBPuxxB3bHz5jL59DYqFy2vaE%2B1vbCZjxhTeesyba5gYf1ibF8saZdhNpTm9XAGuobQ22jtU2L7f18FbtwstGs7MLKmhSNH2hmgYvVNNkw76aOXmxrzs7Ozs7OhqY1VqNhWJ%2Bf2A%2FAG%2FcdtvR3yj4%2F49G66M%2BZWx9SR08%2FfuUeMR3lQV92x89qtI3VTC5dunTp0iXDcWLnkzUxGz%2F%2B0VCNsLCwsLCwsH4%2B27tlggV%2B9relWA0aB88gMWEAQ2ahscE95jb4hzUps6a0xuBoVYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgj91bRgBSaETEehUCgUivqz8KnVarVabZi2t6n7iS2od1DvoN6WllI3qZvUbf58kIMc5NOmQT7kQ36PHvd3XAbLYNm1a8I%2F33xj9brV61avb9wYvzt%2Bd%2Fxuc5w1FCHzgzNxdDANXchNxdwCQkcRcjHkYshFDw8ukAvkAtVq8AVf8H38cUiGZEh%2ByAGzYBbMYitvDRqkW6lbqVs5daryH8p%2FKP%2BhVKpGqEaoRuAkTQj9GQxgCLUCq3Fxz3HPcc8lJsJoGA2jBwyA9bAe1l%2B6REtpKS1dulTYO%2Fl%2BKKP21J7aP%2F00p%2BAUnGLtWlgJK2FlYCBNokk0SaMRzjt8%2BIHsA9kHsusu7IMQYjCAdXAqlUqlUrX8eKVSqVQqxUt%2FU2t85lozlHWVdZV1nT2bdqPdaLcBA8AFXMDlwgWuF9eL6zV8%2BH6yn%2BwnDa0x%2Fd13ISEhISEhR45w67n13PrffoM34A144%2FHHZd1l3WXdo6IgG7Ihe8MGsfOJkDkyWQBTbFdsV2zfsoWbwc3gZnz4ofDDvXpV7AyaSigNpaHUy4vfwe%2Fgd%2Fzzn%2BqZ6pnqmbNni50uJC7qTJ2p80svAQUKFABmwkyYuWzZnwcug4SEhISEhDt3Qj4N%2BTTk02XLOOCAg717%2BVf4V%2FhXpk6FzbAZNrc%2BgCmWKZYplkVHwzk4B%2BdefbXNymMFXUFXbN6sGaIZohkyd25bvU9jlK8pX1O%2BtnAhaEEL2vJyVawqVhW7bZtY6UFtw2QBjDpSR%2Bo4cSJvyVvylhMmyDvJO8k77doFh%2BEwHF67VvhCFxeLneGmkqfIU%2BQpXbvCGBgDY5YsEfL1%2FPP0W%2Fot%2FdZ8agJi16D%2B6ugX9Av6ha8vmUPmkDkAhBJK6OHDzT0PH8KH8CGHDnG%2BnC%2FnC0AOk8PksK%2BvqdI5%2BKPBHw3%2BaO7c1PLU8tTybt3Ii%2BRF8mJ4uMkK4v%2Fg%2F%2BD%2Fdu8O9An0CfSZN08DGtCY7ORNpyhQFCgKpk2j%2B%2Bl%2Bun%2F9eiqnciqnVPmd8jvld6WlKq1Kq9Lu3StC0lAbMF0TYhzEQRwh9Bf6C%2F2FrXg0bRpEQRREKRTy9fL18vWbNrlnume6Z8bExGyJ2RKzpaZG7AJg5syeM3vObJnslt8tv1t%2Bc%2BYI6Z43TwjADg7sBhtuwA24YT4Le3T0JsSOPgqRHCQHyUHD%2B1t%2BZvmZ5WcmGGSzF%2FbCXtPlaxVZRVYRno%2BIiIiIiJg2TTdeN143%2FtAh%2BBF%2BhB%2BHD2%2FxiX3AB3ySk8t8ynzKfKZPZ%2B9jqnQ3lWKjYqNi45gxMBgGw%2BCtW4W%2FhBA1URM1IbSCVtCKb75RuindlG7jxqnyVHmqvOPH2zudyLS4Nn%2BHaIiGaAcHeBqehqf%2F%2Bc%2B8uLy4vLikJOFOadw4sQuApYOli6XzfrqN%2FRGoxU43MhPxEA%2FxhjWwdW%2Fo3tC9MXZsc0%2FDJXAJXILhOLqJbqKbWrK2diPJjY%2BPj4%2BvqqLD6XA6XKmEQAiEwKysZp%2FoIByEgxcvSl6RvCJ5JSzsKDlKjhKdztTpbYwyWZmsTPbxEQJWfLzw18Ki3o5ykIPc2poW0SJatH%2F%2F%2FeNQh2ayAEZOkBPkRBMu7B%2FAB%2FABxwmBQvxFyOlgOpgOlsnupwuh5iiDMii7cuX%2B%2F9thO2z%2F%2BGOhz9TRsbHDhUEcnTtzEk7CST7%2B%2BMFXd%2B5sq2SzJn2JVqKVaIOC4GV4GV4uKmr0wFIohdKCAlgLa2FtUNA%2B332%2B%2B3xv327DEn4o4cbTxYW%2BR9%2Bj7x04AB%2FDx%2FBxly6NHhgEQRDk5MSOC44LjguOc3Vt7%2FQj02j7C3YsxELs7dvEk3gSzyVLyuaVzSubN3Kk%2BpL6kvrSgQNiF4AmV5OryU1MZOli6WTpNt6%2FyYEaNQlrAjT%2B29L92ovCX%2BGv8P%2F4Y7AHe7CPjLz%2FQgEUQEG%2Ffvxl%2FjJ%2F%2BcQJoS81LEy447e3F4bHd%2BokPDf23HNcFpfFZZ08KYw%2B7NsXkiAJkk6f1j%2Bvf17%2F%2FBdftHU%2B9q3bt27fusuXqRf1ol7h4bAAFsCC%2BjUpGkNjaIxWy3fiO%2FGdQkLU89Xz1fPrBO52Mi5tXNq4NFtbKqESKtFowBZswdbbu9kn%2BuM4SS9JL0kvjSZicsTkiMl2du2dH9Q6JrsACD%2FUW7eEH0BNDfmV%2FEp%2BjYmxmmQ1yWrSpk3CDAN374qd4aYSvtAODro9uj26PfPmCU0uc%2BaQfJJP8qVSdY46R53j4dHe6TLuCzJ1H5jYgcG8ESLfLt8u3%2F7552Qv2Uv2zptnslOvhJWwMjWVVJEqUiXeg8xKhVKhVERE8F%2FwX%2FBf7NpFtpKtZCvP02gaTaNDQ9kNX3unS%2Bi7k0h0ubpcXe6%2BfeAETuAkl5vsDRzAARwOHCiLLYsti1UqhSbR2tr2zidqHtM14a2G1bD6p59oZ9qZdl61SkM1VENzcmA37IbdYmez%2BR4MuB9%2BGNI5pHNI5%2F%2F9D1zBFVxXrIAcyIEcsVOJ2gchir2KvYq9n30mNBE2IXDVQA3UnDtHn6XP0md1OnKFXCFX%2FP3Zy3QVXUVXpaeTa%2BQaubZli1u0W7Rb9PbtYg9uUqlVapU6Pl6ZokxRpnh786V8KV96546mSlOlqWr%2FwMVUTaiaUDVh9Wqyn%2Bwn%2B00YuJi7cBfuBgV1eq7Tc52eY48tvP66WPlFTYN32h3MozaVlHmPQiRE%2FrX8a%2FnXX35J4kk8if%2F73xs9xAVcwGXPHqtSq1Kr0hdewLkNEWo7og%2BiQMh8UQp%2B4Ad%2BaWmN7joTZsLMzz9Xh6vD1eH%2F%2BMf94xFCbQYDWAeDfVTtSxit9%2Fnn8qnyqfKpUinREi3RfvLJ%2FR3swA7s1q0TAteSJcJGDFwIIYTMjNJP6af0e%2F99xRuKNxRvsEl6EUIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYSQMZzRAYkqPT09PT29%2FswVAQEBAQEBhhlHmrqf2E6POD3i9Ihu3ST7Jfsl%2B5cvJ%2FbEntiHhpJIEkkie%2Fak2%2Bg2uk2ngxiIgZiTJ2kQDaJBmzcPGDhg4ICB8fFipx%2BhjsRsfvioaRq6kJtKeweERyWApXdL75bebfhwYTmUffvor%2FRX%2Bquzc5NPcAAOwIFdu6yuW123uj5jRp9NfTb12XTvntj5Qsic4VyICLVCRveM7hnde%2FWiJ%2BgJeiIhgZbQElrSuTMsh%2BWw%2FPBhEkpCSeh775EfyA%2Fkh99%2FF47q0kVYCTw8HA7BITi0ejX9jH5GP3v%2Bed1l3WXd5YoK2ASbYNOsWWLnDyGETIbVRNjf1jI%2Bn9j562iEmld8%2FP1yfD79%2BfTnd%2B8WSpdrdMXzjHkZ8zLmDRwoBMKKivSd6TvTd%2FL8ucnnJp%2Bb%2FMQTYucPIXOGNbAGBGcEZwRnjB4tHScdJx1XXa3KU%2BWp8o4fFztdyDwIAcbOjp%2FIT%2BQnKhQkjISRsNpayS3JLcmt%2BfMJIYQQnm%2FsPP6b%2FDf5b0pLS1%2Bevjx9%2Bb%2F%2FDQEQAAFvvcVv5jfzm6dOFfY6ebK16c0YmjE0Y2h0tNAH9%2BqrbVYwKZACKZs3B8wMmBkwc%2B7cNnufxvIbkBGQEbBwIX2NvkZfKy8PmBswN2Dutm1ipQe1jVYHMHmKPEWeEhcn%2FDdiRJMPnAWzYNaxY5ozmjOaM88%2FL3ZBMBGTIyZHTLaw0CXpknRJH37In%2BPP8edqagKfDXw28Nlnn009lXoq9ZR4K%2BYay8jIyMjIEDsVfz36fvp%2B%2Bn7e3mQYGUaGWVrCPbgH99LTfat8q3yr8vKaez4SS2JJ7MGD9AX6An3hrbfgbXgb3vbzgyAIgqDWp7f%2Fyf4n%2B5%2BcOzdjS8aWjC3dusFwGA7Dw8NNViBjYAyM2b3bv9C%2F0L9w3jxhfTSTFnmTCDcC06bRABpAA9avh3RIh3RKM4IzgjOCS0v9E%2F0T%2FRP37m3%2FlKG20PoaWCiEQug%2F%2F0nGkrFk7MGDdAFdQBfIZA3tTj4nn5PPa2qIFbEiVu%2B8I3YBGNMt1y3XLZ8xQ2gC8vKCHMiBHAD3me4z3We%2B9JIQwLZuFTudjL%2B%2Fv79hofrmEzsAdtRBHLSKVtEqSgkQYSTUUBgKQwmBm3ATbrbghNtgG2yrk49jcAyOma5Jl9UIf%2FX41eNXj2nT7EvsS%2BxLDh2iJ%2BlJenL48BafeA2sgTXJyXaFdoV2hdOnN7XmaWpCjXjMGD6MD%2BPDtm4FG7ABG0KEGi0hkAZpkPbNN0IAHzfOf7b%2FbP%2FZ2KLS0TXaRt8YTa4mV5OblUW30%2B10%2BzffNLa%2FEOC%2B%2Bkr1m%2Bo31W%2FZ2WIXADOh%2B4TuE7p36QIjYASMePPNeun%2Bin5Fv1q8%2BP5%2B6C%2BtZmrN1JqpOTlkKVlKllZVwVk4C2f79Ttvfd76vLWbW3PPR5NoEk0aO5b9T8pJOSk%2Fd87U6R6eOzx3eG5VlWy9bL1svVIJ62AdrMvKau55SDgJJ%2BEXL0qHSYdJh4WFeRNv4k10OtOX9J87a3fW7qydjw8%2Fk5%2FJz4yPFwKXhUW98l1D19A11ta0kBbSwv372XHtnV5kWq0OYIz1FOsp1lPWroWe0BN63rlj%2FDp5h7xD3ikpsf7Y%2BmPrj%2BusaGsmZNdk12TXFi2iP9Of6c%2BdOtXbIRqiIdrBwSLWItYi9q23xE4vEldOTk5OTs69e8JzXLm5dB%2FdR%2FdJpbWhtaG1oRs3NncQh9CE%2BPrrrMmL5JN8kv%2Ftt22Vfp8onyifqOJicogcIoeCgshr5DXyWlFRowdagRVYFRTolXqlXhkU5Dvfd77v%2FNu327n4%2F2gqdHHhvDlvzvvAAegBPaBHE24slaAEpZMTO06oubm6tnf6kWmYvOlFkapIVaTOmSP8gFeuvP9Ga8gasubtt9Xx6nh1%2FI4dYmecEfrw%2BvWDG3ADbvz0E3iCJ3hKJA0ecANuwA29XvKJ5BPJJxMm7E%2Fen7w%2FOTOzvdJr3JRm6iZEc3muylxdoVfoFWplpY3Txmnj4uPBD%2FzATy6vt6PRMHp%2BGD%2BMH5aZySfzyXyyjY20VFoqLQ0NfXAYvYMDXIbLcHnr1oCwgLCAsPYbRi9cyEeM4N15d979p59gNsyG2VZW93cohmIo1mqpE3WiTqNGDRgwYMCAAamp7V3%2BaYvSFqUtsrXlorgoLurIEdCBDnRDhrT0fGQUGUVGpaaS0WQ0GT1qVP%2Fd%2FXf3363Vtne%2BUMuYfBTirdm3Zt%2BavX27W5lbmVvZ9OnEkTgSx%2BpqK28rbyvv2FixM1zPalgNq5cvFzrN%2FyRwMX8EOL1Wr9Vr33tP2Gg%2Bg1BQ27jw5YUvL3xpb689rj2uPa5SCYFr1KgGD%2FgIPoKPxoyhQIHCmDGsr0zytORpydMAwnYAUIACFGD0IPPrr7d3%2FoQLd3Ly2bSzaWfTXnqJ7CQ7yc5du0gciSNxPE9v0Bv0xpQpA6oHVA%2Bobv%2FAFRcXFxcXJ5FwlKMc3bWrtYGLoUfoEXokMBA2wAbYEBeXRJNoElUqR5PRZDSprW3vfKLmabM7bUWBokBRMG6c8MWvqtIM0QzRDElOFjvDHR3WwNoXC1w1%2FWr61fRTqcABHMDhTwIX4w%2F%2B4H%2F0qPBAsocHhEM4hDs5sZfJCrKCrPjtN%2FoUfYo%2B9e9%2FC8POExLEzi8jDHZYskQIsHfu%2BLv6u%2Fq7btkiVnrS%2B6b3Te%2B7Zg3sgT2wZ8mSNnujlbASVv7nPwF7AvYE7Gn%2FGwnUPHih6mBwKqn2SW%2FK7ym%2Fp%2Fzu4GD5quWrlq%2F%2B8AN8BV%2FBV8OGNXrgYTgMh99%2BO2BhwMKAhR991F7liNBfkckGcSD0KMm5knMl54pWS14kL5IXL19uaD%2F2ADN4gzd4v%2FQSBi6E2g%2FOxNHBYBNf%2B4iMjIyMjNTrhb6Xl17yG%2Bk30m%2BkVEqP0WP0WGQk9IJe0Kumhn5Pv6ffT58eYBdgF2DXdqMGEUIIoRYRRulZWNyf%2B3B7%2Bvb07SEhYqcLIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQshctd1yKkk0iSbNmXP%2FjUaT0WR0TIw6UB2oDoyJaa8MPkOfoc9QqdThuMNxh%2BPW1qoRqhGqEeXl7PVQGkpDqaOjfox%2BjH6MUgm5kAu5o0ZBBVRAhYcHPUwP08NSqbDA4O3b8Al8Ap%2F89puwYq5azRb0bK%2F8GFM%2BqXxS%2BWTv3nwZX8aXRUTA1%2FA1fP3UU8IKv926wd%2Fh7%2FB3SiELsiCroIBaUStqdeyYNEwaJg3bs2c%2F2U%2F2k6tX2fkiIiIiIiKsrbWntae1p2WyA9kHsg9kl5WJlT%2BEEGrIIx%2FAFImKREXik08K6xstWFBrXWtdax0VJR0lHSUdNXEi7U17097z5oEUpCC1sWnyiWfADJhBKU2kiTTxhx%2B007XTtdM%2F%2BOAoOUqOtuHKtBGTIyZHTLawqFpWtaxq2Ztvkn%2BRf5F%2FhYfTkXQkHdn4AooMOUaOkWM8T8fT8XR8fDw3iBvEDYqO5v%2FO%2F53%2F%2B4YNwsq2iYmaM5ozmjO7d7c0vfJ18nXydSkpbVUejdEs1izWLG79shsIIfPTygBGiHyufK587ocfwmPwGDw2fnyTD90G22Dbnj2aTE2mJrPtJj8NKQkpCSlZsoRsI9vItshISIVUSL1yBTbCRtjo5QU7YAfsaP3cguQgOUgOpqfXZtdm12ZHRQk1l3v3TJWPwMGBgwMHy2Sum103u27euJH8TH4mP7f%2BwszFcrFcLKV0KB1Kh167RvvRfrSflxeJITEk5pdf1JfUl9SXFixo6fkxgCGE2korJ%2FOl1LrQutC6cOXKyoWVCysXdu9O1ERN1H5%2BDR7xNH2aPp2SYnPC5oTNibVrIRMyoc3WMyaE5JAckjNy5P1NgRAIgd7eQlNaYSE3mhvNjXZ2FlaQzskhu8lusvvrr%2BlkOplOPnuW2lN7aq%2FX0%2BV0OV3eqxe3i9vF7XruOfgcPofPn376fr6epc%2FSZwMCJGGSMEnYsmUQBVEQtWqVqXLi%2Bq7ru67vLljQYOBKgARIOHpUckVyRXIlLq5aWi2tlp4%2Fz16WhcpCZaGDBtFz9Bw9N3MmvUlv0psDBvCBfCAfWFAA%2FaAf9PPyup%2Bfx%2Bhj9LEhQ%2BQ75TvlO21shPXcKiubm24MIAihtmKyJsTguOC44DhXV2HF1NhYuAE34Ebnzvd38AAP8MjN1b%2Brf1f%2F7vTpbd23Euwe7B7s3rcv9yb3Jvfmzp0N7Ucfp4%2FTxy9ftom2ibaJnjEjPj4%2BPj6%2Bqqqx8yvtlHZKu%2FBwfiW%2Fkl%2F59tv3X%2FijaZEsI8vIshkz1F%2Bqv1R%2Fee5ci%2FMRHhweHN6zJ%2BfKuXKucXFCTdewcjSNolE0av36BLsEuwS7%2F%2F63aWeVSuVfy7%2BWf%2F3FF1AIhVA4cGBDexJLYkkslyxRz1fPV88%2FfNjkHxRCCLWQyZZTSYxMjEyMzM9XJiuTlcnLl%2FNH%2BaP80X%2F%2Fm%2FyX%2FJf8t6ZGb6u31du%2B9daBWwduHbjV9oMCOBWn4lQjR8IROAJHGt6PnCanyelevaqWVi2tWrp8OcRDPMSvXCm8yvMNHafSqrQq7d698kx5pjzTz09YYj4sjDVJ8lv4LfyWiAj4Er6EVgQw7m3ube7t0FAhH4bABY7gCI6HDjUvcBGiGKIYohjy9tu0kBbSPwlcDJVRGZWxmmbzAxg2ISKE2orJF7QURvmlpAij3zZsIL7El%2Fh%2B8EHircRbibcuXWrqeYJ6B%2FUO6t2pU0vTQd4h75B3nnqqsf1oX9qX9i0pgTEwBsZYWSk2KjYqNvbs2dT3oUvpUrp0%2B%2FZ673%2BX3CV3m7CCb2P2wT7Y98QT9d7XglpQi9jYpp5GniJPkac4OfE%2F8j%2FyP%2Bp04AZu4JaVxQZzNJg%2Fd%2BpO3Vk5Nn2QCEIItbVGmhAJEe6gf%2F%2B93VP2R1Ocpqumq6br0KFNPWxc2ri0cWnOzpZPWj5p%2BaRGA0VQBEUXL5IgEkSC0tJ4e96etz9zRhi9d%2BaM0LdTXNza5Mo%2FlH8o%2F%2FD778ESLMGya1eWfuso6yjrqKeeit8dvzt%2Bd3V1s8%2F7rfxb%2Bbc%2F%2FcSaZFnAsbK0srSyHD5caPLU61uabuExAysr23jbeNv4fv3ICXKCnBg4kHxEPiIfDRok1MAef5yMIWPImIULNUmaJE1SWlprywshhFqrkSZESkVL2VW4ClcNz2s1OUOTpJOkk3Q6vYfeQ%2B8REnLA7oDdAbuiono7JkIiJJouueQ8OU%2FO8zwdRAfRQQCsKVF7RntGe6YVoxyjIRqiCYEQCIE2WD7xwWH%2FZ87c%2F%2FsJfAKffPWVUBO2tBS2s78IISS%2BNluaXnFccVxxPDSURtJIGllTIzzwm2jCkGEews6HnQ877%2BSkX6pfql964AB7HosqqIIq7t5N8EnwSfAZO7al55e%2FI39H%2Fs433wh9Xv36se3UmTpT5xkzEl5KeCnhpYwMscuhwfSbqA8M%2B7IQQsZM3qch9LUMHkwtqSW1XL4c9sN%2B2P%2Fee2y72Bk2tRquhqvhpk41fpCYm8RN4iaZoOk1DMIg7ORJ483cWm4tt3baNLHzjxBCYjFZDey5xc8tfm6xs3P1yOqR1SO%2F%2BYZcIpfIpS5d2OtssAQ3jBvGDZs%2BXe2idlG7FBSIXQAtJQTkESOEB7I%2F%2BcR4eDvxI37Eb948dbA6WB3822%2Bte58ePYT3iY%2Bv9z6ryWqyesMGdYm6RF3S9EEdCCHU0bU6gLGpjXRanVan%2FeIL9kBvgwcsh%2BWw%2FOLF8ury6vLqV15p66mXWovNgOHyo8uPLj%2F27s1d5a5yV0ND4Wl4Gp4OD4f34X1431DzMtUMFsbkU%2BVT5VPffFN4EPuFF4xfZ%2B%2FLz%2BJn8bPi42UKmUKmyMzc57vPd5%2Fv7dtilyNCCJlaqwNYvamamvrGu8guskulUqeoU9Qp%2F%2FqX2AXRECFwxMezGTwazM9aspasvXmTK%2BAKuIIZM4RJcktLTZUONimx3Um7k3YnN21qbCop8j55n7yv06nvqu%2Bq744YIXY5IoSQqbX6QeaELgldErqsXSv8t3atuU3m29bY1FhCfpcvVxM1UZswcDFCTbW2VqjxLlig26Pbo9vz1lu0iBbRIsMD1GKXB0IItReTzcTxqCOxJJbE1tRAFVRB1e%2B%2F8xf5i%2FzFvXsTSAJJIEeOtFc6Hnye7MMP5VflV%2BVX9%2BwR5pScPJlUk2pS%2Fbe%2FCXM32tnBMlgGy8QuPYQQQu1OGETRjGVWEEIIIYQQQgghhBBCCCGEEEIIIYQQQggh1EpsMl%2B5h9xD7hEcLHZ6EEIIPVpM%2FuDrg5P2%2Fuc%2FD746d66w%2FtapU2JnHCGEUMf2yE%2FmGxERERERwSa%2FtbAQFoCsqmKvP7jys58f15fry%2FX19CRJJIkkOTrSMXQMHUOI8KBwZSXtQrvQLgUFZCfZSXZmZgrLpeTmtnU%2BGsIW8JRJZBKZpH9%2F4kW8iJe7O0yBKTDF1pbtR54gT5An7t4V1hXLza0JqwmrCcvM%2FOHmDzd%2FuFlSwvZjU1bZ9LHpY9NHIjmQfSD7QPa9e2LlDyGEGvLIT%2BZ7fzb3BEiAhOHDrTOsM6wzVKqKiIqIiggfH5gEk2BSYCBREiVRGmZ5b7J5MA%2FmXbumnaidqJ149Ghb5%2BfBAPPUU5wP58P5%2BPg09zzkMDlMDlMqLPyZnp61IGtB1oLTp%2FtW9K3oWzFxIt1Kt9KtWVlCAMvMbHH5z5XPlc89ccJ4Fn1TKV9Uvqh80ZNPsqm2TH1%2BhJD5avV6YJUxlTGVMf%2F4R6OBi%2FkIPoKPfHw6De00tNPQJUvaOoP0MD1MD%2FfsSU%2FSk%2FSkg4N2sHawdnBEBORCLuQOG9biwMVsgk2wqWdP%2B8ftH7d%2FXC5%2FcAVj02E1Sftl9svslwUFtTRw3S%2BXP2qW0nxpvjR%2F4MB%2B3%2FX7rt93U6aQZJJMkl1cYCWshJU9e5o6HwghZCom7wMzt8l8Q7xDvEO8p00DP%2FADP8OUUELAJYQG0SAaRAgJIAEkoKiIjCfjyfjTp6tXV6%2BuXl1QIJ0knSSdVFsrPS49Lj3u6Mg78868s68vyEEO8r59jd%2BP5tN8mn%2FlSmJqYmpi6k8%2FmSofQceCjgUde%2Bopbg23hlvTv3%2B9Hf6oCQo1nYwMPoQP4UOKiyW7JLsku1iA7toV4iEe4gcO5F15V97V3Z0cJAfJQUrr5UNFVVSl13eP6h7VPerrr2O2xGyJ2VJT016fG0IINeaRncxXqAl16wY%2B4AM%2B9ecyZBduqqM6qquqKggoCCgIUKlSE1ITUhNqaoQmxzoHuIAL3O%2BzKygICQkJCQm5fl1oihs7ltVoiCtxJa7e3spkZbIy2d1dNUI1QjXi1q2W5iOUhtJQ6uiot9Hb6G38%2FIT3qbPDFJgCU375JSEoISghKCOj3gmGwBC4v%2BjK9evC3xs3QoJDgkOCJ08GAgRI5871yuePmmnexLyJeRO7dxe2Xrki6oeKEEJ1PLLLbwRdCLoQdGHIEG4Rt4hbxEZF%2Fok%2FajBDJg6ZOGTiTz%2BtIqvIKsLzjR0mrBc2fDgto2W0zNCEyk3kJnITs7PV89Xz1fMPH25pPoKXBS8LXjZsGEkn6SR94EC2vaU1PcUQxRDFkGee4V14F96lCU2QGtCA5tKl9pp1X75Ovk6%2BLiXFVOfTLNYs1ixueN00hFDH1eo%2BsLby4OjA5iNdSVfStUePxvajPWlP2rO0lG6hW%2BiWqqozcAbOQDPedxEsgkVpacab9Un6JH2Sh0erC2IxLIbF9c%2FDfcF9wX1x%2BnRTT8Nm1a%2F9tPbT2k9ra0kuySW5JSVsMEeD5TOJTqKTPD3%2FKNVH9oYHIdTxNHJBIkS4I%2F7993ZP2QyYATMo1XTVdNV0HTq0qYcJTXf29nq9Xq%2FXR0RAJERCZEGB0JSWnw%2BfwqfwaX5%2B%2FtT8qflTCwtTT6WeSj3V%2Br6dEG2INkT74ovGw9e1Gq1Gq9m2raWj5EIWhSwKWfTyy3ABLsAFS0sWcDRVmipN1datwl6N1xQbwkY12sbbxtvGd%2B0qbHV1ffjf779PjEyMTIzMz29teSGEUGs10gfW8J15m7sKV%2BFqeXlzD7P8zPIzy8%2Fu3evcuXPnzp1jY2MKYgpiCur0aRn3bZk5OowOo8MIIRfIBXLB9Od%2FMLCywGQIUMbPhYldHgghxGCTUCuxpjm6gq6gK6ZNY9upJbWkllVViXsT9ybujY1t6fmDi4OLg4vDw8nL5GXyMqshAQgrQn%2F3nfCcVlGR2OXQWuwxgaphVcOqhp040eITvQvvwrs8L9RQn3hC7HwhhNqO2faBdRSkkBSSwgEDjLdzrpwr59ry0YcMfZI%2BSZ%2Bsfx7JeMl4yfj674sQQn8Vj%2FxzYG1FmKS4Tx8ogRIoGTXq%2FpRTf5AslyyXLNdoWjuMXhiu37mz0Pc1ebLx%2B5BKUkkqT5zQJGmSNEn1B5MghNCj6pF9DsxU2FRZFZEVkRWRXboID0T7%2BtKldCld2qeP8f5seHtrAxeTkJCQkJBw506IVYhViNW5c8JWf%2F%2F772dDbajNsGHBccFxwXFublJ3qbvU%2FezZmhk1M2pm3L6NcxkihB5Vra6BKWIVsYrYt9%2BmBbSAFoSHN%2FnAN%2BANeOOHHzQSjUQjeecdYaOIg0YaEDw3eG7w3MhIco1cI9ccHRvaj35Fv6JfFRfbRtlG2UZpNPG743fH766uNlU6VtAVdAXluBTXFNcU16AgYVTlnwzTXwJLYEltbcIzCc8kPLNtm1jlh891IYTaSqv7wKxUVior1Zo18Dq8Dq%2BnpjZ6wC%2FwC%2Fxy7pz1FOsp1lNWrRI2ml%2FgaipW42qrwMWwB6ttRtqMtBn5%2FffCIJELbTAuESGEOgaT9YFN6D6h%2B4TuXbrIxsrGysbGxkIABECAi8v9HWbBLJhVVATZkA3Z06cL64IVF4tdAI2RD5IPkg%2BaPFmfrE%2FWJ1tYcJFcJBdZWMhf4i%2Fxly5cEJrobt4UK32KAkWBosDFRV%2BkL9IX%2BfmRU%2BQUOeXiQq2oFbWyshKe29qxQ%2BxyRAghUzP5IA7hQWIfHz6Pz%2BPztm0jH5APyAccBz%2FCj%2FDjq68K64CdPSt2xhFCCKGHEkbpBQcLk8ZGRIidHoQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIoUdPs%2BdCDOod1Duot5%2BfZJdkl2TX3%2F5GxpPxZLxhvSl9tD5aH52eLnlG8ozkGZ4noSSUhLq7U3%2FqT%2F1v3KBRNIpGDR9ufBydTWfT2aWlEAEREJGVxek4Hafr21dYV0ulMk6HYpZilmJW%2F%2F7G56MD6UA6kBCyi%2Bwiu86c6ehzLyrtlHZKu%2FBwepleppezs1l%2B5CnyFHmKjY2w1wsvCOX17beuX7l%2B5fqVTpdXmleaV%2Frii8K6ZbduCZMn%2F%2FgjO69wfL9%2BTS1n4kk8iaeXl2qFaoVqRUKC8CrHCQuYzppVO6V2Su2UXbuko6SjpKM8PRv7nDVrNGs0a9RqscsXIdRxtXxBy3iIh%2FiCAnWJukRdUudCFAmREMlmSa%2B%2F5D2XwCVwCXl5qhJViaqEXQgBYA2sgTUA8gh5hDyiX7%2BmJsP4fEE3gm4E3ejUSbZYtli2ePJkYZb8mzd%2FuPnDzR9ulpSIXeDNxR%2Fhj%2FBHMjO5WdwsblZAgLD17Fl4C96Ct%2Fr0Ibkkl%2BTm5qouqS6pLpWXh34T%2Bk3oNwEBNJ2m0%2FTbt7kN3AZuQ%2Ffuz459duyzYx0cDh46eOjgobt32zrdjX3OCCHUWi1fDywCIiDCxUXRRdFF0WX6dPZXmI3e3r6hw%2FgQPoQPcXMzPk6RqEhUJD75ZGszJCxvUlYmrJel1UoHSgdKBza8EKW5Kw8sDywPzM4WlkextWXLp5BepBfp5eOj99f76%2F0zM4W9CeFlvIyX%2BftLaiQ1kpozZ8AZnME5O9tyguUEywn1byjaSlt%2Fzggh1PIA9kANLDaW%2FRWaosrLG3zDP%2B7MjY9TB6uD1cG%2F%2FdbaDI1LG5c2Ls3Wltwj98g9OzvZOtk62bq2r3G0laPkKDlKams5T86T87x0CQbDYBg8YoTQRCeVJu5N3Ju49%2Fr1kJCQkJAQb286g86gM%2Bzs%2BB38Dn7HqFH8Kf4Uf8rLi7PmrDnrvn0jIiIiIiKsrZv6%2FvQAPUAPVFeDDdiAjb39nNlzZs%2BZLZOF0lAaSjt1YvtVZlVmVWYZFvJs688ZIYRa3oTYQvfvzDcoNig2TJ%2FOttOFdCFdyC6AaWm8FW%2FFWzk7szt3th%2BxJJbEMieHAgUKpaX1zjcaRsNogNro2uja6FOnEn0TfRN9b98Wu6Bb7RP4BD7JzIQX4UV40d8fKFCgKSl%2FlB4lq8gqsmrAAKiESqg8eVKdpE5SJ6WlQRIkQRKA%2FAn5E%2FInFApdua5cV%2B7vLxxXXt5YObsGuwa7Bp88mb8nf0%2F%2Bnl698vvk98nvM306jaSRNJLn%2BQ%2F4D%2FgPzpwRAq1OJ%2FSZNf45a1ZoVmhWfPut2MWKEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEKo3f0%2FYCcRj5nKHu4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTMtMDItMDlUMTk6MzI6NTMrMDE6MDCs99SeAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEzLTAyLTA5VDE5OjMyOjUzKzAxOjAw3apsIgAAAHl0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9qb3MvRHJvcGJveC9Kb3MvcHJvZ3JhbW1pbmcvamF2YXNjcmlwdC9qc29uZWRpdG9yb25saW5lL2pzb25lZGl0b3IvY3NzL2ltZy9qc29uZWRpdG9yLWljb25zLnN2Z2GG7LgAAAAASUVORK5CYII%3D%29%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20ul%20li%20button%20div%2Eexpand%20%7B%0A%20%20float%3A%20right%3B%0A%20%20width%3A%2024px%3B%0A%20%20height%3A%2024px%3B%0A%20%20padding%3A%200%3B%0A%20%20margin%3A%200%204px%200%200%3B%0A%20%20background%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAANgAAACoEAYAAADSkvxvAAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA%2BUO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAANtZJREFUeNrt3XlcVFX7APDn3JlhR1CUVRRyQRDURDPfzFxyAWYGQsEsLX1TI3N5S3PprdS3svRnmen7SphL0etroKYzA7aoqGGlgYogLiCuyCoiDDACc8%2Fvj9txcJDYBu5gz%2FcfPty59845Z2buc89yzwFACCGEEEIIIYQQQgghhBBC6NFCGtvByWnvXgBKxUrg7dvh4QCk0XQ2hNLAQDHTT0hqamvSv3nzvn06nXjpf%2B21sDArK0w%2Fph%2FTj%2Bk3v%2FRLxUoYQg9jYSGTAQBUV9fU1N1uaSlsv3fvwe1isba2tCQEwM3Nyanuz%2BvevepqAIDc3OJinjds9%2FR0duY4AJlM%2BsBvju3HjkPNw74XlpYWFnU%2Fh4qKqipKAaRSobwtLWWyuq9rtcLrPF%2F3U0IdDQawDkomk0pbcl9VU1NbK9791IPpBwCYOPGJJ2QygG7dHB05DqCsrLKSUoDdu48cqXtJj4wcM8bCAkAq5TgAgKtX8%2FN5HiAp6fTp2tr2T3%2FXrg4OhACMHz90qHAJFRQW3rnD8wB79x47VvfS%2BNRTAQFSKYCjo51d3c%2Ftu%2B%2BOHaupASgoqK42h0upVCqRAAD87W%2F%2B%2FnVD7YkTmZm1teZzA8H4%2B3t7SyQAQ4f6%2BtZN7549R49WVwN4e7u5SSQAgwf37SvkTPDtt4cPV1cD3LlTXm4OvwfUMm0WwNasGThw0yYAmYzjZDKAmJjLlz%2F%2FHODChbKyc%2BfEznbHxQLXK6%2BEhFhYNP%2F4rVsTEqqrxQ9kfft6ekokAB4e3bpxHEBpqVZLKcD16wUFD7uQX7mSl8fzAN7erq4cB%2BDj06OHRAJw%2BfKtWzzf8HHtJS0tO1uvB7h06cYNvb7%2B6wcPpqTU1AD4%2BXl5SSSGv%2BaGfS7G6SsvF24sTp%2FOynpY%2FlDTREWFhlpaNvx6dPT%2B%2FffuiZ3Klqe%2FtZqbf66tEjJtWs%2Ber7wC8NJLXl5z5gB4eFhbe3q2XcZbrmtXNzcAgJ07T58GABg5Uql82H6PPebnBwDw7bfp6QAAvXsHBIid9vooFcJSQ3%2FNha3tgy3bGRk5OXo9wMmT588%2FrEaVnHz2bG0twMWLN27UDVT29jY2LW%2FhN527dysqKAW4fbus7GElXVx89y6lhkBgrvz9H3tMIgEoLCwtpRTg5s2iIp4H6N9fqOlwnDmUtkFV1cObXllNUaerrn5YeWOT7aMBmxDhzTc%2F%2FRQAoG%2FfQYMAAD76aNcuAIBFi8LCAABu3MjOBgDYuPH77wEAXFyEQLx27e7dAAAREf37AwDo9WI0ZTExMWr1vXsA1tYP9gUYI0R41cLiwSbI6ur2rZGxdDT3%2FY1rjsbnQS3j4dG1K8cBdOlib0%2BIoWm2urqmhlKACROEpt6ePYUaMKsRi624%2BO7duumorRXqh%2BxGgd04MCygVVbeuyfGjYS517A6WvpbHMCcnCwtu3UD6N7d2rpHj%2FqvE0IIV6d%2BFxDg4PD44wC1tZTWvdAXFOh0eXliNi2uW7dwIQBAnz4DBwIAeHv7%2BgIAfPrp%2Fv0AAHfvlpQAAHTr5u4OAFBZqdUCALz%2F%2FqxZAGIHLsbKSghc06dPmNCSpsVt24SmxfYKZJ07P9gX1NTOdL3%2Bwf2M%2B5RQy7CaF7vAX76cm6vXG8qbBQS2n7kEsJISocbL%2Buh0OqFmxVociotLS3ne8HplpTldflFrtTiAKRTu7pMmAaxbN2jQ5s2N7%2F%2FOO%2F37r15df%2Fv%2F%2Fnf9%2Bo4dAPPnp6bOnClGEZSUFBYCALz22tixAAAxMUeOAAD06NG3L0D9wLVwYXAwAMDp0z%2F%2FLEZ6OyaOE25nwsNHjrSwMAyCuHOnvJznAW7eLCxsygWRNWlVVAiDe319e%2FaUSAyBTKP55RfzGmZg3lgTrJeXULM6e%2FbyZb3eUJNhLly4dk2vNwyWcHLq1ImQhptM2wtLZ0N9c9XVwu2lufTdtbYPSewakLmlv836wDoeBwcnJwAAOztHx4e9bmVlbQ1gaEJELSGRcA985wgRGgGb2hTI9uN54bLJzieVSiRYE2u%2B%2Fv0fHKxx7tzVqw%2B70GdmXrvG84YaGesTQ0hMLa6B7dhx5Up0tOGvseLi556re2c2efLx4%2BPHA5w5c%2BdOSophe3U1z4vbndqzp48PgKGPq0sXZ2chB3l5AIaaV48effoAAKxYsX07AEBVVUUFAMDRo0JTI%2FozrIkwLi4pqbra0KfC7vw9PV1cOE4YxfdnNTH2PJW9vbU1IQCZmcIF99ixtDRzaMrtKNhweV9fIYDduyf0dbEabUNYEyMbrXjy5Pnzen3DgyXQg8SuQT1q6W%2B3QRxabW1teTlAaWlNzZ07Yme7rsjI118HAHB29vAAMDQpzp377LNCysvKAAxNi9279%2BoFADBr1rvvAgD8%2FLNGAwDA8%2B3RRMEGMbDh8ExHGczA%2BiaKioTnpVgAk0iaNr5NInkwp4WFd%2B7ghbP5evf28JBIDA8CFxQI5ditm6Pjn30OZWXCaEv2AHffvp6edZseEWpPOAoRPv30zTcBAGQyoW03Lm7TJgCAnJzMzLr7sT6yZcv%2B8x8AgFWrhD679glcxoxH47X0wWax6PUPhh1WI2gMm1mBodTcHhDoGAYM6N1bIjHMSLFv388%2F19Q0%2FXGLyMjRoy0sAAIChEEd6enCYxD4afw5c3uOytTpb%2B8aWpsFsDffPH361VcN%2F1%2B9WlGRk9N%2BGWs6Nopw9eq66a0vL%2B%2FaNQCAhQtDQsROc8fHRosx%2FfoJDyZbWws%2FD9Y0xbCZLLy83Nzq9qJVVOh0YucFwJBu9nwbG2TC2NkJTZ5stKhYXF2dnOoOlz916tKllgSeCxeuX9frDTN29OghNO1euybuA%2BXor6XNAtjXX1%2B9GhMjdvb%2BOmprH9602PTjjetEbSsrS5ix4rHHhIDk6tqlC8cJF8K6fStMnz7du3Oc4fm17OzcXGH0ojAqUWxDh%2FbrJ5UKz1PxPIBKdfx43dGQQUHDhslkAE5OwuhLsdjZWVkBGPoOz58XRhc218WLwufHRn%2ByuSHRnzO3PqSOnn5sQnxEsOAj9hRRTcVGsyUm%2FvZbTY2hL6ahtP%2FvfwcPVlcbagpseLRYSkqEOfSOHj1zpm5KKisfPnd3SsrFi7W19WtgbO7H9sICP%2FvbUmwmCxw8g8SEAQyZhcYmiTW3SWTZbOdNrcGYy4O%2FCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEELtpdHJX9LT09PT08Wb2yEgICAgIKDlk9Rg%2BjH9mH5MP6b%2F0Uw%2FzsSBzIpEIpFIJAB6vV5fd4aLhraLRSoV5sW3sbGxsbExbGfpq6ioqBDWixPY2dnZ2dkJK1M%2FOBmxsJ%2B55KujYd8L9pepqampqakxlHdDr%2BNqBh0bBrAOyvhC2FQ8z5aWNI%2F09%2BjRo0ePHoZAUF1dXV1dDZCdnZ2dnW3Yv3fv3r179zYcV1ZWVlZWBpCbm5ubm9v%2B6beysrKysjKkn6mqqqqqqgK4fPny5cuXDdvd3Nzc3NwALC0tLesuR5GTk5OTkwNQWVlZWVnZ%2FvkwxsrX1dXV1dXVsL2goKCgoMD8Am2XLl26dOkC4OLi4uLiYtjOyr9Tp06dOnUC6NatW7du3QyvZ2VlZWVlAdy7d%2B%2BeOU1Oi5qnzQKYu7u7u7u74f%2Fbt2%2Ffvn0bvzCtxS4wfn5%2Bfn5%2BzT8%2BMzMzMzNT%2FEDm6Ojo6OhoqJmw70V5eXl5eXn9%2FVnAYhekzp07d%2B7c2bC9oePaS3FxcXFxMUBpaWlpaWn912%2FevHnz5k1DutmF19ywz8U4fazGUlRUVFRUJHYqOy5%2Ff39%2Ff%2F%2BGX8%2FIyMjIyBA7lS1Pf2s1N%2F8tuIdvGuMfqkwmkwnzjZsX1hTE7vDt7e3t7e3r78funNl%2B7A4ctYzx94Hd4LA7fWN5eXl5eXn1A4SFhYWFhYXYuTHUHHU6ne5hK5SxmhkLBObKycnJycnJkF6tVqvVag2%2FY0LMa%2B3vhmqEbHtjr6OO7S%2FfhMiadlhA8vT09PT0BLh%2B%2Ffr169cNFyYvLy8vLy%2FDhZftx5q6xG5LP3fu3Llz5wwBuSHsAmTcJ8BqZGLlo6k1QrFrjo8qW1tbW1tbw40aa5plF3rWVMpu8FjNV2ws0DLs%2B8F%2Bt8avs%2FzU1tbWirEMjLnXsDpa%2BlscwNiFsqk1K2tra2tr6%2Frb2R2pWE2L7M6eBTD2A%2B7Zs2fPnj0NX3iWX%2FYDuXXr1q1bt8QPXAwLSD4%2BPj4%2BPs0%2F%2Fvz58%2BfPn2%2B%2FO1PjvqCmlqNxADOXGlhHx2pe7PO%2Fe%2Ffu3bt3DZ8L%2B52y%2FcwlgLHrBqu5GwcmFsAaeh11bC0OYKwvwrivqyHGnazMnTt37ty5I15nPPtCX7ly5cqVKwDe3t7e3t6GC6xx4Lp27dq1a9fqjzJDf47V%2FHr16tWrVy%2FDDQNrcmNNVY1h5c4uqKxpi31eV69evXr1qti57TjYDQCrWbGmXOMbhZKSkpKSEsPv2PjzEwtLZ0N9c4293t5a24ckdg3I3NLfZn1gHQ0LVMZNawy7AJtrX15HYdyHwgaltLRvhR3X0lGZf3XGfVssUBljN5qsRmaug1DQX0uLa2Dsi97QF944UrM7Y%2BM2abGb4IybDFkgYzUzdgfH7lQ9PDw8PDwM282lKcXcsc%2BZDV9m5c3u%2FNloxIZG8TFsP3Yjwb5%2FrEkXNQ0L%2BGywFWs6ZP83hO3HRiua6%2FB6cyV2DepRS3%2B7DeJgF3xz%2B6Ibj5I0blJk6WZNiyyQsedK2PDt9grELD1sOHxHxW5kWABrag3KeD%2FjGyLUNA4ODg4ODoYWB%2FYcWkN91Qzrc2KDPlggY02PCLWnv%2FwoxPz8%2FPz8%2FPpNKMaDSlhAY31%2BrM%2FOXEbtdbQmNOP0N7UJ0Xg%2FsWvwHVXXrl27du1q6Etk3%2B%2Bmlid7nISdh%2F1u8PP4c%2Bb2HJWp09%2FeNbQ2u%2BSxJh32lw1rNTfsB8fS2VCnNPuhs0EcOJqpdYxr4qzpqqHBPuxxB3bHz5jL59DYqFy2vaE%2B1vbCZjxhTeesyba5gYf1ibF8saZdhNpTm9XAGuobQ22jtU2L7f18FbtwstGs7MLKmhSNH2hmgYvVNNkw76aOXmxrzs7Ozs7OhqY1VqNhWJ%2Bf2A%2FAG%2FcdtvR3yj4%2F49G66M%2BZWx9SR08%2FfuUeMR3lQV92x89qtI3VTC5dunTp0iXDcWLnkzUxGz%2F%2B0VCNsLCwsLCwsH4%2B27tlggV%2B9relWA0aB88gMWEAQ2ahscE95jb4hzUps6a0xuBoVYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgj91bRgBSaETEehUCgUivqz8KnVarVabZi2t6n7iS2od1DvoN6WllI3qZvUbf58kIMc5NOmQT7kQ36PHvd3XAbLYNm1a8I%2F33xj9brV61avb9wYvzt%2Bd%2Fxuc5w1FCHzgzNxdDANXchNxdwCQkcRcjHkYshFDw8ukAvkAtVq8AVf8H38cUiGZEh%2ByAGzYBbMYitvDRqkW6lbqVs5daryH8p%2FKP%2BhVKpGqEaoRuAkTQj9GQxgCLUCq3Fxz3HPcc8lJsJoGA2jBwyA9bAe1l%2B6REtpKS1dulTYO%2Fl%2BKKP21J7aP%2F00p%2BAUnGLtWlgJK2FlYCBNokk0SaMRzjt8%2BIHsA9kHsusu7IMQYjCAdXAqlUqlUrX8eKVSqVQqxUt%2FU2t85lozlHWVdZV1nT2bdqPdaLcBA8AFXMDlwgWuF9eL6zV8%2BH6yn%2BwnDa0x%2Fd13ISEhISEhR45w67n13PrffoM34A144%2FHHZd1l3WXdo6IgG7Ihe8MGsfOJkDkyWQBTbFdsV2zfsoWbwc3gZnz4ofDDvXpV7AyaSigNpaHUy4vfwe%2Fgd%2Fzzn%2BqZ6pnqmbNni50uJC7qTJ2p80svAQUKFABmwkyYuWzZnwcug4SEhISEhDt3Qj4N%2BTTk02XLOOCAg717%2BVf4V%2FhXpk6FzbAZNrc%2BgCmWKZYplkVHwzk4B%2BdefbXNymMFXUFXbN6sGaIZohkyd25bvU9jlK8pX1O%2BtnAhaEEL2vJyVawqVhW7bZtY6UFtw2QBjDpSR%2Bo4cSJvyVvylhMmyDvJO8k77doFh%2BEwHF67VvhCFxeLneGmkqfIU%2BQpXbvCGBgDY5YsEfL1%2FPP0W%2Fot%2FdZ8agJi16D%2B6ugX9Av6ha8vmUPmkDkAhBJK6OHDzT0PH8KH8CGHDnG%2BnC%2FnC0AOk8PksK%2BvqdI5%2BKPBHw3%2BaO7c1PLU8tTybt3Ii%2BRF8mJ4uMkK4v%2Fg%2F%2BD%2Fdu8O9An0CfSZN08DGtCY7ORNpyhQFCgKpk2j%2B%2Bl%2Bun%2F9eiqnciqnVPmd8jvld6WlKq1Kq9Lu3StC0lAbMF0TYhzEQRwh9Bf6C%2F2FrXg0bRpEQRREKRTy9fL18vWbNrlnume6Z8bExGyJ2RKzpaZG7AJg5syeM3vObJnslt8tv1t%2Bc%2BYI6Z43TwjADg7sBhtuwA24YT4Le3T0JsSOPgqRHCQHyUHD%2B1t%2BZvmZ5WcmGGSzF%2FbCXtPlaxVZRVYRno%2BIiIiIiJg2TTdeN143%2FtAh%2BBF%2BhB%2BHD2%2FxiX3AB3ySk8t8ynzKfKZPZ%2B9jqnQ3lWKjYqNi45gxMBgGw%2BCtW4W%2FhBA1URM1IbSCVtCKb75RuindlG7jxqnyVHmqvOPH2zudyLS4Nn%2BHaIiGaAcHeBqehqf%2F%2Bc%2B8uLy4vLikJOFOadw4sQuApYOli6XzfrqN%2FRGoxU43MhPxEA%2FxhjWwdW%2Fo3tC9MXZsc0%2FDJXAJXILhOLqJbqKbWrK2diPJjY%2BPj4%2BvqqLD6XA6XKmEQAiEwKysZp%2FoIByEgxcvSl6RvCJ5JSzsKDlKjhKdztTpbYwyWZmsTPbxEQJWfLzw18Ki3o5ykIPc2poW0SJatH%2F%2F%2FeNQh2ayAEZOkBPkRBMu7B%2FAB%2FABxwmBQvxFyOlgOpgOlsnupwuh5iiDMii7cuX%2B%2F9thO2z%2F%2BGOhz9TRsbHDhUEcnTtzEk7CST7%2B%2BMFXd%2B5sq2SzJn2JVqKVaIOC4GV4GV4uKmr0wFIohdKCAlgLa2FtUNA%2B332%2B%2B3xv327DEn4o4cbTxYW%2BR9%2Bj7x04AB%2FDx%2FBxly6NHhgEQRDk5MSOC44LjguOc3Vt7%2FQj02j7C3YsxELs7dvEk3gSzyVLyuaVzSubN3Kk%2BpL6kvrSgQNiF4AmV5OryU1MZOli6WTpNt6%2FyYEaNQlrAjT%2B29L92ovCX%2BGv8P%2F4Y7AHe7CPjLz%2FQgEUQEG%2Ffvxl%2FjJ%2F%2BcQJoS81LEy447e3F4bHd%2BokPDf23HNcFpfFZZ08KYw%2B7NsXkiAJkk6f1j%2Bvf17%2F%2FBdftHU%2B9q3bt27fusuXqRf1ol7h4bAAFsCC%2BjUpGkNjaIxWy3fiO%2FGdQkLU89Xz1fPrBO52Mi5tXNq4NFtbKqESKtFowBZswdbbu9kn%2BuM4SS9JL0kvjSZicsTkiMl2du2dH9Q6JrsACD%2FUW7eEH0BNDfmV%2FEp%2BjYmxmmQ1yWrSpk3CDAN374qd4aYSvtAODro9uj26PfPmCU0uc%2BaQfJJP8qVSdY46R53j4dHe6TLuCzJ1H5jYgcG8ESLfLt8u3%2F7552Qv2Uv2zptnslOvhJWwMjWVVJEqUiXeg8xKhVKhVERE8F%2FwX%2FBf7NpFtpKtZCvP02gaTaNDQ9kNX3unS%2Bi7k0h0ubpcXe6%2BfeAETuAkl5vsDRzAARwOHCiLLYsti1UqhSbR2tr2zidqHtM14a2G1bD6p59oZ9qZdl61SkM1VENzcmA37IbdYmez%2BR4MuB9%2BGNI5pHNI5%2F%2F9D1zBFVxXrIAcyIEcsVOJ2gchir2KvYq9n30mNBE2IXDVQA3UnDtHn6XP0md1OnKFXCFX%2FP3Zy3QVXUVXpaeTa%2BQaubZli1u0W7Rb9PbtYg9uUqlVapU6Pl6ZokxRpnh786V8KV96546mSlOlqWr%2FwMVUTaiaUDVh9Wqyn%2Bwn%2B00YuJi7cBfuBgV1eq7Tc52eY48tvP66WPlFTYN32h3MozaVlHmPQiRE%2FrX8a%2FnXX35J4kk8if%2F73xs9xAVcwGXPHqtSq1Kr0hdewLkNEWo7og%2BiQMh8UQp%2B4Ad%2BaWmN7joTZsLMzz9Xh6vD1eH%2F%2BMf94xFCbQYDWAeDfVTtSxit9%2Fnn8qnyqfKpUinREi3RfvLJ%2FR3swA7s1q0TAteSJcJGDFwIIYTMjNJP6af0e%2F99xRuKNxRvsEl6EUIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYSQMZzRAYkqPT09PT29%2FswVAQEBAQEBhhlHmrqf2E6POD3i9Ihu3ST7Jfsl%2B5cvJ%2FbEntiHhpJIEkkie%2Fak2%2Bg2uk2ngxiIgZiTJ2kQDaJBmzcPGDhg4ICB8fFipx%2BhjsRsfvioaRq6kJtKeweERyWApXdL75bebfhwYTmUffvor%2FRX%2Bquzc5NPcAAOwIFdu6yuW123uj5jRp9NfTb12XTvntj5Qsic4VyICLVCRveM7hnde%2FWiJ%2BgJeiIhgZbQElrSuTMsh%2BWw%2FPBhEkpCSeh775EfyA%2Fkh99%2FF47q0kVYCTw8HA7BITi0ejX9jH5GP3v%2Bed1l3WXd5YoK2ASbYNOsWWLnDyGETIbVRNjf1jI%2Bn9j562iEmld8%2FP1yfD79%2BfTnd%2B8WSpdrdMXzjHkZ8zLmDRwoBMKKivSd6TvTd%2FL8ucnnJp%2Bb%2FMQTYucPIXOGNbAGBGcEZwRnjB4tHScdJx1XXa3KU%2BWp8o4fFztdyDwIAcbOjp%2FIT%2BQnKhQkjISRsNpayS3JLcmt%2BfMJIYQQnm%2FsPP6b%2FDf5b0pLS1%2Bevjx9%2Bb%2F%2FDQEQAAFvvcVv5jfzm6dOFfY6ebK16c0YmjE0Y2h0tNAH9%2BqrbVYwKZACKZs3B8wMmBkwc%2B7cNnufxvIbkBGQEbBwIX2NvkZfKy8PmBswN2Dutm1ipQe1jVYHMHmKPEWeEhcn%2FDdiRJMPnAWzYNaxY5ozmjOaM88%2FL3ZBMBGTIyZHTLaw0CXpknRJH37In%2BPP8edqagKfDXw28Nlnn009lXoq9ZR4K%2BYay8jIyMjIEDsVfz36fvp%2B%2Bn7e3mQYGUaGWVrCPbgH99LTfat8q3yr8vKaez4SS2JJ7MGD9AX6An3hrbfgbXgb3vbzgyAIgqDWp7f%2Fyf4n%2B5%2BcOzdjS8aWjC3dusFwGA7Dw8NNViBjYAyM2b3bv9C%2F0L9w3jxhfTSTFnmTCDcC06bRABpAA9avh3RIh3RKM4IzgjOCS0v9E%2F0T%2FRP37m3%2FlKG20PoaWCiEQug%2F%2F0nGkrFk7MGDdAFdQBfIZA3tTj4nn5PPa2qIFbEiVu%2B8I3YBGNMt1y3XLZ8xQ2gC8vKCHMiBHAD3me4z3We%2B9JIQwLZuFTudjL%2B%2Fv79hofrmEzsAdtRBHLSKVtEqSgkQYSTUUBgKQwmBm3ATbrbghNtgG2yrk49jcAyOma5Jl9UIf%2FX41eNXj2nT7EvsS%2BxLDh2iJ%2BlJenL48BafeA2sgTXJyXaFdoV2hdOnN7XmaWpCjXjMGD6MD%2BPDtm4FG7ABG0KEGi0hkAZpkPbNN0IAHzfOf7b%2FbP%2FZ2KLS0TXaRt8YTa4mV5OblUW30%2B10%2BzffNLa%2FEOC%2B%2Bkr1m%2Bo31W%2FZ2WIXADOh%2B4TuE7p36QIjYASMePPNeun%2Bin5Fv1q8%2BP5%2B6C%2BtZmrN1JqpOTlkKVlKllZVwVk4C2f79Ttvfd76vLWbW3PPR5NoEk0aO5b9T8pJOSk%2Fd87U6R6eOzx3eG5VlWy9bL1svVIJ62AdrMvKau55SDgJJ%2BEXL0qHSYdJh4WFeRNv4k10OtOX9J87a3fW7qydjw8%2Fk5%2FJz4yPFwKXhUW98l1D19A11ta0kBbSwv372XHtnV5kWq0OYIz1FOsp1lPWroWe0BN63rlj%2FDp5h7xD3ikpsf7Y%2BmPrj%2BusaGsmZNdk12TXFi2iP9Of6c%2BdOtXbIRqiIdrBwSLWItYi9q23xE4vEldOTk5OTs69e8JzXLm5dB%2FdR%2FdJpbWhtaG1oRs3NncQh9CE%2BPrrrMmL5JN8kv%2Ftt22Vfp8onyifqOJicogcIoeCgshr5DXyWlFRowdagRVYFRTolXqlXhkU5Dvfd77v%2FNu327n4%2F2gqdHHhvDlvzvvAAegBPaBHE24slaAEpZMTO06oubm6tnf6kWmYvOlFkapIVaTOmSP8gFeuvP9Ga8gasubtt9Xx6nh1%2FI4dYmecEfrw%2BvWDG3ADbvz0E3iCJ3hKJA0ecANuwA29XvKJ5BPJJxMm7E%2Fen7w%2FOTOzvdJr3JRm6iZEc3muylxdoVfoFWplpY3Txmnj4uPBD%2FzATy6vt6PRMHp%2BGD%2BMH5aZySfzyXyyjY20VFoqLQ0NfXAYvYMDXIbLcHnr1oCwgLCAsPYbRi9cyEeM4N15d979p59gNsyG2VZW93cohmIo1mqpE3WiTqNGDRgwYMCAAamp7V3%2BaYvSFqUtsrXlorgoLurIEdCBDnRDhrT0fGQUGUVGpaaS0WQ0GT1qVP%2Fd%2FXf3363Vtne%2BUMuYfBTirdm3Zt%2BavX27W5lbmVvZ9OnEkTgSx%2BpqK28rbyvv2FixM1zPalgNq5cvFzrN%2FyRwMX8EOL1Wr9Vr33tP2Gg%2Bg1BQ27jw5YUvL3xpb689rj2uPa5SCYFr1KgGD%2FgIPoKPxoyhQIHCmDGsr0zytORpydMAwnYAUIACFGD0IPPrr7d3%2FoQLd3Ly2bSzaWfTXnqJ7CQ7yc5du0gciSNxPE9v0Bv0xpQpA6oHVA%2Bobv%2FAFRcXFxcXJ5FwlKMc3bWrtYGLoUfoEXokMBA2wAbYEBeXRJNoElUqR5PRZDSprW3vfKLmabM7bUWBokBRMG6c8MWvqtIM0QzRDElOFjvDHR3WwNoXC1w1%2FWr61fRTqcABHMDhTwIX4w%2F%2B4H%2F0qPBAsocHhEM4hDs5sZfJCrKCrPjtN%2FoUfYo%2B9e9%2FC8POExLEzi8jDHZYskQIsHfu%2BLv6u%2Fq7btkiVnrS%2B6b3Te%2B7Zg3sgT2wZ8mSNnujlbASVv7nPwF7AvYE7Gn%2FGwnUPHih6mBwKqn2SW%2FK7ym%2Fp%2Fzu4GD5quWrlq%2F%2B8AN8BV%2FBV8OGNXrgYTgMh99%2BO2BhwMKAhR991F7liNBfkckGcSD0KMm5knMl54pWS14kL5IXL19uaD%2F2ADN4gzd4v%2FQSBi6E2g%2FOxNHBYBNf%2B4iMjIyMjNTrhb6Xl17yG%2Bk30m%2BkVEqP0WP0WGQk9IJe0Kumhn5Pv6ffT58eYBdgF2DXdqMGEUIIoRYRRulZWNyf%2B3B7%2Bvb07SEhYqcLIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQshctd1yKkk0iSbNmXP%2FjUaT0WR0TIw6UB2oDoyJaa8MPkOfoc9QqdThuMNxh%2BPW1qoRqhGqEeXl7PVQGkpDqaOjfox%2BjH6MUgm5kAu5o0ZBBVRAhYcHPUwP08NSqbDA4O3b8Al8Ap%2F89puwYq5azRb0bK%2F8GFM%2BqXxS%2BWTv3nwZX8aXRUTA1%2FA1fP3UU8IKv926wd%2Fh7%2FB3SiELsiCroIBaUStqdeyYNEwaJg3bs2c%2F2U%2F2k6tX2fkiIiIiIiKsrbWntae1p2WyA9kHsg9kl5WJlT%2BEEGrIIx%2FAFImKREXik08K6xstWFBrXWtdax0VJR0lHSUdNXEi7U17097z5oEUpCC1sWnyiWfADJhBKU2kiTTxhx%2B007XTtdM%2F%2BOAoOUqOtuHKtBGTIyZHTLawqFpWtaxq2Ztvkn%2BRf5F%2FhYfTkXQkHdn4AooMOUaOkWM8T8fT8XR8fDw3iBvEDYqO5v%2FO%2F53%2F%2B4YNwsq2iYmaM5ozmjO7d7c0vfJ18nXydSkpbVUejdEs1izWLG79shsIIfPTygBGiHyufK587ocfwmPwGDw2fnyTD90G22Dbnj2aTE2mJrPtJj8NKQkpCSlZsoRsI9vItshISIVUSL1yBTbCRtjo5QU7YAfsaP3cguQgOUgOpqfXZtdm12ZHRQk1l3v3TJWPwMGBgwMHy2Sum103u27euJH8TH4mP7f%2BwszFcrFcLKV0KB1Kh167RvvRfrSflxeJITEk5pdf1JfUl9SXFixo6fkxgCGE2korJ%2FOl1LrQutC6cOXKyoWVCysXdu9O1ERN1H5%2BDR7xNH2aPp2SYnPC5oTNibVrIRMyoc3WMyaE5JAckjNy5P1NgRAIgd7eQlNaYSE3mhvNjXZ2FlaQzskhu8lusvvrr%2BlkOplOPnuW2lN7aq%2FX0%2BV0OV3eqxe3i9vF7XruOfgcPofPn376fr6epc%2FSZwMCJGGSMEnYsmUQBVEQtWqVqXLi%2Bq7ru67vLljQYOBKgARIOHpUckVyRXIlLq5aWi2tlp4%2Fz16WhcpCZaGDBtFz9Bw9N3MmvUlv0psDBvCBfCAfWFAA%2FaAf9PPyup%2Bfx%2Bhj9LEhQ%2BQ75TvlO21shPXcKiubm24MIAihtmKyJsTguOC44DhXV2HF1NhYuAE34Ebnzvd38AAP8MjN1b%2Brf1f%2F7vTpbd23Euwe7B7s3rcv9yb3Jvfmzp0N7Ucfp4%2FTxy9ftom2ibaJnjEjPj4%2BPj6%2Bqqqx8yvtlHZKu%2FBwfiW%2Fkl%2F59tv3X%2FijaZEsI8vIshkz1F%2Bqv1R%2Fee5ci%2FMRHhweHN6zJ%2BfKuXKucXFCTdewcjSNolE0av36BLsEuwS7%2F%2F63aWeVSuVfy7%2BWf%2F3FF1AIhVA4cGBDexJLYkkslyxRz1fPV88%2FfNjkHxRCCLWQyZZTSYxMjEyMzM9XJiuTlcnLl%2FNH%2BaP80X%2F%2Fm%2FyX%2FJf8t6ZGb6u31du%2B9daBWwduHbjV9oMCOBWn4lQjR8IROAJHGt6PnCanyelevaqWVi2tWrp8OcRDPMSvXCm8yvMNHafSqrQq7d698kx5pjzTz09YYj4sjDVJ8lv4LfyWiAj4Er6EVgQw7m3ube7t0FAhH4bABY7gCI6HDjUvcBGiGKIYohjy9tu0kBbSPwlcDJVRGZWxmmbzAxg2ISKE2orJF7QURvmlpAij3zZsIL7El%2Fh%2B8EHircRbibcuXWrqeYJ6B%2FUO6t2pU0vTQd4h75B3nnqqsf1oX9qX9i0pgTEwBsZYWSk2KjYqNvbs2dT3oUvpUrp0%2B%2FZ673%2BX3CV3m7CCb2P2wT7Y98QT9d7XglpQi9jYpp5GniJPkac4OfE%2F8j%2FyP%2Bp04AZu4JaVxQZzNJg%2Fd%2BpO3Vk5Nn2QCEIItbVGmhAJEe6gf%2F%2B93VP2R1Ocpqumq6br0KFNPWxc2ri0cWnOzpZPWj5p%2BaRGA0VQBEUXL5IgEkSC0tJ4e96etz9zRhi9d%2BaM0LdTXNza5Mo%2FlH8o%2F%2FD778ESLMGya1eWfuso6yjrqKeeit8dvzt%2Bd3V1s8%2F7rfxb%2Bbc%2F%2FcSaZFnAsbK0srSyHD5caPLU61uabuExAysr23jbeNv4fv3ICXKCnBg4kHxEPiIfDRok1MAef5yMIWPImIULNUmaJE1SWlprywshhFqrkSZESkVL2VW4ClcNz2s1OUOTpJOkk3Q6vYfeQ%2B8REnLA7oDdAbuiono7JkIiJJouueQ8OU%2FO8zwdRAfRQQCsKVF7RntGe6YVoxyjIRqiCYEQCIE2WD7xwWH%2FZ87c%2F%2FsJfAKffPWVUBO2tBS2s78IISS%2BNluaXnFccVxxPDSURtJIGllTIzzwm2jCkGEews6HnQ877%2BSkX6pfql964AB7HosqqIIq7t5N8EnwSfAZO7al55e%2FI39H%2Fs433wh9Xv36se3UmTpT5xkzEl5KeCnhpYwMscuhwfSbqA8M%2B7IQQsZM3qch9LUMHkwtqSW1XL4c9sN%2B2P%2Fee2y72Bk2tRquhqvhpk41fpCYm8RN4iaZoOk1DMIg7ORJ483cWm4tt3baNLHzjxBCYjFZDey5xc8tfm6xs3P1yOqR1SO%2F%2BYZcIpfIpS5d2OtssAQ3jBvGDZs%2BXe2idlG7FBSIXQAtJQTkESOEB7I%2F%2BcR4eDvxI37Eb948dbA6WB3822%2Bte58ePYT3iY%2Bv9z6ryWqyesMGdYm6RF3S9EEdCCHU0bU6gLGpjXRanVan%2FeIL9kBvgwcsh%2BWw%2FOLF8ury6vLqV15p66mXWovNgOHyo8uPLj%2F27s1d5a5yV0ND4Wl4Gp4OD4f34X1431DzMtUMFsbkU%2BVT5VPffFN4EPuFF4xfZ%2B%2FLz%2BJn8bPi42UKmUKmyMzc57vPd5%2Fv7dtilyNCCJlaqwNYvamamvrGu8guskulUqeoU9Qp%2F%2FqX2AXRECFwxMezGTwazM9aspasvXmTK%2BAKuIIZM4RJcktLTZUONimx3Um7k3YnN21qbCop8j55n7yv06nvqu%2Bq744YIXY5IoSQqbX6QeaELgldErqsXSv8t3atuU3m29bY1FhCfpcvVxM1UZswcDFCTbW2VqjxLlig26Pbo9vz1lu0iBbRIsMD1GKXB0IItReTzcTxqCOxJJbE1tRAFVRB1e%2B%2F8xf5i%2FzFvXsTSAJJIEeOtFc6Hnye7MMP5VflV%2BVX9%2BwR5pScPJlUk2pS%2Fbe%2FCXM32tnBMlgGy8QuPYQQQu1OGETRjGVWEEIIIYQQQgghhBBCCCGEEEIIIYQQQggh1EpsMl%2B5h9xD7hEcLHZ6EEIIPVpM%2FuDrg5P2%2Fuc%2FD746d66w%2FtapU2JnHCGEUMf2yE%2FmGxERERERwSa%2FtbAQFoCsqmKvP7jys58f15fry%2FX19CRJJIkkOTrSMXQMHUOI8KBwZSXtQrvQLgUFZCfZSXZmZgrLpeTmtnU%2BGsIW8JRJZBKZpH9%2F4kW8iJe7O0yBKTDF1pbtR54gT5An7t4V1hXLza0JqwmrCcvM%2FOHmDzd%2FuFlSwvZjU1bZ9LHpY9NHIjmQfSD7QPa9e2LlDyGEGvLIT%2BZ7fzb3BEiAhOHDrTOsM6wzVKqKiIqIiggfH5gEk2BSYCBREiVRGmZ5b7J5MA%2FmXbumnaidqJ149Ghb5%2BfBAPPUU5wP58P5%2BPg09zzkMDlMDlMqLPyZnp61IGtB1oLTp%2FtW9K3oWzFxIt1Kt9KtWVlCAMvMbHH5z5XPlc89ccJ4Fn1TKV9Uvqh80ZNPsqm2TH1%2BhJD5avV6YJUxlTGVMf%2F4R6OBi%2FkIPoKPfHw6De00tNPQJUvaOoP0MD1MD%2FfsSU%2FSk%2FSkg4N2sHawdnBEBORCLuQOG9biwMVsgk2wqWdP%2B8ftH7d%2FXC5%2FcAVj02E1Sftl9svslwUFtTRw3S%2BXP2qW0nxpvjR%2F4MB%2B3%2FX7rt93U6aQZJJMkl1cYCWshJU9e5o6HwghZCom7wMzt8l8Q7xDvEO8p00DP%2FADP8OUUELAJYQG0SAaRAgJIAEkoKiIjCfjyfjTp6tXV6%2BuXl1QIJ0knSSdVFsrPS49Lj3u6Mg78868s68vyEEO8r59jd%2BP5tN8mn%2FlSmJqYmpi6k8%2FmSofQceCjgUde%2Bopbg23hlvTv3%2B9Hf6oCQo1nYwMPoQP4UOKiyW7JLsku1iA7toV4iEe4gcO5F15V97V3Z0cJAfJQUrr5UNFVVSl13eP6h7VPerrr2O2xGyJ2VJT016fG0IINeaRncxXqAl16wY%2B4AM%2B9ecyZBduqqM6qquqKggoCCgIUKlSE1ITUhNqaoQmxzoHuIAL3O%2BzKygICQkJCQm5fl1oihs7ltVoiCtxJa7e3spkZbIy2d1dNUI1QjXi1q2W5iOUhtJQ6uiot9Hb6G38%2FIT3qbPDFJgCU375JSEoISghKCOj3gmGwBC4v%2BjK9evC3xs3QoJDgkOCJ08GAgRI5871yuePmmnexLyJeRO7dxe2Xrki6oeKEEJ1PLLLbwRdCLoQdGHIEG4Rt4hbxEZF%2Fok%2FajBDJg6ZOGTiTz%2BtIqvIKsLzjR0mrBc2fDgto2W0zNCEyk3kJnITs7PV89Xz1fMPH25pPoKXBS8LXjZsGEkn6SR94EC2vaU1PcUQxRDFkGee4V14F96lCU2QGtCA5tKl9pp1X75Ovk6%2BLiXFVOfTLNYs1ixueN00hFDH1eo%2BsLby4OjA5iNdSVfStUePxvajPWlP2rO0lG6hW%2BiWqqozcAbOQDPedxEsgkVpacab9Un6JH2Sh0erC2IxLIbF9c%2FDfcF9wX1x%2BnRTT8Nm1a%2F9tPbT2k9ra0kuySW5JSVsMEeD5TOJTqKTPD3%2FKNVH9oYHIdTxNHJBIkS4I%2F7993ZP2QyYATMo1XTVdNV0HTq0qYcJTXf29nq9Xq%2FXR0RAJERCZEGB0JSWnw%2BfwqfwaX5%2B%2FtT8qflTCwtTT6WeSj3V%2Br6dEG2INkT74ovGw9e1Gq1Gq9m2raWj5EIWhSwKWfTyy3ABLsAFS0sWcDRVmipN1datwl6N1xQbwkY12sbbxtvGd%2B0qbHV1ffjf779PjEyMTIzMz29teSGEUGs10gfW8J15m7sKV%2BFqeXlzD7P8zPIzy8%2Fu3evcuXPnzp1jY2MKYgpiCur0aRn3bZk5OowOo8MIIRfIBXLB9Od%2FMLCywGQIUMbPhYldHgghxGCTUCuxpjm6gq6gK6ZNY9upJbWkllVViXsT9ybujY1t6fmDi4OLg4vDw8nL5GXyMqshAQgrQn%2F3nfCcVlGR2OXQWuwxgaphVcOqhp040eITvQvvwrs8L9RQn3hC7HwhhNqO2faBdRSkkBSSwgEDjLdzrpwr59ry0YcMfZI%2BSZ%2Bsfx7JeMl4yfj674sQQn8Vj%2FxzYG1FmKS4Tx8ogRIoGTXq%2FpRTf5AslyyXLNdoWjuMXhiu37mz0Pc1ebLx%2B5BKUkkqT5zQJGmSNEn1B5MghNCj6pF9DsxU2FRZFZEVkRWRXboID0T7%2BtKldCld2qeP8f5seHtrAxeTkJCQkJBw506IVYhViNW5c8JWf%2F%2F772dDbajNsGHBccFxwXFublJ3qbvU%2FezZmhk1M2pm3L6NcxkihB5Vra6BKWIVsYrYt9%2BmBbSAFoSHN%2FnAN%2BANeOOHHzQSjUQjeecdYaOIg0YaEDw3eG7w3MhIco1cI9ccHRvaj35Fv6JfFRfbRtlG2UZpNPG743fH766uNlU6VtAVdAXluBTXFNcU16AgYVTlnwzTXwJLYEltbcIzCc8kPLNtm1jlh891IYTaSqv7wKxUVior1Zo18Dq8Dq%2BnpjZ6wC%2FwC%2Fxy7pz1FOsp1lNWrRI2ml%2FgaipW42qrwMWwB6ttRtqMtBn5%2FffCIJELbTAuESGEOgaT9YFN6D6h%2B4TuXbrIxsrGysbGxkIABECAi8v9HWbBLJhVVATZkA3Z06cL64IVF4tdAI2RD5IPkg%2BaPFmfrE%2FWJ1tYcJFcJBdZWMhf4i%2Fxly5cEJrobt4UK32KAkWBosDFRV%2BkL9IX%2BfmRU%2BQUOeXiQq2oFbWyshKe29qxQ%2BxyRAghUzP5IA7hQWIfHz6Pz%2BPztm0jH5APyAccBz%2FCj%2FDjq68K64CdPSt2xhFCCKGHEkbpBQcLk8ZGRIidHoQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIoUdPs%2BdCDOod1Duot5%2BfZJdkl2TX3%2F5GxpPxZLxhvSl9tD5aH52eLnlG8ozkGZ4noSSUhLq7U3%2FqT%2F1v3KBRNIpGDR9ufBydTWfT2aWlEAEREJGVxek4Hafr21dYV0ulMk6HYpZilmJW%2F%2F7G56MD6UA6kBCyi%2Bwiu86c6ehzLyrtlHZKu%2FBwepleppezs1l%2B5CnyFHmKjY2w1wsvCOX17beuX7l%2B5fqVTpdXmleaV%2Frii8K6ZbduCZMn%2F%2FgjO69wfL9%2BTS1n4kk8iaeXl2qFaoVqRUKC8CrHCQuYzppVO6V2Su2UXbuko6SjpKM8PRv7nDVrNGs0a9RqscsXIdRxtXxBy3iIh%2FiCAnWJukRdUudCFAmREMlmSa%2B%2F5D2XwCVwCXl5qhJViaqEXQgBYA2sgTUA8gh5hDyiX7%2BmJsP4fEE3gm4E3ejUSbZYtli2ePJkYZb8mzd%2FuPnDzR9ulpSIXeDNxR%2Fhj%2FBHMjO5WdwsblZAgLD17Fl4C96Ct%2Fr0Ibkkl%2BTm5qouqS6pLpWXh34T%2Bk3oNwEBNJ2m0%2FTbt7kN3AZuQ%2Ffuz459duyzYx0cDh46eOjgobt32zrdjX3OCCHUWi1fDywCIiDCxUXRRdFF0WX6dPZXmI3e3r6hw%2FgQPoQPcXMzPk6RqEhUJD75ZGszJCxvUlYmrJel1UoHSgdKBza8EKW5Kw8sDywPzM4WlkextWXLp5BepBfp5eOj99f76%2F0zM4W9CeFlvIyX%2BftLaiQ1kpozZ8AZnME5O9tyguUEywn1byjaSlt%2Fzggh1PIA9kANLDaW%2FRWaosrLG3zDP%2B7MjY9TB6uD1cG%2F%2FdbaDI1LG5c2Ls3Wltwj98g9OzvZOtk62bq2r3G0laPkKDlKams5T86T87x0CQbDYBg8YoTQRCeVJu5N3Ju49%2Fr1kJCQkJAQb286g86gM%2Bzs%2BB38Dn7HqFH8Kf4Uf8rLi7PmrDnrvn0jIiIiIiKsrZv6%2FvQAPUAPVFeDDdiAjb39nNlzZs%2BZLZOF0lAaSjt1YvtVZlVmVWYZFvJs688ZIYRa3oTYQvfvzDcoNig2TJ%2FOttOFdCFdyC6AaWm8FW%2FFWzk7szt3th%2BxJJbEMieHAgUKpaX1zjcaRsNogNro2uja6FOnEn0TfRN9b98Wu6Bb7RP4BD7JzIQX4UV40d8fKFCgKSl%2FlB4lq8gqsmrAAKiESqg8eVKdpE5SJ6WlQRIkQRKA%2FAn5E%2FInFApdua5cV%2B7vLxxXXt5YObsGuwa7Bp88mb8nf0%2F%2Bnl698vvk98nvM306jaSRNJLn%2BQ%2F4D%2FgPzpwRAq1OJ%2FSZNf45a1ZoVmhWfPut2MWKEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEKo3f0%2FYCcRj5nKHu4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTMtMDItMDlUMTk6MzI6NTMrMDE6MDCs99SeAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEzLTAyLTA5VDE5OjMyOjUzKzAxOjAw3apsIgAAAHl0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9qb3MvRHJvcGJveC9Kb3MvcHJvZ3JhbW1pbmcvamF2YXNjcmlwdC9qc29uZWRpdG9yb25saW5lL2pzb25lZGl0b3IvY3NzL2ltZy9qc29uZWRpdG9yLWljb25zLnN2Z2GG7LgAAAAASUVORK5CYII%3D%29%200%20%2D72px%3B%0A%20%20opacity%3A%200%2E4%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20ul%20li%20button%3Ahover%20div%2Eexpand%2C%0A%2Ejsoneditor%2Dcontextmenu%20ul%20li%20button%3Afocus%20div%2Eexpand%2C%0A%2Ejsoneditor%2Dcontextmenu%20ul%20li%2Eselected%20div%2Eexpand%2C%0A%2Ejsoneditor%2Dcontextmenu%20ul%20li%20button%2Eexpand%3Ahover%20div%2Eexpand%2C%0A%2Ejsoneditor%2Dcontextmenu%20ul%20li%20button%2Eexpand%3Afocus%20div%2Eexpand%20%7B%0A%20%20opacity%3A%201%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20%2Eseparator%20%7B%0A%20%20height%3A%200%3B%0A%20%20border%2Dtop%3A%201px%20solid%20%23e5e5e5%3B%0A%20%20padding%2Dtop%3A%205px%3B%0A%20%20margin%2Dtop%3A%205px%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Eremove%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%20%2D24px%20%2D24px%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Eremove%3Ahover%20%3E%20%2Eicon%2C%0A%2Ejsoneditor%2Dcontextmenu%20button%2Eremove%3Afocus%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%20%2D24px%200%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Eappend%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%200%20%2D24px%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Eappend%3Ahover%20%3E%20%2Eicon%2C%0A%2Ejsoneditor%2Dcontextmenu%20button%2Eappend%3Afocus%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%200%200%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Einsert%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%200%20%2D24px%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Einsert%3Ahover%20%3E%20%2Eicon%2C%0A%2Ejsoneditor%2Dcontextmenu%20button%2Einsert%3Afocus%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%200%200%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Eduplicate%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%20%2D48px%20%2D24px%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Eduplicate%3Ahover%20%3E%20%2Eicon%2C%0A%2Ejsoneditor%2Dcontextmenu%20button%2Eduplicate%3Afocus%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%20%2D48px%200%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Esort%2Dasc%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%20%2D168px%20%2D24px%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Esort%2Dasc%3Ahover%20%3E%20%2Eicon%2C%0A%2Ejsoneditor%2Dcontextmenu%20button%2Esort%2Dasc%3Afocus%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%20%2D168px%200%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Esort%2Ddesc%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%20%2D192px%20%2D24px%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Esort%2Ddesc%3Ahover%20%3E%20%2Eicon%2C%0A%2Ejsoneditor%2Dcontextmenu%20button%2Esort%2Ddesc%3Afocus%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%20%2D192px%200%3B%0A%7D%0A%0A%2F%2A%20ContextMenu%20%2D%20sub%20menu%20%2A%2F%0A%0A%2Ejsoneditor%2Dcontextmenu%20ul%20li%20%2Eselected%20%7B%0A%20%20background%2Dcolor%3A%20%23D5DDF6%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20ul%20li%20%7B%0A%20%20overflow%3A%20hidden%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20ul%20li%20ul%20%7B%0A%20%20display%3A%20none%3B%0A%20%20position%3A%20relative%3B%0A%20%20left%3A%20%2D10px%3B%0A%20%20top%3A%200%3B%0A%20%20border%3A%20none%3B%0A%20%20box%2Dshadow%3A%20inset%200%200%2010px%20rgba%28128%2C%20128%2C%20128%2C%200%2E5%29%3B%0A%20%20padding%3A%200%2010px%3B%0A%20%20%2F%2A%20TODO%3A%20transition%20is%20not%20supported%20on%20IE8%2D9%20%2A%2F%0A%20%20%2Dwebkit%2Dtransition%3A%20all%200%2E3s%20ease%2Dout%3B%0A%20%20%2Dmoz%2Dtransition%3A%20all%200%2E3s%20ease%2Dout%3B%0A%20%20%2Do%2Dtransition%3A%20all%200%2E3s%20ease%2Dout%3B%0A%20%20transition%3A%20all%200%2E3s%20ease%2Dout%3B%0A%7D%0A%0A%0A%0A%2Ejsoneditor%2Dcontextmenu%20ul%20li%20ul%20li%20button%20%7B%0A%20%20padding%2Dleft%3A%2024px%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20ul%20li%20ul%20li%20button%3Ahover%2C%0A%2Ejsoneditor%2Dcontextmenu%20ul%20li%20ul%20li%20button%3Afocus%20%7B%0A%20%20background%2Dcolor%3A%20%23f5f5f5%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Etype%2Dstring%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%20%2D144px%20%2D24px%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Etype%2Dstring%3Ahover%20%3E%20%2Eicon%2C%0A%2Ejsoneditor%2Dcontextmenu%20button%2Etype%2Dstring%3Afocus%20%3E%20%2Eicon%2C%0A%2Ejsoneditor%2Dcontextmenu%20button%2Etype%2Dstring%2Eselected%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%20%2D144px%200%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Etype%2Dauto%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%20%2D120px%20%2D24px%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Etype%2Dauto%3Ahover%20%3E%20%2Eicon%2C%0A%2Ejsoneditor%2Dcontextmenu%20button%2Etype%2Dauto%3Afocus%20%3E%20%2Eicon%2C%0A%2Ejsoneditor%2Dcontextmenu%20button%2Etype%2Dauto%2Eselected%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%20%2D120px%200%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Etype%2Dobject%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%20%2D72px%20%2D24px%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Etype%2Dobject%3Ahover%20%3E%20%2Eicon%2C%0A%2Ejsoneditor%2Dcontextmenu%20button%2Etype%2Dobject%3Afocus%20%3E%20%2Eicon%2C%0A%2Ejsoneditor%2Dcontextmenu%20button%2Etype%2Dobject%2Eselected%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%20%2D72px%200%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Etype%2Darray%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%20%2D96px%20%2D24px%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Etype%2Darray%3Ahover%20%3E%20%2Eicon%2C%0A%2Ejsoneditor%2Dcontextmenu%20button%2Etype%2Darray%3Afocus%20%3E%20%2Eicon%2C%0A%2Ejsoneditor%2Dcontextmenu%20button%2Etype%2Darray%2Eselected%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dposition%3A%20%2D96px%200%3B%0A%7D%0A%0A%2Ejsoneditor%2Dcontextmenu%20button%2Etype%2Dmodes%20%3E%20%2Eicon%20%7B%0A%20%20background%2Dimage%3A%20none%3B%0A%20%20width%3A%206px%3B%0A%7D%0A%2Ejsoneditor%20%2Emenu%20%7B%0A%20%20width%3A%20100%25%3B%0A%20%20height%3A%2035px%3B%0A%20%20padding%3A%202px%3B%0A%20%20margin%3A%200%3B%0A%20%20overflow%3A%20hidden%3B%0A%20%20%2Dmoz%2Dbox%2Dsizing%3A%20border%2Dbox%3B%0A%20%20%2Dwebkit%2Dbox%2Dsizing%3A%20border%2Dbox%3B%0A%20%20box%2Dsizing%3A%20border%2Dbox%3B%0A%20%20color%3A%20%231A1A1A%3B%0A%20%20background%2Dcolor%3A%20%23D5DDF6%3B%0A%20%20border%2Dbottom%3A%201px%20solid%20%2397B0F8%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Emenu%20button%20%7B%0A%20%20width%3A%2026px%3B%0A%20%20height%3A%2026px%3B%0A%20%20margin%3A%202px%3B%0A%20%20padding%3A%200%3B%0A%20%20border%2Dradius%3A%202px%3B%0A%20%20border%3A%201px%20solid%20%23aec0f8%3B%0A%20%20background%3A%20%23e3eaf6%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAANgAAACoEAYAAADSkvxvAAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA%2BUO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAANtZJREFUeNrt3XlcVFX7APDn3JlhR1CUVRRyQRDURDPfzFxyAWYGQsEsLX1TI3N5S3PprdS3svRnmen7SphL0etroKYzA7aoqGGlgYogLiCuyCoiDDACc8%2Fvj9txcJDYBu5gz%2FcfPty59845Z2buc89yzwFACCGEEEIIIYQQQgghhBBC6NFCGtvByWnvXgBKxUrg7dvh4QCk0XQ2hNLAQDHTT0hqamvSv3nzvn06nXjpf%2B21sDArK0w%2Fph%2FTj%2Bk3v%2FRLxUoYQg9jYSGTAQBUV9fU1N1uaSlsv3fvwe1isba2tCQEwM3Nyanuz%2BvevepqAIDc3OJinjds9%2FR0duY4AJlM%2BsBvju3HjkPNw74XlpYWFnU%2Fh4qKqipKAaRSobwtLWWyuq9rtcLrPF%2F3U0IdDQawDkomk0pbcl9VU1NbK9791IPpBwCYOPGJJ2QygG7dHB05DqCsrLKSUoDdu48cqXtJj4wcM8bCAkAq5TgAgKtX8%2FN5HiAp6fTp2tr2T3%2FXrg4OhACMHz90qHAJFRQW3rnD8wB79x47VvfS%2BNRTAQFSKYCjo51d3c%2Ftu%2B%2BOHaupASgoqK42h0upVCqRAAD87W%2F%2B%2FnVD7YkTmZm1teZzA8H4%2B3t7SyQAQ4f6%2BtZN7549R49WVwN4e7u5SSQAgwf37SvkTPDtt4cPV1cD3LlTXm4OvwfUMm0WwNasGThw0yYAmYzjZDKAmJjLlz%2F%2FHODChbKyc%2BfEznbHxQLXK6%2BEhFhYNP%2F4rVsTEqqrxQ9kfft6ekokAB4e3bpxHEBpqVZLKcD16wUFD7uQX7mSl8fzAN7erq4cB%2BDj06OHRAJw%2BfKtWzzf8HHtJS0tO1uvB7h06cYNvb7%2B6wcPpqTU1AD4%2BXl5SSSGv%2BaGfS7G6SsvF24sTp%2FOynpY%2FlDTREWFhlpaNvx6dPT%2B%2FffuiZ3Klqe%2FtZqbf66tEjJtWs%2Ber7wC8NJLXl5z5gB4eFhbe3q2XcZbrmtXNzcAgJ07T58GABg5Uql82H6PPebnBwDw7bfp6QAAvXsHBIid9vooFcJSQ3%2FNha3tgy3bGRk5OXo9wMmT588%2FrEaVnHz2bG0twMWLN27UDVT29jY2LW%2FhN527dysqKAW4fbus7GElXVx89y6lhkBgrvz9H3tMIgEoLCwtpRTg5s2iIp4H6N9fqOlwnDmUtkFV1cObXllNUaerrn5YeWOT7aMBmxDhzTc%2F%2FRQAoG%2FfQYMAAD76aNcuAIBFi8LCAABu3MjOBgDYuPH77wEAXFyEQLx27e7dAAAREf37AwDo9WI0ZTExMWr1vXsA1tYP9gUYI0R41cLiwSbI6ur2rZGxdDT3%2FY1rjsbnQS3j4dG1K8cBdOlib0%2BIoWm2urqmhlKACROEpt6ePYUaMKsRi624%2BO7duumorRXqh%2BxGgd04MCygVVbeuyfGjYS517A6WvpbHMCcnCwtu3UD6N7d2rpHj%2FqvE0IIV6d%2BFxDg4PD44wC1tZTWvdAXFOh0eXliNi2uW7dwIQBAnz4DBwIAeHv7%2BgIAfPrp%2Fv0AAHfvlpQAAHTr5u4OAFBZqdUCALz%2F%2FqxZAGIHLsbKSghc06dPmNCSpsVt24SmxfYKZJ07P9gX1NTOdL3%2Bwf2M%2B5RQy7CaF7vAX76cm6vXG8qbBQS2n7kEsJISocbL%2Buh0OqFmxVociotLS3ne8HplpTldflFrtTiAKRTu7pMmAaxbN2jQ5s2N7%2F%2FOO%2F37r15df%2Fv%2F%2Fnf9%2Bo4dAPPnp6bOnClGEZSUFBYCALz22tixAAAxMUeOAAD06NG3L0D9wLVwYXAwAMDp0z%2F%2FLEZ6OyaOE25nwsNHjrSwMAyCuHOnvJznAW7eLCxsygWRNWlVVAiDe319e%2FaUSAyBTKP55RfzGmZg3lgTrJeXULM6e%2FbyZb3eUJNhLly4dk2vNwyWcHLq1ImQhptM2wtLZ0N9c9XVwu2lufTdtbYPSewakLmlv836wDoeBwcnJwAAOztHx4e9bmVlbQ1gaEJELSGRcA985wgRGgGb2hTI9uN54bLJzieVSiRYE2u%2B%2Fv0fHKxx7tzVqw%2B70GdmXrvG84YaGesTQ0hMLa6B7dhx5Up0tOGvseLi556re2c2efLx4%2BPHA5w5c%2BdOSophe3U1z4vbndqzp48PgKGPq0sXZ2chB3l5AIaaV48effoAAKxYsX07AEBVVUUFAMDRo0JTI%2FozrIkwLi4pqbra0KfC7vw9PV1cOE4YxfdnNTH2PJW9vbU1IQCZmcIF99ixtDRzaMrtKNhweV9fIYDduyf0dbEabUNYEyMbrXjy5Pnzen3DgyXQg8SuQT1q6W%2B3QRxabW1teTlAaWlNzZ07Yme7rsjI118HAHB29vAAMDQpzp377LNCysvKAAxNi9279%2BoFADBr1rvvAgD8%2FLNGAwDA8%2B3RRMEGMbDh8ExHGczA%2BiaKioTnpVgAk0iaNr5NInkwp4WFd%2B7ghbP5evf28JBIDA8CFxQI5ditm6Pjn30OZWXCaEv2AHffvp6edZseEWpPOAoRPv30zTcBAGQyoW03Lm7TJgCAnJzMzLr7sT6yZcv%2B8x8AgFWrhD679glcxoxH47X0wWax6PUPhh1WI2gMm1mBodTcHhDoGAYM6N1bIjHMSLFv388%2F19Q0%2FXGLyMjRoy0sAAIChEEd6enCYxD4afw5c3uOytTpb%2B8aWpsFsDffPH361VcN%2F1%2B9WlGRk9N%2BGWs6Nopw9eq66a0vL%2B%2FaNQCAhQtDQsROc8fHRosx%2FfoJDyZbWws%2FD9Y0xbCZLLy83Nzq9qJVVOh0YucFwJBu9nwbG2TC2NkJTZ5stKhYXF2dnOoOlz916tKllgSeCxeuX9frDTN29OghNO1euybuA%2BXor6XNAtjXX1%2B9GhMjdvb%2BOmprH9602PTjjetEbSsrS5ix4rHHhIDk6tqlC8cJF8K6fStMnz7du3Oc4fm17OzcXGH0ojAqUWxDh%2FbrJ5UKz1PxPIBKdfx43dGQQUHDhslkAE5OwuhLsdjZWVkBGPoOz58XRhc218WLwufHRn%2ByuSHRnzO3PqSOnn5sQnxEsOAj9hRRTcVGsyUm%2FvZbTY2hL6ahtP%2FvfwcPVlcbagpseLRYSkqEOfSOHj1zpm5KKisfPnd3SsrFi7W19WtgbO7H9sICP%2FvbUmwmCxw8g8SEAQyZhcYmiTW3SWTZbOdNrcGYy4O%2FCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEELtpdHJX9LT09PT08Wb2yEgICAgIKDlk9Rg%2BjH9mH5MP6b%2F0Uw%2FzsSBzIpEIpFIJAB6vV5fd4aLhraLRSoV5sW3sbGxsbExbGfpq6ioqBDWixPY2dnZ2dkJK1M%2FOBmxsJ%2B55KujYd8L9pepqampqakxlHdDr%2BNqBh0bBrAOyvhC2FQ8z5aWNI%2F09%2BjRo0ePHoZAUF1dXV1dDZCdnZ2dnW3Yv3fv3r179zYcV1ZWVlZWBpCbm5ubm9v%2B6beysrKysjKkn6mqqqqqqgK4fPny5cuXDdvd3Nzc3NwALC0tLesuR5GTk5OTkwNQWVlZWVnZ%2FvkwxsrX1dXV1dXVsL2goKCgoMD8Am2XLl26dOkC4OLi4uLiYtjOyr9Tp06dOnUC6NatW7du3QyvZ2VlZWVlAdy7d%2B%2BeOU1Oi5qnzQKYu7u7u7u74f%2Fbt2%2Ffvn0bvzCtxS4wfn5%2Bfn5%2BzT8%2BMzMzMzNT%2FEDm6Ojo6OhoqJmw70V5eXl5eXn9%2FVnAYhekzp07d%2B7c2bC9oePaS3FxcXFxMUBpaWlpaWn912%2FevHnz5k1DutmF19ywz8U4fazGUlRUVFRUJHYqOy5%2Ff39%2Ff%2F%2BGX8%2FIyMjIyBA7lS1Pf2s1N%2F8tuIdvGuMfqkwmkwnzjZsX1hTE7vDt7e3t7e3r78funNl%2B7A4ctYzx94Hd4LA7fWN5eXl5eXn1A4SFhYWFhYXYuTHUHHU6ne5hK5SxmhkLBObKycnJycnJkF6tVqvVag2%2FY0LMa%2B3vhmqEbHtjr6OO7S%2FfhMiadlhA8vT09PT0BLh%2B%2Ffr169cNFyYvLy8vLy%2FDhZftx5q6xG5LP3fu3Llz5wwBuSHsAmTcJ8BqZGLlo6k1QrFrjo8qW1tbW1tbw40aa5plF3rWVMpu8FjNV2ws0DLs%2B8F%2Bt8avs%2FzU1tbWirEMjLnXsDpa%2BlscwNiFsqk1K2tra2tr6%2Frb2R2pWE2L7M6eBTD2A%2B7Zs2fPnj0NX3iWX%2FYDuXXr1q1bt8QPXAwLSD4%2BPj4%2BPs0%2F%2Fvz58%2BfPn2%2B%2FO1PjvqCmlqNxADOXGlhHx2pe7PO%2Fe%2Ffu3bt3DZ8L%2B52y%2FcwlgLHrBqu5GwcmFsAaeh11bC0OYKwvwrivqyHGnazMnTt37ty5I15nPPtCX7ly5cqVKwDe3t7e3t6GC6xx4Lp27dq1a9fqjzJDf47V%2FHr16tWrVy%2FDDQNrcmNNVY1h5c4uqKxpi31eV69evXr1qti57TjYDQCrWbGmXOMbhZKSkpKSEsPv2PjzEwtLZ0N9c4293t5a24ckdg3I3NLfZn1gHQ0LVMZNawy7AJtrX15HYdyHwgaltLRvhR3X0lGZf3XGfVssUBljN5qsRmaug1DQX0uLa2Dsi97QF944UrM7Y%2BM2abGb4IybDFkgYzUzdgfH7lQ9PDw8PDwM282lKcXcsc%2BZDV9m5c3u%2FNloxIZG8TFsP3Yjwb5%2FrEkXNQ0L%2BGywFWs6ZP83hO3HRiua6%2FB6cyV2DepRS3%2B7DeJgF3xz%2B6Ibj5I0blJk6WZNiyyQsedK2PDt9grELD1sOHxHxW5kWABrag3KeD%2FjGyLUNA4ODg4ODoYWB%2FYcWkN91Qzrc2KDPlggY02PCLWnv%2FwoxPz8%2FPz8%2FPpNKMaDSlhAY31%2BrM%2FOXEbtdbQmNOP0N7UJ0Xg%2FsWvwHVXXrl27du1q6Etk3%2B%2Bmlid7nISdh%2F1u8PP4c%2Bb2HJWp09%2FeNbQ2u%2BSxJh32lw1rNTfsB8fS2VCnNPuhs0EcOJqpdYxr4qzpqqHBPuxxB3bHz5jL59DYqFy2vaE%2B1vbCZjxhTeesyba5gYf1ibF8saZdhNpTm9XAGuobQ22jtU2L7f18FbtwstGs7MLKmhSNH2hmgYvVNNkw76aOXmxrzs7Ozs7OhqY1VqNhWJ%2Bf2A%2FAG%2FcdtvR3yj4%2F49G66M%2BZWx9SR08%2FfuUeMR3lQV92x89qtI3VTC5dunTp0iXDcWLnkzUxGz%2F%2B0VCNsLCwsLCwsH4%2B27tlggV%2B9relWA0aB88gMWEAQ2ahscE95jb4hzUps6a0xuBoVYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgj91bRgBSaETEehUCgUivqz8KnVarVabZi2t6n7iS2od1DvoN6WllI3qZvUbf58kIMc5NOmQT7kQ36PHvd3XAbLYNm1a8I%2F33xj9brV61avb9wYvzt%2Bd%2Fxuc5w1FCHzgzNxdDANXchNxdwCQkcRcjHkYshFDw8ukAvkAtVq8AVf8H38cUiGZEh%2ByAGzYBbMYitvDRqkW6lbqVs5daryH8p%2FKP%2BhVKpGqEaoRuAkTQj9GQxgCLUCq3Fxz3HPcc8lJsJoGA2jBwyA9bAe1l%2B6REtpKS1dulTYO%2Fl%2BKKP21J7aP%2F00p%2BAUnGLtWlgJK2FlYCBNokk0SaMRzjt8%2BIHsA9kHsusu7IMQYjCAdXAqlUqlUrX8eKVSqVQqxUt%2FU2t85lozlHWVdZV1nT2bdqPdaLcBA8AFXMDlwgWuF9eL6zV8%2BH6yn%2BwnDa0x%2Fd13ISEhISEhR45w67n13PrffoM34A144%2FHHZd1l3WXdo6IgG7Ihe8MGsfOJkDkyWQBTbFdsV2zfsoWbwc3gZnz4ofDDvXpV7AyaSigNpaHUy4vfwe%2Fgd%2Fzzn%2BqZ6pnqmbNni50uJC7qTJ2p80svAQUKFABmwkyYuWzZnwcug4SEhISEhDt3Qj4N%2BTTk02XLOOCAg717%2BVf4V%2FhXpk6FzbAZNrc%2BgCmWKZYplkVHwzk4B%2BdefbXNymMFXUFXbN6sGaIZohkyd25bvU9jlK8pX1O%2BtnAhaEEL2vJyVawqVhW7bZtY6UFtw2QBjDpSR%2Bo4cSJvyVvylhMmyDvJO8k77doFh%2BEwHF67VvhCFxeLneGmkqfIU%2BQpXbvCGBgDY5YsEfL1%2FPP0W%2Fot%2FdZ8agJi16D%2B6ugX9Av6ha8vmUPmkDkAhBJK6OHDzT0PH8KH8CGHDnG%2BnC%2FnC0AOk8PksK%2BvqdI5%2BKPBHw3%2BaO7c1PLU8tTybt3Ii%2BRF8mJ4uMkK4v%2Fg%2F%2BD%2Fdu8O9An0CfSZN08DGtCY7ORNpyhQFCgKpk2j%2B%2Bl%2Bun%2F9eiqnciqnVPmd8jvld6WlKq1Kq9Lu3StC0lAbMF0TYhzEQRwh9Bf6C%2F2FrXg0bRpEQRREKRTy9fL18vWbNrlnume6Z8bExGyJ2RKzpaZG7AJg5syeM3vObJnslt8tv1t%2Bc%2BYI6Z43TwjADg7sBhtuwA24YT4Le3T0JsSOPgqRHCQHyUHD%2B1t%2BZvmZ5WcmGGSzF%2FbCXtPlaxVZRVYRno%2BIiIiIiJg2TTdeN143%2FtAh%2BBF%2BhB%2BHD2%2FxiX3AB3ySk8t8ynzKfKZPZ%2B9jqnQ3lWKjYqNi45gxMBgGw%2BCtW4W%2FhBA1URM1IbSCVtCKb75RuindlG7jxqnyVHmqvOPH2zudyLS4Nn%2BHaIiGaAcHeBqehqf%2F%2Bc%2B8uLy4vLikJOFOadw4sQuApYOli6XzfrqN%2FRGoxU43MhPxEA%2FxhjWwdW%2Fo3tC9MXZsc0%2FDJXAJXILhOLqJbqKbWrK2diPJjY%2BPj4%2BvqqLD6XA6XKmEQAiEwKysZp%2FoIByEgxcvSl6RvCJ5JSzsKDlKjhKdztTpbYwyWZmsTPbxEQJWfLzw18Ki3o5ykIPc2poW0SJatH%2F%2F%2FeNQh2ayAEZOkBPkRBMu7B%2FAB%2FABxwmBQvxFyOlgOpgOlsnupwuh5iiDMii7cuX%2B%2F9thO2z%2F%2BGOhz9TRsbHDhUEcnTtzEk7CST7%2B%2BMFXd%2B5sq2SzJn2JVqKVaIOC4GV4GV4uKmr0wFIohdKCAlgLa2FtUNA%2B332%2B%2B3xv327DEn4o4cbTxYW%2BR9%2Bj7x04AB%2FDx%2FBxly6NHhgEQRDk5MSOC44LjguOc3Vt7%2FQj02j7C3YsxELs7dvEk3gSzyVLyuaVzSubN3Kk%2BpL6kvrSgQNiF4AmV5OryU1MZOli6WTpNt6%2FyYEaNQlrAjT%2B29L92ovCX%2BGv8P%2F4Y7AHe7CPjLz%2FQgEUQEG%2Ffvxl%2FjJ%2F%2BcQJoS81LEy447e3F4bHd%2BokPDf23HNcFpfFZZ08KYw%2B7NsXkiAJkk6f1j%2Bvf17%2F%2FBdftHU%2B9q3bt27fusuXqRf1ol7h4bAAFsCC%2BjUpGkNjaIxWy3fiO%2FGdQkLU89Xz1fPrBO52Mi5tXNq4NFtbKqESKtFowBZswdbbu9kn%2BuM4SS9JL0kvjSZicsTkiMl2du2dH9Q6JrsACD%2FUW7eEH0BNDfmV%2FEp%2BjYmxmmQ1yWrSpk3CDAN374qd4aYSvtAODro9uj26PfPmCU0uc%2BaQfJJP8qVSdY46R53j4dHe6TLuCzJ1H5jYgcG8ESLfLt8u3%2F7552Qv2Uv2zptnslOvhJWwMjWVVJEqUiXeg8xKhVKhVERE8F%2FwX%2FBf7NpFtpKtZCvP02gaTaNDQ9kNX3unS%2Bi7k0h0ubpcXe6%2BfeAETuAkl5vsDRzAARwOHCiLLYsti1UqhSbR2tr2zidqHtM14a2G1bD6p59oZ9qZdl61SkM1VENzcmA37IbdYmez%2BR4MuB9%2BGNI5pHNI5%2F%2F9D1zBFVxXrIAcyIEcsVOJ2gchir2KvYq9n30mNBE2IXDVQA3UnDtHn6XP0md1OnKFXCFX%2FP3Zy3QVXUVXpaeTa%2BQaubZli1u0W7Rb9PbtYg9uUqlVapU6Pl6ZokxRpnh786V8KV96546mSlOlqWr%2FwMVUTaiaUDVh9Wqyn%2Bwn%2B00YuJi7cBfuBgV1eq7Tc52eY48tvP66WPlFTYN32h3MozaVlHmPQiRE%2FrX8a%2FnXX35J4kk8if%2F73xs9xAVcwGXPHqtSq1Kr0hdewLkNEWo7og%2BiQMh8UQp%2B4Ad%2BaWmN7joTZsLMzz9Xh6vD1eH%2F%2BMf94xFCbQYDWAeDfVTtSxit9%2Fnn8qnyqfKpUinREi3RfvLJ%2FR3swA7s1q0TAteSJcJGDFwIIYTMjNJP6af0e%2F99xRuKNxRvsEl6EUIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYSQMZzRAYkqPT09PT29%2FswVAQEBAQEBhhlHmrqf2E6POD3i9Ihu3ST7Jfsl%2B5cvJ%2FbEntiHhpJIEkkie%2Fak2%2Bg2uk2ngxiIgZiTJ2kQDaJBmzcPGDhg4ICB8fFipx%2BhjsRsfvioaRq6kJtKeweERyWApXdL75bebfhwYTmUffvor%2FRX%2Bquzc5NPcAAOwIFdu6yuW123uj5jRp9NfTb12XTvntj5Qsic4VyICLVCRveM7hnde%2FWiJ%2BgJeiIhgZbQElrSuTMsh%2BWw%2FPBhEkpCSeh775EfyA%2Fkh99%2FF47q0kVYCTw8HA7BITi0ejX9jH5GP3v%2Bed1l3WXd5YoK2ASbYNOsWWLnDyGETIbVRNjf1jI%2Bn9j562iEmld8%2FP1yfD79%2BfTnd%2B8WSpdrdMXzjHkZ8zLmDRwoBMKKivSd6TvTd%2FL8ucnnJp%2Bb%2FMQTYucPIXOGNbAGBGcEZwRnjB4tHScdJx1XXa3KU%2BWp8o4fFztdyDwIAcbOjp%2FIT%2BQnKhQkjISRsNpayS3JLcmt%2BfMJIYQQnm%2FsPP6b%2FDf5b0pLS1%2Bevjx9%2Bb%2F%2FDQEQAAFvvcVv5jfzm6dOFfY6ebK16c0YmjE0Y2h0tNAH9%2BqrbVYwKZACKZs3B8wMmBkwc%2B7cNnufxvIbkBGQEbBwIX2NvkZfKy8PmBswN2Dutm1ipQe1jVYHMHmKPEWeEhcn%2FDdiRJMPnAWzYNaxY5ozmjOaM88%2FL3ZBMBGTIyZHTLaw0CXpknRJH37In%2BPP8edqagKfDXw28Nlnn009lXoq9ZR4K%2BYay8jIyMjIEDsVfz36fvp%2B%2Bn7e3mQYGUaGWVrCPbgH99LTfat8q3yr8vKaez4SS2JJ7MGD9AX6An3hrbfgbXgb3vbzgyAIgqDWp7f%2Fyf4n%2B5%2BcOzdjS8aWjC3dusFwGA7Dw8NNViBjYAyM2b3bv9C%2F0L9w3jxhfTSTFnmTCDcC06bRABpAA9avh3RIh3RKM4IzgjOCS0v9E%2F0T%2FRP37m3%2FlKG20PoaWCiEQug%2F%2F0nGkrFk7MGDdAFdQBfIZA3tTj4nn5PPa2qIFbEiVu%2B8I3YBGNMt1y3XLZ8xQ2gC8vKCHMiBHAD3me4z3We%2B9JIQwLZuFTudjL%2B%2Fv79hofrmEzsAdtRBHLSKVtEqSgkQYSTUUBgKQwmBm3ATbrbghNtgG2yrk49jcAyOma5Jl9UIf%2FX41eNXj2nT7EvsS%2BxLDh2iJ%2BlJenL48BafeA2sgTXJyXaFdoV2hdOnN7XmaWpCjXjMGD6MD%2BPDtm4FG7ABG0KEGi0hkAZpkPbNN0IAHzfOf7b%2FbP%2FZ2KLS0TXaRt8YTa4mV5OblUW30%2B10%2BzffNLa%2FEOC%2B%2Bkr1m%2Bo31W%2FZ2WIXADOh%2B4TuE7p36QIjYASMePPNeun%2Bin5Fv1q8%2BP5%2B6C%2BtZmrN1JqpOTlkKVlKllZVwVk4C2f79Ttvfd76vLWbW3PPR5NoEk0aO5b9T8pJOSk%2Fd87U6R6eOzx3eG5VlWy9bL1svVIJ62AdrMvKau55SDgJJ%2BEXL0qHSYdJh4WFeRNv4k10OtOX9J87a3fW7qydjw8%2Fk5%2FJz4yPFwKXhUW98l1D19A11ta0kBbSwv372XHtnV5kWq0OYIz1FOsp1lPWroWe0BN63rlj%2FDp5h7xD3ikpsf7Y%2BmPrj%2BusaGsmZNdk12TXFi2iP9Of6c%2BdOtXbIRqiIdrBwSLWItYi9q23xE4vEldOTk5OTs69e8JzXLm5dB%2FdR%2FdJpbWhtaG1oRs3NncQh9CE%2BPrrrMmL5JN8kv%2Ftt22Vfp8onyifqOJicogcIoeCgshr5DXyWlFRowdagRVYFRTolXqlXhkU5Dvfd77v%2FNu327n4%2F2gqdHHhvDlvzvvAAegBPaBHE24slaAEpZMTO06oubm6tnf6kWmYvOlFkapIVaTOmSP8gFeuvP9Ga8gasubtt9Xx6nh1%2FI4dYmecEfrw%2BvWDG3ADbvz0E3iCJ3hKJA0ecANuwA29XvKJ5BPJJxMm7E%2Fen7w%2FOTOzvdJr3JRm6iZEc3muylxdoVfoFWplpY3Txmnj4uPBD%2FzATy6vt6PRMHp%2BGD%2BMH5aZySfzyXyyjY20VFoqLQ0NfXAYvYMDXIbLcHnr1oCwgLCAsPYbRi9cyEeM4N15d979p59gNsyG2VZW93cohmIo1mqpE3WiTqNGDRgwYMCAAamp7V3%2BaYvSFqUtsrXlorgoLurIEdCBDnRDhrT0fGQUGUVGpaaS0WQ0GT1qVP%2Fd%2FXf3363Vtne%2BUMuYfBTirdm3Zt%2BavX27W5lbmVvZ9OnEkTgSx%2BpqK28rbyvv2FixM1zPalgNq5cvFzrN%2FyRwMX8EOL1Wr9Vr33tP2Gg%2Bg1BQ27jw5YUvL3xpb689rj2uPa5SCYFr1KgGD%2FgIPoKPxoyhQIHCmDGsr0zytORpydMAwnYAUIACFGD0IPPrr7d3%2FoQLd3Ly2bSzaWfTXnqJ7CQ7yc5du0gciSNxPE9v0Bv0xpQpA6oHVA%2Bobv%2FAFRcXFxcXJ5FwlKMc3bWrtYGLoUfoEXokMBA2wAbYEBeXRJNoElUqR5PRZDSprW3vfKLmabM7bUWBokBRMG6c8MWvqtIM0QzRDElOFjvDHR3WwNoXC1w1%2FWr61fRTqcABHMDhTwIX4w%2F%2B4H%2F0qPBAsocHhEM4hDs5sZfJCrKCrPjtN%2FoUfYo%2B9e9%2FC8POExLEzi8jDHZYskQIsHfu%2BLv6u%2Fq7btkiVnrS%2B6b3Te%2B7Zg3sgT2wZ8mSNnujlbASVv7nPwF7AvYE7Gn%2FGwnUPHih6mBwKqn2SW%2FK7ym%2Fp%2Fzu4GD5quWrlq%2F%2B8AN8BV%2FBV8OGNXrgYTgMh99%2BO2BhwMKAhR991F7liNBfkckGcSD0KMm5knMl54pWS14kL5IXL19uaD%2F2ADN4gzd4v%2FQSBi6E2g%2FOxNHBYBNf%2B4iMjIyMjNTrhb6Xl17yG%2Bk30m%2BkVEqP0WP0WGQk9IJe0Kumhn5Pv6ffT58eYBdgF2DXdqMGEUIIoRYRRulZWNyf%2B3B7%2Bvb07SEhYqcLIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQshctd1yKkk0iSbNmXP%2FjUaT0WR0TIw6UB2oDoyJaa8MPkOfoc9QqdThuMNxh%2BPW1qoRqhGqEeXl7PVQGkpDqaOjfox%2BjH6MUgm5kAu5o0ZBBVRAhYcHPUwP08NSqbDA4O3b8Al8Ap%2F89puwYq5azRb0bK%2F8GFM%2BqXxS%2BWTv3nwZX8aXRUTA1%2FA1fP3UU8IKv926wd%2Fh7%2FB3SiELsiCroIBaUStqdeyYNEwaJg3bs2c%2F2U%2F2k6tX2fkiIiIiIiKsrbWntae1p2WyA9kHsg9kl5WJlT%2BEEGrIIx%2FAFImKREXik08K6xstWFBrXWtdax0VJR0lHSUdNXEi7U17097z5oEUpCC1sWnyiWfADJhBKU2kiTTxhx%2B007XTtdM%2F%2BOAoOUqOtuHKtBGTIyZHTLawqFpWtaxq2Ztvkn%2BRf5F%2FhYfTkXQkHdn4AooMOUaOkWM8T8fT8XR8fDw3iBvEDYqO5v%2FO%2F53%2F%2B4YNwsq2iYmaM5ozmjO7d7c0vfJ18nXydSkpbVUejdEs1izWLG79shsIIfPTygBGiHyufK587ocfwmPwGDw2fnyTD90G22Dbnj2aTE2mJrPtJj8NKQkpCSlZsoRsI9vItshISIVUSL1yBTbCRtjo5QU7YAfsaP3cguQgOUgOpqfXZtdm12ZHRQk1l3v3TJWPwMGBgwMHy2Sum103u27euJH8TH4mP7f%2BwszFcrFcLKV0KB1Kh167RvvRfrSflxeJITEk5pdf1JfUl9SXFixo6fkxgCGE2korJ%2FOl1LrQutC6cOXKyoWVCysXdu9O1ERN1H5%2BDR7xNH2aPp2SYnPC5oTNibVrIRMyoc3WMyaE5JAckjNy5P1NgRAIgd7eQlNaYSE3mhvNjXZ2FlaQzskhu8lusvvrr%2BlkOplOPnuW2lN7aq%2FX0%2BV0OV3eqxe3i9vF7XruOfgcPofPn376fr6epc%2FSZwMCJGGSMEnYsmUQBVEQtWqVqXLi%2Bq7ru67vLljQYOBKgARIOHpUckVyRXIlLq5aWi2tlp4%2Fz16WhcpCZaGDBtFz9Bw9N3MmvUlv0psDBvCBfCAfWFAA%2FaAf9PPyup%2Bfx%2Bhj9LEhQ%2BQ75TvlO21shPXcKiubm24MIAihtmKyJsTguOC44DhXV2HF1NhYuAE34Ebnzvd38AAP8MjN1b%2Brf1f%2F7vTpbd23Euwe7B7s3rcv9yb3Jvfmzp0N7Ucfp4%2FTxy9ftom2ibaJnjEjPj4%2BPj6%2Bqqqx8yvtlHZKu%2FBwfiW%2Fkl%2F59tv3X%2FijaZEsI8vIshkz1F%2Bqv1R%2Fee5ci%2FMRHhweHN6zJ%2BfKuXKucXFCTdewcjSNolE0av36BLsEuwS7%2F%2F63aWeVSuVfy7%2BWf%2F3FF1AIhVA4cGBDexJLYkkslyxRz1fPV88%2FfNjkHxRCCLWQyZZTSYxMjEyMzM9XJiuTlcnLl%2FNH%2BaP80X%2F%2Fm%2FyX%2FJf8t6ZGb6u31du%2B9daBWwduHbjV9oMCOBWn4lQjR8IROAJHGt6PnCanyelevaqWVi2tWrp8OcRDPMSvXCm8yvMNHafSqrQq7d698kx5pjzTz09YYj4sjDVJ8lv4LfyWiAj4Er6EVgQw7m3ube7t0FAhH4bABY7gCI6HDjUvcBGiGKIYohjy9tu0kBbSPwlcDJVRGZWxmmbzAxg2ISKE2orJF7QURvmlpAij3zZsIL7El%2Fh%2B8EHircRbibcuXWrqeYJ6B%2FUO6t2pU0vTQd4h75B3nnqqsf1oX9qX9i0pgTEwBsZYWSk2KjYqNvbs2dT3oUvpUrp0%2B%2FZ673%2BX3CV3m7CCb2P2wT7Y98QT9d7XglpQi9jYpp5GniJPkac4OfE%2F8j%2FyP%2Bp04AZu4JaVxQZzNJg%2Fd%2BpO3Vk5Nn2QCEIItbVGmhAJEe6gf%2F%2B93VP2R1Ocpqumq6br0KFNPWxc2ri0cWnOzpZPWj5p%2BaRGA0VQBEUXL5IgEkSC0tJ4e96etz9zRhi9d%2BaM0LdTXNza5Mo%2FlH8o%2F%2FD778ESLMGya1eWfuso6yjrqKeeit8dvzt%2Bd3V1s8%2F7rfxb%2Bbc%2F%2FcSaZFnAsbK0srSyHD5caPLU61uabuExAysr23jbeNv4fv3ICXKCnBg4kHxEPiIfDRok1MAef5yMIWPImIULNUmaJE1SWlprywshhFqrkSZESkVL2VW4ClcNz2s1OUOTpJOkk3Q6vYfeQ%2B8REnLA7oDdAbuiono7JkIiJJouueQ8OU%2FO8zwdRAfRQQCsKVF7RntGe6YVoxyjIRqiCYEQCIE2WD7xwWH%2FZ87c%2F%2FsJfAKffPWVUBO2tBS2s78IISS%2BNluaXnFccVxxPDSURtJIGllTIzzwm2jCkGEews6HnQ877%2BSkX6pfql964AB7HosqqIIq7t5N8EnwSfAZO7al55e%2FI39H%2Fs433wh9Xv36se3UmTpT5xkzEl5KeCnhpYwMscuhwfSbqA8M%2B7IQQsZM3qch9LUMHkwtqSW1XL4c9sN%2B2P%2Fee2y72Bk2tRquhqvhpk41fpCYm8RN4iaZoOk1DMIg7ORJ483cWm4tt3baNLHzjxBCYjFZDey5xc8tfm6xs3P1yOqR1SO%2F%2BYZcIpfIpS5d2OtssAQ3jBvGDZs%2BXe2idlG7FBSIXQAtJQTkESOEB7I%2F%2BcR4eDvxI37Eb948dbA6WB3822%2Bte58ePYT3iY%2Bv9z6ryWqyesMGdYm6RF3S9EEdCCHU0bU6gLGpjXRanVan%2FeIL9kBvgwcsh%2BWw%2FOLF8ury6vLqV15p66mXWovNgOHyo8uPLj%2F27s1d5a5yV0ND4Wl4Gp4OD4f34X1431DzMtUMFsbkU%2BVT5VPffFN4EPuFF4xfZ%2B%2FLz%2BJn8bPi42UKmUKmyMzc57vPd5%2Fv7dtilyNCCJlaqwNYvamamvrGu8guskulUqeoU9Qp%2F%2FqX2AXRECFwxMezGTwazM9aspasvXmTK%2BAKuIIZM4RJcktLTZUONimx3Um7k3YnN21qbCop8j55n7yv06nvqu%2Bq744YIXY5IoSQqbX6QeaELgldErqsXSv8t3atuU3m29bY1FhCfpcvVxM1UZswcDFCTbW2VqjxLlig26Pbo9vz1lu0iBbRIsMD1GKXB0IItReTzcTxqCOxJJbE1tRAFVRB1e%2B%2F8xf5i%2FzFvXsTSAJJIEeOtFc6Hnye7MMP5VflV%2BVX9%2BwR5pScPJlUk2pS%2Fbe%2FCXM32tnBMlgGy8QuPYQQQu1OGETRjGVWEEIIIYQQQgghhBBCCCGEEEIIIYQQQggh1EpsMl%2B5h9xD7hEcLHZ6EEIIPVpM%2FuDrg5P2%2Fuc%2FD746d66w%2FtapU2JnHCGEUMf2yE%2FmGxERERERwSa%2FtbAQFoCsqmKvP7jys58f15fry%2FX19CRJJIkkOTrSMXQMHUOI8KBwZSXtQrvQLgUFZCfZSXZmZgrLpeTmtnU%2BGsIW8JRJZBKZpH9%2F4kW8iJe7O0yBKTDF1pbtR54gT5An7t4V1hXLza0JqwmrCcvM%2FOHmDzd%2FuFlSwvZjU1bZ9LHpY9NHIjmQfSD7QPa9e2LlDyGEGvLIT%2BZ7fzb3BEiAhOHDrTOsM6wzVKqKiIqIiggfH5gEk2BSYCBREiVRGmZ5b7J5MA%2FmXbumnaidqJ149Ghb5%2BfBAPPUU5wP58P5%2BPg09zzkMDlMDlMqLPyZnp61IGtB1oLTp%2FtW9K3oWzFxIt1Kt9KtWVlCAMvMbHH5z5XPlc89ccJ4Fn1TKV9Uvqh80ZNPsqm2TH1%2BhJD5avV6YJUxlTGVMf%2F4R6OBi%2FkIPoKPfHw6De00tNPQJUvaOoP0MD1MD%2FfsSU%2FSk%2FSkg4N2sHawdnBEBORCLuQOG9biwMVsgk2wqWdP%2B8ftH7d%2FXC5%2FcAVj02E1Sftl9svslwUFtTRw3S%2BXP2qW0nxpvjR%2F4MB%2B3%2FX7rt93U6aQZJJMkl1cYCWshJU9e5o6HwghZCom7wMzt8l8Q7xDvEO8p00DP%2FADP8OUUELAJYQG0SAaRAgJIAEkoKiIjCfjyfjTp6tXV6%2BuXl1QIJ0knSSdVFsrPS49Lj3u6Mg78868s68vyEEO8r59jd%2BP5tN8mn%2FlSmJqYmpi6k8%2FmSofQceCjgUde%2Bopbg23hlvTv3%2B9Hf6oCQo1nYwMPoQP4UOKiyW7JLsku1iA7toV4iEe4gcO5F15V97V3Z0cJAfJQUrr5UNFVVSl13eP6h7VPerrr2O2xGyJ2VJT016fG0IINeaRncxXqAl16wY%2B4AM%2B9ecyZBduqqM6qquqKggoCCgIUKlSE1ITUhNqaoQmxzoHuIAL3O%2BzKygICQkJCQm5fl1oihs7ltVoiCtxJa7e3spkZbIy2d1dNUI1QjXi1q2W5iOUhtJQ6uiot9Hb6G38%2FIT3qbPDFJgCU375JSEoISghKCOj3gmGwBC4v%2BjK9evC3xs3QoJDgkOCJ08GAgRI5871yuePmmnexLyJeRO7dxe2Xrki6oeKEEJ1PLLLbwRdCLoQdGHIEG4Rt4hbxEZF%2Fok%2FajBDJg6ZOGTiTz%2BtIqvIKsLzjR0mrBc2fDgto2W0zNCEyk3kJnITs7PV89Xz1fMPH25pPoKXBS8LXjZsGEkn6SR94EC2vaU1PcUQxRDFkGee4V14F96lCU2QGtCA5tKl9pp1X75Ovk6%2BLiXFVOfTLNYs1ixueN00hFDH1eo%2BsLby4OjA5iNdSVfStUePxvajPWlP2rO0lG6hW%2BiWqqozcAbOQDPedxEsgkVpacab9Un6JH2Sh0erC2IxLIbF9c%2FDfcF9wX1x%2BnRTT8Nm1a%2F9tPbT2k9ra0kuySW5JSVsMEeD5TOJTqKTPD3%2FKNVH9oYHIdTxNHJBIkS4I%2F7993ZP2QyYATMo1XTVdNV0HTq0qYcJTXf29nq9Xq%2FXR0RAJERCZEGB0JSWnw%2BfwqfwaX5%2B%2FtT8qflTCwtTT6WeSj3V%2Br6dEG2INkT74ovGw9e1Gq1Gq9m2raWj5EIWhSwKWfTyy3ABLsAFS0sWcDRVmipN1datwl6N1xQbwkY12sbbxtvGd%2B0qbHV1ffjf779PjEyMTIzMz29teSGEUGs10gfW8J15m7sKV%2BFqeXlzD7P8zPIzy8%2Fu3evcuXPnzp1jY2MKYgpiCur0aRn3bZk5OowOo8MIIRfIBXLB9Od%2FMLCywGQIUMbPhYldHgghxGCTUCuxpjm6gq6gK6ZNY9upJbWkllVViXsT9ybujY1t6fmDi4OLg4vDw8nL5GXyMqshAQgrQn%2F3nfCcVlGR2OXQWuwxgaphVcOqhp040eITvQvvwrs8L9RQn3hC7HwhhNqO2faBdRSkkBSSwgEDjLdzrpwr59ry0YcMfZI%2BSZ%2Bsfx7JeMl4yfj674sQQn8Vj%2FxzYG1FmKS4Tx8ogRIoGTXq%2FpRTf5AslyyXLNdoWjuMXhiu37mz0Pc1ebLx%2B5BKUkkqT5zQJGmSNEn1B5MghNCj6pF9DsxU2FRZFZEVkRWRXboID0T7%2BtKldCld2qeP8f5seHtrAxeTkJCQkJBw506IVYhViNW5c8JWf%2F%2F772dDbajNsGHBccFxwXFublJ3qbvU%2FezZmhk1M2pm3L6NcxkihB5Vra6BKWIVsYrYt9%2BmBbSAFoSHN%2FnAN%2BANeOOHHzQSjUQjeecdYaOIg0YaEDw3eG7w3MhIco1cI9ccHRvaj35Fv6JfFRfbRtlG2UZpNPG743fH766uNlU6VtAVdAXluBTXFNcU16AgYVTlnwzTXwJLYEltbcIzCc8kPLNtm1jlh891IYTaSqv7wKxUVior1Zo18Dq8Dq%2BnpjZ6wC%2FwC%2Fxy7pz1FOsp1lNWrRI2ml%2FgaipW42qrwMWwB6ttRtqMtBn5%2FffCIJELbTAuESGEOgaT9YFN6D6h%2B4TuXbrIxsrGysbGxkIABECAi8v9HWbBLJhVVATZkA3Z06cL64IVF4tdAI2RD5IPkg%2BaPFmfrE%2FWJ1tYcJFcJBdZWMhf4i%2Fxly5cEJrobt4UK32KAkWBosDFRV%2BkL9IX%2BfmRU%2BQUOeXiQq2oFbWyshKe29qxQ%2BxyRAghUzP5IA7hQWIfHz6Pz%2BPztm0jH5APyAccBz%2FCj%2FDjq68K64CdPSt2xhFCCKGHEkbpBQcLk8ZGRIidHoQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIoUdPs%2BdCDOod1Duot5%2BfZJdkl2TX3%2F5GxpPxZLxhvSl9tD5aH52eLnlG8ozkGZ4noSSUhLq7U3%2FqT%2F1v3KBRNIpGDR9ufBydTWfT2aWlEAEREJGVxek4Hafr21dYV0ulMk6HYpZilmJW%2F%2F7G56MD6UA6kBCyi%2Bwiu86c6ehzLyrtlHZKu%2FBwepleppezs1l%2B5CnyFHmKjY2w1wsvCOX17beuX7l%2B5fqVTpdXmleaV%2Frii8K6ZbduCZMn%2F%2FgjO69wfL9%2BTS1n4kk8iaeXl2qFaoVqRUKC8CrHCQuYzppVO6V2Su2UXbuko6SjpKM8PRv7nDVrNGs0a9RqscsXIdRxtXxBy3iIh%2FiCAnWJukRdUudCFAmREMlmSa%2B%2F5D2XwCVwCXl5qhJViaqEXQgBYA2sgTUA8gh5hDyiX7%2BmJsP4fEE3gm4E3ejUSbZYtli2ePJkYZb8mzd%2FuPnDzR9ulpSIXeDNxR%2Fhj%2FBHMjO5WdwsblZAgLD17Fl4C96Ct%2Fr0Ibkkl%2BTm5qouqS6pLpWXh34T%2Bk3oNwEBNJ2m0%2FTbt7kN3AZuQ%2Ffuz459duyzYx0cDh46eOjgobt32zrdjX3OCCHUWi1fDywCIiDCxUXRRdFF0WX6dPZXmI3e3r6hw%2FgQPoQPcXMzPk6RqEhUJD75ZGszJCxvUlYmrJel1UoHSgdKBza8EKW5Kw8sDywPzM4WlkextWXLp5BepBfp5eOj99f76%2F0zM4W9CeFlvIyX%2BftLaiQ1kpozZ8AZnME5O9tyguUEywn1byjaSlt%2Fzggh1PIA9kANLDaW%2FRWaosrLG3zDP%2B7MjY9TB6uD1cG%2F%2FdbaDI1LG5c2Ls3Wltwj98g9OzvZOtk62bq2r3G0laPkKDlKams5T86T87x0CQbDYBg8YoTQRCeVJu5N3Ju49%2Fr1kJCQkJAQb286g86gM%2Bzs%2BB38Dn7HqFH8Kf4Uf8rLi7PmrDnrvn0jIiIiIiKsrZv6%2FvQAPUAPVFeDDdiAjb39nNlzZs%2BZLZOF0lAaSjt1YvtVZlVmVWYZFvJs688ZIYRa3oTYQvfvzDcoNig2TJ%2FOttOFdCFdyC6AaWm8FW%2FFWzk7szt3th%2BxJJbEMieHAgUKpaX1zjcaRsNogNro2uja6FOnEn0TfRN9b98Wu6Bb7RP4BD7JzIQX4UV40d8fKFCgKSl%2FlB4lq8gqsmrAAKiESqg8eVKdpE5SJ6WlQRIkQRKA%2FAn5E%2FInFApdua5cV%2B7vLxxXXt5YObsGuwa7Bp88mb8nf0%2F%2Bnl698vvk98nvM306jaSRNJLn%2BQ%2F4D%2FgPzpwRAq1OJ%2FSZNf45a1ZoVmhWfPut2MWKEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEKo3f0%2FYCcRj5nKHu4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTMtMDItMDlUMTk6MzI6NTMrMDE6MDCs99SeAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEzLTAyLTA5VDE5OjMyOjUzKzAxOjAw3apsIgAAAHl0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9qb3MvRHJvcGJveC9Kb3MvcHJvZ3JhbW1pbmcvamF2YXNjcmlwdC9qc29uZWRpdG9yb25saW5lL2pzb25lZGl0b3IvY3NzL2ltZy9qc29uZWRpdG9yLWljb25zLnN2Z2GG7LgAAAAASUVORK5CYII%3D%29%3B%0A%20%20color%3A%20%234D4D4D%3B%0A%20%20opacity%3A%200%2E8%3B%0A%20%20font%2Dfamily%3A%20arial%2C%20sans%2Dserif%3B%0A%20%20font%2Dsize%3A%2010pt%3B%0A%20%20float%3A%20left%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Emenu%20button%3Ahover%20%7B%0A%20%20background%2Dcolor%3A%20%23f0f2f5%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Emenu%20button%3Afocus%2C%0A%2Ejsoneditor%20%2Emenu%20button%3Aactive%20%7B%0A%20%20background%2Dcolor%3A%20%23ffffff%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Emenu%20button%3Adisabled%20%7B%0A%20%20background%2Dcolor%3A%20%23e3eaf6%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Emenu%20button%2Ecollapse%2Dall%20%7B%0A%20%20background%2Dposition%3A%200%20%2D96px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Emenu%20button%2Eexpand%2Dall%20%7B%0A%20%20background%2Dposition%3A%200%20%2D120px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Emenu%20button%2Eundo%20%7B%0A%20%20background%2Dposition%3A%20%2D24px%20%2D96px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Emenu%20button%2Eundo%3Adisabled%20%7B%0A%20%20background%2Dposition%3A%20%2D24px%20%2D120px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Emenu%20button%2Eredo%20%7B%0A%20%20background%2Dposition%3A%20%2D48px%20%2D96px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Emenu%20button%2Eredo%3Adisabled%20%7B%0A%20%20background%2Dposition%3A%20%2D48px%20%2D120px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Emenu%20button%2Ecompact%20%7B%0A%20%20background%2Dposition%3A%20%2D72px%20%2D96px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Emenu%20button%2Eformat%20%7B%0A%20%20background%2Dposition%3A%20%2D72px%20%2D120px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Emenu%20button%2Emodes%20%7B%0A%20%20background%2Dimage%3A%20none%3B%0A%20%20width%3A%20auto%3B%0A%20%20padding%2Dleft%3A%206px%3B%0A%20%20padding%2Dright%3A%206px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Emenu%20button%2Eseparator%20%7B%0A%20%20margin%2Dleft%3A%2010px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Emenu%20a%20%7B%0A%20%20font%2Dfamily%3A%20arial%2C%20sans%2Dserif%3B%0A%20%20font%2Dsize%3A%2010pt%3B%0A%20%20color%3A%20%2397B0F8%3B%0A%20%20vertical%2Dalign%3A%20middle%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Emenu%20a%3Ahover%20%7B%0A%20%20color%3A%20red%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Emenu%20a%2EpoweredBy%20%7B%0A%20%20font%2Dsize%3A%208pt%3B%0A%20%20position%3A%20absolute%3B%0A%20%20right%3A%200%3B%0A%20%20top%3A%200%3B%0A%20%20padding%3A%2010px%3B%0A%7D%0A%0A%2F%2A%20TODO%3A%20css%20for%20button%3Adisabled%20is%20not%20supported%20by%20IE8%20%2A%2F%0A%2Ejsoneditor%20%2Esearch%20input%2C%0A%2Ejsoneditor%20%2Esearch%20%2Eresults%20%7B%0A%20%20font%2Dfamily%3A%20arial%2C%20sans%2Dserif%3B%0A%20%20font%2Dsize%3A%2010pt%3B%0A%20%20color%3A%20%231A1A1A%3B%0A%20%20background%3A%20transparent%3B%0A%20%20%2F%2A%20For%20Firefox%20%2A%2F%0A%7D%0A%0A%2Ejsoneditor%20%2Esearch%20%7B%0A%20%20position%3A%20absolute%3B%0A%20%20right%3A%202px%3B%0A%20%20top%3A%202px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Esearch%20%2Eframe%20%7B%0A%20%20border%3A%201px%20solid%20%2397B0F8%3B%0A%20%20background%2Dcolor%3A%20white%3B%0A%20%20padding%3A%200%202px%3B%0A%20%20margin%3A%200%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Esearch%20%2Eframe%20table%20%7B%0A%20%20border%2Dcollapse%3A%20collapse%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Esearch%20input%20%7B%0A%20%20width%3A%20120px%3B%0A%20%20border%3A%20none%3B%0A%20%20outline%3A%20none%3B%0A%20%20margin%3A%201px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Esearch%20%2Eresults%20%7B%0A%20%20color%3A%20%234d4d4d%3B%0A%20%20padding%2Dright%3A%205px%3B%0A%20%20line%2Dheight%3A%2024px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Esearch%20button%20%7B%0A%20%20width%3A%2016px%3B%0A%20%20height%3A%2024px%3B%0A%20%20padding%3A%200%3B%0A%20%20margin%3A%200%3B%0A%20%20border%3A%20none%3B%0A%20%20background%3A%20url%28data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAANgAAACoEAYAAADSkvxvAAAABGdBTUEAALGPC%2FxhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAZiS0dEAAAAAAAA%2BUO7fwAAAAlwSFlzAAAASAAAAEgARslrPgAANtZJREFUeNrt3XlcVFX7APDn3JlhR1CUVRRyQRDURDPfzFxyAWYGQsEsLX1TI3N5S3PprdS3svRnmen7SphL0etroKYzA7aoqGGlgYogLiCuyCoiDDACc8%2Fvj9txcJDYBu5gz%2FcfPty59845Z2buc89yzwFACCGEEEIIIYQQQgghhBBC6NFCGtvByWnvXgBKxUrg7dvh4QCk0XQ2hNLAQDHTT0hqamvSv3nzvn06nXjpf%2B21sDArK0w%2Fph%2FTj%2Bk3v%2FRLxUoYQg9jYSGTAQBUV9fU1N1uaSlsv3fvwe1isba2tCQEwM3Nyanuz%2BvevepqAIDc3OJinjds9%2FR0duY4AJlM%2BsBvju3HjkPNw74XlpYWFnU%2Fh4qKqipKAaRSobwtLWWyuq9rtcLrPF%2F3U0IdDQawDkomk0pbcl9VU1NbK9791IPpBwCYOPGJJ2QygG7dHB05DqCsrLKSUoDdu48cqXtJj4wcM8bCAkAq5TgAgKtX8%2FN5HiAp6fTp2tr2T3%2FXrg4OhACMHz90qHAJFRQW3rnD8wB79x47VvfS%2BNRTAQFSKYCjo51d3c%2Ftu%2B%2BOHaupASgoqK42h0upVCqRAAD87W%2F%2B%2FnVD7YkTmZm1teZzA8H4%2B3t7SyQAQ4f6%2BtZN7549R49WVwN4e7u5SSQAgwf37SvkTPDtt4cPV1cD3LlTXm4OvwfUMm0WwNasGThw0yYAmYzjZDKAmJjLlz%2F%2FHODChbKyc%2BfEznbHxQLXK6%2BEhFhYNP%2F4rVsTEqqrxQ9kfft6ekokAB4e3bpxHEBpqVZLKcD16wUFD7uQX7mSl8fzAN7erq4cB%2BDj06OHRAJw%2BfKtWzzf8HHtJS0tO1uvB7h06cYNvb7%2B6wcPpqTU1AD4%2BXl5SSSGv%2BaGfS7G6SsvF24sTp%2FOynpY%2FlDTREWFhlpaNvx6dPT%2B%2FffuiZ3Klqe%2FtZqbf66tEjJtWs%2Ber7wC8NJLXl5z5gB4eFhbe3q2XcZbrmtXNzcAgJ07T58GABg5Uql82H6PPebnBwDw7bfp6QAAvXsHBIid9vooFcJSQ3%2FNha3tgy3bGRk5OXo9wMmT588%2FrEaVnHz2bG0twMWLN27UDVT29jY2LW%2FhN527dysqKAW4fbus7GElXVx89y6lhkBgrvz9H3tMIgEoLCwtpRTg5s2iIp4H6N9fqOlwnDmUtkFV1cObXllNUaerrn5YeWOT7aMBmxDhzTc%2F%2FRQAoG%2FfQYMAAD76aNcuAIBFi8LCAABu3MjOBgDYuPH77wEAXFyEQLx27e7dAAAREf37AwDo9WI0ZTExMWr1vXsA1tYP9gUYI0R41cLiwSbI6ur2rZGxdDT3%2FY1rjsbnQS3j4dG1K8cBdOlib0%2BIoWm2urqmhlKACROEpt6ePYUaMKsRi624%2BO7duumorRXqh%2BxGgd04MCygVVbeuyfGjYS517A6WvpbHMCcnCwtu3UD6N7d2rpHj%2FqvE0IIV6d%2BFxDg4PD44wC1tZTWvdAXFOh0eXliNi2uW7dwIQBAnz4DBwIAeHv7%2BgIAfPrp%2Fv0AAHfvlpQAAHTr5u4OAFBZqdUCALz%2F%2FqxZAGIHLsbKSghc06dPmNCSpsVt24SmxfYKZJ07P9gX1NTOdL3%2Bwf2M%2B5RQy7CaF7vAX76cm6vXG8qbBQS2n7kEsJISocbL%2Buh0OqFmxVociotLS3ne8HplpTldflFrtTiAKRTu7pMmAaxbN2jQ5s2N7%2F%2FOO%2F37r15df%2Fv%2F%2Fnf9%2Bo4dAPPnp6bOnClGEZSUFBYCALz22tixAAAxMUeOAAD06NG3L0D9wLVwYXAwAMDp0z%2F%2FLEZ6OyaOE25nwsNHjrSwMAyCuHOnvJznAW7eLCxsygWRNWlVVAiDe319e%2FaUSAyBTKP55RfzGmZg3lgTrJeXULM6e%2FbyZb3eUJNhLly4dk2vNwyWcHLq1ImQhptM2wtLZ0N9c9XVwu2lufTdtbYPSewakLmlv836wDoeBwcnJwAAOztHx4e9bmVlbQ1gaEJELSGRcA985wgRGgGb2hTI9uN54bLJzieVSiRYE2u%2B%2Fv0fHKxx7tzVqw%2B70GdmXrvG84YaGesTQ0hMLa6B7dhx5Up0tOGvseLi556re2c2efLx4%2BPHA5w5c%2BdOSophe3U1z4vbndqzp48PgKGPq0sXZ2chB3l5AIaaV48effoAAKxYsX07AEBVVUUFAMDRo0JTI%2FozrIkwLi4pqbra0KfC7vw9PV1cOE4YxfdnNTH2PJW9vbU1IQCZmcIF99ixtDRzaMrtKNhweV9fIYDduyf0dbEabUNYEyMbrXjy5Pnzen3DgyXQg8SuQT1q6W%2B3QRxabW1teTlAaWlNzZ07Yme7rsjI118HAHB29vAAMDQpzp377LNCysvKAAxNi9279%2BoFADBr1rvvAgD8%2FLNGAwDA8%2B3RRMEGMbDh8ExHGczA%2BiaKioTnpVgAk0iaNr5NInkwp4WFd%2B7ghbP5evf28JBIDA8CFxQI5ditm6Pjn30OZWXCaEv2AHffvp6edZseEWpPOAoRPv30zTcBAGQyoW03Lm7TJgCAnJzMzLr7sT6yZcv%2B8x8AgFWrhD679glcxoxH47X0wWax6PUPhh1WI2gMm1mBodTcHhDoGAYM6N1bIjHMSLFv388%2F19Q0%2FXGLyMjRoy0sAAIChEEd6enCYxD4afw5c3uOytTpb%2B8aWpsFsDffPH361VcN%2F1%2B9WlGRk9N%2BGWs6Nopw9eq66a0vL%2B%2FaNQCAhQtDQsROc8fHRosx%2FfoJDyZbWws%2FD9Y0xbCZLLy83Nzq9qJVVOh0YucFwJBu9nwbG2TC2NkJTZ5stKhYXF2dnOoOlz916tKllgSeCxeuX9frDTN29OghNO1euybuA%2BXor6XNAtjXX1%2B9GhMjdvb%2BOmprH9602PTjjetEbSsrS5ix4rHHhIDk6tqlC8cJF8K6fStMnz7du3Oc4fm17OzcXGH0ojAqUWxDh%2FbrJ5UKz1PxPIBKdfx43dGQQUHDhslkAE5OwuhLsdjZWVkBGPoOz58XRhc218WLwufHRn%2ByuSHRnzO3PqSOnn5sQnxEsOAj9hRRTcVGsyUm%2FvZbTY2hL6ahtP%2FvfwcPVlcbagpseLRYSkqEOfSOHj1zpm5KKisfPnd3SsrFi7W19WtgbO7H9sICP%2FvbUmwmCxw8g8SEAQyZhcYmiTW3SWTZbOdNrcGYy4O%2FCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEELtpdHJX9LT09PT08Wb2yEgICAgIKDlk9Rg%2BjH9mH5MP6b%2F0Uw%2FzsSBzIpEIpFIJAB6vV5fd4aLhraLRSoV5sW3sbGxsbExbGfpq6ioqBDWixPY2dnZ2dkJK1M%2FOBmxsJ%2B55KujYd8L9pepqampqakxlHdDr%2BNqBh0bBrAOyvhC2FQ8z5aWNI%2F09%2BjRo0ePHoZAUF1dXV1dDZCdnZ2dnW3Yv3fv3r179zYcV1ZWVlZWBpCbm5ubm9v%2B6beysrKysjKkn6mqqqqqqgK4fPny5cuXDdvd3Nzc3NwALC0tLesuR5GTk5OTkwNQWVlZWVnZ%2FvkwxsrX1dXV1dXVsL2goKCgoMD8Am2XLl26dOkC4OLi4uLiYtjOyr9Tp06dOnUC6NatW7du3QyvZ2VlZWVlAdy7d%2B%2BeOU1Oi5qnzQKYu7u7u7u74f%2Fbt2%2Ffvn0bvzCtxS4wfn5%2Bfn5%2BzT8%2BMzMzMzNT%2FEDm6Ojo6OhoqJmw70V5eXl5eXn9%2FVnAYhekzp07d%2B7c2bC9oePaS3FxcXFxMUBpaWlpaWn912%2FevHnz5k1DutmF19ywz8U4fazGUlRUVFRUJHYqOy5%2Ff39%2Ff%2F%2BGX8%2FIyMjIyBA7lS1Pf2s1N%2F8tuIdvGuMfqkwmkwnzjZsX1hTE7vDt7e3t7e3r78funNl%2B7A4ctYzx94Hd4LA7fWN5eXl5eXn1A4SFhYWFhYXYuTHUHHU6ne5hK5SxmhkLBObKycnJycnJkF6tVqvVag2%2FY0LMa%2B3vhmqEbHtjr6OO7S%2FfhMiadlhA8vT09PT0BLh%2B%2Ffr169cNFyYvLy8vLy%2FDhZftx5q6xG5LP3fu3Llz5wwBuSHsAmTcJ8BqZGLlo6k1QrFrjo8qW1tbW1tbw40aa5plF3rWVMpu8FjNV2ws0DLs%2B8F%2Bt8avs%2FzU1tbWirEMjLnXsDpa%2BlscwNiFsqk1K2tra2tr6%2Frb2R2pWE2L7M6eBTD2A%2B7Zs2fPnj0NX3iWX%2FYDuXXr1q1bt8QPXAwLSD4%2BPj4%2BPs0%2F%2Fvz58%2BfPn2%2B%2FO1PjvqCmlqNxADOXGlhHx2pe7PO%2Fe%2Ffu3bt3DZ8L%2B52y%2FcwlgLHrBqu5GwcmFsAaeh11bC0OYKwvwrivqyHGnazMnTt37ty5I15nPPtCX7ly5cqVKwDe3t7e3t6GC6xx4Lp27dq1a9fqjzJDf47V%2FHr16tWrVy%2FDDQNrcmNNVY1h5c4uqKxpi31eV69evXr1qti57TjYDQCrWbGmXOMbhZKSkpKSEsPv2PjzEwtLZ0N9c4293t5a24ckdg3I3NLfZn1gHQ0LVMZNawy7AJtrX15HYdyHwgaltLRvhR3X0lGZf3XGfVssUBljN5qsRmaug1DQX0uLa2Dsi97QF944UrM7Y%2BM2abGb4IybDFkgYzUzdgfH7lQ9PDw8PDwM282lKcXcsc%2BZDV9m5c3u%2FNloxIZG8TFsP3Yjwb5%2FrEkXNQ0L%2BGywFWs6ZP83hO3HRiua6%2FB6cyV2DepRS3%2B7DeJgF3xz%2B6Ibj5I0blJk6WZNiyyQsedK2PDt9grELD1sOHxHxW5kWABrag3KeD%2FjGyLUNA4ODg4ODoYWB%2FYcWkN91Qzrc2KDPlggY02PCLWnv%2FwoxPz8%2FPz8%2FPpNKMaDSlhAY31%2BrM%2FOXEbtdbQmNOP0N7UJ0Xg%2FsWvwHVXXrl27du1q6Etk3%2B%2Bmlid7nISdh%2F1u8PP4c%2Bb2HJWp09%2FeNbQ2u%2BSxJh32lw1rNTfsB8fS2VCnNPuhs0EcOJqpdYxr4qzpqqHBPuxxB3bHz5jL59DYqFy2vaE%2B1vbCZjxhTeesyba5gYf1ibF8saZdhNpTm9XAGuobQ22jtU2L7f18FbtwstGs7MLKmhSNH2hmgYvVNNkw76aOXmxrzs7Ozs7OhqY1VqNhWJ%2Bf2A%2FAG%2FcdtvR3yj4%2F49G66M%2BZWx9SR08%2FfuUeMR3lQV92x89qtI3VTC5dunTp0iXDcWLnkzUxGz%2F%2B0VCNsLCwsLCwsH4%2B27tlggV%2B9relWA0aB88gMWEAQ2ahscE95jb4hzUps6a0xuBoVYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgj91bRgBSaETEehUCgUivqz8KnVarVabZi2t6n7iS2od1DvoN6WllI3qZvUbf58kIMc5NOmQT7kQ36PHvd3XAbLYNm1a8I%2F33xj9brV61avb9wYvzt%2Bd%2Fxuc5w1FCHzgzNxdDANXchNxdwCQkcRcjHkYshFDw8ukAvkAtVq8AVf8H38cUiGZEh%2ByAGzYBbMYitvDRqkW6lbqVs5daryH8p%2FKP%2BhVKpGqEaoRuAkTQj9GQxgCLUCq3Fxz3HPcc8lJsJoGA2jBwyA9bAe1l%2B6REtpKS1dulTYO%2Fl%2BKKP21J7aP%2F00p%2BAUnGLtWlgJK2FlYCBNokk0SaMRzjt8%2BIHsA9kHsusu7IMQYjCAdXAqlUqlUrX8eKVSqVQqxUt%2FU2t85lozlHWVdZV1nT2bdqPdaLcBA8AFXMDlwgWuF9eL6zV8%2BH6yn%2BwnDa0x%2Fd13ISEhISEhR45w67n13PrffoM34A144%2FHHZd1l3WXdo6IgG7Ihe8MGsfOJkDkyWQBTbFdsV2zfsoWbwc3gZnz4ofDDvXpV7AyaSigNpaHUy4vfwe%2Fgd%2Fzzn%2BqZ6pnqmbNni50uJC7qTJ2p80svAQUKFABmwkyYuWzZnwcug4SEhISEhDt3Qj4N%2BTTk02XLOOCAg717%2BVf4V%2FhXpk6FzbAZNrc%2BgCmWKZYplkVHwzk4B%2BdefbXNymMFXUFXbN6sGaIZohkyd25bvU9jlK8pX1O%2BtnAhaEEL2vJyVawqVhW7bZtY6UFtw2QBjDpSR%2Bo4cSJvyVvylhMmyDvJO8k77doFh%2BEwHF67VvhCFxeLneGmkqfIU%2BQpXbvCGBgDY5YsEfL1%2FPP0W%2Fot%2FdZ8agJi16D%2B6ugX9Av6ha8vmUPmkDkAhBJK6OHDzT0PH8KH8CGHDnG%2BnC%2FnC0AOk8PksK%2BvqdI5%2BKPBHw3%2BaO7c1PLU8tTybt3Ii%2BRF8mJ4uMkK4v%2Fg%2F%2BD%2Fdu8O9An0CfSZN08DGtCY7ORNpyhQFCgKpk2j%2B%2Bl%2Bun%2F9eiqnciqnVPmd8jvld6WlKq1Kq9Lu3StC0lAbMF0TYhzEQRwh9Bf6C%2F2FrXg0bRpEQRREKRTy9fL18vWbNrlnume6Z8bExGyJ2RKzpaZG7AJg5syeM3vObJnslt8tv1t%2Bc%2BYI6Z43TwjADg7sBhtuwA24YT4Le3T0JsSOPgqRHCQHyUHD%2B1t%2BZvmZ5WcmGGSzF%2FbCXtPlaxVZRVYRno%2BIiIiIiJg2TTdeN143%2FtAh%2BBF%2BhB%2BHD2%2FxiX3AB3ySk8t8ynzKfKZPZ%2B9jqnQ3lWKjYqNi45gxMBgGw%2BCtW4W%2FhBA1URM1IbSCVtCKb75RuindlG7jxqnyVHmqvOPH2zudyLS4Nn%2BHaIiGaAcHeBqehqf%2F%2Bc%2B8uLy4vLikJOFOadw4sQuApYOli6XzfrqN%2FRGoxU43MhPxEA%2FxhjWwdW%2Fo3tC9MXZsc0%2FDJXAJXILhOLqJbqKbWrK2diPJjY%2BPj4%2BvqqLD6XA6XKmEQAiEwKysZp%2FoIByEgxcvSl6RvCJ5JSzsKDlKjhKdztTpbYwyWZmsTPbxEQJWfLzw18Ki3o5ykIPc2poW0SJatH%2F%2F%2FeNQh2ayAEZOkBPkRBMu7B%2FAB%2FABxwmBQvxFyOlgOpgOlsnupwuh5iiDMii7cuX%2B%2F9thO2z%2F%2BGOhz9TRsbHDhUEcnTtzEk7CST7%2B%2BMFXd%2B5sq2SzJn2JVqKVaIOC4GV4GV4uKmr0wFIohdKCAlgLa2FtUNA%2B332%2B%2B3xv327DEn4o4cbTxYW%2BR9%2Bj7x04AB%2FDx%2FBxly6NHhgEQRDk5MSOC44LjguOc3Vt7%2FQj02j7C3YsxELs7dvEk3gSzyVLyuaVzSubN3Kk%2BpL6kvrSgQNiF4AmV5OryU1MZOli6WTpNt6%2FyYEaNQlrAjT%2B29L92ovCX%2BGv8P%2F4Y7AHe7CPjLz%2FQgEUQEG%2Ffvxl%2FjJ%2F%2BcQJoS81LEy447e3F4bHd%2BokPDf23HNcFpfFZZ08KYw%2B7NsXkiAJkk6f1j%2Bvf17%2F%2FBdftHU%2B9q3bt27fusuXqRf1ol7h4bAAFsCC%2BjUpGkNjaIxWy3fiO%2FGdQkLU89Xz1fPrBO52Mi5tXNq4NFtbKqESKtFowBZswdbbu9kn%2BuM4SS9JL0kvjSZicsTkiMl2du2dH9Q6JrsACD%2FUW7eEH0BNDfmV%2FEp%2BjYmxmmQ1yWrSpk3CDAN374qd4aYSvtAODro9uj26PfPmCU0uc%2BaQfJJP8qVSdY46R53j4dHe6TLuCzJ1H5jYgcG8ESLfLt8u3%2F7552Qv2Uv2zptnslOvhJWwMjWVVJEqUiXeg8xKhVKhVERE8F%2FwX%2FBf7NpFtpKtZCvP02gaTaNDQ9kNX3unS%2Bi7k0h0ubpcXe6%2BfeAETuAkl5vsDRzAARwOHCiLLYsti1UqhSbR2tr2zidqHtM14a2G1bD6p59oZ9qZdl61SkM1VENzcmA37IbdYmez%2BR4MuB9%2BGNI5pHNI5%2F%2F9D1zBFVxXrIAcyIEcsVOJ2gchir2KvYq9n30mNBE2IXDVQA3UnDtHn6XP0md1OnKFXCFX%2FP3Zy3QVXUVXpaeTa%2BQaubZli1u0W7Rb9PbtYg9uUqlVapU6Pl6ZokxRpnh786V8KV96546mSlOlqWr%2FwMVUTaiaUDVh9Wqyn%2Bwn%2B00YuJi7cBfuBgV1eq7Tc52eY48tvP66WPlFTYN32h3MozaVlHmPQiRE%2FrX8a%2FnXX35J4kk8if%2F73xs9xAVcwGXPHqtSq1Kr0hdewLkNEWo7og%2BiQMh8UQp%2B4Ad%2BaWmN7joTZsLMzz9Xh6vD1eH%2F%2BMf94xFCbQYDWAeDfVTtSxit9%2Fnn8qnyqfKpUinREi3RfvLJ%2FR3swA7s1q0TAteSJcJGDFwIIYTMjNJP6af0e%2F99xRuKNxRvsEl6EUIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYSQMZzRAYkqPT09PT29%2FswVAQEBAQEBhhlHmrqf2E6POD3i9Ihu3ST7Jfsl%2B5cvJ%2FbEntiHhpJIEkkie%2Fak2%2Bg2uk2ngxiIgZiTJ2kQDaJBmzcPGDhg4ICB8fFipx%2BhjsRsfvioaRq6kJtKeweERyWApXdL75bebfhwYTmUffvor%2FRX%2Bquzc5NPcAAOwIFdu6yuW123uj5jRp9NfTb12XTvntj5Qsic4VyICLVCRveM7hnde%2FWiJ%2BgJeiIhgZbQElrSuTMsh%2BWw%2FPBhEkpCSeh775EfyA%2Fkh99%2FF47q0kVYCTw8HA7BITi0ejX9jH5GP3v%2Bed1l3WXd5YoK2ASbYNOsWWLnDyGETIbVRNjf1jI%2Bn9j562iEmld8%2FP1yfD79%2BfTnd%2B8WSpdrdMXzjHkZ8zLmDRwoBMKKivSd6TvTd%2FL8ucnnJp%2Bb%2FMQTYucPIXOGNbAGBGcEZwRnjB4tHScdJx1XXa3KU%2BWp8o4fFztdyDwIAcbOjp%2FIT%2BQnKhQkjISRsNpayS3JLcmt%2BfMJIYQQnm%2FsPP6b%2FDf5b0pLS1%2Bevjx9%2Bb%2F%2FDQEQAAFvvcVv5jfzm6dOFfY6ebK16c0YmjE0Y2h0tNAH9%2BqrbVYwKZACKZs3B8wMmBkwc%2B7cNnufxvIbkBGQEbBwIX2NvkZfKy8PmBswN2Dutm1ipQe1jVYHMHmKPEWeEhcn%2FDdiRJMPnAWzYNaxY5ozmjOaM88%2FL3ZBMBGTIyZHTLaw0CXpknRJH37In%2BPP8edqagKfDXw28Nlnn009lXoq9ZR4K%2BYay8jIyMjIEDsVfz36fvp%2B%2Bn7e3mQYGUaGWVrCPbgH99LTfat8q3yr8vKaez4SS2JJ7MGD9AX6An3hrbfgbXgb3vbzgyAIgqDWp7f%2Fyf4n%2B5%2BcOzdjS8aWjC3dusFwGA7Dw8NNViBjYAyM2b3bv9C%2F0L9w3jxhfTSTFnmTCDcC06bRABpAA9avh3RIh3RKM4IzgjOCS0v9E%2F0T%2FRP37m3%2FlKG20PoaWCiEQug%2F%2F0nGkrFk7MGDdAFdQBfIZA3tTj4nn5PPa2qIFbEiVu%2B8I3YBGNMt1y3XLZ8xQ2gC8vKCHMiBHAD3me4z3We%2B9JIQwLZuFTudjL%2B%2Fv79hofrmEzsAdtRBHLSKVtEqSgkQYSTUUBgKQwmBm3ATbrbghNtgG2yrk49jcAyOma5Jl9UIf%2FX41eNXj2nT7EvsS%2BxLDh2iJ%2BlJenL48BafeA2sgTXJyXaFdoV2hdOnN7XmaWpCjXjMGD6MD%2BPDtm4FG7ABG0KEGi0hkAZpkPbNN0IAHzfOf7b%2FbP%2FZ2KLS0TXaRt8YTa4mV5OblUW30%2B10%2BzffNLa%2FEOC%2B%2Bkr1m%2Bo31W%2FZ2WIXADOh%2B4TuE7p36QIjYASMePPNeun%2Bin5Fv1q8%2BP5%2B6C%2BtZmrN1JqpOTlkKVlKllZVwVk4C2f79Ttvfd76vLWbW3PPR5NoEk0aO5b9T8pJOSk%2Fd87U6R6eOzx3eG5VlWy9bL1svVIJ62AdrMvKau55SDgJJ%2BEXL0qHSYdJh4WFeRNv4k10OtOX9J87a3fW7qydjw8%2Fk5%2FJz4yPFwKXhUW98l1D19A11ta0kBbSwv372XHtnV5kWq0OYIz1FOsp1lPWroWe0BN63rlj%2FDp5h7xD3ikpsf7Y%2BmPrj%2BusaGsmZNdk12TXFi2iP9Of6c%2BdOtXbIRqiIdrBwSLWItYi9q23xE4vEldOTk5OTs69e8JzXLm5dB%2FdR%2FdJpbWhtaG1oRs3NncQh9CE%2BPrrrMmL5JN8kv%2Ftt22Vfp8onyifqOJicogcIoeCgshr5DXyWlFRowdagRVYFRTolXqlXhkU5Dvfd77v%2FNu327n4%2F2gqdHHhvDlvzvvAAegBPaBHE24slaAEpZMTO06oubm6tnf6kWmYvOlFkapIVaTOmSP8gFeuvP9Ga8gasubtt9Xx6nh1%2FI4dYmecEfrw%2BvWDG3ADbvz0E3iCJ3hKJA0ecANuwA29XvKJ5BPJJxMm7E%2Fen7w%2FOTOzvdJr3JRm6iZEc3muylxdoVfoFWplpY3Txmnj4uPBD%2FzATy6vt6PRMHp%2BGD%2BMH5aZySfzyXyyjY20VFoqLQ0NfXAYvYMDXIbLcHnr1oCwgLCAsPYbRi9cyEeM4N15d979p59gNsyG2VZW93cohmIo1mqpE3WiTqNGDRgwYMCAAamp7V3%2BaYvSFqUtsrXlorgoLurIEdCBDnRDhrT0fGQUGUVGpaaS0WQ0GT1qVP%2Fd%2FXf3363Vtne%2BUMuYfBTirdm3Zt%2BavX27W5lbmVvZ9OnEkTgSx%2BpqK28rbyvv2FixM1zPalgNq5cvFzrN%2FyRwMX8EOL1Wr9Vr33tP2Gg%2Bg1BQ27jw5YUvL3xpb689rj2uPa5SCYFr1KgGD%2FgIPoKPxoyhQIHCmDGsr0zytORpydMAwnYAUIACFGD0IPPrr7d3%2FoQLd3Ly2bSzaWfTXnqJ7CQ7yc5du0gciSNxPE9v0Bv0xpQpA6oHVA%2Bobv%2FAFRcXFxcXJ5FwlKMc3bWrtYGLoUfoEXokMBA2wAbYEBeXRJNoElUqR5PRZDSprW3vfKLmabM7bUWBokBRMG6c8MWvqtIM0QzRDElOFjvDHR3WwNoXC1w1%2FWr61fRTqcABHMDhTwIX4w%2F%2B4H%2F0qPBAsocHhEM4hDs5sZfJCrKCrPjtN%2FoUfYo%2B9e9%2FC8POExLEzi8jDHZYskQIsHfu%2BLv6u%2Fq7btkiVnrS%2B6b3Te%2B7Zg3sgT2wZ8mSNnujlbASVv7nPwF7AvYE7Gn%2FGwnUPHih6mBwKqn2SW%2FK7ym%2Fp%2Fzu4GD5quWrlq%2F%2B8AN8BV%2FBV8OGNXrgYTgMh99%2BO2BhwMKAhR991F7liNBfkckGcSD0KMm5knMl54pWS14kL5IXL19uaD%2F2ADN4gzd4v%2FQSBi6E2g%2FOxNHBYBNf%2B4iMjIyMjNTrhb6Xl17yG%2Bk30m%2BkVEqP0WP0WGQk9IJe0Kumhn5Pv6ffT58eYBdgF2DXdqMGEUIIoRYRRulZWNyf%2B3B7%2Bvb07SEhYqcLIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQshctd1yKkk0iSbNmXP%2FjUaT0WR0TIw6UB2oDoyJaa8MPkOfoc9QqdThuMNxh%2BPW1qoRqhGqEeXl7PVQGkpDqaOjfox%2BjH6MUgm5kAu5o0ZBBVRAhYcHPUwP08NSqbDA4O3b8Al8Ap%2F89puwYq5azRb0bK%2F8GFM%2BqXxS%2BWTv3nwZX8aXRUTA1%2FA1fP3UU8IKv926wd%2Fh7%2FB3SiELsiCroIBaUStqdeyYNEwaJg3bs2c%2F2U%2F2k6tX2fkiIiIiIiKsrbWntae1p2WyA9kHsg9kl5WJlT%2BEEGrIIx%2FAFImKREXik08K6xstWFBrXWtdax0VJR0lHSUdNXEi7U17097z5oEUpCC1sWnyiWfADJhBKU2kiTTxhx%2B007XTtdM%2F%2BOAoOUqOtuHKtBGTIyZHTLawqFpWtaxq2Ztvkn%2BRf5F%2FhYfTkXQkHdn4AooMOUaOkWM8T8fT8XR8fDw3iBvEDYqO5v%2FO%2F53%2F%2B4YNwsq2iYmaM5ozmjO7d7c0vfJ18nXydSkpbVUejdEs1izWLG79shsIIfPTygBGiHyufK587ocfwmPwGDw2fnyTD90G22Dbnj2aTE2mJrPtJj8NKQkpCSlZsoRsI9vItshISIVUSL1yBTbCRtjo5QU7YAfsaP3cguQgOUgOpqfXZtdm12ZHRQk1l3v3TJWPwMGBgwMHy2Sum103u27euJH8TH4mP7f%2BwszFcrFcLKV0KB1Kh167RvvRfrSflxeJITEk5pdf1JfUl9SXFixo6fkxgCGE2korJ%2FOl1LrQutC6cOXKyoWVCysXdu9O1ERN1H5%2BDR7xNH2aPp2SYnPC5oTNibVrIRMyoc3WMyaE5JAckjNy5P1NgRAIgd7eQlNaYSE3mhvNjXZ2FlaQzskhu8lusvvrr%2BlkOplOPnuW2lN7aq%2FX0%2BV0OV3eqxe3i9vF7XruOfgcPofPn376fr6epc%2FSZwMCJGGSMEnYsmUQBVEQtWqVqXLi%2Bq7ru67vLljQYOBKgARIOHpUckVyRXIlLq5aWi2tlp4%2Fz16WhcpCZaGDBtFz9Bw9N3MmvUlv0psDBvCBfCAfWFAA%2FaAf9PPyup%2Bfx%2Bhj9LEhQ%2BQ75TvlO21shPXcKiubm24MIAihtmKyJsTguOC44DhXV2HF1NhYuAE34Ebnzvd38AAP8MjN1b%2Brf1f%2F7vTpbd23Euwe7B7s3rcv9yb3Jvfmzp0N7Ucfp4%2FTxy9ftom2ibaJnjEjPj4%2BPj6%2Bqqqx8yvtlHZKu%2FBwfiW%2Fkl%2F59tv3X%2FijaZEsI8vIshkz1F%2Bqv1R%2Fee5ci%2FMRHhweHN6zJ%2BfKuXKucXFCTdewcjSNolE0av36BLsEuwS7%2F%2F63aWeVSuVfy7%2BWf%2F3FF1AIhVA4cGBDexJLYkkslyxRz1fPV88%2FfNjkHxRCCLWQyZZTSYxMjEyMzM9XJiuTlcnLl%2FNH%2BaP80X%2F%2Fm%2FyX%2FJf8t6ZGb6u31du%2B9daBWwduHbjV9oMCOBWn4lQjR8IROAJHGt6PnCanyelevaqWVi2tWrp8OcRDPMSvXCm8yvMNHafSqrQq7d698kx5pjzTz09YYj4sjDVJ8lv4LfyWiAj4Er6EVgQw7m3ube7t0FAhH4bABY7gCI6HDjUvcBGiGKIYohjy9tu0kBbSPwlcDJVRGZWxmmbzAxg2ISKE2orJF7QURvmlpAij3zZsIL7El%2Fh%2B8EHircRbibcuXWrqeYJ6B%2FUO6t2pU0vTQd4h75B3nnqqsf1oX9qX9i0pgTEwBsZYWSk2KjYqNvbs2dT3oUvpUrp0%2B%2FZ673%2BX3CV3m7CCb2P2wT7Y98QT9d7XglpQi9jYpp5GniJPkac4OfE%2F8j%2FyP%2Bp04AZu4JaVxQZzNJg%2Fd%2BpO3Vk5Nn2QCEIItbVGmhAJEe6gf%2F%2B93VP2R1Ocpqumq6br0KFNPWxc2ri0cWnOzpZPWj5p%2BaRGA0VQBEUXL5IgEkSC0tJ4e96etz9zRhi9d%2BaM0LdTXNza5Mo%2FlH8o%2F%2FD778ESLMGya1eWfuso6yjrqKeeit8dvzt%2Bd3V1s8%2F7rfxb%2Bbc%2F%2FcSaZFnAsbK0srSyHD5caPLU61uabuExAysr23jbeNv4fv3ICXKCnBg4kHxEPiIfDRok1MAef5yMIWPImIULNUmaJE1SWlprywshhFqrkSZESkVL2VW4ClcNz2s1OUOTpJOkk3Q6vYfeQ%2B8REnLA7oDdAbuiono7JkIiJJouueQ8OU%2FO8zwdRAfRQQCsKVF7RntGe6YVoxyjIRqiCYEQCIE2WD7xwWH%2FZ87c%2F%2FsJfAKffPWVUBO2tBS2s78IISS%2BNluaXnFccVxxPDSURtJIGllTIzzwm2jCkGEews6HnQ877%2BSkX6pfql964AB7HosqqIIq7t5N8EnwSfAZO7al55e%2FI39H%2Fs433wh9Xv36se3UmTpT5xkzEl5KeCnhpYwMscuhwfSbqA8M%2B7IQQsZM3qch9LUMHkwtqSW1XL4c9sN%2B2P%2Fee2y72Bk2tRquhqvhpk41fpCYm8RN4iaZoOk1DMIg7ORJ483cWm4tt3baNLHzjxBCYjFZDey5xc8tfm6xs3P1yOqR1SO%2F%2BYZcIpfIpS5d2OtssAQ3jBvGDZs%2BXe2idlG7FBSIXQAtJQTkESOEB7I%2F%2BcR4eDvxI37Eb948dbA6WB3822%2Bte58ePYT3iY%2Bv9z6ryWqyesMGdYm6RF3S9EEdCCHU0bU6gLGpjXRanVan%2FeIL9kBvgwcsh%2BWw%2FOLF8ury6vLqV15p66mXWovNgOHyo8uPLj%2F27s1d5a5yV0ND4Wl4Gp4OD4f34X1431DzMtUMFsbkU%2BVT5VPffFN4EPuFF4xfZ%2B%2FLz%2BJn8bPi42UKmUKmyMzc57vPd5%2Fv7dtilyNCCJlaqwNYvamamvrGu8guskulUqeoU9Qp%2F%2FqX2AXRECFwxMezGTwazM9aspasvXmTK%2BAKuIIZM4RJcktLTZUONimx3Um7k3YnN21qbCop8j55n7yv06nvqu%2Bq744YIXY5IoSQqbX6QeaELgldErqsXSv8t3atuU3m29bY1FhCfpcvVxM1UZswcDFCTbW2VqjxLlig26Pbo9vz1lu0iBbRIsMD1GKXB0IItReTzcTxqCOxJJbE1tRAFVRB1e%2B%2F8xf5i%2FzFvXsTSAJJIEeOtFc6Hnye7MMP5VflV%2BVX9%2BwR5pScPJlUk2pS%2Fbe%2FCXM32tnBMlgGy8QuPYQQQu1OGETRjGVWEEIIIYQQQgghhBBCCCGEEEIIIYQQQggh1EpsMl%2B5h9xD7hEcLHZ6EEIIPVpM%2FuDrg5P2%2Fuc%2FD746d66w%2FtapU2JnHCGEUMf2yE%2FmGxERERERwSa%2FtbAQFoCsqmKvP7jys58f15fry%2FX19CRJJIkkOTrSMXQMHUOI8KBwZSXtQrvQLgUFZCfZSXZmZgrLpeTmtnU%2BGsIW8JRJZBKZpH9%2F4kW8iJe7O0yBKTDF1pbtR54gT5An7t4V1hXLza0JqwmrCcvM%2FOHmDzd%2FuFlSwvZjU1bZ9LHpY9NHIjmQfSD7QPa9e2LlDyGEGvLIT%2BZ7fzb3BEiAhOHDrTOsM6wzVKqKiIqIiggfH5gEk2BSYCBREiVRGmZ5b7J5MA%2FmXbumnaidqJ149Ghb5%2BfBAPPUU5wP58P5%2BPg09zzkMDlMDlMqLPyZnp61IGtB1oLTp%2FtW9K3oWzFxIt1Kt9KtWVlCAMvMbHH5z5XPlc89ccJ4Fn1TKV9Uvqh80ZNPsqm2TH1%2BhJD5avV6YJUxlTGVMf%2F4R6OBi%2FkIPoKPfHw6De00tNPQJUvaOoP0MD1MD%2FfsSU%2FSk%2FSkg4N2sHawdnBEBORCLuQOG9biwMVsgk2wqWdP%2B8ftH7d%2FXC5%2FcAVj02E1Sftl9svslwUFtTRw3S%2BXP2qW0nxpvjR%2F4MB%2B3%2FX7rt93U6aQZJJMkl1cYCWshJU9e5o6HwghZCom7wMzt8l8Q7xDvEO8p00DP%2FADP8OUUELAJYQG0SAaRAgJIAEkoKiIjCfjyfjTp6tXV6%2BuXl1QIJ0knSSdVFsrPS49Lj3u6Mg78868s68vyEEO8r59jd%2BP5tN8mn%2FlSmJqYmpi6k8%2FmSofQceCjgUde%2Bopbg23hlvTv3%2B9Hf6oCQo1nYwMPoQP4UOKiyW7JLsku1iA7toV4iEe4gcO5F15V97V3Z0cJAfJQUrr5UNFVVSl13eP6h7VPerrr2O2xGyJ2VJT016fG0IINeaRncxXqAl16wY%2B4AM%2B9ecyZBduqqM6qquqKggoCCgIUKlSE1ITUhNqaoQmxzoHuIAL3O%2BzKygICQkJCQm5fl1oihs7ltVoiCtxJa7e3spkZbIy2d1dNUI1QjXi1q2W5iOUhtJQ6uiot9Hb6G38%2FIT3qbPDFJgCU375JSEoISghKCOj3gmGwBC4v%2BjK9evC3xs3QoJDgkOCJ08GAgRI5871yuePmmnexLyJeRO7dxe2Xrki6oeKEEJ1PLLLbwRdCLoQdGHIEG4Rt4hbxEZF%2Fok%2FajBDJg6ZOGTiTz%2BtIqvIKsLzjR0mrBc2fDgto2W0zNCEyk3kJnITs7PV89Xz1fMPH25pPoKXBS8LXjZsGEkn6SR94EC2vaU1PcUQxRDFkGee4V14F96lCU2QGtCA5tKl9pp1X75Ovk6%2BLiXFVOfTLNYs1ixueN00hFDH1eo%2BsLby4OjA5iNdSVfStUePxvajPWlP2rO0lG6hW%2BiWqqozcAbOQDPedxEsgkVpacab9Un6JH2Sh0erC2IxLIbF9c%2FDfcF9wX1x%2BnRTT8Nm1a%2F9tPbT2k9ra0kuySW5JSVsMEeD5TOJTqKTPD3%2FKNVH9oYHIdTxNHJBIkS4I%2F7993ZP2QyYATMo1XTVdNV0HTq0qYcJTXf29nq9Xq%2FXR0RAJERCZEGB0JSWnw%2BfwqfwaX5%2B%2FtT8qflTCwtTT6WeSj3V%2Br6dEG2INkT74ovGw9e1Gq1Gq9m2raWj5EIWhSwKWfTyy3ABLsAFS0sWcDRVmipN1datwl6N1xQbwkY12sbbxtvGd%2B0qbHV1ffjf779PjEyMTIzMz29teSGEUGs10gfW8J15m7sKV%2BFqeXlzD7P8zPIzy8%2Fu3evcuXPnzp1jY2MKYgpiCur0aRn3bZk5OowOo8MIIRfIBXLB9Od%2FMLCywGQIUMbPhYldHgghxGCTUCuxpjm6gq6gK6ZNY9upJbWkllVViXsT9ybujY1t6fmDi4OLg4vDw8nL5GXyMqshAQgrQn%2F3nfCcVlGR2OXQWuwxgaphVcOqhp040eITvQvvwrs8L9RQn3hC7HwhhNqO2faBdRSkkBSSwgEDjLdzrpwr59ry0YcMfZI%2BSZ%2Bsfx7JeMl4yfj674sQQn8Vj%2FxzYG1FmKS4Tx8ogRIoGTXq%2FpRTf5AslyyXLNdoWjuMXhiu37mz0Pc1ebLx%2B5BKUkkqT5zQJGmSNEn1B5MghNCj6pF9DsxU2FRZFZEVkRWRXboID0T7%2BtKldCld2qeP8f5seHtrAxeTkJCQkJBw506IVYhViNW5c8JWf%2F%2F772dDbajNsGHBccFxwXFublJ3qbvU%2FezZmhk1M2pm3L6NcxkihB5Vra6BKWIVsYrYt9%2BmBbSAFoSHN%2FnAN%2BANeOOHHzQSjUQjeecdYaOIg0YaEDw3eG7w3MhIco1cI9ccHRvaj35Fv6JfFRfbRtlG2UZpNPG743fH766uNlU6VtAVdAXluBTXFNcU16AgYVTlnwzTXwJLYEltbcIzCc8kPLNtm1jlh891IYTaSqv7wKxUVior1Zo18Dq8Dq%2BnpjZ6wC%2FwC%2Fxy7pz1FOsp1lNWrRI2ml%2FgaipW42qrwMWwB6ttRtqMtBn5%2FffCIJELbTAuESGEOgaT9YFN6D6h%2B4TuXbrIxsrGysbGxkIABECAi8v9HWbBLJhVVATZkA3Z06cL64IVF4tdAI2RD5IPkg%2BaPFmfrE%2FWJ1tYcJFcJBdZWMhf4i%2Fxly5cEJrobt4UK32KAkWBosDFRV%2BkL9IX%2BfmRU%2BQUOeXiQq2oFbWyshKe29qxQ%2BxyRAghUzP5IA7hQWIfHz6Pz%2BPztm0jH5APyAccBz%2FCj%2FDjq68K64CdPSt2xhFCCKGHEkbpBQcLk8ZGRIidHoQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIoUdPs%2BdCDOod1Duot5%2BfZJdkl2TX3%2F5GxpPxZLxhvSl9tD5aH52eLnlG8ozkGZ4noSSUhLq7U3%2FqT%2F1v3KBRNIpGDR9ufBydTWfT2aWlEAEREJGVxek4Hafr21dYV0ulMk6HYpZilmJW%2F%2F7G56MD6UA6kBCyi%2Bwiu86c6ehzLyrtlHZKu%2FBwepleppezs1l%2B5CnyFHmKjY2w1wsvCOX17beuX7l%2B5fqVTpdXmleaV%2Frii8K6ZbduCZMn%2F%2FgjO69wfL9%2BTS1n4kk8iaeXl2qFaoVqRUKC8CrHCQuYzppVO6V2Su2UXbuko6SjpKM8PRv7nDVrNGs0a9RqscsXIdRxtXxBy3iIh%2FiCAnWJukRdUudCFAmREMlmSa%2B%2F5D2XwCVwCXl5qhJViaqEXQgBYA2sgTUA8gh5hDyiX7%2BmJsP4fEE3gm4E3ejUSbZYtli2ePJkYZb8mzd%2FuPnDzR9ulpSIXeDNxR%2Fhj%2FBHMjO5WdwsblZAgLD17Fl4C96Ct%2Fr0Ibkkl%2BTm5qouqS6pLpWXh34T%2Bk3oNwEBNJ2m0%2FTbt7kN3AZuQ%2Ffuz459duyzYx0cDh46eOjgobt32zrdjX3OCCHUWi1fDywCIiDCxUXRRdFF0WX6dPZXmI3e3r6hw%2FgQPoQPcXMzPk6RqEhUJD75ZGszJCxvUlYmrJel1UoHSgdKBza8EKW5Kw8sDywPzM4WlkextWXLp5BepBfp5eOj99f76%2F0zM4W9CeFlvIyX%2BftLaiQ1kpozZ8AZnME5O9tyguUEywn1byjaSlt%2Fzggh1PIA9kANLDaW%2FRWaosrLG3zDP%2B7MjY9TB6uD1cG%2F%2FdbaDI1LG5c2Ls3Wltwj98g9OzvZOtk62bq2r3G0laPkKDlKams5T86T87x0CQbDYBg8YoTQRCeVJu5N3Ju49%2Fr1kJCQkJAQb286g86gM%2Bzs%2BB38Dn7HqFH8Kf4Uf8rLi7PmrDnrvn0jIiIiIiKsrZv6%2FvQAPUAPVFeDDdiAjb39nNlzZs%2BZLZOF0lAaSjt1YvtVZlVmVWYZFvJs688ZIYRa3oTYQvfvzDcoNig2TJ%2FOttOFdCFdyC6AaWm8FW%2FFWzk7szt3th%2BxJJbEMieHAgUKpaX1zjcaRsNogNro2uja6FOnEn0TfRN9b98Wu6Bb7RP4BD7JzIQX4UV40d8fKFCgKSl%2FlB4lq8gqsmrAAKiESqg8eVKdpE5SJ6WlQRIkQRKA%2FAn5E%2FInFApdua5cV%2B7vLxxXXt5YObsGuwa7Bp88mb8nf0%2F%2Bnl698vvk98nvM306jaSRNJLn%2BQ%2F4D%2FgPzpwRAq1OJ%2FSZNf45a1ZoVmhWfPut2MWKEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEKo3f0%2FYCcRj5nKHu4AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTMtMDItMDlUMTk6MzI6NTMrMDE6MDCs99SeAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDEzLTAyLTA5VDE5OjMyOjUzKzAxOjAw3apsIgAAAHl0RVh0c3ZnOmJhc2UtdXJpAGZpbGU6Ly8vaG9tZS9qb3MvRHJvcGJveC9Kb3MvcHJvZ3JhbW1pbmcvamF2YXNjcmlwdC9qc29uZWRpdG9yb25saW5lL2pzb25lZGl0b3IvY3NzL2ltZy9qc29uZWRpdG9yLWljb25zLnN2Z2GG7LgAAAAASUVORK5CYII%3D%29%3B%0A%20%20vertical%2Dalign%3A%20top%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Esearch%20button%3Ahover%20%7B%0A%20%20background%2Dcolor%3A%20transparent%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Esearch%20button%2Erefresh%20%7B%0A%20%20width%3A%2018px%3B%0A%20%20background%2Dposition%3A%20%2D99px%20%2D73px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Esearch%20button%2Enext%20%7B%0A%20%20cursor%3A%20pointer%3B%0A%20%20background%2Dposition%3A%20%2D124px%20%2D73px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Esearch%20button%2Enext%3Ahover%20%7B%0A%20%20background%2Dposition%3A%20%2D124px%20%2D49px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Esearch%20button%2Eprevious%20%7B%0A%20%20cursor%3A%20pointer%3B%0A%20%20background%2Dposition%3A%20%2D148px%20%2D73px%3B%0A%20%20margin%2Dright%3A%202px%3B%0A%7D%0A%0A%2Ejsoneditor%20%2Esearch%20button%2Eprevious%3Ahover%20%7B%0A%20%20background%2Dposition%3A%20%2D148px%20%2D49px%3B%0A%7D" rel="stylesheet" />
<script src="data:application/x-javascript,%2F%2A%21%0A%20%2A%20jsoneditor%2Ejs%0A%20%2A%0A%20%2A%20%40brief%0A%20%2A%20JSONEditor%20is%20a%20web%2Dbased%20tool%20to%20view%2C%20edit%2C%20and%20format%20JSON%2E%0A%20%2A%20It%20shows%20data%20a%20clear%2C%20editable%20treeview%2E%0A%20%2A%0A%20%2A%20Supported%20browsers%3A%20Chrome%2C%20Firefox%2C%20Safari%2C%20Opera%2C%20Internet%20Explorer%208%2B%0A%20%2A%0A%20%2A%20%40license%0A%20%2A%20Licensed%20under%20the%20Apache%20License%2C%20Version%202%2E0%20%28the%20%22License%22%29%3B%20you%20may%20not%0A%20%2A%20use%20this%20file%20except%20in%20compliance%20with%20the%20License%2E%20You%20may%20obtain%20a%20copy%0A%20%2A%20of%20the%20License%20at%0A%20%2A%0A%20%2A%20http%3A%2F%2Fwww%2Eapache%2Eorg%2Flicenses%2FLICENSE%2D2%2E0%0A%20%2A%0A%20%2A%20Unless%20required%20by%20applicable%20law%20or%20agreed%20to%20in%20writing%2C%20software%0A%20%2A%20distributed%20under%20the%20License%20is%20distributed%20on%20an%20%22AS%20IS%22%20BASIS%2C%20WITHOUT%0A%20%2A%20WARRANTIES%20OR%20CONDITIONS%20OF%20ANY%20KIND%2C%20either%20express%20or%20implied%2E%20See%20the%0A%20%2A%20License%20for%20the%20specific%20language%20governing%20permissions%20and%20limitations%20under%0A%20%2A%20the%20License%2E%0A%20%2A%0A%20%2A%20Copyright%20%28c%29%202011%2D2015%20Jos%20de%20Jong%2C%20http%3A%2F%2Fjsoneditoronline%2Eorg%0A%20%2A%0A%20%2A%20%40author%20%20Jos%20de%20Jong%2C%20%3Cwjosdejong%40gmail%2Ecom%3E%0A%20%2A%20%40version%204%2E1%2E3%0A%20%2A%20%40date%20%20%20%202015%2D03%2D17%0A%20%2A%2F%0A%28function%20webpackUniversalModuleDefinition%28root%2C%20factory%29%20%7B%0A%09if%28typeof%20exports%20%3D%3D%3D%20%27object%27%20%26%26%20typeof%20module%20%3D%3D%3D%20%27object%27%29%0A%09%09module%2Eexports%20%3D%20factory%28%29%3B%0A%09else%20if%28typeof%20define%20%3D%3D%3D%20%27function%27%20%26%26%20define%2Eamd%29%0A%09%09define%28factory%29%3B%0A%09else%20if%28typeof%20exports%20%3D%3D%3D%20%27object%27%29%0A%09%09exports%5B%22JSONEditor%22%5D%20%3D%20factory%28%29%3B%0A%09else%0A%09%09root%5B%22JSONEditor%22%5D%20%3D%20factory%28%29%3B%0A%7D%29%28this%2C%20function%28%29%20%7B%0Areturn%20%2F%2A%2A%2A%2A%2A%2A%2F%20%28function%28modules%29%20%7B%20%2F%2F%20webpackBootstrap%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%2F%2F%20The%20module%20cache%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09var%20installedModules%20%3D%20%7B%7D%3B%0A%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%2F%2F%20The%20require%20function%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09function%20%5F%5Fwebpack%5Frequire%5F%5F%28moduleId%29%20%7B%0A%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%09%2F%2F%20Check%20if%20module%20is%20in%20cache%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%09if%28installedModules%5BmoduleId%5D%29%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%09%09return%20installedModules%5BmoduleId%5D%2Eexports%3B%0A%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%09%2F%2F%20Create%20a%20new%20module%20%28and%20put%20it%20into%20the%20cache%29%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%09var%20module%20%3D%20installedModules%5BmoduleId%5D%20%3D%20%7B%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%09%09exports%3A%20%7B%7D%2C%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%09%09id%3A%20moduleId%2C%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%09%09loaded%3A%20false%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%09%7D%3B%0A%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%09%2F%2F%20Execute%20the%20module%20function%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%09modules%5BmoduleId%5D%2Ecall%28module%2Eexports%2C%20module%2C%20module%2Eexports%2C%20%5F%5Fwebpack%5Frequire%5F%5F%29%3B%0A%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%09%2F%2F%20Flag%20the%20module%20as%20loaded%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%09module%2Eloaded%20%3D%20true%3B%0A%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%09%2F%2F%20Return%20the%20exports%20of%20the%20module%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%09return%20module%2Eexports%3B%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%7D%0A%0A%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%2F%2F%20expose%20the%20modules%20object%20%28%5F%5Fwebpack%5Fmodules%5F%5F%29%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%5F%5Fwebpack%5Frequire%5F%5F%2Em%20%3D%20modules%3B%0A%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%2F%2F%20expose%20the%20module%20cache%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%5F%5Fwebpack%5Frequire%5F%5F%2Ec%20%3D%20installedModules%3B%0A%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%2F%2F%20%5F%5Fwebpack%5Fpublic%5Fpath%5F%5F%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%5F%5Fwebpack%5Frequire%5F%5F%2Ep%20%3D%20%22%22%3B%0A%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09%2F%2F%20Load%20entry%20module%20and%20return%20exports%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%09return%20%5F%5Fwebpack%5Frequire%5F%5F%280%29%3B%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%7D%29%0A%2F%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2A%2F%0A%2F%2A%2A%2A%2A%2A%2A%2F%20%28%5B%0A%2F%2A%200%20%2A%2F%0A%2F%2A%2A%2A%2F%20function%28module%2C%20exports%2C%20%5F%5Fwebpack%5Frequire%5F%5F%29%20%7B%0A%0A%09var%20treemode%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%281%29%3B%0A%09var%20textmode%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%282%29%3B%0A%09var%20util%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%283%29%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20%40constructor%20JSONEditor%0A%09%20%2A%20%40param%20%7BElement%7D%20container%20%20%20%20Container%20element%0A%09%20%2A%20%40param%20%7BObject%7D%20%20%5Boptions%5D%20%20%20%20Object%20with%20options%2E%20available%20options%3A%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BString%7D%20mode%20%20%20%20%20%20Editor%20mode%2E%20Available%20values%3A%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27tree%27%20%28default%29%2C%20%27view%27%2C%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27form%27%2C%20%27text%27%2C%20and%20%27code%27%2E%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bfunction%7D%20change%20%20Callback%20method%2C%20triggered%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20on%20change%20of%20contents%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BBoolean%7D%20search%20%20%20Enable%20search%20box%2E%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20True%20by%20default%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Only%20applicable%20for%20modes%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27tree%27%2C%20%27view%27%2C%20and%20%27form%27%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BBoolean%7D%20history%20%20Enable%20history%20%28undo%2Fredo%29%2E%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20True%20by%20default%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Only%20applicable%20for%20modes%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27tree%27%2C%20%27view%27%2C%20and%20%27form%27%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BString%7D%20name%20%20%20%20%20%20Field%20name%20for%20the%20root%20node%2E%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Only%20applicable%20for%20modes%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27tree%27%2C%20%27view%27%2C%20and%20%27form%27%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BNumber%7D%20indentation%20%20%20Number%20of%20indentation%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20spaces%2E%204%20by%20default%2E%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Only%20applicable%20for%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20modes%20%27text%27%20and%20%27code%27%0A%09%20%2A%20%40param%20%7BObject%20%7C%20undefined%7D%20json%20JSON%20object%0A%09%20%2A%2F%0A%09function%20JSONEditor%20%28container%2C%20options%2C%20json%29%20%7B%0A%09%20%20if%20%28%21%28this%20instanceof%20JSONEditor%29%29%20%7B%0A%09%20%20%20%20throw%20new%20Error%28%27JSONEditor%20constructor%20called%20without%20%22new%22%2E%27%29%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20check%20for%20unsupported%20browser%20%28IE8%20and%20older%29%0A%09%20%20var%20ieVersion%20%3D%20util%2EgetInternetExplorerVersion%28%29%3B%0A%09%20%20if%20%28ieVersion%20%21%3D%20%2D1%20%26%26%20ieVersion%20%3C%209%29%20%7B%0A%09%20%20%20%20throw%20new%20Error%28%27Unsupported%20browser%2C%20IE9%20or%20newer%20required%2E%20%27%20%2B%0A%09%20%20%20%20%20%20%20%20%27Please%20install%20the%20newest%20version%20of%20your%20browser%2E%27%29%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28arguments%2Elength%29%20%7B%0A%09%20%20%20%20this%2E%5Fcreate%28container%2C%20options%2C%20json%29%3B%0A%09%20%20%7D%0A%09%7D%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Configuration%20for%20all%20registered%20modes%2E%20Example%3A%0A%09%20%2A%20%7B%0A%09%20%2A%20%20%20%20%20tree%3A%20%7B%0A%09%20%2A%20%20%20%20%20%20%20%20%20mixin%3A%20TreeEditor%2C%0A%09%20%2A%20%20%20%20%20%20%20%20%20data%3A%20%27json%27%0A%09%20%2A%20%20%20%20%20%7D%2C%0A%09%20%2A%20%20%20%20%20text%3A%20%7B%0A%09%20%2A%20%20%20%20%20%20%20%20%20mixin%3A%20TextEditor%2C%0A%09%20%2A%20%20%20%20%20%20%20%20%20data%3A%20%27text%27%0A%09%20%2A%20%20%20%20%20%7D%0A%09%20%2A%20%7D%0A%09%20%2A%0A%09%20%2A%20%40type%20%7B%20Object%2E%3CString%2C%20%7Bmixin%3A%20Object%2C%20data%3A%20String%7D%20%3E%20%7D%0A%09%20%2A%2F%0A%09JSONEditor%2Emodes%20%3D%20%7B%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Create%20the%20JSONEditor%0A%09%20%2A%20%40param%20%7BElement%7D%20container%20%20%20%20Container%20element%0A%09%20%2A%20%40param%20%7BObject%7D%20%20%5Boptions%5D%20%20%20%20See%20description%20in%20constructor%0A%09%20%2A%20%40param%20%7BObject%20%7C%20undefined%7D%20json%20JSON%20object%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09JSONEditor%2Eprototype%2E%5Fcreate%20%3D%20function%20%28container%2C%20options%2C%20json%29%20%7B%0A%09%20%20this%2Econtainer%20%3D%20container%3B%0A%09%20%20this%2Eoptions%20%3D%20options%20%7C%7C%20%7B%7D%3B%0A%09%20%20this%2Ejson%20%3D%20json%20%7C%7C%20%7B%7D%3B%0A%0A%09%20%20var%20mode%20%3D%20this%2Eoptions%2Emode%20%7C%7C%20%27tree%27%3B%0A%09%20%20this%2EsetMode%28mode%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Detach%20the%20editor%20from%20the%20DOM%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09JSONEditor%2Eprototype%2E%5Fdelete%20%3D%20function%20%28%29%20%7B%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20JSON%20object%20in%20editor%0A%09%20%2A%20%40param%20%7BObject%20%7C%20undefined%7D%20json%20%20%20%20%20%20JSON%20data%0A%09%20%2A%2F%0A%09JSONEditor%2Eprototype%2Eset%20%3D%20function%20%28json%29%20%7B%0A%09%20%20this%2Ejson%20%3D%20json%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20JSON%20from%20the%20editor%0A%09%20%2A%20%40returns%20%7BObject%7D%20json%0A%09%20%2A%2F%0A%09JSONEditor%2Eprototype%2Eget%20%3D%20function%20%28%29%20%7B%0A%09%20%20return%20this%2Ejson%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20string%20containing%20JSON%20for%20the%20editor%0A%09%20%2A%20%40param%20%7BString%20%7C%20undefined%7D%20jsonText%0A%09%20%2A%2F%0A%09JSONEditor%2Eprototype%2EsetText%20%3D%20function%20%28jsonText%29%20%7B%0A%09%20%20this%2Ejson%20%3D%20util%2Eparse%28jsonText%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20stringified%20JSON%20contents%20from%20the%20editor%0A%09%20%2A%20%40returns%20%7BString%7D%20jsonText%0A%09%20%2A%2F%0A%09JSONEditor%2Eprototype%2EgetText%20%3D%20function%20%28%29%20%7B%0A%09%20%20return%20JSON%2Estringify%28this%2Ejson%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20a%20field%20name%20for%20the%20root%20node%2E%0A%09%20%2A%20%40param%20%7BString%20%7C%20undefined%7D%20name%0A%09%20%2A%2F%0A%09JSONEditor%2Eprototype%2EsetName%20%3D%20function%20%28name%29%20%7B%0A%09%20%20if%20%28%21this%2Eoptions%29%20%7B%0A%09%20%20%20%20this%2Eoptions%20%3D%20%7B%7D%3B%0A%09%20%20%7D%0A%09%20%20this%2Eoptions%2Ename%20%3D%20name%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20the%20field%20name%20for%20the%20root%20node%2E%0A%09%20%2A%20%40return%20%7BString%20%7C%20undefined%7D%20name%0A%09%20%2A%2F%0A%09JSONEditor%2Eprototype%2EgetName%20%3D%20function%20%28%29%20%7B%0A%09%20%20return%20this%2Eoptions%20%26%26%20this%2Eoptions%2Ename%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Change%20the%20mode%20of%20the%20editor%2E%0A%09%20%2A%20JSONEditor%20will%20be%20extended%20with%20all%20methods%20needed%20for%20the%20chosen%20mode%2E%0A%09%20%2A%20%40param%20%7BString%7D%20mode%20%20%20%20%20Available%20modes%3A%20%27tree%27%20%28default%29%2C%20%27view%27%2C%20%27form%27%2C%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27text%27%2C%20and%20%27code%27%2E%0A%09%20%2A%2F%0A%09JSONEditor%2Eprototype%2EsetMode%20%3D%20function%20%28mode%29%20%7B%0A%09%20%20var%20container%20%3D%20this%2Econtainer%2C%0A%09%20%20%20%20%20%20options%20%3D%20util%2Eextend%28%7B%7D%2C%20this%2Eoptions%29%2C%0A%09%20%20%20%20%20%20data%2C%0A%09%20%20%20%20%20%20name%3B%0A%0A%09%20%20options%2Emode%20%3D%20mode%3B%0A%09%20%20var%20config%20%3D%20JSONEditor%2Emodes%5Bmode%5D%3B%0A%09%20%20if%20%28config%29%20%7B%0A%09%20%20%20%20try%20%7B%0A%09%20%20%20%20%20%20var%20asText%20%3D%20%28config%2Edata%20%3D%3D%20%27text%27%29%3B%0A%09%20%20%20%20%20%20name%20%3D%20this%2EgetName%28%29%3B%0A%09%20%20%20%20%20%20data%20%3D%20this%5BasText%20%3F%20%27getText%27%20%3A%20%27get%27%5D%28%29%3B%20%2F%2F%20get%20text%20or%20json%0A%0A%09%20%20%20%20%20%20this%2E%5Fdelete%28%29%3B%0A%09%20%20%20%20%20%20util%2Eclear%28this%29%3B%0A%09%20%20%20%20%20%20util%2Eextend%28this%2C%20config%2Emixin%29%3B%0A%09%20%20%20%20%20%20this%2Ecreate%28container%2C%20options%29%3B%0A%0A%09%20%20%20%20%20%20this%2EsetName%28name%29%3B%0A%09%20%20%20%20%20%20this%5BasText%20%3F%20%27setText%27%20%3A%20%27set%27%5D%28data%29%3B%20%2F%2F%20set%20text%20or%20json%0A%0A%09%20%20%20%20%20%20if%20%28typeof%20config%2Eload%20%3D%3D%3D%20%27function%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20try%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20config%2Eload%2Ecall%28this%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20catch%20%28err%29%20%7B%7D%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20catch%20%28err%29%20%7B%0A%09%20%20%20%20%20%20this%2E%5FonError%28err%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20throw%20new%20Error%28%27Unknown%20mode%20%22%27%20%2B%20options%2Emode%20%2B%20%27%22%27%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Throw%20an%20error%2E%20If%20an%20error%20callback%20is%20configured%20in%20options%2Eerror%2C%20this%0A%09%20%2A%20callback%20will%20be%20invoked%2E%20Else%2C%20a%20regular%20error%20is%20thrown%2E%0A%09%20%2A%20%40param%20%7BError%7D%20err%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09JSONEditor%2Eprototype%2E%5FonError%20%3D%20function%28err%29%20%7B%0A%09%20%20%2F%2F%20TODO%3A%20onError%20is%20deprecated%20since%20version%202%2E2%2E0%2E%20cleanup%20some%20day%0A%09%20%20if%20%28typeof%20this%2EonError%20%3D%3D%3D%20%27function%27%29%20%7B%0A%09%20%20%20%20util%2Elog%28%27WARNING%3A%20JSONEditor%2EonError%20is%20deprecated%2E%20%27%20%2B%0A%09%20%20%20%20%20%20%20%20%27Use%20options%2Eerror%20instead%2E%27%29%3B%0A%09%20%20%20%20this%2EonError%28err%29%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28this%2Eoptions%20%26%26%20typeof%20this%2Eoptions%2Eerror%20%3D%3D%3D%20%27function%27%29%20%7B%0A%09%20%20%20%20this%2Eoptions%2Eerror%28err%29%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20throw%20err%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Register%20a%20plugin%20with%20one%20ore%20multiple%20modes%20for%20the%20JSON%20Editor%2E%0A%09%20%2A%0A%09%20%2A%20A%20mode%20is%20described%20as%20an%20object%20with%20properties%3A%0A%09%20%2A%0A%09%20%2A%20%2D%20%60mode%3A%20String%60%20%20%20%20%20%20%20%20%20%20%20The%20name%20of%20the%20mode%2E%0A%09%20%2A%20%2D%20%60mixin%3A%20Object%60%20%20%20%20%20%20%20%20%20%20An%20object%20containing%20the%20mixin%20functions%20which%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20will%20be%20added%20to%20the%20JSONEditor%2E%20Must%20contain%20functions%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20create%2C%20get%2C%20getText%2C%20set%2C%20and%20setText%2E%20May%20have%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20additional%20functions%2E%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20When%20the%20JSONEditor%20switches%20to%20a%20mixin%2C%20all%20mixin%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20functions%20are%20added%20to%20the%20JSONEditor%2C%20and%20then%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20the%20function%20%60create%28container%2C%20options%29%60%20is%20executed%2E%0A%09%20%2A%20%2D%20%60data%3A%20%27text%27%20%7C%20%27json%27%60%20%20The%20type%20of%20data%20that%20will%20be%20used%20to%20load%20the%20mixin%2E%0A%09%20%2A%20%2D%20%60%5Bload%3A%20function%5D%60%20%20%20%20%20%20%20An%20optional%20function%20called%20after%20the%20mixin%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20has%20been%20loaded%2E%0A%09%20%2A%0A%09%20%2A%20%40param%20%7BObject%20%7C%20Array%7D%20mode%20%20A%20mode%20object%20or%20an%20array%20with%20multiple%20mode%20objects%2E%0A%09%20%2A%2F%0A%09JSONEditor%2EregisterMode%20%3D%20function%20%28mode%29%20%7B%0A%09%20%20var%20i%2C%20prop%3B%0A%0A%09%20%20if%20%28util%2EisArray%28mode%29%29%20%7B%0A%09%20%20%20%20%2F%2F%20multiple%20modes%0A%09%20%20%20%20for%20%28i%20%3D%200%3B%20i%20%3C%20mode%2Elength%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20JSONEditor%2EregisterMode%28mode%5Bi%5D%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20%2F%2F%20validate%20the%20new%20mode%0A%09%20%20%20%20if%20%28%21%28%27mode%27%20in%20mode%29%29%20throw%20new%20Error%28%27Property%20%22mode%22%20missing%27%29%3B%0A%09%20%20%20%20if%20%28%21%28%27mixin%27%20in%20mode%29%29%20throw%20new%20Error%28%27Property%20%22mixin%22%20missing%27%29%3B%0A%09%20%20%20%20if%20%28%21%28%27data%27%20in%20mode%29%29%20throw%20new%20Error%28%27Property%20%22data%22%20missing%27%29%3B%0A%09%20%20%20%20var%20name%20%3D%20mode%2Emode%3B%0A%09%20%20%20%20if%20%28name%20in%20JSONEditor%2Emodes%29%20%7B%0A%09%20%20%20%20%20%20throw%20new%20Error%28%27Mode%20%22%27%20%2B%20name%20%2B%20%27%22%20already%20registered%27%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20validate%20the%20mixin%0A%09%20%20%20%20if%20%28typeof%20mode%2Emixin%2Ecreate%20%21%3D%3D%20%27function%27%29%20%7B%0A%09%20%20%20%20%20%20throw%20new%20Error%28%27Required%20function%20%22create%22%20missing%20on%20mixin%27%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20var%20reserved%20%3D%20%5B%27setMode%27%2C%20%27registerMode%27%2C%20%27modes%27%5D%3B%0A%09%20%20%20%20for%20%28i%20%3D%200%3B%20i%20%3C%20reserved%2Elength%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20prop%20%3D%20reserved%5Bi%5D%3B%0A%09%20%20%20%20%20%20if%20%28prop%20in%20mode%2Emixin%29%20%7B%0A%09%20%20%20%20%20%20%20%20throw%20new%20Error%28%27Reserved%20property%20%22%27%20%2B%20prop%20%2B%20%27%22%20not%20allowed%20in%20mixin%27%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20JSONEditor%2Emodes%5Bname%5D%20%3D%20mode%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2F%20register%20tree%20and%20text%20modes%0A%09JSONEditor%2EregisterMode%28treemode%29%3B%0A%09JSONEditor%2EregisterMode%28textmode%29%3B%0A%0A%09module%2Eexports%20%3D%20JSONEditor%3B%0A%0A%0A%2F%2A%2A%2A%2F%20%7D%2C%0A%2F%2A%201%20%2A%2F%0A%2F%2A%2A%2A%2F%20function%28module%2C%20exports%2C%20%5F%5Fwebpack%5Frequire%5F%5F%29%20%7B%0A%0A%09var%20Highlighter%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%284%29%3B%0A%09var%20History%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%285%29%3B%0A%09var%20SearchBox%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%286%29%3B%0A%09var%20Node%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%287%29%3B%0A%09var%20modeswitcher%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%288%29%3B%0A%09var%20util%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%283%29%3B%0A%0A%09%2F%2F%20create%20a%20mixin%20with%20the%20functions%20for%20tree%20mode%0A%09var%20treemode%20%3D%20%7B%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Create%20a%20tree%20editor%0A%09%20%2A%20%40param%20%7BElement%7D%20container%20%20%20%20Container%20element%0A%09%20%2A%20%40param%20%7BObject%7D%20%20%5Boptions%5D%20%20%20%20Object%20with%20options%2E%20available%20options%3A%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BString%7D%20mode%20%20%20%20%20%20Editor%20mode%2E%20Available%20values%3A%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27tree%27%20%28default%29%2C%20%27view%27%2C%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20and%20%27form%27%2E%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BBoolean%7D%20search%20%20%20Enable%20search%20box%2E%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20True%20by%20default%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BBoolean%7D%20history%20%20Enable%20history%20%28undo%2Fredo%29%2E%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20True%20by%20default%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bfunction%7D%20change%20%20Callback%20method%2C%20triggered%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20on%20change%20of%20contents%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BString%7D%20name%20%20%20%20%20%20Field%20name%20for%20the%20root%20node%2E%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09treemode%2Ecreate%20%3D%20function%20%28container%2C%20options%29%20%7B%0A%09%20%20if%20%28%21container%29%20%7B%0A%09%20%20%20%20throw%20new%20Error%28%27No%20container%20element%20provided%2E%27%29%3B%0A%09%20%20%7D%0A%09%20%20this%2Econtainer%20%3D%20container%3B%0A%09%20%20this%2Edom%20%3D%20%7B%7D%3B%0A%09%20%20this%2Ehighlighter%20%3D%20new%20Highlighter%28%29%3B%0A%09%20%20this%2Eselection%20%3D%20undefined%3B%20%2F%2F%20will%20hold%20the%20last%20input%20selection%0A%0A%09%20%20this%2E%5FsetOptions%28options%29%3B%0A%0A%09%20%20if%20%28this%2Eoptions%2Ehistory%20%26%26%20this%2Eoptions%2Emode%20%21%3D%3D%20%27view%27%29%20%7B%0A%09%20%20%20%20this%2Ehistory%20%3D%20new%20History%28this%29%3B%0A%09%20%20%7D%0A%0A%09%20%20this%2E%5FcreateFrame%28%29%3B%0A%09%20%20this%2E%5FcreateTable%28%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Detach%20the%20editor%20from%20the%20DOM%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09treemode%2E%5Fdelete%20%3D%20function%20%28%29%20%7B%0A%09%20%20if%20%28this%2Eframe%20%26%26%20this%2Econtainer%20%26%26%20this%2Eframe%2EparentNode%20%3D%3D%20this%2Econtainer%29%20%7B%0A%09%20%20%20%20this%2Econtainer%2EremoveChild%28this%2Eframe%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Initialize%20and%20set%20default%20options%0A%09%20%2A%20%40param%20%7BObject%7D%20%20%5Boptions%5D%20%20%20%20See%20description%20in%20constructor%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09treemode%2E%5FsetOptions%20%3D%20function%20%28options%29%20%7B%0A%09%20%20this%2Eoptions%20%3D%20%7B%0A%09%20%20%20%20search%3A%20true%2C%0A%09%20%20%20%20history%3A%20true%2C%0A%09%20%20%20%20mode%3A%20%27tree%27%2C%0A%09%20%20%20%20name%3A%20undefined%20%20%20%2F%2F%20field%20name%20of%20root%20node%0A%09%20%20%7D%3B%0A%0A%09%20%20%2F%2F%20copy%20all%20options%0A%09%20%20if%20%28options%29%20%7B%0A%09%20%20%20%20for%20%28var%20prop%20in%20options%29%20%7B%0A%09%20%20%20%20%20%20if%20%28options%2EhasOwnProperty%28prop%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Eoptions%5Bprop%5D%20%3D%20options%5Bprop%5D%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2F%20node%20currently%20being%20edited%0A%09var%20focusNode%20%3D%20undefined%3B%0A%0A%09%2F%2F%20dom%20having%20focus%0A%09var%20domFocus%20%3D%20null%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20JSON%20object%20in%20editor%0A%09%20%2A%20%40param%20%7BObject%20%7C%20undefined%7D%20json%20%20%20%20%20%20JSON%20data%0A%09%20%2A%20%40param%20%7BString%7D%20%20%20%20%20%20%20%20%20%20%20%20%20%5Bname%5D%20%20%20%20Optional%20field%20name%20for%20the%20root%20node%2E%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Can%20also%20be%20set%20using%20setName%28name%29%2E%0A%09%20%2A%2F%0A%09treemode%2Eset%20%3D%20function%20%28json%2C%20name%29%20%7B%0A%09%20%20%2F%2F%20adjust%20field%20name%20for%20root%20node%0A%09%20%20if%20%28name%29%20%7B%0A%09%20%20%20%20%2F%2F%20TODO%3A%20deprecated%20since%20version%202%2E2%2E0%2E%20Cleanup%20some%20day%2E%0A%09%20%20%20%20util%2Elog%28%27Warning%3A%20second%20parameter%20%22name%22%20is%20deprecated%2E%20%27%20%2B%0A%09%20%20%20%20%20%20%20%20%27Use%20setName%28name%29%20instead%2E%27%29%3B%0A%09%20%20%20%20this%2Eoptions%2Ename%20%3D%20name%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20verify%20if%20json%20is%20valid%20JSON%2C%20ignore%20when%20a%20function%0A%09%20%20if%20%28json%20instanceof%20Function%20%7C%7C%20%28json%20%3D%3D%3D%20undefined%29%29%20%7B%0A%09%20%20%20%20this%2Eclear%28%29%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20this%2Econtent%2EremoveChild%28this%2Etable%29%3B%20%20%2F%2F%20Take%20the%20table%20offline%0A%0A%09%20%20%20%20%2F%2F%20replace%20the%20root%20node%0A%09%20%20%20%20var%20params%20%3D%20%7B%0A%09%20%20%20%20%20%20%27field%27%3A%20this%2Eoptions%2Ename%2C%0A%09%20%20%20%20%20%20%27value%27%3A%20json%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20var%20node%20%3D%20new%20Node%28this%2C%20params%29%3B%0A%09%20%20%20%20this%2E%5FsetRoot%28node%29%3B%0A%0A%09%20%20%20%20%2F%2F%20expand%0A%09%20%20%20%20var%20recurse%20%3D%20false%3B%0A%09%20%20%20%20this%2Enode%2Eexpand%28recurse%29%3B%0A%0A%09%20%20%20%20this%2Econtent%2EappendChild%28this%2Etable%29%3B%20%20%2F%2F%20Put%20the%20table%20online%20again%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20TODO%3A%20maintain%20history%2C%20store%20last%20state%20and%20previous%20document%0A%09%20%20if%20%28this%2Ehistory%29%20%7B%0A%09%20%20%20%20this%2Ehistory%2Eclear%28%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20JSON%20object%20from%20editor%0A%09%20%2A%20%40return%20%7BObject%20%7C%20undefined%7D%20json%0A%09%20%2A%2F%0A%09treemode%2Eget%20%3D%20function%20%28%29%20%7B%0A%09%20%20%2F%2F%20remove%20focus%20from%20currently%20edited%20node%0A%09%20%20if%20%28focusNode%29%20%7B%0A%09%20%20%20%20focusNode%2Eblur%28%29%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28this%2Enode%29%20%7B%0A%09%20%20%20%20return%20this%2Enode%2EgetValue%28%29%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20return%20undefined%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20the%20text%20contents%20of%20the%20editor%0A%09%20%2A%20%40return%20%7BString%7D%20jsonText%0A%09%20%2A%2F%0A%09treemode%2EgetText%20%3D%20function%28%29%20%7B%0A%09%20%20return%20JSON%2Estringify%28this%2Eget%28%29%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20the%20text%20contents%20of%20the%20editor%0A%09%20%2A%20%40param%20%7BString%7D%20jsonText%0A%09%20%2A%2F%0A%09treemode%2EsetText%20%3D%20function%28jsonText%29%20%7B%0A%09%20%20this%2Eset%28util%2Eparse%28jsonText%29%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20a%20field%20name%20for%20the%20root%20node%2E%0A%09%20%2A%20%40param%20%7BString%20%7C%20undefined%7D%20name%0A%09%20%2A%2F%0A%09treemode%2EsetName%20%3D%20function%20%28name%29%20%7B%0A%09%20%20this%2Eoptions%2Ename%20%3D%20name%3B%0A%09%20%20if%20%28this%2Enode%29%20%7B%0A%09%20%20%20%20this%2Enode%2EupdateField%28this%2Eoptions%2Ename%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20the%20field%20name%20for%20the%20root%20node%2E%0A%09%20%2A%20%40return%20%7BString%20%7C%20undefined%7D%20name%0A%09%20%2A%2F%0A%09treemode%2EgetName%20%3D%20function%20%28%29%20%7B%0A%09%20%20return%20this%2Eoptions%2Ename%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20focus%20to%20the%20editor%2E%20Focus%20will%20be%20set%20to%3A%0A%09%20%2A%20%2D%20the%20first%20editable%20field%20or%20value%2C%20or%20else%0A%09%20%2A%20%2D%20to%20the%20expand%20button%20of%20the%20root%20node%2C%20or%20else%0A%09%20%2A%20%2D%20to%20the%20context%20menu%20button%20of%20the%20root%20node%2C%20or%20else%0A%09%20%2A%20%2D%20to%20the%20first%20button%20in%20the%20top%20menu%0A%09%20%2A%2F%0A%09treemode%2Efocus%20%3D%20function%20%28%29%20%7B%0A%09%20%20var%20input%20%3D%20this%2Econtent%2EquerySelector%28%27%5Bcontenteditable%3Dtrue%5D%27%29%3B%0A%09%20%20if%20%28input%29%20%7B%0A%09%20%20%20%20input%2Efocus%28%29%3B%0A%09%20%20%7D%0A%09%20%20else%20if%20%28this%2Enode%2Edom%2Eexpand%29%20%7B%0A%09%20%20%20%20this%2Enode%2Edom%2Eexpand%2Efocus%28%29%3B%0A%09%20%20%7D%0A%09%20%20else%20if%20%28this%2Enode%2Edom%2Emenu%29%20%7B%0A%09%20%20%20%20this%2Enode%2Edom%2Emenu%2Efocus%28%29%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20%2F%2F%20focus%20to%20the%20first%20button%20in%20the%20menu%0A%09%20%20%20%20input%20%3D%20this%2Eframe%2EquerySelector%28%27button%27%29%3B%0A%09%20%20%20%20if%20%28input%29%20%7B%0A%09%20%20%20%20%20%20input%2Efocus%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Remove%20the%20root%20node%20from%20the%20editor%0A%09%20%2A%2F%0A%09treemode%2Eclear%20%3D%20function%20%28%29%20%7B%0A%09%20%20if%20%28this%2Enode%29%20%7B%0A%09%20%20%20%20this%2Enode%2Ecollapse%28%29%3B%0A%09%20%20%20%20this%2Etbody%2EremoveChild%28this%2Enode%2EgetDom%28%29%29%3B%0A%09%20%20%20%20delete%20this%2Enode%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20the%20root%20node%20for%20the%20json%20editor%0A%09%20%2A%20%40param%20%7BNode%7D%20node%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09treemode%2E%5FsetRoot%20%3D%20function%20%28node%29%20%7B%0A%09%20%20this%2Eclear%28%29%3B%0A%0A%09%20%20this%2Enode%20%3D%20node%3B%0A%0A%09%20%20%2F%2F%20append%20to%20the%20dom%0A%09%20%20this%2Etbody%2EappendChild%28node%2EgetDom%28%29%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Search%20text%20in%20all%20nodes%0A%09%20%2A%20The%20nodes%20will%20be%20expanded%20when%20the%20text%20is%20found%20one%20of%20its%20childs%2C%0A%09%20%2A%20else%20it%20will%20be%20collapsed%2E%20Searches%20are%20case%20insensitive%2E%0A%09%20%2A%20%40param%20%7BString%7D%20text%0A%09%20%2A%20%40return%20%7BObject%5B%5D%7D%20results%20%20Array%20with%20nodes%20containing%20the%20search%20results%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20The%20result%20objects%20contains%20fields%3A%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2D%20%7BNode%7D%20node%2C%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2D%20%7BString%7D%20elem%20%20the%20dom%20element%20name%20where%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20the%20result%20is%20found%20%28%27field%27%20or%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27value%27%29%0A%09%20%2A%2F%0A%09treemode%2Esearch%20%3D%20function%20%28text%29%20%7B%0A%09%20%20var%20results%3B%0A%09%20%20if%20%28this%2Enode%29%20%7B%0A%09%20%20%20%20this%2Econtent%2EremoveChild%28this%2Etable%29%3B%20%20%2F%2F%20Take%20the%20table%20offline%0A%09%20%20%20%20results%20%3D%20this%2Enode%2Esearch%28text%29%3B%0A%09%20%20%20%20this%2Econtent%2EappendChild%28this%2Etable%29%3B%20%20%2F%2F%20Put%20the%20table%20online%20again%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20results%20%3D%20%5B%5D%3B%0A%09%20%20%7D%0A%0A%09%20%20return%20results%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Expand%20all%20nodes%0A%09%20%2A%2F%0A%09treemode%2EexpandAll%20%3D%20function%20%28%29%20%7B%0A%09%20%20if%20%28this%2Enode%29%20%7B%0A%09%20%20%20%20this%2Econtent%2EremoveChild%28this%2Etable%29%3B%20%20%2F%2F%20Take%20the%20table%20offline%0A%09%20%20%20%20this%2Enode%2Eexpand%28%29%3B%0A%09%20%20%20%20this%2Econtent%2EappendChild%28this%2Etable%29%3B%20%20%2F%2F%20Put%20the%20table%20online%20again%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Collapse%20all%20nodes%0A%09%20%2A%2F%0A%09treemode%2EcollapseAll%20%3D%20function%20%28%29%20%7B%0A%09%20%20if%20%28this%2Enode%29%20%7B%0A%09%20%20%20%20this%2Econtent%2EremoveChild%28this%2Etable%29%3B%20%20%2F%2F%20Take%20the%20table%20offline%0A%09%20%20%20%20this%2Enode%2Ecollapse%28%29%3B%0A%09%20%20%20%20this%2Econtent%2EappendChild%28this%2Etable%29%3B%20%20%2F%2F%20Put%20the%20table%20online%20again%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20The%20method%20onChange%20is%20called%20whenever%20a%20field%20or%20value%20is%20changed%2C%20created%2C%0A%09%20%2A%20deleted%2C%20duplicated%2C%20etc%2E%0A%09%20%2A%20%40param%20%7BString%7D%20action%20%20Change%20action%2E%20Available%20values%3A%20%22editField%22%2C%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22editValue%22%2C%20%22changeType%22%2C%20%22appendNode%22%2C%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22removeNode%22%2C%20%22duplicateNode%22%2C%20%22moveNode%22%2C%20%22expand%22%2C%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22collapse%22%2E%0A%09%20%2A%20%40param%20%7BObject%7D%20params%20%20Object%20containing%20parameters%20describing%20the%20change%2E%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20The%20parameters%20in%20params%20depend%20on%20the%20action%20%28for%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20example%20for%20%22editValue%22%20the%20Node%2C%20old%20value%2C%20and%20new%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%20are%20provided%29%2E%20params%20contains%20all%20information%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20needed%20to%20undo%20or%20redo%20the%20action%2E%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09treemode%2E%5FonAction%20%3D%20function%20%28action%2C%20params%29%20%7B%0A%09%20%20%2F%2F%20add%20an%20action%20to%20the%20history%0A%09%20%20if%20%28this%2Ehistory%29%20%7B%0A%09%20%20%20%20this%2Ehistory%2Eadd%28action%2C%20params%29%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20trigger%20the%20onChange%20callback%0A%09%20%20if%20%28this%2Eoptions%2Echange%29%20%7B%0A%09%20%20%20%20try%20%7B%0A%09%20%20%20%20%20%20this%2Eoptions%2Echange%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20catch%20%28err%29%20%7B%0A%09%20%20%20%20%20%20util%2Elog%28%27Error%20in%20change%20callback%3A%20%27%2C%20err%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Start%20autoscrolling%20when%20given%20mouse%20position%20is%20above%20the%20top%20of%20the%0A%09%20%2A%20editor%20contents%2C%20or%20below%20the%20bottom%2E%0A%09%20%2A%20%40param%20%7BNumber%7D%20mouseY%20%20Absolute%20mouse%20position%20in%20pixels%0A%09%20%2A%2F%0A%09treemode%2EstartAutoScroll%20%3D%20function%20%28mouseY%29%20%7B%0A%09%20%20var%20me%20%3D%20this%3B%0A%09%20%20var%20content%20%3D%20this%2Econtent%3B%0A%09%20%20var%20top%20%3D%20util%2EgetAbsoluteTop%28content%29%3B%0A%09%20%20var%20height%20%3D%20content%2EclientHeight%3B%0A%09%20%20var%20bottom%20%3D%20top%20%2B%20height%3B%0A%09%20%20var%20margin%20%3D%2024%3B%0A%09%20%20var%20interval%20%3D%2050%3B%20%2F%2F%20ms%0A%0A%09%20%20if%20%28%28mouseY%20%3C%20top%20%2B%20margin%29%20%26%26%20content%2EscrollTop%20%3E%200%29%20%7B%0A%09%20%20%20%20this%2EautoScrollStep%20%3D%20%28%28top%20%2B%20margin%29%20%2D%20mouseY%29%20%2F%203%3B%0A%09%20%20%7D%0A%09%20%20else%20if%20%28mouseY%20%3E%20bottom%20%2D%20margin%20%26%26%0A%09%20%20%20%20%20%20height%20%2B%20content%2EscrollTop%20%3C%20content%2EscrollHeight%29%20%7B%0A%09%20%20%20%20this%2EautoScrollStep%20%3D%20%28%28bottom%20%2D%20margin%29%20%2D%20mouseY%29%20%2F%203%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20this%2EautoScrollStep%20%3D%20undefined%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28this%2EautoScrollStep%29%20%7B%0A%09%20%20%20%20if%20%28%21this%2EautoScrollTimer%29%20%7B%0A%09%20%20%20%20%20%20this%2EautoScrollTimer%20%3D%20setInterval%28function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28me%2EautoScrollStep%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20content%2EscrollTop%20%2D%3D%20me%2EautoScrollStep%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20me%2EstopAutoScroll%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%7D%2C%20interval%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20this%2EstopAutoScroll%28%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Stop%20auto%20scrolling%2E%20Only%20applicable%20when%20scrolling%0A%09%20%2A%2F%0A%09treemode%2EstopAutoScroll%20%3D%20function%20%28%29%20%7B%0A%09%20%20if%20%28this%2EautoScrollTimer%29%20%7B%0A%09%20%20%20%20clearTimeout%28this%2EautoScrollTimer%29%3B%0A%09%20%20%20%20delete%20this%2EautoScrollTimer%3B%0A%09%20%20%7D%0A%09%20%20if%20%28this%2EautoScrollStep%29%20%7B%0A%09%20%20%20%20delete%20this%2EautoScrollStep%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20the%20focus%20to%20an%20element%20in%20the%20editor%2C%20set%20text%20selection%2C%20and%0A%09%20%2A%20set%20scroll%20position%2E%0A%09%20%2A%20%40param%20%7BObject%7D%20selection%20%20An%20object%20containing%20fields%3A%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BElement%20%7C%20undefined%7D%20dom%20%20%20%20%20The%20dom%20element%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20which%20has%20focus%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BRange%20%7C%20TextRange%7D%20range%20%20%20%20%20A%20text%20selection%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BNumber%7D%20scrollTop%20%20%20%20%20%20%20%20%20%20%20%20Scroll%20position%0A%09%20%2A%2F%0A%09treemode%2EsetSelection%20%3D%20function%20%28selection%29%20%7B%0A%09%20%20if%20%28%21selection%29%20%7B%0A%09%20%20%20%20return%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28%27scrollTop%27%20in%20selection%20%26%26%20this%2Econtent%29%20%7B%0A%09%20%20%20%20%2F%2F%20TODO%3A%20animated%20scroll%0A%09%20%20%20%20this%2Econtent%2EscrollTop%20%3D%20selection%2EscrollTop%3B%0A%09%20%20%7D%0A%09%20%20if%20%28selection%2Erange%29%20%7B%0A%09%20%20%20%20util%2EsetSelectionOffset%28selection%2Erange%29%3B%0A%09%20%20%7D%0A%09%20%20if%20%28selection%2Edom%29%20%7B%0A%09%20%20%20%20selection%2Edom%2Efocus%28%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20the%20current%20focus%0A%09%20%2A%20%40return%20%7BObject%7D%20selection%20An%20object%20containing%20fields%3A%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BElement%20%7C%20undefined%7D%20dom%20%20%20%20%20The%20dom%20element%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20which%20has%20focus%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BRange%20%7C%20TextRange%7D%20range%20%20%20%20%20A%20text%20selection%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BNumber%7D%20scrollTop%20%20%20%20%20%20%20%20%20%20%20%20Scroll%20position%0A%09%20%2A%2F%0A%09treemode%2EgetSelection%20%3D%20function%20%28%29%20%7B%0A%09%20%20return%20%7B%0A%09%20%20%20%20dom%3A%20domFocus%2C%0A%09%20%20%20%20scrollTop%3A%20this%2Econtent%20%3F%20this%2Econtent%2EscrollTop%20%3A%200%2C%0A%09%20%20%20%20range%3A%20util%2EgetSelectionOffset%28%29%0A%09%20%20%7D%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Adjust%20the%20scroll%20position%20such%20that%20given%20top%20position%20is%20shown%20at%201%2F4%0A%09%20%2A%20of%20the%20window%20height%2E%0A%09%20%2A%20%40param%20%7BNumber%7D%20top%0A%09%20%2A%20%40param%20%7Bfunction%28boolean%29%7D%20%5Bcallback%5D%20%20%20Callback%2C%20executed%20when%20animation%20is%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20finished%2E%20The%20callback%20returns%20true%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20when%20animation%20is%20finished%2C%20or%20false%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20when%20not%2E%0A%09%20%2A%2F%0A%09treemode%2EscrollTo%20%3D%20function%20%28top%2C%20callback%29%20%7B%0A%09%20%20var%20content%20%3D%20this%2Econtent%3B%0A%09%20%20if%20%28content%29%20%7B%0A%09%20%20%20%20var%20editor%20%3D%20this%3B%0A%09%20%20%20%20%2F%2F%20cancel%20any%20running%20animation%0A%09%20%20%20%20if%20%28editor%2EanimateTimeout%29%20%7B%0A%09%20%20%20%20%20%20clearTimeout%28editor%2EanimateTimeout%29%3B%0A%09%20%20%20%20%20%20delete%20editor%2EanimateTimeout%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20if%20%28editor%2EanimateCallback%29%20%7B%0A%09%20%20%20%20%20%20editor%2EanimateCallback%28false%29%3B%0A%09%20%20%20%20%20%20delete%20editor%2EanimateCallback%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20calculate%20final%20scroll%20position%0A%09%20%20%20%20var%20height%20%3D%20content%2EclientHeight%3B%0A%09%20%20%20%20var%20bottom%20%3D%20content%2EscrollHeight%20%2D%20height%3B%0A%09%20%20%20%20var%20finalScrollTop%20%3D%20Math%2Emin%28Math%2Emax%28top%20%2D%20height%20%2F%204%2C%200%29%2C%20bottom%29%3B%0A%0A%09%20%20%20%20%2F%2F%20animate%20towards%20the%20new%20scroll%20position%0A%09%20%20%20%20var%20animate%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20var%20scrollTop%20%3D%20content%2EscrollTop%3B%0A%09%20%20%20%20%20%20var%20diff%20%3D%20%28finalScrollTop%20%2D%20scrollTop%29%3B%0A%09%20%20%20%20%20%20if%20%28Math%2Eabs%28diff%29%20%3E%203%29%20%7B%0A%09%20%20%20%20%20%20%20%20content%2EscrollTop%20%2B%3D%20diff%20%2F%203%3B%0A%09%20%20%20%20%20%20%20%20editor%2EanimateCallback%20%3D%20callback%3B%0A%09%20%20%20%20%20%20%20%20editor%2EanimateTimeout%20%3D%20setTimeout%28animate%2C%2050%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%2F%2F%20finished%0A%09%20%20%20%20%20%20%20%20if%20%28callback%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20callback%28true%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20content%2EscrollTop%20%3D%20finalScrollTop%3B%0A%09%20%20%20%20%20%20%20%20delete%20editor%2EanimateTimeout%3B%0A%09%20%20%20%20%20%20%20%20delete%20editor%2EanimateCallback%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20animate%28%29%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20if%20%28callback%29%20%7B%0A%09%20%20%20%20%20%20callback%28false%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Create%20main%20frame%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09treemode%2E%5FcreateFrame%20%3D%20function%20%28%29%20%7B%0A%09%20%20%2F%2F%20create%20the%20frame%0A%09%20%20this%2Eframe%20%3D%20document%2EcreateElement%28%27div%27%29%3B%0A%09%20%20this%2Eframe%2EclassName%20%3D%20%27jsoneditor%27%3B%0A%09%20%20this%2Econtainer%2EappendChild%28this%2Eframe%29%3B%0A%0A%09%20%20%2F%2F%20create%20one%20global%20event%20listener%20to%20handle%20all%20events%20from%20all%20nodes%0A%09%20%20var%20editor%20%3D%20this%3B%0A%09%20%20function%20onEvent%28event%29%20%7B%0A%09%20%20%20%20editor%2E%5FonEvent%28event%29%3B%0A%09%20%20%7D%0A%09%20%20this%2Eframe%2Eonclick%20%3D%20function%20%28event%29%20%7B%0A%09%20%20%20%20var%20target%20%3D%20event%2Etarget%3B%2F%2F%20%7C%7C%20event%2EsrcElement%3B%0A%0A%09%20%20%20%20onEvent%28event%29%3B%0A%0A%09%20%20%20%20%2F%2F%20prevent%20default%20submit%20action%20of%20buttons%20when%20editor%20is%20located%0A%09%20%20%20%20%2F%2F%20inside%20a%20form%0A%09%20%20%20%20if%20%28target%2EnodeName%20%3D%3D%20%27BUTTON%27%29%20%7B%0A%09%20%20%20%20%20%20event%2EpreventDefault%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%3B%0A%09%20%20this%2Eframe%2Eoninput%20%3D%20onEvent%3B%0A%09%20%20this%2Eframe%2Eonchange%20%3D%20onEvent%3B%0A%09%20%20this%2Eframe%2Eonkeydown%20%3D%20onEvent%3B%0A%09%20%20this%2Eframe%2Eonkeyup%20%3D%20onEvent%3B%0A%09%20%20this%2Eframe%2Eoncut%20%3D%20onEvent%3B%0A%09%20%20this%2Eframe%2Eonpaste%20%3D%20onEvent%3B%0A%09%20%20this%2Eframe%2Eonmousedown%20%3D%20onEvent%3B%0A%09%20%20this%2Eframe%2Eonmouseup%20%3D%20onEvent%3B%0A%09%20%20this%2Eframe%2Eonmouseover%20%3D%20onEvent%3B%0A%09%20%20this%2Eframe%2Eonmouseout%20%3D%20onEvent%3B%0A%09%20%20%2F%2F%20Note%3A%20focus%20and%20blur%20events%20do%20not%20propagate%2C%20therefore%20they%20defined%0A%09%20%20%2F%2F%20using%20an%20eventListener%20with%20useCapture%3Dtrue%0A%09%20%20%2F%2F%20see%20http%3A%2F%2Fwww%2Equirksmode%2Eorg%2Fblog%2Farchives%2F2008%2F04%2Fdelegating%5Fthe%2Ehtml%0A%09%20%20util%2EaddEventListener%28this%2Eframe%2C%20%27focus%27%2C%20onEvent%2C%20true%29%3B%0A%09%20%20util%2EaddEventListener%28this%2Eframe%2C%20%27blur%27%2C%20onEvent%2C%20true%29%3B%0A%09%20%20this%2Eframe%2Eonfocusin%20%3D%20onEvent%3B%20%20%2F%2F%20for%20IE%0A%09%20%20this%2Eframe%2Eonfocusout%20%3D%20onEvent%3B%20%2F%2F%20for%20IE%0A%0A%09%20%20%2F%2F%20create%20menu%0A%09%20%20this%2Emenu%20%3D%20document%2EcreateElement%28%27div%27%29%3B%0A%09%20%20this%2Emenu%2EclassName%20%3D%20%27menu%27%3B%0A%09%20%20this%2Eframe%2EappendChild%28this%2Emenu%29%3B%0A%0A%09%20%20%2F%2F%20create%20expand%20all%20button%0A%09%20%20var%20expandAll%20%3D%20document%2EcreateElement%28%27button%27%29%3B%0A%09%20%20expandAll%2EclassName%20%3D%20%27expand%2Dall%27%3B%0A%09%20%20expandAll%2Etitle%20%3D%20%27Expand%20all%20fields%27%3B%0A%09%20%20expandAll%2Eonclick%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20editor%2EexpandAll%28%29%3B%0A%09%20%20%7D%3B%0A%09%20%20this%2Emenu%2EappendChild%28expandAll%29%3B%0A%0A%09%20%20%2F%2F%20create%20expand%20all%20button%0A%09%20%20var%20collapseAll%20%3D%20document%2EcreateElement%28%27button%27%29%3B%0A%09%20%20collapseAll%2Etitle%20%3D%20%27Collapse%20all%20fields%27%3B%0A%09%20%20collapseAll%2EclassName%20%3D%20%27collapse%2Dall%27%3B%0A%09%20%20collapseAll%2Eonclick%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20editor%2EcollapseAll%28%29%3B%0A%09%20%20%7D%3B%0A%09%20%20this%2Emenu%2EappendChild%28collapseAll%29%3B%0A%0A%09%20%20%2F%2F%20create%20undo%2Fredo%20buttons%0A%09%20%20if%20%28this%2Ehistory%29%20%7B%0A%09%20%20%20%20%2F%2F%20create%20undo%20button%0A%09%20%20%20%20var%20undo%20%3D%20document%2EcreateElement%28%27button%27%29%3B%0A%09%20%20%20%20undo%2EclassName%20%3D%20%27undo%20separator%27%3B%0A%09%20%20%20%20undo%2Etitle%20%3D%20%27Undo%20last%20action%20%28Ctrl%2BZ%29%27%3B%0A%09%20%20%20%20undo%2Eonclick%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20editor%2E%5FonUndo%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2Emenu%2EappendChild%28undo%29%3B%0A%09%20%20%20%20this%2Edom%2Eundo%20%3D%20undo%3B%0A%0A%09%20%20%20%20%2F%2F%20create%20redo%20button%0A%09%20%20%20%20var%20redo%20%3D%20document%2EcreateElement%28%27button%27%29%3B%0A%09%20%20%20%20redo%2EclassName%20%3D%20%27redo%27%3B%0A%09%20%20%20%20redo%2Etitle%20%3D%20%27Redo%20%28Ctrl%2BShift%2BZ%29%27%3B%0A%09%20%20%20%20redo%2Eonclick%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20editor%2E%5FonRedo%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2Emenu%2EappendChild%28redo%29%3B%0A%09%20%20%20%20this%2Edom%2Eredo%20%3D%20redo%3B%0A%0A%09%20%20%20%20%2F%2F%20register%20handler%20for%20onchange%20of%20history%0A%09%20%20%20%20this%2Ehistory%2EonChange%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20undo%2Edisabled%20%3D%20%21editor%2Ehistory%2EcanUndo%28%29%3B%0A%09%20%20%20%20%20%20redo%2Edisabled%20%3D%20%21editor%2Ehistory%2EcanRedo%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2Ehistory%2EonChange%28%29%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20create%20mode%20box%0A%09%20%20if%20%28this%2Eoptions%20%26%26%20this%2Eoptions%2Emodes%20%26%26%20this%2Eoptions%2Emodes%2Elength%29%20%7B%0A%09%20%20%20%20var%20modeBox%20%3D%20modeswitcher%2Ecreate%28this%2C%20this%2Eoptions%2Emodes%2C%20this%2Eoptions%2Emode%29%3B%0A%09%20%20%20%20this%2Emenu%2EappendChild%28modeBox%29%3B%0A%09%20%20%20%20this%2Edom%2EmodeBox%20%3D%20modeBox%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20create%20search%20box%0A%09%20%20if%20%28this%2Eoptions%2Esearch%29%20%7B%0A%09%20%20%20%20this%2EsearchBox%20%3D%20new%20SearchBox%28this%2C%20this%2Emenu%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Perform%20an%20undo%20action%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09treemode%2E%5FonUndo%20%3D%20function%20%28%29%20%7B%0A%09%20%20if%20%28this%2Ehistory%29%20%7B%0A%09%20%20%20%20%2F%2F%20undo%20last%20action%0A%09%20%20%20%20this%2Ehistory%2Eundo%28%29%3B%0A%0A%09%20%20%20%20%2F%2F%20trigger%20change%20callback%0A%09%20%20%20%20if%20%28this%2Eoptions%2Echange%29%20%7B%0A%09%20%20%20%20%20%20this%2Eoptions%2Echange%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Perform%20a%20redo%20action%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09treemode%2E%5FonRedo%20%3D%20function%20%28%29%20%7B%0A%09%20%20if%20%28this%2Ehistory%29%20%7B%0A%09%20%20%20%20%2F%2F%20redo%20last%20action%0A%09%20%20%20%20this%2Ehistory%2Eredo%28%29%3B%0A%0A%09%20%20%20%20%2F%2F%20trigger%20change%20callback%0A%09%20%20%20%20if%20%28this%2Eoptions%2Echange%29%20%7B%0A%09%20%20%20%20%20%20this%2Eoptions%2Echange%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Event%20handler%0A%09%20%2A%20%40param%20event%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09treemode%2E%5FonEvent%20%3D%20function%20%28event%29%20%7B%0A%09%20%20var%20target%20%3D%20event%2Etarget%3B%0A%0A%09%20%20if%20%28event%2Etype%20%3D%3D%20%27keydown%27%29%20%7B%0A%09%20%20%20%20this%2E%5FonKeyDown%28event%29%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28event%2Etype%20%3D%3D%20%27focus%27%29%20%7B%0A%09%20%20%20%20domFocus%20%3D%20target%3B%0A%09%20%20%7D%0A%0A%09%20%20var%20node%20%3D%20Node%2EgetNodeFromTarget%28target%29%3B%0A%09%20%20if%20%28node%29%20%7B%0A%09%20%20%20%20node%2EonEvent%28event%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Event%20handler%20for%20keydown%2E%20Handles%20shortcut%20keys%0A%09%20%2A%20%40param%20%7BEvent%7D%20event%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09treemode%2E%5FonKeyDown%20%3D%20function%20%28event%29%20%7B%0A%09%20%20var%20keynum%20%3D%20event%2Ewhich%20%7C%7C%20event%2EkeyCode%3B%0A%09%20%20var%20ctrlKey%20%3D%20event%2EctrlKey%3B%0A%09%20%20var%20shiftKey%20%3D%20event%2EshiftKey%3B%0A%09%20%20var%20handled%20%3D%20false%3B%0A%0A%09%20%20if%20%28keynum%20%3D%3D%209%29%20%7B%20%2F%2F%20Tab%20or%20Shift%2BTab%0A%09%20%20%20%20setTimeout%28function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20select%20all%20text%20when%20moving%20focus%20to%20an%20editable%20div%0A%09%20%20%20%20%20%20util%2EselectContentEditable%28domFocus%29%3B%0A%09%20%20%20%20%7D%2C%200%29%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28this%2EsearchBox%29%20%7B%0A%09%20%20%20%20if%20%28ctrlKey%20%26%26%20keynum%20%3D%3D%2070%29%20%7B%20%2F%2F%20Ctrl%2BF%0A%09%20%20%20%20%20%20this%2EsearchBox%2Edom%2Esearch%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20this%2EsearchBox%2Edom%2Esearch%2Eselect%28%29%3B%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28keynum%20%3D%3D%20114%20%7C%7C%20%28ctrlKey%20%26%26%20keynum%20%3D%3D%2071%29%29%20%7B%20%2F%2F%20F3%20or%20Ctrl%2BG%0A%09%20%20%20%20%20%20var%20focus%20%3D%20true%3B%0A%09%20%20%20%20%20%20if%20%28%21shiftKey%29%20%7B%0A%09%20%20%20%20%20%20%20%20%2F%2F%20select%20next%20search%20result%20%28F3%20or%20Ctrl%2BG%29%0A%09%20%20%20%20%20%20%20%20this%2EsearchBox%2Enext%28focus%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%2F%2F%20select%20previous%20search%20result%20%28Shift%2BF3%20or%20Ctrl%2BShift%2BG%29%0A%09%20%20%20%20%20%20%20%20this%2EsearchBox%2Eprevious%28focus%29%3B%0A%09%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20if%20%28this%2Ehistory%29%20%7B%0A%09%20%20%20%20if%20%28ctrlKey%20%26%26%20%21shiftKey%20%26%26%20keynum%20%3D%3D%2090%29%20%7B%20%2F%2F%20Ctrl%2BZ%0A%09%20%20%20%20%20%20%2F%2F%20undo%0A%09%20%20%20%20%20%20this%2E%5FonUndo%28%29%3B%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28ctrlKey%20%26%26%20shiftKey%20%26%26%20keynum%20%3D%3D%2090%29%20%7B%20%2F%2F%20Ctrl%2BShift%2BZ%0A%09%20%20%20%20%20%20%2F%2F%20redo%0A%09%20%20%20%20%20%20this%2E%5FonRedo%28%29%3B%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20if%20%28handled%29%20%7B%0A%09%20%20%20%20event%2EpreventDefault%28%29%3B%0A%09%20%20%20%20event%2EstopPropagation%28%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Create%20main%20table%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09treemode%2E%5FcreateTable%20%3D%20function%20%28%29%20%7B%0A%09%20%20var%20contentOuter%20%3D%20document%2EcreateElement%28%27div%27%29%3B%0A%09%20%20contentOuter%2EclassName%20%3D%20%27outer%27%3B%0A%09%20%20this%2EcontentOuter%20%3D%20contentOuter%3B%0A%0A%09%20%20this%2Econtent%20%3D%20document%2EcreateElement%28%27div%27%29%3B%0A%09%20%20this%2Econtent%2EclassName%20%3D%20%27tree%27%3B%0A%09%20%20contentOuter%2EappendChild%28this%2Econtent%29%3B%0A%0A%09%20%20this%2Etable%20%3D%20document%2EcreateElement%28%27table%27%29%3B%0A%09%20%20this%2Etable%2EclassName%20%3D%20%27tree%27%3B%0A%09%20%20this%2Econtent%2EappendChild%28this%2Etable%29%3B%0A%0A%09%20%20%2F%2F%20create%20colgroup%20where%20the%20first%20two%20columns%20don%27t%20have%20a%20fixed%0A%09%20%20%2F%2F%20width%2C%20and%20the%20edit%20columns%20do%20have%20a%20fixed%20width%0A%09%20%20var%20col%3B%0A%09%20%20this%2EcolgroupContent%20%3D%20document%2EcreateElement%28%27colgroup%27%29%3B%0A%09%20%20if%20%28this%2Eoptions%2Emode%20%3D%3D%3D%20%27tree%27%29%20%7B%0A%09%20%20%20%20col%20%3D%20document%2EcreateElement%28%27col%27%29%3B%0A%09%20%20%20%20col%2Ewidth%20%3D%20%2224px%22%3B%0A%09%20%20%20%20this%2EcolgroupContent%2EappendChild%28col%29%3B%0A%09%20%20%7D%0A%09%20%20col%20%3D%20document%2EcreateElement%28%27col%27%29%3B%0A%09%20%20col%2Ewidth%20%3D%20%2224px%22%3B%0A%09%20%20this%2EcolgroupContent%2EappendChild%28col%29%3B%0A%09%20%20col%20%3D%20document%2EcreateElement%28%27col%27%29%3B%0A%09%20%20this%2EcolgroupContent%2EappendChild%28col%29%3B%0A%09%20%20this%2Etable%2EappendChild%28this%2EcolgroupContent%29%3B%0A%0A%09%20%20this%2Etbody%20%3D%20document%2EcreateElement%28%27tbody%27%29%3B%0A%09%20%20this%2Etable%2EappendChild%28this%2Etbody%29%3B%0A%0A%09%20%20this%2Eframe%2EappendChild%28contentOuter%29%3B%0A%09%7D%3B%0A%0A%09%2F%2F%20define%20modes%0A%09module%2Eexports%20%3D%20%5B%0A%09%20%20%7B%0A%09%20%20%20%20mode%3A%20%27tree%27%2C%0A%09%20%20%20%20mixin%3A%20treemode%2C%0A%09%20%20%20%20data%3A%20%27json%27%0A%09%20%20%7D%2C%0A%09%20%20%7B%0A%09%20%20%20%20mode%3A%20%27view%27%2C%0A%09%20%20%20%20mixin%3A%20treemode%2C%0A%09%20%20%20%20data%3A%20%27json%27%0A%09%20%20%7D%2C%0A%09%20%20%7B%0A%09%20%20%20%20mode%3A%20%27form%27%2C%0A%09%20%20%20%20mixin%3A%20treemode%2C%0A%09%20%20%20%20data%3A%20%27json%27%0A%09%20%20%7D%0A%09%5D%3B%0A%0A%2F%2A%2A%2A%2F%20%7D%2C%0A%2F%2A%202%20%2A%2F%0A%2F%2A%2A%2A%2F%20function%28module%2C%20exports%2C%20%5F%5Fwebpack%5Frequire%5F%5F%29%20%7B%0A%0A%09var%20ace%3B%0A%09try%20%7B%0A%09%20%20ace%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%289%29%3B%0A%09%7D%0A%09catch%20%28err%29%20%7B%0A%09%20%20%2F%2F%20failed%20to%20load%20ace%2C%20no%20problem%2C%20we%20will%20fall%20back%20to%20plain%20text%0A%09%7D%0A%0A%09var%20modeswitcher%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%288%29%3B%0A%09var%20util%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%283%29%3B%0A%0A%09%2F%2F%20create%20a%20mixin%20with%20the%20functions%20for%20text%20mode%0A%09var%20textmode%20%3D%20%7B%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Create%20a%20text%20editor%0A%09%20%2A%20%40param%20%7BElement%7D%20container%0A%09%20%2A%20%40param%20%7BObject%7D%20%5Boptions%5D%20%20%20%20%20%20%20%20%20Object%20with%20options%2E%20available%20options%3A%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BString%7D%20mode%20%20%20%20%20%20%20%20%20Available%20values%3A%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22text%22%20%28default%29%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20or%20%22code%22%2E%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BNumber%7D%20indentation%20%20Number%20of%20indentation%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20spaces%2E%202%20by%20default%2E%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bfunction%7D%20change%20%20%20%20%20Callback%20method%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20triggered%20on%20change%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09textmode%2Ecreate%20%3D%20function%20%28container%2C%20options%29%20%7B%0A%09%20%20%2F%2F%20read%20options%0A%09%20%20options%20%3D%20options%20%7C%7C%20%7B%7D%3B%0A%09%20%20this%2Eoptions%20%3D%20options%3B%0A%09%20%20if%20%28options%2Eindentation%29%20%7B%0A%09%20%20%20%20this%2Eindentation%20%3D%20Number%28options%2Eindentation%29%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20this%2Eindentation%20%3D%202%3B%20%20%20%20%20%20%20%2F%2F%20number%20of%20spaces%0A%09%20%20%7D%0A%09%20%20this%2Emode%20%3D%20%28options%2Emode%20%3D%3D%20%27code%27%29%20%3F%20%27code%27%20%3A%20%27text%27%3B%0A%09%20%20if%20%28this%2Emode%20%3D%3D%20%27code%27%29%20%7B%0A%09%20%20%20%20%2F%2F%20verify%20whether%20Ace%20editor%20is%20available%20and%20supported%0A%09%20%20%20%20if%20%28typeof%20ace%20%3D%3D%3D%20%27undefined%27%29%20%7B%0A%09%20%20%20%20%20%20this%2Emode%20%3D%20%27text%27%3B%0A%09%20%20%20%20%20%20util%2Elog%28%27WARNING%3A%20Cannot%20load%20code%20editor%2C%20Ace%20library%20not%20loaded%2E%20%27%20%2B%0A%09%20%20%20%20%20%20%20%20%20%20%27Falling%20back%20to%20plain%20text%20editor%27%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20var%20me%20%3D%20this%3B%0A%09%20%20this%2Econtainer%20%3D%20container%3B%0A%09%20%20this%2Edom%20%3D%20%7B%7D%3B%0A%09%20%20this%2Eeditor%20%3D%20undefined%3B%20%20%20%20%2F%2F%20ace%20code%20editor%0A%09%20%20this%2Etextarea%20%3D%20undefined%3B%20%20%2F%2F%20plain%20text%20editor%20%28fallback%20when%20Ace%20is%20not%20available%29%0A%0A%09%20%20this%2Ewidth%20%3D%20container%2EclientWidth%3B%0A%09%20%20this%2Eheight%20%3D%20container%2EclientHeight%3B%0A%0A%09%20%20this%2Eframe%20%3D%20document%2EcreateElement%28%27div%27%29%3B%0A%09%20%20this%2Eframe%2EclassName%20%3D%20%27jsoneditor%27%3B%0A%09%20%20this%2Eframe%2Eonclick%20%3D%20function%20%28event%29%20%7B%0A%09%20%20%20%20%2F%2F%20prevent%20default%20submit%20action%20when%20the%20editor%20is%20located%20inside%20a%20form%0A%09%20%20%20%20event%2EpreventDefault%28%29%3B%0A%09%20%20%7D%3B%0A%09%20%20this%2Eframe%2Eonkeydown%20%3D%20function%20%28event%29%20%7B%0A%09%20%20%20%20me%2E%5FonKeyDown%28event%29%3B%0A%09%20%20%7D%3B%0A%0A%09%20%20%2F%2F%20create%20menu%0A%09%20%20this%2Emenu%20%3D%20document%2EcreateElement%28%27div%27%29%3B%0A%09%20%20this%2Emenu%2EclassName%20%3D%20%27menu%27%3B%0A%09%20%20this%2Eframe%2EappendChild%28this%2Emenu%29%3B%0A%0A%09%20%20%2F%2F%20create%20format%20button%0A%09%20%20var%20buttonFormat%20%3D%20document%2EcreateElement%28%27button%27%29%3B%0A%09%20%20buttonFormat%2EclassName%20%3D%20%27format%27%3B%0A%09%20%20buttonFormat%2Etitle%20%3D%20%27Format%20JSON%20data%2C%20with%20proper%20indentation%20and%20line%20feeds%20%28Ctrl%2B%5C%5C%29%27%3B%0A%09%20%20this%2Emenu%2EappendChild%28buttonFormat%29%3B%0A%09%20%20buttonFormat%2Eonclick%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20try%20%7B%0A%09%20%20%20%20%20%20me%2Eformat%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20catch%20%28err%29%20%7B%0A%09%20%20%20%20%20%20me%2E%5FonError%28err%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%3B%0A%0A%09%20%20%2F%2F%20create%20compact%20button%0A%09%20%20var%20buttonCompact%20%3D%20document%2EcreateElement%28%27button%27%29%3B%0A%09%20%20buttonCompact%2EclassName%20%3D%20%27compact%27%3B%0A%09%20%20buttonCompact%2Etitle%20%3D%20%27Compact%20JSON%20data%2C%20remove%20all%20whitespaces%20%28Ctrl%2BShift%2B%5C%5C%29%27%3B%0A%09%20%20this%2Emenu%2EappendChild%28buttonCompact%29%3B%0A%09%20%20buttonCompact%2Eonclick%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20try%20%7B%0A%09%20%20%20%20%20%20me%2Ecompact%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20catch%20%28err%29%20%7B%0A%09%20%20%20%20%20%20me%2E%5FonError%28err%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%3B%0A%0A%09%20%20%2F%2F%20create%20mode%20box%0A%09%20%20if%20%28this%2Eoptions%20%26%26%20this%2Eoptions%2Emodes%20%26%26%20this%2Eoptions%2Emodes%2Elength%29%20%7B%0A%09%20%20%20%20var%20modeBox%20%3D%20modeswitcher%2Ecreate%28this%2C%20this%2Eoptions%2Emodes%2C%20this%2Eoptions%2Emode%29%3B%0A%09%20%20%20%20this%2Emenu%2EappendChild%28modeBox%29%3B%0A%09%20%20%20%20this%2Edom%2EmodeBox%20%3D%20modeBox%3B%0A%09%20%20%7D%0A%0A%09%20%20this%2Econtent%20%3D%20document%2EcreateElement%28%27div%27%29%3B%0A%09%20%20this%2Econtent%2EclassName%20%3D%20%27outer%27%3B%0A%09%20%20this%2Eframe%2EappendChild%28this%2Econtent%29%3B%0A%0A%09%20%20this%2Econtainer%2EappendChild%28this%2Eframe%29%3B%0A%0A%09%20%20if%20%28this%2Emode%20%3D%3D%20%27code%27%29%20%7B%0A%09%20%20%20%20this%2EeditorDom%20%3D%20document%2EcreateElement%28%27div%27%29%3B%0A%09%20%20%20%20this%2EeditorDom%2Estyle%2Eheight%20%3D%20%27100%25%27%3B%20%2F%2F%20TODO%3A%20move%20to%20css%0A%09%20%20%20%20this%2EeditorDom%2Estyle%2Ewidth%20%3D%20%27100%25%27%3B%20%2F%2F%20TODO%3A%20move%20to%20css%0A%09%20%20%20%20this%2Econtent%2EappendChild%28this%2EeditorDom%29%3B%0A%0A%09%20%20%20%20var%20editor%20%3D%20ace%2Eedit%28this%2EeditorDom%29%3B%0A%09%20%20%20%20editor%2EsetTheme%28%27ace%2Ftheme%2Fjsoneditor%27%29%3B%0A%09%20%20%20%20editor%2EsetShowPrintMargin%28false%29%3B%0A%09%20%20%20%20editor%2EsetFontSize%2813%29%3B%0A%09%20%20%20%20editor%2EgetSession%28%29%2EsetMode%28%27ace%2Fmode%2Fjson%27%29%3B%0A%09%20%20%20%20editor%2EgetSession%28%29%2EsetTabSize%28this%2Eindentation%29%3B%0A%09%20%20%20%20editor%2EgetSession%28%29%2EsetUseSoftTabs%28true%29%3B%0A%09%20%20%20%20editor%2EgetSession%28%29%2EsetUseWrapMode%28true%29%3B%0A%09%20%20%20%20this%2Eeditor%20%3D%20editor%3B%0A%0A%09%20%20%20%20var%20poweredBy%20%3D%20document%2EcreateElement%28%27a%27%29%3B%0A%09%20%20%20%20poweredBy%2EappendChild%28document%2EcreateTextNode%28%27powered%20by%20ace%27%29%29%3B%0A%09%20%20%20%20poweredBy%2Ehref%20%3D%20%27http%3A%2F%2Face%2Eajax%2Eorg%27%3B%0A%09%20%20%20%20poweredBy%2Etarget%20%3D%20%27%5Fblank%27%3B%0A%09%20%20%20%20poweredBy%2EclassName%20%3D%20%27poweredBy%27%3B%0A%09%20%20%20%20poweredBy%2Eonclick%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20TODO%3A%20this%20anchor%20falls%20below%20the%20margin%20of%20the%20content%2C%0A%09%20%20%20%20%20%20%2F%2F%20therefore%20the%20normal%20a%2Ehref%20does%20not%20work%2E%20We%20use%20a%20click%20event%0A%09%20%20%20%20%20%20%2F%2F%20for%20now%2C%20but%20this%20should%20be%20fixed%2E%0A%09%20%20%20%20%20%20window%2Eopen%28poweredBy%2Ehref%2C%20poweredBy%2Etarget%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2Emenu%2EappendChild%28poweredBy%29%3B%0A%0A%09%20%20%20%20if%20%28options%2Echange%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20register%20onchange%20event%0A%09%20%20%20%20%20%20editor%2Eon%28%27change%27%2C%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20options%2Echange%28%29%3B%0A%09%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20%2F%2F%20load%20a%20plain%20text%20textarea%0A%09%20%20%20%20var%20textarea%20%3D%20document%2EcreateElement%28%27textarea%27%29%3B%0A%09%20%20%20%20textarea%2EclassName%20%3D%20%27text%27%3B%0A%09%20%20%20%20textarea%2Espellcheck%20%3D%20false%3B%0A%09%20%20%20%20this%2Econtent%2EappendChild%28textarea%29%3B%0A%09%20%20%20%20this%2Etextarea%20%3D%20textarea%3B%0A%0A%09%20%20%20%20if%20%28options%2Echange%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20register%20onchange%20event%0A%09%20%20%20%20%20%20if%20%28this%2Etextarea%2Eoninput%20%3D%3D%3D%20null%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Etextarea%2Eoninput%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20options%2Echange%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%2F%2F%20oninput%20is%20undefined%2E%20For%20IE8%2D%0A%09%20%20%20%20%20%20%20%20this%2Etextarea%2Eonchange%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20options%2Echange%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Event%20handler%20for%20keydown%2E%20Handles%20shortcut%20keys%0A%09%20%2A%20%40param%20%7BEvent%7D%20event%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09textmode%2E%5FonKeyDown%20%3D%20function%20%28event%29%20%7B%0A%09%20%20var%20keynum%20%3D%20event%2Ewhich%20%7C%7C%20event%2EkeyCode%3B%0A%09%20%20var%20handled%20%3D%20false%3B%0A%0A%09%20%20if%20%28keynum%20%3D%3D%20220%20%26%26%20event%2EctrlKey%29%20%7B%0A%09%20%20%20%20if%20%28event%2EshiftKey%29%20%7B%20%2F%2F%20Ctrl%2BShift%2B%5C%0A%09%20%20%20%20%20%20this%2Ecompact%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%20%2F%2F%20Ctrl%2B%5C%0A%09%20%20%20%20%20%20this%2Eformat%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28handled%29%20%7B%0A%09%20%20%20%20event%2EpreventDefault%28%29%3B%0A%09%20%20%20%20event%2EstopPropagation%28%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Detach%20the%20editor%20from%20the%20DOM%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09textmode%2E%5Fdelete%20%3D%20function%20%28%29%20%7B%0A%09%20%20if%20%28this%2Eframe%20%26%26%20this%2Econtainer%20%26%26%20this%2Eframe%2EparentNode%20%3D%3D%20this%2Econtainer%29%20%7B%0A%09%20%20%20%20this%2Econtainer%2EremoveChild%28this%2Eframe%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Throw%20an%20error%2E%20If%20an%20error%20callback%20is%20configured%20in%20options%2Eerror%2C%20this%0A%09%20%2A%20callback%20will%20be%20invoked%2E%20Else%2C%20a%20regular%20error%20is%20thrown%2E%0A%09%20%2A%20%40param%20%7BError%7D%20err%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09textmode%2E%5FonError%20%3D%20function%28err%29%20%7B%0A%09%20%20%2F%2F%20TODO%3A%20onError%20is%20deprecated%20since%20version%202%2E2%2E0%2E%20cleanup%20some%20day%0A%09%20%20if%20%28typeof%20this%2EonError%20%3D%3D%3D%20%27function%27%29%20%7B%0A%09%20%20%20%20util%2Elog%28%27WARNING%3A%20JSONEditor%2EonError%20is%20deprecated%2E%20%27%20%2B%0A%09%20%20%20%20%20%20%20%20%27Use%20options%2Eerror%20instead%2E%27%29%3B%0A%09%20%20%20%20this%2EonError%28err%29%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28this%2Eoptions%20%26%26%20typeof%20this%2Eoptions%2Eerror%20%3D%3D%3D%20%27function%27%29%20%7B%0A%09%20%20%20%20this%2Eoptions%2Eerror%28err%29%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20throw%20err%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Compact%20the%20code%20in%20the%20formatter%0A%09%20%2A%2F%0A%09textmode%2Ecompact%20%3D%20function%20%28%29%20%7B%0A%09%20%20var%20json%20%3D%20this%2Eget%28%29%3B%0A%09%20%20var%20text%20%3D%20JSON%2Estringify%28json%29%3B%0A%09%20%20this%2EsetText%28text%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Format%20the%20code%20in%20the%20formatter%0A%09%20%2A%2F%0A%09textmode%2Eformat%20%3D%20function%20%28%29%20%7B%0A%09%20%20var%20json%20%3D%20this%2Eget%28%29%3B%0A%09%20%20var%20text%20%3D%20JSON%2Estringify%28json%2C%20null%2C%20this%2Eindentation%29%3B%0A%09%20%20this%2EsetText%28text%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20focus%20to%20the%20formatter%0A%09%20%2A%2F%0A%09textmode%2Efocus%20%3D%20function%20%28%29%20%7B%0A%09%20%20if%20%28this%2Etextarea%29%20%7B%0A%09%20%20%20%20this%2Etextarea%2Efocus%28%29%3B%0A%09%20%20%7D%0A%09%20%20if%20%28this%2Eeditor%29%20%7B%0A%09%20%20%20%20this%2Eeditor%2Efocus%28%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Resize%20the%20formatter%0A%09%20%2A%2F%0A%09textmode%2Eresize%20%3D%20function%20%28%29%20%7B%0A%09%20%20if%20%28this%2Eeditor%29%20%7B%0A%09%20%20%20%20var%20force%20%3D%20false%3B%0A%09%20%20%20%20this%2Eeditor%2Eresize%28force%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20json%20data%20in%20the%20formatter%0A%09%20%2A%20%40param%20%7BObject%7D%20json%0A%09%20%2A%2F%0A%09textmode%2Eset%20%3D%20function%28json%29%20%7B%0A%09%20%20this%2EsetText%28JSON%2Estringify%28json%2C%20null%2C%20this%2Eindentation%29%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20json%20data%20from%20the%20formatter%0A%09%20%2A%20%40return%20%7BObject%7D%20json%0A%09%20%2A%2F%0A%09textmode%2Eget%20%3D%20function%28%29%20%7B%0A%09%20%20var%20text%20%3D%20this%2EgetText%28%29%3B%0A%09%20%20var%20json%3B%0A%0A%09%20%20try%20%7B%0A%09%20%20%20%20json%20%3D%20util%2Eparse%28text%29%3B%20%2F%2F%20this%20can%20throw%20an%20error%0A%09%20%20%7D%0A%09%20%20catch%20%28err%29%20%7B%0A%09%20%20%20%20%2F%2F%20try%20to%20sanitize%20json%2C%20replace%20JavaScript%20notation%20with%20JSON%20notation%0A%09%20%20%20%20text%20%3D%20util%2Esanitize%28text%29%3B%0A%09%20%20%20%20this%2EsetText%28text%29%3B%0A%0A%09%20%20%20%20%2F%2F%20try%20to%20parse%20again%0A%09%20%20%20%20json%20%3D%20util%2Eparse%28text%29%3B%20%2F%2F%20this%20can%20throw%20an%20error%0A%09%20%20%7D%0A%0A%09%20%20return%20json%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20the%20text%20contents%20of%20the%20editor%0A%09%20%2A%20%40return%20%7BString%7D%20jsonText%0A%09%20%2A%2F%0A%09textmode%2EgetText%20%3D%20function%28%29%20%7B%0A%09%20%20if%20%28this%2Etextarea%29%20%7B%0A%09%20%20%20%20return%20this%2Etextarea%2Evalue%3B%0A%09%20%20%7D%0A%09%20%20if%20%28this%2Eeditor%29%20%7B%0A%09%20%20%20%20return%20this%2Eeditor%2EgetValue%28%29%3B%0A%09%20%20%7D%0A%09%20%20return%20%27%27%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20the%20text%20contents%20of%20the%20editor%0A%09%20%2A%20%40param%20%7BString%7D%20jsonText%0A%09%20%2A%2F%0A%09textmode%2EsetText%20%3D%20function%28jsonText%29%20%7B%0A%09%20%20if%20%28this%2Etextarea%29%20%7B%0A%09%20%20%20%20this%2Etextarea%2Evalue%20%3D%20jsonText%3B%0A%09%20%20%7D%0A%09%20%20if%20%28this%2Eeditor%29%20%7B%0A%09%20%20%20%20this%2Eeditor%2EsetValue%28jsonText%2C%20%2D1%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2F%20define%20modes%0A%09module%2Eexports%20%3D%20%5B%0A%09%20%20%7B%0A%09%20%20%20%20mode%3A%20%27text%27%2C%0A%09%20%20%20%20mixin%3A%20textmode%2C%0A%09%20%20%20%20data%3A%20%27text%27%2C%0A%09%20%20%20%20load%3A%20textmode%2Eformat%0A%09%20%20%7D%2C%0A%09%20%20%7B%0A%09%20%20%20%20mode%3A%20%27code%27%2C%0A%09%20%20%20%20mixin%3A%20textmode%2C%0A%09%20%20%20%20data%3A%20%27text%27%2C%0A%09%20%20%20%20load%3A%20textmode%2Eformat%0A%09%20%20%7D%0A%09%5D%3B%0A%0A%0A%2F%2A%2A%2A%2F%20%7D%2C%0A%2F%2A%203%20%2A%2F%0A%2F%2A%2A%2A%2F%20function%28module%2C%20exports%2C%20%5F%5Fwebpack%5Frequire%5F%5F%29%20%7B%0A%0A%09var%20jsonlint%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%2812%29%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Parse%20JSON%20using%20the%20parser%20built%2Din%20in%20the%20browser%2E%0A%09%20%2A%20On%20exception%2C%20the%20jsonString%20is%20validated%20and%20a%20detailed%20error%20is%20thrown%2E%0A%09%20%2A%20%40param%20%7BString%7D%20jsonString%0A%09%20%2A%20%40return%20%7BJSON%7D%20json%0A%09%20%2A%2F%0A%09exports%2Eparse%20%3D%20function%20parse%28jsonString%29%20%7B%0A%09%20%20try%20%7B%0A%09%20%20%20%20return%20JSON%2Eparse%28jsonString%29%3B%0A%09%20%20%7D%0A%09%20%20catch%20%28err%29%20%7B%0A%09%20%20%20%20%2F%2F%20try%20to%20throw%20a%20more%20detailed%20error%20message%20using%20validate%0A%09%20%20%20%20exports%2Evalidate%28jsonString%29%3B%0A%0A%09%20%20%20%20%2F%2F%20rethrow%20the%20original%20error%0A%09%20%20%20%20throw%20err%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Sanitize%20a%20JSON%2Dlike%20string%20containing%2E%20For%20example%20changes%20JavaScript%0A%09%20%2A%20notation%20into%20JSON%20notation%2E%0A%09%20%2A%20This%20function%20for%20example%20changes%20a%20string%20like%20%22%7Ba%3A%202%2C%20%27b%27%3A%20%7Bc%3A%20%27d%27%7D%22%0A%09%20%2A%20into%20%27%7B%22a%22%3A%202%2C%20%22b%22%3A%20%7B%22c%22%3A%20%22d%22%7D%27%0A%09%20%2A%20%40param%20%7Bstring%7D%20jsString%0A%09%20%2A%20%40returns%20%7Bstring%7D%20json%0A%09%20%2A%2F%0A%09exports%2Esanitize%20%3D%20function%20%28jsString%29%20%7B%0A%09%20%20%2F%2F%20escape%20all%20single%20and%20double%20quotes%20inside%20strings%0A%09%20%20var%20chars%20%3D%20%5B%5D%3B%0A%09%20%20var%20i%20%3D%200%3B%0A%0A%09%20%20%2F%2FIf%20JSON%20starts%20with%20a%20function%20%28characters%2Fdigits%2F%22%5F%2D%22%29%2C%20remove%20this%20function%2E%0A%09%20%20%2F%2FThis%20is%20useful%20for%20%22stripping%22%20JSONP%20objects%20to%20become%20JSON%0A%09%20%20%2F%2FFor%20example%3A%20%2F%2A%20some%20comment%20%2A%2F%20function%5F12321321%20%28%20%5B%7B%22a%22%3A%22b%22%7D%5D%20%29%3B%20%3D%3E%20%5B%7B%22a%22%3A%22b%22%7D%5D%0A%09%20%20var%20match%20%3D%20jsString%2Ematch%28%2F%5E%5Cs%2A%28%5C%2F%5C%2A%28%2E%7C%5B%5Cr%5Cn%5D%29%2A%3F%5C%2A%5C%2F%29%3F%5Cs%2A%5B%5Cda%2DzA%2DZ%5F%24%5D%2B%5Cs%2A%5C%28%28%5B%5Cs%5CS%5D%2A%29%5C%29%5Cs%2A%3B%3F%5Cs%2A%24%2F%29%3B%0A%09%20%20if%20%28match%29%20%7B%0A%09%20%20%20%20jsString%20%3D%20match%5B3%5D%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20helper%20functions%20to%20get%20the%20current%2Fprev%2Fnext%20character%0A%09%20%20function%20curr%20%28%29%20%7B%20return%20jsString%2EcharAt%28i%29%3B%20%20%20%20%20%7D%0A%09%20%20function%20next%28%29%20%20%7B%20return%20jsString%2EcharAt%28i%20%2B%201%29%3B%20%7D%0A%09%20%20function%20prev%28%29%20%20%7B%20return%20jsString%2EcharAt%28i%20%2D%201%29%3B%20%7D%0A%0A%09%20%20%2F%2F%20test%20whether%20the%20last%20non%2Dwhitespace%20character%20was%20a%20brace%2Dopen%20%27%7B%27%0A%09%20%20function%20prevIsBrace%28%29%20%7B%0A%09%20%20%20%20var%20ii%20%3D%20i%20%2D%201%3B%0A%09%20%20%20%20while%20%28ii%20%3E%3D%200%29%20%7B%0A%09%20%20%20%20%20%20var%20cc%20%3D%20jsString%2EcharAt%28ii%29%3B%0A%09%20%20%20%20%20%20if%20%28cc%20%3D%3D%3D%20%27%7B%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20true%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20else%20if%20%28cc%20%3D%3D%3D%20%27%20%27%20%7C%7C%20cc%20%3D%3D%3D%20%27%5Cn%27%20%7C%7C%20cc%20%3D%3D%3D%20%27%5Cr%27%29%20%7B%20%2F%2F%20whitespace%0A%09%20%20%20%20%20%20%20%20ii%2D%2D%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20return%20false%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20return%20false%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20skip%20a%20block%20comment%20%27%2F%2A%20%2E%2E%2E%20%2A%2F%27%0A%09%20%20function%20skipComment%20%28%29%20%7B%0A%09%20%20%20%20i%20%2B%3D%202%3B%0A%09%20%20%20%20while%20%28i%20%3C%20jsString%2Elength%20%26%26%20%28curr%28%29%20%21%3D%3D%20%27%2A%27%20%7C%7C%20next%28%29%20%21%3D%3D%20%27%2F%27%29%29%20%7B%0A%09%20%20%20%20%20%20i%2B%2B%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20i%20%2B%3D%202%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20parse%20single%20or%20double%20quoted%20string%0A%09%20%20function%20parseString%28quote%29%20%7B%0A%09%20%20%20%20chars%2Epush%28%27%22%27%29%3B%0A%09%20%20%20%20i%2B%2B%3B%0A%09%20%20%20%20var%20c%20%3D%20curr%28%29%3B%0A%09%20%20%20%20while%20%28i%20%3C%20jsString%2Elength%20%26%26%20c%20%21%3D%3D%20quote%29%20%7B%0A%09%20%20%20%20%20%20if%20%28c%20%3D%3D%3D%20%27%22%27%20%26%26%20prev%28%29%20%21%3D%3D%20%27%5C%5C%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20%2F%2F%20unescaped%20double%20quote%2C%20escape%20it%0A%09%20%20%20%20%20%20%20%20chars%2Epush%28%27%5C%5C%27%29%3B%0A%09%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%2F%2F%20handle%20escape%20character%0A%09%20%20%20%20%20%20if%20%28c%20%3D%3D%3D%20%27%5C%5C%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20i%2B%2B%3B%0A%09%20%20%20%20%20%20%20%20c%20%3D%20curr%28%29%3B%0A%0A%09%20%20%20%20%20%20%20%20%2F%2F%20remove%20the%20escape%20character%20when%20followed%20by%20a%20single%20quote%20%27%2C%20not%20needed%0A%09%20%20%20%20%20%20%20%20if%20%28c%20%21%3D%3D%20%27%5C%27%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20chars%2Epush%28%27%5C%5C%27%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20chars%2Epush%28c%29%3B%0A%0A%09%20%20%20%20%20%20i%2B%2B%3B%0A%09%20%20%20%20%20%20c%20%3D%20curr%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20if%20%28c%20%3D%3D%3D%20quote%29%20%7B%0A%09%20%20%20%20%20%20chars%2Epush%28%27%22%27%29%3B%0A%09%20%20%20%20%20%20i%2B%2B%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20parse%20an%20unquoted%20key%0A%09%20%20function%20parseKey%28%29%20%7B%0A%09%20%20%20%20var%20specialValues%20%3D%20%5B%27null%27%2C%20%27true%27%2C%20%27false%27%5D%3B%0A%09%20%20%20%20var%20key%20%3D%20%27%27%3B%0A%09%20%20%20%20var%20c%20%3D%20curr%28%29%3B%0A%0A%09%20%20%20%20var%20regexp%20%3D%20%2F%5Ba%2DzA%2DZ%5F%24%5Cd%5D%2F%3B%20%2F%2F%20letter%2C%20number%2C%20underscore%2C%20dollar%20character%0A%09%20%20%20%20while%20%28regexp%2Etest%28c%29%29%20%7B%0A%09%20%20%20%20%20%20key%20%2B%3D%20c%3B%0A%09%20%20%20%20%20%20i%2B%2B%3B%0A%09%20%20%20%20%20%20c%20%3D%20curr%28%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20if%20%28specialValues%2EindexOf%28key%29%20%3D%3D%3D%20%2D1%29%20%7B%0A%09%20%20%20%20%20%20chars%2Epush%28%27%22%27%20%2B%20key%20%2B%20%27%22%27%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20chars%2Epush%28key%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20while%28i%20%3C%20jsString%2Elength%29%20%7B%0A%09%20%20%20%20var%20c%20%3D%20curr%28%29%3B%0A%0A%09%20%20%20%20if%20%28c%20%3D%3D%3D%20%27%2F%27%20%26%26%20next%28%29%20%3D%3D%3D%20%27%2A%27%29%20%7B%0A%09%20%20%20%20%20%20skipComment%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28c%20%3D%3D%3D%20%27%5C%27%27%20%7C%7C%20c%20%3D%3D%3D%20%27%22%27%29%20%7B%0A%09%20%20%20%20%20%20parseString%28c%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28%2F%5Ba%2DzA%2DZ%5F%24%5D%2F%2Etest%28c%29%20%26%26%20prevIsBrace%28%29%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20an%20unquoted%20object%20key%20%28like%20a%20in%20%27%7Ba%3A2%7D%27%29%0A%09%20%20%20%20%20%20parseKey%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20chars%2Epush%28c%29%3B%0A%09%20%20%20%20%20%20i%2B%2B%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20return%20chars%2Ejoin%28%27%27%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Validate%20a%20string%20containing%20a%20JSON%20object%0A%09%20%2A%20This%20method%20uses%20JSONLint%20to%20validate%20the%20String%2E%20If%20JSONLint%20is%20not%0A%09%20%2A%20available%2C%20the%20built%2Din%20JSON%20parser%20of%20the%20browser%20is%20used%2E%0A%09%20%2A%20%40param%20%7BString%7D%20jsonString%20%20%20String%20with%20an%20%28invalid%29%20JSON%20object%0A%09%20%2A%20%40throws%20Error%0A%09%20%2A%2F%0A%09exports%2Evalidate%20%3D%20function%20validate%28jsonString%29%20%7B%0A%09%20%20if%20%28typeof%28jsonlint%29%20%21%3D%20%27undefined%27%29%20%7B%0A%09%20%20%20%20jsonlint%2Eparse%28jsonString%29%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20JSON%2Eparse%28jsonString%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Extend%20object%20a%20with%20the%20properties%20of%20object%20b%0A%09%20%2A%20%40param%20%7BObject%7D%20a%0A%09%20%2A%20%40param%20%7BObject%7D%20b%0A%09%20%2A%20%40return%20%7BObject%7D%20a%0A%09%20%2A%2F%0A%09exports%2Eextend%20%3D%20function%20extend%28a%2C%20b%29%20%7B%0A%09%20%20for%20%28var%20prop%20in%20b%29%20%7B%0A%09%20%20%20%20if%20%28b%2EhasOwnProperty%28prop%29%29%20%7B%0A%09%20%20%20%20%20%20a%5Bprop%5D%20%3D%20b%5Bprop%5D%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20return%20a%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Remove%20all%20properties%20from%20object%20a%0A%09%20%2A%20%40param%20%7BObject%7D%20a%0A%09%20%2A%20%40return%20%7BObject%7D%20a%0A%09%20%2A%2F%0A%09exports%2Eclear%20%3D%20function%20clear%20%28a%29%20%7B%0A%09%20%20for%20%28var%20prop%20in%20a%29%20%7B%0A%09%20%20%20%20if%20%28a%2EhasOwnProperty%28prop%29%29%20%7B%0A%09%20%20%20%20%20%20delete%20a%5Bprop%5D%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20return%20a%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Output%20text%20to%20the%20console%2C%20if%20console%20is%20available%0A%09%20%2A%20%40param%20%7B%2E%2E%2E%2A%7D%20args%0A%09%20%2A%2F%0A%09exports%2Elog%20%3D%20function%20log%20%28args%29%20%7B%0A%09%20%20if%20%28typeof%20console%20%21%3D%3D%20%27undefined%27%20%26%26%20typeof%20console%2Elog%20%3D%3D%3D%20%27function%27%29%20%7B%0A%09%20%20%20%20console%2Elog%2Eapply%28console%2C%20arguments%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20the%20type%20of%20an%20object%0A%09%20%2A%20%40param%20%7B%2A%7D%20object%0A%09%20%2A%20%40return%20%7BString%7D%20type%0A%09%20%2A%2F%0A%09exports%2Etype%20%3D%20function%20type%20%28object%29%20%7B%0A%09%20%20if%20%28object%20%3D%3D%3D%20null%29%20%7B%0A%09%20%20%20%20return%20%27null%27%3B%0A%09%20%20%7D%0A%09%20%20if%20%28object%20%3D%3D%3D%20undefined%29%20%7B%0A%09%20%20%20%20return%20%27undefined%27%3B%0A%09%20%20%7D%0A%09%20%20if%20%28%28object%20instanceof%20Number%29%20%7C%7C%20%28typeof%20object%20%3D%3D%3D%20%27number%27%29%29%20%7B%0A%09%20%20%20%20return%20%27number%27%3B%0A%09%20%20%7D%0A%09%20%20if%20%28%28object%20instanceof%20String%29%20%7C%7C%20%28typeof%20object%20%3D%3D%3D%20%27string%27%29%29%20%7B%0A%09%20%20%20%20return%20%27string%27%3B%0A%09%20%20%7D%0A%09%20%20if%20%28%28object%20instanceof%20Boolean%29%20%7C%7C%20%28typeof%20object%20%3D%3D%3D%20%27boolean%27%29%29%20%7B%0A%09%20%20%20%20return%20%27boolean%27%3B%0A%09%20%20%7D%0A%09%20%20if%20%28%28object%20instanceof%20RegExp%29%20%7C%7C%20%28typeof%20object%20%3D%3D%3D%20%27regexp%27%29%29%20%7B%0A%09%20%20%20%20return%20%27regexp%27%3B%0A%09%20%20%7D%0A%09%20%20if%20%28exports%2EisArray%28object%29%29%20%7B%0A%09%20%20%20%20return%20%27array%27%3B%0A%09%20%20%7D%0A%0A%09%20%20return%20%27object%27%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Test%20whether%20a%20text%20contains%20a%20url%20%28matches%20when%20a%20string%20starts%0A%09%20%2A%20with%20%27http%3A%2F%2F%2A%27%20or%20%27https%3A%2F%2F%2A%27%20and%20has%20no%20whitespace%20characters%29%0A%09%20%2A%20%40param%20%7BString%7D%20text%0A%09%20%2A%2F%0A%09var%20isUrlRegex%20%3D%20%2F%5Ehttps%3F%3A%5C%2F%5C%2F%5CS%2B%24%2F%3B%0A%09exports%2EisUrl%20%3D%20function%20isUrl%20%28text%29%20%7B%0A%09%20%20return%20%28typeof%20text%20%3D%3D%20%27string%27%20%7C%7C%20text%20instanceof%20String%29%20%26%26%0A%09%20%20%20%20%20%20isUrlRegex%2Etest%28text%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Tes%20whether%20given%20object%20is%20an%20Array%0A%09%20%2A%20%40param%20%7B%2A%7D%20obj%0A%09%20%2A%20%40returns%20%7Bboolean%7D%20returns%20true%20when%20obj%20is%20an%20array%0A%09%20%2A%2F%0A%09exports%2EisArray%20%3D%20function%20%28obj%29%20%7B%0A%09%20%20return%20Object%2Eprototype%2EtoString%2Ecall%28obj%29%20%3D%3D%3D%20%27%5Bobject%20Array%5D%27%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Retrieve%20the%20absolute%20left%20value%20of%20a%20DOM%20element%0A%09%20%2A%20%40param%20%7BElement%7D%20elem%20%20%20%20A%20dom%20element%2C%20for%20example%20a%20div%0A%09%20%2A%20%40return%20%7BNumber%7D%20left%20%20%20%20The%20absolute%20left%20position%20of%20this%20element%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20in%20the%20browser%20page%2E%0A%09%20%2A%2F%0A%09exports%2EgetAbsoluteLeft%20%3D%20function%20getAbsoluteLeft%28elem%29%20%7B%0A%09%20%20var%20rect%20%3D%20elem%2EgetBoundingClientRect%28%29%3B%0A%09%20%20return%20rect%2Eleft%20%2B%20window%2EpageXOffset%20%7C%7C%20document%2EscrollLeft%20%7C%7C%200%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Retrieve%20the%20absolute%20top%20value%20of%20a%20DOM%20element%0A%09%20%2A%20%40param%20%7BElement%7D%20elem%20%20%20%20A%20dom%20element%2C%20for%20example%20a%20div%0A%09%20%2A%20%40return%20%7BNumber%7D%20top%20%20%20%20%20The%20absolute%20top%20position%20of%20this%20element%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20in%20the%20browser%20page%2E%0A%09%20%2A%2F%0A%09exports%2EgetAbsoluteTop%20%3D%20function%20getAbsoluteTop%28elem%29%20%7B%0A%09%20%20var%20rect%20%3D%20elem%2EgetBoundingClientRect%28%29%3B%0A%09%20%20return%20rect%2Etop%20%2B%20window%2EpageYOffset%20%7C%7C%20document%2EscrollTop%20%7C%7C%200%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20add%20a%20className%20to%20the%20given%20elements%20style%0A%09%20%2A%20%40param%20%7BElement%7D%20elem%0A%09%20%2A%20%40param%20%7BString%7D%20className%0A%09%20%2A%2F%0A%09exports%2EaddClassName%20%3D%20function%20addClassName%28elem%2C%20className%29%20%7B%0A%09%20%20var%20classes%20%3D%20elem%2EclassName%2Esplit%28%27%20%27%29%3B%0A%09%20%20if%20%28classes%2EindexOf%28className%29%20%3D%3D%20%2D1%29%20%7B%0A%09%20%20%20%20classes%2Epush%28className%29%3B%20%2F%2F%20add%20the%20class%20to%20the%20array%0A%09%20%20%20%20elem%2EclassName%20%3D%20classes%2Ejoin%28%27%20%27%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20add%20a%20className%20to%20the%20given%20elements%20style%0A%09%20%2A%20%40param%20%7BElement%7D%20elem%0A%09%20%2A%20%40param%20%7BString%7D%20className%0A%09%20%2A%2F%0A%09exports%2EremoveClassName%20%3D%20function%20removeClassName%28elem%2C%20className%29%20%7B%0A%09%20%20var%20classes%20%3D%20elem%2EclassName%2Esplit%28%27%20%27%29%3B%0A%09%20%20var%20index%20%3D%20classes%2EindexOf%28className%29%3B%0A%09%20%20if%20%28index%20%21%3D%20%2D1%29%20%7B%0A%09%20%20%20%20classes%2Esplice%28index%2C%201%29%3B%20%2F%2F%20remove%20the%20class%20from%20the%20array%0A%09%20%20%20%20elem%2EclassName%20%3D%20classes%2Ejoin%28%27%20%27%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Strip%20the%20formatting%20from%20the%20contents%20of%20a%20div%0A%09%20%2A%20the%20formatting%20from%20the%20div%20itself%20is%20not%20stripped%2C%20only%20from%20its%20childs%2E%0A%09%20%2A%20%40param%20%7BElement%7D%20divElement%0A%09%20%2A%2F%0A%09exports%2EstripFormatting%20%3D%20function%20stripFormatting%28divElement%29%20%7B%0A%09%20%20var%20childs%20%3D%20divElement%2EchildNodes%3B%0A%09%20%20for%20%28var%20i%20%3D%200%2C%20iMax%20%3D%20childs%2Elength%3B%20i%20%3C%20iMax%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20var%20child%20%3D%20childs%5Bi%5D%3B%0A%0A%09%20%20%20%20%2F%2F%20remove%20the%20style%0A%09%20%20%20%20if%20%28child%2Estyle%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20TODO%3A%20test%20if%20child%2Eattributes%20does%20contain%20style%0A%09%20%20%20%20%20%20child%2EremoveAttribute%28%27style%27%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20remove%20all%20attributes%0A%09%20%20%20%20var%20attributes%20%3D%20child%2Eattributes%3B%0A%09%20%20%20%20if%20%28attributes%29%20%7B%0A%09%20%20%20%20%20%20for%20%28var%20j%20%3D%20attributes%2Elength%20%2D%201%3B%20j%20%3E%3D%200%3B%20j%2D%2D%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20attribute%20%3D%20attributes%5Bj%5D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28attribute%2Especified%20%3D%3D%3D%20true%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20child%2EremoveAttribute%28attribute%2Ename%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20recursively%20strip%20childs%0A%09%20%20%20%20exports%2EstripFormatting%28child%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20focus%20to%20the%20end%20of%20an%20editable%20div%0A%09%20%2A%20code%20from%20Nico%20Burns%0A%09%20%2A%20http%3A%2F%2Fstackoverflow%2Ecom%2Fusers%2F140293%2Fnico%2Dburns%0A%09%20%2A%20http%3A%2F%2Fstackoverflow%2Ecom%2Fquestions%2F1125292%2Fhow%2Dto%2Dmove%2Dcursor%2Dto%2Dend%2Dof%2Dcontenteditable%2Dentity%0A%09%20%2A%20%40param%20%7BElement%7D%20contentEditableElement%20%20%20A%20content%20editable%20div%0A%09%20%2A%2F%0A%09exports%2EsetEndOfContentEditable%20%3D%20function%20setEndOfContentEditable%28contentEditableElement%29%20%7B%0A%09%20%20var%20range%2C%20selection%3B%0A%09%20%20if%28document%2EcreateRange%29%20%7B%0A%09%20%20%20%20range%20%3D%20document%2EcreateRange%28%29%3B%2F%2FCreate%20a%20range%20%28a%20range%20is%20a%20like%20the%20selection%20but%20invisible%29%0A%09%20%20%20%20range%2EselectNodeContents%28contentEditableElement%29%3B%2F%2FSelect%20the%20entire%20contents%20of%20the%20element%20with%20the%20range%0A%09%20%20%20%20range%2Ecollapse%28false%29%3B%2F%2Fcollapse%20the%20range%20to%20the%20end%20point%2E%20false%20means%20collapse%20to%20end%20rather%20than%20the%20start%0A%09%20%20%20%20selection%20%3D%20window%2EgetSelection%28%29%3B%2F%2Fget%20the%20selection%20object%20%28allows%20you%20to%20change%20selection%29%0A%09%20%20%20%20selection%2EremoveAllRanges%28%29%3B%2F%2Fremove%20any%20selections%20already%20made%0A%09%20%20%20%20selection%2EaddRange%28range%29%3B%2F%2Fmake%20the%20range%20you%20have%20just%20created%20the%20visible%20selection%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Select%20all%20text%20of%20a%20content%20editable%20div%2E%0A%09%20%2A%20http%3A%2F%2Fstackoverflow%2Ecom%2Fa%2F3806004%2F1262753%0A%09%20%2A%20%40param%20%7BElement%7D%20contentEditableElement%20%20%20A%20content%20editable%20div%0A%09%20%2A%2F%0A%09exports%2EselectContentEditable%20%3D%20function%20selectContentEditable%28contentEditableElement%29%20%7B%0A%09%20%20if%20%28%21contentEditableElement%20%7C%7C%20contentEditableElement%2EnodeName%20%21%3D%20%27DIV%27%29%20%7B%0A%09%20%20%20%20return%3B%0A%09%20%20%7D%0A%0A%09%20%20var%20sel%2C%20range%3B%0A%09%20%20if%20%28window%2EgetSelection%20%26%26%20document%2EcreateRange%29%20%7B%0A%09%20%20%20%20range%20%3D%20document%2EcreateRange%28%29%3B%0A%09%20%20%20%20range%2EselectNodeContents%28contentEditableElement%29%3B%0A%09%20%20%20%20sel%20%3D%20window%2EgetSelection%28%29%3B%0A%09%20%20%20%20sel%2EremoveAllRanges%28%29%3B%0A%09%20%20%20%20sel%2EaddRange%28range%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20text%20selection%0A%09%20%2A%20http%3A%2F%2Fstackoverflow%2Ecom%2Fquestions%2F4687808%2Fcontenteditable%2Dselected%2Dtext%2Dsave%2Dand%2Drestore%0A%09%20%2A%20%40return%20%7BRange%20%7C%20TextRange%20%7C%20null%7D%20range%0A%09%20%2A%2F%0A%09exports%2EgetSelection%20%3D%20function%20getSelection%28%29%20%7B%0A%09%20%20if%20%28window%2EgetSelection%29%20%7B%0A%09%20%20%20%20var%20sel%20%3D%20window%2EgetSelection%28%29%3B%0A%09%20%20%20%20if%20%28sel%2EgetRangeAt%20%26%26%20sel%2ErangeCount%29%20%7B%0A%09%20%20%20%20%20%20return%20sel%2EgetRangeAt%280%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20return%20null%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20text%20selection%0A%09%20%2A%20http%3A%2F%2Fstackoverflow%2Ecom%2Fquestions%2F4687808%2Fcontenteditable%2Dselected%2Dtext%2Dsave%2Dand%2Drestore%0A%09%20%2A%20%40param%20%7BRange%20%7C%20TextRange%20%7C%20null%7D%20range%0A%09%20%2A%2F%0A%09exports%2EsetSelection%20%3D%20function%20setSelection%28range%29%20%7B%0A%09%20%20if%20%28range%29%20%7B%0A%09%20%20%20%20if%20%28window%2EgetSelection%29%20%7B%0A%09%20%20%20%20%20%20var%20sel%20%3D%20window%2EgetSelection%28%29%3B%0A%09%20%20%20%20%20%20sel%2EremoveAllRanges%28%29%3B%0A%09%20%20%20%20%20%20sel%2EaddRange%28range%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20selected%20text%20range%0A%09%20%2A%20%40return%20%7BObject%7D%20params%20%20object%20containing%20parameters%3A%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BNumber%7D%20%20startOffset%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BNumber%7D%20%20endOffset%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BElement%7D%20container%20%20HTML%20element%20holding%20the%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20selected%20text%20element%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Returns%20null%20if%20no%20text%20selection%20is%20found%0A%09%20%2A%2F%0A%09exports%2EgetSelectionOffset%20%3D%20function%20getSelectionOffset%28%29%20%7B%0A%09%20%20var%20range%20%3D%20exports%2EgetSelection%28%29%3B%0A%0A%09%20%20if%20%28range%20%26%26%20%27startOffset%27%20in%20range%20%26%26%20%27endOffset%27%20in%20range%20%26%26%0A%09%20%20%20%20%20%20range%2EstartContainer%20%26%26%20%28range%2EstartContainer%20%3D%3D%20range%2EendContainer%29%29%20%7B%0A%09%20%20%20%20return%20%7B%0A%09%20%20%20%20%20%20startOffset%3A%20range%2EstartOffset%2C%0A%09%20%20%20%20%20%20endOffset%3A%20range%2EendOffset%2C%0A%09%20%20%20%20%20%20container%3A%20range%2EstartContainer%2EparentNode%0A%09%20%20%20%20%7D%3B%0A%09%20%20%7D%0A%0A%09%20%20return%20null%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20selected%20text%20range%20in%20given%20element%0A%09%20%2A%20%40param%20%7BObject%7D%20params%20%20%20An%20object%20containing%3A%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BElement%7D%20container%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BNumber%7D%20startOffset%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BNumber%7D%20endOffset%0A%09%20%2A%2F%0A%09exports%2EsetSelectionOffset%20%3D%20function%20setSelectionOffset%28params%29%20%7B%0A%09%20%20if%20%28document%2EcreateRange%20%26%26%20window%2EgetSelection%29%20%7B%0A%09%20%20%20%20var%20selection%20%3D%20window%2EgetSelection%28%29%3B%0A%09%20%20%20%20if%28selection%29%20%7B%0A%09%20%20%20%20%20%20var%20range%20%3D%20document%2EcreateRange%28%29%3B%0A%09%20%20%20%20%20%20%2F%2F%20TODO%3A%20do%20not%20suppose%20that%20the%20first%20child%20of%20the%20container%20is%20a%20textnode%2C%0A%09%20%20%20%20%20%20%2F%2F%20%20%20%20%20%20%20but%20recursively%20find%20the%20textnodes%0A%09%20%20%20%20%20%20range%2EsetStart%28params%2Econtainer%2EfirstChild%2C%20params%2EstartOffset%29%3B%0A%09%20%20%20%20%20%20range%2EsetEnd%28params%2Econtainer%2EfirstChild%2C%20params%2EendOffset%29%3B%0A%0A%09%20%20%20%20%20%20exports%2EsetSelection%28range%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20the%20inner%20text%20of%20an%20HTML%20element%20%28for%20example%20a%20div%20element%29%0A%09%20%2A%20%40param%20%7BElement%7D%20element%0A%09%20%2A%20%40param%20%7BObject%7D%20%5Bbuffer%5D%0A%09%20%2A%20%40return%20%7BString%7D%20innerText%0A%09%20%2A%2F%0A%09exports%2EgetInnerText%20%3D%20function%20getInnerText%28element%2C%20buffer%29%20%7B%0A%09%20%20var%20first%20%3D%20%28buffer%20%3D%3D%20undefined%29%3B%0A%09%20%20if%20%28first%29%20%7B%0A%09%20%20%20%20buffer%20%3D%20%7B%0A%09%20%20%20%20%20%20%27text%27%3A%20%27%27%2C%0A%09%20%20%20%20%20%20%27flush%27%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20text%20%3D%20this%2Etext%3B%0A%09%20%20%20%20%20%20%20%20this%2Etext%20%3D%20%27%27%3B%0A%09%20%20%20%20%20%20%20%20return%20text%3B%0A%09%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%27set%27%3A%20function%20%28text%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Etext%20%3D%20text%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20text%20node%0A%09%20%20if%20%28element%2EnodeValue%29%20%7B%0A%09%20%20%20%20return%20buffer%2Eflush%28%29%20%2B%20element%2EnodeValue%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20divs%20or%20other%20HTML%20elements%0A%09%20%20if%20%28element%2EhasChildNodes%28%29%29%20%7B%0A%09%20%20%20%20var%20childNodes%20%3D%20element%2EchildNodes%3B%0A%09%20%20%20%20var%20innerText%20%3D%20%27%27%3B%0A%0A%09%20%20%20%20for%20%28var%20i%20%3D%200%2C%20iMax%20%3D%20childNodes%2Elength%3B%20i%20%3C%20iMax%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20var%20child%20%3D%20childNodes%5Bi%5D%3B%0A%0A%09%20%20%20%20%20%20if%20%28child%2EnodeName%20%3D%3D%20%27DIV%27%20%7C%7C%20child%2EnodeName%20%3D%3D%20%27P%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20prevChild%20%3D%20childNodes%5Bi%20%2D%201%5D%3B%0A%09%20%20%20%20%20%20%20%20var%20prevName%20%3D%20prevChild%20%3F%20prevChild%2EnodeName%20%3A%20undefined%3B%0A%09%20%20%20%20%20%20%20%20if%20%28prevName%20%26%26%20prevName%20%21%3D%20%27DIV%27%20%26%26%20prevName%20%21%3D%20%27P%27%20%26%26%20prevName%20%21%3D%20%27BR%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20innerText%20%2B%3D%20%27%5Cn%27%3B%0A%09%20%20%20%20%20%20%20%20%20%20buffer%2Eflush%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20innerText%20%2B%3D%20exports%2EgetInnerText%28child%2C%20buffer%29%3B%0A%09%20%20%20%20%20%20%20%20buffer%2Eset%28%27%5Cn%27%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20else%20if%20%28child%2EnodeName%20%3D%3D%20%27BR%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20innerText%20%2B%3D%20buffer%2Eflush%28%29%3B%0A%09%20%20%20%20%20%20%20%20buffer%2Eset%28%27%5Cn%27%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20innerText%20%2B%3D%20exports%2EgetInnerText%28child%2C%20buffer%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20return%20innerText%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20if%20%28element%2EnodeName%20%3D%3D%20%27P%27%20%26%26%20exports%2EgetInternetExplorerVersion%28%29%20%21%3D%20%2D1%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20On%20Internet%20Explorer%2C%20a%20%3Cp%3E%20with%20hasChildNodes%28%29%3D%3Dfalse%20is%0A%09%20%20%20%20%20%20%2F%2F%20rendered%20with%20a%20new%20line%2E%20Note%20that%20a%20%3Cp%3E%20with%0A%09%20%20%20%20%20%20%2F%2F%20hasChildNodes%28%29%3D%3Dtrue%20is%20rendered%20without%20a%20new%20line%0A%09%20%20%20%20%20%20%2F%2F%20Other%20browsers%20always%20ensure%20there%20is%20a%20%3Cbr%3E%20inside%20the%20%3Cp%3E%2C%0A%09%20%20%20%20%20%20%2F%2F%20and%20if%20not%2C%20the%20%3Cp%3E%20does%20not%20render%20a%20new%20line%0A%09%20%20%20%20%20%20return%20buffer%2Eflush%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20br%20or%20unknown%0A%09%20%20return%20%27%27%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Returns%20the%20version%20of%20Internet%20Explorer%20or%20a%20%2D1%0A%09%20%2A%20%28indicating%20the%20use%20of%20another%20browser%29%2E%0A%09%20%2A%20Source%3A%20http%3A%2F%2Fmsdn%2Emicrosoft%2Ecom%2Fen%2Dus%2Flibrary%2Fms537509%28v%3Dvs%2E85%29%2Easpx%0A%09%20%2A%20%40return%20%7BNumber%7D%20Internet%20Explorer%20version%2C%20or%20%2D1%20in%20case%20of%20an%20other%20browser%0A%09%20%2A%2F%0A%09exports%2EgetInternetExplorerVersion%20%3D%20function%20getInternetExplorerVersion%28%29%20%7B%0A%09%20%20if%20%28%5FieVersion%20%3D%3D%20%2D1%29%20%7B%0A%09%20%20%20%20var%20rv%20%3D%20%2D1%3B%20%2F%2F%20Return%20value%20assumes%20failure%2E%0A%09%20%20%20%20if%20%28navigator%2EappName%20%3D%3D%20%27Microsoft%20Internet%20Explorer%27%29%0A%09%20%20%20%20%7B%0A%09%20%20%20%20%20%20var%20ua%20%3D%20navigator%2EuserAgent%3B%0A%09%20%20%20%20%20%20var%20re%20%20%3D%20new%20RegExp%28%22MSIE%20%28%5B0%2D9%5D%7B1%2C%7D%5B%5C%2E0%2D9%5D%7B0%2C%7D%29%22%29%3B%0A%09%20%20%20%20%20%20if%20%28re%2Eexec%28ua%29%20%21%3D%20null%29%20%7B%0A%09%20%20%20%20%20%20%20%20rv%20%3D%20parseFloat%28%20RegExp%2E%241%20%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%5FieVersion%20%3D%20rv%3B%0A%09%20%20%7D%0A%0A%09%20%20return%20%5FieVersion%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Test%20whether%20the%20current%20browser%20is%20Firefox%0A%09%20%2A%20%40returns%20%7Bboolean%7D%20isFirefox%0A%09%20%2A%2F%0A%09exports%2EisFirefox%20%3D%20function%20isFirefox%20%28%29%20%7B%0A%09%20%20return%20%28navigator%2EuserAgent%2EindexOf%28%22Firefox%22%29%20%21%3D%20%2D1%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20cached%20internet%20explorer%20version%0A%09%20%2A%20%40type%20%7BNumber%7D%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09var%20%5FieVersion%20%3D%20%2D1%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Add%20and%20event%20listener%2E%20Works%20for%20all%20browsers%0A%09%20%2A%20%40param%20%7BElement%7D%20%20%20%20%20element%20%20%20%20An%20html%20element%0A%09%20%2A%20%40param%20%7Bstring%7D%20%20%20%20%20%20action%20%20%20%20%20The%20action%2C%20for%20example%20%22click%22%2C%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20without%20the%20prefix%20%22on%22%0A%09%20%2A%20%40param%20%7Bfunction%7D%20%20%20%20listener%20%20%20The%20callback%20function%20to%20be%20executed%0A%09%20%2A%20%40param%20%7Bboolean%7D%20%20%20%20%20%5BuseCapture%5D%20false%20by%20default%0A%09%20%2A%20%40return%20%7Bfunction%7D%20%20%20the%20created%20event%20listener%0A%09%20%2A%2F%0A%09exports%2EaddEventListener%20%3D%20function%20addEventListener%28element%2C%20action%2C%20listener%2C%20useCapture%29%20%7B%0A%09%20%20if%20%28element%2EaddEventListener%29%20%7B%0A%09%20%20%20%20if%20%28useCapture%20%3D%3D%3D%20undefined%29%0A%09%20%20%20%20%20%20useCapture%20%3D%20false%3B%0A%0A%09%20%20%20%20if%20%28action%20%3D%3D%3D%20%22mousewheel%22%20%26%26%20exports%2EisFirefox%28%29%29%20%7B%0A%09%20%20%20%20%20%20action%20%3D%20%22DOMMouseScroll%22%3B%20%20%2F%2F%20For%20Firefox%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20element%2EaddEventListener%28action%2C%20listener%2C%20useCapture%29%3B%0A%09%20%20%20%20return%20listener%3B%0A%09%20%20%7D%20else%20if%20%28element%2EattachEvent%29%20%7B%0A%09%20%20%20%20%2F%2F%20Old%20IE%20browsers%0A%09%20%20%20%20var%20f%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20return%20listener%2Ecall%28element%2C%20window%2Eevent%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20element%2EattachEvent%28%22on%22%20%2B%20action%2C%20f%29%3B%0A%09%20%20%20%20return%20f%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Remove%20an%20event%20listener%20from%20an%20element%0A%09%20%2A%20%40param%20%7BElement%7D%20%20element%20%20%20An%20html%20dom%20element%0A%09%20%2A%20%40param%20%7Bstring%7D%20%20%20action%20%20%20%20The%20name%20of%20the%20event%2C%20for%20example%20%22mousedown%22%0A%09%20%2A%20%40param%20%7Bfunction%7D%20listener%20%20The%20listener%20function%0A%09%20%2A%20%40param%20%7Bboolean%7D%20%20%5BuseCapture%5D%20%20%20false%20by%20default%0A%09%20%2A%2F%0A%09exports%2EremoveEventListener%20%3D%20function%20removeEventListener%28element%2C%20action%2C%20listener%2C%20useCapture%29%20%7B%0A%09%20%20if%20%28element%2EremoveEventListener%29%20%7B%0A%09%20%20%20%20if%20%28useCapture%20%3D%3D%3D%20undefined%29%0A%09%20%20%20%20%20%20useCapture%20%3D%20false%3B%0A%0A%09%20%20%20%20if%20%28action%20%3D%3D%3D%20%22mousewheel%22%20%26%26%20exports%2EisFirefox%28%29%29%20%7B%0A%09%20%20%20%20%20%20action%20%3D%20%22DOMMouseScroll%22%3B%20%20%2F%2F%20For%20Firefox%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20element%2EremoveEventListener%28action%2C%20listener%2C%20useCapture%29%3B%0A%09%20%20%7D%20else%20if%20%28element%2EdetachEvent%29%20%7B%0A%09%20%20%20%20%2F%2F%20Old%20IE%20browsers%0A%09%20%20%20%20element%2EdetachEvent%28%22on%22%20%2B%20action%2C%20listener%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%0A%2F%2A%2A%2A%2F%20%7D%2C%0A%2F%2A%204%20%2A%2F%0A%2F%2A%2A%2A%2F%20function%28module%2C%20exports%2C%20%5F%5Fwebpack%5Frequire%5F%5F%29%20%7B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20The%20highlighter%20can%20highlight%2Funhighlight%20a%20node%2C%20and%0A%09%20%2A%20animate%20the%20visibility%20of%20a%20context%20menu%2E%0A%09%20%2A%20%40constructor%20Highlighter%0A%09%20%2A%2F%0A%09function%20Highlighter%20%28%29%20%7B%0A%09%20%20this%2Elocked%20%3D%20false%3B%0A%09%7D%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Hightlight%20given%20node%20and%20its%20childs%0A%09%20%2A%20%40param%20%7BNode%7D%20node%0A%09%20%2A%2F%0A%09Highlighter%2Eprototype%2Ehighlight%20%3D%20function%20%28node%29%20%7B%0A%09%20%20if%20%28this%2Elocked%29%20%7B%0A%09%20%20%20%20return%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28this%2Enode%20%21%3D%20node%29%20%7B%0A%09%20%20%20%20%2F%2F%20unhighlight%20current%20node%0A%09%20%20%20%20if%20%28this%2Enode%29%20%7B%0A%09%20%20%20%20%20%20this%2Enode%2EsetHighlight%28false%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20highlight%20new%20node%0A%09%20%20%20%20this%2Enode%20%3D%20node%3B%0A%09%20%20%20%20this%2Enode%2EsetHighlight%28true%29%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20cancel%20any%20current%20timeout%0A%09%20%20this%2E%5FcancelUnhighlight%28%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Unhighlight%20currently%20highlighted%20node%2E%0A%09%20%2A%20Will%20be%20done%20after%20a%20delay%0A%09%20%2A%2F%0A%09Highlighter%2Eprototype%2Eunhighlight%20%3D%20function%20%28%29%20%7B%0A%09%20%20if%20%28this%2Elocked%29%20%7B%0A%09%20%20%20%20return%3B%0A%09%20%20%7D%0A%0A%09%20%20var%20me%20%3D%20this%3B%0A%09%20%20if%20%28this%2Enode%29%20%7B%0A%09%20%20%20%20this%2E%5FcancelUnhighlight%28%29%3B%0A%0A%09%20%20%20%20%2F%2F%20do%20the%20unhighlighting%20after%20a%20small%20delay%2C%20to%20prevent%20re%2Dhighlighting%0A%09%20%20%20%20%2F%2F%20the%20same%20node%20when%20moving%20from%20the%20drag%2Dicon%20to%20the%20contextmenu%2Dicon%0A%09%20%20%20%20%2F%2F%20or%20vice%20versa%2E%0A%09%20%20%20%20this%2EunhighlightTimer%20%3D%20setTimeout%28function%20%28%29%20%7B%0A%09%20%20%20%20%20%20me%2Enode%2EsetHighlight%28false%29%3B%0A%09%20%20%20%20%20%20me%2Enode%20%3D%20undefined%3B%0A%09%20%20%20%20%20%20me%2EunhighlightTimer%20%3D%20undefined%3B%0A%09%20%20%20%20%7D%2C%200%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Cancel%20an%20unhighlight%20action%20%28if%20before%20the%20timeout%20of%20the%20unhighlight%20action%29%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Highlighter%2Eprototype%2E%5FcancelUnhighlight%20%3D%20function%20%28%29%20%7B%0A%09%20%20if%20%28this%2EunhighlightTimer%29%20%7B%0A%09%20%20%20%20clearTimeout%28this%2EunhighlightTimer%29%3B%0A%09%20%20%20%20this%2EunhighlightTimer%20%3D%20undefined%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Lock%20highlighting%20or%20unhighlighting%20nodes%2E%0A%09%20%2A%20methods%20highlight%20and%20unhighlight%20do%20not%20work%20while%20locked%2E%0A%09%20%2A%2F%0A%09Highlighter%2Eprototype%2Elock%20%3D%20function%20%28%29%20%7B%0A%09%20%20this%2Elocked%20%3D%20true%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Unlock%20highlighting%20or%20unhighlighting%20nodes%0A%09%20%2A%2F%0A%09Highlighter%2Eprototype%2Eunlock%20%3D%20function%20%28%29%20%7B%0A%09%20%20this%2Elocked%20%3D%20false%3B%0A%09%7D%3B%0A%0A%09module%2Eexports%20%3D%20Highlighter%3B%0A%0A%0A%2F%2A%2A%2A%2F%20%7D%2C%0A%2F%2A%205%20%2A%2F%0A%2F%2A%2A%2A%2F%20function%28module%2C%20exports%2C%20%5F%5Fwebpack%5Frequire%5F%5F%29%20%7B%0A%0A%09var%20util%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%283%29%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20%40constructor%20History%0A%09%20%2A%20Store%20action%20history%2C%20enables%20undo%20and%20redo%0A%09%20%2A%20%40param%20%7BJSONEditor%7D%20editor%0A%09%20%2A%2F%0A%09function%20History%20%28editor%29%20%7B%0A%09%20%20this%2Eeditor%20%3D%20editor%3B%0A%09%20%20this%2Eclear%28%29%3B%0A%0A%09%20%20%2F%2F%20map%20with%20all%20supported%20actions%0A%09%20%20this%2Eactions%20%3D%20%7B%0A%09%20%20%20%20%27editField%27%3A%20%7B%0A%09%20%20%20%20%20%20%27undo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20params%2Enode%2EupdateField%28params%2EoldValue%29%3B%0A%09%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%27redo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20params%2Enode%2EupdateField%28params%2EnewValue%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%2C%0A%09%20%20%20%20%27editValue%27%3A%20%7B%0A%09%20%20%20%20%20%20%27undo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20params%2Enode%2EupdateValue%28params%2EoldValue%29%3B%0A%09%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%27redo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20params%2Enode%2EupdateValue%28params%2EnewValue%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%2C%0A%09%20%20%20%20%27appendNode%27%3A%20%7B%0A%09%20%20%20%20%20%20%27undo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20params%2Eparent%2EremoveChild%28params%2Enode%29%3B%0A%09%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%27redo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20params%2Eparent%2EappendChild%28params%2Enode%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%2C%0A%09%20%20%20%20%27insertBeforeNode%27%3A%20%7B%0A%09%20%20%20%20%20%20%27undo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20params%2Eparent%2EremoveChild%28params%2Enode%29%3B%0A%09%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%27redo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20params%2Eparent%2EinsertBefore%28params%2Enode%2C%20params%2EbeforeNode%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%2C%0A%09%20%20%20%20%27insertAfterNode%27%3A%20%7B%0A%09%20%20%20%20%20%20%27undo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20params%2Eparent%2EremoveChild%28params%2Enode%29%3B%0A%09%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%27redo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20params%2Eparent%2EinsertAfter%28params%2Enode%2C%20params%2EafterNode%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%2C%0A%09%20%20%20%20%27removeNode%27%3A%20%7B%0A%09%20%20%20%20%20%20%27undo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20parent%20%3D%20params%2Eparent%3B%0A%09%20%20%20%20%20%20%20%20var%20beforeNode%20%3D%20parent%2Echilds%5Bparams%2Eindex%5D%20%7C%7C%20parent%2Eappend%3B%0A%09%20%20%20%20%20%20%20%20parent%2EinsertBefore%28params%2Enode%2C%20beforeNode%29%3B%0A%09%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%27redo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20params%2Eparent%2EremoveChild%28params%2Enode%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%2C%0A%09%20%20%20%20%27duplicateNode%27%3A%20%7B%0A%09%20%20%20%20%20%20%27undo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20params%2Eparent%2EremoveChild%28params%2Eclone%29%3B%0A%09%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%27redo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20params%2Eparent%2EinsertAfter%28params%2Eclone%2C%20params%2Enode%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%2C%0A%09%20%20%20%20%27changeType%27%3A%20%7B%0A%09%20%20%20%20%20%20%27undo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20params%2Enode%2EchangeType%28params%2EoldType%29%3B%0A%09%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%27redo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20params%2Enode%2EchangeType%28params%2EnewType%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%2C%0A%09%20%20%20%20%27moveNode%27%3A%20%7B%0A%09%20%20%20%20%20%20%27undo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20params%2EstartParent%2EmoveTo%28params%2Enode%2C%20params%2EstartIndex%29%3B%0A%09%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%27redo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20params%2EendParent%2EmoveTo%28params%2Enode%2C%20params%2EendIndex%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%2C%0A%09%20%20%20%20%27sort%27%3A%20%7B%0A%09%20%20%20%20%20%20%27undo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20node%20%3D%20params%2Enode%3B%0A%09%20%20%20%20%20%20%20%20node%2EhideChilds%28%29%3B%0A%09%20%20%20%20%20%20%20%20node%2Esort%20%3D%20params%2EoldSort%3B%0A%09%20%20%20%20%20%20%20%20node%2Echilds%20%3D%20params%2EoldChilds%3B%0A%09%20%20%20%20%20%20%20%20node%2EshowChilds%28%29%3B%0A%09%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%27redo%27%3A%20function%20%28params%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20node%20%3D%20params%2Enode%3B%0A%09%20%20%20%20%20%20%20%20node%2EhideChilds%28%29%3B%0A%09%20%20%20%20%20%20%20%20node%2Esort%20%3D%20params%2EnewSort%3B%0A%09%20%20%20%20%20%20%20%20node%2Echilds%20%3D%20params%2EnewChilds%3B%0A%09%20%20%20%20%20%20%20%20node%2EshowChilds%28%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20TODO%3A%20restore%20the%20original%20caret%20position%20and%20selection%20with%20each%20undo%0A%09%20%20%20%20%2F%2F%20TODO%3A%20implement%20history%20for%20actions%20%22expand%22%2C%20%22collapse%22%2C%20%22scroll%22%2C%20%22setDocument%22%0A%09%20%20%7D%3B%0A%09%7D%0A%0A%09%2F%2A%2A%0A%09%20%2A%20The%20method%20onChange%20is%20executed%20when%20the%20History%20is%20changed%2C%20and%20can%0A%09%20%2A%20be%20overloaded%2E%0A%09%20%2A%2F%0A%09History%2Eprototype%2EonChange%20%3D%20function%20%28%29%20%7B%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Add%20a%20new%20action%20to%20the%20history%0A%09%20%2A%20%40param%20%7BString%7D%20action%20%20The%20executed%20action%2E%20Available%20actions%3A%20%22editField%22%2C%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22editValue%22%2C%20%22changeType%22%2C%20%22appendNode%22%2C%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22removeNode%22%2C%20%22duplicateNode%22%2C%20%22moveNode%22%0A%09%20%2A%20%40param%20%7BObject%7D%20params%20%20Object%20containing%20parameters%20describing%20the%20change%2E%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20The%20parameters%20in%20params%20depend%20on%20the%20action%20%28for%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20example%20for%20%22editValue%22%20the%20Node%2C%20old%20value%2C%20and%20new%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%20are%20provided%29%2E%20params%20contains%20all%20information%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20needed%20to%20undo%20or%20redo%20the%20action%2E%0A%09%20%2A%2F%0A%09History%2Eprototype%2Eadd%20%3D%20function%20%28action%2C%20params%29%20%7B%0A%09%20%20this%2Eindex%2B%2B%3B%0A%09%20%20this%2Ehistory%5Bthis%2Eindex%5D%20%3D%20%7B%0A%09%20%20%20%20%27action%27%3A%20action%2C%0A%09%20%20%20%20%27params%27%3A%20params%2C%0A%09%20%20%20%20%27timestamp%27%3A%20new%20Date%28%29%0A%09%20%20%7D%3B%0A%0A%09%20%20%2F%2F%20remove%20redo%20actions%20which%20are%20invalid%20now%0A%09%20%20if%20%28this%2Eindex%20%3C%20this%2Ehistory%2Elength%20%2D%201%29%20%7B%0A%09%20%20%20%20this%2Ehistory%2Esplice%28this%2Eindex%20%2B%201%2C%20this%2Ehistory%2Elength%20%2D%20this%2Eindex%20%2D%201%29%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20fire%20onchange%20event%0A%09%20%20this%2EonChange%28%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Clear%20history%0A%09%20%2A%2F%0A%09History%2Eprototype%2Eclear%20%3D%20function%20%28%29%20%7B%0A%09%20%20this%2Ehistory%20%3D%20%5B%5D%3B%0A%09%20%20this%2Eindex%20%3D%20%2D1%3B%0A%0A%09%20%20%2F%2F%20fire%20onchange%20event%0A%09%20%20this%2EonChange%28%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Check%20if%20there%20is%20an%20action%20available%20for%20undo%0A%09%20%2A%20%40return%20%7BBoolean%7D%20canUndo%0A%09%20%2A%2F%0A%09History%2Eprototype%2EcanUndo%20%3D%20function%20%28%29%20%7B%0A%09%20%20return%20%28this%2Eindex%20%3E%3D%200%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Check%20if%20there%20is%20an%20action%20available%20for%20redo%0A%09%20%2A%20%40return%20%7BBoolean%7D%20canRedo%0A%09%20%2A%2F%0A%09History%2Eprototype%2EcanRedo%20%3D%20function%20%28%29%20%7B%0A%09%20%20return%20%28this%2Eindex%20%3C%20this%2Ehistory%2Elength%20%2D%201%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Undo%20the%20last%20action%0A%09%20%2A%2F%0A%09History%2Eprototype%2Eundo%20%3D%20function%20%28%29%20%7B%0A%09%20%20if%20%28this%2EcanUndo%28%29%29%20%7B%0A%09%20%20%20%20var%20obj%20%3D%20this%2Ehistory%5Bthis%2Eindex%5D%3B%0A%09%20%20%20%20if%20%28obj%29%20%7B%0A%09%20%20%20%20%20%20var%20action%20%3D%20this%2Eactions%5Bobj%2Eaction%5D%3B%0A%09%20%20%20%20%20%20if%20%28action%20%26%26%20action%2Eundo%29%20%7B%0A%09%20%20%20%20%20%20%20%20action%2Eundo%28obj%2Eparams%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28obj%2Eparams%2EoldSelection%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20this%2Eeditor%2EsetSelection%28obj%2Eparams%2EoldSelection%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20util%2Elog%28%27Error%3A%20unknown%20action%20%22%27%20%2B%20obj%2Eaction%20%2B%20%27%22%27%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20this%2Eindex%2D%2D%3B%0A%0A%09%20%20%20%20%2F%2F%20fire%20onchange%20event%0A%09%20%20%20%20this%2EonChange%28%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Redo%20the%20last%20action%0A%09%20%2A%2F%0A%09History%2Eprototype%2Eredo%20%3D%20function%20%28%29%20%7B%0A%09%20%20if%20%28this%2EcanRedo%28%29%29%20%7B%0A%09%20%20%20%20this%2Eindex%2B%2B%3B%0A%0A%09%20%20%20%20var%20obj%20%3D%20this%2Ehistory%5Bthis%2Eindex%5D%3B%0A%09%20%20%20%20if%20%28obj%29%20%7B%0A%09%20%20%20%20%20%20var%20action%20%3D%20this%2Eactions%5Bobj%2Eaction%5D%3B%0A%09%20%20%20%20%20%20if%20%28action%20%26%26%20action%2Eredo%29%20%7B%0A%09%20%20%20%20%20%20%20%20action%2Eredo%28obj%2Eparams%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28obj%2Eparams%2EnewSelection%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20this%2Eeditor%2EsetSelection%28obj%2Eparams%2EnewSelection%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20util%2Elog%28%27Error%3A%20unknown%20action%20%22%27%20%2B%20obj%2Eaction%20%2B%20%27%22%27%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20fire%20onchange%20event%0A%09%20%20%20%20this%2EonChange%28%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09module%2Eexports%20%3D%20History%3B%0A%0A%0A%2F%2A%2A%2A%2F%20%7D%2C%0A%2F%2A%206%20%2A%2F%0A%2F%2A%2A%2A%2F%20function%28module%2C%20exports%2C%20%5F%5Fwebpack%5Frequire%5F%5F%29%20%7B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20%40constructor%20SearchBox%0A%09%20%2A%20Create%20a%20search%20box%20in%20given%20HTML%20container%0A%09%20%2A%20%40param%20%7BJSONEditor%7D%20editor%20%20%20%20The%20JSON%20Editor%20to%20attach%20to%0A%09%20%2A%20%40param%20%7BElement%7D%20container%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20HTML%20container%20element%20of%20where%20to%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20create%20the%20search%20box%0A%09%20%2A%2F%0A%09function%20SearchBox%20%28editor%2C%20container%29%20%7B%0A%09%20%20var%20searchBox%20%3D%20this%3B%0A%0A%09%20%20this%2Eeditor%20%3D%20editor%3B%0A%09%20%20this%2Etimeout%20%3D%20undefined%3B%0A%09%20%20this%2Edelay%20%3D%20200%3B%20%2F%2F%20ms%0A%09%20%20this%2ElastText%20%3D%20undefined%3B%0A%0A%09%20%20this%2Edom%20%3D%20%7B%7D%3B%0A%09%20%20this%2Edom%2Econtainer%20%3D%20container%3B%0A%0A%09%20%20var%20table%20%3D%20document%2EcreateElement%28%27table%27%29%3B%0A%09%20%20this%2Edom%2Etable%20%3D%20table%3B%0A%09%20%20table%2EclassName%20%3D%20%27search%27%3B%0A%09%20%20container%2EappendChild%28table%29%3B%0A%09%20%20var%20tbody%20%3D%20document%2EcreateElement%28%27tbody%27%29%3B%0A%09%20%20this%2Edom%2Etbody%20%3D%20tbody%3B%0A%09%20%20table%2EappendChild%28tbody%29%3B%0A%09%20%20var%20tr%20%3D%20document%2EcreateElement%28%27tr%27%29%3B%0A%09%20%20tbody%2EappendChild%28tr%29%3B%0A%0A%09%20%20var%20td%20%3D%20document%2EcreateElement%28%27td%27%29%3B%0A%09%20%20tr%2EappendChild%28td%29%3B%0A%09%20%20var%20results%20%3D%20document%2EcreateElement%28%27div%27%29%3B%0A%09%20%20this%2Edom%2Eresults%20%3D%20results%3B%0A%09%20%20results%2EclassName%20%3D%20%27results%27%3B%0A%09%20%20td%2EappendChild%28results%29%3B%0A%0A%09%20%20td%20%3D%20document%2EcreateElement%28%27td%27%29%3B%0A%09%20%20tr%2EappendChild%28td%29%3B%0A%09%20%20var%20divInput%20%3D%20document%2EcreateElement%28%27div%27%29%3B%0A%09%20%20this%2Edom%2Einput%20%3D%20divInput%3B%0A%09%20%20divInput%2EclassName%20%3D%20%27frame%27%3B%0A%09%20%20divInput%2Etitle%20%3D%20%27Search%20fields%20and%20values%27%3B%0A%09%20%20td%2EappendChild%28divInput%29%3B%0A%0A%09%20%20%2F%2F%20table%20to%20contain%20the%20text%20input%20and%20search%20button%0A%09%20%20var%20tableInput%20%3D%20document%2EcreateElement%28%27table%27%29%3B%0A%09%20%20divInput%2EappendChild%28tableInput%29%3B%0A%09%20%20var%20tbodySearch%20%3D%20document%2EcreateElement%28%27tbody%27%29%3B%0A%09%20%20tableInput%2EappendChild%28tbodySearch%29%3B%0A%09%20%20tr%20%3D%20document%2EcreateElement%28%27tr%27%29%3B%0A%09%20%20tbodySearch%2EappendChild%28tr%29%3B%0A%0A%09%20%20var%20refreshSearch%20%3D%20document%2EcreateElement%28%27button%27%29%3B%0A%09%20%20refreshSearch%2EclassName%20%3D%20%27refresh%27%3B%0A%09%20%20td%20%3D%20document%2EcreateElement%28%27td%27%29%3B%0A%09%20%20td%2EappendChild%28refreshSearch%29%3B%0A%09%20%20tr%2EappendChild%28td%29%3B%0A%0A%09%20%20var%20search%20%3D%20document%2EcreateElement%28%27input%27%29%3B%0A%09%20%20this%2Edom%2Esearch%20%3D%20search%3B%0A%09%20%20search%2Eoninput%20%3D%20function%20%28event%29%20%7B%0A%09%20%20%20%20searchBox%2E%5FonDelayedSearch%28event%29%3B%0A%09%20%20%7D%3B%0A%09%20%20search%2Eonchange%20%3D%20function%20%28event%29%20%7B%20%2F%2F%20For%20IE%209%0A%09%20%20%20%20searchBox%2E%5FonSearch%28event%29%3B%0A%09%20%20%7D%3B%0A%09%20%20search%2Eonkeydown%20%3D%20function%20%28event%29%20%7B%0A%09%20%20%20%20searchBox%2E%5FonKeyDown%28event%29%3B%0A%09%20%20%7D%3B%0A%09%20%20search%2Eonkeyup%20%3D%20function%20%28event%29%20%7B%0A%09%20%20%20%20searchBox%2E%5FonKeyUp%28event%29%3B%0A%09%20%20%7D%3B%0A%09%20%20refreshSearch%2Eonclick%20%3D%20function%20%28event%29%20%7B%0A%09%20%20%20%20search%2Eselect%28%29%3B%0A%09%20%20%7D%3B%0A%0A%09%20%20%2F%2F%20TODO%3A%20ESC%20in%20FF%20restores%20the%20last%20input%2C%20is%20a%20FF%20bug%2C%20https%3A%2F%2Fbugzilla%2Emozilla%2Eorg%2Fshow%5Fbug%2Ecgi%3Fid%3D598819%0A%09%20%20td%20%3D%20document%2EcreateElement%28%27td%27%29%3B%0A%09%20%20td%2EappendChild%28search%29%3B%0A%09%20%20tr%2EappendChild%28td%29%3B%0A%0A%09%20%20var%20searchNext%20%3D%20document%2EcreateElement%28%27button%27%29%3B%0A%09%20%20searchNext%2Etitle%20%3D%20%27Next%20result%20%28Enter%29%27%3B%0A%09%20%20searchNext%2EclassName%20%3D%20%27next%27%3B%0A%09%20%20searchNext%2Eonclick%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20searchBox%2Enext%28%29%3B%0A%09%20%20%7D%3B%0A%09%20%20td%20%3D%20document%2EcreateElement%28%27td%27%29%3B%0A%09%20%20td%2EappendChild%28searchNext%29%3B%0A%09%20%20tr%2EappendChild%28td%29%3B%0A%0A%09%20%20var%20searchPrevious%20%3D%20document%2EcreateElement%28%27button%27%29%3B%0A%09%20%20searchPrevious%2Etitle%20%3D%20%27Previous%20result%20%28Shift%2BEnter%29%27%3B%0A%09%20%20searchPrevious%2EclassName%20%3D%20%27previous%27%3B%0A%09%20%20searchPrevious%2Eonclick%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20searchBox%2Eprevious%28%29%3B%0A%09%20%20%7D%3B%0A%09%20%20td%20%3D%20document%2EcreateElement%28%27td%27%29%3B%0A%09%20%20td%2EappendChild%28searchPrevious%29%3B%0A%09%20%20tr%2EappendChild%28td%29%3B%0A%09%7D%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Go%20to%20the%20next%20search%20result%0A%09%20%2A%20%40param%20%7Bboolean%7D%20%5Bfocus%5D%20%20%20If%20true%2C%20focus%20will%20be%20set%20to%20the%20next%20result%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20focus%20is%20false%20by%20default%2E%0A%09%20%2A%2F%0A%09SearchBox%2Eprototype%2Enext%20%3D%20function%28focus%29%20%7B%0A%09%20%20if%20%28this%2Eresults%20%21%3D%20undefined%29%20%7B%0A%09%20%20%20%20var%20index%20%3D%20%28this%2EresultIndex%20%21%3D%20undefined%29%20%3F%20this%2EresultIndex%20%2B%201%20%3A%200%3B%0A%09%20%20%20%20if%20%28index%20%3E%20this%2Eresults%2Elength%20%2D%201%29%20%7B%0A%09%20%20%20%20%20%20index%20%3D%200%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20this%2E%5FsetActiveResult%28index%2C%20focus%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Go%20to%20the%20prevous%20search%20result%0A%09%20%2A%20%40param%20%7Bboolean%7D%20%5Bfocus%5D%20%20%20If%20true%2C%20focus%20will%20be%20set%20to%20the%20next%20result%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20focus%20is%20false%20by%20default%2E%0A%09%20%2A%2F%0A%09SearchBox%2Eprototype%2Eprevious%20%3D%20function%28focus%29%20%7B%0A%09%20%20if%20%28this%2Eresults%20%21%3D%20undefined%29%20%7B%0A%09%20%20%20%20var%20max%20%3D%20this%2Eresults%2Elength%20%2D%201%3B%0A%09%20%20%20%20var%20index%20%3D%20%28this%2EresultIndex%20%21%3D%20undefined%29%20%3F%20this%2EresultIndex%20%2D%201%20%3A%20max%3B%0A%09%20%20%20%20if%20%28index%20%3C%200%29%20%7B%0A%09%20%20%20%20%20%20index%20%3D%20max%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20this%2E%5FsetActiveResult%28index%2C%20focus%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20new%20value%20for%20the%20current%20active%20result%0A%09%20%2A%20%40param%20%7BNumber%7D%20index%0A%09%20%2A%20%40param%20%7Bboolean%7D%20%5Bfocus%5D%20%20%20If%20true%2C%20focus%20will%20be%20set%20to%20the%20next%20result%2E%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20focus%20is%20false%20by%20default%2E%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09SearchBox%2Eprototype%2E%5FsetActiveResult%20%3D%20function%28index%2C%20focus%29%20%7B%0A%09%20%20%2F%2F%20de%2Dactivate%20current%20active%20result%0A%09%20%20if%20%28this%2EactiveResult%29%20%7B%0A%09%20%20%20%20var%20prevNode%20%3D%20this%2EactiveResult%2Enode%3B%0A%09%20%20%20%20var%20prevElem%20%3D%20this%2EactiveResult%2Eelem%3B%0A%09%20%20%20%20if%20%28prevElem%20%3D%3D%20%27field%27%29%20%7B%0A%09%20%20%20%20%20%20delete%20prevNode%2EsearchFieldActive%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20delete%20prevNode%2EsearchValueActive%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20prevNode%2EupdateDom%28%29%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28%21this%2Eresults%20%7C%7C%20%21this%2Eresults%5Bindex%5D%29%20%7B%0A%09%20%20%20%20%2F%2F%20out%20of%20range%2C%20set%20to%20undefined%0A%09%20%20%20%20this%2EresultIndex%20%3D%20undefined%3B%0A%09%20%20%20%20this%2EactiveResult%20%3D%20undefined%3B%0A%09%20%20%20%20return%3B%0A%09%20%20%7D%0A%0A%09%20%20this%2EresultIndex%20%3D%20index%3B%0A%0A%09%20%20%2F%2F%20set%20new%20node%20active%0A%09%20%20var%20node%20%3D%20this%2Eresults%5Bthis%2EresultIndex%5D%2Enode%3B%0A%09%20%20var%20elem%20%3D%20this%2Eresults%5Bthis%2EresultIndex%5D%2Eelem%3B%0A%09%20%20if%20%28elem%20%3D%3D%20%27field%27%29%20%7B%0A%09%20%20%20%20node%2EsearchFieldActive%20%3D%20true%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20node%2EsearchValueActive%20%3D%20true%3B%0A%09%20%20%7D%0A%09%20%20this%2EactiveResult%20%3D%20this%2Eresults%5Bthis%2EresultIndex%5D%3B%0A%09%20%20node%2EupdateDom%28%29%3B%0A%0A%09%20%20%2F%2F%20TODO%3A%20not%20so%20nice%20that%20the%20focus%20is%20only%20set%20after%20the%20animation%20is%20finished%0A%09%20%20node%2EscrollTo%28function%20%28%29%20%7B%0A%09%20%20%20%20if%20%28focus%29%20%7B%0A%09%20%20%20%20%20%20node%2Efocus%28elem%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Cancel%20any%20running%20onDelayedSearch%2E%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09SearchBox%2Eprototype%2E%5FclearDelay%20%3D%20function%28%29%20%7B%0A%09%20%20if%20%28this%2Etimeout%20%21%3D%20undefined%29%20%7B%0A%09%20%20%20%20clearTimeout%28this%2Etimeout%29%3B%0A%09%20%20%20%20delete%20this%2Etimeout%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Start%20a%20timer%20to%20execute%20a%20search%20after%20a%20short%20delay%2E%0A%09%20%2A%20Used%20for%20reducing%20the%20number%20of%20searches%20while%20typing%2E%0A%09%20%2A%20%40param%20%7BEvent%7D%20event%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09SearchBox%2Eprototype%2E%5FonDelayedSearch%20%3D%20function%20%28event%29%20%7B%0A%09%20%20%2F%2F%20execute%20the%20search%20after%20a%20short%20delay%20%28reduces%20the%20number%20of%0A%09%20%20%2F%2F%20search%20actions%20while%20typing%20in%20the%20search%20text%20box%29%0A%09%20%20this%2E%5FclearDelay%28%29%3B%0A%09%20%20var%20searchBox%20%3D%20this%3B%0A%09%20%20this%2Etimeout%20%3D%20setTimeout%28function%20%28event%29%20%7B%0A%09%20%20%20%20%20%20%20%20searchBox%2E%5FonSearch%28event%29%3B%0A%09%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20this%2Edelay%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Handle%20onSearch%20event%0A%09%20%2A%20%40param%20%7BEvent%7D%20event%0A%09%20%2A%20%40param%20%7Bboolean%7D%20%5BforceSearch%5D%20%20If%20true%2C%20search%20will%20be%20executed%20again%20even%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20when%20the%20search%20text%20is%20not%20changed%2E%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Default%20is%20false%2E%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09SearchBox%2Eprototype%2E%5FonSearch%20%3D%20function%20%28event%2C%20forceSearch%29%20%7B%0A%09%20%20this%2E%5FclearDelay%28%29%3B%0A%0A%09%20%20var%20value%20%3D%20this%2Edom%2Esearch%2Evalue%3B%0A%09%20%20var%20text%20%3D%20%28value%2Elength%20%3E%200%29%20%3F%20value%20%3A%20undefined%3B%0A%09%20%20if%20%28text%20%21%3D%20this%2ElastText%20%7C%7C%20forceSearch%29%20%7B%0A%09%20%20%20%20%2F%2F%20only%20search%20again%20when%20changed%0A%09%20%20%20%20this%2ElastText%20%3D%20text%3B%0A%09%20%20%20%20this%2Eresults%20%3D%20this%2Eeditor%2Esearch%28text%29%3B%0A%09%20%20%20%20this%2E%5FsetActiveResult%28undefined%29%3B%0A%0A%09%20%20%20%20%2F%2F%20display%20search%20results%0A%09%20%20%20%20if%20%28text%20%21%3D%20undefined%29%20%7B%0A%09%20%20%20%20%20%20var%20resultCount%20%3D%20this%2Eresults%2Elength%3B%0A%09%20%20%20%20%20%20switch%20%28resultCount%29%20%7B%0A%09%20%20%20%20%20%20%20%20case%200%3A%20this%2Edom%2Eresults%2EinnerHTML%20%3D%20%27no%26nbsp%3Bresults%27%3B%20break%3B%0A%09%20%20%20%20%20%20%20%20case%201%3A%20this%2Edom%2Eresults%2EinnerHTML%20%3D%20%271%26nbsp%3Bresult%27%3B%20break%3B%0A%09%20%20%20%20%20%20%20%20default%3A%20this%2Edom%2Eresults%2EinnerHTML%20%3D%20resultCount%20%2B%20%27%26nbsp%3Bresults%27%3B%20break%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20this%2Edom%2Eresults%2EinnerHTML%20%3D%20%27%27%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Handle%20onKeyDown%20event%20in%20the%20input%20box%0A%09%20%2A%20%40param%20%7BEvent%7D%20event%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09SearchBox%2Eprototype%2E%5FonKeyDown%20%3D%20function%20%28event%29%20%7B%0A%09%20%20var%20keynum%20%3D%20event%2Ewhich%3B%0A%09%20%20if%20%28keynum%20%3D%3D%2027%29%20%7B%20%2F%2F%20ESC%0A%09%20%20%20%20this%2Edom%2Esearch%2Evalue%20%3D%20%27%27%3B%20%20%2F%2F%20clear%20search%0A%09%20%20%20%20this%2E%5FonSearch%28event%29%3B%0A%09%20%20%20%20event%2EpreventDefault%28%29%3B%0A%09%20%20%20%20event%2EstopPropagation%28%29%3B%0A%09%20%20%7D%0A%09%20%20else%20if%20%28keynum%20%3D%3D%2013%29%20%7B%20%2F%2F%20Enter%0A%09%20%20%20%20if%20%28event%2EctrlKey%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20force%20to%20search%20again%0A%09%20%20%20%20%20%20this%2E%5FonSearch%28event%2C%20true%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28event%2EshiftKey%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20move%20to%20the%20previous%20search%20result%0A%09%20%20%20%20%20%20this%2Eprevious%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20move%20to%20the%20next%20search%20result%0A%09%20%20%20%20%20%20this%2Enext%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20event%2EpreventDefault%28%29%3B%0A%09%20%20%20%20event%2EstopPropagation%28%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Handle%20onKeyUp%20event%20in%20the%20input%20box%0A%09%20%2A%20%40param%20%7BEvent%7D%20event%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09SearchBox%2Eprototype%2E%5FonKeyUp%20%3D%20function%20%28event%29%20%7B%0A%09%20%20var%20keynum%20%3D%20event%2EkeyCode%3B%0A%09%20%20if%20%28keynum%20%21%3D%2027%20%26%26%20keynum%20%21%3D%2013%29%20%7B%20%2F%2F%20%21show%20and%20%21Enter%0A%09%20%20%20%20this%2E%5FonDelayedSearch%28event%29%3B%20%20%20%2F%2F%20For%20IE%209%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09module%2Eexports%20%3D%20SearchBox%3B%0A%0A%0A%2F%2A%2A%2A%2F%20%7D%2C%0A%2F%2A%207%20%2A%2F%0A%2F%2A%2A%2A%2F%20function%28module%2C%20exports%2C%20%5F%5Fwebpack%5Frequire%5F%5F%29%20%7B%0A%0A%09var%20ContextMenu%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%2810%29%3B%0A%09var%20appendNodeFactory%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%2811%29%3B%0A%09var%20util%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%283%29%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20%40constructor%20Node%0A%09%20%2A%20Create%20a%20new%20Node%0A%09%20%2A%20%40param%20%7BTreeEditor%7D%20editor%0A%09%20%2A%20%40param%20%7BObject%7D%20%5Bparams%5D%20Can%20contain%20parameters%3A%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bstring%7D%20%20field%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bboolean%7D%20fieldEditable%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%2A%7D%20%20%20%20%20%20%20value%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7BString%7D%20%20type%20%20Can%20have%20values%20%27auto%27%2C%20%27array%27%2C%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27object%27%2C%20or%20%27string%27%2E%0A%09%20%2A%2F%0A%09function%20Node%20%28editor%2C%20params%29%20%7B%0A%09%20%20%2F%2A%2A%20%40type%20%7BTreeEditor%7D%20%2A%2F%0A%09%20%20this%2Eeditor%20%3D%20editor%3B%0A%09%20%20this%2Edom%20%3D%20%7B%7D%3B%0A%09%20%20this%2Eexpanded%20%3D%20false%3B%0A%0A%09%20%20if%28params%20%26%26%20%28params%20instanceof%20Object%29%29%20%7B%0A%09%20%20%20%20this%2EsetField%28params%2Efield%2C%20params%2EfieldEditable%29%3B%0A%09%20%20%20%20this%2EsetValue%28params%2Evalue%2C%20params%2Etype%29%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20this%2EsetField%28%27%27%29%3B%0A%09%20%20%20%20this%2EsetValue%28null%29%3B%0A%09%20%20%7D%0A%09%7D%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Determine%20whether%20the%20field%20and%2For%20value%20of%20this%20node%20are%20editable%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FupdateEditability%20%3D%20function%20%28%29%20%7B%0A%09%20%20this%2Eeditable%20%3D%20%7B%0A%09%20%20%20%20field%3A%20true%2C%0A%09%20%20%20%20value%3A%20true%0A%09%20%20%7D%3B%0A%0A%09%20%20if%20%28this%2Eeditor%29%20%7B%0A%09%20%20%20%20this%2Eeditable%2Efield%20%3D%20this%2Eeditor%2Eoptions%2Emode%20%3D%3D%3D%20%27tree%27%3B%0A%09%20%20%20%20this%2Eeditable%2Evalue%20%3D%20this%2Eeditor%2Eoptions%2Emode%20%21%3D%3D%20%27view%27%3B%0A%0A%09%20%20%20%20if%20%28this%2Eeditor%2Eoptions%2Emode%20%3D%3D%3D%20%27tree%27%20%26%26%20%28typeof%20this%2Eeditor%2Eoptions%2Eeditable%20%3D%3D%3D%20%27function%27%29%29%20%7B%0A%09%20%20%20%20%20%20var%20editable%20%3D%20this%2Eeditor%2Eoptions%2Eeditable%28%7B%0A%09%20%20%20%20%20%20%20%20field%3A%20this%2Efield%2C%0A%09%20%20%20%20%20%20%20%20value%3A%20this%2Evalue%2C%0A%09%20%20%20%20%20%20%20%20path%3A%20this%2Epath%28%29%0A%09%20%20%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20%20%20if%20%28typeof%20editable%20%3D%3D%3D%20%27boolean%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Eeditable%2Efield%20%3D%20editable%3B%0A%09%20%20%20%20%20%20%20%20this%2Eeditable%2Evalue%20%3D%20editable%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28typeof%20editable%2Efield%20%3D%3D%3D%20%27boolean%27%29%20this%2Eeditable%2Efield%20%3D%20editable%2Efield%3B%0A%09%20%20%20%20%20%20%20%20if%20%28typeof%20editable%2Evalue%20%3D%3D%3D%20%27boolean%27%29%20this%2Eeditable%2Evalue%20%3D%20editable%2Evalue%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20the%20path%20of%20this%20node%0A%09%20%2A%20%40return%20%7BString%5B%5D%7D%20Array%20containing%20the%20path%20to%20this%20node%0A%09%20%2A%2F%0A%09Node%2Eprototype%2Epath%20%3D%20function%20%28%29%20%7B%0A%09%20%20var%20node%20%3D%20this%3B%0A%09%20%20var%20path%20%3D%20%5B%5D%3B%0A%09%20%20while%20%28node%29%20%7B%0A%09%20%20%20%20var%20field%20%3D%20node%2Efield%20%21%3D%20undefined%20%3F%20node%2Efield%20%3A%20node%2Eindex%3B%0A%09%20%20%20%20if%20%28field%20%21%3D%3D%20undefined%29%20%7B%0A%09%20%20%20%20%20%20path%2Eunshift%28field%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20node%20%3D%20node%2Eparent%3B%0A%09%20%20%7D%0A%09%20%20return%20path%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20parent%20node%0A%09%20%2A%20%40param%20%7BNode%7D%20parent%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EsetParent%20%3D%20function%28parent%29%20%7B%0A%09%20%20this%2Eparent%20%3D%20parent%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20field%0A%09%20%2A%20%40param%20%7BString%7D%20%20field%0A%09%20%2A%20%40param%20%7Bboolean%7D%20%5BfieldEditable%5D%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EsetField%20%3D%20function%28field%2C%20fieldEditable%29%20%7B%0A%09%20%20this%2Efield%20%3D%20field%3B%0A%09%20%20this%2EfieldEditable%20%3D%20%28fieldEditable%20%3D%3D%3D%20true%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20field%0A%09%20%2A%20%40return%20%7BString%7D%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EgetField%20%3D%20function%28%29%20%7B%0A%09%20%20if%20%28this%2Efield%20%3D%3D%3D%20undefined%29%20%7B%0A%09%20%20%20%20this%2E%5FgetDomField%28%29%3B%0A%09%20%20%7D%0A%0A%09%20%20return%20this%2Efield%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20value%2E%20Value%20is%20a%20JSON%20structure%20or%20an%20element%20String%2C%20Boolean%2C%20etc%2E%0A%09%20%2A%20%40param%20%7B%2A%7D%20value%0A%09%20%2A%20%40param%20%7BString%7D%20%5Btype%5D%20%20Specify%20the%20type%20of%20the%20value%2E%20Can%20be%20%27auto%27%2C%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27array%27%2C%20%27object%27%2C%20or%20%27string%27%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EsetValue%20%3D%20function%28value%2C%20type%29%20%7B%0A%09%20%20var%20childValue%2C%20child%3B%0A%0A%09%20%20%2F%2F%20first%20clear%20all%20current%20childs%20%28if%20any%29%0A%09%20%20var%20childs%20%3D%20this%2Echilds%3B%0A%09%20%20if%20%28childs%29%20%7B%0A%09%20%20%20%20while%20%28childs%2Elength%29%20%7B%0A%09%20%20%20%20%20%20this%2EremoveChild%28childs%5B0%5D%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20TODO%3A%20remove%20the%20DOM%20of%20this%20Node%0A%0A%09%20%20this%2Etype%20%3D%20this%2E%5FgetType%28value%29%3B%0A%0A%09%20%20%2F%2F%20check%20if%20type%20corresponds%20with%20the%20provided%20type%0A%09%20%20if%20%28type%20%26%26%20type%20%21%3D%20this%2Etype%29%20%7B%0A%09%20%20%20%20if%20%28type%20%3D%3D%20%27string%27%20%26%26%20this%2Etype%20%3D%3D%20%27auto%27%29%20%7B%0A%09%20%20%20%20%20%20this%2Etype%20%3D%20type%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20throw%20new%20Error%28%27Type%20mismatch%3A%20%27%20%2B%0A%09%20%20%20%20%20%20%20%20%20%20%27cannot%20cast%20value%20of%20type%20%22%27%20%2B%20this%2Etype%20%2B%0A%09%20%20%20%20%20%20%20%20%20%20%27%20to%20the%20specified%20type%20%22%27%20%2B%20type%20%2B%20%27%22%27%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20if%20%28this%2Etype%20%3D%3D%20%27array%27%29%20%7B%0A%09%20%20%20%20%2F%2F%20array%0A%09%20%20%20%20this%2Echilds%20%3D%20%5B%5D%3B%0A%09%20%20%20%20for%20%28var%20i%20%3D%200%2C%20iMax%20%3D%20value%2Elength%3B%20i%20%3C%20iMax%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20childValue%20%3D%20value%5Bi%5D%3B%0A%09%20%20%20%20%20%20if%20%28childValue%20%21%3D%3D%20undefined%20%26%26%20%21%28childValue%20instanceof%20Function%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%2F%2F%20ignore%20undefined%20and%20functions%0A%09%20%20%20%20%20%20%20%20child%20%3D%20new%20Node%28this%2Eeditor%2C%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20value%3A%20childValue%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20%20%20this%2EappendChild%28child%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20this%2Evalue%20%3D%20%27%27%3B%0A%09%20%20%7D%0A%09%20%20else%20if%20%28this%2Etype%20%3D%3D%20%27object%27%29%20%7B%0A%09%20%20%20%20%2F%2F%20object%0A%09%20%20%20%20this%2Echilds%20%3D%20%5B%5D%3B%0A%09%20%20%20%20for%20%28var%20childField%20in%20value%29%20%7B%0A%09%20%20%20%20%20%20if%20%28value%2EhasOwnProperty%28childField%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20childValue%20%3D%20value%5BchildField%5D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28childValue%20%21%3D%3D%20undefined%20%26%26%20%21%28childValue%20instanceof%20Function%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%2F%2F%20ignore%20undefined%20and%20functions%0A%09%20%20%20%20%20%20%20%20%20%20child%20%3D%20new%20Node%28this%2Eeditor%2C%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20field%3A%20childField%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20childValue%0A%09%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20this%2EappendChild%28child%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20this%2Evalue%20%3D%20%27%27%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20%2F%2F%20value%0A%09%20%20%20%20this%2Echilds%20%3D%20undefined%3B%0A%09%20%20%20%20this%2Evalue%20%3D%20value%3B%0A%09%20%20%20%20%2F%2A%20TODO%0A%09%20%20%20%20%20if%20%28typeof%28value%29%20%3D%3D%20%27string%27%29%20%7B%0A%09%20%20%20%20%20var%20escValue%20%3D%20JSON%2Estringify%28value%29%3B%0A%09%20%20%20%20%20this%2Evalue%20%3D%20escValue%2Esubstring%281%2C%20escValue%2Elength%20%2D%201%29%3B%0A%09%20%20%20%20%20util%2Elog%28%27check%27%2C%20value%2C%20this%2Evalue%29%3B%0A%09%20%20%20%20%20%7D%0A%09%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20this%2Evalue%20%3D%20value%3B%0A%09%20%20%20%20%20%7D%0A%09%20%20%20%20%20%2A%2F%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20value%2E%20Value%20is%20a%20JSON%20structure%0A%09%20%2A%20%40return%20%7B%2A%7D%20value%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EgetValue%20%3D%20function%28%29%20%7B%0A%09%20%20%2F%2Fvar%20childs%2C%20i%2C%20iMax%3B%0A%0A%09%20%20if%20%28this%2Etype%20%3D%3D%20%27array%27%29%20%7B%0A%09%20%20%20%20var%20arr%20%3D%20%5B%5D%3B%0A%09%20%20%20%20this%2Echilds%2EforEach%20%28function%20%28child%29%20%7B%0A%09%20%20%20%20%20%20arr%2Epush%28child%2EgetValue%28%29%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%09%20%20%20%20return%20arr%3B%0A%09%20%20%7D%0A%09%20%20else%20if%20%28this%2Etype%20%3D%3D%20%27object%27%29%20%7B%0A%09%20%20%20%20var%20obj%20%3D%20%7B%7D%3B%0A%09%20%20%20%20this%2Echilds%2EforEach%20%28function%20%28child%29%20%7B%0A%09%20%20%20%20%20%20obj%5Bchild%2EgetField%28%29%5D%20%3D%20child%2EgetValue%28%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%09%20%20%20%20return%20obj%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20if%20%28this%2Evalue%20%3D%3D%3D%20undefined%29%20%7B%0A%09%20%20%20%20%20%20this%2E%5FgetDomValue%28%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20return%20this%2Evalue%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20the%20nesting%20level%20of%20this%20node%0A%09%20%2A%20%40return%20%7BNumber%7D%20level%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EgetLevel%20%3D%20function%28%29%20%7B%0A%09%20%20return%20%28this%2Eparent%20%3F%20this%2Eparent%2EgetLevel%28%29%20%2B%201%20%3A%200%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Create%20a%20clone%20of%20a%20node%0A%09%20%2A%20The%20complete%20state%20of%20a%20clone%20is%20copied%2C%20including%20whether%20it%20is%20expanded%20or%0A%09%20%2A%20not%2E%20The%20DOM%20elements%20are%20not%20cloned%2E%0A%09%20%2A%20%40return%20%7BNode%7D%20clone%0A%09%20%2A%2F%0A%09Node%2Eprototype%2Eclone%20%3D%20function%28%29%20%7B%0A%09%20%20var%20clone%20%3D%20new%20Node%28this%2Eeditor%29%3B%0A%09%20%20clone%2Etype%20%3D%20this%2Etype%3B%0A%09%20%20clone%2Efield%20%3D%20this%2Efield%3B%0A%09%20%20clone%2EfieldInnerText%20%3D%20this%2EfieldInnerText%3B%0A%09%20%20clone%2EfieldEditable%20%3D%20this%2EfieldEditable%3B%0A%09%20%20clone%2Evalue%20%3D%20this%2Evalue%3B%0A%09%20%20clone%2EvalueInnerText%20%3D%20this%2EvalueInnerText%3B%0A%09%20%20clone%2Eexpanded%20%3D%20this%2Eexpanded%3B%0A%0A%09%20%20if%20%28this%2Echilds%29%20%7B%0A%09%20%20%20%20%2F%2F%20an%20object%20or%20array%0A%09%20%20%20%20var%20cloneChilds%20%3D%20%5B%5D%3B%0A%09%20%20%20%20this%2Echilds%2EforEach%28function%20%28child%29%20%7B%0A%09%20%20%20%20%20%20var%20childClone%20%3D%20child%2Eclone%28%29%3B%0A%09%20%20%20%20%20%20childClone%2EsetParent%28clone%29%3B%0A%09%20%20%20%20%20%20cloneChilds%2Epush%28childClone%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%09%20%20%20%20clone%2Echilds%20%3D%20cloneChilds%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20%2F%2F%20a%20value%0A%09%20%20%20%20clone%2Echilds%20%3D%20undefined%3B%0A%09%20%20%7D%0A%0A%09%20%20return%20clone%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Expand%20this%20node%20and%20optionally%20its%20childs%2E%0A%09%20%2A%20%40param%20%7Bboolean%7D%20%5Brecurse%5D%20Optional%20recursion%2C%20true%20by%20default%2E%20When%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20true%2C%20all%20childs%20will%20be%20expanded%20recursively%0A%09%20%2A%2F%0A%09Node%2Eprototype%2Eexpand%20%3D%20function%28recurse%29%20%7B%0A%09%20%20if%20%28%21this%2Echilds%29%20%7B%0A%09%20%20%20%20return%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20set%20this%20node%20expanded%0A%09%20%20this%2Eexpanded%20%3D%20true%3B%0A%09%20%20if%20%28this%2Edom%2Eexpand%29%20%7B%0A%09%20%20%20%20this%2Edom%2Eexpand%2EclassName%20%3D%20%27expanded%27%3B%0A%09%20%20%7D%0A%0A%09%20%20this%2EshowChilds%28%29%3B%0A%0A%09%20%20if%20%28recurse%20%21%3D%3D%20false%29%20%7B%0A%09%20%20%20%20this%2Echilds%2EforEach%28function%20%28child%29%20%7B%0A%09%20%20%20%20%20%20child%2Eexpand%28recurse%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Collapse%20this%20node%20and%20optionally%20its%20childs%2E%0A%09%20%2A%20%40param%20%7Bboolean%7D%20%5Brecurse%5D%20Optional%20recursion%2C%20true%20by%20default%2E%20When%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20true%2C%20all%20childs%20will%20be%20collapsed%20recursively%0A%09%20%2A%2F%0A%09Node%2Eprototype%2Ecollapse%20%3D%20function%28recurse%29%20%7B%0A%09%20%20if%20%28%21this%2Echilds%29%20%7B%0A%09%20%20%20%20return%3B%0A%09%20%20%7D%0A%0A%09%20%20this%2EhideChilds%28%29%3B%0A%0A%09%20%20%2F%2F%20collapse%20childs%20in%20case%20of%20recurse%0A%09%20%20if%20%28recurse%20%21%3D%3D%20false%29%20%7B%0A%09%20%20%20%20this%2Echilds%2EforEach%28function%20%28child%29%20%7B%0A%09%20%20%20%20%20%20child%2Ecollapse%28recurse%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20make%20this%20node%20collapsed%0A%09%20%20if%20%28this%2Edom%2Eexpand%29%20%7B%0A%09%20%20%20%20this%2Edom%2Eexpand%2EclassName%20%3D%20%27collapsed%27%3B%0A%09%20%20%7D%0A%09%20%20this%2Eexpanded%20%3D%20false%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Recursively%20show%20all%20childs%20when%20they%20are%20expanded%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EshowChilds%20%3D%20function%28%29%20%7B%0A%09%20%20var%20childs%20%3D%20this%2Echilds%3B%0A%09%20%20if%20%28%21childs%29%20%7B%0A%09%20%20%20%20return%3B%0A%09%20%20%7D%0A%09%20%20if%20%28%21this%2Eexpanded%29%20%7B%0A%09%20%20%20%20return%3B%0A%09%20%20%7D%0A%0A%09%20%20var%20tr%20%3D%20this%2Edom%2Etr%3B%0A%09%20%20var%20table%20%3D%20tr%20%3F%20tr%2EparentNode%20%3A%20undefined%3B%0A%09%20%20if%20%28table%29%20%7B%0A%09%20%20%20%20%2F%2F%20show%20row%20with%20append%20button%0A%09%20%20%20%20var%20append%20%3D%20this%2EgetAppend%28%29%3B%0A%09%20%20%20%20var%20nextTr%20%3D%20tr%2EnextSibling%3B%0A%09%20%20%20%20if%20%28nextTr%29%20%7B%0A%09%20%20%20%20%20%20table%2EinsertBefore%28append%2C%20nextTr%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20table%2EappendChild%28append%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20show%20childs%0A%09%20%20%20%20this%2Echilds%2EforEach%28function%20%28child%29%20%7B%0A%09%20%20%20%20%20%20table%2EinsertBefore%28child%2EgetDom%28%29%2C%20append%29%3B%0A%09%20%20%20%20%20%20child%2EshowChilds%28%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Hide%20the%20node%20with%20all%20its%20childs%0A%09%20%2A%2F%0A%09Node%2Eprototype%2Ehide%20%3D%20function%28%29%20%7B%0A%09%20%20var%20tr%20%3D%20this%2Edom%2Etr%3B%0A%09%20%20var%20table%20%3D%20tr%20%3F%20tr%2EparentNode%20%3A%20undefined%3B%0A%09%20%20if%20%28table%29%20%7B%0A%09%20%20%20%20table%2EremoveChild%28tr%29%3B%0A%09%20%20%7D%0A%09%20%20this%2EhideChilds%28%29%3B%0A%09%7D%3B%0A%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Recursively%20hide%20all%20childs%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EhideChilds%20%3D%20function%28%29%20%7B%0A%09%20%20var%20childs%20%3D%20this%2Echilds%3B%0A%09%20%20if%20%28%21childs%29%20%7B%0A%09%20%20%20%20return%3B%0A%09%20%20%7D%0A%09%20%20if%20%28%21this%2Eexpanded%29%20%7B%0A%09%20%20%20%20return%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20hide%20append%20row%0A%09%20%20var%20append%20%3D%20this%2EgetAppend%28%29%3B%0A%09%20%20if%20%28append%2EparentNode%29%20%7B%0A%09%20%20%20%20append%2EparentNode%2EremoveChild%28append%29%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20hide%20childs%0A%09%20%20this%2Echilds%2EforEach%28function%20%28child%29%20%7B%0A%09%20%20%20%20child%2Ehide%28%29%3B%0A%09%20%20%7D%29%3B%0A%09%7D%3B%0A%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Add%20a%20new%20child%20to%20the%20node%2E%0A%09%20%2A%20Only%20applicable%20when%20Node%20value%20is%20of%20type%20array%20or%20object%0A%09%20%2A%20%40param%20%7BNode%7D%20node%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EappendChild%20%3D%20function%28node%29%20%7B%0A%09%20%20if%20%28this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20%2F%2F%20adjust%20the%20link%20to%20the%20parent%0A%09%20%20%20%20node%2EsetParent%28this%29%3B%0A%09%20%20%20%20node%2EfieldEditable%20%3D%20%28this%2Etype%20%3D%3D%20%27object%27%29%3B%0A%09%20%20%20%20if%20%28this%2Etype%20%3D%3D%20%27array%27%29%20%7B%0A%09%20%20%20%20%20%20node%2Eindex%20%3D%20this%2Echilds%2Elength%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20this%2Echilds%2Epush%28node%29%3B%0A%0A%09%20%20%20%20if%20%28this%2Eexpanded%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20insert%20into%20the%20DOM%2C%20before%20the%20appendRow%0A%09%20%20%20%20%20%20var%20newTr%20%3D%20node%2EgetDom%28%29%3B%0A%09%20%20%20%20%20%20var%20appendTr%20%3D%20this%2EgetAppend%28%29%3B%0A%09%20%20%20%20%20%20var%20table%20%3D%20appendTr%20%3F%20appendTr%2EparentNode%20%3A%20undefined%3B%0A%09%20%20%20%20%20%20if%20%28appendTr%20%26%26%20table%29%20%7B%0A%09%20%20%20%20%20%20%20%20table%2EinsertBefore%28newTr%2C%20appendTr%29%3B%0A%09%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20node%2EshowChilds%28%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20this%2EupdateDom%28%7B%27updateIndexes%27%3A%20true%7D%29%3B%0A%09%20%20%20%20node%2EupdateDom%28%7B%27recurse%27%3A%20true%7D%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Move%20a%20node%20from%20its%20current%20parent%20to%20this%20node%0A%09%20%2A%20Only%20applicable%20when%20Node%20value%20is%20of%20type%20array%20or%20object%0A%09%20%2A%20%40param%20%7BNode%7D%20node%0A%09%20%2A%20%40param%20%7BNode%7D%20beforeNode%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EmoveBefore%20%3D%20function%28node%2C%20beforeNode%29%20%7B%0A%09%20%20if%20%28this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20%2F%2F%20create%20a%20temporary%20row%2C%20to%20prevent%20the%20scroll%20position%20from%20jumping%0A%09%20%20%20%20%2F%2F%20when%20removing%20the%20node%0A%09%20%20%20%20var%20tbody%20%3D%20%28this%2Edom%2Etr%29%20%3F%20this%2Edom%2Etr%2EparentNode%20%3A%20undefined%3B%0A%09%20%20%20%20if%20%28tbody%29%20%7B%0A%09%20%20%20%20%20%20var%20trTemp%20%3D%20document%2EcreateElement%28%27tr%27%29%3B%0A%09%20%20%20%20%20%20trTemp%2Estyle%2Eheight%20%3D%20tbody%2EclientHeight%20%2B%20%27px%27%3B%0A%09%20%20%20%20%20%20tbody%2EappendChild%28trTemp%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20if%20%28node%2Eparent%29%20%7B%0A%09%20%20%20%20%20%20node%2Eparent%2EremoveChild%28node%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20if%20%28beforeNode%20instanceof%20AppendNode%29%20%7B%0A%09%20%20%20%20%20%20this%2EappendChild%28node%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20this%2EinsertBefore%28node%2C%20beforeNode%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20if%20%28tbody%29%20%7B%0A%09%20%20%20%20%20%20tbody%2EremoveChild%28trTemp%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Move%20a%20node%20from%20its%20current%20parent%20to%20this%20node%0A%09%20%2A%20Only%20applicable%20when%20Node%20value%20is%20of%20type%20array%20or%20object%2E%0A%09%20%2A%20If%20index%20is%20out%20of%20range%2C%20the%20node%20will%20be%20appended%20to%20the%20end%0A%09%20%2A%20%40param%20%7BNode%7D%20node%0A%09%20%2A%20%40param%20%7BNumber%7D%20index%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EmoveTo%20%3D%20function%20%28node%2C%20index%29%20%7B%0A%09%20%20if%20%28node%2Eparent%20%3D%3D%20this%29%20%7B%0A%09%20%20%20%20%2F%2F%20same%20parent%0A%09%20%20%20%20var%20currentIndex%20%3D%20this%2Echilds%2EindexOf%28node%29%3B%0A%09%20%20%20%20if%20%28currentIndex%20%3C%20index%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20compensate%20the%20index%20for%20removal%20of%20the%20node%20itself%0A%09%20%20%20%20%20%20index%2B%2B%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20var%20beforeNode%20%3D%20this%2Echilds%5Bindex%5D%20%7C%7C%20this%2Eappend%3B%0A%09%20%20this%2EmoveBefore%28node%2C%20beforeNode%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Insert%20a%20new%20child%20before%20a%20given%20node%0A%09%20%2A%20Only%20applicable%20when%20Node%20value%20is%20of%20type%20array%20or%20object%0A%09%20%2A%20%40param%20%7BNode%7D%20node%0A%09%20%2A%20%40param%20%7BNode%7D%20beforeNode%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EinsertBefore%20%3D%20function%28node%2C%20beforeNode%29%20%7B%0A%09%20%20if%20%28this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20if%20%28beforeNode%20%3D%3D%20this%2Eappend%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20append%20to%20the%20child%20nodes%0A%0A%09%20%20%20%20%20%20%2F%2F%20adjust%20the%20link%20to%20the%20parent%0A%09%20%20%20%20%20%20node%2EsetParent%28this%29%3B%0A%09%20%20%20%20%20%20node%2EfieldEditable%20%3D%20%28this%2Etype%20%3D%3D%20%27object%27%29%3B%0A%09%20%20%20%20%20%20this%2Echilds%2Epush%28node%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20insert%20before%20a%20child%20node%0A%09%20%20%20%20%20%20var%20index%20%3D%20this%2Echilds%2EindexOf%28beforeNode%29%3B%0A%09%20%20%20%20%20%20if%20%28index%20%3D%3D%20%2D1%29%20%7B%0A%09%20%20%20%20%20%20%20%20throw%20new%20Error%28%27Node%20not%20found%27%29%3B%0A%09%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%2F%2F%20adjust%20the%20link%20to%20the%20parent%0A%09%20%20%20%20%20%20node%2EsetParent%28this%29%3B%0A%09%20%20%20%20%20%20node%2EfieldEditable%20%3D%20%28this%2Etype%20%3D%3D%20%27object%27%29%3B%0A%09%20%20%20%20%20%20this%2Echilds%2Esplice%28index%2C%200%2C%20node%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20if%20%28this%2Eexpanded%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20insert%20into%20the%20DOM%0A%09%20%20%20%20%20%20var%20newTr%20%3D%20node%2EgetDom%28%29%3B%0A%09%20%20%20%20%20%20var%20nextTr%20%3D%20beforeNode%2EgetDom%28%29%3B%0A%09%20%20%20%20%20%20var%20table%20%3D%20nextTr%20%3F%20nextTr%2EparentNode%20%3A%20undefined%3B%0A%09%20%20%20%20%20%20if%20%28nextTr%20%26%26%20table%29%20%7B%0A%09%20%20%20%20%20%20%20%20table%2EinsertBefore%28newTr%2C%20nextTr%29%3B%0A%09%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20node%2EshowChilds%28%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20this%2EupdateDom%28%7B%27updateIndexes%27%3A%20true%7D%29%3B%0A%09%20%20%20%20node%2EupdateDom%28%7B%27recurse%27%3A%20true%7D%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Insert%20a%20new%20child%20before%20a%20given%20node%0A%09%20%2A%20Only%20applicable%20when%20Node%20value%20is%20of%20type%20array%20or%20object%0A%09%20%2A%20%40param%20%7BNode%7D%20node%0A%09%20%2A%20%40param%20%7BNode%7D%20afterNode%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EinsertAfter%20%3D%20function%28node%2C%20afterNode%29%20%7B%0A%09%20%20if%20%28this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20var%20index%20%3D%20this%2Echilds%2EindexOf%28afterNode%29%3B%0A%09%20%20%20%20var%20beforeNode%20%3D%20this%2Echilds%5Bindex%20%2B%201%5D%3B%0A%09%20%20%20%20if%20%28beforeNode%29%20%7B%0A%09%20%20%20%20%20%20this%2EinsertBefore%28node%2C%20beforeNode%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20this%2EappendChild%28node%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Search%20in%20this%20node%0A%09%20%2A%20The%20node%20will%20be%20expanded%20when%20the%20text%20is%20found%20one%20of%20its%20childs%2C%20else%0A%09%20%2A%20it%20will%20be%20collapsed%2E%20Searches%20are%20case%20insensitive%2E%0A%09%20%2A%20%40param%20%7BString%7D%20text%0A%09%20%2A%20%40return%20%7BNode%5B%5D%7D%20results%20%20Array%20with%20nodes%20containing%20the%20search%20text%0A%09%20%2A%2F%0A%09Node%2Eprototype%2Esearch%20%3D%20function%28text%29%20%7B%0A%09%20%20var%20results%20%3D%20%5B%5D%3B%0A%09%20%20var%20index%3B%0A%09%20%20var%20search%20%3D%20text%20%3F%20text%2EtoLowerCase%28%29%20%3A%20undefined%3B%0A%0A%09%20%20%2F%2F%20delete%20old%20search%20data%0A%09%20%20delete%20this%2EsearchField%3B%0A%09%20%20delete%20this%2EsearchValue%3B%0A%0A%09%20%20%2F%2F%20search%20in%20field%0A%09%20%20if%20%28this%2Efield%20%21%3D%20undefined%29%20%7B%0A%09%20%20%20%20var%20field%20%3D%20String%28this%2Efield%29%2EtoLowerCase%28%29%3B%0A%09%20%20%20%20index%20%3D%20field%2EindexOf%28search%29%3B%0A%09%20%20%20%20if%20%28index%20%21%3D%20%2D1%29%20%7B%0A%09%20%20%20%20%20%20this%2EsearchField%20%3D%20true%3B%0A%09%20%20%20%20%20%20results%2Epush%28%7B%0A%09%20%20%20%20%20%20%20%20%27node%27%3A%20this%2C%0A%09%20%20%20%20%20%20%20%20%27elem%27%3A%20%27field%27%0A%09%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20update%20dom%0A%09%20%20%20%20this%2E%5FupdateDomField%28%29%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20search%20in%20value%0A%09%20%20if%20%28this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20%2F%2F%20array%2C%20object%0A%0A%09%20%20%20%20%2F%2F%20search%20the%20nodes%20childs%0A%09%20%20%20%20if%20%28this%2Echilds%29%20%7B%0A%09%20%20%20%20%20%20var%20childResults%20%3D%20%5B%5D%3B%0A%09%20%20%20%20%20%20this%2Echilds%2EforEach%28function%20%28child%29%20%7B%0A%09%20%20%20%20%20%20%20%20childResults%20%3D%20childResults%2Econcat%28child%2Esearch%28text%29%29%3B%0A%09%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20results%20%3D%20results%2Econcat%28childResults%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20update%20dom%0A%09%20%20%20%20if%20%28search%20%21%3D%20undefined%29%20%7B%0A%09%20%20%20%20%20%20var%20recurse%20%3D%20false%3B%0A%09%20%20%20%20%20%20if%20%28childResults%2Elength%20%3D%3D%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Ecollapse%28recurse%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Eexpand%28recurse%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20%2F%2F%20string%2C%20auto%0A%09%20%20%20%20if%20%28this%2Evalue%20%21%3D%20undefined%20%29%20%7B%0A%09%20%20%20%20%20%20var%20value%20%3D%20String%28this%2Evalue%29%2EtoLowerCase%28%29%3B%0A%09%20%20%20%20%20%20index%20%3D%20value%2EindexOf%28search%29%3B%0A%09%20%20%20%20%20%20if%20%28index%20%21%3D%20%2D1%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2EsearchValue%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20results%2Epush%28%7B%0A%09%20%20%20%20%20%20%20%20%20%20%27node%27%3A%20this%2C%0A%09%20%20%20%20%20%20%20%20%20%20%27elem%27%3A%20%27value%27%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20update%20dom%0A%09%20%20%20%20this%2E%5FupdateDomValue%28%29%3B%0A%09%20%20%7D%0A%0A%09%20%20return%20results%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Move%20the%20scroll%20position%20such%20that%20this%20node%20is%20in%20the%20visible%20area%2E%0A%09%20%2A%20The%20node%20will%20not%20get%20the%20focus%0A%09%20%2A%20%40param%20%7Bfunction%28boolean%29%7D%20%5Bcallback%5D%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EscrollTo%20%3D%20function%28callback%29%20%7B%0A%09%20%20if%20%28%21this%2Edom%2Etr%20%7C%7C%20%21this%2Edom%2Etr%2EparentNode%29%20%7B%0A%09%20%20%20%20%2F%2F%20if%20the%20node%20is%20not%20visible%2C%20expand%20its%20parents%0A%09%20%20%20%20var%20parent%20%3D%20this%2Eparent%3B%0A%09%20%20%20%20var%20recurse%20%3D%20false%3B%0A%09%20%20%20%20while%20%28parent%29%20%7B%0A%09%20%20%20%20%20%20parent%2Eexpand%28recurse%29%3B%0A%09%20%20%20%20%20%20parent%20%3D%20parent%2Eparent%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20if%20%28this%2Edom%2Etr%20%26%26%20this%2Edom%2Etr%2EparentNode%29%20%7B%0A%09%20%20%20%20this%2Eeditor%2EscrollTo%28this%2Edom%2Etr%2EoffsetTop%2C%20callback%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%0A%09%2F%2F%20stores%20the%20element%20name%20currently%20having%20the%20focus%0A%09Node%2EfocusElement%20%3D%20undefined%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20focus%20to%20this%20node%0A%09%20%2A%20%40param%20%7BString%7D%20%5BelementName%5D%20%20The%20field%20name%20of%20the%20element%20to%20get%20the%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20focus%20available%20values%3A%20%27drag%27%2C%20%27menu%27%2C%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27expand%27%2C%20%27field%27%2C%20%27value%27%20%28default%29%0A%09%20%2A%2F%0A%09Node%2Eprototype%2Efocus%20%3D%20function%28elementName%29%20%7B%0A%09%20%20Node%2EfocusElement%20%3D%20elementName%3B%0A%0A%09%20%20if%20%28this%2Edom%2Etr%20%26%26%20this%2Edom%2Etr%2EparentNode%29%20%7B%0A%09%20%20%20%20var%20dom%20%3D%20this%2Edom%3B%0A%0A%09%20%20%20%20switch%20%28elementName%29%20%7B%0A%09%20%20%20%20%20%20case%20%27drag%27%3A%0A%09%20%20%20%20%20%20%20%20if%20%28dom%2Edrag%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20dom%2Edrag%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20dom%2Emenu%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20break%3B%0A%0A%09%20%20%20%20%20%20case%20%27menu%27%3A%0A%09%20%20%20%20%20%20%20%20dom%2Emenu%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20break%3B%0A%0A%09%20%20%20%20%20%20case%20%27expand%27%3A%0A%09%20%20%20%20%20%20%20%20if%20%28this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20dom%2Eexpand%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20if%20%28dom%2Efield%20%26%26%20this%2EfieldEditable%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20dom%2Efield%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20util%2EselectContentEditable%28dom%2Efield%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20if%20%28dom%2Evalue%20%26%26%20%21this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20dom%2Evalue%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20util%2EselectContentEditable%28dom%2Evalue%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20dom%2Emenu%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20break%3B%0A%0A%09%20%20%20%20%20%20case%20%27field%27%3A%0A%09%20%20%20%20%20%20%20%20if%20%28dom%2Efield%20%26%26%20this%2EfieldEditable%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20dom%2Efield%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20util%2EselectContentEditable%28dom%2Efield%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20if%20%28dom%2Evalue%20%26%26%20%21this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20dom%2Evalue%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20util%2EselectContentEditable%28dom%2Evalue%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20if%20%28this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20dom%2Eexpand%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20dom%2Emenu%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20break%3B%0A%0A%09%20%20%20%20%20%20case%20%27value%27%3A%0A%09%20%20%20%20%20%20default%3A%0A%09%20%20%20%20%20%20%20%20if%20%28dom%2Evalue%20%26%26%20%21this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20dom%2Evalue%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20util%2EselectContentEditable%28dom%2Evalue%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20if%20%28dom%2Efield%20%26%26%20this%2EfieldEditable%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20dom%2Efield%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20util%2EselectContentEditable%28dom%2Efield%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20if%20%28this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20dom%2Eexpand%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20dom%2Emenu%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Select%20all%20text%20in%20an%20editable%20div%20after%20a%20delay%20of%200%20ms%0A%09%20%2A%20%40param%20%7BElement%7D%20editableDiv%0A%09%20%2A%2F%0A%09Node%2Eselect%20%3D%20function%28editableDiv%29%20%7B%0A%09%20%20setTimeout%28function%20%28%29%20%7B%0A%09%20%20%20%20util%2EselectContentEditable%28editableDiv%29%3B%0A%09%20%20%7D%2C%200%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Update%20the%20values%20from%20the%20DOM%20field%20and%20value%20of%20this%20node%0A%09%20%2A%2F%0A%09Node%2Eprototype%2Eblur%20%3D%20function%28%29%20%7B%0A%09%20%20%2F%2F%20retrieve%20the%20actual%20field%20and%20value%20from%20the%20DOM%2E%0A%09%20%20this%2E%5FgetDomValue%28false%29%3B%0A%09%20%20this%2E%5FgetDomField%28false%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Duplicate%20given%20child%20node%0A%09%20%2A%20new%20structure%20will%20be%20added%20right%20before%20the%20cloned%20node%0A%09%20%2A%20%40param%20%7BNode%7D%20node%20%20%20%20%20%20%20%20%20%20%20the%20childNode%20to%20be%20duplicated%0A%09%20%2A%20%40return%20%7BNode%7D%20clone%20%20%20%20%20%20%20%20%20the%20clone%20of%20the%20node%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5Fduplicate%20%3D%20function%28node%29%20%7B%0A%09%20%20var%20clone%20%3D%20node%2Eclone%28%29%3B%0A%0A%09%20%20%2F%2A%20TODO%3A%20adjust%20the%20field%20name%20%28to%20prevent%20equal%20field%20names%29%0A%09%20%20%20if%20%28this%2Etype%20%3D%3D%20%27object%27%29%20%7B%0A%09%20%20%20%7D%0A%09%20%20%20%2A%2F%0A%0A%09%20%20this%2EinsertAfter%28clone%2C%20node%29%3B%0A%0A%09%20%20return%20clone%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Check%20if%20given%20node%20is%20a%20child%2E%20The%20method%20will%20check%20recursively%20to%20find%0A%09%20%2A%20this%20node%2E%0A%09%20%2A%20%40param%20%7BNode%7D%20node%0A%09%20%2A%20%40return%20%7Bboolean%7D%20containsNode%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EcontainsNode%20%3D%20function%28node%29%20%7B%0A%09%20%20if%20%28this%20%3D%3D%20node%29%20%7B%0A%09%20%20%20%20return%20true%3B%0A%09%20%20%7D%0A%0A%09%20%20var%20childs%20%3D%20this%2Echilds%3B%0A%09%20%20if%20%28childs%29%20%7B%0A%09%20%20%20%20%2F%2F%20TODO%3A%20use%20the%20js5%20Array%2Esome%28%29%20here%3F%0A%09%20%20%20%20for%20%28var%20i%20%3D%200%2C%20iMax%20%3D%20childs%2Elength%3B%20i%20%3C%20iMax%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20if%20%28childs%5Bi%5D%2EcontainsNode%28node%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20true%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20return%20false%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Move%20given%20node%20into%20this%20node%0A%09%20%2A%20%40param%20%7BNode%7D%20node%20%20%20%20%20%20%20%20%20%20%20the%20childNode%20to%20be%20moved%0A%09%20%2A%20%40param%20%7BNode%7D%20beforeNode%20%20%20%20%20node%20will%20be%20inserted%20before%20given%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20node%2E%20If%20no%20beforeNode%20is%20given%2C%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20the%20node%20is%20appended%20at%20the%20end%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5Fmove%20%3D%20function%28node%2C%20beforeNode%29%20%7B%0A%09%20%20if%20%28node%20%3D%3D%20beforeNode%29%20%7B%0A%09%20%20%20%20%2F%2F%20nothing%20to%20do%2E%2E%2E%0A%09%20%20%20%20return%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20check%20if%20this%20node%20is%20not%20a%20child%20of%20the%20node%20to%20be%20moved%20here%0A%09%20%20if%20%28node%2EcontainsNode%28this%29%29%20%7B%0A%09%20%20%20%20throw%20new%20Error%28%27Cannot%20move%20a%20field%20into%20a%20child%20of%20itself%27%29%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20remove%20the%20original%20node%0A%09%20%20if%20%28node%2Eparent%29%20%7B%0A%09%20%20%20%20node%2Eparent%2EremoveChild%28node%29%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20create%20a%20clone%20of%20the%20node%0A%09%20%20var%20clone%20%3D%20node%2Eclone%28%29%3B%0A%09%20%20node%2EclearDom%28%29%3B%0A%0A%09%20%20%2F%2F%20insert%20or%20append%20the%20node%0A%09%20%20if%20%28beforeNode%29%20%7B%0A%09%20%20%20%20this%2EinsertBefore%28clone%2C%20beforeNode%29%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20this%2EappendChild%28clone%29%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2A%20TODO%3A%20adjust%20the%20field%20name%20%28to%20prevent%20equal%20field%20names%29%0A%09%20%20%20if%20%28this%2Etype%20%3D%3D%20%27object%27%29%20%7B%0A%09%20%20%20%7D%0A%09%20%20%20%2A%2F%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Remove%20a%20child%20from%20the%20node%2E%0A%09%20%2A%20Only%20applicable%20when%20Node%20value%20is%20of%20type%20array%20or%20object%0A%09%20%2A%20%40param%20%7BNode%7D%20node%20%20%20The%20child%20node%20to%20be%20removed%3B%0A%09%20%2A%20%40return%20%7BNode%20%7C%20undefined%7D%20node%20%20The%20removed%20node%20on%20success%2C%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%20undefined%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EremoveChild%20%3D%20function%28node%29%20%7B%0A%09%20%20if%20%28this%2Echilds%29%20%7B%0A%09%20%20%20%20var%20index%20%3D%20this%2Echilds%2EindexOf%28node%29%3B%0A%0A%09%20%20%20%20if%20%28index%20%21%3D%20%2D1%29%20%7B%0A%09%20%20%20%20%20%20node%2Ehide%28%29%3B%0A%0A%09%20%20%20%20%20%20%2F%2F%20delete%20old%20search%20results%0A%09%20%20%20%20%20%20delete%20node%2EsearchField%3B%0A%09%20%20%20%20%20%20delete%20node%2EsearchValue%3B%0A%0A%09%20%20%20%20%20%20var%20removedNode%20%3D%20this%2Echilds%2Esplice%28index%2C%201%29%5B0%5D%3B%0A%0A%09%20%20%20%20%20%20this%2EupdateDom%28%7B%27updateIndexes%27%3A%20true%7D%29%3B%0A%0A%09%20%20%20%20%20%20return%20removedNode%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20return%20undefined%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Remove%20a%20child%20node%20node%20from%20this%20node%0A%09%20%2A%20This%20method%20is%20equal%20to%20Node%2EremoveChild%2C%20except%20that%20%5Fremove%20firex%20an%0A%09%20%2A%20onChange%20event%2E%0A%09%20%2A%20%40param%20%7BNode%7D%20node%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5Fremove%20%3D%20function%20%28node%29%20%7B%0A%09%20%20this%2EremoveChild%28node%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Change%20the%20type%20of%20the%20value%20of%20this%20Node%0A%09%20%2A%20%40param%20%7BString%7D%20newType%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EchangeType%20%3D%20function%20%28newType%29%20%7B%0A%09%20%20var%20oldType%20%3D%20this%2Etype%3B%0A%0A%09%20%20if%20%28oldType%20%3D%3D%20newType%29%20%7B%0A%09%20%20%20%20%2F%2F%20type%20is%20not%20changed%0A%09%20%20%20%20return%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28%28newType%20%3D%3D%20%27string%27%20%7C%7C%20newType%20%3D%3D%20%27auto%27%29%20%26%26%0A%09%20%20%20%20%20%20%28oldType%20%3D%3D%20%27string%27%20%7C%7C%20oldType%20%3D%3D%20%27auto%27%29%29%20%7B%0A%09%20%20%20%20%2F%2F%20this%20is%20an%20easy%20change%0A%09%20%20%20%20this%2Etype%20%3D%20newType%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20%2F%2F%20change%20from%20array%20to%20object%2C%20or%20from%20string%2Fauto%20to%20object%2Farray%0A%09%20%20%20%20var%20table%20%3D%20this%2Edom%2Etr%20%3F%20this%2Edom%2Etr%2EparentNode%20%3A%20undefined%3B%0A%09%20%20%20%20var%20lastTr%3B%0A%09%20%20%20%20if%20%28this%2Eexpanded%29%20%7B%0A%09%20%20%20%20%20%20lastTr%20%3D%20this%2EgetAppend%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20lastTr%20%3D%20this%2EgetDom%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20var%20nextTr%20%3D%20%28lastTr%20%26%26%20lastTr%2EparentNode%29%20%3F%20lastTr%2EnextSibling%20%3A%20undefined%3B%0A%0A%09%20%20%20%20%2F%2F%20hide%20current%20field%20and%20all%20its%20childs%0A%09%20%20%20%20this%2Ehide%28%29%3B%0A%09%20%20%20%20this%2EclearDom%28%29%3B%0A%0A%09%20%20%20%20%2F%2F%20adjust%20the%20field%20and%20the%20value%0A%09%20%20%20%20this%2Etype%20%3D%20newType%3B%0A%0A%09%20%20%20%20%2F%2F%20adjust%20childs%0A%09%20%20%20%20if%20%28newType%20%3D%3D%20%27object%27%29%20%7B%0A%09%20%20%20%20%20%20if%20%28%21this%2Echilds%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Echilds%20%3D%20%5B%5D%3B%0A%09%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20this%2Echilds%2EforEach%28function%20%28child%2C%20index%29%20%7B%0A%09%20%20%20%20%20%20%20%20child%2EclearDom%28%29%3B%0A%09%20%20%20%20%20%20%20%20delete%20child%2Eindex%3B%0A%09%20%20%20%20%20%20%20%20child%2EfieldEditable%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20if%20%28child%2Efield%20%3D%3D%20undefined%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20child%2Efield%20%3D%20%27%27%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20%20%20if%20%28oldType%20%3D%3D%20%27string%27%20%7C%7C%20oldType%20%3D%3D%20%27auto%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Eexpanded%20%3D%20true%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28newType%20%3D%3D%20%27array%27%29%20%7B%0A%09%20%20%20%20%20%20if%20%28%21this%2Echilds%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Echilds%20%3D%20%5B%5D%3B%0A%09%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20this%2Echilds%2EforEach%28function%20%28child%2C%20index%29%20%7B%0A%09%20%20%20%20%20%20%20%20child%2EclearDom%28%29%3B%0A%09%20%20%20%20%20%20%20%20child%2EfieldEditable%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20child%2Eindex%20%3D%20index%3B%0A%09%20%20%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20%20%20if%20%28oldType%20%3D%3D%20%27string%27%20%7C%7C%20oldType%20%3D%3D%20%27auto%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Eexpanded%20%3D%20true%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20this%2Eexpanded%20%3D%20false%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20create%20new%20DOM%0A%09%20%20%20%20if%20%28table%29%20%7B%0A%09%20%20%20%20%20%20if%20%28nextTr%29%20%7B%0A%09%20%20%20%20%20%20%20%20table%2EinsertBefore%28this%2EgetDom%28%29%2C%20nextTr%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20table%2EappendChild%28this%2EgetDom%28%29%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20this%2EshowChilds%28%29%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28newType%20%3D%3D%20%27auto%27%20%7C%7C%20newType%20%3D%3D%20%27string%27%29%20%7B%0A%09%20%20%20%20%2F%2F%20cast%20value%20to%20the%20correct%20type%0A%09%20%20%20%20if%20%28newType%20%3D%3D%20%27string%27%29%20%7B%0A%09%20%20%20%20%20%20this%2Evalue%20%3D%20String%28this%2Evalue%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20this%2Evalue%20%3D%20this%2E%5FstringCast%28String%28this%2Evalue%29%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20this%2Efocus%28%29%3B%0A%09%20%20%7D%0A%0A%09%20%20this%2EupdateDom%28%7B%27updateIndexes%27%3A%20true%7D%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Retrieve%20value%20from%20DOM%0A%09%20%2A%20%40param%20%7Bboolean%7D%20%5Bsilent%5D%20%20If%20true%20%28default%29%2C%20no%20errors%20will%20be%20thrown%20in%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%20of%20invalid%20data%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FgetDomValue%20%3D%20function%28silent%29%20%7B%0A%09%20%20if%20%28this%2Edom%2Evalue%20%26%26%20this%2Etype%20%21%3D%20%27array%27%20%26%26%20this%2Etype%20%21%3D%20%27object%27%29%20%7B%0A%09%20%20%20%20this%2EvalueInnerText%20%3D%20util%2EgetInnerText%28this%2Edom%2Evalue%29%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28this%2EvalueInnerText%20%21%3D%20undefined%29%20%7B%0A%09%20%20%20%20try%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20retrieve%20the%20value%0A%09%20%20%20%20%20%20var%20value%3B%0A%09%20%20%20%20%20%20if%20%28this%2Etype%20%3D%3D%20%27string%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20value%20%3D%20this%2E%5FunescapeHTML%28this%2EvalueInnerText%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20var%20str%20%3D%20this%2E%5FunescapeHTML%28this%2EvalueInnerText%29%3B%0A%09%20%20%20%20%20%20%20%20value%20%3D%20this%2E%5FstringCast%28str%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20if%20%28value%20%21%3D%3D%20this%2Evalue%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20oldValue%20%3D%20this%2Evalue%3B%0A%09%20%20%20%20%20%20%20%20this%2Evalue%20%3D%20value%3B%0A%09%20%20%20%20%20%20%20%20this%2Eeditor%2E%5FonAction%28%27editValue%27%2C%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%27node%27%3A%20this%2C%0A%09%20%20%20%20%20%20%20%20%20%20%27oldValue%27%3A%20oldValue%2C%0A%09%20%20%20%20%20%20%20%20%20%20%27newValue%27%3A%20value%2C%0A%09%20%20%20%20%20%20%20%20%20%20%27oldSelection%27%3A%20this%2Eeditor%2Eselection%2C%0A%09%20%20%20%20%20%20%20%20%20%20%27newSelection%27%3A%20this%2Eeditor%2EgetSelection%28%29%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20catch%20%28err%29%20%7B%0A%09%20%20%20%20%20%20this%2Evalue%20%3D%20undefined%3B%0A%09%20%20%20%20%20%20%2F%2F%20TODO%3A%20sent%20an%20action%20with%20the%20new%2C%20invalid%20value%3F%0A%09%20%20%20%20%20%20if%20%28silent%20%21%3D%3D%20true%29%20%7B%0A%09%20%20%20%20%20%20%20%20throw%20err%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Update%20dom%20value%3A%0A%09%20%2A%20%2D%20the%20text%20color%20of%20the%20value%2C%20depending%20on%20the%20type%20of%20the%20value%0A%09%20%2A%20%2D%20the%20height%20of%20the%20field%2C%20depending%20on%20the%20width%0A%09%20%2A%20%2D%20background%20color%20in%20case%20it%20is%20empty%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FupdateDomValue%20%3D%20function%20%28%29%20%7B%0A%09%20%20var%20domValue%20%3D%20this%2Edom%2Evalue%3B%0A%09%20%20if%20%28domValue%29%20%7B%0A%09%20%20%20%20%2F%2F%20set%20text%20color%20depending%20on%20value%20type%0A%09%20%20%20%20%2F%2F%20TODO%3A%20put%20colors%20in%20css%0A%09%20%20%20%20var%20v%20%3D%20this%2Evalue%3B%0A%09%20%20%20%20var%20t%20%3D%20%28this%2Etype%20%3D%3D%20%27auto%27%29%20%3F%20util%2Etype%28v%29%20%3A%20this%2Etype%3B%0A%09%20%20%20%20var%20isUrl%20%3D%20%28t%20%3D%3D%20%27string%27%20%26%26%20util%2EisUrl%28v%29%29%3B%0A%09%20%20%20%20var%20color%20%3D%20%27%27%3B%0A%09%20%20%20%20if%20%28isUrl%20%26%26%20%21this%2Eeditable%2Evalue%29%20%7B%20%2F%2F%20TODO%3A%20when%20to%20apply%20this%3F%0A%09%20%20%20%20%20%20color%20%3D%20%27%27%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28t%20%3D%3D%20%27string%27%29%20%7B%0A%09%20%20%20%20%20%20color%20%3D%20%27green%27%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28t%20%3D%3D%20%27number%27%29%20%7B%0A%09%20%20%20%20%20%20color%20%3D%20%27red%27%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28t%20%3D%3D%20%27boolean%27%29%20%7B%0A%09%20%20%20%20%20%20color%20%3D%20%27darkorange%27%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20%20%20color%20%3D%20%27%27%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28v%20%3D%3D%3D%20null%29%20%7B%0A%09%20%20%20%20%20%20color%20%3D%20%27%23004ED0%27%3B%20%20%2F%2F%20blue%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20invalid%20value%0A%09%20%20%20%20%20%20color%20%3D%20%27black%27%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20domValue%2Estyle%2Ecolor%20%3D%20color%3B%0A%0A%09%20%20%20%20%2F%2F%20make%20background%20color%20light%2Dgray%20when%20empty%0A%09%20%20%20%20var%20isEmpty%20%3D%20%28String%28this%2Evalue%29%20%3D%3D%20%27%27%20%26%26%20this%2Etype%20%21%3D%20%27array%27%20%26%26%20this%2Etype%20%21%3D%20%27object%27%29%3B%0A%09%20%20%20%20if%20%28isEmpty%29%20%7B%0A%09%20%20%20%20%20%20util%2EaddClassName%28domValue%2C%20%27empty%27%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20util%2EremoveClassName%28domValue%2C%20%27empty%27%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20underline%20url%0A%09%20%20%20%20if%20%28isUrl%29%20%7B%0A%09%20%20%20%20%20%20util%2EaddClassName%28domValue%2C%20%27url%27%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20util%2EremoveClassName%28domValue%2C%20%27url%27%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20update%20title%0A%09%20%20%20%20if%20%28t%20%3D%3D%20%27array%27%20%7C%7C%20t%20%3D%3D%20%27object%27%29%20%7B%0A%09%20%20%20%20%20%20var%20count%20%3D%20this%2Echilds%20%3F%20this%2Echilds%2Elength%20%3A%200%3B%0A%09%20%20%20%20%20%20domValue%2Etitle%20%3D%20this%2Etype%20%2B%20%27%20containing%20%27%20%2B%20count%20%2B%20%27%20items%27%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28t%20%3D%3D%20%27string%27%20%26%26%20util%2EisUrl%28v%29%29%20%7B%0A%09%20%20%20%20%20%20if%20%28this%2Eeditable%2Evalue%29%20%7B%0A%09%20%20%20%20%20%20%20%20domValue%2Etitle%20%3D%20%27Ctrl%2BClick%20or%20Ctrl%2BEnter%20to%20open%20url%20in%20new%20window%27%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20domValue%2Etitle%20%3D%20%27%27%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20highlight%20when%20there%20is%20a%20search%20result%0A%09%20%20%20%20if%20%28this%2EsearchValueActive%29%20%7B%0A%09%20%20%20%20%20%20util%2EaddClassName%28domValue%2C%20%27highlight%2Dactive%27%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20util%2EremoveClassName%28domValue%2C%20%27highlight%2Dactive%27%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20if%20%28this%2EsearchValue%29%20%7B%0A%09%20%20%20%20%20%20util%2EaddClassName%28domValue%2C%20%27highlight%27%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20util%2EremoveClassName%28domValue%2C%20%27highlight%27%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20strip%20formatting%20from%20the%20contents%20of%20the%20editable%20div%0A%09%20%20%20%20util%2EstripFormatting%28domValue%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Update%20dom%20field%3A%0A%09%20%2A%20%2D%20the%20text%20color%20of%20the%20field%2C%20depending%20on%20the%20text%0A%09%20%2A%20%2D%20the%20height%20of%20the%20field%2C%20depending%20on%20the%20width%0A%09%20%2A%20%2D%20background%20color%20in%20case%20it%20is%20empty%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FupdateDomField%20%3D%20function%20%28%29%20%7B%0A%09%20%20var%20domField%20%3D%20this%2Edom%2Efield%3B%0A%09%20%20if%20%28domField%29%20%7B%0A%09%20%20%20%20%2F%2F%20make%20backgound%20color%20lightgray%20when%20empty%0A%09%20%20%20%20var%20isEmpty%20%3D%20%28String%28this%2Efield%29%20%3D%3D%20%27%27%20%26%26%20this%2Eparent%2Etype%20%21%3D%20%27array%27%29%3B%0A%09%20%20%20%20if%20%28isEmpty%29%20%7B%0A%09%20%20%20%20%20%20util%2EaddClassName%28domField%2C%20%27empty%27%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20util%2EremoveClassName%28domField%2C%20%27empty%27%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20highlight%20when%20there%20is%20a%20search%20result%0A%09%20%20%20%20if%20%28this%2EsearchFieldActive%29%20%7B%0A%09%20%20%20%20%20%20util%2EaddClassName%28domField%2C%20%27highlight%2Dactive%27%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20util%2EremoveClassName%28domField%2C%20%27highlight%2Dactive%27%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20if%20%28this%2EsearchField%29%20%7B%0A%09%20%20%20%20%20%20util%2EaddClassName%28domField%2C%20%27highlight%27%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20util%2EremoveClassName%28domField%2C%20%27highlight%27%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20strip%20formatting%20from%20the%20contents%20of%20the%20editable%20div%0A%09%20%20%20%20util%2EstripFormatting%28domField%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Retrieve%20field%20from%20DOM%0A%09%20%2A%20%40param%20%7Bboolean%7D%20%5Bsilent%5D%20%20If%20true%20%28default%29%2C%20no%20errors%20will%20be%20thrown%20in%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%20of%20invalid%20data%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FgetDomField%20%3D%20function%28silent%29%20%7B%0A%09%20%20if%20%28this%2Edom%2Efield%20%26%26%20this%2EfieldEditable%29%20%7B%0A%09%20%20%20%20this%2EfieldInnerText%20%3D%20util%2EgetInnerText%28this%2Edom%2Efield%29%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28this%2EfieldInnerText%20%21%3D%20undefined%29%20%7B%0A%09%20%20%20%20try%20%7B%0A%09%20%20%20%20%20%20var%20field%20%3D%20this%2E%5FunescapeHTML%28this%2EfieldInnerText%29%3B%0A%0A%09%20%20%20%20%20%20if%20%28field%20%21%3D%3D%20this%2Efield%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20oldField%20%3D%20this%2Efield%3B%0A%09%20%20%20%20%20%20%20%20this%2Efield%20%3D%20field%3B%0A%09%20%20%20%20%20%20%20%20this%2Eeditor%2E%5FonAction%28%27editField%27%2C%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%27node%27%3A%20this%2C%0A%09%20%20%20%20%20%20%20%20%20%20%27oldValue%27%3A%20oldField%2C%0A%09%20%20%20%20%20%20%20%20%20%20%27newValue%27%3A%20field%2C%0A%09%20%20%20%20%20%20%20%20%20%20%27oldSelection%27%3A%20this%2Eeditor%2Eselection%2C%0A%09%20%20%20%20%20%20%20%20%20%20%27newSelection%27%3A%20this%2Eeditor%2EgetSelection%28%29%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20catch%20%28err%29%20%7B%0A%09%20%20%20%20%20%20this%2Efield%20%3D%20undefined%3B%0A%09%20%20%20%20%20%20%2F%2F%20TODO%3A%20sent%20an%20action%20here%2C%20with%20the%20new%2C%20invalid%20value%3F%0A%09%20%20%20%20%20%20if%20%28silent%20%21%3D%3D%20true%29%20%7B%0A%09%20%20%20%20%20%20%20%20throw%20err%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Clear%20the%20dom%20of%20the%20node%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EclearDom%20%3D%20function%28%29%20%7B%0A%09%20%20%2F%2F%20TODO%3A%20hide%20the%20node%20first%3F%0A%09%20%20%2F%2Fthis%2Ehide%28%29%3B%0A%09%20%20%2F%2F%20TODO%3A%20recursively%20clear%20dom%3F%0A%0A%09%20%20this%2Edom%20%3D%20%7B%7D%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20the%20HTML%20DOM%20TR%20element%20of%20the%20node%2E%0A%09%20%2A%20The%20dom%20will%20be%20generated%20when%20not%20yet%20created%0A%09%20%2A%20%40return%20%7BElement%7D%20tr%20%20%20%20HTML%20DOM%20TR%20Element%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EgetDom%20%3D%20function%28%29%20%7B%0A%09%20%20var%20dom%20%3D%20this%2Edom%3B%0A%09%20%20if%20%28dom%2Etr%29%20%7B%0A%09%20%20%20%20return%20dom%2Etr%3B%0A%09%20%20%7D%0A%0A%09%20%20this%2E%5FupdateEditability%28%29%3B%0A%0A%09%20%20%2F%2F%20create%20row%0A%09%20%20dom%2Etr%20%3D%20document%2EcreateElement%28%27tr%27%29%3B%0A%09%20%20dom%2Etr%2Enode%20%3D%20this%3B%0A%0A%09%20%20if%20%28this%2Eeditor%2Eoptions%2Emode%20%3D%3D%3D%20%27tree%27%29%20%7B%20%2F%2F%20note%3A%20we%20take%20here%20the%20global%20setting%0A%09%20%20%20%20var%20tdDrag%20%3D%20document%2EcreateElement%28%27td%27%29%3B%0A%09%20%20%20%20if%20%28this%2Eeditable%2Efield%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20create%20draggable%20area%0A%09%20%20%20%20%20%20if%20%28this%2Eparent%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20domDrag%20%3D%20document%2EcreateElement%28%27button%27%29%3B%0A%09%20%20%20%20%20%20%20%20dom%2Edrag%20%3D%20domDrag%3B%0A%09%20%20%20%20%20%20%20%20domDrag%2EclassName%20%3D%20%27dragarea%27%3B%0A%09%20%20%20%20%20%20%20%20domDrag%2Etitle%20%3D%20%27Drag%20to%20move%20this%20field%20%28Alt%2BShift%2BArrows%29%27%3B%0A%09%20%20%20%20%20%20%20%20tdDrag%2EappendChild%28domDrag%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20dom%2Etr%2EappendChild%28tdDrag%29%3B%0A%0A%09%20%20%20%20%2F%2F%20create%20context%20menu%0A%09%20%20%20%20var%20tdMenu%20%3D%20document%2EcreateElement%28%27td%27%29%3B%0A%09%20%20%20%20var%20menu%20%3D%20document%2EcreateElement%28%27button%27%29%3B%0A%09%20%20%20%20dom%2Emenu%20%3D%20menu%3B%0A%09%20%20%20%20menu%2EclassName%20%3D%20%27contextmenu%27%3B%0A%09%20%20%20%20menu%2Etitle%20%3D%20%27Click%20to%20open%20the%20actions%20menu%20%28Ctrl%2BM%29%27%3B%0A%09%20%20%20%20tdMenu%2EappendChild%28dom%2Emenu%29%3B%0A%09%20%20%20%20dom%2Etr%2EappendChild%28tdMenu%29%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20create%20tree%20and%20field%0A%09%20%20var%20tdField%20%3D%20document%2EcreateElement%28%27td%27%29%3B%0A%09%20%20dom%2Etr%2EappendChild%28tdField%29%3B%0A%09%20%20dom%2Etree%20%3D%20this%2E%5FcreateDomTree%28%29%3B%0A%09%20%20tdField%2EappendChild%28dom%2Etree%29%3B%0A%0A%09%20%20this%2EupdateDom%28%7B%27updateIndexes%27%3A%20true%7D%29%3B%0A%0A%09%20%20return%20dom%2Etr%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20DragStart%20event%2C%20fired%20on%20mousedown%20on%20the%20dragarea%20at%20the%20left%20side%20of%20a%20Node%0A%09%20%2A%20%40param%20%7BEvent%7D%20event%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FonDragStart%20%3D%20function%20%28event%29%20%7B%0A%09%20%20var%20node%20%3D%20this%3B%0A%09%20%20if%20%28%21this%2Emousemove%29%20%7B%0A%09%20%20%20%20this%2Emousemove%20%3D%20util%2EaddEventListener%28document%2C%20%27mousemove%27%2C%0A%09%20%20%20%20%20%20%20%20function%20%28event%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20node%2E%5FonDrag%28event%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28%21this%2Emouseup%29%20%7B%0A%09%20%20%20%20this%2Emouseup%20%3D%20util%2EaddEventListener%28document%2C%20%27mouseup%27%2C%0A%09%20%20%20%20%20%20%20%20function%20%28event%20%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20node%2E%5FonDragEnd%28event%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%7D%0A%0A%09%20%20this%2Eeditor%2Ehighlighter%2Elock%28%29%3B%0A%09%20%20this%2Edrag%20%3D%20%7B%0A%09%20%20%20%20%27oldCursor%27%3A%20document%2Ebody%2Estyle%2Ecursor%2C%0A%09%20%20%20%20%27startParent%27%3A%20this%2Eparent%2C%0A%09%20%20%20%20%27startIndex%27%3A%20this%2Eparent%2Echilds%2EindexOf%28this%29%2C%0A%09%20%20%20%20%27mouseX%27%3A%20event%2EpageX%2C%0A%09%20%20%20%20%27level%27%3A%20this%2EgetLevel%28%29%0A%09%20%20%7D%3B%0A%09%20%20document%2Ebody%2Estyle%2Ecursor%20%3D%20%27move%27%3B%0A%0A%09%20%20event%2EpreventDefault%28%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Drag%20event%2C%20fired%20when%20moving%20the%20mouse%20while%20dragging%20a%20Node%0A%09%20%2A%20%40param%20%7BEvent%7D%20event%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FonDrag%20%3D%20function%20%28event%29%20%7B%0A%09%20%20%2F%2F%20TODO%3A%20this%20method%20has%20grown%20too%20large%2E%20Split%20it%20in%20a%20number%20of%20methods%0A%09%20%20var%20mouseY%20%3D%20event%2EpageY%3B%0A%09%20%20var%20mouseX%20%3D%20event%2EpageX%3B%0A%0A%09%20%20var%20trThis%2C%20trPrev%2C%20trNext%2C%20trFirst%2C%20trLast%2C%20trRoot%3B%0A%09%20%20var%20nodePrev%2C%20nodeNext%3B%0A%09%20%20var%20topThis%2C%20topPrev%2C%20topFirst%2C%20heightThis%2C%20bottomNext%2C%20heightNext%3B%0A%09%20%20var%20moved%20%3D%20false%3B%0A%0A%09%20%20%2F%2F%20TODO%3A%20add%20an%20ESC%20option%2C%20which%20resets%20to%20the%20original%20position%0A%0A%09%20%20%2F%2F%20move%20up%2Fdown%0A%09%20%20trThis%20%3D%20this%2Edom%2Etr%3B%0A%09%20%20topThis%20%3D%20util%2EgetAbsoluteTop%28trThis%29%3B%0A%09%20%20heightThis%20%3D%20trThis%2EoffsetHeight%3B%0A%09%20%20if%20%28mouseY%20%3C%20topThis%29%20%7B%0A%09%20%20%20%20%2F%2F%20move%20up%0A%09%20%20%20%20trPrev%20%3D%20trThis%3B%0A%09%20%20%20%20do%20%7B%0A%09%20%20%20%20%20%20trPrev%20%3D%20trPrev%2EpreviousSibling%3B%0A%09%20%20%20%20%20%20nodePrev%20%3D%20Node%2EgetNodeFromTarget%28trPrev%29%3B%0A%09%20%20%20%20%20%20topPrev%20%3D%20trPrev%20%3F%20util%2EgetAbsoluteTop%28trPrev%29%20%3A%200%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20while%20%28trPrev%20%26%26%20mouseY%20%3C%20topPrev%29%3B%0A%0A%09%20%20%20%20if%20%28nodePrev%20%26%26%20%21nodePrev%2Eparent%29%20%7B%0A%09%20%20%20%20%20%20nodePrev%20%3D%20undefined%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20if%20%28%21nodePrev%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20move%20to%20the%20first%20node%0A%09%20%20%20%20%20%20trRoot%20%3D%20trThis%2EparentNode%2EfirstChild%3B%0A%09%20%20%20%20%20%20trPrev%20%3D%20trRoot%20%3F%20trRoot%2EnextSibling%20%3A%20undefined%3B%0A%09%20%20%20%20%20%20nodePrev%20%3D%20Node%2EgetNodeFromTarget%28trPrev%29%3B%0A%09%20%20%20%20%20%20if%20%28nodePrev%20%3D%3D%20this%29%20%7B%0A%09%20%20%20%20%20%20%20%20nodePrev%20%3D%20undefined%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20if%20%28nodePrev%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20check%20if%20mouseY%20is%20really%20inside%20the%20found%20node%0A%09%20%20%20%20%20%20trPrev%20%3D%20nodePrev%2Edom%2Etr%3B%0A%09%20%20%20%20%20%20topPrev%20%3D%20trPrev%20%3F%20util%2EgetAbsoluteTop%28trPrev%29%20%3A%200%3B%0A%09%20%20%20%20%20%20if%20%28mouseY%20%3E%20topPrev%20%2B%20heightThis%29%20%7B%0A%09%20%20%20%20%20%20%20%20nodePrev%20%3D%20undefined%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20if%20%28nodePrev%29%20%7B%0A%09%20%20%20%20%20%20nodePrev%2Eparent%2EmoveBefore%28this%2C%20nodePrev%29%3B%0A%09%20%20%20%20%20%20moved%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20%2F%2F%20move%20down%0A%09%20%20%20%20trLast%20%3D%20%28this%2Eexpanded%20%26%26%20this%2Eappend%29%20%3F%20this%2Eappend%2EgetDom%28%29%20%3A%20this%2Edom%2Etr%3B%0A%09%20%20%20%20trFirst%20%3D%20trLast%20%3F%20trLast%2EnextSibling%20%3A%20undefined%3B%0A%09%20%20%20%20if%20%28trFirst%29%20%7B%0A%09%20%20%20%20%20%20topFirst%20%3D%20util%2EgetAbsoluteTop%28trFirst%29%3B%0A%09%20%20%20%20%20%20trNext%20%3D%20trFirst%3B%0A%09%20%20%20%20%20%20do%20%7B%0A%09%20%20%20%20%20%20%20%20nodeNext%20%3D%20Node%2EgetNodeFromTarget%28trNext%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28trNext%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20bottomNext%20%3D%20trNext%2EnextSibling%20%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20util%2EgetAbsoluteTop%28trNext%2EnextSibling%29%20%3A%200%3B%0A%09%20%20%20%20%20%20%20%20%20%20heightNext%20%3D%20trNext%20%3F%20%28bottomNext%20%2D%20topFirst%29%20%3A%200%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20if%20%28nodeNext%2Eparent%2Echilds%2Elength%20%3D%3D%201%20%26%26%20nodeNext%2Eparent%2Echilds%5B0%5D%20%3D%3D%20this%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20We%20are%20about%20to%20remove%20the%20last%20child%20of%20this%20parent%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20which%20will%20make%20the%20parents%20appendNode%20visible%2E%0A%09%20%20%20%20%20%20%20%20%20%20%20%20topThis%20%2B%3D%2024%20%2D%201%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20TODO%3A%20dangerous%20to%20suppose%20the%20height%20of%20the%20appendNode%20a%20constant%20of%2024%2D1%20px%2E%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20trNext%20%3D%20trNext%2EnextSibling%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20while%20%28trNext%20%26%26%20mouseY%20%3E%20topThis%20%2B%20heightNext%29%3B%0A%0A%09%20%20%20%20%20%20if%20%28nodeNext%20%26%26%20nodeNext%2Eparent%29%20%7B%0A%09%20%20%20%20%20%20%20%20%2F%2F%20calculate%20the%20desired%20level%0A%09%20%20%20%20%20%20%20%20var%20diffX%20%3D%20%28mouseX%20%2D%20this%2Edrag%2EmouseX%29%3B%0A%09%20%20%20%20%20%20%20%20var%20diffLevel%20%3D%20Math%2Eround%28diffX%20%2F%2024%20%2F%202%29%3B%0A%09%20%20%20%20%20%20%20%20var%20level%20%3D%20this%2Edrag%2Elevel%20%2B%20diffLevel%3B%20%2F%2F%20desired%20level%0A%09%20%20%20%20%20%20%20%20var%20levelNext%20%3D%20nodeNext%2EgetLevel%28%29%3B%20%20%20%20%20%2F%2F%20level%20to%20be%0A%0A%09%20%20%20%20%20%20%20%20%2F%2F%20find%20the%20best%20fitting%20level%20%28move%20upwards%20over%20the%20append%20nodes%29%0A%09%20%20%20%20%20%20%20%20trPrev%20%3D%20nodeNext%2Edom%2Etr%2EpreviousSibling%3B%0A%09%20%20%20%20%20%20%20%20while%20%28levelNext%20%3C%20level%20%26%26%20trPrev%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20nodePrev%20%3D%20Node%2EgetNodeFromTarget%28trPrev%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20if%20%28nodePrev%20%3D%3D%20this%20%7C%7C%20nodePrev%2E%5FisChildOf%28this%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20neglect%20itself%20and%20its%20childs%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20else%20if%20%28nodePrev%20instanceof%20AppendNode%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20childs%20%3D%20nodePrev%2Eparent%2Echilds%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28childs%2Elength%20%3E%201%20%7C%7C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28childs%2Elength%20%3D%3D%201%20%26%26%20childs%5B0%5D%20%21%3D%20this%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20non%2Dvisible%20append%20node%20of%20a%20list%20of%20childs%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20consisting%20of%20not%20only%20this%20node%20%28else%20the%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20append%20node%20will%20change%20into%20a%20visible%20%22empty%22%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20text%20when%20removing%20this%20node%29%2E%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20nodeNext%20%3D%20Node%2EgetNodeFromTarget%28trPrev%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20levelNext%20%3D%20nodeNext%2EgetLevel%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%20%20trPrev%20%3D%20trPrev%2EpreviousSibling%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%2F%2F%20move%20the%20node%20when%20its%20position%20is%20changed%0A%09%20%20%20%20%20%20%20%20if%20%28trLast%2EnextSibling%20%21%3D%20nodeNext%2Edom%2Etr%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20nodeNext%2Eparent%2EmoveBefore%28this%2C%20nodeNext%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20moved%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20if%20%28moved%29%20%7B%0A%09%20%20%20%20%2F%2F%20update%20the%20dragging%20parameters%20when%20moved%0A%09%20%20%20%20this%2Edrag%2EmouseX%20%3D%20mouseX%3B%0A%09%20%20%20%20this%2Edrag%2Elevel%20%3D%20this%2EgetLevel%28%29%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20auto%20scroll%20when%20hovering%20around%20the%20top%20of%20the%20editor%0A%09%20%20this%2Eeditor%2EstartAutoScroll%28mouseY%29%3B%0A%0A%09%20%20event%2EpreventDefault%28%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Drag%20event%2C%20fired%20on%20mouseup%20after%20having%20dragged%20a%20node%0A%09%20%2A%20%40param%20%7BEvent%7D%20event%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FonDragEnd%20%3D%20function%20%28event%29%20%7B%0A%09%20%20var%20params%20%3D%20%7B%0A%09%20%20%20%20%27node%27%3A%20this%2C%0A%09%20%20%20%20%27startParent%27%3A%20this%2Edrag%2EstartParent%2C%0A%09%20%20%20%20%27startIndex%27%3A%20this%2Edrag%2EstartIndex%2C%0A%09%20%20%20%20%27endParent%27%3A%20this%2Eparent%2C%0A%09%20%20%20%20%27endIndex%27%3A%20this%2Eparent%2Echilds%2EindexOf%28this%29%0A%09%20%20%7D%3B%0A%09%20%20if%20%28%28params%2EstartParent%20%21%3D%20params%2EendParent%29%20%7C%7C%0A%09%20%20%20%20%20%20%28params%2EstartIndex%20%21%3D%20params%2EendIndex%29%29%20%7B%0A%09%20%20%20%20%2F%2F%20only%20register%20this%20action%20if%20the%20node%20is%20actually%20moved%20to%20another%20place%0A%09%20%20%20%20this%2Eeditor%2E%5FonAction%28%27moveNode%27%2C%20params%29%3B%0A%09%20%20%7D%0A%0A%09%20%20document%2Ebody%2Estyle%2Ecursor%20%3D%20this%2Edrag%2EoldCursor%3B%0A%09%20%20this%2Eeditor%2Ehighlighter%2Eunlock%28%29%3B%0A%09%20%20delete%20this%2Edrag%3B%0A%0A%09%20%20if%20%28this%2Emousemove%29%20%7B%0A%09%20%20%20%20util%2EremoveEventListener%28document%2C%20%27mousemove%27%2C%20this%2Emousemove%29%3B%0A%09%20%20%20%20delete%20this%2Emousemove%3B%7D%0A%09%20%20if%20%28this%2Emouseup%29%20%7B%0A%09%20%20%20%20util%2EremoveEventListener%28document%2C%20%27mouseup%27%2C%20this%2Emouseup%29%3B%0A%09%20%20%20%20delete%20this%2Emouseup%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20Stop%20any%20running%20auto%20scroll%0A%09%20%20this%2Eeditor%2EstopAutoScroll%28%29%3B%0A%0A%09%20%20event%2EpreventDefault%28%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Test%20if%20this%20node%20is%20a%20child%20of%20an%20other%20node%0A%09%20%2A%20%40param%20%7BNode%7D%20node%0A%09%20%2A%20%40return%20%7Bboolean%7D%20isChild%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FisChildOf%20%3D%20function%20%28node%29%20%7B%0A%09%20%20var%20n%20%3D%20this%2Eparent%3B%0A%09%20%20while%20%28n%29%20%7B%0A%09%20%20%20%20if%20%28n%20%3D%3D%20node%29%20%7B%0A%09%20%20%20%20%20%20return%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20n%20%3D%20n%2Eparent%3B%0A%09%20%20%7D%0A%0A%09%20%20return%20false%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Create%20an%20editable%20field%0A%09%20%2A%20%40return%20%7BElement%7D%20domField%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FcreateDomField%20%3D%20function%20%28%29%20%7B%0A%09%20%20return%20document%2EcreateElement%28%27div%27%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Set%20highlighting%20for%20this%20node%20and%20all%20its%20childs%2E%0A%09%20%2A%20Only%20applied%20to%20the%20currently%20visible%20%28expanded%20childs%29%0A%09%20%2A%20%40param%20%7Bboolean%7D%20highlight%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EsetHighlight%20%3D%20function%20%28highlight%29%20%7B%0A%09%20%20if%20%28this%2Edom%2Etr%29%20%7B%0A%09%20%20%20%20this%2Edom%2Etr%2EclassName%20%3D%20%28highlight%20%3F%20%27highlight%27%20%3A%20%27%27%29%3B%0A%0A%09%20%20%20%20if%20%28this%2Eappend%29%20%7B%0A%09%20%20%20%20%20%20this%2Eappend%2EsetHighlight%28highlight%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20if%20%28this%2Echilds%29%20%7B%0A%09%20%20%20%20%20%20this%2Echilds%2EforEach%28function%20%28child%29%20%7B%0A%09%20%20%20%20%20%20%20%20child%2EsetHighlight%28highlight%29%3B%0A%09%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Update%20the%20value%20of%20the%20node%2E%20Only%20primitive%20types%20are%20allowed%2C%20no%20Object%0A%09%20%2A%20or%20Array%20is%20allowed%2E%0A%09%20%2A%20%40param%20%7BString%20%7C%20Number%20%7C%20Boolean%20%7C%20null%7D%20value%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EupdateValue%20%3D%20function%20%28value%29%20%7B%0A%09%20%20this%2Evalue%20%3D%20value%3B%0A%09%20%20this%2EupdateDom%28%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Update%20the%20field%20of%20the%20node%2E%0A%09%20%2A%20%40param%20%7BString%7D%20field%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EupdateField%20%3D%20function%20%28field%29%20%7B%0A%09%20%20this%2Efield%20%3D%20field%3B%0A%09%20%20this%2EupdateDom%28%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Update%20the%20HTML%20DOM%2C%20optionally%20recursing%20through%20the%20childs%0A%09%20%2A%20%40param%20%7BObject%7D%20%5Boptions%5D%20Available%20parameters%3A%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bboolean%7D%20%5Brecurse%5D%20%20%20%20%20%20%20%20%20If%20true%2C%20the%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20DOM%20of%20the%20childs%20will%20be%20updated%20recursively%2E%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20False%20by%20default%2E%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bboolean%7D%20%5BupdateIndexes%5D%20%20%20If%20true%2C%20the%20childs%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20indexes%20of%20the%20node%20will%20be%20updated%20too%2E%20False%20by%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20default%2E%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EupdateDom%20%3D%20function%20%28options%29%20%7B%0A%09%20%20%2F%2F%20update%20level%20indentation%0A%09%20%20var%20domTree%20%3D%20this%2Edom%2Etree%3B%0A%09%20%20if%20%28domTree%29%20%7B%0A%09%20%20%20%20domTree%2Estyle%2EmarginLeft%20%3D%20this%2EgetLevel%28%29%20%2A%2024%20%2B%20%27px%27%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20update%20field%0A%09%20%20var%20domField%20%3D%20this%2Edom%2Efield%3B%0A%09%20%20if%20%28domField%29%20%7B%0A%09%20%20%20%20if%20%28this%2EfieldEditable%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20parent%20is%20an%20object%0A%09%20%20%20%20%20%20domField%2EcontentEditable%20%3D%20this%2Eeditable%2Efield%3B%0A%09%20%20%20%20%20%20domField%2Espellcheck%20%3D%20false%3B%0A%09%20%20%20%20%20%20domField%2EclassName%20%3D%20%27field%27%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20parent%20is%20an%20array%20this%20is%20the%20root%20node%0A%09%20%20%20%20%20%20domField%2EclassName%20%3D%20%27readonly%27%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20var%20field%3B%0A%09%20%20%20%20if%20%28this%2Eindex%20%21%3D%20undefined%29%20%7B%0A%09%20%20%20%20%20%20field%20%3D%20this%2Eindex%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28this%2Efield%20%21%3D%20undefined%29%20%7B%0A%09%20%20%20%20%20%20field%20%3D%20this%2Efield%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20%20%20field%20%3D%20this%2Etype%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20field%20%3D%20%27%27%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20domField%2EinnerHTML%20%3D%20this%2E%5FescapeHTML%28field%29%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20update%20value%0A%09%20%20var%20domValue%20%3D%20this%2Edom%2Evalue%3B%0A%09%20%20if%20%28domValue%29%20%7B%0A%09%20%20%20%20var%20count%20%3D%20this%2Echilds%20%3F%20this%2Echilds%2Elength%20%3A%200%3B%0A%09%20%20%20%20if%20%28this%2Etype%20%3D%3D%20%27array%27%29%20%7B%0A%09%20%20%20%20%20%20domValue%2EinnerHTML%20%3D%20%27%5B%27%20%2B%20count%20%2B%20%27%5D%27%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28this%2Etype%20%3D%3D%20%27object%27%29%20%7B%0A%09%20%20%20%20%20%20domValue%2EinnerHTML%20%3D%20%27%7B%27%20%2B%20count%20%2B%20%27%7D%27%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20domValue%2EinnerHTML%20%3D%20this%2E%5FescapeHTML%28this%2Evalue%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20update%20field%20and%20value%0A%09%20%20this%2E%5FupdateDomField%28%29%3B%0A%09%20%20this%2E%5FupdateDomValue%28%29%3B%0A%0A%09%20%20%2F%2F%20update%20childs%20indexes%0A%09%20%20if%20%28options%20%26%26%20options%2EupdateIndexes%20%3D%3D%3D%20true%29%20%7B%0A%09%20%20%20%20%2F%2F%20updateIndexes%20is%20true%20or%20undefined%0A%09%20%20%20%20this%2E%5FupdateDomIndexes%28%29%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28options%20%26%26%20options%2Erecurse%20%3D%3D%3D%20true%29%20%7B%0A%09%20%20%20%20%2F%2F%20recurse%20is%20true%20or%20undefined%2E%20update%20childs%20recursively%0A%09%20%20%20%20if%20%28this%2Echilds%29%20%7B%0A%09%20%20%20%20%20%20this%2Echilds%2EforEach%28function%20%28child%29%20%7B%0A%09%20%20%20%20%20%20%20%20child%2EupdateDom%28options%29%3B%0A%09%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20update%20row%20with%20append%20button%0A%09%20%20if%20%28this%2Eappend%29%20%7B%0A%09%20%20%20%20this%2Eappend%2EupdateDom%28%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Update%20the%20DOM%20of%20the%20childs%20of%20a%20node%3A%20update%20indexes%20and%20undefined%20field%0A%09%20%2A%20names%2E%0A%09%20%2A%20Only%20applicable%20when%20structure%20is%20an%20array%20or%20object%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FupdateDomIndexes%20%3D%20function%20%28%29%20%7B%0A%09%20%20var%20domValue%20%3D%20this%2Edom%2Evalue%3B%0A%09%20%20var%20childs%20%3D%20this%2Echilds%3B%0A%09%20%20if%20%28domValue%20%26%26%20childs%29%20%7B%0A%09%20%20%20%20if%20%28this%2Etype%20%3D%3D%20%27array%27%29%20%7B%0A%09%20%20%20%20%20%20childs%2EforEach%28function%20%28child%2C%20index%29%20%7B%0A%09%20%20%20%20%20%20%20%20child%2Eindex%20%3D%20index%3B%0A%09%20%20%20%20%20%20%20%20var%20childField%20%3D%20child%2Edom%2Efield%3B%0A%09%20%20%20%20%20%20%20%20if%20%28childField%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20childField%2EinnerHTML%20%3D%20index%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28this%2Etype%20%3D%3D%20%27object%27%29%20%7B%0A%09%20%20%20%20%20%20childs%2EforEach%28function%20%28child%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28child%2Eindex%20%21%3D%20undefined%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20delete%20child%2Eindex%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20if%20%28child%2Efield%20%3D%3D%20undefined%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20child%2Efield%20%3D%20%27%27%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Create%20an%20editable%20value%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FcreateDomValue%20%3D%20function%20%28%29%20%7B%0A%09%20%20var%20domValue%3B%0A%0A%09%20%20if%20%28this%2Etype%20%3D%3D%20%27array%27%29%20%7B%0A%09%20%20%20%20domValue%20%3D%20document%2EcreateElement%28%27div%27%29%3B%0A%09%20%20%20%20domValue%2EclassName%20%3D%20%27readonly%27%3B%0A%09%20%20%20%20domValue%2EinnerHTML%20%3D%20%27%5B%2E%2E%2E%5D%27%3B%0A%09%20%20%7D%0A%09%20%20else%20if%20%28this%2Etype%20%3D%3D%20%27object%27%29%20%7B%0A%09%20%20%20%20domValue%20%3D%20document%2EcreateElement%28%27div%27%29%3B%0A%09%20%20%20%20domValue%2EclassName%20%3D%20%27readonly%27%3B%0A%09%20%20%20%20domValue%2EinnerHTML%20%3D%20%27%7B%2E%2E%2E%7D%27%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20if%20%28%21this%2Eeditable%2Evalue%20%26%26%20util%2EisUrl%28this%2Evalue%29%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20create%20a%20link%20in%20case%20of%20read%2Donly%20editor%20and%20value%20containing%20an%20url%0A%09%20%20%20%20%20%20domValue%20%3D%20document%2EcreateElement%28%27a%27%29%3B%0A%09%20%20%20%20%20%20domValue%2EclassName%20%3D%20%27value%27%3B%0A%09%20%20%20%20%20%20domValue%2Ehref%20%3D%20this%2Evalue%3B%0A%09%20%20%20%20%20%20domValue%2Etarget%20%3D%20%27%5Fblank%27%3B%0A%09%20%20%20%20%20%20domValue%2EinnerHTML%20%3D%20this%2E%5FescapeHTML%28this%2Evalue%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20create%20an%20editable%20or%20read%2Donly%20div%0A%09%20%20%20%20%20%20domValue%20%3D%20document%2EcreateElement%28%27div%27%29%3B%0A%09%20%20%20%20%20%20domValue%2EcontentEditable%20%3D%20this%2Eeditable%2Evalue%3B%0A%09%20%20%20%20%20%20domValue%2Espellcheck%20%3D%20false%3B%0A%09%20%20%20%20%20%20domValue%2EclassName%20%3D%20%27value%27%3B%0A%09%20%20%20%20%20%20domValue%2EinnerHTML%20%3D%20this%2E%5FescapeHTML%28this%2Evalue%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20return%20domValue%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Create%20an%20expand%2Fcollapse%20button%0A%09%20%2A%20%40return%20%7BElement%7D%20expand%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FcreateDomExpandButton%20%3D%20function%20%28%29%20%7B%0A%09%20%20%2F%2F%20create%20expand%20button%0A%09%20%20var%20expand%20%3D%20document%2EcreateElement%28%27button%27%29%3B%0A%09%20%20if%20%28this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20expand%2EclassName%20%3D%20this%2Eexpanded%20%3F%20%27expanded%27%20%3A%20%27collapsed%27%3B%0A%09%20%20%20%20expand%2Etitle%20%3D%0A%09%20%20%20%20%20%20%20%20%27Click%20to%20expand%2Fcollapse%20this%20field%20%28Ctrl%2BE%29%2E%20%5Cn%27%20%2B%0A%09%20%20%20%20%20%20%20%20%27Ctrl%2BClick%20to%20expand%2Fcollapse%20including%20all%20childs%2E%27%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20expand%2EclassName%20%3D%20%27invisible%27%3B%0A%09%20%20%20%20expand%2Etitle%20%3D%20%27%27%3B%0A%09%20%20%7D%0A%0A%09%20%20return%20expand%3B%0A%09%7D%3B%0A%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Create%20a%20DOM%20tree%20element%2C%20containing%20the%20expand%2Fcollapse%20button%0A%09%20%2A%20%40return%20%7BElement%7D%20domTree%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FcreateDomTree%20%3D%20function%20%28%29%20%7B%0A%09%20%20var%20dom%20%3D%20this%2Edom%3B%0A%09%20%20var%20domTree%20%3D%20document%2EcreateElement%28%27table%27%29%3B%0A%09%20%20var%20tbody%20%3D%20document%2EcreateElement%28%27tbody%27%29%3B%0A%09%20%20domTree%2Estyle%2EborderCollapse%20%3D%20%27collapse%27%3B%20%2F%2F%20TODO%3A%20put%20in%20css%0A%09%20%20domTree%2EclassName%20%3D%20%27values%27%3B%0A%09%20%20domTree%2EappendChild%28tbody%29%3B%0A%09%20%20var%20tr%20%3D%20document%2EcreateElement%28%27tr%27%29%3B%0A%09%20%20tbody%2EappendChild%28tr%29%3B%0A%0A%09%20%20%2F%2F%20create%20expand%20button%0A%09%20%20var%20tdExpand%20%3D%20document%2EcreateElement%28%27td%27%29%3B%0A%09%20%20tdExpand%2EclassName%20%3D%20%27tree%27%3B%0A%09%20%20tr%2EappendChild%28tdExpand%29%3B%0A%09%20%20dom%2Eexpand%20%3D%20this%2E%5FcreateDomExpandButton%28%29%3B%0A%09%20%20tdExpand%2EappendChild%28dom%2Eexpand%29%3B%0A%09%20%20dom%2EtdExpand%20%3D%20tdExpand%3B%0A%0A%09%20%20%2F%2F%20create%20the%20field%0A%09%20%20var%20tdField%20%3D%20document%2EcreateElement%28%27td%27%29%3B%0A%09%20%20tdField%2EclassName%20%3D%20%27tree%27%3B%0A%09%20%20tr%2EappendChild%28tdField%29%3B%0A%09%20%20dom%2Efield%20%3D%20this%2E%5FcreateDomField%28%29%3B%0A%09%20%20tdField%2EappendChild%28dom%2Efield%29%3B%0A%09%20%20dom%2EtdField%20%3D%20tdField%3B%0A%0A%09%20%20%2F%2F%20create%20a%20separator%0A%09%20%20var%20tdSeparator%20%3D%20document%2EcreateElement%28%27td%27%29%3B%0A%09%20%20tdSeparator%2EclassName%20%3D%20%27tree%27%3B%0A%09%20%20tr%2EappendChild%28tdSeparator%29%3B%0A%09%20%20if%20%28this%2Etype%20%21%3D%20%27object%27%20%26%26%20this%2Etype%20%21%3D%20%27array%27%29%20%7B%0A%09%20%20%20%20tdSeparator%2EappendChild%28document%2EcreateTextNode%28%27%3A%27%29%29%3B%0A%09%20%20%20%20tdSeparator%2EclassName%20%3D%20%27separator%27%3B%0A%09%20%20%7D%0A%09%20%20dom%2EtdSeparator%20%3D%20tdSeparator%3B%0A%0A%09%20%20%2F%2F%20create%20the%20value%0A%09%20%20var%20tdValue%20%3D%20document%2EcreateElement%28%27td%27%29%3B%0A%09%20%20tdValue%2EclassName%20%3D%20%27tree%27%3B%0A%09%20%20tr%2EappendChild%28tdValue%29%3B%0A%09%20%20dom%2Evalue%20%3D%20this%2E%5FcreateDomValue%28%29%3B%0A%09%20%20tdValue%2EappendChild%28dom%2Evalue%29%3B%0A%09%20%20dom%2EtdValue%20%3D%20tdValue%3B%0A%0A%09%20%20return%20domTree%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Handle%20an%20event%2E%20The%20event%20is%20catched%20centrally%20by%20the%20editor%0A%09%20%2A%20%40param%20%7BEvent%7D%20event%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EonEvent%20%3D%20function%20%28event%29%20%7B%0A%09%20%20var%20type%20%3D%20event%2Etype%2C%0A%09%20%20%20%20%20%20target%20%3D%20event%2Etarget%20%7C%7C%20event%2EsrcElement%2C%0A%09%20%20%20%20%20%20dom%20%3D%20this%2Edom%2C%0A%09%20%20%20%20%20%20node%20%3D%20this%2C%0A%09%20%20%20%20%20%20focusNode%2C%0A%09%20%20%20%20%20%20expandable%20%3D%20this%2E%5FhasChilds%28%29%3B%0A%0A%09%20%20%2F%2F%20check%20if%20mouse%20is%20on%20menu%20or%20on%20dragarea%2E%0A%09%20%20%2F%2F%20If%20so%2C%20highlight%20current%20row%20and%20its%20childs%0A%09%20%20if%20%28target%20%3D%3D%20dom%2Edrag%20%7C%7C%20target%20%3D%3D%20dom%2Emenu%29%20%7B%0A%09%20%20%20%20if%20%28type%20%3D%3D%20%27mouseover%27%29%20%7B%0A%09%20%20%20%20%20%20this%2Eeditor%2Ehighlighter%2Ehighlight%28this%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28type%20%3D%3D%20%27mouseout%27%29%20%7B%0A%09%20%20%20%20%20%20this%2Eeditor%2Ehighlighter%2Eunhighlight%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20drag%20events%0A%09%20%20if%20%28type%20%3D%3D%20%27mousedown%27%20%26%26%20target%20%3D%3D%20dom%2Edrag%29%20%7B%0A%09%20%20%20%20this%2E%5FonDragStart%28event%29%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20context%20menu%20events%0A%09%20%20if%20%28type%20%3D%3D%20%27click%27%20%26%26%20target%20%3D%3D%20dom%2Emenu%29%20%7B%0A%09%20%20%20%20var%20highlighter%20%3D%20node%2Eeditor%2Ehighlighter%3B%0A%09%20%20%20%20highlighter%2Ehighlight%28node%29%3B%0A%09%20%20%20%20highlighter%2Elock%28%29%3B%0A%09%20%20%20%20util%2EaddClassName%28dom%2Emenu%2C%20%27selected%27%29%3B%0A%09%20%20%20%20this%2EshowContextMenu%28dom%2Emenu%2C%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20util%2EremoveClassName%28dom%2Emenu%2C%20%27selected%27%29%3B%0A%09%20%20%20%20%20%20highlighter%2Eunlock%28%29%3B%0A%09%20%20%20%20%20%20highlighter%2Eunhighlight%28%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20expand%20events%0A%09%20%20if%20%28type%20%3D%3D%20%27click%27%20%26%26%20target%20%3D%3D%20dom%2Eexpand%29%20%7B%0A%09%20%20%20%20if%20%28expandable%29%20%7B%0A%09%20%20%20%20%20%20var%20recurse%20%3D%20event%2EctrlKey%3B%20%2F%2F%20with%20ctrl%2Dkey%2C%20expand%2Fcollapse%20all%0A%09%20%20%20%20%20%20this%2E%5FonExpand%28recurse%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20value%20events%0A%09%20%20var%20domValue%20%3D%20dom%2Evalue%3B%0A%09%20%20if%20%28target%20%3D%3D%20domValue%29%20%7B%0A%09%20%20%20%20%2F%2Fnoinspection%20FallthroughInSwitchStatementJS%0A%09%20%20%20%20switch%20%28type%29%20%7B%0A%09%20%20%20%20%20%20case%20%27focus%27%3A%0A%09%20%20%20%20%20%20%20%20focusNode%20%3D%20this%3B%0A%09%20%20%20%20%20%20%20%20break%3B%0A%0A%09%20%20%20%20%20%20case%20%27blur%27%3A%0A%09%20%20%20%20%20%20case%20%27change%27%3A%0A%09%20%20%20%20%20%20%20%20this%2E%5FgetDomValue%28true%29%3B%0A%09%20%20%20%20%20%20%20%20this%2E%5FupdateDomValue%28%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Evalue%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20domValue%2EinnerHTML%20%3D%20this%2E%5FescapeHTML%28this%2Evalue%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20break%3B%0A%0A%09%20%20%20%20%20%20case%20%27input%27%3A%0A%09%20%20%20%20%20%20%20%20this%2E%5FgetDomValue%28true%29%3B%0A%09%20%20%20%20%20%20%20%20this%2E%5FupdateDomValue%28%29%3B%0A%09%20%20%20%20%20%20%20%20break%3B%0A%0A%09%20%20%20%20%20%20case%20%27keydown%27%3A%0A%09%20%20%20%20%20%20case%20%27mousedown%27%3A%0A%09%20%20%20%20%20%20%20%20this%2Eeditor%2Eselection%20%3D%20this%2Eeditor%2EgetSelection%28%29%3B%0A%09%20%20%20%20%20%20%20%20break%3B%0A%0A%09%20%20%20%20%20%20case%20%27click%27%3A%0A%09%20%20%20%20%20%20%20%20if%20%28event%2EctrlKey%20%7C%7C%20%21this%2Eeditable%2Evalue%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20if%20%28util%2EisUrl%28this%2Evalue%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20window%2Eopen%28this%2Evalue%2C%20%27%5Fblank%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20break%3B%0A%0A%09%20%20%20%20%20%20case%20%27keyup%27%3A%0A%09%20%20%20%20%20%20%20%20this%2E%5FgetDomValue%28true%29%3B%0A%09%20%20%20%20%20%20%20%20this%2E%5FupdateDomValue%28%29%3B%0A%09%20%20%20%20%20%20%20%20break%3B%0A%0A%09%20%20%20%20%20%20case%20%27cut%27%3A%0A%09%20%20%20%20%20%20case%20%27paste%27%3A%0A%09%20%20%20%20%20%20%20%20setTimeout%28function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20node%2E%5FgetDomValue%28true%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20node%2E%5FupdateDomValue%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%2C%201%29%3B%0A%09%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20field%20events%0A%09%20%20var%20domField%20%3D%20dom%2Efield%3B%0A%09%20%20if%20%28target%20%3D%3D%20domField%29%20%7B%0A%09%20%20%20%20switch%20%28type%29%20%7B%0A%09%20%20%20%20%20%20case%20%27focus%27%3A%0A%09%20%20%20%20%20%20%20%20focusNode%20%3D%20this%3B%0A%09%20%20%20%20%20%20%20%20break%3B%0A%0A%09%20%20%20%20%20%20case%20%27blur%27%3A%0A%09%20%20%20%20%20%20case%20%27change%27%3A%0A%09%20%20%20%20%20%20%20%20this%2E%5FgetDomField%28true%29%3B%0A%09%20%20%20%20%20%20%20%20this%2E%5FupdateDomField%28%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Efield%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20domField%2EinnerHTML%20%3D%20this%2E%5FescapeHTML%28this%2Efield%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20break%3B%0A%0A%09%20%20%20%20%20%20case%20%27input%27%3A%0A%09%20%20%20%20%20%20%20%20this%2E%5FgetDomField%28true%29%3B%0A%09%20%20%20%20%20%20%20%20this%2E%5FupdateDomField%28%29%3B%0A%09%20%20%20%20%20%20%20%20break%3B%0A%0A%09%20%20%20%20%20%20case%20%27keydown%27%3A%0A%09%20%20%20%20%20%20case%20%27mousedown%27%3A%0A%09%20%20%20%20%20%20%20%20this%2Eeditor%2Eselection%20%3D%20this%2Eeditor%2EgetSelection%28%29%3B%0A%09%20%20%20%20%20%20%20%20break%3B%0A%0A%09%20%20%20%20%20%20case%20%27keyup%27%3A%0A%09%20%20%20%20%20%20%20%20this%2E%5FgetDomField%28true%29%3B%0A%09%20%20%20%20%20%20%20%20this%2E%5FupdateDomField%28%29%3B%0A%09%20%20%20%20%20%20%20%20break%3B%0A%0A%09%20%20%20%20%20%20case%20%27cut%27%3A%0A%09%20%20%20%20%20%20case%20%27paste%27%3A%0A%09%20%20%20%20%20%20%20%20setTimeout%28function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20node%2E%5FgetDomField%28true%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20node%2E%5FupdateDomField%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%2C%201%29%3B%0A%09%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20focus%0A%09%20%20%2F%2F%20when%20clicked%20in%20whitespace%20left%20or%20right%20from%20the%20field%20or%20value%2C%20set%20focus%0A%09%20%20var%20domTree%20%3D%20dom%2Etree%3B%0A%09%20%20if%20%28target%20%3D%3D%20domTree%2EparentNode%29%20%7B%0A%09%20%20%20%20switch%20%28type%29%20%7B%0A%09%20%20%20%20%20%20case%20%27click%27%3A%0A%09%20%20%20%20%20%20%20%20var%20left%20%3D%20%28event%2EoffsetX%20%21%3D%20undefined%29%20%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%28event%2EoffsetX%20%3C%20%28this%2EgetLevel%28%29%20%2B%201%29%20%2A%2024%29%20%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%28event%2EpageX%20%3C%20util%2EgetAbsoluteLeft%28dom%2EtdSeparator%29%29%3B%2F%2F%20for%20FF%0A%09%20%20%20%20%20%20%20%20if%20%28left%20%7C%7C%20expandable%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%2F%2F%20node%20is%20expandable%20when%20it%20is%20an%20object%20or%20array%0A%09%20%20%20%20%20%20%20%20%20%20if%20%28domField%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20util%2EsetEndOfContentEditable%28domField%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20domField%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20if%20%28domValue%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20util%2EsetEndOfContentEditable%28domValue%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20domValue%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20if%20%28%28target%20%3D%3D%20dom%2EtdExpand%20%26%26%20%21expandable%29%20%7C%7C%20target%20%3D%3D%20dom%2EtdField%20%7C%7C%0A%09%20%20%20%20%20%20target%20%3D%3D%20dom%2EtdSeparator%29%20%7B%0A%09%20%20%20%20switch%20%28type%29%20%7B%0A%09%20%20%20%20%20%20case%20%27click%27%3A%0A%09%20%20%20%20%20%20%20%20if%20%28domField%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20util%2EsetEndOfContentEditable%28domField%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20domField%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20if%20%28type%20%3D%3D%20%27keydown%27%29%20%7B%0A%09%20%20%20%20this%2EonKeyDown%28event%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Key%20down%20event%20handler%0A%09%20%2A%20%40param%20%7BEvent%7D%20event%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EonKeyDown%20%3D%20function%20%28event%29%20%7B%0A%09%20%20var%20keynum%20%3D%20event%2Ewhich%20%7C%7C%20event%2EkeyCode%3B%0A%09%20%20var%20target%20%3D%20event%2Etarget%20%7C%7C%20event%2EsrcElement%3B%0A%09%20%20var%20ctrlKey%20%3D%20event%2EctrlKey%3B%0A%09%20%20var%20shiftKey%20%3D%20event%2EshiftKey%3B%0A%09%20%20var%20altKey%20%3D%20event%2EaltKey%3B%0A%09%20%20var%20handled%20%3D%20false%3B%0A%09%20%20var%20prevNode%2C%20nextNode%2C%20nextDom%2C%20nextDom2%3B%0A%09%20%20var%20editable%20%3D%20this%2Eeditor%2Eoptions%2Emode%20%3D%3D%3D%20%27tree%27%3B%0A%0A%09%20%20%2F%2F%20util%2Elog%28ctrlKey%2C%20keynum%2C%20event%2EcharCode%29%3B%20%2F%2F%20TODO%3A%20cleanup%0A%09%20%20if%20%28keynum%20%3D%3D%2013%29%20%7B%20%2F%2F%20Enter%0A%09%20%20%20%20if%20%28target%20%3D%3D%20this%2Edom%2Evalue%29%20%7B%0A%09%20%20%20%20%20%20if%20%28%21this%2Eeditable%2Evalue%20%7C%7C%20event%2EctrlKey%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28util%2EisUrl%28this%2Evalue%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20window%2Eopen%28this%2Evalue%2C%20%27%5Fblank%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28target%20%3D%3D%20this%2Edom%2Eexpand%29%20%7B%0A%09%20%20%20%20%20%20var%20expandable%20%3D%20this%2E%5FhasChilds%28%29%3B%0A%09%20%20%20%20%20%20if%20%28expandable%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20recurse%20%3D%20event%2EctrlKey%3B%20%2F%2F%20with%20ctrl%2Dkey%2C%20expand%2Fcollapse%20all%0A%09%20%20%20%20%20%20%20%20this%2E%5FonExpand%28recurse%29%3B%0A%09%20%20%20%20%20%20%20%20target%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20else%20if%20%28keynum%20%3D%3D%2068%29%20%7B%20%20%2F%2F%20D%0A%09%20%20%20%20if%20%28ctrlKey%20%26%26%20editable%29%20%7B%20%20%20%2F%2F%20Ctrl%2BD%0A%09%20%20%20%20%20%20this%2E%5FonDuplicate%28%29%3B%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20else%20if%20%28keynum%20%3D%3D%2069%29%20%7B%20%2F%2F%20E%0A%09%20%20%20%20if%20%28ctrlKey%29%20%7B%20%20%20%20%20%20%20%2F%2F%20Ctrl%2BE%20and%20Ctrl%2BShift%2BE%0A%09%20%20%20%20%20%20this%2E%5FonExpand%28shiftKey%29%3B%20%20%2F%2F%20recurse%20%3D%20shiftKey%0A%09%20%20%20%20%20%20target%2Efocus%28%29%3B%20%2F%2F%20TODO%3A%20should%20restore%20focus%20in%20case%20of%20recursing%20expand%20%28which%20takes%20DOM%20offline%29%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20else%20if%20%28keynum%20%3D%3D%2077%20%26%26%20editable%29%20%7B%20%2F%2F%20M%0A%09%20%20%20%20if%20%28ctrlKey%29%20%7B%20%2F%2F%20Ctrl%2BM%0A%09%20%20%20%20%20%20this%2EshowContextMenu%28target%29%3B%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20else%20if%20%28keynum%20%3D%3D%2046%20%26%26%20editable%29%20%7B%20%2F%2F%20Del%0A%09%20%20%20%20if%20%28ctrlKey%29%20%7B%20%20%20%20%20%20%20%2F%2F%20Ctrl%2BDel%0A%09%20%20%20%20%20%20this%2E%5FonRemove%28%29%3B%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20else%20if%20%28keynum%20%3D%3D%2045%20%26%26%20editable%29%20%7B%20%2F%2F%20Ins%0A%09%20%20%20%20if%20%28ctrlKey%20%26%26%20%21shiftKey%29%20%7B%20%20%20%20%20%20%20%2F%2F%20Ctrl%2BIns%0A%09%20%20%20%20%20%20this%2E%5FonInsertBefore%28%29%3B%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28ctrlKey%20%26%26%20shiftKey%29%20%7B%20%20%20%2F%2F%20Ctrl%2BShift%2BIns%0A%09%20%20%20%20%20%20this%2E%5FonInsertAfter%28%29%3B%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20else%20if%20%28keynum%20%3D%3D%2035%29%20%7B%20%2F%2F%20End%0A%09%20%20%20%20if%20%28altKey%29%20%7B%20%2F%2F%20Alt%2BEnd%0A%09%20%20%20%20%20%20%2F%2F%20find%20the%20last%20node%0A%09%20%20%20%20%20%20var%20lastNode%20%3D%20this%2E%5FlastNode%28%29%3B%0A%09%20%20%20%20%20%20if%20%28lastNode%29%20%7B%0A%09%20%20%20%20%20%20%20%20lastNode%2Efocus%28Node%2EfocusElement%20%7C%7C%20this%2E%5FgetElementName%28target%29%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20else%20if%20%28keynum%20%3D%3D%2036%29%20%7B%20%2F%2F%20Home%0A%09%20%20%20%20if%20%28altKey%29%20%7B%20%2F%2F%20Alt%2BHome%0A%09%20%20%20%20%20%20%2F%2F%20find%20the%20first%20node%0A%09%20%20%20%20%20%20var%20firstNode%20%3D%20this%2E%5FfirstNode%28%29%3B%0A%09%20%20%20%20%20%20if%20%28firstNode%29%20%7B%0A%09%20%20%20%20%20%20%20%20firstNode%2Efocus%28Node%2EfocusElement%20%7C%7C%20this%2E%5FgetElementName%28target%29%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20else%20if%20%28keynum%20%3D%3D%2037%29%20%7B%20%20%20%20%20%20%20%20%2F%2F%20Arrow%20Left%0A%09%20%20%20%20if%20%28altKey%20%26%26%20%21shiftKey%29%20%7B%20%20%2F%2F%20Alt%20%2B%20Arrow%20Left%0A%09%20%20%20%20%20%20%2F%2F%20move%20to%20left%20element%0A%09%20%20%20%20%20%20var%20prevElement%20%3D%20this%2E%5FpreviousElement%28target%29%3B%0A%09%20%20%20%20%20%20if%20%28prevElement%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Efocus%28this%2E%5FgetElementName%28prevElement%29%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28altKey%20%26%26%20shiftKey%20%26%26%20editable%29%20%7B%20%2F%2F%20Alt%20%2B%20Shift%20Arrow%20left%0A%09%20%20%20%20%20%20if%20%28this%2Eexpanded%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20appendDom%20%3D%20this%2EgetAppend%28%29%3B%0A%09%20%20%20%20%20%20%20%20nextDom%20%3D%20appendDom%20%3F%20appendDom%2EnextSibling%20%3A%20undefined%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20var%20dom%20%3D%20this%2EgetDom%28%29%3B%0A%09%20%20%20%20%20%20%20%20nextDom%20%3D%20dom%2EnextSibling%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20if%20%28nextDom%29%20%7B%0A%09%20%20%20%20%20%20%20%20nextNode%20%3D%20Node%2EgetNodeFromTarget%28nextDom%29%3B%0A%09%20%20%20%20%20%20%20%20nextDom2%20%3D%20nextDom%2EnextSibling%3B%0A%09%20%20%20%20%20%20%20%20nextNode2%20%3D%20Node%2EgetNodeFromTarget%28nextDom2%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28nextNode%20%26%26%20nextNode%20instanceof%20AppendNode%20%26%26%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%21%28this%2Eparent%2Echilds%2Elength%20%3D%3D%201%29%20%26%26%0A%09%20%20%20%20%20%20%20%20%20%20%20%20nextNode2%20%26%26%20nextNode2%2Eparent%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20nextNode2%2Eparent%2EmoveBefore%28this%2C%20nextNode2%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20this%2Efocus%28Node%2EfocusElement%20%7C%7C%20this%2E%5FgetElementName%28target%29%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20else%20if%20%28keynum%20%3D%3D%2038%29%20%7B%20%20%20%20%20%20%20%20%2F%2F%20Arrow%20Up%0A%09%20%20%20%20if%20%28altKey%20%26%26%20%21shiftKey%29%20%7B%20%20%2F%2F%20Alt%20%2B%20Arrow%20Up%0A%09%20%20%20%20%20%20%2F%2F%20find%20the%20previous%20node%0A%09%20%20%20%20%20%20prevNode%20%3D%20this%2E%5FpreviousNode%28%29%3B%0A%09%20%20%20%20%20%20if%20%28prevNode%29%20%7B%0A%09%20%20%20%20%20%20%20%20prevNode%2Efocus%28Node%2EfocusElement%20%7C%7C%20this%2E%5FgetElementName%28target%29%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28altKey%20%26%26%20shiftKey%29%20%7B%20%2F%2F%20Alt%20%2B%20Shift%20%2B%20Arrow%20Up%0A%09%20%20%20%20%20%20%2F%2F%20find%20the%20previous%20node%0A%09%20%20%20%20%20%20prevNode%20%3D%20this%2E%5FpreviousNode%28%29%3B%0A%09%20%20%20%20%20%20if%20%28prevNode%20%26%26%20prevNode%2Eparent%29%20%7B%0A%09%20%20%20%20%20%20%20%20prevNode%2Eparent%2EmoveBefore%28this%2C%20prevNode%29%3B%0A%09%20%20%20%20%20%20%20%20this%2Efocus%28Node%2EfocusElement%20%7C%7C%20this%2E%5FgetElementName%28target%29%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20else%20if%20%28keynum%20%3D%3D%2039%29%20%7B%20%20%20%20%20%20%20%20%2F%2F%20Arrow%20Right%0A%09%20%20%20%20if%20%28altKey%20%26%26%20%21shiftKey%29%20%7B%20%20%2F%2F%20Alt%20%2B%20Arrow%20Right%0A%09%20%20%20%20%20%20%2F%2F%20move%20to%20right%20element%0A%09%20%20%20%20%20%20var%20nextElement%20%3D%20this%2E%5FnextElement%28target%29%3B%0A%09%20%20%20%20%20%20if%20%28nextElement%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Efocus%28this%2E%5FgetElementName%28nextElement%29%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28altKey%20%26%26%20shiftKey%29%20%7B%20%2F%2F%20Alt%20%2B%20Shift%20Arrow%20Right%0A%09%20%20%20%20%20%20dom%20%3D%20this%2EgetDom%28%29%3B%0A%09%20%20%20%20%20%20var%20prevDom%20%3D%20dom%2EpreviousSibling%3B%0A%09%20%20%20%20%20%20if%20%28prevDom%29%20%7B%0A%09%20%20%20%20%20%20%20%20prevNode%20%3D%20Node%2EgetNodeFromTarget%28prevDom%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28prevNode%20%26%26%20prevNode%2Eparent%20%26%26%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%28prevNode%20instanceof%20AppendNode%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%26%26%20%21prevNode%2EisVisible%28%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20prevNode%2Eparent%2EmoveBefore%28this%2C%20prevNode%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20this%2Efocus%28Node%2EfocusElement%20%7C%7C%20this%2E%5FgetElementName%28target%29%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20else%20if%20%28keynum%20%3D%3D%2040%29%20%7B%20%20%20%20%20%20%20%20%2F%2F%20Arrow%20Down%0A%09%20%20%20%20if%20%28altKey%20%26%26%20%21shiftKey%29%20%7B%20%20%2F%2F%20Alt%20%2B%20Arrow%20Down%0A%09%20%20%20%20%20%20%2F%2F%20find%20the%20next%20node%0A%09%20%20%20%20%20%20nextNode%20%3D%20this%2E%5FnextNode%28%29%3B%0A%09%20%20%20%20%20%20if%20%28nextNode%29%20%7B%0A%09%20%20%20%20%20%20%20%20nextNode%2Efocus%28Node%2EfocusElement%20%7C%7C%20this%2E%5FgetElementName%28target%29%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28altKey%20%26%26%20shiftKey%20%26%26%20editable%29%20%7B%20%2F%2F%20Alt%20%2B%20Shift%20%2B%20Arrow%20Down%0A%09%20%20%20%20%20%20%2F%2F%20find%20the%202nd%20next%20node%20and%20move%20before%20that%20one%0A%09%20%20%20%20%20%20if%20%28this%2Eexpanded%29%20%7B%0A%09%20%20%20%20%20%20%20%20nextNode%20%3D%20this%2Eappend%20%3F%20this%2Eappend%2E%5FnextNode%28%29%20%3A%20undefined%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20nextNode%20%3D%20this%2E%5FnextNode%28%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20nextDom%20%3D%20nextNode%20%3F%20nextNode%2EgetDom%28%29%20%3A%20undefined%3B%0A%09%20%20%20%20%20%20if%20%28this%2Eparent%2Echilds%2Elength%20%3D%3D%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20nextDom2%20%3D%20nextDom%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20nextDom2%20%3D%20nextDom%20%3F%20nextDom%2EnextSibling%20%3A%20undefined%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20var%20nextNode2%20%3D%20Node%2EgetNodeFromTarget%28nextDom2%29%3B%0A%09%20%20%20%20%20%20if%20%28nextNode2%20%26%26%20nextNode2%2Eparent%29%20%7B%0A%09%20%20%20%20%20%20%20%20nextNode2%2Eparent%2EmoveBefore%28this%2C%20nextNode2%29%3B%0A%09%20%20%20%20%20%20%20%20this%2Efocus%28Node%2EfocusElement%20%7C%7C%20this%2E%5FgetElementName%28target%29%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20if%20%28handled%29%20%7B%0A%09%20%20%20%20event%2EpreventDefault%28%29%3B%0A%09%20%20%20%20event%2EstopPropagation%28%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Handle%20the%20expand%20event%2C%20when%20clicked%20on%20the%20expand%20button%0A%09%20%2A%20%40param%20%7Bboolean%7D%20recurse%20%20%20If%20true%2C%20child%20nodes%20will%20be%20expanded%20too%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FonExpand%20%3D%20function%20%28recurse%29%20%7B%0A%09%20%20if%20%28recurse%29%20%7B%0A%09%20%20%20%20%2F%2F%20Take%20the%20table%20offline%0A%09%20%20%20%20var%20table%20%3D%20this%2Edom%2Etr%2EparentNode%3B%20%2F%2F%20TODO%3A%20not%20nice%20to%20access%20the%20main%20table%20like%20this%0A%09%20%20%20%20var%20frame%20%3D%20table%2EparentNode%3B%0A%09%20%20%20%20var%20scrollTop%20%3D%20frame%2EscrollTop%3B%0A%09%20%20%20%20frame%2EremoveChild%28table%29%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28this%2Eexpanded%29%20%7B%0A%09%20%20%20%20this%2Ecollapse%28recurse%29%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20this%2Eexpand%28recurse%29%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28recurse%29%20%7B%0A%09%20%20%20%20%2F%2F%20Put%20the%20table%20online%20again%0A%09%20%20%20%20frame%2EappendChild%28table%29%3B%0A%09%20%20%20%20frame%2EscrollTop%20%3D%20scrollTop%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Remove%20this%20node%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FonRemove%20%3D%20function%28%29%20%7B%0A%09%20%20this%2Eeditor%2Ehighlighter%2Eunhighlight%28%29%3B%0A%09%20%20var%20childs%20%3D%20this%2Eparent%2Echilds%3B%0A%09%20%20var%20index%20%3D%20childs%2EindexOf%28this%29%3B%0A%0A%09%20%20%2F%2F%20adjust%20the%20focus%0A%09%20%20var%20oldSelection%20%3D%20this%2Eeditor%2EgetSelection%28%29%3B%0A%09%20%20if%20%28childs%5Bindex%20%2B%201%5D%29%20%7B%0A%09%20%20%20%20childs%5Bindex%20%2B%201%5D%2Efocus%28%29%3B%0A%09%20%20%7D%0A%09%20%20else%20if%20%28childs%5Bindex%20%2D%201%5D%29%20%7B%0A%09%20%20%20%20childs%5Bindex%20%2D%201%5D%2Efocus%28%29%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20this%2Eparent%2Efocus%28%29%3B%0A%09%20%20%7D%0A%09%20%20var%20newSelection%20%3D%20this%2Eeditor%2EgetSelection%28%29%3B%0A%0A%09%20%20%2F%2F%20remove%20the%20node%0A%09%20%20this%2Eparent%2E%5Fremove%28this%29%3B%0A%0A%09%20%20%2F%2F%20store%20history%20action%0A%09%20%20this%2Eeditor%2E%5FonAction%28%27removeNode%27%2C%20%7B%0A%09%20%20%20%20node%3A%20this%2C%0A%09%20%20%20%20parent%3A%20this%2Eparent%2C%0A%09%20%20%20%20index%3A%20index%2C%0A%09%20%20%20%20oldSelection%3A%20oldSelection%2C%0A%09%20%20%20%20newSelection%3A%20newSelection%0A%09%20%20%7D%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Duplicate%20this%20node%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FonDuplicate%20%3D%20function%28%29%20%7B%0A%09%20%20var%20oldSelection%20%3D%20this%2Eeditor%2EgetSelection%28%29%3B%0A%09%20%20var%20clone%20%3D%20this%2Eparent%2E%5Fduplicate%28this%29%3B%0A%09%20%20clone%2Efocus%28%29%3B%0A%09%20%20var%20newSelection%20%3D%20this%2Eeditor%2EgetSelection%28%29%3B%0A%0A%09%20%20this%2Eeditor%2E%5FonAction%28%27duplicateNode%27%2C%20%7B%0A%09%20%20%20%20node%3A%20this%2C%0A%09%20%20%20%20clone%3A%20clone%2C%0A%09%20%20%20%20parent%3A%20this%2Eparent%2C%0A%09%20%20%20%20oldSelection%3A%20oldSelection%2C%0A%09%20%20%20%20newSelection%3A%20newSelection%0A%09%20%20%7D%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Handle%20insert%20before%20event%0A%09%20%2A%20%40param%20%7BString%7D%20%5Bfield%5D%0A%09%20%2A%20%40param%20%7B%2A%7D%20%5Bvalue%5D%0A%09%20%2A%20%40param%20%7BString%7D%20%5Btype%5D%20%20%20Can%20be%20%27auto%27%2C%20%27array%27%2C%20%27object%27%2C%20or%20%27string%27%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FonInsertBefore%20%3D%20function%20%28field%2C%20value%2C%20type%29%20%7B%0A%09%20%20var%20oldSelection%20%3D%20this%2Eeditor%2EgetSelection%28%29%3B%0A%0A%09%20%20var%20newNode%20%3D%20new%20Node%28this%2Eeditor%2C%20%7B%0A%09%20%20%20%20field%3A%20%28field%20%21%3D%20undefined%29%20%3F%20field%20%3A%20%27%27%2C%0A%09%20%20%20%20value%3A%20%28value%20%21%3D%20undefined%29%20%3F%20value%20%3A%20%27%27%2C%0A%09%20%20%20%20type%3A%20type%0A%09%20%20%7D%29%3B%0A%09%20%20newNode%2Eexpand%28true%29%3B%0A%09%20%20this%2Eparent%2EinsertBefore%28newNode%2C%20this%29%3B%0A%09%20%20this%2Eeditor%2Ehighlighter%2Eunhighlight%28%29%3B%0A%09%20%20newNode%2Efocus%28%27field%27%29%3B%0A%09%20%20var%20newSelection%20%3D%20this%2Eeditor%2EgetSelection%28%29%3B%0A%0A%09%20%20this%2Eeditor%2E%5FonAction%28%27insertBeforeNode%27%2C%20%7B%0A%09%20%20%20%20node%3A%20newNode%2C%0A%09%20%20%20%20beforeNode%3A%20this%2C%0A%09%20%20%20%20parent%3A%20this%2Eparent%2C%0A%09%20%20%20%20oldSelection%3A%20oldSelection%2C%0A%09%20%20%20%20newSelection%3A%20newSelection%0A%09%20%20%7D%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Handle%20insert%20after%20event%0A%09%20%2A%20%40param%20%7BString%7D%20%5Bfield%5D%0A%09%20%2A%20%40param%20%7B%2A%7D%20%5Bvalue%5D%0A%09%20%2A%20%40param%20%7BString%7D%20%5Btype%5D%20%20%20Can%20be%20%27auto%27%2C%20%27array%27%2C%20%27object%27%2C%20or%20%27string%27%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FonInsertAfter%20%3D%20function%20%28field%2C%20value%2C%20type%29%20%7B%0A%09%20%20var%20oldSelection%20%3D%20this%2Eeditor%2EgetSelection%28%29%3B%0A%0A%09%20%20var%20newNode%20%3D%20new%20Node%28this%2Eeditor%2C%20%7B%0A%09%20%20%20%20field%3A%20%28field%20%21%3D%20undefined%29%20%3F%20field%20%3A%20%27%27%2C%0A%09%20%20%20%20value%3A%20%28value%20%21%3D%20undefined%29%20%3F%20value%20%3A%20%27%27%2C%0A%09%20%20%20%20type%3A%20type%0A%09%20%20%7D%29%3B%0A%09%20%20newNode%2Eexpand%28true%29%3B%0A%09%20%20this%2Eparent%2EinsertAfter%28newNode%2C%20this%29%3B%0A%09%20%20this%2Eeditor%2Ehighlighter%2Eunhighlight%28%29%3B%0A%09%20%20newNode%2Efocus%28%27field%27%29%3B%0A%09%20%20var%20newSelection%20%3D%20this%2Eeditor%2EgetSelection%28%29%3B%0A%0A%09%20%20this%2Eeditor%2E%5FonAction%28%27insertAfterNode%27%2C%20%7B%0A%09%20%20%20%20node%3A%20newNode%2C%0A%09%20%20%20%20afterNode%3A%20this%2C%0A%09%20%20%20%20parent%3A%20this%2Eparent%2C%0A%09%20%20%20%20oldSelection%3A%20oldSelection%2C%0A%09%20%20%20%20newSelection%3A%20newSelection%0A%09%20%20%7D%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Handle%20append%20event%0A%09%20%2A%20%40param%20%7BString%7D%20%5Bfield%5D%0A%09%20%2A%20%40param%20%7B%2A%7D%20%5Bvalue%5D%0A%09%20%2A%20%40param%20%7BString%7D%20%5Btype%5D%20%20%20Can%20be%20%27auto%27%2C%20%27array%27%2C%20%27object%27%2C%20or%20%27string%27%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FonAppend%20%3D%20function%20%28field%2C%20value%2C%20type%29%20%7B%0A%09%20%20var%20oldSelection%20%3D%20this%2Eeditor%2EgetSelection%28%29%3B%0A%0A%09%20%20var%20newNode%20%3D%20new%20Node%28this%2Eeditor%2C%20%7B%0A%09%20%20%20%20field%3A%20%28field%20%21%3D%20undefined%29%20%3F%20field%20%3A%20%27%27%2C%0A%09%20%20%20%20value%3A%20%28value%20%21%3D%20undefined%29%20%3F%20value%20%3A%20%27%27%2C%0A%09%20%20%20%20type%3A%20type%0A%09%20%20%7D%29%3B%0A%09%20%20newNode%2Eexpand%28true%29%3B%0A%09%20%20this%2Eparent%2EappendChild%28newNode%29%3B%0A%09%20%20this%2Eeditor%2Ehighlighter%2Eunhighlight%28%29%3B%0A%09%20%20newNode%2Efocus%28%27field%27%29%3B%0A%09%20%20var%20newSelection%20%3D%20this%2Eeditor%2EgetSelection%28%29%3B%0A%0A%09%20%20this%2Eeditor%2E%5FonAction%28%27appendNode%27%2C%20%7B%0A%09%20%20%20%20node%3A%20newNode%2C%0A%09%20%20%20%20parent%3A%20this%2Eparent%2C%0A%09%20%20%20%20oldSelection%3A%20oldSelection%2C%0A%09%20%20%20%20newSelection%3A%20newSelection%0A%09%20%20%7D%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Change%20the%20type%20of%20the%20node%27s%20value%0A%09%20%2A%20%40param%20%7BString%7D%20newType%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FonChangeType%20%3D%20function%20%28newType%29%20%7B%0A%09%20%20var%20oldType%20%3D%20this%2Etype%3B%0A%09%20%20if%20%28newType%20%21%3D%20oldType%29%20%7B%0A%09%20%20%20%20var%20oldSelection%20%3D%20this%2Eeditor%2EgetSelection%28%29%3B%0A%09%20%20%20%20this%2EchangeType%28newType%29%3B%0A%09%20%20%20%20var%20newSelection%20%3D%20this%2Eeditor%2EgetSelection%28%29%3B%0A%0A%09%20%20%20%20this%2Eeditor%2E%5FonAction%28%27changeType%27%2C%20%7B%0A%09%20%20%20%20%20%20node%3A%20this%2C%0A%09%20%20%20%20%20%20oldType%3A%20oldType%2C%0A%09%20%20%20%20%20%20newType%3A%20newType%2C%0A%09%20%20%20%20%20%20oldSelection%3A%20oldSelection%2C%0A%09%20%20%20%20%20%20newSelection%3A%20newSelection%0A%09%20%20%20%20%7D%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Sort%20the%20childs%20of%20the%20node%2E%20Only%20applicable%20when%20the%20node%20has%20type%20%27object%27%0A%09%20%2A%20or%20%27array%27%2E%0A%09%20%2A%20%40param%20%7BString%7D%20direction%20%20%20Sorting%20direction%2E%20Available%20values%3A%20%22asc%22%2C%20%22desc%22%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FonSort%20%3D%20function%20%28direction%29%20%7B%0A%09%20%20if%20%28this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20var%20order%20%3D%20%28direction%20%3D%3D%20%27desc%27%29%20%3F%20%2D1%20%3A%201%3B%0A%09%20%20%20%20var%20prop%20%3D%20%28this%2Etype%20%3D%3D%20%27array%27%29%20%3F%20%27value%27%3A%20%27field%27%3B%0A%09%20%20%20%20this%2EhideChilds%28%29%3B%0A%0A%09%20%20%20%20var%20oldChilds%20%3D%20this%2Echilds%3B%0A%09%20%20%20%20var%20oldSort%20%3D%20this%2Esort%3B%0A%0A%09%20%20%20%20%2F%2F%20copy%20the%20array%20%28the%20old%20one%20will%20be%20kept%20for%20an%20undo%20action%0A%09%20%20%20%20this%2Echilds%20%3D%20this%2Echilds%2Econcat%28%29%3B%0A%0A%09%20%20%20%20%2F%2F%20sort%20the%20arrays%0A%09%20%20%20%20this%2Echilds%2Esort%28function%20%28a%2C%20b%29%20%7B%0A%09%20%20%20%20%20%20if%20%28a%5Bprop%5D%20%3E%20b%5Bprop%5D%29%20return%20order%3B%0A%09%20%20%20%20%20%20if%20%28a%5Bprop%5D%20%3C%20b%5Bprop%5D%29%20return%20%2Dorder%3B%0A%09%20%20%20%20%20%20return%200%3B%0A%09%20%20%20%20%7D%29%3B%0A%09%20%20%20%20this%2Esort%20%3D%20%28order%20%3D%3D%201%29%20%3F%20%27asc%27%20%3A%20%27desc%27%3B%0A%0A%09%20%20%20%20this%2Eeditor%2E%5FonAction%28%27sort%27%2C%20%7B%0A%09%20%20%20%20%20%20node%3A%20this%2C%0A%09%20%20%20%20%20%20oldChilds%3A%20oldChilds%2C%0A%09%20%20%20%20%20%20oldSort%3A%20oldSort%2C%0A%09%20%20%20%20%20%20newChilds%3A%20this%2Echilds%2C%0A%09%20%20%20%20%20%20newSort%3A%20this%2Esort%0A%09%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20this%2EshowChilds%28%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Create%20a%20table%20row%20with%20an%20append%20button%2E%0A%09%20%2A%20%40return%20%7BHTMLElement%20%7C%20undefined%7D%20buttonAppend%20or%20undefined%20when%20inapplicable%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EgetAppend%20%3D%20function%20%28%29%20%7B%0A%09%20%20if%20%28%21this%2Eappend%29%20%7B%0A%09%20%20%20%20this%2Eappend%20%3D%20new%20AppendNode%28this%2Eeditor%29%3B%0A%09%20%20%20%20this%2Eappend%2EsetParent%28this%29%3B%0A%09%20%20%7D%0A%09%20%20return%20this%2Eappend%2EgetDom%28%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Find%20the%20node%20from%20an%20event%20target%0A%09%20%2A%20%40param%20%7BNode%7D%20target%0A%09%20%2A%20%40return%20%7BNode%20%7C%20undefined%7D%20node%20%20or%20undefined%20when%20not%20found%0A%09%20%2A%20%40static%0A%09%20%2A%2F%0A%09Node%2EgetNodeFromTarget%20%3D%20function%20%28target%29%20%7B%0A%09%20%20while%20%28target%29%20%7B%0A%09%20%20%20%20if%20%28target%2Enode%29%20%7B%0A%09%20%20%20%20%20%20return%20target%2Enode%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20target%20%3D%20target%2EparentNode%3B%0A%09%20%20%7D%0A%0A%09%20%20return%20undefined%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20the%20previously%20rendered%20node%0A%09%20%2A%20%40return%20%7BNode%20%7C%20null%7D%20previousNode%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FpreviousNode%20%3D%20function%20%28%29%20%7B%0A%09%20%20var%20prevNode%20%3D%20null%3B%0A%09%20%20var%20dom%20%3D%20this%2EgetDom%28%29%3B%0A%09%20%20if%20%28dom%20%26%26%20dom%2EparentNode%29%20%7B%0A%09%20%20%20%20%2F%2F%20find%20the%20previous%20field%0A%09%20%20%20%20var%20prevDom%20%3D%20dom%3B%0A%09%20%20%20%20do%20%7B%0A%09%20%20%20%20%20%20prevDom%20%3D%20prevDom%2EpreviousSibling%3B%0A%09%20%20%20%20%20%20prevNode%20%3D%20Node%2EgetNodeFromTarget%28prevDom%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20while%20%28prevDom%20%26%26%20%28prevNode%20instanceof%20AppendNode%20%26%26%20%21prevNode%2EisVisible%28%29%29%29%3B%0A%09%20%20%7D%0A%09%20%20return%20prevNode%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20the%20next%20rendered%20node%0A%09%20%2A%20%40return%20%7BNode%20%7C%20null%7D%20nextNode%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FnextNode%20%3D%20function%20%28%29%20%7B%0A%09%20%20var%20nextNode%20%3D%20null%3B%0A%09%20%20var%20dom%20%3D%20this%2EgetDom%28%29%3B%0A%09%20%20if%20%28dom%20%26%26%20dom%2EparentNode%29%20%7B%0A%09%20%20%20%20%2F%2F%20find%20the%20previous%20field%0A%09%20%20%20%20var%20nextDom%20%3D%20dom%3B%0A%09%20%20%20%20do%20%7B%0A%09%20%20%20%20%20%20nextDom%20%3D%20nextDom%2EnextSibling%3B%0A%09%20%20%20%20%20%20nextNode%20%3D%20Node%2EgetNodeFromTarget%28nextDom%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20while%20%28nextDom%20%26%26%20%28nextNode%20instanceof%20AppendNode%20%26%26%20%21nextNode%2EisVisible%28%29%29%29%3B%0A%09%20%20%7D%0A%0A%09%20%20return%20nextNode%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20the%20first%20rendered%20node%0A%09%20%2A%20%40return%20%7BNode%20%7C%20null%7D%20firstNode%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FfirstNode%20%3D%20function%20%28%29%20%7B%0A%09%20%20var%20firstNode%20%3D%20null%3B%0A%09%20%20var%20dom%20%3D%20this%2EgetDom%28%29%3B%0A%09%20%20if%20%28dom%20%26%26%20dom%2EparentNode%29%20%7B%0A%09%20%20%20%20var%20firstDom%20%3D%20dom%2EparentNode%2EfirstChild%3B%0A%09%20%20%20%20firstNode%20%3D%20Node%2EgetNodeFromTarget%28firstDom%29%3B%0A%09%20%20%7D%0A%0A%09%20%20return%20firstNode%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20the%20last%20rendered%20node%0A%09%20%2A%20%40return%20%7BNode%20%7C%20null%7D%20lastNode%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FlastNode%20%3D%20function%20%28%29%20%7B%0A%09%20%20var%20lastNode%20%3D%20null%3B%0A%09%20%20var%20dom%20%3D%20this%2EgetDom%28%29%3B%0A%09%20%20if%20%28dom%20%26%26%20dom%2EparentNode%29%20%7B%0A%09%20%20%20%20var%20lastDom%20%3D%20dom%2EparentNode%2ElastChild%3B%0A%09%20%20%20%20lastNode%20%3D%20%20Node%2EgetNodeFromTarget%28lastDom%29%3B%0A%09%20%20%20%20while%20%28lastDom%20%26%26%20%28lastNode%20instanceof%20AppendNode%20%26%26%20%21lastNode%2EisVisible%28%29%29%29%20%7B%0A%09%20%20%20%20%20%20lastDom%20%3D%20lastDom%2EpreviousSibling%3B%0A%09%20%20%20%20%20%20lastNode%20%3D%20%20Node%2EgetNodeFromTarget%28lastDom%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20return%20lastNode%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20the%20next%20element%20which%20can%20have%20focus%2E%0A%09%20%2A%20%40param%20%7BElement%7D%20elem%0A%09%20%2A%20%40return%20%7BElement%20%7C%20null%7D%20nextElem%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FpreviousElement%20%3D%20function%20%28elem%29%20%7B%0A%09%20%20var%20dom%20%3D%20this%2Edom%3B%0A%09%20%20%2F%2F%20noinspection%20FallthroughInSwitchStatementJS%0A%09%20%20switch%20%28elem%29%20%7B%0A%09%20%20%20%20case%20dom%2Evalue%3A%0A%09%20%20%20%20%20%20if%20%28this%2EfieldEditable%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20dom%2Efield%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%2F%2F%20intentional%20fall%20through%0A%09%20%20%20%20case%20dom%2Efield%3A%0A%09%20%20%20%20%20%20if%20%28this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20dom%2Eexpand%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%2F%2F%20intentional%20fall%20through%0A%09%20%20%20%20case%20dom%2Eexpand%3A%0A%09%20%20%20%20%20%20return%20dom%2Emenu%3B%0A%09%20%20%20%20case%20dom%2Emenu%3A%0A%09%20%20%20%20%20%20if%20%28dom%2Edrag%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20dom%2Edrag%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%2F%2F%20intentional%20fall%20through%0A%09%20%20%20%20default%3A%0A%09%20%20%20%20%20%20return%20null%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20the%20next%20element%20which%20can%20have%20focus%2E%0A%09%20%2A%20%40param%20%7BElement%7D%20elem%0A%09%20%2A%20%40return%20%7BElement%20%7C%20null%7D%20nextElem%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FnextElement%20%3D%20function%20%28elem%29%20%7B%0A%09%20%20var%20dom%20%3D%20this%2Edom%3B%0A%09%20%20%2F%2F%20noinspection%20FallthroughInSwitchStatementJS%0A%09%20%20switch%20%28elem%29%20%7B%0A%09%20%20%20%20case%20dom%2Edrag%3A%0A%09%20%20%20%20%20%20return%20dom%2Emenu%3B%0A%09%20%20%20%20case%20dom%2Emenu%3A%0A%09%20%20%20%20%20%20if%20%28this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20dom%2Eexpand%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%2F%2F%20intentional%20fall%20through%0A%09%20%20%20%20case%20dom%2Eexpand%3A%0A%09%20%20%20%20%20%20if%20%28this%2EfieldEditable%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20dom%2Efield%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%2F%2F%20intentional%20fall%20through%0A%09%20%20%20%20case%20dom%2Efield%3A%0A%09%20%20%20%20%20%20if%20%28%21this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20dom%2Evalue%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20default%3A%0A%09%20%20%20%20%20%20return%20null%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20the%20dom%20name%20of%20given%20element%2E%20returns%20null%20if%20not%20found%2E%0A%09%20%2A%20For%20example%20when%20element%20%3D%3D%20dom%2Efield%2C%20%22field%22%20is%20returned%2E%0A%09%20%2A%20%40param%20%7BElement%7D%20element%0A%09%20%2A%20%40return%20%7BString%20%7C%20null%7D%20elementName%20%20Available%20elements%20with%20name%3A%20%27drag%27%2C%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27menu%27%2C%20%27expand%27%2C%20%27field%27%2C%20%27value%27%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FgetElementName%20%3D%20function%20%28element%29%20%7B%0A%09%20%20var%20dom%20%3D%20this%2Edom%3B%0A%09%20%20for%20%28var%20name%20in%20dom%29%20%7B%0A%09%20%20%20%20if%20%28dom%2EhasOwnProperty%28name%29%29%20%7B%0A%09%20%20%20%20%20%20if%20%28dom%5Bname%5D%20%3D%3D%20element%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20name%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20return%20null%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Test%20if%20this%20node%20has%20childs%2E%20This%20is%20the%20case%20when%20the%20node%20is%20an%20object%0A%09%20%2A%20or%20array%2E%0A%09%20%2A%20%40return%20%7Bboolean%7D%20hasChilds%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FhasChilds%20%3D%20function%20%28%29%20%7B%0A%09%20%20return%20this%2Etype%20%3D%3D%20%27array%27%20%7C%7C%20this%2Etype%20%3D%3D%20%27object%27%3B%0A%09%7D%3B%0A%0A%09%2F%2F%20titles%20with%20explanation%20for%20the%20different%20types%0A%09Node%2ETYPE%5FTITLES%20%3D%20%7B%0A%09%20%20%27auto%27%3A%20%27Field%20type%20%22auto%22%2E%20%27%20%2B%0A%09%20%20%20%20%20%20%27The%20field%20type%20is%20automatically%20determined%20from%20the%20value%20%27%20%2B%0A%09%20%20%20%20%20%20%27and%20can%20be%20a%20string%2C%20number%2C%20boolean%2C%20or%20null%2E%27%2C%0A%09%20%20%27object%27%3A%20%27Field%20type%20%22object%22%2E%20%27%20%2B%0A%09%20%20%20%20%20%20%27An%20object%20contains%20an%20unordered%20set%20of%20key%2Fvalue%20pairs%2E%27%2C%0A%09%20%20%27array%27%3A%20%27Field%20type%20%22array%22%2E%20%27%20%2B%0A%09%20%20%20%20%20%20%27An%20array%20contains%20an%20ordered%20collection%20of%20values%2E%27%2C%0A%09%20%20%27string%27%3A%20%27Field%20type%20%22string%22%2E%20%27%20%2B%0A%09%20%20%20%20%20%20%27Field%20type%20is%20not%20determined%20from%20the%20value%2C%20%27%20%2B%0A%09%20%20%20%20%20%20%27but%20always%20returned%20as%20string%2E%27%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Show%20a%20contextmenu%20for%20this%20node%0A%09%20%2A%20%40param%20%7BHTMLElement%7D%20anchor%20%20%20Anchor%20element%20to%20attache%20the%20context%20menu%20to%2E%0A%09%20%2A%20%40param%20%7Bfunction%7D%20%5BonClose%5D%20%20%20Callback%20method%20called%20when%20the%20context%20menu%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20is%20being%20closed%2E%0A%09%20%2A%2F%0A%09Node%2Eprototype%2EshowContextMenu%20%3D%20function%20%28anchor%2C%20onClose%29%20%7B%0A%09%20%20var%20node%20%3D%20this%3B%0A%09%20%20var%20titles%20%3D%20Node%2ETYPE%5FTITLES%3B%0A%09%20%20var%20items%20%3D%20%5B%5D%3B%0A%0A%09%20%20if%20%28this%2Eeditable%2Evalue%29%20%7B%0A%09%20%20%20%20items%2Epush%28%7B%0A%09%20%20%20%20%20%20text%3A%20%27Type%27%2C%0A%09%20%20%20%20%20%20title%3A%20%27Change%20the%20type%20of%20this%20field%27%2C%0A%09%20%20%20%20%20%20className%3A%20%27type%2D%27%20%2B%20this%2Etype%2C%0A%09%20%20%20%20%20%20submenu%3A%20%5B%0A%09%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20text%3A%20%27Auto%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20className%3A%20%27type%2Dauto%27%20%2B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28this%2Etype%20%3D%3D%20%27auto%27%20%3F%20%27%20selected%27%20%3A%20%27%27%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20title%3A%20titles%2Eauto%2C%0A%09%20%20%20%20%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20node%2E%5FonChangeType%28%27auto%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20text%3A%20%27Array%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20className%3A%20%27type%2Darray%27%20%2B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28this%2Etype%20%3D%3D%20%27array%27%20%3F%20%27%20selected%27%20%3A%20%27%27%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20title%3A%20titles%2Earray%2C%0A%09%20%20%20%20%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20node%2E%5FonChangeType%28%27array%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20text%3A%20%27Object%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20className%3A%20%27type%2Dobject%27%20%2B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28this%2Etype%20%3D%3D%20%27object%27%20%3F%20%27%20selected%27%20%3A%20%27%27%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20title%3A%20titles%2Eobject%2C%0A%09%20%20%20%20%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20node%2E%5FonChangeType%28%27object%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20text%3A%20%27String%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20className%3A%20%27type%2Dstring%27%20%2B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28this%2Etype%20%3D%3D%20%27string%27%20%3F%20%27%20selected%27%20%3A%20%27%27%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20title%3A%20titles%2Estring%2C%0A%09%20%20%20%20%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20node%2E%5FonChangeType%28%27string%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%5D%0A%09%20%20%20%20%7D%29%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28this%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20var%20direction%20%3D%20%28%28this%2Esort%20%3D%3D%20%27asc%27%29%20%3F%20%27desc%27%3A%20%27asc%27%29%3B%0A%09%20%20%20%20items%2Epush%28%7B%0A%09%20%20%20%20%20%20text%3A%20%27Sort%27%2C%0A%09%20%20%20%20%20%20title%3A%20%27Sort%20the%20childs%20of%20this%20%27%20%2B%20this%2Etype%2C%0A%09%20%20%20%20%20%20className%3A%20%27sort%2D%27%20%2B%20direction%2C%0A%09%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20node%2E%5FonSort%28direction%29%3B%0A%09%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20submenu%3A%20%5B%0A%09%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20text%3A%20%27Ascending%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20className%3A%20%27sort%2Dasc%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20title%3A%20%27Sort%20the%20childs%20of%20this%20%27%20%2B%20this%2Etype%20%2B%20%27%20in%20ascending%20order%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20node%2E%5FonSort%28%27asc%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20text%3A%20%27Descending%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20className%3A%20%27sort%2Ddesc%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20title%3A%20%27Sort%20the%20childs%20of%20this%20%27%20%2B%20this%2Etype%20%2B%27%20in%20descending%20order%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20node%2E%5FonSort%28%27desc%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%5D%0A%09%20%20%20%20%7D%29%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28this%2Eparent%20%26%26%20this%2Eparent%2E%5FhasChilds%28%29%29%20%7B%0A%09%20%20%20%20if%20%28items%2Elength%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20create%20a%20separator%0A%09%20%20%20%20%20%20items%2Epush%28%7B%0A%09%20%20%20%20%20%20%20%20%27type%27%3A%20%27separator%27%0A%09%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20create%20append%20button%20%28for%20last%20child%20node%20only%29%0A%09%20%20%20%20var%20childs%20%3D%20node%2Eparent%2Echilds%3B%0A%09%20%20%20%20if%20%28node%20%3D%3D%20childs%5Bchilds%2Elength%20%2D%201%5D%29%20%7B%0A%09%20%20%20%20%20%20items%2Epush%28%7B%0A%09%20%20%20%20%20%20%20%20text%3A%20%27Append%27%2C%0A%09%20%20%20%20%20%20%20%20title%3A%20%27Append%20a%20new%20field%20with%20type%20%5C%27auto%5C%27%20after%20this%20field%20%28Ctrl%2BShift%2BIns%29%27%2C%0A%09%20%20%20%20%20%20%20%20submenuTitle%3A%20%27Select%20the%20type%20of%20the%20field%20to%20be%20appended%27%2C%0A%09%20%20%20%20%20%20%20%20className%3A%20%27append%27%2C%0A%09%20%20%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20node%2E%5FonAppend%28%27%27%2C%20%27%27%2C%20%27auto%27%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%20%20submenu%3A%20%5B%0A%09%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%27Auto%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20className%3A%20%27type%2Dauto%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20title%3A%20titles%2Eauto%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20node%2E%5FonAppend%28%27%27%2C%20%27%27%2C%20%27auto%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%27Array%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20className%3A%20%27type%2Darray%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20title%3A%20titles%2Earray%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20node%2E%5FonAppend%28%27%27%2C%20%5B%5D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%27Object%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20className%3A%20%27type%2Dobject%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20title%3A%20titles%2Eobject%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20node%2E%5FonAppend%28%27%27%2C%20%7B%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20text%3A%20%27String%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20className%3A%20%27type%2Dstring%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20title%3A%20titles%2Estring%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20node%2E%5FonAppend%28%27%27%2C%20%27%27%2C%20%27string%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%5D%0A%09%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20create%20insert%20button%0A%09%20%20%20%20items%2Epush%28%7B%0A%09%20%20%20%20%20%20text%3A%20%27Insert%27%2C%0A%09%20%20%20%20%20%20title%3A%20%27Insert%20a%20new%20field%20with%20type%20%5C%27auto%5C%27%20before%20this%20field%20%28Ctrl%2BIns%29%27%2C%0A%09%20%20%20%20%20%20submenuTitle%3A%20%27Select%20the%20type%20of%20the%20field%20to%20be%20inserted%27%2C%0A%09%20%20%20%20%20%20className%3A%20%27insert%27%2C%0A%09%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20node%2E%5FonInsertBefore%28%27%27%2C%20%27%27%2C%20%27auto%27%29%3B%0A%09%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20submenu%3A%20%5B%0A%09%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20text%3A%20%27Auto%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20className%3A%20%27type%2Dauto%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20title%3A%20titles%2Eauto%2C%0A%09%20%20%20%20%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20node%2E%5FonInsertBefore%28%27%27%2C%20%27%27%2C%20%27auto%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20text%3A%20%27Array%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20className%3A%20%27type%2Darray%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20title%3A%20titles%2Earray%2C%0A%09%20%20%20%20%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20node%2E%5FonInsertBefore%28%27%27%2C%20%5B%5D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20text%3A%20%27Object%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20className%3A%20%27type%2Dobject%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20title%3A%20titles%2Eobject%2C%0A%09%20%20%20%20%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20node%2E%5FonInsertBefore%28%27%27%2C%20%7B%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20text%3A%20%27String%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20className%3A%20%27type%2Dstring%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20title%3A%20titles%2Estring%2C%0A%09%20%20%20%20%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20node%2E%5FonInsertBefore%28%27%27%2C%20%27%27%2C%20%27string%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%5D%0A%09%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20if%20%28this%2Eeditable%2Efield%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20create%20duplicate%20button%0A%09%20%20%20%20%20%20items%2Epush%28%7B%0A%09%20%20%20%20%20%20%20%20text%3A%20%27Duplicate%27%2C%0A%09%20%20%20%20%20%20%20%20title%3A%20%27Duplicate%20this%20field%20%28Ctrl%2BD%29%27%2C%0A%09%20%20%20%20%20%20%20%20className%3A%20%27duplicate%27%2C%0A%09%20%20%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20node%2E%5FonDuplicate%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20%20%20%2F%2F%20create%20remove%20button%0A%09%20%20%20%20%20%20items%2Epush%28%7B%0A%09%20%20%20%20%20%20%20%20text%3A%20%27Remove%27%2C%0A%09%20%20%20%20%20%20%20%20title%3A%20%27Remove%20this%20field%20%28Ctrl%2BDel%29%27%2C%0A%09%20%20%20%20%20%20%20%20className%3A%20%27remove%27%2C%0A%09%20%20%20%20%20%20%20%20click%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20node%2E%5FonRemove%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20var%20menu%20%3D%20new%20ContextMenu%28items%2C%20%7Bclose%3A%20onClose%7D%29%3B%0A%09%20%20menu%2Eshow%28anchor%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20get%20the%20type%20of%20a%20value%0A%09%20%2A%20%40param%20%7B%2A%7D%20value%0A%09%20%2A%20%40return%20%7BString%7D%20type%20%20%20Can%20be%20%27object%27%2C%20%27array%27%2C%20%27string%27%2C%20%27auto%27%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FgetType%20%3D%20function%28value%29%20%7B%0A%09%20%20if%20%28value%20instanceof%20Array%29%20%7B%0A%09%20%20%20%20return%20%27array%27%3B%0A%09%20%20%7D%0A%09%20%20if%20%28value%20instanceof%20Object%29%20%7B%0A%09%20%20%20%20return%20%27object%27%3B%0A%09%20%20%7D%0A%09%20%20if%20%28typeof%28value%29%20%3D%3D%20%27string%27%20%26%26%20typeof%28this%2E%5FstringCast%28value%29%29%20%21%3D%20%27string%27%29%20%7B%0A%09%20%20%20%20return%20%27string%27%3B%0A%09%20%20%7D%0A%0A%09%20%20return%20%27auto%27%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20cast%20contents%20of%20a%20string%20to%20the%20correct%20type%2E%20This%20can%20be%20a%20string%2C%0A%09%20%2A%20a%20number%2C%20a%20boolean%2C%20etc%0A%09%20%2A%20%40param%20%7BString%7D%20str%0A%09%20%2A%20%40return%20%7B%2A%7D%20castedStr%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FstringCast%20%3D%20function%28str%29%20%7B%0A%09%20%20var%20lower%20%3D%20str%2EtoLowerCase%28%29%2C%0A%09%20%20%20%20%20%20num%20%3D%20Number%28str%29%2C%20%20%20%20%20%20%20%20%20%20%2F%2F%20will%20nicely%20fail%20with%20%27123ab%27%0A%09%20%20%20%20%20%20numFloat%20%3D%20parseFloat%28str%29%3B%20%2F%2F%20will%20nicely%20fail%20with%20%27%20%20%27%0A%0A%09%20%20if%20%28str%20%3D%3D%20%27%27%29%20%7B%0A%09%20%20%20%20return%20%27%27%3B%0A%09%20%20%7D%0A%09%20%20else%20if%20%28lower%20%3D%3D%20%27null%27%29%20%7B%0A%09%20%20%20%20return%20null%3B%0A%09%20%20%7D%0A%09%20%20else%20if%20%28lower%20%3D%3D%20%27true%27%29%20%7B%0A%09%20%20%20%20return%20true%3B%0A%09%20%20%7D%0A%09%20%20else%20if%20%28lower%20%3D%3D%20%27false%27%29%20%7B%0A%09%20%20%20%20return%20false%3B%0A%09%20%20%7D%0A%09%20%20else%20if%20%28%21isNaN%28num%29%20%26%26%20%21isNaN%28numFloat%29%29%20%7B%0A%09%20%20%20%20return%20num%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20return%20str%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20escape%20a%20text%2C%20such%20that%20it%20can%20be%20displayed%20safely%20in%20an%20HTML%20element%0A%09%20%2A%20%40param%20%7BString%7D%20text%0A%09%20%2A%20%40return%20%7BString%7D%20escapedText%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FescapeHTML%20%3D%20function%20%28text%29%20%7B%0A%09%20%20var%20htmlEscaped%20%3D%20String%28text%29%0A%09%20%20%20%20%20%20%2Ereplace%28%2F%3C%2Fg%2C%20%27%26lt%3B%27%29%0A%09%20%20%20%20%20%20%2Ereplace%28%2F%3E%2Fg%2C%20%27%26gt%3B%27%29%0A%09%20%20%20%20%20%20%2Ereplace%28%2F%20%20%2Fg%2C%20%27%20%26nbsp%3B%27%29%20%2F%2F%20replace%20double%20space%20with%20an%20nbsp%20and%20space%0A%09%20%20%20%20%20%20%2Ereplace%28%2F%5E%20%2F%2C%20%27%26nbsp%3B%27%29%20%20%20%2F%2F%20space%20at%20start%0A%09%20%20%20%20%20%20%2Ereplace%28%2F%20%24%2F%2C%20%27%26nbsp%3B%27%29%3B%20%20%2F%2F%20space%20at%20end%0A%0A%09%20%20var%20json%20%3D%20JSON%2Estringify%28htmlEscaped%29%3B%0A%09%20%20return%20json%2Esubstring%281%2C%20json%2Elength%20%2D%201%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20unescape%20a%20string%2E%0A%09%20%2A%20%40param%20%7BString%7D%20escapedText%0A%09%20%2A%20%40return%20%7BString%7D%20text%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FunescapeHTML%20%3D%20function%20%28escapedText%29%20%7B%0A%09%20%20var%20json%20%3D%20%27%22%27%20%2B%20this%2E%5FescapeJSON%28escapedText%29%20%2B%20%27%22%27%3B%0A%09%20%20var%20htmlEscaped%20%3D%20util%2Eparse%28json%29%3B%0A%09%20%20return%20htmlEscaped%0A%09%20%20%20%20%20%20%2Ereplace%28%2F%26lt%3B%2Fg%2C%20%27%3C%27%29%0A%09%20%20%20%20%20%20%2Ereplace%28%2F%26gt%3B%2Fg%2C%20%27%3E%27%29%0A%09%20%20%20%20%20%20%2Ereplace%28%2F%26nbsp%3B%7C%5Cu00A0%2Fg%2C%20%27%20%27%29%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20escape%20a%20text%20to%20make%20it%20a%20valid%20JSON%20string%2E%20The%20method%20will%3A%0A%09%20%2A%20%20%20%2D%20replace%20unescaped%20double%20quotes%20with%20%27%5C%22%27%0A%09%20%2A%20%20%20%2D%20replace%20unescaped%20backslash%20with%20%27%5C%5C%27%0A%09%20%2A%20%20%20%2D%20replace%20returns%20with%20%27%5Cn%27%0A%09%20%2A%20%40param%20%7BString%7D%20text%0A%09%20%2A%20%40return%20%7BString%7D%20escapedText%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09Node%2Eprototype%2E%5FescapeJSON%20%3D%20function%20%28text%29%20%7B%0A%09%20%20%2F%2F%20TODO%3A%20replace%20with%20some%20smart%20regex%20%28only%20when%20a%20new%20solution%20is%20faster%21%29%0A%09%20%20var%20escaped%20%3D%20%27%27%3B%0A%09%20%20var%20i%20%3D%200%2C%20iMax%20%3D%20text%2Elength%3B%0A%09%20%20while%20%28i%20%3C%20iMax%29%20%7B%0A%09%20%20%20%20var%20c%20%3D%20text%2EcharAt%28i%29%3B%0A%09%20%20%20%20if%20%28c%20%3D%3D%20%27%5Cn%27%29%20%7B%0A%09%20%20%20%20%20%20escaped%20%2B%3D%20%27%5C%5Cn%27%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28c%20%3D%3D%20%27%5C%5C%27%29%20%7B%0A%09%20%20%20%20%20%20escaped%20%2B%3D%20c%3B%0A%09%20%20%20%20%20%20i%2B%2B%3B%0A%0A%09%20%20%20%20%20%20c%20%3D%20text%2EcharAt%28i%29%3B%0A%09%20%20%20%20%20%20if%20%28%27%22%5C%5C%2Fbfnrtu%27%2EindexOf%28c%29%20%3D%3D%20%2D1%29%20%7B%0A%09%20%20%20%20%20%20%20%20escaped%20%2B%3D%20%27%5C%5C%27%3B%20%20%2F%2F%20no%20valid%20escape%20character%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20escaped%20%2B%3D%20c%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28c%20%3D%3D%20%27%22%27%29%20%7B%0A%09%20%20%20%20%20%20escaped%20%2B%3D%20%27%5C%5C%22%27%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20escaped%20%2B%3D%20c%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20i%2B%2B%3B%0A%09%20%20%7D%0A%0A%09%20%20return%20escaped%3B%0A%09%7D%3B%0A%0A%09%2F%2F%20TODO%3A%20find%20a%20nicer%20solution%20to%20resolve%20this%20circular%20dependency%20between%20Node%20and%20AppendNode%0A%09var%20AppendNode%20%3D%20appendNodeFactory%28Node%29%3B%0A%0A%09module%2Eexports%20%3D%20Node%3B%0A%0A%0A%2F%2A%2A%2A%2F%20%7D%2C%0A%2F%2A%208%20%2A%2F%0A%2F%2A%2A%2A%2F%20function%28module%2C%20exports%2C%20%5F%5Fwebpack%5Frequire%5F%5F%29%20%7B%0A%0A%09var%20ContextMenu%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%2810%29%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Create%20a%20select%20box%20to%20be%20used%20in%20the%20editor%20menu%27s%2C%20which%20allows%20to%20switch%20mode%0A%09%20%2A%20%40param%20%7BObject%7D%20editor%0A%09%20%2A%20%40param%20%7BString%5B%5D%7D%20modes%20%20Available%20modes%3A%20%27code%27%2C%20%27form%27%2C%20%27text%27%2C%20%27tree%27%2C%20%27view%27%0A%09%20%2A%20%40param%20%7BString%7D%20current%20%20Available%20modes%3A%20%27code%27%2C%20%27form%27%2C%20%27text%27%2C%20%27tree%27%2C%20%27view%27%0A%09%20%2A%20%40returns%20%7BHTMLElement%7D%20box%0A%09%20%2A%2F%0A%09function%20createModeSwitcher%28editor%2C%20modes%2C%20current%29%20%7B%0A%09%20%20%2F%2F%20TODO%3A%20decouple%20mode%20switcher%20from%20editor%0A%0A%09%20%20%2F%2A%2A%0A%09%20%20%20%2A%20Switch%20the%20mode%20of%20the%20editor%0A%09%20%20%20%2A%20%40param%20%7BString%7D%20mode%0A%09%20%20%20%2A%2F%0A%09%20%20function%20switchMode%28mode%29%20%7B%0A%09%20%20%20%20%2F%2F%20switch%20mode%0A%09%20%20%20%20editor%2EsetMode%28mode%29%3B%0A%0A%09%20%20%20%20%2F%2F%20restore%20focus%20on%20mode%20box%0A%09%20%20%20%20var%20modeBox%20%3D%20editor%2Edom%20%26%26%20editor%2Edom%2EmodeBox%3B%0A%09%20%20%20%20if%20%28modeBox%29%20%7B%0A%09%20%20%20%20%20%20modeBox%2Efocus%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20available%20modes%0A%09%20%20var%20availableModes%20%3D%20%7B%0A%09%20%20%20%20code%3A%20%7B%0A%09%20%20%20%20%20%20%27text%27%3A%20%27Code%27%2C%0A%09%20%20%20%20%20%20%27title%27%3A%20%27Switch%20to%20code%20highlighter%27%2C%0A%09%20%20%20%20%20%20%27click%27%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20switchMode%28%27code%27%29%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%2C%0A%09%20%20%20%20form%3A%20%7B%0A%09%20%20%20%20%20%20%27text%27%3A%20%27Form%27%2C%0A%09%20%20%20%20%20%20%27title%27%3A%20%27Switch%20to%20form%20editor%27%2C%0A%09%20%20%20%20%20%20%27click%27%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20switchMode%28%27form%27%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%2C%0A%09%20%20%20%20text%3A%20%7B%0A%09%20%20%20%20%20%20%27text%27%3A%20%27Text%27%2C%0A%09%20%20%20%20%20%20%27title%27%3A%20%27Switch%20to%20plain%20text%20editor%27%2C%0A%09%20%20%20%20%20%20%27click%27%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20switchMode%28%27text%27%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%2C%0A%09%20%20%20%20tree%3A%20%7B%0A%09%20%20%20%20%20%20%27text%27%3A%20%27Tree%27%2C%0A%09%20%20%20%20%20%20%27title%27%3A%20%27Switch%20to%20tree%20editor%27%2C%0A%09%20%20%20%20%20%20%27click%27%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20switchMode%28%27tree%27%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%2C%0A%09%20%20%20%20view%3A%20%7B%0A%09%20%20%20%20%20%20%27text%27%3A%20%27View%27%2C%0A%09%20%20%20%20%20%20%27title%27%3A%20%27Switch%20to%20tree%20view%27%2C%0A%09%20%20%20%20%20%20%27click%27%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20switchMode%28%27view%27%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%7D%3B%0A%0A%09%20%20%2F%2F%20list%20the%20selected%20modes%0A%09%20%20var%20items%20%3D%20%5B%5D%3B%0A%09%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20modes%2Elength%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20var%20mode%20%3D%20modes%5Bi%5D%3B%0A%09%20%20%20%20var%20item%20%3D%20availableModes%5Bmode%5D%3B%0A%09%20%20%20%20if%20%28%21item%29%20%7B%0A%09%20%20%20%20%20%20throw%20new%20Error%28%27Unknown%20mode%20%22%27%20%2B%20mode%20%2B%20%27%22%27%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20item%2EclassName%20%3D%20%27type%2Dmodes%27%20%2B%20%28%28current%20%3D%3D%20mode%29%20%3F%20%27%20selected%27%20%3A%20%27%27%29%3B%0A%09%20%20%20%20items%2Epush%28item%29%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20retrieve%20the%20title%20of%20current%20mode%0A%09%20%20var%20currentMode%20%3D%20availableModes%5Bcurrent%5D%3B%0A%09%20%20if%20%28%21currentMode%29%20%7B%0A%09%20%20%20%20throw%20new%20Error%28%27Unknown%20mode%20%22%27%20%2B%20current%20%2B%20%27%22%27%29%3B%0A%09%20%20%7D%0A%09%20%20var%20currentTitle%20%3D%20currentMode%2Etext%3B%0A%0A%09%20%20%2F%2F%20create%20the%20html%20element%0A%09%20%20var%20box%20%3D%20document%2EcreateElement%28%27button%27%29%3B%0A%09%20%20box%2EclassName%20%3D%20%27modes%20separator%27%3B%0A%09%20%20box%2EinnerHTML%20%3D%20currentTitle%20%2B%20%27%20%26%23x25BE%3B%27%3B%0A%09%20%20box%2Etitle%20%3D%20%27Switch%20editor%20mode%27%3B%0A%09%20%20box%2Eonclick%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20var%20menu%20%3D%20new%20ContextMenu%28items%29%3B%0A%09%20%20%20%20menu%2Eshow%28box%29%3B%0A%09%20%20%7D%3B%0A%0A%09%20%20return%20box%3B%0A%09%7D%0A%0A%09exports%2Ecreate%20%3D%20createModeSwitcher%3B%0A%0A%0A%2F%2A%2A%2A%2F%20%7D%2C%0A%2F%2A%209%20%2A%2F%0A%2F%2A%2A%2A%2F%20function%28module%2C%20exports%2C%20%5F%5Fwebpack%5Frequire%5F%5F%29%20%7B%0A%0A%09%2F%2F%20load%20brace%0A%09var%20ace%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%2814%29%3B%0A%0A%09%2F%2F%20load%20required%20ace%20modules%0A%09%5F%5Fwebpack%5Frequire%5F%5F%2815%29%3B%0A%09%5F%5Fwebpack%5Frequire%5F%5F%2816%29%3B%0A%09%5F%5Fwebpack%5Frequire%5F%5F%2813%29%3B%0A%0A%09module%2Eexports%20%3D%20ace%3B%0A%0A%0A%2F%2A%2A%2A%2F%20%7D%2C%0A%2F%2A%2010%20%2A%2F%0A%2F%2A%2A%2A%2F%20function%28module%2C%20exports%2C%20%5F%5Fwebpack%5Frequire%5F%5F%29%20%7B%0A%0A%09var%20util%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%283%29%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20A%20context%20menu%0A%09%20%2A%20%40param%20%7BObject%5B%5D%7D%20items%20%20%20%20Array%20containing%20the%20menu%20structure%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20TODO%3A%20describe%20structure%0A%09%20%2A%20%40param%20%7BObject%7D%20%5Boptions%5D%20%20Object%20with%20options%2E%20Available%20options%3A%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bfunction%7D%20close%20%20%20%20Callback%20called%20when%20the%0A%09%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20context%20menu%20is%20being%20closed%2E%0A%09%20%2A%20%40constructor%0A%09%20%2A%2F%0A%09function%20ContextMenu%20%28items%2C%20options%29%20%7B%0A%09%20%20this%2Edom%20%3D%20%7B%7D%3B%0A%0A%09%20%20var%20me%20%3D%20this%3B%0A%09%20%20var%20dom%20%3D%20this%2Edom%3B%0A%09%20%20this%2Eanchor%20%3D%20undefined%3B%0A%09%20%20this%2Eitems%20%3D%20items%3B%0A%09%20%20this%2EeventListeners%20%3D%20%7B%7D%3B%0A%09%20%20this%2Eselection%20%3D%20undefined%3B%20%2F%2F%20holds%20the%20selection%20before%20the%20menu%20was%20opened%0A%09%20%20this%2EvisibleSubmenu%20%3D%20undefined%3B%0A%09%20%20this%2EonClose%20%3D%20options%20%3F%20options%2Eclose%20%3A%20undefined%3B%0A%0A%09%20%20%2F%2F%20create%20a%20container%20element%0A%09%20%20var%20menu%20%3D%20document%2EcreateElement%28%27div%27%29%3B%0A%09%20%20menu%2EclassName%20%3D%20%27jsoneditor%2Dcontextmenu%27%3B%0A%09%20%20dom%2Emenu%20%3D%20menu%3B%0A%0A%09%20%20%2F%2F%20create%20a%20list%20to%20hold%20the%20menu%20items%0A%09%20%20var%20list%20%3D%20document%2EcreateElement%28%27ul%27%29%3B%0A%09%20%20list%2EclassName%20%3D%20%27menu%27%3B%0A%09%20%20menu%2EappendChild%28list%29%3B%0A%09%20%20dom%2Elist%20%3D%20list%3B%0A%09%20%20dom%2Eitems%20%3D%20%5B%5D%3B%20%2F%2F%20list%20with%20all%20buttons%0A%0A%09%20%20%2F%2F%20create%20a%20%28non%2Dvisible%29%20button%20to%20set%20the%20focus%20to%20the%20menu%0A%09%20%20var%20focusButton%20%3D%20document%2EcreateElement%28%27button%27%29%3B%0A%09%20%20dom%2EfocusButton%20%3D%20focusButton%3B%0A%09%20%20var%20li%20%3D%20document%2EcreateElement%28%27li%27%29%3B%0A%09%20%20li%2Estyle%2Eoverflow%20%3D%20%27hidden%27%3B%0A%09%20%20li%2Estyle%2Eheight%20%3D%20%270%27%3B%0A%09%20%20li%2EappendChild%28focusButton%29%3B%0A%09%20%20list%2EappendChild%28li%29%3B%0A%0A%09%20%20function%20createMenuItems%20%28list%2C%20domItems%2C%20items%29%20%7B%0A%09%20%20%20%20items%2EforEach%28function%20%28item%29%20%7B%0A%09%20%20%20%20%20%20if%20%28item%2Etype%20%3D%3D%20%27separator%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20%2F%2F%20create%20a%20separator%0A%09%20%20%20%20%20%20%20%20var%20separator%20%3D%20document%2EcreateElement%28%27div%27%29%3B%0A%09%20%20%20%20%20%20%20%20separator%2EclassName%20%3D%20%27separator%27%3B%0A%09%20%20%20%20%20%20%20%20li%20%3D%20document%2EcreateElement%28%27li%27%29%3B%0A%09%20%20%20%20%20%20%20%20li%2EappendChild%28separator%29%3B%0A%09%20%20%20%20%20%20%20%20list%2EappendChild%28li%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20var%20domItem%20%3D%20%7B%7D%3B%0A%0A%09%20%20%20%20%20%20%20%20%2F%2F%20create%20a%20menu%20item%0A%09%20%20%20%20%20%20%20%20var%20li%20%3D%20document%2EcreateElement%28%27li%27%29%3B%0A%09%20%20%20%20%20%20%20%20list%2EappendChild%28li%29%3B%0A%0A%09%20%20%20%20%20%20%20%20%2F%2F%20create%20a%20button%20in%20the%20menu%20item%0A%09%20%20%20%20%20%20%20%20var%20button%20%3D%20document%2EcreateElement%28%27button%27%29%3B%0A%09%20%20%20%20%20%20%20%20button%2EclassName%20%3D%20item%2EclassName%3B%0A%09%20%20%20%20%20%20%20%20domItem%2Ebutton%20%3D%20button%3B%0A%09%20%20%20%20%20%20%20%20if%20%28item%2Etitle%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20button%2Etitle%20%3D%20item%2Etitle%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28item%2Eclick%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20button%2Eonclick%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20me%2Ehide%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20item%2Eclick%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20li%2EappendChild%28button%29%3B%0A%0A%09%20%20%20%20%20%20%20%20%2F%2F%20create%20the%20contents%20of%20the%20button%0A%09%20%20%20%20%20%20%20%20if%20%28item%2Esubmenu%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%2F%2F%20add%20the%20icon%20to%20the%20button%0A%09%20%20%20%20%20%20%20%20%20%20var%20divIcon%20%3D%20document%2EcreateElement%28%27div%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20divIcon%2EclassName%20%3D%20%27icon%27%3B%0A%09%20%20%20%20%20%20%20%20%20%20button%2EappendChild%28divIcon%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20button%2EappendChild%28document%2EcreateTextNode%28item%2Etext%29%29%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20var%20buttonSubmenu%3B%0A%09%20%20%20%20%20%20%20%20%20%20if%20%28item%2Eclick%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20submenu%20and%20a%20button%20with%20a%20click%20handler%0A%09%20%20%20%20%20%20%20%20%20%20%20%20button%2EclassName%20%2B%3D%20%27%20default%27%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20buttonExpand%20%3D%20document%2EcreateElement%28%27button%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20domItem%2EbuttonExpand%20%3D%20buttonExpand%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20buttonExpand%2EclassName%20%3D%20%27expand%27%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20buttonExpand%2EinnerHTML%20%3D%20%27%3Cdiv%20class%3D%22expand%22%3E%3C%2Fdiv%3E%27%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20li%2EappendChild%28buttonExpand%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28item%2EsubmenuTitle%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20buttonExpand%2Etitle%20%3D%20item%2EsubmenuTitle%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20buttonSubmenu%20%3D%20buttonExpand%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20submenu%20and%20a%20button%20without%20a%20click%20handler%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20divExpand%20%3D%20document%2EcreateElement%28%27div%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20divExpand%2EclassName%20%3D%20%27expand%27%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20button%2EappendChild%28divExpand%29%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20buttonSubmenu%20%3D%20button%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%20%20%2F%2F%20attach%20a%20handler%20to%20expand%2Fcollapse%20the%20submenu%0A%09%20%20%20%20%20%20%20%20%20%20buttonSubmenu%2Eonclick%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20me%2E%5FonExpandItem%28domItem%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20buttonSubmenu%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%2F%2F%20create%20the%20submenu%0A%09%20%20%20%20%20%20%20%20%20%20var%20domSubItems%20%3D%20%5B%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20domItem%2EsubItems%20%3D%20domSubItems%3B%0A%09%20%20%20%20%20%20%20%20%20%20var%20ul%20%3D%20document%2EcreateElement%28%27ul%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20domItem%2Eul%20%3D%20ul%3B%0A%09%20%20%20%20%20%20%20%20%20%20ul%2EclassName%20%3D%20%27menu%27%3B%0A%09%20%20%20%20%20%20%20%20%20%20ul%2Estyle%2Eheight%20%3D%20%270%27%3B%0A%09%20%20%20%20%20%20%20%20%20%20li%2EappendChild%28ul%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20createMenuItems%28ul%2C%20domSubItems%2C%20item%2Esubmenu%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%2F%2F%20no%20submenu%2C%20just%20a%20button%20with%20clickhandler%0A%09%20%20%20%20%20%20%20%20%20%20button%2EinnerHTML%20%3D%20%27%3Cdiv%20class%3D%22icon%22%3E%3C%2Fdiv%3E%27%20%2B%20item%2Etext%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20domItems%2Epush%28domItem%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%29%3B%0A%09%20%20%7D%0A%09%20%20createMenuItems%28list%2C%20this%2Edom%2Eitems%2C%20items%29%3B%0A%0A%09%20%20%2F%2F%20TODO%3A%20when%20the%20editor%20is%20small%2C%20show%20the%20submenu%20on%20the%20right%20instead%20of%20inline%3F%0A%0A%09%20%20%2F%2F%20calculate%20the%20max%20height%20of%20the%20menu%20with%20one%20submenu%20expanded%0A%09%20%20this%2EmaxHeight%20%3D%200%3B%20%2F%2F%20height%20in%20pixels%0A%09%20%20items%2EforEach%28function%20%28item%29%20%7B%0A%09%20%20%20%20var%20height%20%3D%20%28items%2Elength%20%2B%20%28item%2Esubmenu%20%3F%20item%2Esubmenu%2Elength%20%3A%200%29%29%20%2A%2024%3B%0A%09%20%20%20%20me%2EmaxHeight%20%3D%20Math%2Emax%28me%2EmaxHeight%2C%20height%29%3B%0A%09%20%20%7D%29%3B%0A%09%7D%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20the%20currently%20visible%20buttons%0A%09%20%2A%20%40return%20%7BArray%2E%3CHTMLElement%3E%7D%20buttons%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09ContextMenu%2Eprototype%2E%5FgetVisibleButtons%20%3D%20function%20%28%29%20%7B%0A%09%20%20var%20buttons%20%3D%20%5B%5D%3B%0A%09%20%20var%20me%20%3D%20this%3B%0A%09%20%20this%2Edom%2Eitems%2EforEach%28function%20%28item%29%20%7B%0A%09%20%20%20%20buttons%2Epush%28item%2Ebutton%29%3B%0A%09%20%20%20%20if%20%28item%2EbuttonExpand%29%20%7B%0A%09%20%20%20%20%20%20buttons%2Epush%28item%2EbuttonExpand%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20if%20%28item%2EsubItems%20%26%26%20item%20%3D%3D%20me%2EexpandedItem%29%20%7B%0A%09%20%20%20%20%20%20item%2EsubItems%2EforEach%28function%20%28subItem%29%20%7B%0A%09%20%20%20%20%20%20%20%20buttons%2Epush%28subItem%2Ebutton%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28subItem%2EbuttonExpand%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20buttons%2Epush%28subItem%2EbuttonExpand%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%2F%2F%20TODO%3A%20change%20to%20fully%20recursive%20method%0A%09%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%29%3B%0A%0A%09%20%20return%20buttons%3B%0A%09%7D%3B%0A%0A%09%2F%2F%20currently%20displayed%20context%20menu%2C%20a%20singleton%2E%20We%20may%20only%20have%20one%20visible%20context%20menu%0A%09ContextMenu%2EvisibleMenu%20%3D%20undefined%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Attach%20the%20menu%20to%20an%20anchor%0A%09%20%2A%20%40param%20%7BHTMLElement%7D%20anchor%0A%09%20%2A%2F%0A%09ContextMenu%2Eprototype%2Eshow%20%3D%20function%20%28anchor%29%20%7B%0A%09%20%20this%2Ehide%28%29%3B%0A%0A%09%20%20%2F%2F%20calculate%20whether%20the%20menu%20fits%20below%20the%20anchor%0A%09%20%20var%20windowHeight%20%3D%20window%2EinnerHeight%2C%0A%09%20%20%20%20%20%20windowScroll%20%3D%20%28window%2EpageYOffset%20%7C%7C%20document%2EscrollTop%20%7C%7C%200%29%2C%0A%09%20%20%20%20%20%20windowBottom%20%3D%20windowHeight%20%2B%20windowScroll%2C%0A%09%20%20%20%20%20%20anchorHeight%20%3D%20anchor%2EoffsetHeight%2C%0A%09%20%20%20%20%20%20menuHeight%20%3D%20this%2EmaxHeight%3B%0A%0A%09%20%20%2F%2F%20position%20the%20menu%0A%09%20%20var%20left%20%3D%20util%2EgetAbsoluteLeft%28anchor%29%3B%0A%09%20%20var%20top%20%3D%20util%2EgetAbsoluteTop%28anchor%29%3B%0A%09%20%20if%20%28top%20%2B%20anchorHeight%20%2B%20menuHeight%20%3C%20windowBottom%29%20%7B%0A%09%20%20%20%20%2F%2F%20display%20the%20menu%20below%20the%20anchor%0A%09%20%20%20%20this%2Edom%2Emenu%2Estyle%2Eleft%20%3D%20left%20%2B%20%27px%27%3B%0A%09%20%20%20%20this%2Edom%2Emenu%2Estyle%2Etop%20%3D%20%28top%20%2B%20anchorHeight%29%20%2B%20%27px%27%3B%0A%09%20%20%20%20this%2Edom%2Emenu%2Estyle%2Ebottom%20%3D%20%27%27%3B%0A%09%20%20%7D%0A%09%20%20else%20%7B%0A%09%20%20%20%20%2F%2F%20display%20the%20menu%20above%20the%20anchor%0A%09%20%20%20%20this%2Edom%2Emenu%2Estyle%2Eleft%20%3D%20left%20%2B%20%27px%27%3B%0A%09%20%20%20%20this%2Edom%2Emenu%2Estyle%2Etop%20%3D%20%27%27%3B%0A%09%20%20%20%20this%2Edom%2Emenu%2Estyle%2Ebottom%20%3D%20%28windowHeight%20%2D%20top%29%20%2B%20%27px%27%3B%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20attach%20the%20menu%20to%20the%20document%0A%09%20%20document%2Ebody%2EappendChild%28this%2Edom%2Emenu%29%3B%0A%0A%09%20%20%2F%2F%20create%20and%20attach%20event%20listeners%0A%09%20%20var%20me%20%3D%20this%3B%0A%09%20%20var%20list%20%3D%20this%2Edom%2Elist%3B%0A%09%20%20this%2EeventListeners%2Emousedown%20%3D%20util%2EaddEventListener%28%0A%09%20%20%20%20%20%20document%2C%20%27mousedown%27%2C%20function%20%28event%29%20%7B%0A%09%20%20%20%20%20%20%20%20%2F%2F%20hide%20menu%20on%20click%20outside%20of%20the%20menu%0A%09%20%20%20%20%20%20%20%20var%20target%20%3D%20event%2Etarget%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%28target%20%21%3D%20list%29%20%26%26%20%21me%2E%5FisChildOf%28target%2C%20list%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20me%2Ehide%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20event%2EstopPropagation%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20event%2EpreventDefault%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%7D%29%3B%0A%09%20%20this%2EeventListeners%2Emousewheel%20%3D%20util%2EaddEventListener%28%0A%09%20%20%20%20%20%20document%2C%20%27mousewheel%27%2C%20function%20%28event%29%20%7B%0A%09%20%20%20%20%20%20%20%20%2F%2F%20block%20scrolling%20when%20context%20menu%20is%20visible%0A%09%20%20%20%20%20%20%20%20event%2EstopPropagation%28%29%3B%0A%09%20%20%20%20%20%20%20%20event%2EpreventDefault%28%29%3B%0A%09%20%20%20%20%20%20%7D%29%3B%0A%09%20%20this%2EeventListeners%2Ekeydown%20%3D%20util%2EaddEventListener%28%0A%09%20%20%20%20%20%20document%2C%20%27keydown%27%2C%20function%20%28event%29%20%7B%0A%09%20%20%20%20%20%20%20%20me%2E%5FonKeyDown%28event%29%3B%0A%09%20%20%20%20%20%20%7D%29%3B%0A%0A%09%20%20%2F%2F%20move%20focus%20to%20the%20first%20button%20in%20the%20context%20menu%0A%09%20%20this%2Eselection%20%3D%20util%2EgetSelection%28%29%3B%0A%09%20%20this%2Eanchor%20%3D%20anchor%3B%0A%09%20%20setTimeout%28function%20%28%29%20%7B%0A%09%20%20%20%20me%2Edom%2EfocusButton%2Efocus%28%29%3B%0A%09%20%20%7D%2C%200%29%3B%0A%0A%09%20%20if%20%28ContextMenu%2EvisibleMenu%29%20%7B%0A%09%20%20%20%20ContextMenu%2EvisibleMenu%2Ehide%28%29%3B%0A%09%20%20%7D%0A%09%20%20ContextMenu%2EvisibleMenu%20%3D%20this%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Hide%20the%20context%20menu%20if%20visible%0A%09%20%2A%2F%0A%09ContextMenu%2Eprototype%2Ehide%20%3D%20function%20%28%29%20%7B%0A%09%20%20%2F%2F%20remove%20the%20menu%20from%20the%20DOM%0A%09%20%20if%20%28this%2Edom%2Emenu%2EparentNode%29%20%7B%0A%09%20%20%20%20this%2Edom%2Emenu%2EparentNode%2EremoveChild%28this%2Edom%2Emenu%29%3B%0A%09%20%20%20%20if%20%28this%2EonClose%29%20%7B%0A%09%20%20%20%20%20%20this%2EonClose%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20%2F%2F%20remove%20all%20event%20listeners%0A%09%20%20%2F%2F%20all%20event%20listeners%20are%20supposed%20to%20be%20attached%20to%20document%2E%0A%09%20%20for%20%28var%20name%20in%20this%2EeventListeners%29%20%7B%0A%09%20%20%20%20if%20%28this%2EeventListeners%2EhasOwnProperty%28name%29%29%20%7B%0A%09%20%20%20%20%20%20var%20fn%20%3D%20this%2EeventListeners%5Bname%5D%3B%0A%09%20%20%20%20%20%20if%20%28fn%29%20%7B%0A%09%20%20%20%20%20%20%20%20util%2EremoveEventListener%28document%2C%20name%2C%20fn%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20delete%20this%2EeventListeners%5Bname%5D%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%0A%09%20%20if%20%28ContextMenu%2EvisibleMenu%20%3D%3D%20this%29%20%7B%0A%09%20%20%20%20ContextMenu%2EvisibleMenu%20%3D%20undefined%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Expand%20a%20submenu%0A%09%20%2A%20Any%20currently%20expanded%20submenu%20will%20be%20hided%2E%0A%09%20%2A%20%40param%20%7BObject%7D%20domItem%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09ContextMenu%2Eprototype%2E%5FonExpandItem%20%3D%20function%20%28domItem%29%20%7B%0A%09%20%20var%20me%20%3D%20this%3B%0A%09%20%20var%20alreadyVisible%20%3D%20%28domItem%20%3D%3D%20this%2EexpandedItem%29%3B%0A%0A%09%20%20%2F%2F%20hide%20the%20currently%20visible%20submenu%0A%09%20%20var%20expandedItem%20%3D%20this%2EexpandedItem%3B%0A%09%20%20if%20%28expandedItem%29%20%7B%0A%09%20%20%20%20%2F%2Fvar%20ul%20%3D%20expandedItem%2Eul%3B%0A%09%20%20%20%20expandedItem%2Eul%2Estyle%2Eheight%20%3D%20%270%27%3B%0A%09%20%20%20%20expandedItem%2Eul%2Estyle%2Epadding%20%3D%20%27%27%3B%0A%09%20%20%20%20setTimeout%28function%20%28%29%20%7B%0A%09%20%20%20%20%20%20if%20%28me%2EexpandedItem%20%21%3D%20expandedItem%29%20%7B%0A%09%20%20%20%20%20%20%20%20expandedItem%2Eul%2Estyle%2Edisplay%20%3D%20%27%27%3B%0A%09%20%20%20%20%20%20%20%20util%2EremoveClassName%28expandedItem%2Eul%2EparentNode%2C%20%27selected%27%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%2C%20300%29%3B%20%2F%2F%20timeout%20duration%20must%20match%20the%20css%20transition%20duration%0A%09%20%20%20%20this%2EexpandedItem%20%3D%20undefined%3B%0A%09%20%20%7D%0A%0A%09%20%20if%20%28%21alreadyVisible%29%20%7B%0A%09%20%20%20%20var%20ul%20%3D%20domItem%2Eul%3B%0A%09%20%20%20%20ul%2Estyle%2Edisplay%20%3D%20%27block%27%3B%0A%09%20%20%20%20var%20height%20%3D%20ul%2EclientHeight%3B%20%2F%2F%20force%20a%20reflow%20in%20Firefox%0A%09%20%20%20%20setTimeout%28function%20%28%29%20%7B%0A%09%20%20%20%20%20%20if%20%28me%2EexpandedItem%20%3D%3D%20domItem%29%20%7B%0A%09%20%20%20%20%20%20%20%20ul%2Estyle%2Eheight%20%3D%20%28ul%2EchildNodes%2Elength%20%2A%2024%29%20%2B%20%27px%27%3B%0A%09%20%20%20%20%20%20%20%20ul%2Estyle%2Epadding%20%3D%20%275px%2010px%27%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%2C%200%29%3B%0A%09%20%20%20%20util%2EaddClassName%28ul%2EparentNode%2C%20%27selected%27%29%3B%0A%09%20%20%20%20this%2EexpandedItem%20%3D%20domItem%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Handle%20onkeydown%20event%0A%09%20%2A%20%40param%20%7BEvent%7D%20event%0A%09%20%2A%20%40private%0A%09%20%2A%2F%0A%09ContextMenu%2Eprototype%2E%5FonKeyDown%20%3D%20function%20%28event%29%20%7B%0A%09%20%20var%20target%20%3D%20event%2Etarget%3B%0A%09%20%20var%20keynum%20%3D%20event%2Ewhich%3B%0A%09%20%20var%20handled%20%3D%20false%3B%0A%09%20%20var%20buttons%2C%20targetIndex%2C%20prevButton%2C%20nextButton%3B%0A%0A%09%20%20if%20%28keynum%20%3D%3D%2027%29%20%7B%20%2F%2F%20ESC%0A%09%20%20%20%20%2F%2F%20hide%20the%20menu%20on%20ESC%20key%0A%0A%09%20%20%20%20%2F%2F%20restore%20previous%20selection%20and%20focus%0A%09%20%20%20%20if%20%28this%2Eselection%29%20%7B%0A%09%20%20%20%20%20%20util%2EsetSelection%28this%2Eselection%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20if%20%28this%2Eanchor%29%20%7B%0A%09%20%20%20%20%20%20this%2Eanchor%2Efocus%28%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20this%2Ehide%28%29%3B%0A%0A%09%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%7D%0A%09%20%20else%20if%20%28keynum%20%3D%3D%209%29%20%7B%20%2F%2F%20Tab%0A%09%20%20%20%20if%20%28%21event%2EshiftKey%29%20%7B%20%2F%2F%20Tab%0A%09%20%20%20%20%20%20buttons%20%3D%20this%2E%5FgetVisibleButtons%28%29%3B%0A%09%20%20%20%20%20%20targetIndex%20%3D%20buttons%2EindexOf%28target%29%3B%0A%09%20%20%20%20%20%20if%20%28targetIndex%20%3D%3D%20buttons%2Elength%20%2D%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%2F%2F%20move%20to%20first%20button%0A%09%20%20%20%20%20%20%20%20buttons%5B0%5D%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%20%2F%2F%20Shift%2BTab%0A%09%20%20%20%20%20%20buttons%20%3D%20this%2E%5FgetVisibleButtons%28%29%3B%0A%09%20%20%20%20%20%20targetIndex%20%3D%20buttons%2EindexOf%28target%29%3B%0A%09%20%20%20%20%20%20if%20%28targetIndex%20%3D%3D%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%2F%2F%20move%20to%20last%20button%0A%09%20%20%20%20%20%20%20%20buttons%5Bbuttons%2Elength%20%2D%201%5D%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%20%20else%20if%20%28keynum%20%3D%3D%2037%29%20%7B%20%2F%2F%20Arrow%20Left%0A%09%20%20%20%20if%20%28target%2EclassName%20%3D%3D%20%27expand%27%29%20%7B%0A%09%20%20%20%20%20%20buttons%20%3D%20this%2E%5FgetVisibleButtons%28%29%3B%0A%09%20%20%20%20%20%20targetIndex%20%3D%20buttons%2EindexOf%28target%29%3B%0A%09%20%20%20%20%20%20prevButton%20%3D%20buttons%5BtargetIndex%20%2D%201%5D%3B%0A%09%20%20%20%20%20%20if%20%28prevButton%29%20%7B%0A%09%20%20%20%20%20%20%20%20prevButton%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%7D%0A%09%20%20else%20if%20%28keynum%20%3D%3D%2038%29%20%7B%20%2F%2F%20Arrow%20Up%0A%09%20%20%20%20buttons%20%3D%20this%2E%5FgetVisibleButtons%28%29%3B%0A%09%20%20%20%20targetIndex%20%3D%20buttons%2EindexOf%28target%29%3B%0A%09%20%20%20%20prevButton%20%3D%20buttons%5BtargetIndex%20%2D%201%5D%3B%0A%09%20%20%20%20if%20%28prevButton%20%26%26%20prevButton%2EclassName%20%3D%3D%20%27expand%27%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20skip%20expand%20button%0A%09%20%20%20%20%20%20prevButton%20%3D%20buttons%5BtargetIndex%20%2D%202%5D%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20if%20%28%21prevButton%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20move%20to%20last%20button%0A%09%20%20%20%20%20%20prevButton%20%3D%20buttons%5Bbuttons%2Elength%20%2D%201%5D%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20if%20%28prevButton%29%20%7B%0A%09%20%20%20%20%20%20prevButton%2Efocus%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%7D%0A%09%20%20else%20if%20%28keynum%20%3D%3D%2039%29%20%7B%20%2F%2F%20Arrow%20Right%0A%09%20%20%20%20buttons%20%3D%20this%2E%5FgetVisibleButtons%28%29%3B%0A%09%20%20%20%20targetIndex%20%3D%20buttons%2EindexOf%28target%29%3B%0A%09%20%20%20%20nextButton%20%3D%20buttons%5BtargetIndex%20%2B%201%5D%3B%0A%09%20%20%20%20if%20%28nextButton%20%26%26%20nextButton%2EclassName%20%3D%3D%20%27expand%27%29%20%7B%0A%09%20%20%20%20%20%20nextButton%2Efocus%28%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%7D%0A%09%20%20else%20if%20%28keynum%20%3D%3D%2040%29%20%7B%20%2F%2F%20Arrow%20Down%0A%09%20%20%20%20buttons%20%3D%20this%2E%5FgetVisibleButtons%28%29%3B%0A%09%20%20%20%20targetIndex%20%3D%20buttons%2EindexOf%28target%29%3B%0A%09%20%20%20%20nextButton%20%3D%20buttons%5BtargetIndex%20%2B%201%5D%3B%0A%09%20%20%20%20if%20%28nextButton%20%26%26%20nextButton%2EclassName%20%3D%3D%20%27expand%27%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20skip%20expand%20button%0A%09%20%20%20%20%20%20nextButton%20%3D%20buttons%5BtargetIndex%20%2B%202%5D%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20if%20%28%21nextButton%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20move%20to%20first%20button%0A%09%20%20%20%20%20%20nextButton%20%3D%20buttons%5B0%5D%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20if%20%28nextButton%29%20%7B%0A%09%20%20%20%20%20%20nextButton%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20handled%20%3D%20true%3B%0A%09%20%20%7D%0A%09%20%20%2F%2F%20TODO%3A%20arrow%20left%20and%20right%0A%0A%09%20%20if%20%28handled%29%20%7B%0A%09%20%20%20%20event%2EstopPropagation%28%29%3B%0A%09%20%20%20%20event%2EpreventDefault%28%29%3B%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Test%20if%20an%20element%20is%20a%20child%20of%20a%20parent%20element%2E%0A%09%20%2A%20%40param%20%7BElement%7D%20child%0A%09%20%2A%20%40param%20%7BElement%7D%20parent%0A%09%20%2A%20%40return%20%7Bboolean%7D%20isChild%0A%09%20%2A%2F%0A%09ContextMenu%2Eprototype%2E%5FisChildOf%20%3D%20function%20%28child%2C%20parent%29%20%7B%0A%09%20%20var%20e%20%3D%20child%2EparentNode%3B%0A%09%20%20while%20%28e%29%20%7B%0A%09%20%20%20%20if%20%28e%20%3D%3D%20parent%29%20%7B%0A%09%20%20%20%20%20%20return%20true%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20e%20%3D%20e%2EparentNode%3B%0A%09%20%20%7D%0A%0A%09%20%20return%20false%3B%0A%09%7D%3B%0A%0A%09module%2Eexports%20%3D%20ContextMenu%3B%0A%0A%0A%2F%2A%2A%2A%2F%20%7D%2C%0A%2F%2A%2011%20%2A%2F%0A%2F%2A%2A%2A%2F%20function%28module%2C%20exports%2C%20%5F%5Fwebpack%5Frequire%5F%5F%29%20%7B%0A%0A%09var%20util%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%283%29%3B%0A%09var%20ContextMenu%20%3D%20%5F%5Fwebpack%5Frequire%5F%5F%2810%29%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20A%20factory%20function%20to%20create%20an%20AppendNode%2C%20which%20depends%20on%20a%20Node%0A%09%20%2A%20%40param%20%7BNode%7D%20Node%0A%09%20%2A%2F%0A%09function%20appendNodeFactory%28Node%29%20%7B%0A%09%20%20%2F%2A%2A%0A%09%20%20%20%2A%20%40constructor%20AppendNode%0A%09%20%20%20%2A%20%40extends%20Node%0A%09%20%20%20%2A%20%40param%20%7BTreeEditor%7D%20editor%0A%09%20%20%20%2A%20Create%20a%20new%20AppendNode%2E%20This%20is%20a%20special%20node%20which%20is%20created%20at%20the%0A%09%20%20%20%2A%20end%20of%20the%20list%20with%20childs%20for%20an%20object%20or%20array%0A%09%20%20%20%2A%2F%0A%09%20%20function%20AppendNode%20%28editor%29%20%7B%0A%09%20%20%20%20%2F%2A%2A%20%40type%20%7BTreeEditor%7D%20%2A%2F%0A%09%20%20%20%20this%2Eeditor%20%3D%20editor%3B%0A%09%20%20%20%20this%2Edom%20%3D%20%7B%7D%3B%0A%09%20%20%7D%0A%0A%09%20%20AppendNode%2Eprototype%20%3D%20new%20Node%28%29%3B%0A%0A%09%20%20%2F%2A%2A%0A%09%20%20%20%2A%20Return%20a%20table%20row%20with%20an%20append%20button%2E%0A%09%20%20%20%2A%20%40return%20%7BElement%7D%20dom%20%20%20TR%20element%0A%09%20%20%20%2A%2F%0A%09%20%20AppendNode%2Eprototype%2EgetDom%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20%2F%2F%20TODO%3A%20implement%20a%20new%20solution%20for%20the%20append%20node%0A%09%20%20%20%20var%20dom%20%3D%20this%2Edom%3B%0A%0A%09%20%20%20%20if%20%28dom%2Etr%29%20%7B%0A%09%20%20%20%20%20%20return%20dom%2Etr%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20this%2E%5FupdateEditability%28%29%3B%0A%0A%09%20%20%20%20%2F%2F%20a%20row%20for%20the%20append%20button%0A%09%20%20%20%20var%20trAppend%20%3D%20document%2EcreateElement%28%27tr%27%29%3B%0A%09%20%20%20%20trAppend%2Enode%20%3D%20this%3B%0A%09%20%20%20%20dom%2Etr%20%3D%20trAppend%3B%0A%0A%09%20%20%20%20%2F%2F%20TODO%3A%20consistent%20naming%0A%0A%09%20%20%20%20if%20%28this%2Eeditable%2Efield%29%20%7B%0A%09%20%20%20%20%20%20%2F%2F%20a%20cell%20for%20the%20dragarea%20column%0A%09%20%20%20%20%20%20dom%2EtdDrag%20%3D%20document%2EcreateElement%28%27td%27%29%3B%0A%0A%09%20%20%20%20%20%20%2F%2F%20create%20context%20menu%0A%09%20%20%20%20%20%20var%20tdMenu%20%3D%20document%2EcreateElement%28%27td%27%29%3B%0A%09%20%20%20%20%20%20dom%2EtdMenu%20%3D%20tdMenu%3B%0A%09%20%20%20%20%20%20var%20menu%20%3D%20document%2EcreateElement%28%27button%27%29%3B%0A%09%20%20%20%20%20%20menu%2EclassName%20%3D%20%27contextmenu%27%3B%0A%09%20%20%20%20%20%20menu%2Etitle%20%3D%20%27Click%20to%20open%20the%20actions%20menu%20%28Ctrl%2BM%29%27%3B%0A%09%20%20%20%20%20%20dom%2Emenu%20%3D%20menu%3B%0A%09%20%20%20%20%20%20tdMenu%2EappendChild%28dom%2Emenu%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20a%20cell%20for%20the%20contents%20%28showing%20text%20%27empty%27%29%0A%09%20%20%20%20var%20tdAppend%20%3D%20document%2EcreateElement%28%27td%27%29%3B%0A%09%20%20%20%20var%20domText%20%3D%20document%2EcreateElement%28%27div%27%29%3B%0A%09%20%20%20%20domText%2EinnerHTML%20%3D%20%27%28empty%29%27%3B%0A%09%20%20%20%20domText%2EclassName%20%3D%20%27readonly%27%3B%0A%09%20%20%20%20tdAppend%2EappendChild%28domText%29%3B%0A%09%20%20%20%20dom%2Etd%20%3D%20tdAppend%3B%0A%09%20%20%20%20dom%2Etext%20%3D%20domText%3B%0A%0A%09%20%20%20%20this%2EupdateDom%28%29%3B%0A%0A%09%20%20%20%20return%20trAppend%3B%0A%09%20%20%7D%3B%0A%0A%09%20%20%2F%2A%2A%0A%09%20%20%20%2A%20Update%20the%20HTML%20dom%20of%20the%20Node%0A%09%20%20%20%2A%2F%0A%09%20%20AppendNode%2Eprototype%2EupdateDom%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20var%20dom%20%3D%20this%2Edom%3B%0A%09%20%20%20%20var%20tdAppend%20%3D%20dom%2Etd%3B%0A%09%20%20%20%20if%20%28tdAppend%29%20%7B%0A%09%20%20%20%20%20%20tdAppend%2Estyle%2EpaddingLeft%20%3D%20%28this%2EgetLevel%28%29%20%2A%2024%20%2B%2026%29%20%2B%20%27px%27%3B%0A%09%20%20%20%20%20%20%2F%2F%20TODO%3A%20not%20so%20nice%20hard%20coded%20offset%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20var%20domText%20%3D%20dom%2Etext%3B%0A%09%20%20%20%20if%20%28domText%29%20%7B%0A%09%20%20%20%20%20%20domText%2EinnerHTML%20%3D%20%27%28empty%20%27%20%2B%20this%2Eparent%2Etype%20%2B%20%27%29%27%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20attach%20or%20detach%20the%20contents%20of%20the%20append%20node%3A%0A%09%20%20%20%20%2F%2F%20hide%20when%20the%20parent%20has%20childs%2C%20show%20when%20the%20parent%20has%20no%20childs%0A%09%20%20%20%20var%20trAppend%20%3D%20dom%2Etr%3B%0A%09%20%20%20%20if%20%28%21this%2EisVisible%28%29%29%20%7B%0A%09%20%20%20%20%20%20if%20%28dom%2Etr%2EfirstChild%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28dom%2EtdDrag%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20trAppend%2EremoveChild%28dom%2EtdDrag%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28dom%2EtdMenu%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20trAppend%2EremoveChild%28dom%2EtdMenu%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20trAppend%2EremoveChild%28tdAppend%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20if%20%28%21dom%2Etr%2EfirstChild%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28dom%2EtdDrag%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20trAppend%2EappendChild%28dom%2EtdDrag%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28dom%2EtdMenu%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20trAppend%2EappendChild%28dom%2EtdMenu%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20trAppend%2EappendChild%28tdAppend%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%7D%3B%0A%0A%09%20%20%2F%2A%2A%0A%09%20%20%20%2A%20Check%20whether%20the%20AppendNode%20is%20currently%20visible%2E%0A%09%20%20%20%2A%20the%20AppendNode%20is%20visible%20when%20its%20parent%20has%20no%20childs%20%28i%2Ee%2E%20is%20empty%29%2E%0A%09%20%20%20%2A%20%40return%20%7Bboolean%7D%20isVisible%0A%09%20%20%20%2A%2F%0A%09%20%20AppendNode%2Eprototype%2EisVisible%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20return%20%28this%2Eparent%2Echilds%2Elength%20%3D%3D%200%29%3B%0A%09%20%20%7D%3B%0A%0A%09%20%20%2F%2A%2A%0A%09%20%20%20%2A%20Show%20a%20contextmenu%20for%20this%20node%0A%09%20%20%20%2A%20%40param%20%7BHTMLElement%7D%20anchor%20%20%20The%20element%20to%20attach%20the%20menu%20to%2E%0A%09%20%20%20%2A%20%40param%20%7Bfunction%7D%20%5BonClose%5D%20%20%20Callback%20method%20called%20when%20the%20context%20menu%0A%09%20%20%20%2A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20is%20being%20closed%2E%0A%09%20%20%20%2A%2F%0A%09%20%20AppendNode%2Eprototype%2EshowContextMenu%20%3D%20function%20%28anchor%2C%20onClose%29%20%7B%0A%09%20%20%20%20var%20node%20%3D%20this%3B%0A%09%20%20%20%20var%20titles%20%3D%20Node%2ETYPE%5FTITLES%3B%0A%09%20%20%20%20var%20items%20%3D%20%5B%0A%09%20%20%20%20%20%20%2F%2F%20create%20append%20button%0A%09%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%27text%27%3A%20%27Append%27%2C%0A%09%20%20%20%20%20%20%20%20%27title%27%3A%20%27Append%20a%20new%20field%20with%20type%20%5C%27auto%5C%27%20%28Ctrl%2BShift%2BIns%29%27%2C%0A%09%20%20%20%20%20%20%20%20%27submenuTitle%27%3A%20%27Select%20the%20type%20of%20the%20field%20to%20be%20appended%27%2C%0A%09%20%20%20%20%20%20%20%20%27className%27%3A%20%27insert%27%2C%0A%09%20%20%20%20%20%20%20%20%27click%27%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20node%2E%5FonAppend%28%27%27%2C%20%27%27%2C%20%27auto%27%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%20%20%27submenu%27%3A%20%5B%0A%09%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27text%27%3A%20%27Auto%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27className%27%3A%20%27type%2Dauto%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27title%27%3A%20titles%2Eauto%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27click%27%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20node%2E%5FonAppend%28%27%27%2C%20%27%27%2C%20%27auto%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27text%27%3A%20%27Array%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27className%27%3A%20%27type%2Darray%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27title%27%3A%20titles%2Earray%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27click%27%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20node%2E%5FonAppend%28%27%27%2C%20%5B%5D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27text%27%3A%20%27Object%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27className%27%3A%20%27type%2Dobject%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27title%27%3A%20titles%2Eobject%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27click%27%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20node%2E%5FonAppend%28%27%27%2C%20%7B%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27text%27%3A%20%27String%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27className%27%3A%20%27type%2Dstring%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27title%27%3A%20titles%2Estring%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27click%27%3A%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20node%2E%5FonAppend%28%27%27%2C%20%27%27%2C%20%27string%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%5D%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%5D%3B%0A%0A%09%20%20%20%20var%20menu%20%3D%20new%20ContextMenu%28items%2C%20%7Bclose%3A%20onClose%7D%29%3B%0A%09%20%20%20%20menu%2Eshow%28anchor%29%3B%0A%09%20%20%7D%3B%0A%0A%09%20%20%2F%2A%2A%0A%09%20%20%20%2A%20Handle%20an%20event%2E%20The%20event%20is%20catched%20centrally%20by%20the%20editor%0A%09%20%20%20%2A%20%40param%20%7BEvent%7D%20event%0A%09%20%20%20%2A%2F%0A%09%20%20AppendNode%2Eprototype%2EonEvent%20%3D%20function%20%28event%29%20%7B%0A%09%20%20%20%20var%20type%20%3D%20event%2Etype%3B%0A%09%20%20%20%20var%20target%20%3D%20event%2Etarget%20%7C%7C%20event%2EsrcElement%3B%0A%09%20%20%20%20var%20dom%20%3D%20this%2Edom%3B%0A%0A%09%20%20%20%20%2F%2F%20highlight%20the%20append%20nodes%20parent%0A%09%20%20%20%20var%20menu%20%3D%20dom%2Emenu%3B%0A%09%20%20%20%20if%20%28target%20%3D%3D%20menu%29%20%7B%0A%09%20%20%20%20%20%20if%20%28type%20%3D%3D%20%27mouseover%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Eeditor%2Ehighlighter%2Ehighlight%28this%2Eparent%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20else%20if%20%28type%20%3D%3D%20%27mouseout%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Eeditor%2Ehighlighter%2Eunhighlight%28%29%3B%0A%09%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%2F%2F%20context%20menu%20events%0A%09%20%20%20%20if%20%28type%20%3D%3D%20%27click%27%20%26%26%20target%20%3D%3D%20dom%2Emenu%29%20%7B%0A%09%20%20%20%20%20%20var%20highlighter%20%3D%20this%2Eeditor%2Ehighlighter%3B%0A%09%20%20%20%20%20%20highlighter%2Ehighlight%28this%2Eparent%29%3B%0A%09%20%20%20%20%20%20highlighter%2Elock%28%29%3B%0A%09%20%20%20%20%20%20util%2EaddClassName%28dom%2Emenu%2C%20%27selected%27%29%3B%0A%09%20%20%20%20%20%20this%2EshowContextMenu%28dom%2Emenu%2C%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20util%2EremoveClassName%28dom%2Emenu%2C%20%27selected%27%29%3B%0A%09%20%20%20%20%20%20%20%20highlighter%2Eunlock%28%29%3B%0A%09%20%20%20%20%20%20%20%20highlighter%2Eunhighlight%28%29%3B%0A%09%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20if%20%28type%20%3D%3D%20%27keydown%27%29%20%7B%0A%09%20%20%20%20%20%20this%2EonKeyDown%28event%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%3B%0A%0A%09%20%20return%20AppendNode%3B%0A%09%7D%0A%0A%09module%2Eexports%20%3D%20appendNodeFactory%3B%0A%0A%0A%2F%2A%2A%2A%2F%20%7D%2C%0A%2F%2A%2012%20%2A%2F%0A%2F%2A%2A%2A%2F%20function%28module%2C%20exports%2C%20%5F%5Fwebpack%5Frequire%5F%5F%29%20%7B%0A%0A%09%2F%2A%20Jison%20generated%20parser%20%2A%2F%0A%09var%20jsonlint%20%3D%20%28function%28%29%7B%0A%09var%20parser%20%3D%20%7Btrace%3A%20function%20trace%28%29%20%7B%20%7D%2C%0A%09yy%3A%20%7B%7D%2C%0A%09symbols%5F%3A%20%7B%22error%22%3A2%2C%22JSONString%22%3A3%2C%22STRING%22%3A4%2C%22JSONNumber%22%3A5%2C%22NUMBER%22%3A6%2C%22JSONNullLiteral%22%3A7%2C%22NULL%22%3A8%2C%22JSONBooleanLiteral%22%3A9%2C%22TRUE%22%3A10%2C%22FALSE%22%3A11%2C%22JSONText%22%3A12%2C%22JSONValue%22%3A13%2C%22EOF%22%3A14%2C%22JSONObject%22%3A15%2C%22JSONArray%22%3A16%2C%22%7B%22%3A17%2C%22%7D%22%3A18%2C%22JSONMemberList%22%3A19%2C%22JSONMember%22%3A20%2C%22%3A%22%3A21%2C%22%2C%22%3A22%2C%22%5B%22%3A23%2C%22%5D%22%3A24%2C%22JSONElementList%22%3A25%2C%22%24accept%22%3A0%2C%22%24end%22%3A1%7D%2C%0A%09terminals%5F%3A%20%7B2%3A%22error%22%2C4%3A%22STRING%22%2C6%3A%22NUMBER%22%2C8%3A%22NULL%22%2C10%3A%22TRUE%22%2C11%3A%22FALSE%22%2C14%3A%22EOF%22%2C17%3A%22%7B%22%2C18%3A%22%7D%22%2C21%3A%22%3A%22%2C22%3A%22%2C%22%2C23%3A%22%5B%22%2C24%3A%22%5D%22%7D%2C%0A%09productions%5F%3A%20%5B0%2C%5B3%2C1%5D%2C%5B5%2C1%5D%2C%5B7%2C1%5D%2C%5B9%2C1%5D%2C%5B9%2C1%5D%2C%5B12%2C2%5D%2C%5B13%2C1%5D%2C%5B13%2C1%5D%2C%5B13%2C1%5D%2C%5B13%2C1%5D%2C%5B13%2C1%5D%2C%5B13%2C1%5D%2C%5B15%2C2%5D%2C%5B15%2C3%5D%2C%5B20%2C3%5D%2C%5B19%2C1%5D%2C%5B19%2C3%5D%2C%5B16%2C2%5D%2C%5B16%2C3%5D%2C%5B25%2C1%5D%2C%5B25%2C3%5D%5D%2C%0A%09performAction%3A%20function%20anonymous%28yytext%2Cyyleng%2Cyylineno%2Cyy%2Cyystate%2C%24%24%2C%5F%24%29%20%7B%0A%0A%09var%20%240%20%3D%20%24%24%2Elength%20%2D%201%3B%0A%09switch%20%28yystate%29%20%7B%0A%09case%201%3A%20%2F%2F%20replace%20escaped%20characters%20with%20actual%20character%0A%09%20%20%20%20%20%20%20%20%20%20this%2E%24%20%3D%20yytext%2Ereplace%28%2F%5C%5C%28%5C%5C%7C%22%29%2Fg%2C%20%22%24%22%2B%221%22%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2Ereplace%28%2F%5C%5Cn%2Fg%2C%27%5Cn%27%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2Ereplace%28%2F%5C%5Cr%2Fg%2C%27%5Cr%27%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2Ereplace%28%2F%5C%5Ct%2Fg%2C%27%5Ct%27%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2Ereplace%28%2F%5C%5Cv%2Fg%2C%27%5Cv%27%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2Ereplace%28%2F%5C%5Cf%2Fg%2C%27%5Cf%27%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2Ereplace%28%2F%5C%5Cb%2Fg%2C%27%5Cb%27%29%3B%0A%09%20%20%20%20%20%20%20%20%0A%09break%3B%0A%09case%202%3Athis%2E%24%20%3D%20Number%28yytext%29%3B%0A%09break%3B%0A%09case%203%3Athis%2E%24%20%3D%20null%3B%0A%09break%3B%0A%09case%204%3Athis%2E%24%20%3D%20true%3B%0A%09break%3B%0A%09case%205%3Athis%2E%24%20%3D%20false%3B%0A%09break%3B%0A%09case%206%3Areturn%20this%2E%24%20%3D%20%24%24%5B%240%2D1%5D%3B%0A%09break%3B%0A%09case%2013%3Athis%2E%24%20%3D%20%7B%7D%3B%0A%09break%3B%0A%09case%2014%3Athis%2E%24%20%3D%20%24%24%5B%240%2D1%5D%3B%0A%09break%3B%0A%09case%2015%3Athis%2E%24%20%3D%20%5B%24%24%5B%240%2D2%5D%2C%20%24%24%5B%240%5D%5D%3B%0A%09break%3B%0A%09case%2016%3Athis%2E%24%20%3D%20%7B%7D%3B%20this%2E%24%5B%24%24%5B%240%5D%5B0%5D%5D%20%3D%20%24%24%5B%240%5D%5B1%5D%3B%0A%09break%3B%0A%09case%2017%3Athis%2E%24%20%3D%20%24%24%5B%240%2D2%5D%3B%20%24%24%5B%240%2D2%5D%5B%24%24%5B%240%5D%5B0%5D%5D%20%3D%20%24%24%5B%240%5D%5B1%5D%3B%0A%09break%3B%0A%09case%2018%3Athis%2E%24%20%3D%20%5B%5D%3B%0A%09break%3B%0A%09case%2019%3Athis%2E%24%20%3D%20%24%24%5B%240%2D1%5D%3B%0A%09break%3B%0A%09case%2020%3Athis%2E%24%20%3D%20%5B%24%24%5B%240%5D%5D%3B%0A%09break%3B%0A%09case%2021%3Athis%2E%24%20%3D%20%24%24%5B%240%2D2%5D%3B%20%24%24%5B%240%2D2%5D%2Epush%28%24%24%5B%240%5D%29%3B%0A%09break%3B%0A%09%7D%0A%09%7D%2C%0A%09table%3A%20%5B%7B3%3A5%2C4%3A%5B1%2C12%5D%2C5%3A6%2C6%3A%5B1%2C13%5D%2C7%3A3%2C8%3A%5B1%2C9%5D%2C9%3A4%2C10%3A%5B1%2C10%5D%2C11%3A%5B1%2C11%5D%2C12%3A1%2C13%3A2%2C15%3A7%2C16%3A8%2C17%3A%5B1%2C14%5D%2C23%3A%5B1%2C15%5D%7D%2C%7B1%3A%5B3%5D%7D%2C%7B14%3A%5B1%2C16%5D%7D%2C%7B14%3A%5B2%2C7%5D%2C18%3A%5B2%2C7%5D%2C22%3A%5B2%2C7%5D%2C24%3A%5B2%2C7%5D%7D%2C%7B14%3A%5B2%2C8%5D%2C18%3A%5B2%2C8%5D%2C22%3A%5B2%2C8%5D%2C24%3A%5B2%2C8%5D%7D%2C%7B14%3A%5B2%2C9%5D%2C18%3A%5B2%2C9%5D%2C22%3A%5B2%2C9%5D%2C24%3A%5B2%2C9%5D%7D%2C%7B14%3A%5B2%2C10%5D%2C18%3A%5B2%2C10%5D%2C22%3A%5B2%2C10%5D%2C24%3A%5B2%2C10%5D%7D%2C%7B14%3A%5B2%2C11%5D%2C18%3A%5B2%2C11%5D%2C22%3A%5B2%2C11%5D%2C24%3A%5B2%2C11%5D%7D%2C%7B14%3A%5B2%2C12%5D%2C18%3A%5B2%2C12%5D%2C22%3A%5B2%2C12%5D%2C24%3A%5B2%2C12%5D%7D%2C%7B14%3A%5B2%2C3%5D%2C18%3A%5B2%2C3%5D%2C22%3A%5B2%2C3%5D%2C24%3A%5B2%2C3%5D%7D%2C%7B14%3A%5B2%2C4%5D%2C18%3A%5B2%2C4%5D%2C22%3A%5B2%2C4%5D%2C24%3A%5B2%2C4%5D%7D%2C%7B14%3A%5B2%2C5%5D%2C18%3A%5B2%2C5%5D%2C22%3A%5B2%2C5%5D%2C24%3A%5B2%2C5%5D%7D%2C%7B14%3A%5B2%2C1%5D%2C18%3A%5B2%2C1%5D%2C21%3A%5B2%2C1%5D%2C22%3A%5B2%2C1%5D%2C24%3A%5B2%2C1%5D%7D%2C%7B14%3A%5B2%2C2%5D%2C18%3A%5B2%2C2%5D%2C22%3A%5B2%2C2%5D%2C24%3A%5B2%2C2%5D%7D%2C%7B3%3A20%2C4%3A%5B1%2C12%5D%2C18%3A%5B1%2C17%5D%2C19%3A18%2C20%3A19%7D%2C%7B3%3A5%2C4%3A%5B1%2C12%5D%2C5%3A6%2C6%3A%5B1%2C13%5D%2C7%3A3%2C8%3A%5B1%2C9%5D%2C9%3A4%2C10%3A%5B1%2C10%5D%2C11%3A%5B1%2C11%5D%2C13%3A23%2C15%3A7%2C16%3A8%2C17%3A%5B1%2C14%5D%2C23%3A%5B1%2C15%5D%2C24%3A%5B1%2C21%5D%2C25%3A22%7D%2C%7B1%3A%5B2%2C6%5D%7D%2C%7B14%3A%5B2%2C13%5D%2C18%3A%5B2%2C13%5D%2C22%3A%5B2%2C13%5D%2C24%3A%5B2%2C13%5D%7D%2C%7B18%3A%5B1%2C24%5D%2C22%3A%5B1%2C25%5D%7D%2C%7B18%3A%5B2%2C16%5D%2C22%3A%5B2%2C16%5D%7D%2C%7B21%3A%5B1%2C26%5D%7D%2C%7B14%3A%5B2%2C18%5D%2C18%3A%5B2%2C18%5D%2C22%3A%5B2%2C18%5D%2C24%3A%5B2%2C18%5D%7D%2C%7B22%3A%5B1%2C28%5D%2C24%3A%5B1%2C27%5D%7D%2C%7B22%3A%5B2%2C20%5D%2C24%3A%5B2%2C20%5D%7D%2C%7B14%3A%5B2%2C14%5D%2C18%3A%5B2%2C14%5D%2C22%3A%5B2%2C14%5D%2C24%3A%5B2%2C14%5D%7D%2C%7B3%3A20%2C4%3A%5B1%2C12%5D%2C20%3A29%7D%2C%7B3%3A5%2C4%3A%5B1%2C12%5D%2C5%3A6%2C6%3A%5B1%2C13%5D%2C7%3A3%2C8%3A%5B1%2C9%5D%2C9%3A4%2C10%3A%5B1%2C10%5D%2C11%3A%5B1%2C11%5D%2C13%3A30%2C15%3A7%2C16%3A8%2C17%3A%5B1%2C14%5D%2C23%3A%5B1%2C15%5D%7D%2C%7B14%3A%5B2%2C19%5D%2C18%3A%5B2%2C19%5D%2C22%3A%5B2%2C19%5D%2C24%3A%5B2%2C19%5D%7D%2C%7B3%3A5%2C4%3A%5B1%2C12%5D%2C5%3A6%2C6%3A%5B1%2C13%5D%2C7%3A3%2C8%3A%5B1%2C9%5D%2C9%3A4%2C10%3A%5B1%2C10%5D%2C11%3A%5B1%2C11%5D%2C13%3A31%2C15%3A7%2C16%3A8%2C17%3A%5B1%2C14%5D%2C23%3A%5B1%2C15%5D%7D%2C%7B18%3A%5B2%2C17%5D%2C22%3A%5B2%2C17%5D%7D%2C%7B18%3A%5B2%2C15%5D%2C22%3A%5B2%2C15%5D%7D%2C%7B22%3A%5B2%2C21%5D%2C24%3A%5B2%2C21%5D%7D%5D%2C%0A%09defaultActions%3A%20%7B16%3A%5B2%2C6%5D%7D%2C%0A%09parseError%3A%20function%20parseError%28str%2C%20hash%29%20%7B%0A%09%20%20%20%20throw%20new%20Error%28str%29%3B%0A%09%7D%2C%0A%09parse%3A%20function%20parse%28input%29%20%7B%0A%09%20%20%20%20var%20self%20%3D%20this%2C%0A%09%20%20%20%20%20%20%20%20stack%20%3D%20%5B0%5D%2C%0A%09%20%20%20%20%20%20%20%20vstack%20%3D%20%5Bnull%5D%2C%20%2F%2F%20semantic%20value%20stack%0A%09%20%20%20%20%20%20%20%20lstack%20%3D%20%5B%5D%2C%20%2F%2F%20location%20stack%0A%09%20%20%20%20%20%20%20%20table%20%3D%20this%2Etable%2C%0A%09%20%20%20%20%20%20%20%20yytext%20%3D%20%27%27%2C%0A%09%20%20%20%20%20%20%20%20yylineno%20%3D%200%2C%0A%09%20%20%20%20%20%20%20%20yyleng%20%3D%200%2C%0A%09%20%20%20%20%20%20%20%20recovering%20%3D%200%2C%0A%09%20%20%20%20%20%20%20%20TERROR%20%3D%202%2C%0A%09%20%20%20%20%20%20%20%20EOF%20%3D%201%3B%0A%0A%09%20%20%20%20%2F%2Fthis%2EreductionCount%20%3D%20this%2EshiftCount%20%3D%200%3B%0A%0A%09%20%20%20%20this%2Elexer%2EsetInput%28input%29%3B%0A%09%20%20%20%20this%2Elexer%2Eyy%20%3D%20this%2Eyy%3B%0A%09%20%20%20%20this%2Eyy%2Elexer%20%3D%20this%2Elexer%3B%0A%09%20%20%20%20if%20%28typeof%20this%2Elexer%2Eyylloc%20%3D%3D%20%27undefined%27%29%0A%09%20%20%20%20%20%20%20%20this%2Elexer%2Eyylloc%20%3D%20%7B%7D%3B%0A%09%20%20%20%20var%20yyloc%20%3D%20this%2Elexer%2Eyylloc%3B%0A%09%20%20%20%20lstack%2Epush%28yyloc%29%3B%0A%0A%09%20%20%20%20if%20%28typeof%20this%2Eyy%2EparseError%20%3D%3D%3D%20%27function%27%29%0A%09%20%20%20%20%20%20%20%20this%2EparseError%20%3D%20this%2Eyy%2EparseError%3B%0A%0A%09%20%20%20%20function%20popStack%20%28n%29%20%7B%0A%09%20%20%20%20%20%20%20%20stack%2Elength%20%3D%20stack%2Elength%20%2D%202%2An%3B%0A%09%20%20%20%20%20%20%20%20vstack%2Elength%20%3D%20vstack%2Elength%20%2D%20n%3B%0A%09%20%20%20%20%20%20%20%20lstack%2Elength%20%3D%20lstack%2Elength%20%2D%20n%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20function%20lex%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20token%3B%0A%09%20%20%20%20%20%20%20%20token%20%3D%20self%2Elexer%2Elex%28%29%20%7C%7C%201%3B%20%2F%2F%20%24end%20%3D%201%0A%09%20%20%20%20%20%20%20%20%2F%2F%20if%20token%20isn%27t%20its%20numeric%20value%2C%20convert%0A%09%20%20%20%20%20%20%20%20if%20%28typeof%20token%20%21%3D%3D%20%27number%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20token%20%3D%20self%2Esymbols%5F%5Btoken%5D%20%7C%7C%20token%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20token%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20var%20symbol%2C%20preErrorSymbol%2C%20state%2C%20action%2C%20a%2C%20r%2C%20yyval%3D%7B%7D%2Cp%2Clen%2CnewState%2C%20expected%3B%0A%09%20%20%20%20while%20%28true%29%20%7B%0A%09%20%20%20%20%20%20%20%20%2F%2F%20retreive%20state%20number%20from%20top%20of%20stack%0A%09%20%20%20%20%20%20%20%20state%20%3D%20stack%5Bstack%2Elength%2D1%5D%3B%0A%0A%09%20%20%20%20%20%20%20%20%2F%2F%20use%20default%20actions%20if%20available%0A%09%20%20%20%20%20%20%20%20if%20%28this%2EdefaultActions%5Bstate%5D%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20action%20%3D%20this%2EdefaultActions%5Bstate%5D%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28symbol%20%3D%3D%20null%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20symbol%20%3D%20lex%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20read%20action%20for%20current%20state%20and%20first%20input%0A%09%20%20%20%20%20%20%20%20%20%20%20%20action%20%3D%20table%5Bstate%5D%20%26%26%20table%5Bstate%5D%5Bsymbol%5D%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%2F%2F%20handle%20parse%20error%0A%09%20%20%20%20%20%20%20%20%5Fhandle%5Ferror%3A%0A%09%20%20%20%20%20%20%20%20if%20%28typeof%20action%20%3D%3D%3D%20%27undefined%27%20%7C%7C%20%21action%2Elength%20%7C%7C%20%21action%5B0%5D%29%20%7B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21recovering%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Report%20error%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20expected%20%3D%20%5B%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20%28p%20in%20table%5Bstate%5D%29%20if%20%28this%2Eterminals%5F%5Bp%5D%20%26%26%20p%20%3E%202%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20expected%2Epush%28%22%27%22%2Bthis%2Eterminals%5F%5Bp%5D%2B%22%27%22%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20errStr%20%3D%20%27%27%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28this%2Elexer%2EshowPosition%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20errStr%20%3D%20%27Parse%20error%20on%20line%20%27%2B%28yylineno%2B1%29%2B%22%3A%5Cn%22%2Bthis%2Elexer%2EshowPosition%28%29%2B%22%5CnExpecting%20%22%2Bexpected%2Ejoin%28%27%2C%20%27%29%20%2B%20%22%2C%20got%20%27%22%20%2B%20this%2Eterminals%5F%5Bsymbol%5D%2B%20%22%27%22%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20errStr%20%3D%20%27Parse%20error%20on%20line%20%27%2B%28yylineno%2B1%29%2B%22%3A%20Unexpected%20%22%20%2B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28symbol%20%3D%3D%201%20%2F%2AEOF%2A%2F%20%3F%20%22end%20of%20input%22%20%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28%22%27%22%2B%28this%2Eterminals%5F%5Bsymbol%5D%20%7C%7C%20symbol%29%2B%22%27%22%29%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EparseError%28errStr%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7Btext%3A%20this%2Elexer%2Ematch%2C%20token%3A%20this%2Eterminals%5F%5Bsymbol%5D%20%7C%7C%20symbol%2C%20line%3A%20this%2Elexer%2Eyylineno%2C%20loc%3A%20yyloc%2C%20expected%3A%20expected%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20just%20recovered%20from%20another%20error%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28recovering%20%3D%3D%203%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28symbol%20%3D%3D%20EOF%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20Error%28errStr%20%7C%7C%20%27Parsing%20halted%2E%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20discard%20current%20lookahead%20and%20grab%20another%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20yyleng%20%3D%20this%2Elexer%2Eyyleng%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20yytext%20%3D%20this%2Elexer%2Eyytext%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20yylineno%20%3D%20this%2Elexer%2Eyylineno%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20yyloc%20%3D%20this%2Elexer%2Eyylloc%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20symbol%20%3D%20lex%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20try%20to%20recover%20from%20error%0A%09%20%20%20%20%20%20%20%20%20%20%20%20while%20%281%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20check%20for%20error%20recovery%20rule%20in%20this%20state%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%28TERROR%2EtoString%28%29%29%20in%20table%5Bstate%5D%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28state%20%3D%3D%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20Error%28errStr%20%7C%7C%20%27Parsing%20halted%2E%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20popStack%281%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20stack%5Bstack%2Elength%2D1%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20preErrorSymbol%20%3D%20symbol%3B%20%2F%2F%20save%20the%20lookahead%20token%0A%09%20%20%20%20%20%20%20%20%20%20%20%20symbol%20%3D%20TERROR%3B%20%20%20%20%20%20%20%20%20%2F%2F%20insert%20generic%20error%20symbol%20as%20new%20lookahead%0A%09%20%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20stack%5Bstack%2Elength%2D1%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20action%20%3D%20table%5Bstate%5D%20%26%26%20table%5Bstate%5D%5BTERROR%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20recovering%20%3D%203%3B%20%2F%2F%20allow%203%20real%20symbols%20to%20be%20shifted%20before%20reporting%20a%20new%20error%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%2F%2F%20this%20shouldn%27t%20happen%2C%20unless%20resolve%20defaults%20are%20off%0A%09%20%20%20%20%20%20%20%20if%20%28action%5B0%5D%20instanceof%20Array%20%26%26%20action%2Elength%20%3E%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20Error%28%27Parse%20Error%3A%20multiple%20actions%20possible%20at%20state%3A%20%27%2Bstate%2B%27%2C%20token%3A%20%27%2Bsymbol%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20switch%20%28action%5B0%5D%29%20%7B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20case%201%3A%20%2F%2F%20shift%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2Fthis%2EshiftCount%2B%2B%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stack%2Epush%28symbol%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20vstack%2Epush%28this%2Elexer%2Eyytext%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lstack%2Epush%28this%2Elexer%2Eyylloc%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stack%2Epush%28action%5B1%5D%29%3B%20%2F%2F%20push%20state%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20symbol%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21preErrorSymbol%29%20%7B%20%2F%2F%20normal%20execution%2Fno%20error%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20yyleng%20%3D%20this%2Elexer%2Eyyleng%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20yytext%20%3D%20this%2Elexer%2Eyytext%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20yylineno%20%3D%20this%2Elexer%2Eyylineno%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20yyloc%20%3D%20this%2Elexer%2Eyylloc%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28recovering%20%3E%200%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20recovering%2D%2D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%20%2F%2F%20error%20just%20occurred%2C%20resume%20old%20lookahead%20f%2F%20before%20error%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20symbol%20%3D%20preErrorSymbol%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20preErrorSymbol%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20case%202%3A%20%2F%2F%20reduce%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2Fthis%2EreductionCount%2B%2B%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20len%20%3D%20this%2Eproductions%5F%5Baction%5B1%5D%5D%5B1%5D%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20perform%20semantic%20action%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20yyval%2E%24%20%3D%20vstack%5Bvstack%2Elength%2Dlen%5D%3B%20%2F%2F%20default%20to%20%24%24%20%3D%20%241%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20default%20location%2C%20uses%20first%20token%20for%20firsts%2C%20last%20for%20lasts%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20yyval%2E%5F%24%20%3D%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20first%5Fline%3A%20lstack%5Blstack%2Elength%2D%28len%7C%7C1%29%5D%2Efirst%5Fline%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20last%5Fline%3A%20lstack%5Blstack%2Elength%2D1%5D%2Elast%5Fline%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20first%5Fcolumn%3A%20lstack%5Blstack%2Elength%2D%28len%7C%7C1%29%5D%2Efirst%5Fcolumn%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20last%5Fcolumn%3A%20lstack%5Blstack%2Elength%2D1%5D%2Elast%5Fcolumn%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20r%20%3D%20this%2EperformAction%2Ecall%28yyval%2C%20yytext%2C%20yyleng%2C%20yylineno%2C%20this%2Eyy%2C%20action%5B1%5D%2C%20vstack%2C%20lstack%29%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28typeof%20r%20%21%3D%3D%20%27undefined%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20r%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20pop%20off%20stack%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28len%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stack%20%3D%20stack%2Eslice%280%2C%2D1%2Alen%2A2%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20vstack%20%3D%20vstack%2Eslice%280%2C%20%2D1%2Alen%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lstack%20%3D%20lstack%2Eslice%280%2C%20%2D1%2Alen%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stack%2Epush%28this%2Eproductions%5F%5Baction%5B1%5D%5D%5B0%5D%29%3B%20%20%20%20%2F%2F%20push%20nonterminal%20%28reduce%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20vstack%2Epush%28yyval%2E%24%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lstack%2Epush%28yyval%2E%5F%24%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20goto%20new%20state%20%3D%20table%5BSTATE%5D%5BNONTERMINAL%5D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20newState%20%3D%20table%5Bstack%5Bstack%2Elength%2D2%5D%5D%5Bstack%5Bstack%2Elength%2D1%5D%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stack%2Epush%28newState%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20case%203%3A%20%2F%2F%20accept%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20return%20true%3B%0A%09%7D%7D%3B%0A%09%2F%2A%20Jison%20generated%20lexer%20%2A%2F%0A%09var%20lexer%20%3D%20%28function%28%29%7B%0A%09var%20lexer%20%3D%20%28%7BEOF%3A1%2C%0A%09parseError%3Afunction%20parseError%28str%2C%20hash%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Eyy%2EparseError%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Eyy%2EparseError%28str%2C%20hash%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20Error%28str%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%2C%0A%09setInput%3Afunction%20%28input%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2E%5Finput%20%3D%20input%3B%0A%09%20%20%20%20%20%20%20%20this%2E%5Fmore%20%3D%20this%2E%5Fless%20%3D%20this%2Edone%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20this%2Eyylineno%20%3D%20this%2Eyyleng%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20this%2Eyytext%20%3D%20this%2Ematched%20%3D%20this%2Ematch%20%3D%20%27%27%3B%0A%09%20%20%20%20%20%20%20%20this%2EconditionStack%20%3D%20%5B%27INITIAL%27%5D%3B%0A%09%20%20%20%20%20%20%20%20this%2Eyylloc%20%3D%20%7Bfirst%5Fline%3A1%2Cfirst%5Fcolumn%3A0%2Clast%5Fline%3A1%2Clast%5Fcolumn%3A0%7D%3B%0A%09%20%20%20%20%20%20%20%20return%20this%3B%0A%09%20%20%20%20%7D%2C%0A%09input%3Afunction%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20ch%20%3D%20this%2E%5Finput%5B0%5D%3B%0A%09%20%20%20%20%20%20%20%20this%2Eyytext%2B%3Dch%3B%0A%09%20%20%20%20%20%20%20%20this%2Eyyleng%2B%2B%3B%0A%09%20%20%20%20%20%20%20%20this%2Ematch%2B%3Dch%3B%0A%09%20%20%20%20%20%20%20%20this%2Ematched%2B%3Dch%3B%0A%09%20%20%20%20%20%20%20%20var%20lines%20%3D%20ch%2Ematch%28%2F%5Cn%2F%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28lines%29%20this%2Eyylineno%2B%2B%3B%0A%09%20%20%20%20%20%20%20%20this%2E%5Finput%20%3D%20this%2E%5Finput%2Eslice%281%29%3B%0A%09%20%20%20%20%20%20%20%20return%20ch%3B%0A%09%20%20%20%20%7D%2C%0A%09unput%3Afunction%20%28ch%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2E%5Finput%20%3D%20ch%20%2B%20this%2E%5Finput%3B%0A%09%20%20%20%20%20%20%20%20return%20this%3B%0A%09%20%20%20%20%7D%2C%0A%09more%3Afunction%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2E%5Fmore%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20return%20this%3B%0A%09%20%20%20%20%7D%2C%0A%09less%3Afunction%20%28n%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2E%5Finput%20%3D%20this%2Ematch%2Eslice%28n%29%20%2B%20this%2E%5Finput%3B%0A%09%20%20%20%20%7D%2C%0A%09pastInput%3Afunction%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20past%20%3D%20this%2Ematched%2Esubstr%280%2C%20this%2Ematched%2Elength%20%2D%20this%2Ematch%2Elength%29%3B%0A%09%20%20%20%20%20%20%20%20return%20%28past%2Elength%20%3E%2020%20%3F%20%27%2E%2E%2E%27%3A%27%27%29%20%2B%20past%2Esubstr%28%2D20%29%2Ereplace%28%2F%5Cn%2Fg%2C%20%22%22%29%3B%0A%09%20%20%20%20%7D%2C%0A%09upcomingInput%3Afunction%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20next%20%3D%20this%2Ematch%3B%0A%09%20%20%20%20%20%20%20%20if%20%28next%2Elength%20%3C%2020%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20next%20%2B%3D%20this%2E%5Finput%2Esubstr%280%2C%2020%2Dnext%2Elength%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20%28next%2Esubstr%280%2C20%29%2B%28next%2Elength%20%3E%2020%20%3F%20%27%2E%2E%2E%27%3A%27%27%29%29%2Ereplace%28%2F%5Cn%2Fg%2C%20%22%22%29%3B%0A%09%20%20%20%20%7D%2C%0A%09showPosition%3Afunction%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20pre%20%3D%20this%2EpastInput%28%29%3B%0A%09%20%20%20%20%20%20%20%20var%20c%20%3D%20new%20Array%28pre%2Elength%20%2B%201%29%2Ejoin%28%22%2D%22%29%3B%0A%09%20%20%20%20%20%20%20%20return%20pre%20%2B%20this%2EupcomingInput%28%29%20%2B%20%22%5Cn%22%20%2B%20c%2B%22%5E%22%3B%0A%09%20%20%20%20%7D%2C%0A%09next%3Afunction%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Edone%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20this%2EEOF%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28%21this%2E%5Finput%29%20this%2Edone%20%3D%20true%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20token%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20match%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20tempMatch%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20index%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20col%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20lines%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21this%2E%5Fmore%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Eyytext%20%3D%20%27%27%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Ematch%20%3D%20%27%27%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20var%20rules%20%3D%20this%2E%5FcurrentRules%28%29%3B%0A%09%20%20%20%20%20%20%20%20for%20%28var%20i%3D0%3Bi%20%3C%20rules%2Elength%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20tempMatch%20%3D%20this%2E%5Finput%2Ematch%28this%2Erules%5Brules%5Bi%5D%5D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28tempMatch%20%26%26%20%28%21match%20%7C%7C%20tempMatch%5B0%5D%2Elength%20%3E%20match%5B0%5D%2Elength%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20match%20%3D%20tempMatch%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20index%20%3D%20i%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21this%2Eoptions%2Eflex%29%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28match%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20lines%20%3D%20match%5B0%5D%2Ematch%28%2F%5Cn%2E%2A%2Fg%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28lines%29%20this%2Eyylineno%20%2B%3D%20lines%2Elength%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Eyylloc%20%3D%20%7Bfirst%5Fline%3A%20this%2Eyylloc%2Elast%5Fline%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20last%5Fline%3A%20this%2Eyylineno%2B1%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20first%5Fcolumn%3A%20this%2Eyylloc%2Elast%5Fcolumn%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20last%5Fcolumn%3A%20lines%20%3F%20lines%5Blines%2Elength%2D1%5D%2Elength%2D1%20%3A%20this%2Eyylloc%2Elast%5Fcolumn%20%2B%20match%5B0%5D%2Elength%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Eyytext%20%2B%3D%20match%5B0%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Ematch%20%2B%3D%20match%5B0%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Eyyleng%20%3D%20this%2Eyytext%2Elength%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%5Fmore%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%5Finput%20%3D%20this%2E%5Finput%2Eslice%28match%5B0%5D%2Elength%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Ematched%20%2B%3D%20match%5B0%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20token%20%3D%20this%2EperformAction%2Ecall%28this%2C%20this%2Eyy%2C%20this%2C%20rules%5Bindex%5D%2Cthis%2EconditionStack%5Bthis%2EconditionStack%2Elength%2D1%5D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28this%2Edone%20%26%26%20this%2E%5Finput%29%20this%2Edone%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28token%29%20return%20token%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20else%20return%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28this%2E%5Finput%20%3D%3D%3D%20%22%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20this%2EEOF%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EparseError%28%27Lexical%20error%20on%20line%20%27%2B%28this%2Eyylineno%2B1%29%2B%27%2E%20Unrecognized%20text%2E%5Cn%27%2Bthis%2EshowPosition%28%29%2C%20%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7Btext%3A%20%22%22%2C%20token%3A%20null%2C%20line%3A%20this%2Eyylineno%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%2C%0A%09lex%3Afunction%20lex%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20r%20%3D%20this%2Enext%28%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28typeof%20r%20%21%3D%3D%20%27undefined%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20r%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20this%2Elex%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%2C%0A%09begin%3Afunction%20begin%28condition%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2EconditionStack%2Epush%28condition%29%3B%0A%09%20%20%20%20%7D%2C%0A%09popState%3Afunction%20popState%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20this%2EconditionStack%2Epop%28%29%3B%0A%09%20%20%20%20%7D%2C%0A%09%5FcurrentRules%3Afunction%20%5FcurrentRules%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20this%2Econditions%5Bthis%2EconditionStack%5Bthis%2EconditionStack%2Elength%2D1%5D%5D%2Erules%3B%0A%09%20%20%20%20%7D%2C%0A%09topState%3Afunction%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20this%2EconditionStack%5Bthis%2EconditionStack%2Elength%2D2%5D%3B%0A%09%20%20%20%20%7D%2C%0A%09pushState%3Afunction%20begin%28condition%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Ebegin%28condition%29%3B%0A%09%20%20%20%20%7D%7D%29%3B%0A%09lexer%2Eoptions%20%3D%20%7B%7D%3B%0A%09lexer%2EperformAction%20%3D%20function%20anonymous%28yy%2Cyy%5F%2C%24avoiding%5Fname%5Fcollisions%2CYY%5FSTART%29%20%7B%0A%0A%09var%20YYSTATE%3DYY%5FSTART%0A%09switch%28%24avoiding%5Fname%5Fcollisions%29%20%7B%0A%09case%200%3A%2F%2A%20skip%20whitespace%20%2A%2F%0A%09break%3B%0A%09case%201%3Areturn%206%0A%09break%3B%0A%09case%202%3Ayy%5F%2Eyytext%20%3D%20yy%5F%2Eyytext%2Esubstr%281%2Cyy%5F%2Eyyleng%2D2%29%3B%20return%204%0A%09break%3B%0A%09case%203%3Areturn%2017%0A%09break%3B%0A%09case%204%3Areturn%2018%0A%09break%3B%0A%09case%205%3Areturn%2023%0A%09break%3B%0A%09case%206%3Areturn%2024%0A%09break%3B%0A%09case%207%3Areturn%2022%0A%09break%3B%0A%09case%208%3Areturn%2021%0A%09break%3B%0A%09case%209%3Areturn%2010%0A%09break%3B%0A%09case%2010%3Areturn%2011%0A%09break%3B%0A%09case%2011%3Areturn%208%0A%09break%3B%0A%09case%2012%3Areturn%2014%0A%09break%3B%0A%09case%2013%3Areturn%20%27INVALID%27%0A%09break%3B%0A%09%7D%0A%09%7D%3B%0A%09lexer%2Erules%20%3D%20%5B%2F%5E%28%3F%3A%5Cs%2B%29%2F%2C%2F%5E%28%3F%3A%28%2D%3F%28%5B0%2D9%5D%7C%5B1%2D9%5D%5B0%2D9%5D%2B%29%29%28%5C%2E%5B0%2D9%5D%2B%29%3F%28%5BeE%5D%5B%2D%2B%5D%3F%5B0%2D9%5D%2B%29%3F%5Cb%29%2F%2C%2F%5E%28%3F%3A%22%28%3F%3A%5C%5C%5B%5C%5C%22bfnrt%2F%5D%7C%5C%5Cu%5Ba%2DfA%2DF0%2D9%5D%7B4%7D%7C%5B%5E%5C%5C%5C0%2D%5Cx09%5Cx0a%2D%5Cx1f%22%5D%29%2A%22%29%2F%2C%2F%5E%28%3F%3A%5C%7B%29%2F%2C%2F%5E%28%3F%3A%5C%7D%29%2F%2C%2F%5E%28%3F%3A%5C%5B%29%2F%2C%2F%5E%28%3F%3A%5C%5D%29%2F%2C%2F%5E%28%3F%3A%2C%29%2F%2C%2F%5E%28%3F%3A%3A%29%2F%2C%2F%5E%28%3F%3Atrue%5Cb%29%2F%2C%2F%5E%28%3F%3Afalse%5Cb%29%2F%2C%2F%5E%28%3F%3Anull%5Cb%29%2F%2C%2F%5E%28%3F%3A%24%29%2F%2C%2F%5E%28%3F%3A%2E%29%2F%5D%3B%0A%09lexer%2Econditions%20%3D%20%7B%22INITIAL%22%3A%7B%22rules%22%3A%5B0%2C1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%5D%2C%22inclusive%22%3Atrue%7D%7D%3B%0A%0A%0A%09%3B%0A%09return%20lexer%3B%7D%29%28%29%0A%09parser%2Elexer%20%3D%20lexer%3B%0A%09return%20parser%3B%0A%09%7D%29%28%29%3B%0A%09if%20%28true%29%20%7B%0A%09%20%20exports%2Eparser%20%3D%20jsonlint%3B%0A%09%20%20exports%2Eparse%20%3D%20jsonlint%2Eparse%3B%0A%09%7D%0A%0A%2F%2A%2A%2A%2F%20%7D%2C%0A%2F%2A%2013%20%2A%2F%0A%2F%2A%2A%2A%2F%20function%28module%2C%20exports%2C%20%5F%5Fwebpack%5Frequire%5F%5F%29%20%7B%0A%0A%09%2F%2A%20%2A%2A%2A%2A%2A%20BEGIN%20LICENSE%20BLOCK%20%2A%2A%2A%2A%2A%0A%09%20%2A%20Distributed%20under%20the%20BSD%20license%3A%0A%09%20%2A%0A%09%20%2A%20Copyright%20%28c%29%202010%2C%20Ajax%2Eorg%20B%2EV%2E%0A%09%20%2A%20All%20rights%20reserved%2E%0A%09%20%2A%20%0A%09%20%2A%20Redistribution%20and%20use%20in%20source%20and%20binary%20forms%2C%20with%20or%20without%0A%09%20%2A%20modification%2C%20are%20permitted%20provided%20that%20the%20following%20conditions%20are%20met%3A%0A%09%20%2A%20%20%20%20%20%2A%20Redistributions%20of%20source%20code%20must%20retain%20the%20above%20copyright%0A%09%20%2A%20%20%20%20%20%20%20notice%2C%20this%20list%20of%20conditions%20and%20the%20following%20disclaimer%2E%0A%09%20%2A%20%20%20%20%20%2A%20Redistributions%20in%20binary%20form%20must%20reproduce%20the%20above%20copyright%0A%09%20%2A%20%20%20%20%20%20%20notice%2C%20this%20list%20of%20conditions%20and%20the%20following%20disclaimer%20in%20the%0A%09%20%2A%20%20%20%20%20%20%20documentation%20and%2For%20other%20materials%20provided%20with%20the%20distribution%2E%0A%09%20%2A%20%20%20%20%20%2A%20Neither%20the%20name%20of%20Ajax%2Eorg%20B%2EV%2E%20nor%20the%0A%09%20%2A%20%20%20%20%20%20%20names%20of%20its%20contributors%20may%20be%20used%20to%20endorse%20or%20promote%20products%0A%09%20%2A%20%20%20%20%20%20%20derived%20from%20this%20software%20without%20specific%20prior%20written%20permission%2E%0A%09%20%2A%20%0A%09%20%2A%20THIS%20SOFTWARE%20IS%20PROVIDED%20BY%20THE%20COPYRIGHT%20HOLDERS%20AND%20CONTRIBUTORS%20%22AS%20IS%22%20AND%0A%09%20%2A%20ANY%20EXPRESS%20OR%20IMPLIED%20WARRANTIES%2C%20INCLUDING%2C%20BUT%20NOT%20LIMITED%20TO%2C%20THE%20IMPLIED%0A%09%20%2A%20WARRANTIES%20OF%20MERCHANTABILITY%20AND%20FITNESS%20FOR%20A%20PARTICULAR%20PURPOSE%20ARE%0A%09%20%2A%20DISCLAIMED%2E%20IN%20NO%20EVENT%20SHALL%20AJAX%2EORG%20B%2EV%2E%20BE%20LIABLE%20FOR%20ANY%0A%09%20%2A%20DIRECT%2C%20INDIRECT%2C%20INCIDENTAL%2C%20SPECIAL%2C%20EXEMPLARY%2C%20OR%20CONSEQUENTIAL%20DAMAGES%0A%09%20%2A%20%28INCLUDING%2C%20BUT%20NOT%20LIMITED%20TO%2C%20PROCUREMENT%20OF%20SUBSTITUTE%20GOODS%20OR%20SERVICES%3B%0A%09%20%2A%20LOSS%20OF%20USE%2C%20DATA%2C%20OR%20PROFITS%3B%20OR%20BUSINESS%20INTERRUPTION%29%20HOWEVER%20CAUSED%20AND%0A%09%20%2A%20ON%20ANY%20THEORY%20OF%20LIABILITY%2C%20WHETHER%20IN%20CONTRACT%2C%20STRICT%20LIABILITY%2C%20OR%20TORT%0A%09%20%2A%20%28INCLUDING%20NEGLIGENCE%20OR%20OTHERWISE%29%20ARISING%20IN%20ANY%20WAY%20OUT%20OF%20THE%20USE%20OF%20THIS%0A%09%20%2A%20SOFTWARE%2C%20EVEN%20IF%20ADVISED%20OF%20THE%20POSSIBILITY%20OF%20SUCH%20DAMAGE%2E%0A%09%20%2A%0A%09%20%2A%20%2A%2A%2A%2A%2A%20END%20LICENSE%20BLOCK%20%2A%2A%2A%2A%2A%20%2A%2F%0A%0A%09ace%2Edefine%28%27ace%2Ftheme%2Fjsoneditor%27%2C%20%5B%27require%27%2C%20%27exports%27%2C%20%27module%27%2C%20%27ace%2Flib%2Fdom%27%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%0A%09exports%2EisDark%20%3D%20false%3B%0A%09exports%2EcssClass%20%3D%20%22ace%2Djsoneditor%22%3B%0A%09exports%2EcssText%20%3D%20%22%2Eace%2Djsoneditor%20%2Eace%5Fgutter%20%7B%5C%0A%09background%3A%20%23ebebeb%3B%5C%0A%09color%3A%20%23333%5C%0A%09%7D%5C%0A%09%5C%0A%09%2Eace%2Djsoneditor%2Eace%5Feditor%20%7B%5C%0A%09font%2Dfamily%3A%20droid%20sans%20mono%2C%20monospace%2C%20courier%20new%2C%20courier%2C%20sans%2Dserif%3B%5C%0A%09line%2Dheight%3A%201%2E3%3B%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fprint%2Dmargin%20%7B%5C%0A%09width%3A%201px%3B%5C%0A%09background%3A%20%23e8e8e8%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fscroller%20%7B%5C%0A%09background%2Dcolor%3A%20%23FFFFFF%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Ftext%2Dlayer%20%7B%5C%0A%09color%3A%20gray%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fvariable%20%7B%5C%0A%09color%3A%20%231a1a1a%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fcursor%20%7B%5C%0A%09border%2Dleft%3A%202px%20solid%20%23000000%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Foverwrite%2Dcursors%20%2Eace%5Fcursor%20%7B%5C%0A%09border%2Dleft%3A%200px%3B%5C%0A%09border%2Dbottom%3A%201px%20solid%20%23000000%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fmarker%2Dlayer%20%2Eace%5Fselection%20%7B%5C%0A%09background%3A%20%23D5DDF6%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%2Eace%5Fmultiselect%20%2Eace%5Fselection%2Eace%5Fstart%20%7B%5C%0A%09box%2Dshadow%3A%200%200%203px%200px%20%23FFFFFF%3B%5C%0A%09border%2Dradius%3A%202px%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fmarker%2Dlayer%20%2Eace%5Fstep%20%7B%5C%0A%09background%3A%20rgb%28255%2C%20255%2C%200%29%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fmarker%2Dlayer%20%2Eace%5Fbracket%20%7B%5C%0A%09margin%3A%20%2D1px%200%200%20%2D1px%3B%5C%0A%09border%3A%201px%20solid%20%23BFBFBF%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fmarker%2Dlayer%20%2Eace%5Factive%2Dline%20%7B%5C%0A%09background%3A%20%23FFFBD1%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fgutter%2Dactive%2Dline%20%7B%5C%0A%09background%2Dcolor%20%3A%20%23dcdcdc%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fmarker%2Dlayer%20%2Eace%5Fselected%2Dword%20%7B%5C%0A%09border%3A%201px%20solid%20%23D5DDF6%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Finvisible%20%7B%5C%0A%09color%3A%20%23BFBFBF%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fkeyword%2C%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fmeta%2C%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fsupport%2Eace%5Fconstant%2Eace%5Fproperty%2Dvalue%20%7B%5C%0A%09color%3A%20%23AF956F%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fkeyword%2Eace%5Foperator%20%7B%5C%0A%09color%3A%20%23484848%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fkeyword%2Eace%5Fother%2Eace%5Funit%20%7B%5C%0A%09color%3A%20%2396DC5F%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fconstant%2Eace%5Flanguage%20%7B%5C%0A%09color%3A%20darkorange%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fconstant%2Eace%5Fnumeric%20%7B%5C%0A%09color%3A%20red%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fconstant%2Eace%5Fcharacter%2Eace%5Fentity%20%7B%5C%0A%09color%3A%20%23BF78CC%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Finvalid%20%7B%5C%0A%09color%3A%20%23FFFFFF%3B%5C%0A%09background%2Dcolor%3A%20%23FF002A%3B%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Ffold%20%7B%5C%0A%09background%2Dcolor%3A%20%23AF956F%3B%5C%0A%09border%2Dcolor%3A%20%23000000%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fstorage%2C%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fsupport%2Eace%5Fclass%2C%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fsupport%2Eace%5Ffunction%2C%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fsupport%2Eace%5Fother%2C%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fsupport%2Eace%5Ftype%20%7B%5C%0A%09color%3A%20%23C52727%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fstring%20%7B%5C%0A%09color%3A%20green%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fcomment%20%7B%5C%0A%09color%3A%20%23BCC8BA%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fentity%2Eace%5Fname%2Eace%5Ftag%2C%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fentity%2Eace%5Fother%2Eace%5Fattribute%2Dname%20%7B%5C%0A%09color%3A%20%23606060%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Fmarkup%2Eace%5Funderline%20%7B%5C%0A%09text%2Ddecoration%3A%20underline%5C%0A%09%7D%5C%0A%09%2Eace%2Djsoneditor%20%2Eace%5Findent%2Dguide%20%7B%5C%0A%09background%3A%20url%28%5C%22data%3Aimage%2Fpng%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4%2F%2F%2F%2Ff4bLly%2F%2FBwAmVgd1%2Fw11%2FgAAAABJRU5ErkJggg%3D%3D%5C%22%29%20right%20repeat%2Dy%5C%0A%09%7D%22%3B%0A%0A%09var%20dom%20%3D%20acequire%28%22%2E%2E%2Flib%2Fdom%22%29%3B%0A%09dom%2EimportCssString%28exports%2EcssText%2C%20exports%2EcssClass%29%3B%0A%09%7D%29%3B%0A%0A%0A%2F%2A%2A%2A%2F%20%7D%2C%0A%2F%2A%2014%20%2A%2F%0A%2F%2A%2A%2A%2F%20function%28module%2C%20exports%2C%20%5F%5Fwebpack%5Frequire%5F%5F%29%20%7B%0A%0A%09%2F%2A%20%2A%2A%2A%2A%2A%20BEGIN%20LICENSE%20BLOCK%20%2A%2A%2A%2A%2A%0A%09%20%2A%20Distributed%20under%20the%20BSD%20license%3A%0A%09%20%2A%0A%09%20%2A%20Copyright%20%28c%29%202010%2C%20Ajax%2Eorg%20B%2EV%2E%0A%09%20%2A%20All%20rights%20reserved%2E%0A%09%20%2A%0A%09%20%2A%20Redistribution%20and%20use%20in%20source%20and%20binary%20forms%2C%20with%20or%20without%0A%09%20%2A%20modification%2C%20are%20permitted%20provided%20that%20the%20following%20conditions%20are%20met%3A%0A%09%20%2A%20%20%20%20%20%2A%20Redistributions%20of%20source%20code%20must%20retain%20the%20above%20copyright%0A%09%20%2A%20%20%20%20%20%20%20notice%2C%20this%20list%20of%20conditions%20and%20the%20following%20disclaimer%2E%0A%09%20%2A%20%20%20%20%20%2A%20Redistributions%20in%20binary%20form%20must%20reproduce%20the%20above%20copyright%0A%09%20%2A%20%20%20%20%20%20%20notice%2C%20this%20list%20of%20conditions%20and%20the%20following%20disclaimer%20in%20the%0A%09%20%2A%20%20%20%20%20%20%20documentation%20and%2For%20other%20materials%20provided%20with%20the%20distribution%2E%0A%09%20%2A%20%20%20%20%20%2A%20Neither%20the%20name%20of%20Ajax%2Eorg%20B%2EV%2E%20nor%20the%0A%09%20%2A%20%20%20%20%20%20%20names%20of%20its%20contributors%20may%20be%20used%20to%20endorse%20or%20promote%20products%0A%09%20%2A%20%20%20%20%20%20%20derived%20from%20this%20software%20without%20specific%20prior%20written%20permission%2E%0A%09%20%2A%0A%09%20%2A%20THIS%20SOFTWARE%20IS%20PROVIDED%20BY%20THE%20COPYRIGHT%20HOLDERS%20AND%20CONTRIBUTORS%20%22AS%20IS%22%20AND%0A%09%20%2A%20ANY%20EXPRESS%20OR%20IMPLIED%20WARRANTIES%2C%20INCLUDING%2C%20BUT%20NOT%20LIMITED%20TO%2C%20THE%20IMPLIED%0A%09%20%2A%20WARRANTIES%20OF%20MERCHANTABILITY%20AND%20FITNESS%20FOR%20A%20PARTICULAR%20PURPOSE%20ARE%0A%09%20%2A%20DISCLAIMED%2E%20IN%20NO%20EVENT%20SHALL%20AJAX%2EORG%20B%2EV%2E%20BE%20LIABLE%20FOR%20ANY%0A%09%20%2A%20DIRECT%2C%20INDIRECT%2C%20INCIDENTAL%2C%20SPECIAL%2C%20EXEMPLARY%2C%20OR%20CONSEQUENTIAL%20DAMAGES%0A%09%20%2A%20%28INCLUDING%2C%20BUT%20NOT%20LIMITED%20TO%2C%20PROCUREMENT%20OF%20SUBSTITUTE%20GOODS%20OR%20SERVICES%3B%0A%09%20%2A%20LOSS%20OF%20USE%2C%20DATA%2C%20OR%20PROFITS%3B%20OR%20BUSINESS%20INTERRUPTION%29%20HOWEVER%20CAUSED%20AND%0A%09%20%2A%20ON%20ANY%20THEORY%20OF%20LIABILITY%2C%20WHETHER%20IN%20CONTRACT%2C%20STRICT%20LIABILITY%2C%20OR%20TORT%0A%09%20%2A%20%28INCLUDING%20NEGLIGENCE%20OR%20OTHERWISE%29%20ARISING%20IN%20ANY%20WAY%20OUT%20OF%20THE%20USE%20OF%20THIS%0A%09%20%2A%20SOFTWARE%2C%20EVEN%20IF%20ADVISED%20OF%20THE%20POSSIBILITY%20OF%20SUCH%20DAMAGE%2E%0A%09%20%2A%0A%09%20%2A%20%2A%2A%2A%2A%2A%20END%20LICENSE%20BLOCK%20%2A%2A%2A%2A%2A%20%2A%2F%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Define%20a%20module%20along%20with%20a%20payload%0A%09%20%2A%20%40param%20module%20a%20name%20for%20the%20payload%0A%09%20%2A%20%40param%20payload%20a%20function%20to%20call%20with%20%28acequire%2C%20exports%2C%20module%29%20params%0A%09%20%2A%2F%0A%0A%09%28function%28%29%20%7B%0A%0A%09var%20ACE%5FNAMESPACE%20%3D%20%22ace%22%3B%0A%0A%09var%20global%20%3D%20%28function%28%29%20%7B%0A%09%20%20%20%20return%20this%3B%0A%09%7D%29%28%29%3B%0A%0A%0A%09if%20%28%21ACE%5FNAMESPACE%20%26%26%20typeof%20acequirejs%20%21%3D%3D%20%22undefined%22%29%0A%09%20%20%20%20return%3B%0A%0A%0A%09var%20%5Fdefine%20%3D%20function%28module%2C%20deps%2C%20payload%29%20%7B%0A%09%20%20%20%20if%20%28typeof%20module%20%21%3D%3D%20%27string%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%5Fdefine%2Eoriginal%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%5Fdefine%2Eoriginal%2Eapply%28window%2C%20arguments%29%3B%0A%09%20%20%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20console%2Eerror%28%27dropping%20module%20because%20define%20wasn%5C%27t%20a%20string%2E%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20console%2Etrace%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20if%20%28arguments%2Elength%20%3D%3D%202%29%0A%09%20%20%20%20%20%20%20%20payload%20%3D%20deps%3B%0A%0A%09%20%20%20%20if%20%28%21%5Fdefine%2Emodules%29%20%7B%0A%09%20%20%20%20%20%20%20%20%5Fdefine%2Emodules%20%3D%20%7B%7D%3B%0A%09%20%20%20%20%20%20%20%20%5Fdefine%2Epayloads%20%3D%20%7B%7D%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20%5Fdefine%2Epayloads%5Bmodule%5D%20%3D%20payload%3B%0A%09%20%20%20%20%5Fdefine%2Emodules%5Bmodule%5D%20%3D%20null%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Get%20at%20functionality%20ace%2Edefine%28%29ed%20using%20the%20function%20above%0A%09%20%2A%2F%0A%09var%20%5Facequire%20%3D%20function%28parentId%2C%20module%2C%20callback%29%20%7B%0A%09%20%20%20%20if%20%28Object%2Eprototype%2EtoString%2Ecall%28module%29%20%3D%3D%3D%20%22%5Bobject%20Array%5D%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20params%20%3D%20%5B%5D%3B%0A%09%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%2C%20l%20%3D%20module%2Elength%3B%20i%20%3C%20l%3B%20%2B%2Bi%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20dep%20%3D%20lookup%28parentId%2C%20module%5Bi%5D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21dep%20%26%26%20%5Facequire%2Eoriginal%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%5Facequire%2Eoriginal%2Eapply%28window%2C%20arguments%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20params%2Epush%28dep%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28callback%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20callback%2Eapply%28null%2C%20params%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20if%20%28typeof%20module%20%3D%3D%3D%20%27string%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20payload%20%3D%20lookup%28parentId%2C%20module%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21payload%20%26%26%20%5Facequire%2Eoriginal%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20%5Facequire%2Eoriginal%2Eapply%28window%2C%20arguments%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28callback%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20callback%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20return%20payload%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%5Facequire%2Eoriginal%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20%5Facequire%2Eoriginal%2Eapply%28window%2C%20arguments%29%3B%0A%09%20%20%20%20%7D%0A%09%7D%3B%0A%0A%09var%20normalizeModule%20%3D%20function%28parentId%2C%20moduleName%29%20%7B%0A%09%20%20%20%20%2F%2F%20normalize%20plugin%20acequires%0A%09%20%20%20%20if%20%28moduleName%2EindexOf%28%22%21%22%29%20%21%3D%3D%20%2D1%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20chunks%20%3D%20moduleName%2Esplit%28%22%21%22%29%3B%0A%09%20%20%20%20%20%20%20%20return%20normalizeModule%28parentId%2C%20chunks%5B0%5D%29%20%2B%20%22%21%22%20%2B%20normalizeModule%28parentId%2C%20chunks%5B1%5D%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20%2F%2F%20normalize%20relative%20acequires%0A%09%20%20%20%20if%20%28moduleName%2EcharAt%280%29%20%3D%3D%20%22%2E%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20base%20%3D%20parentId%2Esplit%28%22%2F%22%29%2Eslice%280%2C%20%2D1%29%2Ejoin%28%22%2F%22%29%3B%0A%09%20%20%20%20%20%20%20%20moduleName%20%3D%20base%20%2B%20%22%2F%22%20%2B%20moduleName%3B%0A%0A%09%20%20%20%20%20%20%20%20while%28moduleName%2EindexOf%28%22%2E%22%29%20%21%3D%3D%20%2D1%20%26%26%20previous%20%21%3D%20moduleName%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20previous%20%3D%20moduleName%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20moduleName%20%3D%20moduleName%2Ereplace%28%2F%5C%2F%5C%2E%5C%2F%2F%2C%20%22%2F%22%29%2Ereplace%28%2F%5B%5E%5C%2F%5D%2B%5C%2F%5C%2E%5C%2E%5C%2F%2F%2C%20%22%22%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20return%20moduleName%3B%0A%09%7D%3B%0A%0A%09%2F%2A%2A%0A%09%20%2A%20Internal%20function%20to%20lookup%20moduleNames%20and%20resolve%20them%20by%20calling%20the%0A%09%20%2A%20definition%20function%20if%20needed%2E%0A%09%20%2A%2F%0A%09var%20lookup%20%3D%20function%28parentId%2C%20moduleName%29%20%7B%0A%0A%09%20%20%20%20moduleName%20%3D%20normalizeModule%28parentId%2C%20moduleName%29%3B%0A%0A%09%20%20%20%20var%20module%20%3D%20%5Fdefine%2Emodules%5BmoduleName%5D%3B%0A%09%20%20%20%20if%20%28%21module%29%20%7B%0A%09%20%20%20%20%20%20%20%20module%20%3D%20%5Fdefine%2Epayloads%5BmoduleName%5D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28typeof%20module%20%3D%3D%3D%20%27function%27%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20exports%20%3D%20%7B%7D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20mod%20%3D%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20id%3A%20moduleName%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20uri%3A%20%27%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20exports%3A%20exports%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20packaged%3A%20true%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20req%20%3D%20function%28module%2C%20callback%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%5Facequire%28moduleName%2C%20module%2C%20callback%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20returnValue%20%3D%20module%28req%2C%20exports%2C%20mod%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20exports%20%3D%20returnValue%20%7C%7C%20mod%2Eexports%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%5Fdefine%2Emodules%5BmoduleName%5D%20%3D%20exports%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20delete%20%5Fdefine%2Epayloads%5BmoduleName%5D%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20module%20%3D%20%5Fdefine%2Emodules%5BmoduleName%5D%20%3D%20exports%20%7C%7C%20module%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20return%20module%3B%0A%09%7D%3B%0A%0A%09function%20exportAce%28ns%29%20%7B%0A%09%20%20%20%20var%20acequire%20%3D%20function%28module%2C%20callback%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20%5Facequire%28%22%22%2C%20module%2C%20callback%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20var%20root%20%3D%20global%3B%0A%09%20%20%20%20if%20%28ns%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%21global%5Bns%5D%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20global%5Bns%5D%20%3D%20%7B%7D%3B%0A%09%20%20%20%20%20%20%20%20root%20%3D%20global%5Bns%5D%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20if%20%28%21root%2Edefine%20%7C%7C%20%21root%2Edefine%2Epackaged%29%20%7B%0A%09%20%20%20%20%20%20%20%20%5Fdefine%2Eoriginal%20%3D%20root%2Edefine%3B%0A%09%20%20%20%20%20%20%20%20root%2Edefine%20%3D%20%5Fdefine%3B%0A%09%20%20%20%20%20%20%20%20root%2Edefine%2Epackaged%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20if%20%28%21root%2Eacequire%20%7C%7C%20%21root%2Eacequire%2Epackaged%29%20%7B%0A%09%20%20%20%20%20%20%20%20%5Facequire%2Eoriginal%20%3D%20root%2Eacequire%3B%0A%09%20%20%20%20%20%20%20%20root%2Eacequire%20%3D%20acequire%3B%0A%09%20%20%20%20%20%20%20%20root%2Eacequire%2Epackaged%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%09%7D%0A%0A%09exportAce%28ACE%5FNAMESPACE%29%3B%0A%0A%09%7D%29%28%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Flib%2Fregexp%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%0A%09%20%20%20%20var%20real%20%3D%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20exec%3A%20RegExp%2Eprototype%2Eexec%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20test%3A%20RegExp%2Eprototype%2Etest%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20match%3A%20String%2Eprototype%2Ematch%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20replace%3A%20String%2Eprototype%2Ereplace%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20split%3A%20String%2Eprototype%2Esplit%0A%09%20%20%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%20%20compliantExecNpcg%20%3D%20real%2Eexec%2Ecall%28%2F%28%29%3F%3F%2F%2C%20%22%22%29%5B1%5D%20%3D%3D%3D%20undefined%2C%20%2F%2F%20check%20%60exec%60%20handling%20of%20nonparticipating%20capturing%20groups%0A%09%20%20%20%20%20%20%20%20compliantLastIndexIncrement%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20x%20%3D%20%2F%5E%2Fg%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20real%2Etest%2Ecall%28x%2C%20%22%22%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20%21x%2ElastIndex%3B%0A%09%20%20%20%20%20%20%20%20%7D%28%29%3B%0A%0A%09%20%20%20%20if%20%28compliantLastIndexIncrement%20%26%26%20compliantExecNpcg%29%0A%09%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20RegExp%2Eprototype%2Eexec%20%3D%20function%20%28str%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20match%20%3D%20real%2Eexec%2Eapply%28this%2C%20arguments%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20name%2C%20r2%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%20typeof%28str%29%20%3D%3D%20%27string%27%20%26%26%20match%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21compliantExecNpcg%20%26%26%20match%2Elength%20%3E%201%20%26%26%20indexOf%28match%2C%20%22%22%29%20%3E%20%2D1%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20r2%20%3D%20RegExp%28this%2Esource%2C%20real%2Ereplace%2Ecall%28getNativeFlags%28this%29%2C%20%22g%22%2C%20%22%22%29%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20real%2Ereplace%2Ecall%28str%2Eslice%28match%2Eindex%29%2C%20r2%2C%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%201%3B%20i%20%3C%20arguments%2Elength%20%2D%202%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28arguments%5Bi%5D%20%3D%3D%3D%20undefined%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20match%5Bi%5D%20%3D%20undefined%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28this%2E%5Fxregexp%20%26%26%20this%2E%5Fxregexp%2EcaptureNames%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%201%3B%20i%20%3C%20match%2Elength%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name%20%3D%20this%2E%5Fxregexp%2EcaptureNames%5Bi%20%2D%201%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28name%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20match%5Bname%5D%20%3D%20match%5Bi%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21compliantLastIndexIncrement%20%26%26%20this%2Eglobal%20%26%26%20%21match%5B0%5D%2Elength%20%26%26%20%28this%2ElastIndex%20%3E%20match%2Eindex%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2ElastIndex%2D%2D%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20match%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20if%20%28%21compliantLastIndexIncrement%29%20%7B%0A%09%20%20%20%20%20%20%20%20RegExp%2Eprototype%2Etest%20%3D%20function%20%28str%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20match%20%3D%20real%2Eexec%2Ecall%28this%2C%20str%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28match%20%26%26%20this%2Eglobal%20%26%26%20%21match%5B0%5D%2Elength%20%26%26%20%28this%2ElastIndex%20%3E%20match%2Eindex%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2ElastIndex%2D%2D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20%21%21match%3B%0A%09%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20function%20getNativeFlags%20%28regex%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20%28regex%2Eglobal%20%20%20%20%20%3F%20%22g%22%20%3A%20%22%22%29%20%2B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28regex%2EignoreCase%20%3F%20%22i%22%20%3A%20%22%22%29%20%2B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28regex%2Emultiline%20%20%3F%20%22m%22%20%3A%20%22%22%29%20%2B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28regex%2Eextended%20%20%20%3F%20%22x%22%20%3A%20%22%22%29%20%2B%20%2F%2F%20Proposed%20for%20ES4%3B%20included%20in%20AS3%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%28regex%2Esticky%20%20%20%20%20%3F%20%22y%22%20%3A%20%22%22%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20function%20indexOf%20%28array%2C%20item%2C%20from%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28Array%2Eprototype%2EindexOf%29%20%2F%2F%20Use%20the%20native%20array%20method%20if%20available%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20array%2EindexOf%28item%2C%20from%29%3B%0A%09%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%20from%20%7C%7C%200%3B%20i%20%3C%20array%2Elength%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28array%5Bi%5D%20%3D%3D%3D%20item%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20i%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20%2D1%3B%0A%09%20%20%20%20%7D%0A%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Flib%2Fes5%2Dshim%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%0A%09function%20Empty%28%29%20%7B%7D%0A%0A%09if%20%28%21Function%2Eprototype%2Ebind%29%20%7B%0A%09%20%20%20%20Function%2Eprototype%2Ebind%20%3D%20function%20bind%28that%29%20%7B%20%2F%2F%20%2Elength%20is%201%0A%09%20%20%20%20%20%20%20%20var%20target%20%3D%20this%3B%0A%09%20%20%20%20%20%20%20%20if%20%28typeof%20target%20%21%3D%20%22function%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28%22Function%2Eprototype%2Ebind%20called%20on%20incompatible%20%22%20%2B%20target%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20var%20args%20%3D%20slice%2Ecall%28arguments%2C%201%29%3B%20%2F%2F%20for%20normal%20call%0A%09%20%20%20%20%20%20%20%20var%20bound%20%3D%20function%20%28%29%20%7B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28this%20instanceof%20bound%29%20%7B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20result%20%3D%20target%2Eapply%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20args%2Econcat%28slice%2Ecall%28arguments%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28Object%28result%29%20%3D%3D%3D%20result%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20result%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20this%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20target%2Eapply%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20that%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20args%2Econcat%28slice%2Ecall%28arguments%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%29%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%20%20%20%20if%28target%2Eprototype%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20Empty%2Eprototype%20%3D%20target%2Eprototype%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20bound%2Eprototype%20%3D%20new%20Empty%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20Empty%2Eprototype%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20bound%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09var%20call%20%3D%20Function%2Eprototype%2Ecall%3B%0A%09var%20prototypeOfArray%20%3D%20Array%2Eprototype%3B%0A%09var%20prototypeOfObject%20%3D%20Object%2Eprototype%3B%0A%09var%20slice%20%3D%20prototypeOfArray%2Eslice%3B%0A%09var%20%5FtoString%20%3D%20call%2Ebind%28prototypeOfObject%2EtoString%29%3B%0A%09var%20owns%20%3D%20call%2Ebind%28prototypeOfObject%2EhasOwnProperty%29%3B%0A%09var%20defineGetter%3B%0A%09var%20defineSetter%3B%0A%09var%20lookupGetter%3B%0A%09var%20lookupSetter%3B%0A%09var%20supportsAccessors%3B%0A%09if%20%28%28supportsAccessors%20%3D%20owns%28prototypeOfObject%2C%20%22%5F%5FdefineGetter%5F%5F%22%29%29%29%20%7B%0A%09%20%20%20%20defineGetter%20%3D%20call%2Ebind%28prototypeOfObject%2E%5F%5FdefineGetter%5F%5F%29%3B%0A%09%20%20%20%20defineSetter%20%3D%20call%2Ebind%28prototypeOfObject%2E%5F%5FdefineSetter%5F%5F%29%3B%0A%09%20%20%20%20lookupGetter%20%3D%20call%2Ebind%28prototypeOfObject%2E%5F%5FlookupGetter%5F%5F%29%3B%0A%09%20%20%20%20lookupSetter%20%3D%20call%2Ebind%28prototypeOfObject%2E%5F%5FlookupSetter%5F%5F%29%3B%0A%09%7D%0A%09if%20%28%5B1%2C2%5D%2Esplice%280%29%2Elength%20%21%3D%202%29%20%7B%0A%09%20%20%20%20if%28function%28%29%20%7B%20%2F%2F%20test%20IE%20%3C%209%20to%20splice%20bug%20%2D%20see%20issue%20%23138%0A%09%20%20%20%20%20%20%20%20function%20makeArray%28l%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20a%20%3D%20new%20Array%28l%2B2%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20a%5B0%5D%20%3D%20a%5B1%5D%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20a%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20var%20array%20%3D%20%5B%5D%2C%20lengthBefore%3B%0A%09%20%20%20%20%20%20%20%20%0A%09%20%20%20%20%20%20%20%20array%2Esplice%2Eapply%28array%2C%20makeArray%2820%29%29%3B%0A%09%20%20%20%20%20%20%20%20array%2Esplice%2Eapply%28array%2C%20makeArray%2826%29%29%3B%0A%0A%09%20%20%20%20%20%20%20%20lengthBefore%20%3D%20array%2Elength%3B%20%2F%2F46%0A%09%20%20%20%20%20%20%20%20array%2Esplice%285%2C%200%2C%20%22XXX%22%29%3B%20%2F%2F%20add%20one%20element%0A%0A%09%20%20%20%20%20%20%20%20lengthBefore%20%2B%201%20%3D%3D%20array%2Elength%0A%0A%09%20%20%20%20%20%20%20%20if%20%28lengthBefore%20%2B%201%20%3D%3D%20array%2Elength%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20true%3B%2F%2F%20has%20right%20splice%20implementation%20without%20bugs%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%28%29%29%20%7B%2F%2FIE%206%2F7%0A%09%20%20%20%20%20%20%20%20var%20array%5Fsplice%20%3D%20Array%2Eprototype%2Esplice%3B%0A%09%20%20%20%20%20%20%20%20Array%2Eprototype%2Esplice%20%3D%20function%28start%2C%20deleteCount%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21arguments%2Elength%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%5B%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20array%5Fsplice%2Eapply%28this%2C%20%5B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20start%20%3D%3D%3D%20void%200%20%3F%200%20%3A%20start%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20deleteCount%20%3D%3D%3D%20void%200%20%3F%20%28this%2Elength%20%2D%20start%29%20%3A%20deleteCount%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2Econcat%28slice%2Ecall%28arguments%2C%202%29%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%7D%20else%20%7B%2F%2FIE8%0A%09%20%20%20%20%20%20%20%20Array%2Eprototype%2Esplice%20%3D%20function%28pos%2C%20removeCount%29%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20length%20%3D%20this%2Elength%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28pos%20%3E%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28pos%20%3E%20length%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pos%20%3D%20length%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28pos%20%3D%3D%20void%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pos%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28pos%20%3C%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pos%20%3D%20Math%2Emax%28length%20%2B%20pos%2C%200%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21%28pos%2BremoveCount%20%3C%20length%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20removeCount%20%3D%20length%20%2D%20pos%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20removed%20%3D%20this%2Eslice%28pos%2C%20pos%2BremoveCount%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20insert%20%3D%20slice%2Ecall%28arguments%2C%202%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20add%20%3D%20insert%2Elength%3B%20%20%20%20%20%20%20%20%20%20%20%20%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28pos%20%3D%3D%3D%20length%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28add%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2Epush%2Eapply%28this%2C%20insert%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20remove%20%3D%20Math%2Emin%28removeCount%2C%20length%20%2D%20pos%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20tailOldPos%20%3D%20pos%20%2B%20remove%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20tailNewPos%20%3D%20tailOldPos%20%2B%20add%20%2D%20remove%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20tailCount%20%3D%20length%20%2D%20tailOldPos%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20lengthAfterRemove%20%3D%20length%20%2D%20remove%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28tailNewPos%20%3C%20tailOldPos%29%20%7B%20%2F%2F%20case%20A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20tailCount%3B%20%2B%2Bi%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%5BtailNewPos%2Bi%5D%20%3D%20this%5BtailOldPos%2Bi%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28tailNewPos%20%3E%20tailOldPos%29%20%7B%20%2F%2F%20case%20B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20%28i%20%3D%20tailCount%3B%20i%2D%2D%3B%20%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%5BtailNewPos%2Bi%5D%20%3D%20this%5BtailOldPos%2Bi%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%2F%2F%20else%2C%20add%20%3D%3D%20remove%20%28nothing%20to%20do%29%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28add%20%26%26%20pos%20%3D%3D%3D%20lengthAfterRemove%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2Elength%20%3D%20lengthAfterRemove%3B%20%2F%2F%20truncate%20array%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2Epush%2Eapply%28this%2C%20insert%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2Elength%20%3D%20lengthAfterRemove%20%2B%20add%3B%20%2F%2F%20reserves%20space%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20%28i%20%3D%200%3B%20i%20%3C%20add%3B%20%2B%2Bi%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%5Bpos%2Bi%5D%20%3D%20insert%5Bi%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20removed%3B%0A%09%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%7D%0A%09%7D%0A%09if%20%28%21Array%2EisArray%29%20%7B%0A%09%20%20%20%20Array%2EisArray%20%3D%20function%20isArray%28obj%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20%5FtoString%28obj%29%20%3D%3D%20%22%5Bobject%20Array%5D%22%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09var%20boxedString%20%3D%20Object%28%22a%22%29%2C%0A%09%20%20%20%20splitString%20%3D%20boxedString%5B0%5D%20%21%3D%20%22a%22%20%7C%7C%20%21%280%20in%20boxedString%29%3B%0A%0A%09if%20%28%21Array%2Eprototype%2EforEach%29%20%7B%0A%09%20%20%20%20Array%2Eprototype%2EforEach%20%3D%20function%20forEach%28fun%20%2F%2A%2C%20thisp%2A%2F%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20object%20%3D%20toObject%28this%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%20%3D%20splitString%20%26%26%20%5FtoString%28this%29%20%3D%3D%20%22%5Bobject%20String%5D%22%20%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2Esplit%28%22%22%29%20%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20object%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20thisp%20%3D%20arguments%5B1%5D%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20i%20%3D%20%2D1%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20length%20%3D%20self%2Elength%20%3E%3E%3E%200%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%5FtoString%28fun%29%20%21%3D%20%22%5Bobject%20Function%5D%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28%29%3B%20%2F%2F%20TODO%20message%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20while%20%28%2B%2Bi%20%3C%20length%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28i%20in%20self%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fun%2Ecall%28thisp%2C%20self%5Bi%5D%2C%20i%2C%20object%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Array%2Eprototype%2Emap%29%20%7B%0A%09%20%20%20%20Array%2Eprototype%2Emap%20%3D%20function%20map%28fun%20%2F%2A%2C%20thisp%2A%2F%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20object%20%3D%20toObject%28this%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%20%3D%20splitString%20%26%26%20%5FtoString%28this%29%20%3D%3D%20%22%5Bobject%20String%5D%22%20%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2Esplit%28%22%22%29%20%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20object%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20length%20%3D%20self%2Elength%20%3E%3E%3E%200%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20result%20%3D%20Array%28length%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20thisp%20%3D%20arguments%5B1%5D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%5FtoString%28fun%29%20%21%3D%20%22%5Bobject%20Function%5D%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28fun%20%2B%20%22%20is%20not%20a%20function%22%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20length%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28i%20in%20self%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%5Bi%5D%20%3D%20fun%2Ecall%28thisp%2C%20self%5Bi%5D%2C%20i%2C%20object%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20result%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Array%2Eprototype%2Efilter%29%20%7B%0A%09%20%20%20%20Array%2Eprototype%2Efilter%20%3D%20function%20filter%28fun%20%2F%2A%2C%20thisp%20%2A%2F%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20object%20%3D%20toObject%28this%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%20%3D%20splitString%20%26%26%20%5FtoString%28this%29%20%3D%3D%20%22%5Bobject%20String%5D%22%20%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2Esplit%28%22%22%29%20%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20object%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20length%20%3D%20self%2Elength%20%3E%3E%3E%200%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20result%20%3D%20%5B%5D%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20value%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20thisp%20%3D%20arguments%5B1%5D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%5FtoString%28fun%29%20%21%3D%20%22%5Bobject%20Function%5D%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28fun%20%2B%20%22%20is%20not%20a%20function%22%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20length%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28i%20in%20self%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%20%3D%20self%5Bi%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28fun%2Ecall%28thisp%2C%20value%2C%20i%2C%20object%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%2Epush%28value%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20result%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Array%2Eprototype%2Eevery%29%20%7B%0A%09%20%20%20%20Array%2Eprototype%2Eevery%20%3D%20function%20every%28fun%20%2F%2A%2C%20thisp%20%2A%2F%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20object%20%3D%20toObject%28this%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%20%3D%20splitString%20%26%26%20%5FtoString%28this%29%20%3D%3D%20%22%5Bobject%20String%5D%22%20%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2Esplit%28%22%22%29%20%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20object%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20length%20%3D%20self%2Elength%20%3E%3E%3E%200%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20thisp%20%3D%20arguments%5B1%5D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%5FtoString%28fun%29%20%21%3D%20%22%5Bobject%20Function%5D%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28fun%20%2B%20%22%20is%20not%20a%20function%22%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20length%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28i%20in%20self%20%26%26%20%21fun%2Ecall%28thisp%2C%20self%5Bi%5D%2C%20i%2C%20object%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20true%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Array%2Eprototype%2Esome%29%20%7B%0A%09%20%20%20%20Array%2Eprototype%2Esome%20%3D%20function%20some%28fun%20%2F%2A%2C%20thisp%20%2A%2F%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20object%20%3D%20toObject%28this%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%20%3D%20splitString%20%26%26%20%5FtoString%28this%29%20%3D%3D%20%22%5Bobject%20String%5D%22%20%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2Esplit%28%22%22%29%20%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20object%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20length%20%3D%20self%2Elength%20%3E%3E%3E%200%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20thisp%20%3D%20arguments%5B1%5D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%5FtoString%28fun%29%20%21%3D%20%22%5Bobject%20Function%5D%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28fun%20%2B%20%22%20is%20not%20a%20function%22%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20length%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28i%20in%20self%20%26%26%20fun%2Ecall%28thisp%2C%20self%5Bi%5D%2C%20i%2C%20object%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20false%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Array%2Eprototype%2Ereduce%29%20%7B%0A%09%20%20%20%20Array%2Eprototype%2Ereduce%20%3D%20function%20reduce%28fun%20%2F%2A%2C%20initial%2A%2F%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20object%20%3D%20toObject%28this%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%20%3D%20splitString%20%26%26%20%5FtoString%28this%29%20%3D%3D%20%22%5Bobject%20String%5D%22%20%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2Esplit%28%22%22%29%20%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20object%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20length%20%3D%20self%2Elength%20%3E%3E%3E%200%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%5FtoString%28fun%29%20%21%3D%20%22%5Bobject%20Function%5D%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28fun%20%2B%20%22%20is%20not%20a%20function%22%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28%21length%20%26%26%20arguments%2Elength%20%3D%3D%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28%22reduce%20of%20empty%20array%20with%20no%20initial%20value%22%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20var%20i%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20var%20result%3B%0A%09%20%20%20%20%20%20%20%20if%20%28arguments%2Elength%20%3E%3D%202%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20result%20%3D%20arguments%5B1%5D%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20do%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28i%20in%20self%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%20%3D%20self%5Bi%2B%2B%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%2B%2Bi%20%3E%3D%20length%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28%22reduce%20of%20empty%20array%20with%20no%20initial%20value%22%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20while%20%28true%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20for%20%28%3B%20i%20%3C%20length%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28i%20in%20self%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%20%3D%20fun%2Ecall%28void%200%2C%20result%2C%20self%5Bi%5D%2C%20i%2C%20object%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20return%20result%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Array%2Eprototype%2EreduceRight%29%20%7B%0A%09%20%20%20%20Array%2Eprototype%2EreduceRight%20%3D%20function%20reduceRight%28fun%20%2F%2A%2C%20initial%2A%2F%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20object%20%3D%20toObject%28this%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%20%3D%20splitString%20%26%26%20%5FtoString%28this%29%20%3D%3D%20%22%5Bobject%20String%5D%22%20%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2Esplit%28%22%22%29%20%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20object%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20length%20%3D%20self%2Elength%20%3E%3E%3E%200%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%5FtoString%28fun%29%20%21%3D%20%22%5Bobject%20Function%5D%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28fun%20%2B%20%22%20is%20not%20a%20function%22%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28%21length%20%26%26%20arguments%2Elength%20%3D%3D%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28%22reduceRight%20of%20empty%20array%20with%20no%20initial%20value%22%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20var%20result%2C%20i%20%3D%20length%20%2D%201%3B%0A%09%20%20%20%20%20%20%20%20if%20%28arguments%2Elength%20%3E%3D%202%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20result%20%3D%20arguments%5B1%5D%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20do%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28i%20in%20self%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%20%3D%20self%5Bi%2D%2D%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%2D%2Di%20%3C%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28%22reduceRight%20of%20empty%20array%20with%20no%20initial%20value%22%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20while%20%28true%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20do%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28i%20in%20this%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%20%3D%20fun%2Ecall%28void%200%2C%20result%2C%20self%5Bi%5D%2C%20i%2C%20object%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%20while%20%28i%2D%2D%29%3B%0A%0A%09%20%20%20%20%20%20%20%20return%20result%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Array%2Eprototype%2EindexOf%20%7C%7C%20%28%5B0%2C%201%5D%2EindexOf%281%2C%202%29%20%21%3D%20%2D1%29%29%20%7B%0A%09%20%20%20%20Array%2Eprototype%2EindexOf%20%3D%20function%20indexOf%28sought%20%2F%2A%2C%20fromIndex%20%2A%2F%20%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20self%20%3D%20splitString%20%26%26%20%5FtoString%28this%29%20%3D%3D%20%22%5Bobject%20String%5D%22%20%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2Esplit%28%22%22%29%20%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20toObject%28this%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20length%20%3D%20self%2Elength%20%3E%3E%3E%200%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28%21length%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20%2D1%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20var%20i%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20if%20%28arguments%2Elength%20%3E%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20i%20%3D%20toInteger%28arguments%5B1%5D%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20i%20%3D%20i%20%3E%3D%200%20%3F%20i%20%3A%20Math%2Emax%280%2C%20length%20%2B%20i%29%3B%0A%09%20%20%20%20%20%20%20%20for%20%28%3B%20i%20%3C%20length%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28i%20in%20self%20%26%26%20self%5Bi%5D%20%3D%3D%3D%20sought%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20i%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20%2D1%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Array%2Eprototype%2ElastIndexOf%20%7C%7C%20%28%5B0%2C%201%5D%2ElastIndexOf%280%2C%20%2D3%29%20%21%3D%20%2D1%29%29%20%7B%0A%09%20%20%20%20Array%2Eprototype%2ElastIndexOf%20%3D%20function%20lastIndexOf%28sought%20%2F%2A%2C%20fromIndex%20%2A%2F%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20self%20%3D%20splitString%20%26%26%20%5FtoString%28this%29%20%3D%3D%20%22%5Bobject%20String%5D%22%20%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2Esplit%28%22%22%29%20%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20toObject%28this%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20length%20%3D%20self%2Elength%20%3E%3E%3E%200%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28%21length%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20%2D1%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20var%20i%20%3D%20length%20%2D%201%3B%0A%09%20%20%20%20%20%20%20%20if%20%28arguments%2Elength%20%3E%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20i%20%3D%20Math%2Emin%28i%2C%20toInteger%28arguments%5B1%5D%29%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20i%20%3D%20i%20%3E%3D%200%20%3F%20i%20%3A%20length%20%2D%20Math%2Eabs%28i%29%3B%0A%09%20%20%20%20%20%20%20%20for%20%28%3B%20i%20%3E%3D%200%3B%20i%2D%2D%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28i%20in%20self%20%26%26%20sought%20%3D%3D%3D%20self%5Bi%5D%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20i%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20%2D1%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Object%2EgetPrototypeOf%29%20%7B%0A%09%20%20%20%20Object%2EgetPrototypeOf%20%3D%20function%20getPrototypeOf%28object%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20object%2E%5F%5Fproto%5F%5F%20%7C%7C%20%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20object%2Econstructor%20%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20%20object%2Econstructor%2Eprototype%20%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20prototypeOfObject%0A%09%20%20%20%20%20%20%20%20%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Object%2EgetOwnPropertyDescriptor%29%20%7B%0A%09%20%20%20%20var%20ERR%5FNON%5FOBJECT%20%3D%20%22Object%2EgetOwnPropertyDescriptor%20called%20on%20a%20%22%20%2B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22non%2Dobject%3A%20%22%3B%0A%09%20%20%20%20Object%2EgetOwnPropertyDescriptor%20%3D%20function%20getOwnPropertyDescriptor%28object%2C%20property%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%28typeof%20object%20%21%3D%20%22object%22%20%26%26%20typeof%20object%20%21%3D%20%22function%22%29%20%7C%7C%20object%20%3D%3D%3D%20null%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28ERR%5FNON%5FOBJECT%20%2B%20object%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21owns%28object%2C%20property%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20descriptor%2C%20getter%2C%20setter%3B%0A%09%20%20%20%20%20%20%20%20descriptor%20%3D%20%20%7B%20enumerable%3A%20true%2C%20configurable%3A%20true%20%7D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28supportsAccessors%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20prototype%20%3D%20object%2E%5F%5Fproto%5F%5F%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20object%2E%5F%5Fproto%5F%5F%20%3D%20prototypeOfObject%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20getter%20%3D%20lookupGetter%28object%2C%20property%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20setter%20%3D%20lookupSetter%28object%2C%20property%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20object%2E%5F%5Fproto%5F%5F%20%3D%20prototype%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28getter%20%7C%7C%20setter%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28getter%29%20descriptor%2Eget%20%3D%20getter%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28setter%29%20descriptor%2Eset%20%3D%20setter%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20descriptor%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20descriptor%2Evalue%20%3D%20object%5Bproperty%5D%3B%0A%09%20%20%20%20%20%20%20%20return%20descriptor%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Object%2EgetOwnPropertyNames%29%20%7B%0A%09%20%20%20%20Object%2EgetOwnPropertyNames%20%3D%20function%20getOwnPropertyNames%28object%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20Object%2Ekeys%28object%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Object%2Ecreate%29%20%7B%0A%09%20%20%20%20var%20createEmpty%3B%0A%09%20%20%20%20if%20%28Object%2Eprototype%2E%5F%5Fproto%5F%5F%20%3D%3D%3D%20null%29%20%7B%0A%09%20%20%20%20%20%20%20%20createEmpty%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20%7B%20%22%5F%5Fproto%5F%5F%22%3A%20null%20%7D%3B%0A%09%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20createEmpty%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20empty%20%3D%20%7B%7D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20for%20%28var%20i%20in%20empty%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20empty%5Bi%5D%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20empty%2Econstructor%20%3D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20empty%2EhasOwnProperty%20%3D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20empty%2EpropertyIsEnumerable%20%3D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20empty%2EisPrototypeOf%20%3D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20empty%2EtoLocaleString%20%3D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20empty%2EtoString%20%3D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20empty%2EvalueOf%20%3D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20empty%2E%5F%5Fproto%5F%5F%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20empty%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20Object%2Ecreate%20%3D%20function%20create%28prototype%2C%20properties%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20object%3B%0A%09%20%20%20%20%20%20%20%20if%20%28prototype%20%3D%3D%3D%20null%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20object%20%3D%20createEmpty%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28typeof%20prototype%20%21%3D%20%22object%22%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28%22typeof%20prototype%5B%22%2B%28typeof%20prototype%29%2B%22%5D%20%21%3D%20%27object%27%22%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20Type%20%3D%20function%20%28%29%20%7B%7D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20Type%2Eprototype%20%3D%20prototype%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20object%20%3D%20new%20Type%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20object%2E%5F%5Fproto%5F%5F%20%3D%20prototype%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28properties%20%21%3D%3D%20void%200%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20Object%2EdefineProperties%28object%2C%20properties%29%3B%0A%09%20%20%20%20%20%20%20%20return%20object%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%0A%09function%20doesDefinePropertyWork%28object%29%20%7B%0A%09%20%20%20%20try%20%7B%0A%09%20%20%20%20%20%20%20%20Object%2EdefineProperty%28object%2C%20%22sentinel%22%2C%20%7B%7D%29%3B%0A%09%20%20%20%20%20%20%20%20return%20%22sentinel%22%20in%20object%3B%0A%09%20%20%20%20%7D%20catch%20%28exception%29%20%7B%0A%09%20%20%20%20%7D%0A%09%7D%0A%09if%20%28Object%2EdefineProperty%29%20%7B%0A%09%20%20%20%20var%20definePropertyWorksOnObject%20%3D%20doesDefinePropertyWork%28%7B%7D%29%3B%0A%09%20%20%20%20var%20definePropertyWorksOnDom%20%3D%20typeof%20document%20%3D%3D%20%22undefined%22%20%7C%7C%0A%09%20%20%20%20%20%20%20%20doesDefinePropertyWork%28document%2EcreateElement%28%22div%22%29%29%3B%0A%09%20%20%20%20if%20%28%21definePropertyWorksOnObject%20%7C%7C%20%21definePropertyWorksOnDom%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20definePropertyFallback%20%3D%20Object%2EdefineProperty%3B%0A%09%20%20%20%20%7D%0A%09%7D%0A%0A%09if%20%28%21Object%2EdefineProperty%20%7C%7C%20definePropertyFallback%29%20%7B%0A%09%20%20%20%20var%20ERR%5FNON%5FOBJECT%5FDESCRIPTOR%20%3D%20%22Property%20description%20must%20be%20an%20object%3A%20%22%3B%0A%09%20%20%20%20var%20ERR%5FNON%5FOBJECT%5FTARGET%20%3D%20%22Object%2EdefineProperty%20called%20on%20non%2Dobject%3A%20%22%0A%09%20%20%20%20var%20ERR%5FACCESSORS%5FNOT%5FSUPPORTED%20%3D%20%22getters%20%26%20setters%20can%20not%20be%20defined%20%22%20%2B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22on%20this%20javascript%20engine%22%3B%0A%0A%09%20%20%20%20Object%2EdefineProperty%20%3D%20function%20defineProperty%28object%2C%20property%2C%20descriptor%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%28typeof%20object%20%21%3D%20%22object%22%20%26%26%20typeof%20object%20%21%3D%20%22function%22%29%20%7C%7C%20object%20%3D%3D%3D%20null%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28ERR%5FNON%5FOBJECT%5FTARGET%20%2B%20object%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%28typeof%20descriptor%20%21%3D%20%22object%22%20%26%26%20typeof%20descriptor%20%21%3D%20%22function%22%29%20%7C%7C%20descriptor%20%3D%3D%3D%20null%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28ERR%5FNON%5FOBJECT%5FDESCRIPTOR%20%2B%20descriptor%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28definePropertyFallback%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20definePropertyFallback%2Ecall%28Object%2C%20object%2C%20property%2C%20descriptor%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20catch%20%28exception%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28owns%28descriptor%2C%20%22value%22%29%29%20%7B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28supportsAccessors%20%26%26%20%28lookupGetter%28object%2C%20property%29%20%7C%7C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lookupSetter%28object%2C%20property%29%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20prototype%20%3D%20object%2E%5F%5Fproto%5F%5F%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20object%2E%5F%5Fproto%5F%5F%20%3D%20prototypeOfObject%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20delete%20object%5Bproperty%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20object%5Bproperty%5D%20%3D%20descriptor%2Evalue%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20object%2E%5F%5Fproto%5F%5F%20%3D%20prototype%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20object%5Bproperty%5D%20%3D%20descriptor%2Evalue%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21supportsAccessors%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28ERR%5FACCESSORS%5FNOT%5FSUPPORTED%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28owns%28descriptor%2C%20%22get%22%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defineGetter%28object%2C%20property%2C%20descriptor%2Eget%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28owns%28descriptor%2C%20%22set%22%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20defineSetter%28object%2C%20property%2C%20descriptor%2Eset%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20return%20object%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Object%2EdefineProperties%29%20%7B%0A%09%20%20%20%20Object%2EdefineProperties%20%3D%20function%20defineProperties%28object%2C%20properties%29%20%7B%0A%09%20%20%20%20%20%20%20%20for%20%28var%20property%20in%20properties%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28owns%28properties%2C%20property%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Object%2EdefineProperty%28object%2C%20property%2C%20properties%5Bproperty%5D%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20object%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Object%2Eseal%29%20%7B%0A%09%20%20%20%20Object%2Eseal%20%3D%20function%20seal%28object%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20object%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Object%2Efreeze%29%20%7B%0A%09%20%20%20%20Object%2Efreeze%20%3D%20function%20freeze%28object%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20object%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09try%20%7B%0A%09%20%20%20%20Object%2Efreeze%28function%20%28%29%20%7B%7D%29%3B%0A%09%7D%20catch%20%28exception%29%20%7B%0A%09%20%20%20%20Object%2Efreeze%20%3D%20%28function%20freeze%28freezeObject%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20function%20freeze%28object%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28typeof%20object%20%3D%3D%20%22function%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20object%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20freezeObject%28object%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%7D%29%28Object%2Efreeze%29%3B%0A%09%7D%0A%09if%20%28%21Object%2EpreventExtensions%29%20%7B%0A%09%20%20%20%20Object%2EpreventExtensions%20%3D%20function%20preventExtensions%28object%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20object%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Object%2EisSealed%29%20%7B%0A%09%20%20%20%20Object%2EisSealed%20%3D%20function%20isSealed%28object%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20false%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Object%2EisFrozen%29%20%7B%0A%09%20%20%20%20Object%2EisFrozen%20%3D%20function%20isFrozen%28object%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20false%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Object%2EisExtensible%29%20%7B%0A%09%20%20%20%20Object%2EisExtensible%20%3D%20function%20isExtensible%28object%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28Object%28object%29%20%3D%3D%3D%20object%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28%29%3B%20%2F%2F%20TODO%20message%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20var%20name%20%3D%20%27%27%3B%0A%09%20%20%20%20%20%20%20%20while%20%28owns%28object%2C%20name%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20name%20%2B%3D%20%27%3F%27%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20object%5Bname%5D%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20var%20returnValue%20%3D%20owns%28object%2C%20name%29%3B%0A%09%20%20%20%20%20%20%20%20delete%20object%5Bname%5D%3B%0A%09%20%20%20%20%20%20%20%20return%20returnValue%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09if%20%28%21Object%2Ekeys%29%20%7B%0A%09%20%20%20%20var%20hasDontEnumBug%20%3D%20true%2C%0A%09%20%20%20%20%20%20%20%20dontEnums%20%3D%20%5B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%22toString%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%22toLocaleString%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%22valueOf%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%22hasOwnProperty%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%22isPrototypeOf%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%22propertyIsEnumerable%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%22constructor%22%0A%09%20%20%20%20%20%20%20%20%5D%2C%0A%09%20%20%20%20%20%20%20%20dontEnumsLength%20%3D%20dontEnums%2Elength%3B%0A%0A%09%20%20%20%20for%20%28var%20key%20in%20%7B%22toString%22%3A%20null%7D%29%20%7B%0A%09%20%20%20%20%20%20%20%20hasDontEnumBug%20%3D%20false%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20Object%2Ekeys%20%3D%20function%20keys%28object%29%20%7B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%28typeof%20object%20%21%3D%20%22object%22%20%26%26%20typeof%20object%20%21%3D%20%22function%22%29%20%7C%7C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20object%20%3D%3D%3D%20null%0A%09%20%20%20%20%20%20%20%20%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20throw%20new%20TypeError%28%22Object%2Ekeys%20called%20on%20a%20non%2Dobject%22%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20var%20keys%20%3D%20%5B%5D%3B%0A%09%20%20%20%20%20%20%20%20for%20%28var%20name%20in%20object%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28owns%28object%2C%20name%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20keys%2Epush%28name%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20if%20%28hasDontEnumBug%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%2C%20ii%20%3D%20dontEnumsLength%3B%20i%20%3C%20ii%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20dontEnum%20%3D%20dontEnums%5Bi%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28owns%28object%2C%20dontEnum%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20keys%2Epush%28dontEnum%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20keys%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%7D%0A%09if%20%28%21Date%2Enow%29%20%7B%0A%09%20%20%20%20Date%2Enow%20%3D%20function%20now%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20new%20Date%28%29%2EgetTime%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09var%20ws%20%3D%20%22%5Cx09%5Cx0A%5Cx0B%5Cx0C%5Cx0D%5Cx20%5CxA0%5Cu1680%5Cu180E%5Cu2000%5Cu2001%5Cu2002%5Cu2003%22%20%2B%0A%09%20%20%20%20%22%5Cu2004%5Cu2005%5Cu2006%5Cu2007%5Cu2008%5Cu2009%5Cu200A%5Cu202F%5Cu205F%5Cu3000%5Cu2028%22%20%2B%0A%09%20%20%20%20%22%5Cu2029%5CuFEFF%22%3B%0A%09if%20%28%21String%2Eprototype%2Etrim%20%7C%7C%20ws%2Etrim%28%29%29%20%7B%0A%09%20%20%20%20ws%20%3D%20%22%5B%22%20%2B%20ws%20%2B%20%22%5D%22%3B%0A%09%20%20%20%20var%20trimBeginRegexp%20%3D%20new%20RegExp%28%22%5E%22%20%2B%20ws%20%2B%20ws%20%2B%20%22%2A%22%29%2C%0A%09%20%20%20%20%20%20%20%20trimEndRegexp%20%3D%20new%20RegExp%28ws%20%2B%20ws%20%2B%20%22%2A%24%22%29%3B%0A%09%20%20%20%20String%2Eprototype%2Etrim%20%3D%20function%20trim%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20String%28this%29%2Ereplace%28trimBeginRegexp%2C%20%22%22%29%2Ereplace%28trimEndRegexp%2C%20%22%22%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%0A%09function%20toInteger%28n%29%20%7B%0A%09%20%20%20%20n%20%3D%20%2Bn%3B%0A%09%20%20%20%20if%20%28n%20%21%3D%3D%20n%29%20%7B%20%2F%2F%20isNaN%0A%09%20%20%20%20%20%20%20%20n%20%3D%200%3B%0A%09%20%20%20%20%7D%20else%20if%20%28n%20%21%3D%3D%200%20%26%26%20n%20%21%3D%3D%20%281%2F0%29%20%26%26%20n%20%21%3D%3D%20%2D%281%2F0%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20n%20%3D%20%28n%20%3E%200%20%7C%7C%20%2D1%29%20%2A%20Math%2Efloor%28Math%2Eabs%28n%29%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20return%20n%3B%0A%09%7D%0A%0A%09function%20isPrimitive%28input%29%20%7B%0A%09%20%20%20%20var%20type%20%3D%20typeof%20input%3B%0A%09%20%20%20%20return%20%28%0A%09%20%20%20%20%20%20%20%20input%20%3D%3D%3D%20null%20%7C%7C%0A%09%20%20%20%20%20%20%20%20type%20%3D%3D%3D%20%22undefined%22%20%7C%7C%0A%09%20%20%20%20%20%20%20%20type%20%3D%3D%3D%20%22boolean%22%20%7C%7C%0A%09%20%20%20%20%20%20%20%20type%20%3D%3D%3D%20%22number%22%20%7C%7C%0A%09%20%20%20%20%20%20%20%20type%20%3D%3D%3D%20%22string%22%0A%09%20%20%20%20%29%3B%0A%09%7D%0A%0A%09function%20toPrimitive%28input%29%20%7B%0A%09%20%20%20%20var%20val%2C%20valueOf%2C%20toString%3B%0A%09%20%20%20%20if%20%28isPrimitive%28input%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20input%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20valueOf%20%3D%20input%2EvalueOf%3B%0A%09%20%20%20%20if%20%28typeof%20valueOf%20%3D%3D%3D%20%22function%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20val%20%3D%20valueOf%2Ecall%28input%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28isPrimitive%28val%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20val%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20toString%20%3D%20input%2EtoString%3B%0A%09%20%20%20%20if%20%28typeof%20toString%20%3D%3D%3D%20%22function%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20val%20%3D%20toString%2Ecall%28input%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28isPrimitive%28val%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20val%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20throw%20new%20TypeError%28%29%3B%0A%09%7D%0A%09var%20toObject%20%3D%20function%20%28o%29%20%7B%0A%09%20%20%20%20if%20%28o%20%3D%3D%20null%29%20%7B%20%2F%2F%20this%20matches%20both%20null%20and%20undefined%0A%09%20%20%20%20%20%20%20%20throw%20new%20TypeError%28%22can%27t%20convert%20%22%2Bo%2B%22%20to%20object%22%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20return%20Object%28o%29%3B%0A%09%7D%3B%0A%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Flib%2Ffixoldbrowsers%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%2C%22ace%2Flib%2Fregexp%22%2C%22ace%2Flib%2Fes5%2Dshim%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%0A%09acequire%28%22%2E%2Fregexp%22%29%3B%0A%09acequire%28%22%2E%2Fes5%2Dshim%22%29%3B%0A%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Flib%2Fdom%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%0A%09if%20%28typeof%20document%20%3D%3D%20%22undefined%22%29%0A%09%20%20%20%20return%3B%0A%0A%09var%20XHTML%5FNS%20%3D%20%22http%3A%2F%2Fwww%2Ew3%2Eorg%2F1999%2Fxhtml%22%3B%0A%0A%09exports%2EgetDocumentHead%20%3D%20function%28doc%29%20%7B%0A%09%20%20%20%20if%20%28%21doc%29%0A%09%20%20%20%20%20%20%20%20doc%20%3D%20document%3B%0A%09%20%20%20%20return%20doc%2Ehead%20%7C%7C%20doc%2EgetElementsByTagName%28%22head%22%29%5B0%5D%20%7C%7C%20doc%2EdocumentElement%3B%0A%09%7D%0A%0A%09exports%2EcreateElement%20%3D%20function%28tag%2C%20ns%29%20%7B%0A%09%20%20%20%20return%20document%2EcreateElementNS%20%3F%0A%09%20%20%20%20%20%20%20%20%20%20%20document%2EcreateElementNS%28ns%20%7C%7C%20XHTML%5FNS%2C%20tag%29%20%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20document%2EcreateElement%28tag%29%3B%0A%09%7D%3B%0A%0A%09exports%2EhasCssClass%20%3D%20function%28el%2C%20name%29%20%7B%0A%09%20%20%20%20var%20classes%20%3D%20%28el%2EclassName%20%7C%7C%20%22%22%29%2Esplit%28%2F%5Cs%2B%2Fg%29%3B%0A%09%20%20%20%20return%20classes%2EindexOf%28name%29%20%21%3D%3D%20%2D1%3B%0A%09%7D%3B%0A%09exports%2EaddCssClass%20%3D%20function%28el%2C%20name%29%20%7B%0A%09%20%20%20%20if%20%28%21exports%2EhasCssClass%28el%2C%20name%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20el%2EclassName%20%2B%3D%20%22%20%22%20%2B%20name%3B%0A%09%20%20%20%20%7D%0A%09%7D%3B%0A%09exports%2EremoveCssClass%20%3D%20function%28el%2C%20name%29%20%7B%0A%09%20%20%20%20var%20classes%20%3D%20el%2EclassName%2Esplit%28%2F%5Cs%2B%2Fg%29%3B%0A%09%20%20%20%20while%20%28true%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20index%20%3D%20classes%2EindexOf%28name%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28index%20%3D%3D%20%2D1%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20classes%2Esplice%28index%2C%201%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20el%2EclassName%20%3D%20classes%2Ejoin%28%22%20%22%29%3B%0A%09%7D%3B%0A%0A%09exports%2EtoggleCssClass%20%3D%20function%28el%2C%20name%29%20%7B%0A%09%20%20%20%20var%20classes%20%3D%20el%2EclassName%2Esplit%28%2F%5Cs%2B%2Fg%29%2C%20add%20%3D%20true%3B%0A%09%20%20%20%20while%20%28true%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20index%20%3D%20classes%2EindexOf%28name%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28index%20%3D%3D%20%2D1%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20add%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20classes%2Esplice%28index%2C%201%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20if%28add%29%0A%09%20%20%20%20%20%20%20%20classes%2Epush%28name%29%3B%0A%0A%09%20%20%20%20el%2EclassName%20%3D%20classes%2Ejoin%28%22%20%22%29%3B%0A%09%20%20%20%20return%20add%3B%0A%09%7D%3B%0A%09exports%2EsetCssClass%20%3D%20function%28node%2C%20className%2C%20include%29%20%7B%0A%09%20%20%20%20if%20%28include%29%20%7B%0A%09%20%20%20%20%20%20%20%20exports%2EaddCssClass%28node%2C%20className%29%3B%0A%09%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20exports%2EremoveCssClass%28node%2C%20className%29%3B%0A%09%20%20%20%20%7D%0A%09%7D%3B%0A%0A%09exports%2EhasCssString%20%3D%20function%28id%2C%20doc%29%20%7B%0A%09%20%20%20%20var%20index%20%3D%200%2C%20sheets%3B%0A%09%20%20%20%20doc%20%3D%20doc%20%7C%7C%20document%3B%0A%0A%09%20%20%20%20if%20%28doc%2EcreateStyleSheet%20%26%26%20%28sheets%20%3D%20doc%2EstyleSheets%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20while%20%28index%20%3C%20sheets%2Elength%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28sheets%5Bindex%2B%2B%5D%2EowningElement%2Eid%20%3D%3D%3D%20id%29%20return%20true%3B%0A%09%20%20%20%20%7D%20else%20if%20%28%28sheets%20%3D%20doc%2EgetElementsByTagName%28%22style%22%29%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20while%20%28index%20%3C%20sheets%2Elength%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28sheets%5Bindex%2B%2B%5D%2Eid%20%3D%3D%3D%20id%29%20return%20true%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20return%20false%3B%0A%09%7D%3B%0A%0A%09exports%2EimportCssString%20%3D%20function%20importCssString%28cssText%2C%20id%2C%20doc%29%20%7B%0A%09%20%20%20%20doc%20%3D%20doc%20%7C%7C%20document%3B%0A%09%20%20%20%20if%20%28id%20%26%26%20exports%2EhasCssString%28id%2C%20doc%29%29%0A%09%20%20%20%20%20%20%20%20return%20null%3B%0A%09%20%20%20%20%0A%09%20%20%20%20var%20style%3B%0A%09%20%20%20%20%0A%09%20%20%20%20if%20%28doc%2EcreateStyleSheet%29%20%7B%0A%09%20%20%20%20%20%20%20%20style%20%3D%20doc%2EcreateStyleSheet%28%29%3B%0A%09%20%20%20%20%20%20%20%20style%2EcssText%20%3D%20cssText%3B%0A%09%20%20%20%20%20%20%20%20if%20%28id%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20style%2EowningElement%2Eid%20%3D%20id%3B%0A%09%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20style%20%3D%20doc%2EcreateElementNS%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%3F%20doc%2EcreateElementNS%28XHTML%5FNS%2C%20%22style%22%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%3A%20doc%2EcreateElement%28%22style%22%29%3B%0A%0A%09%20%20%20%20%20%20%20%20style%2EappendChild%28doc%2EcreateTextNode%28cssText%29%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28id%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20style%2Eid%20%3D%20id%3B%0A%0A%09%20%20%20%20%20%20%20%20exports%2EgetDocumentHead%28doc%29%2EappendChild%28style%29%3B%0A%09%20%20%20%20%7D%0A%09%7D%3B%0A%0A%09exports%2EimportCssStylsheet%20%3D%20function%28uri%2C%20doc%29%20%7B%0A%09%20%20%20%20if%20%28doc%2EcreateStyleSheet%29%20%7B%0A%09%20%20%20%20%20%20%20%20doc%2EcreateStyleSheet%28uri%29%3B%0A%09%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20var%20link%20%3D%20exports%2EcreateElement%28%27link%27%29%3B%0A%09%20%20%20%20%20%20%20%20link%2Erel%20%3D%20%27stylesheet%27%3B%0A%09%20%20%20%20%20%20%20%20link%2Ehref%20%3D%20uri%3B%0A%0A%09%20%20%20%20%20%20%20%20exports%2EgetDocumentHead%28doc%29%2EappendChild%28link%29%3B%0A%09%20%20%20%20%7D%0A%09%7D%3B%0A%0A%09exports%2EgetInnerWidth%20%3D%20function%28element%29%20%7B%0A%09%20%20%20%20return%20%28%0A%09%20%20%20%20%20%20%20%20parseInt%28exports%2EcomputedStyle%28element%2C%20%22paddingLeft%22%29%2C%2010%29%20%2B%0A%09%20%20%20%20%20%20%20%20parseInt%28exports%2EcomputedStyle%28element%2C%20%22paddingRight%22%29%2C%2010%29%20%2B%20%0A%09%20%20%20%20%20%20%20%20element%2EclientWidth%0A%09%20%20%20%20%29%3B%0A%09%7D%3B%0A%0A%09exports%2EgetInnerHeight%20%3D%20function%28element%29%20%7B%0A%09%20%20%20%20return%20%28%0A%09%20%20%20%20%20%20%20%20parseInt%28exports%2EcomputedStyle%28element%2C%20%22paddingTop%22%29%2C%2010%29%20%2B%0A%09%20%20%20%20%20%20%20%20parseInt%28exports%2EcomputedStyle%28element%2C%20%22paddingBottom%22%29%2C%2010%29%20%2B%0A%09%20%20%20%20%20%20%20%20element%2EclientHeight%0A%09%20%20%20%20%29%3B%0A%09%7D%3B%0A%0A%09if%20%28window%2EpageYOffset%20%21%3D%3D%20undefined%29%20%7B%0A%09%20%20%20%20exports%2EgetPageScrollTop%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20window%2EpageYOffset%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20exports%2EgetPageScrollLeft%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20window%2EpageXOffset%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09else%20%7B%0A%09%20%20%20%20exports%2EgetPageScrollTop%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20document%2Ebody%2EscrollTop%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20exports%2EgetPageScrollLeft%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20document%2Ebody%2EscrollLeft%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%0A%09if%20%28window%2EgetComputedStyle%29%0A%09%20%20%20%20exports%2EcomputedStyle%20%3D%20function%28element%2C%20style%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28style%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20%28window%2EgetComputedStyle%28element%2C%20%22%22%29%20%7C%7C%20%7B%7D%29%5Bstyle%5D%20%7C%7C%20%22%22%3B%0A%09%20%20%20%20%20%20%20%20return%20window%2EgetComputedStyle%28element%2C%20%22%22%29%20%7C%7C%20%7B%7D%3B%0A%09%20%20%20%20%7D%3B%0A%09else%0A%09%20%20%20%20exports%2EcomputedStyle%20%3D%20function%28element%2C%20style%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28style%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20element%2EcurrentStyle%5Bstyle%5D%3B%0A%09%20%20%20%20%20%20%20%20return%20element%2EcurrentStyle%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09exports%2EscrollbarWidth%20%3D%20function%28document%29%20%7B%0A%09%20%20%20%20var%20inner%20%3D%20exports%2EcreateElement%28%22ace%5Finner%22%29%3B%0A%09%20%20%20%20inner%2Estyle%2Ewidth%20%3D%20%22100%25%22%3B%0A%09%20%20%20%20inner%2Estyle%2EminWidth%20%3D%20%220px%22%3B%0A%09%20%20%20%20inner%2Estyle%2Eheight%20%3D%20%22200px%22%3B%0A%09%20%20%20%20inner%2Estyle%2Edisplay%20%3D%20%22block%22%3B%0A%0A%09%20%20%20%20var%20outer%20%3D%20exports%2EcreateElement%28%22ace%5Fouter%22%29%3B%0A%09%20%20%20%20var%20style%20%3D%20outer%2Estyle%3B%0A%0A%09%20%20%20%20style%2Eposition%20%3D%20%22absolute%22%3B%0A%09%20%20%20%20style%2Eleft%20%3D%20%22%2D10000px%22%3B%0A%09%20%20%20%20style%2Eoverflow%20%3D%20%22hidden%22%3B%0A%09%20%20%20%20style%2Ewidth%20%3D%20%22200px%22%3B%0A%09%20%20%20%20style%2EminWidth%20%3D%20%220px%22%3B%0A%09%20%20%20%20style%2Eheight%20%3D%20%22150px%22%3B%0A%09%20%20%20%20style%2Edisplay%20%3D%20%22block%22%3B%0A%0A%09%20%20%20%20outer%2EappendChild%28inner%29%3B%0A%0A%09%20%20%20%20var%20body%20%3D%20document%2EdocumentElement%3B%0A%09%20%20%20%20body%2EappendChild%28outer%29%3B%0A%0A%09%20%20%20%20var%20noScrollbar%20%3D%20inner%2EoffsetWidth%3B%0A%0A%09%20%20%20%20style%2Eoverflow%20%3D%20%22scroll%22%3B%0A%09%20%20%20%20var%20withScrollbar%20%3D%20inner%2EoffsetWidth%3B%0A%0A%09%20%20%20%20if%20%28noScrollbar%20%3D%3D%20withScrollbar%29%20%7B%0A%09%20%20%20%20%20%20%20%20withScrollbar%20%3D%20outer%2EclientWidth%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20body%2EremoveChild%28outer%29%3B%0A%0A%09%20%20%20%20return%20noScrollbar%2DwithScrollbar%3B%0A%09%7D%3B%0A%09exports%2EsetInnerHtml%20%3D%20function%28el%2C%20innerHtml%29%20%7B%0A%09%20%20%20%20var%20element%20%3D%20el%2EcloneNode%28false%29%3B%2F%2Fdocument%2EcreateElement%28%22div%22%29%3B%0A%09%20%20%20%20element%2EinnerHTML%20%3D%20innerHtml%3B%0A%09%20%20%20%20el%2EparentNode%2EreplaceChild%28element%2C%20el%29%3B%0A%09%20%20%20%20return%20element%3B%0A%09%7D%3B%0A%0A%09if%20%28%22textContent%22%20in%20document%2EdocumentElement%29%20%7B%0A%09%20%20%20%20exports%2EsetInnerText%20%3D%20function%28el%2C%20innerText%29%20%7B%0A%09%20%20%20%20%20%20%20%20el%2EtextContent%20%3D%20innerText%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20exports%2EgetInnerText%20%3D%20function%28el%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20el%2EtextContent%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%09else%20%7B%0A%09%20%20%20%20exports%2EsetInnerText%20%3D%20function%28el%2C%20innerText%29%20%7B%0A%09%20%20%20%20%20%20%20%20el%2EinnerText%20%3D%20innerText%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20exports%2EgetInnerText%20%3D%20function%28el%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20el%2EinnerText%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%0A%09exports%2EgetParentWindow%20%3D%20function%28document%29%20%7B%0A%09%20%20%20%20return%20document%2EdefaultView%20%7C%7C%20document%2EparentWindow%3B%0A%09%7D%3B%0A%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Flib%2Foop%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%0A%09exports%2Einherits%20%3D%20function%28ctor%2C%20superCtor%29%20%7B%0A%09%20%20%20%20ctor%2Esuper%5F%20%3D%20superCtor%3B%0A%09%20%20%20%20ctor%2Eprototype%20%3D%20Object%2Ecreate%28superCtor%2Eprototype%2C%20%7B%0A%09%20%20%20%20%20%20%20%20constructor%3A%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20ctor%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20enumerable%3A%20false%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20writable%3A%20true%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20configurable%3A%20true%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%29%3B%0A%09%7D%3B%0A%0A%09exports%2Emixin%20%3D%20function%28obj%2C%20mixin%29%20%7B%0A%09%20%20%20%20for%20%28var%20key%20in%20mixin%29%20%7B%0A%09%20%20%20%20%20%20%20%20obj%5Bkey%5D%20%3D%20mixin%5Bkey%5D%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20return%20obj%3B%0A%09%7D%3B%0A%0A%09exports%2Eimplement%20%3D%20function%28proto%2C%20mixin%29%20%7B%0A%09%20%20%20%20exports%2Emixin%28proto%2C%20mixin%29%3B%0A%09%7D%3B%0A%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Flib%2Fkeys%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%2C%22ace%2Flib%2Ffixoldbrowsers%22%2C%22ace%2Flib%2Foop%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%0A%09acequire%28%22%2E%2Ffixoldbrowsers%22%29%3B%0A%0A%09var%20oop%20%3D%20acequire%28%22%2E%2Foop%22%29%3B%0A%09var%20Keys%20%3D%20%28function%28%29%20%7B%0A%09%20%20%20%20var%20ret%20%3D%20%7B%0A%09%20%20%20%20%20%20%20%20MODIFIER%5FKEYS%3A%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%2016%3A%20%27Shift%27%2C%2017%3A%20%27Ctrl%27%2C%2018%3A%20%27Alt%27%2C%20224%3A%20%27Meta%27%0A%09%20%20%20%20%20%20%20%20%7D%2C%0A%0A%09%20%20%20%20%20%20%20%20KEY%5FMODS%3A%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%22ctrl%22%3A%201%2C%20%22alt%22%3A%202%2C%20%22option%22%20%3A%202%2C%20%22shift%22%3A%204%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%22super%22%3A%208%2C%20%22meta%22%3A%208%2C%20%22command%22%3A%208%2C%20%22cmd%22%3A%208%0A%09%20%20%20%20%20%20%20%20%7D%2C%0A%0A%09%20%20%20%20%20%20%20%20FUNCTION%5FKEYS%20%3A%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%208%20%20%3A%20%22Backspace%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%209%20%20%3A%20%22Tab%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2013%20%3A%20%22Return%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2019%20%3A%20%22Pause%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2027%20%3A%20%22Esc%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2032%20%3A%20%22Space%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2033%20%3A%20%22PageUp%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2034%20%3A%20%22PageDown%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2035%20%3A%20%22End%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2036%20%3A%20%22Home%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2037%20%3A%20%22Left%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2038%20%3A%20%22Up%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2039%20%3A%20%22Right%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2040%20%3A%20%22Down%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2044%20%3A%20%22Print%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2045%20%3A%20%22Insert%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2046%20%3A%20%22Delete%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2096%20%3A%20%22Numpad0%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2097%20%3A%20%22Numpad1%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2098%20%3A%20%22Numpad2%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%2099%20%3A%20%22Numpad3%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20100%3A%20%22Numpad4%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20101%3A%20%22Numpad5%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20102%3A%20%22Numpad6%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20103%3A%20%22Numpad7%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20104%3A%20%22Numpad8%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20105%3A%20%22Numpad9%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%27%2D13%27%3A%20%22NumpadEnter%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20112%3A%20%22F1%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20113%3A%20%22F2%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20114%3A%20%22F3%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20115%3A%20%22F4%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20116%3A%20%22F5%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20117%3A%20%22F6%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20118%3A%20%22F7%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20119%3A%20%22F8%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20120%3A%20%22F9%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20121%3A%20%22F10%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20122%3A%20%22F11%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20123%3A%20%22F12%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20144%3A%20%22Numlock%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20145%3A%20%22Scrolllock%22%0A%09%20%20%20%20%20%20%20%20%7D%2C%0A%0A%09%20%20%20%20%20%20%20%20PRINTABLE%5FKEYS%3A%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%2032%3A%20%27%20%27%2C%20%2048%3A%20%270%27%2C%20%2049%3A%20%271%27%2C%20%2050%3A%20%272%27%2C%20%2051%3A%20%273%27%2C%20%2052%3A%20%274%27%2C%2053%3A%20%20%275%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%2054%3A%20%276%27%2C%20%2055%3A%20%277%27%2C%20%2056%3A%20%278%27%2C%20%2057%3A%20%279%27%2C%20%2059%3A%20%27%3B%27%2C%20%2061%3A%20%27%3D%27%2C%2065%3A%20%20%27a%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%2066%3A%20%27b%27%2C%20%2067%3A%20%27c%27%2C%20%2068%3A%20%27d%27%2C%20%2069%3A%20%27e%27%2C%20%2070%3A%20%27f%27%2C%20%2071%3A%20%27g%27%2C%2072%3A%20%20%27h%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%2073%3A%20%27i%27%2C%20%2074%3A%20%27j%27%2C%20%2075%3A%20%27k%27%2C%20%2076%3A%20%27l%27%2C%20%2077%3A%20%27m%27%2C%20%2078%3A%20%27n%27%2C%2079%3A%20%20%27o%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%2080%3A%20%27p%27%2C%20%2081%3A%20%27q%27%2C%20%2082%3A%20%27r%27%2C%20%2083%3A%20%27s%27%2C%20%2084%3A%20%27t%27%2C%20%2085%3A%20%27u%27%2C%2086%3A%20%20%27v%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20%2087%3A%20%27w%27%2C%20%2088%3A%20%27x%27%2C%20%2089%3A%20%27y%27%2C%20%2090%3A%20%27z%27%2C%20107%3A%20%27%2B%27%2C%20109%3A%20%27%2D%27%2C%20110%3A%20%27%2E%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20187%3A%20%27%3D%27%2C%20188%3A%20%27%2C%27%2C%20189%3A%20%27%2D%27%2C%20190%3A%20%27%2E%27%2C%20191%3A%20%27%2F%27%2C%20192%3A%20%27%60%27%2C%20219%3A%20%27%5B%27%2C%0A%09%20%20%20%20%20%20%20%20%20%20220%3A%20%27%5C%5C%27%2C221%3A%20%27%5D%27%2C%20222%3A%20%27%5C%27%27%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20var%20name%2C%20i%3B%0A%09%20%20%20%20for%20%28i%20in%20ret%2EFUNCTION%5FKEYS%29%20%7B%0A%09%20%20%20%20%20%20%20%20name%20%3D%20ret%2EFUNCTION%5FKEYS%5Bi%5D%2EtoLowerCase%28%29%3B%0A%09%20%20%20%20%20%20%20%20ret%5Bname%5D%20%3D%20parseInt%28i%2C%2010%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20for%20%28i%20in%20ret%2EPRINTABLE%5FKEYS%29%20%7B%0A%09%20%20%20%20%20%20%20%20name%20%3D%20ret%2EPRINTABLE%5FKEYS%5Bi%5D%2EtoLowerCase%28%29%3B%0A%09%20%20%20%20%20%20%20%20ret%5Bname%5D%20%3D%20parseInt%28i%2C%2010%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20oop%2Emixin%28ret%2C%20ret%2EMODIFIER%5FKEYS%29%3B%0A%09%20%20%20%20oop%2Emixin%28ret%2C%20ret%2EPRINTABLE%5FKEYS%29%3B%0A%09%20%20%20%20oop%2Emixin%28ret%2C%20ret%2EFUNCTION%5FKEYS%29%3B%0A%09%20%20%20%20ret%2Eenter%20%3D%20ret%5B%22return%22%5D%3B%0A%09%20%20%20%20ret%2Eescape%20%3D%20ret%2Eesc%3B%0A%09%20%20%20%20ret%2Edel%20%3D%20ret%5B%22delete%22%5D%3B%0A%09%20%20%20%20ret%5B173%5D%20%3D%20%27%2D%27%3B%0A%09%20%20%20%20%0A%09%20%20%20%20%28function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20mods%20%3D%20%5B%22cmd%22%2C%20%22ctrl%22%2C%20%22alt%22%2C%20%22shift%22%5D%3B%0A%09%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%20Math%2Epow%282%2C%20mods%2Elength%29%3B%20i%2D%2D%3B%29%20%7B%20%20%20%20%20%20%20%20%20%20%20%20%0A%09%20%20%20%20%20%20%20%20%20%20%20%20ret%2EKEY%5FMODS%5Bi%5D%20%3D%20mods%2Efilter%28function%28x%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20i%20%26%20ret%2EKEY%5FMODS%5Bx%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%2Ejoin%28%22%2D%22%29%20%2B%20%22%2D%22%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%29%28%29%3B%0A%0A%09%20%20%20%20ret%2EKEY%5FMODS%5B0%5D%20%3D%20%22%22%3B%0A%09%20%20%20%20ret%2EKEY%5FMODS%5B%2D1%5D%20%3D%20%22input%22%3B%0A%0A%09%20%20%20%20return%20ret%3B%0A%09%7D%29%28%29%3B%0A%09oop%2Emixin%28exports%2C%20Keys%29%3B%0A%0A%09exports%2EkeyCodeToString%20%3D%20function%28keyCode%29%20%7B%0A%09%20%20%20%20var%20keyString%20%3D%20Keys%5BkeyCode%5D%3B%0A%09%20%20%20%20if%20%28typeof%20keyString%20%21%3D%20%22string%22%29%0A%09%20%20%20%20%20%20%20%20keyString%20%3D%20String%2EfromCharCode%28keyCode%29%3B%0A%09%20%20%20%20return%20keyString%2EtoLowerCase%28%29%3B%0A%09%7D%3B%0A%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Flib%2Fuseragent%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%09exports%2EOS%20%3D%20%7B%0A%09%20%20%20%20LINUX%3A%20%22LINUX%22%2C%0A%09%20%20%20%20MAC%3A%20%22MAC%22%2C%0A%09%20%20%20%20WINDOWS%3A%20%22WINDOWS%22%0A%09%7D%3B%0A%09exports%2EgetOS%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20if%20%28exports%2EisMac%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20exports%2EOS%2EMAC%3B%0A%09%20%20%20%20%7D%20else%20if%20%28exports%2EisLinux%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20exports%2EOS%2ELINUX%3B%0A%09%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20return%20exports%2EOS%2EWINDOWS%3B%0A%09%20%20%20%20%7D%0A%09%7D%3B%0A%09if%20%28typeof%20navigator%20%21%3D%20%22object%22%29%0A%09%20%20%20%20return%3B%0A%0A%09var%20os%20%3D%20%28navigator%2Eplatform%2Ematch%28%2Fmac%7Cwin%7Clinux%2Fi%29%20%7C%7C%20%5B%22other%22%5D%29%5B0%5D%2EtoLowerCase%28%29%3B%0A%09var%20ua%20%3D%20navigator%2EuserAgent%3B%0A%09exports%2EisWin%20%3D%20%28os%20%3D%3D%20%22win%22%29%3B%0A%09exports%2EisMac%20%3D%20%28os%20%3D%3D%20%22mac%22%29%3B%0A%09exports%2EisLinux%20%3D%20%28os%20%3D%3D%20%22linux%22%29%3B%0A%09exports%2EisIE%20%3D%20%0A%09%20%20%20%20%28navigator%2EappName%20%3D%3D%20%22Microsoft%20Internet%20Explorer%22%20%7C%7C%20navigator%2EappName%2EindexOf%28%22MSAppHost%22%29%20%3E%3D%200%29%0A%09%20%20%20%20%3F%20parseFloat%28%28ua%2Ematch%28%2F%28%3F%3AMSIE%20%7CTrident%5C%2F%5B0%2D9%5D%2B%5B%5C%2E0%2D9%5D%2B%3B%2E%2Arv%3A%29%28%5B0%2D9%5D%2B%5B%5C%2E0%2D9%5D%2B%29%2F%29%7C%7C%5B%5D%29%5B1%5D%29%0A%09%20%20%20%20%3A%20parseFloat%28%28ua%2Ematch%28%2F%28%3F%3ATrident%5C%2F%5B0%2D9%5D%2B%5B%5C%2E0%2D9%5D%2B%3B%2E%2Arv%3A%29%28%5B0%2D9%5D%2B%5B%5C%2E0%2D9%5D%2B%29%2F%29%7C%7C%5B%5D%29%5B1%5D%29%3B%20%2F%2F%20for%20ie%0A%09%20%20%20%20%0A%09exports%2EisOldIE%20%3D%20exports%2EisIE%20%26%26%20exports%2EisIE%20%3C%209%3B%0A%09exports%2EisGecko%20%3D%20exports%2EisMozilla%20%3D%20%28window%2EControllers%20%7C%7C%20window%2Econtrollers%29%20%26%26%20window%2Enavigator%2Eproduct%20%3D%3D%3D%20%22Gecko%22%3B%0A%09exports%2EisOldGecko%20%3D%20exports%2EisGecko%20%26%26%20parseInt%28%28ua%2Ematch%28%2Frv%5C%3A%28%5Cd%2B%29%2F%29%7C%7C%5B%5D%29%5B1%5D%2C%2010%29%20%3C%204%3B%0A%09exports%2EisOpera%20%3D%20window%2Eopera%20%26%26%20Object%2Eprototype%2EtoString%2Ecall%28window%2Eopera%29%20%3D%3D%20%22%5Bobject%20Opera%5D%22%3B%0A%09exports%2EisWebKit%20%3D%20parseFloat%28ua%2Esplit%28%22WebKit%2F%22%29%5B1%5D%29%20%7C%7C%20undefined%3B%0A%0A%09exports%2EisChrome%20%3D%20parseFloat%28ua%2Esplit%28%22%20Chrome%2F%22%29%5B1%5D%29%20%7C%7C%20undefined%3B%0A%0A%09exports%2EisAIR%20%3D%20ua%2EindexOf%28%22AdobeAIR%22%29%20%3E%3D%200%3B%0A%0A%09exports%2EisIPad%20%3D%20ua%2EindexOf%28%22iPad%22%29%20%3E%3D%200%3B%0A%0A%09exports%2EisTouchPad%20%3D%20ua%2EindexOf%28%22TouchPad%22%29%20%3E%3D%200%3B%0A%0A%09exports%2EisChromeOS%20%3D%20ua%2EindexOf%28%22%20CrOS%20%22%29%20%3E%3D%200%3B%0A%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Flib%2Fevent%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%2C%22ace%2Flib%2Fkeys%22%2C%22ace%2Flib%2Fuseragent%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%0A%09var%20keys%20%3D%20acequire%28%22%2E%2Fkeys%22%29%3B%0A%09var%20useragent%20%3D%20acequire%28%22%2E%2Fuseragent%22%29%3B%0A%0A%09exports%2EaddListener%20%3D%20function%28elem%2C%20type%2C%20callback%29%20%7B%0A%09%20%20%20%20if%20%28elem%2EaddEventListener%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20elem%2EaddEventListener%28type%2C%20callback%2C%20false%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20if%20%28elem%2EattachEvent%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20wrapper%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20callback%2Ecall%28elem%2C%20window%2Eevent%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%20%20%20%20callback%2E%5Fwrapper%20%3D%20wrapper%3B%0A%09%20%20%20%20%20%20%20%20elem%2EattachEvent%28%22on%22%20%2B%20type%2C%20wrapper%29%3B%0A%09%20%20%20%20%7D%0A%09%7D%3B%0A%0A%09exports%2EremoveListener%20%3D%20function%28elem%2C%20type%2C%20callback%29%20%7B%0A%09%20%20%20%20if%20%28elem%2EremoveEventListener%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20elem%2EremoveEventListener%28type%2C%20callback%2C%20false%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20if%20%28elem%2EdetachEvent%29%20%7B%0A%09%20%20%20%20%20%20%20%20elem%2EdetachEvent%28%22on%22%20%2B%20type%2C%20callback%2E%5Fwrapper%20%7C%7C%20callback%29%3B%0A%09%20%20%20%20%7D%0A%09%7D%3B%0A%09exports%2EstopEvent%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20exports%2EstopPropagation%28e%29%3B%0A%09%20%20%20%20exports%2EpreventDefault%28e%29%3B%0A%09%20%20%20%20return%20false%3B%0A%09%7D%3B%0A%0A%09exports%2EstopPropagation%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20if%20%28e%2EstopPropagation%29%0A%09%20%20%20%20%20%20%20%20e%2EstopPropagation%28%29%3B%0A%09%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20e%2EcancelBubble%20%3D%20true%3B%0A%09%7D%3B%0A%0A%09exports%2EpreventDefault%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20if%20%28e%2EpreventDefault%29%0A%09%20%20%20%20%20%20%20%20e%2EpreventDefault%28%29%3B%0A%09%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20e%2EreturnValue%20%3D%20false%3B%0A%09%7D%3B%0A%09exports%2EgetButton%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20if%20%28e%2Etype%20%3D%3D%20%22dblclick%22%29%0A%09%20%20%20%20%20%20%20%20return%200%3B%0A%09%20%20%20%20if%20%28e%2Etype%20%3D%3D%20%22contextmenu%22%20%7C%7C%20%28useragent%2EisMac%20%26%26%20%28e%2EctrlKey%20%26%26%20%21e%2EaltKey%20%26%26%20%21e%2EshiftKey%29%29%29%0A%09%20%20%20%20%20%20%20%20return%202%3B%0A%09%20%20%20%20if%20%28e%2EpreventDefault%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20e%2Ebutton%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20return%20%7B1%3A0%2C%202%3A2%2C%204%3A1%7D%5Be%2Ebutton%5D%3B%0A%09%20%20%20%20%7D%0A%09%7D%3B%0A%0A%09exports%2Ecapture%20%3D%20function%28el%2C%20eventHandler%2C%20releaseCaptureHandler%29%20%7B%0A%09%20%20%20%20function%20onMouseUp%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20eventHandler%20%26%26%20eventHandler%28e%29%3B%0A%09%20%20%20%20%20%20%20%20releaseCaptureHandler%20%26%26%20releaseCaptureHandler%28e%29%3B%0A%0A%09%20%20%20%20%20%20%20%20exports%2EremoveListener%28document%2C%20%22mousemove%22%2C%20eventHandler%2C%20true%29%3B%0A%09%20%20%20%20%20%20%20%20exports%2EremoveListener%28document%2C%20%22mouseup%22%2C%20onMouseUp%2C%20true%29%3B%0A%09%20%20%20%20%20%20%20%20exports%2EremoveListener%28document%2C%20%22dragstart%22%2C%20onMouseUp%2C%20true%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20exports%2EaddListener%28document%2C%20%22mousemove%22%2C%20eventHandler%2C%20true%29%3B%0A%09%20%20%20%20exports%2EaddListener%28document%2C%20%22mouseup%22%2C%20onMouseUp%2C%20true%29%3B%0A%09%20%20%20%20exports%2EaddListener%28document%2C%20%22dragstart%22%2C%20onMouseUp%2C%20true%29%3B%0A%09%20%20%20%20%0A%09%20%20%20%20return%20onMouseUp%3B%0A%09%7D%3B%0A%0A%09exports%2EaddMouseWheelListener%20%3D%20function%28el%2C%20callback%29%20%7B%0A%09%20%20%20%20if%20%28%22onmousewheel%22%20in%20el%29%20%7B%0A%09%20%20%20%20%20%20%20%20exports%2EaddListener%28el%2C%20%22mousewheel%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20factor%20%3D%208%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e%2EwheelDeltaX%20%21%3D%3D%20undefined%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%2EwheelX%20%3D%20%2De%2EwheelDeltaX%20%2F%20factor%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%2EwheelY%20%3D%20%2De%2EwheelDeltaY%20%2F%20factor%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%2EwheelX%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%2EwheelY%20%3D%20%2De%2EwheelDelta%20%2F%20factor%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20callback%28e%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%20else%20if%20%28%22onwheel%22%20in%20el%29%20%7B%0A%09%20%20%20%20%20%20%20%20exports%2EaddListener%28el%2C%20%22wheel%22%2C%20%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20factor%20%3D%200%2E35%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20switch%20%28e%2EdeltaMode%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%20e%2EDOM%5FDELTA%5FPIXEL%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%2EwheelX%20%3D%20e%2EdeltaX%20%2A%20factor%20%7C%7C%200%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%2EwheelY%20%3D%20e%2EdeltaY%20%2A%20factor%20%7C%7C%200%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%20e%2EDOM%5FDELTA%5FLINE%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%20e%2EDOM%5FDELTA%5FPAGE%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%2EwheelX%20%3D%20%28e%2EdeltaX%20%7C%7C%200%29%20%2A%205%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%2EwheelY%20%3D%20%28e%2EdeltaY%20%7C%7C%200%29%20%2A%205%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%0A%09%20%20%20%20%20%20%20%20%20%20%20%20callback%28e%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20exports%2EaddListener%28el%2C%20%22DOMMouseScroll%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e%2Eaxis%20%26%26%20e%2Eaxis%20%3D%3D%20e%2EHORIZONTAL%5FAXIS%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%2EwheelX%20%3D%20%28e%2Edetail%20%7C%7C%200%29%20%2A%205%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%2EwheelY%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%2EwheelX%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%2EwheelY%20%3D%20%28e%2Edetail%20%7C%7C%200%29%20%2A%205%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20callback%28e%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%0A%09%7D%3B%0A%0A%09exports%2EaddMultiMouseDownListener%20%3D%20function%28el%2C%20timeouts%2C%20eventHandler%2C%20callbackName%29%20%7B%0A%09%20%20%20%20var%20clicks%20%3D%200%3B%0A%09%20%20%20%20var%20startX%2C%20startY%2C%20timer%3B%20%0A%09%20%20%20%20var%20eventNames%20%3D%20%7B%0A%09%20%20%20%20%20%20%20%202%3A%20%22dblclick%22%2C%0A%09%20%20%20%20%20%20%20%203%3A%20%22tripleclick%22%2C%0A%09%20%20%20%20%20%20%20%204%3A%20%22quadclick%22%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20exports%2EaddListener%28el%2C%20%22mousedown%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28exports%2EgetButton%28e%29%20%21%3D%3D%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20clicks%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20if%20%28e%2Edetail%20%3E%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20clicks%2B%2B%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28clicks%20%3E%204%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20clicks%20%3D%201%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20clicks%20%3D%201%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28useragent%2EisIE%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20isNewClick%20%3D%20Math%2Eabs%28e%2EclientX%20%2D%20startX%29%20%3E%205%20%7C%7C%20Math%2Eabs%28e%2EclientY%20%2D%20startY%29%20%3E%205%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21timer%20%7C%7C%20isNewClick%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20clicks%20%3D%201%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28timer%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20clearTimeout%28timer%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20timer%20%3D%20setTimeout%28function%28%29%20%7Btimer%20%3D%20null%7D%2C%20timeouts%5Bclicks%20%2D%201%5D%20%7C%7C%20600%29%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28clicks%20%3D%3D%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20startX%20%3D%20e%2EclientX%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20startY%20%3D%20e%2EclientY%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%0A%09%20%20%20%20%20%20%20%20e%2E%5Fclicks%20%3D%20clicks%3B%0A%0A%09%20%20%20%20%20%20%20%20eventHandler%5BcallbackName%5D%28%22mousedown%22%2C%20e%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28clicks%20%3E%204%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20clicks%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20else%20if%20%28clicks%20%3E%201%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20eventHandler%5BcallbackName%5D%28eventNames%5Bclicks%5D%2C%20e%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20if%20%28useragent%2EisOldIE%29%20%7B%0A%09%20%20%20%20%20%20%20%20exports%2EaddListener%28el%2C%20%22dblclick%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20clicks%20%3D%202%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28timer%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20clearTimeout%28timer%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20timer%20%3D%20setTimeout%28function%28%29%20%7Btimer%20%3D%20null%7D%2C%20timeouts%5Bclicks%20%2D%201%5D%20%7C%7C%20600%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20eventHandler%5BcallbackName%5D%28%22mousedown%22%2C%20e%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20eventHandler%5BcallbackName%5D%28eventNames%5Bclicks%5D%2C%20e%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%0A%09%7D%3B%0A%0A%09var%20getModifierHash%20%3D%20useragent%2EisMac%20%26%26%20useragent%2EisOpera%20%26%26%20%21%28%22KeyboardEvent%22%20in%20window%29%0A%09%20%20%20%20%3F%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%200%20%7C%20%28e%2EmetaKey%20%3F%201%20%3A%200%29%20%7C%20%28e%2EaltKey%20%3F%202%20%3A%200%29%20%7C%20%28e%2EshiftKey%20%3F%204%20%3A%200%29%20%7C%20%28e%2EctrlKey%20%3F%208%20%3A%200%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20%3A%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%200%20%7C%20%28e%2EctrlKey%20%3F%201%20%3A%200%29%20%7C%20%28e%2EaltKey%20%3F%202%20%3A%200%29%20%7C%20%28e%2EshiftKey%20%3F%204%20%3A%200%29%20%7C%20%28e%2EmetaKey%20%3F%208%20%3A%200%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09exports%2EgetModifierString%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20return%20keys%2EKEY%5FMODS%5BgetModifierHash%28e%29%5D%3B%0A%09%7D%3B%0A%0A%09function%20normalizeCommandKeys%28callback%2C%20e%2C%20keyCode%29%20%7B%0A%09%20%20%20%20var%20hashId%20%3D%20getModifierHash%28e%29%3B%0A%0A%09%20%20%20%20if%20%28%21useragent%2EisMac%20%26%26%20pressedKeys%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28pressedKeys%5B91%5D%20%7C%7C%20pressedKeys%5B92%5D%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20hashId%20%7C%3D%208%3B%0A%09%20%20%20%20%20%20%20%20if%20%28pressedKeys%2EaltGr%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%283%20%26%20hashId%29%20%21%3D%203%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pressedKeys%2EaltGr%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28keyCode%20%3D%3D%3D%2018%20%7C%7C%20keyCode%20%3D%3D%3D%2017%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20location%20%3D%20%22location%22%20in%20e%20%3F%20e%2Elocation%20%3A%20e%2EkeyLocation%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28keyCode%20%3D%3D%3D%2017%20%26%26%20location%20%3D%3D%3D%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ts%20%3D%20e%2EtimeStamp%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28keyCode%20%3D%3D%3D%2018%20%26%26%20hashId%20%3D%3D%3D%203%20%26%26%20location%20%3D%3D%3D%202%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20dt%20%3D%20%2Dts%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ts%20%3D%20e%2EtimeStamp%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dt%20%2B%3D%20ts%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28dt%20%3C%203%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pressedKeys%2EaltGr%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20%0A%09%20%20%20%20if%20%28keyCode%20in%20keys%2EMODIFIER%5FKEYS%29%20%7B%0A%09%20%20%20%20%20%20%20%20switch%20%28keys%2EMODIFIER%5FKEYS%5BkeyCode%5D%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20case%20%22Alt%22%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20hashId%20%3D%202%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20case%20%22Shift%22%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20hashId%20%3D%204%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20case%20%22Ctrl%22%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20hashId%20%3D%201%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20default%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20hashId%20%3D%208%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20keyCode%20%3D%20%2D1%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20if%20%28hashId%20%26%208%20%26%26%20%28keyCode%20%3D%3D%3D%2091%20%7C%7C%20keyCode%20%3D%3D%3D%2093%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20keyCode%20%3D%20%2D1%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20%0A%09%20%20%20%20if%20%28%21hashId%20%26%26%20keyCode%20%3D%3D%3D%2013%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20location%20%3D%20%22location%22%20in%20e%20%3F%20e%2Elocation%20%3A%20e%2EkeyLocation%3B%0A%09%20%20%20%20%20%20%20%20if%20%28location%20%3D%3D%3D%203%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20callback%28e%2C%20hashId%2C%20%2DkeyCode%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e%2EdefaultPrevented%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20%0A%09%20%20%20%20if%20%28useragent%2EisChromeOS%20%26%26%20hashId%20%26%208%29%20%7B%0A%09%20%20%20%20%20%20%20%20callback%28e%2C%20hashId%2C%20keyCode%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28e%2EdefaultPrevented%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20hashId%20%26%3D%20%7E8%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20if%20%28%21hashId%20%26%26%20%21%28keyCode%20in%20keys%2EFUNCTION%5FKEYS%29%20%26%26%20%21%28keyCode%20in%20keys%2EPRINTABLE%5FKEYS%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20false%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20%0A%09%20%20%20%20return%20callback%28e%2C%20hashId%2C%20keyCode%29%3B%0A%09%7D%0A%0A%09var%20pressedKeys%20%3D%20null%3B%0A%09var%20ts%20%3D%200%3B%0A%09exports%2EaddCommandKeyListener%20%3D%20function%28el%2C%20callback%29%20%7B%0A%09%20%20%20%20var%20addListener%20%3D%20exports%2EaddListener%3B%0A%09%20%20%20%20if%20%28useragent%2EisOldGecko%20%7C%7C%20%28useragent%2EisOpera%20%26%26%20%21%28%22KeyboardEvent%22%20in%20window%29%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20lastKeyDownKeyCode%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20addListener%28el%2C%20%22keydown%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20lastKeyDownKeyCode%20%3D%20e%2EkeyCode%3B%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20%20%20addListener%28el%2C%20%22keypress%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20normalizeCommandKeys%28callback%2C%20e%2C%20lastKeyDownKeyCode%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20var%20lastDefaultPrevented%20%3D%20null%3B%0A%0A%09%20%20%20%20%20%20%20%20addListener%28el%2C%20%22keydown%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20pressedKeys%5Be%2EkeyCode%5D%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20result%20%3D%20normalizeCommandKeys%28callback%2C%20e%2C%20e%2EkeyCode%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20lastDefaultPrevented%20%3D%20e%2EdefaultPrevented%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20result%3B%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20%20%20%20%20addListener%28el%2C%20%22keypress%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28lastDefaultPrevented%20%26%26%20%28e%2EctrlKey%20%7C%7C%20e%2EaltKey%20%7C%7C%20e%2EshiftKey%20%7C%7C%20e%2EmetaKey%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20exports%2EstopEvent%28e%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lastDefaultPrevented%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20%20%20%20%20addListener%28el%2C%20%22keyup%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20pressedKeys%5Be%2EkeyCode%5D%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28%21pressedKeys%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20pressedKeys%20%3D%20Object%2Ecreate%28null%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20addListener%28window%2C%20%22focus%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20pressedKeys%20%3D%20Object%2Ecreate%28null%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%7D%3B%0A%0A%09if%20%28window%2EpostMessage%20%26%26%20%21useragent%2EisOldIE%29%20%7B%0A%09%20%20%20%20var%20postMessageId%20%3D%201%3B%0A%09%20%20%20%20exports%2EnextTick%20%3D%20function%28callback%2C%20win%29%20%7B%0A%09%20%20%20%20%20%20%20%20win%20%3D%20win%20%7C%7C%20window%3B%0A%09%20%20%20%20%20%20%20%20var%20messageName%20%3D%20%22zero%2Dtimeout%2Dmessage%2D%22%20%2B%20postMessageId%3B%0A%09%20%20%20%20%20%20%20%20exports%2EaddListener%28win%2C%20%22message%22%2C%20function%20listener%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e%2Edata%20%3D%3D%20messageName%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20exports%2EstopPropagation%28e%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20exports%2EremoveListener%28win%2C%20%22message%22%2C%20listener%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20callback%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20%20%20win%2EpostMessage%28messageName%2C%20%22%2A%22%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%0A%0A%0A%09exports%2EnextFrame%20%3D%20window%2ErequestAnimationFrame%20%7C%7C%0A%09%20%20%20%20window%2EmozRequestAnimationFrame%20%7C%7C%0A%09%20%20%20%20window%2EwebkitRequestAnimationFrame%20%7C%7C%0A%09%20%20%20%20window%2EmsRequestAnimationFrame%20%7C%7C%0A%09%20%20%20%20window%2EoRequestAnimationFrame%3B%0A%0A%09if%20%28exports%2EnextFrame%29%0A%09%20%20%20%20exports%2EnextFrame%20%3D%20exports%2EnextFrame%2Ebind%28window%29%3B%0A%09else%0A%09%20%20%20%20exports%2EnextFrame%20%3D%20function%28callback%29%20%7B%0A%09%20%20%20%20%20%20%20%20setTimeout%28callback%2C%2017%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Flib%2Flang%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%0A%09exports%2Elast%20%3D%20function%28a%29%20%7B%0A%09%20%20%20%20return%20a%5Ba%2Elength%20%2D%201%5D%3B%0A%09%7D%3B%0A%0A%09exports%2EstringReverse%20%3D%20function%28string%29%20%7B%0A%09%20%20%20%20return%20string%2Esplit%28%22%22%29%2Ereverse%28%29%2Ejoin%28%22%22%29%3B%0A%09%7D%3B%0A%0A%09exports%2EstringRepeat%20%3D%20function%20%28string%2C%20count%29%20%7B%0A%09%20%20%20%20var%20result%20%3D%20%27%27%3B%0A%09%20%20%20%20while%20%28count%20%3E%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28count%20%26%201%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20result%20%2B%3D%20string%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28count%20%3E%3E%3D%201%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20string%20%2B%3D%20string%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20return%20result%3B%0A%09%7D%3B%0A%0A%09var%20trimBeginRegexp%20%3D%20%2F%5E%5Cs%5Cs%2A%2F%3B%0A%09var%20trimEndRegexp%20%3D%20%2F%5Cs%5Cs%2A%24%2F%3B%0A%0A%09exports%2EstringTrimLeft%20%3D%20function%20%28string%29%20%7B%0A%09%20%20%20%20return%20string%2Ereplace%28trimBeginRegexp%2C%20%27%27%29%3B%0A%09%7D%3B%0A%0A%09exports%2EstringTrimRight%20%3D%20function%20%28string%29%20%7B%0A%09%20%20%20%20return%20string%2Ereplace%28trimEndRegexp%2C%20%27%27%29%3B%0A%09%7D%3B%0A%0A%09exports%2EcopyObject%20%3D%20function%28obj%29%20%7B%0A%09%20%20%20%20var%20copy%20%3D%20%7B%7D%3B%0A%09%20%20%20%20for%20%28var%20key%20in%20obj%29%20%7B%0A%09%20%20%20%20%20%20%20%20copy%5Bkey%5D%20%3D%20obj%5Bkey%5D%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20return%20copy%3B%0A%09%7D%3B%0A%0A%09exports%2EcopyArray%20%3D%20function%28array%29%7B%0A%09%20%20%20%20var%20copy%20%3D%20%5B%5D%3B%0A%09%20%20%20%20for%20%28var%20i%3D0%2C%20l%3Darray%2Elength%3B%20i%3Cl%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28array%5Bi%5D%20%26%26%20typeof%20array%5Bi%5D%20%3D%3D%20%22object%22%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20copy%5Bi%5D%20%3D%20this%2EcopyObject%28%20array%5Bi%5D%20%29%3B%0A%09%20%20%20%20%20%20%20%20else%20%0A%09%20%20%20%20%20%20%20%20%20%20%20%20copy%5Bi%5D%20%3D%20array%5Bi%5D%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20return%20copy%3B%0A%09%7D%3B%0A%0A%09exports%2EdeepCopy%20%3D%20function%20%28obj%29%20%7B%0A%09%20%20%20%20if%20%28typeof%20obj%20%21%3D%3D%20%22object%22%20%7C%7C%20%21obj%29%0A%09%20%20%20%20%20%20%20%20return%20obj%3B%0A%09%20%20%20%20var%20cons%20%3D%20obj%2Econstructor%3B%0A%09%20%20%20%20if%20%28cons%20%3D%3D%3D%20RegExp%29%0A%09%20%20%20%20%20%20%20%20return%20obj%3B%0A%09%20%20%20%20%0A%09%20%20%20%20var%20copy%20%3D%20cons%28%29%3B%0A%09%20%20%20%20for%20%28var%20key%20in%20obj%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28typeof%20obj%5Bkey%5D%20%3D%3D%3D%20%22object%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20copy%5Bkey%5D%20%3D%20exports%2EdeepCopy%28obj%5Bkey%5D%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20copy%5Bkey%5D%20%3D%20obj%5Bkey%5D%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20return%20copy%3B%0A%09%7D%3B%0A%0A%09exports%2EarrayToMap%20%3D%20function%28arr%29%20%7B%0A%09%20%20%20%20var%20map%20%3D%20%7B%7D%3B%0A%09%20%20%20%20for%20%28var%20i%3D0%3B%20i%3Carr%2Elength%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20map%5Barr%5Bi%5D%5D%20%3D%201%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20return%20map%3B%0A%0A%09%7D%3B%0A%0A%09exports%2EcreateMap%20%3D%20function%28props%29%20%7B%0A%09%20%20%20%20var%20map%20%3D%20Object%2Ecreate%28null%29%3B%0A%09%20%20%20%20for%20%28var%20i%20in%20props%29%20%7B%0A%09%20%20%20%20%20%20%20%20map%5Bi%5D%20%3D%20props%5Bi%5D%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20return%20map%3B%0A%09%7D%3B%0A%09exports%2EarrayRemove%20%3D%20function%28array%2C%20value%29%20%7B%0A%09%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%3D%20array%2Elength%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20if%20%28value%20%3D%3D%3D%20array%5Bi%5D%29%20%7B%0A%09%20%20%20%20%20%20array%2Esplice%28i%2C%201%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%7D%0A%09%7D%3B%0A%0A%09exports%2EescapeRegExp%20%3D%20function%28str%29%20%7B%0A%09%20%20%20%20return%20str%2Ereplace%28%2F%28%5B%2E%2A%2B%3F%5E%24%7B%7D%28%29%7C%5B%5C%5D%5C%2F%5C%5C%5D%29%2Fg%2C%20%27%5C%5C%241%27%29%3B%0A%09%7D%3B%0A%0A%09exports%2EescapeHTML%20%3D%20function%28str%29%20%7B%0A%09%20%20%20%20return%20str%2Ereplace%28%2F%26%2Fg%2C%20%22%26%2338%3B%22%29%2Ereplace%28%2F%22%2Fg%2C%20%22%26%2334%3B%22%29%2Ereplace%28%2F%27%2Fg%2C%20%22%26%2339%3B%22%29%2Ereplace%28%2F%3C%2Fg%2C%20%22%26%2360%3B%22%29%3B%0A%09%7D%3B%0A%0A%09exports%2EgetMatchOffsets%20%3D%20function%28string%2C%20regExp%29%20%7B%0A%09%20%20%20%20var%20matches%20%3D%20%5B%5D%3B%0A%0A%09%20%20%20%20string%2Ereplace%28regExp%2C%20function%28str%29%20%7B%0A%09%20%20%20%20%20%20%20%20matches%2Epush%28%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20offset%3A%20arguments%5Barguments%2Elength%2D2%5D%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20length%3A%20str%2Elength%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20return%20matches%3B%0A%09%7D%3B%0A%09exports%2EdeferredCall%20%3D%20function%28fcn%29%20%7B%0A%09%20%20%20%20var%20timer%20%3D%20null%3B%0A%09%20%20%20%20var%20callback%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20timer%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20fcn%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20var%20deferred%20%3D%20function%28timeout%29%20%7B%0A%09%20%20%20%20%20%20%20%20deferred%2Ecancel%28%29%3B%0A%09%20%20%20%20%20%20%20%20timer%20%3D%20setTimeout%28callback%2C%20timeout%20%7C%7C%200%29%3B%0A%09%20%20%20%20%20%20%20%20return%20deferred%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20deferred%2Eschedule%20%3D%20deferred%3B%0A%0A%09%20%20%20%20deferred%2Ecall%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Ecancel%28%29%3B%0A%09%20%20%20%20%20%20%20%20fcn%28%29%3B%0A%09%20%20%20%20%20%20%20%20return%20deferred%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20deferred%2Ecancel%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20clearTimeout%28timer%29%3B%0A%09%20%20%20%20%20%20%20%20timer%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20return%20deferred%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20%0A%09%20%20%20%20deferred%2EisPending%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20timer%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20return%20deferred%3B%0A%09%7D%3B%0A%0A%0A%09exports%2EdelayedCall%20%3D%20function%28fcn%2C%20defaultTimeout%29%20%7B%0A%09%20%20%20%20var%20timer%20%3D%20null%3B%0A%09%20%20%20%20var%20callback%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20timer%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20fcn%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20var%20%5Fself%20%3D%20function%28timeout%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28timer%20%3D%3D%20null%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20timer%20%3D%20setTimeout%28callback%2C%20timeout%20%7C%7C%20defaultTimeout%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20%5Fself%2Edelay%20%3D%20function%28timeout%29%20%7B%0A%09%20%20%20%20%20%20%20%20timer%20%26%26%20clearTimeout%28timer%29%3B%0A%09%20%20%20%20%20%20%20%20timer%20%3D%20setTimeout%28callback%2C%20timeout%20%7C%7C%20defaultTimeout%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20%5Fself%2Eschedule%20%3D%20%5Fself%3B%0A%0A%09%20%20%20%20%5Fself%2Ecall%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Ecancel%28%29%3B%0A%09%20%20%20%20%20%20%20%20fcn%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20%5Fself%2Ecancel%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20timer%20%26%26%20clearTimeout%28timer%29%3B%0A%09%20%20%20%20%20%20%20%20timer%20%3D%20null%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20%5Fself%2EisPending%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20timer%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20return%20%5Fself%3B%0A%09%7D%3B%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Fkeyboard%2Ftextinput%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%2C%22ace%2Flib%2Fevent%22%2C%22ace%2Flib%2Fuseragent%22%2C%22ace%2Flib%2Fdom%22%2C%22ace%2Flib%2Flang%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%0A%09var%20event%20%3D%20acequire%28%22%2E%2E%2Flib%2Fevent%22%29%3B%0A%09var%20useragent%20%3D%20acequire%28%22%2E%2E%2Flib%2Fuseragent%22%29%3B%0A%09var%20dom%20%3D%20acequire%28%22%2E%2E%2Flib%2Fdom%22%29%3B%0A%09var%20lang%20%3D%20acequire%28%22%2E%2E%2Flib%2Flang%22%29%3B%0A%09var%20BROKEN%5FSETDATA%20%3D%20useragent%2EisChrome%20%3C%2018%3B%0A%09var%20USE%5FIE%5FMIME%5FTYPE%20%3D%20%20useragent%2EisIE%3B%0A%0A%09var%20TextInput%20%3D%20function%28parentNode%2C%20host%29%20%7B%0A%09%20%20%20%20var%20text%20%3D%20dom%2EcreateElement%28%22textarea%22%29%3B%0A%09%20%20%20%20text%2EclassName%20%3D%20%22ace%5Ftext%2Dinput%22%3B%0A%0A%09%20%20%20%20if%20%28useragent%2EisTouchPad%29%0A%09%20%20%20%20%20%20%20%20text%2EsetAttribute%28%22x%2Dpalm%2Ddisable%2Dauto%2Dcap%22%2C%20true%29%3B%0A%0A%09%20%20%20%20text%2Ewrap%20%3D%20%22off%22%3B%0A%09%20%20%20%20text%2Eautocorrect%20%3D%20%22off%22%3B%0A%09%20%20%20%20text%2Eautocapitalize%20%3D%20%22off%22%3B%0A%09%20%20%20%20text%2Espellcheck%20%3D%20false%3B%0A%0A%09%20%20%20%20text%2Estyle%2Eopacity%20%3D%20%220%22%3B%0A%09%20%20%20%20if%20%28useragent%2EisOldIE%29%20text%2Estyle%2Etop%20%3D%20%22%2D100px%22%3B%0A%09%20%20%20%20parentNode%2EinsertBefore%28text%2C%20parentNode%2EfirstChild%29%3B%0A%0A%09%20%20%20%20var%20PLACEHOLDER%20%3D%20%22%5Cx01%5Cx01%22%3B%0A%0A%09%20%20%20%20var%20copied%20%3D%20false%3B%0A%09%20%20%20%20var%20pasted%20%3D%20false%3B%0A%09%20%20%20%20var%20inComposition%20%3D%20false%3B%0A%09%20%20%20%20var%20tempStyle%20%3D%20%27%27%3B%0A%09%20%20%20%20var%20isSelectionEmpty%20%3D%20true%3B%0A%09%20%20%20%20try%20%7B%20var%20isFocused%20%3D%20document%2EactiveElement%20%3D%3D%3D%20text%3B%20%7D%20catch%28e%29%20%7B%7D%0A%09%20%20%20%20%0A%09%20%20%20%20event%2EaddListener%28text%2C%20%22blur%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20host%2EonBlur%28e%29%3B%0A%09%20%20%20%20%20%20%20%20isFocused%20%3D%20false%3B%0A%09%20%20%20%20%7D%29%3B%0A%09%20%20%20%20event%2EaddListener%28text%2C%20%22focus%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20isFocused%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20host%2EonFocus%28e%29%3B%0A%09%20%20%20%20%20%20%20%20resetSelection%28%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%09%20%20%20%20this%2Efocus%20%3D%20function%28%29%20%7B%20text%2Efocus%28%29%3B%20%7D%3B%0A%09%20%20%20%20this%2Eblur%20%3D%20function%28%29%20%7B%20text%2Eblur%28%29%3B%20%7D%3B%0A%09%20%20%20%20this%2EisFocused%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20isFocused%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20var%20syncSelection%20%3D%20lang%2EdelayedCall%28function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20isFocused%20%26%26%20resetSelection%28isSelectionEmpty%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%09%20%20%20%20var%20syncValue%20%3D%20lang%2EdelayedCall%28function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20if%20%28%21inComposition%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20text%2Evalue%20%3D%20PLACEHOLDER%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20isFocused%20%26%26%20resetSelection%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20function%20resetSelection%28isEmpty%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28inComposition%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20if%20%28inputHandler%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20selectionStart%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20selectionEnd%20%3D%20isEmpty%20%3F%200%20%3A%20text%2Evalue%2Elength%20%2D%201%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20selectionStart%20%3D%20isEmpty%20%3F%202%20%3A%201%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20selectionEnd%20%3D%202%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20try%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20text%2EsetSelectionRange%28selectionStart%2C%20selectionEnd%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%20catch%28e%29%7B%7D%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20function%20resetValue%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28inComposition%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20text%2Evalue%20%3D%20PLACEHOLDER%3B%0A%09%20%20%20%20%20%20%20%20if%20%28useragent%2EisWebKit%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20syncValue%2Eschedule%28%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20useragent%2EisWebKit%20%7C%7C%20host%2EaddEventListener%28%27changeSelection%27%2C%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28host%2Eselection%2EisEmpty%28%29%20%21%3D%20isSelectionEmpty%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20isSelectionEmpty%20%3D%20%21isSelectionEmpty%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20syncSelection%2Eschedule%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20resetValue%28%29%3B%0A%09%20%20%20%20if%20%28isFocused%29%0A%09%20%20%20%20%20%20%20%20host%2EonFocus%28%29%3B%0A%0A%0A%09%20%20%20%20var%20isAllSelected%20%3D%20function%28text%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20text%2EselectionStart%20%3D%3D%3D%200%20%26%26%20text%2EselectionEnd%20%3D%3D%3D%20text%2Evalue%2Elength%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20if%20%28%21text%2EsetSelectionRange%20%26%26%20text%2EcreateTextRange%29%20%7B%0A%09%20%20%20%20%20%20%20%20text%2EsetSelectionRange%20%3D%20function%28selectionStart%2C%20selectionEnd%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20range%20%3D%20this%2EcreateTextRange%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20range%2Ecollapse%28true%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20range%2EmoveStart%28%27character%27%2C%20selectionStart%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20range%2EmoveEnd%28%27character%27%2C%20selectionEnd%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20range%2Eselect%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%20%20%20%20isAllSelected%20%3D%20function%28text%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20try%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20range%20%3D%20text%2EownerDocument%2Eselection%2EcreateRange%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7Dcatch%28e%29%20%7B%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21range%20%7C%7C%20range%2EparentElement%28%29%20%21%3D%20text%29%20return%20false%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20range%2Etext%20%3D%3D%20text%2Evalue%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20if%20%28useragent%2EisOldIE%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20inPropertyChange%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20var%20onPropertyChange%20%3D%20function%28e%29%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28inPropertyChange%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20data%20%3D%20text%2Evalue%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28inComposition%20%7C%7C%20%21data%20%7C%7C%20data%20%3D%3D%20PLACEHOLDER%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e%20%26%26%20data%20%3D%3D%20PLACEHOLDER%5B0%5D%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20syncProperty%2Eschedule%28%29%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20sendText%28data%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20inPropertyChange%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20resetValue%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20inPropertyChange%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%20%20%20%20var%20syncProperty%20%3D%20lang%2EdelayedCall%28onPropertyChange%29%3B%0A%09%20%20%20%20%20%20%20%20event%2EaddListener%28text%2C%20%22propertychange%22%2C%20onPropertyChange%29%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20keytable%20%3D%20%7B%2013%3A1%2C%2027%3A1%20%7D%3B%0A%09%20%20%20%20%20%20%20%20event%2EaddListener%28text%2C%20%22keyup%22%2C%20function%20%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28inComposition%20%26%26%20%28%21text%2Evalue%20%7C%7C%20keytable%5Be%2EkeyCode%5D%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28onCompositionEnd%2C%200%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%28text%2Evalue%2EcharCodeAt%280%29%7C%7C0%29%20%3C%20129%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20syncProperty%2Ecall%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20inComposition%20%3F%20onCompositionUpdate%28%29%20%3A%20onCompositionStart%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20%20%20event%2EaddListener%28text%2C%20%22keydown%22%2C%20function%20%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20syncProperty%2Eschedule%2850%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20var%20onSelect%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28copied%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20copied%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20if%20%28isAllSelected%28text%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20host%2EselectAll%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20resetSelection%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20if%20%28inputHandler%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20resetSelection%28host%2Eselection%2EisEmpty%28%29%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20var%20inputHandler%20%3D%20null%3B%0A%09%20%20%20%20this%2EsetInputHandler%20%3D%20function%28cb%29%20%7BinputHandler%20%3D%20cb%7D%3B%0A%09%20%20%20%20this%2EgetInputHandler%20%3D%20function%28%29%20%7Breturn%20inputHandler%7D%3B%0A%09%20%20%20%20var%20afterContextMenu%20%3D%20false%3B%0A%09%20%20%20%20%0A%09%20%20%20%20var%20sendText%20%3D%20function%28data%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28inputHandler%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20data%20%3D%20inputHandler%28data%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20inputHandler%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28pasted%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20resetSelection%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28data%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20host%2EonPaste%28data%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20pasted%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20if%20%28data%20%3D%3D%20PLACEHOLDER%2EcharAt%280%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28afterContextMenu%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20host%2EexecCommand%28%22del%22%2C%20%7Bsource%3A%20%22ace%22%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20else%20%2F%2F%20some%20versions%20of%20android%20do%20not%20fire%20keydown%20when%20pressing%20backspace%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20host%2EexecCommand%28%22backspace%22%2C%20%7Bsource%3A%20%22ace%22%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28data%2Esubstring%280%2C%202%29%20%3D%3D%20PLACEHOLDER%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20data%20%3D%20data%2Esubstr%282%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20else%20if%20%28data%2EcharAt%280%29%20%3D%3D%20PLACEHOLDER%2EcharAt%280%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20data%20%3D%20data%2Esubstr%281%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20else%20if%20%28data%2EcharAt%28data%2Elength%20%2D%201%29%20%3D%3D%20PLACEHOLDER%2EcharAt%280%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20data%20%3D%20data%2Eslice%280%2C%20%2D1%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28data%2EcharAt%28data%2Elength%20%2D%201%29%20%3D%3D%20PLACEHOLDER%2EcharAt%280%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20data%20%3D%20data%2Eslice%280%2C%20%2D1%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28data%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20host%2EonTextInput%28data%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28afterContextMenu%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20afterContextMenu%20%3D%20false%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20var%20onInput%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28inComposition%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20var%20data%20%3D%20text%2Evalue%3B%0A%09%20%20%20%20%20%20%20%20sendText%28data%29%3B%0A%09%20%20%20%20%20%20%20%20resetValue%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20%0A%09%20%20%20%20var%20handleClipboardData%20%3D%20function%28e%2C%20data%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20clipboardData%20%3D%20e%2EclipboardData%20%7C%7C%20window%2EclipboardData%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21clipboardData%20%7C%7C%20BROKEN%5FSETDATA%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20var%20mime%20%3D%20USE%5FIE%5FMIME%5FTYPE%20%3F%20%22Text%22%20%3A%20%22text%2Fplain%22%3B%0A%09%20%20%20%20%20%20%20%20if%20%28data%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20clipboardData%2EsetData%28mime%2C%20data%29%20%21%3D%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20clipboardData%2EgetData%28mime%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20var%20doCopy%20%3D%20function%28e%2C%20isCut%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20data%20%3D%20host%2EgetCopyText%28%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21data%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20event%2EpreventDefault%28e%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28handleClipboardData%28e%2C%20data%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20isCut%20%3F%20host%2EonCut%28%29%20%3A%20host%2EonCopy%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20event%2EpreventDefault%28e%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20copied%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20text%2Evalue%20%3D%20data%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20text%2Eselect%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28%29%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20copied%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20resetValue%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20resetSelection%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20isCut%20%3F%20host%2EonCut%28%29%20%3A%20host%2EonCopy%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20%0A%09%20%20%20%20var%20onCut%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20doCopy%28e%2C%20true%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20%0A%09%20%20%20%20var%20onCopy%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20doCopy%28e%2C%20false%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20%0A%09%20%20%20%20var%20onPaste%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20data%20%3D%20handleClipboardData%28e%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28typeof%20data%20%3D%3D%20%22string%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28data%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20host%2EonPaste%28data%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28useragent%2EisIE%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28resetSelection%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20event%2EpreventDefault%28e%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20text%2Evalue%20%3D%20%22%22%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20pasted%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20event%2EaddCommandKeyListener%28text%2C%20host%2EonCommandKey%2Ebind%28host%29%29%3B%0A%0A%09%20%20%20%20event%2EaddListener%28text%2C%20%22select%22%2C%20onSelect%29%3B%0A%0A%09%20%20%20%20event%2EaddListener%28text%2C%20%22input%22%2C%20onInput%29%3B%0A%0A%09%20%20%20%20event%2EaddListener%28text%2C%20%22cut%22%2C%20onCut%29%3B%0A%09%20%20%20%20event%2EaddListener%28text%2C%20%22copy%22%2C%20onCopy%29%3B%0A%09%20%20%20%20event%2EaddListener%28text%2C%20%22paste%22%2C%20onPaste%29%3B%0A%09%20%20%20%20if%20%28%21%28%27oncut%27%20in%20text%29%20%7C%7C%20%21%28%27oncopy%27%20in%20text%29%20%7C%7C%20%21%28%27onpaste%27%20in%20text%29%29%7B%0A%09%20%20%20%20%20%20%20%20event%2EaddListener%28parentNode%2C%20%22keydown%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%28useragent%2EisMac%20%26%26%20%21e%2EmetaKey%29%20%7C%7C%20%21e%2EctrlKey%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20switch%20%28e%2EkeyCode%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%2067%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onCopy%28e%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%2086%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onPaste%28e%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%2088%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onCut%28e%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20var%20onCompositionStart%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28inComposition%20%7C%7C%20%21host%2EonCompositionStart%20%7C%7C%20host%2E%24readOnly%29%20%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20inComposition%20%3D%20%7B%7D%3B%0A%09%20%20%20%20%20%20%20%20host%2EonCompositionStart%28%29%3B%0A%09%20%20%20%20%20%20%20%20setTimeout%28onCompositionUpdate%2C%200%29%3B%0A%09%20%20%20%20%20%20%20%20host%2Eon%28%22mousedown%22%2C%20onCompositionEnd%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21host%2Eselection%2EisEmpty%28%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20host%2Einsert%28%22%22%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20host%2Esession%2EmarkUndoGroup%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20host%2Eselection%2EclearSelection%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20host%2Esession%2EmarkUndoGroup%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20var%20onCompositionUpdate%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%21inComposition%20%7C%7C%20%21host%2EonCompositionUpdate%20%7C%7C%20host%2E%24readOnly%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20var%20val%20%3D%20text%2Evalue%2Ereplace%28%2F%5Cx01%2Fg%2C%20%22%22%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28inComposition%2ElastValue%20%3D%3D%3D%20val%29%20return%3B%0A%09%20%20%20%20%20%20%20%20%0A%09%20%20%20%20%20%20%20%20host%2EonCompositionUpdate%28val%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28inComposition%2ElastValue%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20host%2Eundo%28%29%3B%0A%09%20%20%20%20%20%20%20%20inComposition%2ElastValue%20%3D%20val%3B%0A%09%20%20%20%20%20%20%20%20if%20%28inComposition%2ElastValue%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20r%20%3D%20host%2Eselection%2EgetRange%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20host%2Einsert%28inComposition%2ElastValue%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20host%2Esession%2EmarkUndoGroup%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20inComposition%2Erange%20%3D%20host%2Eselection%2EgetRange%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20host%2Eselection%2EsetRange%28r%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20host%2Eselection%2EclearSelection%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20var%20onCompositionEnd%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%21host%2EonCompositionEnd%20%7C%7C%20host%2E%24readOnly%29%20return%3B%0A%09%20%20%20%20%20%20%20%20var%20c%20%3D%20inComposition%3B%0A%09%20%20%20%20%20%20%20%20inComposition%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20var%20timer%20%3D%20setTimeout%28function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20timer%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20str%20%3D%20text%2Evalue%2Ereplace%28%2F%5Cx01%2Fg%2C%20%22%22%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28inComposition%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20else%20if%20%28str%20%3D%3D%20c%2ElastValue%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20resetValue%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20else%20if%20%28%21c%2ElastValue%20%26%26%20str%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20resetValue%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sendText%28str%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20%20%20inputHandler%20%3D%20function%20compositionInputHandler%28str%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28timer%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20clearTimeout%28timer%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20str%20%3D%20str%2Ereplace%28%2F%5Cx01%2Fg%2C%20%22%22%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28str%20%3D%3D%20c%2ElastValue%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%22%22%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28c%2ElastValue%20%26%26%20timer%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20host%2Eundo%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20str%3B%0A%09%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%20%20%20%20host%2EonCompositionEnd%28%29%3B%0A%09%20%20%20%20%20%20%20%20host%2EremoveListener%28%22mousedown%22%2C%20onCompositionEnd%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28e%2Etype%20%3D%3D%20%22compositionend%22%20%26%26%20c%2Erange%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20host%2Eselection%2EsetRange%28c%2Erange%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20%0A%09%20%20%20%20%0A%0A%09%20%20%20%20var%20syncComposition%20%3D%20lang%2EdelayedCall%28onCompositionUpdate%2C%2050%29%3B%0A%0A%09%20%20%20%20event%2EaddListener%28text%2C%20%22compositionstart%22%2C%20onCompositionStart%29%3B%0A%09%20%20%20%20if%20%28useragent%2EisGecko%29%20%7B%0A%09%20%20%20%20%20%20%20%20event%2EaddListener%28text%2C%20%22text%22%2C%20function%28%29%7BsyncComposition%2Eschedule%28%29%7D%29%3B%0A%09%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20event%2EaddListener%28text%2C%20%22keyup%22%2C%20function%28%29%7BsyncComposition%2Eschedule%28%29%7D%29%3B%0A%09%20%20%20%20%20%20%20%20event%2EaddListener%28text%2C%20%22keydown%22%2C%20function%28%29%7BsyncComposition%2Eschedule%28%29%7D%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20event%2EaddListener%28text%2C%20%22compositionend%22%2C%20onCompositionEnd%29%3B%0A%0A%09%20%20%20%20this%2EgetElement%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20text%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EsetReadOnly%20%3D%20function%28readOnly%29%20%7B%0A%09%20%20%20%20%20%20%20text%2EreadOnly%20%3D%20readOnly%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EonContextMenu%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20afterContextMenu%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20resetSelection%28host%2Eselection%2EisEmpty%28%29%29%3B%0A%09%20%20%20%20%20%20%20%20host%2E%5Femit%28%22nativecontextmenu%22%2C%20%7Btarget%3A%20host%2C%20domEvent%3A%20e%7D%29%3B%0A%09%20%20%20%20%20%20%20%20this%2EmoveToMouse%28e%2C%20true%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20%0A%09%20%20%20%20this%2EmoveToMouse%20%3D%20function%28e%2C%20bringToFront%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%21bringToFront%20%26%26%20useragent%2EisOldIE%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21tempStyle%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20tempStyle%20%3D%20text%2Estyle%2EcssText%3B%0A%09%20%20%20%20%20%20%20%20text%2Estyle%2EcssText%20%3D%20%28bringToFront%20%3F%20%22z%2Dindex%3A100000%3B%22%20%3A%20%22%22%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%2B%20%22height%3A%22%20%2B%20text%2Estyle%2Eheight%20%2B%20%22%3B%22%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%2B%20%28useragent%2EisIE%20%3F%20%22opacity%3A0%2E1%3B%22%20%3A%20%22%22%29%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20rect%20%3D%20host%2Econtainer%2EgetBoundingClientRect%28%29%3B%0A%09%20%20%20%20%20%20%20%20var%20style%20%3D%20dom%2EcomputedStyle%28host%2Econtainer%29%3B%0A%09%20%20%20%20%20%20%20%20var%20top%20%3D%20rect%2Etop%20%2B%20%28parseInt%28style%2EborderTopWidth%29%20%7C%7C%200%29%3B%0A%09%20%20%20%20%20%20%20%20var%20left%20%3D%20rect%2Eleft%20%2B%20%28parseInt%28rect%2EborderLeftWidth%29%20%7C%7C%200%29%3B%0A%09%20%20%20%20%20%20%20%20var%20maxTop%20%3D%20rect%2Ebottom%20%2D%20top%20%2D%20text%2EclientHeight%20%2D2%3B%0A%09%20%20%20%20%20%20%20%20var%20move%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20text%2Estyle%2Eleft%20%3D%20e%2EclientX%20%2D%20left%20%2D%202%20%2B%20%22px%22%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20text%2Estyle%2Etop%20%3D%20Math%2Emin%28e%2EclientY%20%2D%20top%20%2D%202%2C%20maxTop%29%20%2B%20%22px%22%3B%0A%09%20%20%20%20%20%20%20%20%7D%3B%20%0A%09%20%20%20%20%20%20%20%20move%28e%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28e%2Etype%20%21%3D%20%22mousedown%22%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28host%2Erenderer%2E%24keepTextAreaAtCursor%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20host%2Erenderer%2E%24keepTextAreaAtCursor%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20if%20%28useragent%2EisWin%20%26%26%20%21useragent%2EisOldIE%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20event%2Ecapture%28host%2Econtainer%2C%20move%2C%20onContextMenuClose%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EonContextMenuClose%20%3D%20onContextMenuClose%3B%0A%09%20%20%20%20var%20closeTimeout%3B%0A%09%20%20%20%20function%20onContextMenuClose%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20clearTimeout%28closeTimeout%29%0A%09%20%20%20%20%20%20%20%20closeTimeout%20%3D%20setTimeout%28function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28tempStyle%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20text%2Estyle%2EcssText%20%3D%20tempStyle%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tempStyle%20%3D%20%27%27%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28host%2Erenderer%2E%24keepTextAreaAtCursor%20%3D%3D%20null%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20host%2Erenderer%2E%24keepTextAreaAtCursor%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20host%2Erenderer%2E%24moveTextAreaToCursor%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%2C%20useragent%2EisOldIE%20%3F%20200%20%3A%200%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20var%20onContextMenu%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20host%2EtextInput%2EonContextMenu%28e%29%3B%0A%09%20%20%20%20%20%20%20%20onContextMenuClose%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20event%2EaddListener%28host%2Erenderer%2Escroller%2C%20%22contextmenu%22%2C%20onContextMenu%29%3B%0A%09%20%20%20%20event%2EaddListener%28text%2C%20%22contextmenu%22%2C%20onContextMenu%29%3B%0A%09%7D%3B%0A%0A%09exports%2ETextInput%20%3D%20TextInput%3B%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Fmouse%2Fdefault%5Fhandlers%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%2C%22ace%2Flib%2Fdom%22%2C%22ace%2Flib%2Fevent%22%2C%22ace%2Flib%2Fuseragent%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%0A%09var%20dom%20%3D%20acequire%28%22%2E%2E%2Flib%2Fdom%22%29%3B%0A%09var%20event%20%3D%20acequire%28%22%2E%2E%2Flib%2Fevent%22%29%3B%0A%09var%20useragent%20%3D%20acequire%28%22%2E%2E%2Flib%2Fuseragent%22%29%3B%0A%0A%09var%20DRAG%5FOFFSET%20%3D%200%3B%20%2F%2F%20pixels%0A%0A%09function%20DefaultHandlers%28mouseHandler%29%20%7B%0A%09%20%20%20%20mouseHandler%2E%24clickSelection%20%3D%20null%3B%0A%0A%09%20%20%20%20var%20editor%20%3D%20mouseHandler%2Eeditor%3B%0A%09%20%20%20%20editor%2EsetDefaultHandler%28%22mousedown%22%2C%20this%2EonMouseDown%2Ebind%28mouseHandler%29%29%3B%0A%09%20%20%20%20editor%2EsetDefaultHandler%28%22dblclick%22%2C%20this%2EonDoubleClick%2Ebind%28mouseHandler%29%29%3B%0A%09%20%20%20%20editor%2EsetDefaultHandler%28%22tripleclick%22%2C%20this%2EonTripleClick%2Ebind%28mouseHandler%29%29%3B%0A%09%20%20%20%20editor%2EsetDefaultHandler%28%22quadclick%22%2C%20this%2EonQuadClick%2Ebind%28mouseHandler%29%29%3B%0A%09%20%20%20%20editor%2EsetDefaultHandler%28%22mousewheel%22%2C%20this%2EonMouseWheel%2Ebind%28mouseHandler%29%29%3B%0A%0A%09%20%20%20%20var%20exports%20%3D%20%5B%22select%22%2C%20%22startSelect%22%2C%20%22selectEnd%22%2C%20%22selectAllEnd%22%2C%20%22selectByWordsEnd%22%2C%0A%09%20%20%20%20%20%20%20%20%22selectByLinesEnd%22%2C%20%22dragWait%22%2C%20%22dragWaitEnd%22%2C%20%22focusWait%22%5D%3B%0A%0A%09%20%20%20%20exports%2EforEach%28function%28x%29%20%7B%0A%09%20%20%20%20%20%20%20%20mouseHandler%5Bx%5D%20%3D%20this%5Bx%5D%3B%0A%09%20%20%20%20%7D%2C%20this%29%3B%0A%0A%09%20%20%20%20mouseHandler%2EselectByLines%20%3D%20this%2EextendSelectionBy%2Ebind%28mouseHandler%2C%20%22getLineRange%22%29%3B%0A%09%20%20%20%20mouseHandler%2EselectByWords%20%3D%20this%2EextendSelectionBy%2Ebind%28mouseHandler%2C%20%22getWordRange%22%29%3B%0A%09%7D%0A%0A%09%28function%28%29%20%7B%0A%0A%09%20%20%20%20this%2EonMouseDown%20%3D%20function%28ev%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20inSelection%20%3D%20ev%2EinSelection%28%29%3B%0A%09%20%20%20%20%20%20%20%20var%20pos%20%3D%20ev%2EgetDocumentPosition%28%29%3B%0A%09%20%20%20%20%20%20%20%20this%2EmousedownEvent%20%3D%20ev%3B%0A%09%20%20%20%20%20%20%20%20var%20editor%20%3D%20this%2Eeditor%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20button%20%3D%20ev%2EgetButton%28%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28button%20%21%3D%3D%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20selectionRange%20%3D%20editor%2EgetSelectionRange%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20selectionEmpty%20%3D%20selectionRange%2EisEmpty%28%29%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28selectionEmpty%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20editor%2Eselection%2EmoveToPosition%28pos%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2EtextInput%2EonContextMenu%28ev%2EdomEvent%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%20%2F%2F%20stopping%20event%20here%20breaks%20contextmenu%20on%20ff%20mac%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20this%2EmousedownEvent%2Etime%20%3D%20Date%2Enow%28%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28inSelection%20%26%26%20%21editor%2EisFocused%28%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28this%2E%24focusTimout%20%26%26%20%21this%2E%24clickSelection%20%26%26%20%21editor%2EinMultiSelectMode%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EsetState%28%22focusWait%22%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EcaptureMouse%28ev%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20this%2EcaptureMouse%28ev%29%3B%0A%09%20%20%20%20%20%20%20%20this%2EstartSelect%28pos%2C%20ev%2EdomEvent%2E%5Fclicks%20%3E%201%29%3B%0A%09%20%20%20%20%20%20%20%20return%20ev%2EpreventDefault%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EstartSelect%20%3D%20function%28pos%2C%20waitForClickSelection%29%20%7B%0A%09%20%20%20%20%20%20%20%20pos%20%3D%20pos%20%7C%7C%20this%2Eeditor%2Erenderer%2EscreenToTextCoordinates%28this%2Ex%2C%20this%2Ey%29%3B%0A%09%20%20%20%20%20%20%20%20var%20editor%20%3D%20this%2Eeditor%3B%0A%09%20%20%20%20%20%20%20%20%0A%09%20%20%20%20%20%20%20%20if%20%28this%2EmousedownEvent%2EgetShiftKey%28%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2Eselection%2EselectToPosition%28pos%29%3B%0A%09%20%20%20%20%20%20%20%20else%20if%20%28%21waitForClickSelection%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2Eselection%2EmoveToPosition%28pos%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21waitForClickSelection%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Eselect%28%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28editor%2Erenderer%2Escroller%2EsetCapture%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2Erenderer%2Escroller%2EsetCapture%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20editor%2EsetStyle%28%22ace%5Fselecting%22%29%3B%0A%09%20%20%20%20%20%20%20%20this%2EsetState%28%22select%22%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2Eselect%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20anchor%2C%20editor%20%3D%20this%2Eeditor%3B%0A%09%20%20%20%20%20%20%20%20var%20cursor%20%3D%20editor%2Erenderer%2EscreenToTextCoordinates%28this%2Ex%2C%20this%2Ey%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28this%2E%24clickSelection%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20cmp%20%3D%20this%2E%24clickSelection%2EcomparePoint%28cursor%29%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28cmp%20%3D%3D%20%2D1%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20anchor%20%3D%20this%2E%24clickSelection%2Eend%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28cmp%20%3D%3D%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20anchor%20%3D%20this%2E%24clickSelection%2Estart%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20orientedRange%20%3D%20calcRangeOrientation%28this%2E%24clickSelection%2C%20cursor%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cursor%20%3D%20orientedRange%2Ecursor%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20anchor%20%3D%20orientedRange%2Eanchor%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2Eselection%2EsetSelectionAnchor%28anchor%2Erow%2C%20anchor%2Ecolumn%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20editor%2Eselection%2EselectToPosition%28cursor%29%3B%0A%0A%09%20%20%20%20%20%20%20%20editor%2Erenderer%2EscrollCursorIntoView%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EextendSelectionBy%20%3D%20function%28unitName%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20anchor%2C%20editor%20%3D%20this%2Eeditor%3B%0A%09%20%20%20%20%20%20%20%20var%20cursor%20%3D%20editor%2Erenderer%2EscreenToTextCoordinates%28this%2Ex%2C%20this%2Ey%29%3B%0A%09%20%20%20%20%20%20%20%20var%20range%20%3D%20editor%2Eselection%5BunitName%5D%28cursor%2Erow%2C%20cursor%2Ecolumn%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28this%2E%24clickSelection%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20cmpStart%20%3D%20this%2E%24clickSelection%2EcomparePoint%28range%2Estart%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20cmpEnd%20%3D%20this%2E%24clickSelection%2EcomparePoint%28range%2Eend%29%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28cmpStart%20%3D%3D%20%2D1%20%26%26%20cmpEnd%20%3C%3D%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20anchor%20%3D%20this%2E%24clickSelection%2Eend%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28range%2Eend%2Erow%20%21%3D%20cursor%2Erow%20%7C%7C%20range%2Eend%2Ecolumn%20%21%3D%20cursor%2Ecolumn%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cursor%20%3D%20range%2Estart%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28cmpEnd%20%3D%3D%201%20%26%26%20cmpStart%20%3E%3D%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20anchor%20%3D%20this%2E%24clickSelection%2Estart%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28range%2Estart%2Erow%20%21%3D%20cursor%2Erow%20%7C%7C%20range%2Estart%2Ecolumn%20%21%3D%20cursor%2Ecolumn%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cursor%20%3D%20range%2Eend%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28cmpStart%20%3D%3D%20%2D1%20%26%26%20cmpEnd%20%3D%3D%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cursor%20%3D%20range%2Eend%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20anchor%20%3D%20range%2Estart%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20orientedRange%20%3D%20calcRangeOrientation%28this%2E%24clickSelection%2C%20cursor%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cursor%20%3D%20orientedRange%2Ecursor%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20anchor%20%3D%20orientedRange%2Eanchor%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2Eselection%2EsetSelectionAnchor%28anchor%2Erow%2C%20anchor%2Ecolumn%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20editor%2Eselection%2EselectToPosition%28cursor%29%3B%0A%0A%09%20%20%20%20%20%20%20%20editor%2Erenderer%2EscrollCursorIntoView%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EselectEnd%20%3D%0A%09%20%20%20%20this%2EselectAllEnd%20%3D%0A%09%20%20%20%20this%2EselectByWordsEnd%20%3D%0A%09%20%20%20%20this%2EselectByLinesEnd%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2E%24clickSelection%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20this%2Eeditor%2EunsetStyle%28%22ace%5Fselecting%22%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Eeditor%2Erenderer%2Escroller%2EreleaseCapture%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Eeditor%2Erenderer%2Escroller%2EreleaseCapture%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EfocusWait%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20distance%20%3D%20calcDistance%28this%2EmousedownEvent%2Ex%2C%20this%2EmousedownEvent%2Ey%2C%20this%2Ex%2C%20this%2Ey%29%3B%0A%09%20%20%20%20%20%20%20%20var%20time%20%3D%20Date%2Enow%28%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28distance%20%3E%20DRAG%5FOFFSET%20%7C%7C%20time%20%2D%20this%2EmousedownEvent%2Etime%20%3E%20this%2E%24focusTimout%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EstartSelect%28this%2EmousedownEvent%2EgetDocumentPosition%28%29%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EonDoubleClick%20%3D%20function%28ev%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20pos%20%3D%20ev%2EgetDocumentPosition%28%29%3B%0A%09%20%20%20%20%20%20%20%20var%20editor%20%3D%20this%2Eeditor%3B%0A%09%20%20%20%20%20%20%20%20var%20session%20%3D%20editor%2Esession%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20range%20%3D%20session%2EgetBracketRange%28pos%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28range%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28range%2EisEmpty%28%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20range%2Estart%2Ecolumn%2D%2D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20range%2Eend%2Ecolumn%2B%2B%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EsetState%28%22select%22%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20range%20%3D%20editor%2Eselection%2EgetWordRange%28pos%2Erow%2C%20pos%2Ecolumn%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EsetState%28%22selectByWords%22%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20this%2E%24clickSelection%20%3D%20range%3B%0A%09%20%20%20%20%20%20%20%20this%2Eselect%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EonTripleClick%20%3D%20function%28ev%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20pos%20%3D%20ev%2EgetDocumentPosition%28%29%3B%0A%09%20%20%20%20%20%20%20%20var%20editor%20%3D%20this%2Eeditor%3B%0A%0A%09%20%20%20%20%20%20%20%20this%2EsetState%28%22selectByLines%22%29%3B%0A%09%20%20%20%20%20%20%20%20var%20range%20%3D%20editor%2EgetSelectionRange%28%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28range%2EisMultiLine%28%29%20%26%26%20range%2Econtains%28pos%2Erow%2C%20pos%2Ecolumn%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24clickSelection%20%3D%20editor%2Eselection%2EgetLineRange%28range%2Estart%2Erow%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24clickSelection%2Eend%20%3D%20editor%2Eselection%2EgetLineRange%28range%2Eend%2Erow%29%2Eend%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24clickSelection%20%3D%20editor%2Eselection%2EgetLineRange%28pos%2Erow%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20this%2Eselect%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EonQuadClick%20%3D%20function%28ev%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20editor%20%3D%20this%2Eeditor%3B%0A%0A%09%20%20%20%20%20%20%20%20editor%2EselectAll%28%29%3B%0A%09%20%20%20%20%20%20%20%20this%2E%24clickSelection%20%3D%20editor%2EgetSelectionRange%28%29%3B%0A%09%20%20%20%20%20%20%20%20this%2EsetState%28%22selectAll%22%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EonMouseWheel%20%3D%20function%28ev%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28ev%2EgetAccelKey%28%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20if%20%28ev%2EgetShiftKey%28%29%20%26%26%20ev%2EwheelY%20%26%26%20%21ev%2EwheelX%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20ev%2EwheelX%20%3D%20ev%2EwheelY%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20ev%2EwheelY%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20var%20t%20%3D%20ev%2EdomEvent%2EtimeStamp%3B%0A%09%20%20%20%20%20%20%20%20var%20dt%20%3D%20t%20%2D%20%28this%2E%24lastScrollTime%7C%7C0%29%3B%0A%09%20%20%20%20%20%20%20%20%0A%09%20%20%20%20%20%20%20%20var%20editor%20%3D%20this%2Eeditor%3B%0A%09%20%20%20%20%20%20%20%20var%20isScrolable%20%3D%20editor%2Erenderer%2EisScrollableBy%28ev%2EwheelX%20%2A%20ev%2Espeed%2C%20ev%2EwheelY%20%2A%20ev%2Espeed%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28isScrolable%20%7C%7C%20dt%20%3C%20200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24lastScrollTime%20%3D%20t%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2Erenderer%2EscrollBy%28ev%2EwheelX%20%2A%20ev%2Espeed%2C%20ev%2EwheelY%20%2A%20ev%2Espeed%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20ev%2Estop%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%0A%09%7D%29%2Ecall%28DefaultHandlers%2Eprototype%29%3B%0A%0A%09exports%2EDefaultHandlers%20%3D%20DefaultHandlers%3B%0A%0A%09function%20calcDistance%28ax%2C%20ay%2C%20bx%2C%20by%29%20%7B%0A%09%20%20%20%20return%20Math%2Esqrt%28Math%2Epow%28bx%20%2D%20ax%2C%202%29%20%2B%20Math%2Epow%28by%20%2D%20ay%2C%202%29%29%3B%0A%09%7D%0A%0A%09function%20calcRangeOrientation%28range%2C%20cursor%29%20%7B%0A%09%20%20%20%20if%20%28range%2Estart%2Erow%20%3D%3D%20range%2Eend%2Erow%29%0A%09%20%20%20%20%20%20%20%20var%20cmp%20%3D%202%20%2A%20cursor%2Ecolumn%20%2D%20range%2Estart%2Ecolumn%20%2D%20range%2Eend%2Ecolumn%3B%0A%09%20%20%20%20else%20if%20%28range%2Estart%2Erow%20%3D%3D%20range%2Eend%2Erow%20%2D%201%20%26%26%20%21range%2Estart%2Ecolumn%20%26%26%20%21range%2Eend%2Ecolumn%29%0A%09%20%20%20%20%20%20%20%20var%20cmp%20%3D%20cursor%2Ecolumn%20%2D%204%3B%0A%09%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20var%20cmp%20%3D%202%20%2A%20cursor%2Erow%20%2D%20range%2Estart%2Erow%20%2D%20range%2Eend%2Erow%3B%0A%0A%09%20%20%20%20if%20%28cmp%20%3C%200%29%0A%09%20%20%20%20%20%20%20%20return%20%7Bcursor%3A%20range%2Estart%2C%20anchor%3A%20range%2Eend%7D%3B%0A%09%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20return%20%7Bcursor%3A%20range%2Eend%2C%20anchor%3A%20range%2Estart%7D%3B%0A%09%7D%0A%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Ftooltip%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%2C%22ace%2Flib%2Foop%22%2C%22ace%2Flib%2Fdom%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%0A%09var%20oop%20%3D%20acequire%28%22%2E%2Flib%2Foop%22%29%3B%0A%09var%20dom%20%3D%20acequire%28%22%2E%2Flib%2Fdom%22%29%3B%0A%09function%20Tooltip%20%28parentNode%29%20%7B%0A%09%20%20%20%20this%2EisOpen%20%3D%20false%3B%0A%09%20%20%20%20this%2E%24element%20%3D%20null%3B%0A%09%20%20%20%20this%2E%24parentNode%20%3D%20parentNode%3B%0A%09%7D%0A%0A%09%28function%28%29%20%7B%0A%09%20%20%20%20this%2E%24init%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2E%24element%20%3D%20dom%2EcreateElement%28%22div%22%29%3B%0A%09%20%20%20%20%20%20%20%20this%2E%24element%2EclassName%20%3D%20%22ace%5Ftooltip%22%3B%0A%09%20%20%20%20%20%20%20%20this%2E%24element%2Estyle%2Edisplay%20%3D%20%22none%22%3B%0A%09%20%20%20%20%20%20%20%20this%2E%24parentNode%2EappendChild%28this%2E%24element%29%3B%0A%09%20%20%20%20%20%20%20%20return%20this%2E%24element%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EgetElement%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20this%2E%24element%20%7C%7C%20this%2E%24init%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EsetText%20%3D%20function%28text%29%20%7B%0A%09%20%20%20%20%20%20%20%20dom%2EsetInnerText%28this%2EgetElement%28%29%2C%20text%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EsetHtml%20%3D%20function%28html%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2EgetElement%28%29%2EinnerHTML%20%3D%20html%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EsetPosition%20%3D%20function%28x%2C%20y%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2EgetElement%28%29%2Estyle%2Eleft%20%3D%20x%20%2B%20%22px%22%3B%0A%09%20%20%20%20%20%20%20%20this%2EgetElement%28%29%2Estyle%2Etop%20%3D%20y%20%2B%20%22px%22%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EsetClassName%20%3D%20function%28className%29%20%7B%0A%09%20%20%20%20%20%20%20%20dom%2EaddCssClass%28this%2EgetElement%28%29%2C%20className%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2Eshow%20%3D%20function%28text%2C%20x%2C%20y%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28text%20%21%3D%20null%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EsetText%28text%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28x%20%21%3D%20null%20%26%26%20y%20%21%3D%20null%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EsetPosition%28x%2C%20y%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21this%2EisOpen%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EgetElement%28%29%2Estyle%2Edisplay%20%3D%20%22block%22%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EisOpen%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2Ehide%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2EisOpen%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EgetElement%28%29%2Estyle%2Edisplay%20%3D%20%22none%22%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EisOpen%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EgetHeight%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20this%2EgetElement%28%29%2EoffsetHeight%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EgetWidth%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20this%2EgetElement%28%29%2EoffsetWidth%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%7D%29%2Ecall%28Tooltip%2Eprototype%29%3B%0A%0A%09exports%2ETooltip%20%3D%20Tooltip%3B%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Fmouse%2Fdefault%5Fgutter%5Fhandler%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%2C%22ace%2Flib%2Fdom%22%2C%22ace%2Flib%2Foop%22%2C%22ace%2Flib%2Fevent%22%2C%22ace%2Ftooltip%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%09var%20dom%20%3D%20acequire%28%22%2E%2E%2Flib%2Fdom%22%29%3B%0A%09var%20oop%20%3D%20acequire%28%22%2E%2E%2Flib%2Foop%22%29%3B%0A%09var%20event%20%3D%20acequire%28%22%2E%2E%2Flib%2Fevent%22%29%3B%0A%09var%20Tooltip%20%3D%20acequire%28%22%2E%2E%2Ftooltip%22%29%2ETooltip%3B%0A%0A%09function%20GutterHandler%28mouseHandler%29%20%7B%0A%09%20%20%20%20var%20editor%20%3D%20mouseHandler%2Eeditor%3B%0A%09%20%20%20%20var%20gutter%20%3D%20editor%2Erenderer%2E%24gutterLayer%3B%0A%09%20%20%20%20var%20tooltip%20%3D%20new%20GutterTooltip%28editor%2Econtainer%29%3B%0A%0A%09%20%20%20%20mouseHandler%2Eeditor%2EsetDefaultHandler%28%22guttermousedown%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%21editor%2EisFocused%28%29%20%7C%7C%20e%2EgetButton%28%29%20%21%3D%200%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20var%20gutterRegion%20%3D%20gutter%2EgetRegion%28e%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28gutterRegion%20%3D%3D%20%22foldWidgets%22%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20row%20%3D%20e%2EgetDocumentPosition%28%29%2Erow%3B%0A%09%20%20%20%20%20%20%20%20var%20selection%20%3D%20editor%2Esession%2Eselection%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28e%2EgetShiftKey%28%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20selection%2EselectTo%28row%2C%200%29%3B%0A%09%20%20%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e%2EdomEvent%2Edetail%20%3D%3D%202%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20editor%2EselectAll%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20e%2EpreventDefault%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20mouseHandler%2E%24clickSelection%20%3D%20editor%2Eselection%2EgetLineRange%28row%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20mouseHandler%2EsetState%28%22selectByLines%22%29%3B%0A%09%20%20%20%20%20%20%20%20mouseHandler%2EcaptureMouse%28e%29%3B%0A%09%20%20%20%20%20%20%20%20return%20e%2EpreventDefault%28%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%0A%0A%09%20%20%20%20var%20tooltipTimeout%2C%20mouseEvent%2C%20tooltipAnnotation%3B%0A%0A%09%20%20%20%20function%20showTooltip%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20row%20%3D%20mouseEvent%2EgetDocumentPosition%28%29%2Erow%3B%0A%09%20%20%20%20%20%20%20%20var%20annotation%20%3D%20gutter%2E%24annotations%5Brow%5D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21annotation%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20hideTooltip%28%29%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20maxRow%20%3D%20editor%2Esession%2EgetLength%28%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28row%20%3D%3D%20maxRow%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20screenRow%20%3D%20editor%2Erenderer%2EpixelToScreenCoordinates%280%2C%20mouseEvent%2Ey%29%2Erow%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20pos%20%3D%20mouseEvent%2E%24pos%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28screenRow%20%3E%20editor%2Esession%2EdocumentToScreenRow%28pos%2Erow%2C%20pos%2Ecolumn%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20hideTooltip%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20if%20%28tooltipAnnotation%20%3D%3D%20annotation%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20tooltipAnnotation%20%3D%20annotation%2Etext%2Ejoin%28%22%3Cbr%2F%3E%22%29%3B%0A%0A%09%20%20%20%20%20%20%20%20tooltip%2EsetHtml%28tooltipAnnotation%29%3B%0A%09%20%20%20%20%20%20%20%20tooltip%2Eshow%28%29%3B%0A%09%20%20%20%20%20%20%20%20editor%2Eon%28%22mousewheel%22%2C%20hideTooltip%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28mouseHandler%2E%24tooltipFollowsMouse%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20moveTooltip%28mouseEvent%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20gutterElement%20%3D%20gutter%2E%24cells%5Beditor%2Esession%2EdocumentToScreenRow%28row%2C%200%29%5D%2Eelement%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20rect%20%3D%20gutterElement%2EgetBoundingClientRect%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20style%20%3D%20tooltip%2EgetElement%28%29%2Estyle%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20style%2Eleft%20%3D%20rect%2Eright%20%2B%20%22px%22%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20style%2Etop%20%3D%20rect%2Ebottom%20%2B%20%22px%22%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20function%20hideTooltip%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28tooltipTimeout%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20tooltipTimeout%20%3D%20clearTimeout%28tooltipTimeout%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28tooltipAnnotation%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20tooltip%2Ehide%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20tooltipAnnotation%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2EremoveEventListener%28%22mousewheel%22%2C%20hideTooltip%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20function%20moveTooltip%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20tooltip%2EsetPosition%28e%2Ex%2C%20e%2Ey%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20mouseHandler%2Eeditor%2EsetDefaultHandler%28%22guttermousemove%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20target%20%3D%20e%2EdomEvent%2Etarget%20%7C%7C%20e%2EdomEvent%2EsrcElement%3B%0A%09%20%20%20%20%20%20%20%20if%20%28dom%2EhasCssClass%28target%2C%20%22ace%5Ffold%2Dwidget%22%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20hideTooltip%28%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28tooltipAnnotation%20%26%26%20mouseHandler%2E%24tooltipFollowsMouse%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20moveTooltip%28e%29%3B%0A%0A%09%20%20%20%20%20%20%20%20mouseEvent%20%3D%20e%3B%0A%09%20%20%20%20%20%20%20%20if%20%28tooltipTimeout%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20tooltipTimeout%20%3D%20setTimeout%28function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20tooltipTimeout%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28mouseEvent%20%26%26%20%21mouseHandler%2EisMousePressed%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20showTooltip%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20hideTooltip%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%2C%2050%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20event%2EaddListener%28editor%2Erenderer%2E%24gutter%2C%20%22mouseout%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20mouseEvent%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21tooltipAnnotation%20%7C%7C%20tooltipTimeout%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%0A%09%20%20%20%20%20%20%20%20tooltipTimeout%20%3D%20setTimeout%28function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20tooltipTimeout%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20hideTooltip%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%2C%2050%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%0A%09%20%20%20%20editor%2Eon%28%22changeSession%22%2C%20hideTooltip%29%3B%0A%09%7D%0A%0A%09function%20GutterTooltip%28parentNode%29%20%7B%0A%09%20%20%20%20Tooltip%2Ecall%28this%2C%20parentNode%29%3B%0A%09%7D%0A%0A%09oop%2Einherits%28GutterTooltip%2C%20Tooltip%29%3B%0A%0A%09%28function%28%29%7B%0A%09%20%20%20%20this%2EsetPosition%20%3D%20function%28x%2C%20y%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20windowWidth%20%3D%20window%2EinnerWidth%20%7C%7C%20document%2EdocumentElement%2EclientWidth%3B%0A%09%20%20%20%20%20%20%20%20var%20windowHeight%20%3D%20window%2EinnerHeight%20%7C%7C%20document%2EdocumentElement%2EclientHeight%3B%0A%09%20%20%20%20%20%20%20%20var%20width%20%3D%20this%2EgetWidth%28%29%3B%0A%09%20%20%20%20%20%20%20%20var%20height%20%3D%20this%2EgetHeight%28%29%3B%0A%09%20%20%20%20%20%20%20%20x%20%2B%3D%2015%3B%0A%09%20%20%20%20%20%20%20%20y%20%2B%3D%2015%3B%0A%09%20%20%20%20%20%20%20%20if%20%28x%20%2B%20width%20%3E%20windowWidth%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20x%20%2D%3D%20%28x%20%2B%20width%29%20%2D%20windowWidth%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28y%20%2B%20height%20%3E%20windowHeight%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20y%20%2D%3D%2020%20%2B%20height%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20Tooltip%2Eprototype%2EsetPosition%2Ecall%28this%2C%20x%2C%20y%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%7D%29%2Ecall%28GutterTooltip%2Eprototype%29%3B%0A%0A%0A%0A%09exports%2EGutterHandler%20%3D%20GutterHandler%3B%0A%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Fmouse%2Fmouse%5Fevent%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%2C%22ace%2Flib%2Fevent%22%2C%22ace%2Flib%2Fuseragent%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%0A%09var%20event%20%3D%20acequire%28%22%2E%2E%2Flib%2Fevent%22%29%3B%0A%09var%20useragent%20%3D%20acequire%28%22%2E%2E%2Flib%2Fuseragent%22%29%3B%0A%09var%20MouseEvent%20%3D%20exports%2EMouseEvent%20%3D%20function%28domEvent%2C%20editor%29%20%7B%0A%09%20%20%20%20this%2EdomEvent%20%3D%20domEvent%3B%0A%09%20%20%20%20this%2Eeditor%20%3D%20editor%3B%0A%09%20%20%20%20%0A%09%20%20%20%20this%2Ex%20%3D%20this%2EclientX%20%3D%20domEvent%2EclientX%3B%0A%09%20%20%20%20this%2Ey%20%3D%20this%2EclientY%20%3D%20domEvent%2EclientY%3B%0A%0A%09%20%20%20%20this%2E%24pos%20%3D%20null%3B%0A%09%20%20%20%20this%2E%24inSelection%20%3D%20null%3B%0A%09%20%20%20%20%0A%09%20%20%20%20this%2EpropagationStopped%20%3D%20false%3B%0A%09%20%20%20%20this%2EdefaultPrevented%20%3D%20false%3B%0A%09%7D%3B%0A%0A%09%28function%28%29%20%7B%20%20%0A%09%20%20%20%20%0A%09%20%20%20%20this%2EstopPropagation%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20event%2EstopPropagation%28this%2EdomEvent%29%3B%0A%09%20%20%20%20%20%20%20%20this%2EpropagationStopped%20%3D%20true%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20%0A%09%20%20%20%20this%2EpreventDefault%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20event%2EpreventDefault%28this%2EdomEvent%29%3B%0A%09%20%20%20%20%20%20%20%20this%2EdefaultPrevented%20%3D%20true%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20%0A%09%20%20%20%20this%2Estop%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2EstopPropagation%28%29%3B%0A%09%20%20%20%20%20%20%20%20this%2EpreventDefault%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EgetDocumentPosition%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2E%24pos%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20this%2E%24pos%3B%0A%09%20%20%20%20%20%20%20%20%0A%09%20%20%20%20%20%20%20%20this%2E%24pos%20%3D%20this%2Eeditor%2Erenderer%2EscreenToTextCoordinates%28this%2EclientX%2C%20this%2EclientY%29%3B%0A%09%20%20%20%20%20%20%20%20return%20this%2E%24pos%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EinSelection%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2E%24inSelection%20%21%3D%3D%20null%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20this%2E%24inSelection%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%0A%09%20%20%20%20%20%20%20%20var%20editor%20%3D%20this%2Eeditor%3B%0A%09%20%20%20%20%20%20%20%20%0A%0A%09%20%20%20%20%20%20%20%20var%20selectionRange%20%3D%20editor%2EgetSelectionRange%28%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28selectionRange%2EisEmpty%28%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24inSelection%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20pos%20%3D%20this%2EgetDocumentPosition%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24inSelection%20%3D%20selectionRange%2Econtains%28pos%2Erow%2C%20pos%2Ecolumn%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20return%20this%2E%24inSelection%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EgetButton%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20event%2EgetButton%28this%2EdomEvent%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EgetShiftKey%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20this%2EdomEvent%2EshiftKey%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20%0A%09%20%20%20%20this%2EgetAccelKey%20%3D%20useragent%2EisMac%0A%09%20%20%20%20%20%20%20%20%3F%20function%28%29%20%7B%20return%20this%2EdomEvent%2EmetaKey%3B%20%7D%0A%09%20%20%20%20%20%20%20%20%3A%20function%28%29%20%7B%20return%20this%2EdomEvent%2EctrlKey%3B%20%7D%3B%0A%09%20%20%20%20%0A%09%7D%29%2Ecall%28MouseEvent%2Eprototype%29%3B%0A%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Fmouse%2Fdragdrop%5Fhandler%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%2C%22ace%2Flib%2Fdom%22%2C%22ace%2Flib%2Fevent%22%2C%22ace%2Flib%2Fuseragent%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%0A%09var%20dom%20%3D%20acequire%28%22%2E%2E%2Flib%2Fdom%22%29%3B%0A%09var%20event%20%3D%20acequire%28%22%2E%2E%2Flib%2Fevent%22%29%3B%0A%09var%20useragent%20%3D%20acequire%28%22%2E%2E%2Flib%2Fuseragent%22%29%3B%0A%0A%09var%20AUTOSCROLL%5FDELAY%20%3D%20200%3B%0A%09var%20SCROLL%5FCURSOR%5FDELAY%20%3D%20200%3B%0A%09var%20SCROLL%5FCURSOR%5FHYSTERESIS%20%3D%205%3B%0A%0A%09function%20DragdropHandler%28mouseHandler%29%20%7B%0A%0A%09%20%20%20%20var%20editor%20%3D%20mouseHandler%2Eeditor%3B%0A%0A%09%20%20%20%20var%20blankImage%20%3D%20dom%2EcreateElement%28%22img%22%29%3B%0A%09%20%20%20%20blankImage%2Esrc%20%3D%20%22data%3Aimage%2Fgif%3Bbase64%2CR0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw%3D%3D%22%3B%0A%09%20%20%20%20if%20%28useragent%2EisOpera%29%0A%09%20%20%20%20%20%20%20%20blankImage%2Estyle%2EcssText%20%3D%20%22width%3A1px%3Bheight%3A1px%3Bposition%3Afixed%3Btop%3A0%3Bleft%3A0%3Bz%2Dindex%3A2147483647%3Bopacity%3A0%3B%22%3B%0A%0A%09%20%20%20%20var%20exports%20%3D%20%5B%22dragWait%22%2C%20%22dragWaitEnd%22%2C%20%22startDrag%22%2C%20%22dragReadyEnd%22%2C%20%22onMouseDrag%22%5D%3B%0A%0A%09%20%20%20%20%20exports%2EforEach%28function%28x%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20mouseHandler%5Bx%5D%20%3D%20this%5Bx%5D%3B%0A%09%20%20%20%20%7D%2C%20this%29%3B%0A%09%20%20%20%20editor%2EaddEventListener%28%22mousedown%22%2C%20this%2EonMouseDown%2Ebind%28mouseHandler%29%29%3B%0A%0A%0A%09%20%20%20%20var%20mouseTarget%20%3D%20editor%2Econtainer%3B%0A%09%20%20%20%20var%20dragSelectionMarker%2C%20x%2C%20y%3B%0A%09%20%20%20%20var%20timerId%2C%20range%3B%0A%09%20%20%20%20var%20dragCursor%2C%20counter%20%3D%200%3B%0A%09%20%20%20%20var%20dragOperation%3B%0A%09%20%20%20%20var%20isInternal%3B%0A%09%20%20%20%20var%20autoScrollStartTime%3B%0A%09%20%20%20%20var%20cursorMovedTime%3B%0A%09%20%20%20%20var%20cursorPointOnCaretMoved%3B%0A%0A%09%20%20%20%20this%2EonDragStart%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2EcancelDrag%20%7C%7C%20%21mouseTarget%2Edraggable%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20self%20%3D%20this%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28%29%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%2EstartSelect%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20self%2EcaptureMouse%28e%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%200%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20e%2EpreventDefault%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20range%20%3D%20editor%2EgetSelectionRange%28%29%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20dataTransfer%20%3D%20e%2EdataTransfer%3B%0A%09%20%20%20%20%20%20%20%20dataTransfer%2EeffectAllowed%20%3D%20editor%2EgetReadOnly%28%29%20%3F%20%22copy%22%20%3A%20%22copyMove%22%3B%0A%09%20%20%20%20%20%20%20%20if%20%28useragent%2EisOpera%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2Econtainer%2EappendChild%28blankImage%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20blankImage%2EscrollTop%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20dataTransfer%2EsetDragImage%20%26%26%20dataTransfer%2EsetDragImage%28blankImage%2C%200%2C%200%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28useragent%2EisOpera%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2Econtainer%2EremoveChild%28blankImage%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20dataTransfer%2EclearData%28%29%3B%0A%09%20%20%20%20%20%20%20%20dataTransfer%2EsetData%28%22Text%22%2C%20editor%2Esession%2EgetTextRange%28%29%29%3B%0A%0A%09%20%20%20%20%20%20%20%20isInternal%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20this%2EsetState%28%22drag%22%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EonDragEnd%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20mouseTarget%2Edraggable%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20isInternal%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20this%2EsetState%28null%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21editor%2EgetReadOnly%28%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20dropEffect%20%3D%20e%2EdataTransfer%2EdropEffect%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21dragOperation%20%26%26%20dropEffect%20%3D%3D%20%22move%22%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20editor%2Esession%2Eremove%28editor%2EgetSelectionRange%28%29%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2Erenderer%2E%24cursorLayer%2EsetBlinking%28true%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20this%2Eeditor%2EunsetStyle%28%22ace%5Fdragging%22%29%3B%0A%09%20%20%20%20%20%20%20%20this%2Eeditor%2Erenderer%2EsetCursorStyle%28%22%22%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EonDragEnter%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28editor%2EgetReadOnly%28%29%20%7C%7C%20%21canAccept%28e%2EdataTransfer%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20x%20%3D%20e%2EclientX%3B%0A%09%20%20%20%20%20%20%20%20y%20%3D%20e%2EclientY%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21dragSelectionMarker%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20addDragMarker%28%29%3B%0A%09%20%20%20%20%20%20%20%20counter%2B%2B%3B%0A%09%20%20%20%20%20%20%20%20e%2EdataTransfer%2EdropEffect%20%3D%20dragOperation%20%3D%20getDropEffect%28e%29%3B%0A%09%20%20%20%20%20%20%20%20return%20event%2EpreventDefault%28e%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EonDragOver%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28editor%2EgetReadOnly%28%29%20%7C%7C%20%21canAccept%28e%2EdataTransfer%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20x%20%3D%20e%2EclientX%3B%0A%09%20%20%20%20%20%20%20%20y%20%3D%20e%2EclientY%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21dragSelectionMarker%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20addDragMarker%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20counter%2B%2B%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28onMouseMoveTimer%20%21%3D%3D%20null%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20onMouseMoveTimer%20%3D%20null%3B%0A%0A%09%20%20%20%20%20%20%20%20e%2EdataTransfer%2EdropEffect%20%3D%20dragOperation%20%3D%20getDropEffect%28e%29%3B%0A%09%20%20%20%20%20%20%20%20return%20event%2EpreventDefault%28e%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EonDragLeave%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20counter%2D%2D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28counter%20%3C%3D%200%20%26%26%20dragSelectionMarker%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20clearDragMarker%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20dragOperation%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20event%2EpreventDefault%28e%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EonDrop%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%21dragCursor%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20var%20dataTransfer%20%3D%20e%2EdataTransfer%3B%0A%09%20%20%20%20%20%20%20%20if%20%28isInternal%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20switch%20%28dragOperation%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%20%22move%22%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28range%2Econtains%28dragCursor%2Erow%2C%20dragCursor%2Ecolumn%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20range%20%3D%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20start%3A%20dragCursor%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20end%3A%20dragCursor%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20range%20%3D%20editor%2EmoveText%28range%2C%20dragCursor%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20case%20%22copy%22%3A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20range%20%3D%20editor%2EmoveText%28range%2C%20dragCursor%2C%20true%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20dropData%20%3D%20dataTransfer%2EgetData%28%27Text%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20range%20%3D%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20start%3A%20dragCursor%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20end%3A%20editor%2Esession%2Einsert%28dragCursor%2C%20dropData%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20dragOperation%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20clearDragMarker%28%29%3B%0A%09%20%20%20%20%20%20%20%20return%20event%2EpreventDefault%28e%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20event%2EaddListener%28mouseTarget%2C%20%22dragstart%22%2C%20this%2EonDragStart%2Ebind%28mouseHandler%29%29%3B%0A%09%20%20%20%20event%2EaddListener%28mouseTarget%2C%20%22dragend%22%2C%20this%2EonDragEnd%2Ebind%28mouseHandler%29%29%3B%0A%09%20%20%20%20event%2EaddListener%28mouseTarget%2C%20%22dragenter%22%2C%20this%2EonDragEnter%2Ebind%28mouseHandler%29%29%3B%0A%09%20%20%20%20event%2EaddListener%28mouseTarget%2C%20%22dragover%22%2C%20this%2EonDragOver%2Ebind%28mouseHandler%29%29%3B%0A%09%20%20%20%20event%2EaddListener%28mouseTarget%2C%20%22dragleave%22%2C%20this%2EonDragLeave%2Ebind%28mouseHandler%29%29%3B%0A%09%20%20%20%20event%2EaddListener%28mouseTarget%2C%20%22drop%22%2C%20this%2EonDrop%2Ebind%28mouseHandler%29%29%3B%0A%0A%09%20%20%20%20function%20scrollCursorIntoView%28cursor%2C%20prevCursor%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20now%20%3D%20Date%2Enow%28%29%3B%0A%09%20%20%20%20%20%20%20%20var%20vMovement%20%3D%20%21prevCursor%20%7C%7C%20cursor%2Erow%20%21%3D%20prevCursor%2Erow%3B%0A%09%20%20%20%20%20%20%20%20var%20hMovement%20%3D%20%21prevCursor%20%7C%7C%20cursor%2Ecolumn%20%21%3D%20prevCursor%2Ecolumn%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21cursorMovedTime%20%7C%7C%20vMovement%20%7C%7C%20hMovement%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2E%24blockScrolling%20%2B%3D%201%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2EmoveCursorToPosition%28cursor%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2E%24blockScrolling%20%2D%3D%201%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20cursorMovedTime%20%3D%20now%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20cursorPointOnCaretMoved%20%3D%20%7Bx%3A%20x%2C%20y%3A%20y%7D%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20distance%20%3D%20calcDistance%28cursorPointOnCaretMoved%2Ex%2C%20cursorPointOnCaretMoved%2Ey%2C%20x%2C%20y%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28distance%20%3E%20SCROLL%5FCURSOR%5FHYSTERESIS%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cursorMovedTime%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28now%20%2D%20cursorMovedTime%20%3E%3D%20SCROLL%5FCURSOR%5FDELAY%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20editor%2Erenderer%2EscrollCursorIntoView%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cursorMovedTime%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20function%20autoScroll%28cursor%2C%20prevCursor%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20now%20%3D%20Date%2Enow%28%29%3B%0A%09%20%20%20%20%20%20%20%20var%20lineHeight%20%3D%20editor%2Erenderer%2ElayerConfig%2ElineHeight%3B%0A%09%20%20%20%20%20%20%20%20var%20characterWidth%20%3D%20editor%2Erenderer%2ElayerConfig%2EcharacterWidth%3B%0A%09%20%20%20%20%20%20%20%20var%20editorRect%20%3D%20editor%2Erenderer%2Escroller%2EgetBoundingClientRect%28%29%3B%0A%09%20%20%20%20%20%20%20%20var%20offsets%20%3D%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20x%3A%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20left%3A%20x%20%2D%20editorRect%2Eleft%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20right%3A%20editorRect%2Eright%20%2D%20x%0A%09%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20y%3A%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20top%3A%20y%20%2D%20editorRect%2Etop%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bottom%3A%20editorRect%2Ebottom%20%2D%20y%0A%09%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%20%20%20%20var%20nearestXOffset%20%3D%20Math%2Emin%28offsets%2Ex%2Eleft%2C%20offsets%2Ex%2Eright%29%3B%0A%09%20%20%20%20%20%20%20%20var%20nearestYOffset%20%3D%20Math%2Emin%28offsets%2Ey%2Etop%2C%20offsets%2Ey%2Ebottom%29%3B%0A%09%20%20%20%20%20%20%20%20var%20scrollCursor%20%3D%20%7Brow%3A%20cursor%2Erow%2C%20column%3A%20cursor%2Ecolumn%7D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28nearestXOffset%20%2F%20characterWidth%20%3C%3D%202%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20scrollCursor%2Ecolumn%20%2B%3D%20%28offsets%2Ex%2Eleft%20%3C%20offsets%2Ex%2Eright%20%3F%20%2D3%20%3A%20%2B2%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28nearestYOffset%20%2F%20lineHeight%20%3C%3D%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20scrollCursor%2Erow%20%2B%3D%20%28offsets%2Ey%2Etop%20%3C%20offsets%2Ey%2Ebottom%20%3F%20%2D1%20%3A%20%2B1%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20var%20vScroll%20%3D%20cursor%2Erow%20%21%3D%20scrollCursor%2Erow%3B%0A%09%20%20%20%20%20%20%20%20var%20hScroll%20%3D%20cursor%2Ecolumn%20%21%3D%20scrollCursor%2Ecolumn%3B%0A%09%20%20%20%20%20%20%20%20var%20vMovement%20%3D%20%21prevCursor%20%7C%7C%20cursor%2Erow%20%21%3D%20prevCursor%2Erow%3B%0A%09%20%20%20%20%20%20%20%20if%20%28vScroll%20%7C%7C%20%28hScroll%20%26%26%20%21vMovement%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21autoScrollStartTime%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20autoScrollStartTime%20%3D%20now%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20else%20if%20%28now%20%2D%20autoScrollStartTime%20%3E%3D%20AUTOSCROLL%5FDELAY%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20editor%2Erenderer%2EscrollCursorIntoView%28scrollCursor%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20autoScrollStartTime%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20function%20onDragInterval%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20prevCursor%20%3D%20dragCursor%3B%0A%09%20%20%20%20%20%20%20%20dragCursor%20%3D%20editor%2Erenderer%2EscreenToTextCoordinates%28x%2C%20y%29%3B%0A%09%20%20%20%20%20%20%20%20scrollCursorIntoView%28dragCursor%2C%20prevCursor%29%3B%0A%09%20%20%20%20%20%20%20%20autoScroll%28dragCursor%2C%20prevCursor%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20function%20addDragMarker%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20range%20%3D%20editor%2Eselection%2EtoOrientedRange%28%29%3B%0A%09%20%20%20%20%20%20%20%20dragSelectionMarker%20%3D%20editor%2Esession%2EaddMarker%28range%2C%20%22ace%5Fselection%22%2C%20editor%2EgetSelectionStyle%28%29%29%3B%0A%09%20%20%20%20%20%20%20%20editor%2EclearSelection%28%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28editor%2EisFocused%28%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2Erenderer%2E%24cursorLayer%2EsetBlinking%28false%29%3B%0A%09%20%20%20%20%20%20%20%20clearInterval%28timerId%29%3B%0A%09%20%20%20%20%20%20%20%20onDragInterval%28%29%3B%0A%09%20%20%20%20%20%20%20%20timerId%20%3D%20setInterval%28onDragInterval%2C%2020%29%3B%0A%09%20%20%20%20%20%20%20%20counter%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20event%2EaddListener%28document%2C%20%22mousemove%22%2C%20onMouseMove%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20function%20clearDragMarker%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20clearInterval%28timerId%29%3B%0A%09%20%20%20%20%20%20%20%20editor%2Esession%2EremoveMarker%28dragSelectionMarker%29%3B%0A%09%20%20%20%20%20%20%20%20dragSelectionMarker%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20editor%2E%24blockScrolling%20%2B%3D%201%3B%0A%09%20%20%20%20%20%20%20%20editor%2Eselection%2EfromOrientedRange%28range%29%3B%0A%09%20%20%20%20%20%20%20%20editor%2E%24blockScrolling%20%2D%3D%201%3B%0A%09%20%20%20%20%20%20%20%20if%20%28editor%2EisFocused%28%29%20%26%26%20%21isInternal%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2Erenderer%2E%24cursorLayer%2EsetBlinking%28%21editor%2EgetReadOnly%28%29%29%3B%0A%09%20%20%20%20%20%20%20%20range%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20dragCursor%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20counter%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20autoScrollStartTime%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20cursorMovedTime%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20event%2EremoveListener%28document%2C%20%22mousemove%22%2C%20onMouseMove%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20var%20onMouseMoveTimer%20%3D%20null%3B%0A%09%20%20%20%20function%20onMouseMove%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28onMouseMoveTimer%20%3D%3D%20null%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20onMouseMoveTimer%20%3D%20setTimeout%28function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28onMouseMoveTimer%20%21%3D%20null%20%26%26%20dragSelectionMarker%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20clearDragMarker%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%2020%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20function%20canAccept%28dataTransfer%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20types%20%3D%20dataTransfer%2Etypes%3B%0A%09%20%20%20%20%20%20%20%20return%20%21types%20%7C%7C%20Array%2Eprototype%2Esome%2Ecall%28types%2C%20function%28type%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20type%20%3D%3D%20%27text%2Fplain%27%20%7C%7C%20type%20%3D%3D%20%27Text%27%3B%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20function%20getDropEffect%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20copyAllowed%20%3D%20%5B%27copy%27%2C%20%27copymove%27%2C%20%27all%27%2C%20%27uninitialized%27%5D%3B%0A%09%20%20%20%20%20%20%20%20var%20moveAllowed%20%3D%20%5B%27move%27%2C%20%27copymove%27%2C%20%27linkmove%27%2C%20%27all%27%2C%20%27uninitialized%27%5D%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20copyModifierState%20%3D%20useragent%2EisMac%20%3F%20e%2EaltKey%20%3A%20e%2EctrlKey%3B%0A%09%20%20%20%20%20%20%20%20var%20effectAllowed%20%3D%20%22uninitialized%22%3B%0A%09%20%20%20%20%20%20%20%20try%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20effectAllowed%20%3D%20e%2EdataTransfer%2EeffectAllowed%2EtoLowerCase%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%20catch%20%28e%29%20%7B%7D%0A%09%20%20%20%20%20%20%20%20var%20dropEffect%20%3D%20%22none%22%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28copyModifierState%20%26%26%20copyAllowed%2EindexOf%28effectAllowed%29%20%3E%3D%200%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20dropEffect%20%3D%20%22copy%22%3B%0A%09%20%20%20%20%20%20%20%20else%20if%20%28moveAllowed%2EindexOf%28effectAllowed%29%20%3E%3D%200%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20dropEffect%20%3D%20%22move%22%3B%0A%09%20%20%20%20%20%20%20%20else%20if%20%28copyAllowed%2EindexOf%28effectAllowed%29%20%3E%3D%200%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20dropEffect%20%3D%20%22copy%22%3B%0A%0A%09%20%20%20%20%20%20%20%20return%20dropEffect%3B%0A%09%20%20%20%20%7D%0A%09%7D%0A%0A%09%28function%28%29%20%7B%0A%0A%09%20%20%20%20this%2EdragWait%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20interval%20%3D%20Date%2Enow%28%29%20%2D%20this%2EmousedownEvent%2Etime%3B%0A%09%20%20%20%20%20%20%20%20if%20%28interval%20%3E%20this%2Eeditor%2EgetDragDelay%28%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EstartDrag%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EdragWaitEnd%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20target%20%3D%20this%2Eeditor%2Econtainer%3B%0A%09%20%20%20%20%20%20%20%20target%2Edraggable%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20this%2EstartSelect%28this%2EmousedownEvent%2EgetDocumentPosition%28%29%29%3B%0A%09%20%20%20%20%20%20%20%20this%2EselectEnd%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EdragReadyEnd%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Eeditor%2Erenderer%2E%24cursorLayer%2EsetBlinking%28%21this%2Eeditor%2EgetReadOnly%28%29%29%3B%0A%09%20%20%20%20%20%20%20%20this%2Eeditor%2EunsetStyle%28%22ace%5Fdragging%22%29%3B%0A%09%20%20%20%20%20%20%20%20this%2Eeditor%2Erenderer%2EsetCursorStyle%28%22%22%29%3B%0A%09%20%20%20%20%20%20%20%20this%2EdragWaitEnd%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EstartDrag%20%3D%20function%28%29%7B%0A%09%20%20%20%20%20%20%20%20this%2EcancelDrag%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20var%20editor%20%3D%20this%2Eeditor%3B%0A%09%20%20%20%20%20%20%20%20var%20target%20%3D%20editor%2Econtainer%3B%0A%09%20%20%20%20%20%20%20%20target%2Edraggable%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20editor%2Erenderer%2E%24cursorLayer%2EsetBlinking%28false%29%3B%0A%09%20%20%20%20%20%20%20%20editor%2EsetStyle%28%22ace%5Fdragging%22%29%3B%0A%09%20%20%20%20%20%20%20%20var%20cursorStyle%20%3D%20useragent%2EisWin%20%3F%20%22default%22%20%3A%20%22move%22%3B%0A%09%20%20%20%20%20%20%20%20editor%2Erenderer%2EsetCursorStyle%28cursorStyle%29%3B%0A%09%20%20%20%20%20%20%20%20this%2EsetState%28%22dragReady%22%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EonMouseDrag%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20target%20%3D%20this%2Eeditor%2Econtainer%3B%0A%09%20%20%20%20%20%20%20%20if%20%28useragent%2EisIE%20%26%26%20this%2Estate%20%3D%3D%20%22dragReady%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20distance%20%3D%20calcDistance%28this%2EmousedownEvent%2Ex%2C%20this%2EmousedownEvent%2Ey%2C%20this%2Ex%2C%20this%2Ey%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28distance%20%3E%203%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20target%2EdragDrop%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Estate%20%3D%3D%3D%20%22dragWait%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20distance%20%3D%20calcDistance%28this%2EmousedownEvent%2Ex%2C%20this%2EmousedownEvent%2Ey%2C%20this%2Ex%2C%20this%2Ey%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28distance%20%3E%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20target%2Edraggable%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EstartSelect%28this%2EmousedownEvent%2EgetDocumentPosition%28%29%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EonMouseDown%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%21this%2E%24dragEnabled%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20this%2EmousedownEvent%20%3D%20e%3B%0A%09%20%20%20%20%20%20%20%20var%20editor%20%3D%20this%2Eeditor%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20inSelection%20%3D%20e%2EinSelection%28%29%3B%0A%09%20%20%20%20%20%20%20%20var%20button%20%3D%20e%2EgetButton%28%29%3B%0A%09%20%20%20%20%20%20%20%20var%20clickCount%20%3D%20e%2EdomEvent%2Edetail%20%7C%7C%201%3B%0A%09%20%20%20%20%20%20%20%20if%20%28clickCount%20%3D%3D%3D%201%20%26%26%20button%20%3D%3D%3D%200%20%26%26%20inSelection%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e%2Eeditor%2EinMultiSelectMode%20%26%26%20%28e%2EgetAccelKey%28%29%20%7C%7C%20e%2EgetShiftKey%28%29%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EmousedownEvent%2Etime%20%3D%20Date%2Enow%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20eventTarget%20%3D%20e%2EdomEvent%2Etarget%20%7C%7C%20e%2EdomEvent%2EsrcElement%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%22unselectable%22%20in%20eventTarget%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20eventTarget%2Eunselectable%20%3D%20%22on%22%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28editor%2EgetDragDelay%28%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28useragent%2EisWebKit%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EcancelDrag%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20mouseTarget%20%3D%20editor%2Econtainer%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mouseTarget%2Edraggable%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EsetState%28%22dragWait%22%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EstartDrag%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EcaptureMouse%28e%2C%20this%2EonMouseDrag%2Ebind%28this%29%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20e%2EdefaultPrevented%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%0A%09%7D%29%2Ecall%28DragdropHandler%2Eprototype%29%3B%0A%0A%0A%09function%20calcDistance%28ax%2C%20ay%2C%20bx%2C%20by%29%20%7B%0A%09%20%20%20%20return%20Math%2Esqrt%28Math%2Epow%28bx%20%2D%20ax%2C%202%29%20%2B%20Math%2Epow%28by%20%2D%20ay%2C%202%29%29%3B%0A%09%7D%0A%0A%09exports%2EDragdropHandler%20%3D%20DragdropHandler%3B%0A%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Flib%2Fnet%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%2C%22ace%2Flib%2Fdom%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%09var%20dom%20%3D%20acequire%28%22%2E%2Fdom%22%29%3B%0A%0A%09exports%2Eget%20%3D%20function%20%28url%2C%20callback%29%20%7B%0A%09%20%20%20%20var%20xhr%20%3D%20new%20XMLHttpRequest%28%29%3B%0A%09%20%20%20%20xhr%2Eopen%28%27GET%27%2C%20url%2C%20true%29%3B%0A%09%20%20%20%20xhr%2Eonreadystatechange%20%3D%20function%20%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28xhr%2EreadyState%20%3D%3D%3D%204%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20callback%28xhr%2EresponseText%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20xhr%2Esend%28null%29%3B%0A%09%7D%3B%0A%0A%09exports%2EloadScript%20%3D%20function%28path%2C%20callback%29%20%7B%0A%09%20%20%20%20var%20head%20%3D%20dom%2EgetDocumentHead%28%29%3B%0A%09%20%20%20%20var%20s%20%3D%20document%2EcreateElement%28%27script%27%29%3B%0A%0A%09%20%20%20%20s%2Esrc%20%3D%20path%3B%0A%09%20%20%20%20head%2EappendChild%28s%29%3B%0A%0A%09%20%20%20%20s%2Eonload%20%3D%20s%2Eonreadystatechange%20%3D%20function%28%5F%2C%20isAbort%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28isAbort%20%7C%7C%20%21s%2EreadyState%20%7C%7C%20s%2EreadyState%20%3D%3D%20%22loaded%22%20%7C%7C%20s%2EreadyState%20%3D%3D%20%22complete%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20s%20%3D%20s%2Eonload%20%3D%20s%2Eonreadystatechange%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21isAbort%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20callback%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%7D%3B%0A%09exports%2EqualifyURL%20%3D%20function%28url%29%20%7B%0A%09%20%20%20%20var%20a%20%3D%20document%2EcreateElement%28%27a%27%29%3B%0A%09%20%20%20%20a%2Ehref%20%3D%20url%3B%0A%09%20%20%20%20return%20a%2Ehref%3B%0A%09%7D%0A%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Flib%2Fevent%5Femitter%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%0A%09var%20EventEmitter%20%3D%20%7B%7D%3B%0A%09var%20stopPropagation%20%3D%20function%28%29%20%7B%20this%2EpropagationStopped%20%3D%20true%3B%20%7D%3B%0A%09var%20preventDefault%20%3D%20function%28%29%20%7B%20this%2EdefaultPrevented%20%3D%20true%3B%20%7D%3B%0A%0A%09EventEmitter%2E%5Femit%20%3D%0A%09EventEmitter%2E%5FdispatchEvent%20%3D%20function%28eventName%2C%20e%29%20%7B%0A%09%20%20%20%20this%2E%5FeventRegistry%20%7C%7C%20%28this%2E%5FeventRegistry%20%3D%20%7B%7D%29%3B%0A%09%20%20%20%20this%2E%5FdefaultHandlers%20%7C%7C%20%28this%2E%5FdefaultHandlers%20%3D%20%7B%7D%29%3B%0A%0A%09%20%20%20%20var%20listeners%20%3D%20this%2E%5FeventRegistry%5BeventName%5D%20%7C%7C%20%5B%5D%3B%0A%09%20%20%20%20var%20defaultHandler%20%3D%20this%2E%5FdefaultHandlers%5BeventName%5D%3B%0A%09%20%20%20%20if%20%28%21listeners%2Elength%20%26%26%20%21defaultHandler%29%0A%09%20%20%20%20%20%20%20%20return%3B%0A%0A%09%20%20%20%20if%20%28typeof%20e%20%21%3D%20%22object%22%20%7C%7C%20%21e%29%0A%09%20%20%20%20%20%20%20%20e%20%3D%20%7B%7D%3B%0A%0A%09%20%20%20%20if%20%28%21e%2Etype%29%0A%09%20%20%20%20%20%20%20%20e%2Etype%20%3D%20eventName%3B%0A%09%20%20%20%20if%20%28%21e%2EstopPropagation%29%0A%09%20%20%20%20%20%20%20%20e%2EstopPropagation%20%3D%20stopPropagation%3B%0A%09%20%20%20%20if%20%28%21e%2EpreventDefault%29%0A%09%20%20%20%20%20%20%20%20e%2EpreventDefault%20%3D%20preventDefault%3B%0A%0A%09%20%20%20%20listeners%20%3D%20listeners%2Eslice%28%29%3B%0A%09%20%20%20%20for%20%28var%20i%3D0%3B%20i%3Clisteners%2Elength%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20listeners%5Bi%5D%28e%2C%20this%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28e%2EpropagationStopped%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20%0A%09%20%20%20%20if%20%28defaultHandler%20%26%26%20%21e%2EdefaultPrevented%29%0A%09%20%20%20%20%20%20%20%20return%20defaultHandler%28e%2C%20this%29%3B%0A%09%7D%3B%0A%0A%0A%09EventEmitter%2E%5Fsignal%20%3D%20function%28eventName%2C%20e%29%20%7B%0A%09%20%20%20%20var%20listeners%20%3D%20%28this%2E%5FeventRegistry%20%7C%7C%20%7B%7D%29%5BeventName%5D%3B%0A%09%20%20%20%20if%20%28%21listeners%29%0A%09%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20listeners%20%3D%20listeners%2Eslice%28%29%3B%0A%09%20%20%20%20for%20%28var%20i%3D0%3B%20i%3Clisteners%2Elength%3B%20i%2B%2B%29%0A%09%20%20%20%20%20%20%20%20listeners%5Bi%5D%28e%2C%20this%29%3B%0A%09%7D%3B%0A%0A%09EventEmitter%2Eonce%20%3D%20function%28eventName%2C%20callback%29%20%7B%0A%09%20%20%20%20var%20%5Fself%20%3D%20this%3B%0A%09%20%20%20%20callback%20%26%26%20this%2EaddEventListener%28eventName%2C%20function%20newCallback%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%5Fself%2EremoveEventListener%28eventName%2C%20newCallback%29%3B%0A%09%20%20%20%20%20%20%20%20callback%2Eapply%28null%2C%20arguments%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%09%7D%3B%0A%0A%0A%09EventEmitter%2EsetDefaultHandler%20%3D%20function%28eventName%2C%20callback%29%20%7B%0A%09%20%20%20%20var%20handlers%20%3D%20this%2E%5FdefaultHandlers%0A%09%20%20%20%20if%20%28%21handlers%29%0A%09%20%20%20%20%20%20%20%20handlers%20%3D%20this%2E%5FdefaultHandlers%20%3D%20%7B%5Fdisabled%5F%3A%20%7B%7D%7D%3B%0A%09%20%20%20%20%0A%09%20%20%20%20if%20%28handlers%5BeventName%5D%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20old%20%3D%20handlers%5BeventName%5D%3B%0A%09%20%20%20%20%20%20%20%20var%20disabled%20%3D%20handlers%2E%5Fdisabled%5F%5BeventName%5D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21disabled%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20handlers%2E%5Fdisabled%5F%5BeventName%5D%20%3D%20disabled%20%3D%20%5B%5D%3B%0A%09%20%20%20%20%20%20%20%20disabled%2Epush%28old%29%3B%0A%09%20%20%20%20%20%20%20%20var%20i%20%3D%20disabled%2EindexOf%28callback%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28i%20%21%3D%20%2D1%29%20%0A%09%20%20%20%20%20%20%20%20%20%20%20%20disabled%2Esplice%28i%2C%201%29%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20handlers%5BeventName%5D%20%3D%20callback%3B%0A%09%7D%3B%0A%09EventEmitter%2EremoveDefaultHandler%20%3D%20function%28eventName%2C%20callback%29%20%7B%0A%09%20%20%20%20var%20handlers%20%3D%20this%2E%5FdefaultHandlers%0A%09%20%20%20%20if%20%28%21handlers%29%0A%09%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20var%20disabled%20%3D%20handlers%2E%5Fdisabled%5F%5BeventName%5D%3B%0A%09%20%20%20%20%0A%09%20%20%20%20if%20%28handlers%5BeventName%5D%20%3D%3D%20callback%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20old%20%3D%20handlers%5BeventName%5D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28disabled%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EsetDefaultHandler%28eventName%2C%20disabled%2Epop%28%29%29%3B%0A%09%20%20%20%20%7D%20else%20if%20%28disabled%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20i%20%3D%20disabled%2EindexOf%28callback%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28i%20%21%3D%20%2D1%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20disabled%2Esplice%28i%2C%201%29%3B%0A%09%20%20%20%20%7D%0A%09%7D%3B%0A%0A%09EventEmitter%2Eon%20%3D%0A%09EventEmitter%2EaddEventListener%20%3D%20function%28eventName%2C%20callback%2C%20capturing%29%20%7B%0A%09%20%20%20%20this%2E%5FeventRegistry%20%3D%20this%2E%5FeventRegistry%20%7C%7C%20%7B%7D%3B%0A%0A%09%20%20%20%20var%20listeners%20%3D%20this%2E%5FeventRegistry%5BeventName%5D%3B%0A%09%20%20%20%20if%20%28%21listeners%29%0A%09%20%20%20%20%20%20%20%20listeners%20%3D%20this%2E%5FeventRegistry%5BeventName%5D%20%3D%20%5B%5D%3B%0A%0A%09%20%20%20%20if%20%28listeners%2EindexOf%28callback%29%20%3D%3D%20%2D1%29%0A%09%20%20%20%20%20%20%20%20listeners%5Bcapturing%20%3F%20%22unshift%22%20%3A%20%22push%22%5D%28callback%29%3B%0A%09%20%20%20%20return%20callback%3B%0A%09%7D%3B%0A%0A%09EventEmitter%2Eoff%20%3D%0A%09EventEmitter%2EremoveListener%20%3D%0A%09EventEmitter%2EremoveEventListener%20%3D%20function%28eventName%2C%20callback%29%20%7B%0A%09%20%20%20%20this%2E%5FeventRegistry%20%3D%20this%2E%5FeventRegistry%20%7C%7C%20%7B%7D%3B%0A%0A%09%20%20%20%20var%20listeners%20%3D%20this%2E%5FeventRegistry%5BeventName%5D%3B%0A%09%20%20%20%20if%20%28%21listeners%29%0A%09%20%20%20%20%20%20%20%20return%3B%0A%0A%09%20%20%20%20var%20index%20%3D%20listeners%2EindexOf%28callback%29%3B%0A%09%20%20%20%20if%20%28index%20%21%3D%3D%20%2D1%29%0A%09%20%20%20%20%20%20%20%20listeners%2Esplice%28index%2C%201%29%3B%0A%09%7D%3B%0A%0A%09EventEmitter%2EremoveAllListeners%20%3D%20function%28eventName%29%20%7B%0A%09%20%20%20%20if%20%28this%2E%5FeventRegistry%29%20this%2E%5FeventRegistry%5BeventName%5D%20%3D%20%5B%5D%3B%0A%09%7D%3B%0A%0A%09exports%2EEventEmitter%20%3D%20EventEmitter%3B%0A%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Fconfig%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%2C%22ace%2Flib%2Flang%22%2C%22ace%2Flib%2Foop%22%2C%22ace%2Flib%2Fnet%22%2C%22ace%2Flib%2Fevent%5Femitter%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22no%20use%20strict%22%3B%0A%0A%09var%20lang%20%3D%20acequire%28%22%2E%2Flib%2Flang%22%29%3B%0A%09var%20oop%20%3D%20acequire%28%22%2E%2Flib%2Foop%22%29%3B%0A%09var%20net%20%3D%20acequire%28%22%2E%2Flib%2Fnet%22%29%3B%0A%09var%20EventEmitter%20%3D%20acequire%28%22%2E%2Flib%2Fevent%5Femitter%22%29%2EEventEmitter%3B%0A%0A%09var%20global%20%3D%20%28function%28%29%20%7B%0A%09%20%20%20%20return%20this%3B%0A%09%7D%29%28%29%3B%0A%0A%09var%20options%20%3D%20%7B%0A%09%20%20%20%20packaged%3A%20false%2C%0A%09%20%20%20%20workerPath%3A%20null%2C%0A%09%20%20%20%20modePath%3A%20null%2C%0A%09%20%20%20%20themePath%3A%20null%2C%0A%09%20%20%20%20basePath%3A%20%22%22%2C%0A%09%20%20%20%20suffix%3A%20%22%2Ejs%22%2C%0A%09%20%20%20%20%24moduleUrls%3A%20%7B%7D%0A%09%7D%3B%0A%0A%09exports%2Eget%20%3D%20function%28key%29%20%7B%0A%09%20%20%20%20if%20%28%21options%2EhasOwnProperty%28key%29%29%0A%09%20%20%20%20%20%20%20%20throw%20new%20Error%28%22Unknown%20config%20key%3A%20%22%20%2B%20key%29%3B%0A%0A%09%20%20%20%20return%20options%5Bkey%5D%3B%0A%09%7D%3B%0A%0A%09exports%2Eset%20%3D%20function%28key%2C%20value%29%20%7B%0A%09%20%20%20%20if%20%28%21options%2EhasOwnProperty%28key%29%29%0A%09%20%20%20%20%20%20%20%20throw%20new%20Error%28%22Unknown%20config%20key%3A%20%22%20%2B%20key%29%3B%0A%0A%09%20%20%20%20options%5Bkey%5D%20%3D%20value%3B%0A%09%7D%3B%0A%0A%09exports%2Eall%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20return%20lang%2EcopyObject%28options%29%3B%0A%09%7D%3B%0A%09oop%2Eimplement%28exports%2C%20EventEmitter%29%3B%0A%0A%09exports%2EmoduleUrl%20%3D%20function%28name%2C%20component%29%20%7B%0A%09%20%20%20%20if%20%28options%2E%24moduleUrls%5Bname%5D%29%0A%09%20%20%20%20%20%20%20%20return%20options%2E%24moduleUrls%5Bname%5D%3B%0A%0A%09%20%20%20%20var%20parts%20%3D%20name%2Esplit%28%22%2F%22%29%3B%0A%09%20%20%20%20component%20%3D%20component%20%7C%7C%20parts%5Bparts%2Elength%20%2D%202%5D%20%7C%7C%20%22%22%3B%0A%09%20%20%20%20var%20sep%20%3D%20component%20%3D%3D%20%22snippets%22%20%3F%20%22%2F%22%20%3A%20%22%2D%22%3B%0A%09%20%20%20%20var%20base%20%3D%20parts%5Bparts%2Elength%20%2D%201%5D%3B%0A%09%20%20%20%20if%20%28component%20%3D%3D%20%22worker%22%20%26%26%20sep%20%3D%3D%20%22%2D%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20re%20%3D%20new%20RegExp%28%22%5E%22%20%2B%20component%20%2B%20%22%5B%5C%5C%2D%5F%5D%7C%5B%5C%5C%2D%5F%5D%22%20%2B%20component%20%2B%20%22%24%22%2C%20%22g%22%29%3B%0A%09%20%20%20%20%20%20%20%20base%20%3D%20base%2Ereplace%28re%2C%20%22%22%29%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20if%20%28%28%21base%20%7C%7C%20base%20%3D%3D%20component%29%20%26%26%20parts%2Elength%20%3E%201%29%0A%09%20%20%20%20%20%20%20%20base%20%3D%20parts%5Bparts%2Elength%20%2D%202%5D%3B%0A%09%20%20%20%20var%20path%20%3D%20options%5Bcomponent%20%2B%20%22Path%22%5D%3B%0A%09%20%20%20%20if%20%28path%20%3D%3D%20null%29%20%7B%0A%09%20%20%20%20%20%20%20%20path%20%3D%20options%2EbasePath%3B%0A%09%20%20%20%20%7D%20else%20if%20%28sep%20%3D%3D%20%22%2F%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20component%20%3D%20sep%20%3D%20%22%22%3B%0A%09%20%20%20%20%7D%0A%09%20%20%20%20if%20%28path%20%26%26%20path%2Eslice%28%2D1%29%20%21%3D%20%22%2F%22%29%0A%09%20%20%20%20%20%20%20%20path%20%2B%3D%20%22%2F%22%3B%0A%09%20%20%20%20return%20path%20%2B%20component%20%2B%20sep%20%2B%20base%20%2B%20this%2Eget%28%22suffix%22%29%3B%0A%09%7D%3B%0A%0A%09exports%2EsetModuleUrl%20%3D%20function%28name%2C%20subst%29%20%7B%0A%09%20%20%20%20return%20options%2E%24moduleUrls%5Bname%5D%20%3D%20subst%3B%0A%09%7D%3B%0A%0A%09exports%2E%24loading%20%3D%20%7B%7D%3B%0A%09exports%2EloadModule%20%3D%20function%28moduleName%2C%20onLoad%29%20%7B%0A%09%20%20%20%20var%20module%2C%20moduleType%3B%0A%09%20%20%20%20if%20%28Array%2EisArray%28moduleName%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20moduleType%20%3D%20moduleName%5B0%5D%3B%0A%09%20%20%20%20%20%20%20%20moduleName%20%3D%20moduleName%5B1%5D%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20try%20%7B%0A%09%20%20%20%20%20%20%20%20module%20%3D%20acequire%28moduleName%29%3B%0A%09%20%20%20%20%7D%20catch%20%28e%29%20%7B%7D%0A%09%20%20%20%20if%20%28module%20%26%26%20%21exports%2E%24loading%5BmoduleName%5D%29%0A%09%20%20%20%20%20%20%20%20return%20onLoad%20%26%26%20onLoad%28module%29%3B%0A%0A%09%20%20%20%20if%20%28%21exports%2E%24loading%5BmoduleName%5D%29%0A%09%20%20%20%20%20%20%20%20exports%2E%24loading%5BmoduleName%5D%20%3D%20%5B%5D%3B%0A%0A%09%20%20%20%20exports%2E%24loading%5BmoduleName%5D%2Epush%28onLoad%29%3B%0A%0A%09%20%20%20%20if%20%28exports%2E%24loading%5BmoduleName%5D%2Elength%20%3E%201%29%0A%09%20%20%20%20%20%20%20%20return%3B%0A%0A%09%20%20%20%20var%20afterLoad%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20acequire%28%5BmoduleName%5D%2C%20function%28module%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20exports%2E%5Femit%28%22load%2Emodule%22%2C%20%7Bname%3A%20moduleName%2C%20module%3A%20module%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20listeners%20%3D%20exports%2E%24loading%5BmoduleName%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20exports%2E%24loading%5BmoduleName%5D%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20listeners%2EforEach%28function%28onLoad%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20onLoad%20%26%26%20onLoad%28module%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20if%20%28%21exports%2Eget%28%22packaged%22%29%29%0A%09%20%20%20%20%20%20%20%20return%20afterLoad%28%29%3B%0A%09%20%20%20%20net%2EloadScript%28exports%2EmoduleUrl%28moduleName%2C%20moduleType%29%2C%20afterLoad%29%3B%0A%09%7D%3B%0A%09init%28true%29%3Bfunction%20init%28packaged%29%20%7B%0A%0A%09%20%20%20%20options%2Epackaged%20%3D%20packaged%20%7C%7C%20acequire%2Epackaged%20%7C%7C%20module%2Epackaged%20%7C%7C%20%28global%2Edefine%20%26%26%20%5F%5Fwebpack%5Frequire%5F%5F%2818%29%2Epackaged%29%3B%0A%0A%09%20%20%20%20if%20%28%21global%2Edocument%29%0A%09%20%20%20%20%20%20%20%20return%20%22%22%3B%0A%0A%09%20%20%20%20var%20scriptOptions%20%3D%20%7B%7D%3B%0A%09%20%20%20%20var%20scriptUrl%20%3D%20%22%22%3B%0A%09%20%20%20%20var%20currentScript%20%3D%20%28document%2EcurrentScript%20%7C%7C%20document%2E%5FcurrentScript%20%29%3B%20%2F%2F%20native%20or%20polyfill%0A%09%20%20%20%20var%20currentDocument%20%3D%20currentScript%20%26%26%20currentScript%2EownerDocument%20%7C%7C%20document%3B%0A%09%20%20%20%20%0A%09%20%20%20%20var%20scripts%20%3D%20currentDocument%2EgetElementsByTagName%28%22script%22%29%3B%0A%09%20%20%20%20for%20%28var%20i%3D0%3B%20i%3Cscripts%2Elength%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20script%20%3D%20scripts%5Bi%5D%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20src%20%3D%20script%2Esrc%20%7C%7C%20script%2EgetAttribute%28%22src%22%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21src%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20attributes%20%3D%20script%2Eattributes%3B%0A%09%20%20%20%20%20%20%20%20for%20%28var%20j%3D0%2C%20l%3Dattributes%2Elength%3B%20j%20%3C%20l%3B%20j%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20attr%20%3D%20attributes%5Bj%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28attr%2Ename%2EindexOf%28%22data%2Dace%2D%22%29%20%3D%3D%3D%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scriptOptions%5BdeHyphenate%28attr%2Ename%2Ereplace%28%2F%5Edata%2Dace%2D%2F%2C%20%22%22%29%29%5D%20%3D%20attr%2Evalue%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20var%20m%20%3D%20src%2Ematch%28%2F%5E%28%2E%2A%29%5C%2Face%28%5C%2D%5Cw%2B%29%3F%5C%2Ejs%28%5C%3F%7C%24%29%2F%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28m%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20scriptUrl%20%3D%20m%5B1%5D%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20if%20%28scriptUrl%29%20%7B%0A%09%20%20%20%20%20%20%20%20scriptOptions%2Ebase%20%3D%20scriptOptions%2Ebase%20%7C%7C%20scriptUrl%3B%0A%09%20%20%20%20%20%20%20%20scriptOptions%2Epackaged%20%3D%20true%3B%0A%09%20%20%20%20%7D%0A%0A%09%20%20%20%20scriptOptions%2EbasePath%20%3D%20scriptOptions%2Ebase%3B%0A%09%20%20%20%20scriptOptions%2EworkerPath%20%3D%20scriptOptions%2EworkerPath%20%7C%7C%20scriptOptions%2Ebase%3B%0A%09%20%20%20%20scriptOptions%2EmodePath%20%3D%20scriptOptions%2EmodePath%20%7C%7C%20scriptOptions%2Ebase%3B%0A%09%20%20%20%20scriptOptions%2EthemePath%20%3D%20scriptOptions%2EthemePath%20%7C%7C%20scriptOptions%2Ebase%3B%0A%09%20%20%20%20delete%20scriptOptions%2Ebase%3B%0A%0A%09%20%20%20%20for%20%28var%20key%20in%20scriptOptions%29%0A%09%20%20%20%20%20%20%20%20if%20%28typeof%20scriptOptions%5Bkey%5D%20%21%3D%3D%20%22undefined%22%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20exports%2Eset%28key%2C%20scriptOptions%5Bkey%5D%29%3B%0A%09%7D%3B%0A%0A%09exports%2Einit%20%3D%20init%3B%0A%0A%09function%20deHyphenate%28str%29%20%7B%0A%09%20%20%20%20return%20str%2Ereplace%28%2F%2D%28%2E%29%2Fg%2C%20function%28m%2C%20m1%29%20%7B%20return%20m1%2EtoUpperCase%28%29%3B%20%7D%29%3B%0A%09%7D%0A%0A%09var%20optionsProvider%20%3D%20%7B%0A%09%20%20%20%20setOptions%3A%20function%28optList%29%20%7B%0A%09%20%20%20%20%20%20%20%20Object%2Ekeys%28optList%29%2EforEach%28function%28key%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EsetOption%28key%2C%20optList%5Bkey%5D%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%2C%20this%29%3B%0A%09%20%20%20%20%7D%2C%0A%09%20%20%20%20getOptions%3A%20function%28optionNames%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20result%20%3D%20%7B%7D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21optionNames%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20optionNames%20%3D%20Object%2Ekeys%28this%2E%24options%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20if%20%28%21Array%2EisArray%28optionNames%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20result%20%3D%20optionNames%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20optionNames%20%3D%20Object%2Ekeys%28result%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20optionNames%2EforEach%28function%28key%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20result%5Bkey%5D%20%3D%20this%2EgetOption%28key%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%2C%20this%29%3B%0A%09%20%20%20%20%20%20%20%20return%20result%3B%0A%09%20%20%20%20%7D%2C%0A%09%20%20%20%20setOption%3A%20function%28name%2C%20value%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%5B%22%24%22%20%2B%20name%5D%20%3D%3D%3D%20value%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20var%20opt%20%3D%20this%2E%24options%5Bname%5D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21opt%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28typeof%20console%20%21%3D%20%22undefined%22%20%26%26%20console%2Ewarn%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20console%2Ewarn%28%27misspelled%20option%20%22%27%20%2B%20name%20%2B%20%27%22%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20undefined%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28opt%2EforwardTo%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20this%5Bopt%2EforwardTo%5D%20%26%26%20this%5Bopt%2EforwardTo%5D%2EsetOption%28name%2C%20value%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28%21opt%2EhandlesSet%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%5B%22%24%22%20%2B%20name%5D%20%3D%20value%3B%0A%09%20%20%20%20%20%20%20%20if%20%28opt%20%26%26%20opt%2Eset%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20opt%2Eset%2Ecall%28this%2C%20value%29%3B%0A%09%20%20%20%20%7D%2C%0A%09%20%20%20%20getOption%3A%20function%28name%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20opt%20%3D%20this%2E%24options%5Bname%5D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21opt%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28typeof%20console%20%21%3D%20%22undefined%22%20%26%26%20console%2Ewarn%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20console%2Ewarn%28%27misspelled%20option%20%22%27%20%2B%20name%20%2B%20%27%22%27%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20undefined%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28opt%2EforwardTo%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20this%5Bopt%2EforwardTo%5D%20%26%26%20this%5Bopt%2EforwardTo%5D%2EgetOption%28name%29%3B%0A%09%20%20%20%20%20%20%20%20return%20opt%20%26%26%20opt%2Eget%20%3F%20opt%2Eget%2Ecall%28this%29%20%3A%20this%5B%22%24%22%20%2B%20name%5D%3B%0A%09%20%20%20%20%7D%0A%09%7D%3B%0A%0A%09var%20defaultOptions%20%3D%20%7B%7D%3B%0A%09exports%2EdefineOptions%20%3D%20function%28obj%2C%20path%2C%20options%29%20%7B%0A%09%20%20%20%20if%20%28%21obj%2E%24options%29%0A%09%20%20%20%20%20%20%20%20defaultOptions%5Bpath%5D%20%3D%20obj%2E%24options%20%3D%20%7B%7D%3B%0A%0A%09%20%20%20%20Object%2Ekeys%28options%29%2EforEach%28function%28key%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20opt%20%3D%20options%5Bkey%5D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28typeof%20opt%20%3D%3D%20%22string%22%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20opt%20%3D%20%7BforwardTo%3A%20opt%7D%3B%0A%0A%09%20%20%20%20%20%20%20%20opt%2Ename%20%7C%7C%20%28opt%2Ename%20%3D%20key%29%3B%0A%09%20%20%20%20%20%20%20%20obj%2E%24options%5Bopt%2Ename%5D%20%3D%20opt%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%22initialValue%22%20in%20opt%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20obj%5B%22%24%22%20%2B%20opt%2Ename%5D%20%3D%20opt%2EinitialValue%3B%0A%09%20%20%20%20%7D%29%3B%0A%09%20%20%20%20oop%2Eimplement%28obj%2C%20optionsProvider%29%3B%0A%0A%09%20%20%20%20return%20this%3B%0A%09%7D%3B%0A%0A%09exports%2EresetOptions%20%3D%20function%28obj%29%20%7B%0A%09%20%20%20%20Object%2Ekeys%28obj%2E%24options%29%2EforEach%28function%28key%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20opt%20%3D%20obj%2E%24options%5Bkey%5D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%22value%22%20in%20opt%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20obj%2EsetOption%28key%2C%20opt%2Evalue%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%09%7D%3B%0A%0A%09exports%2EsetDefaultValue%20%3D%20function%28path%2C%20name%2C%20value%29%20%7B%0A%09%20%20%20%20var%20opts%20%3D%20defaultOptions%5Bpath%5D%20%7C%7C%20%28defaultOptions%5Bpath%5D%20%3D%20%7B%7D%29%3B%0A%09%20%20%20%20if%20%28opts%5Bname%5D%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28opts%2EforwardTo%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20exports%2EsetDefaultValue%28opts%2EforwardTo%2C%20name%2C%20value%29%3B%0A%09%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20opts%5Bname%5D%2Evalue%20%3D%20value%3B%0A%09%20%20%20%20%7D%0A%09%7D%3B%0A%0A%09exports%2EsetDefaultValues%20%3D%20function%28path%2C%20optionHash%29%20%7B%0A%09%20%20%20%20Object%2Ekeys%28optionHash%29%2EforEach%28function%28key%29%20%7B%0A%09%20%20%20%20%20%20%20%20exports%2EsetDefaultValue%28path%2C%20key%2C%20optionHash%5Bkey%5D%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%09%7D%3B%0A%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Fmouse%2Fmouse%5Fhandler%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%2C%22ace%2Flib%2Fevent%22%2C%22ace%2Flib%2Fuseragent%22%2C%22ace%2Fmouse%2Fdefault%5Fhandlers%22%2C%22ace%2Fmouse%2Fdefault%5Fgutter%5Fhandler%22%2C%22ace%2Fmouse%2Fmouse%5Fevent%22%2C%22ace%2Fmouse%2Fdragdrop%5Fhandler%22%2C%22ace%2Fconfig%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%0A%09var%20event%20%3D%20acequire%28%22%2E%2E%2Flib%2Fevent%22%29%3B%0A%09var%20useragent%20%3D%20acequire%28%22%2E%2E%2Flib%2Fuseragent%22%29%3B%0A%09var%20DefaultHandlers%20%3D%20acequire%28%22%2E%2Fdefault%5Fhandlers%22%29%2EDefaultHandlers%3B%0A%09var%20DefaultGutterHandler%20%3D%20acequire%28%22%2E%2Fdefault%5Fgutter%5Fhandler%22%29%2EGutterHandler%3B%0A%09var%20MouseEvent%20%3D%20acequire%28%22%2E%2Fmouse%5Fevent%22%29%2EMouseEvent%3B%0A%09var%20DragdropHandler%20%3D%20acequire%28%22%2E%2Fdragdrop%5Fhandler%22%29%2EDragdropHandler%3B%0A%09var%20config%20%3D%20acequire%28%22%2E%2E%2Fconfig%22%29%3B%0A%0A%09var%20MouseHandler%20%3D%20function%28editor%29%20%7B%0A%09%20%20%20%20var%20%5Fself%20%3D%20this%3B%0A%09%20%20%20%20this%2Eeditor%20%3D%20editor%3B%0A%0A%09%20%20%20%20new%20DefaultHandlers%28this%29%3B%0A%09%20%20%20%20new%20DefaultGutterHandler%28this%29%3B%0A%09%20%20%20%20new%20DragdropHandler%28this%29%3B%0A%09%20%20%20%20%0A%09%20%20%20%20var%20focusEditor%20%3D%20function%28e%29%20%7B%20%0A%09%20%20%20%20%20%20%20%20if%20%28%21editor%2EisFocused%28%29%20%26%26%20editor%2EtextInput%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20editor%2EtextInput%2EmoveToMouse%28e%29%3B%0A%09%20%20%20%20%20%20%20%20editor%2Efocus%28%29%20%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20%0A%09%20%20%20%20var%20mouseTarget%20%3D%20editor%2Erenderer%2EgetMouseEventTarget%28%29%3B%0A%09%20%20%20%20event%2EaddListener%28mouseTarget%2C%20%22click%22%2C%20this%2EonMouseEvent%2Ebind%28this%2C%20%22click%22%29%29%3B%0A%09%20%20%20%20event%2EaddListener%28mouseTarget%2C%20%22mousemove%22%2C%20this%2EonMouseMove%2Ebind%28this%2C%20%22mousemove%22%29%29%3B%0A%09%20%20%20%20event%2EaddMultiMouseDownListener%28mouseTarget%2C%20%5B400%2C%20300%2C%20250%5D%2C%20this%2C%20%22onMouseEvent%22%29%3B%0A%09%20%20%20%20if%20%28editor%2Erenderer%2EscrollBarV%29%20%7B%0A%09%20%20%20%20%20%20%20%20event%2EaddMultiMouseDownListener%28editor%2Erenderer%2EscrollBarV%2Einner%2C%20%5B400%2C%20300%2C%20250%5D%2C%20this%2C%20%22onMouseEvent%22%29%3B%0A%09%20%20%20%20%20%20%20%20event%2EaddMultiMouseDownListener%28editor%2Erenderer%2EscrollBarH%2Einner%2C%20%5B400%2C%20300%2C%20250%5D%2C%20this%2C%20%22onMouseEvent%22%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28useragent%2EisIE%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20event%2EaddListener%28editor%2Erenderer%2EscrollBarV%2Eelement%2C%20%22mousedown%22%2C%20focusEditor%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20event%2EaddListener%28editor%2Erenderer%2EscrollBarH%2Eelement%2C%20%22mousemove%22%2C%20focusEditor%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%0A%09%20%20%20%20event%2EaddMouseWheelListener%28editor%2Econtainer%2C%20this%2EonMouseWheel%2Ebind%28this%2C%20%22mousewheel%22%29%29%3B%0A%0A%09%20%20%20%20var%20gutterEl%20%3D%20editor%2Erenderer%2E%24gutter%3B%0A%09%20%20%20%20event%2EaddListener%28gutterEl%2C%20%22mousedown%22%2C%20this%2EonMouseEvent%2Ebind%28this%2C%20%22guttermousedown%22%29%29%3B%0A%09%20%20%20%20event%2EaddListener%28gutterEl%2C%20%22click%22%2C%20this%2EonMouseEvent%2Ebind%28this%2C%20%22gutterclick%22%29%29%3B%0A%09%20%20%20%20event%2EaddListener%28gutterEl%2C%20%22dblclick%22%2C%20this%2EonMouseEvent%2Ebind%28this%2C%20%22gutterdblclick%22%29%29%3B%0A%09%20%20%20%20event%2EaddListener%28gutterEl%2C%20%22mousemove%22%2C%20this%2EonMouseEvent%2Ebind%28this%2C%20%22guttermousemove%22%29%29%3B%0A%0A%09%20%20%20%20event%2EaddListener%28mouseTarget%2C%20%22mousedown%22%2C%20focusEditor%29%3B%0A%0A%09%20%20%20%20event%2EaddListener%28gutterEl%2C%20%22mousedown%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20editor%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20return%20event%2EpreventDefault%28e%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20editor%2Eon%28%22mousemove%22%2C%20function%28e%29%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%5Fself%2Estate%20%7C%7C%20%5Fself%2E%24dragDelay%20%7C%7C%20%21%5Fself%2E%24dragEnabled%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20%0A%09%20%20%20%20%20%20%20%20var%20char%20%3D%20editor%2Erenderer%2EscreenToTextCoordinates%28e%2Ex%2C%20e%2Ey%29%3B%0A%09%20%20%20%20%20%20%20%20var%20range%20%3D%20editor%2Esession%2Eselection%2EgetRange%28%29%3B%0A%09%20%20%20%20%20%20%20%20var%20renderer%20%3D%20editor%2Erenderer%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28%21range%2EisEmpty%28%29%20%26%26%20range%2EinsideStart%28char%2Erow%2C%20char%2Ecolumn%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20renderer%2EsetCursorStyle%28%22default%22%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20renderer%2EsetCursorStyle%28%22%22%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%29%3B%0A%09%7D%3B%0A%0A%09%28function%28%29%20%7B%0A%09%20%20%20%20this%2EonMouseEvent%20%3D%20function%28name%2C%20e%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Eeditor%2E%5Femit%28name%2C%20new%20MouseEvent%28e%2C%20this%2Eeditor%29%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EonMouseMove%20%3D%20function%28name%2C%20e%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20listeners%20%3D%20this%2Eeditor%2E%5FeventRegistry%20%26%26%20this%2Eeditor%2E%5FeventRegistry%2Emousemove%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21listeners%20%7C%7C%20%21listeners%2Elength%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%0A%09%20%20%20%20%20%20%20%20this%2Eeditor%2E%5Femit%28name%2C%20new%20MouseEvent%28e%2C%20this%2Eeditor%29%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EonMouseWheel%20%3D%20function%28name%2C%20e%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20mouseEvent%20%3D%20new%20MouseEvent%28e%2C%20this%2Eeditor%29%3B%0A%09%20%20%20%20%20%20%20%20mouseEvent%2Espeed%20%3D%20this%2E%24scrollSpeed%20%2A%202%3B%0A%09%20%20%20%20%20%20%20%20mouseEvent%2EwheelX%20%3D%20e%2EwheelX%3B%0A%09%20%20%20%20%20%20%20%20mouseEvent%2EwheelY%20%3D%20e%2EwheelY%3B%0A%0A%09%20%20%20%20%20%20%20%20this%2Eeditor%2E%5Femit%28name%2C%20mouseEvent%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EsetState%20%3D%20function%28state%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Estate%20%3D%20state%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EcaptureMouse%20%3D%20function%28ev%2C%20mouseMoveHandler%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Ex%20%3D%20ev%2Ex%3B%0A%09%20%20%20%20%20%20%20%20this%2Ey%20%3D%20ev%2Ey%3B%0A%0A%09%20%20%20%20%20%20%20%20this%2EisMousePressed%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20var%20renderer%20%3D%20this%2Eeditor%2Erenderer%3B%0A%09%20%20%20%20%20%20%20%20if%20%28renderer%2E%24keepTextAreaAtCursor%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20renderer%2E%24keepTextAreaAtCursor%20%3D%20null%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20self%20%3D%20this%3B%0A%09%20%20%20%20%20%20%20%20var%20onMouseMove%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21e%29%20return%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28useragent%2EisWebKit%20%26%26%20%21e%2Ewhich%20%26%26%20self%2EreleaseMouse%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20self%2EreleaseMouse%28%29%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%2Ex%20%3D%20e%2EclientX%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%2Ey%20%3D%20e%2EclientY%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20mouseMoveHandler%20%26%26%20mouseMoveHandler%28e%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%2EmouseEvent%20%3D%20new%20MouseEvent%28e%2C%20self%2Eeditor%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%2E%24mouseMoved%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20onCaptureEnd%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20clearInterval%28timerId%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20onCaptureInterval%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%5Bself%2Estate%20%2B%20%22End%22%5D%20%26%26%20self%5Bself%2Estate%20%2B%20%22End%22%5D%28e%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%2Estate%20%3D%20%22%22%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28renderer%2E%24keepTextAreaAtCursor%20%3D%3D%20null%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20renderer%2E%24keepTextAreaAtCursor%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20renderer%2E%24moveTextAreaToCursor%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%2EisMousePressed%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%2E%24onCaptureMouseMove%20%3D%20self%2EreleaseMouse%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20e%20%26%26%20self%2EonMouseEvent%28%22mouseup%22%2C%20e%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20onCaptureInterval%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%5Bself%2Estate%5D%20%26%26%20self%5Bself%2Estate%5D%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%2E%24mouseMoved%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28useragent%2EisOldIE%20%26%26%20ev%2EdomEvent%2Etype%20%3D%3D%20%22dblclick%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20setTimeout%28function%28%29%20%7BonCaptureEnd%28ev%29%3B%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20self%2E%24onCaptureMouseMove%20%3D%20onMouseMove%3B%0A%09%20%20%20%20%20%20%20%20self%2EreleaseMouse%20%3D%20event%2Ecapture%28this%2Eeditor%2Econtainer%2C%20onMouseMove%2C%20onCaptureEnd%29%3B%0A%09%20%20%20%20%20%20%20%20var%20timerId%20%3D%20setInterval%28onCaptureInterval%2C%2020%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EreleaseMouse%20%3D%20null%3B%0A%09%20%20%20%20this%2EcancelContextMenu%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20stop%20%3D%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e%20%26%26%20e%2EdomEvent%20%26%26%20e%2EdomEvent%2Etype%20%21%3D%20%22contextmenu%22%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Eeditor%2Eoff%28%22nativecontextmenu%22%2C%20stop%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e%20%26%26%20e%2EdomEvent%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20event%2EstopEvent%28e%2EdomEvent%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%2Ebind%28this%29%3B%0A%09%20%20%20%20%20%20%20%20setTimeout%28stop%2C%2010%29%3B%0A%09%20%20%20%20%20%20%20%20this%2Eeditor%2Eon%28%22nativecontextmenu%22%2C%20stop%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%29%2Ecall%28MouseHandler%2Eprototype%29%3B%0A%0A%09config%2EdefineOptions%28MouseHandler%2Eprototype%2C%20%22mouseHandler%22%2C%20%7B%0A%09%20%20%20%20scrollSpeed%3A%20%7BinitialValue%3A%202%7D%2C%0A%09%20%20%20%20dragDelay%3A%20%7BinitialValue%3A%20%28useragent%2EisMac%20%3F%20150%20%3A%200%29%7D%2C%0A%09%20%20%20%20dragEnabled%3A%20%7BinitialValue%3A%20true%7D%2C%0A%09%20%20%20%20focusTimout%3A%20%7BinitialValue%3A%200%7D%2C%0A%09%20%20%20%20tooltipFollowsMouse%3A%20%7BinitialValue%3A%20true%7D%0A%09%7D%29%3B%0A%0A%0A%09exports%2EMouseHandler%20%3D%20MouseHandler%3B%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Fmouse%2Ffold%5Fhandler%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%0A%09function%20FoldHandler%28editor%29%20%7B%0A%0A%09%20%20%20%20editor%2Eon%28%22click%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20position%20%3D%20e%2EgetDocumentPosition%28%29%3B%0A%09%20%20%20%20%20%20%20%20var%20session%20%3D%20editor%2Esession%3B%0A%09%20%20%20%20%20%20%20%20var%20fold%20%3D%20session%2EgetFoldAt%28position%2Erow%2C%20position%2Ecolumn%2C%201%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28fold%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28e%2EgetAccelKey%28%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20session%2EremoveFold%28fold%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20session%2EexpandFold%28fold%29%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20e%2Estop%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20editor%2Eon%28%22gutterclick%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20gutterRegion%20%3D%20editor%2Erenderer%2E%24gutterLayer%2EgetRegion%28e%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28gutterRegion%20%3D%3D%20%22foldWidgets%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20row%20%3D%20e%2EgetDocumentPosition%28%29%2Erow%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20session%20%3D%20editor%2Esession%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28session%2EfoldWidgets%20%26%26%20session%2EfoldWidgets%5Brow%5D%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20editor%2Esession%2EonFoldWidgetClick%28row%2C%20e%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21editor%2EisFocused%28%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20editor%2Efocus%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20e%2Estop%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20editor%2Eon%28%22gutterdblclick%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20gutterRegion%20%3D%20editor%2Erenderer%2E%24gutterLayer%2EgetRegion%28e%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28gutterRegion%20%3D%3D%20%22foldWidgets%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20row%20%3D%20e%2EgetDocumentPosition%28%29%2Erow%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20session%20%3D%20editor%2Esession%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20data%20%3D%20session%2EgetParentFoldRangeData%28row%2C%20true%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20range%20%3D%20data%2Erange%20%7C%7C%20data%2EfirstRange%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28range%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20row%20%3D%20range%2Estart%2Erow%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20fold%20%3D%20session%2EgetFoldAt%28row%2C%20session%2EgetLine%28row%29%2Elength%2C%201%29%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28fold%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20session%2EremoveFold%28fold%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20session%2EaddFold%28%22%2E%2E%2E%22%2C%20range%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20editor%2Erenderer%2EscrollCursorIntoView%28%7Brow%3A%20range%2Estart%2Erow%2C%20column%3A%200%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20e%2Estop%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%29%3B%0A%09%7D%0A%0A%09exports%2EFoldHandler%20%3D%20FoldHandler%3B%0A%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Fkeyboard%2Fkeybinding%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%2C%22ace%2Flib%2Fkeys%22%2C%22ace%2Flib%2Fevent%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%0A%09var%20keyUtil%20%20%3D%20acequire%28%22%2E%2E%2Flib%2Fkeys%22%29%3B%0A%09var%20event%20%3D%20acequire%28%22%2E%2E%2Flib%2Fevent%22%29%3B%0A%0A%09var%20KeyBinding%20%3D%20function%28editor%29%20%7B%0A%09%20%20%20%20this%2E%24editor%20%3D%20editor%3B%0A%09%20%20%20%20this%2E%24data%20%3D%20%7Beditor%3A%20editor%7D%3B%0A%09%20%20%20%20this%2E%24handlers%20%3D%20%5B%5D%3B%0A%09%20%20%20%20this%2EsetDefaultHandler%28editor%2Ecommands%29%3B%0A%09%7D%3B%0A%0A%09%28function%28%29%20%7B%0A%09%20%20%20%20this%2EsetDefaultHandler%20%3D%20function%28kb%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2EremoveKeyboardHandler%28this%2E%24defaultHandler%29%3B%0A%09%20%20%20%20%20%20%20%20this%2E%24defaultHandler%20%3D%20kb%3B%0A%09%20%20%20%20%20%20%20%20this%2EaddKeyboardHandler%28kb%2C%200%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EsetKeyboardHandler%20%3D%20function%28kb%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20h%20%3D%20this%2E%24handlers%3B%0A%09%20%20%20%20%20%20%20%20if%20%28h%5Bh%2Elength%20%2D%201%5D%20%3D%3D%20kb%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%0A%09%20%20%20%20%20%20%20%20while%20%28h%5Bh%2Elength%20%2D%201%5D%20%26%26%20h%5Bh%2Elength%20%2D%201%5D%20%21%3D%20this%2E%24defaultHandler%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EremoveKeyboardHandler%28h%5Bh%2Elength%20%2D%201%5D%29%3B%0A%0A%09%20%20%20%20%20%20%20%20this%2EaddKeyboardHandler%28kb%2C%201%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EaddKeyboardHandler%20%3D%20function%28kb%2C%20pos%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%21kb%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20if%20%28typeof%20kb%20%3D%3D%20%22function%22%20%26%26%20%21kb%2EhandleKeyboard%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20kb%2EhandleKeyboard%20%3D%20kb%3B%0A%09%20%20%20%20%20%20%20%20var%20i%20%3D%20this%2E%24handlers%2EindexOf%28kb%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28i%20%21%3D%20%2D1%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24handlers%2Esplice%28i%2C%201%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28pos%20%3D%3D%20undefined%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24handlers%2Epush%28kb%29%3B%0A%09%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24handlers%2Esplice%28pos%2C%200%2C%20kb%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28i%20%3D%3D%20%2D1%20%26%26%20kb%2Eattach%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20kb%2Eattach%28this%2E%24editor%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EremoveKeyboardHandler%20%3D%20function%28kb%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20i%20%3D%20this%2E%24handlers%2EindexOf%28kb%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28i%20%3D%3D%20%2D1%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%09%20%20%20%20%20%20%20%20this%2E%24handlers%2Esplice%28i%2C%201%29%3B%0A%09%20%20%20%20%20%20%20%20kb%2Edetach%20%26%26%20kb%2Edetach%28this%2E%24editor%29%3B%0A%09%20%20%20%20%20%20%20%20return%20true%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EgetKeyboardHandler%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20this%2E%24handlers%5Bthis%2E%24handlers%2Elength%20%2D%201%5D%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EgetStatusText%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20data%20%3D%20this%2E%24data%3B%0A%09%20%20%20%20%20%20%20%20var%20editor%20%3D%20data%2Eeditor%3B%0A%09%20%20%20%20%20%20%20%20return%20this%2E%24handlers%2Emap%28function%28h%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20h%2EgetStatusText%20%26%26%20h%2EgetStatusText%28editor%2C%20data%29%20%7C%7C%20%22%22%3B%0A%09%20%20%20%20%20%20%20%20%7D%29%2Efilter%28Boolean%29%2Ejoin%28%22%20%22%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2E%24callKeyboardHandlers%20%3D%20function%28hashId%2C%20keyString%2C%20keyCode%2C%20e%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20toExecute%3B%0A%09%20%20%20%20%20%20%20%20var%20success%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20var%20commands%20%3D%20this%2E%24editor%2Ecommands%3B%0A%0A%09%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%20this%2E%24handlers%2Elength%3B%20i%2D%2D%3B%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20toExecute%20%3D%20this%2E%24handlers%5Bi%5D%2EhandleKeyboard%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24data%2C%20hashId%2C%20keyString%2C%20keyCode%2C%20e%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21toExecute%20%7C%7C%20%21toExecute%2Ecommand%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28toExecute%2Ecommand%20%3D%3D%20%22null%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20success%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20success%20%3D%20commands%2Eexec%28toExecute%2Ecommand%2C%20this%2E%24editor%2C%20toExecute%2Eargs%2C%20e%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28success%20%26%26%20e%20%26%26%20hashId%20%21%3D%20%2D1%20%26%26%20%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20toExecute%2EpassEvent%20%21%3D%20true%20%26%26%20toExecute%2Ecommand%2EpassEvent%20%21%3D%20true%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20event%2EstopEvent%28e%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28success%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20success%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EonCommandKey%20%3D%20function%28e%2C%20hashId%2C%20keyCode%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20keyString%20%3D%20keyUtil%2EkeyCodeToString%28keyCode%29%3B%0A%09%20%20%20%20%20%20%20%20this%2E%24callKeyboardHandlers%28hashId%2C%20keyString%2C%20keyCode%2C%20e%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EonTextInput%20%3D%20function%28text%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20success%20%3D%20this%2E%24callKeyboardHandlers%28%2D1%2C%20text%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21success%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24editor%2Ecommands%2Eexec%28%22insertstring%22%2C%20this%2E%24editor%2C%20text%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%7D%29%2Ecall%28KeyBinding%2Eprototype%29%3B%0A%0A%09exports%2EKeyBinding%20%3D%20KeyBinding%3B%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Frange%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%09var%20comparePoints%20%3D%20function%28p1%2C%20p2%29%20%7B%0A%09%20%20%20%20return%20p1%2Erow%20%2D%20p2%2Erow%20%7C%7C%20p1%2Ecolumn%20%2D%20p2%2Ecolumn%3B%0A%09%7D%3B%0A%09var%20Range%20%3D%20function%28startRow%2C%20startColumn%2C%20endRow%2C%20endColumn%29%20%7B%0A%09%20%20%20%20this%2Estart%20%3D%20%7B%0A%09%20%20%20%20%20%20%20%20row%3A%20startRow%2C%0A%09%20%20%20%20%20%20%20%20column%3A%20startColumn%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2Eend%20%3D%20%7B%0A%09%20%20%20%20%20%20%20%20row%3A%20endRow%2C%0A%09%20%20%20%20%20%20%20%20column%3A%20endColumn%0A%09%20%20%20%20%7D%3B%0A%09%7D%3B%0A%0A%09%28function%28%29%20%7B%0A%09%20%20%20%20this%2EisEqual%20%3D%20function%28range%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20this%2Estart%2Erow%20%3D%3D%3D%20range%2Estart%2Erow%20%26%26%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Eend%2Erow%20%3D%3D%3D%20range%2Eend%2Erow%20%26%26%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Estart%2Ecolumn%20%3D%3D%3D%20range%2Estart%2Ecolumn%20%26%26%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Eend%2Ecolumn%20%3D%3D%3D%20range%2Eend%2Ecolumn%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EtoString%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20%28%22Range%3A%20%5B%22%20%2B%20this%2Estart%2Erow%20%2B%20%22%2F%22%20%2B%20this%2Estart%2Ecolumn%20%2B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%22%5D%20%2D%3E%20%5B%22%20%2B%20this%2Eend%2Erow%20%2B%20%22%2F%22%20%2B%20this%2Eend%2Ecolumn%20%2B%20%22%5D%22%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2Econtains%20%3D%20function%28row%2C%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20this%2Ecompare%28row%2C%20column%29%20%3D%3D%200%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EcompareRange%20%3D%20function%28range%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20cmp%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20end%20%3D%20range%2Eend%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20start%20%3D%20range%2Estart%3B%0A%0A%09%20%20%20%20%20%20%20%20cmp%20%3D%20this%2Ecompare%28end%2Erow%2C%20end%2Ecolumn%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28cmp%20%3D%3D%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20cmp%20%3D%20this%2Ecompare%28start%2Erow%2C%20start%2Ecolumn%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28cmp%20%3D%3D%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%202%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28cmp%20%3D%3D%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%201%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%200%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%20else%20if%20%28cmp%20%3D%3D%20%2D1%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20%2D2%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20cmp%20%3D%20this%2Ecompare%28start%2Erow%2C%20start%2Ecolumn%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28cmp%20%3D%3D%20%2D1%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%2D1%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28cmp%20%3D%3D%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%2042%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%200%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EcomparePoint%20%3D%20function%28p%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20this%2Ecompare%28p%2Erow%2C%20p%2Ecolumn%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EcontainsRange%20%3D%20function%28range%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20this%2EcomparePoint%28range%2Estart%29%20%3D%3D%200%20%26%26%20this%2EcomparePoint%28range%2Eend%29%20%3D%3D%200%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2Eintersects%20%3D%20function%28range%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20cmp%20%3D%20this%2EcompareRange%28range%29%3B%0A%09%20%20%20%20%20%20%20%20return%20%28cmp%20%3D%3D%20%2D1%20%7C%7C%20cmp%20%3D%3D%200%20%7C%7C%20cmp%20%3D%3D%201%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EisEnd%20%3D%20function%28row%2C%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20this%2Eend%2Erow%20%3D%3D%20row%20%26%26%20this%2Eend%2Ecolumn%20%3D%3D%20column%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EisStart%20%3D%20function%28row%2C%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20this%2Estart%2Erow%20%3D%3D%20row%20%26%26%20this%2Estart%2Ecolumn%20%3D%3D%20column%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EsetStart%20%3D%20function%28row%2C%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28typeof%20row%20%3D%3D%20%22object%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Estart%2Ecolumn%20%3D%20row%2Ecolumn%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Estart%2Erow%20%3D%20row%2Erow%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Estart%2Erow%20%3D%20row%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Estart%2Ecolumn%20%3D%20column%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EsetEnd%20%3D%20function%28row%2C%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28typeof%20row%20%3D%3D%20%22object%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Eend%2Ecolumn%20%3D%20row%2Ecolumn%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Eend%2Erow%20%3D%20row%2Erow%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Eend%2Erow%20%3D%20row%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Eend%2Ecolumn%20%3D%20column%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2Einside%20%3D%20function%28row%2C%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Ecompare%28row%2C%20column%29%20%3D%3D%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28this%2EisEnd%28row%2C%20column%29%20%7C%7C%20this%2EisStart%28row%2C%20column%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20false%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EinsideStart%20%3D%20function%28row%2C%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Ecompare%28row%2C%20column%29%20%3D%3D%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28this%2EisEnd%28row%2C%20column%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20false%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EinsideEnd%20%3D%20function%28row%2C%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Ecompare%28row%2C%20column%29%20%3D%3D%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28this%2EisStart%28row%2C%20column%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20true%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20false%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2Ecompare%20%3D%20function%28row%2C%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%21this%2EisMultiLine%28%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28row%20%3D%3D%3D%20this%2Estart%2Erow%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20column%20%3C%20this%2Estart%2Ecolumn%20%3F%20%2D1%20%3A%20%28column%20%3E%20this%2Eend%2Ecolumn%20%3F%201%20%3A%200%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20if%20%28row%20%3C%20this%2Estart%2Erow%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20%2D1%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28row%20%3E%20this%2Eend%2Erow%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%201%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Estart%2Erow%20%3D%3D%3D%20row%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20column%20%3E%3D%20this%2Estart%2Ecolumn%20%3F%200%20%3A%20%2D1%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Eend%2Erow%20%3D%3D%3D%20row%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20column%20%3C%3D%20this%2Eend%2Ecolumn%20%3F%200%20%3A%201%3B%0A%0A%09%20%20%20%20%20%20%20%20return%200%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EcompareStart%20%3D%20function%28row%2C%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Estart%2Erow%20%3D%3D%20row%20%26%26%20this%2Estart%2Ecolumn%20%3D%3D%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20%2D1%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20this%2Ecompare%28row%2C%20column%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EcompareEnd%20%3D%20function%28row%2C%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Eend%2Erow%20%3D%3D%20row%20%26%26%20this%2Eend%2Ecolumn%20%3D%3D%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%201%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20this%2Ecompare%28row%2C%20column%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EcompareInside%20%3D%20function%28row%2C%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Eend%2Erow%20%3D%3D%20row%20%26%26%20this%2Eend%2Ecolumn%20%3D%3D%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%201%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20if%20%28this%2Estart%2Erow%20%3D%3D%20row%20%26%26%20this%2Estart%2Ecolumn%20%3D%3D%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20%2D1%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20this%2Ecompare%28row%2C%20column%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EclipRows%20%3D%20function%28firstRow%2C%20lastRow%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Eend%2Erow%20%3E%20lastRow%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20end%20%3D%20%7Brow%3A%20lastRow%20%2B%201%2C%20column%3A%200%7D%3B%0A%09%20%20%20%20%20%20%20%20else%20if%20%28this%2Eend%2Erow%20%3C%20firstRow%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20end%20%3D%20%7Brow%3A%20firstRow%2C%20column%3A%200%7D%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Estart%2Erow%20%3E%20lastRow%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20start%20%3D%20%7Brow%3A%20lastRow%20%2B%201%2C%20column%3A%200%7D%3B%0A%09%20%20%20%20%20%20%20%20else%20if%20%28this%2Estart%2Erow%20%3C%20firstRow%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20start%20%3D%20%7Brow%3A%20firstRow%2C%20column%3A%200%7D%3B%0A%0A%09%20%20%20%20%20%20%20%20return%20Range%2EfromPoints%28start%20%7C%7C%20this%2Estart%2C%20end%20%7C%7C%20this%2Eend%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2Eextend%20%3D%20function%28row%2C%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20cmp%20%3D%20this%2Ecompare%28row%2C%20column%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28cmp%20%3D%3D%200%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20this%3B%0A%09%20%20%20%20%20%20%20%20else%20if%20%28cmp%20%3D%3D%20%2D1%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20start%20%3D%20%7Brow%3A%20row%2C%20column%3A%20column%7D%3B%0A%09%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20end%20%3D%20%7Brow%3A%20row%2C%20column%3A%20column%7D%3B%0A%0A%09%20%20%20%20%20%20%20%20return%20Range%2EfromPoints%28start%20%7C%7C%20this%2Estart%2C%20end%20%7C%7C%20this%2Eend%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EisEmpty%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20%28this%2Estart%2Erow%20%3D%3D%3D%20this%2Eend%2Erow%20%26%26%20this%2Estart%2Ecolumn%20%3D%3D%3D%20this%2Eend%2Ecolumn%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EisMultiLine%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20%28this%2Estart%2Erow%20%21%3D%3D%20this%2Eend%2Erow%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2Eclone%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20Range%2EfromPoints%28this%2Estart%2C%20this%2Eend%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EcollapseRows%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Eend%2Ecolumn%20%3D%3D%200%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20new%20Range%28this%2Estart%2Erow%2C%200%2C%20Math%2Emax%28this%2Estart%2Erow%2C%20this%2Eend%2Erow%2D1%29%2C%200%29%0A%09%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20new%20Range%28this%2Estart%2Erow%2C%200%2C%20this%2Eend%2Erow%2C%200%29%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EtoScreenRange%20%3D%20function%28session%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20screenPosStart%20%3D%20session%2EdocumentToScreenPosition%28this%2Estart%29%3B%0A%09%20%20%20%20%20%20%20%20var%20screenPosEnd%20%3D%20session%2EdocumentToScreenPosition%28this%2Eend%29%3B%0A%0A%09%20%20%20%20%20%20%20%20return%20new%20Range%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20screenPosStart%2Erow%2C%20screenPosStart%2Ecolumn%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20screenPosEnd%2Erow%2C%20screenPosEnd%2Ecolumn%0A%09%20%20%20%20%20%20%20%20%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EmoveBy%20%3D%20function%28row%2C%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Estart%2Erow%20%2B%3D%20row%3B%0A%09%20%20%20%20%20%20%20%20this%2Estart%2Ecolumn%20%2B%3D%20column%3B%0A%09%20%20%20%20%20%20%20%20this%2Eend%2Erow%20%2B%3D%20row%3B%0A%09%20%20%20%20%20%20%20%20this%2Eend%2Ecolumn%20%2B%3D%20column%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%7D%29%2Ecall%28Range%2Eprototype%29%3B%0A%09Range%2EfromPoints%20%3D%20function%28start%2C%20end%29%20%7B%0A%09%20%20%20%20return%20new%20Range%28start%2Erow%2C%20start%2Ecolumn%2C%20end%2Erow%2C%20end%2Ecolumn%29%3B%0A%09%7D%3B%0A%09Range%2EcomparePoints%20%3D%20comparePoints%3B%0A%0A%09Range%2EcomparePoints%20%3D%20function%28p1%2C%20p2%29%20%7B%0A%09%20%20%20%20return%20p1%2Erow%20%2D%20p2%2Erow%20%7C%7C%20p1%2Ecolumn%20%2D%20p2%2Ecolumn%3B%0A%09%7D%3B%0A%0A%0A%09exports%2ERange%20%3D%20Range%3B%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Fselection%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%2C%22ace%2Flib%2Foop%22%2C%22ace%2Flib%2Flang%22%2C%22ace%2Flib%2Fevent%5Femitter%22%2C%22ace%2Frange%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%0A%09var%20oop%20%3D%20acequire%28%22%2E%2Flib%2Foop%22%29%3B%0A%09var%20lang%20%3D%20acequire%28%22%2E%2Flib%2Flang%22%29%3B%0A%09var%20EventEmitter%20%3D%20acequire%28%22%2E%2Flib%2Fevent%5Femitter%22%29%2EEventEmitter%3B%0A%09var%20Range%20%3D%20acequire%28%22%2E%2Frange%22%29%2ERange%3B%0A%09var%20Selection%20%3D%20function%28session%29%20%7B%0A%09%20%20%20%20this%2Esession%20%3D%20session%3B%0A%09%20%20%20%20this%2Edoc%20%3D%20session%2EgetDocument%28%29%3B%0A%0A%09%20%20%20%20this%2EclearSelection%28%29%3B%0A%09%20%20%20%20this%2Elead%20%3D%20this%2EselectionLead%20%3D%20this%2Edoc%2EcreateAnchor%280%2C%200%29%3B%0A%09%20%20%20%20this%2Eanchor%20%3D%20this%2EselectionAnchor%20%3D%20this%2Edoc%2EcreateAnchor%280%2C%200%29%3B%0A%0A%09%20%20%20%20var%20self%20%3D%20this%3B%0A%09%20%20%20%20this%2Elead%2Eon%28%22change%22%2C%20function%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20self%2E%5Femit%28%22changeCursor%22%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21self%2E%24isEmpty%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%2E%5Femit%28%22changeSelection%22%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21self%2E%24keepDesiredColumnOnChange%20%26%26%20e%2Eold%2Ecolumn%20%21%3D%20e%2Evalue%2Ecolumn%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%2E%24desiredColumn%20%3D%20null%3B%0A%09%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20this%2EselectionAnchor%2Eon%28%22change%22%2C%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%21self%2E%24isEmpty%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20self%2E%5Femit%28%22changeSelection%22%29%3B%0A%09%20%20%20%20%7D%29%3B%0A%09%7D%3B%0A%0A%09%28function%28%29%20%7B%0A%0A%09%20%20%20%20oop%2Eimplement%28this%2C%20EventEmitter%29%3B%0A%09%20%20%20%20this%2EisEmpty%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20%28this%2E%24isEmpty%20%7C%7C%20%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Eanchor%2Erow%20%3D%3D%20this%2Elead%2Erow%20%26%26%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Eanchor%2Ecolumn%20%3D%3D%20this%2Elead%2Ecolumn%0A%09%20%20%20%20%20%20%20%20%29%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EisMultiLine%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2EisEmpty%28%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20return%20this%2EgetRange%28%29%2EisMultiLine%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EgetCursor%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20this%2Elead%2EgetPosition%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EsetSelectionAnchor%20%3D%20function%28row%2C%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Eanchor%2EsetPosition%28row%2C%20column%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28this%2E%24isEmpty%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24isEmpty%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%5Femit%28%22changeSelection%22%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EgetSelectionAnchor%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2E%24isEmpty%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20this%2EgetSelectionLead%28%29%3B%0A%09%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20this%2Eanchor%2EgetPosition%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EgetSelectionLead%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20this%2Elead%2EgetPosition%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EshiftSelection%20%3D%20function%28columns%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2E%24isEmpty%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28this%2Elead%2Erow%2C%20this%2Elead%2Ecolumn%20%2B%20columns%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20var%20anchor%20%3D%20this%2EgetSelectionAnchor%28%29%3B%0A%09%20%20%20%20%20%20%20%20var%20lead%20%3D%20this%2EgetSelectionLead%28%29%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20isBackwards%20%3D%20this%2EisBackwards%28%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28%21isBackwards%20%7C%7C%20anchor%2Ecolumn%20%21%3D%3D%200%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EsetSelectionAnchor%28anchor%2Erow%2C%20anchor%2Ecolumn%20%2B%20columns%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28isBackwards%20%7C%7C%20lead%2Ecolumn%20%21%3D%3D%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24moveSelection%28function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28lead%2Erow%2C%20lead%2Ecolumn%20%2B%20columns%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EisBackwards%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20anchor%20%3D%20this%2Eanchor%3B%0A%09%20%20%20%20%20%20%20%20var%20lead%20%3D%20this%2Elead%3B%0A%09%20%20%20%20%20%20%20%20return%20%28anchor%2Erow%20%3E%20lead%2Erow%20%7C%7C%20%28anchor%2Erow%20%3D%3D%20lead%2Erow%20%26%26%20anchor%2Ecolumn%20%3E%20lead%2Ecolumn%29%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EgetRange%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20anchor%20%3D%20this%2Eanchor%3B%0A%09%20%20%20%20%20%20%20%20var%20lead%20%3D%20this%2Elead%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28this%2EisEmpty%28%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20Range%2EfromPoints%28lead%2C%20lead%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28this%2EisBackwards%28%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20Range%2EfromPoints%28lead%2C%20anchor%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20Range%2EfromPoints%28anchor%2C%20lead%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EclearSelection%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%21this%2E%24isEmpty%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24isEmpty%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%5Femit%28%22changeSelection%22%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EselectAll%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20lastRow%20%3D%20this%2Edoc%2EgetLength%28%29%20%2D%201%3B%0A%09%20%20%20%20%20%20%20%20this%2EsetSelectionAnchor%280%2C%200%29%3B%0A%09%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28lastRow%2C%20this%2Edoc%2EgetLine%28lastRow%29%2Elength%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EsetRange%20%3D%0A%09%20%20%20%20this%2EsetSelectionRange%20%3D%20function%28range%2C%20reverse%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28reverse%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EsetSelectionAnchor%28range%2Eend%2Erow%2C%20range%2Eend%2Ecolumn%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EselectTo%28range%2Estart%2Erow%2C%20range%2Estart%2Ecolumn%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EsetSelectionAnchor%28range%2Estart%2Erow%2C%20range%2Estart%2Ecolumn%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EselectTo%28range%2Eend%2Erow%2C%20range%2Eend%2Ecolumn%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28this%2EgetRange%28%29%2EisEmpty%28%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24isEmpty%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20this%2E%24desiredColumn%20%3D%20null%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2E%24moveSelection%20%3D%20function%28mover%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20lead%20%3D%20this%2Elead%3B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2E%24isEmpty%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EsetSelectionAnchor%28lead%2Erow%2C%20lead%2Ecolumn%29%3B%0A%0A%09%20%20%20%20%20%20%20%20mover%2Ecall%28this%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EselectTo%20%3D%20function%28row%2C%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2E%24moveSelection%28function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28row%2C%20column%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EselectToPosition%20%3D%20function%28pos%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2E%24moveSelection%28function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorToPosition%28pos%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EmoveTo%20%3D%20function%28row%2C%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2EclearSelection%28%29%3B%0A%09%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28row%2C%20column%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EmoveToPosition%20%3D%20function%28pos%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2EclearSelection%28%29%3B%0A%09%20%20%20%20%20%20%20%20this%2EmoveCursorToPosition%28pos%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EselectUp%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2E%24moveSelection%28this%2EmoveCursorUp%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EselectDown%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2E%24moveSelection%28this%2EmoveCursorDown%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EselectRight%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2E%24moveSelection%28this%2EmoveCursorRight%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EselectLeft%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2E%24moveSelection%28this%2EmoveCursorLeft%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EselectLineStart%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2E%24moveSelection%28this%2EmoveCursorLineStart%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EselectLineEnd%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2E%24moveSelection%28this%2EmoveCursorLineEnd%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EselectFileEnd%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2E%24moveSelection%28this%2EmoveCursorFileEnd%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EselectFileStart%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2E%24moveSelection%28this%2EmoveCursorFileStart%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EselectWordRight%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2E%24moveSelection%28this%2EmoveCursorWordRight%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EselectWordLeft%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2E%24moveSelection%28this%2EmoveCursorWordLeft%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EgetWordRange%20%3D%20function%28row%2C%20column%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28typeof%20column%20%3D%3D%20%22undefined%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20cursor%20%3D%20row%20%7C%7C%20this%2Elead%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20row%20%3D%20cursor%2Erow%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20column%20%3D%20cursor%2Ecolumn%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20this%2Esession%2EgetWordRange%28row%2C%20column%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EselectWord%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2EsetSelectionRange%28this%2EgetWordRange%28%29%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EselectAWord%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20cursor%20%3D%20this%2EgetCursor%28%29%3B%0A%09%20%20%20%20%20%20%20%20var%20range%20%3D%20this%2Esession%2EgetAWordRange%28cursor%2Erow%2C%20cursor%2Ecolumn%29%3B%0A%09%20%20%20%20%20%20%20%20this%2EsetSelectionRange%28range%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EgetLineRange%20%3D%20function%28row%2C%20excludeLastChar%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20rowStart%20%3D%20typeof%20row%20%3D%3D%20%22number%22%20%3F%20row%20%3A%20this%2Elead%2Erow%3B%0A%09%20%20%20%20%20%20%20%20var%20rowEnd%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20foldLine%20%3D%20this%2Esession%2EgetFoldLine%28rowStart%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28foldLine%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20rowStart%20%3D%20foldLine%2Estart%2Erow%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20rowEnd%20%3D%20foldLine%2Eend%2Erow%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20rowEnd%20%3D%20rowStart%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28excludeLastChar%20%3D%3D%3D%20true%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20new%20Range%28rowStart%2C%200%2C%20rowEnd%2C%20this%2Esession%2EgetLine%28rowEnd%29%2Elength%29%3B%0A%09%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20new%20Range%28rowStart%2C%200%2C%20rowEnd%20%2B%201%2C%200%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EselectLine%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2EsetSelectionRange%28this%2EgetLineRange%28%29%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EmoveCursorUp%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2EmoveCursorBy%28%2D1%2C%200%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EmoveCursorDown%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2EmoveCursorBy%281%2C%200%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EmoveCursorLeft%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20cursor%20%3D%20this%2Elead%2EgetPosition%28%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20fold%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28fold%20%3D%20this%2Esession%2EgetFoldAt%28cursor%2Erow%2C%20cursor%2Ecolumn%2C%20%2D1%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28fold%2Estart%2Erow%2C%20fold%2Estart%2Ecolumn%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20if%20%28cursor%2Ecolumn%20%3D%3D%3D%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28cursor%2Erow%20%3E%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28cursor%2Erow%20%2D%201%2C%20this%2Edoc%2EgetLine%28cursor%2Erow%20%2D%201%29%2Elength%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20tabSize%20%3D%20this%2Esession%2EgetTabSize%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28this%2Esession%2EisTabStop%28cursor%29%20%26%26%20this%2Edoc%2EgetLine%28cursor%2Erow%29%2Eslice%28cursor%2Ecolumn%2DtabSize%2C%20cursor%2Ecolumn%29%2Esplit%28%22%20%22%29%2Elength%2D1%20%3D%3D%20tabSize%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorBy%280%2C%20%2DtabSize%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorBy%280%2C%20%2D1%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EmoveCursorRight%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20cursor%20%3D%20this%2Elead%2EgetPosition%28%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20fold%3B%0A%09%20%20%20%20%20%20%20%20if%20%28fold%20%3D%20this%2Esession%2EgetFoldAt%28cursor%2Erow%2C%20cursor%2Ecolumn%2C%201%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28fold%2Eend%2Erow%2C%20fold%2Eend%2Ecolumn%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20if%20%28this%2Elead%2Ecolumn%20%3D%3D%20this%2Edoc%2EgetLine%28this%2Elead%2Erow%29%2Elength%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28this%2Elead%2Erow%20%3C%20this%2Edoc%2EgetLength%28%29%20%2D%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28this%2Elead%2Erow%20%2B%201%2C%200%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20tabSize%20%3D%20this%2Esession%2EgetTabSize%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20cursor%20%3D%20this%2Elead%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28this%2Esession%2EisTabStop%28cursor%29%20%26%26%20this%2Edoc%2EgetLine%28cursor%2Erow%29%2Eslice%28cursor%2Ecolumn%2C%20cursor%2Ecolumn%2BtabSize%29%2Esplit%28%22%20%22%29%2Elength%2D1%20%3D%3D%20tabSize%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorBy%280%2C%20tabSize%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorBy%280%2C%201%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EmoveCursorLineStart%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20row%20%3D%20this%2Elead%2Erow%3B%0A%09%20%20%20%20%20%20%20%20var%20column%20%3D%20this%2Elead%2Ecolumn%3B%0A%09%20%20%20%20%20%20%20%20var%20screenRow%20%3D%20this%2Esession%2EdocumentToScreenRow%28row%2C%20column%29%3B%0A%09%20%20%20%20%20%20%20%20var%20firstColumnPosition%20%3D%20this%2Esession%2EscreenToDocumentPosition%28screenRow%2C%200%29%3B%0A%09%20%20%20%20%20%20%20%20var%20beforeCursor%20%3D%20this%2Esession%2EgetDisplayLine%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20row%2C%20null%2C%20firstColumnPosition%2Erow%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20firstColumnPosition%2Ecolumn%0A%09%20%20%20%20%20%20%20%20%29%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20leadingSpace%20%3D%20beforeCursor%2Ematch%28%2F%5E%5Cs%2A%2F%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28leadingSpace%5B0%5D%2Elength%20%21%3D%20column%20%26%26%20%21this%2Esession%2E%24useEmacsStyleLineStart%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20firstColumnPosition%2Ecolumn%20%2B%3D%20leadingSpace%5B0%5D%2Elength%3B%0A%09%20%20%20%20%20%20%20%20this%2EmoveCursorToPosition%28firstColumnPosition%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EmoveCursorLineEnd%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20lead%20%3D%20this%2Elead%3B%0A%09%20%20%20%20%20%20%20%20var%20lineEnd%20%3D%20this%2Esession%2EgetDocumentLastRowColumnPosition%28lead%2Erow%2C%20lead%2Ecolumn%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Elead%2Ecolumn%20%3D%3D%20lineEnd%2Ecolumn%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20line%20%3D%20this%2Esession%2EgetLine%28lineEnd%2Erow%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28lineEnd%2Ecolumn%20%3D%3D%20line%2Elength%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20textEnd%20%3D%20line%2Esearch%28%2F%5Cs%2B%24%2F%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28textEnd%20%3E%200%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lineEnd%2Ecolumn%20%3D%20textEnd%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28lineEnd%2Erow%2C%20lineEnd%2Ecolumn%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EmoveCursorFileEnd%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20row%20%3D%20this%2Edoc%2EgetLength%28%29%20%2D%201%3B%0A%09%20%20%20%20%20%20%20%20var%20column%20%3D%20this%2Edoc%2EgetLine%28row%29%2Elength%3B%0A%09%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28row%2C%20column%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EmoveCursorFileStart%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2EmoveCursorTo%280%2C%200%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EmoveCursorLongWordRight%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20row%20%3D%20this%2Elead%2Erow%3B%0A%09%20%20%20%20%20%20%20%20var%20column%20%3D%20this%2Elead%2Ecolumn%3B%0A%09%20%20%20%20%20%20%20%20var%20line%20%3D%20this%2Edoc%2EgetLine%28row%29%3B%0A%09%20%20%20%20%20%20%20%20var%20rightOfCursor%20%3D%20line%2Esubstring%28column%29%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20match%3B%0A%09%20%20%20%20%20%20%20%20this%2Esession%2EnonTokenRe%2ElastIndex%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20this%2Esession%2EtokenRe%2ElastIndex%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20var%20fold%20%3D%20this%2Esession%2EgetFoldAt%28row%2C%20column%2C%201%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28fold%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28fold%2Eend%2Erow%2C%20fold%2Eend%2Ecolumn%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28match%20%3D%20this%2Esession%2EnonTokenRe%2Eexec%28rightOfCursor%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20column%20%2B%3D%20this%2Esession%2EnonTokenRe%2ElastIndex%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Esession%2EnonTokenRe%2ElastIndex%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20rightOfCursor%20%3D%20line%2Esubstring%28column%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28column%20%3E%3D%20line%2Elength%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28row%2C%20line%2Elength%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorRight%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28row%20%3C%20this%2Edoc%2EgetLength%28%29%20%2D%201%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorWordRight%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28match%20%3D%20this%2Esession%2EtokenRe%2Eexec%28rightOfCursor%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20column%20%2B%3D%20this%2Esession%2EtokenRe%2ElastIndex%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Esession%2EtokenRe%2ElastIndex%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28row%2C%20column%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EmoveCursorLongWordLeft%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20row%20%3D%20this%2Elead%2Erow%3B%0A%09%20%20%20%20%20%20%20%20var%20column%20%3D%20this%2Elead%2Ecolumn%3B%0A%09%20%20%20%20%20%20%20%20var%20fold%3B%0A%09%20%20%20%20%20%20%20%20if%20%28fold%20%3D%20this%2Esession%2EgetFoldAt%28row%2C%20column%2C%20%2D1%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28fold%2Estart%2Erow%2C%20fold%2Estart%2Ecolumn%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20var%20str%20%3D%20this%2Esession%2EgetFoldStringAt%28row%2C%20column%2C%20%2D1%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28str%20%3D%3D%20null%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20str%20%3D%20this%2Edoc%2EgetLine%28row%29%2Esubstring%280%2C%20column%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20var%20leftOfCursor%20%3D%20lang%2EstringReverse%28str%29%3B%0A%09%20%20%20%20%20%20%20%20var%20match%3B%0A%09%20%20%20%20%20%20%20%20this%2Esession%2EnonTokenRe%2ElastIndex%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20this%2Esession%2EtokenRe%2ElastIndex%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20if%20%28match%20%3D%20this%2Esession%2EnonTokenRe%2Eexec%28leftOfCursor%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20column%20%2D%3D%20this%2Esession%2EnonTokenRe%2ElastIndex%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20leftOfCursor%20%3D%20leftOfCursor%2Eslice%28this%2Esession%2EnonTokenRe%2ElastIndex%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Esession%2EnonTokenRe%2ElastIndex%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28column%20%3C%3D%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28row%2C%200%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorLeft%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28row%20%3E%200%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorWordLeft%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28match%20%3D%20this%2Esession%2EtokenRe%2Eexec%28leftOfCursor%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20column%20%2D%3D%20this%2Esession%2EtokenRe%2ElastIndex%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Esession%2EtokenRe%2ElastIndex%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28row%2C%20column%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2E%24shortWordEndIndex%20%3D%20function%28rightOfCursor%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20match%2C%20index%20%3D%200%2C%20ch%3B%0A%09%20%20%20%20%20%20%20%20var%20whitespaceRe%20%3D%20%2F%5Cs%2F%3B%0A%09%20%20%20%20%20%20%20%20var%20tokenRe%20%3D%20this%2Esession%2EtokenRe%3B%0A%0A%09%20%20%20%20%20%20%20%20tokenRe%2ElastIndex%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20if%20%28match%20%3D%20this%2Esession%2EtokenRe%2Eexec%28rightOfCursor%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20index%20%3D%20this%2Esession%2EtokenRe%2ElastIndex%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20while%20%28%28ch%20%3D%20rightOfCursor%5Bindex%5D%29%20%26%26%20whitespaceRe%2Etest%28ch%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20index%20%2B%2B%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28index%20%3C%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tokenRe%2ElastIndex%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20while%20%28%28ch%20%3D%20rightOfCursor%5Bindex%5D%29%20%26%26%20%21tokenRe%2Etest%28ch%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tokenRe%2ElastIndex%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20index%20%2B%2B%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28whitespaceRe%2Etest%28ch%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28index%20%3E%202%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20index%2D%2D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20while%20%28%28ch%20%3D%20rightOfCursor%5Bindex%5D%29%20%26%26%20whitespaceRe%2Etest%28ch%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20index%20%2B%2B%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28index%20%3E%202%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20tokenRe%2ElastIndex%20%3D%200%3B%0A%0A%09%20%20%20%20%20%20%20%20return%20index%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EmoveCursorShortWordRight%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20row%20%3D%20this%2Elead%2Erow%3B%0A%09%20%20%20%20%20%20%20%20var%20column%20%3D%20this%2Elead%2Ecolumn%3B%0A%09%20%20%20%20%20%20%20%20var%20line%20%3D%20this%2Edoc%2EgetLine%28row%29%3B%0A%09%20%20%20%20%20%20%20%20var%20rightOfCursor%20%3D%20line%2Esubstring%28column%29%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20fold%20%3D%20this%2Esession%2EgetFoldAt%28row%2C%20column%2C%201%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28fold%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20this%2EmoveCursorTo%28fold%2Eend%2Erow%2C%20fold%2Eend%2Ecolumn%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28column%20%3D%3D%20line%2Elength%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20l%20%3D%20this%2Edoc%2EgetLength%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20do%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20row%2B%2B%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20rightOfCursor%20%3D%20this%2Edoc%2EgetLine%28row%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20while%20%28row%20%3C%20l%20%26%26%20%2F%5E%5Cs%2A%24%2F%2Etest%28rightOfCursor%29%29%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21%2F%5E%5Cs%2B%2F%2Etest%28rightOfCursor%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20rightOfCursor%20%3D%20%22%22%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20column%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20var%20index%20%3D%20this%2E%24shortWordEndIndex%28rightOfCursor%29%3B%0A%0A%09%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28row%2C%20column%20%2B%20index%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EmoveCursorShortWordLeft%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20row%20%3D%20this%2Elead%2Erow%3B%0A%09%20%20%20%20%20%20%20%20var%20column%20%3D%20this%2Elead%2Ecolumn%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20fold%3B%0A%09%20%20%20%20%20%20%20%20if%20%28fold%20%3D%20this%2Esession%2EgetFoldAt%28row%2C%20column%2C%20%2D1%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20this%2EmoveCursorTo%28fold%2Estart%2Erow%2C%20fold%2Estart%2Ecolumn%29%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20line%20%3D%20this%2Esession%2EgetLine%28row%29%2Esubstring%280%2C%20column%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28column%20%3D%3D%3D%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20do%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20row%2D%2D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20line%20%3D%20this%2Edoc%2EgetLine%28row%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20while%20%28row%20%3E%200%20%26%26%20%2F%5E%5Cs%2A%24%2F%2Etest%28line%29%29%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20column%20%3D%20line%2Elength%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21%2F%5Cs%2B%24%2F%2Etest%28line%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20line%20%3D%20%22%22%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20var%20leftOfCursor%20%3D%20lang%2EstringReverse%28line%29%3B%0A%09%20%20%20%20%20%20%20%20var%20index%20%3D%20this%2E%24shortWordEndIndex%28leftOfCursor%29%3B%0A%0A%09%20%20%20%20%20%20%20%20return%20this%2EmoveCursorTo%28row%2C%20column%20%2D%20index%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EmoveCursorWordRight%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Esession%2E%24selectLongWords%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorLongWordRight%28%29%3B%0A%09%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorShortWordRight%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EmoveCursorWordLeft%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2Esession%2E%24selectLongWords%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorLongWordLeft%28%29%3B%0A%09%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorShortWordLeft%28%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EmoveCursorBy%20%3D%20function%28rows%2C%20chars%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20screenPos%20%3D%20this%2Esession%2EdocumentToScreenPosition%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Elead%2Erow%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2Elead%2Ecolumn%0A%09%20%20%20%20%20%20%20%20%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28chars%20%3D%3D%3D%200%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28this%2E%24desiredColumn%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20screenPos%2Ecolumn%20%3D%20this%2E%24desiredColumn%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24desiredColumn%20%3D%20screenPos%2Ecolumn%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20var%20docPos%20%3D%20this%2Esession%2EscreenToDocumentPosition%28screenPos%2Erow%20%2B%20rows%2C%20screenPos%2Ecolumn%29%3B%0A%09%20%20%20%20%20%20%20%20%0A%09%20%20%20%20%20%20%20%20if%20%28rows%20%21%3D%3D%200%20%26%26%20chars%20%3D%3D%3D%200%20%26%26%20docPos%2Erow%20%3D%3D%3D%20this%2Elead%2Erow%20%26%26%20docPos%2Ecolumn%20%3D%3D%3D%20this%2Elead%2Ecolumn%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28this%2Esession%2ElineWidgets%20%26%26%20this%2Esession%2ElineWidgets%5BdocPos%2Erow%5D%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20docPos%2Erow%2B%2B%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28docPos%2Erow%2C%20docPos%2Ecolumn%20%2B%20chars%2C%20chars%20%3D%3D%3D%200%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EmoveCursorToPosition%20%3D%20function%28position%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28position%2Erow%2C%20position%2Ecolumn%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EmoveCursorTo%20%3D%20function%28row%2C%20column%2C%20keepDesiredColumn%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20fold%20%3D%20this%2Esession%2EgetFoldAt%28row%2C%20column%2C%201%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28fold%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20row%20%3D%20fold%2Estart%2Erow%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20column%20%3D%20fold%2Estart%2Ecolumn%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20this%2E%24keepDesiredColumnOnChange%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20this%2Elead%2EsetPosition%28row%2C%20column%29%3B%0A%09%20%20%20%20%20%20%20%20this%2E%24keepDesiredColumnOnChange%20%3D%20false%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28%21keepDesiredColumn%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24desiredColumn%20%3D%20null%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EmoveCursorToScreen%20%3D%20function%28row%2C%20column%2C%20keepDesiredColumn%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20pos%20%3D%20this%2Esession%2EscreenToDocumentPosition%28row%2C%20column%29%3B%0A%09%20%20%20%20%20%20%20%20this%2EmoveCursorTo%28pos%2Erow%2C%20pos%2Ecolumn%2C%20keepDesiredColumn%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2Edetach%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2Elead%2Edetach%28%29%3B%0A%09%20%20%20%20%20%20%20%20this%2Eanchor%2Edetach%28%29%3B%0A%09%20%20%20%20%20%20%20%20this%2Esession%20%3D%20this%2Edoc%20%3D%20null%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EfromOrientedRange%20%3D%20function%28range%29%20%7B%0A%09%20%20%20%20%20%20%20%20this%2EsetSelectionRange%28range%2C%20range%2Ecursor%20%3D%3D%20range%2Estart%29%3B%0A%09%20%20%20%20%20%20%20%20this%2E%24desiredColumn%20%3D%20range%2EdesiredColumn%20%7C%7C%20this%2E%24desiredColumn%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EtoOrientedRange%20%3D%20function%28range%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20r%20%3D%20this%2EgetRange%28%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28range%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20range%2Estart%2Ecolumn%20%3D%20r%2Estart%2Ecolumn%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20range%2Estart%2Erow%20%3D%20r%2Estart%2Erow%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20range%2Eend%2Ecolumn%20%3D%20r%2Eend%2Ecolumn%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20range%2Eend%2Erow%20%3D%20r%2Eend%2Erow%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20range%20%3D%20r%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20range%2Ecursor%20%3D%20this%2EisBackwards%28%29%20%3F%20range%2Estart%20%3A%20range%2Eend%3B%0A%09%20%20%20%20%20%20%20%20range%2EdesiredColumn%20%3D%20this%2E%24desiredColumn%3B%0A%09%20%20%20%20%20%20%20%20return%20range%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EgetRangeOfMovements%20%3D%20function%28func%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20start%20%3D%20this%2EgetCursor%28%29%3B%0A%09%20%20%20%20%20%20%20%20try%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20func%2Ecall%28null%2C%20this%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20end%20%3D%20this%2EgetCursor%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20Range%2EfromPoints%28start%2Cend%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%20catch%28e%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20Range%2EfromPoints%28start%2Cstart%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%20finally%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EmoveCursorToPosition%28start%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EtoJSON%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28this%2ErangeCount%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20data%20%3D%20this%2Eranges%2Emap%28function%28r%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20r1%20%3D%20r%2Eclone%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20r1%2EisBackwards%20%3D%20r%2Ecursor%20%3D%3D%20r%2Estart%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20r1%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20data%20%3D%20this%2EgetRange%28%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20data%2EisBackwards%20%3D%20this%2EisBackwards%28%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20data%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EfromJSON%20%3D%20function%28data%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28data%2Estart%20%3D%3D%20undefined%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28this%2ErangeList%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EtoSingleRange%28data%5B0%5D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%20data%2Elength%3B%20i%2D%2D%3B%20%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20r%20%3D%20Range%2EfromPoints%28data%5Bi%5D%2Estart%2C%20data%5Bi%5D%2Eend%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28data%2EisBackwards%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20r%2Ecursor%20%3D%20r%2Estart%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EaddRange%28r%2C%20true%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20data%20%3D%20data%5B0%5D%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20if%20%28this%2ErangeList%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2EtoSingleRange%28data%29%3B%0A%09%20%20%20%20%20%20%20%20this%2EsetSelectionRange%28data%2C%20data%2EisBackwards%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EisEqual%20%3D%20function%28data%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%28data%2Elength%20%7C%7C%20this%2ErangeCount%29%20%26%26%20data%2Elength%20%21%3D%20this%2ErangeCount%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21data%2Elength%20%7C%7C%20%21this%2Eranges%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20this%2EgetRange%28%29%2EisEqual%28data%29%3B%0A%0A%09%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%20this%2Eranges%2Elength%3B%20i%2D%2D%3B%20%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21this%2Eranges%5Bi%5D%2EisEqual%28data%5Bi%5D%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20false%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20true%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%7D%29%2Ecall%28Selection%2Eprototype%29%3B%0A%0A%09exports%2ESelection%20%3D%20Selection%3B%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Ftokenizer%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%09var%20MAX%5FTOKEN%5FCOUNT%20%3D%202000%3B%0A%09var%20Tokenizer%20%3D%20function%28rules%29%20%7B%0A%09%20%20%20%20this%2Estates%20%3D%20rules%3B%0A%0A%09%20%20%20%20this%2EregExps%20%3D%20%7B%7D%3B%0A%09%20%20%20%20this%2EmatchMappings%20%3D%20%7B%7D%3B%0A%09%20%20%20%20for%20%28var%20key%20in%20this%2Estates%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20state%20%3D%20this%2Estates%5Bkey%5D%3B%0A%09%20%20%20%20%20%20%20%20var%20ruleRegExps%20%3D%20%5B%5D%3B%0A%09%20%20%20%20%20%20%20%20var%20matchTotal%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20var%20mapping%20%3D%20this%2EmatchMappings%5Bkey%5D%20%3D%20%7BdefaultToken%3A%20%22text%22%7D%3B%0A%09%20%20%20%20%20%20%20%20var%20flag%20%3D%20%22g%22%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20splitterRurles%20%3D%20%5B%5D%3B%0A%09%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20state%2Elength%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20rule%20%3D%20state%5Bi%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28rule%2EdefaultToken%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mapping%2EdefaultToken%20%3D%20rule%2EdefaultToken%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28rule%2EcaseInsensitive%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20flag%20%3D%20%22gi%22%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28rule%2Eregex%20%3D%3D%20null%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28rule%2Eregex%20instanceof%20RegExp%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20rule%2Eregex%20%3D%20rule%2Eregex%2EtoString%28%29%2Eslice%281%2C%20%2D1%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20adjustedregex%20%3D%20rule%2Eregex%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20matchcount%20%3D%20new%20RegExp%28%22%28%3F%3A%28%22%20%2B%20adjustedregex%20%2B%20%22%29%7C%28%2E%29%29%22%29%2Eexec%28%22a%22%29%2Elength%20%2D%202%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28Array%2EisArray%28rule%2Etoken%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28rule%2Etoken%2Elength%20%3D%3D%201%20%7C%7C%20matchcount%20%3D%3D%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20rule%2Etoken%20%3D%20rule%2Etoken%5B0%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28matchcount%20%2D%201%20%21%3D%20rule%2Etoken%2Elength%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EreportError%28%22number%20of%20classes%20and%20regexp%20groups%20doesn%27t%20match%22%2C%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20rule%3A%20rule%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20groupCount%3A%20matchcount%20%2D%201%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20rule%2Etoken%20%3D%20rule%2Etoken%5B0%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20rule%2EtokenArray%20%3D%20rule%2Etoken%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20rule%2Etoken%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20rule%2EonMatch%20%3D%20this%2E%24arrayTokens%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28typeof%20rule%2Etoken%20%3D%3D%20%22function%22%20%26%26%20%21rule%2EonMatch%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28matchcount%20%3E%201%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20rule%2EonMatch%20%3D%20this%2E%24applyToken%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20rule%2EonMatch%20%3D%20rule%2Etoken%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28matchcount%20%3E%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%2F%5C%5C%5Cd%2F%2Etest%28rule%2Eregex%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20adjustedregex%20%3D%20rule%2Eregex%2Ereplace%28%2F%5C%5C%28%5B0%2D9%5D%2B%29%2Fg%2C%20function%28match%2C%20digit%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20%22%5C%5C%22%20%2B%20%28parseInt%28digit%2C%2010%29%20%2B%20matchTotal%20%2B%201%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20matchcount%20%3D%201%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20adjustedregex%20%3D%20this%2EremoveCapturingGroups%28rule%2Eregex%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21rule%2EsplitRegex%20%26%26%20typeof%20rule%2Etoken%20%21%3D%20%22string%22%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20splitterRurles%2Epush%28rule%29%3B%20%2F%2F%20flag%20will%20be%20known%20only%20at%20the%20very%20end%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20mapping%5BmatchTotal%5D%20%3D%20i%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20matchTotal%20%2B%3D%20matchcount%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20ruleRegExps%2Epush%28adjustedregex%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21rule%2EonMatch%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20rule%2EonMatch%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%0A%09%20%20%20%20%20%20%20%20if%20%28%21ruleRegExps%2Elength%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20mapping%5B0%5D%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20ruleRegExps%2Epush%28%22%24%22%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%0A%09%20%20%20%20%20%20%20%20splitterRurles%2EforEach%28function%28rule%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20rule%2EsplitRegex%20%3D%20this%2EcreateSplitterRegexp%28rule%2Eregex%2C%20flag%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%2C%20this%29%3B%0A%0A%09%20%20%20%20%20%20%20%20this%2EregExps%5Bkey%5D%20%3D%20new%20RegExp%28%22%28%22%20%2B%20ruleRegExps%2Ejoin%28%22%29%7C%28%22%29%20%2B%20%22%29%7C%28%24%29%22%2C%20flag%29%3B%0A%09%20%20%20%20%7D%0A%09%7D%3B%0A%0A%09%28function%28%29%20%7B%0A%09%20%20%20%20this%2E%24setMaxTokenCount%20%3D%20function%28m%29%20%7B%0A%09%20%20%20%20%20%20%20%20MAX%5FTOKEN%5FCOUNT%20%3D%20m%20%7C%200%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20%0A%09%20%20%20%20this%2E%24applyToken%20%3D%20function%28str%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20values%20%3D%20this%2EsplitRegex%2Eexec%28str%29%2Eslice%281%29%3B%0A%09%20%20%20%20%20%20%20%20var%20types%20%3D%20this%2Etoken%2Eapply%28this%2C%20values%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28typeof%20types%20%3D%3D%3D%20%22string%22%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20%5B%7Btype%3A%20types%2C%20value%3A%20str%7D%5D%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20tokens%20%3D%20%5B%5D%3B%0A%09%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%2C%20l%20%3D%20types%2Elength%3B%20i%20%3C%20l%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28values%5Bi%5D%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tokens%5Btokens%2Elength%5D%20%3D%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20types%5Bi%5D%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20values%5Bi%5D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20tokens%3B%0A%09%20%20%20%20%7D%2C%0A%0A%09%20%20%20%20this%2E%24arrayTokens%20%3D%20function%28str%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%21str%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20%5B%5D%3B%0A%09%20%20%20%20%20%20%20%20var%20values%20%3D%20this%2EsplitRegex%2Eexec%28str%29%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21values%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%20%22text%22%3B%0A%09%20%20%20%20%20%20%20%20var%20tokens%20%3D%20%5B%5D%3B%0A%09%20%20%20%20%20%20%20%20var%20types%20%3D%20this%2EtokenArray%3B%0A%09%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%2C%20l%20%3D%20types%2Elength%3B%20i%20%3C%20l%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28values%5Bi%20%2B%201%5D%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tokens%5Btokens%2Elength%5D%20%3D%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20types%5Bi%5D%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20values%5Bi%20%2B%201%5D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20tokens%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EremoveCapturingGroups%20%3D%20function%28src%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20r%20%3D%20src%2Ereplace%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%2F%5C%5B%28%3F%3A%5C%5C%2E%7C%5B%5E%5C%5D%5D%29%2A%3F%5C%5D%7C%5C%5C%2E%7C%5C%28%5C%3F%5B%3A%3D%21%5D%7C%28%5C%28%29%2Fg%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20function%28x%2C%20y%29%20%7Breturn%20y%20%3F%20%22%28%3F%3A%22%20%3A%20x%3B%7D%0A%09%20%20%20%20%20%20%20%20%29%3B%0A%09%20%20%20%20%20%20%20%20return%20r%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EcreateSplitterRegexp%20%3D%20function%28src%2C%20flag%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28src%2EindexOf%28%22%28%3F%3D%22%29%20%21%3D%20%2D1%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20stack%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20inChClass%20%3D%20false%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20lastCapture%20%3D%20%7B%7D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20src%2Ereplace%28%2F%28%5C%5C%2E%29%7C%28%5C%28%28%3F%3A%5C%3F%5B%3D%21%5D%29%3F%29%7C%28%5C%29%29%7C%28%5B%5C%5B%5C%5D%5D%29%2Fg%2C%20function%28%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20m%2C%20esc%2C%20parenOpen%2C%20parenClose%2C%20square%2C%20index%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28inChClass%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inChClass%20%3D%20square%20%21%3D%20%22%5D%22%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28square%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20inChClass%20%3D%20true%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28parenClose%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28stack%20%3D%3D%20lastCapture%2Estack%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lastCapture%2Eend%20%3D%20index%2B1%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lastCapture%2Estack%20%3D%20%2D1%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stack%2D%2D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28parenOpen%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stack%2B%2B%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28parenOpen%2Elength%20%21%3D%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lastCapture%2Estack%20%3D%20stack%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lastCapture%2Estart%20%3D%20index%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20m%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28lastCapture%2Eend%20%21%3D%20null%20%26%26%20%2F%5E%5C%29%2A%24%2F%2Etest%28src%2Esubstr%28lastCapture%2Eend%29%29%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20src%20%3D%20src%2Esubstring%280%2C%20lastCapture%2Estart%29%20%2B%20src%2Esubstr%28lastCapture%2Eend%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20new%20RegExp%28src%2C%20%28flag%7C%7C%22%22%29%2Ereplace%28%22g%22%2C%20%22%22%29%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20this%2EgetLineTokens%20%3D%20function%28line%2C%20startState%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28startState%20%26%26%20typeof%20startState%20%21%3D%20%22string%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20stack%20%3D%20startState%2Eslice%280%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20startState%20%3D%20stack%5B0%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28startState%20%3D%3D%3D%20%22%23tmp%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stack%2Eshift%28%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20startState%20%3D%20stack%2Eshift%28%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20stack%20%3D%20%5B%5D%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20currentState%20%3D%20startState%20%7C%7C%20%22start%22%3B%0A%09%20%20%20%20%20%20%20%20var%20state%20%3D%20this%2Estates%5BcurrentState%5D%3B%0A%09%20%20%20%20%20%20%20%20if%20%28%21state%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20currentState%20%3D%20%22start%22%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20this%2Estates%5BcurrentState%5D%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20var%20mapping%20%3D%20this%2EmatchMappings%5BcurrentState%5D%3B%0A%09%20%20%20%20%20%20%20%20var%20re%20%3D%20this%2EregExps%5BcurrentState%5D%3B%0A%09%20%20%20%20%20%20%20%20re%2ElastIndex%20%3D%200%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20match%2C%20tokens%20%3D%20%5B%5D%3B%0A%09%20%20%20%20%20%20%20%20var%20lastIndex%20%3D%200%3B%0A%09%20%20%20%20%20%20%20%20var%20matchAttempts%20%3D%200%3B%0A%0A%09%20%20%20%20%20%20%20%20var%20token%20%3D%20%7Btype%3A%20null%2C%20value%3A%20%22%22%7D%3B%0A%0A%09%20%20%20%20%20%20%20%20while%20%28match%20%3D%20re%2Eexec%28line%29%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20type%20%3D%20mapping%2EdefaultToken%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20rule%20%3D%20null%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20value%20%3D%20match%5B0%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20index%20%3D%20re%2ElastIndex%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28index%20%2D%20value%2Elength%20%3E%20lastIndex%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20skipped%20%3D%20line%2Esubstring%28lastIndex%2C%20index%20%2D%20value%2Elength%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28token%2Etype%20%3D%3D%20type%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20token%2Evalue%20%2B%3D%20skipped%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28token%2Etype%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tokens%2Epush%28token%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20token%20%3D%20%7Btype%3A%20type%2C%20value%3A%20skipped%7D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20match%2Elength%2D2%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28match%5Bi%20%2B%201%5D%20%3D%3D%3D%20undefined%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20continue%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20rule%20%3D%20state%5Bmapping%5Bi%5D%5D%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28rule%2EonMatch%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%20%3D%20rule%2EonMatch%28value%2C%20currentState%2C%20stack%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%20%3D%20rule%2Etoken%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28rule%2Enext%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28typeof%20rule%2Enext%20%3D%3D%20%22string%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20currentState%20%3D%20rule%2Enext%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20currentState%20%3D%20rule%2Enext%28currentState%2C%20stack%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20this%2Estates%5BcurrentState%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%21state%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EreportError%28%22state%20doesn%27t%20exist%22%2C%20currentState%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20currentState%20%3D%20%22start%22%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20state%20%3D%20this%2Estates%5BcurrentState%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mapping%20%3D%20this%2EmatchMappings%5BcurrentState%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20lastIndex%20%3D%20index%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20re%20%3D%20this%2EregExps%5BcurrentState%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20re%2ElastIndex%20%3D%20index%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28value%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28typeof%20type%20%3D%3D%3D%20%22string%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%28%21rule%20%7C%7C%20rule%2Emerge%20%21%3D%3D%20false%29%20%26%26%20token%2Etype%20%3D%3D%3D%20type%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20token%2Evalue%20%2B%3D%20value%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28token%2Etype%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tokens%2Epush%28token%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20token%20%3D%20%7Btype%3A%20type%2C%20value%3A%20value%7D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20%28type%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28token%2Etype%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tokens%2Epush%28token%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20token%20%3D%20%7Btype%3A%20null%2C%20value%3A%20%22%22%7D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20type%2Elength%3B%20i%2B%2B%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tokens%2Epush%28type%5Bi%5D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28lastIndex%20%3D%3D%20line%2Elength%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20lastIndex%20%3D%20index%3B%0A%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28matchAttempts%2B%2B%20%3E%20MAX%5FTOKEN%5FCOUNT%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28matchAttempts%20%3E%202%20%2A%20line%2Elength%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2EreportError%28%22infinite%20loop%20with%20in%20ace%20tokenizer%22%2C%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20startState%3A%20startState%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20line%3A%20line%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20while%20%28lastIndex%20%3C%20line%2Elength%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28token%2Etype%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20tokens%2Epush%28token%29%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20token%20%3D%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20line%2Esubstring%28lastIndex%2C%20lastIndex%20%2B%3D%202000%29%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3A%20%22overflow%22%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20currentState%20%3D%20%22start%22%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stack%20%3D%20%5B%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20if%20%28token%2Etype%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20tokens%2Epush%28token%29%3B%0A%09%20%20%20%20%20%20%20%20%0A%09%20%20%20%20%20%20%20%20if%20%28stack%2Elength%20%3E%201%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20if%20%28stack%5B0%5D%20%21%3D%3D%20currentState%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20stack%2Eunshift%28%22%23tmp%22%2C%20currentState%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20return%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20tokens%20%3A%20tokens%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20state%20%3A%20stack%2Elength%20%3F%20stack%20%3A%20currentState%0A%09%20%20%20%20%20%20%20%20%7D%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EreportError%20%3D%20function%28msg%2C%20data%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20e%20%3D%20new%20Error%28msg%29%3B%0A%09%20%20%20%20%20%20%20%20e%2Edata%20%3D%20data%3B%0A%09%20%20%20%20%20%20%20%20if%20%28typeof%20console%20%3D%3D%20%22object%22%20%26%26%20console%2Eerror%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20console%2Eerror%28e%29%3B%0A%09%20%20%20%20%20%20%20%20setTimeout%28function%28%29%20%7B%20throw%20e%3B%20%7D%29%3B%0A%09%20%20%20%20%7D%3B%0A%09%7D%29%2Ecall%28Tokenizer%2Eprototype%29%3B%0A%0A%09exports%2ETokenizer%20%3D%20Tokenizer%3B%0A%09%7D%29%3B%0A%0A%09ace%2Edefine%28%22ace%2Fmode%2Ftext%5Fhighlight%5Frules%22%2C%5B%22require%22%2C%22exports%22%2C%22module%22%2C%22ace%2Flib%2Flang%22%5D%2C%20function%28acequire%2C%20exports%2C%20module%29%20%7B%0A%09%22use%20strict%22%3B%0A%0A%09var%20lang%20%3D%20acequire%28%22%2E%2E%2Flib%2Flang%22%29%3B%0A%0A%09var%20TextHighlightRules%20%3D%20function%28%29%20%7B%0A%0A%09%20%20%20%20this%2E%24rules%20%3D%20%7B%0A%09%20%20%20%20%20%20%20%20%22start%22%20%3A%20%5B%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20token%20%3A%20%22empty%5Fline%22%2C%0A%09%20%20%20%20%20%20%20%20%20%20%20%20regex%20%3A%20%27%5E%24%27%0A%09%20%20%20%20%20%20%20%20%7D%2C%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20defaultToken%20%3A%20%22text%22%0A%09%20%20%20%20%20%20%20%20%7D%5D%0A%09%20%20%20%20%7D%3B%0A%09%7D%3B%0A%0A%09%28function%28%29%20%7B%0A%0A%09%20%20%20%20this%2EaddRules%20%3D%20function%28rules%2C%20prefix%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28%21prefix%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20for%20%28var%20key%20in%20rules%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24rules%5Bkey%5D%20%3D%20rules%5Bkey%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20for%20%28var%20key%20in%20rules%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20state%20%3D%20rules%5Bkey%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20state%2Elength%3B%20i%2B%2B%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20rule%20%3D%20state%5Bi%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28rule%2Enext%20%7C%7C%20rule%2EonMatch%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28typeof%20rule%2Enext%20%21%3D%20%22string%22%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28rule%2EnextState%20%26%26%20rule%2EnextState%2EindexOf%28prefix%29%20%21%3D%3D%200%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20rule%2EnextState%20%3D%20prefix%20%2B%20rule%2EnextState%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28rule%2Enext%2EindexOf%28prefix%29%20%21%3D%3D%200%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20rule%2Enext%20%3D%20prefix%20%2B%20rule%2Enext%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24rules%5Bprefix%20%2B%20key%5D%20%3D%20state%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EgetRules%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20this%2E%24rules%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EembedRules%20%3D%20function%20%28HighlightRules%2C%20prefix%2C%20escapeRules%2C%20states%2C%20append%29%20%7B%0A%09%20%20%20%20%20%20%20%20var%20embedRules%20%3D%20typeof%20HighlightRules%20%3D%3D%20%22function%22%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%3F%20new%20HighlightRules%28%29%2EgetRules%28%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%3A%20HighlightRules%3B%0A%09%20%20%20%20%20%20%20%20if%20%28states%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20states%2Elength%3B%20i%2B%2B%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20states%5Bi%5D%20%3D%20prefix%20%2B%20states%5Bi%5D%3B%0A%09%20%20%20%20%20%20%20%20%7D%20else%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20states%20%3D%20%5B%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20for%20%28var%20key%20in%20embedRules%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20states%2Epush%28prefix%20%2B%20key%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20this%2EaddRules%28embedRules%2C%20prefix%29%3B%0A%0A%09%20%20%20%20%20%20%20%20if%20%28escapeRules%29%20%7B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20var%20addRules%20%3D%20Array%2Eprototype%5Bappend%20%3F%20%22push%22%20%3A%20%22unshift%22%5D%3B%0A%09%20%20%20%20%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20states%2Elength%3B%20i%2B%2B%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20addRules%2Eapply%28this%2E%24rules%5Bstates%5Bi%5D%5D%2C%20lang%2EdeepCopy%28escapeRules%29%29%3B%0A%09%20%20%20%20%20%20%20%20%7D%0A%0A%09%20%20%20%20%20%20%20%20if%20%28%21this%2E%24embeds%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20this%2E%24embeds%20%3D%20%5B%5D%3B%0A%09%20%20%20%20%20%20%20%20this%2E%24embeds%2Epush%28prefix%29%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20this%2EgetEmbeds%20%3D%20function%28%29%20%7B%0A%09%20%20%20%20%20%20%20%20return%20this%2E%24embeds%3B%0A%09%20%20%20%20%7D%3B%0A%0A%09%20%20%20%20var%20pushState%20%3D%20function%28currentState%2C%20stack%29%20%7B%0A%09%20%20%20%20%20%20%20%20if%20%28currentState%20%21%3D%20%22start%22%20%7C%7C%20stack%2Elength%29%0A%09%20%20%20%20%20%20%20%20%20%20%20%20stack%2Eunshift%28this%2EnextState%2C%20currentState%29%3B%0A%09%20%20%20%20%20%20%20%20return%20this%2EnextState%3B%0A%09%20%20%20%20%7D%3B%0A%09%20%20%20%20var%20popState%20%3D%20function%28currentState%2C%20stack%29%20%7B%0A%09%20%20%20%20%20%20%20%20stack%2Eshift%28%29%3B%0A%09%20%20%20%20%20%20%20%20return
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment