All Downloads are FREE. Search and download functionalities are using the official Maven repository.

web-interface.assets.325e2d4b-3618.6dd4754b29ba4025da20.js.map Maven / Gradle / Ivy

There is a newer version: 6.0.1
Show newest version
{"version":3,"file":"325e2d4b-3618.6dd4754b29ba4025da20.js","mappings":"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,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,IAAK,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG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wC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,0DCA3CxC,EAAOwC,QAAU,IAA0B,4DCA3CxC,EAAO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","sources":["webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ace.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-split.js","webpack://graylog-web-interface/./node_modules/ace-builds/webpack-resolver.js","webpack://graylog-web-interface/./node_modules/diff-match-patch/index.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-beautify.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-code_lens.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-elastic_tabstops_lite.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-emmet.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-error_marker.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-hardwrap.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-keybinding_menu.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-language_tools.js?b70a","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-linking.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-modelist.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-options.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-prompt.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-rtl.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-searchbox.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-settings_menu.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-spellcheck.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-split.js?4aea","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-static_highlight.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-statusbar.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-textarea.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-themelist.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/ext-whitespace.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/keybinding-emacs.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/keybinding-sublime.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/keybinding-vim.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/keybinding-vscode.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-abap.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-abc.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-actionscript.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-ada.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-alda.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-apache_conf.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-apex.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-applescript.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-aql.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-asciidoc.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-asl.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-assembly_x86.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-autohotkey.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-batchfile.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-bibtex.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-c9search.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-c_cpp.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-cirru.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-clojure.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-cobol.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-coffee.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-coldfusion.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-crystal.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-csharp.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-csound_document.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-csound_orchestra.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-csound_score.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-csp.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-css.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-curly.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-d.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-dart.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-diff.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-django.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-dockerfile.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-dot.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-drools.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-edifact.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-eiffel.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-ejs.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-elixir.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-elm.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-erlang.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-forth.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-fortran.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-fsharp.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-fsl.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-ftl.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-gcode.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-gherkin.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-gitignore.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-glsl.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-gobstones.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-golang.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-graphqlschema.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-groovy.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-haml.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-handlebars.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-haskell.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-haskell_cabal.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-haxe.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-hjson.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-html.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-html_elixir.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-html_ruby.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-ini.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-io.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-ion.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-jack.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-jade.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-java.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-javascript.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-json.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-json5.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-jsoniq.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-jsp.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-jssm.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-jsx.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-julia.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-kotlin.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-latex.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-latte.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-less.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-liquid.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-lisp.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-livescript.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-logiql.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-logtalk.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-lsl.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-lua.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-luapage.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-lucene.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-makefile.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-markdown.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-mask.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-matlab.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-maze.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-mediawiki.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-mel.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-mips.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-mixal.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-mushcode.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-mysql.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-nginx.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-nim.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-nix.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-nsis.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-nunjucks.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-objectivec.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-ocaml.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-partiql.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-pascal.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-perl.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-pgsql.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-php.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-php_laravel_blade.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-pig.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-plain_text.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-powershell.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-praat.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-prisma.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-prolog.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-properties.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-protobuf.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-puppet.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-python.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-qml.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-r.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-raku.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-razor.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-rdoc.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-red.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-redshift.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-rhtml.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-robot.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-rst.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-ruby.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-rust.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-sac.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-sass.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-scad.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-scala.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-scheme.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-scrypt.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-scss.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-sh.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-sjs.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-slim.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-smarty.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-smithy.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-snippets.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-soy_template.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-space.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-sparql.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-sql.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-sqlserver.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-stylus.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-svg.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-swift.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-tcl.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-terraform.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-tex.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-text.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-textile.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-toml.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-tsx.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-turtle.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-twig.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-typescript.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-vala.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-vbscript.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-velocity.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-verilog.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-vhdl.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-visualforce.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-wollok.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-xml.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-xquery.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-yaml.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/mode-zeek.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/abap.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/abc.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/actionscript.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/ada.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/alda.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/apache_conf.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/apex.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/applescript.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/aql.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/asciidoc.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/asl.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/assembly_x86.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/autohotkey.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/batchfile.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/bibtex.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/c9search.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/c_cpp.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/cirru.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/clojure.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/cobol.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/coffee.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/coldfusion.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/crystal.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/csharp.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/csound_document.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/csound_orchestra.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/csound_score.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/csp.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/css.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/curly.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/d.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/dart.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/diff.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/django.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/dockerfile.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/dot.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/drools.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/edifact.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/eiffel.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/ejs.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/elixir.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/elm.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/erlang.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/forth.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/fortran.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/fsharp.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/fsl.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/ftl.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/gcode.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/gherkin.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/gitignore.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/glsl.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/gobstones.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/golang.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/graphqlschema.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/groovy.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/haml.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/handlebars.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/haskell.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/haskell_cabal.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/haxe.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/hjson.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/html.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/html_elixir.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/html_ruby.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/ini.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/io.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/ion.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/jack.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/jade.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/java.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/javascript.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/json.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/json5.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/jsoniq.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/jsp.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/jssm.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/jsx.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/julia.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/kotlin.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/latex.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/latte.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/less.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/liquid.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/lisp.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/livescript.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/logiql.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/logtalk.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/lsl.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/lua.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/luapage.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/lucene.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/makefile.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/markdown.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/mask.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/matlab.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/maze.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/mediawiki.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/mel.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/mips.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/mixal.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/mushcode.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/mysql.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/nginx.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/nim.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/nix.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/nsis.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/nunjucks.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/objectivec.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/ocaml.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/partiql.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/pascal.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/perl.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/pgsql.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/php.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/php_laravel_blade.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/pig.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/plain_text.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/powershell.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/praat.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/prisma.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/prolog.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/properties.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/protobuf.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/puppet.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/python.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/qml.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/r.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/raku.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/razor.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/rdoc.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/red.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/redshift.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/rhtml.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/robot.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/rst.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/ruby.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/rust.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/sac.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/sass.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/scad.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/scala.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/scheme.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/scrypt.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/scss.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/sh.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/sjs.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/slim.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/smarty.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/smithy.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/snippets.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/soy_template.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/space.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/sparql.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/sql.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/sqlserver.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/stylus.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/svg.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/swift.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/tcl.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/terraform.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/tex.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/text.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/textile.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/toml.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/tsx.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/turtle.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/twig.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/typescript.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/vala.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/vbscript.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/velocity.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/verilog.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/vhdl.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/visualforce.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/wollok.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/xml.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/xquery.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/yaml.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/snippets/zeek.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-ambiance.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-chaos.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-chrome.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-cloud9_day.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-cloud9_night.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-cloud9_night_low_color.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-clouds.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-clouds_midnight.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-cobalt.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-crimson_editor.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-dawn.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-dracula.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-dreamweaver.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-eclipse.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-github.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-gob.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-gruvbox.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-gruvbox_dark_hard.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-gruvbox_light_hard.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-idle_fingers.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-iplastic.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-katzenmilch.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-kr_theme.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-kuroir.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-merbivore.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-merbivore_soft.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-mono_industrial.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-monokai.js?42ea","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-nord_dark.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-one_dark.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-pastel_on_dark.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-solarized_dark.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-solarized_light.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-sqlserver.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-terminal.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-textmate.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-tomorrow.js?ee20","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-tomorrow_night.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-tomorrow_night_blue.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-tomorrow_night_bright.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-tomorrow_night_eighties.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-twilight.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-vibrant_ink.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/theme-xcode.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/worker-base.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/worker-coffee.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/worker-css.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/worker-html.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/worker-javascript.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/worker-json.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/worker-lua.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/worker-php.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/worker-xml.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/worker-xquery.js","webpack://graylog-web-interface/./node_modules/ace-builds/src-noconflict/worker-yaml.js","webpack://graylog-web-interface/./node_modules/lodash.get/index.js","webpack://graylog-web-interface/./node_modules/react-ace/lib/ace.js","webpack://graylog-web-interface/./node_modules/react-ace/lib/diff.js","webpack://graylog-web-interface/./node_modules/react-ace/lib/editorOptions.js","webpack://graylog-web-interface/./node_modules/react-ace/lib/index.js","webpack://graylog-web-interface/./node_modules/react-ace/lib/split.js"],"sourcesContent":["/* ***** BEGIN LICENSE BLOCK *****\n * Distributed under the BSD license:\n *\n * Copyright (c) 2010, Ajax.org B.V.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *     * Redistributions of source code must retain the above copyright\n *       notice, this list of conditions and the following disclaimer.\n *     * Redistributions in binary form must reproduce the above copyright\n *       notice, this list of conditions and the following disclaimer in the\n *       documentation and/or other materials provided with the distribution.\n *     * Neither the name of Ajax.org B.V. nor the\n *       names of its contributors may be used to endorse or promote products\n *       derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY\n * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * ***** END LICENSE BLOCK ***** */\n\n/**\n * Define a module along with a payload\n * @param module a name for the payload\n * @param payload a function to call with (require, exports, module) params\n */\n\n(function() {\n\nvar ACE_NAMESPACE = \"ace\";\n\nvar global = (function() { return this; })();\nif (!global && typeof window != \"undefined\") global = window; // strict mode\n\n\nif (!ACE_NAMESPACE && typeof requirejs !== \"undefined\")\n    return;\n\n\nvar define = function(module, deps, payload) {\n    if (typeof module !== \"string\") {\n        if (define.original)\n            define.original.apply(this, arguments);\n        else {\n            console.error(\"dropping module because define wasn\\'t a string.\");\n            console.trace();\n        }\n        return;\n    }\n    if (arguments.length == 2)\n        payload = deps;\n    if (!define.modules[module]) {\n        define.payloads[module] = payload;\n        define.modules[module] = null;\n    }\n};\n\ndefine.modules = {};\ndefine.payloads = {};\n\n/**\n * Get at functionality define()ed using the function above\n */\nvar _require = function(parentId, module, callback) {\n    if (typeof module === \"string\") {\n        var payload = lookup(parentId, module);\n        if (payload != undefined) {\n            callback && callback();\n            return payload;\n        }\n    } else if (Object.prototype.toString.call(module) === \"[object Array]\") {\n        var params = [];\n        for (var i = 0, l = module.length; i < l; ++i) {\n            var dep = lookup(parentId, module[i]);\n            if (dep == undefined && require.original)\n                return;\n            params.push(dep);\n        }\n        return callback && callback.apply(null, params) || true;\n    }\n};\n\nvar require = function(module, callback) {\n    var packagedModule = _require(\"\", module, callback);\n    if (packagedModule == undefined && require.original)\n        return require.original.apply(this, arguments);\n    return packagedModule;\n};\n\nvar normalizeModule = function(parentId, moduleName) {\n    // normalize plugin requires\n    if (moduleName.indexOf(\"!\") !== -1) {\n        var chunks = moduleName.split(\"!\");\n        return normalizeModule(parentId, chunks[0]) + \"!\" + normalizeModule(parentId, chunks[1]);\n    }\n    // normalize relative requires\n    if (moduleName.charAt(0) == \".\") {\n        var base = parentId.split(\"/\").slice(0, -1).join(\"/\");\n        moduleName = base + \"/\" + moduleName;\n\n        while(moduleName.indexOf(\".\") !== -1 && previous != moduleName) {\n            var previous = moduleName;\n            moduleName = moduleName.replace(/\\/\\.\\//, \"/\").replace(/[^\\/]+\\/\\.\\.\\//, \"\");\n        }\n    }\n    return moduleName;\n};\n\n/**\n * Internal function to lookup moduleNames and resolve them by calling the\n * definition function if needed.\n */\nvar lookup = function(parentId, moduleName) {\n    moduleName = normalizeModule(parentId, moduleName);\n\n    var module = define.modules[moduleName];\n    if (!module) {\n        module = define.payloads[moduleName];\n        if (typeof module === 'function') {\n            var exports = {};\n            var mod = {\n                id: moduleName,\n                uri: '',\n                exports: exports,\n                packaged: true\n            };\n\n            var req = function(module, callback) {\n                return _require(moduleName, module, callback);\n            };\n\n            var returnValue = module(req, exports, mod);\n            exports = returnValue || mod.exports;\n            define.modules[moduleName] = exports;\n            delete define.payloads[moduleName];\n        }\n        module = define.modules[moduleName] = exports || module;\n    }\n    return module;\n};\n\nfunction exportAce(ns) {\n    var root = global;\n    if (ns) {\n        if (!global[ns])\n            global[ns] = {};\n        root = global[ns];\n    }\n\n    if (!root.define || !root.define.packaged) {\n        define.original = root.define;\n        root.define = define;\n        root.define.packaged = true;\n    }\n\n    if (!root.require || !root.require.packaged) {\n        require.original = root.require;\n        root.require = require;\n        root.require.packaged = true;\n    }\n}\n\nexportAce(ACE_NAMESPACE);\n\n})();\n\nace.define(\"ace/lib/es6-shim\",[\"require\",\"exports\",\"module\"], function(require, exports, module){function defineProp(obj, name, val) {\n    Object.defineProperty(obj, name, {\n        value: val,\n        enumerable: false,\n        writable: true,\n        configurable: true\n    });\n}\nif (!String.prototype.startsWith) {\n    defineProp(String.prototype, \"startsWith\", function (searchString, position) {\n        position = position || 0;\n        return this.lastIndexOf(searchString, position) === position;\n    });\n}\nif (!String.prototype.endsWith) {\n    defineProp(String.prototype, \"endsWith\", function (searchString, position) {\n        var subjectString = this;\n        if (position === undefined || position > subjectString.length) {\n            position = subjectString.length;\n        }\n        position -= searchString.length;\n        var lastIndex = subjectString.indexOf(searchString, position);\n        return lastIndex !== -1 && lastIndex === position;\n    });\n}\nif (!String.prototype.repeat) {\n    defineProp(String.prototype, \"repeat\", function (count) {\n        var result = \"\";\n        var string = this;\n        while (count > 0) {\n            if (count & 1)\n                result += string;\n            if ((count >>= 1))\n                string += string;\n        }\n        return result;\n    });\n}\nif (!String.prototype.includes) {\n    defineProp(String.prototype, \"includes\", function (str, position) {\n        return this.indexOf(str, position) != -1;\n    });\n}\nif (!Object.assign) {\n    Object.assign = function (target) {\n        if (target === undefined || target === null) {\n            throw new TypeError(\"Cannot convert undefined or null to object\");\n        }\n        var output = Object(target);\n        for (var index = 1; index < arguments.length; index++) {\n            var source = arguments[index];\n            if (source !== undefined && source !== null) {\n                Object.keys(source).forEach(function (key) {\n                    output[key] = source[key];\n                });\n            }\n        }\n        return output;\n    };\n}\nif (!Object.values) {\n    Object.values = function (o) {\n        return Object.keys(o).map(function (k) {\n            return o[k];\n        });\n    };\n}\nif (!Array.prototype.find) {\n    defineProp(Array.prototype, \"find\", function (predicate) {\n        var len = this.length;\n        var thisArg = arguments[1];\n        for (var k = 0; k < len; k++) {\n            var kValue = this[k];\n            if (predicate.call(thisArg, kValue, k, this)) {\n                return kValue;\n            }\n        }\n    });\n}\nif (!Array.prototype.findIndex) {\n    defineProp(Array.prototype, \"findIndex\", function (predicate) {\n        var len = this.length;\n        var thisArg = arguments[1];\n        for (var k = 0; k < len; k++) {\n            var kValue = this[k];\n            if (predicate.call(thisArg, kValue, k, this)) {\n                return k;\n            }\n        }\n    });\n}\nif (!Array.prototype.includes) {\n    defineProp(Array.prototype, \"includes\", function (item, position) {\n        return this.indexOf(item, position) != -1;\n    });\n}\nif (!Array.prototype.fill) {\n    defineProp(Array.prototype, \"fill\", function (value) {\n        var O = this;\n        var len = O.length >>> 0;\n        var start = arguments[1];\n        var relativeStart = start >> 0;\n        var k = relativeStart < 0\n            ? Math.max(len + relativeStart, 0)\n            : Math.min(relativeStart, len);\n        var end = arguments[2];\n        var relativeEnd = end === undefined ? len : end >> 0;\n        var final = relativeEnd < 0\n            ? Math.max(len + relativeEnd, 0)\n            : Math.min(relativeEnd, len);\n        while (k < final) {\n            O[k] = value;\n            k++;\n        }\n        return O;\n    });\n}\nif (!Array.of) {\n    defineProp(Array, \"of\", function () {\n        return Array.prototype.slice.call(arguments);\n    });\n}\n\n});\n\nace.define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/es6-shim\"], function(require, exports, module){// vim:set ts=4 sts=4 sw=4 st:\n\"use strict\";\nrequire(\"./es6-shim\");\n\n});\n\nace.define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nexports.last = function (a) {\n    return a[a.length - 1];\n};\nexports.stringReverse = function (string) {\n    return string.split(\"\").reverse().join(\"\");\n};\nexports.stringRepeat = function (string, count) {\n    var result = '';\n    while (count > 0) {\n        if (count & 1)\n            result += string;\n        if (count >>= 1)\n            string += string;\n    }\n    return result;\n};\nvar trimBeginRegexp = /^\\s\\s*/;\nvar trimEndRegexp = /\\s\\s*$/;\nexports.stringTrimLeft = function (string) {\n    return string.replace(trimBeginRegexp, '');\n};\nexports.stringTrimRight = function (string) {\n    return string.replace(trimEndRegexp, '');\n};\nexports.copyObject = function (obj) {\n    var copy = {};\n    for (var key in obj) {\n        copy[key] = obj[key];\n    }\n    return copy;\n};\nexports.copyArray = function (array) {\n    var copy = [];\n    for (var i = 0, l = array.length; i < l; i++) {\n        if (array[i] && typeof array[i] == \"object\")\n            copy[i] = this.copyObject(array[i]);\n        else\n            copy[i] = array[i];\n    }\n    return copy;\n};\nexports.deepCopy = function deepCopy(obj) {\n    if (typeof obj !== \"object\" || !obj)\n        return obj;\n    var copy;\n    if (Array.isArray(obj)) {\n        copy = [];\n        for (var key = 0; key < obj.length; key++) {\n            copy[key] = deepCopy(obj[key]);\n        }\n        return copy;\n    }\n    if (Object.prototype.toString.call(obj) !== \"[object Object]\")\n        return obj;\n    copy = {};\n    for (var key in obj)\n        copy[key] = deepCopy(obj[key]);\n    return copy;\n};\nexports.arrayToMap = function (arr) {\n    var map = {};\n    for (var i = 0; i < arr.length; i++) {\n        map[arr[i]] = 1;\n    }\n    return map;\n};\nexports.createMap = function (props) {\n    var map = Object.create(null);\n    for (var i in props) {\n        map[i] = props[i];\n    }\n    return map;\n};\nexports.arrayRemove = function (array, value) {\n    for (var i = 0; i <= array.length; i++) {\n        if (value === array[i]) {\n            array.splice(i, 1);\n        }\n    }\n};\nexports.escapeRegExp = function (str) {\n    return str.replace(/([.*+?^${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nexports.escapeHTML = function (str) {\n    return (\"\" + str).replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/'/g, \"'\").replace(/= 0)\n        ? parseFloat((ua.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1])\n        : parseFloat((ua.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/) || [])[1]); // for ie\nexports.isOldIE = exports.isIE && exports.isIE < 9;\nexports.isGecko = exports.isMozilla = ua.match(/ Gecko\\/\\d+/);\nexports.isOpera = typeof opera == \"object\" && Object.prototype.toString.call(window.opera) == \"[object Opera]\";\nexports.isWebKit = parseFloat(ua.split(\"WebKit/\")[1]) || undefined;\nexports.isChrome = parseFloat(ua.split(\" Chrome/\")[1]) || undefined;\nexports.isEdge = parseFloat(ua.split(\" Edge/\")[1]) || undefined;\nexports.isAIR = ua.indexOf(\"AdobeAIR\") >= 0;\nexports.isAndroid = ua.indexOf(\"Android\") >= 0;\nexports.isChromeOS = ua.indexOf(\" CrOS \") >= 0;\nexports.isIOS = /iPad|iPhone|iPod/.test(ua) && !window.MSStream;\nif (exports.isIOS)\n    exports.isMac = true;\nexports.isMobile = exports.isIOS || exports.isAndroid;\n\n});\n\nace.define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"./useragent\");\nvar XHTML_NS = \"http://www.w3.org/1999/xhtml\";\nexports.buildDom = function buildDom(arr, parent, refs) {\n    if (typeof arr == \"string\" && arr) {\n        var txt = document.createTextNode(arr);\n        if (parent)\n            parent.appendChild(txt);\n        return txt;\n    }\n    if (!Array.isArray(arr)) {\n        if (arr && arr.appendChild && parent)\n            parent.appendChild(arr);\n        return arr;\n    }\n    if (typeof arr[0] != \"string\" || !arr[0]) {\n        var els = [];\n        for (var i = 0; i < arr.length; i++) {\n            var ch = buildDom(arr[i], parent, refs);\n            ch && els.push(ch);\n        }\n        return els;\n    }\n    var el = document.createElement(arr[0]);\n    var options = arr[1];\n    var childIndex = 1;\n    if (options && typeof options == \"object\" && !Array.isArray(options))\n        childIndex = 2;\n    for (var i = childIndex; i < arr.length; i++)\n        buildDom(arr[i], el, refs);\n    if (childIndex == 2) {\n        Object.keys(options).forEach(function (n) {\n            var val = options[n];\n            if (n === \"class\") {\n                el.className = Array.isArray(val) ? val.join(\" \") : val;\n            }\n            else if (typeof val == \"function\" || n == \"value\" || n[0] == \"$\") {\n                el[n] = val;\n            }\n            else if (n === \"ref\") {\n                if (refs)\n                    refs[val] = el;\n            }\n            else if (n === \"style\") {\n                if (typeof val == \"string\")\n                    el.style.cssText = val;\n            }\n            else if (val != null) {\n                el.setAttribute(n, val);\n            }\n        });\n    }\n    if (parent)\n        parent.appendChild(el);\n    return el;\n};\nexports.getDocumentHead = function (doc) {\n    if (!doc)\n        doc = document;\n    return doc.head || doc.getElementsByTagName(\"head\")[0] || doc.documentElement;\n};\nexports.createElement = function (tag, ns) {\n    return document.createElementNS ?\n        document.createElementNS(ns || XHTML_NS, tag) :\n        document.createElement(tag);\n};\nexports.removeChildren = function (element) {\n    element.innerHTML = \"\";\n};\nexports.createTextNode = function (textContent, element) {\n    var doc = element ? element.ownerDocument : document;\n    return doc.createTextNode(textContent);\n};\nexports.createFragment = function (element) {\n    var doc = element ? element.ownerDocument : document;\n    return doc.createDocumentFragment();\n};\nexports.hasCssClass = function (el, name) {\n    var classes = (el.className + \"\").split(/\\s+/g);\n    return classes.indexOf(name) !== -1;\n};\nexports.addCssClass = function (el, name) {\n    if (!exports.hasCssClass(el, name)) {\n        el.className += \" \" + name;\n    }\n};\nexports.removeCssClass = function (el, name) {\n    var classes = el.className.split(/\\s+/g);\n    while (true) {\n        var index = classes.indexOf(name);\n        if (index == -1) {\n            break;\n        }\n        classes.splice(index, 1);\n    }\n    el.className = classes.join(\" \");\n};\nexports.toggleCssClass = function (el, name) {\n    var classes = el.className.split(/\\s+/g), add = true;\n    while (true) {\n        var index = classes.indexOf(name);\n        if (index == -1) {\n            break;\n        }\n        add = false;\n        classes.splice(index, 1);\n    }\n    if (add)\n        classes.push(name);\n    el.className = classes.join(\" \");\n    return add;\n};\nexports.setCssClass = function (node, className, include) {\n    if (include) {\n        exports.addCssClass(node, className);\n    }\n    else {\n        exports.removeCssClass(node, className);\n    }\n};\nexports.hasCssString = function (id, doc) {\n    var index = 0, sheets;\n    doc = doc || document;\n    if ((sheets = doc.querySelectorAll(\"style\"))) {\n        while (index < sheets.length) {\n            if (sheets[index++].id === id) {\n                return true;\n            }\n        }\n    }\n};\nexports.removeElementById = function (id, doc) {\n    doc = doc || document;\n    if (doc.getElementById(id)) {\n        doc.getElementById(id).remove();\n    }\n};\nvar strictCSP;\nvar cssCache = [];\nexports.useStrictCSP = function (value) {\n    strictCSP = value;\n    if (value == false)\n        insertPendingStyles();\n    else if (!cssCache)\n        cssCache = [];\n};\nfunction insertPendingStyles() {\n    var cache = cssCache;\n    cssCache = null;\n    cache && cache.forEach(function (item) {\n        importCssString(item[0], item[1]);\n    });\n}\nfunction importCssString(cssText, id, target) {\n    if (typeof document == \"undefined\")\n        return;\n    if (cssCache) {\n        if (target) {\n            insertPendingStyles();\n        }\n        else if (target === false) {\n            return cssCache.push([cssText, id]);\n        }\n    }\n    if (strictCSP)\n        return;\n    var container = target;\n    if (!target || !target.getRootNode) {\n        container = document;\n    }\n    else {\n        container = target.getRootNode();\n        if (!container || container == target)\n            container = document;\n    }\n    var doc = container.ownerDocument || container;\n    if (id && exports.hasCssString(id, container))\n        return null;\n    if (id)\n        cssText += \"\\n/*# sourceURL=ace/css/\" + id + \" */\";\n    var style = exports.createElement(\"style\");\n    style.appendChild(doc.createTextNode(cssText));\n    if (id)\n        style.id = id;\n    if (container == doc)\n        container = exports.getDocumentHead(doc);\n    container.insertBefore(style, container.firstChild);\n}\nexports.importCssString = importCssString;\nexports.importCssStylsheet = function (uri, doc) {\n    exports.buildDom([\"link\", { rel: \"stylesheet\", href: uri }], exports.getDocumentHead(doc));\n};\nexports.scrollbarWidth = function (document) {\n    var inner = exports.createElement(\"ace_inner\");\n    inner.style.width = \"100%\";\n    inner.style.minWidth = \"0px\";\n    inner.style.height = \"200px\";\n    inner.style.display = \"block\";\n    var outer = exports.createElement(\"ace_outer\");\n    var style = outer.style;\n    style.position = \"absolute\";\n    style.left = \"-10000px\";\n    style.overflow = \"hidden\";\n    style.width = \"200px\";\n    style.minWidth = \"0px\";\n    style.height = \"150px\";\n    style.display = \"block\";\n    outer.appendChild(inner);\n    var body = document.documentElement;\n    body.appendChild(outer);\n    var noScrollbar = inner.offsetWidth;\n    style.overflow = \"scroll\";\n    var withScrollbar = inner.offsetWidth;\n    if (noScrollbar == withScrollbar) {\n        withScrollbar = outer.clientWidth;\n    }\n    body.removeChild(outer);\n    return noScrollbar - withScrollbar;\n};\nexports.computedStyle = function (element, style) {\n    return window.getComputedStyle(element, \"\") || {};\n};\nexports.setStyle = function (styles, property, value) {\n    if (styles[property] !== value) {\n        styles[property] = value;\n    }\n};\nexports.HAS_CSS_ANIMATION = false;\nexports.HAS_CSS_TRANSFORMS = false;\nexports.HI_DPI = useragent.isWin\n    ? typeof window !== \"undefined\" && window.devicePixelRatio >= 1.5\n    : true;\nif (useragent.isChromeOS)\n    exports.HI_DPI = false;\nif (typeof document !== \"undefined\") {\n    var div = document.createElement(\"div\");\n    if (exports.HI_DPI && div.style.transform !== undefined)\n        exports.HAS_CSS_TRANSFORMS = true;\n    if (!useragent.isEdge && typeof div.style.animationName !== \"undefined\")\n        exports.HAS_CSS_ANIMATION = true;\n    div = null;\n}\nif (exports.HAS_CSS_TRANSFORMS) {\n    exports.translate = function (element, tx, ty) {\n        element.style.transform = \"translate(\" + Math.round(tx) + \"px, \" + Math.round(ty) + \"px)\";\n    };\n}\nelse {\n    exports.translate = function (element, tx, ty) {\n        element.style.top = Math.round(ty) + \"px\";\n        element.style.left = Math.round(tx) + \"px\";\n    };\n}\n\n});\n\nace.define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){/*\n * based on code from:\n *\n * @license RequireJS text 0.25.0 Copyright (c) 2010-2011, The Dojo Foundation All Rights Reserved.\n * Available via the MIT or new BSD license.\n * see: http://github.com/jrburke/requirejs for details\n */\n\"use strict\";\nvar dom = require(\"./dom\");\nexports.get = function (url, callback) {\n    var xhr = new XMLHttpRequest();\n    xhr.open('GET', url, true);\n    xhr.onreadystatechange = function () {\n        if (xhr.readyState === 4) {\n            callback(xhr.responseText);\n        }\n    };\n    xhr.send(null);\n};\nexports.loadScript = function (path, callback) {\n    var head = dom.getDocumentHead();\n    var s = document.createElement('script');\n    s.src = path;\n    head.appendChild(s);\n    s.onload = s.onreadystatechange = function (_, isAbort) {\n        if (isAbort || !s.readyState || s.readyState == \"loaded\" || s.readyState == \"complete\") {\n            s = s.onload = s.onreadystatechange = null;\n            if (!isAbort)\n                callback();\n        }\n    };\n};\nexports.qualifyURL = function (url) {\n    var a = document.createElement('a');\n    a.href = url;\n    return a.href;\n};\n\n});\n\nace.define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar EventEmitter = {};\nvar stopPropagation = function () { this.propagationStopped = true; };\nvar preventDefault = function () { this.defaultPrevented = true; };\nEventEmitter._emit =\n    EventEmitter._dispatchEvent = function (eventName, e) {\n        this._eventRegistry || (this._eventRegistry = {});\n        this._defaultHandlers || (this._defaultHandlers = {});\n        var listeners = this._eventRegistry[eventName] || [];\n        var defaultHandler = this._defaultHandlers[eventName];\n        if (!listeners.length && !defaultHandler)\n            return;\n        if (typeof e != \"object\" || !e)\n            e = {};\n        if (!e.type)\n            e.type = eventName;\n        if (!e.stopPropagation)\n            e.stopPropagation = stopPropagation;\n        if (!e.preventDefault)\n            e.preventDefault = preventDefault;\n        listeners = listeners.slice();\n        for (var i = 0; i < listeners.length; i++) {\n            listeners[i](e, this);\n            if (e.propagationStopped)\n                break;\n        }\n        if (defaultHandler && !e.defaultPrevented)\n            return defaultHandler(e, this);\n    };\nEventEmitter._signal = function (eventName, e) {\n    var listeners = (this._eventRegistry || {})[eventName];\n    if (!listeners)\n        return;\n    listeners = listeners.slice();\n    for (var i = 0; i < listeners.length; i++)\n        listeners[i](e, this);\n};\nEventEmitter.once = function (eventName, callback) {\n    var _self = this;\n    this.on(eventName, function newCallback() {\n        _self.off(eventName, newCallback);\n        callback.apply(null, arguments);\n    });\n    if (!callback) {\n        return new Promise(function (resolve) {\n            callback = resolve;\n        });\n    }\n};\nEventEmitter.setDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        handlers = this._defaultHandlers = { _disabled_: {} };\n    if (handlers[eventName]) {\n        var old = handlers[eventName];\n        var disabled = handlers._disabled_[eventName];\n        if (!disabled)\n            handlers._disabled_[eventName] = disabled = [];\n        disabled.push(old);\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n    handlers[eventName] = callback;\n};\nEventEmitter.removeDefaultHandler = function (eventName, callback) {\n    var handlers = this._defaultHandlers;\n    if (!handlers)\n        return;\n    var disabled = handlers._disabled_[eventName];\n    if (handlers[eventName] == callback) {\n        if (disabled)\n            this.setDefaultHandler(eventName, disabled.pop());\n    }\n    else if (disabled) {\n        var i = disabled.indexOf(callback);\n        if (i != -1)\n            disabled.splice(i, 1);\n    }\n};\nEventEmitter.on =\n    EventEmitter.addEventListener = function (eventName, callback, capturing) {\n        this._eventRegistry = this._eventRegistry || {};\n        var listeners = this._eventRegistry[eventName];\n        if (!listeners)\n            listeners = this._eventRegistry[eventName] = [];\n        if (listeners.indexOf(callback) == -1)\n            listeners[capturing ? \"unshift\" : \"push\"](callback);\n        return callback;\n    };\nEventEmitter.off =\n    EventEmitter.removeListener =\n        EventEmitter.removeEventListener = function (eventName, callback) {\n            this._eventRegistry = this._eventRegistry || {};\n            var listeners = this._eventRegistry[eventName];\n            if (!listeners)\n                return;\n            var index = listeners.indexOf(callback);\n            if (index !== -1)\n                listeners.splice(index, 1);\n        };\nEventEmitter.removeAllListeners = function (eventName) {\n    if (!eventName)\n        this._eventRegistry = this._defaultHandlers = undefined;\n    if (this._eventRegistry)\n        this._eventRegistry[eventName] = undefined;\n    if (this._defaultHandlers)\n        this._defaultHandlers[eventName] = undefined;\n};\nexports.EventEmitter = EventEmitter;\n\n});\n\nace.define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"no use strict\";\nvar oop = require(\"./oop\");\nvar EventEmitter = require(\"./event_emitter\").EventEmitter;\nvar optionsProvider = {\n    setOptions: function (optList) {\n        Object.keys(optList).forEach(function (key) {\n            this.setOption(key, optList[key]);\n        }, this);\n    },\n    getOptions: function (optionNames) {\n        var result = {};\n        if (!optionNames) {\n            var options = this.$options;\n            optionNames = Object.keys(options).filter(function (key) {\n                return !options[key].hidden;\n            });\n        }\n        else if (!Array.isArray(optionNames)) {\n            result = optionNames;\n            optionNames = Object.keys(result);\n        }\n        optionNames.forEach(function (key) {\n            result[key] = this.getOption(key);\n        }, this);\n        return result;\n    },\n    setOption: function (name, value) {\n        if (this[\"$\" + name] === value)\n            return;\n        var opt = this.$options[name];\n        if (!opt) {\n            return warn('misspelled option \"' + name + '\"');\n        }\n        if (opt.forwardTo)\n            return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value);\n        if (!opt.handlesSet)\n            this[\"$\" + name] = value;\n        if (opt && opt.set)\n            opt.set.call(this, value);\n    },\n    getOption: function (name) {\n        var opt = this.$options[name];\n        if (!opt) {\n            return warn('misspelled option \"' + name + '\"');\n        }\n        if (opt.forwardTo)\n            return this[opt.forwardTo] && this[opt.forwardTo].getOption(name);\n        return opt && opt.get ? opt.get.call(this) : this[\"$\" + name];\n    }\n};\nfunction warn(message) {\n    if (typeof console != \"undefined\" && console.warn)\n        console.warn.apply(console, arguments);\n}\nfunction reportError(msg, data) {\n    var e = new Error(msg);\n    e.data = data;\n    if (typeof console == \"object\" && console.error)\n        console.error(e);\n    setTimeout(function () { throw e; });\n}\nvar AppConfig = function () {\n    this.$defaultOptions = {};\n};\n(function () {\n    oop.implement(this, EventEmitter);\n    this.defineOptions = function (obj, path, options) {\n        if (!obj.$options)\n            this.$defaultOptions[path] = obj.$options = {};\n        Object.keys(options).forEach(function (key) {\n            var opt = options[key];\n            if (typeof opt == \"string\")\n                opt = { forwardTo: opt };\n            opt.name || (opt.name = key);\n            obj.$options[opt.name] = opt;\n            if (\"initialValue\" in opt)\n                obj[\"$\" + opt.name] = opt.initialValue;\n        });\n        oop.implement(obj, optionsProvider);\n        return this;\n    };\n    this.resetOptions = function (obj) {\n        Object.keys(obj.$options).forEach(function (key) {\n            var opt = obj.$options[key];\n            if (\"value\" in opt)\n                obj.setOption(key, opt.value);\n        });\n    };\n    this.setDefaultValue = function (path, name, value) {\n        if (!path) {\n            for (path in this.$defaultOptions)\n                if (this.$defaultOptions[path][name])\n                    break;\n            if (!this.$defaultOptions[path][name])\n                return false;\n        }\n        var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {});\n        if (opts[name]) {\n            if (opts.forwardTo)\n                this.setDefaultValue(opts.forwardTo, name, value);\n            else\n                opts[name].value = value;\n        }\n    };\n    this.setDefaultValues = function (path, optionHash) {\n        Object.keys(optionHash).forEach(function (key) {\n            this.setDefaultValue(path, key, optionHash[key]);\n        }, this);\n    };\n    this.warn = warn;\n    this.reportError = reportError;\n}).call(AppConfig.prototype);\nexports.AppConfig = AppConfig;\n\n});\n\nace.define(\"ace/theme/textmate.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \".ace-tm .ace_gutter {\\n  background: #f0f0f0;\\n  color: #333;\\n}\\n\\n.ace-tm .ace_print-margin {\\n  width: 1px;\\n  background: #e8e8e8;\\n}\\n\\n.ace-tm .ace_fold {\\n    background-color: #6B72E6;\\n}\\n\\n.ace-tm {\\n  background-color: #FFFFFF;\\n  color: black;\\n}\\n\\n.ace-tm .ace_cursor {\\n  color: black;\\n}\\n        \\n.ace-tm .ace_invisible {\\n  color: rgb(191, 191, 191);\\n}\\n\\n.ace-tm .ace_storage,\\n.ace-tm .ace_keyword {\\n  color: blue;\\n}\\n\\n.ace-tm .ace_constant {\\n  color: rgb(197, 6, 11);\\n}\\n\\n.ace-tm .ace_constant.ace_buildin {\\n  color: rgb(88, 72, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_language {\\n  color: rgb(88, 92, 246);\\n}\\n\\n.ace-tm .ace_constant.ace_library {\\n  color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_invalid {\\n  background-color: rgba(255, 0, 0, 0.1);\\n  color: red;\\n}\\n\\n.ace-tm .ace_support.ace_function {\\n  color: rgb(60, 76, 114);\\n}\\n\\n.ace-tm .ace_support.ace_constant {\\n  color: rgb(6, 150, 14);\\n}\\n\\n.ace-tm .ace_support.ace_type,\\n.ace-tm .ace_support.ace_class {\\n  color: rgb(109, 121, 222);\\n}\\n\\n.ace-tm .ace_keyword.ace_operator {\\n  color: rgb(104, 118, 135);\\n}\\n\\n.ace-tm .ace_string {\\n  color: rgb(3, 106, 7);\\n}\\n\\n.ace-tm .ace_comment {\\n  color: rgb(76, 136, 107);\\n}\\n\\n.ace-tm .ace_comment.ace_doc {\\n  color: rgb(0, 102, 255);\\n}\\n\\n.ace-tm .ace_comment.ace_doc.ace_tag {\\n  color: rgb(128, 159, 191);\\n}\\n\\n.ace-tm .ace_constant.ace_numeric {\\n  color: rgb(0, 0, 205);\\n}\\n\\n.ace-tm .ace_variable {\\n  color: rgb(49, 132, 149);\\n}\\n\\n.ace-tm .ace_xml-pe {\\n  color: rgb(104, 104, 91);\\n}\\n\\n.ace-tm .ace_entity.ace_name.ace_function {\\n  color: #0000A2;\\n}\\n\\n\\n.ace-tm .ace_heading {\\n  color: rgb(12, 7, 255);\\n}\\n\\n.ace-tm .ace_list {\\n  color:rgb(185, 6, 144);\\n}\\n\\n.ace-tm .ace_meta.ace_tag {\\n  color:rgb(0, 22, 142);\\n}\\n\\n.ace-tm .ace_string.ace_regex {\\n  color: rgb(255, 0, 0)\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selection {\\n  background: rgb(181, 213, 255);\\n}\\n.ace-tm.ace_multiselect .ace_selection.ace_start {\\n  box-shadow: 0 0 3px 0px white;\\n}\\n.ace-tm .ace_marker-layer .ace_step {\\n  background: rgb(252, 255, 0);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_stack {\\n  background: rgb(164, 229, 101);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_bracket {\\n  margin: -1px 0 0 -1px;\\n  border: 1px solid rgb(192, 192, 192);\\n}\\n\\n.ace-tm .ace_marker-layer .ace_active-line {\\n  background: rgba(0, 0, 0, 0.07);\\n}\\n\\n.ace-tm .ace_gutter-active-line {\\n    background-color : #dcdcdc;\\n}\\n\\n.ace-tm .ace_marker-layer .ace_selected-word {\\n  background: rgb(250, 250, 255);\\n  border: 1px solid rgb(200, 200, 250);\\n}\\n\\n.ace-tm .ace_indent-guide {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\\\") right repeat-y;\\n}\\n\\n.ace-tm .ace_indent-guide-active {\\n  background: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAZSURBVHjaYvj///9/hivKyv8BAAAA//8DACLqBhbvk+/eAAAAAElFTkSuQmCC\\\") right repeat-y;\\n}\\n\";\n\n});\n\nace.define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/theme/textmate.css\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nexports.isDark = false;\nexports.cssClass = \"ace-tm\";\nexports.cssText = require(\"./textmate.css\");\nexports.$id = \"ace/theme/textmate\";\nvar dom = require(\"../lib/dom\");\ndom.importCssString(exports.cssText, exports.cssClass, false);\n\n});\n\nace.define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/dom\",\"ace/lib/app_config\",\"ace/theme/textmate\"], function(require, exports, module){\"no use strict\";\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar net = require(\"./lib/net\");\nvar dom = require(\"./lib/dom\");\nvar AppConfig = require(\"./lib/app_config\").AppConfig;\nmodule.exports = exports = new AppConfig();\nvar options = {\n    packaged: false,\n    workerPath: null,\n    modePath: null,\n    themePath: null,\n    basePath: \"\",\n    suffix: \".js\",\n    $moduleUrls: {},\n    loadWorkerFromBlob: true,\n    sharedPopups: false,\n    useStrictCSP: null\n};\nexports.get = function (key) {\n    if (!options.hasOwnProperty(key))\n        throw new Error(\"Unknown config key: \" + key);\n    return options[key];\n};\nexports.set = function (key, value) {\n    if (options.hasOwnProperty(key))\n        options[key] = value;\n    else if (this.setDefaultValue(\"\", key, value) == false)\n        throw new Error(\"Unknown config key: \" + key);\n    if (key == \"useStrictCSP\")\n        dom.useStrictCSP(value);\n};\nexports.all = function () {\n    return lang.copyObject(options);\n};\nexports.$modes = {};\nexports.moduleUrl = function (name, component) {\n    if (options.$moduleUrls[name])\n        return options.$moduleUrls[name];\n    var parts = name.split(\"/\");\n    component = component || parts[parts.length - 2] || \"\";\n    var sep = component == \"snippets\" ? \"/\" : \"-\";\n    var base = parts[parts.length - 1];\n    if (component == \"worker\" && sep == \"-\") {\n        var re = new RegExp(\"^\" + component + \"[\\\\-_]|[\\\\-_]\" + component + \"$\", \"g\");\n        base = base.replace(re, \"\");\n    }\n    if ((!base || base == component) && parts.length > 1)\n        base = parts[parts.length - 2];\n    var path = options[component + \"Path\"];\n    if (path == null) {\n        path = options.basePath;\n    }\n    else if (sep == \"/\") {\n        component = sep = \"\";\n    }\n    if (path && path.slice(-1) != \"/\")\n        path += \"/\";\n    return path + component + sep + base + this.get(\"suffix\");\n};\nexports.setModuleUrl = function (name, subst) {\n    return options.$moduleUrls[name] = subst;\n};\nvar loader = function (moduleName, cb) {\n    if (moduleName == \"ace/theme/textmate\")\n        return cb(null, require(\"./theme/textmate\"));\n    return console.error(\"loader is not configured\");\n};\nexports.setLoader = function (cb) {\n    loader = cb;\n};\nexports.$loading = {};\nexports.loadModule = function (moduleName, onLoad) {\n    var module, moduleType;\n    if (Array.isArray(moduleName)) {\n        moduleType = moduleName[0];\n        moduleName = moduleName[1];\n    }\n    try {\n        module = require(moduleName);\n    }\n    catch (e) { }\n    if (module && !exports.$loading[moduleName])\n        return onLoad && onLoad(module);\n    if (!exports.$loading[moduleName])\n        exports.$loading[moduleName] = [];\n    exports.$loading[moduleName].push(onLoad);\n    if (exports.$loading[moduleName].length > 1)\n        return;\n    var afterLoad = function () {\n        loader(moduleName, function (err, module) {\n            exports._emit(\"load.module\", { name: moduleName, module: module });\n            var listeners = exports.$loading[moduleName];\n            exports.$loading[moduleName] = null;\n            listeners.forEach(function (onLoad) {\n                onLoad && onLoad(module);\n            });\n        });\n    };\n    if (!exports.get(\"packaged\"))\n        return afterLoad();\n    net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad);\n    reportErrorIfPathIsNotConfigured();\n};\nvar reportErrorIfPathIsNotConfigured = function () {\n    if (!options.basePath && !options.workerPath\n        && !options.modePath && !options.themePath\n        && !Object.keys(options.$moduleUrls).length) {\n        console.error(\"Unable to infer path to ace from script src,\", \"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\", \"or with webpack use ace/webpack-resolver\");\n        reportErrorIfPathIsNotConfigured = function () { };\n    }\n};\nexports.version = \"1.12.3\";\n\n});\n\nace.define(\"ace/loader_build\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nrequire(\"./lib/fixoldbrowsers\");\nvar config = require(\"./config\");\nconfig.setLoader(function(moduleName, cb) {\n    require([moduleName], function(module) {\n        cb(null, module);\n    });\n});\n\nvar global = (function() {\n    return this || typeof window != \"undefined\" && window;\n})();\n\nmodule.exports = function(ace) {\n    config.init = init;\n    ace.require = require;\n\n    if (typeof define === \"function\")\n        ace.define = define;\n};\ninit(true);function init(packaged) {\n\n    if (!global || !global.document)\n        return;\n    \n    config.set(\"packaged\", packaged || require.packaged || module.packaged || (global.define && define.packaged));\n\n    var scriptOptions = {};\n    var scriptUrl = \"\";\n    var currentScript = (document.currentScript || document._currentScript ); // native or polyfill\n    var currentDocument = currentScript && currentScript.ownerDocument || document;\n    \n    var scripts = currentDocument.getElementsByTagName(\"script\");\n    for (var i=0; i 1) {\n            clicks++;\n            if (clicks > 4)\n                clicks = 1;\n        }\n        else {\n            clicks = 1;\n        }\n        if (useragent.isIE) {\n            var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5;\n            if (!timer || isNewClick)\n                clicks = 1;\n            if (timer)\n                clearTimeout(timer);\n            timer = setTimeout(function () { timer = null; }, timeouts[clicks - 1] || 600);\n            if (clicks == 1) {\n                startX = e.clientX;\n                startY = e.clientY;\n            }\n        }\n        e._clicks = clicks;\n        eventHandler[callbackName](\"mousedown\", e);\n        if (clicks > 4)\n            clicks = 0;\n        else if (clicks > 1)\n            return eventHandler[callbackName](eventNames[clicks], e);\n    }\n    if (!Array.isArray(elements))\n        elements = [elements];\n    elements.forEach(function (el) {\n        addListener(el, \"mousedown\", onMousedown, destroyer);\n    });\n};\nvar getModifierHash = function (e) {\n    return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0);\n};\nexports.getModifierString = function (e) {\n    return keys.KEY_MODS[getModifierHash(e)];\n};\nfunction normalizeCommandKeys(callback, e, keyCode) {\n    var hashId = getModifierHash(e);\n    if (!useragent.isMac && pressedKeys) {\n        if (e.getModifierState && (e.getModifierState(\"OS\") || e.getModifierState(\"Win\")))\n            hashId |= 8;\n        if (pressedKeys.altGr) {\n            if ((3 & hashId) != 3)\n                pressedKeys.altGr = 0;\n            else\n                return;\n        }\n        if (keyCode === 18 || keyCode === 17) {\n            var location = \"location\" in e ? e.location : e.keyLocation;\n            if (keyCode === 17 && location === 1) {\n                if (pressedKeys[keyCode] == 1)\n                    ts = e.timeStamp;\n            }\n            else if (keyCode === 18 && hashId === 3 && location === 2) {\n                var dt = e.timeStamp - ts;\n                if (dt < 50)\n                    pressedKeys.altGr = true;\n            }\n        }\n    }\n    if (keyCode in keys.MODIFIER_KEYS) {\n        keyCode = -1;\n    }\n    if (!hashId && keyCode === 13) {\n        var location = \"location\" in e ? e.location : e.keyLocation;\n        if (location === 3) {\n            callback(e, hashId, -keyCode);\n            if (e.defaultPrevented)\n                return;\n        }\n    }\n    if (useragent.isChromeOS && hashId & 8) {\n        callback(e, hashId, keyCode);\n        if (e.defaultPrevented)\n            return;\n        else\n            hashId &= ~8;\n    }\n    if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) {\n        return false;\n    }\n    return callback(e, hashId, keyCode);\n}\nexports.addCommandKeyListener = function (el, callback, destroyer) {\n    if (useragent.isOldGecko || (useragent.isOpera && !(\"KeyboardEvent\" in window))) {\n        var lastKeyDownKeyCode = null;\n        addListener(el, \"keydown\", function (e) {\n            lastKeyDownKeyCode = e.keyCode;\n        }, destroyer);\n        addListener(el, \"keypress\", function (e) {\n            return normalizeCommandKeys(callback, e, lastKeyDownKeyCode);\n        }, destroyer);\n    }\n    else {\n        var lastDefaultPrevented = null;\n        addListener(el, \"keydown\", function (e) {\n            pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1;\n            var result = normalizeCommandKeys(callback, e, e.keyCode);\n            lastDefaultPrevented = e.defaultPrevented;\n            return result;\n        }, destroyer);\n        addListener(el, \"keypress\", function (e) {\n            if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) {\n                exports.stopEvent(e);\n                lastDefaultPrevented = null;\n            }\n        }, destroyer);\n        addListener(el, \"keyup\", function (e) {\n            pressedKeys[e.keyCode] = null;\n        }, destroyer);\n        if (!pressedKeys) {\n            resetPressedKeys();\n            addListener(window, \"focus\", resetPressedKeys);\n        }\n    }\n};\nfunction resetPressedKeys() {\n    pressedKeys = Object.create(null);\n}\nif (typeof window == \"object\" && window.postMessage && !useragent.isOldIE) {\n    var postMessageId = 1;\n    exports.nextTick = function (callback, win) {\n        win = win || window;\n        var messageName = \"zero-timeout-message-\" + (postMessageId++);\n        var listener = function (e) {\n            if (e.data == messageName) {\n                exports.stopPropagation(e);\n                removeListener(win, \"message\", listener);\n                callback();\n            }\n        };\n        addListener(win, \"message\", listener);\n        win.postMessage(messageName, \"*\");\n    };\n}\nexports.$idleBlocked = false;\nexports.onIdle = function (cb, timeout) {\n    return setTimeout(function handler() {\n        if (!exports.$idleBlocked) {\n            cb();\n        }\n        else {\n            setTimeout(handler, 100);\n        }\n    }, timeout);\n};\nexports.$idleBlockId = null;\nexports.blockIdle = function (delay) {\n    if (exports.$idleBlockId)\n        clearTimeout(exports.$idleBlockId);\n    exports.$idleBlocked = true;\n    exports.$idleBlockId = setTimeout(function () {\n        exports.$idleBlocked = false;\n    }, delay || 100);\n};\nexports.nextFrame = typeof window == \"object\" && (window.requestAnimationFrame\n    || window.mozRequestAnimationFrame\n    || window.webkitRequestAnimationFrame\n    || window.msRequestAnimationFrame\n    || window.oRequestAnimationFrame);\nif (exports.nextFrame)\n    exports.nextFrame = exports.nextFrame.bind(window);\nelse\n    exports.nextFrame = function (callback) {\n        setTimeout(callback, 17);\n    };\n\n});\n\nace.define(\"ace/range\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nvar Range = function (startRow, startColumn, endRow, endColumn) {\n    this.start = {\n        row: startRow,\n        column: startColumn\n    };\n    this.end = {\n        row: endRow,\n        column: endColumn\n    };\n};\n(function () {\n    this.isEqual = function (range) {\n        return this.start.row === range.start.row &&\n            this.end.row === range.end.row &&\n            this.start.column === range.start.column &&\n            this.end.column === range.end.column;\n    };\n    this.toString = function () {\n        return (\"Range: [\" + this.start.row + \"/\" + this.start.column +\n            \"] -> [\" + this.end.row + \"/\" + this.end.column + \"]\");\n    };\n    this.contains = function (row, column) {\n        return this.compare(row, column) == 0;\n    };\n    this.compareRange = function (range) {\n        var cmp, end = range.end, start = range.start;\n        cmp = this.compare(end.row, end.column);\n        if (cmp == 1) {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == 1) {\n                return 2;\n            }\n            else if (cmp == 0) {\n                return 1;\n            }\n            else {\n                return 0;\n            }\n        }\n        else if (cmp == -1) {\n            return -2;\n        }\n        else {\n            cmp = this.compare(start.row, start.column);\n            if (cmp == -1) {\n                return -1;\n            }\n            else if (cmp == 1) {\n                return 42;\n            }\n            else {\n                return 0;\n            }\n        }\n    };\n    this.comparePoint = function (p) {\n        return this.compare(p.row, p.column);\n    };\n    this.containsRange = function (range) {\n        return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0;\n    };\n    this.intersects = function (range) {\n        var cmp = this.compareRange(range);\n        return (cmp == -1 || cmp == 0 || cmp == 1);\n    };\n    this.isEnd = function (row, column) {\n        return this.end.row == row && this.end.column == column;\n    };\n    this.isStart = function (row, column) {\n        return this.start.row == row && this.start.column == column;\n    };\n    this.setStart = function (row, column) {\n        if (typeof row == \"object\") {\n            this.start.column = row.column;\n            this.start.row = row.row;\n        }\n        else {\n            this.start.row = row;\n            this.start.column = column;\n        }\n    };\n    this.setEnd = function (row, column) {\n        if (typeof row == \"object\") {\n            this.end.column = row.column;\n            this.end.row = row.row;\n        }\n        else {\n            this.end.row = row;\n            this.end.column = column;\n        }\n    };\n    this.inside = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column) || this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideStart = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isEnd(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.insideEnd = function (row, column) {\n        if (this.compare(row, column) == 0) {\n            if (this.isStart(row, column)) {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        return false;\n    };\n    this.compare = function (row, column) {\n        if (!this.isMultiLine()) {\n            if (row === this.start.row) {\n                return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0);\n            }\n        }\n        if (row < this.start.row)\n            return -1;\n        if (row > this.end.row)\n            return 1;\n        if (this.start.row === row)\n            return column >= this.start.column ? 0 : -1;\n        if (this.end.row === row)\n            return column <= this.end.column ? 0 : 1;\n        return 0;\n    };\n    this.compareStart = function (row, column) {\n        if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareEnd = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.compareInside = function (row, column) {\n        if (this.end.row == row && this.end.column == column) {\n            return 1;\n        }\n        else if (this.start.row == row && this.start.column == column) {\n            return -1;\n        }\n        else {\n            return this.compare(row, column);\n        }\n    };\n    this.clipRows = function (firstRow, lastRow) {\n        if (this.end.row > lastRow)\n            var end = { row: lastRow + 1, column: 0 };\n        else if (this.end.row < firstRow)\n            var end = { row: firstRow, column: 0 };\n        if (this.start.row > lastRow)\n            var start = { row: lastRow + 1, column: 0 };\n        else if (this.start.row < firstRow)\n            var start = { row: firstRow, column: 0 };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.extend = function (row, column) {\n        var cmp = this.compare(row, column);\n        if (cmp == 0)\n            return this;\n        else if (cmp == -1)\n            var start = { row: row, column: column };\n        else\n            var end = { row: row, column: column };\n        return Range.fromPoints(start || this.start, end || this.end);\n    };\n    this.isEmpty = function () {\n        return (this.start.row === this.end.row && this.start.column === this.end.column);\n    };\n    this.isMultiLine = function () {\n        return (this.start.row !== this.end.row);\n    };\n    this.clone = function () {\n        return Range.fromPoints(this.start, this.end);\n    };\n    this.collapseRows = function () {\n        if (this.end.column == 0)\n            return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row - 1), 0);\n        else\n            return new Range(this.start.row, 0, this.end.row, 0);\n    };\n    this.toScreenRange = function (session) {\n        var screenPosStart = session.documentToScreenPosition(this.start);\n        var screenPosEnd = session.documentToScreenPosition(this.end);\n        return new Range(screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column);\n    };\n    this.moveBy = function (row, column) {\n        this.start.row += row;\n        this.start.column += column;\n        this.end.row += row;\n        this.end.column += column;\n    };\n}).call(Range.prototype);\nRange.fromPoints = function (start, end) {\n    return new Range(start.row, start.column, end.row, end.column);\n};\nRange.comparePoints = comparePoints;\nRange.comparePoints = function (p1, p2) {\n    return p1.row - p2.row || p1.column - p2.column;\n};\nexports.Range = Range;\n\n});\n\nace.define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar $cancelT;\nmodule.exports = {\n    lineMode: false,\n    pasteCancelled: function () {\n        if ($cancelT && $cancelT > Date.now() - 50)\n            return true;\n        return $cancelT = false;\n    },\n    cancel: function () {\n        $cancelT = Date.now();\n    }\n};\n\n});\n\nace.define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/clipboard\",\"ace/lib/keys\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar clipboard = require(\"../clipboard\");\nvar BROKEN_SETDATA = useragent.isChrome < 18;\nvar USE_IE_MIME_TYPE = useragent.isIE;\nvar HAS_FOCUS_ARGS = useragent.isChrome > 63;\nvar MAX_LINE_LENGTH = 400;\nvar KEYS = require(\"../lib/keys\");\nvar MODS = KEYS.KEY_MODS;\nvar isIOS = useragent.isIOS;\nvar valueResetRegex = isIOS ? /\\s/ : /\\n/;\nvar isMobile = useragent.isMobile;\nvar TextInput = function (parentNode, host) {\n    var text = dom.createElement(\"textarea\");\n    text.className = \"ace_text-input\";\n    text.setAttribute(\"wrap\", \"off\");\n    text.setAttribute(\"autocorrect\", \"off\");\n    text.setAttribute(\"autocapitalize\", \"off\");\n    text.setAttribute(\"spellcheck\", false);\n    text.style.opacity = \"0\";\n    parentNode.insertBefore(text, parentNode.firstChild);\n    var copied = false;\n    var pasted = false;\n    var inComposition = false;\n    var sendingText = false;\n    var tempStyle = '';\n    if (!isMobile)\n        text.style.fontSize = \"1px\";\n    var commandMode = false;\n    var ignoreFocusEvents = false;\n    var lastValue = \"\";\n    var lastSelectionStart = 0;\n    var lastSelectionEnd = 0;\n    var lastRestoreEnd = 0;\n    try {\n        var isFocused = document.activeElement === text;\n    }\n    catch (e) { }\n    event.addListener(text, \"blur\", function (e) {\n        if (ignoreFocusEvents)\n            return;\n        host.onBlur(e);\n        isFocused = false;\n    }, host);\n    event.addListener(text, \"focus\", function (e) {\n        if (ignoreFocusEvents)\n            return;\n        isFocused = true;\n        if (useragent.isEdge) {\n            try {\n                if (!document.hasFocus())\n                    return;\n            }\n            catch (e) { }\n        }\n        host.onFocus(e);\n        if (useragent.isEdge)\n            setTimeout(resetSelection);\n        else\n            resetSelection();\n    }, host);\n    this.$focusScroll = false;\n    this.focus = function () {\n        if (tempStyle || HAS_FOCUS_ARGS || this.$focusScroll == \"browser\")\n            return text.focus({ preventScroll: true });\n        var top = text.style.top;\n        text.style.position = \"fixed\";\n        text.style.top = \"0px\";\n        try {\n            var isTransformed = text.getBoundingClientRect().top != 0;\n        }\n        catch (e) {\n            return;\n        }\n        var ancestors = [];\n        if (isTransformed) {\n            var t = text.parentElement;\n            while (t && t.nodeType == 1) {\n                ancestors.push(t);\n                t.setAttribute(\"ace_nocontext\", true);\n                if (!t.parentElement && t.getRootNode)\n                    t = t.getRootNode().host;\n                else\n                    t = t.parentElement;\n            }\n        }\n        text.focus({ preventScroll: true });\n        if (isTransformed) {\n            ancestors.forEach(function (p) {\n                p.removeAttribute(\"ace_nocontext\");\n            });\n        }\n        setTimeout(function () {\n            text.style.position = \"\";\n            if (text.style.top == \"0px\")\n                text.style.top = top;\n        }, 0);\n    };\n    this.blur = function () {\n        text.blur();\n    };\n    this.isFocused = function () {\n        return isFocused;\n    };\n    host.on(\"beforeEndOperation\", function () {\n        var curOp = host.curOp;\n        var commandName = curOp && curOp.command && curOp.command.name;\n        if (commandName == \"insertstring\")\n            return;\n        var isUserAction = commandName && (curOp.docChanged || curOp.selectionChanged);\n        if (inComposition && isUserAction) {\n            lastValue = text.value = \"\";\n            onCompositionEnd();\n        }\n        resetSelection();\n    });\n    var resetSelection = isIOS\n        ? function (value) {\n            if (!isFocused || (copied && !value) || sendingText)\n                return;\n            if (!value)\n                value = \"\";\n            var newValue = \"\\n ab\" + value + \"cde fg\\n\";\n            if (newValue != text.value)\n                text.value = lastValue = newValue;\n            var selectionStart = 4;\n            var selectionEnd = 4 + (value.length || (host.selection.isEmpty() ? 0 : 1));\n            if (lastSelectionStart != selectionStart || lastSelectionEnd != selectionEnd) {\n                text.setSelectionRange(selectionStart, selectionEnd);\n            }\n            lastSelectionStart = selectionStart;\n            lastSelectionEnd = selectionEnd;\n        }\n        : function () {\n            if (inComposition || sendingText)\n                return;\n            if (!isFocused && !afterContextMenu)\n                return;\n            inComposition = true;\n            var selectionStart = 0;\n            var selectionEnd = 0;\n            var line = \"\";\n            if (host.session) {\n                var selection = host.selection;\n                var range = selection.getRange();\n                var row = selection.cursor.row;\n                selectionStart = range.start.column;\n                selectionEnd = range.end.column;\n                line = host.session.getLine(row);\n                if (range.start.row != row) {\n                    var prevLine = host.session.getLine(row - 1);\n                    selectionStart = range.start.row < row - 1 ? 0 : selectionStart;\n                    selectionEnd += prevLine.length + 1;\n                    line = prevLine + \"\\n\" + line;\n                }\n                else if (range.end.row != row) {\n                    var nextLine = host.session.getLine(row + 1);\n                    selectionEnd = range.end.row > row + 1 ? nextLine.length : selectionEnd;\n                    selectionEnd += line.length + 1;\n                    line = line + \"\\n\" + nextLine;\n                }\n                else if (isMobile && row > 0) {\n                    line = \"\\n\" + line;\n                    selectionEnd += 1;\n                    selectionStart += 1;\n                }\n                if (line.length > MAX_LINE_LENGTH) {\n                    if (selectionStart < MAX_LINE_LENGTH && selectionEnd < MAX_LINE_LENGTH) {\n                        line = line.slice(0, MAX_LINE_LENGTH);\n                    }\n                    else {\n                        line = \"\\n\";\n                        if (selectionStart == selectionEnd) {\n                            selectionStart = selectionEnd = 0;\n                        }\n                        else {\n                            selectionStart = 0;\n                            selectionEnd = 1;\n                        }\n                    }\n                }\n            }\n            var newValue = line + \"\\n\\n\";\n            if (newValue != lastValue) {\n                text.value = lastValue = newValue;\n                lastSelectionStart = lastSelectionEnd = newValue.length;\n            }\n            if (afterContextMenu) {\n                lastSelectionStart = text.selectionStart;\n                lastSelectionEnd = text.selectionEnd;\n            }\n            if (lastSelectionEnd != selectionEnd\n                || lastSelectionStart != selectionStart\n                || text.selectionEnd != lastSelectionEnd // on ie edge selectionEnd changes silently after the initialization\n            ) {\n                try {\n                    text.setSelectionRange(selectionStart, selectionEnd);\n                    lastSelectionStart = selectionStart;\n                    lastSelectionEnd = selectionEnd;\n                }\n                catch (e) { }\n            }\n            inComposition = false;\n        };\n    this.resetSelection = resetSelection;\n    if (isFocused)\n        host.onFocus();\n    var isAllSelected = function (text) {\n        return text.selectionStart === 0 && text.selectionEnd >= lastValue.length\n            && text.value === lastValue && lastValue\n            && text.selectionEnd !== lastSelectionEnd;\n    };\n    var onSelect = function (e) {\n        if (inComposition)\n            return;\n        if (copied) {\n            copied = false;\n        }\n        else if (isAllSelected(text)) {\n            host.selectAll();\n            resetSelection();\n        }\n        else if (isMobile && text.selectionStart != lastSelectionStart) {\n            resetSelection();\n        }\n    };\n    var inputHandler = null;\n    this.setInputHandler = function (cb) { inputHandler = cb; };\n    this.getInputHandler = function () { return inputHandler; };\n    var afterContextMenu = false;\n    var sendText = function (value, fromInput) {\n        if (afterContextMenu)\n            afterContextMenu = false;\n        if (pasted) {\n            resetSelection();\n            if (value)\n                host.onPaste(value);\n            pasted = false;\n            return \"\";\n        }\n        else {\n            var selectionStart = text.selectionStart;\n            var selectionEnd = text.selectionEnd;\n            var extendLeft = lastSelectionStart;\n            var extendRight = lastValue.length - lastSelectionEnd;\n            var inserted = value;\n            var restoreStart = value.length - selectionStart;\n            var restoreEnd = value.length - selectionEnd;\n            var i = 0;\n            while (extendLeft > 0 && lastValue[i] == value[i]) {\n                i++;\n                extendLeft--;\n            }\n            inserted = inserted.slice(i);\n            i = 1;\n            while (extendRight > 0 && lastValue.length - i > lastSelectionStart - 1 && lastValue[lastValue.length - i] == value[value.length - i]) {\n                i++;\n                extendRight--;\n            }\n            restoreStart -= i - 1;\n            restoreEnd -= i - 1;\n            var endIndex = inserted.length - i + 1;\n            if (endIndex < 0) {\n                extendLeft = -endIndex;\n                endIndex = 0;\n            }\n            inserted = inserted.slice(0, endIndex);\n            if (!fromInput && !inserted && !restoreStart && !extendLeft && !extendRight && !restoreEnd)\n                return \"\";\n            sendingText = true;\n            var shouldReset = false;\n            if (useragent.isAndroid && inserted == \". \") {\n                inserted = \"  \";\n                shouldReset = true;\n            }\n            if (inserted && !extendLeft && !extendRight && !restoreStart && !restoreEnd || commandMode) {\n                host.onTextInput(inserted);\n            }\n            else {\n                host.onTextInput(inserted, {\n                    extendLeft: extendLeft,\n                    extendRight: extendRight,\n                    restoreStart: restoreStart,\n                    restoreEnd: restoreEnd\n                });\n            }\n            sendingText = false;\n            lastValue = value;\n            lastSelectionStart = selectionStart;\n            lastSelectionEnd = selectionEnd;\n            lastRestoreEnd = restoreEnd;\n            return shouldReset ? \"\\n\" : inserted;\n        }\n    };\n    var onInput = function (e) {\n        if (inComposition)\n            return onCompositionUpdate();\n        if (e && e.inputType) {\n            if (e.inputType == \"historyUndo\")\n                return host.execCommand(\"undo\");\n            if (e.inputType == \"historyRedo\")\n                return host.execCommand(\"redo\");\n        }\n        var data = text.value;\n        var inserted = sendText(data, true);\n        if (data.length > MAX_LINE_LENGTH + 100\n            || valueResetRegex.test(inserted)\n            || isMobile && lastSelectionStart < 1 && lastSelectionStart == lastSelectionEnd) {\n            resetSelection();\n        }\n    };\n    var handleClipboardData = function (e, data, forceIEMime) {\n        var clipboardData = e.clipboardData || window.clipboardData;\n        if (!clipboardData || BROKEN_SETDATA)\n            return;\n        var mime = USE_IE_MIME_TYPE || forceIEMime ? \"Text\" : \"text/plain\";\n        try {\n            if (data) {\n                return clipboardData.setData(mime, data) !== false;\n            }\n            else {\n                return clipboardData.getData(mime);\n            }\n        }\n        catch (e) {\n            if (!forceIEMime)\n                return handleClipboardData(e, data, true);\n        }\n    };\n    var doCopy = function (e, isCut) {\n        var data = host.getCopyText();\n        if (!data)\n            return event.preventDefault(e);\n        if (handleClipboardData(e, data)) {\n            if (isIOS) {\n                resetSelection(data);\n                copied = data;\n                setTimeout(function () {\n                    copied = false;\n                }, 10);\n            }\n            isCut ? host.onCut() : host.onCopy();\n            event.preventDefault(e);\n        }\n        else {\n            copied = true;\n            text.value = data;\n            text.select();\n            setTimeout(function () {\n                copied = false;\n                resetSelection();\n                isCut ? host.onCut() : host.onCopy();\n            });\n        }\n    };\n    var onCut = function (e) {\n        doCopy(e, true);\n    };\n    var onCopy = function (e) {\n        doCopy(e, false);\n    };\n    var onPaste = function (e) {\n        var data = handleClipboardData(e);\n        if (clipboard.pasteCancelled())\n            return;\n        if (typeof data == \"string\") {\n            if (data)\n                host.onPaste(data, e);\n            if (useragent.isIE)\n                setTimeout(resetSelection);\n            event.preventDefault(e);\n        }\n        else {\n            text.value = \"\";\n            pasted = true;\n        }\n    };\n    event.addCommandKeyListener(text, host.onCommandKey.bind(host), host);\n    event.addListener(text, \"select\", onSelect, host);\n    event.addListener(text, \"input\", onInput, host);\n    event.addListener(text, \"cut\", onCut, host);\n    event.addListener(text, \"copy\", onCopy, host);\n    event.addListener(text, \"paste\", onPaste, host);\n    if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)) {\n        event.addListener(parentNode, \"keydown\", function (e) {\n            if ((useragent.isMac && !e.metaKey) || !e.ctrlKey)\n                return;\n            switch (e.keyCode) {\n                case 67:\n                    onCopy(e);\n                    break;\n                case 86:\n                    onPaste(e);\n                    break;\n                case 88:\n                    onCut(e);\n                    break;\n            }\n        }, host);\n    }\n    var onCompositionStart = function (e) {\n        if (inComposition || !host.onCompositionStart || host.$readOnly)\n            return;\n        inComposition = {};\n        if (commandMode)\n            return;\n        if (e.data)\n            inComposition.useTextareaForIME = false;\n        setTimeout(onCompositionUpdate, 0);\n        host._signal(\"compositionStart\");\n        host.on(\"mousedown\", cancelComposition);\n        var range = host.getSelectionRange();\n        range.end.row = range.start.row;\n        range.end.column = range.start.column;\n        inComposition.markerRange = range;\n        inComposition.selectionStart = lastSelectionStart;\n        host.onCompositionStart(inComposition);\n        if (inComposition.useTextareaForIME) {\n            lastValue = text.value = \"\";\n            lastSelectionStart = 0;\n            lastSelectionEnd = 0;\n        }\n        else {\n            if (text.msGetInputContext)\n                inComposition.context = text.msGetInputContext();\n            if (text.getInputContext)\n                inComposition.context = text.getInputContext();\n        }\n    };\n    var onCompositionUpdate = function () {\n        if (!inComposition || !host.onCompositionUpdate || host.$readOnly)\n            return;\n        if (commandMode)\n            return cancelComposition();\n        if (inComposition.useTextareaForIME) {\n            host.onCompositionUpdate(text.value);\n        }\n        else {\n            var data = text.value;\n            sendText(data);\n            if (inComposition.markerRange) {\n                if (inComposition.context) {\n                    inComposition.markerRange.start.column = inComposition.selectionStart\n                        = inComposition.context.compositionStartOffset;\n                }\n                inComposition.markerRange.end.column = inComposition.markerRange.start.column\n                    + lastSelectionEnd - inComposition.selectionStart + lastRestoreEnd;\n            }\n        }\n    };\n    var onCompositionEnd = function (e) {\n        if (!host.onCompositionEnd || host.$readOnly)\n            return;\n        inComposition = false;\n        host.onCompositionEnd();\n        host.off(\"mousedown\", cancelComposition);\n        if (e)\n            onInput();\n    };\n    function cancelComposition() {\n        ignoreFocusEvents = true;\n        text.blur();\n        text.focus();\n        ignoreFocusEvents = false;\n    }\n    var syncComposition = lang.delayedCall(onCompositionUpdate, 50).schedule.bind(null, null);\n    function onKeyup(e) {\n        if (e.keyCode == 27 && text.value.length < text.selectionStart) {\n            if (!inComposition)\n                lastValue = text.value;\n            lastSelectionStart = lastSelectionEnd = -1;\n            resetSelection();\n        }\n        syncComposition();\n    }\n    event.addListener(text, \"compositionstart\", onCompositionStart, host);\n    event.addListener(text, \"compositionupdate\", onCompositionUpdate, host);\n    event.addListener(text, \"keyup\", onKeyup, host);\n    event.addListener(text, \"keydown\", syncComposition, host);\n    event.addListener(text, \"compositionend\", onCompositionEnd, host);\n    this.getElement = function () {\n        return text;\n    };\n    this.setCommandMode = function (value) {\n        commandMode = value;\n        text.readOnly = false;\n    };\n    this.setReadOnly = function (readOnly) {\n        if (!commandMode)\n            text.readOnly = readOnly;\n    };\n    this.setCopyWithEmptySelection = function (value) {\n    };\n    this.onContextMenu = function (e) {\n        afterContextMenu = true;\n        resetSelection();\n        host._emit(\"nativecontextmenu\", { target: host, domEvent: e });\n        this.moveToMouse(e, true);\n    };\n    this.moveToMouse = function (e, bringToFront) {\n        if (!tempStyle)\n            tempStyle = text.style.cssText;\n        text.style.cssText = (bringToFront ? \"z-index:100000;\" : \"\")\n            + (useragent.isIE ? \"opacity:0.1;\" : \"\")\n            + \"text-indent: -\" + (lastSelectionStart + lastSelectionEnd) * host.renderer.characterWidth * 0.5 + \"px;\";\n        var rect = host.container.getBoundingClientRect();\n        var style = dom.computedStyle(host.container);\n        var top = rect.top + (parseInt(style.borderTopWidth) || 0);\n        var left = rect.left + (parseInt(rect.borderLeftWidth) || 0);\n        var maxTop = rect.bottom - top - text.clientHeight - 2;\n        var move = function (e) {\n            dom.translate(text, e.clientX - left - 2, Math.min(e.clientY - top - 2, maxTop));\n        };\n        move(e);\n        if (e.type != \"mousedown\")\n            return;\n        host.renderer.$isMousePressed = true;\n        clearTimeout(closeTimeout);\n        if (useragent.isWin)\n            event.capture(host.container, move, onContextMenuClose);\n    };\n    this.onContextMenuClose = onContextMenuClose;\n    var closeTimeout;\n    function onContextMenuClose() {\n        clearTimeout(closeTimeout);\n        closeTimeout = setTimeout(function () {\n            if (tempStyle) {\n                text.style.cssText = tempStyle;\n                tempStyle = '';\n            }\n            host.renderer.$isMousePressed = false;\n            if (host.renderer.$keepTextAreaAtCursor)\n                host.renderer.$moveTextAreaToCursor();\n        }, 0);\n    }\n    var onContextMenu = function (e) {\n        host.textInput.onContextMenu(e);\n        onContextMenuClose();\n    };\n    event.addListener(text, \"mouseup\", onContextMenu, host);\n    event.addListener(text, \"mousedown\", function (e) {\n        e.preventDefault();\n        onContextMenuClose();\n    }, host);\n    event.addListener(host.renderer.scroller, \"contextmenu\", onContextMenu, host);\n    event.addListener(text, \"contextmenu\", onContextMenu, host);\n    if (isIOS)\n        addIosSelectionHandler(parentNode, host, text);\n    function addIosSelectionHandler(parentNode, host, text) {\n        var typingResetTimeout = null;\n        var typing = false;\n        text.addEventListener(\"keydown\", function (e) {\n            if (typingResetTimeout)\n                clearTimeout(typingResetTimeout);\n            typing = true;\n        }, true);\n        text.addEventListener(\"keyup\", function (e) {\n            typingResetTimeout = setTimeout(function () {\n                typing = false;\n            }, 100);\n        }, true);\n        var detectArrowKeys = function (e) {\n            if (document.activeElement !== text)\n                return;\n            if (typing || inComposition || host.$mouseHandler.isMousePressed)\n                return;\n            if (copied) {\n                return;\n            }\n            var selectionStart = text.selectionStart;\n            var selectionEnd = text.selectionEnd;\n            var key = null;\n            var modifier = 0;\n            if (selectionStart == 0) {\n                key = KEYS.up;\n            }\n            else if (selectionStart == 1) {\n                key = KEYS.home;\n            }\n            else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd] == \"\\n\") {\n                key = KEYS.end;\n            }\n            else if (selectionStart < lastSelectionStart && lastValue[selectionStart - 1] == \" \") {\n                key = KEYS.left;\n                modifier = MODS.option;\n            }\n            else if (selectionStart < lastSelectionStart\n                || (selectionStart == lastSelectionStart\n                    && lastSelectionEnd != lastSelectionStart\n                    && selectionStart == selectionEnd)) {\n                key = KEYS.left;\n            }\n            else if (selectionEnd > lastSelectionEnd && lastValue.slice(0, selectionEnd).split(\"\\n\").length > 2) {\n                key = KEYS.down;\n            }\n            else if (selectionEnd > lastSelectionEnd && lastValue[selectionEnd - 1] == \" \") {\n                key = KEYS.right;\n                modifier = MODS.option;\n            }\n            else if (selectionEnd > lastSelectionEnd\n                || (selectionEnd == lastSelectionEnd\n                    && lastSelectionEnd != lastSelectionStart\n                    && selectionStart == selectionEnd)) {\n                key = KEYS.right;\n            }\n            if (selectionStart !== selectionEnd)\n                modifier |= MODS.shift;\n            if (key) {\n                var result = host.onCommandKey({}, modifier, key);\n                if (!result && host.commands) {\n                    key = KEYS.keyCodeToString(key);\n                    var command = host.commands.findKeyCommand(modifier, key);\n                    if (command)\n                        host.execCommand(command);\n                }\n                lastSelectionStart = selectionStart;\n                lastSelectionEnd = selectionEnd;\n                resetSelection(\"\");\n            }\n        };\n        document.addEventListener(\"selectionchange\", detectArrowKeys);\n        host.on(\"destroy\", function () {\n            document.removeEventListener(\"selectionchange\", detectArrowKeys);\n        });\n    }\n    this.destroy = function () {\n        if (text.parentElement)\n            text.parentElement.removeChild(text);\n    };\n};\nexports.TextInput = TextInput;\nexports.$setUserAgentForTests = function (_isMobile, _isIOS) {\n    isMobile = _isMobile;\n    isIOS = _isIOS;\n};\n\n});\n\nace.define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar useragent = require(\"../lib/useragent\");\nvar DRAG_OFFSET = 0; // pixels\nvar SCROLL_COOLDOWN_T = 550; // milliseconds\nfunction DefaultHandlers(mouseHandler) {\n    mouseHandler.$clickSelection = null;\n    var editor = mouseHandler.editor;\n    editor.setDefaultHandler(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n    editor.setDefaultHandler(\"dblclick\", this.onDoubleClick.bind(mouseHandler));\n    editor.setDefaultHandler(\"tripleclick\", this.onTripleClick.bind(mouseHandler));\n    editor.setDefaultHandler(\"quadclick\", this.onQuadClick.bind(mouseHandler));\n    editor.setDefaultHandler(\"mousewheel\", this.onMouseWheel.bind(mouseHandler));\n    var exports = [\"select\", \"startSelect\", \"selectEnd\", \"selectAllEnd\", \"selectByWordsEnd\",\n        \"selectByLinesEnd\", \"dragWait\", \"dragWaitEnd\", \"focusWait\"];\n    exports.forEach(function (x) {\n        mouseHandler[x] = this[x];\n    }, this);\n    mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, \"getLineRange\");\n    mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, \"getWordRange\");\n}\n(function () {\n    this.onMouseDown = function (ev) {\n        var inSelection = ev.inSelection();\n        var pos = ev.getDocumentPosition();\n        this.mousedownEvent = ev;\n        var editor = this.editor;\n        var button = ev.getButton();\n        if (button !== 0) {\n            var selectionRange = editor.getSelectionRange();\n            var selectionEmpty = selectionRange.isEmpty();\n            if (selectionEmpty || button == 1)\n                editor.selection.moveToPosition(pos);\n            if (button == 2) {\n                editor.textInput.onContextMenu(ev.domEvent);\n                if (!useragent.isMozilla)\n                    ev.preventDefault();\n            }\n            return;\n        }\n        this.mousedownEvent.time = Date.now();\n        if (inSelection && !editor.isFocused()) {\n            editor.focus();\n            if (this.$focusTimeout && !this.$clickSelection && !editor.inMultiSelectMode) {\n                this.setState(\"focusWait\");\n                this.captureMouse(ev);\n                return;\n            }\n        }\n        this.captureMouse(ev);\n        this.startSelect(pos, ev.domEvent._clicks > 1);\n        return ev.preventDefault();\n    };\n    this.startSelect = function (pos, waitForClickSelection) {\n        pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y);\n        var editor = this.editor;\n        if (!this.mousedownEvent)\n            return;\n        if (this.mousedownEvent.getShiftKey())\n            editor.selection.selectToPosition(pos);\n        else if (!waitForClickSelection)\n            editor.selection.moveToPosition(pos);\n        if (!waitForClickSelection)\n            this.select();\n        if (editor.renderer.scroller.setCapture) {\n            editor.renderer.scroller.setCapture();\n        }\n        editor.setStyle(\"ace_selecting\");\n        this.setState(\"select\");\n    };\n    this.select = function () {\n        var anchor, editor = this.editor;\n        var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n        if (this.$clickSelection) {\n            var cmp = this.$clickSelection.comparePoint(cursor);\n            if (cmp == -1) {\n                anchor = this.$clickSelection.end;\n            }\n            else if (cmp == 1) {\n                anchor = this.$clickSelection.start;\n            }\n            else {\n                var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n                cursor = orientedRange.cursor;\n                anchor = orientedRange.anchor;\n            }\n            editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n        }\n        editor.selection.selectToPosition(cursor);\n        editor.renderer.scrollCursorIntoView();\n    };\n    this.extendSelectionBy = function (unitName) {\n        var anchor, editor = this.editor;\n        var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y);\n        var range = editor.selection[unitName](cursor.row, cursor.column);\n        if (this.$clickSelection) {\n            var cmpStart = this.$clickSelection.comparePoint(range.start);\n            var cmpEnd = this.$clickSelection.comparePoint(range.end);\n            if (cmpStart == -1 && cmpEnd <= 0) {\n                anchor = this.$clickSelection.end;\n                if (range.end.row != cursor.row || range.end.column != cursor.column)\n                    cursor = range.start;\n            }\n            else if (cmpEnd == 1 && cmpStart >= 0) {\n                anchor = this.$clickSelection.start;\n                if (range.start.row != cursor.row || range.start.column != cursor.column)\n                    cursor = range.end;\n            }\n            else if (cmpStart == -1 && cmpEnd == 1) {\n                cursor = range.end;\n                anchor = range.start;\n            }\n            else {\n                var orientedRange = calcRangeOrientation(this.$clickSelection, cursor);\n                cursor = orientedRange.cursor;\n                anchor = orientedRange.anchor;\n            }\n            editor.selection.setSelectionAnchor(anchor.row, anchor.column);\n        }\n        editor.selection.selectToPosition(cursor);\n        editor.renderer.scrollCursorIntoView();\n    };\n    this.selectEnd =\n        this.selectAllEnd =\n            this.selectByWordsEnd =\n                this.selectByLinesEnd = function () {\n                    this.$clickSelection = null;\n                    this.editor.unsetStyle(\"ace_selecting\");\n                    if (this.editor.renderer.scroller.releaseCapture) {\n                        this.editor.renderer.scroller.releaseCapture();\n                    }\n                };\n    this.focusWait = function () {\n        var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n        var time = Date.now();\n        if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimeout)\n            this.startSelect(this.mousedownEvent.getDocumentPosition());\n    };\n    this.onDoubleClick = function (ev) {\n        var pos = ev.getDocumentPosition();\n        var editor = this.editor;\n        var session = editor.session;\n        var range = session.getBracketRange(pos);\n        if (range) {\n            if (range.isEmpty()) {\n                range.start.column--;\n                range.end.column++;\n            }\n            this.setState(\"select\");\n        }\n        else {\n            range = editor.selection.getWordRange(pos.row, pos.column);\n            this.setState(\"selectByWords\");\n        }\n        this.$clickSelection = range;\n        this.select();\n    };\n    this.onTripleClick = function (ev) {\n        var pos = ev.getDocumentPosition();\n        var editor = this.editor;\n        this.setState(\"selectByLines\");\n        var range = editor.getSelectionRange();\n        if (range.isMultiLine() && range.contains(pos.row, pos.column)) {\n            this.$clickSelection = editor.selection.getLineRange(range.start.row);\n            this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;\n        }\n        else {\n            this.$clickSelection = editor.selection.getLineRange(pos.row);\n        }\n        this.select();\n    };\n    this.onQuadClick = function (ev) {\n        var editor = this.editor;\n        editor.selectAll();\n        this.$clickSelection = editor.getSelectionRange();\n        this.setState(\"selectAll\");\n    };\n    this.onMouseWheel = function (ev) {\n        if (ev.getAccelKey())\n            return;\n        if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) {\n            ev.wheelX = ev.wheelY;\n            ev.wheelY = 0;\n        }\n        var editor = this.editor;\n        if (!this.$lastScroll)\n            this.$lastScroll = { t: 0, vx: 0, vy: 0, allowed: 0 };\n        var prevScroll = this.$lastScroll;\n        var t = ev.domEvent.timeStamp;\n        var dt = t - prevScroll.t;\n        var vx = dt ? ev.wheelX / dt : prevScroll.vx;\n        var vy = dt ? ev.wheelY / dt : prevScroll.vy;\n        if (dt < SCROLL_COOLDOWN_T) {\n            vx = (vx + prevScroll.vx) / 2;\n            vy = (vy + prevScroll.vy) / 2;\n        }\n        var direction = Math.abs(vx / vy);\n        var canScroll = false;\n        if (direction >= 1 && editor.renderer.isScrollableBy(ev.wheelX * ev.speed, 0))\n            canScroll = true;\n        if (direction <= 1 && editor.renderer.isScrollableBy(0, ev.wheelY * ev.speed))\n            canScroll = true;\n        if (canScroll) {\n            prevScroll.allowed = t;\n        }\n        else if (t - prevScroll.allowed < SCROLL_COOLDOWN_T) {\n            var isSlower = Math.abs(vx) <= 1.5 * Math.abs(prevScroll.vx)\n                && Math.abs(vy) <= 1.5 * Math.abs(prevScroll.vy);\n            if (isSlower) {\n                canScroll = true;\n                prevScroll.allowed = t;\n            }\n            else {\n                prevScroll.allowed = 0;\n            }\n        }\n        prevScroll.t = t;\n        prevScroll.vx = vx;\n        prevScroll.vy = vy;\n        if (canScroll) {\n            editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed);\n            return ev.stop();\n        }\n    };\n}).call(DefaultHandlers.prototype);\nexports.DefaultHandlers = DefaultHandlers;\nfunction calcDistance(ax, ay, bx, by) {\n    return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nfunction calcRangeOrientation(range, cursor) {\n    if (range.start.row == range.end.row)\n        var cmp = 2 * cursor.column - range.start.column - range.end.column;\n    else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column)\n        var cmp = cursor.column - 4;\n    else\n        var cmp = 2 * cursor.row - range.start.row - range.end.row;\n    if (cmp < 0)\n        return { cursor: range.start, anchor: range.end };\n    else\n        return { cursor: range.end, anchor: range.start };\n}\n\n});\n\nace.define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar CLASSNAME = \"ace_tooltip\";\nfunction Tooltip(parentNode) {\n    this.isOpen = false;\n    this.$element = null;\n    this.$parentNode = parentNode;\n}\n(function () {\n    this.$init = function () {\n        this.$element = dom.createElement(\"div\");\n        this.$element.className = CLASSNAME;\n        this.$element.style.display = \"none\";\n        this.$parentNode.appendChild(this.$element);\n        return this.$element;\n    };\n    this.getElement = function () {\n        return this.$element || this.$init();\n    };\n    this.setText = function (text) {\n        this.getElement().textContent = text;\n    };\n    this.setHtml = function (html) {\n        this.getElement().innerHTML = html;\n    };\n    this.setPosition = function (x, y) {\n        this.getElement().style.left = x + \"px\";\n        this.getElement().style.top = y + \"px\";\n    };\n    this.setClassName = function (className) {\n        dom.addCssClass(this.getElement(), className);\n    };\n    this.show = function (text, x, y) {\n        if (text != null)\n            this.setText(text);\n        if (x != null && y != null)\n            this.setPosition(x, y);\n        if (!this.isOpen) {\n            this.getElement().style.display = \"block\";\n            this.isOpen = true;\n        }\n    };\n    this.hide = function () {\n        if (this.isOpen) {\n            this.getElement().style.display = \"none\";\n            this.getElement().className = CLASSNAME;\n            this.isOpen = false;\n        }\n    };\n    this.getHeight = function () {\n        return this.getElement().offsetHeight;\n    };\n    this.getWidth = function () {\n        return this.getElement().offsetWidth;\n    };\n    this.destroy = function () {\n        this.isOpen = false;\n        if (this.$element && this.$element.parentNode) {\n            this.$element.parentNode.removeChild(this.$element);\n        }\n    };\n}).call(Tooltip.prototype);\nexports.Tooltip = Tooltip;\n\n});\n\nace.define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar event = require(\"../lib/event\");\nvar Tooltip = require(\"../tooltip\").Tooltip;\nfunction GutterHandler(mouseHandler) {\n    var editor = mouseHandler.editor;\n    var gutter = editor.renderer.$gutterLayer;\n    var tooltip = new GutterTooltip(editor.container);\n    mouseHandler.editor.setDefaultHandler(\"guttermousedown\", function (e) {\n        if (!editor.isFocused() || e.getButton() != 0)\n            return;\n        var gutterRegion = gutter.getRegion(e);\n        if (gutterRegion == \"foldWidgets\")\n            return;\n        var row = e.getDocumentPosition().row;\n        var selection = editor.session.selection;\n        if (e.getShiftKey())\n            selection.selectTo(row, 0);\n        else {\n            if (e.domEvent.detail == 2) {\n                editor.selectAll();\n                return e.preventDefault();\n            }\n            mouseHandler.$clickSelection = editor.selection.getLineRange(row);\n        }\n        mouseHandler.setState(\"selectByLines\");\n        mouseHandler.captureMouse(e);\n        return e.preventDefault();\n    });\n    var tooltipTimeout, mouseEvent, tooltipAnnotation;\n    function showTooltip() {\n        var row = mouseEvent.getDocumentPosition().row;\n        var annotation = gutter.$annotations[row];\n        if (!annotation)\n            return hideTooltip();\n        var maxRow = editor.session.getLength();\n        if (row == maxRow) {\n            var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row;\n            var pos = mouseEvent.$pos;\n            if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column))\n                return hideTooltip();\n        }\n        if (tooltipAnnotation == annotation)\n            return;\n        tooltipAnnotation = annotation.text.join(\"
\");\n tooltip.setHtml(tooltipAnnotation);\n var annotationClassName = annotation.className;\n if (annotationClassName) {\n tooltip.setClassName(annotationClassName.trim());\n }\n tooltip.show();\n editor._signal(\"showGutterTooltip\", tooltip);\n editor.on(\"mousewheel\", hideTooltip);\n if (mouseHandler.$tooltipFollowsMouse) {\n moveTooltip(mouseEvent);\n }\n else {\n var gutterElement = mouseEvent.domEvent.target;\n var rect = gutterElement.getBoundingClientRect();\n var style = tooltip.getElement().style;\n style.left = rect.right + \"px\";\n style.top = rect.bottom + \"px\";\n }\n }\n function hideTooltip() {\n if (tooltipTimeout)\n tooltipTimeout = clearTimeout(tooltipTimeout);\n if (tooltipAnnotation) {\n tooltip.hide();\n tooltipAnnotation = null;\n editor._signal(\"hideGutterTooltip\", tooltip);\n editor.off(\"mousewheel\", hideTooltip);\n }\n }\n function moveTooltip(e) {\n tooltip.setPosition(e.x, e.y);\n }\n mouseHandler.editor.setDefaultHandler(\"guttermousemove\", function (e) {\n var target = e.domEvent.target || e.domEvent.srcElement;\n if (dom.hasCssClass(target, \"ace_fold-widget\"))\n return hideTooltip();\n if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse)\n moveTooltip(e);\n mouseEvent = e;\n if (tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n if (mouseEvent && !mouseHandler.isMousePressed)\n showTooltip();\n else\n hideTooltip();\n }, 50);\n });\n event.addListener(editor.renderer.$gutter, \"mouseout\", function (e) {\n mouseEvent = null;\n if (!tooltipAnnotation || tooltipTimeout)\n return;\n tooltipTimeout = setTimeout(function () {\n tooltipTimeout = null;\n hideTooltip();\n }, 50);\n }, editor);\n editor.on(\"changeSession\", hideTooltip);\n}\nfunction GutterTooltip(parentNode) {\n Tooltip.call(this, parentNode);\n}\noop.inherits(GutterTooltip, Tooltip);\n(function () {\n this.setPosition = function (x, y) {\n var windowWidth = window.innerWidth || document.documentElement.clientWidth;\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\n var width = this.getWidth();\n var height = this.getHeight();\n x += 15;\n y += 15;\n if (x + width > windowWidth) {\n x -= (x + width) - windowWidth;\n }\n if (y + height > windowHeight) {\n y -= 20 + height;\n }\n Tooltip.prototype.setPosition.call(this, x, y);\n };\n}).call(GutterTooltip.prototype);\nexports.GutterHandler = GutterHandler;\n\n});\n\nace.define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar MouseEvent = exports.MouseEvent = function (domEvent, editor) {\n this.domEvent = domEvent;\n this.editor = editor;\n this.x = this.clientX = domEvent.clientX;\n this.y = this.clientY = domEvent.clientY;\n this.$pos = null;\n this.$inSelection = null;\n this.propagationStopped = false;\n this.defaultPrevented = false;\n};\n(function () {\n this.stopPropagation = function () {\n event.stopPropagation(this.domEvent);\n this.propagationStopped = true;\n };\n this.preventDefault = function () {\n event.preventDefault(this.domEvent);\n this.defaultPrevented = true;\n };\n this.stop = function () {\n this.stopPropagation();\n this.preventDefault();\n };\n this.getDocumentPosition = function () {\n if (this.$pos)\n return this.$pos;\n this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY);\n return this.$pos;\n };\n this.inSelection = function () {\n if (this.$inSelection !== null)\n return this.$inSelection;\n var editor = this.editor;\n var selectionRange = editor.getSelectionRange();\n if (selectionRange.isEmpty())\n this.$inSelection = false;\n else {\n var pos = this.getDocumentPosition();\n this.$inSelection = selectionRange.contains(pos.row, pos.column);\n }\n return this.$inSelection;\n };\n this.getButton = function () {\n return event.getButton(this.domEvent);\n };\n this.getShiftKey = function () {\n return this.domEvent.shiftKey;\n };\n this.getAccelKey = useragent.isMac\n ? function () { return this.domEvent.metaKey; }\n : function () { return this.domEvent.ctrlKey; };\n}).call(MouseEvent.prototype);\n\n});\n\nace.define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar AUTOSCROLL_DELAY = 200;\nvar SCROLL_CURSOR_DELAY = 200;\nvar SCROLL_CURSOR_HYSTERESIS = 5;\nfunction DragdropHandler(mouseHandler) {\n var editor = mouseHandler.editor;\n var dragImage = dom.createElement(\"div\");\n dragImage.style.cssText = \"top:-100px;position:absolute;z-index:2147483647;opacity:0.5\";\n dragImage.textContent = \"\\xa0\";\n var exports = [\"dragWait\", \"dragWaitEnd\", \"startDrag\", \"dragReadyEnd\", \"onMouseDrag\"];\n exports.forEach(function (x) {\n mouseHandler[x] = this[x];\n }, this);\n editor.on(\"mousedown\", this.onMouseDown.bind(mouseHandler));\n var mouseTarget = editor.container;\n var dragSelectionMarker, x, y;\n var timerId, range;\n var dragCursor, counter = 0;\n var dragOperation;\n var isInternal;\n var autoScrollStartTime;\n var cursorMovedTime;\n var cursorPointOnCaretMoved;\n this.onDragStart = function (e) {\n if (this.cancelDrag || !mouseTarget.draggable) {\n var self = this;\n setTimeout(function () {\n self.startSelect();\n self.captureMouse(e);\n }, 0);\n return e.preventDefault();\n }\n range = editor.getSelectionRange();\n var dataTransfer = e.dataTransfer;\n dataTransfer.effectAllowed = editor.getReadOnly() ? \"copy\" : \"copyMove\";\n editor.container.appendChild(dragImage);\n dataTransfer.setDragImage && dataTransfer.setDragImage(dragImage, 0, 0);\n setTimeout(function () {\n editor.container.removeChild(dragImage);\n });\n dataTransfer.clearData();\n dataTransfer.setData(\"Text\", editor.session.getTextRange());\n isInternal = true;\n this.setState(\"drag\");\n };\n this.onDragEnd = function (e) {\n mouseTarget.draggable = false;\n isInternal = false;\n this.setState(null);\n if (!editor.getReadOnly()) {\n var dropEffect = e.dataTransfer.dropEffect;\n if (!dragOperation && dropEffect == \"move\")\n editor.session.remove(editor.getSelectionRange());\n editor.$resetCursorStyle();\n }\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n };\n this.onDragEnter = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker)\n addDragMarker();\n counter++;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragOver = function (e) {\n if (editor.getReadOnly() || !canAccept(e.dataTransfer))\n return;\n x = e.clientX;\n y = e.clientY;\n if (!dragSelectionMarker) {\n addDragMarker();\n counter++;\n }\n if (onMouseMoveTimer !== null)\n onMouseMoveTimer = null;\n e.dataTransfer.dropEffect = dragOperation = getDropEffect(e);\n return event.preventDefault(e);\n };\n this.onDragLeave = function (e) {\n counter--;\n if (counter <= 0 && dragSelectionMarker) {\n clearDragMarker();\n dragOperation = null;\n return event.preventDefault(e);\n }\n };\n this.onDrop = function (e) {\n if (!dragCursor)\n return;\n var dataTransfer = e.dataTransfer;\n if (isInternal) {\n switch (dragOperation) {\n case \"move\":\n if (range.contains(dragCursor.row, dragCursor.column)) {\n range = {\n start: dragCursor,\n end: dragCursor\n };\n }\n else {\n range = editor.moveText(range, dragCursor);\n }\n break;\n case \"copy\":\n range = editor.moveText(range, dragCursor, true);\n break;\n }\n }\n else {\n var dropData = dataTransfer.getData('Text');\n range = {\n start: dragCursor,\n end: editor.session.insert(dragCursor, dropData)\n };\n editor.focus();\n dragOperation = null;\n }\n clearDragMarker();\n return event.preventDefault(e);\n };\n event.addListener(mouseTarget, \"dragstart\", this.onDragStart.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragend\", this.onDragEnd.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragenter\", this.onDragEnter.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragover\", this.onDragOver.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"dragleave\", this.onDragLeave.bind(mouseHandler), editor);\n event.addListener(mouseTarget, \"drop\", this.onDrop.bind(mouseHandler), editor);\n function scrollCursorIntoView(cursor, prevCursor) {\n var now = Date.now();\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n var hMovement = !prevCursor || cursor.column != prevCursor.column;\n if (!cursorMovedTime || vMovement || hMovement) {\n editor.moveCursorToPosition(cursor);\n cursorMovedTime = now;\n cursorPointOnCaretMoved = { x: x, y: y };\n }\n else {\n var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y);\n if (distance > SCROLL_CURSOR_HYSTERESIS) {\n cursorMovedTime = null;\n }\n else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) {\n editor.renderer.scrollCursorIntoView();\n cursorMovedTime = null;\n }\n }\n }\n function autoScroll(cursor, prevCursor) {\n var now = Date.now();\n var lineHeight = editor.renderer.layerConfig.lineHeight;\n var characterWidth = editor.renderer.layerConfig.characterWidth;\n var editorRect = editor.renderer.scroller.getBoundingClientRect();\n var offsets = {\n x: {\n left: x - editorRect.left,\n right: editorRect.right - x\n },\n y: {\n top: y - editorRect.top,\n bottom: editorRect.bottom - y\n }\n };\n var nearestXOffset = Math.min(offsets.x.left, offsets.x.right);\n var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom);\n var scrollCursor = { row: cursor.row, column: cursor.column };\n if (nearestXOffset / characterWidth <= 2) {\n scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2);\n }\n if (nearestYOffset / lineHeight <= 1) {\n scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1);\n }\n var vScroll = cursor.row != scrollCursor.row;\n var hScroll = cursor.column != scrollCursor.column;\n var vMovement = !prevCursor || cursor.row != prevCursor.row;\n if (vScroll || (hScroll && !vMovement)) {\n if (!autoScrollStartTime)\n autoScrollStartTime = now;\n else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY)\n editor.renderer.scrollCursorIntoView(scrollCursor);\n }\n else {\n autoScrollStartTime = null;\n }\n }\n function onDragInterval() {\n var prevCursor = dragCursor;\n dragCursor = editor.renderer.screenToTextCoordinates(x, y);\n scrollCursorIntoView(dragCursor, prevCursor);\n autoScroll(dragCursor, prevCursor);\n }\n function addDragMarker() {\n range = editor.selection.toOrientedRange();\n dragSelectionMarker = editor.session.addMarker(range, \"ace_selection\", editor.getSelectionStyle());\n editor.clearSelection();\n if (editor.isFocused())\n editor.renderer.$cursorLayer.setBlinking(false);\n clearInterval(timerId);\n onDragInterval();\n timerId = setInterval(onDragInterval, 20);\n counter = 0;\n event.addListener(document, \"mousemove\", onMouseMove);\n }\n function clearDragMarker() {\n clearInterval(timerId);\n editor.session.removeMarker(dragSelectionMarker);\n dragSelectionMarker = null;\n editor.selection.fromOrientedRange(range);\n if (editor.isFocused() && !isInternal)\n editor.$resetCursorStyle();\n range = null;\n dragCursor = null;\n counter = 0;\n autoScrollStartTime = null;\n cursorMovedTime = null;\n event.removeListener(document, \"mousemove\", onMouseMove);\n }\n var onMouseMoveTimer = null;\n function onMouseMove() {\n if (onMouseMoveTimer == null) {\n onMouseMoveTimer = setTimeout(function () {\n if (onMouseMoveTimer != null && dragSelectionMarker)\n clearDragMarker();\n }, 20);\n }\n }\n function canAccept(dataTransfer) {\n var types = dataTransfer.types;\n return !types || Array.prototype.some.call(types, function (type) {\n return type == 'text/plain' || type == 'Text';\n });\n }\n function getDropEffect(e) {\n var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized'];\n var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized'];\n var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey;\n var effectAllowed = \"uninitialized\";\n try {\n effectAllowed = e.dataTransfer.effectAllowed.toLowerCase();\n }\n catch (e) { }\n var dropEffect = \"none\";\n if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n else if (moveAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"move\";\n else if (copyAllowed.indexOf(effectAllowed) >= 0)\n dropEffect = \"copy\";\n return dropEffect;\n }\n}\n(function () {\n this.dragWait = function () {\n var interval = Date.now() - this.mousedownEvent.time;\n if (interval > this.editor.getDragDelay())\n this.startDrag();\n };\n this.dragWaitEnd = function () {\n var target = this.editor.container;\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n this.selectEnd();\n };\n this.dragReadyEnd = function (e) {\n this.editor.$resetCursorStyle();\n this.editor.unsetStyle(\"ace_dragging\");\n this.editor.renderer.setCursorStyle(\"\");\n this.dragWaitEnd();\n };\n this.startDrag = function () {\n this.cancelDrag = false;\n var editor = this.editor;\n var target = editor.container;\n target.draggable = true;\n editor.renderer.$cursorLayer.setBlinking(false);\n editor.setStyle(\"ace_dragging\");\n var cursorStyle = useragent.isWin ? \"default\" : \"move\";\n editor.renderer.setCursorStyle(cursorStyle);\n this.setState(\"dragReady\");\n };\n this.onMouseDrag = function (e) {\n var target = this.editor.container;\n if (useragent.isIE && this.state == \"dragReady\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 3)\n target.dragDrop();\n }\n if (this.state === \"dragWait\") {\n var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y);\n if (distance > 0) {\n target.draggable = false;\n this.startSelect(this.mousedownEvent.getDocumentPosition());\n }\n }\n };\n this.onMouseDown = function (e) {\n if (!this.$dragEnabled)\n return;\n this.mousedownEvent = e;\n var editor = this.editor;\n var inSelection = e.inSelection();\n var button = e.getButton();\n var clickCount = e.domEvent.detail || 1;\n if (clickCount === 1 && button === 0 && inSelection) {\n if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey()))\n return;\n this.mousedownEvent.time = Date.now();\n var eventTarget = e.domEvent.target || e.domEvent.srcElement;\n if (\"unselectable\" in eventTarget)\n eventTarget.unselectable = \"on\";\n if (editor.getDragDelay()) {\n if (useragent.isWebKit) {\n this.cancelDrag = true;\n var mouseTarget = editor.container;\n mouseTarget.draggable = true;\n }\n this.setState(\"dragWait\");\n }\n else {\n this.startDrag();\n }\n this.captureMouse(e, this.onMouseDrag.bind(this));\n e.defaultPrevented = true;\n }\n };\n}).call(DragdropHandler.prototype);\nfunction calcDistance(ax, ay, bx, by) {\n return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2));\n}\nexports.DragdropHandler = DragdropHandler;\n\n});\n\nace.define(\"ace/mouse/touch_handler\",[\"require\",\"exports\",\"module\",\"ace/mouse/mouse_event\",\"ace/lib/event\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar event = require(\"../lib/event\");\nvar dom = require(\"../lib/dom\");\nexports.addTouchListeners = function (el, editor) {\n var mode = \"scroll\";\n var startX;\n var startY;\n var touchStartT;\n var lastT;\n var longTouchTimer;\n var animationTimer;\n var animationSteps = 0;\n var pos;\n var clickCount = 0;\n var vX = 0;\n var vY = 0;\n var pressed;\n var contextMenu;\n function createContextMenu() {\n var clipboard = window.navigator && window.navigator.clipboard;\n var isOpen = false;\n var updateMenu = function () {\n var selected = editor.getCopyText();\n var hasUndo = editor.session.getUndoManager().hasUndo();\n contextMenu.replaceChild(dom.buildDom(isOpen ? [\"span\",\n !selected && [\"span\", { class: \"ace_mobile-button\", action: \"selectall\" }, \"Select All\"],\n selected && [\"span\", { class: \"ace_mobile-button\", action: \"copy\" }, \"Copy\"],\n selected && [\"span\", { class: \"ace_mobile-button\", action: \"cut\" }, \"Cut\"],\n clipboard && [\"span\", { class: \"ace_mobile-button\", action: \"paste\" }, \"Paste\"],\n hasUndo && [\"span\", { class: \"ace_mobile-button\", action: \"undo\" }, \"Undo\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"find\" }, \"Find\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"openCommandPallete\" }, \"Palette\"]\n ] : [\"span\"]), contextMenu.firstChild);\n };\n var handleClick = function (e) {\n var action = e.target.getAttribute(\"action\");\n if (action == \"more\" || !isOpen) {\n isOpen = !isOpen;\n return updateMenu();\n }\n if (action == \"paste\") {\n clipboard.readText().then(function (text) {\n editor.execCommand(action, text);\n });\n }\n else if (action) {\n if (action == \"cut\" || action == \"copy\") {\n if (clipboard)\n clipboard.writeText(editor.getCopyText());\n else\n document.execCommand(\"copy\");\n }\n editor.execCommand(action);\n }\n contextMenu.firstChild.style.display = \"none\";\n isOpen = false;\n if (action != \"openCommandPallete\")\n editor.focus();\n };\n contextMenu = dom.buildDom([\"div\",\n {\n class: \"ace_mobile-menu\",\n ontouchstart: function (e) {\n mode = \"menu\";\n e.stopPropagation();\n e.preventDefault();\n editor.textInput.focus();\n },\n ontouchend: function (e) {\n e.stopPropagation();\n e.preventDefault();\n handleClick(e);\n },\n onclick: handleClick\n },\n [\"span\"],\n [\"span\", { class: \"ace_mobile-button\", action: \"more\" }, \"...\"]\n ], editor.container);\n }\n function showContextMenu() {\n if (!contextMenu)\n createContextMenu();\n var cursor = editor.selection.cursor;\n var pagePos = editor.renderer.textToScreenCoordinates(cursor.row, cursor.column);\n var leftOffset = editor.renderer.textToScreenCoordinates(0, 0).pageX;\n var scrollLeft = editor.renderer.scrollLeft;\n var rect = editor.container.getBoundingClientRect();\n contextMenu.style.top = pagePos.pageY - rect.top - 3 + \"px\";\n if (pagePos.pageX - rect.left < rect.width - 70) {\n contextMenu.style.left = \"\";\n contextMenu.style.right = \"10px\";\n }\n else {\n contextMenu.style.right = \"\";\n contextMenu.style.left = leftOffset + scrollLeft - rect.left + \"px\";\n }\n contextMenu.style.display = \"\";\n contextMenu.firstChild.style.display = \"none\";\n editor.on(\"input\", hideContextMenu);\n }\n function hideContextMenu(e) {\n if (contextMenu)\n contextMenu.style.display = \"none\";\n editor.off(\"input\", hideContextMenu);\n }\n function handleLongTap() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n var range = editor.selection.getRange();\n var inSelection = range.contains(pos.row, pos.column);\n if (range.isEmpty() || !inSelection) {\n editor.selection.moveToPosition(pos);\n editor.selection.selectWord();\n }\n mode = \"wait\";\n showContextMenu();\n }\n function switchToSelectionMode() {\n longTouchTimer = null;\n clearTimeout(longTouchTimer);\n editor.selection.moveToPosition(pos);\n var range = clickCount >= 2\n ? editor.selection.getLineRange(pos.row)\n : editor.session.getBracketRange(pos);\n if (range && !range.isEmpty()) {\n editor.selection.setRange(range);\n }\n else {\n editor.selection.selectWord();\n }\n mode = \"wait\";\n }\n event.addListener(el, \"contextmenu\", function (e) {\n if (!pressed)\n return;\n var textarea = editor.textInput.getElement();\n textarea.focus();\n }, editor);\n event.addListener(el, \"touchstart\", function (e) {\n var touches = e.touches;\n if (longTouchTimer || touches.length > 1) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n touchStartT = -1;\n mode = \"zoom\";\n return;\n }\n pressed = editor.$mouseHandler.isMousePressed = true;\n var h = editor.renderer.layerConfig.lineHeight;\n var w = editor.renderer.layerConfig.lineHeight;\n var t = e.timeStamp;\n lastT = t;\n var touchObj = touches[0];\n var x = touchObj.clientX;\n var y = touchObj.clientY;\n if (Math.abs(startX - x) + Math.abs(startY - y) > h)\n touchStartT = -1;\n startX = e.clientX = x;\n startY = e.clientY = y;\n vX = vY = 0;\n var ev = new MouseEvent(e, editor);\n pos = ev.getDocumentPosition();\n if (t - touchStartT < 500 && touches.length == 1 && !animationSteps) {\n clickCount++;\n e.preventDefault();\n e.button = 0;\n switchToSelectionMode();\n }\n else {\n clickCount = 0;\n var cursor = editor.selection.cursor;\n var anchor = editor.selection.isEmpty() ? cursor : editor.selection.anchor;\n var cursorPos = editor.renderer.$cursorLayer.getPixelPosition(cursor, true);\n var anchorPos = editor.renderer.$cursorLayer.getPixelPosition(anchor, true);\n var rect = editor.renderer.scroller.getBoundingClientRect();\n var offsetTop = editor.renderer.layerConfig.offset;\n var offsetLeft = editor.renderer.scrollLeft;\n var weightedDistance = function (x, y) {\n x = x / w;\n y = y / h - 0.75;\n return x * x + y * y;\n };\n if (e.clientX < rect.left) {\n mode = \"zoom\";\n return;\n }\n var diff1 = weightedDistance(e.clientX - rect.left - cursorPos.left + offsetLeft, e.clientY - rect.top - cursorPos.top + offsetTop);\n var diff2 = weightedDistance(e.clientX - rect.left - anchorPos.left + offsetLeft, e.clientY - rect.top - anchorPos.top + offsetTop);\n if (diff1 < 3.5 && diff2 < 3.5)\n mode = diff1 > diff2 ? \"cursor\" : \"anchor\";\n if (diff2 < 3.5)\n mode = \"anchor\";\n else if (diff1 < 3.5)\n mode = \"cursor\";\n else\n mode = \"scroll\";\n longTouchTimer = setTimeout(handleLongTap, 450);\n }\n touchStartT = t;\n }, editor);\n event.addListener(el, \"touchend\", function (e) {\n pressed = editor.$mouseHandler.isMousePressed = false;\n if (animationTimer)\n clearInterval(animationTimer);\n if (mode == \"zoom\") {\n mode = \"\";\n animationSteps = 0;\n }\n else if (longTouchTimer) {\n editor.selection.moveToPosition(pos);\n animationSteps = 0;\n showContextMenu();\n }\n else if (mode == \"scroll\") {\n animate();\n hideContextMenu();\n }\n else {\n showContextMenu();\n }\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }, editor);\n event.addListener(el, \"touchmove\", function (e) {\n if (longTouchTimer) {\n clearTimeout(longTouchTimer);\n longTouchTimer = null;\n }\n var touches = e.touches;\n if (touches.length > 1 || mode == \"zoom\")\n return;\n var touchObj = touches[0];\n var wheelX = startX - touchObj.clientX;\n var wheelY = startY - touchObj.clientY;\n if (mode == \"wait\") {\n if (wheelX * wheelX + wheelY * wheelY > 4)\n mode = \"cursor\";\n else\n return e.preventDefault();\n }\n startX = touchObj.clientX;\n startY = touchObj.clientY;\n e.clientX = touchObj.clientX;\n e.clientY = touchObj.clientY;\n var t = e.timeStamp;\n var dt = t - lastT;\n lastT = t;\n if (mode == \"scroll\") {\n var mouseEvent = new MouseEvent(e, editor);\n mouseEvent.speed = 1;\n mouseEvent.wheelX = wheelX;\n mouseEvent.wheelY = wheelY;\n if (10 * Math.abs(wheelX) < Math.abs(wheelY))\n wheelX = 0;\n if (10 * Math.abs(wheelY) < Math.abs(wheelX))\n wheelY = 0;\n if (dt != 0) {\n vX = wheelX / dt;\n vY = wheelY / dt;\n }\n editor._emit(\"mousewheel\", mouseEvent);\n if (!mouseEvent.propagationStopped) {\n vX = vY = 0;\n }\n }\n else {\n var ev = new MouseEvent(e, editor);\n var pos = ev.getDocumentPosition();\n if (mode == \"cursor\")\n editor.selection.moveCursorToPosition(pos);\n else if (mode == \"anchor\")\n editor.selection.setSelectionAnchor(pos.row, pos.column);\n editor.renderer.scrollCursorIntoView(pos);\n e.preventDefault();\n }\n }, editor);\n function animate() {\n animationSteps += 60;\n animationTimer = setInterval(function () {\n if (animationSteps-- <= 0) {\n clearInterval(animationTimer);\n animationTimer = null;\n }\n if (Math.abs(vX) < 0.01)\n vX = 0;\n if (Math.abs(vY) < 0.01)\n vY = 0;\n if (animationSteps < 20)\n vX = 0.9 * vX;\n if (animationSteps < 20)\n vY = 0.9 * vY;\n var oldScrollTop = editor.session.getScrollTop();\n editor.renderer.scrollBy(10 * vX, 10 * vY);\n if (oldScrollTop == editor.session.getScrollTop())\n animationSteps = 0;\n }, 10);\n }\n};\n\n});\n\nace.define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/mouse/touch_handler\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar DefaultHandlers = require(\"./default_handlers\").DefaultHandlers;\nvar DefaultGutterHandler = require(\"./default_gutter_handler\").GutterHandler;\nvar MouseEvent = require(\"./mouse_event\").MouseEvent;\nvar DragdropHandler = require(\"./dragdrop_handler\").DragdropHandler;\nvar addTouchListeners = require(\"./touch_handler\").addTouchListeners;\nvar config = require(\"../config\");\nvar MouseHandler = function (editor) {\n var _self = this;\n this.editor = editor;\n new DefaultHandlers(this);\n new DefaultGutterHandler(this);\n new DragdropHandler(this);\n var focusEditor = function (e) {\n var windowBlurred = !document.hasFocus || !document.hasFocus()\n || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement());\n if (windowBlurred)\n window.focus();\n editor.focus();\n setTimeout(function () {\n if (!editor.isFocused())\n editor.focus();\n });\n };\n var mouseTarget = editor.renderer.getMouseEventTarget();\n event.addListener(mouseTarget, \"click\", this.onMouseEvent.bind(this, \"click\"), editor);\n event.addListener(mouseTarget, \"mousemove\", this.onMouseMove.bind(this, \"mousemove\"), editor);\n event.addMultiMouseDownListener([\n mouseTarget,\n editor.renderer.scrollBarV && editor.renderer.scrollBarV.inner,\n editor.renderer.scrollBarH && editor.renderer.scrollBarH.inner,\n editor.textInput && editor.textInput.getElement()\n ].filter(Boolean), [400, 300, 250], this, \"onMouseEvent\", editor);\n event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, \"mousewheel\"), editor);\n addTouchListeners(editor.container, editor);\n var gutterEl = editor.renderer.$gutter;\n event.addListener(gutterEl, \"mousedown\", this.onMouseEvent.bind(this, \"guttermousedown\"), editor);\n event.addListener(gutterEl, \"click\", this.onMouseEvent.bind(this, \"gutterclick\"), editor);\n event.addListener(gutterEl, \"dblclick\", this.onMouseEvent.bind(this, \"gutterdblclick\"), editor);\n event.addListener(gutterEl, \"mousemove\", this.onMouseEvent.bind(this, \"guttermousemove\"), editor);\n event.addListener(mouseTarget, \"mousedown\", focusEditor, editor);\n event.addListener(gutterEl, \"mousedown\", focusEditor, editor);\n if (useragent.isIE && editor.renderer.scrollBarV) {\n event.addListener(editor.renderer.scrollBarV.element, \"mousedown\", focusEditor, editor);\n event.addListener(editor.renderer.scrollBarH.element, \"mousedown\", focusEditor, editor);\n }\n editor.on(\"mousemove\", function (e) {\n if (_self.state || _self.$dragDelay || !_self.$dragEnabled)\n return;\n var character = editor.renderer.screenToTextCoordinates(e.x, e.y);\n var range = editor.session.selection.getRange();\n var renderer = editor.renderer;\n if (!range.isEmpty() && range.insideStart(character.row, character.column)) {\n renderer.setCursorStyle(\"default\");\n }\n else {\n renderer.setCursorStyle(\"\");\n }\n }, editor);\n};\n(function () {\n this.onMouseEvent = function (name, e) {\n if (!this.editor.session)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n this.onMouseMove = function (name, e) {\n var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove;\n if (!listeners || !listeners.length)\n return;\n this.editor._emit(name, new MouseEvent(e, this.editor));\n };\n this.onMouseWheel = function (name, e) {\n var mouseEvent = new MouseEvent(e, this.editor);\n mouseEvent.speed = this.$scrollSpeed * 2;\n mouseEvent.wheelX = e.wheelX;\n mouseEvent.wheelY = e.wheelY;\n this.editor._emit(name, mouseEvent);\n };\n this.setState = function (state) {\n this.state = state;\n };\n this.captureMouse = function (ev, mouseMoveHandler) {\n this.x = ev.x;\n this.y = ev.y;\n this.isMousePressed = true;\n var editor = this.editor;\n var renderer = this.editor.renderer;\n renderer.$isMousePressed = true;\n var self = this;\n var onMouseMove = function (e) {\n if (!e)\n return;\n if (useragent.isWebKit && !e.which && self.releaseMouse)\n return self.releaseMouse();\n self.x = e.clientX;\n self.y = e.clientY;\n mouseMoveHandler && mouseMoveHandler(e);\n self.mouseEvent = new MouseEvent(e, self.editor);\n self.$mouseMoved = true;\n };\n var onCaptureEnd = function (e) {\n editor.off(\"beforeEndOperation\", onOperationEnd);\n clearInterval(timerId);\n if (editor.session)\n onCaptureInterval();\n self[self.state + \"End\"] && self[self.state + \"End\"](e);\n self.state = \"\";\n self.isMousePressed = renderer.$isMousePressed = false;\n if (renderer.$keepTextAreaAtCursor)\n renderer.$moveTextAreaToCursor();\n self.$onCaptureMouseMove = self.releaseMouse = null;\n e && self.onMouseEvent(\"mouseup\", e);\n editor.endOperation();\n };\n var onCaptureInterval = function () {\n self[self.state] && self[self.state]();\n self.$mouseMoved = false;\n };\n if (useragent.isOldIE && ev.domEvent.type == \"dblclick\") {\n return setTimeout(function () { onCaptureEnd(ev); });\n }\n var onOperationEnd = function (e) {\n if (!self.releaseMouse)\n return;\n if (editor.curOp.command.name && editor.curOp.selectionChanged) {\n self[self.state + \"End\"] && self[self.state + \"End\"]();\n self.state = \"\";\n self.releaseMouse();\n }\n };\n editor.on(\"beforeEndOperation\", onOperationEnd);\n editor.startOperation({ command: { name: \"mouse\" } });\n self.$onCaptureMouseMove = onMouseMove;\n self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd);\n var timerId = setInterval(onCaptureInterval, 20);\n };\n this.releaseMouse = null;\n this.cancelContextMenu = function () {\n var stop = function (e) {\n if (e && e.domEvent && e.domEvent.type != \"contextmenu\")\n return;\n this.editor.off(\"nativecontextmenu\", stop);\n if (e && e.domEvent)\n event.stopEvent(e.domEvent);\n }.bind(this);\n setTimeout(stop, 10);\n this.editor.on(\"nativecontextmenu\", stop);\n };\n this.destroy = function () {\n if (this.releaseMouse)\n this.releaseMouse();\n };\n}).call(MouseHandler.prototype);\nconfig.defineOptions(MouseHandler.prototype, \"mouseHandler\", {\n scrollSpeed: { initialValue: 2 },\n dragDelay: { initialValue: (useragent.isMac ? 150 : 0) },\n dragEnabled: { initialValue: true },\n focusTimeout: { initialValue: 0 },\n tooltipFollowsMouse: { initialValue: true }\n});\nexports.MouseHandler = MouseHandler;\n\n});\n\nace.define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nfunction FoldHandler(editor) {\n editor.on(\"click\", function (e) {\n var position = e.getDocumentPosition();\n var session = editor.session;\n var fold = session.getFoldAt(position.row, position.column, 1);\n if (fold) {\n if (e.getAccelKey())\n session.removeFold(fold);\n else\n session.expandFold(fold);\n e.stop();\n }\n var target = e.domEvent && e.domEvent.target;\n if (target && dom.hasCssClass(target, \"ace_inline_button\")) {\n if (dom.hasCssClass(target, \"ace_toggle_wrap\")) {\n session.setOption(\"wrap\", !session.getUseWrapMode());\n editor.renderer.scrollCursorIntoView();\n }\n }\n });\n editor.on(\"gutterclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n if (session.foldWidgets && session.foldWidgets[row])\n editor.session.onFoldWidgetClick(row, e);\n if (!editor.isFocused())\n editor.focus();\n e.stop();\n }\n });\n editor.on(\"gutterdblclick\", function (e) {\n var gutterRegion = editor.renderer.$gutterLayer.getRegion(e);\n if (gutterRegion == \"foldWidgets\") {\n var row = e.getDocumentPosition().row;\n var session = editor.session;\n var data = session.getParentFoldRangeData(row, true);\n var range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = session.getFoldAt(row, session.getLine(row).length, 1);\n if (fold) {\n session.removeFold(fold);\n }\n else {\n session.addFold(\"...\", range);\n editor.renderer.scrollCursorIntoView({ row: range.start.row, column: 0 });\n }\n }\n e.stop();\n }\n });\n}\nexports.FoldHandler = FoldHandler;\n\n});\n\nace.define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar keyUtil = require(\"../lib/keys\");\nvar event = require(\"../lib/event\");\nvar KeyBinding = function (editor) {\n this.$editor = editor;\n this.$data = { editor: editor };\n this.$handlers = [];\n this.setDefaultHandler(editor.commands);\n};\n(function () {\n this.setDefaultHandler = function (kb) {\n this.removeKeyboardHandler(this.$defaultHandler);\n this.$defaultHandler = kb;\n this.addKeyboardHandler(kb, 0);\n };\n this.setKeyboardHandler = function (kb) {\n var h = this.$handlers;\n if (h[h.length - 1] == kb)\n return;\n while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler)\n this.removeKeyboardHandler(h[h.length - 1]);\n this.addKeyboardHandler(kb, 1);\n };\n this.addKeyboardHandler = function (kb, pos) {\n if (!kb)\n return;\n if (typeof kb == \"function\" && !kb.handleKeyboard)\n kb.handleKeyboard = kb;\n var i = this.$handlers.indexOf(kb);\n if (i != -1)\n this.$handlers.splice(i, 1);\n if (pos == undefined)\n this.$handlers.push(kb);\n else\n this.$handlers.splice(pos, 0, kb);\n if (i == -1 && kb.attach)\n kb.attach(this.$editor);\n };\n this.removeKeyboardHandler = function (kb) {\n var i = this.$handlers.indexOf(kb);\n if (i == -1)\n return false;\n this.$handlers.splice(i, 1);\n kb.detach && kb.detach(this.$editor);\n return true;\n };\n this.getKeyboardHandler = function () {\n return this.$handlers[this.$handlers.length - 1];\n };\n this.getStatusText = function () {\n var data = this.$data;\n var editor = data.editor;\n return this.$handlers.map(function (h) {\n return h.getStatusText && h.getStatusText(editor, data) || \"\";\n }).filter(Boolean).join(\" \");\n };\n this.$callKeyboardHandlers = function (hashId, keyString, keyCode, e) {\n var toExecute;\n var success = false;\n var commands = this.$editor.commands;\n for (var i = this.$handlers.length; i--;) {\n toExecute = this.$handlers[i].handleKeyboard(this.$data, hashId, keyString, keyCode, e);\n if (!toExecute || !toExecute.command)\n continue;\n if (toExecute.command == \"null\") {\n success = true;\n }\n else {\n success = commands.exec(toExecute.command, this.$editor, toExecute.args, e);\n }\n if (success && e && hashId != -1 &&\n toExecute.passEvent != true && toExecute.command.passEvent != true) {\n event.stopEvent(e);\n }\n if (success)\n break;\n }\n if (!success && hashId == -1) {\n toExecute = { command: \"insertstring\" };\n success = commands.exec(\"insertstring\", this.$editor, keyString);\n }\n if (success && this.$editor._signal)\n this.$editor._signal(\"keyboardActivity\", toExecute);\n return success;\n };\n this.onCommandKey = function (e, hashId, keyCode) {\n var keyString = keyUtil.keyCodeToString(keyCode);\n return this.$callKeyboardHandlers(hashId, keyString, keyCode, e);\n };\n this.onTextInput = function (text) {\n return this.$callKeyboardHandlers(-1, text);\n };\n}).call(KeyBinding.prototype);\nexports.KeyBinding = KeyBinding;\n\n});\n\nace.define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar ArabicAlefBetIntervalsBegine = ['\\u0621', '\\u0641'];\nvar ArabicAlefBetIntervalsEnd = ['\\u063A', '\\u064a'];\nvar dir = 0, hiLevel = 0;\nvar lastArabic = false, hasUBAT_AL = false, hasUBAT_B = false, hasUBAT_S = false, hasBlockSep = false, hasSegSep = false;\nvar impTab_LTR = [ [0, 3, 0, 1, 0, 0, 0], [0, 3, 0, 1, 2, 2, 0], [0, 3, 0, 0x11, 2, 0, 1], [0, 3, 5, 5, 4, 1, 0], [0, 3, 0x15, 0x15, 4, 0, 1], [0, 3, 5, 5, 4, 2, 0]\n];\nvar impTab_RTL = [ [2, 0, 1, 1, 0, 1, 0], [2, 0, 1, 1, 0, 2, 0], [2, 0, 2, 1, 3, 2, 0], [2, 0, 2, 0x21, 3, 1, 1]\n];\nvar LTR = 0, RTL = 1;\nvar L = 0;\nvar R = 1;\nvar EN = 2;\nvar AN = 3;\nvar ON = 4;\nvar B = 5;\nvar S = 6;\nvar AL = 7;\nvar WS = 8;\nvar CS = 9;\nvar ES = 10;\nvar ET = 11;\nvar NSM = 12;\nvar LRE = 13;\nvar RLE = 14;\nvar PDF = 15;\nvar LRO = 16;\nvar RLO = 17;\nvar BN = 18;\nvar UnicodeTBL00 = [\n BN, BN, BN, BN, BN, BN, BN, BN, BN, S, B, S, WS, B, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, B, B, B, S,\n WS, ON, ON, ET, ET, ET, ON, ON, ON, ON, ON, ES, CS, ES, CS, CS,\n EN, EN, EN, EN, EN, EN, EN, EN, EN, EN, CS, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, ON,\n ON, L, L, L, L, L, L, L, L, L, L, L, L, L, L, L,\n L, L, L, L, L, L, L, L, L, L, L, ON, ON, ON, ON, BN,\n BN, BN, BN, BN, BN, B, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN, BN,\n CS, ON, ET, ET, ET, ET, ON, ON, ON, ON, L, ON, ON, BN, ON, ON,\n ET, ET, EN, EN, ON, L, ON, ON, ON, EN, L, ON, ON, ON, ON, ON\n];\nvar UnicodeTBL20 = [\n WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, WS, BN, BN, BN, L, R,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, WS, B, LRE, RLE, PDF, LRO, RLO, CS,\n ET, ET, ET, ET, ET, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, CS, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON,\n ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, ON, WS\n];\nfunction _computeLevels(chars, levels, len, charTypes) {\n var impTab = dir ? impTab_RTL : impTab_LTR, prevState = null, newClass = null, newLevel = null, newState = 0, action = null, cond = null, condPos = -1, i = null, ix = null, classes = [];\n if (!charTypes) {\n for (i = 0, charTypes = []; i < len; i++) {\n charTypes[i] = _getCharacterType(chars[i]);\n }\n }\n hiLevel = dir;\n lastArabic = false;\n hasUBAT_AL = false;\n hasUBAT_B = false;\n hasUBAT_S = false;\n for (ix = 0; ix < len; ix++) {\n prevState = newState;\n classes[ix] = newClass = _getCharClass(chars, charTypes, classes, ix);\n newState = impTab[prevState][newClass];\n action = newState & 0xF0;\n newState &= 0x0F;\n levels[ix] = newLevel = impTab[newState][5];\n if (action > 0) {\n if (action == 0x10) {\n for (i = condPos; i < ix; i++) {\n levels[i] = 1;\n }\n condPos = -1;\n }\n else {\n condPos = -1;\n }\n }\n cond = impTab[newState][6];\n if (cond) {\n if (condPos == -1) {\n condPos = ix;\n }\n }\n else {\n if (condPos > -1) {\n for (i = condPos; i < ix; i++) {\n levels[i] = newLevel;\n }\n condPos = -1;\n }\n }\n if (charTypes[ix] == B) {\n levels[ix] = 0;\n }\n hiLevel |= newLevel;\n }\n if (hasUBAT_S) {\n for (i = 0; i < len; i++) {\n if (charTypes[i] == S) {\n levels[i] = dir;\n for (var j = i - 1; j >= 0; j--) {\n if (charTypes[j] == WS) {\n levels[j] = dir;\n }\n else {\n break;\n }\n }\n }\n }\n }\n}\nfunction _invertLevel(lev, levels, _array) {\n if (hiLevel < lev) {\n return;\n }\n if (lev == 1 && dir == RTL && !hasUBAT_B) {\n _array.reverse();\n return;\n }\n var len = _array.length, start = 0, end, lo, hi, tmp;\n while (start < len) {\n if (levels[start] >= lev) {\n end = start + 1;\n while (end < len && levels[end] >= lev) {\n end++;\n }\n for (lo = start, hi = end - 1; lo < hi; lo++, hi--) {\n tmp = _array[lo];\n _array[lo] = _array[hi];\n _array[hi] = tmp;\n }\n start = end;\n }\n start++;\n }\n}\nfunction _getCharClass(chars, types, classes, ix) {\n var cType = types[ix], wType, nType, len, i;\n switch (cType) {\n case L:\n case R:\n lastArabic = false;\n case ON:\n case AN:\n return cType;\n case EN:\n return lastArabic ? AN : EN;\n case AL:\n lastArabic = true;\n hasUBAT_AL = true;\n return R;\n case WS:\n return ON;\n case CS:\n if (ix < 1 || (ix + 1) >= types.length ||\n ((wType = classes[ix - 1]) != EN && wType != AN) ||\n ((nType = types[ix + 1]) != EN && nType != AN)) {\n return ON;\n }\n if (lastArabic) {\n nType = AN;\n }\n return nType == wType ? nType : ON;\n case ES:\n wType = ix > 0 ? classes[ix - 1] : B;\n if (wType == EN && (ix + 1) < types.length && types[ix + 1] == EN) {\n return EN;\n }\n return ON;\n case ET:\n if (ix > 0 && classes[ix - 1] == EN) {\n return EN;\n }\n if (lastArabic) {\n return ON;\n }\n i = ix + 1;\n len = types.length;\n while (i < len && types[i] == ET) {\n i++;\n }\n if (i < len && types[i] == EN) {\n return EN;\n }\n return ON;\n case NSM:\n len = types.length;\n i = ix + 1;\n while (i < len && types[i] == NSM) {\n i++;\n }\n if (i < len) {\n var c = chars[ix], rtlCandidate = (c >= 0x0591 && c <= 0x08FF) || c == 0xFB1E;\n wType = types[i];\n if (rtlCandidate && (wType == R || wType == AL)) {\n return R;\n }\n }\n if (ix < 1 || (wType = types[ix - 1]) == B) {\n return ON;\n }\n return classes[ix - 1];\n case B:\n lastArabic = false;\n hasUBAT_B = true;\n return dir;\n case S:\n hasUBAT_S = true;\n return ON;\n case LRE:\n case RLE:\n case LRO:\n case RLO:\n case PDF:\n lastArabic = false;\n case BN:\n return ON;\n }\n}\nfunction _getCharacterType(ch) {\n var uc = ch.charCodeAt(0), hi = uc >> 8;\n if (hi == 0) {\n return ((uc > 0x00BF) ? L : UnicodeTBL00[uc]);\n }\n else if (hi == 5) {\n return (/[\\u0591-\\u05f4]/.test(ch) ? R : L);\n }\n else if (hi == 6) {\n if (/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(ch))\n return NSM;\n else if (/[\\u0660-\\u0669\\u066b-\\u066c]/.test(ch))\n return AN;\n else if (uc == 0x066A)\n return ET;\n else if (/[\\u06f0-\\u06f9]/.test(ch))\n return EN;\n else\n return AL;\n }\n else if (hi == 0x20 && uc <= 0x205F) {\n return UnicodeTBL20[uc & 0xFF];\n }\n else if (hi == 0xFE) {\n return (uc >= 0xFE70 ? AL : ON);\n }\n return ON;\n}\nfunction _isArabicDiacritics(ch) {\n return (ch >= '\\u064b' && ch <= '\\u0655');\n}\nexports.L = L;\nexports.R = R;\nexports.EN = EN;\nexports.ON_R = 3;\nexports.AN = 4;\nexports.R_H = 5;\nexports.B = 6;\nexports.RLE = 7;\nexports.DOT = \"\\xB7\";\nexports.doBidiReorder = function (text, textCharTypes, isRtl) {\n if (text.length < 2)\n return {};\n var chars = text.split(\"\"), logicalFromVisual = new Array(chars.length), bidiLevels = new Array(chars.length), levels = [];\n dir = isRtl ? RTL : LTR;\n _computeLevels(chars, levels, chars.length, textCharTypes);\n for (var i = 0; i < logicalFromVisual.length; logicalFromVisual[i] = i, i++)\n ;\n _invertLevel(2, levels, logicalFromVisual);\n _invertLevel(1, levels, logicalFromVisual);\n for (var i = 0; i < logicalFromVisual.length - 1; i++) { //fix levels to reflect character width\n if (textCharTypes[i] === AN) {\n levels[i] = exports.AN;\n }\n else if (levels[i] === R && ((textCharTypes[i] > AL && textCharTypes[i] < LRE)\n || textCharTypes[i] === ON || textCharTypes[i] === BN)) {\n levels[i] = exports.ON_R;\n }\n else if ((i > 0 && chars[i - 1] === '\\u0644') && /\\u0622|\\u0623|\\u0625|\\u0627/.test(chars[i])) {\n levels[i - 1] = levels[i] = exports.R_H;\n i++;\n }\n }\n if (chars[chars.length - 1] === exports.DOT)\n levels[chars.length - 1] = exports.B;\n if (chars[0] === '\\u202B')\n levels[0] = exports.RLE;\n for (var i = 0; i < logicalFromVisual.length; i++) {\n bidiLevels[i] = levels[logicalFromVisual[i]];\n }\n return { 'logicalFromVisual': logicalFromVisual, 'bidiLevels': bidiLevels };\n};\nexports.hasBidiCharacters = function (text, textCharTypes) {\n var ret = false;\n for (var i = 0; i < text.length; i++) {\n textCharTypes[i] = _getCharacterType(text.charAt(i));\n if (!ret && (textCharTypes[i] == R || textCharTypes[i] == AL || textCharTypes[i] == AN))\n ret = true;\n }\n return ret;\n};\nexports.getVisualFromLogicalIdx = function (logIdx, rowMap) {\n for (var i = 0; i < rowMap.logicalFromVisual.length; i++) {\n if (rowMap.logicalFromVisual[i] == logIdx)\n return i;\n }\n return 0;\n};\n\n});\n\nace.define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar bidiUtil = require(\"./lib/bidiutil\");\nvar lang = require(\"./lib/lang\");\nvar bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/;\nvar BidiHandler = function (session) {\n this.session = session;\n this.bidiMap = {};\n this.currentRow = null;\n this.bidiUtil = bidiUtil;\n this.charWidths = [];\n this.EOL = \"\\xAC\";\n this.showInvisibles = true;\n this.isRtlDir = false;\n this.$isRtl = false;\n this.line = \"\";\n this.wrapIndent = 0;\n this.EOF = \"\\xB6\";\n this.RLE = \"\\u202B\";\n this.contentWidth = 0;\n this.fontMetrics = null;\n this.rtlLineOffset = 0;\n this.wrapOffset = 0;\n this.isMoveLeftOperation = false;\n this.seenBidi = bidiRE.test(session.getValue());\n};\n(function () {\n this.isBidiRow = function (screenRow, docRow, splitIndex) {\n if (!this.seenBidi)\n return false;\n if (screenRow !== this.currentRow) {\n this.currentRow = screenRow;\n this.updateRowLine(docRow, splitIndex);\n this.updateBidiMap();\n }\n return this.bidiMap.bidiLevels;\n };\n this.onChange = function (delta) {\n if (!this.seenBidi) {\n if (delta.action == \"insert\" && bidiRE.test(delta.lines.join(\"\\n\"))) {\n this.seenBidi = true;\n this.currentRow = null;\n }\n }\n else {\n this.currentRow = null;\n }\n };\n this.getDocumentRow = function () {\n var docRow = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var index = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n if (index >= 0)\n docRow = this.session.$docRowCache[index];\n }\n return docRow;\n };\n this.getSplitIndex = function () {\n var splitIndex = 0;\n var rowCache = this.session.$screenRowCache;\n if (rowCache.length) {\n var currentIndex, prevIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow);\n while (this.currentRow - splitIndex > 0) {\n currentIndex = this.session.$getRowCacheIndex(rowCache, this.currentRow - splitIndex - 1);\n if (currentIndex !== prevIndex)\n break;\n prevIndex = currentIndex;\n splitIndex++;\n }\n }\n else {\n splitIndex = this.currentRow;\n }\n return splitIndex;\n };\n this.updateRowLine = function (docRow, splitIndex) {\n if (docRow === undefined)\n docRow = this.getDocumentRow();\n var isLastRow = (docRow === this.session.getLength() - 1), endOfLine = isLastRow ? this.EOF : this.EOL;\n this.wrapIndent = 0;\n this.line = this.session.getLine(docRow);\n this.isRtlDir = this.$isRtl || this.line.charAt(0) === this.RLE;\n if (this.session.$useWrapMode) {\n var splits = this.session.$wrapData[docRow];\n if (splits) {\n if (splitIndex === undefined)\n splitIndex = this.getSplitIndex();\n if (splitIndex > 0 && splits.length) {\n this.wrapIndent = splits.indent;\n this.wrapOffset = this.wrapIndent * this.charWidths[bidiUtil.L];\n this.line = (splitIndex < splits.length) ?\n this.line.substring(splits[splitIndex - 1], splits[splitIndex]) :\n this.line.substring(splits[splits.length - 1]);\n }\n else {\n this.line = this.line.substring(0, splits[splitIndex]);\n }\n if (splitIndex == splits.length) {\n this.line += (this.showInvisibles) ? endOfLine : bidiUtil.DOT;\n }\n }\n }\n else {\n this.line += this.showInvisibles ? endOfLine : bidiUtil.DOT;\n }\n var session = this.session, shift = 0, size;\n this.line = this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g, function (ch, i) {\n if (ch === '\\t' || session.isFullWidth(ch.charCodeAt(0))) {\n size = (ch === '\\t') ? session.getScreenTabSize(i + shift) : 2;\n shift += size - 1;\n return lang.stringRepeat(bidiUtil.DOT, size);\n }\n return ch;\n });\n if (this.isRtlDir) {\n this.fontMetrics.$main.textContent = (this.line.charAt(this.line.length - 1) == bidiUtil.DOT) ? this.line.substr(0, this.line.length - 1) : this.line;\n this.rtlLineOffset = this.contentWidth - this.fontMetrics.$main.getBoundingClientRect().width;\n }\n };\n this.updateBidiMap = function () {\n var textCharTypes = [];\n if (bidiUtil.hasBidiCharacters(this.line, textCharTypes) || this.isRtlDir) {\n this.bidiMap = bidiUtil.doBidiReorder(this.line, textCharTypes, this.isRtlDir);\n }\n else {\n this.bidiMap = {};\n }\n };\n this.markAsDirty = function () {\n this.currentRow = null;\n };\n this.updateCharacterWidths = function (fontMetrics) {\n if (this.characterWidth === fontMetrics.$characterSize.width)\n return;\n this.fontMetrics = fontMetrics;\n var characterWidth = this.characterWidth = fontMetrics.$characterSize.width;\n var bidiCharWidth = fontMetrics.$measureCharWidth(\"\\u05d4\");\n this.charWidths[bidiUtil.L] = this.charWidths[bidiUtil.EN] = this.charWidths[bidiUtil.ON_R] = characterWidth;\n this.charWidths[bidiUtil.R] = this.charWidths[bidiUtil.AN] = bidiCharWidth;\n this.charWidths[bidiUtil.R_H] = bidiCharWidth * 0.45;\n this.charWidths[bidiUtil.B] = this.charWidths[bidiUtil.RLE] = 0;\n this.currentRow = null;\n };\n this.setShowInvisibles = function (showInvisibles) {\n this.showInvisibles = showInvisibles;\n this.currentRow = null;\n };\n this.setEolChar = function (eolChar) {\n this.EOL = eolChar;\n };\n this.setContentWidth = function (width) {\n this.contentWidth = width;\n };\n this.isRtlLine = function (row) {\n if (this.$isRtl)\n return true;\n if (row != undefined)\n return (this.session.getLine(row).charAt(0) == this.RLE);\n else\n return this.isRtlDir;\n };\n this.setRtlDirection = function (editor, isRtlDir) {\n var cursor = editor.getCursorPosition();\n for (var row = editor.selection.getSelectionAnchor().row; row <= cursor.row; row++) {\n if (!isRtlDir && editor.session.getLine(row).charAt(0) === editor.session.$bidiHandler.RLE)\n editor.session.doc.removeInLine(row, 0, 1);\n else if (isRtlDir && editor.session.getLine(row).charAt(0) !== editor.session.$bidiHandler.RLE)\n editor.session.doc.insert({ column: 0, row: row }, editor.session.$bidiHandler.RLE);\n }\n };\n this.getPosLeft = function (col) {\n col -= this.wrapIndent;\n var leftBoundary = (this.line.charAt(0) === this.RLE) ? 1 : 0;\n var logicalIdx = (col > leftBoundary) ? (this.session.getOverwrite() ? col : col - 1) : leftBoundary;\n var visualIdx = bidiUtil.getVisualFromLogicalIdx(logicalIdx, this.bidiMap), levels = this.bidiMap.bidiLevels, left = 0;\n if (!this.session.getOverwrite() && col <= leftBoundary && levels[visualIdx] % 2 !== 0)\n visualIdx++;\n for (var i = 0; i < visualIdx; i++) {\n left += this.charWidths[levels[i]];\n }\n if (!this.session.getOverwrite() && (col > leftBoundary) && (levels[visualIdx] % 2 === 0))\n left += this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n left += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n if (this.isRtlDir)\n left += this.rtlLineOffset;\n return left;\n };\n this.getSelections = function (startCol, endCol) {\n var map = this.bidiMap, levels = map.bidiLevels, level, selections = [], offset = 0, selColMin = Math.min(startCol, endCol) - this.wrapIndent, selColMax = Math.max(startCol, endCol) - this.wrapIndent, isSelected = false, isSelectedPrev = false, selectionStart = 0;\n if (this.wrapIndent)\n offset += this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n for (var logIdx, visIdx = 0; visIdx < levels.length; visIdx++) {\n logIdx = map.logicalFromVisual[visIdx];\n level = levels[visIdx];\n isSelected = (logIdx >= selColMin) && (logIdx < selColMax);\n if (isSelected && !isSelectedPrev) {\n selectionStart = offset;\n }\n else if (!isSelected && isSelectedPrev) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n offset += this.charWidths[level];\n isSelectedPrev = isSelected;\n }\n if (isSelected && (visIdx === levels.length)) {\n selections.push({ left: selectionStart, width: offset - selectionStart });\n }\n if (this.isRtlDir) {\n for (var i = 0; i < selections.length; i++) {\n selections[i].left += this.rtlLineOffset;\n }\n }\n return selections;\n };\n this.offsetToCol = function (posX) {\n if (this.isRtlDir)\n posX -= this.rtlLineOffset;\n var logicalIdx = 0, posX = Math.max(posX, 0), offset = 0, visualIdx = 0, levels = this.bidiMap.bidiLevels, charWidth = this.charWidths[levels[visualIdx]];\n if (this.wrapIndent)\n posX -= this.isRtlDir ? (-1 * this.wrapOffset) : this.wrapOffset;\n while (posX > offset + charWidth / 2) {\n offset += charWidth;\n if (visualIdx === levels.length - 1) {\n charWidth = 0;\n break;\n }\n charWidth = this.charWidths[levels[++visualIdx]];\n }\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && (levels[visualIdx] % 2 === 0)) {\n if (posX < offset)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n else if (visualIdx > 0 && (levels[visualIdx - 1] % 2 === 0) && (levels[visualIdx] % 2 !== 0)) {\n logicalIdx = 1 + ((posX > offset) ? this.bidiMap.logicalFromVisual[visualIdx]\n : this.bidiMap.logicalFromVisual[visualIdx - 1]);\n }\n else if ((this.isRtlDir && visualIdx === levels.length - 1 && charWidth === 0 && (levels[visualIdx - 1] % 2 === 0))\n || (!this.isRtlDir && visualIdx === 0 && (levels[visualIdx] % 2 !== 0))) {\n logicalIdx = 1 + this.bidiMap.logicalFromVisual[visualIdx];\n }\n else {\n if (visualIdx > 0 && (levels[visualIdx - 1] % 2 !== 0) && charWidth !== 0)\n visualIdx--;\n logicalIdx = this.bidiMap.logicalFromVisual[visualIdx];\n }\n if (logicalIdx === 0 && this.isRtlDir)\n logicalIdx++;\n return (logicalIdx + this.wrapIndent);\n };\n}).call(BidiHandler.prototype);\nexports.BidiHandler = BidiHandler;\n\n});\n\nace.define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Selection = function (session) {\n this.session = session;\n this.doc = session.getDocument();\n this.clearSelection();\n this.cursor = this.lead = this.doc.createAnchor(0, 0);\n this.anchor = this.doc.createAnchor(0, 0);\n this.$silent = false;\n var self = this;\n this.cursor.on(\"change\", function (e) {\n self.$cursorChanged = true;\n if (!self.$silent)\n self._emit(\"changeCursor\");\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column)\n self.$desiredColumn = null;\n });\n this.anchor.on(\"change\", function () {\n self.$anchorChanged = true;\n if (!self.$isEmpty && !self.$silent)\n self._emit(\"changeSelection\");\n });\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.isEmpty = function () {\n return this.$isEmpty || (this.anchor.row == this.lead.row &&\n this.anchor.column == this.lead.column);\n };\n this.isMultiLine = function () {\n return !this.$isEmpty && this.anchor.row != this.cursor.row;\n };\n this.getCursor = function () {\n return this.lead.getPosition();\n };\n this.setSelectionAnchor = function (row, column) {\n this.$isEmpty = false;\n this.anchor.setPosition(row, column);\n };\n this.getAnchor =\n this.getSelectionAnchor = function () {\n if (this.$isEmpty)\n return this.getSelectionLead();\n return this.anchor.getPosition();\n };\n this.getSelectionLead = function () {\n return this.lead.getPosition();\n };\n this.isBackwards = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column));\n };\n this.getRange = function () {\n var anchor = this.anchor;\n var lead = this.lead;\n if (this.$isEmpty)\n return Range.fromPoints(lead, lead);\n return this.isBackwards()\n ? Range.fromPoints(lead, anchor)\n : Range.fromPoints(anchor, lead);\n };\n this.clearSelection = function () {\n if (!this.$isEmpty) {\n this.$isEmpty = true;\n this._emit(\"changeSelection\");\n }\n };\n this.selectAll = function () {\n this.$setSelection(0, 0, Number.MAX_VALUE, Number.MAX_VALUE);\n };\n this.setRange =\n this.setSelectionRange = function (range, reverse) {\n var start = reverse ? range.end : range.start;\n var end = reverse ? range.start : range.end;\n this.$setSelection(start.row, start.column, end.row, end.column);\n };\n this.$setSelection = function (anchorRow, anchorColumn, cursorRow, cursorColumn) {\n if (this.$silent)\n return;\n var wasEmpty = this.$isEmpty;\n var wasMultiselect = this.inMultiSelectMode;\n this.$silent = true;\n this.$cursorChanged = this.$anchorChanged = false;\n this.anchor.setPosition(anchorRow, anchorColumn);\n this.cursor.setPosition(cursorRow, cursorColumn);\n this.$isEmpty = !Range.comparePoints(this.anchor, this.cursor);\n this.$silent = false;\n if (this.$cursorChanged)\n this._emit(\"changeCursor\");\n if (this.$cursorChanged || this.$anchorChanged || wasEmpty != this.$isEmpty || wasMultiselect)\n this._emit(\"changeSelection\");\n };\n this.$moveSelection = function (mover) {\n var lead = this.lead;\n if (this.$isEmpty)\n this.setSelectionAnchor(lead.row, lead.column);\n mover.call(this);\n };\n this.selectTo = function (row, column) {\n this.$moveSelection(function () {\n this.moveCursorTo(row, column);\n });\n };\n this.selectToPosition = function (pos) {\n this.$moveSelection(function () {\n this.moveCursorToPosition(pos);\n });\n };\n this.moveTo = function (row, column) {\n this.clearSelection();\n this.moveCursorTo(row, column);\n };\n this.moveToPosition = function (pos) {\n this.clearSelection();\n this.moveCursorToPosition(pos);\n };\n this.selectUp = function () {\n this.$moveSelection(this.moveCursorUp);\n };\n this.selectDown = function () {\n this.$moveSelection(this.moveCursorDown);\n };\n this.selectRight = function () {\n this.$moveSelection(this.moveCursorRight);\n };\n this.selectLeft = function () {\n this.$moveSelection(this.moveCursorLeft);\n };\n this.selectLineStart = function () {\n this.$moveSelection(this.moveCursorLineStart);\n };\n this.selectLineEnd = function () {\n this.$moveSelection(this.moveCursorLineEnd);\n };\n this.selectFileEnd = function () {\n this.$moveSelection(this.moveCursorFileEnd);\n };\n this.selectFileStart = function () {\n this.$moveSelection(this.moveCursorFileStart);\n };\n this.selectWordRight = function () {\n this.$moveSelection(this.moveCursorWordRight);\n };\n this.selectWordLeft = function () {\n this.$moveSelection(this.moveCursorWordLeft);\n };\n this.getWordRange = function (row, column) {\n if (typeof column == \"undefined\") {\n var cursor = row || this.lead;\n row = cursor.row;\n column = cursor.column;\n }\n return this.session.getWordRange(row, column);\n };\n this.selectWord = function () {\n this.setSelectionRange(this.getWordRange());\n };\n this.selectAWord = function () {\n var cursor = this.getCursor();\n var range = this.session.getAWordRange(cursor.row, cursor.column);\n this.setSelectionRange(range);\n };\n this.getLineRange = function (row, excludeLastChar) {\n var rowStart = typeof row == \"number\" ? row : this.lead.row;\n var rowEnd;\n var foldLine = this.session.getFoldLine(rowStart);\n if (foldLine) {\n rowStart = foldLine.start.row;\n rowEnd = foldLine.end.row;\n }\n else {\n rowEnd = rowStart;\n }\n if (excludeLastChar === true)\n return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length);\n else\n return new Range(rowStart, 0, rowEnd + 1, 0);\n };\n this.selectLine = function () {\n this.setSelectionRange(this.getLineRange());\n };\n this.moveCursorUp = function () {\n this.moveCursorBy(-1, 0);\n };\n this.moveCursorDown = function () {\n this.moveCursorBy(1, 0);\n };\n this.wouldMoveIntoSoftTab = function (cursor, tabSize, direction) {\n var start = cursor.column;\n var end = cursor.column + tabSize;\n if (direction < 0) {\n start = cursor.column - tabSize;\n end = cursor.column;\n }\n return this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(start, end).split(\" \").length - 1 == tabSize;\n };\n this.moveCursorLeft = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n }\n else if (cursor.column === 0) {\n if (cursor.row > 0) {\n this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, -1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, -tabSize);\n }\n else {\n this.moveCursorBy(0, -1);\n }\n }\n };\n this.moveCursorRight = function () {\n var cursor = this.lead.getPosition(), fold;\n if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n }\n else if (this.lead.column == this.doc.getLine(this.lead.row).length) {\n if (this.lead.row < this.doc.getLength() - 1) {\n this.moveCursorTo(this.lead.row + 1, 0);\n }\n }\n else {\n var tabSize = this.session.getTabSize();\n var cursor = this.lead;\n if (this.wouldMoveIntoSoftTab(cursor, tabSize, 1) && !this.session.getNavigateWithinSoftTabs()) {\n this.moveCursorBy(0, tabSize);\n }\n else {\n this.moveCursorBy(0, 1);\n }\n }\n };\n this.moveCursorLineStart = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var screenRow = this.session.documentToScreenRow(row, column);\n var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0);\n var beforeCursor = this.session.getDisplayLine(row, null, firstColumnPosition.row, firstColumnPosition.column);\n var leadingSpace = beforeCursor.match(/^\\s*/);\n if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart)\n firstColumnPosition.column += leadingSpace[0].length;\n this.moveCursorToPosition(firstColumnPosition);\n };\n this.moveCursorLineEnd = function () {\n var lead = this.lead;\n var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column);\n if (this.lead.column == lineEnd.column) {\n var line = this.session.getLine(lineEnd.row);\n if (lineEnd.column == line.length) {\n var textEnd = line.search(/\\s+$/);\n if (textEnd > 0)\n lineEnd.column = textEnd;\n }\n }\n this.moveCursorTo(lineEnd.row, lineEnd.column);\n };\n this.moveCursorFileEnd = function () {\n var row = this.doc.getLength() - 1;\n var column = this.doc.getLine(row).length;\n this.moveCursorTo(row, column);\n };\n this.moveCursorFileStart = function () {\n this.moveCursorTo(0, 0);\n };\n this.moveCursorLongWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n this.moveCursorTo(fold.end.row, fold.end.column);\n return;\n }\n if (this.session.nonTokenRe.exec(rightOfCursor)) {\n column += this.session.nonTokenRe.lastIndex;\n this.session.nonTokenRe.lastIndex = 0;\n rightOfCursor = line.substring(column);\n }\n if (column >= line.length) {\n this.moveCursorTo(row, line.length);\n this.moveCursorRight();\n if (row < this.doc.getLength() - 1)\n this.moveCursorWordRight();\n return;\n }\n if (this.session.tokenRe.exec(rightOfCursor)) {\n column += this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n this.moveCursorLongWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1)) {\n this.moveCursorTo(fold.start.row, fold.start.column);\n return;\n }\n var str = this.session.getFoldStringAt(row, column, -1);\n if (str == null) {\n str = this.doc.getLine(row).substring(0, column);\n }\n var leftOfCursor = lang.stringReverse(str);\n this.session.nonTokenRe.lastIndex = 0;\n this.session.tokenRe.lastIndex = 0;\n if (this.session.nonTokenRe.exec(leftOfCursor)) {\n column -= this.session.nonTokenRe.lastIndex;\n leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex);\n this.session.nonTokenRe.lastIndex = 0;\n }\n if (column <= 0) {\n this.moveCursorTo(row, 0);\n this.moveCursorLeft();\n if (row > 0)\n this.moveCursorWordLeft();\n return;\n }\n if (this.session.tokenRe.exec(leftOfCursor)) {\n column -= this.session.tokenRe.lastIndex;\n this.session.tokenRe.lastIndex = 0;\n }\n this.moveCursorTo(row, column);\n };\n this.$shortWordEndIndex = function (rightOfCursor) {\n var index = 0, ch;\n var whitespaceRe = /\\s/;\n var tokenRe = this.session.tokenRe;\n tokenRe.lastIndex = 0;\n if (this.session.tokenRe.exec(rightOfCursor)) {\n index = this.session.tokenRe.lastIndex;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index < 1) {\n tokenRe.lastIndex = 0;\n while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) {\n tokenRe.lastIndex = 0;\n index++;\n if (whitespaceRe.test(ch)) {\n if (index > 2) {\n index--;\n break;\n }\n else {\n while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch))\n index++;\n if (index > 2)\n break;\n }\n }\n }\n }\n }\n tokenRe.lastIndex = 0;\n return index;\n };\n this.moveCursorShortWordRight = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var line = this.doc.getLine(row);\n var rightOfCursor = line.substring(column);\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold)\n return this.moveCursorTo(fold.end.row, fold.end.column);\n if (column == line.length) {\n var l = this.doc.getLength();\n do {\n row++;\n rightOfCursor = this.doc.getLine(row);\n } while (row < l && /^\\s*$/.test(rightOfCursor));\n if (!/^\\s+/.test(rightOfCursor))\n rightOfCursor = \"\";\n column = 0;\n }\n var index = this.$shortWordEndIndex(rightOfCursor);\n this.moveCursorTo(row, column + index);\n };\n this.moveCursorShortWordLeft = function () {\n var row = this.lead.row;\n var column = this.lead.column;\n var fold;\n if (fold = this.session.getFoldAt(row, column, -1))\n return this.moveCursorTo(fold.start.row, fold.start.column);\n var line = this.session.getLine(row).substring(0, column);\n if (column === 0) {\n do {\n row--;\n line = this.doc.getLine(row);\n } while (row > 0 && /^\\s*$/.test(line));\n column = line.length;\n if (!/\\s+$/.test(line))\n line = \"\";\n }\n var leftOfCursor = lang.stringReverse(line);\n var index = this.$shortWordEndIndex(leftOfCursor);\n return this.moveCursorTo(row, column - index);\n };\n this.moveCursorWordRight = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordRight();\n else\n this.moveCursorShortWordRight();\n };\n this.moveCursorWordLeft = function () {\n if (this.session.$selectLongWords)\n this.moveCursorLongWordLeft();\n else\n this.moveCursorShortWordLeft();\n };\n this.moveCursorBy = function (rows, chars) {\n var screenPos = this.session.documentToScreenPosition(this.lead.row, this.lead.column);\n var offsetX;\n if (chars === 0) {\n if (rows !== 0) {\n if (this.session.$bidiHandler.isBidiRow(screenPos.row, this.lead.row)) {\n offsetX = this.session.$bidiHandler.getPosLeft(screenPos.column);\n screenPos.column = Math.round(offsetX / this.session.$bidiHandler.charWidths[0]);\n }\n else {\n offsetX = screenPos.column * this.session.$bidiHandler.charWidths[0];\n }\n }\n if (this.$desiredColumn)\n screenPos.column = this.$desiredColumn;\n else\n this.$desiredColumn = screenPos.column;\n }\n if (rows != 0 && this.session.lineWidgets && this.session.lineWidgets[this.lead.row]) {\n var widget = this.session.lineWidgets[this.lead.row];\n if (rows < 0)\n rows -= widget.rowsAbove || 0;\n else if (rows > 0)\n rows += widget.rowCount - (widget.rowsAbove || 0);\n }\n var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column, offsetX);\n if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) {\n }\n this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0);\n };\n this.moveCursorToPosition = function (position) {\n this.moveCursorTo(position.row, position.column);\n };\n this.moveCursorTo = function (row, column, keepDesiredColumn) {\n var fold = this.session.getFoldAt(row, column, 1);\n if (fold) {\n row = fold.start.row;\n column = fold.start.column;\n }\n this.$keepDesiredColumnOnChange = true;\n var line = this.session.getLine(row);\n if (/[\\uDC00-\\uDFFF]/.test(line.charAt(column)) && line.charAt(column - 1)) {\n if (this.lead.row == row && this.lead.column == column + 1)\n column = column - 1;\n else\n column = column + 1;\n }\n this.lead.setPosition(row, column);\n this.$keepDesiredColumnOnChange = false;\n if (!keepDesiredColumn)\n this.$desiredColumn = null;\n };\n this.moveCursorToScreen = function (row, column, keepDesiredColumn) {\n var pos = this.session.screenToDocumentPosition(row, column);\n this.moveCursorTo(pos.row, pos.column, keepDesiredColumn);\n };\n this.detach = function () {\n this.lead.detach();\n this.anchor.detach();\n };\n this.fromOrientedRange = function (range) {\n this.setSelectionRange(range, range.cursor == range.start);\n this.$desiredColumn = range.desiredColumn || this.$desiredColumn;\n };\n this.toOrientedRange = function (range) {\n var r = this.getRange();\n if (range) {\n range.start.column = r.start.column;\n range.start.row = r.start.row;\n range.end.column = r.end.column;\n range.end.row = r.end.row;\n }\n else {\n range = r;\n }\n range.cursor = this.isBackwards() ? range.start : range.end;\n range.desiredColumn = this.$desiredColumn;\n return range;\n };\n this.getRangeOfMovements = function (func) {\n var start = this.getCursor();\n try {\n func(this);\n var end = this.getCursor();\n return Range.fromPoints(start, end);\n }\n catch (e) {\n return Range.fromPoints(start, start);\n }\n finally {\n this.moveCursorToPosition(start);\n }\n };\n this.toJSON = function () {\n if (this.rangeCount) {\n var data = this.ranges.map(function (r) {\n var r1 = r.clone();\n r1.isBackwards = r.cursor == r.start;\n return r1;\n });\n }\n else {\n var data = this.getRange();\n data.isBackwards = this.isBackwards();\n }\n return data;\n };\n this.fromJSON = function (data) {\n if (data.start == undefined) {\n if (this.rangeList && data.length > 1) {\n this.toSingleRange(data[0]);\n for (var i = data.length; i--;) {\n var r = Range.fromPoints(data[i].start, data[i].end);\n if (data[i].isBackwards)\n r.cursor = r.start;\n this.addRange(r, true);\n }\n return;\n }\n else {\n data = data[0];\n }\n }\n if (this.rangeList)\n this.toSingleRange(data);\n this.setSelectionRange(data, data.isBackwards);\n };\n this.isEqual = function (data) {\n if ((data.length || this.rangeCount) && data.length != this.rangeCount)\n return false;\n if (!data.length || !this.ranges)\n return this.getRange().isEqual(data);\n for (var i = this.ranges.length; i--;) {\n if (!this.ranges[i].isEqual(data[i]))\n return false;\n }\n return true;\n };\n}).call(Selection.prototype);\nexports.Selection = Selection;\n\n});\n\nace.define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"], function(require, exports, module){\"use strict\";\nvar config = require(\"./config\");\nvar MAX_TOKEN_COUNT = 2000;\nvar Tokenizer = function (rules) {\n this.states = rules;\n this.regExps = {};\n this.matchMappings = {};\n for (var key in this.states) {\n var state = this.states[key];\n var ruleRegExps = [];\n var matchTotal = 0;\n var mapping = this.matchMappings[key] = { defaultToken: \"text\" };\n var flag = \"g\";\n var splitterRurles = [];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.defaultToken)\n mapping.defaultToken = rule.defaultToken;\n if (rule.caseInsensitive && flag.indexOf(\"i\") === -1)\n flag += \"i\";\n if (rule.unicode && flag.indexOf(\"u\") === -1)\n flag += \"u\";\n if (rule.regex == null)\n continue;\n if (rule.regex instanceof RegExp)\n rule.regex = rule.regex.toString().slice(1, -1);\n var adjustedregex = rule.regex;\n var matchcount = new RegExp(\"(?:(\" + adjustedregex + \")|(.))\").exec(\"a\").length - 2;\n if (Array.isArray(rule.token)) {\n if (rule.token.length == 1 || matchcount == 1) {\n rule.token = rule.token[0];\n }\n else if (matchcount - 1 != rule.token.length) {\n this.reportError(\"number of classes and regexp groups doesn't match\", {\n rule: rule,\n groupCount: matchcount - 1\n });\n rule.token = rule.token[0];\n }\n else {\n rule.tokenArray = rule.token;\n rule.token = null;\n rule.onMatch = this.$arrayTokens;\n }\n }\n else if (typeof rule.token == \"function\" && !rule.onMatch) {\n if (matchcount > 1)\n rule.onMatch = this.$applyToken;\n else\n rule.onMatch = rule.token;\n }\n if (matchcount > 1) {\n if (/\\\\\\d/.test(rule.regex)) {\n adjustedregex = rule.regex.replace(/\\\\([0-9]+)/g, function (match, digit) {\n return \"\\\\\" + (parseInt(digit, 10) + matchTotal + 1);\n });\n }\n else {\n matchcount = 1;\n adjustedregex = this.removeCapturingGroups(rule.regex);\n }\n if (!rule.splitRegex && typeof rule.token != \"string\")\n splitterRurles.push(rule); // flag will be known only at the very end\n }\n mapping[matchTotal] = i;\n matchTotal += matchcount;\n ruleRegExps.push(adjustedregex);\n if (!rule.onMatch)\n rule.onMatch = null;\n }\n if (!ruleRegExps.length) {\n mapping[0] = 0;\n ruleRegExps.push(\"$\");\n }\n splitterRurles.forEach(function (rule) {\n rule.splitRegex = this.createSplitterRegexp(rule.regex, flag);\n }, this);\n this.regExps[key] = new RegExp(\"(\" + ruleRegExps.join(\")|(\") + \")|($)\", flag);\n }\n};\n(function () {\n this.$setMaxTokenCount = function (m) {\n MAX_TOKEN_COUNT = m | 0;\n };\n this.$applyToken = function (str) {\n var values = this.splitRegex.exec(str).slice(1);\n var types = this.token.apply(this, values);\n if (typeof types === \"string\")\n return [{ type: types, value: str }];\n var tokens = [];\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i]\n };\n }\n return tokens;\n };\n this.$arrayTokens = function (str) {\n if (!str)\n return [];\n var values = this.splitRegex.exec(str);\n if (!values)\n return \"text\";\n var tokens = [];\n var types = this.tokenArray;\n for (var i = 0, l = types.length; i < l; i++) {\n if (values[i + 1])\n tokens[tokens.length] = {\n type: types[i],\n value: values[i + 1]\n };\n }\n return tokens;\n };\n this.removeCapturingGroups = function (src) {\n var r = src.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!<]|(\\()/g, function (x, y) { return y ? \"(?:\" : x; });\n return r;\n };\n this.createSplitterRegexp = function (src, flag) {\n if (src.indexOf(\"(?=\") != -1) {\n var stack = 0;\n var inChClass = false;\n var lastCapture = {};\n src.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g, function (m, esc, parenOpen, parenClose, square, index) {\n if (inChClass) {\n inChClass = square != \"]\";\n }\n else if (square) {\n inChClass = true;\n }\n else if (parenClose) {\n if (stack == lastCapture.stack) {\n lastCapture.end = index + 1;\n lastCapture.stack = -1;\n }\n stack--;\n }\n else if (parenOpen) {\n stack++;\n if (parenOpen.length != 1) {\n lastCapture.stack = stack;\n lastCapture.start = index;\n }\n }\n return m;\n });\n if (lastCapture.end != null && /^\\)*$/.test(src.substr(lastCapture.end)))\n src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end);\n }\n if (src.charAt(0) != \"^\")\n src = \"^\" + src;\n if (src.charAt(src.length - 1) != \"$\")\n src += \"$\";\n return new RegExp(src, (flag || \"\").replace(\"g\", \"\"));\n };\n this.getLineTokens = function (line, startState) {\n if (startState && typeof startState != \"string\") {\n var stack = startState.slice(0);\n startState = stack[0];\n if (startState === \"#tmp\") {\n stack.shift();\n startState = stack.shift();\n }\n }\n else\n var stack = [];\n var currentState = startState || \"start\";\n var state = this.states[currentState];\n if (!state) {\n currentState = \"start\";\n state = this.states[currentState];\n }\n var mapping = this.matchMappings[currentState];\n var re = this.regExps[currentState];\n re.lastIndex = 0;\n var match, tokens = [];\n var lastIndex = 0;\n var matchAttempts = 0;\n var token = { type: null, value: \"\" };\n while (match = re.exec(line)) {\n var type = mapping.defaultToken;\n var rule = null;\n var value = match[0];\n var index = re.lastIndex;\n if (index - value.length > lastIndex) {\n var skipped = line.substring(lastIndex, index - value.length);\n if (token.type == type) {\n token.value += skipped;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: skipped };\n }\n }\n for (var i = 0; i < match.length - 2; i++) {\n if (match[i + 1] === undefined)\n continue;\n rule = state[mapping[i]];\n if (rule.onMatch)\n type = rule.onMatch(value, currentState, stack, line);\n else\n type = rule.token;\n if (rule.next) {\n if (typeof rule.next == \"string\") {\n currentState = rule.next;\n }\n else {\n currentState = rule.next(currentState, stack);\n }\n state = this.states[currentState];\n if (!state) {\n this.reportError(\"state doesn't exist\", currentState);\n currentState = \"start\";\n state = this.states[currentState];\n }\n mapping = this.matchMappings[currentState];\n lastIndex = index;\n re = this.regExps[currentState];\n re.lastIndex = index;\n }\n if (rule.consumeLineEnd)\n lastIndex = index;\n break;\n }\n if (value) {\n if (typeof type === \"string\") {\n if ((!rule || rule.merge !== false) && token.type === type) {\n token.value += value;\n }\n else {\n if (token.type)\n tokens.push(token);\n token = { type: type, value: value };\n }\n }\n else if (type) {\n if (token.type)\n tokens.push(token);\n token = { type: null, value: \"\" };\n for (var i = 0; i < type.length; i++)\n tokens.push(type[i]);\n }\n }\n if (lastIndex == line.length)\n break;\n lastIndex = index;\n if (matchAttempts++ > MAX_TOKEN_COUNT) {\n if (matchAttempts > 2 * line.length) {\n this.reportError(\"infinite loop with in ace tokenizer\", {\n startState: startState,\n line: line\n });\n }\n while (lastIndex < line.length) {\n if (token.type)\n tokens.push(token);\n token = {\n value: line.substring(lastIndex, lastIndex += 500),\n type: \"overflow\"\n };\n }\n currentState = \"start\";\n stack = [];\n break;\n }\n }\n if (token.type)\n tokens.push(token);\n if (stack.length > 1) {\n if (stack[0] !== currentState)\n stack.unshift(\"#tmp\", currentState);\n }\n return {\n tokens: tokens,\n state: stack.length ? stack : currentState\n };\n };\n this.reportError = config.reportError;\n}).call(Tokenizer.prototype);\nexports.Tokenizer = Tokenizer;\n\n});\n\nace.define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar TextHighlightRules = function () {\n this.$rules = {\n \"start\": [{\n token: \"empty_line\",\n regex: '^$'\n }, {\n defaultToken: \"text\"\n }]\n };\n};\n(function () {\n this.addRules = function (rules, prefix) {\n if (!prefix) {\n for (var key in rules)\n this.$rules[key] = rules[key];\n return;\n }\n for (var key in rules) {\n var state = rules[key];\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n if (rule.next || rule.onMatch) {\n if (typeof rule.next == \"string\") {\n if (rule.next.indexOf(prefix) !== 0)\n rule.next = prefix + rule.next;\n }\n if (rule.nextState && rule.nextState.indexOf(prefix) !== 0)\n rule.nextState = prefix + rule.nextState;\n }\n }\n this.$rules[prefix + key] = state;\n }\n };\n this.getRules = function () {\n return this.$rules;\n };\n this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {\n var embedRules = typeof HighlightRules == \"function\"\n ? new HighlightRules().getRules()\n : HighlightRules;\n if (states) {\n for (var i = 0; i < states.length; i++)\n states[i] = prefix + states[i];\n }\n else {\n states = [];\n for (var key in embedRules)\n states.push(prefix + key);\n }\n this.addRules(embedRules, prefix);\n if (escapeRules) {\n var addRules = Array.prototype[append ? \"push\" : \"unshift\"];\n for (var i = 0; i < states.length; i++)\n addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules));\n }\n if (!this.$embeds)\n this.$embeds = [];\n this.$embeds.push(prefix);\n };\n this.getEmbeds = function () {\n return this.$embeds;\n };\n var pushState = function (currentState, stack) {\n if (currentState != \"start\" || stack.length)\n stack.unshift(this.nextState, currentState);\n return this.nextState;\n };\n var popState = function (currentState, stack) {\n stack.shift();\n return stack.shift() || \"start\";\n };\n this.normalizeRules = function () {\n var id = 0;\n var rules = this.$rules;\n function processState(key) {\n var state = rules[key];\n state.processed = true;\n for (var i = 0; i < state.length; i++) {\n var rule = state[i];\n var toInsert = null;\n if (Array.isArray(rule)) {\n toInsert = rule;\n rule = {};\n }\n if (!rule.regex && rule.start) {\n rule.regex = rule.start;\n if (!rule.next)\n rule.next = [];\n rule.next.push({\n defaultToken: rule.token\n }, {\n token: rule.token + \".end\",\n regex: rule.end || rule.start,\n next: \"pop\"\n });\n rule.token = rule.token + \".start\";\n rule.push = true;\n }\n var next = rule.next || rule.push;\n if (next && Array.isArray(next)) {\n var stateName = rule.stateName;\n if (!stateName) {\n stateName = rule.token;\n if (typeof stateName != \"string\")\n stateName = stateName[0] || \"\";\n if (rules[stateName])\n stateName += id++;\n }\n rules[stateName] = next;\n rule.next = stateName;\n processState(stateName);\n }\n else if (next == \"pop\") {\n rule.next = popState;\n }\n if (rule.push) {\n rule.nextState = rule.next || rule.push;\n rule.next = pushState;\n delete rule.push;\n }\n if (rule.rules) {\n for (var r in rule.rules) {\n if (rules[r]) {\n if (rules[r].push)\n rules[r].push.apply(rules[r], rule.rules[r]);\n }\n else {\n rules[r] = rule.rules[r];\n }\n }\n }\n var includeName = typeof rule == \"string\" ? rule : rule.include;\n if (includeName) {\n if (Array.isArray(includeName))\n toInsert = includeName.map(function (x) { return rules[x]; });\n else\n toInsert = rules[includeName];\n }\n if (toInsert) {\n var args = [i, 1].concat(toInsert);\n if (rule.noEscape)\n args = args.filter(function (x) { return !x.next; });\n state.splice.apply(state, args);\n i--;\n }\n if (rule.keywordMap) {\n rule.token = this.createKeywordMapper(rule.keywordMap, rule.defaultToken || \"text\", rule.caseInsensitive);\n delete rule.defaultToken;\n }\n }\n }\n Object.keys(rules).forEach(processState, this);\n };\n this.createKeywordMapper = function (map, defaultToken, ignoreCase, splitChar) {\n var keywords = Object.create(null);\n this.$keywordList = [];\n Object.keys(map).forEach(function (className) {\n var a = map[className];\n var list = a.split(splitChar || \"|\");\n for (var i = list.length; i--;) {\n var word = list[i];\n this.$keywordList.push(word);\n if (ignoreCase)\n word = word.toLowerCase();\n keywords[word] = className;\n }\n }, this);\n map = null;\n return ignoreCase\n ? function (value) { return keywords[value.toLowerCase()] || defaultToken; }\n : function (value) { return keywords[value] || defaultToken; };\n };\n this.getKeywords = function () {\n return this.$keywords;\n };\n}).call(TextHighlightRules.prototype);\nexports.TextHighlightRules = TextHighlightRules;\n\n});\n\nace.define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar Behaviour = function () {\n this.$behaviours = {};\n};\n(function () {\n this.add = function (name, action, callback) {\n switch (undefined) {\n case this.$behaviours:\n this.$behaviours = {};\n case this.$behaviours[name]:\n this.$behaviours[name] = {};\n }\n this.$behaviours[name][action] = callback;\n };\n this.addBehaviours = function (behaviours) {\n for (var key in behaviours) {\n for (var action in behaviours[key]) {\n this.add(key, action, behaviours[key][action]);\n }\n }\n };\n this.remove = function (name) {\n if (this.$behaviours && this.$behaviours[name]) {\n delete this.$behaviours[name];\n }\n };\n this.inherit = function (mode, filter) {\n if (typeof mode === \"function\") {\n var behaviours = new mode().getBehaviours(filter);\n }\n else {\n var behaviours = mode.getBehaviours(filter);\n }\n this.addBehaviours(behaviours);\n };\n this.getBehaviours = function (filter) {\n if (!filter) {\n return this.$behaviours;\n }\n else {\n var ret = {};\n for (var i = 0; i < filter.length; i++) {\n if (this.$behaviours[filter[i]]) {\n ret[filter[i]] = this.$behaviours[filter[i]];\n }\n }\n return ret;\n }\n };\n}).call(Behaviour.prototype);\nexports.Behaviour = Behaviour;\n\n});\n\nace.define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar TokenIterator = function (session, initialRow, initialColumn) {\n this.$session = session;\n this.$row = initialRow;\n this.$rowTokens = session.getTokens(initialRow);\n var token = session.getTokenAt(initialRow, initialColumn);\n this.$tokenIndex = token ? token.index : -1;\n};\n(function () {\n this.stepBackward = function () {\n this.$tokenIndex -= 1;\n while (this.$tokenIndex < 0) {\n this.$row -= 1;\n if (this.$row < 0) {\n this.$row = 0;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = this.$rowTokens.length - 1;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n this.stepForward = function () {\n this.$tokenIndex += 1;\n var rowCount;\n while (this.$tokenIndex >= this.$rowTokens.length) {\n this.$row += 1;\n if (!rowCount)\n rowCount = this.$session.getLength();\n if (this.$row >= rowCount) {\n this.$row = rowCount - 1;\n return null;\n }\n this.$rowTokens = this.$session.getTokens(this.$row);\n this.$tokenIndex = 0;\n }\n return this.$rowTokens[this.$tokenIndex];\n };\n this.getCurrentToken = function () {\n return this.$rowTokens[this.$tokenIndex];\n };\n this.getCurrentTokenRow = function () {\n return this.$row;\n };\n this.getCurrentTokenColumn = function () {\n var rowTokens = this.$rowTokens;\n var tokenIndex = this.$tokenIndex;\n var column = rowTokens[tokenIndex].start;\n if (column !== undefined)\n return column;\n column = 0;\n while (tokenIndex > 0) {\n tokenIndex -= 1;\n column += rowTokens[tokenIndex].value.length;\n }\n return column;\n };\n this.getCurrentTokenPosition = function () {\n return { row: this.$row, column: this.getCurrentTokenColumn() };\n };\n this.getCurrentTokenRange = function () {\n var token = this.$rowTokens[this.$tokenIndex];\n var column = this.getCurrentTokenColumn();\n return new Range(this.$row, column, this.$row, column + token.value.length);\n };\n}).call(TokenIterator.prototype);\nexports.TokenIterator = TokenIterator;\n\n});\n\nace.define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../../lib/oop\");\nvar Behaviour = require(\"../behaviour\").Behaviour;\nvar TokenIterator = require(\"../../token_iterator\").TokenIterator;\nvar lang = require(\"../../lib/lang\");\nvar SAFE_INSERT_IN_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\"];\nvar SAFE_INSERT_BEFORE_TOKENS = [\"text\", \"paren.rparen\", \"rparen\", \"paren\", \"punctuation.operator\", \"comment\"];\nvar context;\nvar contextCache = {};\nvar defaultQuotes = { '\"': '\"', \"'\": \"'\" };\nvar initContext = function (editor) {\n var id = -1;\n if (editor.multiSelect) {\n id = editor.selection.index;\n if (contextCache.rangeCount != editor.multiSelect.rangeCount)\n contextCache = { rangeCount: editor.multiSelect.rangeCount };\n }\n if (contextCache[id])\n return context = contextCache[id];\n context = contextCache[id] = {\n autoInsertedBrackets: 0,\n autoInsertedRow: -1,\n autoInsertedLineEnd: \"\",\n maybeInsertedBrackets: 0,\n maybeInsertedRow: -1,\n maybeInsertedLineStart: \"\",\n maybeInsertedLineEnd: \"\"\n };\n};\nvar getWrapped = function (selection, selected, opening, closing) {\n var rowDiff = selection.end.row - selection.start.row;\n return {\n text: opening + selected + closing,\n selection: [\n 0,\n selection.start.column + 1,\n rowDiff,\n selection.end.column + (rowDiff ? 0 : 1)\n ]\n };\n};\nvar CstyleBehaviour = function (options) {\n this.add(\"braces\", \"insertion\", function (state, action, editor, session, text) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (text == '{') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && selected !== \"{\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '{', '}');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n if (/[\\]\\}\\)]/.test(line[cursor.column]) || editor.inMultiSelectMode || options && options.braces) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"}\");\n return {\n text: '{}',\n selection: [1, 1]\n };\n }\n else {\n CstyleBehaviour.recordMaybeInsert(editor, session, \"{\");\n return {\n text: '{',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == '}') {\n initContext(editor);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == '}') {\n var matching = session.$findOpeningBracket('}', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n else if (text == \"\\n\" || text == \"\\r\\n\") {\n initContext(editor);\n var closing = \"\";\n if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {\n closing = lang.stringRepeat(\"}\", context.maybeInsertedBrackets);\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar === '}') {\n var openBracePos = session.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 }, '}');\n if (!openBracePos)\n return null;\n var next_indent = this.$getIndent(session.getLine(openBracePos.row));\n }\n else if (closing) {\n var next_indent = this.$getIndent(line);\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n return;\n }\n var indent = next_indent + session.getTabString();\n return {\n text: '\\n' + indent + '\\n' + next_indent + closing,\n selection: [1, indent.length, 1, indent.length]\n };\n }\n else {\n CstyleBehaviour.clearMaybeInsertedClosing();\n }\n });\n this.add(\"braces\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '{') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.end.column, range.end.column + 1);\n if (rightChar == '}') {\n range.end.column++;\n return range;\n }\n else {\n context.maybeInsertedBrackets--;\n }\n }\n });\n this.add(\"parens\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '(') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '(', ')');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \")\");\n return {\n text: '()',\n selection: [1, 1]\n };\n }\n }\n else if (text == ')') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ')') {\n var matching = session.$findOpeningBracket(')', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"parens\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '(') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ')') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"brackets\", \"insertion\", function (state, action, editor, session, text) {\n if (text == '[') {\n initContext(editor);\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, '[', ']');\n }\n else if (CstyleBehaviour.isSaneInsertion(editor, session)) {\n CstyleBehaviour.recordAutoInsert(editor, session, \"]\");\n return {\n text: '[]',\n selection: [1, 1]\n };\n }\n }\n else if (text == ']') {\n initContext(editor);\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n if (rightChar == ']') {\n var matching = session.$findOpeningBracket(']', { column: cursor.column + 1, row: cursor.row });\n if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {\n CstyleBehaviour.popAutoInsertedClosing();\n return {\n text: '',\n selection: [1, 1]\n };\n }\n }\n }\n });\n this.add(\"brackets\", \"deletion\", function (state, action, editor, session, range) {\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && selected == '[') {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == ']') {\n range.end.column++;\n return range;\n }\n }\n });\n this.add(\"string_dquotes\", \"insertion\", function (state, action, editor, session, text) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n if (text.length == 1 && quotes[text]) {\n if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1)\n return;\n initContext(editor);\n var quote = text;\n var selection = editor.getSelectionRange();\n var selected = session.doc.getTextRange(selection);\n if (selected !== \"\" && (selected.length != 1 || !quotes[selected]) && editor.getWrapBehavioursEnabled()) {\n return getWrapped(selection, selected, quote, quote);\n }\n else if (!selected) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n var leftChar = line.substring(cursor.column - 1, cursor.column);\n var rightChar = line.substring(cursor.column, cursor.column + 1);\n var token = session.getTokenAt(cursor.row, cursor.column);\n var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);\n if (leftChar == \"\\\\\" && token && /escape/.test(token.type))\n return null;\n var stringBefore = token && /string|escape/.test(token.type);\n var stringAfter = !rightToken || /string|escape/.test(rightToken.type);\n var pair;\n if (rightChar == quote) {\n pair = stringBefore !== stringAfter;\n if (pair && /string\\.end/.test(rightToken.type))\n pair = false;\n }\n else {\n if (stringBefore && !stringAfter)\n return null; // wrap string with different quote\n if (stringBefore && stringAfter)\n return null; // do not pair quotes inside strings\n var wordRe = session.$mode.tokenRe;\n wordRe.lastIndex = 0;\n var isWordBefore = wordRe.test(leftChar);\n wordRe.lastIndex = 0;\n var isWordAfter = wordRe.test(leftChar);\n if (isWordBefore || isWordAfter)\n return null; // before or after alphanumeric\n if (rightChar && !/[\\s;,.})\\]\\\\]/.test(rightChar))\n return null; // there is rightChar and it isn't closing\n var charBefore = line[cursor.column - 2];\n if (leftChar == quote && (charBefore == quote || wordRe.test(charBefore)))\n return null;\n pair = true;\n }\n return {\n text: pair ? quote + quote : \"\",\n selection: [1, 1]\n };\n }\n }\n });\n this.add(\"string_dquotes\", \"deletion\", function (state, action, editor, session, range) {\n var quotes = session.$mode.$quotes || defaultQuotes;\n var selected = session.doc.getTextRange(range);\n if (!range.isMultiLine() && quotes.hasOwnProperty(selected)) {\n initContext(editor);\n var line = session.doc.getLine(range.start.row);\n var rightChar = line.substring(range.start.column + 1, range.start.column + 2);\n if (rightChar == selected) {\n range.end.column++;\n return range;\n }\n }\n });\n};\nCstyleBehaviour.isSaneInsertion = function (editor, session) {\n var cursor = editor.getCursorPosition();\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n if (!this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS)) {\n if (/[)}\\]]/.test(editor.session.getLine(cursor.row)[cursor.column]))\n return true;\n var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);\n if (!this.$matchTokenType(iterator2.getCurrentToken() || \"text\", SAFE_INSERT_IN_TOKENS))\n return false;\n }\n iterator.stepForward();\n return iterator.getCurrentTokenRow() !== cursor.row ||\n this.$matchTokenType(iterator.getCurrentToken() || \"text\", SAFE_INSERT_BEFORE_TOKENS);\n};\nCstyleBehaviour.$matchTokenType = function (token, types) {\n return types.indexOf(token.type || token) > -1;\n};\nCstyleBehaviour.recordAutoInsert = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))\n context.autoInsertedBrackets = 0;\n context.autoInsertedRow = cursor.row;\n context.autoInsertedLineEnd = bracket + line.substr(cursor.column);\n context.autoInsertedBrackets++;\n};\nCstyleBehaviour.recordMaybeInsert = function (editor, session, bracket) {\n var cursor = editor.getCursorPosition();\n var line = session.doc.getLine(cursor.row);\n if (!this.isMaybeInsertedClosing(cursor, line))\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = cursor.row;\n context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;\n context.maybeInsertedLineEnd = line.substr(cursor.column);\n context.maybeInsertedBrackets++;\n};\nCstyleBehaviour.isAutoInsertedClosing = function (cursor, line, bracket) {\n return context.autoInsertedBrackets > 0 &&\n cursor.row === context.autoInsertedRow &&\n bracket === context.autoInsertedLineEnd[0] &&\n line.substr(cursor.column) === context.autoInsertedLineEnd;\n};\nCstyleBehaviour.isMaybeInsertedClosing = function (cursor, line) {\n return context.maybeInsertedBrackets > 0 &&\n cursor.row === context.maybeInsertedRow &&\n line.substr(cursor.column) === context.maybeInsertedLineEnd &&\n line.substr(0, cursor.column) == context.maybeInsertedLineStart;\n};\nCstyleBehaviour.popAutoInsertedClosing = function () {\n context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);\n context.autoInsertedBrackets--;\n};\nCstyleBehaviour.clearMaybeInsertedClosing = function () {\n if (context) {\n context.maybeInsertedBrackets = 0;\n context.maybeInsertedRow = -1;\n }\n};\noop.inherits(CstyleBehaviour, Behaviour);\nexports.CstyleBehaviour = CstyleBehaviour;\n\n});\n\nace.define(\"ace/unicode\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nvar wordChars = [48, 9, 8, 25, 5, 0, 2, 25, 48, 0, 11, 0, 5, 0, 6, 22, 2, 30, 2, 457, 5, 11, 15, 4, 8, 0, 2, 0, 18, 116, 2, 1, 3, 3, 9, 0, 2, 2, 2, 0, 2, 19, 2, 82, 2, 138, 2, 4, 3, 155, 12, 37, 3, 0, 8, 38, 10, 44, 2, 0, 2, 1, 2, 1, 2, 0, 9, 26, 6, 2, 30, 10, 7, 61, 2, 9, 5, 101, 2, 7, 3, 9, 2, 18, 3, 0, 17, 58, 3, 100, 15, 53, 5, 0, 6, 45, 211, 57, 3, 18, 2, 5, 3, 11, 3, 9, 2, 1, 7, 6, 2, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 0, 4, 3, 3, 8, 3, 1, 3, 3, 9, 0, 5, 1, 2, 4, 3, 11, 16, 2, 2, 5, 5, 1, 3, 21, 2, 6, 2, 1, 2, 1, 2, 1, 3, 0, 2, 4, 5, 1, 3, 2, 4, 0, 8, 3, 2, 0, 8, 15, 12, 2, 2, 8, 2, 2, 2, 21, 2, 6, 2, 1, 2, 4, 3, 9, 2, 2, 2, 2, 3, 0, 16, 3, 3, 9, 18, 2, 2, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 3, 8, 3, 1, 3, 2, 9, 1, 5, 1, 2, 4, 3, 9, 2, 0, 17, 1, 2, 5, 4, 2, 2, 3, 4, 1, 2, 0, 2, 1, 4, 1, 4, 2, 4, 11, 5, 4, 4, 2, 2, 3, 3, 0, 7, 0, 15, 9, 18, 2, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 4, 7, 2, 2, 2, 3, 8, 1, 2, 1, 7, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 9, 2, 4, 3, 8, 2, 2, 2, 3, 8, 1, 8, 0, 2, 3, 3, 9, 19, 1, 2, 7, 2, 2, 2, 22, 2, 15, 4, 7, 2, 2, 2, 3, 10, 0, 9, 3, 3, 9, 11, 5, 3, 1, 2, 17, 4, 23, 2, 8, 2, 0, 3, 6, 4, 0, 5, 5, 2, 0, 2, 7, 19, 1, 14, 57, 6, 14, 2, 9, 40, 1, 2, 0, 3, 1, 2, 0, 3, 0, 7, 3, 2, 6, 2, 2, 2, 0, 2, 0, 3, 1, 2, 12, 2, 2, 3, 4, 2, 0, 2, 5, 3, 9, 3, 1, 35, 0, 24, 1, 7, 9, 12, 0, 2, 0, 2, 0, 5, 9, 2, 35, 5, 19, 2, 5, 5, 7, 2, 35, 10, 0, 58, 73, 7, 77, 3, 37, 11, 42, 2, 0, 4, 328, 2, 3, 3, 6, 2, 0, 2, 3, 3, 40, 2, 3, 3, 32, 2, 3, 3, 6, 2, 0, 2, 3, 3, 14, 2, 56, 2, 3, 3, 66, 5, 0, 33, 15, 17, 84, 13, 619, 3, 16, 2, 25, 6, 74, 22, 12, 2, 6, 12, 20, 12, 19, 13, 12, 2, 2, 2, 1, 13, 51, 3, 29, 4, 0, 5, 1, 3, 9, 34, 2, 3, 9, 7, 87, 9, 42, 6, 69, 11, 28, 4, 11, 5, 11, 11, 39, 3, 4, 12, 43, 5, 25, 7, 10, 38, 27, 5, 62, 2, 28, 3, 10, 7, 9, 14, 0, 89, 75, 5, 9, 18, 8, 13, 42, 4, 11, 71, 55, 9, 9, 4, 48, 83, 2, 2, 30, 14, 230, 23, 280, 3, 5, 3, 37, 3, 5, 3, 7, 2, 0, 2, 0, 2, 0, 2, 30, 3, 52, 2, 6, 2, 0, 4, 2, 2, 6, 4, 3, 3, 5, 5, 12, 6, 2, 2, 6, 67, 1, 20, 0, 29, 0, 14, 0, 17, 4, 60, 12, 5, 0, 4, 11, 18, 0, 5, 0, 3, 9, 2, 0, 4, 4, 7, 0, 2, 0, 2, 0, 2, 3, 2, 10, 3, 3, 6, 4, 5, 0, 53, 1, 2684, 46, 2, 46, 2, 132, 7, 6, 15, 37, 11, 53, 10, 0, 17, 22, 10, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 6, 2, 31, 48, 0, 470, 1, 36, 5, 2, 4, 6, 1, 5, 85, 3, 1, 3, 2, 2, 89, 2, 3, 6, 40, 4, 93, 18, 23, 57, 15, 513, 6581, 75, 20939, 53, 1164, 68, 45, 3, 268, 4, 27, 21, 31, 3, 13, 13, 1, 2, 24, 9, 69, 11, 1, 38, 8, 3, 102, 3, 1, 111, 44, 25, 51, 13, 68, 12, 9, 7, 23, 4, 0, 5, 45, 3, 35, 13, 28, 4, 64, 15, 10, 39, 54, 10, 13, 3, 9, 7, 22, 4, 1, 5, 66, 25, 2, 227, 42, 2, 1, 3, 9, 7, 11171, 13, 22, 5, 48, 8453, 301, 3, 61, 3, 105, 39, 6, 13, 4, 6, 11, 2, 12, 2, 4, 2, 0, 2, 1, 2, 1, 2, 107, 34, 362, 19, 63, 3, 53, 41, 11, 5, 15, 17, 6, 13, 1, 25, 2, 33, 4, 2, 134, 20, 9, 8, 25, 5, 0, 2, 25, 12, 88, 4, 5, 3, 5, 3, 5, 3, 2];\nvar code = 0;\nvar str = [];\nfor (var i = 0; i < wordChars.length; i += 2) {\n str.push(code += wordChars[i]);\n if (wordChars[i + 1])\n str.push(45, code += wordChars[i + 1]);\n}\nexports.wordChars = String.fromCharCode.apply(null, str);\n\n});\n\nace.define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar config = require(\"../config\");\nvar Tokenizer = require(\"../tokenizer\").Tokenizer;\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\nvar CstyleBehaviour = require(\"./behaviour/cstyle\").CstyleBehaviour;\nvar unicode = require(\"../unicode\");\nvar lang = require(\"../lib/lang\");\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nvar Mode = function () {\n this.HighlightRules = TextHighlightRules;\n};\n(function () {\n this.$defaultBehaviour = new CstyleBehaviour();\n this.tokenRe = new RegExp(\"^[\" + unicode.wordChars + \"\\\\$_]+\", \"g\");\n this.nonTokenRe = new RegExp(\"^(?:[^\" + unicode.wordChars + \"\\\\$_]|\\\\s])+\", \"g\");\n this.getTokenizer = function () {\n if (!this.$tokenizer) {\n this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig);\n this.$tokenizer = new Tokenizer(this.$highlightRules.getRules());\n }\n return this.$tokenizer;\n };\n this.lineCommentStart = \"\";\n this.blockComment = \"\";\n this.toggleCommentLines = function (state, session, startRow, endRow) {\n var doc = session.doc;\n var ignoreBlankLines = true;\n var shouldRemove = true;\n var minIndent = Infinity;\n var tabSize = session.getTabSize();\n var insertAtTabStop = false;\n if (!this.lineCommentStart) {\n if (!this.blockComment)\n return false;\n var lineCommentStart = this.blockComment.start;\n var lineCommentEnd = this.blockComment.end;\n var regexpStart = new RegExp(\"^(\\\\s*)(?:\" + lang.escapeRegExp(lineCommentStart) + \")\");\n var regexpEnd = new RegExp(\"(?:\" + lang.escapeRegExp(lineCommentEnd) + \")\\\\s*$\");\n var comment = function (line, i) {\n if (testRemove(line, i))\n return;\n if (!ignoreBlankLines || /\\S/.test(line)) {\n doc.insertInLine({ row: i, column: line.length }, lineCommentEnd);\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var uncomment = function (line, i) {\n var m;\n if (m = line.match(regexpEnd))\n doc.removeInLine(i, line.length - m[0].length, line.length);\n if (m = line.match(regexpStart))\n doc.removeInLine(i, m[1].length, m[0].length);\n };\n var testRemove = function (line, row) {\n if (regexpStart.test(line))\n return true;\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n if (tokens[i].type === \"comment\")\n return true;\n }\n };\n }\n else {\n if (Array.isArray(this.lineCommentStart)) {\n var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join(\"|\");\n var lineCommentStart = this.lineCommentStart[0];\n }\n else {\n var regexpStart = lang.escapeRegExp(this.lineCommentStart);\n var lineCommentStart = this.lineCommentStart;\n }\n regexpStart = new RegExp(\"^(\\\\s*)(?:\" + regexpStart + \") ?\");\n insertAtTabStop = session.getUseSoftTabs();\n var uncomment = function (line, i) {\n var m = line.match(regexpStart);\n if (!m)\n return;\n var start = m[1].length, end = m[0].length;\n if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == \" \")\n end--;\n doc.removeInLine(i, start, end);\n };\n var commentWithSpace = lineCommentStart + \" \";\n var comment = function (line, i) {\n if (!ignoreBlankLines || /\\S/.test(line)) {\n if (shouldInsertSpace(line, minIndent, minIndent))\n doc.insertInLine({ row: i, column: minIndent }, commentWithSpace);\n else\n doc.insertInLine({ row: i, column: minIndent }, lineCommentStart);\n }\n };\n var testRemove = function (line, i) {\n return regexpStart.test(line);\n };\n var shouldInsertSpace = function (line, before, after) {\n var spaces = 0;\n while (before-- && line.charAt(before) == \" \")\n spaces++;\n if (spaces % tabSize != 0)\n return false;\n var spaces = 0;\n while (line.charAt(after++) == \" \")\n spaces++;\n if (tabSize > 2)\n return spaces % tabSize != tabSize - 1;\n else\n return spaces % tabSize == 0;\n };\n }\n function iter(fun) {\n for (var i = startRow; i <= endRow; i++)\n fun(doc.getLine(i), i);\n }\n var minEmptyLength = Infinity;\n iter(function (line, i) {\n var indent = line.search(/\\S/);\n if (indent !== -1) {\n if (indent < minIndent)\n minIndent = indent;\n if (shouldRemove && !testRemove(line, i))\n shouldRemove = false;\n }\n else if (minEmptyLength > line.length) {\n minEmptyLength = line.length;\n }\n });\n if (minIndent == Infinity) {\n minIndent = minEmptyLength;\n ignoreBlankLines = false;\n shouldRemove = false;\n }\n if (insertAtTabStop && minIndent % tabSize != 0)\n minIndent = Math.floor(minIndent / tabSize) * tabSize;\n iter(shouldRemove ? uncomment : comment);\n };\n this.toggleBlockComment = function (state, session, range, cursor) {\n var comment = this.blockComment;\n if (!comment)\n return;\n if (!comment.start && comment[0])\n comment = comment[0];\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n var sel = session.selection;\n var initialRange = session.selection.toOrientedRange();\n var startRow, colDiff;\n if (token && /comment/.test(token.type)) {\n var startRange, endRange;\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.start);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n startRange = new Range(row, column, row, column + comment.start.length);\n break;\n }\n token = iterator.stepBackward();\n }\n var iterator = new TokenIterator(session, cursor.row, cursor.column);\n var token = iterator.getCurrentToken();\n while (token && /comment/.test(token.type)) {\n var i = token.value.indexOf(comment.end);\n if (i != -1) {\n var row = iterator.getCurrentTokenRow();\n var column = iterator.getCurrentTokenColumn() + i;\n endRange = new Range(row, column, row, column + comment.end.length);\n break;\n }\n token = iterator.stepForward();\n }\n if (endRange)\n session.remove(endRange);\n if (startRange) {\n session.remove(startRange);\n startRow = startRange.start.row;\n colDiff = -comment.start.length;\n }\n }\n else {\n colDiff = comment.start.length;\n startRow = range.start.row;\n session.insert(range.end, comment.end);\n session.insert(range.start, comment.start);\n }\n if (initialRange.start.row == startRow)\n initialRange.start.column += colDiff;\n if (initialRange.end.row == startRow)\n initialRange.end.column += colDiff;\n session.selection.fromOrientedRange(initialRange);\n };\n this.getNextLineIndent = function (state, line, tab) {\n return this.$getIndent(line);\n };\n this.checkOutdent = function (state, line, input) {\n return false;\n };\n this.autoOutdent = function (state, doc, row) {\n };\n this.$getIndent = function (line) {\n return line.match(/^\\s*/)[0];\n };\n this.createWorker = function (session) {\n return null;\n };\n this.createModeDelegates = function (mapping) {\n this.$embeds = [];\n this.$modes = {};\n for (var i in mapping) {\n if (mapping[i]) {\n var Mode = mapping[i];\n var id = Mode.prototype.$id;\n var mode = config.$modes[id];\n if (!mode)\n config.$modes[id] = mode = new Mode();\n if (!config.$modes[i])\n config.$modes[i] = mode;\n this.$embeds.push(i);\n this.$modes[i] = mode;\n }\n }\n var delegations = [\"toggleBlockComment\", \"toggleCommentLines\", \"getNextLineIndent\",\n \"checkOutdent\", \"autoOutdent\", \"transformAction\", \"getCompletions\"];\n for (var i = 0; i < delegations.length; i++) {\n (function (scope) {\n var functionName = delegations[i];\n var defaultHandler = scope[functionName];\n scope[delegations[i]] = function () {\n return this.$delegator(functionName, arguments, defaultHandler);\n };\n }(this));\n }\n };\n this.$delegator = function (method, args, defaultHandler) {\n var state = args[0] || \"start\";\n if (typeof state != \"string\") {\n if (Array.isArray(state[2])) {\n var language = state[2][state[2].length - 1];\n var mode = this.$modes[language];\n if (mode)\n return mode[method].apply(mode, [state[1]].concat([].slice.call(args, 1)));\n }\n state = state[0] || \"start\";\n }\n for (var i = 0; i < this.$embeds.length; i++) {\n if (!this.$modes[this.$embeds[i]])\n continue;\n var split = state.split(this.$embeds[i]);\n if (!split[0] && split[1]) {\n args[0] = split[1];\n var mode = this.$modes[this.$embeds[i]];\n return mode[method].apply(mode, args);\n }\n }\n var ret = defaultHandler.apply(this, args);\n return defaultHandler ? ret : undefined;\n };\n this.transformAction = function (state, action, editor, session, param) {\n if (this.$behaviour) {\n var behaviours = this.$behaviour.getBehaviours();\n for (var key in behaviours) {\n if (behaviours[key][action]) {\n var ret = behaviours[key][action].apply(this, arguments);\n if (ret) {\n return ret;\n }\n }\n }\n }\n };\n this.getKeywords = function (append) {\n if (!this.completionKeywords) {\n var rules = this.$tokenizer.rules;\n var completionKeywords = [];\n for (var rule in rules) {\n var ruleItr = rules[rule];\n for (var r = 0, l = ruleItr.length; r < l; r++) {\n if (typeof ruleItr[r].token === \"string\") {\n if (/keyword|support|storage/.test(ruleItr[r].token))\n completionKeywords.push(ruleItr[r].regex);\n }\n else if (typeof ruleItr[r].token === \"object\") {\n for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) {\n if (/keyword|support|storage/.test(ruleItr[r].token[a])) {\n var rule = ruleItr[r].regex.match(/\\(.+?\\)/g)[a];\n completionKeywords.push(rule.substr(1, rule.length - 2));\n }\n }\n }\n }\n }\n this.completionKeywords = completionKeywords;\n }\n if (!append)\n return this.$keywordList;\n return completionKeywords.concat(this.$keywordList || []);\n };\n this.$createKeywordList = function () {\n if (!this.$highlightRules)\n this.getTokenizer();\n return this.$keywordList = this.$highlightRules.$keywordList || [];\n };\n this.getCompletions = function (state, session, pos, prefix) {\n var keywords = this.$keywordList || this.$createKeywordList();\n return keywords.map(function (word) {\n return {\n name: word,\n value: word,\n score: 0,\n meta: \"keyword\"\n };\n });\n };\n this.$id = \"ace/mode/text\";\n}).call(Mode.prototype);\nexports.Mode = Mode;\n\n});\n\nace.define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"], function(require, exports, module){\"use strict\";\nfunction throwDeltaError(delta, errorText) {\n console.log(\"Invalid Delta:\", delta);\n throw \"Invalid Delta: \" + errorText;\n}\nfunction positionInDocument(docLines, position) {\n return position.row >= 0 && position.row < docLines.length &&\n position.column >= 0 && position.column <= docLines[position.row].length;\n}\nfunction validateDelta(docLines, delta) {\n if (delta.action != \"insert\" && delta.action != \"remove\")\n throwDeltaError(delta, \"delta.action must be 'insert' or 'remove'\");\n if (!(delta.lines instanceof Array))\n throwDeltaError(delta, \"delta.lines must be an Array\");\n if (!delta.start || !delta.end)\n throwDeltaError(delta, \"delta.start/end must be an present\");\n var start = delta.start;\n if (!positionInDocument(docLines, delta.start))\n throwDeltaError(delta, \"delta.start must be contained in document\");\n var end = delta.end;\n if (delta.action == \"remove\" && !positionInDocument(docLines, end))\n throwDeltaError(delta, \"delta.end must contained in document for 'remove' actions\");\n var numRangeRows = end.row - start.row;\n var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0));\n if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars)\n throwDeltaError(delta, \"delta.range must match delta lines\");\n}\nexports.applyDelta = function (docLines, delta, doNotValidate) {\n var row = delta.start.row;\n var startColumn = delta.start.column;\n var line = docLines[row] || \"\";\n switch (delta.action) {\n case \"insert\":\n var lines = delta.lines;\n if (lines.length === 1) {\n docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn);\n }\n else {\n var args = [row, 1].concat(delta.lines);\n docLines.splice.apply(docLines, args);\n docLines[row] = line.substring(0, startColumn) + docLines[row];\n docLines[row + delta.lines.length - 1] += line.substring(startColumn);\n }\n break;\n case \"remove\":\n var endColumn = delta.end.column;\n var endRow = delta.end.row;\n if (row === endRow) {\n docLines[row] = line.substring(0, startColumn) + line.substring(endColumn);\n }\n else {\n docLines.splice(row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn));\n }\n break;\n }\n};\n\n});\n\nace.define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Anchor = exports.Anchor = function (doc, row, column) {\n this.$onChange = this.onChange.bind(this);\n this.attach(doc);\n if (typeof column == \"undefined\")\n this.setPosition(row.row, row.column);\n else\n this.setPosition(row, column);\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.getPosition = function () {\n return this.$clipPositionToDocument(this.row, this.column);\n };\n this.getDocument = function () {\n return this.document;\n };\n this.$insertRight = false;\n this.onChange = function (delta) {\n if (delta.start.row == delta.end.row && delta.start.row != this.row)\n return;\n if (delta.start.row > this.row)\n return;\n var point = $getTransformedPoint(delta, { row: this.row, column: this.column }, this.$insertRight);\n this.setPosition(point.row, point.column, true);\n };\n function $pointsInOrder(point1, point2, equalPointsInOrder) {\n var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column;\n return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter);\n }\n function $getTransformedPoint(delta, point, moveIfEqual) {\n var deltaIsInsert = delta.action == \"insert\";\n var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row);\n var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column);\n var deltaStart = delta.start;\n var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range.\n if ($pointsInOrder(point, deltaStart, moveIfEqual)) {\n return {\n row: point.row,\n column: point.column\n };\n }\n if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) {\n return {\n row: point.row + deltaRowShift,\n column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0)\n };\n }\n return {\n row: deltaStart.row,\n column: deltaStart.column\n };\n }\n this.setPosition = function (row, column, noClip) {\n var pos;\n if (noClip) {\n pos = {\n row: row,\n column: column\n };\n }\n else {\n pos = this.$clipPositionToDocument(row, column);\n }\n if (this.row == pos.row && this.column == pos.column)\n return;\n var old = {\n row: this.row,\n column: this.column\n };\n this.row = pos.row;\n this.column = pos.column;\n this._signal(\"change\", {\n old: old,\n value: pos\n });\n };\n this.detach = function () {\n this.document.off(\"change\", this.$onChange);\n };\n this.attach = function (doc) {\n this.document = doc || this.document;\n this.document.on(\"change\", this.$onChange);\n };\n this.$clipPositionToDocument = function (row, column) {\n var pos = {};\n if (row >= this.document.getLength()) {\n pos.row = Math.max(0, this.document.getLength() - 1);\n pos.column = this.document.getLine(pos.row).length;\n }\n else if (row < 0) {\n pos.row = 0;\n pos.column = 0;\n }\n else {\n pos.row = row;\n pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column));\n }\n if (column < 0)\n pos.column = 0;\n return pos;\n };\n}).call(Anchor.prototype);\n\n});\n\nace.define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar applyDelta = require(\"./apply_delta\").applyDelta;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Range = require(\"./range\").Range;\nvar Anchor = require(\"./anchor\").Anchor;\nvar Document = function (textOrLines) {\n this.$lines = [\"\"];\n if (textOrLines.length === 0) {\n this.$lines = [\"\"];\n }\n else if (Array.isArray(textOrLines)) {\n this.insertMergedLines({ row: 0, column: 0 }, textOrLines);\n }\n else {\n this.insert({ row: 0, column: 0 }, textOrLines);\n }\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.setValue = function (text) {\n var len = this.getLength() - 1;\n this.remove(new Range(0, 0, len, this.getLine(len).length));\n this.insert({ row: 0, column: 0 }, text || \"\");\n };\n this.getValue = function () {\n return this.getAllLines().join(this.getNewLineCharacter());\n };\n this.createAnchor = function (row, column) {\n return new Anchor(this, row, column);\n };\n if (\"aaa\".split(/a/).length === 0) {\n this.$split = function (text) {\n return text.replace(/\\r\\n|\\r/g, \"\\n\").split(\"\\n\");\n };\n }\n else {\n this.$split = function (text) {\n return text.split(/\\r\\n|\\r|\\n/);\n };\n }\n this.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r\\n|\\r|\\n)/m);\n this.$autoNewLine = match ? match[1] : \"\\n\";\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineCharacter = function () {\n switch (this.$newLineMode) {\n case \"windows\":\n return \"\\r\\n\";\n case \"unix\":\n return \"\\n\";\n default:\n return this.$autoNewLine || \"\\n\";\n }\n };\n this.$autoNewLine = \"\";\n this.$newLineMode = \"auto\";\n this.setNewLineMode = function (newLineMode) {\n if (this.$newLineMode === newLineMode)\n return;\n this.$newLineMode = newLineMode;\n this._signal(\"changeNewLineMode\");\n };\n this.getNewLineMode = function () {\n return this.$newLineMode;\n };\n this.isNewLine = function (text) {\n return (text == \"\\r\\n\" || text == \"\\r\" || text == \"\\n\");\n };\n this.getLine = function (row) {\n return this.$lines[row] || \"\";\n };\n this.getLines = function (firstRow, lastRow) {\n return this.$lines.slice(firstRow, lastRow + 1);\n };\n this.getAllLines = function () {\n return this.getLines(0, this.getLength());\n };\n this.getLength = function () {\n return this.$lines.length;\n };\n this.getTextRange = function (range) {\n return this.getLinesForRange(range).join(this.getNewLineCharacter());\n };\n this.getLinesForRange = function (range) {\n var lines;\n if (range.start.row === range.end.row) {\n lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)];\n }\n else {\n lines = this.getLines(range.start.row, range.end.row);\n lines[0] = (lines[0] || \"\").substring(range.start.column);\n var l = lines.length - 1;\n if (range.end.row - range.start.row == l)\n lines[l] = lines[l].substring(0, range.end.column);\n }\n return lines;\n };\n this.insertLines = function (row, lines) {\n console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\");\n return this.insertFullLines(row, lines);\n };\n this.removeLines = function (firstRow, lastRow) {\n console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\");\n return this.removeFullLines(firstRow, lastRow);\n };\n this.insertNewLine = function (position) {\n console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\");\n return this.insertMergedLines(position, [\"\", \"\"]);\n };\n this.insert = function (position, text) {\n if (this.getLength() <= 1)\n this.$detectNewLine(text);\n return this.insertMergedLines(position, this.$split(text));\n };\n this.insertInLine = function (position, text) {\n var start = this.clippedPos(position.row, position.column);\n var end = this.pos(position.row, position.column + text.length);\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: [text]\n }, true);\n return this.clonePos(end);\n };\n this.clippedPos = function (row, column) {\n var length = this.getLength();\n if (row === undefined) {\n row = length;\n }\n else if (row < 0) {\n row = 0;\n }\n else if (row >= length) {\n row = length - 1;\n column = undefined;\n }\n var line = this.getLine(row);\n if (column == undefined)\n column = line.length;\n column = Math.min(Math.max(column, 0), line.length);\n return { row: row, column: column };\n };\n this.clonePos = function (pos) {\n return { row: pos.row, column: pos.column };\n };\n this.pos = function (row, column) {\n return { row: row, column: column };\n };\n this.$clipPosition = function (position) {\n var length = this.getLength();\n if (position.row >= length) {\n position.row = Math.max(0, length - 1);\n position.column = this.getLine(length - 1).length;\n }\n else {\n position.row = Math.max(0, position.row);\n position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length);\n }\n return position;\n };\n this.insertFullLines = function (row, lines) {\n row = Math.min(Math.max(row, 0), this.getLength());\n var column = 0;\n if (row < this.getLength()) {\n lines = lines.concat([\"\"]);\n column = 0;\n }\n else {\n lines = [\"\"].concat(lines);\n row--;\n column = this.$lines[row].length;\n }\n this.insertMergedLines({ row: row, column: column }, lines);\n };\n this.insertMergedLines = function (position, lines) {\n var start = this.clippedPos(position.row, position.column);\n var end = {\n row: start.row + lines.length - 1,\n column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length\n };\n this.applyDelta({\n start: start,\n end: end,\n action: \"insert\",\n lines: lines\n });\n return this.clonePos(end);\n };\n this.remove = function (range) {\n var start = this.clippedPos(range.start.row, range.start.column);\n var end = this.clippedPos(range.end.row, range.end.column);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n });\n return this.clonePos(start);\n };\n this.removeInLine = function (row, startColumn, endColumn) {\n var start = this.clippedPos(row, startColumn);\n var end = this.clippedPos(row, endColumn);\n this.applyDelta({\n start: start,\n end: end,\n action: \"remove\",\n lines: this.getLinesForRange({ start: start, end: end })\n }, true);\n return this.clonePos(start);\n };\n this.removeFullLines = function (firstRow, lastRow) {\n firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1);\n lastRow = Math.min(Math.max(0, lastRow), this.getLength() - 1);\n var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0;\n var deleteLastNewLine = lastRow < this.getLength() - 1;\n var startRow = (deleteFirstNewLine ? firstRow - 1 : firstRow);\n var startCol = (deleteFirstNewLine ? this.getLine(startRow).length : 0);\n var endRow = (deleteLastNewLine ? lastRow + 1 : lastRow);\n var endCol = (deleteLastNewLine ? 0 : this.getLine(endRow).length);\n var range = new Range(startRow, startCol, endRow, endCol);\n var deletedLines = this.$lines.slice(firstRow, lastRow + 1);\n this.applyDelta({\n start: range.start,\n end: range.end,\n action: \"remove\",\n lines: this.getLinesForRange(range)\n });\n return deletedLines;\n };\n this.removeNewLine = function (row) {\n if (row < this.getLength() - 1 && row >= 0) {\n this.applyDelta({\n start: this.pos(row, this.getLine(row).length),\n end: this.pos(row + 1, 0),\n action: \"remove\",\n lines: [\"\", \"\"]\n });\n }\n };\n this.replace = function (range, text) {\n if (!(range instanceof Range))\n range = Range.fromPoints(range.start, range.end);\n if (text.length === 0 && range.isEmpty())\n return range.start;\n if (text == this.getTextRange(range))\n return range.end;\n this.remove(range);\n var end;\n if (text) {\n end = this.insert(range.start, text);\n }\n else {\n end = range.start;\n }\n return end;\n };\n this.applyDeltas = function (deltas) {\n for (var i = 0; i < deltas.length; i++) {\n this.applyDelta(deltas[i]);\n }\n };\n this.revertDeltas = function (deltas) {\n for (var i = deltas.length - 1; i >= 0; i--) {\n this.revertDelta(deltas[i]);\n }\n };\n this.applyDelta = function (delta, doNotValidate) {\n var isInsert = delta.action == \"insert\";\n if (isInsert ? delta.lines.length <= 1 && !delta.lines[0]\n : !Range.comparePoints(delta.start, delta.end)) {\n return;\n }\n if (isInsert && delta.lines.length > 20000) {\n this.$splitAndapplyLargeDelta(delta, 20000);\n }\n else {\n applyDelta(this.$lines, delta, doNotValidate);\n this._signal(\"change\", delta);\n }\n };\n this.$safeApplyDelta = function (delta) {\n var docLength = this.$lines.length;\n if (delta.action == \"remove\" && delta.start.row < docLength && delta.end.row < docLength\n || delta.action == \"insert\" && delta.start.row <= docLength) {\n this.applyDelta(delta);\n }\n };\n this.$splitAndapplyLargeDelta = function (delta, MAX) {\n var lines = delta.lines;\n var l = lines.length - MAX + 1;\n var row = delta.start.row;\n var column = delta.start.column;\n for (var from = 0, to = 0; from < l; from = to) {\n to += MAX - 1;\n var chunk = lines.slice(from, to);\n chunk.push(\"\");\n this.applyDelta({\n start: this.pos(row + from, column),\n end: this.pos(row + to, column = 0),\n action: delta.action,\n lines: chunk\n }, true);\n }\n delta.lines = lines.slice(from);\n delta.start.row = row + from;\n delta.start.column = column;\n this.applyDelta(delta, true);\n };\n this.revertDelta = function (delta) {\n this.$safeApplyDelta({\n start: this.clonePos(delta.start),\n end: this.clonePos(delta.end),\n action: (delta.action == \"insert\" ? \"remove\" : \"insert\"),\n lines: delta.lines.slice()\n });\n };\n this.indexToPosition = function (index, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n for (var i = startRow || 0, l = lines.length; i < l; i++) {\n index -= lines[i].length + newlineLength;\n if (index < 0)\n return { row: i, column: index + lines[i].length + newlineLength };\n }\n return { row: l - 1, column: index + lines[l - 1].length + newlineLength };\n };\n this.positionToIndex = function (pos, startRow) {\n var lines = this.$lines || this.getAllLines();\n var newlineLength = this.getNewLineCharacter().length;\n var index = 0;\n var row = Math.min(pos.row, lines.length);\n for (var i = startRow || 0; i < row; ++i)\n index += lines[i].length + newlineLength;\n return index + pos.column;\n };\n}).call(Document.prototype);\nexports.Document = Document;\n\n});\n\nace.define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar BackgroundTokenizer = function (tokenizer, editor) {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.tokenizer = tokenizer;\n var self = this;\n this.$worker = function () {\n if (!self.running) {\n return;\n }\n var workerStart = new Date();\n var currentLine = self.currentLine;\n var endLine = -1;\n var doc = self.doc;\n var startLine = currentLine;\n while (self.lines[currentLine])\n currentLine++;\n var len = doc.getLength();\n var processedLines = 0;\n self.running = false;\n while (currentLine < len) {\n self.$tokenizeRow(currentLine);\n endLine = currentLine;\n do {\n currentLine++;\n } while (self.lines[currentLine]);\n processedLines++;\n if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) {\n self.running = setTimeout(self.$worker, 20);\n break;\n }\n }\n self.currentLine = currentLine;\n if (endLine == -1)\n endLine = currentLine;\n if (startLine <= endLine)\n self.fireUpdateEvent(startLine, endLine);\n };\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.setTokenizer = function (tokenizer) {\n this.tokenizer = tokenizer;\n this.lines = [];\n this.states = [];\n this.start(0);\n };\n this.setDocument = function (doc) {\n this.doc = doc;\n this.lines = [];\n this.states = [];\n this.stop();\n };\n this.fireUpdateEvent = function (firstRow, lastRow) {\n var data = {\n first: firstRow,\n last: lastRow\n };\n this._signal(\"update\", { data: data });\n };\n this.start = function (startRow) {\n this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength());\n this.lines.splice(this.currentLine, this.lines.length);\n this.states.splice(this.currentLine, this.states.length);\n this.stop();\n this.running = setTimeout(this.$worker, 700);\n };\n this.scheduleStart = function () {\n if (!this.running)\n this.running = setTimeout(this.$worker, 700);\n };\n this.$updateOnChange = function (delta) {\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n this.lines[startRow] = null;\n }\n else if (delta.action == \"remove\") {\n this.lines.splice(startRow, len + 1, null);\n this.states.splice(startRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(startRow, 1);\n this.lines.splice.apply(this.lines, args);\n this.states.splice.apply(this.states, args);\n }\n this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength());\n this.stop();\n };\n this.stop = function () {\n if (this.running)\n clearTimeout(this.running);\n this.running = false;\n };\n this.getTokens = function (row) {\n return this.lines[row] || this.$tokenizeRow(row);\n };\n this.getState = function (row) {\n if (this.currentLine == row)\n this.$tokenizeRow(row);\n return this.states[row] || \"start\";\n };\n this.$tokenizeRow = function (row) {\n var line = this.doc.getLine(row);\n var state = this.states[row - 1];\n var data = this.tokenizer.getLineTokens(line, state, row);\n if (this.states[row] + \"\" !== data.state + \"\") {\n this.states[row] = data.state;\n this.lines[row + 1] = null;\n if (this.currentLine > row + 1)\n this.currentLine = row + 1;\n }\n else if (this.currentLine == row) {\n this.currentLine = row + 1;\n }\n return this.lines[row] = data.tokens;\n };\n this.cleanup = function () {\n this.running = false;\n this.lines = [];\n this.states = [];\n this.currentLine = 0;\n this.removeAllListeners();\n };\n}).call(BackgroundTokenizer.prototype);\nexports.BackgroundTokenizer = BackgroundTokenizer;\n\n});\n\nace.define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar SearchHighlight = function (regExp, clazz, type) {\n this.setRegexp(regExp);\n this.clazz = clazz;\n this.type = type || \"text\";\n};\n(function () {\n this.MAX_RANGES = 500;\n this.setRegexp = function (regExp) {\n if (this.regExp + \"\" == regExp + \"\")\n return;\n this.regExp = regExp;\n this.cache = [];\n };\n this.update = function (html, markerLayer, session, config) {\n if (!this.regExp)\n return;\n var start = config.firstRow, end = config.lastRow;\n var renderedMarkerRanges = {};\n for (var i = start; i <= end; i++) {\n var ranges = this.cache[i];\n if (ranges == null) {\n ranges = lang.getMatchOffsets(session.getLine(i), this.regExp);\n if (ranges.length > this.MAX_RANGES)\n ranges = ranges.slice(0, this.MAX_RANGES);\n ranges = ranges.map(function (match) {\n return new Range(i, match.offset, i, match.offset + match.length);\n });\n this.cache[i] = ranges.length ? ranges : \"\";\n }\n for (var j = ranges.length; j--;) {\n var rangeToAddMarkerTo = ranges[j].toScreenRange(session);\n var rangeAsString = rangeToAddMarkerTo.toString();\n if (renderedMarkerRanges[rangeAsString])\n continue;\n renderedMarkerRanges[rangeAsString] = true;\n markerLayer.drawSingleLineMarker(html, rangeToAddMarkerTo, this.clazz, config);\n }\n }\n };\n}).call(SearchHighlight.prototype);\nexports.SearchHighlight = SearchHighlight;\n\n});\n\nace.define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nfunction FoldLine(foldData, folds) {\n this.foldData = foldData;\n if (Array.isArray(folds)) {\n this.folds = folds;\n }\n else {\n folds = this.folds = [folds];\n }\n var last = folds[folds.length - 1];\n this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column);\n this.start = this.range.start;\n this.end = this.range.end;\n this.folds.forEach(function (fold) {\n fold.setFoldLine(this);\n }, this);\n}\n(function () {\n this.shiftRow = function (shift) {\n this.start.row += shift;\n this.end.row += shift;\n this.folds.forEach(function (fold) {\n fold.start.row += shift;\n fold.end.row += shift;\n });\n };\n this.addFold = function (fold) {\n if (fold.sameRow) {\n if (fold.start.row < this.startRow || fold.endRow > this.endRow) {\n throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");\n }\n this.folds.push(fold);\n this.folds.sort(function (a, b) {\n return -a.range.compareEnd(b.start.row, b.start.column);\n });\n if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) {\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) {\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n }\n else if (fold.start.row == this.end.row) {\n this.folds.push(fold);\n this.end.row = fold.end.row;\n this.end.column = fold.end.column;\n }\n else if (fold.end.row == this.start.row) {\n this.folds.unshift(fold);\n this.start.row = fold.start.row;\n this.start.column = fold.start.column;\n }\n else {\n throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");\n }\n fold.foldLine = this;\n };\n this.containsRow = function (row) {\n return row >= this.start.row && row <= this.end.row;\n };\n this.walk = function (callback, endRow, endColumn) {\n var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true;\n if (endRow == null) {\n endRow = this.end.row;\n endColumn = this.end.column;\n }\n for (var i = 0; i < folds.length; i++) {\n fold = folds[i];\n cmp = fold.range.compareStart(endRow, endColumn);\n if (cmp == -1) {\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n return;\n }\n stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow);\n stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd);\n if (stop || cmp === 0) {\n return;\n }\n isNewRow = !fold.sameRow;\n lastEnd = fold.end.column;\n }\n callback(null, endRow, endColumn, lastEnd, isNewRow);\n };\n this.getNextFoldTo = function (row, column) {\n var fold, cmp;\n for (var i = 0; i < this.folds.length; i++) {\n fold = this.folds[i];\n cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n return {\n fold: fold,\n kind: \"after\"\n };\n }\n else if (cmp === 0) {\n return {\n fold: fold,\n kind: \"inside\"\n };\n }\n }\n return null;\n };\n this.addRemoveChars = function (row, column, len) {\n var ret = this.getNextFoldTo(row, column), fold, folds;\n if (ret) {\n fold = ret.fold;\n if (ret.kind == \"inside\"\n && fold.start.column != column\n && fold.start.row != row) {\n window.console && window.console.log(row, column, fold);\n }\n else if (fold.start.row == row) {\n folds = this.folds;\n var i = folds.indexOf(fold);\n if (i === 0) {\n this.start.column += len;\n }\n for (i; i < folds.length; i++) {\n fold = folds[i];\n fold.start.column += len;\n if (!fold.sameRow) {\n return;\n }\n fold.end.column += len;\n }\n this.end.column += len;\n }\n }\n };\n this.split = function (row, column) {\n var pos = this.getNextFoldTo(row, column);\n if (!pos || pos.kind == \"inside\")\n return null;\n var fold = pos.fold;\n var folds = this.folds;\n var foldData = this.foldData;\n var i = folds.indexOf(fold);\n var foldBefore = folds[i - 1];\n this.end.row = foldBefore.end.row;\n this.end.column = foldBefore.end.column;\n folds = folds.splice(i, folds.length - i);\n var newFoldLine = new FoldLine(foldData, folds);\n foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine);\n return newFoldLine;\n };\n this.merge = function (foldLineNext) {\n var folds = foldLineNext.folds;\n for (var i = 0; i < folds.length; i++) {\n this.addFold(folds[i]);\n }\n var foldData = this.foldData;\n foldData.splice(foldData.indexOf(foldLineNext), 1);\n };\n this.toString = function () {\n var ret = [this.range.toString() + \": [\"];\n this.folds.forEach(function (fold) {\n ret.push(\" \" + fold.toString());\n });\n ret.push(\"]\");\n return ret.join(\"\\n\");\n };\n this.idxToPosition = function (idx) {\n var lastFoldEndColumn = 0;\n for (var i = 0; i < this.folds.length; i++) {\n var fold = this.folds[i];\n idx -= fold.start.column - lastFoldEndColumn;\n if (idx < 0) {\n return {\n row: fold.start.row,\n column: fold.start.column + idx\n };\n }\n idx -= fold.placeholder.length;\n if (idx < 0) {\n return fold.start;\n }\n lastFoldEndColumn = fold.end.column;\n }\n return {\n row: this.end.row,\n column: this.end.column + idx\n };\n };\n}).call(FoldLine.prototype);\nexports.FoldLine = FoldLine;\n\n});\n\nace.define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar comparePoints = Range.comparePoints;\nvar RangeList = function () {\n this.ranges = [];\n this.$bias = 1;\n};\n(function () {\n this.comparePoints = comparePoints;\n this.pointIndex = function (pos, excludeEdges, startIndex) {\n var list = this.ranges;\n for (var i = startIndex || 0; i < list.length; i++) {\n var range = list[i];\n var cmpEnd = comparePoints(pos, range.end);\n if (cmpEnd > 0)\n continue;\n var cmpStart = comparePoints(pos, range.start);\n if (cmpEnd === 0)\n return excludeEdges && cmpStart !== 0 ? -i - 2 : i;\n if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges))\n return i;\n return -i - 1;\n }\n return -i - 1;\n };\n this.add = function (range) {\n var excludeEdges = !range.isEmpty();\n var startIndex = this.pointIndex(range.start, excludeEdges);\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex(range.end, excludeEdges, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n else\n endIndex++;\n return this.ranges.splice(startIndex, endIndex - startIndex, range);\n };\n this.addList = function (list) {\n var removed = [];\n for (var i = list.length; i--;) {\n removed.push.apply(removed, this.add(list[i]));\n }\n return removed;\n };\n this.substractPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges.splice(i, 1);\n };\n this.merge = function () {\n var removed = [];\n var list = this.ranges;\n list = list.sort(function (a, b) {\n return comparePoints(a.start, b.start);\n });\n var next = list[0], range;\n for (var i = 1; i < list.length; i++) {\n range = next;\n next = list[i];\n var cmp = comparePoints(range.end, next.start);\n if (cmp < 0)\n continue;\n if (cmp == 0 && !range.isEmpty() && !next.isEmpty())\n continue;\n if (comparePoints(range.end, next.end) < 0) {\n range.end.row = next.end.row;\n range.end.column = next.end.column;\n }\n list.splice(i, 1);\n removed.push(next);\n next = range;\n i--;\n }\n this.ranges = list;\n return removed;\n };\n this.contains = function (row, column) {\n return this.pointIndex({ row: row, column: column }) >= 0;\n };\n this.containsPoint = function (pos) {\n return this.pointIndex(pos) >= 0;\n };\n this.rangeAtPoint = function (pos) {\n var i = this.pointIndex(pos);\n if (i >= 0)\n return this.ranges[i];\n };\n this.clipRows = function (startRow, endRow) {\n var list = this.ranges;\n if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow)\n return [];\n var startIndex = this.pointIndex({ row: startRow, column: 0 });\n if (startIndex < 0)\n startIndex = -startIndex - 1;\n var endIndex = this.pointIndex({ row: endRow, column: 0 }, startIndex);\n if (endIndex < 0)\n endIndex = -endIndex - 1;\n var clipped = [];\n for (var i = startIndex; i < endIndex; i++) {\n clipped.push(list[i]);\n }\n return clipped;\n };\n this.removeAll = function () {\n return this.ranges.splice(0, this.ranges.length);\n };\n this.attach = function (session) {\n if (this.session)\n this.detach();\n this.session = session;\n this.onChange = this.$onChange.bind(this);\n this.session.on('change', this.onChange);\n };\n this.detach = function () {\n if (!this.session)\n return;\n this.session.removeListener('change', this.onChange);\n this.session = null;\n };\n this.$onChange = function (delta) {\n var start = delta.start;\n var end = delta.end;\n var startRow = start.row;\n var endRow = end.row;\n var ranges = this.ranges;\n for (var i = 0, n = ranges.length; i < n; i++) {\n var r = ranges[i];\n if (r.end.row >= startRow)\n break;\n }\n if (delta.action == \"insert\") {\n var lineDif = endRow - startRow;\n var colDiff = -start.column + end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > startRow)\n break;\n if (r.start.row == startRow && r.start.column >= start.column) {\n if (r.start.column == start.column && this.$bias <= 0) {\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n if (r.end.row == startRow && r.end.column >= start.column) {\n if (r.end.column == start.column && this.$bias < 0) {\n continue;\n }\n if (r.end.column == start.column && colDiff > 0 && i < n - 1) {\n if (r.end.column > r.start.column && r.end.column == ranges[i + 1].start.column)\n r.end.column -= colDiff;\n }\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n }\n else {\n var lineDif = startRow - endRow;\n var colDiff = start.column - end.column;\n for (; i < n; i++) {\n var r = ranges[i];\n if (r.start.row > endRow)\n break;\n if (r.end.row < endRow\n && (startRow < r.end.row\n || startRow == r.end.row && start.column < r.end.column)) {\n r.end.row = startRow;\n r.end.column = start.column;\n }\n else if (r.end.row == endRow) {\n if (r.end.column <= end.column) {\n if (lineDif || r.end.column > start.column) {\n r.end.column = start.column;\n r.end.row = start.row;\n }\n }\n else {\n r.end.column += colDiff;\n r.end.row += lineDif;\n }\n }\n else if (r.end.row > endRow) {\n r.end.row += lineDif;\n }\n if (r.start.row < endRow\n && (startRow < r.start.row\n || startRow == r.start.row && start.column < r.start.column)) {\n r.start.row = startRow;\n r.start.column = start.column;\n }\n else if (r.start.row == endRow) {\n if (r.start.column <= end.column) {\n if (lineDif || r.start.column > start.column) {\n r.start.column = start.column;\n r.start.row = start.row;\n }\n }\n else {\n r.start.column += colDiff;\n r.start.row += lineDif;\n }\n }\n else if (r.start.row > endRow) {\n r.start.row += lineDif;\n }\n }\n }\n if (lineDif != 0 && i < n) {\n for (; i < n; i++) {\n var r = ranges[i];\n r.start.row += lineDif;\n r.end.row += lineDif;\n }\n }\n };\n}).call(RangeList.prototype);\nexports.RangeList = RangeList;\n\n});\n\nace.define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar RangeList = require(\"../range_list\").RangeList;\nvar oop = require(\"../lib/oop\");\nvar Fold = exports.Fold = function (range, placeholder) {\n this.foldLine = null;\n this.placeholder = placeholder;\n this.range = range;\n this.start = range.start;\n this.end = range.end;\n this.sameRow = range.start.row == range.end.row;\n this.subFolds = this.ranges = [];\n};\noop.inherits(Fold, RangeList);\n(function () {\n this.toString = function () {\n return '\"' + this.placeholder + '\" ' + this.range.toString();\n };\n this.setFoldLine = function (foldLine) {\n this.foldLine = foldLine;\n this.subFolds.forEach(function (fold) {\n fold.setFoldLine(foldLine);\n });\n };\n this.clone = function () {\n var range = this.range.clone();\n var fold = new Fold(range, this.placeholder);\n this.subFolds.forEach(function (subFold) {\n fold.subFolds.push(subFold.clone());\n });\n fold.collapseChildren = this.collapseChildren;\n return fold;\n };\n this.addSubFold = function (fold) {\n if (this.range.isEqual(fold))\n return;\n consumeRange(fold, this.start);\n var row = fold.start.row, column = fold.start.column;\n for (var i = 0, cmp = -1; i < this.subFolds.length; i++) {\n cmp = this.subFolds[i].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n var afterStart = this.subFolds[i];\n var firstConsumed = 0;\n if (cmp == 0) {\n if (afterStart.range.containsRange(fold))\n return afterStart.addSubFold(fold);\n else\n firstConsumed = 1;\n }\n var row = fold.range.end.row, column = fold.range.end.column;\n for (var j = i, cmp = -1; j < this.subFolds.length; j++) {\n cmp = this.subFolds[j].range.compare(row, column);\n if (cmp != 1)\n break;\n }\n if (cmp == 0)\n j++;\n var consumedFolds = this.subFolds.splice(i, j - i, fold);\n var last = cmp == 0 ? consumedFolds.length - 1 : consumedFolds.length;\n for (var k = firstConsumed; k < last; k++) {\n fold.addSubFold(consumedFolds[k]);\n }\n fold.setFoldLine(this.foldLine);\n return fold;\n };\n this.restoreRange = function (range) {\n return restoreRange(range, this.start);\n };\n}).call(Fold.prototype);\nfunction consumePoint(point, anchor) {\n point.row -= anchor.row;\n if (point.row == 0)\n point.column -= anchor.column;\n}\nfunction consumeRange(range, anchor) {\n consumePoint(range.start, anchor);\n consumePoint(range.end, anchor);\n}\nfunction restorePoint(point, anchor) {\n if (point.row == 0)\n point.column += anchor.column;\n point.row += anchor.row;\n}\nfunction restoreRange(range, anchor) {\n restorePoint(range.start, anchor);\n restorePoint(range.end, anchor);\n}\n\n});\n\nace.define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar FoldLine = require(\"./fold_line\").FoldLine;\nvar Fold = require(\"./fold\").Fold;\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nfunction Folding() {\n this.getFoldAt = function (row, column, side) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine)\n return null;\n var folds = foldLine.folds;\n for (var i = 0; i < folds.length; i++) {\n var range = folds[i].range;\n if (range.contains(row, column)) {\n if (side == 1 && range.isEnd(row, column) && !range.isEmpty()) {\n continue;\n }\n else if (side == -1 && range.isStart(row, column) && !range.isEmpty()) {\n continue;\n }\n return folds[i];\n }\n }\n };\n this.getFoldsInRange = function (range) {\n var start = range.start;\n var end = range.end;\n var foldLines = this.$foldData;\n var foundFolds = [];\n start.column += 1;\n end.column -= 1;\n for (var i = 0; i < foldLines.length; i++) {\n var cmp = foldLines[i].range.compareRange(range);\n if (cmp == 2) {\n continue;\n }\n else if (cmp == -2) {\n break;\n }\n var folds = foldLines[i].folds;\n for (var j = 0; j < folds.length; j++) {\n var fold = folds[j];\n cmp = fold.range.compareRange(range);\n if (cmp == -2) {\n break;\n }\n else if (cmp == 2) {\n continue;\n }\n else \n if (cmp == 42) {\n break;\n }\n foundFolds.push(fold);\n }\n }\n start.column -= 1;\n end.column += 1;\n return foundFolds;\n };\n this.getFoldsInRangeList = function (ranges) {\n if (Array.isArray(ranges)) {\n var folds = [];\n ranges.forEach(function (range) {\n folds = folds.concat(this.getFoldsInRange(range));\n }, this);\n }\n else {\n var folds = this.getFoldsInRange(ranges);\n }\n return folds;\n };\n this.getAllFolds = function () {\n var folds = [];\n var foldLines = this.$foldData;\n for (var i = 0; i < foldLines.length; i++)\n for (var j = 0; j < foldLines[i].folds.length; j++)\n folds.push(foldLines[i].folds[j]);\n return folds;\n };\n this.getFoldStringAt = function (row, column, trim, foldLine) {\n foldLine = foldLine || this.getFoldLine(row);\n if (!foldLine)\n return null;\n var lastFold = {\n end: { column: 0 }\n };\n var str, fold;\n for (var i = 0; i < foldLine.folds.length; i++) {\n fold = foldLine.folds[i];\n var cmp = fold.range.compareEnd(row, column);\n if (cmp == -1) {\n str = this\n .getLine(fold.start.row)\n .substring(lastFold.end.column, fold.start.column);\n break;\n }\n else if (cmp === 0) {\n return null;\n }\n lastFold = fold;\n }\n if (!str)\n str = this.getLine(fold.start.row).substring(lastFold.end.column);\n if (trim == -1)\n return str.substring(0, column - lastFold.end.column);\n else if (trim == 1)\n return str.substring(column - lastFold.end.column);\n else\n return str;\n };\n this.getFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) {\n return foldLine;\n }\n else if (foldLine.end.row > docRow) {\n return null;\n }\n }\n return null;\n };\n this.getNextFoldLine = function (docRow, startFoldLine) {\n var foldData = this.$foldData;\n var i = 0;\n if (startFoldLine)\n i = foldData.indexOf(startFoldLine);\n if (i == -1)\n i = 0;\n for (i; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (foldLine.end.row >= docRow) {\n return foldLine;\n }\n }\n return null;\n };\n this.getFoldedRowCount = function (first, last) {\n var foldData = this.$foldData, rowCount = last - first + 1;\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row;\n if (end >= last) {\n if (start < last) {\n if (start >= first)\n rowCount -= last - start;\n else\n rowCount = 0; // in one fold\n }\n break;\n }\n else if (end >= first) {\n if (start >= first) // fold inside range\n rowCount -= end - start;\n else\n rowCount -= end - first + 1;\n }\n }\n return rowCount;\n };\n this.$addFoldLine = function (foldLine) {\n this.$foldData.push(foldLine);\n this.$foldData.sort(function (a, b) {\n return a.start.row - b.start.row;\n });\n return foldLine;\n };\n this.addFold = function (placeholder, range) {\n var foldData = this.$foldData;\n var added = false;\n var fold;\n if (placeholder instanceof Fold)\n fold = placeholder;\n else {\n fold = new Fold(range, placeholder);\n fold.collapseChildren = range.collapseChildren;\n }\n this.$clipRangeToDocument(fold.range);\n var startRow = fold.start.row;\n var startColumn = fold.start.column;\n var endRow = fold.end.row;\n var endColumn = fold.end.column;\n var startFold = this.getFoldAt(startRow, startColumn, 1);\n var endFold = this.getFoldAt(endRow, endColumn, -1);\n if (startFold && endFold == startFold)\n return startFold.addSubFold(fold);\n if (startFold && !startFold.range.isStart(startRow, startColumn))\n this.removeFold(startFold);\n if (endFold && !endFold.range.isEnd(endRow, endColumn))\n this.removeFold(endFold);\n var folds = this.getFoldsInRange(fold.range);\n if (folds.length > 0) {\n this.removeFolds(folds);\n if (!fold.collapseChildren) {\n folds.forEach(function (subFold) {\n fold.addSubFold(subFold);\n });\n }\n }\n for (var i = 0; i < foldData.length; i++) {\n var foldLine = foldData[i];\n if (endRow == foldLine.start.row) {\n foldLine.addFold(fold);\n added = true;\n break;\n }\n else if (startRow == foldLine.end.row) {\n foldLine.addFold(fold);\n added = true;\n if (!fold.sameRow) {\n var foldLineNext = foldData[i + 1];\n if (foldLineNext && foldLineNext.start.row == endRow) {\n foldLine.merge(foldLineNext);\n break;\n }\n }\n break;\n }\n else if (endRow <= foldLine.start.row) {\n break;\n }\n }\n if (!added)\n foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold));\n if (this.$useWrapMode)\n this.$updateWrapData(foldLine.start.row, foldLine.start.row);\n else\n this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row);\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"add\" });\n return fold;\n };\n this.addFolds = function (folds) {\n folds.forEach(function (fold) {\n this.addFold(fold);\n }, this);\n };\n this.removeFold = function (fold) {\n var foldLine = fold.foldLine;\n var startRow = foldLine.start.row;\n var endRow = foldLine.end.row;\n var foldLines = this.$foldData;\n var folds = foldLine.folds;\n if (folds.length == 1) {\n foldLines.splice(foldLines.indexOf(foldLine), 1);\n }\n else \n if (foldLine.range.isEnd(fold.end.row, fold.end.column)) {\n folds.pop();\n foldLine.end.row = folds[folds.length - 1].end.row;\n foldLine.end.column = folds[folds.length - 1].end.column;\n }\n else \n if (foldLine.range.isStart(fold.start.row, fold.start.column)) {\n folds.shift();\n foldLine.start.row = folds[0].start.row;\n foldLine.start.column = folds[0].start.column;\n }\n else \n if (fold.sameRow) {\n folds.splice(folds.indexOf(fold), 1);\n }\n else \n {\n var newFoldLine = foldLine.split(fold.start.row, fold.start.column);\n folds = newFoldLine.folds;\n folds.shift();\n newFoldLine.start.row = folds[0].start.row;\n newFoldLine.start.column = folds[0].start.column;\n }\n if (!this.$updating) {\n if (this.$useWrapMode)\n this.$updateWrapData(startRow, endRow);\n else\n this.$updateRowLengthCache(startRow, endRow);\n }\n this.$modified = true;\n this._signal(\"changeFold\", { data: fold, action: \"remove\" });\n };\n this.removeFolds = function (folds) {\n var cloneFolds = [];\n for (var i = 0; i < folds.length; i++) {\n cloneFolds.push(folds[i]);\n }\n cloneFolds.forEach(function (fold) {\n this.removeFold(fold);\n }, this);\n this.$modified = true;\n };\n this.expandFold = function (fold) {\n this.removeFold(fold);\n fold.subFolds.forEach(function (subFold) {\n fold.restoreRange(subFold);\n this.addFold(subFold);\n }, this);\n if (fold.collapseChildren > 0) {\n this.foldAll(fold.start.row + 1, fold.end.row, fold.collapseChildren - 1);\n }\n fold.subFolds = [];\n };\n this.expandFolds = function (folds) {\n folds.forEach(function (fold) {\n this.expandFold(fold);\n }, this);\n };\n this.unfold = function (location, expandInner) {\n var range, folds;\n if (location == null) {\n range = new Range(0, 0, this.getLength(), 0);\n if (expandInner == null)\n expandInner = true;\n }\n else if (typeof location == \"number\") {\n range = new Range(location, 0, location, this.getLine(location).length);\n }\n else if (\"row\" in location) {\n range = Range.fromPoints(location, location);\n }\n else if (Array.isArray(location)) {\n folds = [];\n location.forEach(function (range) {\n folds = folds.concat(this.unfold(range));\n }, this);\n return folds;\n }\n else {\n range = location;\n }\n folds = this.getFoldsInRangeList(range);\n var outermostFolds = folds;\n while (folds.length == 1\n && Range.comparePoints(folds[0].start, range.start) < 0\n && Range.comparePoints(folds[0].end, range.end) > 0) {\n this.expandFolds(folds);\n folds = this.getFoldsInRangeList(range);\n }\n if (expandInner != false) {\n this.removeFolds(folds);\n }\n else {\n this.expandFolds(folds);\n }\n if (outermostFolds.length)\n return outermostFolds;\n };\n this.isRowFolded = function (docRow, startFoldRow) {\n return !!this.getFoldLine(docRow, startFoldRow);\n };\n this.getRowFoldEnd = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.end.row : docRow;\n };\n this.getRowFoldStart = function (docRow, startFoldRow) {\n var foldLine = this.getFoldLine(docRow, startFoldRow);\n return foldLine ? foldLine.start.row : docRow;\n };\n this.getFoldDisplayLine = function (foldLine, endRow, endColumn, startRow, startColumn) {\n if (startRow == null)\n startRow = foldLine.start.row;\n if (startColumn == null)\n startColumn = 0;\n if (endRow == null)\n endRow = foldLine.end.row;\n if (endColumn == null)\n endColumn = this.getLine(endRow).length;\n var doc = this.doc;\n var textLine = \"\";\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n if (row < startRow)\n return;\n if (row == startRow) {\n if (column < startColumn)\n return;\n lastColumn = Math.max(startColumn, lastColumn);\n }\n if (placeholder != null) {\n textLine += placeholder;\n }\n else {\n textLine += doc.getLine(row).substring(lastColumn, column);\n }\n }, endRow, endColumn);\n return textLine;\n };\n this.getDisplayLine = function (row, endColumn, startRow, startColumn) {\n var foldLine = this.getFoldLine(row);\n if (!foldLine) {\n var line;\n line = this.doc.getLine(row);\n return line.substring(startColumn || 0, endColumn || line.length);\n }\n else {\n return this.getFoldDisplayLine(foldLine, row, endColumn, startRow, startColumn);\n }\n };\n this.$cloneFoldData = function () {\n var fd = [];\n fd = this.$foldData.map(function (foldLine) {\n var folds = foldLine.folds.map(function (fold) {\n return fold.clone();\n });\n return new FoldLine(fd, folds);\n });\n return fd;\n };\n this.toggleFold = function (tryToUnfold) {\n var selection = this.selection;\n var range = selection.getRange();\n var fold;\n var bracketPos;\n if (range.isEmpty()) {\n var cursor = range.start;\n fold = this.getFoldAt(cursor.row, cursor.column);\n if (fold) {\n this.expandFold(fold);\n return;\n }\n else if (bracketPos = this.findMatchingBracket(cursor)) {\n if (range.comparePoint(bracketPos) == 1) {\n range.end = bracketPos;\n }\n else {\n range.start = bracketPos;\n range.start.column++;\n range.end.column--;\n }\n }\n else if (bracketPos = this.findMatchingBracket({ row: cursor.row, column: cursor.column + 1 })) {\n if (range.comparePoint(bracketPos) == 1)\n range.end = bracketPos;\n else\n range.start = bracketPos;\n range.start.column++;\n }\n else {\n range = this.getCommentFoldRange(cursor.row, cursor.column) || range;\n }\n }\n else {\n var folds = this.getFoldsInRange(range);\n if (tryToUnfold && folds.length) {\n this.expandFolds(folds);\n return;\n }\n else if (folds.length == 1) {\n fold = folds[0];\n }\n }\n if (!fold)\n fold = this.getFoldAt(range.start.row, range.start.column);\n if (fold && fold.range.toString() == range.toString()) {\n this.expandFold(fold);\n return;\n }\n var placeholder = \"...\";\n if (!range.isMultiLine()) {\n placeholder = this.getTextRange(range);\n if (placeholder.length < 4)\n return;\n placeholder = placeholder.trim().substring(0, 2) + \"..\";\n }\n this.addFold(placeholder, range);\n };\n this.getCommentFoldRange = function (row, column, dir) {\n var iterator = new TokenIterator(this, row, column);\n var token = iterator.getCurrentToken();\n var type = token && token.type;\n if (token && /^comment|string/.test(type)) {\n type = type.match(/comment|string/)[0];\n if (type == \"comment\")\n type += \"|doc-start\";\n var re = new RegExp(type);\n var range = new Range();\n if (dir != 1) {\n do {\n token = iterator.stepBackward();\n } while (token && re.test(token.type) && !/^comment.end/.test(token.type));\n token = iterator.stepForward();\n }\n range.start.row = iterator.getCurrentTokenRow();\n range.start.column = iterator.getCurrentTokenColumn() + (/^comment.start/.test(token.type) ? token.value.length : 2);\n iterator = new TokenIterator(this, row, column);\n if (dir != -1) {\n var lastRow = -1;\n do {\n token = iterator.stepForward();\n if (lastRow == -1) {\n var state = this.getState(iterator.$row);\n if (!re.test(state))\n lastRow = iterator.$row;\n }\n else if (iterator.$row > lastRow) {\n break;\n }\n } while (token && re.test(token.type) && !/^comment.start/.test(token.type));\n token = iterator.stepBackward();\n }\n else\n token = iterator.getCurrentToken();\n range.end.row = iterator.getCurrentTokenRow();\n range.end.column = iterator.getCurrentTokenColumn();\n if (!/^comment.end/.test(token.type)) {\n range.end.column += token.value.length - 2;\n }\n return range;\n }\n };\n this.foldAll = function (startRow, endRow, depth, test) {\n if (depth == undefined)\n depth = 100000; // JSON.stringify doesn't hanle Infinity\n var foldWidgets = this.foldWidgets;\n if (!foldWidgets)\n return; // mode doesn't support folding\n endRow = endRow || this.getLength();\n startRow = startRow || 0;\n for (var row = startRow; row < endRow; row++) {\n if (foldWidgets[row] == null)\n foldWidgets[row] = this.getFoldWidget(row);\n if (foldWidgets[row] != \"start\")\n continue;\n if (test && !test(row))\n continue;\n var range = this.getFoldWidgetRange(row);\n if (range && range.isMultiLine()\n && range.end.row <= endRow\n && range.start.row >= startRow) {\n row = range.end.row;\n range.collapseChildren = depth;\n this.addFold(\"...\", range);\n }\n }\n };\n this.foldToLevel = function (level) {\n this.foldAll();\n while (level-- > 0)\n this.unfold(null, false);\n };\n this.foldAllComments = function () {\n var session = this;\n this.foldAll(null, null, null, function (row) {\n var tokens = session.getTokens(row);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token.type == \"text\" && /^\\s+$/.test(token.value))\n continue;\n if (/comment/.test(token.type))\n return true;\n return false;\n }\n });\n };\n this.$foldStyles = {\n \"manual\": 1,\n \"markbegin\": 1,\n \"markbeginend\": 1\n };\n this.$foldStyle = \"markbegin\";\n this.setFoldStyle = function (style) {\n if (!this.$foldStyles[style])\n throw new Error(\"invalid fold style: \" + style + \"[\" + Object.keys(this.$foldStyles).join(\", \") + \"]\");\n if (this.$foldStyle == style)\n return;\n this.$foldStyle = style;\n if (style == \"manual\")\n this.unfold();\n var mode = this.$foldMode;\n this.$setFolding(null);\n this.$setFolding(mode);\n };\n this.$setFolding = function (foldMode) {\n if (this.$foldMode == foldMode)\n return;\n this.$foldMode = foldMode;\n this.off('change', this.$updateFoldWidgets);\n this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n this._signal(\"changeAnnotation\");\n if (!foldMode || this.$foldStyle == \"manual\") {\n this.foldWidgets = null;\n return;\n }\n this.foldWidgets = [];\n this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle);\n this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle);\n this.$updateFoldWidgets = this.updateFoldWidgets.bind(this);\n this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this);\n this.on('change', this.$updateFoldWidgets);\n this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets);\n };\n this.getParentFoldRangeData = function (row, ignoreCurrent) {\n var fw = this.foldWidgets;\n if (!fw || (ignoreCurrent && fw[row]))\n return {};\n var i = row - 1, firstRange;\n while (i >= 0) {\n var c = fw[i];\n if (c == null)\n c = fw[i] = this.getFoldWidget(i);\n if (c == \"start\") {\n var range = this.getFoldWidgetRange(i);\n if (!firstRange)\n firstRange = range;\n if (range && range.end.row >= row)\n break;\n }\n i--;\n }\n return {\n range: i !== -1 && range,\n firstRange: firstRange\n };\n };\n this.onFoldWidgetClick = function (row, e) {\n e = e.domEvent;\n var options = {\n children: e.shiftKey,\n all: e.ctrlKey || e.metaKey,\n siblings: e.altKey\n };\n var range = this.$toggleFoldWidget(row, options);\n if (!range) {\n var el = (e.target || e.srcElement);\n if (el && /ace_fold-widget/.test(el.className))\n el.className += \" ace_invalid\";\n }\n };\n this.$toggleFoldWidget = function (row, options) {\n if (!this.getFoldWidget)\n return;\n var type = this.getFoldWidget(row);\n var line = this.getLine(row);\n var dir = type === \"end\" ? -1 : 1;\n var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir);\n if (fold) {\n if (options.children || options.all)\n this.removeFold(fold);\n else\n this.expandFold(fold);\n return fold;\n }\n var range = this.getFoldWidgetRange(row, true);\n if (range && !range.isMultiLine()) {\n fold = this.getFoldAt(range.start.row, range.start.column, 1);\n if (fold && range.isEqual(fold.range)) {\n this.removeFold(fold);\n return fold;\n }\n }\n if (options.siblings) {\n var data = this.getParentFoldRangeData(row);\n if (data.range) {\n var startRow = data.range.start.row + 1;\n var endRow = data.range.end.row;\n }\n this.foldAll(startRow, endRow, options.all ? 10000 : 0);\n }\n else if (options.children) {\n endRow = range ? range.end.row : this.getLength();\n this.foldAll(row + 1, endRow, options.all ? 10000 : 0);\n }\n else if (range) {\n if (options.all)\n range.collapseChildren = 10000;\n this.addFold(\"...\", range);\n }\n return range;\n };\n this.toggleFoldWidget = function (toggleParent) {\n var row = this.selection.getCursor().row;\n row = this.getRowFoldStart(row);\n var range = this.$toggleFoldWidget(row, {});\n if (range)\n return;\n var data = this.getParentFoldRangeData(row, true);\n range = data.range || data.firstRange;\n if (range) {\n row = range.start.row;\n var fold = this.getFoldAt(row, this.getLine(row).length, 1);\n if (fold) {\n this.removeFold(fold);\n }\n else {\n this.addFold(\"...\", range);\n }\n }\n };\n this.updateFoldWidgets = function (delta) {\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n this.foldWidgets[firstRow] = null;\n }\n else if (delta.action == 'remove') {\n this.foldWidgets.splice(firstRow, len + 1, null);\n }\n else {\n var args = Array(len + 1);\n args.unshift(firstRow, 1);\n this.foldWidgets.splice.apply(this.foldWidgets, args);\n }\n };\n this.tokenizerUpdateFoldWidgets = function (e) {\n var rows = e.data;\n if (rows.first != rows.last) {\n if (this.foldWidgets.length > rows.first)\n this.foldWidgets.splice(rows.first, this.foldWidgets.length);\n }\n };\n}\nexports.Folding = Folding;\n\n});\n\nace.define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar TokenIterator = require(\"../token_iterator\").TokenIterator;\nvar Range = require(\"../range\").Range;\nfunction BracketMatch() {\n this.findMatchingBracket = function (position, chr) {\n if (position.column == 0)\n return null;\n var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column - 1);\n if (charBeforeCursor == \"\")\n return null;\n var match = charBeforeCursor.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match)\n return null;\n if (match[1])\n return this.$findClosingBracket(match[1], position);\n else\n return this.$findOpeningBracket(match[2], position);\n };\n this.getBracketRange = function (pos) {\n var line = this.getLine(pos.row);\n var before = true, range;\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = { row: pos.row, column: pos.column + 1 };\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n before = false;\n }\n if (!match)\n return null;\n if (match[1]) {\n var bracketPos = this.$findClosingBracket(match[1], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(pos, bracketPos);\n if (!before) {\n range.end.column++;\n range.start.column--;\n }\n range.cursor = range.end;\n }\n else {\n var bracketPos = this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return null;\n range = Range.fromPoints(bracketPos, pos);\n if (!before) {\n range.start.column++;\n range.end.column--;\n }\n range.cursor = range.start;\n }\n return range;\n };\n this.getMatchingBracketRanges = function (pos) {\n var line = this.getLine(pos.row);\n var chr = line.charAt(pos.column - 1);\n var match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n if (!match) {\n chr = line.charAt(pos.column);\n pos = { row: pos.row, column: pos.column + 1 };\n match = chr && chr.match(/([\\(\\[\\{])|([\\)\\]\\}])/);\n }\n if (!match)\n return null;\n var startRange = new Range(pos.row, pos.column - 1, pos.row, pos.column);\n var bracketPos = match[1] ? this.$findClosingBracket(match[1], pos)\n : this.$findOpeningBracket(match[2], pos);\n if (!bracketPos)\n return [startRange];\n var endRange = new Range(bracketPos.row, bracketPos.column, bracketPos.row, bracketPos.column + 1);\n return [startRange, endRange];\n };\n this.$brackets = {\n \")\": \"(\",\n \"(\": \")\",\n \"]\": \"[\",\n \"[\": \"]\",\n \"{\": \"}\",\n \"}\": \"{\",\n \"<\": \">\",\n \">\": \"<\"\n };\n this.$findOpeningBracket = function (bracket, position, typeRe) {\n var openBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"rparen\", \".paren\")\n .replace(/\\b(?:end)\\b/, \"(?:start|begin|end)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2;\n var value = token.value;\n while (true) {\n while (valueIndex >= 0) {\n var chr = value.charAt(valueIndex);\n if (chr == openBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex -= 1;\n }\n do {\n token = iterator.stepBackward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n value = token.value;\n valueIndex = value.length - 1;\n }\n return null;\n };\n this.$findClosingBracket = function (bracket, position, typeRe) {\n var closingBracket = this.$brackets[bracket];\n var depth = 1;\n var iterator = new TokenIterator(this, position.row, position.column);\n var token = iterator.getCurrentToken();\n if (!token)\n token = iterator.stepForward();\n if (!token)\n return;\n if (!typeRe) {\n typeRe = new RegExp(\"(\\\\.?\" +\n token.type.replace(\".\", \"\\\\.\").replace(\"lparen\", \".paren\")\n .replace(/\\b(?:start|begin)\\b/, \"(?:start|begin|end)\")\n + \")+\");\n }\n var valueIndex = position.column - iterator.getCurrentTokenColumn();\n while (true) {\n var value = token.value;\n var valueLength = value.length;\n while (valueIndex < valueLength) {\n var chr = value.charAt(valueIndex);\n if (chr == closingBracket) {\n depth -= 1;\n if (depth == 0) {\n return { row: iterator.getCurrentTokenRow(),\n column: valueIndex + iterator.getCurrentTokenColumn() };\n }\n }\n else if (chr == bracket) {\n depth += 1;\n }\n valueIndex += 1;\n }\n do {\n token = iterator.stepForward();\n } while (token && !typeRe.test(token.type));\n if (token == null)\n break;\n valueIndex = 0;\n }\n return null;\n };\n this.getMatchingTags = function (pos) {\n var iterator = new TokenIterator(this, pos.row, pos.column);\n var token = this.$findTagName(iterator);\n if (!token)\n return;\n var prevToken = iterator.stepBackward();\n if (prevToken.value === '<') {\n return this.$findClosingTag(iterator, token);\n }\n else {\n return this.$findOpeningTag(iterator, token);\n }\n };\n this.$findTagName = function (iterator) {\n var token = iterator.getCurrentToken();\n var found = false;\n var backward = false;\n if (token && token.type.indexOf('tag-name') === -1) {\n do {\n if (backward)\n token = iterator.stepBackward();\n else\n token = iterator.stepForward();\n if (token) {\n if (token.value === \"/>\") {\n backward = true;\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n found = true;\n }\n }\n } while (token && !found);\n }\n return token;\n };\n this.$findClosingTag = function (iterator, token) {\n var prevToken;\n var currentTag = token.value;\n var tag = token.value;\n var depth = 0;\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);\n token = iterator.stepForward();\n var openTagName = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + token.value.length);\n var foundOpenTagEnd = false;\n do {\n prevToken = token;\n token = iterator.stepForward();\n if (token) {\n if (token.value === '>' && !foundOpenTagEnd) {\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for `>`\n foundOpenTagEnd = true;\n }\n if (token.type.indexOf('tag-name') !== -1) {\n currentTag = token.value;\n if (tag === currentTag) {\n if (prevToken.value === '<') {\n depth++;\n }\n else if (prevToken.value === '') {\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n else {\n return;\n }\n }\n }\n }\n }\n else if (tag === currentTag && token.value === '/>') { // self-closing tag\n depth--;\n if (depth < 0) { //found self-closing tag end\n var closeTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 2);\n var closeTagName = closeTagStart;\n var closeTagEnd = closeTagName;\n var openTagEnd = new Range(openTagName.end.row, openTagName.end.column, openTagName.end.row, openTagName.end.column + 1);\n }\n }\n }\n } while (token && depth >= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n this.$findOpeningTag = function (iterator, token) {\n var prevToken = iterator.getCurrentToken();\n var tag = token.value;\n var depth = 0;\n var startRow = iterator.getCurrentTokenRow();\n var startColumn = iterator.getCurrentTokenColumn();\n var endColumn = startColumn + 2;\n var closeTagStart = new Range(startRow, startColumn, startRow, endColumn); //Range for \")\n return;\n var closeTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n iterator.stepBackward();\n iterator.stepBackward();\n do {\n token = prevToken;\n startRow = iterator.getCurrentTokenRow();\n startColumn = iterator.getCurrentTokenColumn();\n endColumn = startColumn + token.value.length;\n prevToken = iterator.stepBackward();\n if (token) {\n if (token.type.indexOf('tag-name') !== -1) {\n if (tag === token.value) {\n if (prevToken.value === '<') {\n depth++;\n if (depth > 0) { //found opening tag\n var openTagName = new Range(startRow, startColumn, startRow, endColumn);\n var openTagStart = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for <\n do {\n token = iterator.stepForward();\n } while (token && token.value !== '>');\n var openTagEnd = new Range(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn(), iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); //Range for >\n }\n }\n else if (prevToken.value === '') { // self-closing tag\n var stepCount = 0;\n var tmpToken = prevToken;\n while (tmpToken) {\n if (tmpToken.type.indexOf('tag-name') !== -1 && tmpToken.value === tag) {\n depth--;\n break;\n }\n else if (tmpToken.value === '<') {\n break;\n }\n tmpToken = iterator.stepBackward();\n stepCount++;\n }\n for (var i = 0; i < stepCount; i++) {\n iterator.stepForward();\n }\n }\n }\n } while (prevToken && depth <= 0);\n if (openTagStart && openTagEnd && closeTagStart && closeTagEnd && openTagName && closeTagName) {\n return {\n openTag: new Range(openTagStart.start.row, openTagStart.start.column, openTagEnd.end.row, openTagEnd.end.column),\n closeTag: new Range(closeTagStart.start.row, closeTagStart.start.column, closeTagEnd.end.row, closeTagEnd.end.column),\n openTagName: openTagName,\n closeTagName: closeTagName\n };\n }\n };\n}\nexports.BracketMatch = BracketMatch;\n\n});\n\nace.define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar BidiHandler = require(\"./bidihandler\").BidiHandler;\nvar config = require(\"./config\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Selection = require(\"./selection\").Selection;\nvar TextMode = require(\"./mode/text\").Mode;\nvar Range = require(\"./range\").Range;\nvar Document = require(\"./document\").Document;\nvar BackgroundTokenizer = require(\"./background_tokenizer\").BackgroundTokenizer;\nvar SearchHighlight = require(\"./search_highlight\").SearchHighlight;\nvar EditSession = function (text, mode) {\n this.$breakpoints = [];\n this.$decorations = [];\n this.$frontMarkers = {};\n this.$backMarkers = {};\n this.$markerId = 1;\n this.$undoSelect = true;\n this.$foldData = [];\n this.id = \"session\" + (++EditSession.$uid);\n this.$foldData.toString = function () {\n return this.join(\"\\n\");\n };\n this.bgTokenizer = new BackgroundTokenizer((new TextMode()).getTokenizer(), this);\n var _self = this;\n this.bgTokenizer.on(\"update\", function (e) {\n _self._signal(\"tokenizerUpdate\", e);\n });\n this.on(\"changeFold\", this.onChangeFold.bind(this));\n this.$onChange = this.onChange.bind(this);\n if (typeof text != \"object\" || !text.getLine)\n text = new Document(text);\n this.setDocument(text);\n this.selection = new Selection(this);\n this.$bidiHandler = new BidiHandler(this);\n config.resetOptions(this);\n this.setMode(mode);\n config._signal(\"session\", this);\n this.destroyed = false;\n};\nEditSession.$uid = 0;\n(function () {\n oop.implement(this, EventEmitter);\n this.setDocument = function (doc) {\n if (this.doc)\n this.doc.off(\"change\", this.$onChange);\n this.doc = doc;\n doc.on(\"change\", this.$onChange, true);\n this.bgTokenizer.setDocument(this.getDocument());\n this.resetCaches();\n };\n this.getDocument = function () {\n return this.doc;\n };\n this.$resetRowCache = function (docRow) {\n if (!docRow) {\n this.$docRowCache = [];\n this.$screenRowCache = [];\n return;\n }\n var l = this.$docRowCache.length;\n var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1;\n if (l > i) {\n this.$docRowCache.splice(i, l);\n this.$screenRowCache.splice(i, l);\n }\n };\n this.$getRowCacheIndex = function (cacheArray, val) {\n var low = 0;\n var hi = cacheArray.length - 1;\n while (low <= hi) {\n var mid = (low + hi) >> 1;\n var c = cacheArray[mid];\n if (val > c)\n low = mid + 1;\n else if (val < c)\n hi = mid - 1;\n else\n return mid;\n }\n return low - 1;\n };\n this.resetCaches = function () {\n this.$modified = true;\n this.$wrapData = [];\n this.$rowLengthCache = [];\n this.$resetRowCache(0);\n if (!this.destroyed)\n this.bgTokenizer.start(0);\n };\n this.onChangeFold = function (e) {\n var fold = e.data;\n this.$resetRowCache(fold.start.row);\n };\n this.onChange = function (delta) {\n this.$modified = true;\n this.$bidiHandler.onChange(delta);\n this.$resetRowCache(delta.start.row);\n var removedFolds = this.$updateInternalDataOnChange(delta);\n if (!this.$fromUndo && this.$undoManager) {\n if (removedFolds && removedFolds.length) {\n this.$undoManager.add({\n action: \"removeFolds\",\n folds: removedFolds\n }, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n }\n this.$undoManager.add(delta, this.mergeUndoDeltas);\n this.mergeUndoDeltas = true;\n this.$informUndoManager.schedule();\n }\n this.bgTokenizer.$updateOnChange(delta);\n this._signal(\"change\", delta);\n };\n this.setValue = function (text) {\n this.doc.setValue(text);\n this.selection.moveTo(0, 0);\n this.$resetRowCache(0);\n this.setUndoManager(this.$undoManager);\n this.getUndoManager().reset();\n };\n this.getValue =\n this.toString = function () {\n return this.doc.getValue();\n };\n this.getSelection = function () {\n return this.selection;\n };\n this.getState = function (row) {\n return this.bgTokenizer.getState(row);\n };\n this.getTokens = function (row) {\n return this.bgTokenizer.getTokens(row);\n };\n this.getTokenAt = function (row, column) {\n var tokens = this.bgTokenizer.getTokens(row);\n var token, c = 0;\n if (column == null) {\n var i = tokens.length - 1;\n c = this.getLine(row).length;\n }\n else {\n for (var i = 0; i < tokens.length; i++) {\n c += tokens[i].value.length;\n if (c >= column)\n break;\n }\n }\n token = tokens[i];\n if (!token)\n return null;\n token.index = i;\n token.start = c - token.value.length;\n return token;\n };\n this.setUndoManager = function (undoManager) {\n this.$undoManager = undoManager;\n if (this.$informUndoManager)\n this.$informUndoManager.cancel();\n if (undoManager) {\n var self = this;\n undoManager.addSession(this);\n this.$syncInformUndoManager = function () {\n self.$informUndoManager.cancel();\n self.mergeUndoDeltas = false;\n };\n this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager);\n }\n else {\n this.$syncInformUndoManager = function () { };\n }\n };\n this.markUndoGroup = function () {\n if (this.$syncInformUndoManager)\n this.$syncInformUndoManager();\n };\n this.$defaultUndoManager = {\n undo: function () { },\n redo: function () { },\n hasUndo: function () { },\n hasRedo: function () { },\n reset: function () { },\n add: function () { },\n addSelection: function () { },\n startNewGroup: function () { },\n addSession: function () { }\n };\n this.getUndoManager = function () {\n return this.$undoManager || this.$defaultUndoManager;\n };\n this.getTabString = function () {\n if (this.getUseSoftTabs()) {\n return lang.stringRepeat(\" \", this.getTabSize());\n }\n else {\n return \"\\t\";\n }\n };\n this.setUseSoftTabs = function (val) {\n this.setOption(\"useSoftTabs\", val);\n };\n this.getUseSoftTabs = function () {\n return this.$useSoftTabs && !this.$mode.$indentWithTabs;\n };\n this.setTabSize = function (tabSize) {\n this.setOption(\"tabSize\", tabSize);\n };\n this.getTabSize = function () {\n return this.$tabSize;\n };\n this.isTabStop = function (position) {\n return this.$useSoftTabs && (position.column % this.$tabSize === 0);\n };\n this.setNavigateWithinSoftTabs = function (navigateWithinSoftTabs) {\n this.setOption(\"navigateWithinSoftTabs\", navigateWithinSoftTabs);\n };\n this.getNavigateWithinSoftTabs = function () {\n return this.$navigateWithinSoftTabs;\n };\n this.$overwrite = false;\n this.setOverwrite = function (overwrite) {\n this.setOption(\"overwrite\", overwrite);\n };\n this.getOverwrite = function () {\n return this.$overwrite;\n };\n this.toggleOverwrite = function () {\n this.setOverwrite(!this.$overwrite);\n };\n this.addGutterDecoration = function (row, className) {\n if (!this.$decorations[row])\n this.$decorations[row] = \"\";\n this.$decorations[row] += \" \" + className;\n this._signal(\"changeBreakpoint\", {});\n };\n this.removeGutterDecoration = function (row, className) {\n this.$decorations[row] = (this.$decorations[row] || \"\").replace(\" \" + className, \"\");\n this._signal(\"changeBreakpoint\", {});\n };\n this.getBreakpoints = function () {\n return this.$breakpoints;\n };\n this.setBreakpoints = function (rows) {\n this.$breakpoints = [];\n for (var i = 0; i < rows.length; i++) {\n this.$breakpoints[rows[i]] = \"ace_breakpoint\";\n }\n this._signal(\"changeBreakpoint\", {});\n };\n this.clearBreakpoints = function () {\n this.$breakpoints = [];\n this._signal(\"changeBreakpoint\", {});\n };\n this.setBreakpoint = function (row, className) {\n if (className === undefined)\n className = \"ace_breakpoint\";\n if (className)\n this.$breakpoints[row] = className;\n else\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n this.clearBreakpoint = function (row) {\n delete this.$breakpoints[row];\n this._signal(\"changeBreakpoint\", {});\n };\n this.addMarker = function (range, clazz, type, inFront) {\n var id = this.$markerId++;\n var marker = {\n range: range,\n type: type || \"line\",\n renderer: typeof type == \"function\" ? type : null,\n clazz: clazz,\n inFront: !!inFront,\n id: id\n };\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return id;\n };\n this.addDynamicMarker = function (marker, inFront) {\n if (!marker.update)\n return;\n var id = this.$markerId++;\n marker.id = id;\n marker.inFront = !!inFront;\n if (inFront) {\n this.$frontMarkers[id] = marker;\n this._signal(\"changeFrontMarker\");\n }\n else {\n this.$backMarkers[id] = marker;\n this._signal(\"changeBackMarker\");\n }\n return marker;\n };\n this.removeMarker = function (markerId) {\n var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId];\n if (!marker)\n return;\n var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers;\n delete (markers[markerId]);\n this._signal(marker.inFront ? \"changeFrontMarker\" : \"changeBackMarker\");\n };\n this.getMarkers = function (inFront) {\n return inFront ? this.$frontMarkers : this.$backMarkers;\n };\n this.highlight = function (re) {\n if (!this.$searchHighlight) {\n var highlight = new SearchHighlight(null, \"ace_selected-word\", \"text\");\n this.$searchHighlight = this.addDynamicMarker(highlight);\n }\n this.$searchHighlight.setRegexp(re);\n };\n this.highlightLines = function (startRow, endRow, clazz, inFront) {\n if (typeof endRow != \"number\") {\n clazz = endRow;\n endRow = startRow;\n }\n if (!clazz)\n clazz = \"ace_step\";\n var range = new Range(startRow, 0, endRow, Infinity);\n range.id = this.addMarker(range, clazz, \"fullLine\", inFront);\n return range;\n };\n this.setAnnotations = function (annotations) {\n this.$annotations = annotations;\n this._signal(\"changeAnnotation\", {});\n };\n this.getAnnotations = function () {\n return this.$annotations || [];\n };\n this.clearAnnotations = function () {\n this.setAnnotations([]);\n };\n this.$detectNewLine = function (text) {\n var match = text.match(/^.*?(\\r?\\n)/m);\n if (match) {\n this.$autoNewLine = match[1];\n }\n else {\n this.$autoNewLine = \"\\n\";\n }\n };\n this.getWordRange = function (row, column) {\n var line = this.getLine(row);\n var inToken = false;\n if (column > 0)\n inToken = !!line.charAt(column - 1).match(this.tokenRe);\n if (!inToken)\n inToken = !!line.charAt(column).match(this.tokenRe);\n if (inToken)\n var re = this.tokenRe;\n else if (/^\\s+$/.test(line.slice(column - 1, column + 1)))\n var re = /\\s/;\n else\n var re = this.nonTokenRe;\n var start = column;\n if (start > 0) {\n do {\n start--;\n } while (start >= 0 && line.charAt(start).match(re));\n start++;\n }\n var end = column;\n while (end < line.length && line.charAt(end).match(re)) {\n end++;\n }\n return new Range(row, start, row, end);\n };\n this.getAWordRange = function (row, column) {\n var wordRange = this.getWordRange(row, column);\n var line = this.getLine(wordRange.end.row);\n while (line.charAt(wordRange.end.column).match(/[ \\t]/)) {\n wordRange.end.column += 1;\n }\n return wordRange;\n };\n this.setNewLineMode = function (newLineMode) {\n this.doc.setNewLineMode(newLineMode);\n };\n this.getNewLineMode = function () {\n return this.doc.getNewLineMode();\n };\n this.setUseWorker = function (useWorker) { this.setOption(\"useWorker\", useWorker); };\n this.getUseWorker = function () { return this.$useWorker; };\n this.onReloadTokenizer = function (e) {\n var rows = e.data;\n this.bgTokenizer.start(rows.first);\n this._signal(\"tokenizerUpdate\", e);\n };\n this.$modes = config.$modes;\n this.$mode = null;\n this.$modeId = null;\n this.setMode = function (mode, cb) {\n if (mode && typeof mode === \"object\") {\n if (mode.getTokenizer)\n return this.$onChangeMode(mode);\n var options = mode;\n var path = options.path;\n }\n else {\n path = mode || \"ace/mode/text\";\n }\n if (!this.$modes[\"ace/mode/text\"])\n this.$modes[\"ace/mode/text\"] = new TextMode();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n cb && cb();\n return;\n }\n this.$modeId = path;\n config.loadModule([\"mode\", path], function (m) {\n if (this.$modeId !== path)\n return cb && cb();\n if (this.$modes[path] && !options) {\n this.$onChangeMode(this.$modes[path]);\n }\n else if (m && m.Mode) {\n m = new m.Mode(options);\n if (!options) {\n this.$modes[path] = m;\n m.$id = path;\n }\n this.$onChangeMode(m);\n }\n cb && cb();\n }.bind(this));\n if (!this.$mode)\n this.$onChangeMode(this.$modes[\"ace/mode/text\"], true);\n };\n this.$onChangeMode = function (mode, $isPlaceholder) {\n if (!$isPlaceholder)\n this.$modeId = mode.$id;\n if (this.$mode === mode)\n return;\n var oldMode = this.$mode;\n this.$mode = mode;\n this.$stopWorker();\n if (this.$useWorker)\n this.$startWorker();\n var tokenizer = mode.getTokenizer();\n if (tokenizer.on !== undefined) {\n var onReloadTokenizer = this.onReloadTokenizer.bind(this);\n tokenizer.on(\"update\", onReloadTokenizer);\n }\n this.bgTokenizer.setTokenizer(tokenizer);\n this.bgTokenizer.setDocument(this.getDocument());\n this.tokenRe = mode.tokenRe;\n this.nonTokenRe = mode.nonTokenRe;\n if (!$isPlaceholder) {\n if (mode.attachToSession)\n mode.attachToSession(this);\n this.$options.wrapMethod.set.call(this, this.$wrapMethod);\n this.$setFolding(mode.foldingRules);\n this.bgTokenizer.start(0);\n this._emit(\"changeMode\", { oldMode: oldMode, mode: mode });\n }\n };\n this.$stopWorker = function () {\n if (this.$worker) {\n this.$worker.terminate();\n this.$worker = null;\n }\n };\n this.$startWorker = function () {\n try {\n this.$worker = this.$mode.createWorker(this);\n }\n catch (e) {\n config.warn(\"Could not load worker\", e);\n this.$worker = null;\n }\n };\n this.getMode = function () {\n return this.$mode;\n };\n this.$scrollTop = 0;\n this.setScrollTop = function (scrollTop) {\n if (this.$scrollTop === scrollTop || isNaN(scrollTop))\n return;\n this.$scrollTop = scrollTop;\n this._signal(\"changeScrollTop\", scrollTop);\n };\n this.getScrollTop = function () {\n return this.$scrollTop;\n };\n this.$scrollLeft = 0;\n this.setScrollLeft = function (scrollLeft) {\n if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft))\n return;\n this.$scrollLeft = scrollLeft;\n this._signal(\"changeScrollLeft\", scrollLeft);\n };\n this.getScrollLeft = function () {\n return this.$scrollLeft;\n };\n this.getScreenWidth = function () {\n this.$computeWidth();\n if (this.lineWidgets)\n return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth);\n return this.screenWidth;\n };\n this.getLineWidgetMaxWidth = function () {\n if (this.lineWidgetsWidth != null)\n return this.lineWidgetsWidth;\n var width = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.screenWidth > width)\n width = w.screenWidth;\n });\n return this.lineWidgetWidth = width;\n };\n this.$computeWidth = function (force) {\n if (this.$modified || force) {\n this.$modified = false;\n if (this.$useWrapMode)\n return this.screenWidth = this.$wrapLimit;\n var lines = this.doc.getAllLines();\n var cache = this.$rowLengthCache;\n var longestScreenLine = 0;\n var foldIndex = 0;\n var foldLine = this.$foldData[foldIndex];\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n var len = lines.length;\n for (var i = 0; i < len; i++) {\n if (i > foldStart) {\n i = foldLine.end.row + 1;\n if (i >= len)\n break;\n foldLine = this.$foldData[foldIndex++];\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (cache[i] == null)\n cache[i] = this.$getStringScreenWidth(lines[i])[0];\n if (cache[i] > longestScreenLine)\n longestScreenLine = cache[i];\n }\n this.screenWidth = longestScreenLine;\n }\n };\n this.getLine = function (row) {\n return this.doc.getLine(row);\n };\n this.getLines = function (firstRow, lastRow) {\n return this.doc.getLines(firstRow, lastRow);\n };\n this.getLength = function () {\n return this.doc.getLength();\n };\n this.getTextRange = function (range) {\n return this.doc.getTextRange(range || this.selection.getRange());\n };\n this.insert = function (position, text) {\n return this.doc.insert(position, text);\n };\n this.remove = function (range) {\n return this.doc.remove(range);\n };\n this.removeFullLines = function (firstRow, lastRow) {\n return this.doc.removeFullLines(firstRow, lastRow);\n };\n this.undoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = deltas.length - 1; i != -1; i--) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.revertDelta(delta);\n }\n else if (delta.folds) {\n this.addFolds(delta.folds);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionBefore)\n this.selection.fromJSON(deltas.selectionBefore);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, true));\n }\n this.$fromUndo = false;\n };\n this.redoChanges = function (deltas, dontSelect) {\n if (!deltas.length)\n return;\n this.$fromUndo = true;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (delta.action == \"insert\" || delta.action == \"remove\") {\n this.doc.$safeApplyDelta(delta);\n }\n }\n if (!dontSelect && this.$undoSelect) {\n if (deltas.selectionAfter)\n this.selection.fromJSON(deltas.selectionAfter);\n else\n this.selection.setRange(this.$getUndoSelection(deltas, false));\n }\n this.$fromUndo = false;\n };\n this.setUndoSelect = function (enable) {\n this.$undoSelect = enable;\n };\n this.$getUndoSelection = function (deltas, isUndo) {\n function isInsert(delta) {\n return isUndo ? delta.action !== \"insert\" : delta.action === \"insert\";\n }\n var range, point;\n for (var i = 0; i < deltas.length; i++) {\n var delta = deltas[i];\n if (!delta.start)\n continue; // skip folds\n if (!range) {\n if (isInsert(delta)) {\n range = Range.fromPoints(delta.start, delta.end);\n }\n else {\n range = Range.fromPoints(delta.start, delta.start);\n }\n continue;\n }\n if (isInsert(delta)) {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range.setStart(point);\n }\n point = delta.end;\n if (range.compare(point.row, point.column) == 1) {\n range.setEnd(point);\n }\n }\n else {\n point = delta.start;\n if (range.compare(point.row, point.column) == -1) {\n range = Range.fromPoints(delta.start, delta.start);\n }\n }\n }\n return range;\n };\n this.replace = function (range, text) {\n return this.doc.replace(range, text);\n };\n this.moveText = function (fromRange, toPosition, copy) {\n var text = this.getTextRange(fromRange);\n var folds = this.getFoldsInRange(fromRange);\n var toRange = Range.fromPoints(toPosition, toPosition);\n if (!copy) {\n this.remove(fromRange);\n var rowDiff = fromRange.start.row - fromRange.end.row;\n var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column;\n if (collDiff) {\n if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column)\n toRange.start.column += collDiff;\n if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column)\n toRange.end.column += collDiff;\n }\n if (rowDiff && toRange.start.row >= fromRange.end.row) {\n toRange.start.row += rowDiff;\n toRange.end.row += rowDiff;\n }\n }\n toRange.end = this.insert(toRange.start, text);\n if (folds.length) {\n var oldStart = fromRange.start;\n var newStart = toRange.start;\n var rowDiff = newStart.row - oldStart.row;\n var collDiff = newStart.column - oldStart.column;\n this.addFolds(folds.map(function (x) {\n x = x.clone();\n if (x.start.row == oldStart.row)\n x.start.column += collDiff;\n if (x.end.row == oldStart.row)\n x.end.column += collDiff;\n x.start.row += rowDiff;\n x.end.row += rowDiff;\n return x;\n }));\n }\n return toRange;\n };\n this.indentRows = function (startRow, endRow, indentString) {\n indentString = indentString.replace(/\\t/g, this.getTabString());\n for (var row = startRow; row <= endRow; row++)\n this.doc.insertInLine({ row: row, column: 0 }, indentString);\n };\n this.outdentRows = function (range) {\n var rowRange = range.collapseRows();\n var deleteRange = new Range(0, 0, 0, 0);\n var size = this.getTabSize();\n for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) {\n var line = this.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n for (var j = 0; j < size; ++j)\n if (line.charAt(j) != ' ')\n break;\n if (j < size && line.charAt(j) == '\\t') {\n deleteRange.start.column = j;\n deleteRange.end.column = j + 1;\n }\n else {\n deleteRange.start.column = 0;\n deleteRange.end.column = j;\n }\n this.remove(deleteRange);\n }\n };\n this.$moveLines = function (firstRow, lastRow, dir) {\n firstRow = this.getRowFoldStart(firstRow);\n lastRow = this.getRowFoldEnd(lastRow);\n if (dir < 0) {\n var row = this.getRowFoldStart(firstRow + dir);\n if (row < 0)\n return 0;\n var diff = row - firstRow;\n }\n else if (dir > 0) {\n var row = this.getRowFoldEnd(lastRow + dir);\n if (row > this.doc.getLength() - 1)\n return 0;\n var diff = row - lastRow;\n }\n else {\n firstRow = this.$clipRowToDocument(firstRow);\n lastRow = this.$clipRowToDocument(lastRow);\n var diff = lastRow - firstRow + 1;\n }\n var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE);\n var folds = this.getFoldsInRange(range).map(function (x) {\n x = x.clone();\n x.start.row += diff;\n x.end.row += diff;\n return x;\n });\n var lines = dir == 0\n ? this.doc.getLines(firstRow, lastRow)\n : this.doc.removeFullLines(firstRow, lastRow);\n this.doc.insertFullLines(firstRow + diff, lines);\n folds.length && this.addFolds(folds);\n return diff;\n };\n this.moveLinesUp = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, -1);\n };\n this.moveLinesDown = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 1);\n };\n this.duplicateLines = function (firstRow, lastRow) {\n return this.$moveLines(firstRow, lastRow, 0);\n };\n this.$clipRowToDocument = function (row) {\n return Math.max(0, Math.min(row, this.doc.getLength() - 1));\n };\n this.$clipColumnToRow = function (row, column) {\n if (column < 0)\n return 0;\n return Math.min(this.doc.getLine(row).length, column);\n };\n this.$clipPositionToDocument = function (row, column) {\n column = Math.max(0, column);\n if (row < 0) {\n row = 0;\n column = 0;\n }\n else {\n var len = this.doc.getLength();\n if (row >= len) {\n row = len - 1;\n column = this.doc.getLine(len - 1).length;\n }\n else {\n column = Math.min(this.doc.getLine(row).length, column);\n }\n }\n return {\n row: row,\n column: column\n };\n };\n this.$clipRangeToDocument = function (range) {\n if (range.start.row < 0) {\n range.start.row = 0;\n range.start.column = 0;\n }\n else {\n range.start.column = this.$clipColumnToRow(range.start.row, range.start.column);\n }\n var len = this.doc.getLength() - 1;\n if (range.end.row > len) {\n range.end.row = len;\n range.end.column = this.doc.getLine(len).length;\n }\n else {\n range.end.column = this.$clipColumnToRow(range.end.row, range.end.column);\n }\n return range;\n };\n this.$wrapLimit = 80;\n this.$useWrapMode = false;\n this.$wrapLimitRange = {\n min: null,\n max: null\n };\n this.setUseWrapMode = function (useWrapMode) {\n if (useWrapMode != this.$useWrapMode) {\n this.$useWrapMode = useWrapMode;\n this.$modified = true;\n this.$resetRowCache(0);\n if (useWrapMode) {\n var len = this.getLength();\n this.$wrapData = Array(len);\n this.$updateWrapData(0, len - 1);\n }\n this._signal(\"changeWrapMode\");\n }\n };\n this.getUseWrapMode = function () {\n return this.$useWrapMode;\n };\n this.setWrapLimitRange = function (min, max) {\n if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) {\n this.$wrapLimitRange = { min: min, max: max };\n this.$modified = true;\n this.$bidiHandler.markAsDirty();\n if (this.$useWrapMode)\n this._signal(\"changeWrapMode\");\n }\n };\n this.adjustWrapLimit = function (desiredLimit, $printMargin) {\n var limits = this.$wrapLimitRange;\n if (limits.max < 0)\n limits = { min: $printMargin, max: $printMargin };\n var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max);\n if (wrapLimit != this.$wrapLimit && wrapLimit > 1) {\n this.$wrapLimit = wrapLimit;\n this.$modified = true;\n if (this.$useWrapMode) {\n this.$updateWrapData(0, this.getLength() - 1);\n this.$resetRowCache(0);\n this._signal(\"changeWrapLimit\");\n }\n return true;\n }\n return false;\n };\n this.$constrainWrapLimit = function (wrapLimit, min, max) {\n if (min)\n wrapLimit = Math.max(min, wrapLimit);\n if (max)\n wrapLimit = Math.min(max, wrapLimit);\n return wrapLimit;\n };\n this.getWrapLimit = function () {\n return this.$wrapLimit;\n };\n this.setWrapLimit = function (limit) {\n this.setWrapLimitRange(limit, limit);\n };\n this.getWrapLimitRange = function () {\n return {\n min: this.$wrapLimitRange.min,\n max: this.$wrapLimitRange.max\n };\n };\n this.$updateInternalDataOnChange = function (delta) {\n var useWrapMode = this.$useWrapMode;\n var action = delta.action;\n var start = delta.start;\n var end = delta.end;\n var firstRow = start.row;\n var lastRow = end.row;\n var len = lastRow - firstRow;\n var removedFolds = null;\n this.$updating = true;\n if (len != 0) {\n if (action === \"remove\") {\n this[useWrapMode ? \"$wrapData\" : \"$rowLengthCache\"].splice(firstRow, len);\n var foldLines = this.$foldData;\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n var foldLine = this.getFoldLine(end.row);\n var idx = 0;\n if (foldLine) {\n foldLine.addRemoveChars(end.row, end.column, start.column - end.column);\n foldLine.shiftRow(-len);\n var foldLineBefore = this.getFoldLine(firstRow);\n if (foldLineBefore && foldLineBefore !== foldLine) {\n foldLineBefore.merge(foldLine);\n foldLine = foldLineBefore;\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= end.row) {\n foldLine.shiftRow(-len);\n }\n }\n lastRow = firstRow;\n }\n else {\n var args = Array(len);\n args.unshift(firstRow, 0);\n var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache;\n arr.splice.apply(arr, args);\n var foldLines = this.$foldData;\n var foldLine = this.getFoldLine(firstRow);\n var idx = 0;\n if (foldLine) {\n var cmp = foldLine.range.compareInside(start.row, start.column);\n if (cmp == 0) {\n foldLine = foldLine.split(start.row, start.column);\n if (foldLine) {\n foldLine.shiftRow(len);\n foldLine.addRemoveChars(lastRow, 0, end.column - start.column);\n }\n }\n else \n if (cmp == -1) {\n foldLine.addRemoveChars(firstRow, 0, end.column - start.column);\n foldLine.shiftRow(len);\n }\n idx = foldLines.indexOf(foldLine) + 1;\n }\n for (idx; idx < foldLines.length; idx++) {\n var foldLine = foldLines[idx];\n if (foldLine.start.row >= firstRow) {\n foldLine.shiftRow(len);\n }\n }\n }\n }\n else {\n len = Math.abs(delta.start.column - delta.end.column);\n if (action === \"remove\") {\n removedFolds = this.getFoldsInRange(delta);\n this.removeFolds(removedFolds);\n len = -len;\n }\n var foldLine = this.getFoldLine(firstRow);\n if (foldLine) {\n foldLine.addRemoveChars(firstRow, start.column, len);\n }\n }\n if (useWrapMode && this.$wrapData.length != this.doc.getLength()) {\n console.error(\"doc.getLength() and $wrapData.length have to be the same!\");\n }\n this.$updating = false;\n if (useWrapMode)\n this.$updateWrapData(firstRow, lastRow);\n else\n this.$updateRowLengthCache(firstRow, lastRow);\n return removedFolds;\n };\n this.$updateRowLengthCache = function (firstRow, lastRow, b) {\n this.$rowLengthCache[firstRow] = null;\n this.$rowLengthCache[lastRow] = null;\n };\n this.$updateWrapData = function (firstRow, lastRow) {\n var lines = this.doc.getAllLines();\n var tabSize = this.getTabSize();\n var wrapData = this.$wrapData;\n var wrapLimit = this.$wrapLimit;\n var tokens;\n var foldLine;\n var row = firstRow;\n lastRow = Math.min(lastRow, lines.length - 1);\n while (row <= lastRow) {\n foldLine = this.getFoldLine(row, foldLine);\n if (!foldLine) {\n tokens = this.$getDisplayTokens(lines[row]);\n wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row++;\n }\n else {\n tokens = [];\n foldLine.walk(function (placeholder, row, column, lastColumn) {\n var walkTokens;\n if (placeholder != null) {\n walkTokens = this.$getDisplayTokens(placeholder, tokens.length);\n walkTokens[0] = PLACEHOLDER_START;\n for (var i = 1; i < walkTokens.length; i++) {\n walkTokens[i] = PLACEHOLDER_BODY;\n }\n }\n else {\n walkTokens = this.$getDisplayTokens(lines[row].substring(lastColumn, column), tokens.length);\n }\n tokens = tokens.concat(walkTokens);\n }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1);\n wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize);\n row = foldLine.end.row + 1;\n }\n }\n };\n var CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12;\n this.$computeWrapSplits = function (tokens, wrapLimit, tabSize) {\n if (tokens.length == 0) {\n return [];\n }\n var splits = [];\n var displayLength = tokens.length;\n var lastSplit = 0, lastDocSplit = 0;\n var isCode = this.$wrapAsCode;\n var indentedSoftWrap = this.$indentedSoftWrap;\n var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8)\n || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2);\n function getWrapIndent() {\n var indentation = 0;\n if (maxIndent === 0)\n return indentation;\n if (indentedSoftWrap) {\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n if (token == SPACE)\n indentation += 1;\n else if (token == TAB)\n indentation += tabSize;\n else if (token == TAB_SPACE)\n continue;\n else\n break;\n }\n }\n if (isCode && indentedSoftWrap !== false)\n indentation += tabSize;\n return Math.min(indentation, maxIndent);\n }\n function addSplit(screenPos) {\n var len = screenPos - lastSplit;\n for (var i = lastSplit; i < screenPos; i++) {\n var ch = tokens[i];\n if (ch === 12 || ch === 2)\n len -= 1;\n }\n if (!splits.length) {\n indent = getWrapIndent();\n splits.indent = indent;\n }\n lastDocSplit += len;\n splits.push(lastDocSplit);\n lastSplit = screenPos;\n }\n var indent = 0;\n while (displayLength - lastSplit > wrapLimit - indent) {\n var split = lastSplit + wrapLimit - indent;\n if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) {\n addSplit(split);\n continue;\n }\n if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) {\n for (split; split != lastSplit - 1; split--) {\n if (tokens[split] == PLACEHOLDER_START) {\n break;\n }\n }\n if (split > lastSplit) {\n addSplit(split);\n continue;\n }\n split = lastSplit + wrapLimit;\n for (split; split < tokens.length; split++) {\n if (tokens[split] != PLACEHOLDER_BODY) {\n break;\n }\n }\n if (split == tokens.length) {\n break; // Breaks the while-loop.\n }\n addSplit(split);\n continue;\n }\n var minSplit = Math.max(split - (wrapLimit - (wrapLimit >> 2)), lastSplit - 1);\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n if (isCode) {\n while (split > minSplit && tokens[split] < PLACEHOLDER_START) {\n split--;\n }\n while (split > minSplit && tokens[split] == PUNCTUATION) {\n split--;\n }\n }\n else {\n while (split > minSplit && tokens[split] < SPACE) {\n split--;\n }\n }\n if (split > minSplit) {\n addSplit(++split);\n continue;\n }\n split = lastSplit + wrapLimit;\n if (tokens[split] == CHAR_EXT)\n split--;\n addSplit(split - indent);\n }\n return splits;\n };\n this.$getDisplayTokens = function (str, offset) {\n var arr = [];\n var tabSize;\n offset = offset || 0;\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c == 9) {\n tabSize = this.getScreenTabSize(arr.length + offset);\n arr.push(TAB);\n for (var n = 1; n < tabSize; n++) {\n arr.push(TAB_SPACE);\n }\n }\n else if (c == 32) {\n arr.push(SPACE);\n }\n else if ((c > 39 && c < 48) || (c > 57 && c < 64)) {\n arr.push(PUNCTUATION);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n arr.push(CHAR, CHAR_EXT);\n }\n else {\n arr.push(CHAR);\n }\n }\n return arr;\n };\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn == 0)\n return [0, 0];\n if (maxScreenColumn == null)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charCodeAt(column);\n if (c == 9) {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else if (c >= 0x1100 && isFullWidth(c)) {\n screenColumn += 2;\n }\n else {\n screenColumn += 1;\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n this.lineWidgets = null;\n this.getRowLength = function (row) {\n var h = 1;\n if (this.lineWidgets)\n h += this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n if (!this.$useWrapMode || !this.$wrapData[row])\n return h;\n else\n return this.$wrapData[row].length + h;\n };\n this.getRowLineCount = function (row) {\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1;\n }\n else {\n return this.$wrapData[row].length + 1;\n }\n };\n this.getRowWrapIndent = function (screenRow) {\n if (this.$useWrapMode) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n var splits = this.$wrapData[pos.row];\n return splits.length && splits[0] < pos.column ? splits.indent : 0;\n }\n else {\n return 0;\n }\n };\n this.getScreenLastRowColumn = function (screenRow) {\n var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE);\n return this.documentToScreenColumn(pos.row, pos.column);\n };\n this.getDocumentLastRowColumn = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.getScreenLastRowColumn(screenRow);\n };\n this.getDocumentLastRowColumnPosition = function (docRow, docColumn) {\n var screenRow = this.documentToScreenRow(docRow, docColumn);\n return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10);\n };\n this.getRowSplitData = function (row) {\n if (!this.$useWrapMode) {\n return undefined;\n }\n else {\n return this.$wrapData[row];\n }\n };\n this.getScreenTabSize = function (screenColumn) {\n return this.$tabSize - (screenColumn % this.$tabSize | 0);\n };\n this.screenToDocumentRow = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).row;\n };\n this.screenToDocumentColumn = function (screenRow, screenColumn) {\n return this.screenToDocumentPosition(screenRow, screenColumn).column;\n };\n this.screenToDocumentPosition = function (screenRow, screenColumn, offsetX) {\n if (screenRow < 0)\n return { row: 0, column: 0 };\n var line;\n var docRow = 0;\n var docColumn = 0;\n var column;\n var row = 0;\n var rowLength = 0;\n var rowCache = this.$screenRowCache;\n var i = this.$getRowCacheIndex(rowCache, screenRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var docRow = this.$docRowCache[i];\n var doCache = screenRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var maxRow = this.getLength() - 1;\n var foldLine = this.getNextFoldLine(docRow);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row <= screenRow) {\n rowLength = this.getRowLength(docRow);\n if (row + rowLength > screenRow || docRow >= maxRow) {\n break;\n }\n else {\n row += rowLength;\n docRow++;\n if (docRow > foldStart) {\n docRow = foldLine.end.row + 1;\n foldLine = this.getNextFoldLine(docRow, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n }\n if (doCache) {\n this.$docRowCache.push(docRow);\n this.$screenRowCache.push(row);\n }\n }\n if (foldLine && foldLine.start.row <= docRow) {\n line = this.getFoldDisplayLine(foldLine);\n docRow = foldLine.start.row;\n }\n else if (row + rowLength <= screenRow || docRow > maxRow) {\n return {\n row: maxRow,\n column: this.getLine(maxRow).length\n };\n }\n else {\n line = this.getLine(docRow);\n foldLine = null;\n }\n var wrapIndent = 0, splitIndex = Math.floor(screenRow - row);\n if (this.$useWrapMode) {\n var splits = this.$wrapData[docRow];\n if (splits) {\n column = splits[splitIndex];\n if (splitIndex > 0 && splits.length) {\n wrapIndent = splits.indent;\n docColumn = splits[splitIndex - 1] || splits[splits.length - 1];\n line = line.substring(docColumn);\n }\n }\n }\n if (offsetX !== undefined && this.$bidiHandler.isBidiRow(row + splitIndex, docRow, splitIndex))\n screenColumn = this.$bidiHandler.offsetToCol(offsetX);\n docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1];\n if (this.$useWrapMode && docColumn >= column)\n docColumn = column - 1;\n if (foldLine)\n return foldLine.idxToPosition(docColumn);\n return { row: docRow, column: docColumn };\n };\n this.documentToScreenPosition = function (docRow, docColumn) {\n if (typeof docColumn === \"undefined\")\n var pos = this.$clipPositionToDocument(docRow.row, docRow.column);\n else\n pos = this.$clipPositionToDocument(docRow, docColumn);\n docRow = pos.row;\n docColumn = pos.column;\n var screenRow = 0;\n var foldStartRow = null;\n var fold = null;\n fold = this.getFoldAt(docRow, docColumn, 1);\n if (fold) {\n docRow = fold.start.row;\n docColumn = fold.start.column;\n }\n var rowEnd, row = 0;\n var rowCache = this.$docRowCache;\n var i = this.$getRowCacheIndex(rowCache, docRow);\n var l = rowCache.length;\n if (l && i >= 0) {\n var row = rowCache[i];\n var screenRow = this.$screenRowCache[i];\n var doCache = docRow > rowCache[l - 1];\n }\n else {\n var doCache = !l;\n }\n var foldLine = this.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (row < docRow) {\n if (row >= foldStart) {\n rowEnd = foldLine.end.row + 1;\n if (rowEnd > docRow)\n break;\n foldLine = this.getNextFoldLine(rowEnd, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n else {\n rowEnd = row + 1;\n }\n screenRow += this.getRowLength(row);\n row = rowEnd;\n if (doCache) {\n this.$docRowCache.push(row);\n this.$screenRowCache.push(screenRow);\n }\n }\n var textLine = \"\";\n if (foldLine && row >= foldStart) {\n textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn);\n foldStartRow = foldLine.start.row;\n }\n else {\n textLine = this.getLine(docRow).substring(0, docColumn);\n foldStartRow = docRow;\n }\n var wrapIndent = 0;\n if (this.$useWrapMode) {\n var wrapRow = this.$wrapData[foldStartRow];\n if (wrapRow) {\n var screenRowOffset = 0;\n while (textLine.length >= wrapRow[screenRowOffset]) {\n screenRow++;\n screenRowOffset++;\n }\n textLine = textLine.substring(wrapRow[screenRowOffset - 1] || 0, textLine.length);\n wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0;\n }\n }\n if (this.lineWidgets && this.lineWidgets[row] && this.lineWidgets[row].rowsAbove)\n screenRow += this.lineWidgets[row].rowsAbove;\n return {\n row: screenRow,\n column: wrapIndent + this.$getStringScreenWidth(textLine)[0]\n };\n };\n this.documentToScreenColumn = function (row, docColumn) {\n return this.documentToScreenPosition(row, docColumn).column;\n };\n this.documentToScreenRow = function (docRow, docColumn) {\n return this.documentToScreenPosition(docRow, docColumn).row;\n };\n this.getScreenLength = function () {\n var screenRows = 0;\n var fold = null;\n if (!this.$useWrapMode) {\n screenRows = this.getLength();\n var foldData = this.$foldData;\n for (var i = 0; i < foldData.length; i++) {\n fold = foldData[i];\n screenRows -= fold.end.row - fold.start.row;\n }\n }\n else {\n var lastRow = this.$wrapData.length;\n var row = 0, i = 0;\n var fold = this.$foldData[i++];\n var foldStart = fold ? fold.start.row : Infinity;\n while (row < lastRow) {\n var splits = this.$wrapData[row];\n screenRows += splits ? splits.length + 1 : 1;\n row++;\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = this.$foldData[i++];\n foldStart = fold ? fold.start.row : Infinity;\n }\n }\n }\n if (this.lineWidgets)\n screenRows += this.$getWidgetScreenLength();\n return screenRows;\n };\n this.$setFontMetrics = function (fm) {\n if (!this.$enableVarChar)\n return;\n this.$getStringScreenWidth = function (str, maxScreenColumn, screenColumn) {\n if (maxScreenColumn === 0)\n return [0, 0];\n if (!maxScreenColumn)\n maxScreenColumn = Infinity;\n screenColumn = screenColumn || 0;\n var c, column;\n for (column = 0; column < str.length; column++) {\n c = str.charAt(column);\n if (c === \"\\t\") {\n screenColumn += this.getScreenTabSize(screenColumn);\n }\n else {\n screenColumn += fm.getCharacterWidth(c);\n }\n if (screenColumn > maxScreenColumn) {\n break;\n }\n }\n return [screenColumn, column];\n };\n };\n this.destroy = function () {\n if (!this.destroyed) {\n this.bgTokenizer.setDocument(null);\n this.bgTokenizer.cleanup();\n this.destroyed = true;\n }\n this.$stopWorker();\n this.removeAllListeners();\n if (this.doc) {\n this.doc.off(\"change\", this.$onChange);\n }\n this.selection.detach();\n };\n this.isFullWidth = isFullWidth;\n function isFullWidth(c) {\n if (c < 0x1100)\n return false;\n return c >= 0x1100 && c <= 0x115F ||\n c >= 0x11A3 && c <= 0x11A7 ||\n c >= 0x11FA && c <= 0x11FF ||\n c >= 0x2329 && c <= 0x232A ||\n c >= 0x2E80 && c <= 0x2E99 ||\n c >= 0x2E9B && c <= 0x2EF3 ||\n c >= 0x2F00 && c <= 0x2FD5 ||\n c >= 0x2FF0 && c <= 0x2FFB ||\n c >= 0x3000 && c <= 0x303E ||\n c >= 0x3041 && c <= 0x3096 ||\n c >= 0x3099 && c <= 0x30FF ||\n c >= 0x3105 && c <= 0x312D ||\n c >= 0x3131 && c <= 0x318E ||\n c >= 0x3190 && c <= 0x31BA ||\n c >= 0x31C0 && c <= 0x31E3 ||\n c >= 0x31F0 && c <= 0x321E ||\n c >= 0x3220 && c <= 0x3247 ||\n c >= 0x3250 && c <= 0x32FE ||\n c >= 0x3300 && c <= 0x4DBF ||\n c >= 0x4E00 && c <= 0xA48C ||\n c >= 0xA490 && c <= 0xA4C6 ||\n c >= 0xA960 && c <= 0xA97C ||\n c >= 0xAC00 && c <= 0xD7A3 ||\n c >= 0xD7B0 && c <= 0xD7C6 ||\n c >= 0xD7CB && c <= 0xD7FB ||\n c >= 0xF900 && c <= 0xFAFF ||\n c >= 0xFE10 && c <= 0xFE19 ||\n c >= 0xFE30 && c <= 0xFE52 ||\n c >= 0xFE54 && c <= 0xFE66 ||\n c >= 0xFE68 && c <= 0xFE6B ||\n c >= 0xFF01 && c <= 0xFF60 ||\n c >= 0xFFE0 && c <= 0xFFE6;\n }\n}).call(EditSession.prototype);\nrequire(\"./edit_session/folding\").Folding.call(EditSession.prototype);\nrequire(\"./edit_session/bracket_match\").BracketMatch.call(EditSession.prototype);\nconfig.defineOptions(EditSession.prototype, \"session\", {\n wrap: {\n set: function (value) {\n if (!value || value == \"off\")\n value = false;\n else if (value == \"free\")\n value = true;\n else if (value == \"printMargin\")\n value = -1;\n else if (typeof value == \"string\")\n value = parseInt(value, 10) || false;\n if (this.$wrap == value)\n return;\n this.$wrap = value;\n if (!value) {\n this.setUseWrapMode(false);\n }\n else {\n var col = typeof value == \"number\" ? value : null;\n this.setWrapLimitRange(col, col);\n this.setUseWrapMode(true);\n }\n },\n get: function () {\n if (this.getUseWrapMode()) {\n if (this.$wrap == -1)\n return \"printMargin\";\n if (!this.getWrapLimitRange().min)\n return \"free\";\n return this.$wrap;\n }\n return \"off\";\n },\n handlesSet: true\n },\n wrapMethod: {\n set: function (val) {\n val = val == \"auto\"\n ? this.$mode.type != \"text\"\n : val != \"text\";\n if (val != this.$wrapAsCode) {\n this.$wrapAsCode = val;\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n }\n },\n initialValue: \"auto\"\n },\n indentedSoftWrap: {\n set: function () {\n if (this.$useWrapMode) {\n this.$useWrapMode = false;\n this.setUseWrapMode(true);\n }\n },\n initialValue: true\n },\n firstLineNumber: {\n set: function () { this._signal(\"changeBreakpoint\"); },\n initialValue: 1\n },\n useWorker: {\n set: function (useWorker) {\n this.$useWorker = useWorker;\n this.$stopWorker();\n if (useWorker)\n this.$startWorker();\n },\n initialValue: true\n },\n useSoftTabs: { initialValue: true },\n tabSize: {\n set: function (tabSize) {\n tabSize = parseInt(tabSize);\n if (tabSize > 0 && this.$tabSize !== tabSize) {\n this.$modified = true;\n this.$rowLengthCache = [];\n this.$tabSize = tabSize;\n this._signal(\"changeTabSize\");\n }\n },\n initialValue: 4,\n handlesSet: true\n },\n navigateWithinSoftTabs: { initialValue: false },\n foldStyle: {\n set: function (val) { this.setFoldStyle(val); },\n handlesSet: true\n },\n overwrite: {\n set: function (val) { this._signal(\"changeOverwrite\"); },\n initialValue: false\n },\n newLineMode: {\n set: function (val) { this.doc.setNewLineMode(val); },\n get: function () { return this.doc.getNewLineMode(); },\n handlesSet: true\n },\n mode: {\n set: function (val) { this.setMode(val); },\n get: function () { return this.$modeId; },\n handlesSet: true\n }\n});\nexports.EditSession = EditSession;\n\n});\n\nace.define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"./lib/lang\");\nvar oop = require(\"./lib/oop\");\nvar Range = require(\"./range\").Range;\nvar Search = function () {\n this.$options = {};\n};\n(function () {\n this.set = function (options) {\n oop.mixin(this.$options, options);\n return this;\n };\n this.getOptions = function () {\n return lang.copyObject(this.$options);\n };\n this.setOptions = function (options) {\n this.$options = options;\n };\n this.find = function (session) {\n var options = this.$options;\n var iterator = this.$matchIterator(session, options);\n if (!iterator)\n return false;\n var firstRange = null;\n iterator.forEach(function (sr, sc, er, ec) {\n firstRange = new Range(sr, sc, er, ec);\n if (sc == ec && options.start && options.start.start\n && options.skipCurrent != false && firstRange.isEqual(options.start)) {\n firstRange = null;\n return false;\n }\n return true;\n });\n return firstRange;\n };\n this.findAll = function (session) {\n var options = this.$options;\n if (!options.needle)\n return [];\n this.$assembleRegExp(options);\n var range = options.range;\n var lines = range\n ? session.getLines(range.start.row, range.end.row)\n : session.doc.getAllLines();\n var ranges = [];\n var re = options.re;\n if (options.$isMultiLine) {\n var len = re.length;\n var maxRow = lines.length - len;\n var prevRange;\n outer: for (var row = re.offset || 0; row <= maxRow; row++) {\n for (var j = 0; j < len; j++)\n if (lines[row + j].search(re[j]) == -1)\n continue outer;\n var startLine = lines[row];\n var line = lines[row + len - 1];\n var startIndex = startLine.length - startLine.match(re[0])[0].length;\n var endIndex = line.match(re[len - 1])[0].length;\n if (prevRange && prevRange.end.row === row &&\n prevRange.end.column > startIndex) {\n continue;\n }\n ranges.push(prevRange = new Range(row, startIndex, row + len - 1, endIndex));\n if (len > 2)\n row = row + len - 2;\n }\n }\n else {\n for (var i = 0; i < lines.length; i++) {\n var matches = lang.getMatchOffsets(lines[i], re);\n for (var j = 0; j < matches.length; j++) {\n var match = matches[j];\n ranges.push(new Range(i, match.offset, i, match.offset + match.length));\n }\n }\n }\n if (range) {\n var startColumn = range.start.column;\n var endColumn = range.end.column;\n var i = 0, j = ranges.length - 1;\n while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == 0)\n i++;\n var endRow = range.end.row - range.start.row;\n while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == endRow)\n j--;\n ranges = ranges.slice(i, j + 1);\n for (i = 0, j = ranges.length; i < j; i++) {\n ranges[i].start.row += range.start.row;\n ranges[i].end.row += range.start.row;\n }\n }\n return ranges;\n };\n this.replace = function (input, replacement) {\n var options = this.$options;\n var re = this.$assembleRegExp(options);\n if (options.$isMultiLine)\n return replacement;\n if (!re)\n return;\n var match = re.exec(input);\n if (!match || match[0].length != input.length)\n return null;\n replacement = input.replace(re, replacement);\n if (options.preserveCase) {\n replacement = replacement.split(\"\");\n for (var i = Math.min(input.length, input.length); i--;) {\n var ch = input[i];\n if (ch && ch.toLowerCase() != ch)\n replacement[i] = replacement[i].toUpperCase();\n else\n replacement[i] = replacement[i].toLowerCase();\n }\n replacement = replacement.join(\"\");\n }\n return replacement;\n };\n this.$assembleRegExp = function (options, $disableFakeMultiline) {\n if (options.needle instanceof RegExp)\n return options.re = options.needle;\n var needle = options.needle;\n if (!options.needle)\n return options.re = false;\n if (!options.regExp)\n needle = lang.escapeRegExp(needle);\n if (options.wholeWord)\n needle = addWordBoundary(needle, options);\n var modifier = options.caseSensitive ? \"gm\" : \"gmi\";\n options.$isMultiLine = !$disableFakeMultiline && /[\\n\\r]/.test(needle);\n if (options.$isMultiLine)\n return options.re = this.$assembleMultilineRegExp(needle, modifier);\n try {\n var re = new RegExp(needle, modifier);\n }\n catch (e) {\n re = false;\n }\n return options.re = re;\n };\n this.$assembleMultilineRegExp = function (needle, modifier) {\n var parts = needle.replace(/\\r\\n|\\r|\\n/g, \"$\\n^\").split(\"\\n\");\n var re = [];\n for (var i = 0; i < parts.length; i++)\n try {\n re.push(new RegExp(parts[i], modifier));\n }\n catch (e) {\n return false;\n }\n return re;\n };\n this.$matchIterator = function (session, options) {\n var re = this.$assembleRegExp(options);\n if (!re)\n return false;\n var backwards = options.backwards == true;\n var skipCurrent = options.skipCurrent != false;\n var range = options.range;\n var start = options.start;\n if (!start)\n start = range ? range[backwards ? \"end\" : \"start\"] : session.selection.getRange();\n if (start.start)\n start = start[skipCurrent != backwards ? \"end\" : \"start\"];\n var firstRow = range ? range.start.row : 0;\n var lastRow = range ? range.end.row : session.getLength() - 1;\n if (backwards) {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row--; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = lastRow, firstRow = start.row; row >= firstRow; row--)\n if (forEachInLine(row, Number.MAX_VALUE, callback))\n return;\n };\n }\n else {\n var forEach = function (callback) {\n var row = start.row;\n if (forEachInLine(row, start.column, callback))\n return;\n for (row = row + 1; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n if (options.wrap == false)\n return;\n for (row = firstRow, lastRow = start.row; row <= lastRow; row++)\n if (forEachInLine(row, 0, callback))\n return;\n };\n }\n if (options.$isMultiLine) {\n var len = re.length;\n var forEachInLine = function (row, offset, callback) {\n var startRow = backwards ? row - len + 1 : row;\n if (startRow < 0 || startRow + len > session.getLength())\n return;\n var line = session.getLine(startRow);\n var startIndex = line.search(re[0]);\n if (!backwards && startIndex < offset || startIndex === -1)\n return;\n for (var i = 1; i < len; i++) {\n line = session.getLine(startRow + i);\n if (line.search(re[i]) == -1)\n return;\n }\n var endIndex = line.match(re[len - 1])[0].length;\n if (backwards && endIndex > offset)\n return;\n if (callback(startRow, startIndex, startRow + len - 1, endIndex))\n return true;\n };\n }\n else if (backwards) {\n var forEachInLine = function (row, endIndex, callback) {\n var line = session.getLine(row);\n var matches = [];\n var m, last = 0;\n re.lastIndex = 0;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (!length) {\n if (last >= line.length)\n break;\n re.lastIndex = last += 1;\n }\n if (m.index + length > endIndex)\n break;\n matches.push(m.index, length);\n }\n for (var i = matches.length - 1; i >= 0; i -= 2) {\n var column = matches[i - 1];\n var length = matches[i];\n if (callback(row, column, row, column + length))\n return true;\n }\n };\n }\n else {\n var forEachInLine = function (row, startIndex, callback) {\n var line = session.getLine(row);\n var last;\n var m;\n re.lastIndex = startIndex;\n while ((m = re.exec(line))) {\n var length = m[0].length;\n last = m.index;\n if (callback(row, last, row, last + length))\n return true;\n if (!length) {\n re.lastIndex = last += 1;\n if (last >= line.length)\n return false;\n }\n }\n };\n }\n return { forEach: forEach };\n };\n}).call(Search.prototype);\nfunction addWordBoundary(needle, options) {\n function wordBoundary(c) {\n if (/\\w/.test(c) || options.regExp)\n return \"\\\\b\";\n return \"\";\n }\n return wordBoundary(needle[0]) + needle\n + wordBoundary(needle[needle.length - 1]);\n}\nexports.Search = Search;\n\n});\n\nace.define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar keyUtil = require(\"../lib/keys\");\nvar useragent = require(\"../lib/useragent\");\nvar KEY_MODS = keyUtil.KEY_MODS;\nfunction HashHandler(config, platform) {\n this.platform = platform || (useragent.isMac ? \"mac\" : \"win\");\n this.commands = {};\n this.commandKeyBinding = {};\n this.addCommands(config);\n this.$singleCommand = true;\n}\nfunction MultiHashHandler(config, platform) {\n HashHandler.call(this, config, platform);\n this.$singleCommand = false;\n}\nMultiHashHandler.prototype = HashHandler.prototype;\n(function () {\n this.addCommand = function (command) {\n if (this.commands[command.name])\n this.removeCommand(command);\n this.commands[command.name] = command;\n if (command.bindKey)\n this._buildKeyHash(command);\n };\n this.removeCommand = function (command, keepCommand) {\n var name = command && (typeof command === 'string' ? command : command.name);\n command = this.commands[name];\n if (!keepCommand)\n delete this.commands[name];\n var ckb = this.commandKeyBinding;\n for (var keyId in ckb) {\n var cmdGroup = ckb[keyId];\n if (cmdGroup == command) {\n delete ckb[keyId];\n }\n else if (Array.isArray(cmdGroup)) {\n var i = cmdGroup.indexOf(command);\n if (i != -1) {\n cmdGroup.splice(i, 1);\n if (cmdGroup.length == 1)\n ckb[keyId] = cmdGroup[0];\n }\n }\n }\n };\n this.bindKey = function (key, command, position) {\n if (typeof key == \"object\" && key) {\n if (position == undefined)\n position = key.position;\n key = key[this.platform];\n }\n if (!key)\n return;\n if (typeof command == \"function\")\n return this.addCommand({ exec: command, bindKey: key, name: command.name || key });\n key.split(\"|\").forEach(function (keyPart) {\n var chain = \"\";\n if (keyPart.indexOf(\" \") != -1) {\n var parts = keyPart.split(/\\s+/);\n keyPart = parts.pop();\n parts.forEach(function (keyPart) {\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n chain += (chain ? \" \" : \"\") + id;\n this._addCommandToBinding(chain, \"chainKeys\");\n }, this);\n chain += \" \";\n }\n var binding = this.parseKeys(keyPart);\n var id = KEY_MODS[binding.hashId] + binding.key;\n this._addCommandToBinding(chain + id, command, position);\n }, this);\n };\n function getPosition(command) {\n return typeof command == \"object\" && command.bindKey\n && command.bindKey.position\n || (command.isDefault ? -100 : 0);\n }\n this._addCommandToBinding = function (keyId, command, position) {\n var ckb = this.commandKeyBinding, i;\n if (!command) {\n delete ckb[keyId];\n }\n else if (!ckb[keyId] || this.$singleCommand) {\n ckb[keyId] = command;\n }\n else {\n if (!Array.isArray(ckb[keyId])) {\n ckb[keyId] = [ckb[keyId]];\n }\n else if ((i = ckb[keyId].indexOf(command)) != -1) {\n ckb[keyId].splice(i, 1);\n }\n if (typeof position != \"number\") {\n position = getPosition(command);\n }\n var commands = ckb[keyId];\n for (i = 0; i < commands.length; i++) {\n var other = commands[i];\n var otherPos = getPosition(other);\n if (otherPos > position)\n break;\n }\n commands.splice(i, 0, command);\n }\n };\n this.addCommands = function (commands) {\n commands && Object.keys(commands).forEach(function (name) {\n var command = commands[name];\n if (!command)\n return;\n if (typeof command === \"string\")\n return this.bindKey(command, name);\n if (typeof command === \"function\")\n command = { exec: command };\n if (typeof command !== \"object\")\n return;\n if (!command.name)\n command.name = name;\n this.addCommand(command);\n }, this);\n };\n this.removeCommands = function (commands) {\n Object.keys(commands).forEach(function (name) {\n this.removeCommand(commands[name]);\n }, this);\n };\n this.bindKeys = function (keyList) {\n Object.keys(keyList).forEach(function (key) {\n this.bindKey(key, keyList[key]);\n }, this);\n };\n this._buildKeyHash = function (command) {\n this.bindKey(command.bindKey, command);\n };\n this.parseKeys = function (keys) {\n var parts = keys.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function (x) { return x; });\n var key = parts.pop();\n var keyCode = keyUtil[key];\n if (keyUtil.FUNCTION_KEYS[keyCode])\n key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase();\n else if (!parts.length)\n return { key: key, hashId: -1 };\n else if (parts.length == 1 && parts[0] == \"shift\")\n return { key: key.toUpperCase(), hashId: -1 };\n var hashId = 0;\n for (var i = parts.length; i--;) {\n var modifier = keyUtil.KEY_MODS[parts[i]];\n if (modifier == null) {\n if (typeof console != \"undefined\")\n console.error(\"invalid modifier \" + parts[i] + \" in \" + keys);\n return false;\n }\n hashId |= modifier;\n }\n return { key: key, hashId: hashId };\n };\n this.findKeyCommand = function findKeyCommand(hashId, keyString) {\n var key = KEY_MODS[hashId] + keyString;\n return this.commandKeyBinding[key];\n };\n this.handleKeyboard = function (data, hashId, keyString, keyCode) {\n if (keyCode < 0)\n return;\n var key = KEY_MODS[hashId] + keyString;\n var command = this.commandKeyBinding[key];\n if (data.$keyChain) {\n data.$keyChain += \" \" + key;\n command = this.commandKeyBinding[data.$keyChain] || command;\n }\n if (command) {\n if (command == \"chainKeys\" || command[command.length - 1] == \"chainKeys\") {\n data.$keyChain = data.$keyChain || key;\n return { command: \"null\" };\n }\n }\n if (data.$keyChain) {\n if ((!hashId || hashId == 4) && keyString.length == 1)\n data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input\n else if (hashId == -1 || keyCode > 0)\n data.$keyChain = \"\"; // reset keyChain\n }\n return { command: command };\n };\n this.getStatusText = function (editor, data) {\n return data.$keyChain || \"\";\n };\n}).call(HashHandler.prototype);\nexports.HashHandler = HashHandler;\nexports.MultiHashHandler = MultiHashHandler;\n\n});\n\nace.define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar MultiHashHandler = require(\"../keyboard/hash_handler\").MultiHashHandler;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CommandManager = function (platform, commands) {\n MultiHashHandler.call(this, commands, platform);\n this.byName = this.commands;\n this.setDefaultHandler(\"exec\", function (e) {\n if (!e.args) {\n return e.command.exec(e.editor, {}, e.event, true);\n }\n return e.command.exec(e.editor, e.args, e.event, false);\n });\n};\noop.inherits(CommandManager, MultiHashHandler);\n(function () {\n oop.implement(this, EventEmitter);\n this.exec = function (command, editor, args) {\n if (Array.isArray(command)) {\n for (var i = command.length; i--;) {\n if (this.exec(command[i], editor, args))\n return true;\n }\n return false;\n }\n if (typeof command === \"string\")\n command = this.commands[command];\n if (!command)\n return false;\n if (editor && editor.$readOnly && !command.readOnly)\n return false;\n if (this.$checkCommandState != false && command.isAvailable && !command.isAvailable(editor))\n return false;\n var e = { editor: editor, command: command, args: args };\n e.returnValue = this._emit(\"exec\", e);\n this._signal(\"afterExec\", e);\n return e.returnValue === false ? false : true;\n };\n this.toggleRecording = function (editor) {\n if (this.$inReplay)\n return;\n editor && editor._emit(\"changeStatus\");\n if (this.recording) {\n this.macro.pop();\n this.off(\"exec\", this.$addCommandToMacro);\n if (!this.macro.length)\n this.macro = this.oldMacro;\n return this.recording = false;\n }\n if (!this.$addCommandToMacro) {\n this.$addCommandToMacro = function (e) {\n this.macro.push([e.command, e.args]);\n }.bind(this);\n }\n this.oldMacro = this.macro;\n this.macro = [];\n this.on(\"exec\", this.$addCommandToMacro);\n return this.recording = true;\n };\n this.replay = function (editor) {\n if (this.$inReplay || !this.macro)\n return;\n if (this.recording)\n return this.toggleRecording(editor);\n try {\n this.$inReplay = true;\n this.macro.forEach(function (x) {\n if (typeof x == \"string\")\n this.exec(x, editor);\n else\n this.exec(x[0], editor, x[1]);\n }, this);\n }\n finally {\n this.$inReplay = false;\n }\n };\n this.trimMacro = function (m) {\n return m.map(function (x) {\n if (typeof x[0] != \"string\")\n x[0] = x[0].name;\n if (!x[1])\n x = x[0];\n return x;\n });\n };\n}).call(CommandManager.prototype);\nexports.CommandManager = CommandManager;\n\n});\n\nace.define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar lang = require(\"../lib/lang\");\nvar config = require(\"../config\");\nvar Range = require(\"../range\").Range;\nfunction bindKey(win, mac) {\n return { win: win, mac: mac };\n}\nexports.commands = [{\n name: \"showSettingsMenu\",\n description: \"Show settings menu\",\n bindKey: bindKey(\"Ctrl-,\", \"Command-,\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/settings_menu\", function (module) {\n module.init(editor);\n editor.showSettingsMenu();\n });\n },\n readOnly: true\n }, {\n name: \"goToNextError\",\n description: \"Go to next error\",\n bindKey: bindKey(\"Alt-E\", \"F4\"),\n exec: function (editor) {\n config.loadModule(\"./ext/error_marker\", function (module) {\n module.showErrorMarker(editor, 1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"goToPreviousError\",\n description: \"Go to previous error\",\n bindKey: bindKey(\"Alt-Shift-E\", \"Shift-F4\"),\n exec: function (editor) {\n config.loadModule(\"./ext/error_marker\", function (module) {\n module.showErrorMarker(editor, -1);\n });\n },\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selectall\",\n description: \"Select all\",\n bindKey: bindKey(\"Ctrl-A\", \"Command-A\"),\n exec: function (editor) { editor.selectAll(); },\n readOnly: true\n }, {\n name: \"centerselection\",\n description: \"Center selection\",\n bindKey: bindKey(null, \"Ctrl-L\"),\n exec: function (editor) { editor.centerSelection(); },\n readOnly: true\n }, {\n name: \"gotoline\",\n description: \"Go to line...\",\n bindKey: bindKey(\"Ctrl-L\", \"Command-L\"),\n exec: function (editor, line) {\n if (typeof line === \"number\" && !isNaN(line))\n editor.gotoLine(line);\n editor.prompt({ $type: \"gotoLine\" });\n },\n readOnly: true\n }, {\n name: \"fold\",\n bindKey: bindKey(\"Alt-L|Ctrl-F1\", \"Command-Alt-L|Command-F1\"),\n exec: function (editor) { editor.session.toggleFold(false); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfold\",\n bindKey: bindKey(\"Alt-Shift-L|Ctrl-Shift-F1\", \"Command-Alt-Shift-L|Command-Shift-F1\"),\n exec: function (editor) { editor.session.toggleFold(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleFoldWidget\",\n description: \"Toggle fold widget\",\n bindKey: bindKey(\"F2\", \"F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"toggleParentFoldWidget\",\n description: \"Toggle parent fold widget\",\n bindKey: bindKey(\"Alt-F2\", \"Alt-F2\"),\n exec: function (editor) { editor.session.toggleFoldWidget(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldall\",\n description: \"Fold all\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAll(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldAllComments\",\n description: \"Fold all comments\",\n bindKey: bindKey(null, \"Ctrl-Command-Option-0\"),\n exec: function (editor) { editor.session.foldAllComments(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"foldOther\",\n description: \"Fold other\",\n bindKey: bindKey(\"Alt-0\", \"Command-Option-0\"),\n exec: function (editor) {\n editor.session.foldAll();\n editor.session.unfold(editor.selection.getAllRanges());\n },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"unfoldall\",\n description: \"Unfold all\",\n bindKey: bindKey(\"Alt-Shift-0\", \"Command-Option-Shift-0\"),\n exec: function (editor) { editor.session.unfold(); },\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findnext\",\n description: \"Find next\",\n bindKey: bindKey(\"Ctrl-K\", \"Command-G\"),\n exec: function (editor) { editor.findNext(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"findprevious\",\n description: \"Find previous\",\n bindKey: bindKey(\"Ctrl-Shift-K\", \"Command-Shift-G\"),\n exec: function (editor) { editor.findPrevious(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"center\",\n readOnly: true\n }, {\n name: \"selectOrFindNext\",\n description: \"Select or find next\",\n bindKey: bindKey(\"Alt-K\", \"Ctrl-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findNext();\n },\n readOnly: true\n }, {\n name: \"selectOrFindPrevious\",\n description: \"Select or find previous\",\n bindKey: bindKey(\"Alt-Shift-K\", \"Ctrl-Shift-G\"),\n exec: function (editor) {\n if (editor.selection.isEmpty())\n editor.selection.selectWord();\n else\n editor.findPrevious();\n },\n readOnly: true\n }, {\n name: \"find\",\n description: \"Find\",\n bindKey: bindKey(\"Ctrl-F\", \"Command-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor); });\n },\n readOnly: true\n }, {\n name: \"overwrite\",\n description: \"Overwrite\",\n bindKey: \"Insert\",\n exec: function (editor) { editor.toggleOverwrite(); },\n readOnly: true\n }, {\n name: \"selecttostart\",\n description: \"Select to start\",\n bindKey: bindKey(\"Ctrl-Shift-Home\", \"Command-Shift-Home|Command-Shift-Up\"),\n exec: function (editor) { editor.getSelection().selectFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotostart\",\n description: \"Go to start\",\n bindKey: bindKey(\"Ctrl-Home\", \"Command-Home|Command-Up\"),\n exec: function (editor) { editor.navigateFileStart(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectup\",\n description: \"Select up\",\n bindKey: bindKey(\"Shift-Up\", \"Shift-Up|Ctrl-Shift-P\"),\n exec: function (editor) { editor.getSelection().selectUp(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golineup\",\n description: \"Go line up\",\n bindKey: bindKey(\"Up\", \"Up|Ctrl-P\"),\n exec: function (editor, args) { editor.navigateUp(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttoend\",\n description: \"Select to end\",\n bindKey: bindKey(\"Ctrl-Shift-End\", \"Command-Shift-End|Command-Shift-Down\"),\n exec: function (editor) { editor.getSelection().selectFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"gotoend\",\n description: \"Go to end\",\n bindKey: bindKey(\"Ctrl-End\", \"Command-End|Command-Down\"),\n exec: function (editor) { editor.navigateFileEnd(); },\n multiSelectAction: \"forEach\",\n readOnly: true,\n scrollIntoView: \"animate\",\n aceCommandGroup: \"fileJump\"\n }, {\n name: \"selectdown\",\n description: \"Select down\",\n bindKey: bindKey(\"Shift-Down\", \"Shift-Down|Ctrl-Shift-N\"),\n exec: function (editor) { editor.getSelection().selectDown(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"golinedown\",\n description: \"Go line down\",\n bindKey: bindKey(\"Down\", \"Down|Ctrl-N\"),\n exec: function (editor, args) { editor.navigateDown(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordleft\",\n description: \"Select word left\",\n bindKey: bindKey(\"Ctrl-Shift-Left\", \"Option-Shift-Left\"),\n exec: function (editor) { editor.getSelection().selectWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordleft\",\n description: \"Go to word left\",\n bindKey: bindKey(\"Ctrl-Left\", \"Option-Left\"),\n exec: function (editor) { editor.navigateWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolinestart\",\n description: \"Select to line start\",\n bindKey: bindKey(\"Alt-Shift-Left\", \"Command-Shift-Left|Ctrl-Shift-A\"),\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolinestart\",\n description: \"Go to line start\",\n bindKey: bindKey(\"Alt-Left|Home\", \"Command-Left|Home|Ctrl-A\"),\n exec: function (editor) { editor.navigateLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectleft\",\n description: \"Select left\",\n bindKey: bindKey(\"Shift-Left\", \"Shift-Left|Ctrl-Shift-B\"),\n exec: function (editor) { editor.getSelection().selectLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoleft\",\n description: \"Go to left\",\n bindKey: bindKey(\"Left\", \"Left|Ctrl-B\"),\n exec: function (editor, args) { editor.navigateLeft(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectwordright\",\n description: \"Select word right\",\n bindKey: bindKey(\"Ctrl-Shift-Right\", \"Option-Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotowordright\",\n description: \"Go to word right\",\n bindKey: bindKey(\"Ctrl-Right\", \"Option-Right\"),\n exec: function (editor) { editor.navigateWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selecttolineend\",\n description: \"Select to line end\",\n bindKey: bindKey(\"Alt-Shift-Right\", \"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotolineend\",\n description: \"Go to line end\",\n bindKey: bindKey(\"Alt-Right|End\", \"Command-Right|End|Ctrl-E\"),\n exec: function (editor) { editor.navigateLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectright\",\n description: \"Select right\",\n bindKey: bindKey(\"Shift-Right\", \"Shift-Right\"),\n exec: function (editor) { editor.getSelection().selectRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"gotoright\",\n description: \"Go to right\",\n bindKey: bindKey(\"Right\", \"Right|Ctrl-F\"),\n exec: function (editor, args) { editor.navigateRight(args.times); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectpagedown\",\n description: \"Select page down\",\n bindKey: \"Shift-PageDown\",\n exec: function (editor) { editor.selectPageDown(); },\n readOnly: true\n }, {\n name: \"pagedown\",\n description: \"Page down\",\n bindKey: bindKey(null, \"Option-PageDown\"),\n exec: function (editor) { editor.scrollPageDown(); },\n readOnly: true\n }, {\n name: \"gotopagedown\",\n description: \"Go to page down\",\n bindKey: bindKey(\"PageDown\", \"PageDown|Ctrl-V\"),\n exec: function (editor) { editor.gotoPageDown(); },\n readOnly: true\n }, {\n name: \"selectpageup\",\n description: \"Select page up\",\n bindKey: \"Shift-PageUp\",\n exec: function (editor) { editor.selectPageUp(); },\n readOnly: true\n }, {\n name: \"pageup\",\n description: \"Page up\",\n bindKey: bindKey(null, \"Option-PageUp\"),\n exec: function (editor) { editor.scrollPageUp(); },\n readOnly: true\n }, {\n name: \"gotopageup\",\n description: \"Go to page up\",\n bindKey: \"PageUp\",\n exec: function (editor) { editor.gotoPageUp(); },\n readOnly: true\n }, {\n name: \"scrollup\",\n description: \"Scroll up\",\n bindKey: bindKey(\"Ctrl-Up\", null),\n exec: function (e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"scrolldown\",\n description: \"Scroll down\",\n bindKey: bindKey(\"Ctrl-Down\", null),\n exec: function (e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); },\n readOnly: true\n }, {\n name: \"selectlinestart\",\n description: \"Select line start\",\n bindKey: \"Shift-Home\",\n exec: function (editor) { editor.getSelection().selectLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectlineend\",\n description: \"Select line end\",\n bindKey: \"Shift-End\",\n exec: function (editor) { editor.getSelection().selectLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"togglerecording\",\n description: \"Toggle recording\",\n bindKey: bindKey(\"Ctrl-Alt-E\", \"Command-Option-E\"),\n exec: function (editor) { editor.commands.toggleRecording(editor); },\n readOnly: true\n }, {\n name: \"replaymacro\",\n description: \"Replay macro\",\n bindKey: bindKey(\"Ctrl-Shift-E\", \"Command-Shift-E\"),\n exec: function (editor) { editor.commands.replay(editor); },\n readOnly: true\n }, {\n name: \"jumptomatching\",\n description: \"Jump to matching\",\n bindKey: bindKey(\"Ctrl-\\\\|Ctrl-P\", \"Command-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"selecttomatching\",\n description: \"Select to matching\",\n bindKey: bindKey(\"Ctrl-Shift-\\\\|Ctrl-Shift-P\", \"Command-Shift-\\\\\"),\n exec: function (editor) { editor.jumpToMatching(true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"expandToMatching\",\n description: \"Expand to matching\",\n bindKey: bindKey(\"Ctrl-Shift-M\", \"Ctrl-Shift-M\"),\n exec: function (editor) { editor.jumpToMatching(true, true); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"animate\",\n readOnly: true\n }, {\n name: \"passKeysToBrowser\",\n description: \"Pass keys to browser\",\n bindKey: bindKey(null, null),\n exec: function () { },\n passEvent: true,\n readOnly: true\n }, {\n name: \"copy\",\n description: \"Copy\",\n exec: function (editor) {\n },\n readOnly: true\n },\n {\n name: \"cut\",\n description: \"Cut\",\n exec: function (editor) {\n var cutLine = editor.$copyWithEmptySelection && editor.selection.isEmpty();\n var range = cutLine ? editor.selection.getLineRange() : editor.selection.getRange();\n editor._emit(\"cut\", range);\n if (!range.isEmpty())\n editor.session.remove(range);\n editor.clearSelection();\n },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"paste\",\n description: \"Paste\",\n exec: function (editor, args) {\n editor.$handlePaste(args);\n },\n scrollIntoView: \"cursor\"\n }, {\n name: \"removeline\",\n description: \"Remove line\",\n bindKey: bindKey(\"Ctrl-D\", \"Command-D\"),\n exec: function (editor) { editor.removeLines(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"duplicateSelection\",\n description: \"Duplicate selection\",\n bindKey: bindKey(\"Ctrl-Shift-D\", \"Command-Shift-D\"),\n exec: function (editor) { editor.duplicateSelection(); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"sortlines\",\n description: \"Sort lines\",\n bindKey: bindKey(\"Ctrl-Alt-S\", \"Command-Alt-S\"),\n exec: function (editor) { editor.sortLines(); },\n scrollIntoView: \"selection\",\n multiSelectAction: \"forEachLine\"\n }, {\n name: \"togglecomment\",\n description: \"Toggle comment\",\n bindKey: bindKey(\"Ctrl-/\", \"Command-/\"),\n exec: function (editor) { editor.toggleCommentLines(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"toggleBlockComment\",\n description: \"Toggle block comment\",\n bindKey: bindKey(\"Ctrl-Shift-/\", \"Command-Shift-/\"),\n exec: function (editor) { editor.toggleBlockComment(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"modifyNumberUp\",\n description: \"Modify number up\",\n bindKey: bindKey(\"Ctrl-Shift-Up\", \"Alt-Shift-Up\"),\n exec: function (editor) { editor.modifyNumber(1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"modifyNumberDown\",\n description: \"Modify number down\",\n bindKey: bindKey(\"Ctrl-Shift-Down\", \"Alt-Shift-Down\"),\n exec: function (editor) { editor.modifyNumber(-1); },\n scrollIntoView: \"cursor\",\n multiSelectAction: \"forEach\"\n }, {\n name: \"replace\",\n description: \"Replace\",\n bindKey: bindKey(\"Ctrl-H\", \"Command-Option-F\"),\n exec: function (editor) {\n config.loadModule(\"ace/ext/searchbox\", function (e) { e.Search(editor, true); });\n }\n }, {\n name: \"undo\",\n description: \"Undo\",\n bindKey: bindKey(\"Ctrl-Z\", \"Command-Z\"),\n exec: function (editor) { editor.undo(); }\n }, {\n name: \"redo\",\n description: \"Redo\",\n bindKey: bindKey(\"Ctrl-Shift-Z|Ctrl-Y\", \"Command-Shift-Z|Command-Y\"),\n exec: function (editor) { editor.redo(); }\n }, {\n name: \"copylinesup\",\n description: \"Copy lines up\",\n bindKey: bindKey(\"Alt-Shift-Up\", \"Command-Option-Up\"),\n exec: function (editor) { editor.copyLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesup\",\n description: \"Move lines up\",\n bindKey: bindKey(\"Alt-Up\", \"Option-Up\"),\n exec: function (editor) { editor.moveLinesUp(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"copylinesdown\",\n description: \"Copy lines down\",\n bindKey: bindKey(\"Alt-Shift-Down\", \"Command-Option-Down\"),\n exec: function (editor) { editor.copyLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"movelinesdown\",\n description: \"Move lines down\",\n bindKey: bindKey(\"Alt-Down\", \"Option-Down\"),\n exec: function (editor) { editor.moveLinesDown(); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"del\",\n description: \"Delete\",\n bindKey: bindKey(\"Delete\", \"Delete|Ctrl-D|Shift-Delete\"),\n exec: function (editor) { editor.remove(\"right\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"backspace\",\n description: \"Backspace\",\n bindKey: bindKey(\"Shift-Backspace|Backspace\", \"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),\n exec: function (editor) { editor.remove(\"left\"); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"cut_or_delete\",\n description: \"Cut or delete\",\n bindKey: bindKey(\"Shift-Delete\", null),\n exec: function (editor) {\n if (editor.selection.isEmpty()) {\n editor.remove(\"left\");\n }\n else {\n return false;\n }\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestart\",\n description: \"Remove to line start\",\n bindKey: bindKey(\"Alt-Backspace\", \"Command-Backspace\"),\n exec: function (editor) { editor.removeToLineStart(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineend\",\n description: \"Remove to line end\",\n bindKey: bindKey(\"Alt-Delete\", \"Ctrl-K|Command-Delete\"),\n exec: function (editor) { editor.removeToLineEnd(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolinestarthard\",\n description: \"Remove to line start hard\",\n bindKey: bindKey(\"Ctrl-Shift-Backspace\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = 0;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removetolineendhard\",\n description: \"Remove to line end hard\",\n bindKey: bindKey(\"Ctrl-Shift-Delete\", null),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.end.column = Number.MAX_VALUE;\n editor.session.remove(range);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordleft\",\n description: \"Remove word left\",\n bindKey: bindKey(\"Ctrl-Backspace\", \"Alt-Backspace|Ctrl-Alt-Backspace\"),\n exec: function (editor) { editor.removeWordLeft(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"removewordright\",\n description: \"Remove word right\",\n bindKey: bindKey(\"Ctrl-Delete\", \"Alt-Delete\"),\n exec: function (editor) { editor.removeWordRight(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"outdent\",\n description: \"Outdent\",\n bindKey: bindKey(\"Shift-Tab\", \"Shift-Tab\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"indent\",\n description: \"Indent\",\n bindKey: bindKey(\"Tab\", \"Tab\"),\n exec: function (editor) { editor.indent(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockoutdent\",\n description: \"Block outdent\",\n bindKey: bindKey(\"Ctrl-[\", \"Ctrl-[\"),\n exec: function (editor) { editor.blockOutdent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"blockindent\",\n description: \"Block indent\",\n bindKey: bindKey(\"Ctrl-]\", \"Ctrl-]\"),\n exec: function (editor) { editor.blockIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"selectionPart\"\n }, {\n name: \"insertstring\",\n description: \"Insert string\",\n exec: function (editor, str) { editor.insert(str); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"inserttext\",\n description: \"Insert text\",\n exec: function (editor, args) {\n editor.insert(lang.stringRepeat(args.text || \"\", args.times || 1));\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"splitline\",\n description: \"Split line\",\n bindKey: bindKey(null, \"Ctrl-O\"),\n exec: function (editor) { editor.splitLine(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"transposeletters\",\n description: \"Transpose letters\",\n bindKey: bindKey(\"Alt-Shift-X\", \"Ctrl-T\"),\n exec: function (editor) { editor.transposeLetters(); },\n multiSelectAction: function (editor) { editor.transposeSelections(1); },\n scrollIntoView: \"cursor\"\n }, {\n name: \"touppercase\",\n description: \"To uppercase\",\n bindKey: bindKey(\"Ctrl-U\", \"Ctrl-U\"),\n exec: function (editor) { editor.toUpperCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"tolowercase\",\n description: \"To lowercase\",\n bindKey: bindKey(\"Ctrl-Shift-U\", \"Ctrl-Shift-U\"),\n exec: function (editor) { editor.toLowerCase(); },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"autoindent\",\n description: \"Auto Indent\",\n bindKey: bindKey(null, null),\n exec: function (editor) { editor.autoIndent(); },\n multiSelectAction: \"forEachLine\",\n scrollIntoView: \"animate\"\n }, {\n name: \"expandtoline\",\n description: \"Expand to line\",\n bindKey: bindKey(\"Ctrl-Shift-L\", \"Command-Shift-L\"),\n exec: function (editor) {\n var range = editor.selection.getRange();\n range.start.column = range.end.column = 0;\n range.end.row++;\n editor.selection.setRange(range, false);\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"joinlines\",\n description: \"Join lines\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var isBackwards = editor.selection.isBackwards();\n var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor();\n var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead();\n var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length;\n var selectedText = editor.session.doc.getTextRange(editor.selection.getRange());\n var selectedCount = selectedText.replace(/\\n\\s*/, \" \").length;\n var insertLine = editor.session.doc.getLine(selectionStart.row);\n for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) {\n var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i)));\n if (curLine.length !== 0) {\n curLine = \" \" + curLine;\n }\n insertLine += curLine;\n }\n if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) {\n insertLine += editor.session.doc.getNewLineCharacter();\n }\n editor.clearSelection();\n editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine);\n if (selectedCount > 0) {\n editor.selection.moveCursorTo(selectionStart.row, selectionStart.column);\n editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount);\n }\n else {\n firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol;\n editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol);\n }\n },\n multiSelectAction: \"forEach\",\n readOnly: true\n }, {\n name: \"invertSelection\",\n description: \"Invert selection\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n var endRow = editor.session.doc.getLength() - 1;\n var endCol = editor.session.doc.getLine(endRow).length;\n var ranges = editor.selection.rangeList.ranges;\n var newRanges = [];\n if (ranges.length < 1) {\n ranges = [editor.selection.getRange()];\n }\n for (var i = 0; i < ranges.length; i++) {\n if (i == (ranges.length - 1)) {\n if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) {\n newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol));\n }\n }\n if (i === 0) {\n if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) {\n newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column));\n }\n }\n else {\n newRanges.push(new Range(ranges[i - 1].end.row, ranges[i - 1].end.column, ranges[i].start.row, ranges[i].start.column));\n }\n }\n editor.exitMultiSelectMode();\n editor.clearSelection();\n for (var i = 0; i < newRanges.length; i++) {\n editor.selection.addRange(newRanges[i], false);\n }\n },\n readOnly: true,\n scrollIntoView: \"none\"\n }, {\n name: \"addLineAfter\",\n description: \"Add new line after the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n editor.navigateLineEnd();\n editor.insert(\"\\n\");\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"addLineBefore\",\n description: \"Add new line before the current line\",\n exec: function (editor) {\n editor.selection.clearSelection();\n var cursor = editor.getCursorPosition();\n editor.selection.moveTo(cursor.row - 1, Number.MAX_VALUE);\n editor.insert(\"\\n\");\n if (cursor.row === 0)\n editor.navigateUp();\n },\n multiSelectAction: \"forEach\",\n scrollIntoView: \"cursor\"\n }, {\n name: \"openCommandPallete\",\n description: \"Open command palette\",\n bindKey: bindKey(\"F1\", \"F1\"),\n exec: function (editor) {\n editor.prompt({ $type: \"commands\" });\n },\n readOnly: true\n }, {\n name: \"modeSelect\",\n description: \"Change language mode...\",\n bindKey: bindKey(null, null),\n exec: function (editor) {\n editor.prompt({ $type: \"modes\" });\n },\n readOnly: true\n }];\nfor (var i = 1; i < 9; i++) {\n exports.commands.push({\n name: \"foldToLevel\" + i,\n description: \"Fold To Level \" + i,\n level: i,\n exec: function (editor) { editor.session.foldToLevel(this.level); },\n scrollIntoView: \"center\",\n readOnly: true\n });\n}\n\n});\n\nace.define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/clipboard\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar lang = require(\"./lib/lang\");\nvar useragent = require(\"./lib/useragent\");\nvar TextInput = require(\"./keyboard/textinput\").TextInput;\nvar MouseHandler = require(\"./mouse/mouse_handler\").MouseHandler;\nvar FoldHandler = require(\"./mouse/fold_handler\").FoldHandler;\nvar KeyBinding = require(\"./keyboard/keybinding\").KeyBinding;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Search = require(\"./search\").Search;\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar CommandManager = require(\"./commands/command_manager\").CommandManager;\nvar defaultCommands = require(\"./commands/default_commands\").commands;\nvar config = require(\"./config\");\nvar TokenIterator = require(\"./token_iterator\").TokenIterator;\nvar clipboard = require(\"./clipboard\");\nvar Editor = function (renderer, session, options) {\n this.$toDestroy = [];\n var container = renderer.getContainerElement();\n this.container = container;\n this.renderer = renderer;\n this.id = \"editor\" + (++Editor.$uid);\n this.commands = new CommandManager(useragent.isMac ? \"mac\" : \"win\", defaultCommands);\n if (typeof document == \"object\") {\n this.textInput = new TextInput(renderer.getTextAreaContainer(), this);\n this.renderer.textarea = this.textInput.getElement();\n this.$mouseHandler = new MouseHandler(this);\n new FoldHandler(this);\n }\n this.keyBinding = new KeyBinding(this);\n this.$search = new Search().set({\n wrap: true\n });\n this.$historyTracker = this.$historyTracker.bind(this);\n this.commands.on(\"exec\", this.$historyTracker);\n this.$initOperationListeners();\n this._$emitInputEvent = lang.delayedCall(function () {\n this._signal(\"input\", {});\n if (this.session && !this.session.destroyed)\n this.session.bgTokenizer.scheduleStart();\n }.bind(this));\n this.on(\"change\", function (_, _self) {\n _self._$emitInputEvent.schedule(31);\n });\n this.setSession(session || options && options.session || new EditSession(\"\"));\n config.resetOptions(this);\n if (options)\n this.setOptions(options);\n config._signal(\"editor\", this);\n};\nEditor.$uid = 0;\n(function () {\n oop.implement(this, EventEmitter);\n this.$initOperationListeners = function () {\n this.commands.on(\"exec\", this.startOperation.bind(this), true);\n this.commands.on(\"afterExec\", this.endOperation.bind(this), true);\n this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this, true));\n this.on(\"change\", function () {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n this.curOp.docChanged = true;\n }.bind(this), true);\n this.on(\"changeSelection\", function () {\n if (!this.curOp) {\n this.startOperation();\n this.curOp.selectionBefore = this.$lastSel;\n }\n this.curOp.selectionChanged = true;\n }.bind(this), true);\n };\n this.curOp = null;\n this.prevOp = {};\n this.startOperation = function (commandEvent) {\n if (this.curOp) {\n if (!commandEvent || this.curOp.command)\n return;\n this.prevOp = this.curOp;\n }\n if (!commandEvent) {\n this.previousCommand = null;\n commandEvent = {};\n }\n this.$opResetTimer.schedule();\n this.curOp = this.session.curOp = {\n command: commandEvent.command || {},\n args: commandEvent.args,\n scrollTop: this.renderer.scrollTop\n };\n this.curOp.selectionBefore = this.selection.toJSON();\n };\n this.endOperation = function (e) {\n if (this.curOp && this.session) {\n if (e && e.returnValue === false || !this.session)\n return (this.curOp = null);\n if (e == true && this.curOp.command && this.curOp.command.name == \"mouse\")\n return;\n this._signal(\"beforeEndOperation\");\n if (!this.curOp)\n return;\n var command = this.curOp.command;\n var scrollIntoView = command && command.scrollIntoView;\n if (scrollIntoView) {\n switch (scrollIntoView) {\n case \"center-animate\":\n scrollIntoView = \"animate\";\n case \"center\":\n this.renderer.scrollCursorIntoView(null, 0.5);\n break;\n case \"animate\":\n case \"cursor\":\n this.renderer.scrollCursorIntoView();\n break;\n case \"selectionPart\":\n var range = this.selection.getRange();\n var config = this.renderer.layerConfig;\n if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) {\n this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead);\n }\n break;\n default:\n break;\n }\n if (scrollIntoView == \"animate\")\n this.renderer.animateScrolling(this.curOp.scrollTop);\n }\n var sel = this.selection.toJSON();\n this.curOp.selectionAfter = sel;\n this.$lastSel = this.selection.toJSON();\n this.session.getUndoManager().addSelection(sel);\n this.prevOp = this.curOp;\n this.curOp = null;\n }\n };\n this.$mergeableCommands = [\"backspace\", \"del\", \"insertstring\"];\n this.$historyTracker = function (e) {\n if (!this.$mergeUndoDeltas)\n return;\n var prev = this.prevOp;\n var mergeableCommands = this.$mergeableCommands;\n var shouldMerge = prev.command && (e.command.name == prev.command.name);\n if (e.command.name == \"insertstring\") {\n var text = e.args;\n if (this.mergeNextCommand === undefined)\n this.mergeNextCommand = true;\n shouldMerge = shouldMerge\n && this.mergeNextCommand // previous command allows to coalesce with\n && (!/\\s/.test(text) || /\\s/.test(prev.args)); // previous insertion was of same type\n this.mergeNextCommand = true;\n }\n else {\n shouldMerge = shouldMerge\n && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable\n }\n if (this.$mergeUndoDeltas != \"always\"\n && Date.now() - this.sequenceStartTime > 2000) {\n shouldMerge = false; // the sequence is too long\n }\n if (shouldMerge)\n this.session.mergeUndoDeltas = true;\n else if (mergeableCommands.indexOf(e.command.name) !== -1)\n this.sequenceStartTime = Date.now();\n };\n this.setKeyboardHandler = function (keyboardHandler, cb) {\n if (keyboardHandler && typeof keyboardHandler === \"string\" && keyboardHandler != \"ace\") {\n this.$keybindingId = keyboardHandler;\n var _self = this;\n config.loadModule([\"keybinding\", keyboardHandler], function (module) {\n if (_self.$keybindingId == keyboardHandler)\n _self.keyBinding.setKeyboardHandler(module && module.handler);\n cb && cb();\n });\n }\n else {\n this.$keybindingId = null;\n this.keyBinding.setKeyboardHandler(keyboardHandler);\n cb && cb();\n }\n };\n this.getKeyboardHandler = function () {\n return this.keyBinding.getKeyboardHandler();\n };\n this.setSession = function (session) {\n if (this.session == session)\n return;\n if (this.curOp)\n this.endOperation();\n this.curOp = {};\n var oldSession = this.session;\n if (oldSession) {\n this.session.off(\"change\", this.$onDocumentChange);\n this.session.off(\"changeMode\", this.$onChangeMode);\n this.session.off(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.session.off(\"changeTabSize\", this.$onChangeTabSize);\n this.session.off(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.session.off(\"changeWrapMode\", this.$onChangeWrapMode);\n this.session.off(\"changeFold\", this.$onChangeFold);\n this.session.off(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.session.off(\"changeBackMarker\", this.$onChangeBackMarker);\n this.session.off(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.session.off(\"changeAnnotation\", this.$onChangeAnnotation);\n this.session.off(\"changeOverwrite\", this.$onCursorChange);\n this.session.off(\"changeScrollTop\", this.$onScrollTopChange);\n this.session.off(\"changeScrollLeft\", this.$onScrollLeftChange);\n var selection = this.session.getSelection();\n selection.off(\"changeCursor\", this.$onCursorChange);\n selection.off(\"changeSelection\", this.$onSelectionChange);\n }\n this.session = session;\n if (session) {\n this.$onDocumentChange = this.onDocumentChange.bind(this);\n session.on(\"change\", this.$onDocumentChange);\n this.renderer.setSession(session);\n this.$onChangeMode = this.onChangeMode.bind(this);\n session.on(\"changeMode\", this.$onChangeMode);\n this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this);\n session.on(\"tokenizerUpdate\", this.$onTokenizerUpdate);\n this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer);\n session.on(\"changeTabSize\", this.$onChangeTabSize);\n this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this);\n session.on(\"changeWrapLimit\", this.$onChangeWrapLimit);\n this.$onChangeWrapMode = this.onChangeWrapMode.bind(this);\n session.on(\"changeWrapMode\", this.$onChangeWrapMode);\n this.$onChangeFold = this.onChangeFold.bind(this);\n session.on(\"changeFold\", this.$onChangeFold);\n this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this);\n this.session.on(\"changeFrontMarker\", this.$onChangeFrontMarker);\n this.$onChangeBackMarker = this.onChangeBackMarker.bind(this);\n this.session.on(\"changeBackMarker\", this.$onChangeBackMarker);\n this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this);\n this.session.on(\"changeBreakpoint\", this.$onChangeBreakpoint);\n this.$onChangeAnnotation = this.onChangeAnnotation.bind(this);\n this.session.on(\"changeAnnotation\", this.$onChangeAnnotation);\n this.$onCursorChange = this.onCursorChange.bind(this);\n this.session.on(\"changeOverwrite\", this.$onCursorChange);\n this.$onScrollTopChange = this.onScrollTopChange.bind(this);\n this.session.on(\"changeScrollTop\", this.$onScrollTopChange);\n this.$onScrollLeftChange = this.onScrollLeftChange.bind(this);\n this.session.on(\"changeScrollLeft\", this.$onScrollLeftChange);\n this.selection = session.getSelection();\n this.selection.on(\"changeCursor\", this.$onCursorChange);\n this.$onSelectionChange = this.onSelectionChange.bind(this);\n this.selection.on(\"changeSelection\", this.$onSelectionChange);\n this.onChangeMode();\n this.onCursorChange();\n this.onScrollTopChange();\n this.onScrollLeftChange();\n this.onSelectionChange();\n this.onChangeFrontMarker();\n this.onChangeBackMarker();\n this.onChangeBreakpoint();\n this.onChangeAnnotation();\n this.session.getUseWrapMode() && this.renderer.adjustWrapLimit();\n this.renderer.updateFull();\n }\n else {\n this.selection = null;\n this.renderer.setSession(session);\n }\n this._signal(\"changeSession\", {\n session: session,\n oldSession: oldSession\n });\n this.curOp = null;\n oldSession && oldSession._signal(\"changeEditor\", { oldEditor: this });\n session && session._signal(\"changeEditor\", { editor: this });\n if (session && !session.destroyed)\n session.bgTokenizer.scheduleStart();\n };\n this.getSession = function () {\n return this.session;\n };\n this.setValue = function (val, cursorPos) {\n this.session.doc.setValue(val);\n if (!cursorPos)\n this.selectAll();\n else if (cursorPos == 1)\n this.navigateFileEnd();\n else if (cursorPos == -1)\n this.navigateFileStart();\n return val;\n };\n this.getValue = function () {\n return this.session.getValue();\n };\n this.getSelection = function () {\n return this.selection;\n };\n this.resize = function (force) {\n this.renderer.onResize(force);\n };\n this.setTheme = function (theme, cb) {\n this.renderer.setTheme(theme, cb);\n };\n this.getTheme = function () {\n return this.renderer.getTheme();\n };\n this.setStyle = function (style) {\n this.renderer.setStyle(style);\n };\n this.unsetStyle = function (style) {\n this.renderer.unsetStyle(style);\n };\n this.getFontSize = function () {\n return this.getOption(\"fontSize\") ||\n dom.computedStyle(this.container).fontSize;\n };\n this.setFontSize = function (size) {\n this.setOption(\"fontSize\", size);\n };\n this.$highlightBrackets = function () {\n if (this.$highlightPending) {\n return;\n }\n var self = this;\n this.$highlightPending = true;\n setTimeout(function () {\n self.$highlightPending = false;\n var session = self.session;\n if (!session || session.destroyed)\n return;\n if (session.$bracketHighlight) {\n session.$bracketHighlight.markerIds.forEach(function (id) {\n session.removeMarker(id);\n });\n session.$bracketHighlight = null;\n }\n var pos = self.getCursorPosition();\n var ranges = session.getMatchingBracketRanges(pos);\n if (!ranges) {\n var iterator = new TokenIterator(session, pos.row, pos.column);\n var token = iterator.getCurrentToken();\n if (token && /\\b(?:tag-open|tag-name)/.test(token.type)) {\n var tagNamesRanges = session.getMatchingTags(pos);\n if (tagNamesRanges)\n ranges = [tagNamesRanges.openTagName, tagNamesRanges.closeTagName];\n }\n }\n if (!ranges && session.$mode.getMatching)\n ranges = session.$mode.getMatching(self.session);\n if (!ranges) {\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n return;\n }\n var markerType = \"ace_bracket\";\n if (!Array.isArray(ranges)) {\n ranges = [ranges];\n }\n else if (ranges.length == 1) {\n markerType = \"ace_error_bracket\";\n }\n if (ranges.length == 2) {\n if (Range.comparePoints(ranges[0].end, ranges[1].start) == 0)\n ranges = [Range.fromPoints(ranges[0].start, ranges[1].end)];\n else if (Range.comparePoints(ranges[0].start, ranges[1].end) == 0)\n ranges = [Range.fromPoints(ranges[1].start, ranges[0].end)];\n }\n session.$bracketHighlight = {\n ranges: ranges,\n markerIds: ranges.map(function (range) {\n return session.addMarker(range, markerType, \"text\");\n })\n };\n if (self.getHighlightIndentGuides())\n self.renderer.$textLayer.$highlightIndentGuide();\n }, 50);\n };\n this.focus = function () {\n this.textInput.focus();\n };\n this.isFocused = function () {\n return this.textInput.isFocused();\n };\n this.blur = function () {\n this.textInput.blur();\n };\n this.onFocus = function (e) {\n if (this.$isFocused)\n return;\n this.$isFocused = true;\n this.renderer.showCursor();\n this.renderer.visualizeFocus();\n this._emit(\"focus\", e);\n };\n this.onBlur = function (e) {\n if (!this.$isFocused)\n return;\n this.$isFocused = false;\n this.renderer.hideCursor();\n this.renderer.visualizeBlur();\n this._emit(\"blur\", e);\n };\n this.$cursorChange = function () {\n this.renderer.updateCursor();\n this.$highlightBrackets();\n this.$updateHighlightActiveLine();\n };\n this.onDocumentChange = function (delta) {\n var wrap = this.session.$useWrapMode;\n var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity);\n this.renderer.updateLines(delta.start.row, lastRow, wrap);\n this._signal(\"change\", delta);\n this.$cursorChange();\n };\n this.onTokenizerUpdate = function (e) {\n var rows = e.data;\n this.renderer.updateLines(rows.first, rows.last);\n };\n this.onScrollTopChange = function () {\n this.renderer.scrollToY(this.session.getScrollTop());\n };\n this.onScrollLeftChange = function () {\n this.renderer.scrollToX(this.session.getScrollLeft());\n };\n this.onCursorChange = function () {\n this.$cursorChange();\n this._signal(\"changeSelection\");\n };\n this.$updateHighlightActiveLine = function () {\n var session = this.getSession();\n var highlight;\n if (this.$highlightActiveLine) {\n if (this.$selectionStyle != \"line\" || !this.selection.isMultiLine())\n highlight = this.getCursorPosition();\n if (this.renderer.theme && this.renderer.theme.$selectionColorConflict && !this.selection.isEmpty())\n highlight = false;\n if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1))\n highlight = false;\n }\n if (session.$highlightLineMarker && !highlight) {\n session.removeMarker(session.$highlightLineMarker.id);\n session.$highlightLineMarker = null;\n }\n else if (!session.$highlightLineMarker && highlight) {\n var range = new Range(highlight.row, highlight.column, highlight.row, Infinity);\n range.id = session.addMarker(range, \"ace_active-line\", \"screenLine\");\n session.$highlightLineMarker = range;\n }\n else if (highlight) {\n session.$highlightLineMarker.start.row = highlight.row;\n session.$highlightLineMarker.end.row = highlight.row;\n session.$highlightLineMarker.start.column = highlight.column;\n session._signal(\"changeBackMarker\");\n }\n };\n this.onSelectionChange = function (e) {\n var session = this.session;\n if (session.$selectionMarker) {\n session.removeMarker(session.$selectionMarker);\n }\n session.$selectionMarker = null;\n if (!this.selection.isEmpty()) {\n var range = this.selection.getRange();\n var style = this.getSelectionStyle();\n session.$selectionMarker = session.addMarker(range, \"ace_selection\", style);\n }\n else {\n this.$updateHighlightActiveLine();\n }\n var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp();\n this.session.highlight(re);\n this._signal(\"changeSelection\");\n };\n this.$getSelectionHighLightRegexp = function () {\n var session = this.session;\n var selection = this.getSelectionRange();\n if (selection.isEmpty() || selection.isMultiLine())\n return;\n var startColumn = selection.start.column;\n var endColumn = selection.end.column;\n var line = session.getLine(selection.start.row);\n var needle = line.substring(startColumn, endColumn);\n if (needle.length > 5000 || !/[\\w\\d]/.test(needle))\n return;\n var re = this.$search.$assembleRegExp({\n wholeWord: true,\n caseSensitive: true,\n needle: needle\n });\n var wordWithBoundary = line.substring(startColumn - 1, endColumn + 1);\n if (!re.test(wordWithBoundary))\n return;\n return re;\n };\n this.onChangeFrontMarker = function () {\n this.renderer.updateFrontMarkers();\n };\n this.onChangeBackMarker = function () {\n this.renderer.updateBackMarkers();\n };\n this.onChangeBreakpoint = function () {\n this.renderer.updateBreakpoints();\n };\n this.onChangeAnnotation = function () {\n this.renderer.setAnnotations(this.session.getAnnotations());\n };\n this.onChangeMode = function (e) {\n this.renderer.updateText();\n this._emit(\"changeMode\", e);\n };\n this.onChangeWrapLimit = function () {\n this.renderer.updateFull();\n };\n this.onChangeWrapMode = function () {\n this.renderer.onResize(true);\n };\n this.onChangeFold = function () {\n this.$updateHighlightActiveLine();\n this.renderer.updateFull();\n };\n this.getSelectedText = function () {\n return this.session.getTextRange(this.getSelectionRange());\n };\n this.getCopyText = function () {\n var text = this.getSelectedText();\n var nl = this.session.doc.getNewLineCharacter();\n var copyLine = false;\n if (!text && this.$copyWithEmptySelection) {\n copyLine = true;\n var ranges = this.selection.getAllRanges();\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (i && ranges[i - 1].start.row == range.start.row)\n continue;\n text += this.session.getLine(range.start.row) + nl;\n }\n }\n var e = { text: text };\n this._signal(\"copy\", e);\n clipboard.lineMode = copyLine ? e.text : false;\n return e.text;\n };\n this.onCopy = function () {\n this.commands.exec(\"copy\", this);\n };\n this.onCut = function () {\n this.commands.exec(\"cut\", this);\n };\n this.onPaste = function (text, event) {\n var e = { text: text, event: event };\n this.commands.exec(\"paste\", this, e);\n };\n this.$handlePaste = function (e) {\n if (typeof e == \"string\")\n e = { text: e };\n this._signal(\"paste\", e);\n var text = e.text;\n var lineMode = text === clipboard.lineMode;\n var session = this.session;\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode) {\n if (lineMode)\n session.insert({ row: this.selection.lead.row, column: 0 }, text);\n else\n this.insert(text);\n }\n else if (lineMode) {\n this.selection.rangeList.ranges.forEach(function (range) {\n session.insert({ row: range.start.row, column: 0 }, text);\n });\n }\n else {\n var lines = text.split(/\\r\\n|\\r|\\n/);\n var ranges = this.selection.rangeList.ranges;\n var isFullLine = lines.length == 2 && (!lines[0] || !lines[1]);\n if (lines.length != ranges.length || isFullLine)\n return this.commands.exec(\"insertstring\", this, text);\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.isEmpty())\n session.remove(range);\n session.insert(range.start, lines[i]);\n }\n }\n };\n this.execCommand = function (command, args) {\n return this.commands.exec(command, this, args);\n };\n this.insert = function (text, pasted) {\n var session = this.session;\n var mode = session.getMode();\n var cursor = this.getCursorPosition();\n if (this.getBehavioursEnabled() && !pasted) {\n var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text);\n if (transform) {\n if (text !== transform.text) {\n if (!this.inVirtualSelectionMode) {\n this.session.mergeUndoDeltas = false;\n this.mergeNextCommand = false;\n }\n }\n text = transform.text;\n }\n }\n if (text == \"\\t\")\n text = this.session.getTabString();\n if (!this.selection.isEmpty()) {\n var range = this.getSelectionRange();\n cursor = this.session.remove(range);\n this.clearSelection();\n }\n else if (this.session.getOverwrite() && text.indexOf(\"\\n\") == -1) {\n var range = new Range.fromPoints(cursor, cursor);\n range.end.column += text.length;\n this.session.remove(range);\n }\n if (text == \"\\n\" || text == \"\\r\\n\") {\n var line = session.getLine(cursor.row);\n if (cursor.column > line.search(/\\S|$/)) {\n var d = line.substr(cursor.column).search(/\\S|$/);\n session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d);\n }\n }\n this.clearSelection();\n var start = cursor.column;\n var lineState = session.getState(cursor.row);\n var line = session.getLine(cursor.row);\n var shouldOutdent = mode.checkOutdent(lineState, line, text);\n session.insert(cursor, text);\n if (transform && transform.selection) {\n if (transform.selection.length == 2) { // Transform relative to the current column\n this.selection.setSelectionRange(new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1]));\n }\n else { // Transform relative to the current row.\n this.selection.setSelectionRange(new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3]));\n }\n }\n if (this.$enableAutoIndent) {\n if (session.getDocument().isNewLine(text)) {\n var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString());\n session.insert({ row: cursor.row + 1, column: 0 }, lineIndent);\n }\n if (shouldOutdent)\n mode.autoOutdent(lineState, session, cursor.row);\n }\n };\n this.autoIndent = function () {\n var session = this.session;\n var mode = session.getMode();\n var startRow, endRow;\n if (this.selection.isEmpty()) {\n startRow = 0;\n endRow = session.doc.getLength() - 1;\n }\n else {\n var selectedRange = this.getSelectionRange();\n startRow = selectedRange.start.row;\n endRow = selectedRange.end.row;\n }\n var prevLineState = \"\";\n var prevLine = \"\";\n var lineIndent = \"\";\n var line, currIndent, range;\n var tab = session.getTabString();\n for (var row = startRow; row <= endRow; row++) {\n if (row > 0) {\n prevLineState = session.getState(row - 1);\n prevLine = session.getLine(row - 1);\n lineIndent = mode.getNextLineIndent(prevLineState, prevLine, tab);\n }\n line = session.getLine(row);\n currIndent = mode.$getIndent(line);\n if (lineIndent !== currIndent) {\n if (currIndent.length > 0) {\n range = new Range(row, 0, row, currIndent.length);\n session.remove(range);\n }\n if (lineIndent.length > 0) {\n session.insert({ row: row, column: 0 }, lineIndent);\n }\n }\n mode.autoOutdent(prevLineState, session, row);\n }\n };\n this.onTextInput = function (text, composition) {\n if (!composition)\n return this.keyBinding.onTextInput(text);\n this.startOperation({ command: { name: \"insertstring\" } });\n var applyComposition = this.applyComposition.bind(this, text, composition);\n if (this.selection.rangeCount)\n this.forEachSelection(applyComposition);\n else\n applyComposition();\n this.endOperation();\n };\n this.applyComposition = function (text, composition) {\n if (composition.extendLeft || composition.extendRight) {\n var r = this.selection.getRange();\n r.start.column -= composition.extendLeft;\n r.end.column += composition.extendRight;\n if (r.start.column < 0) {\n r.start.row--;\n r.start.column += this.session.getLine(r.start.row).length + 1;\n }\n this.selection.setRange(r);\n if (!text && !r.isEmpty())\n this.remove();\n }\n if (text || !this.selection.isEmpty())\n this.insert(text, true);\n if (composition.restoreStart || composition.restoreEnd) {\n var r = this.selection.getRange();\n r.start.column -= composition.restoreStart;\n r.end.column -= composition.restoreEnd;\n this.selection.setRange(r);\n }\n };\n this.onCommandKey = function (e, hashId, keyCode) {\n return this.keyBinding.onCommandKey(e, hashId, keyCode);\n };\n this.setOverwrite = function (overwrite) {\n this.session.setOverwrite(overwrite);\n };\n this.getOverwrite = function () {\n return this.session.getOverwrite();\n };\n this.toggleOverwrite = function () {\n this.session.toggleOverwrite();\n };\n this.setScrollSpeed = function (speed) {\n this.setOption(\"scrollSpeed\", speed);\n };\n this.getScrollSpeed = function () {\n return this.getOption(\"scrollSpeed\");\n };\n this.setDragDelay = function (dragDelay) {\n this.setOption(\"dragDelay\", dragDelay);\n };\n this.getDragDelay = function () {\n return this.getOption(\"dragDelay\");\n };\n this.setSelectionStyle = function (val) {\n this.setOption(\"selectionStyle\", val);\n };\n this.getSelectionStyle = function () {\n return this.getOption(\"selectionStyle\");\n };\n this.setHighlightActiveLine = function (shouldHighlight) {\n this.setOption(\"highlightActiveLine\", shouldHighlight);\n };\n this.getHighlightActiveLine = function () {\n return this.getOption(\"highlightActiveLine\");\n };\n this.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n this.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n this.setHighlightSelectedWord = function (shouldHighlight) {\n this.setOption(\"highlightSelectedWord\", shouldHighlight);\n };\n this.getHighlightSelectedWord = function () {\n return this.$highlightSelectedWord;\n };\n this.setAnimatedScroll = function (shouldAnimate) {\n this.renderer.setAnimatedScroll(shouldAnimate);\n };\n this.getAnimatedScroll = function () {\n return this.renderer.getAnimatedScroll();\n };\n this.setShowInvisibles = function (showInvisibles) {\n this.renderer.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function () {\n return this.renderer.getShowInvisibles();\n };\n this.setDisplayIndentGuides = function (display) {\n this.renderer.setDisplayIndentGuides(display);\n };\n this.getDisplayIndentGuides = function () {\n return this.renderer.getDisplayIndentGuides();\n };\n this.setHighlightIndentGuides = function (highlight) {\n this.renderer.setHighlightIndentGuides(highlight);\n };\n this.getHighlightIndentGuides = function () {\n return this.renderer.getHighlightIndentGuides();\n };\n this.setShowPrintMargin = function (showPrintMargin) {\n this.renderer.setShowPrintMargin(showPrintMargin);\n };\n this.getShowPrintMargin = function () {\n return this.renderer.getShowPrintMargin();\n };\n this.setPrintMarginColumn = function (showPrintMargin) {\n this.renderer.setPrintMarginColumn(showPrintMargin);\n };\n this.getPrintMarginColumn = function () {\n return this.renderer.getPrintMarginColumn();\n };\n this.setReadOnly = function (readOnly) {\n this.setOption(\"readOnly\", readOnly);\n };\n this.getReadOnly = function () {\n return this.getOption(\"readOnly\");\n };\n this.setBehavioursEnabled = function (enabled) {\n this.setOption(\"behavioursEnabled\", enabled);\n };\n this.getBehavioursEnabled = function () {\n return this.getOption(\"behavioursEnabled\");\n };\n this.setWrapBehavioursEnabled = function (enabled) {\n this.setOption(\"wrapBehavioursEnabled\", enabled);\n };\n this.getWrapBehavioursEnabled = function () {\n return this.getOption(\"wrapBehavioursEnabled\");\n };\n this.setShowFoldWidgets = function (show) {\n this.setOption(\"showFoldWidgets\", show);\n };\n this.getShowFoldWidgets = function () {\n return this.getOption(\"showFoldWidgets\");\n };\n this.setFadeFoldWidgets = function (fade) {\n this.setOption(\"fadeFoldWidgets\", fade);\n };\n this.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n this.remove = function (dir) {\n if (this.selection.isEmpty()) {\n if (dir == \"left\")\n this.selection.selectLeft();\n else\n this.selection.selectRight();\n }\n var range = this.getSelectionRange();\n if (this.getBehavioursEnabled()) {\n var session = this.session;\n var state = session.getState(range.start.row);\n var new_range = session.getMode().transformAction(state, 'deletion', this, session, range);\n if (range.end.column === 0) {\n var text = session.getTextRange(range);\n if (text[text.length - 1] == \"\\n\") {\n var line = session.getLine(range.end.row);\n if (/^\\s+$/.test(line)) {\n range.end.column = line.length;\n }\n }\n }\n if (new_range)\n range = new_range;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n this.removeWordRight = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordRight();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeWordLeft = function () {\n if (this.selection.isEmpty())\n this.selection.selectWordLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineStart = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineStart();\n if (this.selection.isEmpty())\n this.selection.selectLeft();\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n };\n this.removeToLineEnd = function () {\n if (this.selection.isEmpty())\n this.selection.selectLineEnd();\n var range = this.getSelectionRange();\n if (range.start.column == range.end.column && range.start.row == range.end.row) {\n range.end.column = 0;\n range.end.row++;\n }\n this.session.remove(range);\n this.clearSelection();\n };\n this.splitLine = function () {\n if (!this.selection.isEmpty()) {\n this.session.remove(this.getSelectionRange());\n this.clearSelection();\n }\n var cursor = this.getCursorPosition();\n this.insert(\"\\n\");\n this.moveCursorToPosition(cursor);\n };\n this.transposeLetters = function () {\n if (!this.selection.isEmpty()) {\n return;\n }\n var cursor = this.getCursorPosition();\n var column = cursor.column;\n if (column === 0)\n return;\n var line = this.session.getLine(cursor.row);\n var swap, range;\n if (column < line.length) {\n swap = line.charAt(column) + line.charAt(column - 1);\n range = new Range(cursor.row, column - 1, cursor.row, column + 1);\n }\n else {\n swap = line.charAt(column - 1) + line.charAt(column - 2);\n range = new Range(cursor.row, column - 2, cursor.row, column);\n }\n this.session.replace(range, swap);\n this.session.selection.moveToPosition(range.end);\n };\n this.toLowerCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toLowerCase());\n this.selection.setSelectionRange(originalRange);\n };\n this.toUpperCase = function () {\n var originalRange = this.getSelectionRange();\n if (this.selection.isEmpty()) {\n this.selection.selectWord();\n }\n var range = this.getSelectionRange();\n var text = this.session.getTextRange(range);\n this.session.replace(range, text.toUpperCase());\n this.selection.setSelectionRange(originalRange);\n };\n this.indent = function () {\n var session = this.session;\n var range = this.getSelectionRange();\n if (range.start.row < range.end.row) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n else if (range.start.column < range.end.column) {\n var text = session.getTextRange(range);\n if (!/^\\s+$/.test(text)) {\n var rows = this.$getSelectedRows();\n session.indentRows(rows.first, rows.last, \"\\t\");\n return;\n }\n }\n var line = session.getLine(range.start.row);\n var position = range.start;\n var size = session.getTabSize();\n var column = session.documentToScreenColumn(position.row, position.column);\n if (this.session.getUseSoftTabs()) {\n var count = (size - column % size);\n var indentString = lang.stringRepeat(\" \", count);\n }\n else {\n var count = column % size;\n while (line[range.start.column - 1] == \" \" && count) {\n range.start.column--;\n count--;\n }\n this.selection.setSelectionRange(range);\n indentString = \"\\t\";\n }\n return this.insert(indentString);\n };\n this.blockIndent = function () {\n var rows = this.$getSelectedRows();\n this.session.indentRows(rows.first, rows.last, \"\\t\");\n };\n this.blockOutdent = function () {\n var selection = this.session.getSelection();\n this.session.outdentRows(selection.getRange());\n };\n this.sortLines = function () {\n var rows = this.$getSelectedRows();\n var session = this.session;\n var lines = [];\n for (var i = rows.first; i <= rows.last; i++)\n lines.push(session.getLine(i));\n lines.sort(function (a, b) {\n if (a.toLowerCase() < b.toLowerCase())\n return -1;\n if (a.toLowerCase() > b.toLowerCase())\n return 1;\n return 0;\n });\n var deleteRange = new Range(0, 0, 0, 0);\n for (var i = rows.first; i <= rows.last; i++) {\n var line = session.getLine(i);\n deleteRange.start.row = i;\n deleteRange.end.row = i;\n deleteRange.end.column = line.length;\n session.replace(deleteRange, lines[i - rows.first]);\n }\n };\n this.toggleCommentLines = function () {\n var state = this.session.getState(this.getCursorPosition().row);\n var rows = this.$getSelectedRows();\n this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last);\n };\n this.toggleBlockComment = function () {\n var cursor = this.getCursorPosition();\n var state = this.session.getState(cursor.row);\n var range = this.getSelectionRange();\n this.session.getMode().toggleBlockComment(state, this.session, range, cursor);\n };\n this.getNumberAt = function (row, column) {\n var _numberRx = /[\\-]?[0-9]+(?:\\.[0-9]+)?/g;\n _numberRx.lastIndex = 0;\n var s = this.session.getLine(row);\n while (_numberRx.lastIndex < column) {\n var m = _numberRx.exec(s);\n if (m.index <= column && m.index + m[0].length >= column) {\n var number = {\n value: m[0],\n start: m.index,\n end: m.index + m[0].length\n };\n return number;\n }\n }\n return null;\n };\n this.modifyNumber = function (amount) {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n var charRange = new Range(row, column - 1, row, column);\n var c = this.session.getTextRange(charRange);\n if (!isNaN(parseFloat(c)) && isFinite(c)) {\n var nr = this.getNumberAt(row, column);\n if (nr) {\n var fp = nr.value.indexOf(\".\") >= 0 ? nr.start + nr.value.indexOf(\".\") + 1 : nr.end;\n var decimals = nr.start + nr.value.length - fp;\n var t = parseFloat(nr.value);\n t *= Math.pow(10, decimals);\n if (fp !== nr.end && column < fp) {\n amount *= Math.pow(10, nr.end - column - 1);\n }\n else {\n amount *= Math.pow(10, nr.end - column);\n }\n t += amount;\n t /= Math.pow(10, decimals);\n var nnr = t.toFixed(decimals);\n var replaceRange = new Range(row, nr.start, row, nr.end);\n this.session.replace(replaceRange, nnr);\n this.moveCursorTo(row, Math.max(nr.start + 1, column + nnr.length - nr.value.length));\n }\n }\n else {\n this.toggleWord();\n }\n };\n this.$toggleWordPairs = [\n [\"first\", \"last\"],\n [\"true\", \"false\"],\n [\"yes\", \"no\"],\n [\"width\", \"height\"],\n [\"top\", \"bottom\"],\n [\"right\", \"left\"],\n [\"on\", \"off\"],\n [\"x\", \"y\"],\n [\"get\", \"set\"],\n [\"max\", \"min\"],\n [\"horizontal\", \"vertical\"],\n [\"show\", \"hide\"],\n [\"add\", \"remove\"],\n [\"up\", \"down\"],\n [\"before\", \"after\"],\n [\"even\", \"odd\"],\n [\"in\", \"out\"],\n [\"inside\", \"outside\"],\n [\"next\", \"previous\"],\n [\"increase\", \"decrease\"],\n [\"attach\", \"detach\"],\n [\"&&\", \"||\"],\n [\"==\", \"!=\"]\n ];\n this.toggleWord = function () {\n var row = this.selection.getCursor().row;\n var column = this.selection.getCursor().column;\n this.selection.selectWord();\n var currentState = this.getSelectedText();\n var currWordStart = this.selection.getWordRange().start.column;\n var wordParts = currentState.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g, '$1 ').split(/\\s/);\n var delta = column - currWordStart - 1;\n if (delta < 0)\n delta = 0;\n var curLength = 0, itLength = 0;\n var that = this;\n if (currentState.match(/[A-Za-z0-9_]+/)) {\n wordParts.forEach(function (item, i) {\n itLength = curLength + item.length;\n if (delta >= curLength && delta <= itLength) {\n currentState = item;\n that.selection.clearSelection();\n that.moveCursorTo(row, curLength + currWordStart);\n that.selection.selectTo(row, itLength + currWordStart);\n }\n curLength = itLength;\n });\n }\n var wordPairs = this.$toggleWordPairs;\n var reg;\n for (var i = 0; i < wordPairs.length; i++) {\n var item = wordPairs[i];\n for (var j = 0; j <= 1; j++) {\n var negate = +!j;\n var firstCondition = currentState.match(new RegExp('^\\\\s?_?(' + lang.escapeRegExp(item[j]) + ')\\\\s?$', 'i'));\n if (firstCondition) {\n var secondCondition = currentState.match(new RegExp('([_]|^|\\\\s)(' + lang.escapeRegExp(firstCondition[1]) + ')($|\\\\s)', 'g'));\n if (secondCondition) {\n reg = currentState.replace(new RegExp(lang.escapeRegExp(item[j]), 'i'), function (result) {\n var res = item[negate];\n if (result.toUpperCase() == result) {\n res = res.toUpperCase();\n }\n else if (result.charAt(0).toUpperCase() == result.charAt(0)) {\n res = res.substr(0, 0) + item[negate].charAt(0).toUpperCase() + res.substr(1);\n }\n return res;\n });\n this.insert(reg);\n reg = \"\";\n }\n }\n }\n }\n };\n this.removeLines = function () {\n var rows = this.$getSelectedRows();\n this.session.removeFullLines(rows.first, rows.last);\n this.clearSelection();\n };\n this.duplicateSelection = function () {\n var sel = this.selection;\n var doc = this.session;\n var range = sel.getRange();\n var reverse = sel.isBackwards();\n if (range.isEmpty()) {\n var row = range.start.row;\n doc.duplicateLines(row, row);\n }\n else {\n var point = reverse ? range.start : range.end;\n var endPoint = doc.insert(point, doc.getTextRange(range), false);\n range.start = point;\n range.end = endPoint;\n sel.setSelectionRange(range, reverse);\n }\n };\n this.moveLinesDown = function () {\n this.$moveLines(1, false);\n };\n this.moveLinesUp = function () {\n this.$moveLines(-1, false);\n };\n this.moveText = function (range, toPosition, copy) {\n return this.session.moveText(range, toPosition, copy);\n };\n this.copyLinesUp = function () {\n this.$moveLines(-1, true);\n };\n this.copyLinesDown = function () {\n this.$moveLines(1, true);\n };\n this.$moveLines = function (dir, copy) {\n var rows, moved;\n var selection = this.selection;\n if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) {\n var range = selection.toOrientedRange();\n rows = this.$getSelectedRows(range);\n moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir);\n if (copy && dir == -1)\n moved = 0;\n range.moveBy(moved, 0);\n selection.fromOrientedRange(range);\n }\n else {\n var ranges = selection.rangeList.ranges;\n selection.rangeList.detach(this.session);\n this.inVirtualSelectionMode = true;\n var diff = 0;\n var totalDiff = 0;\n var l = ranges.length;\n for (var i = 0; i < l; i++) {\n var rangeIndex = i;\n ranges[i].moveBy(diff, 0);\n rows = this.$getSelectedRows(ranges[i]);\n var first = rows.first;\n var last = rows.last;\n while (++i < l) {\n if (totalDiff)\n ranges[i].moveBy(totalDiff, 0);\n var subRows = this.$getSelectedRows(ranges[i]);\n if (copy && subRows.first != last)\n break;\n else if (!copy && subRows.first > last + 1)\n break;\n last = subRows.last;\n }\n i--;\n diff = this.session.$moveLines(first, last, copy ? 0 : dir);\n if (copy && dir == -1)\n rangeIndex = i + 1;\n while (rangeIndex <= i) {\n ranges[rangeIndex].moveBy(diff, 0);\n rangeIndex++;\n }\n if (!copy)\n diff = 0;\n totalDiff += diff;\n }\n selection.fromOrientedRange(selection.ranges[0]);\n selection.rangeList.attach(this.session);\n this.inVirtualSelectionMode = false;\n }\n };\n this.$getSelectedRows = function (range) {\n range = (range || this.getSelectionRange()).collapseRows();\n return {\n first: this.session.getRowFoldStart(range.start.row),\n last: this.session.getRowFoldEnd(range.end.row)\n };\n };\n this.onCompositionStart = function (compositionState) {\n this.renderer.showComposition(compositionState);\n };\n this.onCompositionUpdate = function (text) {\n this.renderer.setCompositionText(text);\n };\n this.onCompositionEnd = function () {\n this.renderer.hideComposition();\n };\n this.getFirstVisibleRow = function () {\n return this.renderer.getFirstVisibleRow();\n };\n this.getLastVisibleRow = function () {\n return this.renderer.getLastVisibleRow();\n };\n this.isRowVisible = function (row) {\n return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow());\n };\n this.isRowFullyVisible = function (row) {\n return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow());\n };\n this.$getVisibleRowCount = function () {\n return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1;\n };\n this.$moveByPage = function (dir, select) {\n var renderer = this.renderer;\n var config = this.renderer.layerConfig;\n var rows = dir * Math.floor(config.height / config.lineHeight);\n if (select === true) {\n this.selection.$moveSelection(function () {\n this.moveCursorBy(rows, 0);\n });\n }\n else if (select === false) {\n this.selection.moveCursorBy(rows, 0);\n this.selection.clearSelection();\n }\n var scrollTop = renderer.scrollTop;\n renderer.scrollBy(0, rows * config.lineHeight);\n if (select != null)\n renderer.scrollCursorIntoView(null, 0.5);\n renderer.animateScrolling(scrollTop);\n };\n this.selectPageDown = function () {\n this.$moveByPage(1, true);\n };\n this.selectPageUp = function () {\n this.$moveByPage(-1, true);\n };\n this.gotoPageDown = function () {\n this.$moveByPage(1, false);\n };\n this.gotoPageUp = function () {\n this.$moveByPage(-1, false);\n };\n this.scrollPageDown = function () {\n this.$moveByPage(1);\n };\n this.scrollPageUp = function () {\n this.$moveByPage(-1);\n };\n this.scrollToRow = function (row) {\n this.renderer.scrollToRow(row);\n };\n this.scrollToLine = function (line, center, animate, callback) {\n this.renderer.scrollToLine(line, center, animate, callback);\n };\n this.centerSelection = function () {\n var range = this.getSelectionRange();\n var pos = {\n row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),\n column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)\n };\n this.renderer.alignCursor(pos, 0.5);\n };\n this.getCursorPosition = function () {\n return this.selection.getCursor();\n };\n this.getCursorPositionScreen = function () {\n return this.session.documentToScreenPosition(this.getCursorPosition());\n };\n this.getSelectionRange = function () {\n return this.selection.getRange();\n };\n this.selectAll = function () {\n this.selection.selectAll();\n };\n this.clearSelection = function () {\n this.selection.clearSelection();\n };\n this.moveCursorTo = function (row, column) {\n this.selection.moveCursorTo(row, column);\n };\n this.moveCursorToPosition = function (pos) {\n this.selection.moveCursorToPosition(pos);\n };\n this.jumpToMatching = function (select, expand) {\n var cursor = this.getCursorPosition();\n var iterator = new TokenIterator(this.session, cursor.row, cursor.column);\n var prevToken = iterator.getCurrentToken();\n var tokenCount = 0;\n if (prevToken && prevToken.type.indexOf('tag-name') !== -1) {\n prevToken = iterator.stepBackward();\n }\n var token = prevToken || iterator.stepForward();\n if (!token)\n return;\n var matchType;\n var found = false;\n var depth = {};\n var i = cursor.column - token.start;\n var bracketType;\n var brackets = {\n \")\": \"(\",\n \"(\": \"(\",\n \"]\": \"[\",\n \"[\": \"[\",\n \"{\": \"{\",\n \"}\": \"{\"\n };\n do {\n if (token.value.match(/[{}()\\[\\]]/g)) {\n for (; i < token.value.length && !found; i++) {\n if (!brackets[token.value[i]]) {\n continue;\n }\n bracketType = brackets[token.value[i]] + '.' + token.type.replace(\"rparen\", \"lparen\");\n if (isNaN(depth[bracketType])) {\n depth[bracketType] = 0;\n }\n switch (token.value[i]) {\n case '(':\n case '[':\n case '{':\n depth[bracketType]++;\n break;\n case ')':\n case ']':\n case '}':\n depth[bracketType]--;\n if (depth[bracketType] === -1) {\n matchType = 'bracket';\n found = true;\n }\n break;\n }\n }\n }\n else if (token.type.indexOf('tag-name') !== -1) {\n if (isNaN(depth[token.value])) {\n depth[token.value] = 0;\n }\n if (prevToken.value === '<' && tokenCount > 1) {\n depth[token.value]++;\n }\n else if (prevToken.value === '= 0; --i) {\n if (this.$tryReplace(ranges[i], replacement)) {\n replaced++;\n }\n }\n this.selection.setSelectionRange(selection);\n return replaced;\n };\n this.$tryReplace = function (range, replacement) {\n var input = this.session.getTextRange(range);\n replacement = this.$search.replace(input, replacement);\n if (replacement !== null) {\n range.end = this.session.replace(range, replacement);\n return range;\n }\n else {\n return null;\n }\n };\n this.getLastSearchOptions = function () {\n return this.$search.getOptions();\n };\n this.find = function (needle, options, animate) {\n if (!options)\n options = {};\n if (typeof needle == \"string\" || needle instanceof RegExp)\n options.needle = needle;\n else if (typeof needle == \"object\")\n oop.mixin(options, needle);\n var range = this.selection.getRange();\n if (options.needle == null) {\n needle = this.session.getTextRange(range)\n || this.$search.$options.needle;\n if (!needle) {\n range = this.session.getWordRange(range.start.row, range.start.column);\n needle = this.session.getTextRange(range);\n }\n this.$search.set({ needle: needle });\n }\n this.$search.set(options);\n if (!options.start)\n this.$search.set({ start: range });\n var newRange = this.$search.find(this.session);\n if (options.preventScroll)\n return newRange;\n if (newRange) {\n this.revealRange(newRange, animate);\n return newRange;\n }\n if (options.backwards)\n range.start = range.end;\n else\n range.end = range.start;\n this.selection.setRange(range);\n };\n this.findNext = function (options, animate) {\n this.find({ skipCurrent: true, backwards: false }, options, animate);\n };\n this.findPrevious = function (options, animate) {\n this.find(options, { skipCurrent: true, backwards: true }, animate);\n };\n this.revealRange = function (range, animate) {\n this.session.unfold(range);\n this.selection.setSelectionRange(range);\n var scrollTop = this.renderer.scrollTop;\n this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5);\n if (animate !== false)\n this.renderer.animateScrolling(scrollTop);\n };\n this.undo = function () {\n this.session.getUndoManager().undo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.redo = function () {\n this.session.getUndoManager().redo(this.session);\n this.renderer.scrollCursorIntoView(null, 0.5);\n };\n this.destroy = function () {\n if (this.$toDestroy) {\n this.$toDestroy.forEach(function (el) {\n el.destroy();\n });\n this.$toDestroy = null;\n }\n if (this.$mouseHandler)\n this.$mouseHandler.destroy();\n this.renderer.destroy();\n this._signal(\"destroy\", this);\n if (this.session)\n this.session.destroy();\n if (this._$emitInputEvent)\n this._$emitInputEvent.cancel();\n this.removeAllListeners();\n };\n this.setAutoScrollEditorIntoView = function (enable) {\n if (!enable)\n return;\n var rect;\n var self = this;\n var shouldScroll = false;\n if (!this.$scrollAnchor)\n this.$scrollAnchor = document.createElement(\"div\");\n var scrollAnchor = this.$scrollAnchor;\n scrollAnchor.style.cssText = \"position:absolute\";\n this.container.insertBefore(scrollAnchor, this.container.firstChild);\n var onChangeSelection = this.on(\"changeSelection\", function () {\n shouldScroll = true;\n });\n var onBeforeRender = this.renderer.on(\"beforeRender\", function () {\n if (shouldScroll)\n rect = self.renderer.container.getBoundingClientRect();\n });\n var onAfterRender = this.renderer.on(\"afterRender\", function () {\n if (shouldScroll && rect && (self.isFocused()\n || self.searchBox && self.searchBox.isFocused())) {\n var renderer = self.renderer;\n var pos = renderer.$cursorLayer.$pixelPos;\n var config = renderer.layerConfig;\n var top = pos.top - config.offset;\n if (pos.top >= 0 && top + rect.top < 0) {\n shouldScroll = true;\n }\n else if (pos.top < config.height &&\n pos.top + rect.top + config.lineHeight > window.innerHeight) {\n shouldScroll = false;\n }\n else {\n shouldScroll = null;\n }\n if (shouldScroll != null) {\n scrollAnchor.style.top = top + \"px\";\n scrollAnchor.style.left = pos.left + \"px\";\n scrollAnchor.style.height = config.lineHeight + \"px\";\n scrollAnchor.scrollIntoView(shouldScroll);\n }\n shouldScroll = rect = null;\n }\n });\n this.setAutoScrollEditorIntoView = function (enable) {\n if (enable)\n return;\n delete this.setAutoScrollEditorIntoView;\n this.off(\"changeSelection\", onChangeSelection);\n this.renderer.off(\"afterRender\", onAfterRender);\n this.renderer.off(\"beforeRender\", onBeforeRender);\n };\n };\n this.$resetCursorStyle = function () {\n var style = this.$cursorStyle || \"ace\";\n var cursorLayer = this.renderer.$cursorLayer;\n if (!cursorLayer)\n return;\n cursorLayer.setSmoothBlinking(/smooth/.test(style));\n cursorLayer.isBlinking = !this.$readOnly && style != \"wide\";\n dom.setCssClass(cursorLayer.element, \"ace_slim-cursors\", /slim/.test(style));\n };\n this.prompt = function (message, options, callback) {\n var editor = this;\n config.loadModule(\"./ext/prompt\", function (module) {\n module.prompt(editor, message, options, callback);\n });\n };\n}).call(Editor.prototype);\nconfig.defineOptions(Editor.prototype, \"editor\", {\n selectionStyle: {\n set: function (style) {\n this.onSelectionChange();\n this._signal(\"changeSelectionStyle\", { data: style });\n },\n initialValue: \"line\"\n },\n highlightActiveLine: {\n set: function () { this.$updateHighlightActiveLine(); },\n initialValue: true\n },\n highlightSelectedWord: {\n set: function (shouldHighlight) { this.$onSelectionChange(); },\n initialValue: true\n },\n readOnly: {\n set: function (readOnly) {\n this.textInput.setReadOnly(readOnly);\n this.$resetCursorStyle();\n },\n initialValue: false\n },\n copyWithEmptySelection: {\n set: function (value) {\n this.textInput.setCopyWithEmptySelection(value);\n },\n initialValue: false\n },\n cursorStyle: {\n set: function (val) { this.$resetCursorStyle(); },\n values: [\"ace\", \"slim\", \"smooth\", \"wide\"],\n initialValue: \"ace\"\n },\n mergeUndoDeltas: {\n values: [false, true, \"always\"],\n initialValue: true\n },\n behavioursEnabled: { initialValue: true },\n wrapBehavioursEnabled: { initialValue: true },\n enableAutoIndent: { initialValue: true },\n autoScrollEditorIntoView: {\n set: function (val) { this.setAutoScrollEditorIntoView(val); }\n },\n keyboardHandler: {\n set: function (val) { this.setKeyboardHandler(val); },\n get: function () { return this.$keybindingId; },\n handlesSet: true\n },\n value: {\n set: function (val) { this.session.setValue(val); },\n get: function () { return this.getValue(); },\n handlesSet: true,\n hidden: true\n },\n session: {\n set: function (val) { this.setSession(val); },\n get: function () { return this.session; },\n handlesSet: true,\n hidden: true\n },\n showLineNumbers: {\n set: function (show) {\n this.renderer.$gutterLayer.setShowLineNumbers(show);\n this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER);\n if (show && this.$relativeLineNumbers)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n },\n initialValue: true\n },\n relativeLineNumbers: {\n set: function (value) {\n if (this.$showLineNumbers && value)\n relativeNumberRenderer.attach(this);\n else\n relativeNumberRenderer.detach(this);\n }\n },\n placeholder: {\n set: function (message) {\n if (!this.$updatePlaceholder) {\n this.$updatePlaceholder = function () {\n var value = this.session && (this.renderer.$composition || this.getValue());\n if (value && this.renderer.placeholderNode) {\n this.renderer.off(\"afterRender\", this.$updatePlaceholder);\n dom.removeCssClass(this.container, \"ace_hasPlaceholder\");\n this.renderer.placeholderNode.remove();\n this.renderer.placeholderNode = null;\n }\n else if (!value && !this.renderer.placeholderNode) {\n this.renderer.on(\"afterRender\", this.$updatePlaceholder);\n dom.addCssClass(this.container, \"ace_hasPlaceholder\");\n var el = dom.createElement(\"div\");\n el.className = \"ace_placeholder\";\n el.textContent = this.$placeholder || \"\";\n this.renderer.placeholderNode = el;\n this.renderer.content.appendChild(this.renderer.placeholderNode);\n }\n else if (!value && this.renderer.placeholderNode) {\n this.renderer.placeholderNode.textContent = this.$placeholder || \"\";\n }\n }.bind(this);\n this.on(\"input\", this.$updatePlaceholder);\n }\n this.$updatePlaceholder();\n }\n },\n customScrollbar: \"renderer\",\n hScrollBarAlwaysVisible: \"renderer\",\n vScrollBarAlwaysVisible: \"renderer\",\n highlightGutterLine: \"renderer\",\n animatedScroll: \"renderer\",\n showInvisibles: \"renderer\",\n showPrintMargin: \"renderer\",\n printMarginColumn: \"renderer\",\n printMargin: \"renderer\",\n fadeFoldWidgets: \"renderer\",\n showFoldWidgets: \"renderer\",\n displayIndentGuides: \"renderer\",\n highlightIndentGuides: \"renderer\",\n showGutter: \"renderer\",\n fontSize: \"renderer\",\n fontFamily: \"renderer\",\n maxLines: \"renderer\",\n minLines: \"renderer\",\n scrollPastEnd: \"renderer\",\n fixedWidthGutter: \"renderer\",\n theme: \"renderer\",\n hasCssTransforms: \"renderer\",\n maxPixelHeight: \"renderer\",\n useTextareaForIME: \"renderer\",\n scrollSpeed: \"$mouseHandler\",\n dragDelay: \"$mouseHandler\",\n dragEnabled: \"$mouseHandler\",\n focusTimeout: \"$mouseHandler\",\n tooltipFollowsMouse: \"$mouseHandler\",\n firstLineNumber: \"session\",\n overwrite: \"session\",\n newLineMode: \"session\",\n useWorker: \"session\",\n useSoftTabs: \"session\",\n navigateWithinSoftTabs: \"session\",\n tabSize: \"session\",\n wrap: \"session\",\n indentedSoftWrap: \"session\",\n foldStyle: \"session\",\n mode: \"session\"\n});\nvar relativeNumberRenderer = {\n getText: function (session, row) {\n return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? \"\\xb7\" : \"\"))) + \"\";\n },\n getWidth: function (session, lastLineNumber, config) {\n return Math.max(lastLineNumber.toString().length, (config.lastRow + 1).toString().length, 2) * config.characterWidth;\n },\n update: function (e, editor) {\n editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER);\n },\n attach: function (editor) {\n editor.renderer.$gutterLayer.$renderer = this;\n editor.on(\"changeSelection\", this.update);\n this.update(null, editor);\n },\n detach: function (editor) {\n if (editor.renderer.$gutterLayer.$renderer == this)\n editor.renderer.$gutterLayer.$renderer = null;\n editor.off(\"changeSelection\", this.update);\n this.update(null, editor);\n }\n};\nexports.Editor = Editor;\n\n});\n\nace.define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar UndoManager = function () {\n this.$maxRev = 0;\n this.$fromUndo = false;\n this.$undoDepth = Infinity;\n this.reset();\n};\n(function () {\n this.addSession = function (session) {\n this.$session = session;\n };\n this.add = function (delta, allowMerge, session) {\n if (this.$fromUndo)\n return;\n if (delta == this.$lastDelta)\n return;\n if (!this.$keepRedoStack)\n this.$redoStack.length = 0;\n if (allowMerge === false || !this.lastDeltas) {\n this.lastDeltas = [];\n var undoStackLength = this.$undoStack.length;\n if (undoStackLength > this.$undoDepth - 1) {\n this.$undoStack.splice(0, undoStackLength - this.$undoDepth + 1);\n }\n this.$undoStack.push(this.lastDeltas);\n delta.id = this.$rev = ++this.$maxRev;\n }\n if (delta.action == \"remove\" || delta.action == \"insert\")\n this.$lastDelta = delta;\n this.lastDeltas.push(delta);\n };\n this.addSelection = function (selection, rev) {\n this.selections.push({\n value: selection,\n rev: rev || this.$rev\n });\n };\n this.startNewGroup = function () {\n this.lastDeltas = null;\n return this.$rev;\n };\n this.markIgnored = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id <= from)\n break;\n if (delta.id < to)\n delta.ignore = true;\n }\n this.lastDeltas = null;\n };\n this.getSelection = function (rev, after) {\n var stack = this.selections;\n for (var i = stack.length; i--;) {\n var selection = stack[i];\n if (selection.rev < rev) {\n if (after)\n selection = stack[i + 1];\n return selection;\n }\n }\n };\n this.getRevision = function () {\n return this.$rev;\n };\n this.getDeltas = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n var stack = this.$undoStack;\n var end = null, start = 0;\n for (var i = stack.length; i--;) {\n var delta = stack[i][0];\n if (delta.id < to && !end)\n end = i + 1;\n if (delta.id <= from) {\n start = i + 1;\n break;\n }\n }\n return stack.slice(start, end);\n };\n this.getChangedRanges = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n this.getChangedLines = function (from, to) {\n if (to == null)\n to = this.$rev + 1;\n };\n this.undo = function (session, dontSelect) {\n this.lastDeltas = null;\n var stack = this.$undoStack;\n if (!rearrangeUndoStack(stack, stack.length))\n return;\n if (!session)\n session = this.$session;\n if (this.$redoStackBaseRev !== this.$rev && this.$redoStack.length)\n this.$redoStack = [];\n this.$fromUndo = true;\n var deltaSet = stack.pop();\n var undoSelectionRange = null;\n if (deltaSet) {\n undoSelectionRange = session.undoChanges(deltaSet, dontSelect);\n this.$redoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return undoSelectionRange;\n };\n this.redo = function (session, dontSelect) {\n this.lastDeltas = null;\n if (!session)\n session = this.$session;\n this.$fromUndo = true;\n if (this.$redoStackBaseRev != this.$rev) {\n var diff = this.getDeltas(this.$redoStackBaseRev, this.$rev + 1);\n rebaseRedoStack(this.$redoStack, diff);\n this.$redoStackBaseRev = this.$rev;\n this.$redoStack.forEach(function (x) {\n x[0].id = ++this.$maxRev;\n }, this);\n }\n var deltaSet = this.$redoStack.pop();\n var redoSelectionRange = null;\n if (deltaSet) {\n redoSelectionRange = session.redoChanges(deltaSet, dontSelect);\n this.$undoStack.push(deltaSet);\n this.$syncRev();\n }\n this.$fromUndo = false;\n return redoSelectionRange;\n };\n this.$syncRev = function () {\n var stack = this.$undoStack;\n var nextDelta = stack[stack.length - 1];\n var id = nextDelta && nextDelta[0].id || 0;\n this.$redoStackBaseRev = id;\n this.$rev = id;\n };\n this.reset = function () {\n this.lastDeltas = null;\n this.$lastDelta = null;\n this.$undoStack = [];\n this.$redoStack = [];\n this.$rev = 0;\n this.mark = 0;\n this.$redoStackBaseRev = this.$rev;\n this.selections = [];\n };\n this.canUndo = function () {\n return this.$undoStack.length > 0;\n };\n this.canRedo = function () {\n return this.$redoStack.length > 0;\n };\n this.bookmark = function (rev) {\n if (rev == undefined)\n rev = this.$rev;\n this.mark = rev;\n };\n this.isAtBookmark = function () {\n return this.$rev === this.mark;\n };\n this.toJSON = function () {\n };\n this.fromJSON = function () {\n };\n this.hasUndo = this.canUndo;\n this.hasRedo = this.canRedo;\n this.isClean = this.isAtBookmark;\n this.markClean = this.bookmark;\n this.$prettyPrint = function (delta) {\n if (delta)\n return stringifyDelta(delta);\n return stringifyDelta(this.$undoStack) + \"\\n---\\n\" + stringifyDelta(this.$redoStack);\n };\n}).call(UndoManager.prototype);\nfunction rearrangeUndoStack(stack, pos) {\n for (var i = pos; i--;) {\n var deltaSet = stack[i];\n if (deltaSet && !deltaSet[0].ignore) {\n while (i < pos - 1) {\n var swapped = swapGroups(stack[i], stack[i + 1]);\n stack[i] = swapped[0];\n stack[i + 1] = swapped[1];\n i++;\n }\n return true;\n }\n }\n}\nvar Range = require(\"./range\").Range;\nvar cmp = Range.comparePoints;\nvar comparePoints = Range.comparePoints;\nfunction $updateMarkers(delta) {\n var isInsert = delta.action == \"insert\";\n var start = delta.start;\n var end = delta.end;\n var rowShift = (end.row - start.row) * (isInsert ? 1 : -1);\n var colShift = (end.column - start.column) * (isInsert ? 1 : -1);\n if (isInsert)\n end = start;\n for (var i in this.marks) {\n var point = this.marks[i];\n var cmp = comparePoints(point, start);\n if (cmp < 0) {\n continue; // delta starts after the range\n }\n if (cmp === 0) {\n if (isInsert) {\n if (point.bias == 1) {\n cmp = 1;\n }\n else {\n point.bias == -1;\n continue;\n }\n }\n }\n var cmp2 = isInsert ? cmp : comparePoints(point, end);\n if (cmp2 > 0) {\n point.row += rowShift;\n point.column += point.row == end.row ? colShift : 0;\n continue;\n }\n if (!isInsert && cmp2 <= 0) {\n point.row = start.row;\n point.column = start.column;\n if (cmp2 === 0)\n point.bias = 1;\n }\n }\n}\nfunction clonePos(pos) {\n return { row: pos.row, column: pos.column };\n}\nfunction cloneDelta(d) {\n return {\n start: clonePos(d.start),\n end: clonePos(d.end),\n action: d.action,\n lines: d.lines.slice()\n };\n}\nfunction stringifyDelta(d) {\n d = d || this;\n if (Array.isArray(d)) {\n return d.map(stringifyDelta).join(\"\\n\");\n }\n var type = \"\";\n if (d.action) {\n type = d.action == \"insert\" ? \"+\" : \"-\";\n type += \"[\" + d.lines + \"]\";\n }\n else if (d.value) {\n if (Array.isArray(d.value)) {\n type = d.value.map(stringifyRange).join(\"\\n\");\n }\n else {\n type = stringifyRange(d.value);\n }\n }\n if (d.start) {\n type += stringifyRange(d);\n }\n if (d.id || d.rev) {\n type += \"\\t(\" + (d.id || d.rev) + \")\";\n }\n return type;\n}\nfunction stringifyRange(r) {\n return r.start.row + \":\" + r.start.column\n + \"=>\" + r.end.row + \":\" + r.end.column;\n}\nfunction swap(d1, d2) {\n var i1 = d1.action == \"insert\";\n var i2 = d2.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (i1 && !i2) {\n if (cmp(d2.start, d1.end) >= 0) {\n shift(d2, d1, -1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.start, d1.start) <= 0) {\n shift(d1, d2, +1);\n }\n else {\n return null;\n }\n }\n else if (!i1 && !i2) {\n if (cmp(d2.start, d1.start) >= 0) {\n shift(d2, d1, +1);\n }\n else if (cmp(d2.end, d1.start) <= 0) {\n shift(d1, d2, -1);\n }\n else {\n return null;\n }\n }\n return [d2, d1];\n}\nfunction swapGroups(ds1, ds2) {\n for (var i = ds1.length; i--;) {\n for (var j = 0; j < ds2.length; j++) {\n if (!swap(ds1[i], ds2[j])) {\n while (i < ds1.length) {\n while (j--) {\n swap(ds2[j], ds1[i]);\n }\n j = ds2.length;\n i++;\n }\n return [ds1, ds2];\n }\n }\n }\n ds1.selectionBefore = ds2.selectionBefore =\n ds1.selectionAfter = ds2.selectionAfter = null;\n return [ds2, ds1];\n}\nfunction xform(d1, c1) {\n var i1 = d1.action == \"insert\";\n var i2 = c1.action == \"insert\";\n if (i1 && i2) {\n if (cmp(d1.start, c1.start) < 0) {\n shift(c1, d1, 1);\n }\n else {\n shift(d1, c1, 1);\n }\n }\n else if (i1 && !i2) {\n if (cmp(d1.start, c1.end) >= 0) {\n shift(d1, c1, -1);\n }\n else if (cmp(d1.start, c1.start) <= 0) {\n shift(c1, d1, +1);\n }\n else {\n shift(d1, Range.fromPoints(c1.start, d1.start), -1);\n shift(c1, d1, +1);\n }\n }\n else if (!i1 && i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.start, d1.start) <= 0) {\n shift(d1, c1, +1);\n }\n else {\n shift(c1, Range.fromPoints(d1.start, c1.start), -1);\n shift(d1, c1, +1);\n }\n }\n else if (!i1 && !i2) {\n if (cmp(c1.start, d1.end) >= 0) {\n shift(c1, d1, -1);\n }\n else if (cmp(c1.end, d1.start) <= 0) {\n shift(d1, c1, -1);\n }\n else {\n var before, after;\n if (cmp(d1.start, c1.start) < 0) {\n before = d1;\n d1 = splitDelta(d1, c1.start);\n }\n if (cmp(d1.end, c1.end) > 0) {\n after = splitDelta(d1, c1.end);\n }\n shiftPos(c1.end, d1.start, d1.end, -1);\n if (after && !before) {\n d1.lines = after.lines;\n d1.start = after.start;\n d1.end = after.end;\n after = d1;\n }\n return [c1, before, after].filter(Boolean);\n }\n }\n return [c1, d1];\n}\nfunction shift(d1, d2, dir) {\n shiftPos(d1.start, d2.start, d2.end, dir);\n shiftPos(d1.end, d2.start, d2.end, dir);\n}\nfunction shiftPos(pos, start, end, dir) {\n if (pos.row == (dir == 1 ? start : end).row) {\n pos.column += dir * (end.column - start.column);\n }\n pos.row += dir * (end.row - start.row);\n}\nfunction splitDelta(c, pos) {\n var lines = c.lines;\n var end = c.end;\n c.end = clonePos(pos);\n var rowsBefore = c.end.row - c.start.row;\n var otherLines = lines.splice(rowsBefore, lines.length);\n var col = rowsBefore ? pos.column : pos.column - c.start.column;\n lines.push(otherLines[0].substring(0, col));\n otherLines[0] = otherLines[0].substr(col);\n var rest = {\n start: clonePos(pos),\n end: end,\n lines: otherLines,\n action: c.action\n };\n return rest;\n}\nfunction moveDeltasByOne(redoStack, d) {\n d = cloneDelta(d);\n for (var j = redoStack.length; j--;) {\n var deltaSet = redoStack[j];\n for (var i = 0; i < deltaSet.length; i++) {\n var x = deltaSet[i];\n var xformed = xform(x, d);\n d = xformed[0];\n if (xformed.length != 2) {\n if (xformed[2]) {\n deltaSet.splice(i + 1, 1, xformed[1], xformed[2]);\n i++;\n }\n else if (!xformed[1]) {\n deltaSet.splice(i, 1);\n i--;\n }\n }\n }\n if (!deltaSet.length) {\n redoStack.splice(j, 1);\n }\n }\n return redoStack;\n}\nfunction rebaseRedoStack(redoStack, deltaSets) {\n for (var i = 0; i < deltaSets.length; i++) {\n var deltas = deltaSets[i];\n for (var j = 0; j < deltas.length; j++) {\n moveDeltasByOne(redoStack, deltas[j]);\n }\n }\n}\nexports.UndoManager = UndoManager;\n\n});\n\nace.define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Lines = function (element, canvasHeight) {\n this.element = element;\n this.canvasHeight = canvasHeight || 500000;\n this.element.style.height = (this.canvasHeight * 2) + \"px\";\n this.cells = [];\n this.cellCache = [];\n this.$offsetCoefficient = 0;\n};\n(function () {\n this.moveContainer = function (config) {\n dom.translate(this.element, 0, -((config.firstRowScreen * config.lineHeight) % this.canvasHeight) - config.offset * this.$offsetCoefficient);\n };\n this.pageChanged = function (oldConfig, newConfig) {\n return (Math.floor((oldConfig.firstRowScreen * oldConfig.lineHeight) / this.canvasHeight) !==\n Math.floor((newConfig.firstRowScreen * newConfig.lineHeight) / this.canvasHeight));\n };\n this.computeLineTop = function (row, config, session) {\n var screenTop = config.firstRowScreen * config.lineHeight;\n var screenPage = Math.floor(screenTop / this.canvasHeight);\n var lineTop = session.documentToScreenRow(row, 0) * config.lineHeight;\n return lineTop - (screenPage * this.canvasHeight);\n };\n this.computeLineHeight = function (row, config, session) {\n return config.lineHeight * session.getRowLineCount(row);\n };\n this.getLength = function () {\n return this.cells.length;\n };\n this.get = function (index) {\n return this.cells[index];\n };\n this.shift = function () {\n this.$cacheCell(this.cells.shift());\n };\n this.pop = function () {\n this.$cacheCell(this.cells.pop());\n };\n this.push = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.push.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n this.element.appendChild(fragment);\n }\n else {\n this.cells.push(cell);\n this.element.appendChild(cell.element);\n }\n };\n this.unshift = function (cell) {\n if (Array.isArray(cell)) {\n this.cells.unshift.apply(this.cells, cell);\n var fragment = dom.createFragment(this.element);\n for (var i = 0; i < cell.length; i++) {\n fragment.appendChild(cell[i].element);\n }\n if (this.element.firstChild)\n this.element.insertBefore(fragment, this.element.firstChild);\n else\n this.element.appendChild(fragment);\n }\n else {\n this.cells.unshift(cell);\n this.element.insertAdjacentElement(\"afterbegin\", cell.element);\n }\n };\n this.last = function () {\n if (this.cells.length)\n return this.cells[this.cells.length - 1];\n else\n return null;\n };\n this.$cacheCell = function (cell) {\n if (!cell)\n return;\n cell.element.remove();\n this.cellCache.push(cell);\n };\n this.createCell = function (row, config, session, initElement) {\n var cell = this.cellCache.pop();\n if (!cell) {\n var element = dom.createElement(\"div\");\n if (initElement)\n initElement(element);\n this.element.appendChild(element);\n cell = {\n element: element,\n text: \"\",\n row: row\n };\n }\n cell.row = row;\n return cell;\n };\n}).call(Lines.prototype);\nexports.Lines = Lines;\n\n});\n\nace.define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar lang = require(\"../lib/lang\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Lines = require(\"./lines\").Lines;\nvar Gutter = function (parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_gutter-layer\";\n parentEl.appendChild(this.element);\n this.setShowFoldWidgets(this.$showFoldWidgets);\n this.gutterWidth = 0;\n this.$annotations = [];\n this.$updateAnnotations = this.$updateAnnotations.bind(this);\n this.$lines = new Lines(this.element);\n this.$lines.$offsetCoefficient = 1;\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.setSession = function (session) {\n if (this.session)\n this.session.off(\"change\", this.$updateAnnotations);\n this.session = session;\n if (session)\n session.on(\"change\", this.$updateAnnotations);\n };\n this.addGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.addGutterDecoration\");\n this.session.addGutterDecoration(row, className);\n };\n this.removeGutterDecoration = function (row, className) {\n if (window.console)\n console.warn && console.warn(\"deprecated use session.removeGutterDecoration\");\n this.session.removeGutterDecoration(row, className);\n };\n this.setAnnotations = function (annotations) {\n this.$annotations = [];\n for (var i = 0; i < annotations.length; i++) {\n var annotation = annotations[i];\n var row = annotation.row;\n var rowInfo = this.$annotations[row];\n if (!rowInfo)\n rowInfo = this.$annotations[row] = { text: [] };\n var annoText = annotation.text;\n annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || \"\";\n if (rowInfo.text.indexOf(annoText) === -1)\n rowInfo.text.push(annoText);\n var type = annotation.type;\n var className = annotation.className;\n if (className)\n rowInfo.className = className;\n else if (type == \"error\")\n rowInfo.className = \" ace_error\";\n else if (type == \"warning\" && rowInfo.className != \" ace_error\")\n rowInfo.className = \" ace_warning\";\n else if (type == \"info\" && (!rowInfo.className))\n rowInfo.className = \" ace_info\";\n }\n };\n this.$updateAnnotations = function (delta) {\n if (!this.$annotations.length)\n return;\n var firstRow = delta.start.row;\n var len = delta.end.row - firstRow;\n if (len === 0) {\n }\n else if (delta.action == 'remove') {\n this.$annotations.splice(firstRow, len + 1, null);\n }\n else {\n var args = new Array(len + 1);\n args.unshift(firstRow, 1);\n this.$annotations.splice.apply(this.$annotations, args);\n }\n };\n this.update = function (config) {\n this.config = config;\n var session = this.session;\n var firstRow = config.firstRow;\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n session.getLength() - 1);\n this.oldLastRow = lastRow;\n this.config = config;\n this.$lines.moveContainer(config);\n this.$updateCursorRow();\n var fold = session.getNextFoldLine(firstRow);\n var foldStart = fold ? fold.start.row : Infinity;\n var cell = null;\n var index = -1;\n var row = firstRow;\n while (true) {\n if (row > foldStart) {\n row = fold.end.row + 1;\n fold = session.getNextFoldLine(row, fold);\n foldStart = fold ? fold.start.row : Infinity;\n }\n if (row > lastRow) {\n while (this.$lines.getLength() > index + 1)\n this.$lines.pop();\n break;\n }\n cell = this.$lines.get(++index);\n if (cell) {\n cell.row = row;\n }\n else {\n cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$lines.push(cell);\n }\n this.$renderCell(cell, config, fold, row);\n row++;\n }\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n this.$updateGutterWidth = function (config) {\n var session = this.session;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var firstLineNumber = session.$firstLineNumber;\n var lastLineText = this.$lines.last() ? this.$lines.last().text : \"\";\n if (this.$fixedWidth || session.$useWrapMode)\n lastLineText = session.getLength() + firstLineNumber - 1;\n var gutterWidth = gutterRenderer\n ? gutterRenderer.getWidth(session, lastLineText, config)\n : lastLineText.toString().length * config.characterWidth;\n var padding = this.$padding || this.$computePadding();\n gutterWidth += padding.left + padding.right;\n if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) {\n this.gutterWidth = gutterWidth;\n this.element.parentNode.style.width =\n this.element.style.width = Math.ceil(this.gutterWidth) + \"px\";\n this._signal(\"changeGutterWidth\", gutterWidth);\n }\n };\n this.$updateCursorRow = function () {\n if (!this.$highlightGutterLine)\n return;\n var position = this.session.selection.getCursor();\n if (this.$cursorRow === position.row)\n return;\n this.$cursorRow = position.row;\n };\n this.updateLineHighlight = function () {\n if (!this.$highlightGutterLine)\n return;\n var row = this.session.selection.cursor.row;\n this.$cursorRow = row;\n if (this.$cursorCell && this.$cursorCell.row == row)\n return;\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n var cells = this.$lines.cells;\n this.$cursorCell = null;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (cell.row >= this.$cursorRow) {\n if (cell.row > this.$cursorRow) {\n var fold = this.session.getFoldLine(this.$cursorRow);\n if (i > 0 && fold && fold.start.row == cells[i - 1].row)\n cell = cells[i - 1];\n else\n break;\n }\n cell.element.className = \"ace_gutter-active-line \" + cell.element.className;\n this.$cursorCell = cell;\n break;\n }\n }\n };\n this.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n this.$updateCursorRow();\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar\n this.session.getLength() - 1);\n var oldLastRow = this.oldLastRow;\n this.oldLastRow = lastRow;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldLastRow > lastRow)\n for (var row = this.session.getFoldedRowCount(lastRow + 1, oldLastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLines(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (lastRow > oldLastRow) {\n this.$lines.push(this.$renderLines(config, oldLastRow + 1, lastRow));\n }\n this.updateLineHighlight();\n this._signal(\"afterRender\");\n this.$updateGutterWidth(config);\n };\n this.$renderLines = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var cell = this.$lines.createCell(row, config, this.session, onCreateCell);\n this.$renderCell(cell, config, foldLine, row);\n fragment.push(cell);\n row++;\n }\n return fragment;\n };\n this.$renderCell = function (cell, config, fold, row) {\n var element = cell.element;\n var session = this.session;\n var textNode = element.childNodes[0];\n var foldWidget = element.childNodes[1];\n var firstLineNumber = session.$firstLineNumber;\n var breakpoints = session.$breakpoints;\n var decorations = session.$decorations;\n var gutterRenderer = session.gutterRenderer || this.$renderer;\n var foldWidgets = this.$showFoldWidgets && session.foldWidgets;\n var foldStart = fold ? fold.start.row : Number.MAX_VALUE;\n var className = \"ace_gutter-cell \";\n if (this.$highlightGutterLine) {\n if (row == this.$cursorRow || (fold && row < this.$cursorRow && row >= foldStart && this.$cursorRow <= fold.end.row)) {\n className += \"ace_gutter-active-line \";\n if (this.$cursorCell != cell) {\n if (this.$cursorCell)\n this.$cursorCell.element.className = this.$cursorCell.element.className.replace(\"ace_gutter-active-line \", \"\");\n this.$cursorCell = cell;\n }\n }\n }\n if (breakpoints[row])\n className += breakpoints[row];\n if (decorations[row])\n className += decorations[row];\n if (this.$annotations[row])\n className += this.$annotations[row].className;\n if (element.className != className)\n element.className = className;\n if (foldWidgets) {\n var c = foldWidgets[row];\n if (c == null)\n c = foldWidgets[row] = session.getFoldWidget(row);\n }\n if (c) {\n var className = \"ace_fold-widget ace_\" + c;\n if (c == \"start\" && row == foldStart && row < fold.end.row)\n className += \" ace_closed\";\n else\n className += \" ace_open\";\n if (foldWidget.className != className)\n foldWidget.className = className;\n var foldHeight = config.lineHeight + \"px\";\n dom.setStyle(foldWidget.style, \"height\", foldHeight);\n dom.setStyle(foldWidget.style, \"display\", \"inline-block\");\n }\n else {\n if (foldWidget) {\n dom.setStyle(foldWidget.style, \"display\", \"none\");\n }\n }\n var text = (gutterRenderer\n ? gutterRenderer.getText(session, row)\n : row + firstLineNumber).toString();\n if (text !== textNode.data) {\n textNode.data = text;\n }\n dom.setStyle(cell.element.style, \"height\", this.$lines.computeLineHeight(row, config, session) + \"px\");\n dom.setStyle(cell.element.style, \"top\", this.$lines.computeLineTop(row, config, session) + \"px\");\n cell.text = text;\n return cell;\n };\n this.$fixedWidth = false;\n this.$highlightGutterLine = true;\n this.$renderer = \"\";\n this.setHighlightGutterLine = function (highlightGutterLine) {\n this.$highlightGutterLine = highlightGutterLine;\n };\n this.$showLineNumbers = true;\n this.$renderer = \"\";\n this.setShowLineNumbers = function (show) {\n this.$renderer = !show && {\n getWidth: function () { return 0; },\n getText: function () { return \"\"; }\n };\n };\n this.getShowLineNumbers = function () {\n return this.$showLineNumbers;\n };\n this.$showFoldWidgets = true;\n this.setShowFoldWidgets = function (show) {\n if (show)\n dom.addCssClass(this.element, \"ace_folding-enabled\");\n else\n dom.removeCssClass(this.element, \"ace_folding-enabled\");\n this.$showFoldWidgets = show;\n this.$padding = null;\n };\n this.getShowFoldWidgets = function () {\n return this.$showFoldWidgets;\n };\n this.$computePadding = function () {\n if (!this.element.firstChild)\n return { left: 0, right: 0 };\n var style = dom.computedStyle(this.element.firstChild);\n this.$padding = {};\n this.$padding.left = (parseInt(style.borderLeftWidth) || 0)\n + (parseInt(style.paddingLeft) || 0) + 1;\n this.$padding.right = (parseInt(style.borderRightWidth) || 0)\n + (parseInt(style.paddingRight) || 0);\n return this.$padding;\n };\n this.getRegion = function (point) {\n var padding = this.$padding || this.$computePadding();\n var rect = this.element.getBoundingClientRect();\n if (point.x < padding.left + rect.left)\n return \"markers\";\n if (this.$showFoldWidgets && point.x > rect.right - padding.right)\n return \"foldWidgets\";\n };\n}).call(Gutter.prototype);\nfunction onCreateCell(element) {\n var textNode = document.createTextNode('');\n element.appendChild(textNode);\n var foldWidget = dom.createElement(\"span\");\n element.appendChild(foldWidget);\n return element;\n}\nexports.Gutter = Gutter;\n\n});\n\nace.define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../range\").Range;\nvar dom = require(\"../lib/dom\");\nvar Marker = function (parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_marker-layer\";\n parentEl.appendChild(this.element);\n};\n(function () {\n this.$padding = 0;\n this.setPadding = function (padding) {\n this.$padding = padding;\n };\n this.setSession = function (session) {\n this.session = session;\n };\n this.setMarkers = function (markers) {\n this.markers = markers;\n };\n this.elt = function (className, css) {\n var x = this.i != -1 && this.element.childNodes[this.i];\n if (!x) {\n x = document.createElement(\"div\");\n this.element.appendChild(x);\n this.i = -1;\n }\n else {\n this.i++;\n }\n x.style.cssText = css;\n x.className = className;\n };\n this.update = function (config) {\n if (!config)\n return;\n this.config = config;\n this.i = 0;\n var html;\n for (var key in this.markers) {\n var marker = this.markers[key];\n if (!marker.range) {\n marker.update(html, this, this.session, config);\n continue;\n }\n var range = marker.range.clipRows(config.firstRow, config.lastRow);\n if (range.isEmpty())\n continue;\n range = range.toScreenRange(this.session);\n if (marker.renderer) {\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n marker.renderer(html, range, left, top, config);\n }\n else if (marker.type == \"fullLine\") {\n this.drawFullLineMarker(html, range, marker.clazz, config);\n }\n else if (marker.type == \"screenLine\") {\n this.drawScreenLineMarker(html, range, marker.clazz, config);\n }\n else if (range.isMultiLine()) {\n if (marker.type == \"text\")\n this.drawTextMarker(html, range, marker.clazz, config);\n else\n this.drawMultiLineMarker(html, range, marker.clazz, config);\n }\n else {\n this.drawSingleLineMarker(html, range, marker.clazz + \" ace_start\" + \" ace_br15\", config);\n }\n }\n if (this.i != -1) {\n while (this.i < this.element.childElementCount)\n this.element.removeChild(this.element.lastChild);\n }\n };\n this.$getTop = function (row, layerConfig) {\n return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight;\n };\n function getBorderClass(tl, tr, br, bl) {\n return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0);\n }\n this.drawTextMarker = function (stringBuilder, range, clazz, layerConfig, extraStyle) {\n var session = this.session;\n var start = range.start.row;\n var end = range.end.row;\n var row = start;\n var prev = 0;\n var curr = 0;\n var next = session.getScreenLastRowColumn(row);\n var lineRange = new Range(row, range.start.column, row, curr);\n for (; row <= end; row++) {\n lineRange.start.row = lineRange.end.row = row;\n lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row);\n lineRange.end.column = next;\n prev = curr;\n curr = next;\n next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column;\n this.drawSingleLineMarker(stringBuilder, lineRange, clazz + (row == start ? \" ace_start\" : \"\") + \" ace_br\"\n + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), layerConfig, row == end ? 0 : 1, extraStyle);\n }\n };\n this.drawMultiLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var padding = this.$padding;\n var height = config.lineHeight;\n var top = this.$getTop(range.start.row, config);\n var left = padding + range.start.column * config.characterWidth;\n extraStyle = extraStyle || \"\";\n if (this.session.$bidiHandler.isBidiRow(range.start.row)) {\n var range1 = range.clone();\n range1.end.row = range1.start.row;\n range1.end.column = this.session.getLine(range1.start.row).length;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br1 ace_start\", config, null, extraStyle);\n }\n else {\n this.elt(clazz + \" ace_br1 ace_start\", \"height:\" + height + \"px;\" + \"right:0;\" + \"top:\" + top + \"px;left:\" + left + \"px;\" + (extraStyle || \"\"));\n }\n if (this.session.$bidiHandler.isBidiRow(range.end.row)) {\n var range1 = range.clone();\n range1.start.row = range1.end.row;\n range1.start.column = 0;\n this.drawBidiSingleLineMarker(stringBuilder, range1, clazz + \" ace_br12\", config, null, extraStyle);\n }\n else {\n top = this.$getTop(range.end.row, config);\n var width = range.end.column * config.characterWidth;\n this.elt(clazz + \" ace_br12\", \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n }\n height = (range.end.row - range.start.row - 1) * config.lineHeight;\n if (height <= 0)\n return;\n top = this.$getTop(range.start.row + 1, config);\n var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8);\n this.elt(clazz + (radiusClass ? \" ace_br\" + radiusClass : \"\"), \"height:\" + height + \"px;\" +\n \"right:0;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + padding + \"px;\" + (extraStyle || \"\"));\n };\n this.drawSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n if (this.session.$bidiHandler.isBidiRow(range.start.row))\n return this.drawBidiSingleLineMarker(stringBuilder, range, clazz, config, extraLength, extraStyle);\n var height = config.lineHeight;\n var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth;\n var top = this.$getTop(range.start.row, config);\n var left = this.$padding + range.start.column * config.characterWidth;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + width + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + left + \"px;\" + (extraStyle || \"\"));\n };\n this.drawBidiSingleLineMarker = function (stringBuilder, range, clazz, config, extraLength, extraStyle) {\n var height = config.lineHeight, top = this.$getTop(range.start.row, config), padding = this.$padding;\n var selections = this.session.$bidiHandler.getSelections(range.start.column, range.end.column);\n selections.forEach(function (selection) {\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"width:\" + selection.width + (extraLength || 0) + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:\" + (padding + selection.left) + \"px;\" + (extraStyle || \"\"));\n }, this);\n };\n this.drawFullLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n if (range.start.row != range.end.row)\n height += this.$getTop(range.end.row, config) - top;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n this.drawScreenLineMarker = function (stringBuilder, range, clazz, config, extraStyle) {\n var top = this.$getTop(range.start.row, config);\n var height = config.lineHeight;\n this.elt(clazz, \"height:\" + height + \"px;\" +\n \"top:\" + top + \"px;\" +\n \"left:0;right:0;\" + (extraStyle || \"\"));\n };\n}).call(Marker.prototype);\nexports.Marker = Marker;\n\n});\n\nace.define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar Lines = require(\"./lines\").Lines;\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Text = function (parentEl) {\n this.dom = dom;\n this.element = this.dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_text-layer\";\n parentEl.appendChild(this.element);\n this.$updateEolChar = this.$updateEolChar.bind(this);\n this.$lines = new Lines(this.element);\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.EOF_CHAR = \"\\xB6\";\n this.EOL_CHAR_LF = \"\\xAC\";\n this.EOL_CHAR_CRLF = \"\\xa4\";\n this.EOL_CHAR = this.EOL_CHAR_LF;\n this.TAB_CHAR = \"\\u2014\"; //\"\\u21E5\";\n this.SPACE_CHAR = \"\\xB7\";\n this.$padding = 0;\n this.MAX_LINE_LENGTH = 10000;\n this.$updateEolChar = function () {\n var doc = this.session.doc;\n var unixMode = doc.getNewLineCharacter() == \"\\n\" && doc.getNewLineMode() != \"windows\";\n var EOL_CHAR = unixMode ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF;\n if (this.EOL_CHAR != EOL_CHAR) {\n this.EOL_CHAR = EOL_CHAR;\n return true;\n }\n };\n this.setPadding = function (padding) {\n this.$padding = padding;\n this.element.style.margin = \"0 \" + padding + \"px\";\n };\n this.getLineHeight = function () {\n return this.$fontMetrics.$characterSize.height || 0;\n };\n this.getCharacterWidth = function () {\n return this.$fontMetrics.$characterSize.width || 0;\n };\n this.$setFontMetrics = function (measure) {\n this.$fontMetrics = measure;\n this.$fontMetrics.on(\"changeCharacterSize\", function (e) {\n this._signal(\"changeCharacterSize\", e);\n }.bind(this));\n this.$pollSizeChanges();\n };\n this.checkForSizeChanges = function () {\n this.$fontMetrics.checkForSizeChanges();\n };\n this.$pollSizeChanges = function () {\n return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges();\n };\n this.setSession = function (session) {\n this.session = session;\n if (session)\n this.$computeTabString();\n };\n this.showInvisibles = false;\n this.showSpaces = false;\n this.showTabs = false;\n this.showEOL = false;\n this.setShowInvisibles = function (showInvisibles) {\n if (this.showInvisibles == showInvisibles)\n return false;\n this.showInvisibles = showInvisibles;\n if (typeof showInvisibles == \"string\") {\n this.showSpaces = /tab/i.test(showInvisibles);\n this.showTabs = /space/i.test(showInvisibles);\n this.showEOL = /eol/i.test(showInvisibles);\n }\n else {\n this.showSpaces = this.showTabs = this.showEOL = showInvisibles;\n }\n this.$computeTabString();\n return true;\n };\n this.displayIndentGuides = true;\n this.setDisplayIndentGuides = function (display) {\n if (this.displayIndentGuides == display)\n return false;\n this.displayIndentGuides = display;\n this.$computeTabString();\n return true;\n };\n this.$highlightIndentGuides = true;\n this.setHighlightIndentGuides = function (highlight) {\n if (this.$highlightIndentGuides === highlight)\n return false;\n this.$highlightIndentGuides = highlight;\n return highlight;\n };\n this.$tabStrings = [];\n this.onChangeTabSize =\n this.$computeTabString = function () {\n var tabSize = this.session.getTabSize();\n this.tabSize = tabSize;\n var tabStr = this.$tabStrings = [0];\n for (var i = 1; i < tabSize + 1; i++) {\n if (this.showTabs) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_tab\";\n span.textContent = lang.stringRepeat(this.TAB_CHAR, i);\n tabStr.push(span);\n }\n else {\n tabStr.push(this.dom.createTextNode(lang.stringRepeat(\" \", i), this.element));\n }\n }\n if (this.displayIndentGuides) {\n this.$indentGuideRe = /\\s\\S| \\t|\\t |\\s$/;\n var className = \"ace_indent-guide\";\n var spaceClass = this.showSpaces ? \" ace_invisible ace_invisible_space\" : \"\";\n var spaceContent = this.showSpaces\n ? lang.stringRepeat(this.SPACE_CHAR, this.tabSize)\n : lang.stringRepeat(\" \", this.tabSize);\n var tabClass = this.showTabs ? \" ace_invisible ace_invisible_tab\" : \"\";\n var tabContent = this.showTabs\n ? lang.stringRepeat(this.TAB_CHAR, this.tabSize)\n : spaceContent;\n var span = this.dom.createElement(\"span\");\n span.className = className + spaceClass;\n span.textContent = spaceContent;\n this.$tabStrings[\" \"] = span;\n var span = this.dom.createElement(\"span\");\n span.className = className + tabClass;\n span.textContent = tabContent;\n this.$tabStrings[\"\\t\"] = span;\n }\n };\n this.updateLines = function (config, firstRow, lastRow) {\n if (this.config.lastRow != config.lastRow ||\n this.config.firstRow != config.firstRow) {\n return this.update(config);\n }\n this.config = config;\n var first = Math.max(firstRow, config.firstRow);\n var last = Math.min(lastRow, config.lastRow);\n var lineElements = this.element.childNodes;\n var lineElementsIdx = 0;\n for (var row = config.firstRow; row < first; row++) {\n var foldLine = this.session.getFoldLine(row);\n if (foldLine) {\n if (foldLine.containsRow(first)) {\n first = foldLine.start.row;\n break;\n }\n else {\n row = foldLine.end.row;\n }\n }\n lineElementsIdx++;\n }\n var heightChanged = false;\n var row = first;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > last)\n break;\n var lineElement = lineElements[lineElementsIdx++];\n if (lineElement) {\n this.dom.removeChildren(lineElement);\n this.$renderLine(lineElement, row, row == foldStart ? foldLine : false);\n if (heightChanged)\n lineElement.style.top = this.$lines.computeLineTop(row, config, this.session) + \"px\";\n var height = (config.lineHeight * this.session.getRowLength(row)) + \"px\";\n if (lineElement.style.height != height) {\n heightChanged = true;\n lineElement.style.height = height;\n }\n }\n row++;\n }\n if (heightChanged) {\n while (lineElementsIdx < this.$lines.cells.length) {\n var cell = this.$lines.cells[lineElementsIdx++];\n cell.element.style.top = this.$lines.computeLineTop(cell.row, config, this.session) + \"px\";\n }\n }\n };\n this.scrollLines = function (config) {\n var oldConfig = this.config;\n this.config = config;\n if (this.$lines.pageChanged(oldConfig, config))\n return this.update(config);\n this.$lines.moveContainer(config);\n var lastRow = config.lastRow;\n var oldLastRow = oldConfig ? oldConfig.lastRow : -1;\n if (!oldConfig || oldLastRow < config.firstRow)\n return this.update(config);\n if (lastRow < oldConfig.firstRow)\n return this.update(config);\n if (!oldConfig || oldConfig.lastRow < config.firstRow)\n return this.update(config);\n if (config.lastRow < oldConfig.firstRow)\n return this.update(config);\n if (oldConfig.firstRow < config.firstRow)\n for (var row = this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row > 0; row--)\n this.$lines.shift();\n if (oldConfig.lastRow > config.lastRow)\n for (var row = this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row > 0; row--)\n this.$lines.pop();\n if (config.firstRow < oldConfig.firstRow) {\n this.$lines.unshift(this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1));\n }\n if (config.lastRow > oldConfig.lastRow) {\n this.$lines.push(this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow));\n }\n this.$highlightIndentGuide();\n };\n this.$renderLinesFragment = function (config, firstRow, lastRow) {\n var fragment = [];\n var row = firstRow;\n var foldLine = this.session.getNextFoldLine(row);\n var foldStart = foldLine ? foldLine.start.row : Infinity;\n while (true) {\n if (row > foldStart) {\n row = foldLine.end.row + 1;\n foldLine = this.session.getNextFoldLine(row, foldLine);\n foldStart = foldLine ? foldLine.start.row : Infinity;\n }\n if (row > lastRow)\n break;\n var line = this.$lines.createCell(row, config, this.session);\n var lineEl = line.element;\n this.dom.removeChildren(lineEl);\n dom.setStyle(lineEl.style, \"height\", this.$lines.computeLineHeight(row, config, this.session) + \"px\");\n dom.setStyle(lineEl.style, \"top\", this.$lines.computeLineTop(row, config, this.session) + \"px\");\n this.$renderLine(lineEl, row, row == foldStart ? foldLine : false);\n if (this.$useLineGroups()) {\n lineEl.className = \"ace_line_group\";\n }\n else {\n lineEl.className = \"ace_line\";\n }\n fragment.push(line);\n row++;\n }\n return fragment;\n };\n this.update = function (config) {\n this.$lines.moveContainer(config);\n this.config = config;\n var firstRow = config.firstRow;\n var lastRow = config.lastRow;\n var lines = this.$lines;\n while (lines.getLength())\n lines.pop();\n lines.push(this.$renderLinesFragment(config, firstRow, lastRow));\n };\n this.$textToken = {\n \"text\": true,\n \"rparen\": true,\n \"lparen\": true\n };\n this.$renderToken = function (parent, screenColumn, token, value) {\n var self = this;\n var re = /(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC\\u2066\\u2067\\u2068\\u202A\\u202B\\u202D\\u202E\\u202C\\u2069]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g;\n var valueFragment = this.dom.createFragment(this.element);\n var m;\n var i = 0;\n while (m = re.exec(value)) {\n var tab = m[1];\n var simpleSpace = m[2];\n var controlCharacter = m[3];\n var cjkSpace = m[4];\n var cjk = m[5];\n if (!self.showSpaces && simpleSpace)\n continue;\n var before = i != m.index ? value.slice(i, m.index) : \"\";\n i = m.index + m[0].length;\n if (before) {\n valueFragment.appendChild(this.dom.createTextNode(before, this.element));\n }\n if (tab) {\n var tabSize = self.session.getScreenTabSize(screenColumn + m.index);\n valueFragment.appendChild(self.$tabStrings[tabSize].cloneNode(true));\n screenColumn += tabSize - 1;\n }\n else if (simpleSpace) {\n if (self.showSpaces) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, simpleSpace.length);\n valueFragment.appendChild(span);\n }\n else {\n valueFragment.appendChild(this.com.createTextNode(simpleSpace, this.element));\n }\n }\n else if (controlCharacter) {\n var span = this.dom.createElement(\"span\");\n span.className = \"ace_invisible ace_invisible_space ace_invalid\";\n span.textContent = lang.stringRepeat(self.SPACE_CHAR, controlCharacter.length);\n valueFragment.appendChild(span);\n }\n else if (cjkSpace) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = self.showSpaces ? \"ace_cjk ace_invisible ace_invisible_space\" : \"ace_cjk\";\n span.textContent = self.showSpaces ? self.SPACE_CHAR : cjkSpace;\n valueFragment.appendChild(span);\n }\n else if (cjk) {\n screenColumn += 1;\n var span = this.dom.createElement(\"span\");\n span.style.width = (self.config.characterWidth * 2) + \"px\";\n span.className = \"ace_cjk\";\n span.textContent = cjk;\n valueFragment.appendChild(span);\n }\n }\n valueFragment.appendChild(this.dom.createTextNode(i ? value.slice(i) : value, this.element));\n if (!this.$textToken[token.type]) {\n var classes = \"ace_\" + token.type.replace(/\\./g, \" ace_\");\n var span = this.dom.createElement(\"span\");\n if (token.type == \"fold\")\n span.style.width = (token.value.length * this.config.characterWidth) + \"px\";\n span.className = classes;\n span.appendChild(valueFragment);\n parent.appendChild(span);\n }\n else {\n parent.appendChild(valueFragment);\n }\n return screenColumn + value.length;\n };\n this.renderIndentGuide = function (parent, value, max) {\n var cols = value.search(this.$indentGuideRe);\n if (cols <= 0 || cols >= max)\n return value;\n if (value[0] == \" \") {\n cols -= cols % this.tabSize;\n var count = cols / this.tabSize;\n for (var i = 0; i < count; i++) {\n parent.appendChild(this.$tabStrings[\" \"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n else if (value[0] == \"\\t\") {\n for (var i = 0; i < cols; i++) {\n parent.appendChild(this.$tabStrings[\"\\t\"].cloneNode(true));\n }\n this.$highlightIndentGuide();\n return value.substr(cols);\n }\n this.$highlightIndentGuide();\n return value;\n };\n this.$highlightIndentGuide = function () {\n if (!this.$highlightIndentGuides || !this.displayIndentGuides)\n return;\n this.$highlightIndentGuideMarker = {\n indentLevel: undefined,\n start: undefined,\n end: undefined,\n dir: undefined\n };\n var lines = this.session.doc.$lines;\n if (!lines)\n return;\n var cursor = this.session.selection.getCursor();\n var initialIndent = /^\\s*/.exec(this.session.doc.getLine(cursor.row))[0].length;\n var elementIndentLevel = Math.floor(initialIndent / this.tabSize);\n this.$highlightIndentGuideMarker = {\n indentLevel: elementIndentLevel,\n start: cursor.row\n };\n var bracketHighlight = this.session.$bracketHighlight;\n if (bracketHighlight) {\n var ranges = this.session.$bracketHighlight.ranges;\n for (var i = 0; i < ranges.length; i++) {\n if (cursor.row !== ranges[i].start.row) {\n this.$highlightIndentGuideMarker.end = ranges[i].start.row;\n if (cursor.row > ranges[i].start.row) {\n this.$highlightIndentGuideMarker.dir = -1;\n }\n else {\n this.$highlightIndentGuideMarker.dir = 1;\n }\n break;\n }\n }\n }\n if (!this.$highlightIndentGuideMarker.end) {\n if (lines[cursor.row] !== '' && cursor.column === lines[cursor.row].length) {\n this.$highlightIndentGuideMarker.dir = 1;\n for (var i = cursor.row + 1; i < lines.length; i++) {\n var line = lines[i];\n var currentIndent = /^\\s*/.exec(line)[0].length;\n if (line !== '') {\n this.$highlightIndentGuideMarker.end = i;\n if (currentIndent <= initialIndent)\n break;\n }\n }\n }\n }\n this.$renderHighlightIndentGuide();\n };\n this.$clearActiveIndentGuide = function () {\n var cells = this.$lines.cells;\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n var childNodes = cell.element.childNodes;\n if (childNodes.length > 0) {\n for (var j = 0; j < childNodes.length; j++) {\n if (childNodes[j].classList && childNodes[j].classList.contains(\"ace_indent-guide-active\")) {\n childNodes[j].classList.remove(\"ace_indent-guide-active\");\n break;\n }\n }\n }\n }\n };\n this.$setIndentGuideActive = function (cell, indentLevel) {\n var line = this.session.doc.getLine(cell.row);\n if (line !== \"\") {\n var childNodes = cell.element.childNodes;\n if (childNodes) {\n var node = childNodes[indentLevel - 1];\n if (node && node.classList && node.classList.contains(\"ace_indent-guide\"))\n node.classList.add(\"ace_indent-guide-active\");\n }\n }\n };\n this.$renderHighlightIndentGuide = function () {\n if (!this.$lines)\n return;\n var cells = this.$lines.cells;\n this.$clearActiveIndentGuide();\n var indentLevel = this.$highlightIndentGuideMarker.indentLevel;\n if (indentLevel !== 0) {\n if (this.$highlightIndentGuideMarker.dir === 1) {\n for (var i = 0; i < cells.length; i++) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row >= this.$highlightIndentGuideMarker.start\n + 1) {\n if (cell.row >= this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n else {\n for (var i = cells.length - 1; i >= 0; i--) {\n var cell = cells[i];\n if (this.$highlightIndentGuideMarker.end && cell.row < this.$highlightIndentGuideMarker.start) {\n if (cell.row <= this.$highlightIndentGuideMarker.end)\n break;\n this.$setIndentGuideActive(cell, indentLevel);\n }\n }\n }\n }\n };\n this.$createLineElement = function (parent) {\n var lineEl = this.dom.createElement(\"div\");\n lineEl.className = \"ace_line\";\n lineEl.style.height = this.config.lineHeight + \"px\";\n return lineEl;\n };\n this.$renderWrappedLine = function (parent, tokens, splits) {\n var chars = 0;\n var split = 0;\n var splitChars = splits[0];\n var screenColumn = 0;\n var lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n chars = value.length;\n value = this.renderIndentGuide(lineEl, value, splitChars);\n if (!value)\n continue;\n chars -= value.length;\n }\n if (chars + value.length < splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n chars += value.length;\n }\n else {\n while (chars + value.length >= splitChars) {\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value.substring(0, splitChars - chars));\n value = value.substring(splitChars - chars);\n chars = splitChars;\n lineEl = this.$createLineElement();\n parent.appendChild(lineEl);\n lineEl.appendChild(this.dom.createTextNode(lang.stringRepeat(\"\\xa0\", splits.indent), this.element));\n split++;\n screenColumn = 0;\n splitChars = splits[split] || Number.MAX_VALUE;\n }\n if (value.length != 0) {\n chars += value.length;\n screenColumn = this.$renderToken(lineEl, screenColumn, token, value);\n }\n }\n }\n if (splits[splits.length - 1] > this.MAX_LINE_LENGTH)\n this.$renderOverflowMessage(lineEl, screenColumn, null, \"\", true);\n };\n this.$renderSimpleLine = function (parent, tokens) {\n var screenColumn = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n var value = token.value;\n if (i == 0 && this.displayIndentGuides) {\n value = this.renderIndentGuide(parent, value);\n if (!value)\n continue;\n }\n if (screenColumn + value.length > this.MAX_LINE_LENGTH)\n return this.$renderOverflowMessage(parent, screenColumn, token, value);\n screenColumn = this.$renderToken(parent, screenColumn, token, value);\n }\n };\n this.$renderOverflowMessage = function (parent, screenColumn, token, value, hide) {\n token && this.$renderToken(parent, screenColumn, token, value.slice(0, this.MAX_LINE_LENGTH - screenColumn));\n var overflowEl = this.dom.createElement(\"span\");\n overflowEl.className = \"ace_inline_button ace_keyword ace_toggle_wrap\";\n overflowEl.textContent = hide ? \"\" : \"\";\n parent.appendChild(overflowEl);\n };\n this.$renderLine = function (parent, row, foldLine) {\n if (!foldLine && foldLine != false)\n foldLine = this.session.getFoldLine(row);\n if (foldLine)\n var tokens = this.$getFoldLineTokens(row, foldLine);\n else\n var tokens = this.session.getTokens(row);\n var lastLineEl = parent;\n if (tokens.length) {\n var splits = this.session.getRowSplitData(row);\n if (splits && splits.length) {\n this.$renderWrappedLine(parent, tokens, splits);\n var lastLineEl = parent.lastChild;\n }\n else {\n var lastLineEl = parent;\n if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n this.$renderSimpleLine(lastLineEl, tokens);\n }\n }\n else if (this.$useLineGroups()) {\n lastLineEl = this.$createLineElement();\n parent.appendChild(lastLineEl);\n }\n if (this.showEOL && lastLineEl) {\n if (foldLine)\n row = foldLine.end.row;\n var invisibleEl = this.dom.createElement(\"span\");\n invisibleEl.className = \"ace_invisible ace_invisible_eol\";\n invisibleEl.textContent = row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR;\n lastLineEl.appendChild(invisibleEl);\n }\n };\n this.$getFoldLineTokens = function (row, foldLine) {\n var session = this.session;\n var renderTokens = [];\n function addTokens(tokens, from, to) {\n var idx = 0, col = 0;\n while ((col + tokens[idx].value.length) < from) {\n col += tokens[idx].value.length;\n idx++;\n if (idx == tokens.length)\n return;\n }\n if (col != from) {\n var value = tokens[idx].value.substring(from - col);\n if (value.length > (to - from))\n value = value.substring(0, to - from);\n renderTokens.push({\n type: tokens[idx].type,\n value: value\n });\n col = from + value.length;\n idx += 1;\n }\n while (col < to && idx < tokens.length) {\n var value = tokens[idx].value;\n if (value.length + col > to) {\n renderTokens.push({\n type: tokens[idx].type,\n value: value.substring(0, to - col)\n });\n }\n else\n renderTokens.push(tokens[idx]);\n col += value.length;\n idx += 1;\n }\n }\n var tokens = session.getTokens(row);\n foldLine.walk(function (placeholder, row, column, lastColumn, isNewRow) {\n if (placeholder != null) {\n renderTokens.push({\n type: \"fold\",\n value: placeholder\n });\n }\n else {\n if (isNewRow)\n tokens = session.getTokens(row);\n if (tokens.length)\n addTokens(tokens, lastColumn, column);\n }\n }, foldLine.end.row, this.session.getLine(foldLine.end.row).length);\n return renderTokens;\n };\n this.$useLineGroups = function () {\n return this.session.getUseWrapMode();\n };\n this.destroy = function () { };\n}).call(Text.prototype);\nexports.Text = Text;\n\n});\n\nace.define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar Cursor = function (parentEl) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_layer ace_cursor-layer\";\n parentEl.appendChild(this.element);\n this.isVisible = false;\n this.isBlinking = true;\n this.blinkInterval = 1000;\n this.smoothBlinking = false;\n this.cursors = [];\n this.cursor = this.addCursor();\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.$updateCursors = this.$updateOpacity.bind(this);\n};\n(function () {\n this.$updateOpacity = function (val) {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n dom.setStyle(cursors[i].style, \"opacity\", val ? \"\" : \"0\");\n };\n this.$startCssAnimation = function () {\n var cursors = this.cursors;\n for (var i = cursors.length; i--;)\n cursors[i].style.animationDuration = this.blinkInterval + \"ms\";\n this.$isAnimating = true;\n setTimeout(function () {\n if (this.$isAnimating) {\n dom.addCssClass(this.element, \"ace_animate-blinking\");\n }\n }.bind(this));\n };\n this.$stopCssAnimation = function () {\n this.$isAnimating = false;\n dom.removeCssClass(this.element, \"ace_animate-blinking\");\n };\n this.$padding = 0;\n this.setPadding = function (padding) {\n this.$padding = padding;\n };\n this.setSession = function (session) {\n this.session = session;\n };\n this.setBlinking = function (blinking) {\n if (blinking != this.isBlinking) {\n this.isBlinking = blinking;\n this.restartTimer();\n }\n };\n this.setBlinkInterval = function (blinkInterval) {\n if (blinkInterval != this.blinkInterval) {\n this.blinkInterval = blinkInterval;\n this.restartTimer();\n }\n };\n this.setSmoothBlinking = function (smoothBlinking) {\n if (smoothBlinking != this.smoothBlinking) {\n this.smoothBlinking = smoothBlinking;\n dom.setCssClass(this.element, \"ace_smooth-blinking\", smoothBlinking);\n this.$updateCursors(true);\n this.restartTimer();\n }\n };\n this.addCursor = function () {\n var el = dom.createElement(\"div\");\n el.className = \"ace_cursor\";\n this.element.appendChild(el);\n this.cursors.push(el);\n return el;\n };\n this.removeCursor = function () {\n if (this.cursors.length > 1) {\n var el = this.cursors.pop();\n el.parentNode.removeChild(el);\n return el;\n }\n };\n this.hideCursor = function () {\n this.isVisible = false;\n dom.addCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n this.showCursor = function () {\n this.isVisible = true;\n dom.removeCssClass(this.element, \"ace_hidden-cursors\");\n this.restartTimer();\n };\n this.restartTimer = function () {\n var update = this.$updateCursors;\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n this.$stopCssAnimation();\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = false;\n dom.removeCssClass(this.element, \"ace_smooth-blinking\");\n }\n update(true);\n if (!this.isBlinking || !this.blinkInterval || !this.isVisible) {\n this.$stopCssAnimation();\n return;\n }\n if (this.smoothBlinking) {\n this.$isSmoothBlinking = true;\n setTimeout(function () {\n if (this.$isSmoothBlinking) {\n dom.addCssClass(this.element, \"ace_smooth-blinking\");\n }\n }.bind(this));\n }\n if (dom.HAS_CSS_ANIMATION) {\n this.$startCssAnimation();\n }\n else {\n var blink = function () {\n this.timeoutId = setTimeout(function () {\n update(false);\n }, 0.6 * this.blinkInterval);\n }.bind(this);\n this.intervalId = setInterval(function () {\n update(true);\n blink();\n }, this.blinkInterval);\n blink();\n }\n };\n this.getPixelPosition = function (position, onScreen) {\n if (!this.config || !this.session)\n return { left: 0, top: 0 };\n if (!position)\n position = this.session.selection.getCursor();\n var pos = this.session.documentToScreenPosition(position);\n var cursorLeft = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, position.row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : pos.column * this.config.characterWidth);\n var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) *\n this.config.lineHeight;\n return { left: cursorLeft, top: cursorTop };\n };\n this.isCursorInView = function (pixelPos, config) {\n return pixelPos.top >= 0 && pixelPos.top < config.maxHeight;\n };\n this.update = function (config) {\n this.config = config;\n var selections = this.session.$selectionMarkers;\n var i = 0, cursorIndex = 0;\n if (selections === undefined || selections.length === 0) {\n selections = [{ cursor: null }];\n }\n for (var i = 0, n = selections.length; i < n; i++) {\n var pixelPos = this.getPixelPosition(selections[i].cursor, true);\n if ((pixelPos.top > config.height + config.offset ||\n pixelPos.top < 0) && i > 1) {\n continue;\n }\n var element = this.cursors[cursorIndex++] || this.addCursor();\n var style = element.style;\n if (!this.drawCursor) {\n if (!this.isCursorInView(pixelPos, config)) {\n dom.setStyle(style, \"display\", \"none\");\n }\n else {\n dom.setStyle(style, \"display\", \"block\");\n dom.translate(element, pixelPos.left, pixelPos.top);\n dom.setStyle(style, \"width\", Math.round(config.characterWidth) + \"px\");\n dom.setStyle(style, \"height\", config.lineHeight + \"px\");\n }\n }\n else {\n this.drawCursor(element, pixelPos, config, selections[i], this.session);\n }\n }\n while (this.cursors.length > cursorIndex)\n this.removeCursor();\n var overwrite = this.session.getOverwrite();\n this.$setOverwrite(overwrite);\n this.$pixelPos = pixelPos;\n this.restartTimer();\n };\n this.drawCursor = null;\n this.$setOverwrite = function (overwrite) {\n if (overwrite != this.overwrite) {\n this.overwrite = overwrite;\n if (overwrite)\n dom.addCssClass(this.element, \"ace_overwrite-cursors\");\n else\n dom.removeCssClass(this.element, \"ace_overwrite-cursors\");\n }\n };\n this.destroy = function () {\n clearInterval(this.intervalId);\n clearTimeout(this.timeoutId);\n };\n}).call(Cursor.prototype);\nexports.Cursor = Cursor;\n\n});\n\nace.define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar MAX_SCROLL_H = 0x8000;\nvar ScrollBar = function (parent) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_scrollbar ace_scrollbar\" + this.classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"ace_scrollbar-inner\";\n this.inner.textContent = \"\\xa0\";\n this.element.appendChild(this.inner);\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addListener(this.element, \"scroll\", this.onScroll.bind(this));\n event.addListener(this.element, \"mousedown\", event.preventDefault);\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n}).call(ScrollBar.prototype);\nvar VScrollBar = function (parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollTop = 0;\n this.scrollHeight = 0;\n renderer.$scrollbarWidth =\n this.width = dom.scrollbarWidth(parent.ownerDocument);\n this.inner.style.width =\n this.element.style.width = (this.width || 15) + 5 + \"px\";\n this.$minWidth = 0;\n};\noop.inherits(VScrollBar, ScrollBar);\n(function () {\n this.classSuffix = '-v';\n this.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollTop = this.element.scrollTop;\n if (this.coeff != 1) {\n var h = this.element.clientHeight / this.scrollHeight;\n this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h);\n }\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n this.skipEvent = false;\n };\n this.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n this.setHeight = function (height) {\n this.element.style.height = height + \"px\";\n };\n this.setInnerHeight =\n this.setScrollHeight = function (height) {\n this.scrollHeight = height;\n if (height > MAX_SCROLL_H) {\n this.coeff = MAX_SCROLL_H / height;\n height = MAX_SCROLL_H;\n }\n else if (this.coeff != 1) {\n this.coeff = 1;\n }\n this.inner.style.height = height + \"px\";\n };\n this.setScrollTop = function (scrollTop) {\n if (this.scrollTop != scrollTop) {\n this.skipEvent = true;\n this.scrollTop = scrollTop;\n this.element.scrollTop = scrollTop * this.coeff;\n }\n };\n}).call(VScrollBar.prototype);\nvar HScrollBar = function (parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollLeft = 0;\n this.height = renderer.$scrollbarWidth;\n this.inner.style.height =\n this.element.style.height = (this.height || 15) + 5 + \"px\";\n};\noop.inherits(HScrollBar, ScrollBar);\n(function () {\n this.classSuffix = '-h';\n this.onScroll = function () {\n if (!this.skipEvent) {\n this.scrollLeft = this.element.scrollLeft;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n this.skipEvent = false;\n };\n this.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n this.setWidth = function (width) {\n this.element.style.width = width + \"px\";\n };\n this.setInnerWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollWidth = function (width) {\n this.inner.style.width = width + \"px\";\n };\n this.setScrollLeft = function (scrollLeft) {\n if (this.scrollLeft != scrollLeft) {\n this.skipEvent = true;\n this.scrollLeft = this.element.scrollLeft = scrollLeft;\n }\n };\n}).call(HScrollBar.prototype);\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/scrollbar_custom\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\ndom.importCssString(\".ace_editor>.ace_sb-v div, .ace_editor>.ace_sb-h div{\\n position: absolute;\\n background: rgba(128, 128, 128, 0.6);\\n -moz-box-sizing: border-box;\\n box-sizing: border-box;\\n border: 1px solid #bbb;\\n border-radius: 2px;\\n z-index: 8;\\n}\\n.ace_editor>.ace_sb-v, .ace_editor>.ace_sb-h {\\n position: absolute;\\n z-index: 6;\\n background: none;\\n overflow: hidden!important;\\n}\\n.ace_editor>.ace_sb-v {\\n z-index: 6;\\n right: 0;\\n top: 0;\\n width: 12px;\\n}\\n.ace_editor>.ace_sb-v div {\\n z-index: 8;\\n right: 0;\\n width: 100%;\\n}\\n.ace_editor>.ace_sb-h {\\n bottom: 0;\\n left: 0;\\n height: 12px;\\n}\\n.ace_editor>.ace_sb-h div {\\n bottom: 0;\\n height: 100%;\\n}\\n.ace_editor>.ace_sb_grabbed {\\n z-index: 8;\\n background: #000;\\n}\", \"ace_scrollbar.css\", false);\nvar ScrollBar = function (parent) {\n this.element = dom.createElement(\"div\");\n this.element.className = \"ace_sb\" + this.classSuffix;\n this.inner = dom.createElement(\"div\");\n this.inner.className = \"\";\n this.element.appendChild(this.inner);\n this.VScrollWidth = 12;\n this.HScrollHeight = 12;\n parent.appendChild(this.element);\n this.setVisible(false);\n this.skipEvent = false;\n event.addMultiMouseDownListener(this.element, [500, 300, 300], this, \"onMouseDown\");\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.setVisible = function (isVisible) {\n this.element.style.display = isVisible ? \"\" : \"none\";\n this.isVisible = isVisible;\n this.coeff = 1;\n };\n}).call(ScrollBar.prototype);\nvar VScrollBar = function (parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollTop = 0;\n this.scrollHeight = 0;\n this.parent = parent;\n this.width = this.VScrollWidth;\n this.renderer = renderer;\n this.inner.style.width = this.element.style.width = (this.width || 15) + \"px\";\n this.$minWidth = 0;\n};\noop.inherits(VScrollBar, ScrollBar);\n(function () {\n this.classSuffix = '-v';\n oop.implement(this, EventEmitter);\n this.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageY = e.clientY;\n var onMouseMove = function (e) {\n mousePageY = e.clientY;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startY = e.clientY;\n var startTop = this.thumbTop;\n var onScrollInterval = function () {\n if (mousePageY === undefined)\n return;\n var scrollTop = self.scrollTopFromThumbTop(startTop + mousePageY - startY);\n if (scrollTop === self.scrollTop)\n return;\n self._emit(\"scroll\", { data: scrollTop });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var top = e.clientY - this.element.getBoundingClientRect().top - this.thumbHeight / 2;\n this._emit(\"scroll\", { data: this.scrollTopFromThumbTop(top) });\n return event.preventDefault(e);\n };\n this.getHeight = function () {\n return this.height;\n };\n this.scrollTopFromThumbTop = function (thumbTop) {\n var scrollTop = thumbTop * (this.pageHeight - this.viewHeight) / (this.slideHeight - this.thumbHeight);\n scrollTop = scrollTop >> 0;\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n else if (scrollTop > this.pageHeight - this.viewHeight) {\n scrollTop = this.pageHeight - this.viewHeight;\n }\n return scrollTop;\n };\n this.getWidth = function () {\n return Math.max(this.isVisible ? this.width : 0, this.$minWidth || 0);\n };\n this.setHeight = function (height) {\n this.height = Math.max(0, height);\n this.slideHeight = this.height;\n this.viewHeight = this.height;\n this.setScrollHeight(this.pageHeight, true);\n };\n this.setInnerHeight = this.setScrollHeight = function (height, force) {\n if (this.pageHeight === height && !force)\n return;\n this.pageHeight = height;\n this.thumbHeight = this.slideHeight * this.viewHeight / this.pageHeight;\n if (this.thumbHeight > this.slideHeight)\n this.thumbHeight = this.slideHeight;\n if (this.thumbHeight < 15)\n this.thumbHeight = 15;\n this.inner.style.height = this.thumbHeight + \"px\";\n if (this.scrollTop > (this.pageHeight - this.viewHeight)) {\n this.scrollTop = (this.pageHeight - this.viewHeight);\n if (this.scrollTop < 0)\n this.scrollTop = 0;\n this._emit(\"scroll\", { data: this.scrollTop });\n }\n };\n this.setScrollTop = function (scrollTop) {\n this.scrollTop = scrollTop;\n if (scrollTop < 0)\n scrollTop = 0;\n this.thumbTop = scrollTop * (this.slideHeight - this.thumbHeight) / (this.pageHeight - this.viewHeight);\n this.inner.style.top = this.thumbTop + \"px\";\n };\n}).call(VScrollBar.prototype);\nvar HScrollBar = function (parent, renderer) {\n ScrollBar.call(this, parent);\n this.scrollLeft = 0;\n this.scrollWidth = 0;\n this.height = this.HScrollHeight;\n this.inner.style.height = this.element.style.height = (this.height || 12) + \"px\";\n this.renderer = renderer;\n};\noop.inherits(HScrollBar, ScrollBar);\n(function () {\n this.classSuffix = '-h';\n oop.implement(this, EventEmitter);\n this.onMouseDown = function (eType, e) {\n if (eType !== \"mousedown\")\n return;\n if (event.getButton(e) !== 0 || e.detail === 2) {\n return;\n }\n if (e.target === this.inner) {\n var self = this;\n var mousePageX = e.clientX;\n var onMouseMove = function (e) {\n mousePageX = e.clientX;\n };\n var onMouseUp = function () {\n clearInterval(timerId);\n };\n var startX = e.clientX;\n var startLeft = this.thumbLeft;\n var onScrollInterval = function () {\n if (mousePageX === undefined)\n return;\n var scrollLeft = self.scrollLeftFromThumbLeft(startLeft + mousePageX - startX);\n if (scrollLeft === self.scrollLeft)\n return;\n self._emit(\"scroll\", { data: scrollLeft });\n };\n event.capture(this.inner, onMouseMove, onMouseUp);\n var timerId = setInterval(onScrollInterval, 20);\n return event.preventDefault(e);\n }\n var left = e.clientX - this.element.getBoundingClientRect().left - this.thumbWidth / 2;\n this._emit(\"scroll\", { data: this.scrollLeftFromThumbLeft(left) });\n return event.preventDefault(e);\n };\n this.getHeight = function () {\n return this.isVisible ? this.height : 0;\n };\n this.scrollLeftFromThumbLeft = function (thumbLeft) {\n var scrollLeft = thumbLeft * (this.pageWidth - this.viewWidth) / (this.slideWidth - this.thumbWidth);\n scrollLeft = scrollLeft >> 0;\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n else if (scrollLeft > this.pageWidth - this.viewWidth) {\n scrollLeft = this.pageWidth - this.viewWidth;\n }\n return scrollLeft;\n };\n this.setWidth = function (width) {\n this.width = Math.max(0, width);\n this.element.style.width = this.width + \"px\";\n this.slideWidth = this.width;\n this.viewWidth = this.width;\n this.setScrollWidth(this.pageWidth, true);\n };\n this.setInnerWidth = this.setScrollWidth = function (width, force) {\n if (this.pageWidth === width && !force)\n return;\n this.pageWidth = width;\n this.thumbWidth = this.slideWidth * this.viewWidth / this.pageWidth;\n if (this.thumbWidth > this.slideWidth)\n this.thumbWidth = this.slideWidth;\n if (this.thumbWidth < 15)\n this.thumbWidth = 15;\n this.inner.style.width = this.thumbWidth + \"px\";\n if (this.scrollLeft > (this.pageWidth - this.viewWidth)) {\n this.scrollLeft = (this.pageWidth - this.viewWidth);\n if (this.scrollLeft < 0)\n this.scrollLeft = 0;\n this._emit(\"scroll\", { data: this.scrollLeft });\n }\n };\n this.setScrollLeft = function (scrollLeft) {\n this.scrollLeft = scrollLeft;\n if (scrollLeft < 0)\n scrollLeft = 0;\n this.thumbLeft = scrollLeft * (this.slideWidth - this.thumbWidth) / (this.pageWidth - this.viewWidth);\n this.inner.style.left = (this.thumbLeft) + \"px\";\n };\n}).call(HScrollBar.prototype);\nexports.ScrollBar = VScrollBar; // backward compatibility\nexports.ScrollBarV = VScrollBar; // backward compatibility\nexports.ScrollBarH = HScrollBar; // backward compatibility\nexports.VScrollBar = VScrollBar;\nexports.HScrollBar = HScrollBar;\n\n});\n\nace.define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"], function(require, exports, module){\"use strict\";\nvar event = require(\"./lib/event\");\nvar RenderLoop = function (onRender, win) {\n this.onRender = onRender;\n this.pending = false;\n this.changes = 0;\n this.$recursionLimit = 2;\n this.window = win || window;\n var _self = this;\n this._flush = function (ts) {\n _self.pending = false;\n var changes = _self.changes;\n if (changes) {\n event.blockIdle(100);\n _self.changes = 0;\n _self.onRender(changes);\n }\n if (_self.changes) {\n if (_self.$recursionLimit-- < 0)\n return;\n _self.schedule();\n }\n else {\n _self.$recursionLimit = 2;\n }\n };\n};\n(function () {\n this.schedule = function (change) {\n this.changes = this.changes | change;\n if (this.changes && !this.pending) {\n event.nextFrame(this._flush);\n this.pending = true;\n }\n };\n this.clear = function (change) {\n var changes = this.changes;\n this.changes = 0;\n return changes;\n };\n}).call(RenderLoop.prototype);\nexports.RenderLoop = RenderLoop;\n\n});\n\nace.define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"], function(require, exports, module){var oop = require(\"../lib/oop\");\nvar dom = require(\"../lib/dom\");\nvar lang = require(\"../lib/lang\");\nvar event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar CHAR_COUNT = 256;\nvar USE_OBSERVER = typeof ResizeObserver == \"function\";\nvar L = 200;\nvar FontMetrics = exports.FontMetrics = function (parentEl) {\n this.el = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.el.style, true);\n this.$main = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$main.style);\n this.$measureNode = dom.createElement(\"div\");\n this.$setMeasureNodeStyles(this.$measureNode.style);\n this.el.appendChild(this.$main);\n this.el.appendChild(this.$measureNode);\n parentEl.appendChild(this.el);\n this.$measureNode.textContent = lang.stringRepeat(\"X\", CHAR_COUNT);\n this.$characterSize = { width: 0, height: 0 };\n if (USE_OBSERVER)\n this.$addObserver();\n else\n this.checkForSizeChanges();\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.$characterSize = { width: 0, height: 0 };\n this.$setMeasureNodeStyles = function (style, isRoot) {\n style.width = style.height = \"auto\";\n style.left = style.top = \"0px\";\n style.visibility = \"hidden\";\n style.position = \"absolute\";\n style.whiteSpace = \"pre\";\n if (useragent.isIE < 8) {\n style[\"font-family\"] = \"inherit\";\n }\n else {\n style.font = \"inherit\";\n }\n style.overflow = isRoot ? \"hidden\" : \"visible\";\n };\n this.checkForSizeChanges = function (size) {\n if (size === undefined)\n size = this.$measureSizes();\n if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) {\n this.$measureNode.style.fontWeight = \"bold\";\n var boldSize = this.$measureSizes();\n this.$measureNode.style.fontWeight = \"\";\n this.$characterSize = size;\n this.charSizes = Object.create(null);\n this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height;\n this._emit(\"changeCharacterSize\", { data: size });\n }\n };\n this.$addObserver = function () {\n var self = this;\n this.$observer = new window.ResizeObserver(function (e) {\n self.checkForSizeChanges();\n });\n this.$observer.observe(this.$measureNode);\n };\n this.$pollSizeChanges = function () {\n if (this.$pollSizeChangesTimer || this.$observer)\n return this.$pollSizeChangesTimer;\n var self = this;\n return this.$pollSizeChangesTimer = event.onIdle(function cb() {\n self.checkForSizeChanges();\n event.onIdle(cb, 500);\n }, 500);\n };\n this.setPolling = function (val) {\n if (val) {\n this.$pollSizeChanges();\n }\n else if (this.$pollSizeChangesTimer) {\n clearInterval(this.$pollSizeChangesTimer);\n this.$pollSizeChangesTimer = 0;\n }\n };\n this.$measureSizes = function (node) {\n var size = {\n height: (node || this.$measureNode).clientHeight,\n width: (node || this.$measureNode).clientWidth / CHAR_COUNT\n };\n if (size.width === 0 || size.height === 0)\n return null;\n return size;\n };\n this.$measureCharWidth = function (ch) {\n this.$main.textContent = lang.stringRepeat(ch, CHAR_COUNT);\n var rect = this.$main.getBoundingClientRect();\n return rect.width / CHAR_COUNT;\n };\n this.getCharacterWidth = function (ch) {\n var w = this.charSizes[ch];\n if (w === undefined) {\n w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width;\n }\n return w;\n };\n this.destroy = function () {\n clearInterval(this.$pollSizeChangesTimer);\n if (this.$observer)\n this.$observer.disconnect();\n if (this.el && this.el.parentNode)\n this.el.parentNode.removeChild(this.el);\n };\n this.$getZoom = function getZoom(element) {\n if (!element || !element.parentElement)\n return 1;\n return (window.getComputedStyle(element).zoom || 1) * getZoom(element.parentElement);\n };\n this.$initTransformMeasureNodes = function () {\n var t = function (t, l) {\n return [\"div\", {\n style: \"position: absolute;top:\" + t + \"px;left:\" + l + \"px;\"\n }];\n };\n this.els = dom.buildDom([t(0, 0), t(L, 0), t(0, L), t(L, L)], this.el);\n };\n this.transformCoordinates = function (clientPos, elPos) {\n if (clientPos) {\n var zoom = this.$getZoom(this.el);\n clientPos = mul(1 / zoom, clientPos);\n }\n function solve(l1, l2, r) {\n var det = l1[1] * l2[0] - l1[0] * l2[1];\n return [\n (-l2[1] * r[0] + l2[0] * r[1]) / det,\n (+l1[1] * r[0] - l1[0] * r[1]) / det\n ];\n }\n function sub(a, b) { return [a[0] - b[0], a[1] - b[1]]; }\n function add(a, b) { return [a[0] + b[0], a[1] + b[1]]; }\n function mul(a, b) { return [a * b[0], a * b[1]]; }\n if (!this.els)\n this.$initTransformMeasureNodes();\n function p(el) {\n var r = el.getBoundingClientRect();\n return [r.left, r.top];\n }\n var a = p(this.els[0]);\n var b = p(this.els[1]);\n var c = p(this.els[2]);\n var d = p(this.els[3]);\n var h = solve(sub(d, b), sub(d, c), sub(add(b, c), add(d, a)));\n var m1 = mul(1 + h[0], sub(b, a));\n var m2 = mul(1 + h[1], sub(c, a));\n if (elPos) {\n var x = elPos;\n var k = h[0] * x[0] / L + h[1] * x[1] / L + 1;\n var ut = add(mul(x[0], m1), mul(x[1], m2));\n return add(mul(1 / k / L, ut), a);\n }\n var u = sub(clientPos, a);\n var f = solve(sub(m1, mul(h[0], u)), sub(m2, mul(h[1], u)), u);\n return mul(L, f);\n };\n}).call(FontMetrics.prototype);\n\n});\n\nace.define(\"ace/css/editor.css\",[\"require\",\"exports\",\"module\"], function(require, exports, module){module.exports = \"/*\\nstyles = []\\nfor (var i = 1; i < 16; i++) {\\n styles.push(\\\".ace_br\\\" + i + \\\"{\\\" + (\\n [\\\"top-left\\\", \\\"top-right\\\", \\\"bottom-right\\\", \\\"bottom-left\\\"]\\n ).map(function(x, j) {\\n return i & (1< .ace_line, .ace_text-layer > .ace_line_group {\\n contain: style size layout;\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n}\\n\\n.ace_hidpi .ace_text-layer,\\n.ace_hidpi .ace_gutter-layer,\\n.ace_hidpi .ace_content,\\n.ace_hidpi .ace_gutter {\\n contain: strict;\\n will-change: transform;\\n}\\n.ace_hidpi .ace_text-layer > .ace_line, \\n.ace_hidpi .ace_text-layer > .ace_line_group {\\n contain: strict;\\n}\\n\\n.ace_cjk {\\n display: inline-block;\\n text-align: center;\\n}\\n\\n.ace_cursor-layer {\\n z-index: 4;\\n}\\n\\n.ace_cursor {\\n z-index: 4;\\n position: absolute;\\n box-sizing: border-box;\\n border-left: 2px solid;\\n /* workaround for smooth cursor repaintng whole screen in chrome */\\n transform: translatez(0);\\n}\\n\\n.ace_multiselect .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_slim-cursors .ace_cursor {\\n border-left-width: 1px;\\n}\\n\\n.ace_overwrite-cursors .ace_cursor {\\n border-left-width: 0;\\n border-bottom: 1px solid;\\n}\\n\\n.ace_hidden-cursors .ace_cursor {\\n opacity: 0.2;\\n}\\n\\n.ace_hasPlaceholder .ace_hidden-cursors .ace_cursor {\\n opacity: 0;\\n}\\n\\n.ace_smooth-blinking .ace_cursor {\\n transition: opacity 0.18s;\\n}\\n\\n.ace_animate-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: step-end;\\n animation-name: blink-ace-animate;\\n animation-iteration-count: infinite;\\n}\\n\\n.ace_animate-blinking.ace_smooth-blinking .ace_cursor {\\n animation-duration: 1000ms;\\n animation-timing-function: ease-in-out;\\n animation-name: blink-ace-animate-smooth;\\n}\\n \\n@keyframes blink-ace-animate {\\n from, to { opacity: 1; }\\n 60% { opacity: 0; }\\n}\\n\\n@keyframes blink-ace-animate-smooth {\\n from, to { opacity: 1; }\\n 45% { opacity: 1; }\\n 60% { opacity: 0; }\\n 85% { opacity: 0; }\\n}\\n\\n.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\\n position: absolute;\\n z-index: 3;\\n}\\n\\n.ace_marker-layer .ace_selection {\\n position: absolute;\\n z-index: 5;\\n}\\n\\n.ace_marker-layer .ace_bracket {\\n position: absolute;\\n z-index: 6;\\n}\\n\\n.ace_marker-layer .ace_error_bracket {\\n position: absolute;\\n border-bottom: 1px solid #DE5555;\\n border-radius: 0;\\n}\\n\\n.ace_marker-layer .ace_active-line {\\n position: absolute;\\n z-index: 2;\\n}\\n\\n.ace_marker-layer .ace_selected-word {\\n position: absolute;\\n z-index: 4;\\n box-sizing: border-box;\\n}\\n\\n.ace_line .ace_fold {\\n box-sizing: border-box;\\n\\n display: inline-block;\\n height: 11px;\\n margin-top: -2px;\\n vertical-align: middle;\\n\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\\\");\\n background-repeat: no-repeat, repeat-x;\\n background-position: center center, top left;\\n color: transparent;\\n\\n border: 1px solid black;\\n border-radius: 2px;\\n\\n cursor: pointer;\\n pointer-events: auto;\\n}\\n\\n.ace_dark .ace_fold {\\n}\\n\\n.ace_fold:hover{\\n background-image:\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\\\"),\\n url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\\\");\\n}\\n\\n.ace_tooltip {\\n background-color: #FFF;\\n background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\\n border: 1px solid gray;\\n border-radius: 1px;\\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\\n color: black;\\n max-width: 100%;\\n padding: 3px 4px;\\n position: fixed;\\n z-index: 999999;\\n box-sizing: border-box;\\n cursor: default;\\n white-space: pre;\\n word-wrap: break-word;\\n line-height: normal;\\n font-style: normal;\\n font-weight: normal;\\n letter-spacing: normal;\\n pointer-events: none;\\n}\\n\\n.ace_folding-enabled > .ace_gutter-cell {\\n padding-right: 13px;\\n}\\n\\n.ace_fold-widget {\\n box-sizing: border-box;\\n\\n margin: 0 -12px 0 1px;\\n display: none;\\n width: 11px;\\n vertical-align: top;\\n\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\\\");\\n background-repeat: no-repeat;\\n background-position: center;\\n\\n border-radius: 3px;\\n \\n border: 1px solid transparent;\\n cursor: pointer;\\n}\\n\\n.ace_folding-enabled .ace_fold-widget {\\n display: inline-block; \\n}\\n\\n.ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\\\");\\n}\\n\\n.ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\\\");\\n}\\n\\n.ace_fold-widget:hover {\\n border: 1px solid rgba(0, 0, 0, 0.3);\\n background-color: rgba(255, 255, 255, 0.2);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\\n}\\n\\n.ace_fold-widget:active {\\n border: 1px solid rgba(0, 0, 0, 0.4);\\n background-color: rgba(0, 0, 0, 0.05);\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\\n}\\n/**\\n * Dark version for fold widgets\\n */\\n.ace_dark .ace_fold-widget {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_end {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget.ace_closed {\\n background-image: url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\\\");\\n}\\n.ace_dark .ace_fold-widget:hover {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n background-color: rgba(255, 255, 255, 0.1);\\n}\\n.ace_dark .ace_fold-widget:active {\\n box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\\n}\\n\\n.ace_inline_button {\\n border: 1px solid lightgray;\\n display: inline-block;\\n margin: -1px 8px;\\n padding: 0 5px;\\n pointer-events: auto;\\n cursor: pointer;\\n}\\n.ace_inline_button:hover {\\n border-color: gray;\\n background: rgba(200,200,200,0.2);\\n display: inline-block;\\n pointer-events: auto;\\n}\\n\\n.ace_fold-widget.ace_invalid {\\n background-color: #FFB4B4;\\n border-color: #DE5555;\\n}\\n\\n.ace_fade-fold-widgets .ace_fold-widget {\\n transition: opacity 0.4s ease 0.05s;\\n opacity: 0;\\n}\\n\\n.ace_fade-fold-widgets:hover .ace_fold-widget {\\n transition: opacity 0.05s ease 0.05s;\\n opacity:1;\\n}\\n\\n.ace_underline {\\n text-decoration: underline;\\n}\\n\\n.ace_bold {\\n font-weight: bold;\\n}\\n\\n.ace_nobold .ace_bold {\\n font-weight: normal;\\n}\\n\\n.ace_italic {\\n font-style: italic;\\n}\\n\\n\\n.ace_error-marker {\\n background-color: rgba(255, 0, 0,0.2);\\n position: absolute;\\n z-index: 9;\\n}\\n\\n.ace_highlight-marker {\\n background-color: rgba(255, 255, 0,0.2);\\n position: absolute;\\n z-index: 8;\\n}\\n\\n.ace_mobile-menu {\\n position: absolute;\\n line-height: 1.5;\\n border-radius: 4px;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n user-select: none;\\n background: white;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #dcdcdc;\\n color: black;\\n}\\n.ace_dark > .ace_mobile-menu {\\n background: #333;\\n color: #ccc;\\n box-shadow: 1px 3px 2px grey;\\n border: 1px solid #444;\\n\\n}\\n.ace_mobile-button {\\n padding: 2px;\\n cursor: pointer;\\n overflow: hidden;\\n}\\n.ace_mobile-button:hover {\\n background-color: #eee;\\n opacity:1;\\n}\\n.ace_mobile-button:active {\\n background-color: #ddd;\\n}\\n\\n.ace_placeholder {\\n font-family: arial;\\n transform: scale(0.9);\\n transform-origin: left;\\n white-space: pre;\\n opacity: 0.7;\\n margin: 0 10px;\\n}\";\n\n});\n\nace.define(\"ace/layer/decorators\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event_emitter\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"../lib/dom\");\nvar oop = require(\"../lib/oop\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar Decorator = function (parent, renderer) {\n this.canvas = dom.createElement(\"canvas\");\n this.renderer = renderer;\n this.pixelRatio = 1;\n this.maxHeight = renderer.layerConfig.maxHeight;\n this.lineHeight = renderer.layerConfig.lineHeight;\n this.canvasHeight = parent.parent.scrollHeight;\n this.heightRatio = this.canvasHeight / this.maxHeight;\n this.canvasWidth = parent.width;\n this.minDecorationHeight = (2 * this.pixelRatio) | 0;\n this.halfMinDecorationHeight = (this.minDecorationHeight / 2) | 0;\n this.canvas.width = this.canvasWidth;\n this.canvas.height = this.canvasHeight;\n this.canvas.style.top = 0 + \"px\";\n this.canvas.style.right = 0 + \"px\";\n this.canvas.style.zIndex = 7 + \"px\";\n this.canvas.style.position = \"absolute\";\n this.colors = {};\n this.colors.dark = {\n \"error\": \"rgba(255, 18, 18, 1)\",\n \"warning\": \"rgba(18, 136, 18, 1)\",\n \"info\": \"rgba(18, 18, 136, 1)\"\n };\n this.colors.light = {\n \"error\": \"rgb(255,51,51)\",\n \"warning\": \"rgb(32,133,72)\",\n \"info\": \"rgb(35,68,138)\"\n };\n parent.element.appendChild(this.canvas);\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.$updateDecorators = function (config) {\n var colors = (this.renderer.theme.isDark === true) ? this.colors.dark : this.colors.light;\n if (config) {\n this.maxHeight = config.maxHeight;\n this.lineHeight = config.lineHeight;\n this.canvasHeight = config.height;\n var allLineHeight = (config.lastRow + 1) * this.lineHeight;\n if (allLineHeight < this.canvasHeight) {\n this.heightRatio = 1;\n }\n else {\n this.heightRatio = this.canvasHeight / this.maxHeight;\n }\n }\n var ctx = this.canvas.getContext(\"2d\");\n function compare(a, b) {\n if (a.priority < b.priority)\n return -1;\n if (a.priority > b.priority)\n return 1;\n return 0;\n }\n var annotations = this.renderer.session.$annotations;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n if (annotations) {\n var priorities = {\n \"info\": 1,\n \"warning\": 2,\n \"error\": 3\n };\n annotations.forEach(function (item) {\n item.priority = priorities[item.type] || null;\n });\n annotations = annotations.sort(compare);\n var foldData = this.renderer.session.$foldData;\n for (var i = 0; i < annotations.length; i++) {\n var row = annotations[i].row;\n var compensateFold = this.compensateFoldRows(row, foldData);\n var currentY = Math.round((row - compensateFold) * this.lineHeight * this.heightRatio);\n var y1 = Math.round(((row - compensateFold) * this.lineHeight * this.heightRatio));\n var y2 = Math.round((((row - compensateFold) * this.lineHeight + this.lineHeight) * this.heightRatio));\n var height = y2 - y1;\n if (height < this.minDecorationHeight) {\n var yCenter = ((y1 + y2) / 2) | 0;\n if (yCenter < this.halfMinDecorationHeight) {\n yCenter = this.halfMinDecorationHeight;\n }\n else if (yCenter + this.halfMinDecorationHeight > this.canvasHeight) {\n yCenter = this.canvasHeight - this.halfMinDecorationHeight;\n }\n y1 = Math.round(yCenter - this.halfMinDecorationHeight);\n y2 = Math.round(yCenter + this.halfMinDecorationHeight);\n }\n ctx.fillStyle = colors[annotations[i].type] || null;\n ctx.fillRect(0, currentY, this.canvasWidth, y2 - y1);\n }\n }\n var cursor = this.renderer.session.selection.getCursor();\n if (cursor) {\n var compensateFold = this.compensateFoldRows(cursor.row, foldData);\n var currentY = Math.round((cursor.row - compensateFold) * this.lineHeight * this.heightRatio);\n ctx.fillStyle = \"rgba(0, 0, 0, 0.5)\";\n ctx.fillRect(0, currentY, this.canvasWidth, 2);\n }\n };\n this.compensateFoldRows = function (row, foldData) {\n var compensateFold = 0;\n if (foldData && foldData.length > 0) {\n for (var j = 0; j < foldData.length; j++) {\n if (row > foldData[j].start.row && row < foldData[j].end.row) {\n compensateFold += row - foldData[j].start.row;\n }\n else if (row >= foldData[j].end.row) {\n compensateFold += foldData[j].end.row - foldData[j].start.row;\n }\n }\n }\n return compensateFold;\n };\n}.call(Decorator.prototype));\nexports.Decorator = Decorator;\n\n});\n\nace.define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/scrollbar_custom\",\"ace/scrollbar_custom\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/css/editor.css\",\"ace/layer/decorators\",\"ace/lib/useragent\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar dom = require(\"./lib/dom\");\nvar config = require(\"./config\");\nvar GutterLayer = require(\"./layer/gutter\").Gutter;\nvar MarkerLayer = require(\"./layer/marker\").Marker;\nvar TextLayer = require(\"./layer/text\").Text;\nvar CursorLayer = require(\"./layer/cursor\").Cursor;\nvar HScrollBar = require(\"./scrollbar\").HScrollBar;\nvar VScrollBar = require(\"./scrollbar\").VScrollBar;\nvar HScrollBarCustom = require(\"./scrollbar_custom\").HScrollBar;\nvar VScrollBarCustom = require(\"./scrollbar_custom\").VScrollBar;\nvar RenderLoop = require(\"./renderloop\").RenderLoop;\nvar FontMetrics = require(\"./layer/font_metrics\").FontMetrics;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar editorCss = require(\"./css/editor.css\");\nvar Decorator = require(\"./layer/decorators\").Decorator;\nvar useragent = require(\"./lib/useragent\");\nvar HIDE_TEXTAREA = useragent.isIE;\ndom.importCssString(editorCss, \"ace_editor.css\", false);\nvar VirtualRenderer = function (container, theme) {\n var _self = this;\n this.container = container || dom.createElement(\"div\");\n dom.addCssClass(this.container, \"ace_editor\");\n if (dom.HI_DPI)\n dom.addCssClass(this.container, \"ace_hidpi\");\n this.setTheme(theme);\n if (config.get(\"useStrictCSP\") == null)\n config.set(\"useStrictCSP\", false);\n this.$gutter = dom.createElement(\"div\");\n this.$gutter.className = \"ace_gutter\";\n this.container.appendChild(this.$gutter);\n this.$gutter.setAttribute(\"aria-hidden\", true);\n this.scroller = dom.createElement(\"div\");\n this.scroller.className = \"ace_scroller\";\n this.container.appendChild(this.scroller);\n this.content = dom.createElement(\"div\");\n this.content.className = \"ace_content\";\n this.scroller.appendChild(this.content);\n this.$gutterLayer = new GutterLayer(this.$gutter);\n this.$gutterLayer.on(\"changeGutterWidth\", this.onGutterResize.bind(this));\n this.$markerBack = new MarkerLayer(this.content);\n var textLayer = this.$textLayer = new TextLayer(this.content);\n this.canvas = textLayer.element;\n this.$markerFront = new MarkerLayer(this.content);\n this.$cursorLayer = new CursorLayer(this.content);\n this.$horizScroll = false;\n this.$vScroll = false;\n this.scrollBar =\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.on(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.scrollTop = 0;\n this.scrollLeft = 0;\n this.cursorPos = {\n row: 0,\n column: 0\n };\n this.$fontMetrics = new FontMetrics(this.container);\n this.$textLayer.$setFontMetrics(this.$fontMetrics);\n this.$textLayer.on(\"changeCharacterSize\", function (e) {\n _self.updateCharacterSize();\n _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height);\n _self._signal(\"changeCharacterSize\", e);\n });\n this.$size = {\n width: 0,\n height: 0,\n scrollerHeight: 0,\n scrollerWidth: 0,\n $dirty: true\n };\n this.layerConfig = {\n width: 1,\n padding: 0,\n firstRow: 0,\n firstRowScreen: 0,\n lastRow: 0,\n lineHeight: 0,\n characterWidth: 0,\n minHeight: 1,\n maxHeight: 1,\n offset: 0,\n height: 1,\n gutterOffset: 1\n };\n this.scrollMargin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.margin = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n v: 0,\n h: 0\n };\n this.$keepTextAreaAtCursor = !useragent.isIOS;\n this.$loop = new RenderLoop(this.$renderChanges.bind(this), this.container.ownerDocument.defaultView);\n this.$loop.schedule(this.CHANGE_FULL);\n this.updateCharacterSize();\n this.setPadding(4);\n config.resetOptions(this);\n config._signal(\"renderer\", this);\n};\n(function () {\n this.CHANGE_CURSOR = 1;\n this.CHANGE_MARKER = 2;\n this.CHANGE_GUTTER = 4;\n this.CHANGE_SCROLL = 8;\n this.CHANGE_LINES = 16;\n this.CHANGE_TEXT = 32;\n this.CHANGE_SIZE = 64;\n this.CHANGE_MARKER_BACK = 128;\n this.CHANGE_MARKER_FRONT = 256;\n this.CHANGE_FULL = 512;\n this.CHANGE_H_SCROLL = 1024;\n oop.implement(this, EventEmitter);\n this.updateCharacterSize = function () {\n if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) {\n this.$allowBoldFonts = this.$textLayer.allowBoldFonts;\n this.setStyle(\"ace_nobold\", !this.$allowBoldFonts);\n }\n this.layerConfig.characterWidth =\n this.characterWidth = this.$textLayer.getCharacterWidth();\n this.layerConfig.lineHeight =\n this.lineHeight = this.$textLayer.getLineHeight();\n this.$updatePrintMargin();\n dom.setStyle(this.scroller.style, \"line-height\", this.lineHeight + \"px\");\n };\n this.setSession = function (session) {\n if (this.session)\n this.session.doc.off(\"changeNewLineMode\", this.onChangeNewLineMode);\n this.session = session;\n if (session && this.scrollMargin.top && session.getScrollTop() <= 0)\n session.setScrollTop(-this.scrollMargin.top);\n this.$cursorLayer.setSession(session);\n this.$markerBack.setSession(session);\n this.$markerFront.setSession(session);\n this.$gutterLayer.setSession(session);\n this.$textLayer.setSession(session);\n if (!session)\n return;\n this.$loop.schedule(this.CHANGE_FULL);\n this.session.$setFontMetrics(this.$fontMetrics);\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this);\n this.onChangeNewLineMode();\n this.session.doc.on(\"changeNewLineMode\", this.onChangeNewLineMode);\n };\n this.updateLines = function (firstRow, lastRow, force) {\n if (lastRow === undefined)\n lastRow = Infinity;\n if (!this.$changedLines) {\n this.$changedLines = {\n firstRow: firstRow,\n lastRow: lastRow\n };\n }\n else {\n if (this.$changedLines.firstRow > firstRow)\n this.$changedLines.firstRow = firstRow;\n if (this.$changedLines.lastRow < lastRow)\n this.$changedLines.lastRow = lastRow;\n }\n if (this.$changedLines.lastRow < this.layerConfig.firstRow) {\n if (force)\n this.$changedLines.lastRow = this.layerConfig.lastRow;\n else\n return;\n }\n if (this.$changedLines.firstRow > this.layerConfig.lastRow)\n return;\n this.$loop.schedule(this.CHANGE_LINES);\n };\n this.onChangeNewLineMode = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n this.$textLayer.$updateEolChar();\n this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR);\n };\n this.onChangeTabSize = function () {\n this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER);\n this.$textLayer.onChangeTabSize();\n };\n this.updateText = function () {\n this.$loop.schedule(this.CHANGE_TEXT);\n };\n this.updateFull = function (force) {\n if (force)\n this.$renderChanges(this.CHANGE_FULL, true);\n else\n this.$loop.schedule(this.CHANGE_FULL);\n };\n this.updateFontSize = function () {\n this.$textLayer.checkForSizeChanges();\n };\n this.$changes = 0;\n this.$updateSizeAsync = function () {\n if (this.$loop.pending)\n this.$size.$dirty = true;\n else\n this.onResize();\n };\n this.onResize = function (force, gutterWidth, width, height) {\n if (this.resizing > 2)\n return;\n else if (this.resizing > 0)\n this.resizing++;\n else\n this.resizing = force ? 1 : 0;\n var el = this.container;\n if (!height)\n height = el.clientHeight || el.scrollHeight;\n if (!width)\n width = el.clientWidth || el.scrollWidth;\n var changes = this.$updateCachedSize(force, gutterWidth, width, height);\n if (!this.$size.scrollerHeight || (!width && !height))\n return this.resizing = 0;\n if (force)\n this.$gutterLayer.$padding = null;\n if (force)\n this.$renderChanges(changes | this.$changes, true);\n else\n this.$loop.schedule(changes | this.$changes);\n if (this.resizing)\n this.resizing = 0;\n this.scrollBarH.scrollLeft = this.scrollBarV.scrollTop = null;\n if (this.$customScrollbar) {\n this.$updateCustomScrollbar(true);\n }\n };\n this.$updateCachedSize = function (force, gutterWidth, width, height) {\n height -= (this.$extraHeight || 0);\n var changes = 0;\n var size = this.$size;\n var oldSize = {\n width: size.width,\n height: size.height,\n scrollerHeight: size.scrollerHeight,\n scrollerWidth: size.scrollerWidth\n };\n if (height && (force || size.height != height)) {\n size.height = height;\n changes |= this.CHANGE_SIZE;\n size.scrollerHeight = size.height;\n if (this.$horizScroll)\n size.scrollerHeight -= this.scrollBarH.getHeight();\n this.scrollBarV.setHeight(size.scrollerHeight);\n this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + \"px\";\n changes = changes | this.CHANGE_SCROLL;\n }\n if (width && (force || size.width != width)) {\n changes |= this.CHANGE_SIZE;\n size.width = width;\n if (gutterWidth == null)\n gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0;\n this.gutterWidth = gutterWidth;\n dom.setStyle(this.scrollBarH.element.style, \"left\", gutterWidth + \"px\");\n dom.setStyle(this.scroller.style, \"left\", gutterWidth + this.margin.left + \"px\");\n size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth() - this.margin.h);\n dom.setStyle(this.$gutter.style, \"left\", this.margin.left + \"px\");\n var right = this.scrollBarV.getWidth() + \"px\";\n dom.setStyle(this.scrollBarH.element.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"right\", right);\n dom.setStyle(this.scroller.style, \"bottom\", this.scrollBarH.getHeight());\n this.scrollBarH.setWidth(size.scrollerWidth);\n if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) {\n changes |= this.CHANGE_FULL;\n }\n }\n size.$dirty = !width || !height;\n if (changes)\n this._signal(\"resize\", oldSize);\n return changes;\n };\n this.onGutterResize = function (width) {\n var gutterWidth = this.$showGutter ? width : 0;\n if (gutterWidth != this.gutterWidth)\n this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height);\n if (this.session.getUseWrapMode() && this.adjustWrapLimit()) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else if (this.$size.$dirty) {\n this.$loop.schedule(this.CHANGE_FULL);\n }\n else {\n this.$computeLayerConfig();\n }\n };\n this.adjustWrapLimit = function () {\n var availableWidth = this.$size.scrollerWidth - this.$padding * 2;\n var limit = Math.floor(availableWidth / this.characterWidth);\n return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn);\n };\n this.setAnimatedScroll = function (shouldAnimate) {\n this.setOption(\"animatedScroll\", shouldAnimate);\n };\n this.getAnimatedScroll = function () {\n return this.$animatedScroll;\n };\n this.setShowInvisibles = function (showInvisibles) {\n this.setOption(\"showInvisibles\", showInvisibles);\n this.session.$bidiHandler.setShowInvisibles(showInvisibles);\n };\n this.getShowInvisibles = function () {\n return this.getOption(\"showInvisibles\");\n };\n this.getDisplayIndentGuides = function () {\n return this.getOption(\"displayIndentGuides\");\n };\n this.setDisplayIndentGuides = function (display) {\n this.setOption(\"displayIndentGuides\", display);\n };\n this.getHighlightIndentGuides = function () {\n return this.getOption(\"highlightIndentGuides\");\n };\n this.setHighlightIndentGuides = function (highlight) {\n this.setOption(\"highlightIndentGuides\", highlight);\n };\n this.setShowPrintMargin = function (showPrintMargin) {\n this.setOption(\"showPrintMargin\", showPrintMargin);\n };\n this.getShowPrintMargin = function () {\n return this.getOption(\"showPrintMargin\");\n };\n this.setPrintMarginColumn = function (showPrintMargin) {\n this.setOption(\"printMarginColumn\", showPrintMargin);\n };\n this.getPrintMarginColumn = function () {\n return this.getOption(\"printMarginColumn\");\n };\n this.getShowGutter = function () {\n return this.getOption(\"showGutter\");\n };\n this.setShowGutter = function (show) {\n return this.setOption(\"showGutter\", show);\n };\n this.getFadeFoldWidgets = function () {\n return this.getOption(\"fadeFoldWidgets\");\n };\n this.setFadeFoldWidgets = function (show) {\n this.setOption(\"fadeFoldWidgets\", show);\n };\n this.setHighlightGutterLine = function (shouldHighlight) {\n this.setOption(\"highlightGutterLine\", shouldHighlight);\n };\n this.getHighlightGutterLine = function () {\n return this.getOption(\"highlightGutterLine\");\n };\n this.$updatePrintMargin = function () {\n if (!this.$showPrintMargin && !this.$printMarginEl)\n return;\n if (!this.$printMarginEl) {\n var containerEl = dom.createElement(\"div\");\n containerEl.className = \"ace_layer ace_print-margin-layer\";\n this.$printMarginEl = dom.createElement(\"div\");\n this.$printMarginEl.className = \"ace_print-margin\";\n containerEl.appendChild(this.$printMarginEl);\n this.content.insertBefore(containerEl, this.content.firstChild);\n }\n var style = this.$printMarginEl.style;\n style.left = Math.round(this.characterWidth * this.$printMarginColumn + this.$padding) + \"px\";\n style.visibility = this.$showPrintMargin ? \"visible\" : \"hidden\";\n if (this.session && this.session.$wrap == -1)\n this.adjustWrapLimit();\n };\n this.getContainerElement = function () {\n return this.container;\n };\n this.getMouseEventTarget = function () {\n return this.scroller;\n };\n this.getTextAreaContainer = function () {\n return this.container;\n };\n this.$moveTextAreaToCursor = function () {\n if (this.$isMousePressed)\n return;\n var style = this.textarea.style;\n var composition = this.$composition;\n if (!this.$keepTextAreaAtCursor && !composition) {\n dom.translate(this.textarea, -100, 0);\n return;\n }\n var pixelPos = this.$cursorLayer.$pixelPos;\n if (!pixelPos)\n return;\n if (composition && composition.markerRange)\n pixelPos = this.$cursorLayer.getPixelPosition(composition.markerRange.start, true);\n var config = this.layerConfig;\n var posTop = pixelPos.top;\n var posLeft = pixelPos.left;\n posTop -= config.offset;\n var h = composition && composition.useTextareaForIME ? this.lineHeight : HIDE_TEXTAREA ? 0 : 1;\n if (posTop < 0 || posTop > config.height - h) {\n dom.translate(this.textarea, 0, 0);\n return;\n }\n var w = 1;\n var maxTop = this.$size.height - h;\n if (!composition) {\n posTop += this.lineHeight;\n }\n else {\n if (composition.useTextareaForIME) {\n var val = this.textarea.value;\n w = this.characterWidth * (this.session.$getStringScreenWidth(val)[0]);\n }\n else {\n posTop += this.lineHeight + 2;\n }\n }\n posLeft -= this.scrollLeft;\n if (posLeft > this.$size.scrollerWidth - w)\n posLeft = this.$size.scrollerWidth - w;\n posLeft += this.gutterWidth + this.margin.left;\n dom.setStyle(style, \"height\", h + \"px\");\n dom.setStyle(style, \"width\", w + \"px\");\n dom.translate(this.textarea, Math.min(posLeft, this.$size.scrollerWidth - w), Math.min(posTop, maxTop));\n };\n this.getFirstVisibleRow = function () {\n return this.layerConfig.firstRow;\n };\n this.getFirstFullyVisibleRow = function () {\n return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1);\n };\n this.getLastFullyVisibleRow = function () {\n var config = this.layerConfig;\n var lastRow = config.lastRow;\n var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight;\n if (top - this.session.getScrollTop() > config.height - config.lineHeight)\n return lastRow - 1;\n return lastRow;\n };\n this.getLastVisibleRow = function () {\n return this.layerConfig.lastRow;\n };\n this.$padding = null;\n this.setPadding = function (padding) {\n this.$padding = padding;\n this.$textLayer.setPadding(padding);\n this.$cursorLayer.setPadding(padding);\n this.$markerFront.setPadding(padding);\n this.$markerBack.setPadding(padding);\n this.$loop.schedule(this.CHANGE_FULL);\n this.$updatePrintMargin();\n };\n this.setScrollMargin = function (top, bottom, left, right) {\n var sm = this.scrollMargin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n if (sm.top && this.scrollTop <= 0 && this.session)\n this.session.setScrollTop(-sm.top);\n this.updateFull();\n };\n this.setMargin = function (top, bottom, left, right) {\n var sm = this.margin;\n sm.top = top | 0;\n sm.bottom = bottom | 0;\n sm.right = right | 0;\n sm.left = left | 0;\n sm.v = sm.top + sm.bottom;\n sm.h = sm.left + sm.right;\n this.$updateCachedSize(true, this.gutterWidth, this.$size.width, this.$size.height);\n this.updateFull();\n };\n this.getHScrollBarAlwaysVisible = function () {\n return this.$hScrollBarAlwaysVisible;\n };\n this.setHScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"hScrollBarAlwaysVisible\", alwaysVisible);\n };\n this.getVScrollBarAlwaysVisible = function () {\n return this.$vScrollBarAlwaysVisible;\n };\n this.setVScrollBarAlwaysVisible = function (alwaysVisible) {\n this.setOption(\"vScrollBarAlwaysVisible\", alwaysVisible);\n };\n this.$updateScrollBarV = function () {\n var scrollHeight = this.layerConfig.maxHeight;\n var scrollerHeight = this.$size.scrollerHeight;\n if (!this.$maxLines && this.$scrollPastEnd) {\n scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd;\n if (this.scrollTop > scrollHeight - scrollerHeight) {\n scrollHeight = this.scrollTop + scrollerHeight;\n this.scrollBarV.scrollTop = null;\n }\n }\n this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v);\n this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top);\n };\n this.$updateScrollBarH = function () {\n this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h);\n this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left);\n };\n this.$frozen = false;\n this.freeze = function () {\n this.$frozen = true;\n };\n this.unfreeze = function () {\n this.$frozen = false;\n };\n this.$renderChanges = function (changes, force) {\n if (this.$changes) {\n changes |= this.$changes;\n this.$changes = 0;\n }\n if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) {\n this.$changes |= changes;\n return;\n }\n if (this.$size.$dirty) {\n this.$changes |= changes;\n return this.onResize(true);\n }\n if (!this.lineHeight) {\n this.$textLayer.checkForSizeChanges();\n }\n this._signal(\"beforeRender\", changes);\n if (this.session && this.session.$bidiHandler)\n this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);\n var config = this.layerConfig;\n if (changes & this.CHANGE_FULL ||\n changes & this.CHANGE_SIZE ||\n changes & this.CHANGE_TEXT ||\n changes & this.CHANGE_LINES ||\n changes & this.CHANGE_SCROLL ||\n changes & this.CHANGE_H_SCROLL) {\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) {\n var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight;\n if (st > 0) {\n this.scrollTop = st;\n changes = changes | this.CHANGE_SCROLL;\n changes |= this.$computeLayerConfig() | this.$loop.clear();\n }\n }\n config = this.layerConfig;\n this.$updateScrollBarV();\n if (changes & this.CHANGE_H_SCROLL)\n this.$updateScrollBarH();\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n var width = config.width + 2 * this.$padding + \"px\";\n var height = config.minHeight + \"px\";\n dom.setStyle(this.content.style, \"width\", width);\n dom.setStyle(this.content.style, \"height\", height);\n }\n if (changes & this.CHANGE_H_SCROLL) {\n dom.translate(this.content, -this.scrollLeft, -config.offset);\n this.scroller.className = this.scrollLeft <= 0 ? \"ace_scroller\" : \"ace_scroller ace_scroll-left\";\n }\n if (changes & this.CHANGE_FULL) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_SCROLL) {\n this.$changedLines = null;\n if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES)\n this.$textLayer.update(config);\n else\n this.$textLayer.scrollLines(config);\n if (this.$showGutter) {\n if (changes & this.CHANGE_GUTTER || changes & this.CHANGE_LINES)\n this.$gutterLayer.update(config);\n else\n this.$gutterLayer.scrollLines(config);\n }\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n this.$markerBack.update(config);\n this.$markerFront.update(config);\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n this._signal(\"afterRender\", changes);\n return;\n }\n if (changes & this.CHANGE_TEXT) {\n this.$changedLines = null;\n this.$textLayer.update(config);\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_LINES) {\n if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) {\n if (this.$showGutter)\n this.$gutterLayer.update(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n else if (changes & this.CHANGE_CURSOR) {\n if (this.$highlightGutterLine)\n this.$gutterLayer.updateLineHighlight(config);\n if (this.$customScrollbar) {\n this.$scrollDecorator.$updateDecorators(config);\n }\n }\n if (changes & this.CHANGE_CURSOR) {\n this.$cursorLayer.update(config);\n this.$moveTextAreaToCursor();\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) {\n this.$markerFront.update(config);\n }\n if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) {\n this.$markerBack.update(config);\n }\n this._signal(\"afterRender\", changes);\n };\n this.$autosize = function () {\n var height = this.session.getScreenLength() * this.lineHeight;\n var maxHeight = this.$maxLines * this.lineHeight;\n var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height)) + this.scrollMargin.v + (this.$extraHeight || 0);\n if (this.$horizScroll)\n desiredHeight += this.scrollBarH.getHeight();\n if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight)\n desiredHeight = this.$maxPixelHeight;\n var hideScrollbars = desiredHeight <= 2 * this.lineHeight;\n var vScroll = !hideScrollbars && height > maxHeight;\n if (desiredHeight != this.desiredHeight ||\n this.$size.height != this.desiredHeight || vScroll != this.$vScroll) {\n if (vScroll != this.$vScroll) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var w = this.container.clientWidth;\n this.container.style.height = desiredHeight + \"px\";\n this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);\n this.desiredHeight = desiredHeight;\n this._signal(\"autosize\");\n }\n };\n this.$computeLayerConfig = function () {\n var session = this.session;\n var size = this.$size;\n var hideScrollbars = size.height <= 2 * this.lineHeight;\n var screenLines = this.session.getScreenLength();\n var maxHeight = screenLines * this.lineHeight;\n var longestLine = this.$getLongestLine();\n var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible ||\n size.scrollerWidth - longestLine - 2 * this.$padding < 0);\n var hScrollChanged = this.$horizScroll !== horizScroll;\n if (hScrollChanged) {\n this.$horizScroll = horizScroll;\n this.scrollBarH.setVisible(horizScroll);\n }\n var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine\n if (this.$maxLines && this.lineHeight > 1)\n this.$autosize();\n var minHeight = size.scrollerHeight + this.lineHeight;\n var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd\n ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd\n : 0;\n maxHeight += scrollPastEnd;\n var sm = this.scrollMargin;\n this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom)));\n this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right)));\n var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible ||\n size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top);\n var vScrollChanged = vScrollBefore !== vScroll;\n if (vScrollChanged) {\n this.$vScroll = vScroll;\n this.scrollBarV.setVisible(vScroll);\n }\n var offset = this.scrollTop % this.lineHeight;\n var lineCount = Math.ceil(minHeight / this.lineHeight) - 1;\n var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight));\n var lastRow = firstRow + lineCount;\n var firstRowScreen, firstRowHeight;\n var lineHeight = this.lineHeight;\n firstRow = session.screenToDocumentRow(firstRow, 0);\n var foldLine = session.getFoldLine(firstRow);\n if (foldLine) {\n firstRow = foldLine.start.row;\n }\n firstRowScreen = session.documentToScreenRow(firstRow, 0);\n firstRowHeight = session.getRowLength(firstRow) * lineHeight;\n lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1);\n minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight +\n firstRowHeight;\n offset = this.scrollTop - firstRowScreen * lineHeight;\n var changes = 0;\n if (this.layerConfig.width != longestLine || hScrollChanged)\n changes = this.CHANGE_H_SCROLL;\n if (hScrollChanged || vScrollChanged) {\n changes |= this.$updateCachedSize(true, this.gutterWidth, size.width, size.height);\n this._signal(\"scrollbarVisibilityChanged\");\n if (vScrollChanged)\n longestLine = this.$getLongestLine();\n }\n this.layerConfig = {\n width: longestLine,\n padding: this.$padding,\n firstRow: firstRow,\n firstRowScreen: firstRowScreen,\n lastRow: lastRow,\n lineHeight: lineHeight,\n characterWidth: this.characterWidth,\n minHeight: minHeight,\n maxHeight: maxHeight,\n offset: offset,\n gutterOffset: lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0,\n height: this.$size.scrollerHeight\n };\n if (this.session.$bidiHandler)\n this.session.$bidiHandler.setContentWidth(longestLine - this.$padding);\n return changes;\n };\n this.$updateLines = function () {\n if (!this.$changedLines)\n return;\n var firstRow = this.$changedLines.firstRow;\n var lastRow = this.$changedLines.lastRow;\n this.$changedLines = null;\n var layerConfig = this.layerConfig;\n if (firstRow > layerConfig.lastRow + 1) {\n return;\n }\n if (lastRow < layerConfig.firstRow) {\n return;\n }\n if (lastRow === Infinity) {\n if (this.$showGutter)\n this.$gutterLayer.update(layerConfig);\n this.$textLayer.update(layerConfig);\n return;\n }\n this.$textLayer.updateLines(layerConfig, firstRow, lastRow);\n return true;\n };\n this.$getLongestLine = function () {\n var charCount = this.session.getScreenWidth();\n if (this.showInvisibles && !this.session.$useWrapMode)\n charCount += 1;\n if (this.$textLayer && charCount > this.$textLayer.MAX_LINE_LENGTH)\n charCount = this.$textLayer.MAX_LINE_LENGTH + 30;\n return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth));\n };\n this.updateFrontMarkers = function () {\n this.$markerFront.setMarkers(this.session.getMarkers(true));\n this.$loop.schedule(this.CHANGE_MARKER_FRONT);\n };\n this.updateBackMarkers = function () {\n this.$markerBack.setMarkers(this.session.getMarkers());\n this.$loop.schedule(this.CHANGE_MARKER_BACK);\n };\n this.addGutterDecoration = function (row, className) {\n this.$gutterLayer.addGutterDecoration(row, className);\n };\n this.removeGutterDecoration = function (row, className) {\n this.$gutterLayer.removeGutterDecoration(row, className);\n };\n this.updateBreakpoints = function (rows) {\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.setAnnotations = function (annotations) {\n this.$gutterLayer.setAnnotations(annotations);\n this.$loop.schedule(this.CHANGE_GUTTER);\n };\n this.updateCursor = function () {\n this.$loop.schedule(this.CHANGE_CURSOR);\n };\n this.hideCursor = function () {\n this.$cursorLayer.hideCursor();\n };\n this.showCursor = function () {\n this.$cursorLayer.showCursor();\n };\n this.scrollSelectionIntoView = function (anchor, lead, offset) {\n this.scrollCursorIntoView(anchor, offset);\n this.scrollCursorIntoView(lead, offset);\n };\n this.scrollCursorIntoView = function (cursor, offset, $viewMargin) {\n if (this.$size.scrollerHeight === 0)\n return;\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var left = pos.left;\n var top = pos.top;\n var topMargin = $viewMargin && $viewMargin.top || 0;\n var bottomMargin = $viewMargin && $viewMargin.bottom || 0;\n var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop;\n if (scrollTop + topMargin > top) {\n if (offset && scrollTop + topMargin > top + this.lineHeight)\n top -= offset * this.$size.scrollerHeight;\n if (top === 0)\n top = -this.scrollMargin.top;\n this.session.setScrollTop(top);\n }\n else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) {\n if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight)\n top += offset * this.$size.scrollerHeight;\n this.session.setScrollTop(top + this.lineHeight + bottomMargin - this.$size.scrollerHeight);\n }\n var scrollLeft = this.scrollLeft;\n if (scrollLeft > left) {\n if (left < this.$padding + 2 * this.layerConfig.characterWidth)\n left = -this.scrollMargin.left;\n this.session.setScrollLeft(left);\n }\n else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) {\n this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth));\n }\n else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) {\n this.session.setScrollLeft(0);\n }\n };\n this.getScrollTop = function () {\n return this.session.getScrollTop();\n };\n this.getScrollLeft = function () {\n return this.session.getScrollLeft();\n };\n this.getScrollTopRow = function () {\n return this.scrollTop / this.lineHeight;\n };\n this.getScrollBottomRow = function () {\n return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1);\n };\n this.scrollToRow = function (row) {\n this.session.setScrollTop(row * this.lineHeight);\n };\n this.alignCursor = function (cursor, alignment) {\n if (typeof cursor == \"number\")\n cursor = { row: cursor, column: 0 };\n var pos = this.$cursorLayer.getPixelPosition(cursor);\n var h = this.$size.scrollerHeight - this.lineHeight;\n var offset = pos.top - h * (alignment || 0);\n this.session.setScrollTop(offset);\n return offset;\n };\n this.STEPS = 8;\n this.$calcSteps = function (fromValue, toValue) {\n var i = 0;\n var l = this.STEPS;\n var steps = [];\n var func = function (t, x_min, dx) {\n return dx * (Math.pow(t - 1, 3) + 1) + x_min;\n };\n for (i = 0; i < l; ++i)\n steps.push(func(i / this.STEPS, fromValue, toValue - fromValue));\n return steps;\n };\n this.scrollToLine = function (line, center, animate, callback) {\n var pos = this.$cursorLayer.getPixelPosition({ row: line, column: 0 });\n var offset = pos.top;\n if (center)\n offset -= this.$size.scrollerHeight / 2;\n var initialScroll = this.scrollTop;\n this.session.setScrollTop(offset);\n if (animate !== false)\n this.animateScrolling(initialScroll, callback);\n };\n this.animateScrolling = function (fromValue, callback) {\n var toValue = this.scrollTop;\n if (!this.$animatedScroll)\n return;\n var _self = this;\n if (fromValue == toValue)\n return;\n if (this.$scrollAnimation) {\n var oldSteps = this.$scrollAnimation.steps;\n if (oldSteps.length) {\n fromValue = oldSteps[0];\n if (fromValue == toValue)\n return;\n }\n }\n var steps = _self.$calcSteps(fromValue, toValue);\n this.$scrollAnimation = { from: fromValue, to: toValue, steps: steps };\n clearInterval(this.$timer);\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n this.$timer = setInterval(function () {\n if (!_self.session)\n return clearInterval(_self.$timer);\n if (steps.length) {\n _self.session.setScrollTop(steps.shift());\n _self.session.$scrollTop = toValue;\n }\n else if (toValue != null) {\n _self.session.$scrollTop = -1;\n _self.session.setScrollTop(toValue);\n toValue = null;\n }\n else {\n _self.$timer = clearInterval(_self.$timer);\n _self.$scrollAnimation = null;\n callback && callback();\n }\n }, 10);\n };\n this.scrollToY = function (scrollTop) {\n if (this.scrollTop !== scrollTop) {\n this.$loop.schedule(this.CHANGE_SCROLL);\n this.scrollTop = scrollTop;\n }\n };\n this.scrollToX = function (scrollLeft) {\n if (this.scrollLeft !== scrollLeft)\n this.scrollLeft = scrollLeft;\n this.$loop.schedule(this.CHANGE_H_SCROLL);\n };\n this.scrollTo = function (x, y) {\n this.session.setScrollTop(y);\n this.session.setScrollLeft(x);\n };\n this.scrollBy = function (deltaX, deltaY) {\n deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY);\n deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX);\n };\n this.isScrollableBy = function (deltaX, deltaY) {\n if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top)\n return true;\n if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight\n - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom)\n return true;\n if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left)\n return true;\n if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth\n - this.layerConfig.width < -1 + this.scrollMargin.right)\n return true;\n };\n this.pixelToScreenCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n return { row: row, column: col, side: offset - col > 0 ? 1 : -1, offsetX: offsetX };\n };\n this.screenToTextCoordinates = function (x, y) {\n var canvasPos;\n if (this.$hasCssTransforms) {\n canvasPos = { top: 0, left: 0 };\n var p = this.$fontMetrics.transformCoordinates([x, y]);\n x = p[1] - this.gutterWidth - this.margin.left;\n y = p[0];\n }\n else {\n canvasPos = this.scroller.getBoundingClientRect();\n }\n var offsetX = x + this.scrollLeft - canvasPos.left - this.$padding;\n var offset = offsetX / this.characterWidth;\n var col = this.$blockCursor ? Math.floor(offset) : Math.round(offset);\n var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight);\n return this.session.screenToDocumentPosition(row, Math.max(col, 0), offsetX);\n };\n this.textToScreenCoordinates = function (row, column) {\n var canvasPos = this.scroller.getBoundingClientRect();\n var pos = this.session.documentToScreenPosition(row, column);\n var x = this.$padding + (this.session.$bidiHandler.isBidiRow(pos.row, row)\n ? this.session.$bidiHandler.getPosLeft(pos.column)\n : Math.round(pos.column * this.characterWidth));\n var y = pos.row * this.lineHeight;\n return {\n pageX: canvasPos.left + x - this.scrollLeft,\n pageY: canvasPos.top + y - this.scrollTop\n };\n };\n this.visualizeFocus = function () {\n dom.addCssClass(this.container, \"ace_focus\");\n };\n this.visualizeBlur = function () {\n dom.removeCssClass(this.container, \"ace_focus\");\n };\n this.showComposition = function (composition) {\n this.$composition = composition;\n if (!composition.cssText) {\n composition.cssText = this.textarea.style.cssText;\n }\n if (composition.useTextareaForIME == undefined)\n composition.useTextareaForIME = this.$useTextareaForIME;\n if (this.$useTextareaForIME) {\n dom.addCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = \"\";\n this.$moveTextAreaToCursor();\n this.$cursorLayer.element.style.display = \"none\";\n }\n else {\n composition.markerId = this.session.addMarker(composition.markerRange, \"ace_composition_marker\", \"text\");\n }\n };\n this.setCompositionText = function (text) {\n var cursor = this.session.selection.cursor;\n this.addToken(text, \"composition_placeholder\", cursor.row, cursor.column);\n this.$moveTextAreaToCursor();\n };\n this.hideComposition = function () {\n if (!this.$composition)\n return;\n if (this.$composition.markerId)\n this.session.removeMarker(this.$composition.markerId);\n dom.removeCssClass(this.textarea, \"ace_composition\");\n this.textarea.style.cssText = this.$composition.cssText;\n var cursor = this.session.selection.cursor;\n this.removeExtraToken(cursor.row, cursor.column);\n this.$composition = null;\n this.$cursorLayer.element.style.display = \"\";\n };\n this.addToken = function (text, type, row, column) {\n var session = this.session;\n session.bgTokenizer.lines[row] = null;\n var newToken = { type: type, value: text };\n var tokens = session.getTokens(row);\n if (column == null) {\n tokens.push(newToken);\n }\n else {\n var l = 0;\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i];\n l += token.value.length;\n if (column <= l) {\n var diff = token.value.length - (l - column);\n var before = token.value.slice(0, diff);\n var after = token.value.slice(diff);\n tokens.splice(i, 1, { type: token.type, value: before }, newToken, { type: token.type, value: after });\n break;\n }\n }\n }\n this.updateLines(row, row);\n };\n this.removeExtraToken = function (row, column) {\n this.updateLines(row, row);\n };\n this.setTheme = function (theme, cb) {\n var _self = this;\n this.$themeId = theme;\n _self._dispatchEvent('themeChange', { theme: theme });\n if (!theme || typeof theme == \"string\") {\n var moduleName = theme || this.$options.theme.initialValue;\n config.loadModule([\"theme\", moduleName], afterLoad);\n }\n else {\n afterLoad(theme);\n }\n function afterLoad(module) {\n if (_self.$themeId != theme)\n return cb && cb();\n if (!module || !module.cssClass)\n throw new Error(\"couldn't load module \" + theme + \" or it didn't call define\");\n if (module.$id)\n _self.$themeId = module.$id;\n dom.importCssString(module.cssText, module.cssClass, _self.container);\n if (_self.theme)\n dom.removeCssClass(_self.container, _self.theme.cssClass);\n var padding = \"padding\" in module ? module.padding\n : \"padding\" in (_self.theme || {}) ? 4 : _self.$padding;\n if (_self.$padding && padding != _self.$padding)\n _self.setPadding(padding);\n _self.$theme = module.cssClass;\n _self.theme = module;\n dom.addCssClass(_self.container, module.cssClass);\n dom.setCssClass(_self.container, \"ace_dark\", module.isDark);\n if (_self.$size) {\n _self.$size.width = 0;\n _self.$updateSizeAsync();\n }\n _self._dispatchEvent('themeLoaded', { theme: module });\n cb && cb();\n }\n };\n this.getTheme = function () {\n return this.$themeId;\n };\n this.setStyle = function (style, include) {\n dom.setCssClass(this.container, style, include !== false);\n };\n this.unsetStyle = function (style) {\n dom.removeCssClass(this.container, style);\n };\n this.setCursorStyle = function (style) {\n dom.setStyle(this.scroller.style, \"cursor\", style);\n };\n this.setMouseCursor = function (cursorStyle) {\n dom.setStyle(this.scroller.style, \"cursor\", cursorStyle);\n };\n this.attachToShadowRoot = function () {\n dom.importCssString(editorCss, \"ace_editor.css\", this.container);\n };\n this.destroy = function () {\n this.freeze();\n this.$fontMetrics.destroy();\n this.$cursorLayer.destroy();\n this.removeAllListeners();\n this.container.textContent = \"\";\n };\n this.$updateCustomScrollbar = function (val) {\n var _self = this;\n this.$horizScroll = this.$vScroll = null;\n this.scrollBarV.element.remove();\n this.scrollBarH.element.remove();\n if (this.$scrollDecorator) {\n delete this.$scrollDecorator;\n }\n if (val === true) {\n this.scrollBarV = new VScrollBarCustom(this.container, this);\n this.scrollBarH = new HScrollBarCustom(this.container, this);\n this.scrollBarV.setHeight(this.$size.scrollerHeight);\n this.scrollBarH.setWidth(this.$size.scrollerWidth);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n this.$scrollDecorator = new Decorator(this.scrollBarV, this);\n this.$scrollDecorator.$updateDecorators();\n }\n else {\n this.scrollBarV = new VScrollBar(this.container, this);\n this.scrollBarH = new HScrollBar(this.container, this);\n this.scrollBarV.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollTop(e.data - _self.scrollMargin.top);\n });\n this.scrollBarH.addEventListener(\"scroll\", function (e) {\n if (!_self.$scrollAnimation)\n _self.session.setScrollLeft(e.data - _self.scrollMargin.left);\n });\n }\n };\n}).call(VirtualRenderer.prototype);\nconfig.defineOptions(VirtualRenderer.prototype, \"renderer\", {\n animatedScroll: { initialValue: false },\n showInvisibles: {\n set: function (value) {\n if (this.$textLayer.setShowInvisibles(value))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: false\n },\n showPrintMargin: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: true\n },\n printMarginColumn: {\n set: function () { this.$updatePrintMargin(); },\n initialValue: 80\n },\n printMargin: {\n set: function (val) {\n if (typeof val == \"number\")\n this.$printMarginColumn = val;\n this.$showPrintMargin = !!val;\n this.$updatePrintMargin();\n },\n get: function () {\n return this.$showPrintMargin && this.$printMarginColumn;\n }\n },\n showGutter: {\n set: function (show) {\n this.$gutter.style.display = show ? \"block\" : \"none\";\n this.$loop.schedule(this.CHANGE_FULL);\n this.onGutterResize();\n },\n initialValue: true\n },\n fadeFoldWidgets: {\n set: function (show) {\n dom.setCssClass(this.$gutter, \"ace_fade-fold-widgets\", show);\n },\n initialValue: false\n },\n showFoldWidgets: {\n set: function (show) {\n this.$gutterLayer.setShowFoldWidgets(show);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n displayIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setDisplayIndentGuides(show))\n this.$loop.schedule(this.CHANGE_TEXT);\n },\n initialValue: true\n },\n highlightIndentGuides: {\n set: function (show) {\n if (this.$textLayer.setHighlightIndentGuides(show) == true) {\n this.$textLayer.$highlightIndentGuide();\n }\n else {\n this.$textLayer.$clearActiveIndentGuide(this.$textLayer.$lines.cells);\n }\n },\n initialValue: true\n },\n highlightGutterLine: {\n set: function (shouldHighlight) {\n this.$gutterLayer.setHighlightGutterLine(shouldHighlight);\n this.$loop.schedule(this.CHANGE_GUTTER);\n },\n initialValue: true\n },\n hScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n vScrollBarAlwaysVisible: {\n set: function (val) {\n if (!this.$vScrollBarAlwaysVisible || !this.$vScroll)\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: false\n },\n fontSize: {\n set: function (size) {\n if (typeof size == \"number\")\n size = size + \"px\";\n this.container.style.fontSize = size;\n this.updateFontSize();\n },\n initialValue: 12\n },\n fontFamily: {\n set: function (name) {\n this.container.style.fontFamily = name;\n this.updateFontSize();\n }\n },\n maxLines: {\n set: function (val) {\n this.updateFull();\n }\n },\n minLines: {\n set: function (val) {\n if (!(this.$minLines < 0x1ffffffffffff))\n this.$minLines = 0;\n this.updateFull();\n }\n },\n maxPixelHeight: {\n set: function (val) {\n this.updateFull();\n },\n initialValue: 0\n },\n scrollPastEnd: {\n set: function (val) {\n val = +val || 0;\n if (this.$scrollPastEnd == val)\n return;\n this.$scrollPastEnd = val;\n this.$loop.schedule(this.CHANGE_SCROLL);\n },\n initialValue: 0,\n handlesSet: true\n },\n fixedWidthGutter: {\n set: function (val) {\n this.$gutterLayer.$fixedWidth = !!val;\n this.$loop.schedule(this.CHANGE_GUTTER);\n }\n },\n customScrollbar: {\n set: function (val) {\n this.$updateCustomScrollbar(val);\n },\n initialValue: false\n },\n theme: {\n set: function (val) { this.setTheme(val); },\n get: function () { return this.$themeId || this.theme; },\n initialValue: \"./theme/textmate\",\n handlesSet: true\n },\n hasCssTransforms: {},\n useTextareaForIME: {\n initialValue: !useragent.isMobile && !useragent.isIE\n }\n});\nexports.VirtualRenderer = VirtualRenderer;\n\n});\n\nace.define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar net = require(\"../lib/net\");\nvar EventEmitter = require(\"../lib/event_emitter\").EventEmitter;\nvar config = require(\"../config\");\n\nfunction $workerBlob(workerUrl) {\n var script = \"importScripts('\" + net.qualifyURL(workerUrl) + \"');\";\n try {\n return new Blob([script], {\"type\": \"application/javascript\"});\n } catch (e) { // Backwards-compatibility\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;\n var blobBuilder = new BlobBuilder();\n blobBuilder.append(script);\n return blobBuilder.getBlob(\"application/javascript\");\n }\n}\n\nfunction createWorker(workerUrl) {\n if (typeof Worker == \"undefined\")\n return { postMessage: function() {}, terminate: function() {} };\n if (config.get(\"loadWorkerFromBlob\")) {\n var blob = $workerBlob(workerUrl);\n var URL = window.URL || window.webkitURL;\n var blobURL = URL.createObjectURL(blob);\n return new Worker(blobURL);\n }\n return new Worker(workerUrl);\n}\n\nvar WorkerClient = function(worker) {\n if (!worker.postMessage)\n worker = this.$createWorkerFromOldConfig.apply(this, arguments);\n\n this.$worker = worker;\n this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.onMessage = this.onMessage.bind(this);\n\n this.callbackId = 1;\n this.callbacks = {};\n\n this.$worker.onmessage = this.onMessage;\n};\n\n(function(){\n\n oop.implement(this, EventEmitter);\n\n this.$createWorkerFromOldConfig = function(topLevelNamespaces, mod, classname, workerUrl, importScripts) {\n if (require.nameToUrl && !require.toUrl)\n require.toUrl = require.nameToUrl;\n\n if (config.get(\"packaged\") || !require.toUrl) {\n workerUrl = workerUrl || config.moduleUrl(mod, \"worker\");\n } else {\n var normalizePath = this.$normalizePath;\n workerUrl = workerUrl || normalizePath(require.toUrl(\"ace/worker/worker.js\", null, \"_\"));\n\n var tlns = {};\n topLevelNamespaces.forEach(function(ns) {\n tlns[ns] = normalizePath(require.toUrl(ns, null, \"_\").replace(/(\\.js)?(\\?.*)?$/, \"\"));\n });\n }\n\n this.$worker = createWorker(workerUrl);\n if (importScripts) {\n this.send(\"importScripts\", importScripts);\n }\n this.$worker.postMessage({\n init : true,\n tlns : tlns,\n module : mod,\n classname : classname\n });\n return this.$worker;\n };\n\n this.onMessage = function(e) {\n var msg = e.data;\n switch (msg.type) {\n case \"event\":\n this._signal(msg.name, {data: msg.data});\n break;\n case \"call\":\n var callback = this.callbacks[msg.id];\n if (callback) {\n callback(msg.data);\n delete this.callbacks[msg.id];\n }\n break;\n case \"error\":\n this.reportError(msg.data);\n break;\n case \"log\":\n window.console && console.log && console.log.apply(console, msg.data);\n break;\n }\n };\n \n this.reportError = function(err) {\n window.console && console.error && console.error(err);\n };\n\n this.$normalizePath = function(path) {\n return net.qualifyURL(path);\n };\n\n this.terminate = function() {\n this._signal(\"terminate\", {});\n this.deltaQueue = null;\n this.$worker.terminate();\n this.$worker = null;\n if (this.$doc)\n this.$doc.off(\"change\", this.changeListener);\n this.$doc = null;\n };\n\n this.send = function(cmd, args) {\n this.$worker.postMessage({command: cmd, args: args});\n };\n\n this.call = function(cmd, args, callback) {\n if (callback) {\n var id = this.callbackId++;\n this.callbacks[id] = callback;\n args.push(id);\n }\n this.send(cmd, args);\n };\n\n this.emit = function(event, data) {\n try {\n if (data.data && data.data.err)\n data.data.err = {message: data.data.err.message, stack: data.data.err.stack, code: data.data.err.code};\n this.$worker && this.$worker.postMessage({event: event, data: {data: data.data}});\n }\n catch(ex) {\n console.error(ex.stack);\n }\n };\n\n this.attachToDocument = function(doc) {\n if (this.$doc)\n this.terminate();\n\n this.$doc = doc;\n this.call(\"setValue\", [doc.getValue()]);\n doc.on(\"change\", this.changeListener, true);\n };\n\n this.changeListener = function(delta) {\n if (!this.deltaQueue) {\n this.deltaQueue = [];\n setTimeout(this.$sendDeltaQueue, 0);\n }\n if (delta.action == \"insert\")\n this.deltaQueue.push(delta.start, delta.lines);\n else\n this.deltaQueue.push(delta.start, delta.end);\n };\n\n this.$sendDeltaQueue = function() {\n var q = this.deltaQueue;\n if (!q) return;\n this.deltaQueue = null;\n if (q.length > 50 && q.length > this.$doc.getLength() >> 1) {\n this.call(\"setValue\", [this.$doc.getValue()]);\n } else\n this.emit(\"change\", {data: q});\n };\n\n}).call(WorkerClient.prototype);\n\n\nvar UIWorkerClient = function(topLevelNamespaces, mod, classname) {\n var main = null;\n var emitSync = false;\n var sender = Object.create(EventEmitter);\n\n var messageBuffer = [];\n var workerClient = new WorkerClient({\n messageBuffer: messageBuffer,\n terminate: function() {},\n postMessage: function(e) {\n messageBuffer.push(e);\n if (!main) return;\n if (emitSync)\n setTimeout(processNext);\n else\n processNext();\n }\n });\n\n workerClient.setEmitSync = function(val) { emitSync = val; };\n\n var processNext = function() {\n var msg = messageBuffer.shift();\n if (msg.command)\n main[msg.command].apply(main, msg.args);\n else if (msg.event)\n sender._signal(msg.event, msg.data);\n };\n\n sender.postMessage = function(msg) {\n workerClient.onMessage({data: msg});\n };\n sender.callback = function(data, callbackId) {\n this.postMessage({type: \"call\", id: callbackId, data: data});\n };\n sender.emit = function(name, data) {\n this.postMessage({type: \"event\", name: name, data: data});\n };\n\n config.loadModule([\"worker\", mod], function(Main) {\n main = new Main[classname](sender);\n while (messageBuffer.length)\n processNext();\n });\n\n return workerClient;\n};\n\nexports.UIWorkerClient = UIWorkerClient;\nexports.WorkerClient = WorkerClient;\nexports.createWorker = createWorker;\n\n\n});\n\nace.define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"./range\").Range;\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar oop = require(\"./lib/oop\");\nvar PlaceHolder = function (session, length, pos, others, mainClass, othersClass) {\n var _self = this;\n this.length = length;\n this.session = session;\n this.doc = session.getDocument();\n this.mainClass = mainClass;\n this.othersClass = othersClass;\n this.$onUpdate = this.onUpdate.bind(this);\n this.doc.on(\"change\", this.$onUpdate, true);\n this.$others = others;\n this.$onCursorChange = function () {\n setTimeout(function () {\n _self.onCursorChange();\n });\n };\n this.$pos = pos;\n var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || { length: -1 };\n this.$undoStackDepth = undoStack.length;\n this.setup();\n session.selection.on(\"changeCursor\", this.$onCursorChange);\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.setup = function () {\n var _self = this;\n var doc = this.doc;\n var session = this.session;\n this.selectionBefore = session.selection.toJSON();\n if (session.selection.inMultiSelectMode)\n session.selection.toSingleRange();\n this.pos = doc.createAnchor(this.$pos.row, this.$pos.column);\n var pos = this.pos;\n pos.$insertRight = true;\n pos.detach();\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);\n this.others = [];\n this.$others.forEach(function (other) {\n var anchor = doc.createAnchor(other.row, other.column);\n anchor.$insertRight = true;\n anchor.detach();\n _self.others.push(anchor);\n });\n session.setUndoSelect(false);\n };\n this.showOtherMarkers = function () {\n if (this.othersActive)\n return;\n var session = this.session;\n var _self = this;\n this.othersActive = true;\n this.others.forEach(function (anchor) {\n anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column + _self.length), _self.othersClass, null, false);\n });\n };\n this.hideOtherMarkers = function () {\n if (!this.othersActive)\n return;\n this.othersActive = false;\n for (var i = 0; i < this.others.length; i++) {\n this.session.removeMarker(this.others[i].markerId);\n }\n };\n this.onUpdate = function (delta) {\n if (this.$updating)\n return this.updateAnchors(delta);\n var range = delta;\n if (range.start.row !== range.end.row)\n return;\n if (range.start.row !== this.pos.row)\n return;\n this.$updating = true;\n var lengthDiff = delta.action === \"insert\" ? range.end.column - range.start.column : range.start.column - range.end.column;\n var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1;\n var distanceFromStart = range.start.column - this.pos.column;\n this.updateAnchors(delta);\n if (inMainRange)\n this.length += lengthDiff;\n if (inMainRange && !this.session.$fromUndo) {\n if (delta.action === 'insert') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.insertMergedLines(newPos, delta.lines);\n }\n }\n else if (delta.action === 'remove') {\n for (var i = this.others.length - 1; i >= 0; i--) {\n var otherPos = this.others[i];\n var newPos = { row: otherPos.row, column: otherPos.column + distanceFromStart };\n this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff));\n }\n }\n }\n this.$updating = false;\n this.updateMarkers();\n };\n this.updateAnchors = function (delta) {\n this.pos.onChange(delta);\n for (var i = this.others.length; i--;)\n this.others[i].onChange(delta);\n this.updateMarkers();\n };\n this.updateMarkers = function () {\n if (this.$updating)\n return;\n var _self = this;\n var session = this.session;\n var updateMarker = function (pos, className) {\n session.removeMarker(pos.markerId);\n pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + _self.length), className, null, false);\n };\n updateMarker(this.pos, this.mainClass);\n for (var i = this.others.length; i--;)\n updateMarker(this.others[i], this.othersClass);\n };\n this.onCursorChange = function (event) {\n if (this.$updating || !this.session)\n return;\n var pos = this.session.selection.getCursor();\n if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {\n this.showOtherMarkers();\n this._emit(\"cursorEnter\", event);\n }\n else {\n this.hideOtherMarkers();\n this._emit(\"cursorLeave\", event);\n }\n };\n this.detach = function () {\n this.session.removeMarker(this.pos && this.pos.markerId);\n this.hideOtherMarkers();\n this.doc.off(\"change\", this.$onUpdate);\n this.session.selection.off(\"changeCursor\", this.$onCursorChange);\n this.session.setUndoSelect(true);\n this.session = null;\n };\n this.cancel = function () {\n if (this.$undoStackDepth === -1)\n return;\n var undoManager = this.session.getUndoManager();\n var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth;\n for (var i = 0; i < undosRequired; i++) {\n undoManager.undo(this.session, true);\n }\n if (this.selectionBefore)\n this.session.selection.fromJSON(this.selectionBefore);\n };\n}).call(PlaceHolder.prototype);\nexports.PlaceHolder = PlaceHolder;\n\n});\n\nace.define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"], function(require, exports, module){var event = require(\"../lib/event\");\nvar useragent = require(\"../lib/useragent\");\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nfunction onMouseDown(e) {\n var ev = e.domEvent;\n var alt = ev.altKey;\n var shift = ev.shiftKey;\n var ctrl = ev.ctrlKey;\n var accel = e.getAccelKey();\n var button = e.getButton();\n if (ctrl && useragent.isMac)\n button = ev.button;\n if (e.editor.inMultiSelectMode && button == 2) {\n e.editor.textInput.onContextMenu(e.domEvent);\n return;\n }\n if (!ctrl && !alt && !accel) {\n if (button === 0 && e.editor.inMultiSelectMode)\n e.editor.exitMultiSelectMode();\n return;\n }\n if (button !== 0)\n return;\n var editor = e.editor;\n var selection = editor.selection;\n var isMultiSelect = editor.inMultiSelectMode;\n var pos = e.getDocumentPosition();\n var cursor = selection.getCursor();\n var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));\n var mouseX = e.x, mouseY = e.y;\n var onMouseSelection = function (e) {\n mouseX = e.clientX;\n mouseY = e.clientY;\n };\n var session = editor.session;\n var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var screenCursor = screenAnchor;\n var selectionMode;\n if (editor.$mouseHandler.$enableJumpToDef) {\n if (ctrl && alt || accel && alt)\n selectionMode = shift ? \"block\" : \"add\";\n else if (alt && editor.$blockSelectEnabled)\n selectionMode = \"block\";\n }\n else {\n if (accel && !alt) {\n selectionMode = \"add\";\n if (!isMultiSelect && shift)\n return;\n }\n else if (alt && editor.$blockSelectEnabled) {\n selectionMode = \"block\";\n }\n }\n if (selectionMode && useragent.isMac && ev.ctrlKey) {\n editor.$mouseHandler.cancelContextMenu();\n }\n if (selectionMode == \"add\") {\n if (!isMultiSelect && inSelection)\n return; // dragging\n if (!isMultiSelect) {\n var range = selection.toOrientedRange();\n editor.addSelectionMarker(range);\n }\n var oldRange = selection.rangeList.rangeAtPoint(pos);\n editor.inVirtualSelectionMode = true;\n if (shift) {\n oldRange = null;\n range = selection.ranges[0] || range;\n editor.removeSelectionMarker(range);\n }\n editor.once(\"mouseup\", function () {\n var tmpSel = selection.toOrientedRange();\n if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor))\n selection.substractPoint(tmpSel.cursor);\n else {\n if (shift) {\n selection.substractPoint(range.cursor);\n }\n else if (range) {\n editor.removeSelectionMarker(range);\n selection.addRange(range);\n }\n selection.addRange(tmpSel);\n }\n editor.inVirtualSelectionMode = false;\n });\n }\n else if (selectionMode == \"block\") {\n e.stop();\n editor.inVirtualSelectionMode = true;\n var initialRange;\n var rectSel = [];\n var blockSelect = function () {\n var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);\n var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column, newCursor.offsetX);\n if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))\n return;\n screenCursor = newCursor;\n editor.selection.moveToPosition(cursor);\n editor.renderer.scrollCursorIntoView();\n editor.removeSelectionMarkers(rectSel);\n rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);\n if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())\n rectSel[0] = editor.$mouseHandler.$clickSelection.clone();\n rectSel.forEach(editor.addSelectionMarker, editor);\n editor.updateSelectionMarkers();\n };\n if (isMultiSelect && !accel) {\n selection.toSingleRange();\n }\n else if (!isMultiSelect && accel) {\n initialRange = selection.toOrientedRange();\n editor.addSelectionMarker(initialRange);\n }\n if (shift)\n screenAnchor = session.documentToScreenPosition(selection.lead);\n else\n selection.moveToPosition(pos);\n screenCursor = { row: -1, column: -1 };\n var onMouseSelectionEnd = function (e) {\n blockSelect();\n clearInterval(timerId);\n editor.removeSelectionMarkers(rectSel);\n if (!rectSel.length)\n rectSel = [selection.toOrientedRange()];\n if (initialRange) {\n editor.removeSelectionMarker(initialRange);\n selection.toSingleRange(initialRange);\n }\n for (var i = 0; i < rectSel.length; i++)\n selection.addRange(rectSel[i]);\n editor.inVirtualSelectionMode = false;\n editor.$mouseHandler.$clickSelection = null;\n };\n var onSelectionInterval = blockSelect;\n event.capture(editor.container, onMouseSelection, onMouseSelectionEnd);\n var timerId = setInterval(function () { onSelectionInterval(); }, 20);\n return e.preventDefault();\n }\n}\nexports.onMouseDown = onMouseDown;\n\n});\n\nace.define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"], function(require, exports, module){// commands to enter multiselect mode\nexports.defaultCommands = [{\n name: \"addCursorAbove\",\n description: \"Add cursor above\",\n exec: function (editor) { editor.selectMoreLines(-1); },\n bindKey: { win: \"Ctrl-Alt-Up\", mac: \"Ctrl-Alt-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelow\",\n description: \"Add cursor below\",\n exec: function (editor) { editor.selectMoreLines(1); },\n bindKey: { win: \"Ctrl-Alt-Down\", mac: \"Ctrl-Alt-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorAboveSkipCurrent\",\n description: \"Add cursor above (skip current)\",\n exec: function (editor) { editor.selectMoreLines(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Up\", mac: \"Ctrl-Alt-Shift-Up\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"addCursorBelowSkipCurrent\",\n description: \"Add cursor below (skip current)\",\n exec: function (editor) { editor.selectMoreLines(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Down\", mac: \"Ctrl-Alt-Shift-Down\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreBefore\",\n description: \"Select more before\",\n exec: function (editor) { editor.selectMore(-1); },\n bindKey: { win: \"Ctrl-Alt-Left\", mac: \"Ctrl-Alt-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectMoreAfter\",\n description: \"Select more after\",\n exec: function (editor) { editor.selectMore(1); },\n bindKey: { win: \"Ctrl-Alt-Right\", mac: \"Ctrl-Alt-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextBefore\",\n description: \"Select next before\",\n exec: function (editor) { editor.selectMore(-1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Left\", mac: \"Ctrl-Alt-Shift-Left\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"selectNextAfter\",\n description: \"Select next after\",\n exec: function (editor) { editor.selectMore(1, true); },\n bindKey: { win: \"Ctrl-Alt-Shift-Right\", mac: \"Ctrl-Alt-Shift-Right\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }, {\n name: \"toggleSplitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function (editor) {\n if (editor.multiSelect.rangeCount > 1)\n editor.multiSelect.joinSelections();\n else\n editor.multiSelect.splitIntoLines();\n },\n bindKey: { win: \"Ctrl-Alt-L\", mac: \"Ctrl-Alt-L\" },\n readOnly: true\n }, {\n name: \"splitSelectionIntoLines\",\n description: \"Split into lines\",\n exec: function (editor) { editor.multiSelect.splitIntoLines(); },\n readOnly: true\n }, {\n name: \"alignCursors\",\n description: \"Align cursors\",\n exec: function (editor) { editor.alignCursors(); },\n bindKey: { win: \"Ctrl-Alt-A\", mac: \"Ctrl-Alt-A\" },\n scrollIntoView: \"cursor\"\n }, {\n name: \"findAll\",\n description: \"Find all\",\n exec: function (editor) { editor.findAll(); },\n bindKey: { win: \"Ctrl-Alt-K\", mac: \"Ctrl-Alt-G\" },\n scrollIntoView: \"cursor\",\n readOnly: true\n }];\nexports.multiSelectCommands = [{\n name: \"singleSelection\",\n description: \"Single selection\",\n bindKey: \"esc\",\n exec: function (editor) { editor.exitMultiSelectMode(); },\n scrollIntoView: \"cursor\",\n readOnly: true,\n isAvailable: function (editor) { return editor && editor.inMultiSelectMode; }\n }];\nvar HashHandler = require(\"../keyboard/hash_handler\").HashHandler;\nexports.keyboardHandler = new HashHandler(exports.multiSelectCommands);\n\n});\n\nace.define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"], function(require, exports, module){var RangeList = require(\"./range_list\").RangeList;\nvar Range = require(\"./range\").Range;\nvar Selection = require(\"./selection\").Selection;\nvar onMouseDown = require(\"./mouse/multi_select_handler\").onMouseDown;\nvar event = require(\"./lib/event\");\nvar lang = require(\"./lib/lang\");\nvar commands = require(\"./commands/multi_select_commands\");\nexports.commands = commands.defaultCommands.concat(commands.multiSelectCommands);\nvar Search = require(\"./search\").Search;\nvar search = new Search();\nfunction find(session, needle, dir) {\n search.$options.wrap = true;\n search.$options.needle = needle;\n search.$options.backwards = dir == -1;\n return search.find(session);\n}\nvar EditSession = require(\"./edit_session\").EditSession;\n(function () {\n this.getSelectionMarkers = function () {\n return this.$selectionMarkers;\n };\n}).call(EditSession.prototype);\n(function () {\n this.ranges = null;\n this.rangeList = null;\n this.addRange = function (range, $blockChangeEvents) {\n if (!range)\n return;\n if (!this.inMultiSelectMode && this.rangeCount === 0) {\n var oldRange = this.toOrientedRange();\n this.rangeList.add(oldRange);\n this.rangeList.add(range);\n if (this.rangeList.ranges.length != 2) {\n this.rangeList.removeAll();\n return $blockChangeEvents || this.fromOrientedRange(range);\n }\n this.rangeList.removeAll();\n this.rangeList.add(oldRange);\n this.$onAddRange(oldRange);\n }\n if (!range.cursor)\n range.cursor = range.end;\n var removed = this.rangeList.add(range);\n this.$onAddRange(range);\n if (removed.length)\n this.$onRemoveRange(removed);\n if (this.rangeCount > 1 && !this.inMultiSelectMode) {\n this._signal(\"multiSelect\");\n this.inMultiSelectMode = true;\n this.session.$undoSelect = false;\n this.rangeList.attach(this.session);\n }\n return $blockChangeEvents || this.fromOrientedRange(range);\n };\n this.toSingleRange = function (range) {\n range = range || this.ranges[0];\n var removed = this.rangeList.removeAll();\n if (removed.length)\n this.$onRemoveRange(removed);\n range && this.fromOrientedRange(range);\n };\n this.substractPoint = function (pos) {\n var removed = this.rangeList.substractPoint(pos);\n if (removed) {\n this.$onRemoveRange(removed);\n return removed[0];\n }\n };\n this.mergeOverlappingRanges = function () {\n var removed = this.rangeList.merge();\n if (removed.length)\n this.$onRemoveRange(removed);\n };\n this.$onAddRange = function (range) {\n this.rangeCount = this.rangeList.ranges.length;\n this.ranges.unshift(range);\n this._signal(\"addRange\", { range: range });\n };\n this.$onRemoveRange = function (removed) {\n this.rangeCount = this.rangeList.ranges.length;\n if (this.rangeCount == 1 && this.inMultiSelectMode) {\n var lastRange = this.rangeList.ranges.pop();\n removed.push(lastRange);\n this.rangeCount = 0;\n }\n for (var i = removed.length; i--;) {\n var index = this.ranges.indexOf(removed[i]);\n this.ranges.splice(index, 1);\n }\n this._signal(\"removeRange\", { ranges: removed });\n if (this.rangeCount === 0 && this.inMultiSelectMode) {\n this.inMultiSelectMode = false;\n this._signal(\"singleSelect\");\n this.session.$undoSelect = true;\n this.rangeList.detach(this.session);\n }\n lastRange = lastRange || this.ranges[0];\n if (lastRange && !lastRange.isEqual(this.getRange()))\n this.fromOrientedRange(lastRange);\n };\n this.$initRangeList = function () {\n if (this.rangeList)\n return;\n this.rangeList = new RangeList();\n this.ranges = [];\n this.rangeCount = 0;\n };\n this.getAllRanges = function () {\n return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()];\n };\n this.splitIntoLines = function () {\n var ranges = this.ranges.length ? this.ranges : [this.getRange()];\n var newRanges = [];\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n var row = range.start.row;\n var endRow = range.end.row;\n if (row === endRow) {\n newRanges.push(range.clone());\n }\n else {\n newRanges.push(new Range(row, range.start.column, row, this.session.getLine(row).length));\n while (++row < endRow)\n newRanges.push(this.getLineRange(row, true));\n newRanges.push(new Range(endRow, 0, endRow, range.end.column));\n }\n if (i == 0 && !this.isBackwards())\n newRanges = newRanges.reverse();\n }\n this.toSingleRange();\n for (var i = newRanges.length; i--;)\n this.addRange(newRanges[i]);\n };\n this.joinSelections = function () {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n };\n this.toggleBlockSelection = function () {\n if (this.rangeCount > 1) {\n var ranges = this.rangeList.ranges;\n var lastRange = ranges[ranges.length - 1];\n var range = Range.fromPoints(ranges[0].start, lastRange.end);\n this.toSingleRange();\n this.setSelectionRange(range, lastRange.cursor == lastRange.start);\n }\n else {\n var cursor = this.session.documentToScreenPosition(this.cursor);\n var anchor = this.session.documentToScreenPosition(this.anchor);\n var rectSel = this.rectangularRangeBlock(cursor, anchor);\n rectSel.forEach(this.addRange, this);\n }\n };\n this.rectangularRangeBlock = function (screenCursor, screenAnchor, includeEmptyLines) {\n var rectSel = [];\n var xBackwards = screenCursor.column < screenAnchor.column;\n if (xBackwards) {\n var startColumn = screenCursor.column;\n var endColumn = screenAnchor.column;\n var startOffsetX = screenCursor.offsetX;\n var endOffsetX = screenAnchor.offsetX;\n }\n else {\n var startColumn = screenAnchor.column;\n var endColumn = screenCursor.column;\n var startOffsetX = screenAnchor.offsetX;\n var endOffsetX = screenCursor.offsetX;\n }\n var yBackwards = screenCursor.row < screenAnchor.row;\n if (yBackwards) {\n var startRow = screenCursor.row;\n var endRow = screenAnchor.row;\n }\n else {\n var startRow = screenAnchor.row;\n var endRow = screenCursor.row;\n }\n if (startColumn < 0)\n startColumn = 0;\n if (startRow < 0)\n startRow = 0;\n if (startRow == endRow)\n includeEmptyLines = true;\n var docEnd;\n for (var row = startRow; row <= endRow; row++) {\n var range = Range.fromPoints(this.session.screenToDocumentPosition(row, startColumn, startOffsetX), this.session.screenToDocumentPosition(row, endColumn, endOffsetX));\n if (range.isEmpty()) {\n if (docEnd && isSamePoint(range.end, docEnd))\n break;\n docEnd = range.end;\n }\n range.cursor = xBackwards ? range.start : range.end;\n rectSel.push(range);\n }\n if (yBackwards)\n rectSel.reverse();\n if (!includeEmptyLines) {\n var end = rectSel.length - 1;\n while (rectSel[end].isEmpty() && end > 0)\n end--;\n if (end > 0) {\n var start = 0;\n while (rectSel[start].isEmpty())\n start++;\n }\n for (var i = end; i >= start; i--) {\n if (rectSel[i].isEmpty())\n rectSel.splice(i, 1);\n }\n }\n return rectSel;\n };\n}).call(Selection.prototype);\nvar Editor = require(\"./editor\").Editor;\n(function () {\n this.updateSelectionMarkers = function () {\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.addSelectionMarker = function (orientedRange) {\n if (!orientedRange.cursor)\n orientedRange.cursor = orientedRange.end;\n var style = this.getSelectionStyle();\n orientedRange.marker = this.session.addMarker(orientedRange, \"ace_selection\", style);\n this.session.$selectionMarkers.push(orientedRange);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n return orientedRange;\n };\n this.removeSelectionMarker = function (range) {\n if (!range.marker)\n return;\n this.session.removeMarker(range.marker);\n var index = this.session.$selectionMarkers.indexOf(range);\n if (index != -1)\n this.session.$selectionMarkers.splice(index, 1);\n this.session.selectionMarkerCount = this.session.$selectionMarkers.length;\n };\n this.removeSelectionMarkers = function (ranges) {\n var markerList = this.session.$selectionMarkers;\n for (var i = ranges.length; i--;) {\n var range = ranges[i];\n if (!range.marker)\n continue;\n this.session.removeMarker(range.marker);\n var index = markerList.indexOf(range);\n if (index != -1)\n markerList.splice(index, 1);\n }\n this.session.selectionMarkerCount = markerList.length;\n };\n this.$onAddRange = function (e) {\n this.addSelectionMarker(e.range);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onRemoveRange = function (e) {\n this.removeSelectionMarkers(e.ranges);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onMultiSelect = function (e) {\n if (this.inMultiSelectMode)\n return;\n this.inMultiSelectMode = true;\n this.setStyle(\"ace_multiselect\");\n this.keyBinding.addKeyboardHandler(commands.keyboardHandler);\n this.commands.setDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n };\n this.$onSingleSelect = function (e) {\n if (this.session.multiSelect.inVirtualMode)\n return;\n this.inMultiSelectMode = false;\n this.unsetStyle(\"ace_multiselect\");\n this.keyBinding.removeKeyboardHandler(commands.keyboardHandler);\n this.commands.removeDefaultHandler(\"exec\", this.$onMultiSelectExec);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n this._emit(\"changeSelection\");\n };\n this.$onMultiSelectExec = function (e) {\n var command = e.command;\n var editor = e.editor;\n if (!editor.multiSelect)\n return;\n if (!command.multiSelectAction) {\n var result = command.exec(editor, e.args || {});\n editor.multiSelect.addRange(editor.multiSelect.toOrientedRange());\n editor.multiSelect.mergeOverlappingRanges();\n }\n else if (command.multiSelectAction == \"forEach\") {\n result = editor.forEachSelection(command, e.args);\n }\n else if (command.multiSelectAction == \"forEachLine\") {\n result = editor.forEachSelection(command, e.args, true);\n }\n else if (command.multiSelectAction == \"single\") {\n editor.exitMultiSelectMode();\n result = command.exec(editor, e.args || {});\n }\n else {\n result = command.multiSelectAction(editor, e.args || {});\n }\n return result;\n };\n this.forEachSelection = function (cmd, args, options) {\n if (this.inVirtualSelectionMode)\n return;\n var keepOrder = options && options.keepOrder;\n var $byLines = options == true || options && options.$byLines;\n var session = this.session;\n var selection = this.selection;\n var rangeList = selection.rangeList;\n var ranges = (keepOrder ? selection : rangeList).ranges;\n var result;\n if (!ranges.length)\n return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n var reg = selection._eventRegistry;\n selection._eventRegistry = {};\n var tmpSel = new Selection(session);\n this.inVirtualSelectionMode = true;\n for (var i = ranges.length; i--;) {\n if ($byLines) {\n while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row)\n i--;\n }\n tmpSel.fromOrientedRange(ranges[i]);\n tmpSel.index = i;\n this.selection = session.selection = tmpSel;\n var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {});\n if (!result && cmdResult !== undefined)\n result = cmdResult;\n tmpSel.toOrientedRange(ranges[i]);\n }\n tmpSel.detach();\n this.selection = session.selection = selection;\n this.inVirtualSelectionMode = false;\n selection._eventRegistry = reg;\n selection.mergeOverlappingRanges();\n if (selection.ranges[0])\n selection.fromOrientedRange(selection.ranges[0]);\n var anim = this.renderer.$scrollAnimation;\n this.onCursorChange();\n this.onSelectionChange();\n if (anim && anim.from == anim.to)\n this.renderer.animateScrolling(anim.from);\n return result;\n };\n this.exitMultiSelectMode = function () {\n if (!this.inMultiSelectMode || this.inVirtualSelectionMode)\n return;\n this.multiSelect.toSingleRange();\n };\n this.getSelectedText = function () {\n var text = \"\";\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var ranges = this.multiSelect.rangeList.ranges;\n var buf = [];\n for (var i = 0; i < ranges.length; i++) {\n buf.push(this.session.getTextRange(ranges[i]));\n }\n var nl = this.session.getDocument().getNewLineCharacter();\n text = buf.join(nl);\n if (text.length == (buf.length - 1) * nl.length)\n text = \"\";\n }\n else if (!this.selection.isEmpty()) {\n text = this.session.getTextRange(this.getSelectionRange());\n }\n return text;\n };\n this.$checkMultiselectChange = function (e, anchor) {\n if (this.inMultiSelectMode && !this.inVirtualSelectionMode) {\n var range = this.multiSelect.ranges[0];\n if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor)\n return;\n var pos = anchor == this.multiSelect.anchor\n ? range.cursor == range.start ? range.end : range.start\n : range.cursor;\n if (pos.row != anchor.row\n || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column)\n this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange());\n else\n this.multiSelect.mergeOverlappingRanges();\n }\n };\n this.findAll = function (needle, options, additive) {\n options = options || {};\n options.needle = needle || options.needle;\n if (options.needle == undefined) {\n var range = this.selection.isEmpty()\n ? this.selection.getWordRange()\n : this.selection.getRange();\n options.needle = this.session.getTextRange(range);\n }\n this.$search.set(options);\n var ranges = this.$search.findAll(this.session);\n if (!ranges.length)\n return 0;\n var selection = this.multiSelect;\n if (!additive)\n selection.toSingleRange(ranges[0]);\n for (var i = ranges.length; i--;)\n selection.addRange(ranges[i], true);\n if (range && selection.rangeList.rangeAtPoint(range.start))\n selection.addRange(range, true);\n return ranges.length;\n };\n this.selectMoreLines = function (dir, skip) {\n var range = this.selection.toOrientedRange();\n var isBackwards = range.cursor == range.end;\n var screenLead = this.session.documentToScreenPosition(range.cursor);\n if (this.selection.$desiredColumn)\n screenLead.column = this.selection.$desiredColumn;\n var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column);\n if (!range.isEmpty()) {\n var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start);\n var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column);\n }\n else {\n var anchor = lead;\n }\n if (isBackwards) {\n var newRange = Range.fromPoints(lead, anchor);\n newRange.cursor = newRange.start;\n }\n else {\n var newRange = Range.fromPoints(anchor, lead);\n newRange.cursor = newRange.end;\n }\n newRange.desiredColumn = screenLead.column;\n if (!this.selection.inMultiSelectMode) {\n this.selection.addRange(range);\n }\n else {\n if (skip)\n var toRemove = range.cursor;\n }\n this.selection.addRange(newRange);\n if (toRemove)\n this.selection.substractPoint(toRemove);\n };\n this.transposeSelections = function (dir) {\n var session = this.session;\n var sel = session.multiSelect;\n var all = sel.ranges;\n for (var i = all.length; i--;) {\n var range = all[i];\n if (range.isEmpty()) {\n var tmp = session.getWordRange(range.start.row, range.start.column);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n range.end.row = tmp.end.row;\n range.end.column = tmp.end.column;\n }\n }\n sel.mergeOverlappingRanges();\n var words = [];\n for (var i = all.length; i--;) {\n var range = all[i];\n words.unshift(session.getTextRange(range));\n }\n if (dir < 0)\n words.unshift(words.pop());\n else\n words.push(words.shift());\n for (var i = all.length; i--;) {\n var range = all[i];\n var tmp = range.clone();\n session.replace(range, words[i]);\n range.start.row = tmp.start.row;\n range.start.column = tmp.start.column;\n }\n sel.fromOrientedRange(sel.ranges[0]);\n };\n this.selectMore = function (dir, skip, stopAtFirst) {\n var session = this.session;\n var sel = session.multiSelect;\n var range = sel.toOrientedRange();\n if (range.isEmpty()) {\n range = session.getWordRange(range.start.row, range.start.column);\n range.cursor = dir == -1 ? range.start : range.end;\n this.multiSelect.addRange(range);\n if (stopAtFirst)\n return;\n }\n var needle = session.getTextRange(range);\n var newRange = find(session, needle, dir);\n if (newRange) {\n newRange.cursor = dir == -1 ? newRange.start : newRange.end;\n this.session.unfold(newRange);\n this.multiSelect.addRange(newRange);\n this.renderer.scrollCursorIntoView(null, 0.5);\n }\n if (skip)\n this.multiSelect.substractPoint(range.cursor);\n };\n this.alignCursors = function () {\n var session = this.session;\n var sel = session.multiSelect;\n var ranges = sel.ranges;\n var row = -1;\n var sameRowRanges = ranges.filter(function (r) {\n if (r.cursor.row == row)\n return true;\n row = r.cursor.row;\n });\n if (!ranges.length || sameRowRanges.length == ranges.length - 1) {\n var range = this.selection.getRange();\n var fr = range.start.row, lr = range.end.row;\n var guessRange = fr == lr;\n if (guessRange) {\n var max = this.session.getLength();\n var line;\n do {\n line = this.session.getLine(lr);\n } while (/[=:]/.test(line) && ++lr < max);\n do {\n line = this.session.getLine(fr);\n } while (/[=:]/.test(line) && --fr > 0);\n if (fr < 0)\n fr = 0;\n if (lr >= max)\n lr = max - 1;\n }\n var lines = this.session.removeFullLines(fr, lr);\n lines = this.$reAlignText(lines, guessRange);\n this.session.insert({ row: fr, column: 0 }, lines.join(\"\\n\") + \"\\n\");\n if (!guessRange) {\n range.start.column = 0;\n range.end.column = lines[lines.length - 1].length;\n }\n this.selection.setRange(range);\n }\n else {\n sameRowRanges.forEach(function (r) {\n sel.substractPoint(r.cursor);\n });\n var maxCol = 0;\n var minSpace = Infinity;\n var spaceOffsets = ranges.map(function (r) {\n var p = r.cursor;\n var line = session.getLine(p.row);\n var spaceOffset = line.substr(p.column).search(/\\S/g);\n if (spaceOffset == -1)\n spaceOffset = 0;\n if (p.column > maxCol)\n maxCol = p.column;\n if (spaceOffset < minSpace)\n minSpace = spaceOffset;\n return spaceOffset;\n });\n ranges.forEach(function (r, i) {\n var p = r.cursor;\n var l = maxCol - p.column;\n var d = spaceOffsets[i] - minSpace;\n if (l > d)\n session.insert(p, lang.stringRepeat(\" \", l - d));\n else\n session.remove(new Range(p.row, p.column, p.row, p.column - l + d));\n r.start.column = r.end.column = maxCol;\n r.start.row = r.end.row = p.row;\n r.cursor = r.end;\n });\n sel.fromOrientedRange(ranges[0]);\n this.renderer.updateCursor();\n this.renderer.updateBackMarkers();\n }\n };\n this.$reAlignText = function (lines, forceLeft) {\n var isLeftAligned = true, isRightAligned = true;\n var startW, textW, endW;\n return lines.map(function (line) {\n var m = line.match(/(\\s*)(.*?)(\\s*)([=:].*)/);\n if (!m)\n return [line];\n if (startW == null) {\n startW = m[1].length;\n textW = m[2].length;\n endW = m[3].length;\n return m;\n }\n if (startW + textW + endW != m[1].length + m[2].length + m[3].length)\n isRightAligned = false;\n if (startW != m[1].length)\n isLeftAligned = false;\n if (startW > m[1].length)\n startW = m[1].length;\n if (textW < m[2].length)\n textW = m[2].length;\n if (endW > m[3].length)\n endW = m[3].length;\n return m;\n }).map(forceLeft ? alignLeft :\n isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign);\n function spaces(n) {\n return lang.stringRepeat(\" \", n);\n }\n function alignLeft(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(textW - m[2].length + endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function alignRight(m) {\n return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n function unAlign(m) {\n return !m[2] ? m[0] : spaces(startW) + m[2]\n + spaces(endW)\n + m[4].replace(/^([=:])\\s+/, \"$1 \");\n }\n };\n}).call(Editor.prototype);\nfunction isSamePoint(p1, p2) {\n return p1.row == p2.row && p1.column == p2.column;\n}\nexports.onSessionChange = function (e) {\n var session = e.session;\n if (session && !session.multiSelect) {\n session.$selectionMarkers = [];\n session.selection.$initRangeList();\n session.multiSelect = session.selection;\n }\n this.multiSelect = session && session.multiSelect;\n var oldSession = e.oldSession;\n if (oldSession) {\n oldSession.multiSelect.off(\"addRange\", this.$onAddRange);\n oldSession.multiSelect.off(\"removeRange\", this.$onRemoveRange);\n oldSession.multiSelect.off(\"multiSelect\", this.$onMultiSelect);\n oldSession.multiSelect.off(\"singleSelect\", this.$onSingleSelect);\n oldSession.multiSelect.lead.off(\"change\", this.$checkMultiselectChange);\n oldSession.multiSelect.anchor.off(\"change\", this.$checkMultiselectChange);\n }\n if (session) {\n session.multiSelect.on(\"addRange\", this.$onAddRange);\n session.multiSelect.on(\"removeRange\", this.$onRemoveRange);\n session.multiSelect.on(\"multiSelect\", this.$onMultiSelect);\n session.multiSelect.on(\"singleSelect\", this.$onSingleSelect);\n session.multiSelect.lead.on(\"change\", this.$checkMultiselectChange);\n session.multiSelect.anchor.on(\"change\", this.$checkMultiselectChange);\n }\n if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) {\n if (session.selection.inMultiSelectMode)\n this.$onMultiSelect();\n else\n this.$onSingleSelect();\n }\n};\nfunction MultiSelect(editor) {\n if (editor.$multiselectOnSessionChange)\n return;\n editor.$onAddRange = editor.$onAddRange.bind(editor);\n editor.$onRemoveRange = editor.$onRemoveRange.bind(editor);\n editor.$onMultiSelect = editor.$onMultiSelect.bind(editor);\n editor.$onSingleSelect = editor.$onSingleSelect.bind(editor);\n editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor);\n editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor);\n editor.$multiselectOnSessionChange(editor);\n editor.on(\"changeSession\", editor.$multiselectOnSessionChange);\n editor.on(\"mousedown\", onMouseDown);\n editor.commands.addCommands(commands.defaultCommands);\n addAltCursorListeners(editor);\n}\nfunction addAltCursorListeners(editor) {\n if (!editor.textInput)\n return;\n var el = editor.textInput.getElement();\n var altCursor = false;\n event.addListener(el, \"keydown\", function (e) {\n var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey);\n if (editor.$blockSelectEnabled && altDown) {\n if (!altCursor) {\n editor.renderer.setMouseCursor(\"crosshair\");\n altCursor = true;\n }\n }\n else if (altCursor) {\n reset();\n }\n }, editor);\n event.addListener(el, \"keyup\", reset, editor);\n event.addListener(el, \"blur\", reset, editor);\n function reset(e) {\n if (altCursor) {\n editor.renderer.setMouseCursor(\"\");\n altCursor = false;\n }\n }\n}\nexports.MultiSelect = MultiSelect;\nrequire(\"./config\").defineOptions(Editor.prototype, \"editor\", {\n enableMultiselect: {\n set: function (val) {\n MultiSelect(this);\n if (val) {\n this.on(\"changeSession\", this.$multiselectOnSessionChange);\n this.on(\"mousedown\", onMouseDown);\n }\n else {\n this.off(\"changeSession\", this.$multiselectOnSessionChange);\n this.off(\"mousedown\", onMouseDown);\n }\n },\n value: true\n },\n enableBlockSelect: {\n set: function (val) {\n this.$blockSelectEnabled = val;\n },\n value: true\n }\n});\n\n});\n\nace.define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar Range = require(\"../../range\").Range;\nvar FoldMode = exports.FoldMode = function () { };\n(function () {\n this.foldingStartMarker = null;\n this.foldingStopMarker = null;\n this.getFoldWidget = function (session, foldStyle, row) {\n var line = session.getLine(row);\n if (this.foldingStartMarker.test(line))\n return \"start\";\n if (foldStyle == \"markbeginend\"\n && this.foldingStopMarker\n && this.foldingStopMarker.test(line))\n return \"end\";\n return \"\";\n };\n this.getFoldWidgetRange = function (session, foldStyle, row) {\n return null;\n };\n this.indentationBlock = function (session, row, column) {\n var re = /\\S/;\n var line = session.getLine(row);\n var startLevel = line.search(re);\n if (startLevel == -1)\n return;\n var startColumn = column || line.length;\n var maxRow = session.getLength();\n var startRow = row;\n var endRow = row;\n while (++row < maxRow) {\n var level = session.getLine(row).search(re);\n if (level == -1)\n continue;\n if (level <= startLevel) {\n var token = session.getTokenAt(row, 0);\n if (!token || token.type !== \"string\")\n break;\n }\n endRow = row;\n }\n if (endRow > startRow) {\n var endColumn = session.getLine(endRow).length;\n return new Range(startRow, startColumn, endRow, endColumn);\n }\n };\n this.openingBracketBlock = function (session, bracket, row, column, typeRe) {\n var start = { row: row, column: column + 1 };\n var end = session.$findClosingBracket(bracket, start, typeRe);\n if (!end)\n return;\n var fw = session.foldWidgets[end.row];\n if (fw == null)\n fw = session.getFoldWidget(end.row);\n if (fw == \"start\" && end.row > start.row) {\n end.row--;\n end.column = session.getLine(end.row).length;\n }\n return Range.fromPoints(start, end);\n };\n this.closingBracketBlock = function (session, bracket, row, column, typeRe) {\n var end = { row: row, column: column };\n var start = session.$findOpeningBracket(bracket, end);\n if (!start)\n return;\n start.column++;\n end.column--;\n return Range.fromPoints(start, end);\n };\n}).call(FoldMode.prototype);\n\n});\n\nace.define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(require, exports, module){\"use strict\";\nvar dom = require(\"./lib/dom\");\nfunction LineWidgets(session) {\n this.session = session;\n this.session.widgetManager = this;\n this.session.getRowLength = this.getRowLength;\n this.session.$getWidgetScreenLength = this.$getWidgetScreenLength;\n this.updateOnChange = this.updateOnChange.bind(this);\n this.renderWidgets = this.renderWidgets.bind(this);\n this.measureWidgets = this.measureWidgets.bind(this);\n this.session._changedWidgets = [];\n this.$onChangeEditor = this.$onChangeEditor.bind(this);\n this.session.on(\"change\", this.updateOnChange);\n this.session.on(\"changeFold\", this.updateOnFold);\n this.session.on(\"changeEditor\", this.$onChangeEditor);\n}\n(function () {\n this.getRowLength = function (row) {\n var h;\n if (this.lineWidgets)\n h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0;\n else\n h = 0;\n if (!this.$useWrapMode || !this.$wrapData[row]) {\n return 1 + h;\n }\n else {\n return this.$wrapData[row].length + 1 + h;\n }\n };\n this.$getWidgetScreenLength = function () {\n var screenRows = 0;\n this.lineWidgets.forEach(function (w) {\n if (w && w.rowCount && !w.hidden)\n screenRows += w.rowCount;\n });\n return screenRows;\n };\n this.$onChangeEditor = function (e) {\n this.attach(e.editor);\n };\n this.attach = function (editor) {\n if (editor && editor.widgetManager && editor.widgetManager != this)\n editor.widgetManager.detach();\n if (this.editor == editor)\n return;\n this.detach();\n this.editor = editor;\n if (editor) {\n editor.widgetManager = this;\n editor.renderer.on(\"beforeRender\", this.measureWidgets);\n editor.renderer.on(\"afterRender\", this.renderWidgets);\n }\n };\n this.detach = function (e) {\n var editor = this.editor;\n if (!editor)\n return;\n this.editor = null;\n editor.widgetManager = null;\n editor.renderer.off(\"beforeRender\", this.measureWidgets);\n editor.renderer.off(\"afterRender\", this.renderWidgets);\n var lineWidgets = this.session.lineWidgets;\n lineWidgets && lineWidgets.forEach(function (w) {\n if (w && w.el && w.el.parentNode) {\n w._inDocument = false;\n w.el.parentNode.removeChild(w.el);\n }\n });\n };\n this.updateOnFold = function (e, session) {\n var lineWidgets = session.lineWidgets;\n if (!lineWidgets || !e.action)\n return;\n var fold = e.data;\n var start = fold.start.row;\n var end = fold.end.row;\n var hide = e.action == \"add\";\n for (var i = start + 1; i < end; i++) {\n if (lineWidgets[i])\n lineWidgets[i].hidden = hide;\n }\n if (lineWidgets[end]) {\n if (hide) {\n if (!lineWidgets[start])\n lineWidgets[start] = lineWidgets[end];\n else\n lineWidgets[end].hidden = hide;\n }\n else {\n if (lineWidgets[start] == lineWidgets[end])\n lineWidgets[start] = undefined;\n lineWidgets[end].hidden = hide;\n }\n }\n };\n this.updateOnChange = function (delta) {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var startRow = delta.start.row;\n var len = delta.end.row - startRow;\n if (len === 0) {\n }\n else if (delta.action == \"remove\") {\n var removed = lineWidgets.splice(startRow + 1, len);\n if (!lineWidgets[startRow] && removed[removed.length - 1]) {\n lineWidgets[startRow] = removed.pop();\n }\n removed.forEach(function (w) {\n w && this.removeLineWidget(w);\n }, this);\n this.$updateRows();\n }\n else {\n var args = new Array(len);\n if (lineWidgets[startRow] && lineWidgets[startRow].column != null) {\n if (delta.start.column > lineWidgets[startRow].column)\n startRow++;\n }\n args.unshift(startRow, 0);\n lineWidgets.splice.apply(lineWidgets, args);\n this.$updateRows();\n }\n };\n this.$updateRows = function () {\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var noWidgets = true;\n lineWidgets.forEach(function (w, i) {\n if (w) {\n noWidgets = false;\n w.row = i;\n while (w.$oldWidget) {\n w.$oldWidget.row = i;\n w = w.$oldWidget;\n }\n }\n });\n if (noWidgets)\n this.session.lineWidgets = null;\n };\n this.$registerLineWidget = function (w) {\n if (!this.session.lineWidgets)\n this.session.lineWidgets = new Array(this.session.getLength());\n var old = this.session.lineWidgets[w.row];\n if (old) {\n w.$oldWidget = old;\n if (old.el && old.el.parentNode) {\n old.el.parentNode.removeChild(old.el);\n old._inDocument = false;\n }\n }\n this.session.lineWidgets[w.row] = w;\n return w;\n };\n this.addLineWidget = function (w) {\n this.$registerLineWidget(w);\n w.session = this.session;\n if (!this.editor)\n return w;\n var renderer = this.editor.renderer;\n if (w.html && !w.el) {\n w.el = dom.createElement(\"div\");\n w.el.innerHTML = w.html;\n }\n if (w.el) {\n dom.addCssClass(w.el, \"ace_lineWidgetContainer\");\n w.el.style.position = \"absolute\";\n w.el.style.zIndex = 5;\n renderer.container.appendChild(w.el);\n w._inDocument = true;\n if (!w.coverGutter) {\n w.el.style.zIndex = 3;\n }\n if (w.pixelHeight == null) {\n w.pixelHeight = w.el.offsetHeight;\n }\n }\n if (w.rowCount == null) {\n w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight;\n }\n var fold = this.session.getFoldAt(w.row, 0);\n w.$fold = fold;\n if (fold) {\n var lineWidgets = this.session.lineWidgets;\n if (w.row == fold.end.row && !lineWidgets[fold.start.row])\n lineWidgets[fold.start.row] = w;\n else\n w.hidden = true;\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n this.renderWidgets(null, renderer);\n this.onWidgetChanged(w);\n return w;\n };\n this.removeLineWidget = function (w) {\n w._inDocument = false;\n w.session = null;\n if (w.el && w.el.parentNode)\n w.el.parentNode.removeChild(w.el);\n if (w.editor && w.editor.destroy)\n try {\n w.editor.destroy();\n }\n catch (e) { }\n if (this.session.lineWidgets) {\n var w1 = this.session.lineWidgets[w.row];\n if (w1 == w) {\n this.session.lineWidgets[w.row] = w.$oldWidget;\n if (w.$oldWidget)\n this.onWidgetChanged(w.$oldWidget);\n }\n else {\n while (w1) {\n if (w1.$oldWidget == w) {\n w1.$oldWidget = w.$oldWidget;\n break;\n }\n w1 = w1.$oldWidget;\n }\n }\n }\n this.session._emit(\"changeFold\", { data: { start: { row: w.row } } });\n this.$updateRows();\n };\n this.getWidgetsAtRow = function (row) {\n var lineWidgets = this.session.lineWidgets;\n var w = lineWidgets && lineWidgets[row];\n var list = [];\n while (w) {\n list.push(w);\n w = w.$oldWidget;\n }\n return list;\n };\n this.onWidgetChanged = function (w) {\n this.session._changedWidgets.push(w);\n this.editor && this.editor.renderer.updateFull();\n };\n this.measureWidgets = function (e, renderer) {\n var changedWidgets = this.session._changedWidgets;\n var config = renderer.layerConfig;\n if (!changedWidgets || !changedWidgets.length)\n return;\n var min = Infinity;\n for (var i = 0; i < changedWidgets.length; i++) {\n var w = changedWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.session != this.session)\n continue;\n if (!w._inDocument) {\n if (this.session.lineWidgets[w.row] != w)\n continue;\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n w.h = w.el.offsetHeight;\n if (!w.fixedWidth) {\n w.w = w.el.offsetWidth;\n w.screenWidth = Math.ceil(w.w / config.characterWidth);\n }\n var rowCount = w.h / config.lineHeight;\n if (w.coverLine) {\n rowCount -= this.session.getRowLineCount(w.row);\n if (rowCount < 0)\n rowCount = 0;\n }\n if (w.rowCount != rowCount) {\n w.rowCount = rowCount;\n if (w.row < min)\n min = w.row;\n }\n }\n if (min != Infinity) {\n this.session._emit(\"changeFold\", { data: { start: { row: min } } });\n this.session.lineWidgetWidth = null;\n }\n this.session._changedWidgets = [];\n };\n this.renderWidgets = function (e, renderer) {\n var config = renderer.layerConfig;\n var lineWidgets = this.session.lineWidgets;\n if (!lineWidgets)\n return;\n var first = Math.min(this.firstRow, config.firstRow);\n var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length);\n while (first > 0 && !lineWidgets[first])\n first--;\n this.firstRow = config.firstRow;\n this.lastRow = config.lastRow;\n renderer.$cursorLayer.config = config;\n for (var i = first; i <= last; i++) {\n var w = lineWidgets[i];\n if (!w || !w.el)\n continue;\n if (w.hidden) {\n w.el.style.top = -100 - (w.pixelHeight || 0) + \"px\";\n continue;\n }\n if (!w._inDocument) {\n w._inDocument = true;\n renderer.container.appendChild(w.el);\n }\n var top = renderer.$cursorLayer.getPixelPosition({ row: i, column: 0 }, true).top;\n if (!w.coverLine)\n top += config.lineHeight * this.session.getRowLineCount(w.row);\n w.el.style.top = top - config.offset + \"px\";\n var left = w.coverGutter ? 0 : renderer.gutterWidth;\n if (!w.fixedWidth)\n left -= renderer.scrollLeft;\n w.el.style.left = left + \"px\";\n if (w.fullWidth && w.screenWidth) {\n w.el.style.minWidth = config.width + 2 * config.padding + \"px\";\n }\n if (w.fixedWidth) {\n w.el.style.right = renderer.scrollBar.getWidth() + \"px\";\n }\n else {\n w.el.style.right = \"\";\n }\n }\n };\n}).call(LineWidgets.prototype);\nexports.LineWidgets = LineWidgets;\n\n});\n\nace.define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"], function(require, exports, module){\"use strict\";\nvar LineWidgets = require(\"../line_widgets\").LineWidgets;\nvar dom = require(\"../lib/dom\");\nvar Range = require(\"../range\").Range;\nfunction binarySearch(array, needle, comparator) {\n var first = 0;\n var last = array.length - 1;\n while (first <= last) {\n var mid = (first + last) >> 1;\n var c = comparator(needle, array[mid]);\n if (c > 0)\n first = mid + 1;\n else if (c < 0)\n last = mid - 1;\n else\n return mid;\n }\n return -(first + 1);\n}\nfunction findAnnotations(session, row, dir) {\n var annotations = session.getAnnotations().sort(Range.comparePoints);\n if (!annotations.length)\n return;\n var i = binarySearch(annotations, { row: row, column: -1 }, Range.comparePoints);\n if (i < 0)\n i = -i - 1;\n if (i >= annotations.length)\n i = dir > 0 ? 0 : annotations.length - 1;\n else if (i === 0 && dir < 0)\n i = annotations.length - 1;\n var annotation = annotations[i];\n if (!annotation || !dir)\n return;\n if (annotation.row === row) {\n do {\n annotation = annotations[i += dir];\n } while (annotation && annotation.row === row);\n if (!annotation)\n return annotations.slice();\n }\n var matched = [];\n row = annotation.row;\n do {\n matched[dir < 0 ? \"unshift\" : \"push\"](annotation);\n annotation = annotations[i += dir];\n } while (annotation && annotation.row == row);\n return matched.length && matched;\n}\nexports.showErrorMarker = function (editor, dir) {\n var session = editor.session;\n if (!session.widgetManager) {\n session.widgetManager = new LineWidgets(session);\n session.widgetManager.attach(editor);\n }\n var pos = editor.getCursorPosition();\n var row = pos.row;\n var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function (w) {\n return w.type == \"errorMarker\";\n })[0];\n if (oldWidget) {\n oldWidget.destroy();\n }\n else {\n row -= dir;\n }\n var annotations = findAnnotations(session, row, dir);\n var gutterAnno;\n if (annotations) {\n var annotation = annotations[0];\n pos.column = (annotation.pos && typeof annotation.column != \"number\"\n ? annotation.pos.sc\n : annotation.column) || 0;\n pos.row = annotation.row;\n gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row];\n }\n else if (oldWidget) {\n return;\n }\n else {\n gutterAnno = {\n text: [\"Looks good!\"],\n className: \"ace_ok\"\n };\n }\n editor.session.unfold(pos.row);\n editor.selection.moveToPosition(pos);\n var w = {\n row: pos.row,\n fixedWidth: true,\n coverGutter: true,\n el: dom.createElement(\"div\"),\n type: \"errorMarker\"\n };\n var el = w.el.appendChild(dom.createElement(\"div\"));\n var arrow = w.el.appendChild(dom.createElement(\"div\"));\n arrow.className = \"error_widget_arrow \" + gutterAnno.className;\n var left = editor.renderer.$cursorLayer\n .getPixelPosition(pos).left;\n arrow.style.left = left + editor.renderer.gutterWidth - 5 + \"px\";\n w.el.className = \"error_widget_wrapper\";\n el.className = \"error_widget \" + gutterAnno.className;\n el.innerHTML = gutterAnno.text.join(\"
\");\n el.appendChild(dom.createElement(\"div\"));\n var kb = function (_, hashId, keyString) {\n if (hashId === 0 && (keyString === \"esc\" || keyString === \"return\")) {\n w.destroy();\n return { command: \"null\" };\n }\n };\n w.destroy = function () {\n if (editor.$mouseHandler.isMousePressed)\n return;\n editor.keyBinding.removeKeyboardHandler(kb);\n session.widgetManager.removeLineWidget(w);\n editor.off(\"changeSelection\", w.destroy);\n editor.off(\"changeSession\", w.destroy);\n editor.off(\"mouseup\", w.destroy);\n editor.off(\"change\", w.destroy);\n };\n editor.keyBinding.addKeyboardHandler(kb);\n editor.on(\"changeSelection\", w.destroy);\n editor.on(\"changeSession\", w.destroy);\n editor.on(\"mouseup\", w.destroy);\n editor.on(\"change\", w.destroy);\n editor.session.widgetManager.addLineWidget(w);\n w.el.onmousedown = editor.focus.bind(editor);\n editor.renderer.scrollCursorIntoView(null, 0.5, { bottom: w.el.offsetHeight });\n};\ndom.importCssString(\"\\n .error_widget_wrapper {\\n background: inherit;\\n color: inherit;\\n border:none\\n }\\n .error_widget {\\n border-top: solid 2px;\\n border-bottom: solid 2px;\\n margin: 5px 0;\\n padding: 10px 40px;\\n white-space: pre-wrap;\\n }\\n .error_widget.ace_error, .error_widget_arrow.ace_error{\\n border-color: #ff5a5a\\n }\\n .error_widget.ace_warning, .error_widget_arrow.ace_warning{\\n border-color: #F1D817\\n }\\n .error_widget.ace_info, .error_widget_arrow.ace_info{\\n border-color: #5a5a5a\\n }\\n .error_widget.ace_ok, .error_widget_arrow.ace_ok{\\n border-color: #5aaa5a\\n }\\n .error_widget_arrow {\\n position: absolute;\\n border: solid 5px;\\n border-top-color: transparent!important;\\n border-right-color: transparent!important;\\n border-left-color: transparent!important;\\n top: -5px;\\n }\\n\", \"error_marker.css\", false);\n\n});\n\nace.define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\",\"ace/loader_build\"], function(require, exports, module){/**\n * The main class required to set up an Ace instance in the browser.\n *\n * @class Ace\n **/\n\"use strict\";\nrequire(\"./loader_build\")(exports)\nvar dom = require(\"./lib/dom\");\nvar event = require(\"./lib/event\");\nvar Range = require(\"./range\").Range;\nvar Editor = require(\"./editor\").Editor;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar UndoManager = require(\"./undomanager\").UndoManager;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nrequire(\"./worker/worker_client\");\nrequire(\"./keyboard/hash_handler\");\nrequire(\"./placeholder\");\nrequire(\"./multi_select\");\nrequire(\"./mode/folding/fold_mode\");\nrequire(\"./theme/textmate\");\nrequire(\"./ext/error_marker\");\nexports.config = require(\"./config\");\nexports.edit = function (el, options) {\n if (typeof el == \"string\") {\n var _id = el;\n el = document.getElementById(_id);\n if (!el)\n throw new Error(\"ace.edit can't find div #\" + _id);\n }\n if (el && el.env && el.env.editor instanceof Editor)\n return el.env.editor;\n var value = \"\";\n if (el && /input|textarea/i.test(el.tagName)) {\n var oldNode = el;\n value = oldNode.value;\n el = dom.createElement(\"pre\");\n oldNode.parentNode.replaceChild(el, oldNode);\n }\n else if (el) {\n value = el.textContent;\n el.innerHTML = \"\";\n }\n var doc = exports.createEditSession(value);\n var editor = new Editor(new Renderer(el), doc, options);\n var env = {\n document: doc,\n editor: editor,\n onResize: editor.resize.bind(editor, null)\n };\n if (oldNode)\n env.textarea = oldNode;\n event.addListener(window, \"resize\", env.onResize);\n editor.on(\"destroy\", function () {\n event.removeListener(window, \"resize\", env.onResize);\n env.editor.container.env = null; // prevent memory leak on old ie\n });\n editor.container.env = editor.env = env;\n return editor;\n};\nexports.createEditSession = function (text, mode) {\n var doc = new EditSession(text, mode);\n doc.setUndoManager(new UndoManager());\n return doc;\n};\nexports.Range = Range;\nexports.Editor = Editor;\nexports.EditSession = EditSession;\nexports.UndoManager = UndoManager;\nexports.VirtualRenderer = Renderer;\nexports.version = exports.config.version;\n\n}); (function() {\n ace.require([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = ace.define;\n }\n if (!window.ace)\n window.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n window.ace[key] = a[key];\n window.ace[\"default\"] = window.ace;\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = window.ace;\n }\n });\n })();\n ","ace.define(\"ace/split\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/editor\",\"ace/virtual_renderer\",\"ace/edit_session\"], function(require, exports, module){\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar lang = require(\"./lib/lang\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar Editor = require(\"./editor\").Editor;\nvar Renderer = require(\"./virtual_renderer\").VirtualRenderer;\nvar EditSession = require(\"./edit_session\").EditSession;\nvar Split = function (container, theme, splits) {\n this.BELOW = 1;\n this.BESIDE = 0;\n this.$container = container;\n this.$theme = theme;\n this.$splits = 0;\n this.$editorCSS = \"\";\n this.$editors = [];\n this.$orientation = this.BESIDE;\n this.setSplits(splits || 1);\n this.$cEditor = this.$editors[0];\n this.on(\"focus\", function (editor) {\n this.$cEditor = editor;\n }.bind(this));\n};\n(function () {\n oop.implement(this, EventEmitter);\n this.$createEditor = function () {\n var el = document.createElement(\"div\");\n el.className = this.$editorCSS;\n el.style.cssText = \"position: absolute; top:0px; bottom:0px\";\n this.$container.appendChild(el);\n var editor = new Editor(new Renderer(el, this.$theme));\n editor.on(\"focus\", function () {\n this._emit(\"focus\", editor);\n }.bind(this));\n this.$editors.push(editor);\n editor.setFontSize(this.$fontSize);\n return editor;\n };\n this.setSplits = function (splits) {\n var editor;\n if (splits < 1) {\n throw \"The number of splits have to be > 0!\";\n }\n if (splits == this.$splits) {\n return;\n }\n else if (splits > this.$splits) {\n while (this.$splits < this.$editors.length && this.$splits < splits) {\n editor = this.$editors[this.$splits];\n this.$container.appendChild(editor.container);\n editor.setFontSize(this.$fontSize);\n this.$splits++;\n }\n while (this.$splits < splits) {\n this.$createEditor();\n this.$splits++;\n }\n }\n else {\n while (this.$splits > splits) {\n editor = this.$editors[this.$splits - 1];\n this.$container.removeChild(editor.container);\n this.$splits--;\n }\n }\n this.resize();\n };\n this.getSplits = function () {\n return this.$splits;\n };\n this.getEditor = function (idx) {\n return this.$editors[idx];\n };\n this.getCurrentEditor = function () {\n return this.$cEditor;\n };\n this.focus = function () {\n this.$cEditor.focus();\n };\n this.blur = function () {\n this.$cEditor.blur();\n };\n this.setTheme = function (theme) {\n this.$editors.forEach(function (editor) {\n editor.setTheme(theme);\n });\n };\n this.setKeyboardHandler = function (keybinding) {\n this.$editors.forEach(function (editor) {\n editor.setKeyboardHandler(keybinding);\n });\n };\n this.forEach = function (callback, scope) {\n this.$editors.forEach(callback, scope);\n };\n this.$fontSize = \"\";\n this.setFontSize = function (size) {\n this.$fontSize = size;\n this.forEach(function (editor) {\n editor.setFontSize(size);\n });\n };\n this.$cloneSession = function (session) {\n var s = new EditSession(session.getDocument(), session.getMode());\n var undoManager = session.getUndoManager();\n s.setUndoManager(undoManager);\n s.setTabSize(session.getTabSize());\n s.setUseSoftTabs(session.getUseSoftTabs());\n s.setOverwrite(session.getOverwrite());\n s.setBreakpoints(session.getBreakpoints());\n s.setUseWrapMode(session.getUseWrapMode());\n s.setUseWorker(session.getUseWorker());\n s.setWrapLimitRange(session.$wrapLimitRange.min, session.$wrapLimitRange.max);\n s.$foldData = session.$cloneFoldData();\n return s;\n };\n this.setSession = function (session, idx) {\n var editor;\n if (idx == null) {\n editor = this.$cEditor;\n }\n else {\n editor = this.$editors[idx];\n }\n var isUsed = this.$editors.some(function (editor) {\n return editor.session === session;\n });\n if (isUsed) {\n session = this.$cloneSession(session);\n }\n editor.setSession(session);\n return session;\n };\n this.getOrientation = function () {\n return this.$orientation;\n };\n this.setOrientation = function (orientation) {\n if (this.$orientation == orientation) {\n return;\n }\n this.$orientation = orientation;\n this.resize();\n };\n this.resize = function () {\n var width = this.$container.clientWidth;\n var height = this.$container.clientHeight;\n var editor;\n if (this.$orientation == this.BESIDE) {\n var editorWidth = width / this.$splits;\n for (var i = 0; i < this.$splits; i++) {\n editor = this.$editors[i];\n editor.container.style.width = editorWidth + \"px\";\n editor.container.style.top = \"0px\";\n editor.container.style.left = i * editorWidth + \"px\";\n editor.container.style.height = height + \"px\";\n editor.resize();\n }\n }\n else {\n var editorHeight = height / this.$splits;\n for (var i = 0; i < this.$splits; i++) {\n editor = this.$editors[i];\n editor.container.style.width = width + \"px\";\n editor.container.style.top = i * editorHeight + \"px\";\n editor.container.style.left = \"0px\";\n editor.container.style.height = editorHeight + \"px\";\n editor.resize();\n }\n }\n };\n}).call(Split.prototype);\nexports.Split = Split;\n\n});\n\nace.define(\"ace/ext/split\",[\"require\",\"exports\",\"module\",\"ace/split\"], function(require, exports, module){\"use strict\";\nmodule.exports = require(\"../split\");\n\n}); (function() {\n ace.require([\"ace/ext/split\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","\nace.config.setModuleUrl('ace/ext/beautify', require('file-loader?esModule=false!./src-noconflict/ext-beautify.js'))\nace.config.setModuleUrl('ace/ext/code_lens', require('file-loader?esModule=false!./src-noconflict/ext-code_lens.js'))\nace.config.setModuleUrl('ace/ext/elastic_tabstops_lite', require('file-loader?esModule=false!./src-noconflict/ext-elastic_tabstops_lite.js'))\nace.config.setModuleUrl('ace/ext/emmet', require('file-loader?esModule=false!./src-noconflict/ext-emmet.js'))\nace.config.setModuleUrl('ace/ext/error_marker', require('file-loader?esModule=false!./src-noconflict/ext-error_marker.js'))\nace.config.setModuleUrl('ace/ext/hardwrap', require('file-loader?esModule=false!./src-noconflict/ext-hardwrap.js'))\nace.config.setModuleUrl('ace/ext/keyboard_menu', require('file-loader?esModule=false!./src-noconflict/ext-keybinding_menu.js'))\nace.config.setModuleUrl('ace/ext/language_tools', require('file-loader?esModule=false!./src-noconflict/ext-language_tools.js'))\nace.config.setModuleUrl('ace/ext/linking', require('file-loader?esModule=false!./src-noconflict/ext-linking.js'))\nace.config.setModuleUrl('ace/ext/modelist', require('file-loader?esModule=false!./src-noconflict/ext-modelist.js'))\nace.config.setModuleUrl('ace/ext/options', require('file-loader?esModule=false!./src-noconflict/ext-options.js'))\nace.config.setModuleUrl('ace/ext/prompt', require('file-loader?esModule=false!./src-noconflict/ext-prompt.js'))\nace.config.setModuleUrl('ace/ext/rtl', require('file-loader?esModule=false!./src-noconflict/ext-rtl.js'))\nace.config.setModuleUrl('ace/ext/searchbox', require('file-loader?esModule=false!./src-noconflict/ext-searchbox.js'))\nace.config.setModuleUrl('ace/ext/settings_menu', require('file-loader?esModule=false!./src-noconflict/ext-settings_menu.js'))\nace.config.setModuleUrl('ace/ext/spellcheck', require('file-loader?esModule=false!./src-noconflict/ext-spellcheck.js'))\nace.config.setModuleUrl('ace/ext/split', require('file-loader?esModule=false!./src-noconflict/ext-split.js'))\nace.config.setModuleUrl('ace/ext/static_highlight', require('file-loader?esModule=false!./src-noconflict/ext-static_highlight.js'))\nace.config.setModuleUrl('ace/ext/statusbar', require('file-loader?esModule=false!./src-noconflict/ext-statusbar.js'))\nace.config.setModuleUrl('ace/ext/textarea', require('file-loader?esModule=false!./src-noconflict/ext-textarea.js'))\nace.config.setModuleUrl('ace/ext/themelist', require('file-loader?esModule=false!./src-noconflict/ext-themelist.js'))\nace.config.setModuleUrl('ace/ext/whitespace', require('file-loader?esModule=false!./src-noconflict/ext-whitespace.js'))\nace.config.setModuleUrl('ace/keyboard/emacs', require('file-loader?esModule=false!./src-noconflict/keybinding-emacs.js'))\nace.config.setModuleUrl('ace/keyboard/sublime', require('file-loader?esModule=false!./src-noconflict/keybinding-sublime.js'))\nace.config.setModuleUrl('ace/keyboard/vim', require('file-loader?esModule=false!./src-noconflict/keybinding-vim.js'))\nace.config.setModuleUrl('ace/keyboard/vscode', require('file-loader?esModule=false!./src-noconflict/keybinding-vscode.js'))\nace.config.setModuleUrl('ace/mode/abap', require('file-loader?esModule=false!./src-noconflict/mode-abap.js'))\nace.config.setModuleUrl('ace/mode/abc', require('file-loader?esModule=false!./src-noconflict/mode-abc.js'))\nace.config.setModuleUrl('ace/mode/actionscript', require('file-loader?esModule=false!./src-noconflict/mode-actionscript.js'))\nace.config.setModuleUrl('ace/mode/ada', require('file-loader?esModule=false!./src-noconflict/mode-ada.js'))\nace.config.setModuleUrl('ace/mode/alda', require('file-loader?esModule=false!./src-noconflict/mode-alda.js'))\nace.config.setModuleUrl('ace/mode/apache_conf', require('file-loader?esModule=false!./src-noconflict/mode-apache_conf.js'))\nace.config.setModuleUrl('ace/mode/apex', require('file-loader?esModule=false!./src-noconflict/mode-apex.js'))\nace.config.setModuleUrl('ace/mode/applescript', require('file-loader?esModule=false!./src-noconflict/mode-applescript.js'))\nace.config.setModuleUrl('ace/mode/aql', require('file-loader?esModule=false!./src-noconflict/mode-aql.js'))\nace.config.setModuleUrl('ace/mode/asciidoc', require('file-loader?esModule=false!./src-noconflict/mode-asciidoc.js'))\nace.config.setModuleUrl('ace/mode/asl', require('file-loader?esModule=false!./src-noconflict/mode-asl.js'))\nace.config.setModuleUrl('ace/mode/assembly_x86', require('file-loader?esModule=false!./src-noconflict/mode-assembly_x86.js'))\nace.config.setModuleUrl('ace/mode/autohotkey', require('file-loader?esModule=false!./src-noconflict/mode-autohotkey.js'))\nace.config.setModuleUrl('ace/mode/batchfile', require('file-loader?esModule=false!./src-noconflict/mode-batchfile.js'))\nace.config.setModuleUrl('ace/mode/bibtex', require('file-loader?esModule=false!./src-noconflict/mode-bibtex.js'))\nace.config.setModuleUrl('ace/mode/c9search', require('file-loader?esModule=false!./src-noconflict/mode-c9search.js'))\nace.config.setModuleUrl('ace/mode/c_cpp', require('file-loader?esModule=false!./src-noconflict/mode-c_cpp.js'))\nace.config.setModuleUrl('ace/mode/cirru', require('file-loader?esModule=false!./src-noconflict/mode-cirru.js'))\nace.config.setModuleUrl('ace/mode/clojure', require('file-loader?esModule=false!./src-noconflict/mode-clojure.js'))\nace.config.setModuleUrl('ace/mode/cobol', require('file-loader?esModule=false!./src-noconflict/mode-cobol.js'))\nace.config.setModuleUrl('ace/mode/coffee', require('file-loader?esModule=false!./src-noconflict/mode-coffee.js'))\nace.config.setModuleUrl('ace/mode/coldfusion', require('file-loader?esModule=false!./src-noconflict/mode-coldfusion.js'))\nace.config.setModuleUrl('ace/mode/crystal', require('file-loader?esModule=false!./src-noconflict/mode-crystal.js'))\nace.config.setModuleUrl('ace/mode/csharp', require('file-loader?esModule=false!./src-noconflict/mode-csharp.js'))\nace.config.setModuleUrl('ace/mode/csound_document', require('file-loader?esModule=false!./src-noconflict/mode-csound_document.js'))\nace.config.setModuleUrl('ace/mode/csound_orchestra', require('file-loader?esModule=false!./src-noconflict/mode-csound_orchestra.js'))\nace.config.setModuleUrl('ace/mode/csound_score', require('file-loader?esModule=false!./src-noconflict/mode-csound_score.js'))\nace.config.setModuleUrl('ace/mode/csp', require('file-loader?esModule=false!./src-noconflict/mode-csp.js'))\nace.config.setModuleUrl('ace/mode/css', require('file-loader?esModule=false!./src-noconflict/mode-css.js'))\nace.config.setModuleUrl('ace/mode/curly', require('file-loader?esModule=false!./src-noconflict/mode-curly.js'))\nace.config.setModuleUrl('ace/mode/d', require('file-loader?esModule=false!./src-noconflict/mode-d.js'))\nace.config.setModuleUrl('ace/mode/dart', require('file-loader?esModule=false!./src-noconflict/mode-dart.js'))\nace.config.setModuleUrl('ace/mode/diff', require('file-loader?esModule=false!./src-noconflict/mode-diff.js'))\nace.config.setModuleUrl('ace/mode/django', require('file-loader?esModule=false!./src-noconflict/mode-django.js'))\nace.config.setModuleUrl('ace/mode/dockerfile', require('file-loader?esModule=false!./src-noconflict/mode-dockerfile.js'))\nace.config.setModuleUrl('ace/mode/dot', require('file-loader?esModule=false!./src-noconflict/mode-dot.js'))\nace.config.setModuleUrl('ace/mode/drools', require('file-loader?esModule=false!./src-noconflict/mode-drools.js'))\nace.config.setModuleUrl('ace/mode/edifact', require('file-loader?esModule=false!./src-noconflict/mode-edifact.js'))\nace.config.setModuleUrl('ace/mode/eiffel', require('file-loader?esModule=false!./src-noconflict/mode-eiffel.js'))\nace.config.setModuleUrl('ace/mode/ejs', require('file-loader?esModule=false!./src-noconflict/mode-ejs.js'))\nace.config.setModuleUrl('ace/mode/elixir', require('file-loader?esModule=false!./src-noconflict/mode-elixir.js'))\nace.config.setModuleUrl('ace/mode/elm', require('file-loader?esModule=false!./src-noconflict/mode-elm.js'))\nace.config.setModuleUrl('ace/mode/erlang', require('file-loader?esModule=false!./src-noconflict/mode-erlang.js'))\nace.config.setModuleUrl('ace/mode/forth', require('file-loader?esModule=false!./src-noconflict/mode-forth.js'))\nace.config.setModuleUrl('ace/mode/fortran', require('file-loader?esModule=false!./src-noconflict/mode-fortran.js'))\nace.config.setModuleUrl('ace/mode/fsharp', require('file-loader?esModule=false!./src-noconflict/mode-fsharp.js'))\nace.config.setModuleUrl('ace/mode/fsl', require('file-loader?esModule=false!./src-noconflict/mode-fsl.js'))\nace.config.setModuleUrl('ace/mode/ftl', require('file-loader?esModule=false!./src-noconflict/mode-ftl.js'))\nace.config.setModuleUrl('ace/mode/gcode', require('file-loader?esModule=false!./src-noconflict/mode-gcode.js'))\nace.config.setModuleUrl('ace/mode/gherkin', require('file-loader?esModule=false!./src-noconflict/mode-gherkin.js'))\nace.config.setModuleUrl('ace/mode/gitignore', require('file-loader?esModule=false!./src-noconflict/mode-gitignore.js'))\nace.config.setModuleUrl('ace/mode/glsl', require('file-loader?esModule=false!./src-noconflict/mode-glsl.js'))\nace.config.setModuleUrl('ace/mode/gobstones', require('file-loader?esModule=false!./src-noconflict/mode-gobstones.js'))\nace.config.setModuleUrl('ace/mode/golang', require('file-loader?esModule=false!./src-noconflict/mode-golang.js'))\nace.config.setModuleUrl('ace/mode/graphqlschema', require('file-loader?esModule=false!./src-noconflict/mode-graphqlschema.js'))\nace.config.setModuleUrl('ace/mode/groovy', require('file-loader?esModule=false!./src-noconflict/mode-groovy.js'))\nace.config.setModuleUrl('ace/mode/haml', require('file-loader?esModule=false!./src-noconflict/mode-haml.js'))\nace.config.setModuleUrl('ace/mode/handlebars', require('file-loader?esModule=false!./src-noconflict/mode-handlebars.js'))\nace.config.setModuleUrl('ace/mode/haskell', require('file-loader?esModule=false!./src-noconflict/mode-haskell.js'))\nace.config.setModuleUrl('ace/mode/haskell_cabal', require('file-loader?esModule=false!./src-noconflict/mode-haskell_cabal.js'))\nace.config.setModuleUrl('ace/mode/haxe', require('file-loader?esModule=false!./src-noconflict/mode-haxe.js'))\nace.config.setModuleUrl('ace/mode/hjson', require('file-loader?esModule=false!./src-noconflict/mode-hjson.js'))\nace.config.setModuleUrl('ace/mode/html', require('file-loader?esModule=false!./src-noconflict/mode-html.js'))\nace.config.setModuleUrl('ace/mode/html_elixir', require('file-loader?esModule=false!./src-noconflict/mode-html_elixir.js'))\nace.config.setModuleUrl('ace/mode/html_ruby', require('file-loader?esModule=false!./src-noconflict/mode-html_ruby.js'))\nace.config.setModuleUrl('ace/mode/ini', require('file-loader?esModule=false!./src-noconflict/mode-ini.js'))\nace.config.setModuleUrl('ace/mode/io', require('file-loader?esModule=false!./src-noconflict/mode-io.js'))\nace.config.setModuleUrl('ace/mode/ion', require('file-loader?esModule=false!./src-noconflict/mode-ion.js'))\nace.config.setModuleUrl('ace/mode/jack', require('file-loader?esModule=false!./src-noconflict/mode-jack.js'))\nace.config.setModuleUrl('ace/mode/jade', require('file-loader?esModule=false!./src-noconflict/mode-jade.js'))\nace.config.setModuleUrl('ace/mode/java', require('file-loader?esModule=false!./src-noconflict/mode-java.js'))\nace.config.setModuleUrl('ace/mode/javascript', require('file-loader?esModule=false!./src-noconflict/mode-javascript.js'))\nace.config.setModuleUrl('ace/mode/json', require('file-loader?esModule=false!./src-noconflict/mode-json.js'))\nace.config.setModuleUrl('ace/mode/json5', require('file-loader?esModule=false!./src-noconflict/mode-json5.js'))\nace.config.setModuleUrl('ace/mode/jsoniq', require('file-loader?esModule=false!./src-noconflict/mode-jsoniq.js'))\nace.config.setModuleUrl('ace/mode/jsp', require('file-loader?esModule=false!./src-noconflict/mode-jsp.js'))\nace.config.setModuleUrl('ace/mode/jssm', require('file-loader?esModule=false!./src-noconflict/mode-jssm.js'))\nace.config.setModuleUrl('ace/mode/jsx', require('file-loader?esModule=false!./src-noconflict/mode-jsx.js'))\nace.config.setModuleUrl('ace/mode/julia', require('file-loader?esModule=false!./src-noconflict/mode-julia.js'))\nace.config.setModuleUrl('ace/mode/kotlin', require('file-loader?esModule=false!./src-noconflict/mode-kotlin.js'))\nace.config.setModuleUrl('ace/mode/latex', require('file-loader?esModule=false!./src-noconflict/mode-latex.js'))\nace.config.setModuleUrl('ace/mode/latte', require('file-loader?esModule=false!./src-noconflict/mode-latte.js'))\nace.config.setModuleUrl('ace/mode/less', require('file-loader?esModule=false!./src-noconflict/mode-less.js'))\nace.config.setModuleUrl('ace/mode/liquid', require('file-loader?esModule=false!./src-noconflict/mode-liquid.js'))\nace.config.setModuleUrl('ace/mode/lisp', require('file-loader?esModule=false!./src-noconflict/mode-lisp.js'))\nace.config.setModuleUrl('ace/mode/livescript', require('file-loader?esModule=false!./src-noconflict/mode-livescript.js'))\nace.config.setModuleUrl('ace/mode/logiql', require('file-loader?esModule=false!./src-noconflict/mode-logiql.js'))\nace.config.setModuleUrl('ace/mode/logtalk', require('file-loader?esModule=false!./src-noconflict/mode-logtalk.js'))\nace.config.setModuleUrl('ace/mode/lsl', require('file-loader?esModule=false!./src-noconflict/mode-lsl.js'))\nace.config.setModuleUrl('ace/mode/lua', require('file-loader?esModule=false!./src-noconflict/mode-lua.js'))\nace.config.setModuleUrl('ace/mode/luapage', require('file-loader?esModule=false!./src-noconflict/mode-luapage.js'))\nace.config.setModuleUrl('ace/mode/lucene', require('file-loader?esModule=false!./src-noconflict/mode-lucene.js'))\nace.config.setModuleUrl('ace/mode/makefile', require('file-loader?esModule=false!./src-noconflict/mode-makefile.js'))\nace.config.setModuleUrl('ace/mode/markdown', require('file-loader?esModule=false!./src-noconflict/mode-markdown.js'))\nace.config.setModuleUrl('ace/mode/mask', require('file-loader?esModule=false!./src-noconflict/mode-mask.js'))\nace.config.setModuleUrl('ace/mode/matlab', require('file-loader?esModule=false!./src-noconflict/mode-matlab.js'))\nace.config.setModuleUrl('ace/mode/maze', require('file-loader?esModule=false!./src-noconflict/mode-maze.js'))\nace.config.setModuleUrl('ace/mode/mediawiki', require('file-loader?esModule=false!./src-noconflict/mode-mediawiki.js'))\nace.config.setModuleUrl('ace/mode/mel', require('file-loader?esModule=false!./src-noconflict/mode-mel.js'))\nace.config.setModuleUrl('ace/mode/mips', require('file-loader?esModule=false!./src-noconflict/mode-mips.js'))\nace.config.setModuleUrl('ace/mode/mixal', require('file-loader?esModule=false!./src-noconflict/mode-mixal.js'))\nace.config.setModuleUrl('ace/mode/mushcode', require('file-loader?esModule=false!./src-noconflict/mode-mushcode.js'))\nace.config.setModuleUrl('ace/mode/mysql', require('file-loader?esModule=false!./src-noconflict/mode-mysql.js'))\nace.config.setModuleUrl('ace/mode/nginx', require('file-loader?esModule=false!./src-noconflict/mode-nginx.js'))\nace.config.setModuleUrl('ace/mode/nim', require('file-loader?esModule=false!./src-noconflict/mode-nim.js'))\nace.config.setModuleUrl('ace/mode/nix', require('file-loader?esModule=false!./src-noconflict/mode-nix.js'))\nace.config.setModuleUrl('ace/mode/nsis', require('file-loader?esModule=false!./src-noconflict/mode-nsis.js'))\nace.config.setModuleUrl('ace/mode/nunjucks', require('file-loader?esModule=false!./src-noconflict/mode-nunjucks.js'))\nace.config.setModuleUrl('ace/mode/objectivec', require('file-loader?esModule=false!./src-noconflict/mode-objectivec.js'))\nace.config.setModuleUrl('ace/mode/ocaml', require('file-loader?esModule=false!./src-noconflict/mode-ocaml.js'))\nace.config.setModuleUrl('ace/mode/partiql', require('file-loader?esModule=false!./src-noconflict/mode-partiql.js'))\nace.config.setModuleUrl('ace/mode/pascal', require('file-loader?esModule=false!./src-noconflict/mode-pascal.js'))\nace.config.setModuleUrl('ace/mode/perl', require('file-loader?esModule=false!./src-noconflict/mode-perl.js'))\nace.config.setModuleUrl('ace/mode/pgsql', require('file-loader?esModule=false!./src-noconflict/mode-pgsql.js'))\nace.config.setModuleUrl('ace/mode/php', require('file-loader?esModule=false!./src-noconflict/mode-php.js'))\nace.config.setModuleUrl('ace/mode/php_laravel_blade', require('file-loader?esModule=false!./src-noconflict/mode-php_laravel_blade.js'))\nace.config.setModuleUrl('ace/mode/pig', require('file-loader?esModule=false!./src-noconflict/mode-pig.js'))\nace.config.setModuleUrl('ace/mode/plain_text', require('file-loader?esModule=false!./src-noconflict/mode-plain_text.js'))\nace.config.setModuleUrl('ace/mode/powershell', require('file-loader?esModule=false!./src-noconflict/mode-powershell.js'))\nace.config.setModuleUrl('ace/mode/praat', require('file-loader?esModule=false!./src-noconflict/mode-praat.js'))\nace.config.setModuleUrl('ace/mode/prisma', require('file-loader?esModule=false!./src-noconflict/mode-prisma.js'))\nace.config.setModuleUrl('ace/mode/prolog', require('file-loader?esModule=false!./src-noconflict/mode-prolog.js'))\nace.config.setModuleUrl('ace/mode/properties', require('file-loader?esModule=false!./src-noconflict/mode-properties.js'))\nace.config.setModuleUrl('ace/mode/protobuf', require('file-loader?esModule=false!./src-noconflict/mode-protobuf.js'))\nace.config.setModuleUrl('ace/mode/puppet', require('file-loader?esModule=false!./src-noconflict/mode-puppet.js'))\nace.config.setModuleUrl('ace/mode/python', require('file-loader?esModule=false!./src-noconflict/mode-python.js'))\nace.config.setModuleUrl('ace/mode/qml', require('file-loader?esModule=false!./src-noconflict/mode-qml.js'))\nace.config.setModuleUrl('ace/mode/r', require('file-loader?esModule=false!./src-noconflict/mode-r.js'))\nace.config.setModuleUrl('ace/mode/raku', require('file-loader?esModule=false!./src-noconflict/mode-raku.js'))\nace.config.setModuleUrl('ace/mode/razor', require('file-loader?esModule=false!./src-noconflict/mode-razor.js'))\nace.config.setModuleUrl('ace/mode/rdoc', require('file-loader?esModule=false!./src-noconflict/mode-rdoc.js'))\nace.config.setModuleUrl('ace/mode/red', require('file-loader?esModule=false!./src-noconflict/mode-red.js'))\nace.config.setModuleUrl('ace/mode/redshift', require('file-loader?esModule=false!./src-noconflict/mode-redshift.js'))\nace.config.setModuleUrl('ace/mode/rhtml', require('file-loader?esModule=false!./src-noconflict/mode-rhtml.js'))\nace.config.setModuleUrl('ace/mode/robot', require('file-loader?esModule=false!./src-noconflict/mode-robot.js'))\nace.config.setModuleUrl('ace/mode/rst', require('file-loader?esModule=false!./src-noconflict/mode-rst.js'))\nace.config.setModuleUrl('ace/mode/ruby', require('file-loader?esModule=false!./src-noconflict/mode-ruby.js'))\nace.config.setModuleUrl('ace/mode/rust', require('file-loader?esModule=false!./src-noconflict/mode-rust.js'))\nace.config.setModuleUrl('ace/mode/sac', require('file-loader?esModule=false!./src-noconflict/mode-sac.js'))\nace.config.setModuleUrl('ace/mode/sass', require('file-loader?esModule=false!./src-noconflict/mode-sass.js'))\nace.config.setModuleUrl('ace/mode/scad', require('file-loader?esModule=false!./src-noconflict/mode-scad.js'))\nace.config.setModuleUrl('ace/mode/scala', require('file-loader?esModule=false!./src-noconflict/mode-scala.js'))\nace.config.setModuleUrl('ace/mode/scheme', require('file-loader?esModule=false!./src-noconflict/mode-scheme.js'))\nace.config.setModuleUrl('ace/mode/scrypt', require('file-loader?esModule=false!./src-noconflict/mode-scrypt.js'))\nace.config.setModuleUrl('ace/mode/scss', require('file-loader?esModule=false!./src-noconflict/mode-scss.js'))\nace.config.setModuleUrl('ace/mode/sh', require('file-loader?esModule=false!./src-noconflict/mode-sh.js'))\nace.config.setModuleUrl('ace/mode/sjs', require('file-loader?esModule=false!./src-noconflict/mode-sjs.js'))\nace.config.setModuleUrl('ace/mode/slim', require('file-loader?esModule=false!./src-noconflict/mode-slim.js'))\nace.config.setModuleUrl('ace/mode/smarty', require('file-loader?esModule=false!./src-noconflict/mode-smarty.js'))\nace.config.setModuleUrl('ace/mode/smithy', require('file-loader?esModule=false!./src-noconflict/mode-smithy.js'))\nace.config.setModuleUrl('ace/mode/snippets', require('file-loader?esModule=false!./src-noconflict/mode-snippets.js'))\nace.config.setModuleUrl('ace/mode/soy_template', require('file-loader?esModule=false!./src-noconflict/mode-soy_template.js'))\nace.config.setModuleUrl('ace/mode/space', require('file-loader?esModule=false!./src-noconflict/mode-space.js'))\nace.config.setModuleUrl('ace/mode/sparql', require('file-loader?esModule=false!./src-noconflict/mode-sparql.js'))\nace.config.setModuleUrl('ace/mode/sql', require('file-loader?esModule=false!./src-noconflict/mode-sql.js'))\nace.config.setModuleUrl('ace/mode/sqlserver', require('file-loader?esModule=false!./src-noconflict/mode-sqlserver.js'))\nace.config.setModuleUrl('ace/mode/stylus', require('file-loader?esModule=false!./src-noconflict/mode-stylus.js'))\nace.config.setModuleUrl('ace/mode/svg', require('file-loader?esModule=false!./src-noconflict/mode-svg.js'))\nace.config.setModuleUrl('ace/mode/swift', require('file-loader?esModule=false!./src-noconflict/mode-swift.js'))\nace.config.setModuleUrl('ace/mode/tcl', require('file-loader?esModule=false!./src-noconflict/mode-tcl.js'))\nace.config.setModuleUrl('ace/mode/terraform', require('file-loader?esModule=false!./src-noconflict/mode-terraform.js'))\nace.config.setModuleUrl('ace/mode/tex', require('file-loader?esModule=false!./src-noconflict/mode-tex.js'))\nace.config.setModuleUrl('ace/mode/text', require('file-loader?esModule=false!./src-noconflict/mode-text.js'))\nace.config.setModuleUrl('ace/mode/textile', require('file-loader?esModule=false!./src-noconflict/mode-textile.js'))\nace.config.setModuleUrl('ace/mode/toml', require('file-loader?esModule=false!./src-noconflict/mode-toml.js'))\nace.config.setModuleUrl('ace/mode/tsx', require('file-loader?esModule=false!./src-noconflict/mode-tsx.js'))\nace.config.setModuleUrl('ace/mode/turtle', require('file-loader?esModule=false!./src-noconflict/mode-turtle.js'))\nace.config.setModuleUrl('ace/mode/twig', require('file-loader?esModule=false!./src-noconflict/mode-twig.js'))\nace.config.setModuleUrl('ace/mode/typescript', require('file-loader?esModule=false!./src-noconflict/mode-typescript.js'))\nace.config.setModuleUrl('ace/mode/vala', require('file-loader?esModule=false!./src-noconflict/mode-vala.js'))\nace.config.setModuleUrl('ace/mode/vbscript', require('file-loader?esModule=false!./src-noconflict/mode-vbscript.js'))\nace.config.setModuleUrl('ace/mode/velocity', require('file-loader?esModule=false!./src-noconflict/mode-velocity.js'))\nace.config.setModuleUrl('ace/mode/verilog', require('file-loader?esModule=false!./src-noconflict/mode-verilog.js'))\nace.config.setModuleUrl('ace/mode/vhdl', require('file-loader?esModule=false!./src-noconflict/mode-vhdl.js'))\nace.config.setModuleUrl('ace/mode/visualforce', require('file-loader?esModule=false!./src-noconflict/mode-visualforce.js'))\nace.config.setModuleUrl('ace/mode/wollok', require('file-loader?esModule=false!./src-noconflict/mode-wollok.js'))\nace.config.setModuleUrl('ace/mode/xml', require('file-loader?esModule=false!./src-noconflict/mode-xml.js'))\nace.config.setModuleUrl('ace/mode/xquery', require('file-loader?esModule=false!./src-noconflict/mode-xquery.js'))\nace.config.setModuleUrl('ace/mode/yaml', require('file-loader?esModule=false!./src-noconflict/mode-yaml.js'))\nace.config.setModuleUrl('ace/mode/zeek', require('file-loader?esModule=false!./src-noconflict/mode-zeek.js'))\n\nace.config.setModuleUrl('ace/theme/ambiance', require('file-loader?esModule=false!./src-noconflict/theme-ambiance.js'))\nace.config.setModuleUrl('ace/theme/chaos', require('file-loader?esModule=false!./src-noconflict/theme-chaos.js'))\nace.config.setModuleUrl('ace/theme/chrome', require('file-loader?esModule=false!./src-noconflict/theme-chrome.js'))\nace.config.setModuleUrl('ace/theme/cloud9_day', require('file-loader?esModule=false!./src-noconflict/theme-cloud9_day.js'))\nace.config.setModuleUrl('ace/theme/cloud9_night', require('file-loader?esModule=false!./src-noconflict/theme-cloud9_night.js'))\nace.config.setModuleUrl('ace/theme/cloud9_night_low_color', require('file-loader?esModule=false!./src-noconflict/theme-cloud9_night_low_color.js'))\nace.config.setModuleUrl('ace/theme/clouds', require('file-loader?esModule=false!./src-noconflict/theme-clouds.js'))\nace.config.setModuleUrl('ace/theme/clouds_midnight', require('file-loader?esModule=false!./src-noconflict/theme-clouds_midnight.js'))\nace.config.setModuleUrl('ace/theme/cobalt', require('file-loader?esModule=false!./src-noconflict/theme-cobalt.js'))\nace.config.setModuleUrl('ace/theme/crimson_editor', require('file-loader?esModule=false!./src-noconflict/theme-crimson_editor.js'))\nace.config.setModuleUrl('ace/theme/dawn', require('file-loader?esModule=false!./src-noconflict/theme-dawn.js'))\nace.config.setModuleUrl('ace/theme/dracula', require('file-loader?esModule=false!./src-noconflict/theme-dracula.js'))\nace.config.setModuleUrl('ace/theme/dreamweaver', require('file-loader?esModule=false!./src-noconflict/theme-dreamweaver.js'))\nace.config.setModuleUrl('ace/theme/eclipse', require('file-loader?esModule=false!./src-noconflict/theme-eclipse.js'))\nace.config.setModuleUrl('ace/theme/github', require('file-loader?esModule=false!./src-noconflict/theme-github.js'))\nace.config.setModuleUrl('ace/theme/gob', require('file-loader?esModule=false!./src-noconflict/theme-gob.js'))\nace.config.setModuleUrl('ace/theme/gruvbox', require('file-loader?esModule=false!./src-noconflict/theme-gruvbox.js'))\nace.config.setModuleUrl('ace/theme/gruvbox_dark_hard', require('file-loader?esModule=false!./src-noconflict/theme-gruvbox_dark_hard.js'))\nace.config.setModuleUrl('ace/theme/gruvbox_light_hard', require('file-loader?esModule=false!./src-noconflict/theme-gruvbox_light_hard.js'))\nace.config.setModuleUrl('ace/theme/idle_fingers', require('file-loader?esModule=false!./src-noconflict/theme-idle_fingers.js'))\nace.config.setModuleUrl('ace/theme/iplastic', require('file-loader?esModule=false!./src-noconflict/theme-iplastic.js'))\nace.config.setModuleUrl('ace/theme/katzenmilch', require('file-loader?esModule=false!./src-noconflict/theme-katzenmilch.js'))\nace.config.setModuleUrl('ace/theme/kr_theme', require('file-loader?esModule=false!./src-noconflict/theme-kr_theme.js'))\nace.config.setModuleUrl('ace/theme/kuroir', require('file-loader?esModule=false!./src-noconflict/theme-kuroir.js'))\nace.config.setModuleUrl('ace/theme/merbivore', require('file-loader?esModule=false!./src-noconflict/theme-merbivore.js'))\nace.config.setModuleUrl('ace/theme/merbivore_soft', require('file-loader?esModule=false!./src-noconflict/theme-merbivore_soft.js'))\nace.config.setModuleUrl('ace/theme/mono_industrial', require('file-loader?esModule=false!./src-noconflict/theme-mono_industrial.js'))\nace.config.setModuleUrl('ace/theme/monokai', require('file-loader?esModule=false!./src-noconflict/theme-monokai.js'))\nace.config.setModuleUrl('ace/theme/nord_dark', require('file-loader?esModule=false!./src-noconflict/theme-nord_dark.js'))\nace.config.setModuleUrl('ace/theme/one_dark', require('file-loader?esModule=false!./src-noconflict/theme-one_dark.js'))\nace.config.setModuleUrl('ace/theme/pastel_on_dark', require('file-loader?esModule=false!./src-noconflict/theme-pastel_on_dark.js'))\nace.config.setModuleUrl('ace/theme/solarized_dark', require('file-loader?esModule=false!./src-noconflict/theme-solarized_dark.js'))\nace.config.setModuleUrl('ace/theme/solarized_light', require('file-loader?esModule=false!./src-noconflict/theme-solarized_light.js'))\nace.config.setModuleUrl('ace/theme/sqlserver', require('file-loader?esModule=false!./src-noconflict/theme-sqlserver.js'))\nace.config.setModuleUrl('ace/theme/terminal', require('file-loader?esModule=false!./src-noconflict/theme-terminal.js'))\nace.config.setModuleUrl('ace/theme/textmate', require('file-loader?esModule=false!./src-noconflict/theme-textmate.js'))\nace.config.setModuleUrl('ace/theme/tomorrow', require('file-loader?esModule=false!./src-noconflict/theme-tomorrow.js'))\nace.config.setModuleUrl('ace/theme/tomorrow_night', require('file-loader?esModule=false!./src-noconflict/theme-tomorrow_night.js'))\nace.config.setModuleUrl('ace/theme/tomorrow_night_blue', require('file-loader?esModule=false!./src-noconflict/theme-tomorrow_night_blue.js'))\nace.config.setModuleUrl('ace/theme/tomorrow_night_bright', require('file-loader?esModule=false!./src-noconflict/theme-tomorrow_night_bright.js'))\nace.config.setModuleUrl('ace/theme/tomorrow_night_eighties', require('file-loader?esModule=false!./src-noconflict/theme-tomorrow_night_eighties.js'))\nace.config.setModuleUrl('ace/theme/twilight', require('file-loader?esModule=false!./src-noconflict/theme-twilight.js'))\nace.config.setModuleUrl('ace/theme/vibrant_ink', require('file-loader?esModule=false!./src-noconflict/theme-vibrant_ink.js'))\nace.config.setModuleUrl('ace/theme/xcode', require('file-loader?esModule=false!./src-noconflict/theme-xcode.js'))\nace.config.setModuleUrl('ace/mode/base_worker', require('file-loader?esModule=false!./src-noconflict/worker-base.js'))\nace.config.setModuleUrl('ace/mode/coffee_worker', require('file-loader?esModule=false!./src-noconflict/worker-coffee.js'))\nace.config.setModuleUrl('ace/mode/css_worker', require('file-loader?esModule=false!./src-noconflict/worker-css.js'))\nace.config.setModuleUrl('ace/mode/html_worker', require('file-loader?esModule=false!./src-noconflict/worker-html.js'))\nace.config.setModuleUrl('ace/mode/javascript_worker', require('file-loader?esModule=false!./src-noconflict/worker-javascript.js'))\nace.config.setModuleUrl('ace/mode/json_worker', require('file-loader?esModule=false!./src-noconflict/worker-json.js'))\nace.config.setModuleUrl('ace/mode/lua_worker', require('file-loader?esModule=false!./src-noconflict/worker-lua.js'))\nace.config.setModuleUrl('ace/mode/php_worker', require('file-loader?esModule=false!./src-noconflict/worker-php.js'))\nace.config.setModuleUrl('ace/mode/xml_worker', require('file-loader?esModule=false!./src-noconflict/worker-xml.js'))\nace.config.setModuleUrl('ace/mode/xquery_worker', require('file-loader?esModule=false!./src-noconflict/worker-xquery.js'))\nace.config.setModuleUrl('ace/mode/yaml_worker', require('file-loader?esModule=false!./src-noconflict/worker-yaml.js'))\nace.config.setModuleUrl('ace/snippets/abap', require('file-loader?esModule=false!./src-noconflict/snippets/abap.js'))\nace.config.setModuleUrl('ace/snippets/abc', require('file-loader?esModule=false!./src-noconflict/snippets/abc.js'))\nace.config.setModuleUrl('ace/snippets/actionscript', require('file-loader?esModule=false!./src-noconflict/snippets/actionscript.js'))\nace.config.setModuleUrl('ace/snippets/ada', require('file-loader?esModule=false!./src-noconflict/snippets/ada.js'))\nace.config.setModuleUrl('ace/snippets/alda', require('file-loader?esModule=false!./src-noconflict/snippets/alda.js'))\nace.config.setModuleUrl('ace/snippets/apache_conf', require('file-loader?esModule=false!./src-noconflict/snippets/apache_conf.js'))\nace.config.setModuleUrl('ace/snippets/apex', require('file-loader?esModule=false!./src-noconflict/snippets/apex.js'))\nace.config.setModuleUrl('ace/snippets/applescript', require('file-loader?esModule=false!./src-noconflict/snippets/applescript.js'))\nace.config.setModuleUrl('ace/snippets/aql', require('file-loader?esModule=false!./src-noconflict/snippets/aql.js'))\nace.config.setModuleUrl('ace/snippets/asciidoc', require('file-loader?esModule=false!./src-noconflict/snippets/asciidoc.js'))\nace.config.setModuleUrl('ace/snippets/asl', require('file-loader?esModule=false!./src-noconflict/snippets/asl.js'))\nace.config.setModuleUrl('ace/snippets/assembly_x86', require('file-loader?esModule=false!./src-noconflict/snippets/assembly_x86.js'))\nace.config.setModuleUrl('ace/snippets/autohotkey', require('file-loader?esModule=false!./src-noconflict/snippets/autohotkey.js'))\nace.config.setModuleUrl('ace/snippets/batchfile', require('file-loader?esModule=false!./src-noconflict/snippets/batchfile.js'))\nace.config.setModuleUrl('ace/snippets/bibtex', require('file-loader?esModule=false!./src-noconflict/snippets/bibtex.js'))\nace.config.setModuleUrl('ace/snippets/c9search', require('file-loader?esModule=false!./src-noconflict/snippets/c9search.js'))\nace.config.setModuleUrl('ace/snippets/c_cpp', require('file-loader?esModule=false!./src-noconflict/snippets/c_cpp.js'))\nace.config.setModuleUrl('ace/snippets/cirru', require('file-loader?esModule=false!./src-noconflict/snippets/cirru.js'))\nace.config.setModuleUrl('ace/snippets/clojure', require('file-loader?esModule=false!./src-noconflict/snippets/clojure.js'))\nace.config.setModuleUrl('ace/snippets/cobol', require('file-loader?esModule=false!./src-noconflict/snippets/cobol.js'))\nace.config.setModuleUrl('ace/snippets/coffee', require('file-loader?esModule=false!./src-noconflict/snippets/coffee.js'))\nace.config.setModuleUrl('ace/snippets/coldfusion', require('file-loader?esModule=false!./src-noconflict/snippets/coldfusion.js'))\nace.config.setModuleUrl('ace/snippets/crystal', require('file-loader?esModule=false!./src-noconflict/snippets/crystal.js'))\nace.config.setModuleUrl('ace/snippets/csharp', require('file-loader?esModule=false!./src-noconflict/snippets/csharp.js'))\nace.config.setModuleUrl('ace/snippets/csound_document', require('file-loader?esModule=false!./src-noconflict/snippets/csound_document.js'))\nace.config.setModuleUrl('ace/snippets/csound_orchestra', require('file-loader?esModule=false!./src-noconflict/snippets/csound_orchestra.js'))\nace.config.setModuleUrl('ace/snippets/csound_score', require('file-loader?esModule=false!./src-noconflict/snippets/csound_score.js'))\nace.config.setModuleUrl('ace/snippets/csp', require('file-loader?esModule=false!./src-noconflict/snippets/csp.js'))\nace.config.setModuleUrl('ace/snippets/css', require('file-loader?esModule=false!./src-noconflict/snippets/css.js'))\nace.config.setModuleUrl('ace/snippets/curly', require('file-loader?esModule=false!./src-noconflict/snippets/curly.js'))\nace.config.setModuleUrl('ace/snippets/d', require('file-loader?esModule=false!./src-noconflict/snippets/d.js'))\nace.config.setModuleUrl('ace/snippets/dart', require('file-loader?esModule=false!./src-noconflict/snippets/dart.js'))\nace.config.setModuleUrl('ace/snippets/diff', require('file-loader?esModule=false!./src-noconflict/snippets/diff.js'))\nace.config.setModuleUrl('ace/snippets/django', require('file-loader?esModule=false!./src-noconflict/snippets/django.js'))\nace.config.setModuleUrl('ace/snippets/dockerfile', require('file-loader?esModule=false!./src-noconflict/snippets/dockerfile.js'))\nace.config.setModuleUrl('ace/snippets/dot', require('file-loader?esModule=false!./src-noconflict/snippets/dot.js'))\nace.config.setModuleUrl('ace/snippets/drools', require('file-loader?esModule=false!./src-noconflict/snippets/drools.js'))\nace.config.setModuleUrl('ace/snippets/edifact', require('file-loader?esModule=false!./src-noconflict/snippets/edifact.js'))\nace.config.setModuleUrl('ace/snippets/eiffel', require('file-loader?esModule=false!./src-noconflict/snippets/eiffel.js'))\nace.config.setModuleUrl('ace/snippets/ejs', require('file-loader?esModule=false!./src-noconflict/snippets/ejs.js'))\nace.config.setModuleUrl('ace/snippets/elixir', require('file-loader?esModule=false!./src-noconflict/snippets/elixir.js'))\nace.config.setModuleUrl('ace/snippets/elm', require('file-loader?esModule=false!./src-noconflict/snippets/elm.js'))\nace.config.setModuleUrl('ace/snippets/erlang', require('file-loader?esModule=false!./src-noconflict/snippets/erlang.js'))\nace.config.setModuleUrl('ace/snippets/forth', require('file-loader?esModule=false!./src-noconflict/snippets/forth.js'))\nace.config.setModuleUrl('ace/snippets/fortran', require('file-loader?esModule=false!./src-noconflict/snippets/fortran.js'))\nace.config.setModuleUrl('ace/snippets/fsharp', require('file-loader?esModule=false!./src-noconflict/snippets/fsharp.js'))\nace.config.setModuleUrl('ace/snippets/fsl', require('file-loader?esModule=false!./src-noconflict/snippets/fsl.js'))\nace.config.setModuleUrl('ace/snippets/ftl', require('file-loader?esModule=false!./src-noconflict/snippets/ftl.js'))\nace.config.setModuleUrl('ace/snippets/gcode', require('file-loader?esModule=false!./src-noconflict/snippets/gcode.js'))\nace.config.setModuleUrl('ace/snippets/gherkin', require('file-loader?esModule=false!./src-noconflict/snippets/gherkin.js'))\nace.config.setModuleUrl('ace/snippets/gitignore', require('file-loader?esModule=false!./src-noconflict/snippets/gitignore.js'))\nace.config.setModuleUrl('ace/snippets/glsl', require('file-loader?esModule=false!./src-noconflict/snippets/glsl.js'))\nace.config.setModuleUrl('ace/snippets/gobstones', require('file-loader?esModule=false!./src-noconflict/snippets/gobstones.js'))\nace.config.setModuleUrl('ace/snippets/golang', require('file-loader?esModule=false!./src-noconflict/snippets/golang.js'))\nace.config.setModuleUrl('ace/snippets/graphqlschema', require('file-loader?esModule=false!./src-noconflict/snippets/graphqlschema.js'))\nace.config.setModuleUrl('ace/snippets/groovy', require('file-loader?esModule=false!./src-noconflict/snippets/groovy.js'))\nace.config.setModuleUrl('ace/snippets/haml', require('file-loader?esModule=false!./src-noconflict/snippets/haml.js'))\nace.config.setModuleUrl('ace/snippets/handlebars', require('file-loader?esModule=false!./src-noconflict/snippets/handlebars.js'))\nace.config.setModuleUrl('ace/snippets/haskell', require('file-loader?esModule=false!./src-noconflict/snippets/haskell.js'))\nace.config.setModuleUrl('ace/snippets/haskell_cabal', require('file-loader?esModule=false!./src-noconflict/snippets/haskell_cabal.js'))\nace.config.setModuleUrl('ace/snippets/haxe', require('file-loader?esModule=false!./src-noconflict/snippets/haxe.js'))\nace.config.setModuleUrl('ace/snippets/hjson', require('file-loader?esModule=false!./src-noconflict/snippets/hjson.js'))\nace.config.setModuleUrl('ace/snippets/html', require('file-loader?esModule=false!./src-noconflict/snippets/html.js'))\nace.config.setModuleUrl('ace/snippets/html_elixir', require('file-loader?esModule=false!./src-noconflict/snippets/html_elixir.js'))\nace.config.setModuleUrl('ace/snippets/html_ruby', require('file-loader?esModule=false!./src-noconflict/snippets/html_ruby.js'))\nace.config.setModuleUrl('ace/snippets/ini', require('file-loader?esModule=false!./src-noconflict/snippets/ini.js'))\nace.config.setModuleUrl('ace/snippets/io', require('file-loader?esModule=false!./src-noconflict/snippets/io.js'))\nace.config.setModuleUrl('ace/snippets/ion', require('file-loader?esModule=false!./src-noconflict/snippets/ion.js'))\nace.config.setModuleUrl('ace/snippets/jack', require('file-loader?esModule=false!./src-noconflict/snippets/jack.js'))\nace.config.setModuleUrl('ace/snippets/jade', require('file-loader?esModule=false!./src-noconflict/snippets/jade.js'))\nace.config.setModuleUrl('ace/snippets/java', require('file-loader?esModule=false!./src-noconflict/snippets/java.js'))\nace.config.setModuleUrl('ace/snippets/javascript', require('file-loader?esModule=false!./src-noconflict/snippets/javascript.js'))\nace.config.setModuleUrl('ace/snippets/json', require('file-loader?esModule=false!./src-noconflict/snippets/json.js'))\nace.config.setModuleUrl('ace/snippets/json5', require('file-loader?esModule=false!./src-noconflict/snippets/json5.js'))\nace.config.setModuleUrl('ace/snippets/jsoniq', require('file-loader?esModule=false!./src-noconflict/snippets/jsoniq.js'))\nace.config.setModuleUrl('ace/snippets/jsp', require('file-loader?esModule=false!./src-noconflict/snippets/jsp.js'))\nace.config.setModuleUrl('ace/snippets/jssm', require('file-loader?esModule=false!./src-noconflict/snippets/jssm.js'))\nace.config.setModuleUrl('ace/snippets/jsx', require('file-loader?esModule=false!./src-noconflict/snippets/jsx.js'))\nace.config.setModuleUrl('ace/snippets/julia', require('file-loader?esModule=false!./src-noconflict/snippets/julia.js'))\nace.config.setModuleUrl('ace/snippets/kotlin', require('file-loader?esModule=false!./src-noconflict/snippets/kotlin.js'))\nace.config.setModuleUrl('ace/snippets/latex', require('file-loader?esModule=false!./src-noconflict/snippets/latex.js'))\nace.config.setModuleUrl('ace/snippets/latte', require('file-loader?esModule=false!./src-noconflict/snippets/latte.js'))\nace.config.setModuleUrl('ace/snippets/less', require('file-loader?esModule=false!./src-noconflict/snippets/less.js'))\nace.config.setModuleUrl('ace/snippets/liquid', require('file-loader?esModule=false!./src-noconflict/snippets/liquid.js'))\nace.config.setModuleUrl('ace/snippets/lisp', require('file-loader?esModule=false!./src-noconflict/snippets/lisp.js'))\nace.config.setModuleUrl('ace/snippets/livescript', require('file-loader?esModule=false!./src-noconflict/snippets/livescript.js'))\nace.config.setModuleUrl('ace/snippets/logiql', require('file-loader?esModule=false!./src-noconflict/snippets/logiql.js'))\nace.config.setModuleUrl('ace/snippets/logtalk', require('file-loader?esModule=false!./src-noconflict/snippets/logtalk.js'))\nace.config.setModuleUrl('ace/snippets/lsl', require('file-loader?esModule=false!./src-noconflict/snippets/lsl.js'))\nace.config.setModuleUrl('ace/snippets/lua', require('file-loader?esModule=false!./src-noconflict/snippets/lua.js'))\nace.config.setModuleUrl('ace/snippets/luapage', require('file-loader?esModule=false!./src-noconflict/snippets/luapage.js'))\nace.config.setModuleUrl('ace/snippets/lucene', require('file-loader?esModule=false!./src-noconflict/snippets/lucene.js'))\nace.config.setModuleUrl('ace/snippets/makefile', require('file-loader?esModule=false!./src-noconflict/snippets/makefile.js'))\nace.config.setModuleUrl('ace/snippets/markdown', require('file-loader?esModule=false!./src-noconflict/snippets/markdown.js'))\nace.config.setModuleUrl('ace/snippets/mask', require('file-loader?esModule=false!./src-noconflict/snippets/mask.js'))\nace.config.setModuleUrl('ace/snippets/matlab', require('file-loader?esModule=false!./src-noconflict/snippets/matlab.js'))\nace.config.setModuleUrl('ace/snippets/maze', require('file-loader?esModule=false!./src-noconflict/snippets/maze.js'))\nace.config.setModuleUrl('ace/snippets/mediawiki', require('file-loader?esModule=false!./src-noconflict/snippets/mediawiki.js'))\nace.config.setModuleUrl('ace/snippets/mel', require('file-loader?esModule=false!./src-noconflict/snippets/mel.js'))\nace.config.setModuleUrl('ace/snippets/mips', require('file-loader?esModule=false!./src-noconflict/snippets/mips.js'))\nace.config.setModuleUrl('ace/snippets/mixal', require('file-loader?esModule=false!./src-noconflict/snippets/mixal.js'))\nace.config.setModuleUrl('ace/snippets/mushcode', require('file-loader?esModule=false!./src-noconflict/snippets/mushcode.js'))\nace.config.setModuleUrl('ace/snippets/mysql', require('file-loader?esModule=false!./src-noconflict/snippets/mysql.js'))\nace.config.setModuleUrl('ace/snippets/nginx', require('file-loader?esModule=false!./src-noconflict/snippets/nginx.js'))\nace.config.setModuleUrl('ace/snippets/nim', require('file-loader?esModule=false!./src-noconflict/snippets/nim.js'))\nace.config.setModuleUrl('ace/snippets/nix', require('file-loader?esModule=false!./src-noconflict/snippets/nix.js'))\nace.config.setModuleUrl('ace/snippets/nsis', require('file-loader?esModule=false!./src-noconflict/snippets/nsis.js'))\nace.config.setModuleUrl('ace/snippets/nunjucks', require('file-loader?esModule=false!./src-noconflict/snippets/nunjucks.js'))\nace.config.setModuleUrl('ace/snippets/objectivec', require('file-loader?esModule=false!./src-noconflict/snippets/objectivec.js'))\nace.config.setModuleUrl('ace/snippets/ocaml', require('file-loader?esModule=false!./src-noconflict/snippets/ocaml.js'))\nace.config.setModuleUrl('ace/snippets/partiql', require('file-loader?esModule=false!./src-noconflict/snippets/partiql.js'))\nace.config.setModuleUrl('ace/snippets/pascal', require('file-loader?esModule=false!./src-noconflict/snippets/pascal.js'))\nace.config.setModuleUrl('ace/snippets/perl', require('file-loader?esModule=false!./src-noconflict/snippets/perl.js'))\nace.config.setModuleUrl('ace/snippets/pgsql', require('file-loader?esModule=false!./src-noconflict/snippets/pgsql.js'))\nace.config.setModuleUrl('ace/snippets/php', require('file-loader?esModule=false!./src-noconflict/snippets/php.js'))\nace.config.setModuleUrl('ace/snippets/php_laravel_blade', require('file-loader?esModule=false!./src-noconflict/snippets/php_laravel_blade.js'))\nace.config.setModuleUrl('ace/snippets/pig', require('file-loader?esModule=false!./src-noconflict/snippets/pig.js'))\nace.config.setModuleUrl('ace/snippets/plain_text', require('file-loader?esModule=false!./src-noconflict/snippets/plain_text.js'))\nace.config.setModuleUrl('ace/snippets/powershell', require('file-loader?esModule=false!./src-noconflict/snippets/powershell.js'))\nace.config.setModuleUrl('ace/snippets/praat', require('file-loader?esModule=false!./src-noconflict/snippets/praat.js'))\nace.config.setModuleUrl('ace/snippets/prisma', require('file-loader?esModule=false!./src-noconflict/snippets/prisma.js'))\nace.config.setModuleUrl('ace/snippets/prolog', require('file-loader?esModule=false!./src-noconflict/snippets/prolog.js'))\nace.config.setModuleUrl('ace/snippets/properties', require('file-loader?esModule=false!./src-noconflict/snippets/properties.js'))\nace.config.setModuleUrl('ace/snippets/protobuf', require('file-loader?esModule=false!./src-noconflict/snippets/protobuf.js'))\nace.config.setModuleUrl('ace/snippets/puppet', require('file-loader?esModule=false!./src-noconflict/snippets/puppet.js'))\nace.config.setModuleUrl('ace/snippets/python', require('file-loader?esModule=false!./src-noconflict/snippets/python.js'))\nace.config.setModuleUrl('ace/snippets/qml', require('file-loader?esModule=false!./src-noconflict/snippets/qml.js'))\nace.config.setModuleUrl('ace/snippets/r', require('file-loader?esModule=false!./src-noconflict/snippets/r.js'))\nace.config.setModuleUrl('ace/snippets/raku', require('file-loader?esModule=false!./src-noconflict/snippets/raku.js'))\nace.config.setModuleUrl('ace/snippets/razor', require('file-loader?esModule=false!./src-noconflict/snippets/razor.js'))\nace.config.setModuleUrl('ace/snippets/rdoc', require('file-loader?esModule=false!./src-noconflict/snippets/rdoc.js'))\nace.config.setModuleUrl('ace/snippets/red', require('file-loader?esModule=false!./src-noconflict/snippets/red.js'))\nace.config.setModuleUrl('ace/snippets/redshift', require('file-loader?esModule=false!./src-noconflict/snippets/redshift.js'))\nace.config.setModuleUrl('ace/snippets/rhtml', require('file-loader?esModule=false!./src-noconflict/snippets/rhtml.js'))\nace.config.setModuleUrl('ace/snippets/robot', require('file-loader?esModule=false!./src-noconflict/snippets/robot.js'))\nace.config.setModuleUrl('ace/snippets/rst', require('file-loader?esModule=false!./src-noconflict/snippets/rst.js'))\nace.config.setModuleUrl('ace/snippets/ruby', require('file-loader?esModule=false!./src-noconflict/snippets/ruby.js'))\nace.config.setModuleUrl('ace/snippets/rust', require('file-loader?esModule=false!./src-noconflict/snippets/rust.js'))\nace.config.setModuleUrl('ace/snippets/sac', require('file-loader?esModule=false!./src-noconflict/snippets/sac.js'))\nace.config.setModuleUrl('ace/snippets/sass', require('file-loader?esModule=false!./src-noconflict/snippets/sass.js'))\nace.config.setModuleUrl('ace/snippets/scad', require('file-loader?esModule=false!./src-noconflict/snippets/scad.js'))\nace.config.setModuleUrl('ace/snippets/scala', require('file-loader?esModule=false!./src-noconflict/snippets/scala.js'))\nace.config.setModuleUrl('ace/snippets/scheme', require('file-loader?esModule=false!./src-noconflict/snippets/scheme.js'))\nace.config.setModuleUrl('ace/snippets/scrypt', require('file-loader?esModule=false!./src-noconflict/snippets/scrypt.js'))\nace.config.setModuleUrl('ace/snippets/scss', require('file-loader?esModule=false!./src-noconflict/snippets/scss.js'))\nace.config.setModuleUrl('ace/snippets/sh', require('file-loader?esModule=false!./src-noconflict/snippets/sh.js'))\nace.config.setModuleUrl('ace/snippets/sjs', require('file-loader?esModule=false!./src-noconflict/snippets/sjs.js'))\nace.config.setModuleUrl('ace/snippets/slim', require('file-loader?esModule=false!./src-noconflict/snippets/slim.js'))\nace.config.setModuleUrl('ace/snippets/smarty', require('file-loader?esModule=false!./src-noconflict/snippets/smarty.js'))\nace.config.setModuleUrl('ace/snippets/smithy', require('file-loader?esModule=false!./src-noconflict/snippets/smithy.js'))\nace.config.setModuleUrl('ace/snippets/snippets', require('file-loader?esModule=false!./src-noconflict/snippets/snippets.js'))\nace.config.setModuleUrl('ace/snippets/soy_template', require('file-loader?esModule=false!./src-noconflict/snippets/soy_template.js'))\nace.config.setModuleUrl('ace/snippets/space', require('file-loader?esModule=false!./src-noconflict/snippets/space.js'))\nace.config.setModuleUrl('ace/snippets/sparql', require('file-loader?esModule=false!./src-noconflict/snippets/sparql.js'))\nace.config.setModuleUrl('ace/snippets/sql', require('file-loader?esModule=false!./src-noconflict/snippets/sql.js'))\nace.config.setModuleUrl('ace/snippets/sqlserver', require('file-loader?esModule=false!./src-noconflict/snippets/sqlserver.js'))\nace.config.setModuleUrl('ace/snippets/stylus', require('file-loader?esModule=false!./src-noconflict/snippets/stylus.js'))\nace.config.setModuleUrl('ace/snippets/svg', require('file-loader?esModule=false!./src-noconflict/snippets/svg.js'))\nace.config.setModuleUrl('ace/snippets/swift', require('file-loader?esModule=false!./src-noconflict/snippets/swift.js'))\nace.config.setModuleUrl('ace/snippets/tcl', require('file-loader?esModule=false!./src-noconflict/snippets/tcl.js'))\nace.config.setModuleUrl('ace/snippets/terraform', require('file-loader?esModule=false!./src-noconflict/snippets/terraform.js'))\nace.config.setModuleUrl('ace/snippets/tex', require('file-loader?esModule=false!./src-noconflict/snippets/tex.js'))\nace.config.setModuleUrl('ace/snippets/text', require('file-loader?esModule=false!./src-noconflict/snippets/text.js'))\nace.config.setModuleUrl('ace/snippets/textile', require('file-loader?esModule=false!./src-noconflict/snippets/textile.js'))\nace.config.setModuleUrl('ace/snippets/toml', require('file-loader?esModule=false!./src-noconflict/snippets/toml.js'))\nace.config.setModuleUrl('ace/snippets/tsx', require('file-loader?esModule=false!./src-noconflict/snippets/tsx.js'))\nace.config.setModuleUrl('ace/snippets/turtle', require('file-loader?esModule=false!./src-noconflict/snippets/turtle.js'))\nace.config.setModuleUrl('ace/snippets/twig', require('file-loader?esModule=false!./src-noconflict/snippets/twig.js'))\nace.config.setModuleUrl('ace/snippets/typescript', require('file-loader?esModule=false!./src-noconflict/snippets/typescript.js'))\nace.config.setModuleUrl('ace/snippets/vala', require('file-loader?esModule=false!./src-noconflict/snippets/vala.js'))\nace.config.setModuleUrl('ace/snippets/vbscript', require('file-loader?esModule=false!./src-noconflict/snippets/vbscript.js'))\nace.config.setModuleUrl('ace/snippets/velocity', require('file-loader?esModule=false!./src-noconflict/snippets/velocity.js'))\nace.config.setModuleUrl('ace/snippets/verilog', require('file-loader?esModule=false!./src-noconflict/snippets/verilog.js'))\nace.config.setModuleUrl('ace/snippets/vhdl', require('file-loader?esModule=false!./src-noconflict/snippets/vhdl.js'))\nace.config.setModuleUrl('ace/snippets/visualforce', require('file-loader?esModule=false!./src-noconflict/snippets/visualforce.js'))\nace.config.setModuleUrl('ace/snippets/wollok', require('file-loader?esModule=false!./src-noconflict/snippets/wollok.js'))\nace.config.setModuleUrl('ace/snippets/xml', require('file-loader?esModule=false!./src-noconflict/snippets/xml.js'))\nace.config.setModuleUrl('ace/snippets/xquery', require('file-loader?esModule=false!./src-noconflict/snippets/xquery.js'))\nace.config.setModuleUrl('ace/snippets/yaml', require('file-loader?esModule=false!./src-noconflict/snippets/yaml.js'))\nace.config.setModuleUrl('ace/snippets/zeek', require('file-loader?esModule=false!./src-noconflict/snippets/zeek.js'))","/**\n * Diff Match and Patch\n * Copyright 2018 The diff-match-patch Authors.\n * https://github.com/google/diff-match-patch\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @fileoverview Computes the difference between two texts to create a patch.\n * Applies the patch onto another text, allowing for errors.\n * @author [email protected] (Neil Fraser)\n */\n\n/**\n * Class containing the diff, match and patch methods.\n * @constructor\n */\nvar diff_match_patch = function() {\n\n // Defaults.\n // Redefine these in your program to override the defaults.\n\n // Number of seconds to map a diff before giving up (0 for infinity).\n this.Diff_Timeout = 1.0;\n // Cost of an empty edit operation in terms of edit characters.\n this.Diff_EditCost = 4;\n // At what point is no match declared (0.0 = perfection, 1.0 = very loose).\n this.Match_Threshold = 0.5;\n // How far to search for a match (0 = exact location, 1000+ = broad match).\n // A match this many characters away from the expected location will add\n // 1.0 to the score (0.0 is a perfect match).\n this.Match_Distance = 1000;\n // When deleting a large block of text (over ~64 characters), how close do\n // the contents have to be to match the expected contents. (0.0 = perfection,\n // 1.0 = very loose). Note that Match_Threshold controls how closely the\n // end points of a delete need to match.\n this.Patch_DeleteThreshold = 0.5;\n // Chunk size for context length.\n this.Patch_Margin = 4;\n\n // The number of bits in an int.\n this.Match_MaxBits = 32;\n};\n\n\n// DIFF FUNCTIONS\n\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n/**\n * Class representing one diff tuple.\n * ~Attempts to look like a two-element array (which is what this used to be).~\n * Constructor returns an actual two-element array, to allow destructing @JackuB\n * See https://github.com/JackuB/diff-match-patch/issues/14 for details\n * @param {number} op Operation, one of: DIFF_DELETE, DIFF_INSERT, DIFF_EQUAL.\n * @param {string} text Text to be deleted, inserted, or retained.\n * @constructor\n */\ndiff_match_patch.Diff = function(op, text) {\n return [op, text];\n};\n\n/**\n * Find the differences between two texts. Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean=} opt_checklines Optional speedup flag. If present and false,\n * then don't run a line-level diff first to identify the changed areas.\n * Defaults to true, which does a faster, slightly less optimal diff.\n * @param {number=} opt_deadline Optional time when the diff should be complete\n * by. Used internally for recursive calls. Users should set DiffTimeout\n * instead.\n * @return {!Array.} Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_main = function(text1, text2, opt_checklines,\n opt_deadline) {\n // Set a deadline by which time the diff must be complete.\n if (typeof opt_deadline == 'undefined') {\n if (this.Diff_Timeout <= 0) {\n opt_deadline = Number.MAX_VALUE;\n } else {\n opt_deadline = (new Date).getTime() + this.Diff_Timeout * 1000;\n }\n }\n var deadline = opt_deadline;\n\n // Check for null inputs.\n if (text1 == null || text2 == null) {\n throw new Error('Null input. (diff_main)');\n }\n\n // Check for equality (speedup).\n if (text1 == text2) {\n if (text1) {\n return [new diff_match_patch.Diff(DIFF_EQUAL, text1)];\n }\n return [];\n }\n\n if (typeof opt_checklines == 'undefined') {\n opt_checklines = true;\n }\n var checklines = opt_checklines;\n\n // Trim off common prefix (speedup).\n var commonlength = this.diff_commonPrefix(text1, text2);\n var commonprefix = text1.substring(0, commonlength);\n text1 = text1.substring(commonlength);\n text2 = text2.substring(commonlength);\n\n // Trim off common suffix (speedup).\n commonlength = this.diff_commonSuffix(text1, text2);\n var commonsuffix = text1.substring(text1.length - commonlength);\n text1 = text1.substring(0, text1.length - commonlength);\n text2 = text2.substring(0, text2.length - commonlength);\n\n // Compute the diff on the middle block.\n var diffs = this.diff_compute_(text1, text2, checklines, deadline);\n\n // Restore the prefix and suffix.\n if (commonprefix) {\n diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, commonprefix));\n }\n if (commonsuffix) {\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, commonsuffix));\n }\n this.diff_cleanupMerge(diffs);\n return diffs;\n};\n\n\n/**\n * Find the differences between two texts. Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {boolean} checklines Speedup flag. If false, then don't run a\n * line-level diff first to identify the changed areas.\n * If true, then run a faster, slightly less optimal diff.\n * @param {number} deadline Time when the diff should be complete by.\n * @return {!Array.} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_compute_ = function(text1, text2, checklines,\n deadline) {\n var diffs;\n\n if (!text1) {\n // Just add some text (speedup).\n return [new diff_match_patch.Diff(DIFF_INSERT, text2)];\n }\n\n if (!text2) {\n // Just delete some text (speedup).\n return [new diff_match_patch.Diff(DIFF_DELETE, text1)];\n }\n\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n var i = longtext.indexOf(shorttext);\n if (i != -1) {\n // Shorter text is inside the longer text (speedup).\n diffs = [new diff_match_patch.Diff(DIFF_INSERT, longtext.substring(0, i)),\n new diff_match_patch.Diff(DIFF_EQUAL, shorttext),\n new diff_match_patch.Diff(DIFF_INSERT,\n longtext.substring(i + shorttext.length))];\n // Swap insertions for deletions if diff is reversed.\n if (text1.length > text2.length) {\n diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n }\n return diffs;\n }\n\n if (shorttext.length == 1) {\n // Single character string.\n // After the previous speedup, the character can't be an equality.\n return [new diff_match_patch.Diff(DIFF_DELETE, text1),\n new diff_match_patch.Diff(DIFF_INSERT, text2)];\n }\n\n // Check to see if the problem can be split in two.\n var hm = this.diff_halfMatch_(text1, text2);\n if (hm) {\n // A half-match was found, sort out the return data.\n var text1_a = hm[0];\n var text1_b = hm[1];\n var text2_a = hm[2];\n var text2_b = hm[3];\n var mid_common = hm[4];\n // Send both pairs off for separate processing.\n var diffs_a = this.diff_main(text1_a, text2_a, checklines, deadline);\n var diffs_b = this.diff_main(text1_b, text2_b, checklines, deadline);\n // Merge the results.\n return diffs_a.concat([new diff_match_patch.Diff(DIFF_EQUAL, mid_common)],\n diffs_b);\n }\n\n if (checklines && text1.length > 100 && text2.length > 100) {\n return this.diff_lineMode_(text1, text2, deadline);\n }\n\n return this.diff_bisect_(text1, text2, deadline);\n};\n\n\n/**\n * Do a quick line-level diff on both strings, then rediff the parts for\n * greater accuracy.\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} deadline Time when the diff should be complete by.\n * @return {!Array.} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_lineMode_ = function(text1, text2, deadline) {\n // Scan the text on a line-by-line basis first.\n var a = this.diff_linesToChars_(text1, text2);\n text1 = a.chars1;\n text2 = a.chars2;\n var linearray = a.lineArray;\n\n var diffs = this.diff_main(text1, text2, false, deadline);\n\n // Convert the diff back to original text.\n this.diff_charsToLines_(diffs, linearray);\n // Eliminate freak matches (e.g. blank lines)\n this.diff_cleanupSemantic(diffs);\n\n // Rediff any replacement blocks, this time character-by-character.\n // Add a dummy entry at the end.\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, ''));\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n break;\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete >= 1 && count_insert >= 1) {\n // Delete the offending records and add the merged ones.\n diffs.splice(pointer - count_delete - count_insert,\n count_delete + count_insert);\n pointer = pointer - count_delete - count_insert;\n var subDiff =\n this.diff_main(text_delete, text_insert, false, deadline);\n for (var j = subDiff.length - 1; j >= 0; j--) {\n diffs.splice(pointer, 0, subDiff[j]);\n }\n pointer = pointer + subDiff.length;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n pointer++;\n }\n diffs.pop(); // Remove the dummy entry at the end.\n\n return diffs;\n};\n\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} deadline Time at which to bail if not yet complete.\n * @return {!Array.} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_bisect_ = function(text1, text2, deadline) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n var max_d = Math.ceil((text1_length + text2_length) / 2);\n var v_offset = max_d;\n var v_length = 2 * max_d;\n var v1 = new Array(v_length);\n var v2 = new Array(v_length);\n // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n // integers and undefined.\n for (var x = 0; x < v_length; x++) {\n v1[x] = -1;\n v2[x] = -1;\n }\n v1[v_offset + 1] = 0;\n v2[v_offset + 1] = 0;\n var delta = text1_length - text2_length;\n // If the total number of characters is odd, then the front path will collide\n // with the reverse path.\n var front = (delta % 2 != 0);\n // Offsets for start and end of k loop.\n // Prevents mapping of space beyond the grid.\n var k1start = 0;\n var k1end = 0;\n var k2start = 0;\n var k2end = 0;\n for (var d = 0; d < max_d; d++) {\n // Bail out if deadline is reached.\n if ((new Date()).getTime() > deadline) {\n break;\n }\n\n // Walk the front path one step.\n for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n var k1_offset = v_offset + k1;\n var x1;\n if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n x1 = v1[k1_offset + 1];\n } else {\n x1 = v1[k1_offset - 1] + 1;\n }\n var y1 = x1 - k1;\n while (x1 < text1_length && y1 < text2_length &&\n text1.charAt(x1) == text2.charAt(y1)) {\n x1++;\n y1++;\n }\n v1[k1_offset] = x1;\n if (x1 > text1_length) {\n // Ran off the right of the graph.\n k1end += 2;\n } else if (y1 > text2_length) {\n // Ran off the bottom of the graph.\n k1start += 2;\n } else if (front) {\n var k2_offset = v_offset + delta - k1;\n if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {\n // Mirror x2 onto top-left coordinate system.\n var x2 = text1_length - v2[k2_offset];\n if (x1 >= x2) {\n // Overlap detected.\n return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);\n }\n }\n }\n }\n\n // Walk the reverse path one step.\n for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n var k2_offset = v_offset + k2;\n var x2;\n if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n x2 = v2[k2_offset + 1];\n } else {\n x2 = v2[k2_offset - 1] + 1;\n }\n var y2 = x2 - k2;\n while (x2 < text1_length && y2 < text2_length &&\n text1.charAt(text1_length - x2 - 1) ==\n text2.charAt(text2_length - y2 - 1)) {\n x2++;\n y2++;\n }\n v2[k2_offset] = x2;\n if (x2 > text1_length) {\n // Ran off the left of the graph.\n k2end += 2;\n } else if (y2 > text2_length) {\n // Ran off the top of the graph.\n k2start += 2;\n } else if (!front) {\n var k1_offset = v_offset + delta - k2;\n if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {\n var x1 = v1[k1_offset];\n var y1 = v_offset + x1 - k1_offset;\n // Mirror x2 onto top-left coordinate system.\n x2 = text1_length - x2;\n if (x1 >= x2) {\n // Overlap detected.\n return this.diff_bisectSplit_(text1, text2, x1, y1, deadline);\n }\n }\n }\n }\n }\n // Diff took too long and hit the deadline or\n // number of diffs equals number of characters, no commonality at all.\n return [new diff_match_patch.Diff(DIFF_DELETE, text1),\n new diff_match_patch.Diff(DIFF_INSERT, text2)];\n};\n\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @param {number} deadline Time at which to bail if not yet complete.\n * @return {!Array.} Array of diff tuples.\n * @private\n */\ndiff_match_patch.prototype.diff_bisectSplit_ = function(text1, text2, x, y,\n deadline) {\n var text1a = text1.substring(0, x);\n var text2a = text2.substring(0, y);\n var text1b = text1.substring(x);\n var text2b = text2.substring(y);\n\n // Compute both diffs serially.\n var diffs = this.diff_main(text1a, text2a, false, deadline);\n var diffsb = this.diff_main(text1b, text2b, false, deadline);\n\n return diffs.concat(diffsb);\n};\n\n\n/**\n * Split two texts into an array of strings. Reduce the texts to a string of\n * hashes where each Unicode character represents one line.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {{chars1: string, chars2: string, lineArray: !Array.}}\n * An object containing the encoded text1, the encoded text2 and\n * the array of unique strings.\n * The zeroth element of the array of unique strings is intentionally blank.\n * @private\n */\ndiff_match_patch.prototype.diff_linesToChars_ = function(text1, text2) {\n var lineArray = []; // e.g. lineArray[4] == 'Hello\\n'\n var lineHash = {}; // e.g. lineHash['Hello\\n'] == 4\n\n // '\\x00' is a valid character, but various debuggers don't like it.\n // So we'll insert a junk entry to avoid generating a null character.\n lineArray[0] = '';\n\n /**\n * Split a text into an array of strings. Reduce the texts to a string of\n * hashes where each Unicode character represents one line.\n * Modifies linearray and linehash through being a closure.\n * @param {string} text String to encode.\n * @return {string} Encoded string.\n * @private\n */\n function diff_linesToCharsMunge_(text) {\n var chars = '';\n // Walk the text, pulling out a substring for each line.\n // text.split('\\n') would would temporarily double our memory footprint.\n // Modifying text would create many large strings to garbage collect.\n var lineStart = 0;\n var lineEnd = -1;\n // Keeping our own length variable is faster than looking it up.\n var lineArrayLength = lineArray.length;\n while (lineEnd < text.length - 1) {\n lineEnd = text.indexOf('\\n', lineStart);\n if (lineEnd == -1) {\n lineEnd = text.length - 1;\n }\n var line = text.substring(lineStart, lineEnd + 1);\n\n if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) :\n (lineHash[line] !== undefined)) {\n chars += String.fromCharCode(lineHash[line]);\n } else {\n if (lineArrayLength == maxLines) {\n // Bail out at 65535 because\n // String.fromCharCode(65536) == String.fromCharCode(0)\n line = text.substring(lineStart);\n lineEnd = text.length;\n }\n chars += String.fromCharCode(lineArrayLength);\n lineHash[line] = lineArrayLength;\n lineArray[lineArrayLength++] = line;\n }\n lineStart = lineEnd + 1;\n }\n return chars;\n }\n // Allocate 2/3rds of the space for text1, the rest for text2.\n var maxLines = 40000;\n var chars1 = diff_linesToCharsMunge_(text1);\n maxLines = 65535;\n var chars2 = diff_linesToCharsMunge_(text2);\n return {chars1: chars1, chars2: chars2, lineArray: lineArray};\n};\n\n\n/**\n * Rehydrate the text in a diff from a string of line hashes to real lines of\n * text.\n * @param {!Array.} diffs Array of diff tuples.\n * @param {!Array.} lineArray Array of unique strings.\n * @private\n */\ndiff_match_patch.prototype.diff_charsToLines_ = function(diffs, lineArray) {\n for (var i = 0; i < diffs.length; i++) {\n var chars = diffs[i][1];\n var text = [];\n for (var j = 0; j < chars.length; j++) {\n text[j] = lineArray[chars.charCodeAt(j)];\n }\n diffs[i][1] = text.join('');\n }\n};\n\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n * string.\n */\ndiff_match_patch.prototype.diff_commonPrefix = function(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: https://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerstart = 0;\n while (pointermin < pointermid) {\n if (text1.substring(pointerstart, pointermid) ==\n text2.substring(pointerstart, pointermid)) {\n pointermin = pointermid;\n pointerstart = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\ndiff_match_patch.prototype.diff_commonSuffix = function(text1, text2) {\n // Quick check for common null cases.\n if (!text1 || !text2 ||\n text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {\n return 0;\n }\n // Binary search.\n // Performance analysis: https://neil.fraser.name/news/2007/10/09/\n var pointermin = 0;\n var pointermax = Math.min(text1.length, text2.length);\n var pointermid = pointermax;\n var pointerend = 0;\n while (pointermin < pointermid) {\n if (text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n pointermin = pointermid;\n pointerend = pointermin;\n } else {\n pointermax = pointermid;\n }\n pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n }\n return pointermid;\n};\n\n\n/**\n * Determine if the suffix of one string is the prefix of another.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of the first\n * string and the start of the second string.\n * @private\n */\ndiff_match_patch.prototype.diff_commonOverlap_ = function(text1, text2) {\n // Cache the text lengths to prevent multiple calls.\n var text1_length = text1.length;\n var text2_length = text2.length;\n // Eliminate the null case.\n if (text1_length == 0 || text2_length == 0) {\n return 0;\n }\n // Truncate the longer string.\n if (text1_length > text2_length) {\n text1 = text1.substring(text1_length - text2_length);\n } else if (text1_length < text2_length) {\n text2 = text2.substring(0, text1_length);\n }\n var text_length = Math.min(text1_length, text2_length);\n // Quick check for the worst case.\n if (text1 == text2) {\n return text_length;\n }\n\n // Start by looking for a single character match\n // and increase length until no match is found.\n // Performance analysis: https://neil.fraser.name/news/2010/11/04/\n var best = 0;\n var length = 1;\n while (true) {\n var pattern = text1.substring(text_length - length);\n var found = text2.indexOf(pattern);\n if (found == -1) {\n return best;\n }\n length += found;\n if (found == 0 || text1.substring(text_length - length) ==\n text2.substring(0, length)) {\n best = length;\n length++;\n }\n }\n};\n\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.} Five element Array, containing the prefix of\n * text1, the suffix of text1, the prefix of text2, the suffix of\n * text2 and the common middle. Or null if there was no match.\n * @private\n */\ndiff_match_patch.prototype.diff_halfMatch_ = function(text1, text2) {\n if (this.Diff_Timeout <= 0) {\n // Don't risk returning a non-optimal diff if we have unlimited time.\n return null;\n }\n var longtext = text1.length > text2.length ? text1 : text2;\n var shorttext = text1.length > text2.length ? text2 : text1;\n if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n return null; // Pointless.\n }\n var dmp = this; // 'this' becomes 'window' in a closure.\n\n /**\n * Does a substring of shorttext exist within longtext such that the substring\n * is at least half the length of longtext?\n * Closure, but does not reference any external variables.\n * @param {string} longtext Longer string.\n * @param {string} shorttext Shorter string.\n * @param {number} i Start index of quarter length substring within longtext.\n * @return {Array.} Five element Array, containing the prefix of\n * longtext, the suffix of longtext, the prefix of shorttext, the suffix\n * of shorttext and the common middle. Or null if there was no match.\n * @private\n */\n function diff_halfMatchI_(longtext, shorttext, i) {\n // Start with a 1/4 length substring at position i as a seed.\n var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n var j = -1;\n var best_common = '';\n var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n while ((j = shorttext.indexOf(seed, j + 1)) != -1) {\n var prefixLength = dmp.diff_commonPrefix(longtext.substring(i),\n shorttext.substring(j));\n var suffixLength = dmp.diff_commonSuffix(longtext.substring(0, i),\n shorttext.substring(0, j));\n if (best_common.length < suffixLength + prefixLength) {\n best_common = shorttext.substring(j - suffixLength, j) +\n shorttext.substring(j, j + prefixLength);\n best_longtext_a = longtext.substring(0, i - suffixLength);\n best_longtext_b = longtext.substring(i + prefixLength);\n best_shorttext_a = shorttext.substring(0, j - suffixLength);\n best_shorttext_b = shorttext.substring(j + prefixLength);\n }\n }\n if (best_common.length * 2 >= longtext.length) {\n return [best_longtext_a, best_longtext_b,\n best_shorttext_a, best_shorttext_b, best_common];\n } else {\n return null;\n }\n }\n\n // First check if the second quarter is the seed for a half-match.\n var hm1 = diff_halfMatchI_(longtext, shorttext,\n Math.ceil(longtext.length / 4));\n // Check again based on the third quarter.\n var hm2 = diff_halfMatchI_(longtext, shorttext,\n Math.ceil(longtext.length / 2));\n var hm;\n if (!hm1 && !hm2) {\n return null;\n } else if (!hm2) {\n hm = hm1;\n } else if (!hm1) {\n hm = hm2;\n } else {\n // Both matched. Select the longest.\n hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n }\n\n // A half-match was found, sort out the return data.\n var text1_a, text1_b, text2_a, text2_b;\n if (text1.length > text2.length) {\n text1_a = hm[0];\n text1_b = hm[1];\n text2_a = hm[2];\n text2_b = hm[3];\n } else {\n text2_a = hm[0];\n text2_b = hm[1];\n text1_a = hm[2];\n text1_b = hm[3];\n }\n var mid_common = hm[4];\n return [text1_a, text1_b, text2_a, text2_b, mid_common];\n};\n\n\n/**\n * Reduce the number of edits by eliminating semantically trivial equalities.\n * @param {!Array.} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSemantic = function(diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n /** @type {?string} */\n var lastEquality = null;\n // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n var pointer = 0; // Index of current position.\n // Number of characters that changed prior to the equality.\n var length_insertions1 = 0;\n var length_deletions1 = 0;\n // Number of characters that changed after the equality.\n var length_insertions2 = 0;\n var length_deletions2 = 0;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) { // Equality found.\n equalities[equalitiesLength++] = pointer;\n length_insertions1 = length_insertions2;\n length_deletions1 = length_deletions2;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastEquality = diffs[pointer][1];\n } else { // An insertion or deletion.\n if (diffs[pointer][0] == DIFF_INSERT) {\n length_insertions2 += diffs[pointer][1].length;\n } else {\n length_deletions2 += diffs[pointer][1].length;\n }\n // Eliminate an equality that is smaller or equal to the edits on both\n // sides of it.\n if (lastEquality && (lastEquality.length <=\n Math.max(length_insertions1, length_deletions1)) &&\n (lastEquality.length <= Math.max(length_insertions2,\n length_deletions2))) {\n // Duplicate record.\n diffs.splice(equalities[equalitiesLength - 1], 0,\n new diff_match_patch.Diff(DIFF_DELETE, lastEquality));\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n // Throw away the equality we just deleted.\n equalitiesLength--;\n // Throw away the previous equality (it needs to be reevaluated).\n equalitiesLength--;\n pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;\n length_insertions1 = 0; // Reset the counters.\n length_deletions1 = 0;\n length_insertions2 = 0;\n length_deletions2 = 0;\n lastEquality = null;\n changes = true;\n }\n }\n pointer++;\n }\n\n // Normalize the diff.\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n this.diff_cleanupSemanticLossless(diffs);\n\n // Find any overlaps between deletions and insertions.\n // e.g: abcxxxxxxdef\n // -> abcxxxdef\n // e.g: xxxabcdefxxx\n // -> defxxxabc\n // Only extract an overlap if it is as big as the edit ahead or behind it.\n pointer = 1;\n while (pointer < diffs.length) {\n if (diffs[pointer - 1][0] == DIFF_DELETE &&\n diffs[pointer][0] == DIFF_INSERT) {\n var deletion = diffs[pointer - 1][1];\n var insertion = diffs[pointer][1];\n var overlap_length1 = this.diff_commonOverlap_(deletion, insertion);\n var overlap_length2 = this.diff_commonOverlap_(insertion, deletion);\n if (overlap_length1 >= overlap_length2) {\n if (overlap_length1 >= deletion.length / 2 ||\n overlap_length1 >= insertion.length / 2) {\n // Overlap found. Insert an equality and trim the surrounding edits.\n diffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_EQUAL,\n insertion.substring(0, overlap_length1)));\n diffs[pointer - 1][1] =\n deletion.substring(0, deletion.length - overlap_length1);\n diffs[pointer + 1][1] = insertion.substring(overlap_length1);\n pointer++;\n }\n } else {\n if (overlap_length2 >= deletion.length / 2 ||\n overlap_length2 >= insertion.length / 2) {\n // Reverse overlap found.\n // Insert an equality and swap and trim the surrounding edits.\n diffs.splice(pointer, 0, new diff_match_patch.Diff(DIFF_EQUAL,\n deletion.substring(0, overlap_length2)));\n diffs[pointer - 1][0] = DIFF_INSERT;\n diffs[pointer - 1][1] =\n insertion.substring(0, insertion.length - overlap_length2);\n diffs[pointer + 1][0] = DIFF_DELETE;\n diffs[pointer + 1][1] =\n deletion.substring(overlap_length2);\n pointer++;\n }\n }\n pointer++;\n }\n pointer++;\n }\n};\n\n\n/**\n * Look for single edits surrounded on both sides by equalities\n * which can be shifted sideways to align the edit to a word boundary.\n * e.g: The cat came. -> The cat came.\n * @param {!Array.} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupSemanticLossless = function(diffs) {\n /**\n * Given two strings, compute a score representing whether the internal\n * boundary falls on logical boundaries.\n * Scores range from 6 (best) to 0 (worst).\n * Closure, but does not reference any external variables.\n * @param {string} one First string.\n * @param {string} two Second string.\n * @return {number} The score.\n * @private\n */\n function diff_cleanupSemanticScore_(one, two) {\n if (!one || !two) {\n // Edges are the best.\n return 6;\n }\n\n // Each port of this function behaves slightly differently due to\n // subtle differences in each language's definition of things like\n // 'whitespace'. Since this function's purpose is largely cosmetic,\n // the choice has been made to use each language's native features\n // rather than force total conformity.\n var char1 = one.charAt(one.length - 1);\n var char2 = two.charAt(0);\n var nonAlphaNumeric1 = char1.match(diff_match_patch.nonAlphaNumericRegex_);\n var nonAlphaNumeric2 = char2.match(diff_match_patch.nonAlphaNumericRegex_);\n var whitespace1 = nonAlphaNumeric1 &&\n char1.match(diff_match_patch.whitespaceRegex_);\n var whitespace2 = nonAlphaNumeric2 &&\n char2.match(diff_match_patch.whitespaceRegex_);\n var lineBreak1 = whitespace1 &&\n char1.match(diff_match_patch.linebreakRegex_);\n var lineBreak2 = whitespace2 &&\n char2.match(diff_match_patch.linebreakRegex_);\n var blankLine1 = lineBreak1 &&\n one.match(diff_match_patch.blanklineEndRegex_);\n var blankLine2 = lineBreak2 &&\n two.match(diff_match_patch.blanklineStartRegex_);\n\n if (blankLine1 || blankLine2) {\n // Five points for blank lines.\n return 5;\n } else if (lineBreak1 || lineBreak2) {\n // Four points for line breaks.\n return 4;\n } else if (nonAlphaNumeric1 && !whitespace1 && whitespace2) {\n // Three points for end of sentences.\n return 3;\n } else if (whitespace1 || whitespace2) {\n // Two points for whitespace.\n return 2;\n } else if (nonAlphaNumeric1 || nonAlphaNumeric2) {\n // One point for non-alphanumeric.\n return 1;\n }\n return 0;\n }\n\n var pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n var equality1 = diffs[pointer - 1][1];\n var edit = diffs[pointer][1];\n var equality2 = diffs[pointer + 1][1];\n\n // First, shift the edit as far left as possible.\n var commonOffset = this.diff_commonSuffix(equality1, edit);\n if (commonOffset) {\n var commonString = edit.substring(edit.length - commonOffset);\n equality1 = equality1.substring(0, equality1.length - commonOffset);\n edit = commonString + edit.substring(0, edit.length - commonOffset);\n equality2 = commonString + equality2;\n }\n\n // Second, step character by character right, looking for the best fit.\n var bestEquality1 = equality1;\n var bestEdit = edit;\n var bestEquality2 = equality2;\n var bestScore = diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n while (edit.charAt(0) === equality2.charAt(0)) {\n equality1 += edit.charAt(0);\n edit = edit.substring(1) + equality2.charAt(0);\n equality2 = equality2.substring(1);\n var score = diff_cleanupSemanticScore_(equality1, edit) +\n diff_cleanupSemanticScore_(edit, equality2);\n // The >= encourages trailing rather than leading whitespace on edits.\n if (score >= bestScore) {\n bestScore = score;\n bestEquality1 = equality1;\n bestEdit = edit;\n bestEquality2 = equality2;\n }\n }\n\n if (diffs[pointer - 1][1] != bestEquality1) {\n // We have an improvement, save it back to the diff.\n if (bestEquality1) {\n diffs[pointer - 1][1] = bestEquality1;\n } else {\n diffs.splice(pointer - 1, 1);\n pointer--;\n }\n diffs[pointer][1] = bestEdit;\n if (bestEquality2) {\n diffs[pointer + 1][1] = bestEquality2;\n } else {\n diffs.splice(pointer + 1, 1);\n pointer--;\n }\n }\n }\n pointer++;\n }\n};\n\n// Define some regex patterns for matching boundaries.\ndiff_match_patch.nonAlphaNumericRegex_ = /[^a-zA-Z0-9]/;\ndiff_match_patch.whitespaceRegex_ = /\\s/;\ndiff_match_patch.linebreakRegex_ = /[\\r\\n]/;\ndiff_match_patch.blanklineEndRegex_ = /\\n\\r?\\n$/;\ndiff_match_patch.blanklineStartRegex_ = /^\\r?\\n\\r?\\n/;\n\n/**\n * Reduce the number of edits by eliminating operationally trivial equalities.\n * @param {!Array.} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupEfficiency = function(diffs) {\n var changes = false;\n var equalities = []; // Stack of indices where equalities are found.\n var equalitiesLength = 0; // Keeping our own length var is faster in JS.\n /** @type {?string} */\n var lastEquality = null;\n // Always equal to diffs[equalities[equalitiesLength - 1]][1]\n var pointer = 0; // Index of current position.\n // Is there an insertion operation before the last equality.\n var pre_ins = false;\n // Is there a deletion operation before the last equality.\n var pre_del = false;\n // Is there an insertion operation after the last equality.\n var post_ins = false;\n // Is there a deletion operation after the last equality.\n var post_del = false;\n while (pointer < diffs.length) {\n if (diffs[pointer][0] == DIFF_EQUAL) { // Equality found.\n if (diffs[pointer][1].length < this.Diff_EditCost &&\n (post_ins || post_del)) {\n // Candidate found.\n equalities[equalitiesLength++] = pointer;\n pre_ins = post_ins;\n pre_del = post_del;\n lastEquality = diffs[pointer][1];\n } else {\n // Not a candidate, and can never become one.\n equalitiesLength = 0;\n lastEquality = null;\n }\n post_ins = post_del = false;\n } else { // An insertion or deletion.\n if (diffs[pointer][0] == DIFF_DELETE) {\n post_del = true;\n } else {\n post_ins = true;\n }\n /*\n * Five types to be split:\n * ABXYCD\n * AXCD\n * ABXC\n * AXCD\n * ABXC\n */\n if (lastEquality && ((pre_ins && pre_del && post_ins && post_del) ||\n ((lastEquality.length < this.Diff_EditCost / 2) &&\n (pre_ins + pre_del + post_ins + post_del) == 3))) {\n // Duplicate record.\n diffs.splice(equalities[equalitiesLength - 1], 0,\n new diff_match_patch.Diff(DIFF_DELETE, lastEquality));\n // Change second copy to insert.\n diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;\n equalitiesLength--; // Throw away the equality we just deleted;\n lastEquality = null;\n if (pre_ins && pre_del) {\n // No changes made which could affect previous entry, keep going.\n post_ins = post_del = true;\n equalitiesLength = 0;\n } else {\n equalitiesLength--; // Throw away the previous equality.\n pointer = equalitiesLength > 0 ?\n equalities[equalitiesLength - 1] : -1;\n post_ins = post_del = false;\n }\n changes = true;\n }\n }\n pointer++;\n }\n\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n};\n\n\n/**\n * Reorder and merge like edit sections. Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {!Array.} diffs Array of diff tuples.\n */\ndiff_match_patch.prototype.diff_cleanupMerge = function(diffs) {\n // Add a dummy entry at the end.\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, ''));\n var pointer = 0;\n var count_delete = 0;\n var count_insert = 0;\n var text_delete = '';\n var text_insert = '';\n var commonlength;\n while (pointer < diffs.length) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n count_insert++;\n text_insert += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_DELETE:\n count_delete++;\n text_delete += diffs[pointer][1];\n pointer++;\n break;\n case DIFF_EQUAL:\n // Upon reaching an equality, check for prior redundancies.\n if (count_delete + count_insert > 1) {\n if (count_delete !== 0 && count_insert !== 0) {\n // Factor out any common prefixies.\n commonlength = this.diff_commonPrefix(text_insert, text_delete);\n if (commonlength !== 0) {\n if ((pointer - count_delete - count_insert) > 0 &&\n diffs[pointer - count_delete - count_insert - 1][0] ==\n DIFF_EQUAL) {\n diffs[pointer - count_delete - count_insert - 1][1] +=\n text_insert.substring(0, commonlength);\n } else {\n diffs.splice(0, 0, new diff_match_patch.Diff(DIFF_EQUAL,\n text_insert.substring(0, commonlength)));\n pointer++;\n }\n text_insert = text_insert.substring(commonlength);\n text_delete = text_delete.substring(commonlength);\n }\n // Factor out any common suffixies.\n commonlength = this.diff_commonSuffix(text_insert, text_delete);\n if (commonlength !== 0) {\n diffs[pointer][1] = text_insert.substring(text_insert.length -\n commonlength) + diffs[pointer][1];\n text_insert = text_insert.substring(0, text_insert.length -\n commonlength);\n text_delete = text_delete.substring(0, text_delete.length -\n commonlength);\n }\n }\n // Delete the offending records and add the merged ones.\n pointer -= count_delete + count_insert;\n diffs.splice(pointer, count_delete + count_insert);\n if (text_delete.length) {\n diffs.splice(pointer, 0,\n new diff_match_patch.Diff(DIFF_DELETE, text_delete));\n pointer++;\n }\n if (text_insert.length) {\n diffs.splice(pointer, 0,\n new diff_match_patch.Diff(DIFF_INSERT, text_insert));\n pointer++;\n }\n pointer++;\n } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n // Merge this equality with the previous one.\n diffs[pointer - 1][1] += diffs[pointer][1];\n diffs.splice(pointer, 1);\n } else {\n pointer++;\n }\n count_insert = 0;\n count_delete = 0;\n text_delete = '';\n text_insert = '';\n break;\n }\n }\n if (diffs[diffs.length - 1][1] === '') {\n diffs.pop(); // Remove the dummy entry at the end.\n }\n\n // Second pass: look for single edits surrounded on both sides by equalities\n // which can be shifted sideways to eliminate an equality.\n // e.g: ABAC -> ABAC\n var changes = false;\n pointer = 1;\n // Intentionally ignore the first and last element (don't need checking).\n while (pointer < diffs.length - 1) {\n if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n diffs[pointer + 1][0] == DIFF_EQUAL) {\n // This is a single edit surrounded by equalities.\n if (diffs[pointer][1].substring(diffs[pointer][1].length -\n diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {\n // Shift the edit over the previous equality.\n diffs[pointer][1] = diffs[pointer - 1][1] +\n diffs[pointer][1].substring(0, diffs[pointer][1].length -\n diffs[pointer - 1][1].length);\n diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n diffs.splice(pointer - 1, 1);\n changes = true;\n } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n diffs[pointer + 1][1]) {\n // Shift the edit over the next equality.\n diffs[pointer - 1][1] += diffs[pointer + 1][1];\n diffs[pointer][1] =\n diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n diffs[pointer + 1][1];\n diffs.splice(pointer + 1, 1);\n changes = true;\n }\n }\n pointer++;\n }\n // If shifts were made, the diff needs reordering and another shift sweep.\n if (changes) {\n this.diff_cleanupMerge(diffs);\n }\n};\n\n\n/**\n * loc is a location in text1, compute and return the equivalent location in\n * text2.\n * e.g. 'The cat' vs 'The big cat', 1->1, 5->8\n * @param {!Array.} diffs Array of diff tuples.\n * @param {number} loc Location within text1.\n * @return {number} Location within text2.\n */\ndiff_match_patch.prototype.diff_xIndex = function(diffs, loc) {\n var chars1 = 0;\n var chars2 = 0;\n var last_chars1 = 0;\n var last_chars2 = 0;\n var x;\n for (x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_INSERT) { // Equality or deletion.\n chars1 += diffs[x][1].length;\n }\n if (diffs[x][0] !== DIFF_DELETE) { // Equality or insertion.\n chars2 += diffs[x][1].length;\n }\n if (chars1 > loc) { // Overshot the location.\n break;\n }\n last_chars1 = chars1;\n last_chars2 = chars2;\n }\n // Was the location was deleted?\n if (diffs.length != x && diffs[x][0] === DIFF_DELETE) {\n return last_chars2;\n }\n // Add the remaining character length.\n return last_chars2 + (loc - last_chars1);\n};\n\n\n/**\n * Convert a diff array into a pretty HTML report.\n * @param {!Array.} diffs Array of diff tuples.\n * @return {string} HTML representation.\n */\ndiff_match_patch.prototype.diff_prettyHtml = function(diffs) {\n var html = [];\n var pattern_amp = /&/g;\n var pattern_lt = //g;\n var pattern_para = /\\n/g;\n for (var x = 0; x < diffs.length; x++) {\n var op = diffs[x][0]; // Operation (insert, delete, equal)\n var data = diffs[x][1]; // Text of change.\n var text = data.replace(pattern_amp, '&').replace(pattern_lt, '<')\n .replace(pattern_gt, '>').replace(pattern_para, '¶
');\n switch (op) {\n case DIFF_INSERT:\n html[x] = '' + text + '';\n break;\n case DIFF_DELETE:\n html[x] = '' + text + '';\n break;\n case DIFF_EQUAL:\n html[x] = '' + text + '';\n break;\n }\n }\n return html.join('');\n};\n\n\n/**\n * Compute and return the source text (all equalities and deletions).\n * @param {!Array.} diffs Array of diff tuples.\n * @return {string} Source text.\n */\ndiff_match_patch.prototype.diff_text1 = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_INSERT) {\n text[x] = diffs[x][1];\n }\n }\n return text.join('');\n};\n\n\n/**\n * Compute and return the destination text (all equalities and insertions).\n * @param {!Array.} diffs Array of diff tuples.\n * @return {string} Destination text.\n */\ndiff_match_patch.prototype.diff_text2 = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n if (diffs[x][0] !== DIFF_DELETE) {\n text[x] = diffs[x][1];\n }\n }\n return text.join('');\n};\n\n\n/**\n * Compute the Levenshtein distance; the number of inserted, deleted or\n * substituted characters.\n * @param {!Array.} diffs Array of diff tuples.\n * @return {number} Number of changes.\n */\ndiff_match_patch.prototype.diff_levenshtein = function(diffs) {\n var levenshtein = 0;\n var insertions = 0;\n var deletions = 0;\n for (var x = 0; x < diffs.length; x++) {\n var op = diffs[x][0];\n var data = diffs[x][1];\n switch (op) {\n case DIFF_INSERT:\n insertions += data.length;\n break;\n case DIFF_DELETE:\n deletions += data.length;\n break;\n case DIFF_EQUAL:\n // A deletion and an insertion is one substitution.\n levenshtein += Math.max(insertions, deletions);\n insertions = 0;\n deletions = 0;\n break;\n }\n }\n levenshtein += Math.max(insertions, deletions);\n return levenshtein;\n};\n\n\n/**\n * Crush the diff into an encoded string which describes the operations\n * required to transform text1 into text2.\n * E.g. =3\\t-2\\t+ing -> Keep 3 chars, delete 2 chars, insert 'ing'.\n * Operations are tab-separated. Inserted text is escaped using %xx notation.\n * @param {!Array.} diffs Array of diff tuples.\n * @return {string} Delta text.\n */\ndiff_match_patch.prototype.diff_toDelta = function(diffs) {\n var text = [];\n for (var x = 0; x < diffs.length; x++) {\n switch (diffs[x][0]) {\n case DIFF_INSERT:\n text[x] = '+' + encodeURI(diffs[x][1]);\n break;\n case DIFF_DELETE:\n text[x] = '-' + diffs[x][1].length;\n break;\n case DIFF_EQUAL:\n text[x] = '=' + diffs[x][1].length;\n break;\n }\n }\n return text.join('\\t').replace(/%20/g, ' ');\n};\n\n\n/**\n * Given the original text1, and an encoded string which describes the\n * operations required to transform text1 into text2, compute the full diff.\n * @param {string} text1 Source string for the diff.\n * @param {string} delta Delta text.\n * @return {!Array.} Array of diff tuples.\n * @throws {!Error} If invalid input.\n */\ndiff_match_patch.prototype.diff_fromDelta = function(text1, delta) {\n var diffs = [];\n var diffsLength = 0; // Keeping our own length var is faster in JS.\n var pointer = 0; // Cursor in text1\n var tokens = delta.split(/\\t/g);\n for (var x = 0; x < tokens.length; x++) {\n // Each token begins with a one character parameter which specifies the\n // operation of this token (delete, insert, equality).\n var param = tokens[x].substring(1);\n switch (tokens[x].charAt(0)) {\n case '+':\n try {\n diffs[diffsLength++] =\n new diff_match_patch.Diff(DIFF_INSERT, decodeURI(param));\n } catch (ex) {\n // Malformed URI sequence.\n throw new Error('Illegal escape in diff_fromDelta: ' + param);\n }\n break;\n case '-':\n // Fall through.\n case '=':\n var n = parseInt(param, 10);\n if (isNaN(n) || n < 0) {\n throw new Error('Invalid number in diff_fromDelta: ' + param);\n }\n var text = text1.substring(pointer, pointer += n);\n if (tokens[x].charAt(0) == '=') {\n diffs[diffsLength++] = new diff_match_patch.Diff(DIFF_EQUAL, text);\n } else {\n diffs[diffsLength++] = new diff_match_patch.Diff(DIFF_DELETE, text);\n }\n break;\n default:\n // Blank tokens are ok (from a trailing \\t).\n // Anything else is an error.\n if (tokens[x]) {\n throw new Error('Invalid diff operation in diff_fromDelta: ' +\n tokens[x]);\n }\n }\n }\n if (pointer != text1.length) {\n throw new Error('Delta length (' + pointer +\n ') does not equal source text length (' + text1.length + ').');\n }\n return diffs;\n};\n\n\n// MATCH FUNCTIONS\n\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc'.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n */\ndiff_match_patch.prototype.match_main = function(text, pattern, loc) {\n // Check for null inputs.\n if (text == null || pattern == null || loc == null) {\n throw new Error('Null input. (match_main)');\n }\n\n loc = Math.max(0, Math.min(loc, text.length));\n if (text == pattern) {\n // Shortcut (potentially not guaranteed by the algorithm)\n return 0;\n } else if (!text.length) {\n // Nothing to match.\n return -1;\n } else if (text.substring(loc, loc + pattern.length) == pattern) {\n // Perfect match at the perfect spot! (Includes case of null pattern)\n return loc;\n } else {\n // Do a fuzzy compare.\n return this.match_bitap_(text, pattern, loc);\n }\n};\n\n\n/**\n * Locate the best instance of 'pattern' in 'text' near 'loc' using the\n * Bitap algorithm.\n * @param {string} text The text to search.\n * @param {string} pattern The pattern to search for.\n * @param {number} loc The location to search around.\n * @return {number} Best match index or -1.\n * @private\n */\ndiff_match_patch.prototype.match_bitap_ = function(text, pattern, loc) {\n if (pattern.length > this.Match_MaxBits) {\n throw new Error('Pattern too long for this browser.');\n }\n\n // Initialise the alphabet.\n var s = this.match_alphabet_(pattern);\n\n var dmp = this; // 'this' becomes 'window' in a closure.\n\n /**\n * Compute and return the score for a match with e errors and x location.\n * Accesses loc and pattern through being a closure.\n * @param {number} e Number of errors in match.\n * @param {number} x Location of match.\n * @return {number} Overall score for match (0.0 = good, 1.0 = bad).\n * @private\n */\n function match_bitapScore_(e, x) {\n var accuracy = e / pattern.length;\n var proximity = Math.abs(loc - x);\n if (!dmp.Match_Distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy;\n }\n return accuracy + (proximity / dmp.Match_Distance);\n }\n\n // Highest score beyond which we give up.\n var score_threshold = this.Match_Threshold;\n // Is there a nearby exact match? (speedup)\n var best_loc = text.indexOf(pattern, loc);\n if (best_loc != -1) {\n score_threshold = Math.min(match_bitapScore_(0, best_loc), score_threshold);\n // What about in the other direction? (speedup)\n best_loc = text.lastIndexOf(pattern, loc + pattern.length);\n if (best_loc != -1) {\n score_threshold =\n Math.min(match_bitapScore_(0, best_loc), score_threshold);\n }\n }\n\n // Initialise the bit arrays.\n var matchmask = 1 << (pattern.length - 1);\n best_loc = -1;\n\n var bin_min, bin_mid;\n var bin_max = pattern.length + text.length;\n var last_rd;\n for (var d = 0; d < pattern.length; d++) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from 'loc' we can stray at this\n // error level.\n bin_min = 0;\n bin_mid = bin_max;\n while (bin_min < bin_mid) {\n if (match_bitapScore_(d, loc + bin_mid) <= score_threshold) {\n bin_min = bin_mid;\n } else {\n bin_max = bin_mid;\n }\n bin_mid = Math.floor((bin_max - bin_min) / 2 + bin_min);\n }\n // Use the result from this iteration as the maximum for the next.\n bin_max = bin_mid;\n var start = Math.max(1, loc - bin_mid + 1);\n var finish = Math.min(loc + bin_mid, text.length) + pattern.length;\n\n var rd = Array(finish + 2);\n rd[finish + 1] = (1 << d) - 1;\n for (var j = finish; j >= start; j--) {\n // The alphabet (s) is a sparse hash, so the following line generates\n // warnings.\n var charMatch = s[text.charAt(j - 1)];\n if (d === 0) { // First pass: exact match.\n rd[j] = ((rd[j + 1] << 1) | 1) & charMatch;\n } else { // Subsequent passes: fuzzy match.\n rd[j] = (((rd[j + 1] << 1) | 1) & charMatch) |\n (((last_rd[j + 1] | last_rd[j]) << 1) | 1) |\n last_rd[j + 1];\n }\n if (rd[j] & matchmask) {\n var score = match_bitapScore_(d, j - 1);\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (score <= score_threshold) {\n // Told you so.\n score_threshold = score;\n best_loc = j - 1;\n if (best_loc > loc) {\n // When passing loc, don't exceed our current distance from loc.\n start = Math.max(1, 2 * loc - best_loc);\n } else {\n // Already passed loc, downhill from here on in.\n break;\n }\n }\n }\n }\n // No hope for a (better) match at greater error levels.\n if (match_bitapScore_(d + 1, loc) > score_threshold) {\n break;\n }\n last_rd = rd;\n }\n return best_loc;\n};\n\n\n/**\n * Initialise the alphabet for the Bitap algorithm.\n * @param {string} pattern The text to encode.\n * @return {!Object} Hash of character locations.\n * @private\n */\ndiff_match_patch.prototype.match_alphabet_ = function(pattern) {\n var s = {};\n for (var i = 0; i < pattern.length; i++) {\n s[pattern.charAt(i)] = 0;\n }\n for (var i = 0; i < pattern.length; i++) {\n s[pattern.charAt(i)] |= 1 << (pattern.length - i - 1);\n }\n return s;\n};\n\n\n// PATCH FUNCTIONS\n\n\n/**\n * Increase the context until it is unique,\n * but don't let the pattern expand beyond Match_MaxBits.\n * @param {!diff_match_patch.patch_obj} patch The patch to grow.\n * @param {string} text Source text.\n * @private\n */\ndiff_match_patch.prototype.patch_addContext_ = function(patch, text) {\n if (text.length == 0) {\n return;\n }\n if (patch.start2 === null) {\n throw Error('patch not initialized');\n }\n var pattern = text.substring(patch.start2, patch.start2 + patch.length1);\n var padding = 0;\n\n // Look for the first and last matches of pattern in text. If two different\n // matches are found, increase the pattern length.\n while (text.indexOf(pattern) != text.lastIndexOf(pattern) &&\n pattern.length < this.Match_MaxBits - this.Patch_Margin -\n this.Patch_Margin) {\n padding += this.Patch_Margin;\n pattern = text.substring(patch.start2 - padding,\n patch.start2 + patch.length1 + padding);\n }\n // Add one chunk for good luck.\n padding += this.Patch_Margin;\n\n // Add the prefix.\n var prefix = text.substring(patch.start2 - padding, patch.start2);\n if (prefix) {\n patch.diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, prefix));\n }\n // Add the suffix.\n var suffix = text.substring(patch.start2 + patch.length1,\n patch.start2 + patch.length1 + padding);\n if (suffix) {\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, suffix));\n }\n\n // Roll back the start points.\n patch.start1 -= prefix.length;\n patch.start2 -= prefix.length;\n // Extend the lengths.\n patch.length1 += prefix.length + suffix.length;\n patch.length2 += prefix.length + suffix.length;\n};\n\n\n/**\n * Compute a list of patches to turn text1 into text2.\n * Use diffs if provided, otherwise compute it ourselves.\n * There are four ways to call this function, depending on what data is\n * available to the caller:\n * Method 1:\n * a = text1, b = text2\n * Method 2:\n * a = diffs\n * Method 3 (optimal):\n * a = text1, b = diffs\n * Method 4 (deprecated, use method 3):\n * a = text1, b = text2, c = diffs\n *\n * @param {string|!Array.} a text1 (methods 1,3,4) or\n * Array of diff tuples for text1 to text2 (method 2).\n * @param {string|!Array.=} opt_b text2 (methods 1,4) or\n * Array of diff tuples for text1 to text2 (method 3) or undefined (method 2).\n * @param {string|!Array.=} opt_c Array of diff tuples\n * for text1 to text2 (method 4) or undefined (methods 1,2,3).\n * @return {!Array.} Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_make = function(a, opt_b, opt_c) {\n var text1, diffs;\n if (typeof a == 'string' && typeof opt_b == 'string' &&\n typeof opt_c == 'undefined') {\n // Method 1: text1, text2\n // Compute diffs from text1 and text2.\n text1 = /** @type {string} */(a);\n diffs = this.diff_main(text1, /** @type {string} */(opt_b), true);\n if (diffs.length > 2) {\n this.diff_cleanupSemantic(diffs);\n this.diff_cleanupEfficiency(diffs);\n }\n } else if (a && typeof a == 'object' && typeof opt_b == 'undefined' &&\n typeof opt_c == 'undefined') {\n // Method 2: diffs\n // Compute text1 from diffs.\n diffs = /** @type {!Array.} */(a);\n text1 = this.diff_text1(diffs);\n } else if (typeof a == 'string' && opt_b && typeof opt_b == 'object' &&\n typeof opt_c == 'undefined') {\n // Method 3: text1, diffs\n text1 = /** @type {string} */(a);\n diffs = /** @type {!Array.} */(opt_b);\n } else if (typeof a == 'string' && typeof opt_b == 'string' &&\n opt_c && typeof opt_c == 'object') {\n // Method 4: text1, text2, diffs\n // text2 is not used.\n text1 = /** @type {string} */(a);\n diffs = /** @type {!Array.} */(opt_c);\n } else {\n throw new Error('Unknown call format to patch_make.');\n }\n\n if (diffs.length === 0) {\n return []; // Get rid of the null case.\n }\n var patches = [];\n var patch = new diff_match_patch.patch_obj();\n var patchDiffLength = 0; // Keeping our own length var is faster in JS.\n var char_count1 = 0; // Number of characters into the text1 string.\n var char_count2 = 0; // Number of characters into the text2 string.\n // Start with text1 (prepatch_text) and apply the diffs until we arrive at\n // text2 (postpatch_text). We recreate the patches one by one to determine\n // context info.\n var prepatch_text = text1;\n var postpatch_text = text1;\n for (var x = 0; x < diffs.length; x++) {\n var diff_type = diffs[x][0];\n var diff_text = diffs[x][1];\n\n if (!patchDiffLength && diff_type !== DIFF_EQUAL) {\n // A new patch starts here.\n patch.start1 = char_count1;\n patch.start2 = char_count2;\n }\n\n switch (diff_type) {\n case DIFF_INSERT:\n patch.diffs[patchDiffLength++] = diffs[x];\n patch.length2 += diff_text.length;\n postpatch_text = postpatch_text.substring(0, char_count2) + diff_text +\n postpatch_text.substring(char_count2);\n break;\n case DIFF_DELETE:\n patch.length1 += diff_text.length;\n patch.diffs[patchDiffLength++] = diffs[x];\n postpatch_text = postpatch_text.substring(0, char_count2) +\n postpatch_text.substring(char_count2 +\n diff_text.length);\n break;\n case DIFF_EQUAL:\n if (diff_text.length <= 2 * this.Patch_Margin &&\n patchDiffLength && diffs.length != x + 1) {\n // Small equality inside a patch.\n patch.diffs[patchDiffLength++] = diffs[x];\n patch.length1 += diff_text.length;\n patch.length2 += diff_text.length;\n } else if (diff_text.length >= 2 * this.Patch_Margin) {\n // Time for a new patch.\n if (patchDiffLength) {\n this.patch_addContext_(patch, prepatch_text);\n patches.push(patch);\n patch = new diff_match_patch.patch_obj();\n patchDiffLength = 0;\n // Unlike Unidiff, our patch lists have a rolling context.\n // https://github.com/google/diff-match-patch/wiki/Unidiff\n // Update prepatch text & pos to reflect the application of the\n // just completed patch.\n prepatch_text = postpatch_text;\n char_count1 = char_count2;\n }\n }\n break;\n }\n\n // Update the current character count.\n if (diff_type !== DIFF_INSERT) {\n char_count1 += diff_text.length;\n }\n if (diff_type !== DIFF_DELETE) {\n char_count2 += diff_text.length;\n }\n }\n // Pick up the leftover patch if not empty.\n if (patchDiffLength) {\n this.patch_addContext_(patch, prepatch_text);\n patches.push(patch);\n }\n\n return patches;\n};\n\n\n/**\n * Given an array of patches, return another array that is identical.\n * @param {!Array.} patches Array of Patch objects.\n * @return {!Array.} Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_deepCopy = function(patches) {\n // Making deep copies is hard in JavaScript.\n var patchesCopy = [];\n for (var x = 0; x < patches.length; x++) {\n var patch = patches[x];\n var patchCopy = new diff_match_patch.patch_obj();\n patchCopy.diffs = [];\n for (var y = 0; y < patch.diffs.length; y++) {\n patchCopy.diffs[y] =\n new diff_match_patch.Diff(patch.diffs[y][0], patch.diffs[y][1]);\n }\n patchCopy.start1 = patch.start1;\n patchCopy.start2 = patch.start2;\n patchCopy.length1 = patch.length1;\n patchCopy.length2 = patch.length2;\n patchesCopy[x] = patchCopy;\n }\n return patchesCopy;\n};\n\n\n/**\n * Merge a set of patches onto the text. Return a patched text, as well\n * as a list of true/false values indicating which patches were applied.\n * @param {!Array.} patches Array of Patch objects.\n * @param {string} text Old text.\n * @return {!Array.>} Two element Array, containing the\n * new text and an array of boolean values.\n */\ndiff_match_patch.prototype.patch_apply = function(patches, text) {\n if (patches.length == 0) {\n return [text, []];\n }\n\n // Deep copy the patches so that no changes are made to originals.\n patches = this.patch_deepCopy(patches);\n\n var nullPadding = this.patch_addPadding(patches);\n text = nullPadding + text + nullPadding;\n\n this.patch_splitMax(patches);\n // delta keeps track of the offset between the expected and actual location\n // of the previous patch. If there are patches expected at positions 10 and\n // 20, but the first patch was found at 12, delta is 2 and the second patch\n // has an effective expected position of 22.\n var delta = 0;\n var results = [];\n for (var x = 0; x < patches.length; x++) {\n var expected_loc = patches[x].start2 + delta;\n var text1 = this.diff_text1(patches[x].diffs);\n var start_loc;\n var end_loc = -1;\n if (text1.length > this.Match_MaxBits) {\n // patch_splitMax will only provide an oversized pattern in the case of\n // a monster delete.\n start_loc = this.match_main(text, text1.substring(0, this.Match_MaxBits),\n expected_loc);\n if (start_loc != -1) {\n end_loc = this.match_main(text,\n text1.substring(text1.length - this.Match_MaxBits),\n expected_loc + text1.length - this.Match_MaxBits);\n if (end_loc == -1 || start_loc >= end_loc) {\n // Can't find valid trailing context. Drop this patch.\n start_loc = -1;\n }\n }\n } else {\n start_loc = this.match_main(text, text1, expected_loc);\n }\n if (start_loc == -1) {\n // No match found. :(\n results[x] = false;\n // Subtract the delta for this failed patch from subsequent patches.\n delta -= patches[x].length2 - patches[x].length1;\n } else {\n // Found a match. :)\n results[x] = true;\n delta = start_loc - expected_loc;\n var text2;\n if (end_loc == -1) {\n text2 = text.substring(start_loc, start_loc + text1.length);\n } else {\n text2 = text.substring(start_loc, end_loc + this.Match_MaxBits);\n }\n if (text1 == text2) {\n // Perfect match, just shove the replacement text in.\n text = text.substring(0, start_loc) +\n this.diff_text2(patches[x].diffs) +\n text.substring(start_loc + text1.length);\n } else {\n // Imperfect match. Run a diff to get a framework of equivalent\n // indices.\n var diffs = this.diff_main(text1, text2, false);\n if (text1.length > this.Match_MaxBits &&\n this.diff_levenshtein(diffs) / text1.length >\n this.Patch_DeleteThreshold) {\n // The end points match, but the content is unacceptably bad.\n results[x] = false;\n } else {\n this.diff_cleanupSemanticLossless(diffs);\n var index1 = 0;\n var index2;\n for (var y = 0; y < patches[x].diffs.length; y++) {\n var mod = patches[x].diffs[y];\n if (mod[0] !== DIFF_EQUAL) {\n index2 = this.diff_xIndex(diffs, index1);\n }\n if (mod[0] === DIFF_INSERT) { // Insertion\n text = text.substring(0, start_loc + index2) + mod[1] +\n text.substring(start_loc + index2);\n } else if (mod[0] === DIFF_DELETE) { // Deletion\n text = text.substring(0, start_loc + index2) +\n text.substring(start_loc + this.diff_xIndex(diffs,\n index1 + mod[1].length));\n }\n if (mod[0] !== DIFF_DELETE) {\n index1 += mod[1].length;\n }\n }\n }\n }\n }\n }\n // Strip the padding off.\n text = text.substring(nullPadding.length, text.length - nullPadding.length);\n return [text, results];\n};\n\n\n/**\n * Add some padding on text start and end so that edges can match something.\n * Intended to be called only from within patch_apply.\n * @param {!Array.} patches Array of Patch objects.\n * @return {string} The padding string added to each side.\n */\ndiff_match_patch.prototype.patch_addPadding = function(patches) {\n var paddingLength = this.Patch_Margin;\n var nullPadding = '';\n for (var x = 1; x <= paddingLength; x++) {\n nullPadding += String.fromCharCode(x);\n }\n\n // Bump all the patches forward.\n for (var x = 0; x < patches.length; x++) {\n patches[x].start1 += paddingLength;\n patches[x].start2 += paddingLength;\n }\n\n // Add some padding on start of first diff.\n var patch = patches[0];\n var diffs = patch.diffs;\n if (diffs.length == 0 || diffs[0][0] != DIFF_EQUAL) {\n // Add nullPadding equality.\n diffs.unshift(new diff_match_patch.Diff(DIFF_EQUAL, nullPadding));\n patch.start1 -= paddingLength; // Should be 0.\n patch.start2 -= paddingLength; // Should be 0.\n patch.length1 += paddingLength;\n patch.length2 += paddingLength;\n } else if (paddingLength > diffs[0][1].length) {\n // Grow first equality.\n var extraLength = paddingLength - diffs[0][1].length;\n diffs[0][1] = nullPadding.substring(diffs[0][1].length) + diffs[0][1];\n patch.start1 -= extraLength;\n patch.start2 -= extraLength;\n patch.length1 += extraLength;\n patch.length2 += extraLength;\n }\n\n // Add some padding on end of last diff.\n patch = patches[patches.length - 1];\n diffs = patch.diffs;\n if (diffs.length == 0 || diffs[diffs.length - 1][0] != DIFF_EQUAL) {\n // Add nullPadding equality.\n diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, nullPadding));\n patch.length1 += paddingLength;\n patch.length2 += paddingLength;\n } else if (paddingLength > diffs[diffs.length - 1][1].length) {\n // Grow last equality.\n var extraLength = paddingLength - diffs[diffs.length - 1][1].length;\n diffs[diffs.length - 1][1] += nullPadding.substring(0, extraLength);\n patch.length1 += extraLength;\n patch.length2 += extraLength;\n }\n\n return nullPadding;\n};\n\n\n/**\n * Look through the patches and break up any which are longer than the maximum\n * limit of the match algorithm.\n * Intended to be called only from within patch_apply.\n * @param {!Array.} patches Array of Patch objects.\n */\ndiff_match_patch.prototype.patch_splitMax = function(patches) {\n var patch_size = this.Match_MaxBits;\n for (var x = 0; x < patches.length; x++) {\n if (patches[x].length1 <= patch_size) {\n continue;\n }\n var bigpatch = patches[x];\n // Remove the big old patch.\n patches.splice(x--, 1);\n var start1 = bigpatch.start1;\n var start2 = bigpatch.start2;\n var precontext = '';\n while (bigpatch.diffs.length !== 0) {\n // Create one of several smaller patches.\n var patch = new diff_match_patch.patch_obj();\n var empty = true;\n patch.start1 = start1 - precontext.length;\n patch.start2 = start2 - precontext.length;\n if (precontext !== '') {\n patch.length1 = patch.length2 = precontext.length;\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, precontext));\n }\n while (bigpatch.diffs.length !== 0 &&\n patch.length1 < patch_size - this.Patch_Margin) {\n var diff_type = bigpatch.diffs[0][0];\n var diff_text = bigpatch.diffs[0][1];\n if (diff_type === DIFF_INSERT) {\n // Insertions are harmless.\n patch.length2 += diff_text.length;\n start2 += diff_text.length;\n patch.diffs.push(bigpatch.diffs.shift());\n empty = false;\n } else if (diff_type === DIFF_DELETE && patch.diffs.length == 1 &&\n patch.diffs[0][0] == DIFF_EQUAL &&\n diff_text.length > 2 * patch_size) {\n // This is a large deletion. Let it pass in one chunk.\n patch.length1 += diff_text.length;\n start1 += diff_text.length;\n empty = false;\n patch.diffs.push(new diff_match_patch.Diff(diff_type, diff_text));\n bigpatch.diffs.shift();\n } else {\n // Deletion or equality. Only take as much as we can stomach.\n diff_text = diff_text.substring(0,\n patch_size - patch.length1 - this.Patch_Margin);\n patch.length1 += diff_text.length;\n start1 += diff_text.length;\n if (diff_type === DIFF_EQUAL) {\n patch.length2 += diff_text.length;\n start2 += diff_text.length;\n } else {\n empty = false;\n }\n patch.diffs.push(new diff_match_patch.Diff(diff_type, diff_text));\n if (diff_text == bigpatch.diffs[0][1]) {\n bigpatch.diffs.shift();\n } else {\n bigpatch.diffs[0][1] =\n bigpatch.diffs[0][1].substring(diff_text.length);\n }\n }\n }\n // Compute the head context for the next patch.\n precontext = this.diff_text2(patch.diffs);\n precontext =\n precontext.substring(precontext.length - this.Patch_Margin);\n // Append the end context for this patch.\n var postcontext = this.diff_text1(bigpatch.diffs)\n .substring(0, this.Patch_Margin);\n if (postcontext !== '') {\n patch.length1 += postcontext.length;\n patch.length2 += postcontext.length;\n if (patch.diffs.length !== 0 &&\n patch.diffs[patch.diffs.length - 1][0] === DIFF_EQUAL) {\n patch.diffs[patch.diffs.length - 1][1] += postcontext;\n } else {\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, postcontext));\n }\n }\n if (!empty) {\n patches.splice(++x, 0, patch);\n }\n }\n }\n};\n\n\n/**\n * Take a list of patches and return a textual representation.\n * @param {!Array.} patches Array of Patch objects.\n * @return {string} Text representation of patches.\n */\ndiff_match_patch.prototype.patch_toText = function(patches) {\n var text = [];\n for (var x = 0; x < patches.length; x++) {\n text[x] = patches[x];\n }\n return text.join('');\n};\n\n\n/**\n * Parse a textual representation of patches and return a list of Patch objects.\n * @param {string} textline Text representation of patches.\n * @return {!Array.} Array of Patch objects.\n * @throws {!Error} If invalid input.\n */\ndiff_match_patch.prototype.patch_fromText = function(textline) {\n var patches = [];\n if (!textline) {\n return patches;\n }\n var text = textline.split('\\n');\n var textPointer = 0;\n var patchHeader = /^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;\n while (textPointer < text.length) {\n var m = text[textPointer].match(patchHeader);\n if (!m) {\n throw new Error('Invalid patch string: ' + text[textPointer]);\n }\n var patch = new diff_match_patch.patch_obj();\n patches.push(patch);\n patch.start1 = parseInt(m[1], 10);\n if (m[2] === '') {\n patch.start1--;\n patch.length1 = 1;\n } else if (m[2] == '0') {\n patch.length1 = 0;\n } else {\n patch.start1--;\n patch.length1 = parseInt(m[2], 10);\n }\n\n patch.start2 = parseInt(m[3], 10);\n if (m[4] === '') {\n patch.start2--;\n patch.length2 = 1;\n } else if (m[4] == '0') {\n patch.length2 = 0;\n } else {\n patch.start2--;\n patch.length2 = parseInt(m[4], 10);\n }\n textPointer++;\n\n while (textPointer < text.length) {\n var sign = text[textPointer].charAt(0);\n try {\n var line = decodeURI(text[textPointer].substring(1));\n } catch (ex) {\n // Malformed URI sequence.\n throw new Error('Illegal escape in patch_fromText: ' + line);\n }\n if (sign == '-') {\n // Deletion.\n patch.diffs.push(new diff_match_patch.Diff(DIFF_DELETE, line));\n } else if (sign == '+') {\n // Insertion.\n patch.diffs.push(new diff_match_patch.Diff(DIFF_INSERT, line));\n } else if (sign == ' ') {\n // Minor equality.\n patch.diffs.push(new diff_match_patch.Diff(DIFF_EQUAL, line));\n } else if (sign == '@') {\n // Start of next patch.\n break;\n } else if (sign === '') {\n // Blank line? Whatever.\n } else {\n // WTF?\n throw new Error('Invalid patch mode \"' + sign + '\" in: ' + line);\n }\n textPointer++;\n }\n }\n return patches;\n};\n\n\n/**\n * Class representing one patch operation.\n * @constructor\n */\ndiff_match_patch.patch_obj = function() {\n /** @type {!Array.} */\n this.diffs = [];\n /** @type {?number} */\n this.start1 = null;\n /** @type {?number} */\n this.start2 = null;\n /** @type {number} */\n this.length1 = 0;\n /** @type {number} */\n this.length2 = 0;\n};\n\n\n/**\n * Emulate GNU diff's format.\n * Header: @@ -382,8 +481,9 @@\n * Indices are printed as 1-based, not 0-based.\n * @return {string} The GNU diff string.\n */\ndiff_match_patch.patch_obj.prototype.toString = function() {\n var coords1, coords2;\n if (this.length1 === 0) {\n coords1 = this.start1 + ',0';\n } else if (this.length1 == 1) {\n coords1 = this.start1 + 1;\n } else {\n coords1 = (this.start1 + 1) + ',' + this.length1;\n }\n if (this.length2 === 0) {\n coords2 = this.start2 + ',0';\n } else if (this.length2 == 1) {\n coords2 = this.start2 + 1;\n } else {\n coords2 = (this.start2 + 1) + ',' + this.length2;\n }\n var text = ['@@ -' + coords1 + ' +' + coords2 + ' @@\\n'];\n var op;\n // Escape the body of the patch with %xx notation.\n for (var x = 0; x < this.diffs.length; x++) {\n switch (this.diffs[x][0]) {\n case DIFF_INSERT:\n op = '+';\n break;\n case DIFF_DELETE:\n op = '-';\n break;\n case DIFF_EQUAL:\n op = ' ';\n break;\n }\n text[x + 1] = op + encodeURI(this.diffs[x][1]) + '\\n';\n }\n return text.join('').replace(/%20/g, ' ');\n};\n\n\n// The following export code was added by @ForbesLindesay\nmodule.exports = diff_match_patch;\nmodule.exports['diff_match_patch'] = diff_match_patch;\nmodule.exports['DIFF_DELETE'] = DIFF_DELETE;\nmodule.exports['DIFF_INSERT'] = DIFF_INSERT;\nmodule.exports['DIFF_EQUAL'] = DIFF_EQUAL;","module.exports = __webpack_public_path__ + \"852f0ecd7b17e3bfd700a821ff438f7e.js\";","module.exports = __webpack_public_path__ + \"7d64980faff5b041a461fd0ba3e2f3f5.js\";","module.exports = __webpack_public_path__ + \"1db8d65ab1ad8dbb0aae7b9ebe280ca7.js\";","module.exports = __webpack_public_path__ + \"69ec362e03850ff2d49044acbb19b385.js\";","module.exports = __webpack_public_path__ + \"c530988d2b1966fd10a4d99fa3877e1b.js\";","module.exports = __webpack_public_path__ + \"2fe2904fc024afaf81732563cb83e547.js\";","module.exports = __webpack_public_path__ + \"cfe1a9dd61dd943a574fc6c7157372f7.js\";","module.exports = __webpack_public_path__ + \"46f088332f17d2ea452bd0ef7a5cdbc6.js\";","module.exports = __webpack_public_path__ + \"fec23c6964d6cf25681d1f3e24b076a4.js\";","module.exports = __webpack_public_path__ + \"99de4742973bc7dafad57b3acb83e758.js\";","module.exports = __webpack_public_path__ + \"0066646fda896809ffd83586c34fd2d6.js\";","module.exports = __webpack_public_path__ + \"535cfdbca2590d502868ee1f5897bc81.js\";","module.exports = __webpack_public_path__ + \"07567125b93045706d81f17f7d04e262.js\";","module.exports = __webpack_public_path__ + \"f3a21a0f236d2b7d45be954c32efaa14.js\";","module.exports = __webpack_public_path__ + \"0e5c4fdbb8cc1c01889edd32840ef257.js\";","module.exports = __webpack_public_path__ + \"2f55cddc8eb85b63ee5b4ce0e5488230.js\";","module.exports = __webpack_public_path__ + \"6f77d1c97d1c6937d21c4a1034be62b6.js\";","module.exports = __webpack_public_path__ + \"c92169023ff93e3c3e03bc2f4c73615a.js\";","module.exports = __webpack_public_path__ + \"cbf021d377207ecc00145a138fd03f0f.js\";","module.exports = __webpack_public_path__ + \"645b74a0625033669c9d0440b32e3fd0.js\";","module.exports = __webpack_public_path__ + \"16b5146f5e9b7a1a196f6d11a6187282.js\";","module.exports = __webpack_public_path__ + \"2f25a4dc442bc9aebc58cae30c50c3e2.js\";","module.exports = __webpack_public_path__ + \"6365d65802807679247605c8df7ea9ec.js\";","module.exports = __webpack_public_path__ + \"3b02cca9e95276a74f3ed2bbc7a64ce6.js\";","module.exports = __webpack_public_path__ + \"1cf2db2fd7f8a1191df79e56059f2b0c.js\";","module.exports = __webpack_public_path__ + \"e06608fe5b8e7e9d30879d4d91113a08.js\";","module.exports = __webpack_public_path__ + \"fb08407a1b7ad7f9a2da2a7845f596c5.js\";","module.exports = __webpack_public_path__ + \"bf37de323316c6ae5745fc11fd576b1c.js\";","module.exports = __webpack_public_path__ + \"875ae58e8015a6d08dbc9d0c04e24638.js\";","module.exports = __webpack_public_path__ + \"392e4c8d74cb1c9267a14eb0270ba2d6.js\";","module.exports = __webpack_public_path__ + \"d4f1a314cb3668f8e17f24bccf0229b6.js\";","module.exports = __webpack_public_path__ + \"39fea85ed7dd99d7c6c9e59b7040523f.js\";","module.exports = __webpack_public_path__ + \"686915e134683f72ea5f3c227a6f13be.js\";","module.exports = __webpack_public_path__ + \"2611b2dc99534665bf6734ddfa6b8de4.js\";","module.exports = __webpack_public_path__ + \"cd29b6e52c3ebcbaee8c7bb709fd1d8e.js\";","module.exports = __webpack_public_path__ + \"0b06cbc7edf78b6f2810187262e7630b.js\";","module.exports = __webpack_public_path__ + \"d3a6de3a3eae748464b9d49001eba546.js\";","module.exports = __webpack_public_path__ + \"a6b8f5b8c9ce7808c5ca6baccdf1ad1e.js\";","module.exports = __webpack_public_path__ + \"fa0c561bb37040fc8145e5c70ea64912.js\";","module.exports = __webpack_public_path__ + \"4b692785a8a6340a89e6067274a7583c.js\";","module.exports = __webpack_public_path__ + \"5cab33610b8d9c1aee4db4672811cb5f.js\";","module.exports = __webpack_public_path__ + \"02b97d3c4a7e895228beec69fb63e420.js\";","module.exports = __webpack_public_path__ + \"efbb5510bc35424b261de45355e3a626.js\";","module.exports = __webpack_public_path__ + \"92164e5d714ab4cda2b91eede29bc191.js\";","module.exports = __webpack_public_path__ + \"5061ac5e99882b9f26051a5d73c75271.js\";","module.exports = __webpack_public_path__ + \"a72ec8ab4a5bdfd6695dfa5fa86ef30d.js\";","module.exports = __webpack_public_path__ + \"3a3b2fef963d6c2c49c5b11b74a9ea81.js\";","module.exports = __webpack_public_path__ + \"c2fb2aaf17fa23ca4b9bf7f1c1441caa.js\";","module.exports = __webpack_public_path__ + \"8f8ce96f0f6ce8d8a30d5f2dcb4eca76.js\";","module.exports = __webpack_public_path__ + \"039ae6f160cd9781bcbb003484e23cdc.js\";","module.exports = __webpack_public_path__ + \"e6eaab85fd163bbcf98c4fa0471be643.js\";","module.exports = __webpack_public_path__ + \"3b46f110a112d3475064a217b5dae689.js\";","module.exports = __webpack_public_path__ + \"b992b348ffb6453e4a02a60e71c5304e.js\";","module.exports = __webpack_public_path__ + \"9b80d1a12acd18c90e41ca92073122a7.js\";","module.exports = __webpack_public_path__ + \"3564e45dfb2ed064007f910db434889f.js\";","module.exports = __webpack_public_path__ + \"3bfb519dbb980d6d8fee1bf543dfc5ae.js\";","module.exports = __webpack_public_path__ + \"ab3d46f8dd12e29e10eb35c5e406bbcb.js\";","module.exports = __webpack_public_path__ + \"d72f9e2d15bf7a51a613e2f116b1a2df.js\";","module.exports = __webpack_public_path__ + \"43139bfbcbce9de597b4985dc1e6a03b.js\";","module.exports = __webpack_public_path__ + \"f2abbd0caa62a607a87be62111595f0c.js\";","module.exports = __webpack_public_path__ + \"8b0e5da82a1aa923f454ee2e6568850b.js\";","module.exports = __webpack_public_path__ + \"474c86d7a4a0fa50030c6503fdb52392.js\";","module.exports = __webpack_public_path__ + \"cd88309c904c403022c51d1fa3ee4bf3.js\";","module.exports = __webpack_public_path__ + \"3063479c31202a0d1ecf707b2a4ce742.js\";","module.exports = __webpack_public_path__ + \"2adc6bc4a8a2bf35636e8fc7fe0df2dd.js\";","module.exports = __webpack_public_path__ + \"438ed06fb7f9516b12edaf7411c832b0.js\";","module.exports = __webpack_public_path__ + \"277128dcbc226dfeb8fde9391fb24787.js\";","module.exports = __webpack_public_path__ + \"e0fa6a4fe8bff90d50ce812e666957ca.js\";","module.exports = __webpack_public_path__ + \"262f489eb59166e1215642b60446d123.js\";","module.exports = __webpack_public_path__ + \"10c464f3f882bfeeefbc0934c2ee9fbe.js\";","module.exports = __webpack_public_path__ + \"19017707f34649cae551ee9d5ea1edbf.js\";","module.exports = __webpack_public_path__ + \"135747176621bcc94e9edd0323a81d3c.js\";","module.exports = __webpack_public_path__ + \"111d9fdb9864abba36298d1a0807fe6d.js\";","module.exports = __webpack_public_path__ + \"a13fa501edcc6c9712061e0ca5fd400e.js\";","module.exports = __webpack_public_path__ + \"ac12519ccf3cc323b28f70e35f922e3f.js\";","module.exports = __webpack_public_path__ + \"410ecb602443afbd5908a14f39b40eb2.js\";","module.exports = __webpack_public_path__ + \"73cdbb2580cd6a02d989c86e56bb83f3.js\";","module.exports = __webpack_public_path__ + \"919edf70e532c72ecd4b9579c1879bc2.js\";","module.exports = __webpack_public_path__ + \"3bd6e7a72c8b16825ce3a83b17bd681e.js\";","module.exports = __webpack_public_path__ + \"945ea249c1f1d3595cc55a51046d9032.js\";","module.exports = __webpack_public_path__ + \"363d3bac8dcd9a83332c3758185ce080.js\";","module.exports = __webpack_public_path__ + \"252b829e2dab81bc5a4c28d52f34edf5.js\";","module.exports = __webpack_public_path__ + \"5aedf04cf240c6c43540081c3bf9573e.js\";","module.exports = __webpack_public_path__ + \"ffb6d262efb0718a20d60b5fecb76ea6.js\";","module.exports = __webpack_public_path__ + \"5df362c9904925cdf574d9506e4be76d.js\";","module.exports = __webpack_public_path__ + \"5f8e9f09349e37425d6ef96bf1bf7a2d.js\";","module.exports = __webpack_public_path__ + \"979239ac9b74c2c57dcc2b66e7e3b353.js\";","module.exports = __webpack_public_path__ + \"83bd353f98aa901411c82b8af58d1296.js\";","module.exports = __webpack_public_path__ + \"3053f55c4697117c4c2cd156803b3155.js\";","module.exports = __webpack_public_path__ + \"3fa11e77942b4cf2c50e845525ae5a9f.js\";","module.exports = __webpack_public_path__ + \"3fe09c1c283d4a26d228f37a77a018b2.js\";","module.exports = __webpack_public_path__ + \"4d156ee0485ab4b40b090a3cd7b995a9.js\";","module.exports = __webpack_public_path__ + \"3a6ca6958d003ae67bb7fefc8713ee93.js\";","module.exports = __webpack_public_path__ + \"54a7b0b5248e428a4a703329f36e286f.js\";","module.exports = __webpack_public_path__ + \"5b2b9bc695bfdee92665388010a7e74d.js\";","module.exports = __webpack_public_path__ + \"4afde8c89469302b064e693fa77035f6.js\";","module.exports = __webpack_public_path__ + \"494ca3291c219565bfb6e45f8eb8c583.js\";","module.exports = __webpack_public_path__ + \"275b72e6e6256f50527832ba14ec291e.js\";","module.exports = __webpack_public_path__ + \"4816d92f4fbed14925ed1946f4135365.js\";","module.exports = __webpack_public_path__ + \"6257c20a623b032171b358cc95a1adab.js\";","module.exports = __webpack_public_path__ + \"d8f7ecdd496f3caf14f5afbedfff1937.js\";","module.exports = __webpack_public_path__ + \"1092154c23dcc20005a669b15497159f.js\";","module.exports = __webpack_public_path__ + \"a4e021a4b5d5d65cc87fee17c1886c3f.js\";","module.exports = __webpack_public_path__ + \"023545291c7d55eb893591da836fc73d.js\";","module.exports = __webpack_public_path__ + \"349237ad9565dc823ce7bcb7527ba7ee.js\";","module.exports = __webpack_public_path__ + \"6707296f86034ccf2225ce3c27370114.js\";","module.exports = __webpack_public_path__ + \"6327ff8d569aa463a91e5ea774d1980e.js\";","module.exports = __webpack_public_path__ + \"727e2cbdf695b3abfe88917062d16a5f.js\";","module.exports = __webpack_public_path__ + \"bba393726b199f66d8b4314385c1f2f0.js\";","module.exports = __webpack_public_path__ + \"96efd2775defcf3611fe9a07ed29065f.js\";","module.exports = __webpack_public_path__ + \"c3174a46927bbec0fbd8946f97bd7170.js\";","module.exports = __webpack_public_path__ + \"2ad349208b3a727abb3c9f943865a27c.js\";","module.exports = __webpack_public_path__ + \"b491027881efabe4493ad65daf3368de.js\";","module.exports = __webpack_public_path__ + \"d1f0ad8ca2a550bc292669b06a614f79.js\";","module.exports = __webpack_public_path__ + \"ad88ef07c8c702b1a5f1e3d19c1052c7.js\";","module.exports = __webpack_public_path__ + \"e45a0dfd102b67ad7cdefe10500bf0d7.js\";","module.exports = __webpack_public_path__ + \"1ef4b371fd98f0144354e57bb89d7fa3.js\";","module.exports = __webpack_public_path__ + \"50bd9a652785963a5d7d24bda4dee4ca.js\";","module.exports = __webpack_public_path__ + \"08d12eee2127dc573b757f69752c6704.js\";","module.exports = __webpack_public_path__ + \"3f4c28f4ad0e1ddff1d9536f6d891063.js\";","module.exports = __webpack_public_path__ + \"489b22b946f5972fed0daab6ef587c60.js\";","module.exports = __webpack_public_path__ + \"b943c561d9e064f79f938275bad6e597.js\";","module.exports = __webpack_public_path__ + \"52fd09d1713345d9ee64dc7daea9fd6f.js\";","module.exports = __webpack_public_path__ + \"d1db2c4677dd2ee7a0c690c58798a013.js\";","module.exports = __webpack_public_path__ + \"116d29a13f16f0a9bf9c25eaa2186c24.js\";","module.exports = __webpack_public_path__ + \"55a1830305eaf8f525aad4c04c138483.js\";","module.exports = __webpack_public_path__ + \"7620537538da40e17ccbf70a43f4fd0c.js\";","module.exports = __webpack_public_path__ + \"6231f0100394f756aac18e8d972d8f2b.js\";","module.exports = __webpack_public_path__ + \"4f89e8c1a691faf5f1bfe3987ddf108a.js\";","module.exports = __webpack_public_path__ + \"4d6d9020e7e5c8d8dee7a5e374355f05.js\";","module.exports = __webpack_public_path__ + \"4430c55f023b72fb5e389cee9351b38c.js\";","module.exports = __webpack_public_path__ + \"d723acafb30584c955c9aeaedb3e03f0.js\";","module.exports = __webpack_public_path__ + \"9b3441051d8551264ac58b36253b9b10.js\";","module.exports = __webpack_public_path__ + \"677b2b5d0c9507508a831e4b67d61c6e.js\";","module.exports = __webpack_public_path__ + \"154e51d48e7dc7f244bf748e4deb64f9.js\";","module.exports = __webpack_public_path__ + \"8de1f09307a99c5a8bb0a53d32fbaaa9.js\";","module.exports = __webpack_public_path__ + \"8cfffdd2f772eec8342fdfc4d511e0cc.js\";","module.exports = __webpack_public_path__ + \"df350f726187b69bcededaaed6cf5f31.js\";","module.exports = __webpack_public_path__ + \"b8cb123e6c753c6031ab9c6a4acbbcd6.js\";","module.exports = __webpack_public_path__ + \"99e45b7d238576aa6d4c830bd8715356.js\";","module.exports = __webpack_public_path__ + \"3b8b51248b6aa0474a02a6c352d1caa1.js\";","module.exports = __webpack_public_path__ + \"b76ff0f203825dcdefb649d98de32f5b.js\";","module.exports = __webpack_public_path__ + \"764b59bdd3a89e14f88c9d63020551a1.js\";","module.exports = __webpack_public_path__ + \"843c762c24f7fac628d8c62519a7b308.js\";","module.exports = __webpack_public_path__ + \"f5dfa3d3658fddbce84d7c3ecd5504f0.js\";","module.exports = __webpack_public_path__ + \"7f9a9efc9ab681fcbf6400e2adb368a9.js\";","module.exports = __webpack_public_path__ + \"23602ad4c88f0f19e7a0a12454ebf556.js\";","module.exports = __webpack_public_path__ + \"7f79d4bde67c8013b187889b63e25bce.js\";","module.exports = __webpack_public_path__ + \"0144de97a3c256f81447e7e7135780e5.js\";","module.exports = __webpack_public_path__ + \"9296988a753e8e251ff627aef2c929e8.js\";","module.exports = __webpack_public_path__ + \"56ddbe1e119db3c02da97dc04012cf2b.js\";","module.exports = __webpack_public_path__ + \"8d7988f603ec76ecb92315442285a83d.js\";","module.exports = __webpack_public_path__ + \"250c230f9465d8affc02c67d41d7e067.js\";","module.exports = __webpack_public_path__ + \"ff9176b28afa428194276840d85679ef.js\";","module.exports = __webpack_public_path__ + \"938b32f75aefeab50ba608132c5862c8.js\";","module.exports = __webpack_public_path__ + \"3aa8f5e8ff182ed46cb6570dad4c4eee.js\";","module.exports = __webpack_public_path__ + \"f59696ab0f6f26c339d7e6bb1d73a5c3.js\";","module.exports = __webpack_public_path__ + \"5cd4e1282f4409600b942819b7aa4f21.js\";","module.exports = __webpack_public_path__ + \"151786e5421aae5a57d862be1387a079.js\";","module.exports = __webpack_public_path__ + \"cd1309ef590ed94ac5735c4c667e6549.js\";","module.exports = __webpack_public_path__ + \"11e3a2a8fb5bcb9d19298a80cafd3f5a.js\";","module.exports = __webpack_public_path__ + \"0973bb38b2e3efd2a879fd8e81d50fce.js\";","module.exports = __webpack_public_path__ + \"b49ae09a10a2a2d6dfc7ba9cb37cbbb3.js\";","module.exports = __webpack_public_path__ + \"a9ed61bdf8ae777e7a6f68bf7175e839.js\";","module.exports = __webpack_public_path__ + \"2765855f04cd6d7fb7fcf0a81c1e2022.js\";","module.exports = __webpack_public_path__ + \"19df93bf1797b4caf8232cc4b544f865.js\";","module.exports = __webpack_public_path__ + \"7cc98960277ab04470e3ff9ed5fc6028.js\";","module.exports = __webpack_public_path__ + \"397e6669a1d15065bd742d20079d6a95.js\";","module.exports = __webpack_public_path__ + \"951a8cbe4efaab1b1451ffd8904fc9dd.js\";","module.exports = __webpack_public_path__ + \"4686855c499be892779f614770ec2cf7.js\";","module.exports = __webpack_public_path__ + \"a58f90f6c8db84024327b4d9059c991e.js\";","module.exports = __webpack_public_path__ + \"4b75999ea99d719689337def2fab50a3.js\";","module.exports = __webpack_public_path__ + \"49c58e614c06572ffbabe974a7fda21c.js\";","module.exports = __webpack_public_path__ + \"7ac231f87e62311204964a1080ffc478.js\";","module.exports = __webpack_public_path__ + \"66713913fc89a3bcad5d7804c03dcb43.js\";","module.exports = __webpack_public_path__ + \"949a350e1d9f92839865e927eb00673f.js\";","module.exports = __webpack_public_path__ + \"40f9100a898e3396df73051eb7c44cb8.js\";","module.exports = __webpack_public_path__ + \"e430b621361ebe3a4071e3cca1d0dbe8.js\";","module.exports = __webpack_public_path__ + \"77c629df0ebf40b066d0ffeb34b7711b.js\";","module.exports = __webpack_public_path__ + \"069a0d6b093e73e820f6a60a91fa614b.js\";","module.exports = __webpack_public_path__ + \"f8ee12a5cfa6ff1d3550ef30a238d89a.js\";","module.exports = __webpack_public_path__ + \"0ec8abb2e91cb079eed4605ea6851cb8.js\";","module.exports = __webpack_public_path__ + \"8db9f93698f3eea94f936fcb5986f1a3.js\";","module.exports = __webpack_public_path__ + \"70e2f052e416e2611ded0f57ed53f18a.js\";","module.exports = __webpack_public_path__ + \"93be766c753e075a3f7d5b89b3ee04ce.js\";","module.exports = __webpack_public_path__ + \"aefed4953ced506e20b934606ac083f3.js\";","module.exports = __webpack_public_path__ + \"7e4b5afab13800eedc72d1669997de99.js\";","module.exports = __webpack_public_path__ + \"0c1e757d25446799bcab87a8607dee60.js\";","module.exports = __webpack_public_path__ + \"25718a469574ade47e23567d8c543169.js\";","module.exports = __webpack_public_path__ + \"b934b22e8f8a8b1ba81dbc2cf058b0cd.js\";","module.exports = __webpack_public_path__ + \"9fd3f255cfd09016ec7f4896bc51864c.js\";","module.exports = __webpack_public_path__ + \"996d24547b492c3140f64d51f5229f3c.js\";","module.exports = __webpack_public_path__ + \"84abf03cc94d264bb38020b4ac5f76e1.js\";","module.exports = __webpack_public_path__ + \"83e2ed887ee6426c8e0aa4d976b76720.js\";","module.exports = __webpack_public_path__ + \"2e2f30806fe3accb9b340fb082a1494e.js\";","module.exports = __webpack_public_path__ + \"f5d50af31e924b65e3bd3764e8d1df3a.js\";","module.exports = __webpack_public_path__ + \"ab237eed5fd16ab99c06f0d28d465edb.js\";","module.exports = __webpack_public_path__ + \"e0564e4f4ec3f3165b6890be52cf9a5e.js\";","module.exports = __webpack_public_path__ + \"41469950e6a0ef73a57342235b44c55a.js\";","module.exports = __webpack_public_path__ + \"71f39fefd16025c224fe31cdb352ae01.js\";","module.exports = __webpack_public_path__ + \"4f5c3cb0b76fa2978539d8b64a71537d.js\";","module.exports = __webpack_public_path__ + \"583d06a5b9251de455ebd89550449842.js\";","module.exports = __webpack_public_path__ + \"e13fc7d468ab9b5797f2a44412ca2f00.js\";","module.exports = __webpack_public_path__ + \"03452373324e7ceaf58e3830eafd1a28.js\";","module.exports = __webpack_public_path__ + \"1ab96c77da77918d9160c787732c68a6.js\";","module.exports = __webpack_public_path__ + \"da3a9dc1f8b62f2221f1040e8d207d0e.js\";","module.exports = __webpack_public_path__ + \"b02d982ccb1011197a5a24800b178a0a.js\";","module.exports = __webpack_public_path__ + \"879d6bc1ca1dde95a9a98dc7a2ab0d06.js\";","module.exports = __webpack_public_path__ + \"b8b6bd460e7da0ba8f3b2218327966ee.js\";","module.exports = __webpack_public_path__ + \"2f055ac4066041b9008dd6aebf9df34b.js\";","module.exports = __webpack_public_path__ + \"d542dda7308361c34af2afb9b70d755a.js\";","module.exports = __webpack_public_path__ + \"a4bedde07e392f8ebf64341b61f75df2.js\";","module.exports = __webpack_public_path__ + \"77aaca51c1c32acaf32656d45f4dc017.js\";","module.exports = __webpack_public_path__ + \"725da29f1643c2263a437c08a1454aea.js\";","module.exports = __webpack_public_path__ + \"efc14cdf19554635e477781704353ec2.js\";","module.exports = __webpack_public_path__ + \"eaa55a522fb2cb2f0287711f42344984.js\";","module.exports = __webpack_public_path__ + \"b808fb222140a85b23ebbe0fffa906d9.js\";","module.exports = __webpack_public_path__ + \"e874d975c9128dc6eb9a513d088bed9f.js\";","module.exports = __webpack_public_path__ + \"e7e1a807af3160b342e0a3550cf8f7c5.js\";","module.exports = __webpack_public_path__ + \"48e9351c5623d4da657ce7d5d0267ea6.js\";","module.exports = __webpack_public_path__ + \"9827973b533de05b338533a0211d97d9.js\";","module.exports = __webpack_public_path__ + \"bb5bab7a675544fe31ddb7f4a77dffb9.js\";","module.exports = __webpack_public_path__ + \"a2746fc96d535b19c120d4b87dc86ef1.js\";","module.exports = __webpack_public_path__ + \"23bb1a9f279e7a732bfd405350aab114.js\";","module.exports = __webpack_public_path__ + \"b1e349371cb9c226905c846706ad8b93.js\";","module.exports = __webpack_public_path__ + \"1c57b3481f295105588972ffa1305521.js\";","module.exports = __webpack_public_path__ + \"87bce6f50196688852142c679227b1b9.js\";","module.exports = __webpack_public_path__ + \"6c67587c2093ac3a19da9f2196e040b7.js\";","module.exports = __webpack_public_path__ + \"5a496ae20cc576bef1d35972548207cf.js\";","module.exports = __webpack_public_path__ + \"5e55b301888460bd06c8e26d1011e01a.js\";","module.exports = __webpack_public_path__ + \"003671ee2a876e7614cd94390e2255b3.js\";","module.exports = __webpack_public_path__ + \"3ea020c57c2bbf457a8497df313b2e5c.js\";","module.exports = __webpack_public_path__ + \"64d6924350bd7706850cdc0dcc76ccf6.js\";","module.exports = __webpack_public_path__ + \"b1f3f77a9279cdb38846ebe13c3438bc.js\";","module.exports = __webpack_public_path__ + \"d5999827bd3af6b813a871de344b109a.js\";","module.exports = __webpack_public_path__ + \"58598705e7012f4ca1eb1dd21d3c59a5.js\";","module.exports = __webpack_public_path__ + \"70074e0c785c9a808dea76c7c7d17af3.js\";","module.exports = __webpack_public_path__ + \"1875ecdf54e78b5f07ff1bd944cf794b.js\";","module.exports = __webpack_public_path__ + \"8eede17ae9e4d25c3c17b8a8a7fc3c3d.js\";","module.exports = __webpack_public_path__ + \"eff4371180dfac54de25ed3a0105d82f.js\";","module.exports = __webpack_public_path__ + \"06d958315fc6cdbb28576b03e43203aa.js\";","module.exports = __webpack_public_path__ + \"c51840077c684be0e7e13339f85cd4a9.js\";","module.exports = __webpack_public_path__ + \"c3f345c994392d97785925e790513a9f.js\";","module.exports = __webpack_public_path__ + \"1495a3d68b15b8622c53f6688b64809f.js\";","module.exports = __webpack_public_path__ + \"7e4099fc2d04c7c1cf96892b962ba4ec.js\";","module.exports = __webpack_public_path__ + \"6c0a75dc5671c3f237a79f6e45b9891c.js\";","module.exports = __webpack_public_path__ + \"aa5623ec68d23fedb9c9c115c7d99063.js\";","module.exports = __webpack_public_path__ + \"4ef80ee74467e0297eec3cc03092da01.js\";","module.exports = __webpack_public_path__ + \"f6d7091e70dee6c74956acfef2464d08.js\";","module.exports = __webpack_public_path__ + \"4bf3bc1fbdd26ac698fef1bdf26e3ff4.js\";","module.exports = __webpack_public_path__ + \"70286c33cab463fd576766adecd2d5d9.js\";","module.exports = __webpack_public_path__ + \"1533058f0ce13acdaa8d5bdc7d147bef.js\";","module.exports = __webpack_public_path__ + \"724a16861717b5b4f786d24b56b62614.js\";","module.exports = __webpack_public_path__ + \"03aae8272914723a7bf85b984385032c.js\";","module.exports = __webpack_public_path__ + \"029ed9161a8d24a9c2ba97124020989d.js\";","module.exports = __webpack_public_path__ + \"cb652f200fc3dd740b2e7f678a9272ea.js\";","module.exports = __webpack_public_path__ + \"d43ad5f9bad9a042b49b2592c7639c28.js\";","module.exports = __webpack_public_path__ + \"d78d3b050ea95b068380d975fd413fd7.js\";","module.exports = __webpack_public_path__ + \"4d0ebf4c528cee9b0cdd3e076e06570b.js\";","module.exports = __webpack_public_path__ + \"28785bea435918d49b290d27bf660baa.js\";","module.exports = __webpack_public_path__ + \"38b1d18836e38ee7b4deaeba0c35f7b8.js\";","module.exports = __webpack_public_path__ + \"2dd82c65030101b60dffccedd8741c6e.js\";","module.exports = __webpack_public_path__ + \"47e5776dff3b80ed69ab5947dba33c76.js\";","module.exports = __webpack_public_path__ + \"e61779df91186b23e7adf2d1968b2708.js\";","module.exports = __webpack_public_path__ + \"839e3594798c1942d3c92f9acfaa5f0b.js\";","module.exports = __webpack_public_path__ + \"3567d1ea443427e944a6f189a0898819.js\";","module.exports = __webpack_public_path__ + \"c80e89199aef31e48addb2b35ea96365.js\";","module.exports = __webpack_public_path__ + \"5b6a626249d0bc43e412fffa6a9ee177.js\";","module.exports = __webpack_public_path__ + \"fd9645aaf1f70c8abc562be41bee25fc.js\";","module.exports = __webpack_public_path__ + \"57f4109bd1f06be4dc2bcb8ff7eaf1e5.js\";","module.exports = __webpack_public_path__ + \"cd9a17f94a922c7c88000b1b3cdd67df.js\";","module.exports = __webpack_public_path__ + \"755114145e5b97e5571a160a39e716db.js\";","module.exports = __webpack_public_path__ + \"5e8a4f4320a07ae4bb1d8a5cd621d955.js\";","module.exports = __webpack_public_path__ + \"e9c8f7e13e00284ce126890bf7ac46fd.js\";","module.exports = __webpack_public_path__ + \"e0adad8a8579bf99f3e22f7c214a5c64.js\";","module.exports = __webpack_public_path__ + \"3b190e5159c72fb7e27271956772bcba.js\";","module.exports = __webpack_public_path__ + \"62a96977e725e8bc809dc80afe0fedf1.js\";","module.exports = __webpack_public_path__ + \"8a31266178067a316bb2503147cdb5cb.js\";","module.exports = __webpack_public_path__ + \"6d38cef4a006e6cfe54a6117aba7b600.js\";","module.exports = __webpack_public_path__ + \"8d9bb1799d9b98db107e84f10132e17f.js\";","module.exports = __webpack_public_path__ + \"432aff60ba31a74d2120031fdc894775.js\";","module.exports = __webpack_public_path__ + \"e2fe8f0d4fd950b20b30fabaea96b3f8.js\";","module.exports = __webpack_public_path__ + \"b881dca9d9a80f61d87374b4bd5a2dd5.js\";","module.exports = __webpack_public_path__ + \"ffd3b83e8b5878f4785591ff54b1dfff.js\";","module.exports = __webpack_public_path__ + \"88e2feda80ac8cfb28f1dc0ec833b40d.js\";","module.exports = __webpack_public_path__ + \"64a5f4d62507d032038dcd76d15188e1.js\";","module.exports = __webpack_public_path__ + \"aa0eee504d52a12d3a30bbd523afcc34.js\";","module.exports = __webpack_public_path__ + \"cf26dd07f19bcb5b7efbf057a6cfeb8f.js\";","module.exports = __webpack_public_path__ + \"cbdbd623038183a8c068dd24ecd90682.js\";","module.exports = __webpack_public_path__ + \"0972f21af3e75388ef55435c0b3b831d.js\";","module.exports = __webpack_public_path__ + \"4d8cb7033879cb7fcc7a43798e2bde22.js\";","module.exports = __webpack_public_path__ + \"58aab872dbdb5e1607076e1935130e03.js\";","module.exports = __webpack_public_path__ + \"ecdb4966f685f3e44b1f28fae46827a3.js\";","module.exports = __webpack_public_path__ + \"5d3314103b00c8ea165c6f9f6757f794.js\";","module.exports = __webpack_public_path__ + \"9b5a6ec07bb0a2daade10189696fc399.js\";","module.exports = __webpack_public_path__ + \"e0c565aadda4787ba4ef4456c0a7ee29.js\";","module.exports = __webpack_public_path__ + \"d5f79987405c2169278f8de37bcc9d05.js\";","module.exports = __webpack_public_path__ + \"de0fd4fd7c2d7a4887cbc99eed91f797.js\";","module.exports = __webpack_public_path__ + \"17632e1e19e438f431784dfd77e01773.js\";","module.exports = __webpack_public_path__ + \"663ffb67b9683a2126410325d1a5a152.js\";","module.exports = __webpack_public_path__ + \"e2b38a8393be2cf23f3894ace3efb1c3.js\";","module.exports = __webpack_public_path__ + \"27730a0bdc6f430cc85049a46a73a029.js\";","module.exports = __webpack_public_path__ + \"0f147528a6f36ca40c8b3ec796429f58.js\";","module.exports = __webpack_public_path__ + \"15f3800d33b854ba476c9daf1b9e0326.js\";","module.exports = __webpack_public_path__ + \"211511e7b374f57ad31acaf49dbdccb1.js\";","module.exports = __webpack_public_path__ + \"54560f13b36626237959e93b7771a484.js\";","module.exports = __webpack_public_path__ + \"582e24f5ba929e358fadfc7be4c18025.js\";","module.exports = __webpack_public_path__ + \"37ee3b5201ae2e2dc5dc8b1b20ad900e.js\";","module.exports = __webpack_public_path__ + \"cf3f6b1c74c72cb5d02870022dbc9f94.js\";","module.exports = __webpack_public_path__ + \"9696a4229fb787eeb25b26f1274b75ee.js\";","module.exports = __webpack_public_path__ + \"cf188b3f83735389d47bb12fc9f7069a.js\";","module.exports = __webpack_public_path__ + \"ba6b8b3e06cd9d0aee9c69278ee84647.js\";","module.exports = __webpack_public_path__ + \"130340e2c62b9e858f186dab5f491e55.js\";","module.exports = __webpack_public_path__ + \"6faa9e5f2a0122d2333fa450337a09b0.js\";","module.exports = __webpack_public_path__ + \"2fc0239242a898632ca8aa451cb930c2.js\";","module.exports = __webpack_public_path__ + \"92f4aab5c66f6269c7054c8fbcb3de13.js\";","module.exports = __webpack_public_path__ + \"63596b4896732fb322ab0496b4be1e74.js\";","module.exports = __webpack_public_path__ + \"5352ecd8e5f1a2637b48e18cc406edb1.js\";","module.exports = __webpack_public_path__ + \"07397bd479cbc34bc04576b4f15bdf18.js\";","module.exports = __webpack_public_path__ + \"5fedbf948ed123687f77167fac1faf8b.js\";","module.exports = __webpack_public_path__ + \"a709bba98acec5da3ea6258e245514cb.js\";","module.exports = __webpack_public_path__ + \"25eda4bb98e40a82cfd5b4bf9fbc06ec.js\";","module.exports = __webpack_public_path__ + \"3b6e7dc98c47eeafd851ca5072db4be6.js\";","module.exports = __webpack_public_path__ + \"cbdc4ca43a8c940a6c3f59a8b6f17df5.js\";","module.exports = __webpack_public_path__ + \"3c5b59a666c5d39d9ba9cc054d36a410.js\";","module.exports = __webpack_public_path__ + \"13eda3507db9cbfb400f46b9b3ff6553.js\";","module.exports = __webpack_public_path__ + \"894edcaf39c3c95818e3949d737ed459.js\";","module.exports = __webpack_public_path__ + \"0a1d9862d917663419ac2dd2e8193267.js\";","module.exports = __webpack_public_path__ + \"51f903c5ce5284a63196247cffb5ca40.js\";","module.exports = __webpack_public_path__ + \"e4917fa7632b01d28e99304d32d989f7.js\";","module.exports = __webpack_public_path__ + \"805cb6232d7a9fa46025d48a43622ecf.js\";","module.exports = __webpack_public_path__ + \"283970c76db99e2d0d90f0e7c45494f9.js\";","module.exports = __webpack_public_path__ + \"10132993df2cf9c9423b53a8a44379ab.js\";","module.exports = __webpack_public_path__ + \"1736cea368ae85240f34289307fdf67f.js\";","module.exports = __webpack_public_path__ + \"cf9c7cbfc2b609b9ae59daeab82719c4.js\";","module.exports = __webpack_public_path__ + \"119f6c45ea400e3c27e1ce172e4c881d.js\";","module.exports = __webpack_public_path__ + \"d5a6140d581e5c4eb200259ce372f40b.js\";","module.exports = __webpack_public_path__ + \"a533e643002830be2da76c9527265860.js\";","module.exports = __webpack_public_path__ + \"83387cb17a7680f59240e7b399e3ac2b.js\";","module.exports = __webpack_public_path__ + \"37172facd8a534a38f378ca2a9c7c11b.js\";","module.exports = __webpack_public_path__ + \"02174460fe8ff6a6bc19db86543b9600.js\";","module.exports = __webpack_public_path__ + \"c64d6e1e72024bb5d3d3e9bfc19d183d.js\";","module.exports = __webpack_public_path__ + \"54a10f3bddad1e6da452fee7124fe846.js\";","module.exports = __webpack_public_path__ + \"24a3ff38afde257888d755ece9bfd704.js\";","module.exports = __webpack_public_path__ + \"078dd0bd08c93b1512e3d1b777591b21.js\";","module.exports = __webpack_public_path__ + \"170487867de05784a96608617bdd544d.js\";","module.exports = __webpack_public_path__ + \"5861dfe4f2c7823623e82d0619c5bf06.js\";","module.exports = __webpack_public_path__ + \"2272c6632c52c3e402ab27b8045ab8f1.js\";","module.exports = __webpack_public_path__ + \"03980cb12dacd26148c22bb61fce440f.js\";","module.exports = __webpack_public_path__ + \"58c35e5c73bbc1664bbd67c570342aa0.js\";","module.exports = __webpack_public_path__ + \"fd5bc50b18c9f46380cbe5ec1ac2127b.js\";","module.exports = __webpack_public_path__ + \"714763ddd9bd466c95df7b042900bb87.js\";","module.exports = __webpack_public_path__ + \"4e389cce6fb8f78845fab249bce43c0b.js\";","module.exports = __webpack_public_path__ + \"17dc98279d24649d3ca77cbce8c44e83.js\";","module.exports = __webpack_public_path__ + \"a1c8660c5bcc6b6a43a7fb3c351174d9.js\";","module.exports = __webpack_public_path__ + \"a4d638b976f02f35740be031f996e088.js\";","module.exports = __webpack_public_path__ + \"b306285dfd802d091e788de0f96b8cb2.js\";","module.exports = __webpack_public_path__ + \"ddbc961769cd2ff4d4a7a136168ebf4c.js\";","module.exports = __webpack_public_path__ + \"3b544bb2c5a4e7b225a4b50235a0fd6d.js\";","module.exports = __webpack_public_path__ + \"1034e3807d1bcf55cb564491950237ab.js\";","module.exports = __webpack_public_path__ + \"d83cda12aee0c87c8b381a1234bf7798.js\";","module.exports = __webpack_public_path__ + \"9ed8c3550b5c3c1e878d0692f0338cb7.js\";","module.exports = __webpack_public_path__ + \"5f3ce6efab3c679ec1ad25ab0b3f6b2f.js\";","module.exports = __webpack_public_path__ + \"db8ca5cfb6fe4aaef215f116f6991784.js\";","module.exports = __webpack_public_path__ + \"53e3600928916423671f3388e2d67844.js\";","module.exports = __webpack_public_path__ + \"dc8240db39815020378555a4d80571c3.js\";","module.exports = __webpack_public_path__ + \"1b15b9f88acaf59b96e59c6b5f32da12.js\";","module.exports = __webpack_public_path__ + \"894052ca1f8f35cc1cf7cfb29ef75027.js\";","module.exports = __webpack_public_path__ + \"191feb6103c36b202bc01ba262916cdf.js\";","module.exports = __webpack_public_path__ + \"33b4e371d4983ab56f4db08627119f0b.js\";","module.exports = __webpack_public_path__ + \"b1170472ae4b50e3b0070eb991e502fe.js\";","module.exports = __webpack_public_path__ + \"9807cf1e443a7440371904b6525f37eb.js\";","module.exports = __webpack_public_path__ + \"9b1fd9cf4206cc32e84150c49707d811.js\";","module.exports = __webpack_public_path__ + \"d7d616d4aa8fd3f51d681242853dcde9.js\";","module.exports = __webpack_public_path__ + \"e6ad50b520736b595970c9e07029c3f1.js\";","module.exports = __webpack_public_path__ + \"49582665262ff6179b9f3a98adf7ed5c.js\";","module.exports = __webpack_public_path__ + \"7080d2a1db1608264a6d9d9fbaf2cce8.js\";","module.exports = __webpack_public_path__ + \"ef87482c92662e8b69a21f47588474ea.js\";","module.exports = __webpack_public_path__ + \"f326f2f263b1498fedbe1d07d7254d10.js\";","module.exports = __webpack_public_path__ + \"962969a46fefcace3305abd4d6e14a2e.js\";","module.exports = __webpack_public_path__ + \"b33ef9b4202539d3690251cb8213a034.js\";","module.exports = __webpack_public_path__ + \"80ddbf4f0fdde4ddba57130e61043017.js\";","module.exports = __webpack_public_path__ + \"8ed58ed9c7e1cb1ae1f2830d29011ffb.js\";","module.exports = __webpack_public_path__ + \"c4e58637b4d14c303e29d3ce4b4a210f.js\";","module.exports = __webpack_public_path__ + \"59cc05504a1c823b6d4796bf6b430822.js\";","module.exports = __webpack_public_path__ + \"b20cd9acf45420fcacfd923754185663.js\";","module.exports = __webpack_public_path__ + \"acb898eefa176c3f28344f5780cceb63.js\";","module.exports = __webpack_public_path__ + \"0d419aec4c7e2317238c3502a967b560.js\";","module.exports = __webpack_public_path__ + \"acaef5b3d4971efbf24be1a229186ff5.js\";","module.exports = __webpack_public_path__ + \"17b41db8dd7120d3a88417a1490f57b7.js\";","module.exports = __webpack_public_path__ + \"8a70eec5a46e423328f1e9d7d1a87f41.js\";","module.exports = __webpack_public_path__ + \"3cd75b9fb238f5af900205216be23a66.js\";","module.exports = __webpack_public_path__ + \"32f291b1164c2610ed1a9260677d15f0.js\";","module.exports = __webpack_public_path__ + \"c97c8951af9153f36715121ab359334c.js\";","module.exports = __webpack_public_path__ + \"f6a1ff9a83e32555a4e3c7b99727e02d.js\";","module.exports = __webpack_public_path__ + \"700530bc418f23dccca7db36bfa9f745.js\";","module.exports = __webpack_public_path__ + \"0d8cca845a71e82acc3ffc1fc95c94f3.js\";","module.exports = __webpack_public_path__ + \"ac0681e93739efad9b6f1b85453d6a1b.js\";","module.exports = __webpack_public_path__ + \"fc84e4779f22e5f1c9a70f56f47e0ed6.js\";","module.exports = __webpack_public_path__ + \"d492c085b5834c819ba21542b9147966.js\";","module.exports = __webpack_public_path__ + \"330c0deacbfbbb6f1249b5bd887d608a.js\";","module.exports = __webpack_public_path__ + \"7abc8b6c17be848321a446cfd88c27a9.js\";","module.exports = __webpack_public_path__ + \"4b73278b511eebb4d0f44a0eec778327.js\";","module.exports = __webpack_public_path__ + \"796a2d1a925ed311f35e5fc5907a3132.js\";","module.exports = __webpack_public_path__ + \"2772fa250d538d9b7a8702fb6c50d195.js\";","module.exports = __webpack_public_path__ + \"9d29de85381ba75c190573ea82708954.js\";","module.exports = __webpack_public_path__ + \"5fc5b7fdc1899b18bee20c7905c76182.js\";","module.exports = __webpack_public_path__ + \"531e426da5d4c152efe1e9522991e466.js\";","module.exports = __webpack_public_path__ + \"1d633c2bf495c2c286fe37d00950e1d4.js\";","module.exports = __webpack_public_path__ + \"4123d5ea3e1f99dd3a5f2a89e16c6e59.js\";","module.exports = __webpack_public_path__ + \"49c44a682cc7627c4a2e8b4d1cfec022.js\";","module.exports = __webpack_public_path__ + \"45873024a393c691246898090c972cd3.js\";","module.exports = __webpack_public_path__ + \"92e96a5183122509403347f8fde3e407.js\";","module.exports = __webpack_public_path__ + \"78b1ba82f7882d931072c4ef6e87f579.js\";","module.exports = __webpack_public_path__ + \"30d2b805bcbc5d6bd558d7bdf9137a0e.js\";","module.exports = __webpack_public_path__ + \"3afb97252c417c5f0dd54e20b1954f63.js\";","module.exports = __webpack_public_path__ + \"356c61041d30223f74711e79c8bb8ae9.js\";","module.exports = __webpack_public_path__ + \"0e693b29bbe881d5b78f15fb9cacbedd.js\";","module.exports = __webpack_public_path__ + \"4dec4bb457555975c148226534ecbdbe.js\";","module.exports = __webpack_public_path__ + \"4150db3307181a1afef55ab2c9ec191e.js\";","module.exports = __webpack_public_path__ + \"ebaed1b3f483c7391037315a62571718.js\";","module.exports = __webpack_public_path__ + \"d3c6f63283deafb27231ec767a161534.js\";","module.exports = __webpack_public_path__ + \"e4bea9a2a2680d970c13cc4ed89bc1a0.js\";","module.exports = __webpack_public_path__ + \"002a2ac7b7d3b3b807ddcb210cfc91eb.js\";","module.exports = __webpack_public_path__ + \"83d1c691b58768e3ec0a1f88450a7ceb.js\";","module.exports = __webpack_public_path__ + \"6416bde11154c29c4e296eb82fed0bdf.js\";","module.exports = __webpack_public_path__ + \"53e2fb3b82eafad81897aab9ab79edff.js\";","module.exports = __webpack_public_path__ + \"3d7fd940e543a183c4c376ef0d65773a.js\";","module.exports = __webpack_public_path__ + \"e6e768df4733fa1a1c8a9b06a24ff2fd.js\";","module.exports = __webpack_public_path__ + \"2091e4c01015d7dda392116f3ae59801.js\";","module.exports = __webpack_public_path__ + \"daad7cddd8afb1713b51cf5882d2da34.js\";","module.exports = __webpack_public_path__ + \"52c9726f9e52ed3a57c0634718366029.js\";","module.exports = __webpack_public_path__ + \"6bbbe63c75c85941f855ab27fb5f36db.js\";","module.exports = __webpack_public_path__ + \"3c1857a15493f62c5c85c13007a6c32c.js\";","module.exports = __webpack_public_path__ + \"6aa13e92b5cf7d479e73acdc7c05abf3.js\";","module.exports = __webpack_public_path__ + \"c4ee489cb1eb39f3d31e99fcc78e886e.js\";","module.exports = __webpack_public_path__ + \"5d833ca045603c1105d2db3b9d931274.js\";","module.exports = __webpack_public_path__ + \"e542ddbb78bb244c0465f22e0e11ab61.js\";","module.exports = __webpack_public_path__ + \"52ee9d28ed4c3389951a46084343a993.js\";","module.exports = __webpack_public_path__ + \"8efee5c45bbfdd52eec7a8a0eec72ec3.js\";","module.exports = __webpack_public_path__ + \"f93c341314b490174cf67fed1ca62ee0.js\";","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Symbol = root.Symbol,\n splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n return this.has(key) && delete this.__data__[key];\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n return getMapData(this, key)['delete'](key);\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n getMapData(this, key).set(key, value);\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ace_builds_1 = require(\"ace-builds\");\nvar PropTypes = require(\"prop-types\");\nvar React = require(\"react\");\nvar isEqual = require(\"lodash.isequal\");\nvar editorOptions_1 = require(\"./editorOptions\");\nvar ace = (0, editorOptions_1.getAceInstance)();\nvar ReactAce = /** @class */ (function (_super) {\n __extends(ReactAce, _super);\n function ReactAce(props) {\n var _this = _super.call(this, props) || this;\n editorOptions_1.editorEvents.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n _this.debounce = editorOptions_1.debounce;\n return _this;\n }\n ReactAce.prototype.isInShadow = function (node) {\n var parent = node && node.parentNode;\n while (parent) {\n if (parent.toString() === \"[object ShadowRoot]\") {\n return true;\n }\n parent = parent.parentNode;\n }\n return false;\n };\n ReactAce.prototype.componentDidMount = function () {\n var _this = this;\n var _a = this.props, className = _a.className, onBeforeLoad = _a.onBeforeLoad, onValidate = _a.onValidate, mode = _a.mode, focus = _a.focus, theme = _a.theme, fontSize = _a.fontSize, value = _a.value, defaultValue = _a.defaultValue, showGutter = _a.showGutter, wrapEnabled = _a.wrapEnabled, showPrintMargin = _a.showPrintMargin, _b = _a.scrollMargin, scrollMargin = _b === void 0 ? [0, 0, 0, 0] : _b, keyboardHandler = _a.keyboardHandler, onLoad = _a.onLoad, commands = _a.commands, annotations = _a.annotations, markers = _a.markers, placeholder = _a.placeholder;\n this.editor = ace.edit(this.refEditor);\n if (onBeforeLoad) {\n onBeforeLoad(ace);\n }\n var editorProps = Object.keys(this.props.editorProps);\n for (var i = 0; i < editorProps.length; i++) {\n this.editor[editorProps[i]] = this.props.editorProps[editorProps[i]];\n }\n if (this.props.debounceChangePeriod) {\n this.onChange = this.debounce(this.onChange, this.props.debounceChangePeriod);\n }\n this.editor.renderer.setScrollMargin(scrollMargin[0], scrollMargin[1], scrollMargin[2], scrollMargin[3]);\n if (this.isInShadow(this.refEditor)) {\n this.editor.renderer.attachToShadowRoot();\n }\n this.editor\n .getSession()\n .setMode(typeof mode === \"string\" ? \"ace/mode/\".concat(mode) : mode);\n if (theme && theme !== \"\")\n this.editor.setTheme(\"ace/theme/\".concat(theme));\n this.editor.setFontSize(typeof fontSize === \"number\" ? \"\".concat(fontSize, \"px\") : fontSize);\n this.editor\n .getSession()\n .setValue(!defaultValue ? value || \"\" : defaultValue);\n if (this.props.navigateToFileEnd) {\n this.editor.navigateFileEnd();\n }\n this.editor.renderer.setShowGutter(showGutter);\n this.editor.getSession().setUseWrapMode(wrapEnabled);\n this.editor.setShowPrintMargin(showPrintMargin);\n this.editor.on(\"focus\", this.onFocus);\n this.editor.on(\"blur\", this.onBlur);\n this.editor.on(\"copy\", this.onCopy);\n this.editor.on(\"paste\", this.onPaste);\n this.editor.on(\"change\", this.onChange);\n this.editor.on(\"input\", this.onInput);\n if (placeholder) {\n this.updatePlaceholder();\n }\n this.editor\n .getSession()\n .selection.on(\"changeSelection\", this.onSelectionChange);\n this.editor.getSession().selection.on(\"changeCursor\", this.onCursorChange);\n if (onValidate) {\n // @ts-ignore types don't include\n this.editor.getSession().on(\"changeAnnotation\", function () {\n // tslint:disable-next-line:no-shadowed-variable\n var annotations = _this.editor.getSession().getAnnotations();\n _this.props.onValidate(annotations);\n });\n }\n this.editor.session.on(\"changeScrollTop\", this.onScroll);\n this.editor.getSession().setAnnotations(annotations || []);\n if (markers && markers.length > 0) {\n this.handleMarkers(markers);\n }\n // get a list of possible options to avoid 'misspelled option errors'\n var availableOptions = this.editor.$options;\n editorOptions_1.editorOptions.forEach(function (option) {\n if (availableOptions.hasOwnProperty(option)) {\n // @ts-ignore\n _this.editor.setOption(option, _this.props[option]);\n }\n else if (_this.props[option]) {\n console.warn(\"ReactAce: editor option \".concat(option, \" was activated but not found. Did you need to import a related tool or did you possibly mispell the option?\"));\n }\n });\n this.handleOptions(this.props);\n if (Array.isArray(commands)) {\n commands.forEach(function (command) {\n if (typeof command.exec === \"string\") {\n _this.editor.commands.bindKey(command.bindKey, command.exec);\n }\n else {\n _this.editor.commands.addCommand(command);\n }\n });\n }\n if (keyboardHandler) {\n this.editor.setKeyboardHandler(\"ace/keyboard/\" + keyboardHandler);\n }\n if (className) {\n this.refEditor.className += \" \" + className;\n }\n if (onLoad) {\n onLoad(this.editor);\n }\n this.editor.resize();\n if (focus) {\n this.editor.focus();\n }\n };\n ReactAce.prototype.componentDidUpdate = function (prevProps) {\n var oldProps = prevProps;\n var nextProps = this.props;\n for (var i = 0; i < editorOptions_1.editorOptions.length; i++) {\n var option = editorOptions_1.editorOptions[i];\n if (nextProps[option] !== oldProps[option]) {\n // @ts-ignore\n this.editor.setOption(option, nextProps[option]);\n }\n }\n if (nextProps.className !== oldProps.className) {\n var appliedClasses = this.refEditor.className;\n var appliedClassesArray_1 = appliedClasses.trim().split(\" \");\n var oldClassesArray = oldProps.className.trim().split(\" \");\n oldClassesArray.forEach(function (oldClass) {\n var index = appliedClassesArray_1.indexOf(oldClass);\n appliedClassesArray_1.splice(index, 1);\n });\n this.refEditor.className =\n \" \" + nextProps.className + \" \" + appliedClassesArray_1.join(\" \");\n }\n // First process editor value, as it may create a new session (see issue #300)\n var valueChanged = this.editor &&\n nextProps.value != null &&\n this.editor.getValue() !== nextProps.value;\n if (valueChanged) {\n // editor.setValue is a synchronous function call, change event is emitted before setValue return.\n this.silent = true;\n var pos = this.editor.session.selection.toJSON();\n this.editor.setValue(nextProps.value, nextProps.cursorStart);\n this.editor.session.selection.fromJSON(pos);\n this.silent = false;\n }\n if (nextProps.placeholder !== oldProps.placeholder) {\n this.updatePlaceholder();\n }\n if (nextProps.mode !== oldProps.mode) {\n this.editor\n .getSession()\n .setMode(typeof nextProps.mode === \"string\"\n ? \"ace/mode/\".concat(nextProps.mode)\n : nextProps.mode);\n }\n if (nextProps.theme !== oldProps.theme) {\n this.editor.setTheme(\"ace/theme/\" + nextProps.theme);\n }\n if (nextProps.keyboardHandler !== oldProps.keyboardHandler) {\n if (nextProps.keyboardHandler) {\n this.editor.setKeyboardHandler(\"ace/keyboard/\" + nextProps.keyboardHandler);\n }\n else {\n this.editor.setKeyboardHandler(null);\n }\n }\n if (nextProps.fontSize !== oldProps.fontSize) {\n this.editor.setFontSize(typeof nextProps.fontSize === \"number\"\n ? \"\".concat(nextProps.fontSize, \"px\")\n : nextProps.fontSize);\n }\n if (nextProps.wrapEnabled !== oldProps.wrapEnabled) {\n this.editor.getSession().setUseWrapMode(nextProps.wrapEnabled);\n }\n if (nextProps.showPrintMargin !== oldProps.showPrintMargin) {\n this.editor.setShowPrintMargin(nextProps.showPrintMargin);\n }\n if (nextProps.showGutter !== oldProps.showGutter) {\n this.editor.renderer.setShowGutter(nextProps.showGutter);\n }\n if (!isEqual(nextProps.setOptions, oldProps.setOptions)) {\n this.handleOptions(nextProps);\n }\n // if the value or annotations changed, set the annotations\n // changing the value may create create a new session which will require annotations to be re-set\n if (valueChanged || !isEqual(nextProps.annotations, oldProps.annotations)) {\n this.editor.getSession().setAnnotations(nextProps.annotations || []);\n }\n if (!isEqual(nextProps.markers, oldProps.markers) &&\n Array.isArray(nextProps.markers)) {\n this.handleMarkers(nextProps.markers);\n }\n // this doesn't look like it works at all....\n if (!isEqual(nextProps.scrollMargin, oldProps.scrollMargin)) {\n this.handleScrollMargins(nextProps.scrollMargin);\n }\n if (prevProps.height !== this.props.height ||\n prevProps.width !== this.props.width) {\n this.editor.resize();\n }\n if (this.props.focus && !prevProps.focus) {\n this.editor.focus();\n }\n };\n ReactAce.prototype.handleScrollMargins = function (margins) {\n if (margins === void 0) { margins = [0, 0, 0, 0]; }\n this.editor.renderer.setScrollMargin(margins[0], margins[1], margins[2], margins[3]);\n };\n ReactAce.prototype.componentWillUnmount = function () {\n if (this.editor) {\n this.editor.destroy();\n this.editor = null;\n }\n };\n ReactAce.prototype.onChange = function (event) {\n if (this.props.onChange && !this.silent) {\n var value = this.editor.getValue();\n this.props.onChange(value, event);\n }\n };\n ReactAce.prototype.onSelectionChange = function (event) {\n if (this.props.onSelectionChange) {\n var value = this.editor.getSelection();\n this.props.onSelectionChange(value, event);\n }\n };\n ReactAce.prototype.onCursorChange = function (event) {\n if (this.props.onCursorChange) {\n var value = this.editor.getSelection();\n this.props.onCursorChange(value, event);\n }\n };\n ReactAce.prototype.onInput = function (event) {\n if (this.props.onInput) {\n this.props.onInput(event);\n }\n if (this.props.placeholder) {\n this.updatePlaceholder();\n }\n };\n ReactAce.prototype.onFocus = function (event) {\n if (this.props.onFocus) {\n this.props.onFocus(event, this.editor);\n }\n };\n ReactAce.prototype.onBlur = function (event) {\n if (this.props.onBlur) {\n this.props.onBlur(event, this.editor);\n }\n };\n ReactAce.prototype.onCopy = function (_a) {\n var text = _a.text;\n if (this.props.onCopy) {\n this.props.onCopy(text);\n }\n };\n ReactAce.prototype.onPaste = function (_a) {\n var text = _a.text;\n if (this.props.onPaste) {\n this.props.onPaste(text);\n }\n };\n ReactAce.prototype.onScroll = function () {\n if (this.props.onScroll) {\n this.props.onScroll(this.editor);\n }\n };\n ReactAce.prototype.handleOptions = function (props) {\n var setOptions = Object.keys(props.setOptions);\n for (var y = 0; y < setOptions.length; y++) {\n // @ts-ignore\n this.editor.setOption(setOptions[y], props.setOptions[setOptions[y]]);\n }\n };\n ReactAce.prototype.handleMarkers = function (markers) {\n var _this = this;\n // remove foreground markers\n var currentMarkers = this.editor.getSession().getMarkers(true);\n for (var i in currentMarkers) {\n if (currentMarkers.hasOwnProperty(i)) {\n this.editor.getSession().removeMarker(currentMarkers[i].id);\n }\n }\n // remove background markers except active line marker and selected word marker\n currentMarkers = this.editor.getSession().getMarkers(false);\n for (var i in currentMarkers) {\n if (currentMarkers.hasOwnProperty(i) &&\n currentMarkers[i].clazz !== \"ace_active-line\" &&\n currentMarkers[i].clazz !== \"ace_selected-word\") {\n this.editor.getSession().removeMarker(currentMarkers[i].id);\n }\n }\n // add new markers\n markers.forEach(function (_a) {\n var startRow = _a.startRow, startCol = _a.startCol, endRow = _a.endRow, endCol = _a.endCol, className = _a.className, type = _a.type, _b = _a.inFront, inFront = _b === void 0 ? false : _b;\n var range = new ace_builds_1.Range(startRow, startCol, endRow, endCol);\n _this.editor.getSession().addMarker(range, className, type, inFront);\n });\n };\n ReactAce.prototype.updatePlaceholder = function () {\n // Adapted from https://stackoverflow.com/questions/26695708/how-can-i-add-placeholder-text-when-the-editor-is-empty\n var editor = this.editor;\n var placeholder = this.props.placeholder;\n var showPlaceholder = !editor.session.getValue().length;\n var node = editor.renderer.placeholderNode;\n if (!showPlaceholder && node) {\n editor.renderer.scroller.removeChild(editor.renderer.placeholderNode);\n editor.renderer.placeholderNode = null;\n }\n else if (showPlaceholder && !node) {\n node = editor.renderer.placeholderNode = document.createElement(\"div\");\n node.textContent = placeholder || \"\";\n node.className = \"ace_comment ace_placeholder\";\n node.style.padding = \"0 9px\";\n node.style.position = \"absolute\";\n node.style.zIndex = \"3\";\n editor.renderer.scroller.appendChild(node);\n }\n else if (showPlaceholder && node) {\n node.textContent = placeholder;\n }\n };\n ReactAce.prototype.updateRef = function (item) {\n this.refEditor = item;\n };\n ReactAce.prototype.render = function () {\n var _a = this.props, name = _a.name, width = _a.width, height = _a.height, style = _a.style;\n var divStyle = __assign({ width: width, height: height }, style);\n return React.createElement(\"div\", { ref: this.updateRef, id: name, style: divStyle });\n };\n ReactAce.propTypes = {\n mode: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n focus: PropTypes.bool,\n theme: PropTypes.string,\n name: PropTypes.string,\n className: PropTypes.string,\n height: PropTypes.string,\n width: PropTypes.string,\n fontSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n showGutter: PropTypes.bool,\n onChange: PropTypes.func,\n onCopy: PropTypes.func,\n onPaste: PropTypes.func,\n onFocus: PropTypes.func,\n onInput: PropTypes.func,\n onBlur: PropTypes.func,\n onScroll: PropTypes.func,\n value: PropTypes.string,\n defaultValue: PropTypes.string,\n onLoad: PropTypes.func,\n onSelectionChange: PropTypes.func,\n onCursorChange: PropTypes.func,\n onBeforeLoad: PropTypes.func,\n onValidate: PropTypes.func,\n minLines: PropTypes.number,\n maxLines: PropTypes.number,\n readOnly: PropTypes.bool,\n highlightActiveLine: PropTypes.bool,\n tabSize: PropTypes.number,\n showPrintMargin: PropTypes.bool,\n cursorStart: PropTypes.number,\n debounceChangePeriod: PropTypes.number,\n editorProps: PropTypes.object,\n setOptions: PropTypes.object,\n style: PropTypes.object,\n scrollMargin: PropTypes.array,\n annotations: PropTypes.array,\n markers: PropTypes.array,\n keyboardHandler: PropTypes.string,\n wrapEnabled: PropTypes.bool,\n enableSnippets: PropTypes.bool,\n enableBasicAutocompletion: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.array\n ]),\n enableLiveAutocompletion: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.array\n ]),\n navigateToFileEnd: PropTypes.bool,\n commands: PropTypes.array,\n placeholder: PropTypes.string\n };\n ReactAce.defaultProps = {\n name: \"ace-editor\",\n focus: false,\n mode: \"\",\n theme: \"\",\n height: \"500px\",\n width: \"500px\",\n fontSize: 12,\n enableSnippets: false,\n showGutter: true,\n onChange: null,\n onPaste: null,\n onLoad: null,\n onScroll: null,\n minLines: null,\n maxLines: null,\n readOnly: false,\n highlightActiveLine: true,\n showPrintMargin: true,\n tabSize: 4,\n cursorStart: 1,\n editorProps: {},\n style: {},\n scrollMargin: [0, 0, 0, 0],\n setOptions: {},\n wrapEnabled: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false,\n placeholder: null,\n navigateToFileEnd: true\n };\n return ReactAce;\n}(React.Component));\nexports.default = ReactAce;\n//# sourceMappingURL=ace.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar PropTypes = require(\"prop-types\");\nvar React = require(\"react\");\nvar split_1 = require(\"./split\");\nvar DiffMatchPatch = require(\"diff-match-patch\");\nvar DiffComponent = /** @class */ (function (_super) {\n __extends(DiffComponent, _super);\n function DiffComponent(props) {\n var _this = _super.call(this, props) || this;\n _this.state = {\n value: _this.props.value\n };\n _this.onChange = _this.onChange.bind(_this);\n _this.diff = _this.diff.bind(_this);\n return _this;\n }\n DiffComponent.prototype.componentDidUpdate = function () {\n var value = this.props.value;\n if (value !== this.state.value) {\n this.setState({ value: value });\n }\n };\n DiffComponent.prototype.onChange = function (value) {\n this.setState({\n value: value\n });\n if (this.props.onChange) {\n this.props.onChange(value);\n }\n };\n DiffComponent.prototype.diff = function () {\n var dmp = new DiffMatchPatch();\n var lhString = this.state.value[0];\n var rhString = this.state.value[1];\n if (lhString.length === 0 && rhString.length === 0) {\n return [];\n }\n var diff = dmp.diff_main(lhString, rhString);\n dmp.diff_cleanupSemantic(diff);\n var diffedLines = this.generateDiffedLines(diff);\n var codeEditorSettings = this.setCodeMarkers(diffedLines);\n return codeEditorSettings;\n };\n DiffComponent.prototype.generateDiffedLines = function (diff) {\n var C = {\n DIFF_EQUAL: 0,\n DIFF_DELETE: -1,\n DIFF_INSERT: 1\n };\n var diffedLines = {\n left: [],\n right: []\n };\n var cursor = {\n left: 1,\n right: 1\n };\n diff.forEach(function (chunk) {\n var chunkType = chunk[0];\n var text = chunk[1];\n var lines = text.split(\"\\n\").length - 1;\n // diff-match-patch sometimes returns empty strings at random\n if (text.length === 0) {\n return;\n }\n var firstChar = text[0];\n var lastChar = text[text.length - 1];\n var linesToHighlight = 0;\n switch (chunkType) {\n case C.DIFF_EQUAL:\n cursor.left += lines;\n cursor.right += lines;\n break;\n case C.DIFF_DELETE:\n // If the deletion starts with a newline, push the cursor down to that line\n if (firstChar === \"\\n\") {\n cursor.left++;\n lines--;\n }\n linesToHighlight = lines;\n // If the deletion does not include a newline, highlight the same line on the right\n if (linesToHighlight === 0) {\n diffedLines.right.push({\n startLine: cursor.right,\n endLine: cursor.right\n });\n }\n // If the last character is a newline, we don't want to highlight that line\n if (lastChar === \"\\n\") {\n linesToHighlight -= 1;\n }\n diffedLines.left.push({\n startLine: cursor.left,\n endLine: cursor.left + linesToHighlight\n });\n cursor.left += lines;\n break;\n case C.DIFF_INSERT:\n // If the insertion starts with a newline, push the cursor down to that line\n if (firstChar === \"\\n\") {\n cursor.right++;\n lines--;\n }\n linesToHighlight = lines;\n // If the insertion does not include a newline, highlight the same line on the left\n if (linesToHighlight === 0) {\n diffedLines.left.push({\n startLine: cursor.left,\n endLine: cursor.left\n });\n }\n // If the last character is a newline, we don't want to highlight that line\n if (lastChar === \"\\n\") {\n linesToHighlight -= 1;\n }\n diffedLines.right.push({\n startLine: cursor.right,\n endLine: cursor.right + linesToHighlight\n });\n cursor.right += lines;\n break;\n default:\n throw new Error(\"Diff type was not defined.\");\n }\n });\n return diffedLines;\n };\n // Receives a collection of line numbers and iterates through them to highlight appropriately\n // Returns an object that tells the render() method how to display the code editors\n DiffComponent.prototype.setCodeMarkers = function (diffedLines) {\n if (diffedLines === void 0) { diffedLines = { left: [], right: [] }; }\n var codeEditorSettings = [];\n var newMarkerSet = {\n left: [],\n right: []\n };\n for (var i = 0; i < diffedLines.left.length; i++) {\n var markerObj = {\n startRow: diffedLines.left[i].startLine - 1,\n endRow: diffedLines.left[i].endLine,\n type: \"text\",\n className: \"codeMarker\"\n };\n newMarkerSet.left.push(markerObj);\n }\n for (var i = 0; i < diffedLines.right.length; i++) {\n var markerObj = {\n startRow: diffedLines.right[i].startLine - 1,\n endRow: diffedLines.right[i].endLine,\n type: \"text\",\n className: \"codeMarker\"\n };\n newMarkerSet.right.push(markerObj);\n }\n codeEditorSettings[0] = newMarkerSet.left;\n codeEditorSettings[1] = newMarkerSet.right;\n return codeEditorSettings;\n };\n DiffComponent.prototype.render = function () {\n var markers = this.diff();\n return (React.createElement(split_1.default, { name: this.props.name, className: this.props.className, focus: this.props.focus, orientation: this.props.orientation, splits: this.props.splits, mode: this.props.mode, theme: this.props.theme, height: this.props.height, width: this.props.width, fontSize: this.props.fontSize, showGutter: this.props.showGutter, onChange: this.onChange, onPaste: this.props.onPaste, onLoad: this.props.onLoad, onScroll: this.props.onScroll, minLines: this.props.minLines, maxLines: this.props.maxLines, readOnly: this.props.readOnly, highlightActiveLine: this.props.highlightActiveLine, showPrintMargin: this.props.showPrintMargin, tabSize: this.props.tabSize, cursorStart: this.props.cursorStart, editorProps: this.props.editorProps, style: this.props.style, scrollMargin: this.props.scrollMargin, setOptions: this.props.setOptions, wrapEnabled: this.props.wrapEnabled, enableBasicAutocompletion: this.props.enableBasicAutocompletion, enableLiveAutocompletion: this.props.enableLiveAutocompletion, value: this.state.value, markers: markers }));\n };\n DiffComponent.propTypes = {\n cursorStart: PropTypes.number,\n editorProps: PropTypes.object,\n enableBasicAutocompletion: PropTypes.bool,\n enableLiveAutocompletion: PropTypes.bool,\n focus: PropTypes.bool,\n fontSize: PropTypes.number,\n height: PropTypes.string,\n highlightActiveLine: PropTypes.bool,\n maxLines: PropTypes.number,\n minLines: PropTypes.number,\n mode: PropTypes.string,\n name: PropTypes.string,\n className: PropTypes.string,\n onLoad: PropTypes.func,\n onPaste: PropTypes.func,\n onScroll: PropTypes.func,\n onChange: PropTypes.func,\n orientation: PropTypes.string,\n readOnly: PropTypes.bool,\n scrollMargin: PropTypes.array,\n setOptions: PropTypes.object,\n showGutter: PropTypes.bool,\n showPrintMargin: PropTypes.bool,\n splits: PropTypes.number,\n style: PropTypes.object,\n tabSize: PropTypes.number,\n theme: PropTypes.string,\n value: PropTypes.array,\n width: PropTypes.string,\n wrapEnabled: PropTypes.bool\n };\n DiffComponent.defaultProps = {\n cursorStart: 1,\n editorProps: {},\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false,\n focus: false,\n fontSize: 12,\n height: \"500px\",\n highlightActiveLine: true,\n maxLines: null,\n minLines: null,\n mode: \"\",\n name: \"ace-editor\",\n onLoad: null,\n onScroll: null,\n onPaste: null,\n onChange: null,\n orientation: \"beside\",\n readOnly: false,\n scrollMargin: [0, 0, 0, 0],\n setOptions: {},\n showGutter: true,\n showPrintMargin: true,\n splits: 2,\n style: {},\n tabSize: 4,\n theme: \"github\",\n value: [\"\", \"\"],\n width: \"500px\",\n wrapEnabled: true\n };\n return DiffComponent;\n}(React.Component));\nexports.default = DiffComponent;\n//# sourceMappingURL=diff.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getAceInstance = exports.debounce = exports.editorEvents = exports.editorOptions = void 0;\nvar editorOptions = [\n \"minLines\",\n \"maxLines\",\n \"readOnly\",\n \"highlightActiveLine\",\n \"tabSize\",\n \"enableBasicAutocompletion\",\n \"enableLiveAutocompletion\",\n \"enableSnippets\"\n];\nexports.editorOptions = editorOptions;\nvar editorEvents = [\n \"onChange\",\n \"onFocus\",\n \"onInput\",\n \"onBlur\",\n \"onCopy\",\n \"onPaste\",\n \"onSelectionChange\",\n \"onCursorChange\",\n \"onScroll\",\n \"handleOptions\",\n \"updateRef\"\n];\nexports.editorEvents = editorEvents;\nvar getAceInstance = function () {\n var ace;\n if (typeof window === \"undefined\") {\n // ace-builds just needs some window object to attach ace to.\n // During SSR even just an empty object will work.\n global.window = {};\n ace = require(\"ace-builds\");\n // And it can be discarded immediately afterward to avoid confusing\n // other libraries that might detect SSR the same way we did.\n delete global.window;\n }\n else if (window.ace) {\n // Fallback for ace.require when vanilla ACE is hosted over a CDN\n ace = window.ace;\n ace.acequire = window.ace.require || window.ace.acequire;\n }\n else {\n ace = require(\"ace-builds\");\n }\n return ace;\n};\nexports.getAceInstance = getAceInstance;\nvar debounce = function (fn, delay) {\n var timer = null;\n // tslint:disable-next-line\n return function () {\n var context = this;\n var args = arguments;\n clearTimeout(timer);\n timer = setTimeout(function () {\n fn.apply(context, args);\n }, delay);\n };\n};\nexports.debounce = debounce;\n//# sourceMappingURL=editorOptions.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.diff = exports.split = void 0;\nvar ace_1 = require(\"./ace\");\nvar diff_1 = require(\"./diff\");\nexports.diff = diff_1.default;\nvar split_1 = require(\"./split\");\nexports.split = split_1.default;\nexports.default = ace_1.default;\n//# sourceMappingURL=index.js.map","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar editorOptions_1 = require(\"./editorOptions\");\nvar ace = (0, editorOptions_1.getAceInstance)();\nvar ace_builds_1 = require(\"ace-builds\");\nvar ext_split_1 = require(\"ace-builds/src-noconflict/ext-split\");\nvar PropTypes = require(\"prop-types\");\nvar React = require(\"react\");\nvar isEqual = require(\"lodash.isequal\");\nvar get = require(\"lodash.get\");\nvar SplitComponent = /** @class */ (function (_super) {\n __extends(SplitComponent, _super);\n function SplitComponent(props) {\n var _this = _super.call(this, props) || this;\n editorOptions_1.editorEvents.forEach(function (method) {\n _this[method] = _this[method].bind(_this);\n });\n _this.debounce = editorOptions_1.debounce;\n return _this;\n }\n SplitComponent.prototype.isInShadow = function (node) {\n var parent = node && node.parentNode;\n while (parent) {\n if (parent.toString() === \"[object ShadowRoot]\") {\n return true;\n }\n parent = parent.parentNode;\n }\n return false;\n };\n SplitComponent.prototype.componentDidMount = function () {\n var _this = this;\n var _a = this.props, className = _a.className, onBeforeLoad = _a.onBeforeLoad, mode = _a.mode, focus = _a.focus, theme = _a.theme, fontSize = _a.fontSize, value = _a.value, defaultValue = _a.defaultValue, cursorStart = _a.cursorStart, showGutter = _a.showGutter, wrapEnabled = _a.wrapEnabled, showPrintMargin = _a.showPrintMargin, _b = _a.scrollMargin, scrollMargin = _b === void 0 ? [0, 0, 0, 0] : _b, keyboardHandler = _a.keyboardHandler, onLoad = _a.onLoad, commands = _a.commands, annotations = _a.annotations, markers = _a.markers, splits = _a.splits;\n this.editor = ace.edit(this.refEditor);\n if (this.isInShadow(this.refEditor)) {\n this.editor.renderer.attachToShadowRoot();\n }\n this.editor.setTheme(\"ace/theme/\".concat(theme));\n if (onBeforeLoad) {\n onBeforeLoad(ace);\n }\n var editorProps = Object.keys(this.props.editorProps);\n var split = new ext_split_1.Split(this.editor.container, \"ace/theme/\".concat(theme), splits);\n this.editor.env.split = split;\n this.splitEditor = split.getEditor(0);\n this.split = split;\n // in a split scenario we don't want a print margin for the entire application\n this.editor.setShowPrintMargin(false);\n this.editor.renderer.setShowGutter(false);\n // get a list of possible options to avoid 'misspelled option errors'\n var availableOptions = this.splitEditor.$options;\n if (this.props.debounceChangePeriod) {\n this.onChange = this.debounce(this.onChange, this.props.debounceChangePeriod);\n }\n split.forEach(function (editor, index) {\n for (var i = 0; i < editorProps.length; i++) {\n editor[editorProps[i]] = _this.props.editorProps[editorProps[i]];\n }\n var defaultValueForEditor = get(defaultValue, index);\n var valueForEditor = get(value, index, \"\");\n editor.session.setUndoManager(new ace.UndoManager());\n editor.setTheme(\"ace/theme/\".concat(theme));\n editor.renderer.setScrollMargin(scrollMargin[0], scrollMargin[1], scrollMargin[2], scrollMargin[3]);\n editor.getSession().setMode(\"ace/mode/\".concat(mode));\n editor.setFontSize(fontSize);\n editor.renderer.setShowGutter(showGutter);\n editor.getSession().setUseWrapMode(wrapEnabled);\n editor.setShowPrintMargin(showPrintMargin);\n editor.on(\"focus\", _this.onFocus);\n editor.on(\"blur\", _this.onBlur);\n editor.on(\"input\", _this.onInput);\n editor.on(\"copy\", _this.onCopy);\n editor.on(\"paste\", _this.onPaste);\n editor.on(\"change\", _this.onChange);\n editor\n .getSession()\n .selection.on(\"changeSelection\", _this.onSelectionChange);\n editor.getSession().selection.on(\"changeCursor\", _this.onCursorChange);\n editor.session.on(\"changeScrollTop\", _this.onScroll);\n editor.setValue(defaultValueForEditor === undefined\n ? valueForEditor\n : defaultValueForEditor, cursorStart);\n var newAnnotations = get(annotations, index, []);\n var newMarkers = get(markers, index, []);\n editor.getSession().setAnnotations(newAnnotations);\n if (newMarkers && newMarkers.length > 0) {\n _this.handleMarkers(newMarkers, editor);\n }\n for (var i = 0; i < editorOptions_1.editorOptions.length; i++) {\n var option = editorOptions_1.editorOptions[i];\n if (availableOptions.hasOwnProperty(option)) {\n editor.setOption(option, _this.props[option]);\n }\n else if (_this.props[option]) {\n console.warn(\"ReaceAce: editor option \".concat(option, \" was activated but not found. Did you need to import a related tool or did you possibly mispell the option?\"));\n }\n }\n _this.handleOptions(_this.props, editor);\n if (Array.isArray(commands)) {\n commands.forEach(function (command) {\n if (typeof command.exec === \"string\") {\n editor.commands.bindKey(command.bindKey, command.exec);\n }\n else {\n editor.commands.addCommand(command);\n }\n });\n }\n if (keyboardHandler) {\n editor.setKeyboardHandler(\"ace/keyboard/\" + keyboardHandler);\n }\n });\n if (className) {\n this.refEditor.className += \" \" + className;\n }\n if (focus) {\n this.splitEditor.focus();\n }\n var sp = this.editor.env.split;\n sp.setOrientation(this.props.orientation === \"below\" ? sp.BELOW : sp.BESIDE);\n sp.resize(true);\n if (onLoad) {\n onLoad(sp);\n }\n };\n SplitComponent.prototype.componentDidUpdate = function (prevProps) {\n var _this = this;\n var oldProps = prevProps;\n var nextProps = this.props;\n var split = this.editor.env.split;\n if (nextProps.splits !== oldProps.splits) {\n split.setSplits(nextProps.splits);\n }\n if (nextProps.orientation !== oldProps.orientation) {\n split.setOrientation(nextProps.orientation === \"below\" ? split.BELOW : split.BESIDE);\n }\n split.forEach(function (editor, index) {\n if (nextProps.mode !== oldProps.mode) {\n editor.getSession().setMode(\"ace/mode/\" + nextProps.mode);\n }\n if (nextProps.keyboardHandler !== oldProps.keyboardHandler) {\n if (nextProps.keyboardHandler) {\n editor.setKeyboardHandler(\"ace/keyboard/\" + nextProps.keyboardHandler);\n }\n else {\n editor.setKeyboardHandler(null);\n }\n }\n if (nextProps.fontSize !== oldProps.fontSize) {\n editor.setFontSize(nextProps.fontSize);\n }\n if (nextProps.wrapEnabled !== oldProps.wrapEnabled) {\n editor.getSession().setUseWrapMode(nextProps.wrapEnabled);\n }\n if (nextProps.showPrintMargin !== oldProps.showPrintMargin) {\n editor.setShowPrintMargin(nextProps.showPrintMargin);\n }\n if (nextProps.showGutter !== oldProps.showGutter) {\n editor.renderer.setShowGutter(nextProps.showGutter);\n }\n for (var i = 0; i < editorOptions_1.editorOptions.length; i++) {\n var option = editorOptions_1.editorOptions[i];\n if (nextProps[option] !== oldProps[option]) {\n editor.setOption(option, nextProps[option]);\n }\n }\n if (!isEqual(nextProps.setOptions, oldProps.setOptions)) {\n _this.handleOptions(nextProps, editor);\n }\n var nextValue = get(nextProps.value, index, \"\");\n if (editor.getValue() !== nextValue) {\n // editor.setValue is a synchronous function call, change event is emitted before setValue return.\n _this.silent = true;\n var pos = editor.session.selection.toJSON();\n editor.setValue(nextValue, nextProps.cursorStart);\n editor.session.selection.fromJSON(pos);\n _this.silent = false;\n }\n var newAnnotations = get(nextProps.annotations, index, []);\n var oldAnnotations = get(oldProps.annotations, index, []);\n if (!isEqual(newAnnotations, oldAnnotations)) {\n editor.getSession().setAnnotations(newAnnotations);\n }\n var newMarkers = get(nextProps.markers, index, []);\n var oldMarkers = get(oldProps.markers, index, []);\n if (!isEqual(newMarkers, oldMarkers) && Array.isArray(newMarkers)) {\n _this.handleMarkers(newMarkers, editor);\n }\n });\n if (nextProps.className !== oldProps.className) {\n var appliedClasses = this.refEditor.className;\n var appliedClassesArray_1 = appliedClasses.trim().split(\" \");\n var oldClassesArray = oldProps.className.trim().split(\" \");\n oldClassesArray.forEach(function (oldClass) {\n var index = appliedClassesArray_1.indexOf(oldClass);\n appliedClassesArray_1.splice(index, 1);\n });\n this.refEditor.className =\n \" \" + nextProps.className + \" \" + appliedClassesArray_1.join(\" \");\n }\n if (nextProps.theme !== oldProps.theme) {\n split.setTheme(\"ace/theme/\" + nextProps.theme);\n }\n if (nextProps.focus && !oldProps.focus) {\n this.splitEditor.focus();\n }\n if (nextProps.height !== this.props.height ||\n nextProps.width !== this.props.width) {\n this.editor.resize();\n }\n };\n SplitComponent.prototype.componentWillUnmount = function () {\n this.editor.destroy();\n this.editor = null;\n };\n SplitComponent.prototype.onChange = function (event) {\n if (this.props.onChange && !this.silent) {\n var value_1 = [];\n this.editor.env.split.forEach(function (editor) {\n value_1.push(editor.getValue());\n });\n this.props.onChange(value_1, event);\n }\n };\n SplitComponent.prototype.onSelectionChange = function (event) {\n if (this.props.onSelectionChange) {\n var value_2 = [];\n this.editor.env.split.forEach(function (editor) {\n value_2.push(editor.getSelection());\n });\n this.props.onSelectionChange(value_2, event);\n }\n };\n SplitComponent.prototype.onCursorChange = function (event) {\n if (this.props.onCursorChange) {\n var value_3 = [];\n this.editor.env.split.forEach(function (editor) {\n value_3.push(editor.getSelection());\n });\n this.props.onCursorChange(value_3, event);\n }\n };\n SplitComponent.prototype.onFocus = function (event) {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n SplitComponent.prototype.onInput = function (event) {\n if (this.props.onInput) {\n this.props.onInput(event);\n }\n };\n SplitComponent.prototype.onBlur = function (event) {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n SplitComponent.prototype.onCopy = function (text) {\n if (this.props.onCopy) {\n this.props.onCopy(text);\n }\n };\n SplitComponent.prototype.onPaste = function (text) {\n if (this.props.onPaste) {\n this.props.onPaste(text);\n }\n };\n SplitComponent.prototype.onScroll = function () {\n if (this.props.onScroll) {\n this.props.onScroll(this.editor);\n }\n };\n SplitComponent.prototype.handleOptions = function (props, editor) {\n var setOptions = Object.keys(props.setOptions);\n for (var y = 0; y < setOptions.length; y++) {\n editor.setOption(setOptions[y], props.setOptions[setOptions[y]]);\n }\n };\n SplitComponent.prototype.handleMarkers = function (markers, editor) {\n // remove foreground markers\n var currentMarkers = editor.getSession().getMarkers(true);\n for (var i in currentMarkers) {\n if (currentMarkers.hasOwnProperty(i)) {\n editor.getSession().removeMarker(currentMarkers[i].id);\n }\n }\n // remove background markers\n currentMarkers = editor.getSession().getMarkers(false);\n for (var i in currentMarkers) {\n if (currentMarkers.hasOwnProperty(i)) {\n editor.getSession().removeMarker(currentMarkers[i].id);\n }\n }\n // add new markers\n markers.forEach(function (_a) {\n var startRow = _a.startRow, startCol = _a.startCol, endRow = _a.endRow, endCol = _a.endCol, className = _a.className, type = _a.type, _b = _a.inFront, inFront = _b === void 0 ? false : _b;\n var range = new ace_builds_1.Range(startRow, startCol, endRow, endCol);\n editor\n .getSession()\n .addMarker(range, className, type, inFront);\n });\n };\n SplitComponent.prototype.updateRef = function (item) {\n this.refEditor = item;\n };\n SplitComponent.prototype.render = function () {\n var _a = this.props, name = _a.name, width = _a.width, height = _a.height, style = _a.style;\n var divStyle = __assign({ width: width, height: height }, style);\n return React.createElement(\"div\", { ref: this.updateRef, id: name, style: divStyle });\n };\n SplitComponent.propTypes = {\n className: PropTypes.string,\n debounceChangePeriod: PropTypes.number,\n defaultValue: PropTypes.arrayOf(PropTypes.string),\n focus: PropTypes.bool,\n fontSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n height: PropTypes.string,\n mode: PropTypes.string,\n name: PropTypes.string,\n onBlur: PropTypes.func,\n onChange: PropTypes.func,\n onCopy: PropTypes.func,\n onFocus: PropTypes.func,\n onInput: PropTypes.func,\n onLoad: PropTypes.func,\n onPaste: PropTypes.func,\n onScroll: PropTypes.func,\n orientation: PropTypes.string,\n showGutter: PropTypes.bool,\n splits: PropTypes.number,\n theme: PropTypes.string,\n value: PropTypes.arrayOf(PropTypes.string),\n width: PropTypes.string,\n onSelectionChange: PropTypes.func,\n onCursorChange: PropTypes.func,\n onBeforeLoad: PropTypes.func,\n minLines: PropTypes.number,\n maxLines: PropTypes.number,\n readOnly: PropTypes.bool,\n highlightActiveLine: PropTypes.bool,\n tabSize: PropTypes.number,\n showPrintMargin: PropTypes.bool,\n cursorStart: PropTypes.number,\n editorProps: PropTypes.object,\n setOptions: PropTypes.object,\n style: PropTypes.object,\n scrollMargin: PropTypes.array,\n annotations: PropTypes.array,\n markers: PropTypes.array,\n keyboardHandler: PropTypes.string,\n wrapEnabled: PropTypes.bool,\n enableBasicAutocompletion: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.array\n ]),\n enableLiveAutocompletion: PropTypes.oneOfType([\n PropTypes.bool,\n PropTypes.array\n ]),\n commands: PropTypes.array\n };\n SplitComponent.defaultProps = {\n name: \"ace-editor\",\n focus: false,\n orientation: \"beside\",\n splits: 2,\n mode: \"\",\n theme: \"\",\n height: \"500px\",\n width: \"500px\",\n value: [],\n fontSize: 12,\n showGutter: true,\n onChange: null,\n onPaste: null,\n onLoad: null,\n onScroll: null,\n minLines: null,\n maxLines: null,\n readOnly: false,\n highlightActiveLine: true,\n showPrintMargin: true,\n tabSize: 4,\n cursorStart: 1,\n editorProps: {},\n style: {},\n scrollMargin: [0, 0, 0, 0],\n setOptions: {},\n wrapEnabled: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: false\n };\n return SplitComponent;\n}(React.Component));\nexports.default = SplitComponent;\n//# sourceMappingURL=split.js.map"],"names":["global","this","window","define","module","deps","payload","arguments","length","modules","payloads","original","apply","console","error","trace","ns","root","_require","parentId","callback","lookup","undefined","Object","prototype","toString","call","params","i","l","dep","require","push","packagedModule","normalizeModule","moduleName","indexOf","chunks","split","charAt","slice","join","previous","replace","exports","mod","id","uri","packaged","ace","defineProp","obj","name","val","defineProperty","value","enumerable","writable","configurable","String","startsWith","searchString","position","lastIndexOf","endsWith","subjectString","lastIndex","repeat","count","result","string","includes","str","assign","target","TypeError","output","index","source","keys","forEach","key","values","o","map","k","Array","find","predicate","len","thisArg","kValue","findIndex","item","fill","O","start","relativeStart","Math","max","min","end","relativeEnd","final","of","last","a","stringReverse","reverse","stringRepeat","trimBeginRegexp","trimEndRegexp","stringTrimLeft","stringTrimRight","copyObject","copy","copyArray","array","deepCopy","isArray","arrayToMap","arr","createMap","props","create","arrayRemove","splice","escapeRegExp","escapeHTML","getMatchOffsets","regExp","matches","offset","deferredCall","fcn","timer","deferred","timeout","cancel","setTimeout","schedule","clearTimeout","isPending","delayedCall","defaultTimeout","_self","delay","inherits","ctor","superCtor","super_","constructor","mixin","implement","proto","OS","LINUX","MAC","WINDOWS","getOS","isMac","isLinux","_navigator","navigator","os","exec","platform","toLowerCase","ua","userAgent","appName","isWin","isIE","parseFloat","match","isOldIE","isGecko","isMozilla","isOpera","opera","isWebKit","isChrome","isEdge","isAIR","isAndroid","isChromeOS","isIOS","test","MSStream","isMobile","strictCSP","useragent","buildDom","parent","refs","txt","document","createTextNode","appendChild","els","ch","el","createElement","options","childIndex","n","className","style","cssText","setAttribute","getDocumentHead","doc","head","getElementsByTagName","documentElement","tag","createElementNS","removeChildren","element","innerHTML","textContent","ownerDocument","createFragment","createDocumentFragment","hasCssClass","addCssClass","removeCssClass","classes","toggleCssClass","add","setCssClass","node","include","hasCssString","sheets","querySelectorAll","removeElementById","getElementById","remove","cssCache","insertPendingStyles","cache","importCssString","container","getRootNode","insertBefore","firstChild","useStrictCSP","importCssStylsheet","rel","href","scrollbarWidth","inner","width","minWidth","height","display","outer","left","overflow","body","noScrollbar","offsetWidth","withScrollbar","clientWidth","removeChild","computedStyle","getComputedStyle","setStyle","styles","property","HAS_CSS_ANIMATION","HAS_CSS_TRANSFORMS","HI_DPI","devicePixelRatio","div","transform","animationName","translate","tx","ty","round","top","dom","get","url","xhr","XMLHttpRequest","open","onreadystatechange","readyState","responseText","send","loadScript","path","s","src","onload","_","isAbort","qualifyURL","EventEmitter","stopPropagation","propagationStopped","preventDefault","defaultPrevented","_emit","_dispatchEvent","eventName","e","_eventRegistry","_defaultHandlers","listeners","defaultHandler","type","_signal","once","on","newCallback","off","Promise","resolve","setDefaultHandler","handlers","_disabled_","old","disabled","removeDefaultHandler","pop","addEventListener","capturing","removeListener","removeEventListener","removeAllListeners","oop","optionsProvider","setOptions","optList","setOption","getOptions","optionNames","$options","filter","hidden","getOption","opt","warn","forwardTo","handlesSet","set","message","reportError","msg","data","Error","AppConfig","$defaultOptions","defineOptions","initialValue","resetOptions","setDefaultValue","opts","setDefaultValues","optionHash","isDark","cssClass","$id","lang","net","workerPath","modePath","themePath","basePath","suffix","$moduleUrls","loadWorkerFromBlob","sharedPopups","hasOwnProperty","all","$modes","moduleUrl","component","parts","sep","base","re","RegExp","setModuleUrl","subst","loader","cb","setLoader","$loading","loadModule","onLoad","moduleType","afterLoad","err","reportErrorIfPathIsNotConfigured","version","config","init","scriptOptions","scriptUrl","currentScript","_currentScript","scripts","script","getAttribute","attributes","j","attr","m","m1","toUpperCase","Keys","ret","MODIFIER_KEYS","KEY_MODS","FUNCTION_KEYS","PRINTABLE_KEYS","parseInt","enter","escape","esc","del","mods","pow","x","keyCodeToString","keyCode","keyString","fromCharCode","activeListenerOptions","pressedKeys","ts","getListenerOptions","createComment","passive","detectListenerOptionsSupport","EventListener","elem","destroy","addListener","destroyer","$toDestroy","stopEvent","getButton","ctrlKey","altKey","shiftKey","button","capture","eventHandler","releaseCaptureHandler","onMouseUp","addMouseWheelListener","deltaX","deltaY","deltaMode","DOM_DELTA_PIXEL","wheelX","wheelY","DOM_DELTA_LINE","DOM_DELTA_PAGE","addMultiMouseDownListener","elements","timeouts","callbackName","startX","startY","clicks","eventNames","onMousedown","detail","isNewClick","abs","clientX","clientY","_clicks","getModifierHash","metaKey","normalizeCommandKeys","hashId","getModifierState","altGr","location","keyLocation","timeStamp","resetPressedKeys","getModifierString","addCommandKeyListener","isOldGecko","lastKeyDownKeyCode","lastDefaultPrevented","postMessage","postMessageId","nextTick","win","messageName","listener","$idleBlocked","onIdle","handler","$idleBlockId","blockIdle","nextFrame","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","oRequestAnimationFrame","bind","Range","startRow","startColumn","endRow","endColumn","row","column","isEqual","range","contains","compare","compareRange","cmp","comparePoint","p","containsRange","intersects","isEnd","isStart","setStart","setEnd","inside","insideStart","insideEnd","isMultiLine","compareStart","compareEnd","compareInside","clipRows","firstRow","lastRow","fromPoints","extend","isEmpty","clone","collapseRows","toScreenRange","session","screenPosStart","documentToScreenPosition","screenPosEnd","moveBy","comparePoints","p1","p2","$cancelT","lineMode","pasteCancelled","Date","now","event","clipboard","BROKEN_SETDATA","USE_IE_MIME_TYPE","HAS_FOCUS_ARGS","MAX_LINE_LENGTH","KEYS","MODS","valueResetRegex","TextInput","parentNode","host","text","opacity","copied","pasted","inComposition","sendingText","tempStyle","fontSize","commandMode","ignoreFocusEvents","lastValue","lastSelectionStart","lastSelectionEnd","lastRestoreEnd","isFocused","activeElement","onBlur","hasFocus","onFocus","resetSelection","$focusScroll","focus","preventScroll","isTransformed","getBoundingClientRect","ancestors","t","parentElement","nodeType","removeAttribute","blur","curOp","commandName","command","isUserAction","docChanged","selectionChanged","onCompositionEnd","newValue","selectionEnd","selection","setSelectionRange","afterContextMenu","selectionStart","line","getRange","cursor","getLine","prevLine","nextLine","inputHandler","setInputHandler","getInputHandler","sendText","fromInput","onPaste","extendLeft","extendRight","inserted","restoreStart","restoreEnd","endIndex","shouldReset","onTextInput","onInput","onCompositionUpdate","inputType","execCommand","handleClipboardData","forceIEMime","clipboardData","mime","setData","getData","doCopy","isCut","getCopyText","onCut","onCopy","select","onCommandKey","isAllSelected","selectAll","$readOnly","cancelComposition","useTextareaForIME","markerRange","context","compositionStartOffset","closeTimeout","syncComposition","onContextMenuClose","renderer","$isMousePressed","$keepTextAreaAtCursor","$moveTextAreaToCursor","onCompositionStart","getSelectionRange","msGetInputContext","getInputContext","getElement","setCommandMode","readOnly","setReadOnly","setCopyWithEmptySelection","onContextMenu","domEvent","moveToMouse","bringToFront","characterWidth","rect","borderTopWidth","borderLeftWidth","maxTop","bottom","clientHeight","move","textInput","scroller","typingResetTimeout","typing","detectArrowKeys","$mouseHandler","isMousePressed","modifier","up","home","option","down","right","shift","commands","findKeyCommand","addIosSelectionHandler","$setUserAgentForTests","_isMobile","_isIOS","DefaultHandlers","mouseHandler","$clickSelection","editor","onMouseDown","onDoubleClick","onTripleClick","onQuadClick","onMouseWheel","selectByLines","extendSelectionBy","selectByWords","calcRangeOrientation","anchor","ev","inSelection","pos","getDocumentPosition","mousedownEvent","moveToPosition","time","$focusTimeout","inMultiSelectMode","captureMouse","startSelect","setState","waitForClickSelection","screenToTextCoordinates","y","getShiftKey","selectToPosition","setCapture","orientedRange","setSelectionAnchor","scrollCursorIntoView","unitName","cmpStart","cmpEnd","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","unsetStyle","releaseCapture","focusWait","ax","ay","bx","by","distance","sqrt","getBracketRange","getWordRange","getLineRange","getAccelKey","$lastScroll","vx","vy","allowed","prevScroll","dt","direction","canScroll","isScrollableBy","speed","scrollBy","stop","CLASSNAME","Tooltip","isOpen","$element","$parentNode","$init","setText","setHtml","html","setPosition","setClassName","show","hide","getHeight","offsetHeight","getWidth","GutterTooltip","windowWidth","innerWidth","windowHeight","innerHeight","GutterHandler","tooltipTimeout","mouseEvent","tooltipAnnotation","gutter","$gutterLayer","tooltip","hideTooltip","moveTooltip","getRegion","selectTo","srcElement","$tooltipFollowsMouse","annotation","$annotations","getLength","screenRow","pixelToScreenCoordinates","$pos","documentToScreenRow","annotationClassName","trim","showTooltip","$gutter","MouseEvent","$inSelection","selectionRange","DragdropHandler","dragImage","dragSelectionMarker","timerId","dragCursor","dragOperation","isInternal","autoScrollStartTime","cursorMovedTime","cursorPointOnCaretMoved","mouseTarget","counter","onDragInterval","prevCursor","vMovement","hMovement","moveCursorToPosition","calcDistance","lineHeight","layerConfig","editorRect","offsets","nearestXOffset","nearestYOffset","scrollCursor","vScroll","hScroll","autoScroll","addDragMarker","toOrientedRange","addMarker","getSelectionStyle","clearSelection","$cursorLayer","setBlinking","clearInterval","setInterval","onMouseMove","clearDragMarker","removeMarker","fromOrientedRange","$resetCursorStyle","onDragStart","cancelDrag","draggable","self","dataTransfer","effectAllowed","getReadOnly","setDragImage","clearData","getTextRange","onDragEnd","dropEffect","setCursorStyle","onDragEnter","canAccept","getDropEffect","onDragOver","onMouseMoveTimer","onDragLeave","onDrop","moveText","dropData","insert","types","some","copyAllowed","copyModifierState","dragWait","getDragDelay","startDrag","dragWaitEnd","dragReadyEnd","cursorStyle","onMouseDrag","state","dragDrop","$dragEnabled","eventTarget","unselectable","addTouchListeners","touchStartT","lastT","longTouchTimer","animationTimer","pressed","contextMenu","mode","animationSteps","clickCount","vX","vY","createContextMenu","handleClick","selected","hasUndo","action","getUndoManager","replaceChild","class","readText","then","writeText","ontouchstart","ontouchend","onclick","showContextMenu","pagePos","textToScreenCoordinates","leftOffset","pageX","scrollLeft","pageY","hideContextMenu","handleLongTap","selectWord","touches","h","w","touchObj","setRange","switchToSelectionMode","cursorPos","getPixelPosition","anchorPos","offsetTop","offsetLeft","weightedDistance","diff1","diff2","oldScrollTop","getScrollTop","DefaultGutterHandler","MouseHandler","focusEditor","getMouseEventTarget","onMouseEvent","scrollBarV","scrollBarH","Boolean","gutterEl","$dragDelay","character","mousemove","$scrollSpeed","mouseMoveHandler","which","releaseMouse","$mouseMoved","onCaptureEnd","onOperationEnd","onCaptureInterval","$onCaptureMouseMove","endOperation","startOperation","cancelContextMenu","scrollSpeed","dragDelay","dragEnabled","focusTimeout","tooltipFollowsMouse","FoldHandler","fold","getFoldAt","removeFold","expandFold","getUseWrapMode","foldWidgets","onFoldWidgetClick","getParentFoldRangeData","firstRange","addFold","keyUtil","KeyBinding","$editor","$data","$handlers","kb","removeKeyboardHandler","$defaultHandler","addKeyboardHandler","setKeyboardHandler","handleKeyboard","attach","detach","getKeyboardHandler","getStatusText","$callKeyboardHandlers","toExecute","success","args","passEvent","dir","hiLevel","lastArabic","hasUBAT_B","hasUBAT_S","impTab_LTR","impTab_RTL","ET","BN","UnicodeTBL00","UnicodeTBL20","_invertLevel","lev","levels","_array","lo","hi","tmp","_getCharClass","chars","ix","wType","nType","cType","c","rtlCandidate","_getCharacterType","uc","charCodeAt","L","R","EN","ON_R","AN","R_H","B","RLE","DOT","doBidiReorder","textCharTypes","isRtl","logicalFromVisual","bidiLevels","charTypes","impTab","prevState","newClass","newLevel","newState","condPos","_computeLevels","hasBidiCharacters","getVisualFromLogicalIdx","logIdx","rowMap","bidiUtil","bidiRE","BidiHandler","bidiMap","currentRow","charWidths","EOL","showInvisibles","isRtlDir","$isRtl","wrapIndent","EOF","contentWidth","fontMetrics","rtlLineOffset","wrapOffset","isMoveLeftOperation","seenBidi","getValue","isBidiRow","docRow","splitIndex","updateRowLine","updateBidiMap","onChange","delta","lines","getDocumentRow","rowCache","$screenRowCache","$getRowCacheIndex","$docRowCache","getSplitIndex","currentIndex","prevIndex","endOfLine","$useWrapMode","splits","$wrapData","indent","substring","size","isFullWidth","getScreenTabSize","$main","substr","markAsDirty","updateCharacterWidths","$characterSize","bidiCharWidth","$measureCharWidth","setShowInvisibles","setEolChar","eolChar","setContentWidth","isRtlLine","setRtlDirection","getCursorPosition","getSelectionAnchor","$bidiHandler","removeInLine","getPosLeft","col","leftBoundary","logicalIdx","getOverwrite","visualIdx","getSelections","startCol","endCol","level","selections","selColMin","selColMax","isSelected","isSelectedPrev","visIdx","offsetToCol","posX","charWidth","Selection","getDocument","lead","createAnchor","$silent","$cursorChanged","$isEmpty","$keepDesiredColumnOnChange","$desiredColumn","$anchorChanged","getCursor","getPosition","getAnchor","getSelectionLead","isBackwards","$setSelection","Number","MAX_VALUE","anchorRow","anchorColumn","cursorRow","cursorColumn","wasEmpty","wasMultiselect","$moveSelection","mover","moveCursorTo","moveTo","selectUp","moveCursorUp","selectDown","moveCursorDown","selectRight","moveCursorRight","selectLeft","moveCursorLeft","selectLineStart","moveCursorLineStart","selectLineEnd","moveCursorLineEnd","selectFileEnd","moveCursorFileEnd","selectFileStart","moveCursorFileStart","selectWordRight","moveCursorWordRight","selectWordLeft","moveCursorWordLeft","selectAWord","getAWordRange","excludeLastChar","rowEnd","rowStart","foldLine","getFoldLine","selectLine","moveCursorBy","wouldMoveIntoSoftTab","tabSize","isTabStop","getTabSize","getNavigateWithinSoftTabs","firstColumnPosition","screenToDocumentPosition","leadingSpace","getDisplayLine","$useEmacsStyleLineStart","lineEnd","getDocumentLastRowColumnPosition","textEnd","search","moveCursorLongWordRight","rightOfCursor","nonTokenRe","tokenRe","moveCursorLongWordLeft","getFoldStringAt","leftOfCursor","$shortWordEndIndex","whitespaceRe","moveCursorShortWordRight","moveCursorShortWordLeft","$selectLongWords","rows","offsetX","screenPos","lineWidgets","widget","rowsAbove","rowCount","docPos","keepDesiredColumn","moveCursorToScreen","desiredColumn","r","getRangeOfMovements","func","toJSON","rangeCount","ranges","r1","fromJSON","rangeList","toSingleRange","addRange","MAX_TOKEN_COUNT","Tokenizer","rules","states","regExps","matchMappings","ruleRegExps","matchTotal","mapping","defaultToken","flag","splitterRurles","rule","caseInsensitive","unicode","regex","adjustedregex","matchcount","token","groupCount","tokenArray","onMatch","$arrayTokens","$applyToken","digit","removeCapturingGroups","splitRegex","createSplitterRegexp","$setMaxTokenCount","tokens","stack","inChClass","lastCapture","parenOpen","parenClose","square","getLineTokens","startState","currentState","matchAttempts","skipped","next","consumeLineEnd","merge","unshift","TextHighlightRules","$rules","addRules","prefix","nextState","getRules","embedRules","HighlightRules","escapeRules","append","$embeds","getEmbeds","pushState","popState","normalizeRules","processState","processed","toInsert","stateName","includeName","concat","noEscape","keywordMap","createKeywordMapper","ignoreCase","splitChar","keywords","$keywordList","list","word","getKeywords","$keywords","Behaviour","$behaviours","addBehaviours","behaviours","inherit","getBehaviours","TokenIterator","initialRow","initialColumn","$session","$row","$rowTokens","getTokens","getTokenAt","$tokenIndex","stepBackward","stepForward","getCurrentToken","getCurrentTokenRow","getCurrentTokenColumn","rowTokens","tokenIndex","getCurrentTokenPosition","getCurrentTokenRange","SAFE_INSERT_IN_TOKENS","SAFE_INSERT_BEFORE_TOKENS","contextCache","defaultQuotes","initContext","multiSelect","autoInsertedBrackets","autoInsertedRow","autoInsertedLineEnd","maybeInsertedBrackets","maybeInsertedRow","maybeInsertedLineStart","maybeInsertedLineEnd","getWrapped","opening","closing","rowDiff","CstyleBehaviour","getWrapBehavioursEnabled","isSaneInsertion","braces","recordAutoInsert","recordMaybeInsert","$findOpeningBracket","isAutoInsertedClosing","popAutoInsertedClosing","isMaybeInsertedClosing","clearMaybeInsertedClosing","openBracePos","findMatchingBracket","next_indent","$getIndent","getTabString","quotes","$mode","$quotes","lineCommentStart","quote","leftChar","rightChar","rightToken","pair","stringBefore","stringAfter","wordRe","isWordBefore","isWordAfter","charBefore","iterator","$matchTokenType","iterator2","bracket","wordChars","code","Mode","$defaultBehaviour","getTokenizer","$tokenizer","$highlightRules","$highlightRuleConfig","blockComment","toggleCommentLines","ignoreBlankLines","shouldRemove","minIndent","Infinity","insertAtTabStop","regexpStart","getUseSoftTabs","uncomment","shouldInsertSpace","commentWithSpace","comment","insertInLine","testRemove","before","after","spaces","lineCommentEnd","regexpEnd","iter","fun","minEmptyLength","floor","toggleBlockComment","colDiff","initialRange","startRange","endRange","getNextLineIndent","tab","checkOutdent","input","autoOutdent","createWorker","createModeDelegates","delegations","scope","functionName","$delegator","method","language","transformAction","param","$behaviour","completionKeywords","ruleItr","aLength","$createKeywordList","getCompletions","score","meta","applyDelta","docLines","doNotValidate","Anchor","$onChange","$pointsInOrder","point1","point2","equalPointsInOrder","bColIsAfter","$clipPositionToDocument","$insertRight","point","moveIfEqual","deltaIsInsert","deltaRowShift","deltaColShift","deltaStart","deltaEnd","$getTransformedPoint","noClip","Document","textOrLines","$lines","insertMergedLines","setValue","getAllLines","getNewLineCharacter","$split","$detectNewLine","$autoNewLine","$newLineMode","setNewLineMode","newLineMode","getNewLineMode","isNewLine","getLines","getLinesForRange","insertLines","insertFullLines","removeLines","removeFullLines","insertNewLine","clippedPos","clonePos","$clipPosition","deleteFirstNewLine","deleteLastNewLine","deletedLines","removeNewLine","applyDeltas","deltas","revertDeltas","revertDelta","isInsert","$splitAndapplyLargeDelta","$safeApplyDelta","docLength","MAX","from","to","chunk","indexToPosition","newlineLength","positionToIndex","BackgroundTokenizer","tokenizer","running","currentLine","$worker","workerStart","endLine","startLine","processedLines","$tokenizeRow","fireUpdateEvent","setTokenizer","setDocument","first","scheduleStart","$updateOnChange","getState","cleanup","SearchHighlight","clazz","setRegexp","MAX_RANGES","update","markerLayer","renderedMarkerRanges","rangeToAddMarkerTo","rangeAsString","drawSingleLineMarker","FoldLine","foldData","folds","setFoldLine","shiftRow","sameRow","sort","b","containsRow","walk","lastEnd","isNewRow","placeholder","getNextFoldTo","kind","addRemoveChars","log","foldBefore","newFoldLine","foldLineNext","idxToPosition","idx","lastFoldEndColumn","RangeList","$bias","pointIndex","excludeEdges","startIndex","addList","removed","substractPoint","containsPoint","rangeAtPoint","clipped","removeAll","lineDif","Fold","subFolds","consumePoint","restorePoint","subFold","collapseChildren","addSubFold","afterStart","firstConsumed","consumedFolds","restoreRange","Folding","side","getFoldsInRange","foldLines","$foldData","foundFolds","getFoldsInRangeList","getAllFolds","lastFold","startFoldLine","getNextFoldLine","getFoldedRowCount","$addFoldLine","added","$clipRangeToDocument","startFold","endFold","removeFolds","$updateWrapData","$updateRowLengthCache","$modified","addFolds","$updating","cloneFolds","foldAll","expandFolds","unfold","expandInner","outermostFolds","isRowFolded","startFoldRow","getRowFoldEnd","getRowFoldStart","getFoldDisplayLine","textLine","lastColumn","$cloneFoldData","fd","toggleFold","tryToUnfold","bracketPos","getCommentFoldRange","depth","getFoldWidget","getFoldWidgetRange","foldToLevel","foldAllComments","$foldStyles","$foldStyle","setFoldStyle","$foldMode","$setFolding","foldMode","$updateFoldWidgets","$tokenizerUpdateFoldWidgets","updateFoldWidgets","tokenizerUpdateFoldWidgets","ignoreCurrent","fw","children","siblings","$toggleFoldWidget","toggleFoldWidget","toggleParent","BracketMatch","chr","charBeforeCursor","$findClosingBracket","getMatchingBracketRanges","$brackets","typeRe","openBracket","valueIndex","closingBracket","valueLength","getMatchingTags","$findTagName","$findClosingTag","$findOpeningTag","found","backward","prevToken","currentTag","openTagStart","openTagName","foundOpenTagEnd","openTagEnd","closeTagStart","closeTagName","closeTagEnd","openTag","closeTag","stepCount","tmpToken","TextMode","EditSession","$breakpoints","$decorations","$frontMarkers","$backMarkers","$markerId","$undoSelect","$uid","bgTokenizer","onChangeFold","setMode","destroyed","resetCaches","$resetRowCache","cacheArray","low","mid","$rowLengthCache","removedFolds","$updateInternalDataOnChange","$fromUndo","$undoManager","mergeUndoDeltas","$informUndoManager","setUndoManager","reset","getSelection","undoManager","addSession","$syncInformUndoManager","markUndoGroup","$defaultUndoManager","undo","redo","hasRedo","addSelection","startNewGroup","setUseSoftTabs","$useSoftTabs","$indentWithTabs","setTabSize","$tabSize","setNavigateWithinSoftTabs","navigateWithinSoftTabs","$navigateWithinSoftTabs","$overwrite","setOverwrite","overwrite","toggleOverwrite","addGutterDecoration","removeGutterDecoration","getBreakpoints","setBreakpoints","clearBreakpoints","setBreakpoint","clearBreakpoint","inFront","marker","addDynamicMarker","markerId","getMarkers","highlight","$searchHighlight","highlightLines","setAnnotations","annotations","getAnnotations","clearAnnotations","inToken","wordRange","setUseWorker","useWorker","getUseWorker","$useWorker","onReloadTokenizer","$modeId","$onChangeMode","$isPlaceholder","oldMode","$stopWorker","$startWorker","attachToSession","wrapMethod","$wrapMethod","foldingRules","terminate","getMode","$scrollTop","setScrollTop","scrollTop","isNaN","$scrollLeft","setScrollLeft","getScrollLeft","getScreenWidth","$computeWidth","getLineWidgetMaxWidth","screenWidth","lineWidgetsWidth","lineWidgetWidth","force","$wrapLimit","longestScreenLine","foldIndex","foldStart","$getStringScreenWidth","undoChanges","dontSelect","selectionBefore","$getUndoSelection","redoChanges","selectionAfter","setUndoSelect","enable","isUndo","fromRange","toPosition","toRange","collDiff","oldStart","newStart","indentRows","indentString","outdentRows","rowRange","deleteRange","$moveLines","diff","$clipRowToDocument","moveLinesUp","moveLinesDown","duplicateLines","$clipColumnToRow","$wrapLimitRange","setUseWrapMode","useWrapMode","setWrapLimitRange","adjustWrapLimit","desiredLimit","$printMargin","limits","wrapLimit","$constrainWrapLimit","getWrapLimit","setWrapLimit","limit","getWrapLimitRange","foldLineBefore","wrapData","walkTokens","$getDisplayTokens","PLACEHOLDER_START","PLACEHOLDER_BODY","$computeWrapSplits","displayLength","lastSplit","lastDocSplit","isCode","$wrapAsCode","indentedSoftWrap","$indentedSoftWrap","maxIndent","addSplit","indentation","getWrapIndent","minSplit","maxScreenColumn","screenColumn","getRowLength","getRowLineCount","getRowWrapIndent","getScreenLastRowColumn","documentToScreenColumn","getDocumentLastRowColumn","docColumn","getRowSplitData","screenToDocumentRow","screenToDocumentColumn","rowLength","doCache","maxRow","foldStartRow","wrapRow","screenRowOffset","getScreenLength","screenRows","$getWidgetScreenLength","$setFontMetrics","fm","$enableVarChar","getCharacterWidth","wrap","$wrap","firstLineNumber","useSoftTabs","foldStyle","Search","$matchIterator","sr","sc","er","ec","skipCurrent","findAll","needle","$assembleRegExp","$isMultiLine","prevRange","replacement","preserveCase","$disableFakeMultiline","wholeWord","wordBoundary","addWordBoundary","caseSensitive","$assembleMultilineRegExp","backwards","forEachInLine","HashHandler","commandKeyBinding","addCommands","$singleCommand","MultiHashHandler","bindKey","isDefault","addCommand","removeCommand","_buildKeyHash","keepCommand","ckb","keyId","cmdGroup","keyPart","chain","binding","parseKeys","_addCommandToBinding","removeCommands","bindKeys","keyList","$keyChain","CommandManager","byName","$checkCommandState","isAvailable","returnValue","toggleRecording","$inReplay","recording","macro","$addCommandToMacro","oldMacro","replay","trimMacro","mac","description","showSettingsMenu","showErrorMarker","scrollIntoView","centerSelection","gotoLine","prompt","$type","multiSelectAction","getAllRanges","findNext","findPrevious","aceCommandGroup","navigateFileStart","navigateUp","times","navigateFileEnd","navigateDown","navigateWordLeft","navigateLineStart","navigateLeft","navigateWordRight","navigateLineEnd","navigateRight","selectPageDown","scrollPageDown","gotoPageDown","selectPageUp","scrollPageUp","gotoPageUp","jumpToMatching","$copyWithEmptySelection","$handlePaste","duplicateSelection","sortLines","modifyNumber","copyLinesUp","copyLinesDown","removeToLineStart","removeToLineEnd","removeWordLeft","removeWordRight","blockOutdent","blockIndent","splitLine","transposeLetters","transposeSelections","autoIndent","firstLineEndCol","selectedCount","insertLine","curLine","newRanges","exitMultiSelectMode","defaultCommands","Editor","getContainerElement","getTextAreaContainer","textarea","keyBinding","$search","$historyTracker","$initOperationListeners","_$emitInputEvent","setSession","$opResetTimer","$lastSel","prevOp","commandEvent","previousCommand","scrollSelectionIntoView","animateScrolling","sel","$mergeableCommands","$mergeUndoDeltas","prev","mergeableCommands","shouldMerge","mergeNextCommand","sequenceStartTime","keyboardHandler","$keybindingId","oldSession","$onDocumentChange","$onTokenizerUpdate","$onChangeTabSize","$onChangeWrapLimit","$onChangeWrapMode","$onChangeFold","$onChangeFrontMarker","$onChangeBackMarker","$onChangeBreakpoint","$onChangeAnnotation","$onCursorChange","$onScrollTopChange","$onScrollLeftChange","$onSelectionChange","onDocumentChange","onChangeMode","onTokenizerUpdate","onChangeTabSize","onChangeWrapLimit","onChangeWrapMode","onChangeFrontMarker","onChangeBackMarker","onChangeBreakpoint","onChangeAnnotation","onCursorChange","onScrollTopChange","onScrollLeftChange","onSelectionChange","updateFull","oldEditor","getSession","resize","onResize","setTheme","theme","getTheme","getFontSize","setFontSize","$highlightBrackets","$highlightPending","$bracketHighlight","markerIds","tagNamesRanges","getMatching","markerType","getHighlightIndentGuides","$textLayer","$highlightIndentGuide","$isFocused","showCursor","visualizeFocus","hideCursor","visualizeBlur","$cursorChange","updateCursor","$updateHighlightActiveLine","updateLines","scrollToY","scrollToX","$highlightActiveLine","$selectionStyle","$selectionColorConflict","$maxLines","$minLines","$highlightLineMarker","$selectionMarker","$highlightSelectedWord","$getSelectionHighLightRegexp","wordWithBoundary","updateFrontMarkers","updateBackMarkers","updateBreakpoints","updateText","getSelectedText","nl","copyLine","inVirtualSelectionMode","isFullLine","getBehavioursEnabled","d","lineState","shouldOutdent","$enableAutoIndent","lineIndent","selectedRange","currIndent","prevLineState","composition","applyComposition","forEachSelection","setScrollSpeed","getScrollSpeed","setDragDelay","setSelectionStyle","setHighlightActiveLine","shouldHighlight","getHighlightActiveLine","setHighlightGutterLine","getHighlightGutterLine","setHighlightSelectedWord","getHighlightSelectedWord","setAnimatedScroll","shouldAnimate","getAnimatedScroll","getShowInvisibles","setDisplayIndentGuides","getDisplayIndentGuides","setHighlightIndentGuides","setShowPrintMargin","showPrintMargin","getShowPrintMargin","setPrintMarginColumn","getPrintMarginColumn","setBehavioursEnabled","enabled","setWrapBehavioursEnabled","setShowFoldWidgets","getShowFoldWidgets","setFadeFoldWidgets","fade","getFadeFoldWidgets","new_range","swap","originalRange","$getSelectedRows","getNumberAt","_numberRx","amount","charRange","isFinite","nr","fp","decimals","nnr","toFixed","replaceRange","toggleWord","$toggleWordPairs","currWordStart","wordParts","curLength","itLength","that","reg","wordPairs","negate","firstCondition","res","endPoint","moved","totalDiff","rangeIndex","subRows","compositionState","showComposition","setCompositionText","hideComposition","getFirstVisibleRow","getLastVisibleRow","isRowVisible","isRowFullyVisible","getFirstFullyVisibleRow","getLastFullyVisibleRow","$getVisibleRowCount","getScrollBottomRow","getScrollTopRow","$moveByPage","scrollToRow","scrollToLine","center","animate","alignCursor","getCursorPositionScreen","expand","tokenCount","matchType","bracketType","brackets","tagsRanges","lineNumber","navigateTo","replaced","$tryReplace","replaceAll","getLastSearchOptions","newRange","revealRange","setAutoScrollEditorIntoView","shouldScroll","$scrollAnchor","scrollAnchor","onChangeSelection","onBeforeRender","onAfterRender","searchBox","$pixelPos","$cursorStyle","cursorLayer","setSmoothBlinking","isBlinking","selectionStyle","highlightActiveLine","highlightSelectedWord","copyWithEmptySelection","behavioursEnabled","wrapBehavioursEnabled","enableAutoIndent","autoScrollEditorIntoView","showLineNumbers","setShowLineNumbers","$loop","CHANGE_GUTTER","$relativeLineNumbers","relativeNumberRenderer","relativeLineNumbers","$showLineNumbers","$updatePlaceholder","$composition","placeholderNode","$placeholder","content","customScrollbar","hScrollBarAlwaysVisible","vScrollBarAlwaysVisible","highlightGutterLine","animatedScroll","printMarginColumn","printMargin","fadeFoldWidgets","showFoldWidgets","displayIndentGuides","highlightIndentGuides","showGutter","fontFamily","maxLines","minLines","scrollPastEnd","fixedWidthGutter","hasCssTransforms","maxPixelHeight","getText","lastLineNumber","$renderer","UndoManager","$maxRev","$undoDepth","allowMerge","$lastDelta","$keepRedoStack","$redoStack","lastDeltas","undoStackLength","$undoStack","$rev","rev","markIgnored","ignore","getRevision","getDeltas","getChangedRanges","getChangedLines","deltaSet","swapped","swapGroups","rearrangeUndoStack","$redoStackBaseRev","undoSelectionRange","$syncRev","redoStack","deltaSets","moveDeltasByOne","rebaseRedoStack","redoSelectionRange","nextDelta","mark","canUndo","canRedo","bookmark","isAtBookmark","isClean","markClean","$prettyPrint","stringifyDelta","stringifyRange","d1","d2","i1","i2","ds1","ds2","xform","c1","splitDelta","shiftPos","rowsBefore","otherLines","cloneDelta","xformed","Lines","canvasHeight","cells","cellCache","$offsetCoefficient","moveContainer","firstRowScreen","pageChanged","oldConfig","newConfig","computeLineTop","screenTop","screenPage","computeLineHeight","$cacheCell","cell","fragment","insertAdjacentElement","createCell","initElement","Gutter","parentEl","$showFoldWidgets","gutterWidth","$updateAnnotations","onCreateCell","textNode","foldWidget","rowInfo","annoText","gutterOffset","oldLastRow","$updateCursorRow","$renderCell","$updateGutterWidth","gutterRenderer","$firstLineNumber","lastLineText","$fixedWidth","padding","$padding","$computePadding","ceil","$highlightGutterLine","$cursorRow","updateLineHighlight","$cursorCell","scrollLines","$renderLines","childNodes","breakpoints","decorations","foldHeight","getShowLineNumbers","paddingLeft","borderRightWidth","paddingRight","Marker","setPadding","setMarkers","markers","elt","css","$getTop","drawFullLineMarker","drawScreenLineMarker","drawTextMarker","drawMultiLineMarker","childElementCount","lastChild","stringBuilder","extraStyle","curr","lineRange","range1","drawBidiSingleLineMarker","radiusClass","extraLength","Text","$updateEolChar","EOF_CHAR","EOL_CHAR_LF","EOL_CHAR_CRLF","EOL_CHAR","TAB_CHAR","SPACE_CHAR","margin","getLineHeight","$fontMetrics","measure","$pollSizeChanges","checkForSizeChanges","$pollSizeChangesTimer","$computeTabString","showSpaces","showTabs","showEOL","$highlightIndentGuides","$tabStrings","tabStr","span","$indentGuideRe","spaceClass","spaceContent","tabClass","tabContent","lineElements","lineElementsIdx","heightChanged","lineElement","$renderLine","$renderLinesFragment","lineEl","$useLineGroups","$textToken","$renderToken","valueFragment","simpleSpace","controlCharacter","cjkSpace","cjk","cloneNode","com","renderIndentGuide","cols","$highlightIndentGuideMarker","indentLevel","initialIndent","elementIndentLevel","currentIndent","$renderHighlightIndentGuide","$clearActiveIndentGuide","classList","$setIndentGuideActive","$createLineElement","$renderWrappedLine","splitChars","$renderOverflowMessage","$renderSimpleLine","overflowEl","$getFoldLineTokens","lastLineEl","invisibleEl","renderTokens","addTokens","Cursor","isVisible","blinkInterval","smoothBlinking","cursors","addCursor","$updateCursors","$updateOpacity","$startCssAnimation","animationDuration","$isAnimating","$stopCssAnimation","blinking","restartTimer","setBlinkInterval","removeCursor","intervalId","timeoutId","$isSmoothBlinking","blink","onScreen","isCursorInView","pixelPos","maxHeight","$selectionMarkers","cursorIndex","drawCursor","$setOverwrite","MAX_SCROLL_H","ScrollBar","classSuffix","setVisible","skipEvent","onScroll","coeff","VScrollBar","scrollHeight","$scrollbarWidth","$minWidth","setHeight","setInnerHeight","setScrollHeight","HScrollBar","setWidth","setInnerWidth","setScrollWidth","ScrollBarV","ScrollBarH","VScrollWidth","HScrollHeight","eType","mousePageY","startTop","thumbTop","scrollTopFromThumbTop","thumbHeight","pageHeight","viewHeight","slideHeight","scrollWidth","mousePageX","startLeft","thumbLeft","scrollLeftFromThumbLeft","thumbWidth","pageWidth","viewWidth","slideWidth","RenderLoop","onRender","pending","changes","$recursionLimit","_flush","change","clear","CHAR_COUNT","USE_OBSERVER","ResizeObserver","FontMetrics","$setMeasureNodeStyles","$measureNode","$addObserver","isRoot","visibility","whiteSpace","font","$measureSizes","fontWeight","boldSize","charSizes","allowBoldFonts","$observer","observe","setPolling","disconnect","$getZoom","getZoom","zoom","$initTransformMeasureNodes","transformCoordinates","clientPos","elPos","mul","solve","l1","l2","det","sub","m2","ut","u","f","Decorator","canvas","pixelRatio","heightRatio","canvasWidth","minDecorationHeight","halfMinDecorationHeight","zIndex","colors","dark","light","$updateDecorators","ctx","getContext","clearRect","priorities","priority","compensateFold","compensateFoldRows","currentY","y1","y2","yCenter","fillStyle","fillRect","GutterLayer","MarkerLayer","TextLayer","CursorLayer","HScrollBarCustom","VScrollBarCustom","editorCss","HIDE_TEXTAREA","VirtualRenderer","onGutterResize","$markerBack","textLayer","$markerFront","$horizScroll","$vScroll","scrollBar","$scrollAnimation","scrollMargin","updateCharacterSize","$size","scrollerHeight","scrollerWidth","$dirty","minHeight","v","$renderChanges","defaultView","CHANGE_FULL","CHANGE_CURSOR","CHANGE_MARKER","CHANGE_SCROLL","CHANGE_LINES","CHANGE_TEXT","CHANGE_SIZE","CHANGE_MARKER_BACK","CHANGE_MARKER_FRONT","CHANGE_H_SCROLL","$allowBoldFonts","$updatePrintMargin","onChangeNewLineMode","$changedLines","updateFontSize","$changes","$updateSizeAsync","resizing","$updateCachedSize","$customScrollbar","$updateCustomScrollbar","$extraHeight","oldSize","$showGutter","$computeLayerConfig","availableWidth","$showPrintMargin","$printMarginColumn","$animatedScroll","getShowGutter","setShowGutter","$printMarginEl","containerEl","posTop","posLeft","setScrollMargin","sm","setMargin","getHScrollBarAlwaysVisible","$hScrollBarAlwaysVisible","setHScrollBarAlwaysVisible","alwaysVisible","getVScrollBarAlwaysVisible","$vScrollBarAlwaysVisible","setVScrollBarAlwaysVisible","$updateScrollBarV","$scrollPastEnd","$updateScrollBarH","$frozen","freeze","unfreeze","st","$scrollDecorator","$updateLines","$autosize","desiredHeight","$maxPixelHeight","$gutterWidth","hideScrollbars","longestLine","$getLongestLine","horizScroll","hScrollChanged","vScrollBefore","vScrollChanged","firstRowHeight","lineCount","charCount","$viewMargin","topMargin","bottomMargin","alignment","STEPS","$calcSteps","fromValue","toValue","x_min","steps","initialScroll","oldSteps","$timer","scrollTo","canvasPos","$hasCssTransforms","$blockCursor","$useTextareaForIME","addToken","removeExtraToken","newToken","$themeId","$theme","setMouseCursor","attachToShadowRoot","workerUrl","Worker","blob","Blob","blobBuilder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","getBlob","$workerBlob","blobURL","URL","webkitURL","createObjectURL","WorkerClient","worker","$createWorkerFromOldConfig","$sendDeltaQueue","changeListener","onMessage","callbackId","callbacks","onmessage","topLevelNamespaces","classname","importScripts","nameToUrl","toUrl","normalizePath","$normalizePath","tlns","deltaQueue","$doc","cmd","emit","ex","attachToDocument","q","UIWorkerClient","main","emitSync","sender","messageBuffer","workerClient","processNext","setEmitSync","Main","PlaceHolder","others","mainClass","othersClass","$onUpdate","onUpdate","$others","undoStack","$undostack","$undoStackDepth","setup","other","showOtherMarkers","othersActive","hideOtherMarkers","updateAnchors","lengthDiff","inMainRange","distanceFromStart","newPos","otherPos","updateMarkers","updateMarker","undosRequired","isSamePoint","alt","ctrl","accel","selectionMode","isMultiSelect","mouseX","mouseY","screenAnchor","screenCursor","$enableJumpToDef","$blockSelectEnabled","addSelectionMarker","oldRange","removeSelectionMarker","tmpSel","rectSel","blockSelect","newCursor","removeSelectionMarkers","rectangularRangeBlock","updateSelectionMarkers","onSelectionInterval","selectMoreLines","selectMore","joinSelections","splitIntoLines","alignCursors","multiSelectCommands","getSelectionMarkers","$blockChangeEvents","$onAddRange","$onRemoveRange","mergeOverlappingRanges","lastRange","$initRangeList","toggleBlockSelection","includeEmptyLines","xBackwards","startOffsetX","endOffsetX","docEnd","yBackwards","MultiSelect","$multiselectOnSessionChange","$onMultiSelect","$onSingleSelect","onSessionChange","$checkMultiselectChange","altCursor","altDown","addAltCursorListeners","selectionMarkerCount","markerList","$onMultiSelectExec","inVirtualMode","keepOrder","$byLines","cmdResult","anim","buf","additive","skip","screenLead","toRemove","words","stopAtFirst","sameRowRanges","maxCol","minSpace","spaceOffsets","spaceOffset","fr","lr","guessRange","$reAlignText","forceLeft","startW","textW","endW","isLeftAligned","isRightAligned","alignLeft","enableMultiselect","enableBlockSelect","FoldMode","foldingStartMarker","foldingStopMarker","indentationBlock","startLevel","openingBracketBlock","closingBracketBlock","LineWidgets","widgetManager","updateOnChange","renderWidgets","measureWidgets","_changedWidgets","$onChangeEditor","updateOnFold","_inDocument","removeLineWidget","$updateRows","noWidgets","$oldWidget","$registerLineWidget","addLineWidget","coverGutter","pixelHeight","$fold","onWidgetChanged","w1","getWidgetsAtRow","changedWidgets","fixedWidth","coverLine","fullWidth","oldWidget","gutterAnno","comparator","binarySearch","matched","findAnnotations","arrow","onmousedown","Renderer","edit","_id","env","tagName","oldNode","createEditSession","Split","BELOW","BESIDE","$container","$splits","$editorCSS","$editors","$orientation","setSplits","$cEditor","$createEditor","$fontSize","getSplits","getEditor","getCurrentEditor","keybinding","$cloneSession","isUsed","getOrientation","setOrientation","orientation","editorWidth","editorHeight","diff_match_patch","Diff_Timeout","Diff_EditCost","Match_Threshold","Match_Distance","Patch_DeleteThreshold","Patch_Margin","Match_MaxBits","DIFF_DELETE","Diff","op","diff_main","text1","text2","opt_checklines","opt_deadline","getTime","deadline","checklines","commonlength","diff_commonPrefix","commonprefix","diff_commonSuffix","commonsuffix","diffs","diff_compute_","diff_cleanupMerge","longtext","shorttext","hm","diff_halfMatch_","text1_a","text1_b","text2_a","text2_b","mid_common","diffs_a","diffs_b","diff_lineMode_","diff_bisect_","diff_linesToChars_","chars1","chars2","linearray","lineArray","diff_charsToLines_","diff_cleanupSemantic","pointer","count_delete","count_insert","text_delete","text_insert","subDiff","text1_length","text2_length","max_d","v_offset","v_length","v1","v2","front","k1start","k1end","k2start","k2end","k1","k1_offset","x1","k2_offset","x2","diff_bisectSplit_","k2","text1a","text2a","text1b","text2b","diffsb","lineHash","diff_linesToCharsMunge_","lineStart","lineArrayLength","pointermin","pointermax","pointermid","pointerstart","pointerend","diff_commonOverlap_","text_length","best","pattern","dmp","diff_halfMatchI_","best_longtext_a","best_longtext_b","best_shorttext_a","best_shorttext_b","seed","best_common","prefixLength","suffixLength","hm1","hm2","equalities","equalitiesLength","lastEquality","length_insertions1","length_deletions1","length_insertions2","length_deletions2","diff_cleanupSemanticLossless","deletion","insertion","overlap_length1","overlap_length2","diff_cleanupSemanticScore_","one","two","char1","char2","nonAlphaNumeric1","nonAlphaNumericRegex_","nonAlphaNumeric2","whitespace1","whitespaceRegex_","whitespace2","lineBreak1","linebreakRegex_","lineBreak2","blankLine1","blanklineEndRegex_","blankLine2","blanklineStartRegex_","equality1","equality2","commonOffset","commonString","bestEquality1","bestEdit","bestEquality2","bestScore","diff_cleanupEfficiency","pre_ins","pre_del","post_ins","post_del","diff_xIndex","loc","last_chars1","last_chars2","diff_prettyHtml","pattern_amp","pattern_lt","pattern_gt","pattern_para","diff_text1","diff_text2","diff_levenshtein","levenshtein","insertions","deletions","diff_toDelta","encodeURI","diff_fromDelta","diffsLength","decodeURI","match_main","match_bitap_","match_alphabet_","match_bitapScore_","accuracy","proximity","score_threshold","best_loc","bin_min","bin_mid","matchmask","last_rd","bin_max","finish","rd","charMatch","patch_addContext_","patch","start2","length1","start1","length2","patch_make","opt_b","opt_c","patches","patch_obj","patchDiffLength","char_count1","char_count2","prepatch_text","postpatch_text","diff_type","diff_text","patch_deepCopy","patchesCopy","patchCopy","patch_apply","nullPadding","patch_addPadding","patch_splitMax","results","start_loc","expected_loc","end_loc","index2","index1","paddingLength","patch_size","bigpatch","precontext","empty","postcontext","patch_toText","patch_fromText","textline","textPointer","patchHeader","sign","HASH_UNDEFINED","funcTag","genTag","reIsDeepProp","reIsPlainProp","reLeadingDot","rePropName","reEscapeChar","reIsHostCtor","freeGlobal","g","freeSelf","Function","uid","arrayProto","funcProto","objectProto","coreJsData","maskSrcKey","IE_PROTO","funcToString","objectToString","reIsNative","Symbol","Map","getNative","nativeCreate","symbolProto","symbolToString","Hash","entries","entry","ListCache","MapCache","assocIndexOf","baseGet","object","isSymbol","isKey","stringToPath","toKey","baseIsNative","isObject","isFunction","isHostObject","toSource","getMapData","__data__","has","memoize","baseToString","number","resolver","memoized","Cache","isObjectLike","defaultValue","extendStatics","__extends","setPrototypeOf","__proto__","__","__assign","ace_builds_1","PropTypes","React","editorOptions_1","getAceInstance","ReactAce","_super","_this","editorEvents","debounce","isInShadow","componentDidMount","_a","onBeforeLoad","onValidate","wrapEnabled","_b","refEditor","editorProps","debounceChangePeriod","navigateToFileEnd","updatePlaceholder","handleMarkers","availableOptions","editorOptions","handleOptions","componentDidUpdate","prevProps","oldProps","nextProps","appliedClassesArray_1","oldClass","valueChanged","silent","cursorStart","handleScrollMargins","margins","componentWillUnmount","currentMarkers","showPlaceholder","updateRef","render","divStyle","ref","propTypes","oneOfType","bool","enableSnippets","enableBasicAutocompletion","enableLiveAutocompletion","defaultProps","Component","split_1","DiffMatchPatch","DiffComponent","lhString","rhString","diffedLines","generateDiffedLines","setCodeMarkers","C","chunkType","firstChar","lastChar","linesToHighlight","codeEditorSettings","newMarkerSet","markerObj","default","acequire","fn","ace_1","ext_split_1","SplitComponent","splitEditor","defaultValueForEditor","valueForEditor","newAnnotations","newMarkers","sp","nextValue","oldAnnotations","oldMarkers","value_1","value_2","value_3","arrayOf"],"sourceRoot":""}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy